@automattic/jetpack-critical-css-gen 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE.txt +357 -0
  3. package/README.md +24 -0
  4. package/SECURITY.md +47 -0
  5. package/build-browser/bundle.full.js +37567 -0
  6. package/build-browser/bundle.full.js.map +1 -0
  7. package/build-browser/bundle.js +4 -0
  8. package/build-browser/bundle.js.map +1 -0
  9. package/build-node/browser-interface-playwright.d.ts +53 -0
  10. package/build-node/browser-interface-playwright.js +94 -0
  11. package/build-node/browser-interface-playwright.js.map +1 -0
  12. package/build-node/browser-interface.d.ts +77 -0
  13. package/build-node/browser-interface.js +124 -0
  14. package/build-node/browser-interface.js.map +1 -0
  15. package/build-node/css-file-set.d.ts +100 -0
  16. package/build-node/css-file-set.js +210 -0
  17. package/build-node/css-file-set.js.map +1 -0
  18. package/build-node/errors.d.ts +101 -0
  19. package/build-node/errors.js +103 -0
  20. package/build-node/errors.js.map +1 -0
  21. package/build-node/generate-critical-css.d.ts +24 -0
  22. package/build-node/generate-critical-css.js +162 -0
  23. package/build-node/generate-critical-css.js.map +1 -0
  24. package/build-node/ignored-pseudo-elements.d.ts +8 -0
  25. package/build-node/ignored-pseudo-elements.js +35 -0
  26. package/build-node/ignored-pseudo-elements.js.map +1 -0
  27. package/build-node/minify-css.d.ts +11 -0
  28. package/build-node/minify-css.js +19 -0
  29. package/build-node/minify-css.js.map +1 -0
  30. package/build-node/node.d.ts +5 -0
  31. package/build-node/node.js +6 -0
  32. package/build-node/node.js.map +1 -0
  33. package/build-node/object-promise-all.d.ts +12 -0
  34. package/build-node/object-promise-all.js +16 -0
  35. package/build-node/object-promise-all.js.map +1 -0
  36. package/build-node/style-ast.d.ts +164 -0
  37. package/build-node/style-ast.js +540 -0
  38. package/build-node/style-ast.js.map +1 -0
  39. package/build-node/types.d.ts +14 -0
  40. package/build-node/types.js +2 -0
  41. package/build-node/types.js.map +1 -0
  42. package/package.json +76 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sources":["../src/browser-interface.ts","../src/errors.ts","../node_modules/css-tree/lib/tokenizer/types.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/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/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","../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/walker/create.js","../node_modules/css-tree/lib/definition-syntax/generate.js","../node_modules/css-tree/lib/lexer/error.js","../node_modules/css-tree/lib/utils/names.js","../node_modules/css-tree/lib/lexer/generic-const.js","../node_modules/css-tree/lib/lexer/generic-an-plus-b.js","../node_modules/css-tree/lib/lexer/generic-urange.js","../node_modules/css-tree/lib/lexer/generic.js","../node_modules/css-tree/lib/lexer/units.js","../node_modules/css-tree/lib/definition-syntax/SyntaxError.js","../node_modules/css-tree/lib/definition-syntax/tokenizer.js","../node_modules/css-tree/lib/definition-syntax/parse.js","../node_modules/css-tree/lib/definition-syntax/walk.js","../node_modules/css-tree/lib/lexer/prepare-tokens.js","../node_modules/css-tree/lib/lexer/match-graph.js","../node_modules/css-tree/lib/lexer/match.js","../node_modules/css-tree/lib/lexer/trace.js","../node_modules/css-tree/lib/lexer/search.js","../node_modules/css-tree/lib/lexer/structure.js","../node_modules/css-tree/lib/lexer/Lexer.js","../node_modules/css-tree/lib/syntax/config/mix.js","../node_modules/css-tree/lib/syntax/create.js","../node_modules/css-tree/lib/convertor/create.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/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/Function.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/MediaFeature.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/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/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/lexer.js","../node_modules/css-tree/dist/data.js","../node_modules/css-tree/lib/syntax/scope/default.js","../node_modules/css-tree/lib/syntax/scope/atrulePrelude.js","../node_modules/css-tree/lib/syntax/scope/selector.js","../node_modules/css-tree/lib/syntax/scope/value.js","../node_modules/css-tree/lib/syntax/function/expression.js","../node_modules/css-tree/lib/syntax/function/var.js","../node_modules/css-tree/lib/syntax/atrule/supports.js","../node_modules/css-tree/lib/syntax/atrule/index.js","../node_modules/css-tree/lib/syntax/atrule/font-face.js","../node_modules/css-tree/lib/syntax/atrule/import.js","../node_modules/css-tree/lib/syntax/atrule/media.js","../node_modules/css-tree/lib/syntax/atrule/nest.js","../node_modules/css-tree/lib/syntax/atrule/page.js","../node_modules/css-tree/lib/syntax/pseudo/index.js","../node_modules/css-tree/lib/syntax/index.js","../node_modules/css-tree/lib/syntax/config/parser.js","../node_modules/css-tree/lib/syntax/config/walker.js","../node_modules/css-tree/lib/utils/clone.js","../node_modules/css-tree/lib/index.js","../src/style-ast.ts","../src/css-file-set.ts","../src/ignored-pseudo-elements.ts","../node_modules/clean-css/lib/optimizer/level-0/optimize.js","../node_modules/clean-css/lib/utils/natural-compare.js","../node_modules/clean-css/lib/optimizer/level-1/sort-selectors.js","../node_modules/clean-css/lib/utils/override.js","../node_modules/clean-css/lib/options/format.js","../node_modules/clean-css/lib/tokenizer/marker.js","../node_modules/clean-css/lib/utils/format-position.js","../node_modules/clean-css/lib/optimizer/level-1/tidy-rules.js","../node_modules/clean-css/lib/optimizer/level-1/tidy-block.js","../node_modules/clean-css/lib/optimizer/level-1/tidy-at-rule.js","../node_modules/clean-css/lib/optimizer/hack.js","../node_modules/clean-css/lib/optimizer/remove-unused.js","../node_modules/clean-css/lib/optimizer/restore-from-optimizing.js","../node_modules/clean-css/lib/tokenizer/token.js","../node_modules/clean-css/lib/optimizer/wrap-for-optimizing.js","../node_modules/clean-css/lib/optimizer/invalid-property-error.js","../node_modules/clean-css/lib/optimizer/configuration/break-up.js","../node_modules/clean-css/lib/optimizer/vendor-prefixes.js","../node_modules/clean-css/lib/optimizer/configuration/properties/understandable.js","../node_modules/clean-css/lib/optimizer/configuration/can-override.js","../node_modules/clean-css/lib/optimizer/clone.js","../node_modules/clean-css/lib/optimizer/configuration/restore.js","../node_modules/clean-css/lib/options/rounding-precision.js","../node_modules/clean-css/lib/options/optimization-level.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers/background.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers/box-shadow.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers/border-radius.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers/filter.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers/font-weight.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers/margin.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers/outline.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers/padding.js","../node_modules/clean-css/lib/optimizer/level-1/property-optimizers.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hex.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hsl.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-rgb.js","../node_modules/clean-css/lib/utils/split.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/degrees.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/starts-as-url.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/fraction.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/precision.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/text-quotes.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/time.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/unit.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-prefix.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-quotes.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-whitespace.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/whitespace.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers/zero.js","../node_modules/clean-css/lib/optimizer/level-1/value-optimizers.js","../node_modules/clean-css/lib/optimizer/configuration.js","../node_modules/clean-css/lib/writer/helpers.js","../node_modules/clean-css/lib/writer/one-time.js","../node_modules/clean-css/lib/optimizer/level-1/optimize.js","../node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js","../node_modules/clean-css/lib/optimizer/level-2/properties/every-values-pair.js","../node_modules/clean-css/lib/optimizer/level-2/properties/has-inherit.js","../node_modules/clean-css/lib/optimizer/level-2/properties/has-same-values.js","../node_modules/clean-css/lib/optimizer/level-2/properties/populate-components.js","../node_modules/clean-css/lib/optimizer/level-2/restore-with-components.js","../node_modules/clean-css/lib/optimizer/level-2/properties/merge-into-shorthands.js","../node_modules/clean-css/lib/optimizer/level-2/properties/has-unset.js","../node_modules/clean-css/lib/optimizer/level-2/properties/find-component-in.js","../node_modules/clean-css/lib/optimizer/level-2/properties/is-component-of.js","../node_modules/clean-css/lib/optimizer/level-2/properties/is-mergeable-shorthand.js","../node_modules/clean-css/lib/optimizer/level-2/properties/overrides-non-component-shorthand.js","../node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js","../node_modules/clean-css/lib/optimizer/level-2/properties/optimize.js","../node_modules/clean-css/lib/optimizer/level-2/merge-adjacent.js","../node_modules/clean-css/lib/optimizer/level-2/rules-overlap.js","../node_modules/clean-css/lib/optimizer/level-2/specificity.js","../node_modules/clean-css/lib/optimizer/level-2/specificities-overlap.js","../node_modules/clean-css/lib/optimizer/level-2/reorderable.js","../node_modules/clean-css/lib/optimizer/level-2/extract-properties.js","../node_modules/clean-css/lib/optimizer/level-2/merge-media-queries.js","../node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-body.js","../node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-selector.js","../node_modules/clean-css/lib/utils/clone-array.js","../node_modules/clean-css/lib/optimizer/level-2/reduce-non-adjacent.js","../node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-font-at-rules.js","../node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-media-queries.js","../node_modules/clean-css/lib/optimizer/level-2/remove-duplicates.js","../node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js","../node_modules/clean-css/lib/optimizer/level-2/tidy-rule-duplicates.js","../node_modules/clean-css/lib/optimizer/level-2/restructure.js","../node_modules/clean-css/lib/optimizer/level-2/optimize.js","../node_modules/clean-css/lib/optimizer/validator.js","../node_modules/clean-css/lib/options/compatibility.js","../node_modules/clean-css/lib/utils/is-http-resource.js","../node_modules/clean-css/lib/utils/is-https-resource.js","../node_modules/clean-css/lib/reader/load-remote-resource.js","../node_modules/clean-css/lib/options/fetch.js","../node_modules/clean-css/lib/options/inline.js","../node_modules/clean-css/lib/options/inline-request.js","../node_modules/clean-css/lib/options/inline-timeout.js","../node_modules/clean-css/lib/options/plugins.js","../node_modules/clean-css/lib/options/rebase.js","../node_modules/clean-css/lib/options/rebase-to.js","../node_modules/source-map/lib/base64.js","../node_modules/source-map/lib/base64-vlq.js","../node_modules/source-map/lib/util.js","../node_modules/source-map/lib/array-set.js","../node_modules/source-map/lib/mapping-list.js","../node_modules/source-map/lib/source-map-generator.js","../node_modules/source-map/lib/binary-search.js","../78e4ab43e5837046523f93c1fe063c","../node_modules/source-map/lib/read-wasm.js","../node_modules/source-map/lib/wasm.js","../node_modules/source-map/lib/source-map-consumer.js","../node_modules/source-map/lib/source-node.js","../node_modules/source-map/source-map.js","../node_modules/clean-css/lib/reader/input-source-map-tracker.js","../node_modules/clean-css/lib/utils/is-remote-resource.js","../node_modules/clean-css/lib/utils/has-protocol.js","../node_modules/clean-css/lib/reader/is-allowed-resource.js","../node_modules/clean-css/lib/reader/match-data-uri.js","../node_modules/clean-css/lib/reader/rebase-local-map.js","../node_modules/clean-css/lib/reader/rebase-remote-map.js","../node_modules/clean-css/lib/utils/is-data-uri-resource.js","../node_modules/clean-css/lib/reader/apply-source-maps.js","../node_modules/clean-css/lib/reader/extract-import-url-and-media.js","../node_modules/clean-css/lib/reader/load-original-sources.js","../node_modules/clean-css/lib/reader/normalize-path.js","../node_modules/clean-css/lib/reader/restore-import.js","../node_modules/clean-css/lib/reader/rewrite-url.js","../node_modules/clean-css/lib/utils/is-import.js","../node_modules/clean-css/lib/reader/rebase.js","../node_modules/clean-css/lib/tokenizer/tokenize.js","../node_modules/clean-css/lib/reader/read-sources.js","../node_modules/clean-css/lib/writer/simple.js","../node_modules/clean-css/lib/writer/source-maps.js","../node_modules/clean-css/lib/clean.js","../src/generate-critical-css.ts","../src/browser-interface-iframe.ts","../src/minify-css.ts","../src/browser.ts"],"sourcesContent":[null,null,"// CSS Syntax Module Level 3\n// https://www.w3.org/TR/css-syntax-3/\nexport const EOF = 0; // <EOF-token>\nexport const Ident = 1; // <ident-token>\nexport const Function = 2; // <function-token>\nexport const AtKeyword = 3; // <at-keyword-token>\nexport const Hash = 4; // <hash-token>\nexport const String = 5; // <string-token>\nexport const BadString = 6; // <bad-string-token>\nexport const Url = 7; // <url-token>\nexport const BadUrl = 8; // <bad-url-token>\nexport const Delim = 9; // <delim-token>\nexport const Number = 10; // <number-token>\nexport const Percentage = 11; // <percentage-token>\nexport const Dimension = 12; // <dimension-token>\nexport const WhiteSpace = 13; // <whitespace-token>\nexport const CDO = 14; // <CDO-token>\nexport const CDC = 15; // <CDC-token>\nexport const Colon = 16; // <colon-token> :\nexport const Semicolon = 17; // <semicolon-token> ;\nexport const Comma = 18; // <comma-token> ,\nexport const LeftSquareBracket = 19; // <[-token>\nexport const RightSquareBracket = 20; // <]-token>\nexport const LeftParenthesis = 21; // <(-token>\nexport const RightParenthesis = 22; // <)-token>\nexport const LeftCurlyBracket = 23; // <{-token>\nexport const RightCurlyBracket = 24; // <}-token>\nexport const Comment = 25;\n","const EOF = 0;\n\n// https://drafts.csswg.org/css-syntax-3/\n// § 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>.\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// § 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// § 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// § 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// § 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// §4.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// §4.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// § 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// § 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];\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() {\n this.lines = null;\n this.columns = null;\n this.computed = false;\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 balancePair = new Map([\n [FunctionToken, RightParenthesis],\n [LeftParenthesis, RightParenthesis],\n [LeftSquareBracket, RightSquareBracket],\n [LeftCurlyBracket, RightCurlyBracket]\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 balanceCloseType = 0;\n let balanceStart = 0;\n let firstCharOffset = -1;\n\n // capture buffers\n this.offsetAndType = null;\n this.balance = null;\n\n tokenize(source, (type, start, end) => {\n switch (type) {\n default:\n balance[tokenCount] = sourceLength;\n break;\n\n case balanceCloseType: {\n let balancePrev = balanceStart & OFFSET_MASK;\n balanceStart = balance[balancePrev];\n balanceCloseType = balanceStart >> TYPE_SHIFT;\n balance[tokenCount] = balancePrev;\n balance[balancePrev++] = tokenCount;\n for (; balancePrev < tokenCount; balancePrev++) {\n if (balance[balancePrev] === sourceLength) {\n balance[balancePrev] = tokenCount;\n }\n }\n break;\n }\n\n case LeftParenthesis:\n case FunctionToken:\n case LeftSquareBracket:\n case LeftCurlyBracket:\n balance[tokenCount] = balanceStart;\n balanceCloseType = balancePair.get(type);\n balanceStart = (balanceCloseType << TYPE_SHIFT) | tokenCount;\n break;\n }\n\n offsetAndType[tokenCount++] = (type << TYPE_SHIFT) | end;\n if (firstCharOffset === -1) {\n firstCharOffset = start;\n }\n });\n\n // finalize buffers\n offsetAndType[tokenCount] = (EOF << TYPE_SHIFT) | sourceLength; // <EOF-token>\n balance[tokenCount] = sourceLength;\n balance[sourceLength] = sourceLength; // prevents false positive balance match with any token\n while (balanceStart !== 0) {\n const balancePrev = balanceStart & OFFSET_MASK;\n balanceStart = balance[balancePrev];\n balance[balancePrev] = sourceLength;\n }\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 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 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 substrToCursor(start) {\n return this.source.substring(start, this.tokenStart);\n }\n\n isBalanceEdge(pos) {\n return this.balance[this.tokenIndex] < pos;\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;\n let offset;\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\n if (this.balance[balanceEnd] === cursor) {\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 // § 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>’s 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 // § 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’s 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 // § 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>’s 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>’s value.\n }\n }\n }\n\n // § 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’s 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’t 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>’s 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>’s 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 // § 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>’s 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>’s 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","//\n// list\n// ┌──────┐\n// ┌──────────────┼─head │\n// │ │ tail─┼──────────────┐\n// │ └──────┘ │\n// ▼ ▼\n// item item item item\n// ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐\n// null ◀──┼─prev │◀───┼─prev │◀───┼─prev │◀───┼─prev │\n// │ next─┼───▶│ next─┼───▶│ next─┼───▶│ next─┼──▶ null\n// ├──────┤ ├──────┤ ├──────┤ ├──────┤\n// │ data │ │ data │ │ data │ │ data │\n// └──────┘ └──────┘ └──────┘ └──────┘\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 }, 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 lines = 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).join('\\n');\n}\n\nexport function SyntaxError(message, source, offset, line, column) {\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 }, isNaN(extraLines) ? 0 : extraLines);\n },\n get formattedMessage() {\n return (\n `Parse error: ${message}\\n` +\n sourceFragment({ source, line, column }, 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\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 in 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 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 in config.parseContext) {\n switch (typeof config.parseContext[name]) {\n case 'function':\n parseConfig.context[name] = config.parseContext[name];\n break;\n\n case 'string':\n parseConfig.context[name] = createParseContext(config.parseContext[name]);\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() {\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 parseWithFallback(consumer, fallback) {\n const startToken = this.tokenIndex;\n\n try {\n return consumer.call(this);\n } catch (e) {\n if (onParseErrorThrow) {\n throw e;\n }\n\n const fallbackNode = fallback.call(this, startToken);\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) {\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 );\n }\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', onComment } = options;\n\n if (context in parser.context === false) {\n throw new Error('Unknown context `' + context + '`');\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","/* -*- 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 // “sources” entry. This value is prepended to the individual\n // entries in the “source” 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 // “sourceRoot”, 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 while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\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 { 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 WhiteSpace,\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\nconst code = (type, value) => {\n if (type === Delim) {\n type = value;\n }\n\n if (typeof type === 'string') {\n const charCode = type.charCodeAt(0);\n return charCode > 0x7F ? 0x8000 : charCode << 8;\n }\n\n return type;\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 << 16 | nextCharCode << 8)\n : isWhiteSpaceRequired.has(prevCode << 16 | nextCode);\n\n if (emitWs) {\n this.emit(' ', WhiteSpace, true);\n }\n\n return nextCode;\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\nfunction processChunk(chunk) {\n tokenize(chunk, (type, start, end) => {\n this.token(type, chunk.slice(start, end));\n });\n}\n\nexport function createGenerator(config) {\n const types = new Map();\n\n for (let name in config.node) {\n const item = config.node[name];\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) {\n prevCode = this.tokenBefore(prevCode, type, value);\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: processChunk\n };\n\n handlers.node(node);\n\n return handlers.result();\n };\n};\n","const { hasOwnProperty } = Object.prototype;\nconst noop = function() {};\n\nfunction ensureFunction(value) {\n return typeof value === 'function' ? value : noop;\n}\n\nfunction invokeForType(fn, type) {\n return function(node, item, list) {\n if (node.type === type) {\n fn.call(this, node, item, list);\n }\n };\n}\n\nfunction getWalkersFromStructure(name, nodeType) {\n const structure = nodeType.structure;\n const walkers = [];\n\n for (const key in structure) {\n if (hasOwnProperty.call(structure, key) === false) {\n continue;\n }\n\n let fieldTypes = structure[key];\n const walker = {\n name: key,\n type: false,\n nullable: false\n };\n\n if (!Array.isArray(fieldTypes)) {\n fieldTypes = [fieldTypes];\n }\n\n for (const fieldType of fieldTypes) {\n if (fieldType === null) {\n walker.nullable = true;\n } else if (typeof fieldType === 'string') {\n walker.type = 'node';\n } else if (Array.isArray(fieldType)) {\n walker.type = 'list';\n }\n }\n\n if (walker.type) {\n walkers.push(walker);\n }\n }\n\n if (walkers.length) {\n return {\n context: nodeType.walkContext,\n fields: walkers\n };\n }\n\n return null;\n}\n\nfunction getTypesFromConfig(config) {\n const types = {};\n\n for (const name in config.node) {\n if (hasOwnProperty.call(config.node, name)) {\n const nodeType = config.node[name];\n\n if (!nodeType.structure) {\n throw new Error('Missed `structure` field in `' + name + '` node type definition');\n }\n\n types[name] = getWalkersFromStructure(name, nodeType);\n }\n }\n\n return types;\n}\n\nfunction createTypeIterator(config, reverse) {\n const fields = config.fields.slice();\n const contextName = config.context;\n const useContext = typeof contextName === 'string';\n\n if (reverse) {\n fields.reverse();\n }\n\n return function(node, context, walk, walkReducer) {\n let prevContextValue;\n\n if (useContext) {\n prevContextValue = context[contextName];\n context[contextName] = node;\n }\n\n for (const field of fields) {\n const ref = node[field.name];\n\n if (!field.nullable || ref) {\n if (field.type === 'list') {\n const breakWalk = reverse\n ? ref.reduceRight(walkReducer, false)\n : ref.reduce(walkReducer, false);\n\n if (breakWalk) {\n return true;\n }\n } else if (walk(ref)) {\n return true;\n }\n }\n }\n\n if (useContext) {\n context[contextName] = prevContextValue;\n }\n };\n}\n\nfunction createFastTraveralMap({\n StyleSheet,\n Atrule,\n Rule,\n Block,\n DeclarationList\n}) {\n return {\n Atrule: {\n StyleSheet,\n Atrule,\n Rule,\n Block\n },\n Rule: {\n StyleSheet,\n Atrule,\n Rule,\n Block\n },\n Declaration: {\n StyleSheet,\n Atrule,\n Rule,\n Block,\n DeclarationList\n }\n };\n}\n\nexport function createWalker(config) {\n const types = getTypesFromConfig(config);\n const iteratorsNatural = {};\n const iteratorsReverse = {};\n const breakWalk = Symbol('break-walk');\n const skipNode = Symbol('skip-node');\n\n for (const name in types) {\n if (hasOwnProperty.call(types, name) && types[name] !== null) {\n iteratorsNatural[name] = createTypeIterator(types[name], false);\n iteratorsReverse[name] = createTypeIterator(types[name], true);\n }\n }\n\n const fastTraversalIteratorsNatural = createFastTraveralMap(iteratorsNatural);\n const fastTraversalIteratorsReverse = createFastTraveralMap(iteratorsReverse);\n\n const walk = function(root, options) {\n function walkNode(node, item, list) {\n const enterRet = enter.call(context, node, item, list);\n\n if (enterRet === breakWalk) {\n return true;\n }\n\n if (enterRet === skipNode) {\n return false;\n }\n\n if (iterators.hasOwnProperty(node.type)) {\n if (iterators[node.type](node, context, walkNode, walkReducer)) {\n return true;\n }\n }\n\n if (leave.call(context, node, item, list) === breakWalk) {\n return true;\n }\n\n return false;\n }\n\n let enter = noop;\n let leave = noop;\n let iterators = iteratorsNatural;\n let walkReducer = (ret, data, item, list) => ret || walkNode(data, item, list);\n const context = {\n break: breakWalk,\n skip: skipNode,\n\n root,\n stylesheet: null,\n atrule: null,\n atrulePrelude: null,\n rule: null,\n selector: null,\n block: null,\n declaration: null,\n function: null\n };\n\n if (typeof options === 'function') {\n enter = options;\n } else if (options) {\n enter = ensureFunction(options.enter);\n leave = ensureFunction(options.leave);\n\n if (options.reverse) {\n iterators = iteratorsReverse;\n }\n\n if (options.visit) {\n if (fastTraversalIteratorsNatural.hasOwnProperty(options.visit)) {\n iterators = options.reverse\n ? fastTraversalIteratorsReverse[options.visit]\n : fastTraversalIteratorsNatural[options.visit];\n } else if (!types.hasOwnProperty(options.visit)) {\n throw new Error('Bad value `' + options.visit + '` for `visit` option (should be: ' + Object.keys(types).sort().join(', ') + ')');\n }\n\n enter = invokeForType(enter, options.visit);\n leave = invokeForType(leave, options.visit);\n }\n }\n\n if (enter === noop && leave === noop) {\n throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\\'t a function');\n }\n\n walkNode(root);\n };\n\n walk.break = breakWalk;\n walk.skip = skipNode;\n\n walk.find = function(ast, fn) {\n let found = null;\n\n walk(ast, function(node, item, list) {\n if (fn.call(this, node, item, list)) {\n found = node;\n return breakWalk;\n }\n });\n\n return found;\n };\n\n walk.findLast = function(ast, fn) {\n let found = null;\n\n walk(ast, {\n reverse: true,\n enter(node, item, list) {\n if (fn.call(this, node, item, list)) {\n found = node;\n return breakWalk;\n }\n }\n });\n\n return found;\n };\n\n walk.findAll = function(ast, fn) {\n const found = [];\n\n walk(ast, function(node, item, list) {\n if (fn.call(this, node, item, list)) {\n found.push(node);\n }\n });\n\n return found;\n };\n\n return walk;\n};\n","function noop(value) {\n return value;\n}\n\nfunction generateMultiplier(multiplier) {\n const { min, max, comma } = multiplier;\n\n if (min === 0 && max === 0) {\n return comma ? '#?' : '*';\n }\n\n if (min === 0 && max === 1) {\n return '?';\n }\n\n if (min === 1 && max === 0) {\n return comma ? '#' : '+';\n }\n\n if (min === 1 && max === 1) {\n return '';\n }\n\n return (\n (comma ? '#' : '') +\n (min === max\n ? '{' + min + '}'\n : '{' + min + ',' + (max !== 0 ? max : '') + '}'\n )\n );\n}\n\nfunction generateTypeOpts(node) {\n switch (node.type) {\n case 'Range':\n return (\n ' [' +\n (node.min === null ? '-∞' : node.min) +\n ',' +\n (node.max === null ? '∞' : node.max) +\n ']'\n );\n\n default:\n throw new Error('Unknown node type `' + node.type + '`');\n }\n}\n\nfunction generateSequence(node, decorate, forceBraces, compact) {\n const combinator = node.combinator === ' ' || compact ? node.combinator : ' ' + node.combinator + ' ';\n const result = node.terms\n .map(term => internalGenerate(term, decorate, forceBraces, compact))\n .join(combinator);\n\n if (node.explicit || forceBraces) {\n return (compact || result[0] === ',' ? '[' : '[ ') + result + (compact ? ']' : ' ]');\n }\n\n return result;\n}\n\nfunction internalGenerate(node, decorate, forceBraces, compact) {\n let result;\n\n switch (node.type) {\n case 'Group':\n result =\n generateSequence(node, decorate, forceBraces, compact) +\n (node.disallowEmpty ? '!' : '');\n break;\n\n case 'Multiplier':\n // return since node is a composition\n return (\n internalGenerate(node.term, decorate, forceBraces, compact) +\n decorate(generateMultiplier(node), node)\n );\n\n case 'Type':\n result = '<' + node.name + (node.opts ? decorate(generateTypeOpts(node.opts), node.opts) : '') + '>';\n break;\n\n case 'Property':\n result = '<\\'' + node.name + '\\'>';\n break;\n\n case 'Keyword':\n result = node.name;\n break;\n\n case 'AtKeyword':\n result = '@' + node.name;\n break;\n\n case 'Function':\n result = node.name + '(';\n break;\n\n case 'String':\n case 'Token':\n result = node.value;\n break;\n\n case 'Comma':\n result = ',';\n break;\n\n default:\n throw new Error('Unknown node type `' + node.type + '`');\n }\n\n return decorate(result, node);\n}\n\nexport function generate(node, options) {\n let decorate = noop;\n let forceBraces = false;\n let compact = false;\n\n if (typeof options === 'function') {\n decorate = options;\n } else if (options) {\n forceBraces = Boolean(options.forceBraces);\n compact = Boolean(options.compact);\n if (typeof options.decorate === 'function') {\n decorate = options.decorate;\n }\n }\n\n return internalGenerate(node, decorate, forceBraces, compact);\n};\n","import { createCustomError } from '../utils/create-custom-error.js';\nimport { generate } from '../definition-syntax/generate.js';\n\nconst defaultLoc = { offset: 0, line: 1, column: 1 };\n\nfunction locateMismatch(matchResult, node) {\n const tokens = matchResult.tokens;\n const longestMatch = matchResult.longestMatch;\n const mismatchNode = longestMatch < tokens.length ? tokens[longestMatch].node || null : null;\n const badNode = mismatchNode !== node ? mismatchNode : null;\n let mismatchOffset = 0;\n let mismatchLength = 0;\n let entries = 0;\n let css = '';\n let start;\n let end;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i].value;\n\n if (i === longestMatch) {\n mismatchLength = token.length;\n mismatchOffset = css.length;\n }\n\n if (badNode !== null && tokens[i].node === badNode) {\n if (i <= longestMatch) {\n entries++;\n } else {\n entries = 0;\n }\n }\n\n css += token;\n }\n\n if (longestMatch === tokens.length || entries > 1) { // last\n start = fromLoc(badNode || node, 'end') || buildLoc(defaultLoc, css);\n end = buildLoc(start);\n } else {\n start = fromLoc(badNode, 'start') ||\n buildLoc(fromLoc(node, 'start') || defaultLoc, css.slice(0, mismatchOffset));\n end = fromLoc(badNode, 'end') ||\n buildLoc(start, css.substr(mismatchOffset, mismatchLength));\n }\n\n return {\n css,\n mismatchOffset,\n mismatchLength,\n start,\n end\n };\n}\n\nfunction fromLoc(node, point) {\n const value = node && node.loc && node.loc[point];\n\n if (value) {\n return 'line' in value ? buildLoc(value) : value;\n }\n\n return null;\n}\n\nfunction buildLoc({ offset, line, column }, extra) {\n const loc = {\n offset,\n line,\n column\n };\n\n if (extra) {\n const lines = extra.split(/\\n|\\r\\n?|\\f/);\n\n loc.offset += extra.length;\n loc.line += lines.length - 1;\n loc.column = lines.length === 1 ? loc.column + extra.length : lines.pop().length + 1;\n }\n\n return loc;\n}\n\nexport const SyntaxReferenceError = function(type, referenceName) {\n const error = createCustomError(\n 'SyntaxReferenceError',\n type + (referenceName ? ' `' + referenceName + '`' : '')\n );\n\n error.reference = referenceName;\n\n return error;\n};\n\nexport const SyntaxMatchError = function(message, syntax, node, matchResult) {\n const error = createCustomError('SyntaxMatchError', message);\n const {\n css,\n mismatchOffset,\n mismatchLength,\n start,\n end\n } = locateMismatch(matchResult, node);\n\n error.rawMessage = message;\n error.syntax = syntax ? generate(syntax) : '<generic>';\n error.css = css;\n error.mismatchOffset = mismatchOffset;\n error.mismatchLength = mismatchLength;\n error.message = message + '\\n' +\n ' syntax: ' + error.syntax + '\\n' +\n ' value: ' + (css || '<empty string>') + '\\n' +\n ' --------' + new Array(error.mismatchOffset + 1).join('-') + '^';\n\n Object.assign(error, start);\n error.loc = {\n source: (node && node.loc && node.loc.source) || '<unknown>',\n start,\n end\n };\n\n return error;\n};\n","const keywords = new Map();\nconst properties = new Map();\nconst HYPHENMINUS = 45; // '-'.charCodeAt()\n\nexport const keyword = getKeywordDescriptor;\nexport const property = getPropertyDescriptor;\nexport const vendorPrefix = getVendorPrefix;\nexport function isCustomProperty(str, offset) {\n offset = offset || 0;\n\n return str.length - offset >= 2 &&\n str.charCodeAt(offset) === HYPHENMINUS &&\n str.charCodeAt(offset + 1) === HYPHENMINUS;\n}\n\nfunction getVendorPrefix(str, offset) {\n offset = offset || 0;\n\n // verdor prefix should be at least 3 chars length\n if (str.length - offset >= 3) {\n // vendor prefix starts with hyper minus following non-hyper minus\n if (str.charCodeAt(offset) === HYPHENMINUS &&\n str.charCodeAt(offset + 1) !== HYPHENMINUS) {\n // vendor prefix should contain a hyper minus at the ending\n const secondDashIndex = str.indexOf('-', offset + 2);\n\n if (secondDashIndex !== -1) {\n return str.substring(offset, secondDashIndex + 1);\n }\n }\n }\n\n return '';\n}\n\nfunction getKeywordDescriptor(keyword) {\n if (keywords.has(keyword)) {\n return keywords.get(keyword);\n }\n\n const name = keyword.toLowerCase();\n let descriptor = keywords.get(name);\n\n if (descriptor === undefined) {\n const custom = isCustomProperty(name, 0);\n const vendor = !custom ? getVendorPrefix(name, 0) : '';\n descriptor = Object.freeze({\n basename: name.substr(vendor.length),\n name,\n prefix: vendor,\n vendor,\n custom\n });\n }\n\n keywords.set(keyword, descriptor);\n\n return descriptor;\n}\n\nfunction getPropertyDescriptor(property) {\n if (properties.has(property)) {\n return properties.get(property);\n }\n\n let name = property;\n let hack = property[0];\n\n if (hack === '/') {\n hack = property[1] === '/' ? '//' : '/';\n } else if (hack !== '_' &&\n hack !== '*' &&\n hack !== '$' &&\n hack !== '#' &&\n hack !== '+' &&\n hack !== '&') {\n hack = '';\n }\n\n const custom = isCustomProperty(name, hack.length);\n\n // re-use result when possible (the same as for lower case)\n if (!custom) {\n name = name.toLowerCase();\n if (properties.has(name)) {\n const descriptor = properties.get(name);\n properties.set(property, descriptor);\n return descriptor;\n }\n }\n\n const vendor = !custom ? getVendorPrefix(name, hack.length) : '';\n const prefix = name.substr(0, hack.length + vendor.length);\n const descriptor = Object.freeze({\n basename: name.substr(prefix.length),\n name: name.substr(hack.length),\n hack,\n vendor,\n prefix,\n custom\n });\n\n properties.set(property, descriptor);\n\n return descriptor;\n}\n","// https://drafts.csswg.org/css-cascade-5/\nexport const cssWideKeywords = [\n 'initial',\n 'inherit',\n 'unset',\n 'revert',\n 'revert-layer'\n];\n","import {\n isDigit,\n cmpChar,\n Delim,\n WhiteSpace,\n Comment,\n Ident,\n Number as NumberToken,\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 isDelim(token, code) {\n return token !== null && token.type === Delim && token.value.charCodeAt(0) === code;\n}\n\nfunction skipSC(token, offset, getNextToken) {\n while (token !== null && (token.type === WhiteSpace || token.type === Comment)) {\n token = getNextToken(++offset);\n }\n\n return offset;\n}\n\nfunction checkInteger(token, valueOffset, disallowSign, offset) {\n if (!token) {\n return 0;\n }\n\n const code = token.value.charCodeAt(valueOffset);\n\n if (code === PLUSSIGN || code === HYPHENMINUS) {\n if (disallowSign) {\n // Number sign is not allowed\n return 0;\n }\n valueOffset++;\n }\n\n for (; valueOffset < token.value.length; valueOffset++) {\n if (!isDigit(token.value.charCodeAt(valueOffset))) {\n // Integer is expected\n return 0;\n }\n }\n\n return offset + 1;\n}\n\n// ... <signed-integer>\n// ... ['+' | '-'] <signless-integer>\nfunction consumeB(token, offset_, getNextToken) {\n let sign = false;\n let offset = skipSC(token, offset_, getNextToken);\n\n token = getNextToken(offset);\n\n if (token === null) {\n return offset_;\n }\n\n if (token.type !== NumberToken) {\n if (isDelim(token, PLUSSIGN) || isDelim(token, HYPHENMINUS)) {\n sign = true;\n offset = skipSC(getNextToken(++offset), offset, getNextToken);\n token = getNextToken(offset);\n\n if (token === null || token.type !== NumberToken) {\n return 0;\n }\n } else {\n return offset_;\n }\n }\n\n if (!sign) {\n const code = token.value.charCodeAt(0);\n if (code !== PLUSSIGN && code !== HYPHENMINUS) {\n // Number sign is expected\n return 0;\n }\n }\n\n return checkInteger(token, sign ? 0 : 1, sign, offset);\n}\n\n// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb\nexport default function anPlusB(token, getNextToken) {\n /* eslint-disable brace-style*/\n let offset = 0;\n\n if (!token) {\n return 0;\n }\n\n // <integer>\n if (token.type === NumberToken) {\n return checkInteger(token, 0, ALLOW_SIGN, offset); // b\n }\n\n // -n\n // -n <signed-integer>\n // -n ['+' | '-'] <signless-integer>\n // -n- <signless-integer>\n // <dashndashdigit-ident>\n else if (token.type === Ident && token.value.charCodeAt(0) === HYPHENMINUS) {\n // expect 1st char is N\n if (!cmpChar(token.value, 1, N)) {\n return 0;\n }\n\n switch (token.value.length) {\n // -n\n // -n <signed-integer>\n // -n ['+' | '-'] <signless-integer>\n case 2:\n return consumeB(getNextToken(++offset), offset, getNextToken);\n\n // -n- <signless-integer>\n case 3:\n if (token.value.charCodeAt(2) !== HYPHENMINUS) {\n return 0;\n }\n\n offset = skipSC(getNextToken(++offset), offset, getNextToken);\n token = getNextToken(offset);\n\n return checkInteger(token, 0, DISALLOW_SIGN, offset);\n\n // <dashndashdigit-ident>\n default:\n if (token.value.charCodeAt(2) !== HYPHENMINUS) {\n return 0;\n }\n\n return checkInteger(token, 3, DISALLOW_SIGN, offset);\n }\n }\n\n // '+'? n\n // '+'? n <signed-integer>\n // '+'? n ['+' | '-'] <signless-integer>\n // '+'? n- <signless-integer>\n // '+'? <ndashdigit-ident>\n else if (token.type === Ident || (isDelim(token, PLUSSIGN) && getNextToken(offset + 1).type === Ident)) {\n // just ignore a plus\n if (token.type !== Ident) {\n token = getNextToken(++offset);\n }\n\n if (token === null || !cmpChar(token.value, 0, N)) {\n return 0;\n }\n\n switch (token.value.length) {\n // '+'? n\n // '+'? n <signed-integer>\n // '+'? n ['+' | '-'] <signless-integer>\n case 1:\n return consumeB(getNextToken(++offset), offset, getNextToken);\n\n // '+'? n- <signless-integer>\n case 2:\n if (token.value.charCodeAt(1) !== HYPHENMINUS) {\n return 0;\n }\n\n offset = skipSC(getNextToken(++offset), offset, getNextToken);\n token = getNextToken(offset);\n\n return checkInteger(token, 0, DISALLOW_SIGN, offset);\n\n // '+'? <ndashdigit-ident>\n default:\n if (token.value.charCodeAt(1) !== HYPHENMINUS) {\n return 0;\n }\n\n return checkInteger(token, 2, DISALLOW_SIGN, offset);\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 (token.type === Dimension) {\n let code = token.value.charCodeAt(0);\n let sign = code === PLUSSIGN || code === HYPHENMINUS ? 1 : 0;\n let i = sign;\n\n for (; i < token.value.length; i++) {\n if (!isDigit(token.value.charCodeAt(i))) {\n break;\n }\n }\n\n if (i === sign) {\n // Integer is expected\n return 0;\n }\n\n if (!cmpChar(token.value, i, N)) {\n return 0;\n }\n\n // <n-dimension>\n // <n-dimension> <signed-integer>\n // <n-dimension> ['+' | '-'] <signless-integer>\n if (i + 1 === token.value.length) {\n return consumeB(getNextToken(++offset), offset, getNextToken);\n } else {\n if (token.value.charCodeAt(i + 1) !== HYPHENMINUS) {\n return 0;\n }\n\n // <ndash-dimension> <signless-integer>\n if (i + 2 === token.value.length) {\n offset = skipSC(getNextToken(++offset), offset, getNextToken);\n token = getNextToken(offset);\n\n return checkInteger(token, 0, DISALLOW_SIGN, offset);\n }\n // <ndashdigit-dimension>\n else {\n return checkInteger(token, i + 2, DISALLOW_SIGN, offset);\n }\n }\n }\n\n return 0;\n};\n","import {\n isHexDigit,\n cmpChar,\n Ident,\n Delim,\n Number as NumberToken,\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 (?)\nconst U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)\n\nfunction isDelim(token, code) {\n return token !== null && token.type === Delim && token.value.charCodeAt(0) === code;\n}\n\nfunction startsWith(token, code) {\n return token.value.charCodeAt(0) === code;\n}\n\nfunction hexSequence(token, offset, allowDash) {\n let hexlen = 0;\n\n for (let pos = offset; pos < token.value.length; pos++) {\n const code = token.value.charCodeAt(pos);\n\n if (code === HYPHENMINUS && allowDash && hexlen !== 0) {\n hexSequence(token, offset + hexlen + 1, false);\n return 6; // dissallow following question marks\n }\n\n if (!isHexDigit(code)) {\n return 0; // not a hex digit\n }\n\n if (++hexlen > 6) {\n return 0; // too many hex digits\n };\n }\n\n return hexlen;\n}\n\nfunction withQuestionMarkSequence(consumed, length, getNextToken) {\n if (!consumed) {\n return 0; // nothing consumed\n }\n\n while (isDelim(getNextToken(length), QUESTIONMARK)) {\n if (++consumed > 6) {\n return 0; // too many question marks\n }\n\n length++;\n }\n\n return length;\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 '+' '?'+\nexport default function urange(token, getNextToken) {\n let length = 0;\n\n // should start with `u` or `U`\n if (token === null || token.type !== Ident || !cmpChar(token.value, 0, U)) {\n return 0;\n }\n\n token = getNextToken(++length);\n if (token === null) {\n return 0;\n }\n\n // u '+' <ident-token> '?'*\n // u '+' '?'+\n if (isDelim(token, PLUSSIGN)) {\n token = getNextToken(++length);\n if (token === null) {\n return 0;\n }\n\n if (token.type === Ident) {\n // u '+' <ident-token> '?'*\n return withQuestionMarkSequence(hexSequence(token, 0, true), ++length, getNextToken);\n }\n\n if (isDelim(token, QUESTIONMARK)) {\n // u '+' '?'+\n return withQuestionMarkSequence(1, ++length, getNextToken);\n }\n\n // Hex digit or question mark is expected\n return 0;\n }\n\n // u <number-token> '?'*\n // u <number-token> <dimension-token>\n // u <number-token> <number-token>\n if (token.type === NumberToken) {\n const consumedHexLength = hexSequence(token, 1, true);\n if (consumedHexLength === 0) {\n return 0;\n }\n\n token = getNextToken(++length);\n if (token === null) {\n // u <number-token> <eof>\n return length;\n }\n\n if (token.type === Dimension || token.type === NumberToken) {\n // u <number-token> <dimension-token>\n // u <number-token> <number-token>\n if (!startsWith(token, HYPHENMINUS) || !hexSequence(token, 1, false)) {\n return 0;\n }\n\n return length + 1;\n }\n\n // u <number-token> '?'*\n return withQuestionMarkSequence(consumedHexLength, length, getNextToken);\n }\n\n // u <dimension-token> '?'*\n if (token.type === Dimension) {\n return withQuestionMarkSequence(hexSequence(token, 1, true), ++length, getNextToken);\n }\n\n return 0;\n};\n","import { cssWideKeywords } from './generic-const.js';\nimport anPlusB from './generic-an-plus-b.js';\nimport urange from './generic-urange.js';\nimport {\n isIdentifierStart,\n isHexDigit,\n isDigit,\n cmpStr,\n consumeNumber,\n\n Ident,\n Function as FunctionToken,\n AtKeyword,\n Hash,\n String as StringToken,\n BadString,\n Url,\n BadUrl,\n Delim,\n Number as NumberToken,\n Percentage,\n Dimension,\n WhiteSpace,\n CDO,\n CDC,\n Colon,\n Semicolon,\n Comma,\n LeftSquareBracket,\n RightSquareBracket,\n LeftParenthesis,\n RightParenthesis,\n LeftCurlyBracket,\n RightCurlyBracket\n} from '../tokenizer/index.js';\n\nconst calcFunctionNames = ['calc(', '-moz-calc(', '-webkit-calc('];\nconst balancePair = new Map([\n [FunctionToken, RightParenthesis],\n [LeftParenthesis, RightParenthesis],\n [LeftSquareBracket, RightSquareBracket],\n [LeftCurlyBracket, RightCurlyBracket]\n]);\n\n// safe char code getter\nfunction charCodeAt(str, index) {\n return index < str.length ? str.charCodeAt(index) : 0;\n}\n\nfunction eqStr(actual, expected) {\n return cmpStr(actual, 0, actual.length, expected);\n}\n\nfunction eqStrAny(actual, expected) {\n for (let i = 0; i < expected.length; i++) {\n if (eqStr(actual, expected[i])) {\n return true;\n }\n }\n\n return false;\n}\n\n// IE postfix hack, i.e. 123\\0 or 123px\\9\nfunction isPostfixIeHack(str, offset) {\n if (offset !== str.length - 2) {\n return false;\n }\n\n return (\n charCodeAt(str, offset) === 0x005C && // U+005C REVERSE SOLIDUS (\\)\n isDigit(charCodeAt(str, offset + 1))\n );\n}\n\nfunction outOfRange(opts, value, numEnd) {\n if (opts && opts.type === 'Range') {\n const num = Number(\n numEnd !== undefined && numEnd !== value.length\n ? value.substr(0, numEnd)\n : value\n );\n\n if (isNaN(num)) {\n return true;\n }\n\n // FIXME: when opts.min is a string it's a dimension, skip a range validation\n // for now since it requires a type covertation which is not implmented yet\n if (opts.min !== null && num < opts.min && typeof opts.min !== 'string') {\n return true;\n }\n\n // FIXME: when opts.max is a string it's a dimension, skip a range validation\n // for now since it requires a type covertation which is not implmented yet\n if (opts.max !== null && num > opts.max && typeof opts.max !== 'string') {\n return true;\n }\n }\n\n return false;\n}\n\nfunction consumeFunction(token, getNextToken) {\n let balanceCloseType = 0;\n let balanceStash = [];\n let length = 0;\n\n // balanced token consuming\n scan:\n do {\n switch (token.type) {\n case RightCurlyBracket:\n case RightParenthesis:\n case RightSquareBracket:\n if (token.type !== balanceCloseType) {\n break scan;\n }\n\n balanceCloseType = balanceStash.pop();\n\n if (balanceStash.length === 0) {\n length++;\n break scan;\n }\n\n break;\n\n case FunctionToken:\n case LeftParenthesis:\n case LeftSquareBracket:\n case LeftCurlyBracket:\n balanceStash.push(balanceCloseType);\n balanceCloseType = balancePair.get(token.type);\n break;\n }\n\n length++;\n } while (token = getNextToken(length));\n\n return length;\n}\n\n// TODO: implement\n// can be used wherever <length>, <frequency>, <angle>, <time>, <percentage>, <number>, or <integer> values are allowed\n// https://drafts.csswg.org/css-values/#calc-notation\nfunction calc(next) {\n return function(token, getNextToken, opts) {\n if (token === null) {\n return 0;\n }\n\n if (token.type === FunctionToken && eqStrAny(token.value, calcFunctionNames)) {\n return consumeFunction(token, getNextToken);\n }\n\n return next(token, getNextToken, opts);\n };\n}\n\nfunction tokenType(expectedTokenType) {\n return function(token) {\n if (token === null || token.type !== expectedTokenType) {\n return 0;\n }\n\n return 1;\n };\n}\n\n// =========================\n// Complex types\n//\n\n// https://drafts.csswg.org/css-values-4/#custom-idents\n// 4.2. Author-defined Identifiers: the <custom-ident> type\n// Some properties accept arbitrary author-defined identifiers as a component value.\n// This generic data type is denoted by <custom-ident>, and represents any valid CSS identifier\n// that would not be misinterpreted as a pre-defined keyword in that property’s value definition.\n//\n// See also: https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident\nfunction customIdent(token) {\n if (token === null || token.type !== Ident) {\n return 0;\n }\n\n const name = token.value.toLowerCase();\n\n // The CSS-wide keywords are not valid <custom-ident>s\n if (eqStrAny(name, cssWideKeywords)) {\n return 0;\n }\n\n // The default keyword is reserved and is also not a valid <custom-ident>\n if (eqStr(name, 'default')) {\n return 0;\n }\n\n // TODO: ignore property specific keywords (as described https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident)\n // Specifications using <custom-ident> must specify clearly what other keywords\n // are excluded from <custom-ident>, if any—for example by saying that any pre-defined keywords\n // in that property’s value definition are excluded. Excluded keywords are excluded\n // in all ASCII case permutations.\n\n return 1;\n}\n\n// https://drafts.csswg.org/css-variables/#typedef-custom-property-name\n// A custom property is any property whose name starts with two dashes (U+002D HYPHEN-MINUS), like --foo.\n// The <custom-property-name> production corresponds to this: it’s defined as any valid identifier\n// that starts with two dashes, except -- itself, which is reserved for future use by CSS.\n// NOTE: Current implementation treat `--` as a valid name since most (all?) major browsers treat it as valid.\nfunction customPropertyName(token) {\n // ... defined as any valid identifier\n if (token === null || token.type !== Ident) {\n return 0;\n }\n\n // ... that starts with two dashes (U+002D HYPHEN-MINUS)\n if (charCodeAt(token.value, 0) !== 0x002D || charCodeAt(token.value, 1) !== 0x002D) {\n return 0;\n }\n\n return 1;\n}\n\n// https://drafts.csswg.org/css-color-4/#hex-notation\n// The syntax of a <hex-color> is a <hash-token> token whose value consists of 3, 4, 6, or 8 hexadecimal digits.\n// In other words, a hex color is written as a hash character, \"#\", followed by some number of digits 0-9 or\n// letters a-f (the case of the letters doesn’t matter - #00ff00 is identical to #00FF00).\nfunction hexColor(token) {\n if (token === null || token.type !== Hash) {\n return 0;\n }\n\n const length = token.value.length;\n\n // valid values (length): #rgb (4), #rgba (5), #rrggbb (7), #rrggbbaa (9)\n if (length !== 4 && length !== 5 && length !== 7 && length !== 9) {\n return 0;\n }\n\n for (let i = 1; i < length; i++) {\n if (!isHexDigit(charCodeAt(token.value, i))) {\n return 0;\n }\n }\n\n return 1;\n}\n\nfunction idSelector(token) {\n if (token === null || token.type !== Hash) {\n return 0;\n }\n\n if (!isIdentifierStart(charCodeAt(token.value, 1), charCodeAt(token.value, 2), charCodeAt(token.value, 3))) {\n return 0;\n }\n\n return 1;\n}\n\n// https://drafts.csswg.org/css-syntax/#any-value\n// It represents the entirety of what a valid declaration can have as its value.\nfunction declarationValue(token, getNextToken) {\n if (!token) {\n return 0;\n }\n\n let balanceCloseType = 0;\n let balanceStash = [];\n let length = 0;\n\n // The <declaration-value> production matches any sequence of one or more tokens,\n // so long as the sequence does not contain ...\n scan:\n do {\n switch (token.type) {\n // ... <bad-string-token>, <bad-url-token>,\n case BadString:\n case BadUrl:\n break scan;\n\n // ... unmatched <)-token>, <]-token>, or <}-token>,\n case RightCurlyBracket:\n case RightParenthesis:\n case RightSquareBracket:\n if (token.type !== balanceCloseType) {\n break scan;\n }\n\n balanceCloseType = balanceStash.pop();\n break;\n\n // ... or top-level <semicolon-token> tokens\n case Semicolon:\n if (balanceCloseType === 0) {\n break scan;\n }\n\n break;\n\n // ... or <delim-token> tokens with a value of \"!\"\n case Delim:\n if (balanceCloseType === 0 && token.value === '!') {\n break scan;\n }\n\n break;\n\n case FunctionToken:\n case LeftParenthesis:\n case LeftSquareBracket:\n case LeftCurlyBracket:\n balanceStash.push(balanceCloseType);\n balanceCloseType = balancePair.get(token.type);\n break;\n }\n\n length++;\n } while (token = getNextToken(length));\n\n return length;\n}\n\n// https://drafts.csswg.org/css-syntax/#any-value\n// The <any-value> production is identical to <declaration-value>, but also\n// allows top-level <semicolon-token> tokens and <delim-token> tokens\n// with a value of \"!\". It represents the entirety of what valid CSS can be in any context.\nfunction anyValue(token, getNextToken) {\n if (!token) {\n return 0;\n }\n\n let balanceCloseType = 0;\n let balanceStash = [];\n let length = 0;\n\n // The <any-value> production matches any sequence of one or more tokens,\n // so long as the sequence ...\n scan:\n do {\n switch (token.type) {\n // ... does not contain <bad-string-token>, <bad-url-token>,\n case BadString:\n case BadUrl:\n break scan;\n\n // ... unmatched <)-token>, <]-token>, or <}-token>,\n case RightCurlyBracket:\n case RightParenthesis:\n case RightSquareBracket:\n if (token.type !== balanceCloseType) {\n break scan;\n }\n\n balanceCloseType = balanceStash.pop();\n break;\n\n case FunctionToken:\n case LeftParenthesis:\n case LeftSquareBracket:\n case LeftCurlyBracket:\n balanceStash.push(balanceCloseType);\n balanceCloseType = balancePair.get(token.type);\n break;\n }\n\n length++;\n } while (token = getNextToken(length));\n\n return length;\n}\n\n// =========================\n// Dimensions\n//\n\nfunction dimension(type) {\n if (type) {\n type = new Set(type);\n }\n\n return function(token, getNextToken, opts) {\n if (token === null || token.type !== Dimension) {\n return 0;\n }\n\n const numberEnd = consumeNumber(token.value, 0);\n\n // check unit\n if (type !== null) {\n // check for IE postfix hack, i.e. 123px\\0 or 123px\\9\n const reverseSolidusOffset = token.value.indexOf('\\\\', numberEnd);\n const unit = reverseSolidusOffset === -1 || !isPostfixIeHack(token.value, reverseSolidusOffset)\n ? token.value.substr(numberEnd)\n : token.value.substring(numberEnd, reverseSolidusOffset);\n\n if (type.has(unit.toLowerCase()) === false) {\n return 0;\n }\n }\n\n // check range if specified\n if (outOfRange(opts, token.value, numberEnd)) {\n return 0;\n }\n\n return 1;\n };\n}\n\n// =========================\n// Percentage\n//\n\n// §5.5. Percentages: the <percentage> type\n// https://drafts.csswg.org/css-values-4/#percentages\nfunction percentage(token, getNextToken, opts) {\n // ... corresponds to the <percentage-token> production\n if (token === null || token.type !== Percentage) {\n return 0;\n }\n\n // check range if specified\n if (outOfRange(opts, token.value, token.value.length - 1)) {\n return 0;\n }\n\n return 1;\n}\n\n// =========================\n// Numeric\n//\n\n// https://drafts.csswg.org/css-values-4/#numbers\n// The value <zero> represents a literal number with the value 0. Expressions that merely\n// evaluate to a <number> with the value 0 (for example, calc(0)) do not match <zero>;\n// only literal <number-token>s do.\nfunction zero(next) {\n if (typeof next !== 'function') {\n next = function() {\n return 0;\n };\n }\n\n return function(token, getNextToken, opts) {\n if (token !== null && token.type === NumberToken) {\n if (Number(token.value) === 0) {\n return 1;\n }\n }\n\n return next(token, getNextToken, opts);\n };\n}\n\n// § 5.3. Real Numbers: the <number> type\n// https://drafts.csswg.org/css-values-4/#numbers\n// Number values are denoted by <number>, and represent real numbers, possibly with a fractional component.\n// ... It corresponds to the <number-token> production\nfunction number(token, getNextToken, opts) {\n if (token === null) {\n return 0;\n }\n\n const numberEnd = consumeNumber(token.value, 0);\n const isNumber = numberEnd === token.value.length;\n if (!isNumber && !isPostfixIeHack(token.value, numberEnd)) {\n return 0;\n }\n\n // check range if specified\n if (outOfRange(opts, token.value, numberEnd)) {\n return 0;\n }\n\n return 1;\n}\n\n// §5.2. Integers: the <integer> type\n// https://drafts.csswg.org/css-values-4/#integers\nfunction integer(token, getNextToken, opts) {\n // ... corresponds to a subset of the <number-token> production\n if (token === null || token.type !== NumberToken) {\n return 0;\n }\n\n // The first digit of an integer may be immediately preceded by `-` or `+` to indicate the integer’s sign.\n let i = charCodeAt(token.value, 0) === 0x002B || // U+002B PLUS SIGN (+)\n charCodeAt(token.value, 0) === 0x002D ? 1 : 0; // U+002D HYPHEN-MINUS (-)\n\n // When written literally, an integer is one or more decimal digits 0 through 9 ...\n for (; i < token.value.length; i++) {\n if (!isDigit(charCodeAt(token.value, i))) {\n return 0;\n }\n }\n\n // check range if specified\n if (outOfRange(opts, token.value, i)) {\n return 0;\n }\n\n return 1;\n}\n\n// token types\nexport const tokenTypes = {\n 'ident-token': tokenType(Ident),\n 'function-token': tokenType(FunctionToken),\n 'at-keyword-token': tokenType(AtKeyword),\n 'hash-token': tokenType(Hash),\n 'string-token': tokenType(StringToken),\n 'bad-string-token': tokenType(BadString),\n 'url-token': tokenType(Url),\n 'bad-url-token': tokenType(BadUrl),\n 'delim-token': tokenType(Delim),\n 'number-token': tokenType(NumberToken),\n 'percentage-token': tokenType(Percentage),\n 'dimension-token': tokenType(Dimension),\n 'whitespace-token': tokenType(WhiteSpace),\n 'CDO-token': tokenType(CDO),\n 'CDC-token': tokenType(CDC),\n 'colon-token': tokenType(Colon),\n 'semicolon-token': tokenType(Semicolon),\n 'comma-token': tokenType(Comma),\n '[-token': tokenType(LeftSquareBracket),\n ']-token': tokenType(RightSquareBracket),\n '(-token': tokenType(LeftParenthesis),\n ')-token': tokenType(RightParenthesis),\n '{-token': tokenType(LeftCurlyBracket),\n '}-token': tokenType(RightCurlyBracket)\n};\n\n// token production types\nexport const productionTypes = {\n // token type aliases\n 'string': tokenType(StringToken),\n 'ident': tokenType(Ident),\n\n // percentage\n 'percentage': calc(percentage),\n\n // numeric\n 'zero': zero(),\n 'number': calc(number),\n 'integer': calc(integer),\n\n // complex types\n 'custom-ident': customIdent,\n 'custom-property-name': customPropertyName,\n 'hex-color': hexColor,\n 'id-selector': idSelector, // element( <id-selector> )\n 'an-plus-b': anPlusB,\n 'urange': urange,\n 'declaration-value': declarationValue,\n 'any-value': anyValue\n};\n\nexport const unitGroups = [\n 'length',\n 'angle',\n 'time',\n 'frequency',\n 'resolution',\n 'flex',\n 'decibel',\n 'semitones'\n];\n\n// dimensions types depend on units set\nexport function createDemensionTypes(units) {\n const {\n angle,\n decibel,\n frequency,\n flex,\n length,\n resolution,\n semitones,\n time\n } = units || {};\n\n return {\n 'dimension': calc(dimension(null)),\n 'angle': calc(dimension(angle)),\n 'decibel': calc(dimension(decibel)),\n 'frequency': calc(dimension(frequency)),\n 'flex': calc(dimension(flex)),\n 'length': calc(zero(dimension(length))),\n 'resolution': calc(dimension(resolution)),\n 'semitones': calc(dimension(semitones)),\n 'time': calc(dimension(time))\n };\n}\n\nexport function createGenericTypes(units) {\n return {\n ...tokenTypes,\n ...productionTypes,\n ...createDemensionTypes(units)\n };\n};\n","export const length = [\n // absolute length units https://www.w3.org/TR/css-values-3/#lengths\n 'cm', 'mm', 'q', 'in', 'pt', 'pc', 'px',\n // font-relative length units https://drafts.csswg.org/css-values-4/#font-relative-lengths\n 'em', 'rem',\n 'ex', 'rex',\n 'cap', 'rcap',\n 'ch', 'rch',\n 'ic', 'ric',\n 'lh', 'rlh',\n // viewport-percentage lengths https://drafts.csswg.org/css-values-4/#viewport-relative-lengths\n 'vw', 'svw', 'lvw', 'dvw',\n 'vh', 'svh', 'lvh', 'dvh',\n 'vi', 'svi', 'lvi', 'dvi',\n 'vb', 'svb', 'lvb', 'dvb',\n 'vmin', 'svmin', 'lvmin', 'dvmin',\n 'vmax', 'svmax', 'lvmax', 'dvmax',\n // container relative lengths https://drafts.csswg.org/css-contain-3/#container-lengths\n 'cqw', 'cqh', 'cqi', 'cqb', 'cqmin', 'cqmax'\n];\nexport const angle = ['deg', 'grad', 'rad', 'turn']; // https://www.w3.org/TR/css-values-3/#angles\nexport const time = ['s', 'ms']; // https://www.w3.org/TR/css-values-3/#time\nexport const frequency = ['hz', 'khz']; // https://www.w3.org/TR/css-values-3/#frequency\nexport const resolution = ['dpi', 'dpcm', 'dppx', 'x']; // https://www.w3.org/TR/css-values-3/#resolution\nexport const flex = ['fr']; // https://drafts.csswg.org/css-grid/#fr-unit\nexport const decibel = ['db']; // https://www.w3.org/TR/css3-speech/#mixing-props-voice-volume\nexport const semitones = ['st']; // https://www.w3.org/TR/css3-speech/#voice-props-voice-pitch\n","import { createCustomError } from '../utils/create-custom-error.js';\n\nexport function SyntaxError(message, input, offset) {\n return Object.assign(createCustomError('SyntaxError', message), {\n input,\n offset,\n rawMessage: message,\n message: message + '\\n' +\n ' ' + input + '\\n' +\n '--' + new Array((offset || input.length) + 1).join('-') + '^'\n });\n};\n","import { SyntaxError } from './SyntaxError.js';\n\nconst TAB = 9;\nconst N = 10;\nconst F = 12;\nconst R = 13;\nconst SPACE = 32;\n\nexport class Tokenizer {\n constructor(str) {\n this.str = str;\n this.pos = 0;\n }\n charCodeAt(pos) {\n return pos < this.str.length ? this.str.charCodeAt(pos) : 0;\n }\n charCode() {\n return this.charCodeAt(this.pos);\n }\n nextCharCode() {\n return this.charCodeAt(this.pos + 1);\n }\n nextNonWsCode(pos) {\n return this.charCodeAt(this.findWsEnd(pos));\n }\n findWsEnd(pos) {\n for (; pos < this.str.length; pos++) {\n const code = this.str.charCodeAt(pos);\n if (code !== R && code !== N && code !== F && code !== SPACE && code !== TAB) {\n break;\n }\n }\n\n return pos;\n }\n substringToPos(end) {\n return this.str.substring(this.pos, this.pos = end);\n }\n eat(code) {\n if (this.charCode() !== code) {\n this.error('Expect `' + String.fromCharCode(code) + '`');\n }\n\n this.pos++;\n }\n peek() {\n return this.pos < this.str.length ? this.str.charAt(this.pos++) : '';\n }\n error(message) {\n throw new SyntaxError(message, this.str, this.pos);\n }\n};\n","import { Tokenizer } from './tokenizer.js';\n\nconst TAB = 9;\nconst N = 10;\nconst F = 12;\nconst R = 13;\nconst SPACE = 32;\nconst EXCLAMATIONMARK = 33; // !\nconst NUMBERSIGN = 35; // #\nconst AMPERSAND = 38; // &\nconst APOSTROPHE = 39; // '\nconst LEFTPARENTHESIS = 40; // (\nconst RIGHTPARENTHESIS = 41; // )\nconst ASTERISK = 42; // *\nconst PLUSSIGN = 43; // +\nconst COMMA = 44; // ,\nconst HYPERMINUS = 45; // -\nconst LESSTHANSIGN = 60; // <\nconst GREATERTHANSIGN = 62; // >\nconst QUESTIONMARK = 63; // ?\nconst COMMERCIALAT = 64; // @\nconst LEFTSQUAREBRACKET = 91; // [\nconst RIGHTSQUAREBRACKET = 93; // ]\nconst LEFTCURLYBRACKET = 123; // {\nconst VERTICALLINE = 124; // |\nconst RIGHTCURLYBRACKET = 125; // }\nconst INFINITY = 8734; // ∞\nconst NAME_CHAR = new Uint8Array(128).map((_, idx) =>\n /[a-zA-Z0-9\\-]/.test(String.fromCharCode(idx)) ? 1 : 0\n);\nconst COMBINATOR_PRECEDENCE = {\n ' ': 1,\n '&&': 2,\n '||': 3,\n '|': 4\n};\n\nfunction scanSpaces(tokenizer) {\n return tokenizer.substringToPos(\n tokenizer.findWsEnd(tokenizer.pos)\n );\n}\n\nfunction scanWord(tokenizer) {\n let end = tokenizer.pos;\n\n for (; end < tokenizer.str.length; end++) {\n const code = tokenizer.str.charCodeAt(end);\n if (code >= 128 || NAME_CHAR[code] === 0) {\n break;\n }\n }\n\n if (tokenizer.pos === end) {\n tokenizer.error('Expect a keyword');\n }\n\n return tokenizer.substringToPos(end);\n}\n\nfunction scanNumber(tokenizer) {\n let end = tokenizer.pos;\n\n for (; end < tokenizer.str.length; end++) {\n const code = tokenizer.str.charCodeAt(end);\n if (code < 48 || code > 57) {\n break;\n }\n }\n\n if (tokenizer.pos === end) {\n tokenizer.error('Expect a number');\n }\n\n return tokenizer.substringToPos(end);\n}\n\nfunction scanString(tokenizer) {\n const end = tokenizer.str.indexOf('\\'', tokenizer.pos + 1);\n\n if (end === -1) {\n tokenizer.pos = tokenizer.str.length;\n tokenizer.error('Expect an apostrophe');\n }\n\n return tokenizer.substringToPos(end + 1);\n}\n\nfunction readMultiplierRange(tokenizer) {\n let min = null;\n let max = null;\n\n tokenizer.eat(LEFTCURLYBRACKET);\n\n min = scanNumber(tokenizer);\n\n if (tokenizer.charCode() === COMMA) {\n tokenizer.pos++;\n if (tokenizer.charCode() !== RIGHTCURLYBRACKET) {\n max = scanNumber(tokenizer);\n }\n } else {\n max = min;\n }\n\n tokenizer.eat(RIGHTCURLYBRACKET);\n\n return {\n min: Number(min),\n max: max ? Number(max) : 0\n };\n}\n\nfunction readMultiplier(tokenizer) {\n let range = null;\n let comma = false;\n\n switch (tokenizer.charCode()) {\n case ASTERISK:\n tokenizer.pos++;\n\n range = {\n min: 0,\n max: 0\n };\n\n break;\n\n case PLUSSIGN:\n tokenizer.pos++;\n\n range = {\n min: 1,\n max: 0\n };\n\n break;\n\n case QUESTIONMARK:\n tokenizer.pos++;\n\n range = {\n min: 0,\n max: 1\n };\n\n break;\n\n case NUMBERSIGN:\n tokenizer.pos++;\n\n comma = true;\n\n if (tokenizer.charCode() === LEFTCURLYBRACKET) {\n range = readMultiplierRange(tokenizer);\n } else if (tokenizer.charCode() === QUESTIONMARK) {\n // https://www.w3.org/TR/css-values-4/#component-multipliers\n // > the # and ? multipliers may be stacked as #?\n // In this case just treat \"#?\" as a single multiplier\n // { min: 0, max: 0, comma: true }\n tokenizer.pos++;\n range = {\n min: 0,\n max: 0\n };\n } else {\n range = {\n min: 1,\n max: 0\n };\n }\n\n break;\n\n case LEFTCURLYBRACKET:\n range = readMultiplierRange(tokenizer);\n break;\n\n default:\n return null;\n }\n\n return {\n type: 'Multiplier',\n comma,\n min: range.min,\n max: range.max,\n term: null\n };\n}\n\nfunction maybeMultiplied(tokenizer, node) {\n const multiplier = readMultiplier(tokenizer);\n\n if (multiplier !== null) {\n multiplier.term = node;\n\n // https://www.w3.org/TR/css-values-4/#component-multipliers\n // > The + and # multipliers may be stacked as +#;\n // Represent \"+#\" as nested multipliers:\n // { ...<multiplier #>,\n // term: {\n // ...<multipler +>,\n // term: node\n // }\n // }\n if (tokenizer.charCode() === NUMBERSIGN &&\n tokenizer.charCodeAt(tokenizer.pos - 1) === PLUSSIGN) {\n return maybeMultiplied(tokenizer, multiplier);\n }\n\n return multiplier;\n }\n\n return node;\n}\n\nfunction maybeToken(tokenizer) {\n const ch = tokenizer.peek();\n\n if (ch === '') {\n return null;\n }\n\n return {\n type: 'Token',\n value: ch\n };\n}\n\nfunction readProperty(tokenizer) {\n let name;\n\n tokenizer.eat(LESSTHANSIGN);\n tokenizer.eat(APOSTROPHE);\n\n name = scanWord(tokenizer);\n\n tokenizer.eat(APOSTROPHE);\n tokenizer.eat(GREATERTHANSIGN);\n\n return maybeMultiplied(tokenizer, {\n type: 'Property',\n name\n });\n}\n\n// https://drafts.csswg.org/css-values-3/#numeric-ranges\n// 4.1. Range Restrictions and Range Definition Notation\n//\n// Range restrictions can be annotated in the numeric type notation using CSS bracketed\n// range notation—[min,max]—within the angle brackets, after the identifying keyword,\n// indicating a closed range between (and including) min and max.\n// For example, <integer [0, 10]> indicates an integer between 0 and 10, inclusive.\nfunction readTypeRange(tokenizer) {\n // use null for Infinity to make AST format JSON serializable/deserializable\n let min = null; // -Infinity\n let max = null; // Infinity\n let sign = 1;\n\n tokenizer.eat(LEFTSQUAREBRACKET);\n\n if (tokenizer.charCode() === HYPERMINUS) {\n tokenizer.peek();\n sign = -1;\n }\n\n if (sign == -1 && tokenizer.charCode() === INFINITY) {\n tokenizer.peek();\n } else {\n min = sign * Number(scanNumber(tokenizer));\n\n if (NAME_CHAR[tokenizer.charCode()] !== 0) {\n min += scanWord(tokenizer);\n }\n }\n\n scanSpaces(tokenizer);\n tokenizer.eat(COMMA);\n scanSpaces(tokenizer);\n\n if (tokenizer.charCode() === INFINITY) {\n tokenizer.peek();\n } else {\n sign = 1;\n\n if (tokenizer.charCode() === HYPERMINUS) {\n tokenizer.peek();\n sign = -1;\n }\n\n max = sign * Number(scanNumber(tokenizer));\n\n if (NAME_CHAR[tokenizer.charCode()] !== 0) {\n max += scanWord(tokenizer);\n }\n }\n\n tokenizer.eat(RIGHTSQUAREBRACKET);\n\n return {\n type: 'Range',\n min,\n max\n };\n}\n\nfunction readType(tokenizer) {\n let name;\n let opts = null;\n\n tokenizer.eat(LESSTHANSIGN);\n name = scanWord(tokenizer);\n\n if (tokenizer.charCode() === LEFTPARENTHESIS &&\n tokenizer.nextCharCode() === RIGHTPARENTHESIS) {\n tokenizer.pos += 2;\n name += '()';\n }\n\n if (tokenizer.charCodeAt(tokenizer.findWsEnd(tokenizer.pos)) === LEFTSQUAREBRACKET) {\n scanSpaces(tokenizer);\n opts = readTypeRange(tokenizer);\n }\n\n tokenizer.eat(GREATERTHANSIGN);\n\n return maybeMultiplied(tokenizer, {\n type: 'Type',\n name,\n opts\n });\n}\n\nfunction readKeywordOrFunction(tokenizer) {\n const name = scanWord(tokenizer);\n\n if (tokenizer.charCode() === LEFTPARENTHESIS) {\n tokenizer.pos++;\n\n return {\n type: 'Function',\n name\n };\n }\n\n return maybeMultiplied(tokenizer, {\n type: 'Keyword',\n name\n });\n}\n\nfunction regroupTerms(terms, combinators) {\n function createGroup(terms, combinator) {\n return {\n type: 'Group',\n terms,\n combinator,\n disallowEmpty: false,\n explicit: false\n };\n }\n\n let combinator;\n\n combinators = Object.keys(combinators)\n .sort((a, b) => COMBINATOR_PRECEDENCE[a] - COMBINATOR_PRECEDENCE[b]);\n\n while (combinators.length > 0) {\n combinator = combinators.shift();\n\n let i = 0;\n let subgroupStart = 0;\n\n for (; i < terms.length; i++) {\n const term = terms[i];\n\n if (term.type === 'Combinator') {\n if (term.value === combinator) {\n if (subgroupStart === -1) {\n subgroupStart = i - 1;\n }\n terms.splice(i, 1);\n i--;\n } else {\n if (subgroupStart !== -1 && i - subgroupStart > 1) {\n terms.splice(\n subgroupStart,\n i - subgroupStart,\n createGroup(terms.slice(subgroupStart, i), combinator)\n );\n i = subgroupStart + 1;\n }\n subgroupStart = -1;\n }\n }\n }\n\n if (subgroupStart !== -1 && combinators.length) {\n terms.splice(\n subgroupStart,\n i - subgroupStart,\n createGroup(terms.slice(subgroupStart, i), combinator)\n );\n }\n }\n\n return combinator;\n}\n\nfunction readImplicitGroup(tokenizer) {\n const terms = [];\n const combinators = {};\n let token;\n let prevToken = null;\n let prevTokenPos = tokenizer.pos;\n\n while (token = peek(tokenizer)) {\n if (token.type !== 'Spaces') {\n if (token.type === 'Combinator') {\n // check for combinator in group beginning and double combinator sequence\n if (prevToken === null || prevToken.type === 'Combinator') {\n tokenizer.pos = prevTokenPos;\n tokenizer.error('Unexpected combinator');\n }\n\n combinators[token.value] = true;\n } else if (prevToken !== null && prevToken.type !== 'Combinator') {\n combinators[' '] = true; // a b\n terms.push({\n type: 'Combinator',\n value: ' '\n });\n }\n\n terms.push(token);\n prevToken = token;\n prevTokenPos = tokenizer.pos;\n }\n }\n\n // check for combinator in group ending\n if (prevToken !== null && prevToken.type === 'Combinator') {\n tokenizer.pos -= prevTokenPos;\n tokenizer.error('Unexpected combinator');\n }\n\n return {\n type: 'Group',\n terms,\n combinator: regroupTerms(terms, combinators) || ' ',\n disallowEmpty: false,\n explicit: false\n };\n}\n\nfunction readGroup(tokenizer) {\n let result;\n\n tokenizer.eat(LEFTSQUAREBRACKET);\n result = readImplicitGroup(tokenizer);\n tokenizer.eat(RIGHTSQUAREBRACKET);\n\n result.explicit = true;\n\n if (tokenizer.charCode() === EXCLAMATIONMARK) {\n tokenizer.pos++;\n result.disallowEmpty = true;\n }\n\n return result;\n}\n\nfunction peek(tokenizer) {\n let code = tokenizer.charCode();\n\n if (code < 128 && NAME_CHAR[code] === 1) {\n return readKeywordOrFunction(tokenizer);\n }\n\n switch (code) {\n case RIGHTSQUAREBRACKET:\n // don't eat, stop scan a group\n break;\n\n case LEFTSQUAREBRACKET:\n return maybeMultiplied(tokenizer, readGroup(tokenizer));\n\n case LESSTHANSIGN:\n return tokenizer.nextCharCode() === APOSTROPHE\n ? readProperty(tokenizer)\n : readType(tokenizer);\n\n case VERTICALLINE:\n return {\n type: 'Combinator',\n value: tokenizer.substringToPos(\n tokenizer.pos + (tokenizer.nextCharCode() === VERTICALLINE ? 2 : 1)\n )\n };\n\n case AMPERSAND:\n tokenizer.pos++;\n tokenizer.eat(AMPERSAND);\n\n return {\n type: 'Combinator',\n value: '&&'\n };\n\n case COMMA:\n tokenizer.pos++;\n return {\n type: 'Comma'\n };\n\n case APOSTROPHE:\n return maybeMultiplied(tokenizer, {\n type: 'String',\n value: scanString(tokenizer)\n });\n\n case SPACE:\n case TAB:\n case N:\n case R:\n case F:\n return {\n type: 'Spaces',\n value: scanSpaces(tokenizer)\n };\n\n case COMMERCIALAT:\n code = tokenizer.nextCharCode();\n\n if (code < 128 && NAME_CHAR[code] === 1) {\n tokenizer.pos++;\n return {\n type: 'AtKeyword',\n name: scanWord(tokenizer)\n };\n }\n\n return maybeToken(tokenizer);\n\n case ASTERISK:\n case PLUSSIGN:\n case QUESTIONMARK:\n case NUMBERSIGN:\n case EXCLAMATIONMARK:\n // prohibited tokens (used as a multiplier start)\n break;\n\n case LEFTCURLYBRACKET:\n // LEFTCURLYBRACKET is allowed since mdn/data uses it w/o quoting\n // check next char isn't a number, because it's likely a disjoined multiplier\n code = tokenizer.nextCharCode();\n\n if (code < 48 || code > 57) {\n return maybeToken(tokenizer);\n }\n\n break;\n\n default:\n return maybeToken(tokenizer);\n }\n}\n\nexport function parse(source) {\n const tokenizer = new Tokenizer(source);\n const result = readImplicitGroup(tokenizer);\n\n if (tokenizer.pos !== source.length) {\n tokenizer.error('Unexpected input');\n }\n\n // reduce redundant groups with single group term\n if (result.terms.length === 1 && result.terms[0].type === 'Group') {\n return result.terms[0];\n }\n\n return result;\n};\n","const noop = function() {};\n\nfunction ensureFunction(value) {\n return typeof value === 'function' ? value : noop;\n}\n\nexport function walk(node, options, context) {\n function walk(node) {\n enter.call(context, node);\n\n switch (node.type) {\n case 'Group':\n node.terms.forEach(walk);\n break;\n\n case 'Multiplier':\n walk(node.term);\n break;\n\n case 'Type':\n case 'Property':\n case 'Keyword':\n case 'AtKeyword':\n case 'Function':\n case 'String':\n case 'Token':\n case 'Comma':\n break;\n\n default:\n throw new Error('Unknown type: ' + node.type);\n }\n\n leave.call(context, node);\n }\n\n let enter = noop;\n let leave = noop;\n\n if (typeof options === 'function') {\n enter = options;\n } else if (options) {\n enter = ensureFunction(options.enter);\n leave = ensureFunction(options.leave);\n }\n\n if (enter === noop && leave === noop) {\n throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\\'t a function');\n }\n\n walk(node, context);\n};\n","import { tokenize } from '../tokenizer/index.js';\n\nconst astToTokens = {\n decorator(handlers) {\n const tokens = [];\n let curNode = null;\n\n return {\n ...handlers,\n node(node) {\n const tmp = curNode;\n curNode = node;\n handlers.node.call(this, node);\n curNode = tmp;\n },\n emit(value, type, auto) {\n tokens.push({\n type,\n value,\n node: auto ? null : curNode\n });\n },\n result() {\n return tokens;\n }\n };\n }\n};\n\nfunction stringToTokens(str) {\n const tokens = [];\n\n tokenize(str, (type, start, end) =>\n tokens.push({\n type,\n value: str.slice(start, end),\n node: null\n })\n );\n\n return tokens;\n}\n\nexport default function(value, syntax) {\n if (typeof value === 'string') {\n return stringToTokens(value);\n }\n\n return syntax.generate(value, astToTokens);\n};\n","import { parse } from '../definition-syntax/parse.js';\n\nexport const MATCH = { type: 'Match' };\nexport const MISMATCH = { type: 'Mismatch' };\nexport const DISALLOW_EMPTY = { type: 'DisallowEmpty' };\n\nconst LEFTPARENTHESIS = 40; // (\nconst RIGHTPARENTHESIS = 41; // )\n\nfunction createCondition(match, thenBranch, elseBranch) {\n // reduce node count\n if (thenBranch === MATCH && elseBranch === MISMATCH) {\n return match;\n }\n\n if (match === MATCH && thenBranch === MATCH && elseBranch === MATCH) {\n return match;\n }\n\n if (match.type === 'If' && match.else === MISMATCH && thenBranch === MATCH) {\n thenBranch = match.then;\n match = match.match;\n }\n\n return {\n type: 'If',\n match,\n then: thenBranch,\n else: elseBranch\n };\n}\n\nfunction isFunctionType(name) {\n return (\n name.length > 2 &&\n name.charCodeAt(name.length - 2) === LEFTPARENTHESIS &&\n name.charCodeAt(name.length - 1) === RIGHTPARENTHESIS\n );\n}\n\nfunction isEnumCapatible(term) {\n return (\n term.type === 'Keyword' ||\n term.type === 'AtKeyword' ||\n term.type === 'Function' ||\n term.type === 'Type' && isFunctionType(term.name)\n );\n}\n\nfunction buildGroupMatchGraph(combinator, terms, atLeastOneTermMatched) {\n switch (combinator) {\n case ' ': {\n // Juxtaposing components means that all of them must occur, in the given order.\n //\n // a b c\n // =\n // match a\n // then match b\n // then match c\n // then MATCH\n // else MISMATCH\n // else MISMATCH\n // else MISMATCH\n let result = MATCH;\n\n for (let i = terms.length - 1; i >= 0; i--) {\n const term = terms[i];\n\n result = createCondition(\n term,\n result,\n MISMATCH\n );\n };\n\n return result;\n }\n\n case '|': {\n // A bar (|) separates two or more alternatives: exactly one of them must occur.\n //\n // a | b | c\n // =\n // match a\n // then MATCH\n // else match b\n // then MATCH\n // else match c\n // then MATCH\n // else MISMATCH\n\n let result = MISMATCH;\n let map = null;\n\n for (let i = terms.length - 1; i >= 0; i--) {\n let term = terms[i];\n\n // reduce sequence of keywords into a Enum\n if (isEnumCapatible(term)) {\n if (map === null && i > 0 && isEnumCapatible(terms[i - 1])) {\n map = Object.create(null);\n result = createCondition(\n {\n type: 'Enum',\n map\n },\n MATCH,\n result\n );\n }\n\n if (map !== null) {\n const key = (isFunctionType(term.name) ? term.name.slice(0, -1) : term.name).toLowerCase();\n if (key in map === false) {\n map[key] = term;\n continue;\n }\n }\n }\n\n map = null;\n\n // create a new conditonal node\n result = createCondition(\n term,\n MATCH,\n result\n );\n };\n\n return result;\n }\n\n case '&&': {\n // A double ampersand (&&) separates two or more components,\n // all of which must occur, in any order.\n\n // Use MatchOnce for groups with a large number of terms,\n // since &&-groups produces at least N!-node trees\n if (terms.length > 5) {\n return {\n type: 'MatchOnce',\n terms,\n all: true\n };\n }\n\n // Use a combination tree for groups with small number of terms\n //\n // a && b && c\n // =\n // match a\n // then [b && c]\n // else match b\n // then [a && c]\n // else match c\n // then [a && b]\n // else MISMATCH\n //\n // a && b\n // =\n // match a\n // then match b\n // then MATCH\n // else MISMATCH\n // else match b\n // then match a\n // then MATCH\n // else MISMATCH\n // else MISMATCH\n let result = MISMATCH;\n\n for (let i = terms.length - 1; i >= 0; i--) {\n const term = terms[i];\n let thenClause;\n\n if (terms.length > 1) {\n thenClause = buildGroupMatchGraph(\n combinator,\n terms.filter(function(newGroupTerm) {\n return newGroupTerm !== term;\n }),\n false\n );\n } else {\n thenClause = MATCH;\n }\n\n result = createCondition(\n term,\n thenClause,\n result\n );\n };\n\n return result;\n }\n\n case '||': {\n // A double bar (||) separates two or more options:\n // one or more of them must occur, in any order.\n\n // Use MatchOnce for groups with a large number of terms,\n // since ||-groups produces at least N!-node trees\n if (terms.length > 5) {\n return {\n type: 'MatchOnce',\n terms,\n all: false\n };\n }\n\n // Use a combination tree for groups with small number of terms\n //\n // a || b || c\n // =\n // match a\n // then [b || c]\n // else match b\n // then [a || c]\n // else match c\n // then [a || b]\n // else MISMATCH\n //\n // a || b\n // =\n // match a\n // then match b\n // then MATCH\n // else MATCH\n // else match b\n // then match a\n // then MATCH\n // else MATCH\n // else MISMATCH\n let result = atLeastOneTermMatched ? MATCH : MISMATCH;\n\n for (let i = terms.length - 1; i >= 0; i--) {\n const term = terms[i];\n let thenClause;\n\n if (terms.length > 1) {\n thenClause = buildGroupMatchGraph(\n combinator,\n terms.filter(function(newGroupTerm) {\n return newGroupTerm !== term;\n }),\n true\n );\n } else {\n thenClause = MATCH;\n }\n\n result = createCondition(\n term,\n thenClause,\n result\n );\n };\n\n return result;\n }\n }\n}\n\nfunction buildMultiplierMatchGraph(node) {\n let result = MATCH;\n let matchTerm = buildMatchGraphInternal(node.term);\n\n if (node.max === 0) {\n // disable repeating of empty match to prevent infinite loop\n matchTerm = createCondition(\n matchTerm,\n DISALLOW_EMPTY,\n MISMATCH\n );\n\n // an occurrence count is not limited, make a cycle;\n // to collect more terms on each following matching mismatch\n result = createCondition(\n matchTerm,\n null, // will be a loop\n MISMATCH\n );\n\n result.then = createCondition(\n MATCH,\n MATCH,\n result // make a loop\n );\n\n if (node.comma) {\n result.then.else = createCondition(\n { type: 'Comma', syntax: node },\n result,\n MISMATCH\n );\n }\n } else {\n // create a match node chain for [min .. max] interval with optional matches\n for (let i = node.min || 1; i <= node.max; i++) {\n if (node.comma && result !== MATCH) {\n result = createCondition(\n { type: 'Comma', syntax: node },\n result,\n MISMATCH\n );\n }\n\n result = createCondition(\n matchTerm,\n createCondition(\n MATCH,\n MATCH,\n result\n ),\n MISMATCH\n );\n }\n }\n\n if (node.min === 0) {\n // allow zero match\n result = createCondition(\n MATCH,\n MATCH,\n result\n );\n } else {\n // create a match node chain to collect [0 ... min - 1] required matches\n for (let i = 0; i < node.min - 1; i++) {\n if (node.comma && result !== MATCH) {\n result = createCondition(\n { type: 'Comma', syntax: node },\n result,\n MISMATCH\n );\n }\n\n result = createCondition(\n matchTerm,\n result,\n MISMATCH\n );\n }\n }\n\n return result;\n}\n\nfunction buildMatchGraphInternal(node) {\n if (typeof node === 'function') {\n return {\n type: 'Generic',\n fn: node\n };\n }\n\n switch (node.type) {\n case 'Group': {\n let result = buildGroupMatchGraph(\n node.combinator,\n node.terms.map(buildMatchGraphInternal),\n false\n );\n\n if (node.disallowEmpty) {\n result = createCondition(\n result,\n DISALLOW_EMPTY,\n MISMATCH\n );\n }\n\n return result;\n }\n\n case 'Multiplier':\n return buildMultiplierMatchGraph(node);\n\n case 'Type':\n case 'Property':\n return {\n type: node.type,\n name: node.name,\n syntax: node\n };\n\n case 'Keyword':\n return {\n type: node.type,\n name: node.name.toLowerCase(),\n syntax: node\n };\n\n case 'AtKeyword':\n return {\n type: node.type,\n name: '@' + node.name.toLowerCase(),\n syntax: node\n };\n\n case 'Function':\n return {\n type: node.type,\n name: node.name.toLowerCase() + '(',\n syntax: node\n };\n\n case 'String':\n // convert a one char length String to a Token\n if (node.value.length === 3) {\n return {\n type: 'Token',\n value: node.value.charAt(1),\n syntax: node\n };\n }\n\n // otherwise use it as is\n return {\n type: node.type,\n value: node.value.substr(1, node.value.length - 2).replace(/\\\\'/g, '\\''),\n syntax: node\n };\n\n case 'Token':\n return {\n type: node.type,\n value: node.value,\n syntax: node\n };\n\n case 'Comma':\n return {\n type: node.type,\n syntax: node\n };\n\n default:\n throw new Error('Unknown node type:', node.type);\n }\n}\n\nexport function buildMatchGraph(syntaxTree, ref) {\n if (typeof syntaxTree === 'string') {\n syntaxTree = parse(syntaxTree);\n }\n\n return {\n type: 'MatchGraph',\n match: buildMatchGraphInternal(syntaxTree),\n syntax: ref || null,\n source: syntaxTree\n };\n}\n","import { MATCH, MISMATCH, DISALLOW_EMPTY } from './match-graph.js';\nimport * as TYPE from '../tokenizer/types.js';\n\nconst { hasOwnProperty } = Object.prototype;\nconst STUB = 0;\nconst TOKEN = 1;\nconst OPEN_SYNTAX = 2;\nconst CLOSE_SYNTAX = 3;\n\nconst EXIT_REASON_MATCH = 'Match';\nconst EXIT_REASON_MISMATCH = 'Mismatch';\nconst EXIT_REASON_ITERATION_LIMIT = 'Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)';\n\nconst ITERATION_LIMIT = 15000;\nexport let totalIterationCount = 0;\n\nfunction reverseList(list) {\n let prev = null;\n let next = null;\n let item = list;\n\n while (item !== null) {\n next = item.prev;\n item.prev = prev;\n prev = item;\n item = next;\n }\n\n return prev;\n}\n\nfunction areStringsEqualCaseInsensitive(testStr, referenceStr) {\n if (testStr.length !== referenceStr.length) {\n return false;\n }\n\n for (let i = 0; i < testStr.length; i++) {\n const referenceCode = referenceStr.charCodeAt(i);\n let testCode = testStr.charCodeAt(i);\n\n // testCode.toLowerCase() for U+0041 LATIN CAPITAL LETTER A (A) .. U+005A LATIN CAPITAL LETTER Z (Z).\n if (testCode >= 0x0041 && testCode <= 0x005A) {\n testCode = testCode | 32;\n }\n\n if (testCode !== referenceCode) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isContextEdgeDelim(token) {\n if (token.type !== TYPE.Delim) {\n return false;\n }\n\n // Fix matching for unicode-range: U+30??, U+FF00-FF9F\n // Probably we need to check out previous match instead\n return token.value !== '?';\n}\n\nfunction isCommaContextStart(token) {\n if (token === null) {\n return true;\n }\n\n return (\n token.type === TYPE.Comma ||\n token.type === TYPE.Function ||\n token.type === TYPE.LeftParenthesis ||\n token.type === TYPE.LeftSquareBracket ||\n token.type === TYPE.LeftCurlyBracket ||\n isContextEdgeDelim(token)\n );\n}\n\nfunction isCommaContextEnd(token) {\n if (token === null) {\n return true;\n }\n\n return (\n token.type === TYPE.RightParenthesis ||\n token.type === TYPE.RightSquareBracket ||\n token.type === TYPE.RightCurlyBracket ||\n (token.type === TYPE.Delim && token.value === '/')\n );\n}\n\nfunction internalMatch(tokens, state, syntaxes) {\n function moveToNextToken() {\n do {\n tokenIndex++;\n token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;\n } while (token !== null && (token.type === TYPE.WhiteSpace || token.type === TYPE.Comment));\n }\n\n function getNextToken(offset) {\n const nextIndex = tokenIndex + offset;\n\n return nextIndex < tokens.length ? tokens[nextIndex] : null;\n }\n\n function stateSnapshotFromSyntax(nextState, prev) {\n return {\n nextState,\n matchStack,\n syntaxStack,\n thenStack,\n tokenIndex,\n prev\n };\n }\n\n function pushThenStack(nextState) {\n thenStack = {\n nextState,\n matchStack,\n syntaxStack,\n prev: thenStack\n };\n }\n\n function pushElseStack(nextState) {\n elseStack = stateSnapshotFromSyntax(nextState, elseStack);\n }\n\n function addTokenToMatch() {\n matchStack = {\n type: TOKEN,\n syntax: state.syntax,\n token,\n prev: matchStack\n };\n\n moveToNextToken();\n syntaxStash = null;\n\n if (tokenIndex > longestMatch) {\n longestMatch = tokenIndex;\n }\n }\n\n function openSyntax() {\n syntaxStack = {\n syntax: state.syntax,\n opts: state.syntax.opts || (syntaxStack !== null && syntaxStack.opts) || null,\n prev: syntaxStack\n };\n\n matchStack = {\n type: OPEN_SYNTAX,\n syntax: state.syntax,\n token: matchStack.token,\n prev: matchStack\n };\n }\n\n function closeSyntax() {\n if (matchStack.type === OPEN_SYNTAX) {\n matchStack = matchStack.prev;\n } else {\n matchStack = {\n type: CLOSE_SYNTAX,\n syntax: syntaxStack.syntax,\n token: matchStack.token,\n prev: matchStack\n };\n }\n\n syntaxStack = syntaxStack.prev;\n }\n\n let syntaxStack = null;\n let thenStack = null;\n let elseStack = null;\n\n // null – stashing allowed, nothing stashed\n // false – stashing disabled, nothing stashed\n // anithing else – fail stashable syntaxes, some syntax stashed\n let syntaxStash = null;\n\n let iterationCount = 0; // count iterations and prevent infinite loop\n let exitReason = null;\n\n let token = null;\n let tokenIndex = -1;\n let longestMatch = 0;\n let matchStack = {\n type: STUB,\n syntax: null,\n token: null,\n prev: null\n };\n\n moveToNextToken();\n\n while (exitReason === null && ++iterationCount < ITERATION_LIMIT) {\n // function mapList(list, fn) {\n // const result = [];\n // while (list) {\n // result.unshift(fn(list));\n // list = list.prev;\n // }\n // return result;\n // }\n // console.log('--\\n',\n // '#' + iterationCount,\n // require('util').inspect({\n // match: mapList(matchStack, x => x.type === TOKEN ? x.token && x.token.value : x.syntax ? ({ [OPEN_SYNTAX]: '<', [CLOSE_SYNTAX]: '</' }[x.type] || x.type) + '!' + x.syntax.name : null),\n // token: token && token.value,\n // tokenIndex,\n // syntax: syntax.type + (syntax.id ? ' #' + syntax.id : '')\n // }, { depth: null })\n // );\n switch (state.type) {\n case 'Match':\n if (thenStack === null) {\n // turn to MISMATCH when some tokens left unmatched\n if (token !== null) {\n // doesn't mismatch if just one token left and it's an IE hack\n if (tokenIndex !== tokens.length - 1 || (token.value !== '\\\\0' && token.value !== '\\\\9')) {\n state = MISMATCH;\n break;\n }\n }\n\n // break the main loop, return a result - MATCH\n exitReason = EXIT_REASON_MATCH;\n break;\n }\n\n // go to next syntax (`then` branch)\n state = thenStack.nextState;\n\n // check match is not empty\n if (state === DISALLOW_EMPTY) {\n if (thenStack.matchStack === matchStack) {\n state = MISMATCH;\n break;\n } else {\n state = MATCH;\n }\n }\n\n // close syntax if needed\n while (thenStack.syntaxStack !== syntaxStack) {\n closeSyntax();\n }\n\n // pop stack\n thenStack = thenStack.prev;\n break;\n\n case 'Mismatch':\n // when some syntax is stashed\n if (syntaxStash !== null && syntaxStash !== false) {\n // there is no else branches or a branch reduce match stack\n if (elseStack === null || tokenIndex > elseStack.tokenIndex) {\n // restore state from the stash\n elseStack = syntaxStash;\n syntaxStash = false; // disable stashing\n }\n } else if (elseStack === null) {\n // no else branches -> break the main loop\n // return a result - MISMATCH\n exitReason = EXIT_REASON_MISMATCH;\n break;\n }\n\n // go to next syntax (`else` branch)\n state = elseStack.nextState;\n\n // restore all the rest stack states\n thenStack = elseStack.thenStack;\n syntaxStack = elseStack.syntaxStack;\n matchStack = elseStack.matchStack;\n tokenIndex = elseStack.tokenIndex;\n token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;\n\n // pop stack\n elseStack = elseStack.prev;\n break;\n\n case 'MatchGraph':\n state = state.match;\n break;\n\n case 'If':\n // IMPORTANT: else stack push must go first,\n // since it stores the state of thenStack before changes\n if (state.else !== MISMATCH) {\n pushElseStack(state.else);\n }\n\n if (state.then !== MATCH) {\n pushThenStack(state.then);\n }\n\n state = state.match;\n break;\n\n case 'MatchOnce':\n state = {\n type: 'MatchOnceBuffer',\n syntax: state,\n index: 0,\n mask: 0\n };\n break;\n\n case 'MatchOnceBuffer': {\n const terms = state.syntax.terms;\n\n if (state.index === terms.length) {\n // no matches at all or it's required all terms to be matched\n if (state.mask === 0 || state.syntax.all) {\n state = MISMATCH;\n break;\n }\n\n // a partial match is ok\n state = MATCH;\n break;\n }\n\n // all terms are matched\n if (state.mask === (1 << terms.length) - 1) {\n state = MATCH;\n break;\n }\n\n for (; state.index < terms.length; state.index++) {\n const matchFlag = 1 << state.index;\n\n if ((state.mask & matchFlag) === 0) {\n // IMPORTANT: else stack push must go first,\n // since it stores the state of thenStack before changes\n pushElseStack(state);\n pushThenStack({\n type: 'AddMatchOnce',\n syntax: state.syntax,\n mask: state.mask | matchFlag\n });\n\n // match\n state = terms[state.index++];\n break;\n }\n }\n break;\n }\n\n case 'AddMatchOnce':\n state = {\n type: 'MatchOnceBuffer',\n syntax: state.syntax,\n index: 0,\n mask: state.mask\n };\n break;\n\n case 'Enum':\n if (token !== null) {\n let name = token.value.toLowerCase();\n\n // drop \\0 and \\9 hack from keyword name\n if (name.indexOf('\\\\') !== -1) {\n name = name.replace(/\\\\[09].*$/, '');\n }\n\n if (hasOwnProperty.call(state.map, name)) {\n state = state.map[name];\n break;\n }\n }\n\n state = MISMATCH;\n break;\n\n case 'Generic': {\n const opts = syntaxStack !== null ? syntaxStack.opts : null;\n const lastTokenIndex = tokenIndex + Math.floor(state.fn(token, getNextToken, opts));\n\n if (!isNaN(lastTokenIndex) && lastTokenIndex > tokenIndex) {\n while (tokenIndex < lastTokenIndex) {\n addTokenToMatch();\n }\n\n state = MATCH;\n } else {\n state = MISMATCH;\n }\n\n break;\n }\n\n case 'Type':\n case 'Property': {\n const syntaxDict = state.type === 'Type' ? 'types' : 'properties';\n const dictSyntax = hasOwnProperty.call(syntaxes, syntaxDict) ? syntaxes[syntaxDict][state.name] : null;\n\n if (!dictSyntax || !dictSyntax.match) {\n throw new Error(\n 'Bad syntax reference: ' +\n (state.type === 'Type'\n ? '<' + state.name + '>'\n : '<\\'' + state.name + '\\'>')\n );\n }\n\n // stash a syntax for types with low priority\n if (syntaxStash !== false && token !== null && state.type === 'Type') {\n const lowPriorityMatching =\n // https://drafts.csswg.org/css-values-4/#custom-idents\n // When parsing positionally-ambiguous keywords in a property value, a <custom-ident> production\n // can only claim the keyword if no other unfulfilled production can claim it.\n (state.name === 'custom-ident' && token.type === TYPE.Ident) ||\n\n // https://drafts.csswg.org/css-values-4/#lengths\n // ... if a `0` could be parsed as either a <number> or a <length> in a property (such as line-height),\n // it must parse as a <number>\n (state.name === 'length' && token.value === '0');\n\n if (lowPriorityMatching) {\n if (syntaxStash === null) {\n syntaxStash = stateSnapshotFromSyntax(state, elseStack);\n }\n\n state = MISMATCH;\n break;\n }\n }\n\n openSyntax();\n state = dictSyntax.match;\n break;\n }\n\n case 'Keyword': {\n const name = state.name;\n\n if (token !== null) {\n let keywordName = token.value;\n\n // drop \\0 and \\9 hack from keyword name\n if (keywordName.indexOf('\\\\') !== -1) {\n keywordName = keywordName.replace(/\\\\[09].*$/, '');\n }\n\n if (areStringsEqualCaseInsensitive(keywordName, name)) {\n addTokenToMatch();\n state = MATCH;\n break;\n }\n }\n\n state = MISMATCH;\n break;\n }\n\n case 'AtKeyword':\n case 'Function':\n if (token !== null && areStringsEqualCaseInsensitive(token.value, state.name)) {\n addTokenToMatch();\n state = MATCH;\n break;\n }\n\n state = MISMATCH;\n break;\n\n case 'Token':\n if (token !== null && token.value === state.value) {\n addTokenToMatch();\n state = MATCH;\n break;\n }\n\n state = MISMATCH;\n break;\n\n case 'Comma':\n if (token !== null && token.type === TYPE.Comma) {\n if (isCommaContextStart(matchStack.token)) {\n state = MISMATCH;\n } else {\n addTokenToMatch();\n state = isCommaContextEnd(token) ? MISMATCH : MATCH;\n }\n } else {\n state = isCommaContextStart(matchStack.token) || isCommaContextEnd(token) ? MATCH : MISMATCH;\n }\n\n break;\n\n case 'String':\n let string = '';\n let lastTokenIndex = tokenIndex;\n\n for (; lastTokenIndex < tokens.length && string.length < state.value.length; lastTokenIndex++) {\n string += tokens[lastTokenIndex].value;\n }\n\n if (areStringsEqualCaseInsensitive(string, state.value)) {\n while (tokenIndex < lastTokenIndex) {\n addTokenToMatch();\n }\n\n state = MATCH;\n } else {\n state = MISMATCH;\n }\n\n break;\n\n default:\n throw new Error('Unknown node type: ' + state.type);\n }\n }\n\n totalIterationCount += iterationCount;\n\n switch (exitReason) {\n case null:\n console.warn('[csstree-match] BREAK after ' + ITERATION_LIMIT + ' iterations');\n exitReason = EXIT_REASON_ITERATION_LIMIT;\n matchStack = null;\n break;\n\n case EXIT_REASON_MATCH:\n while (syntaxStack !== null) {\n closeSyntax();\n }\n break;\n\n default:\n matchStack = null;\n }\n\n return {\n tokens,\n reason: exitReason,\n iterations: iterationCount,\n match: matchStack,\n longestMatch\n };\n}\n\nexport function matchAsList(tokens, matchGraph, syntaxes) {\n const matchResult = internalMatch(tokens, matchGraph, syntaxes || {});\n\n if (matchResult.match !== null) {\n let item = reverseList(matchResult.match).prev;\n\n matchResult.match = [];\n\n while (item !== null) {\n switch (item.type) {\n case OPEN_SYNTAX:\n case CLOSE_SYNTAX:\n matchResult.match.push({\n type: item.type,\n syntax: item.syntax\n });\n break;\n\n default:\n matchResult.match.push({\n token: item.token.value,\n node: item.token.node\n });\n break;\n }\n\n item = item.prev;\n }\n }\n\n return matchResult;\n}\n\nexport function matchAsTree(tokens, matchGraph, syntaxes) {\n const matchResult = internalMatch(tokens, matchGraph, syntaxes || {});\n\n if (matchResult.match === null) {\n return matchResult;\n }\n\n let item = matchResult.match;\n let host = matchResult.match = {\n syntax: matchGraph.syntax || null,\n match: []\n };\n const hostStack = [host];\n\n // revert a list and start with 2nd item since 1st is a stub item\n item = reverseList(item).prev;\n\n // build a tree\n while (item !== null) {\n switch (item.type) {\n case OPEN_SYNTAX:\n host.match.push(host = {\n syntax: item.syntax,\n match: []\n });\n hostStack.push(host);\n break;\n\n case CLOSE_SYNTAX:\n hostStack.pop();\n host = hostStack[hostStack.length - 1];\n break;\n\n default:\n host.match.push({\n syntax: item.syntax || null,\n token: item.token.value,\n node: item.token.node\n });\n }\n\n item = item.prev;\n }\n\n return matchResult;\n}\n","export function getTrace(node) {\n function shouldPutToTrace(syntax) {\n if (syntax === null) {\n return false;\n }\n\n return (\n syntax.type === 'Type' ||\n syntax.type === 'Property' ||\n syntax.type === 'Keyword'\n );\n }\n\n function hasMatch(matchNode) {\n if (Array.isArray(matchNode.match)) {\n // use for-loop for better perfomance\n for (let i = 0; i < matchNode.match.length; i++) {\n if (hasMatch(matchNode.match[i])) {\n if (shouldPutToTrace(matchNode.syntax)) {\n result.unshift(matchNode.syntax);\n }\n\n return true;\n }\n }\n } else if (matchNode.node === node) {\n result = shouldPutToTrace(matchNode.syntax)\n ? [matchNode.syntax]\n : [];\n\n return true;\n }\n\n return false;\n }\n\n let result = null;\n\n if (this.matched !== null) {\n hasMatch(this.matched);\n }\n\n return result;\n}\n\nexport function isType(node, type) {\n return testNode(this, node, match => match.type === 'Type' && match.name === type);\n}\n\nexport function isProperty(node, property) {\n return testNode(this, node, match => match.type === 'Property' && match.name === property);\n}\n\nexport function isKeyword(node) {\n return testNode(this, node, match => match.type === 'Keyword');\n}\n\nfunction testNode(match, node, fn) {\n const trace = getTrace.call(match, node);\n\n if (trace === null) {\n return false;\n }\n\n return trace.some(fn);\n}\n","import { List } from '../utils/List.js';\n\nfunction getFirstMatchNode(matchNode) {\n if ('node' in matchNode) {\n return matchNode.node;\n }\n\n return getFirstMatchNode(matchNode.match[0]);\n}\n\nfunction getLastMatchNode(matchNode) {\n if ('node' in matchNode) {\n return matchNode.node;\n }\n\n return getLastMatchNode(matchNode.match[matchNode.match.length - 1]);\n}\n\nexport function matchFragments(lexer, ast, match, type, name) {\n function findFragments(matchNode) {\n if (matchNode.syntax !== null &&\n matchNode.syntax.type === type &&\n matchNode.syntax.name === name) {\n const start = getFirstMatchNode(matchNode);\n const end = getLastMatchNode(matchNode);\n\n lexer.syntax.walk(ast, function(node, item, list) {\n if (node === start) {\n const nodes = new List();\n\n do {\n nodes.appendData(item.data);\n\n if (item.data === end) {\n break;\n }\n\n item = item.next;\n } while (item !== null);\n\n fragments.push({\n parent: list,\n nodes\n });\n }\n });\n }\n\n if (Array.isArray(matchNode.match)) {\n matchNode.match.forEach(findFragments);\n }\n }\n\n const fragments = [];\n\n if (match.matched !== null) {\n findFragments(match.matched);\n }\n\n return fragments;\n}\n","import { List } from '../utils/List.js';\n\nconst { hasOwnProperty } = Object.prototype;\n\nfunction isValidNumber(value) {\n // Number.isInteger(value) && value >= 0\n return (\n typeof value === 'number' &&\n isFinite(value) &&\n Math.floor(value) === value &&\n value >= 0\n );\n}\n\nfunction isValidLocation(loc) {\n return (\n Boolean(loc) &&\n isValidNumber(loc.offset) &&\n isValidNumber(loc.line) &&\n isValidNumber(loc.column)\n );\n}\n\nfunction createNodeStructureChecker(type, fields) {\n return function checkNode(node, warn) {\n if (!node || node.constructor !== Object) {\n return warn(node, 'Type of node should be an Object');\n }\n\n for (let key in node) {\n let valid = true;\n\n if (hasOwnProperty.call(node, key) === false) {\n continue;\n }\n\n if (key === 'type') {\n if (node.type !== type) {\n warn(node, 'Wrong node type `' + node.type + '`, expected `' + type + '`');\n }\n } else if (key === 'loc') {\n if (node.loc === null) {\n continue;\n } else if (node.loc && node.loc.constructor === Object) {\n if (typeof node.loc.source !== 'string') {\n key += '.source';\n } else if (!isValidLocation(node.loc.start)) {\n key += '.start';\n } else if (!isValidLocation(node.loc.end)) {\n key += '.end';\n } else {\n continue;\n }\n }\n\n valid = false;\n } else if (fields.hasOwnProperty(key)) {\n valid = false;\n\n for (let i = 0; !valid && i < fields[key].length; i++) {\n const fieldType = fields[key][i];\n\n switch (fieldType) {\n case String:\n valid = typeof node[key] === 'string';\n break;\n\n case Boolean:\n valid = typeof node[key] === 'boolean';\n break;\n\n case null:\n valid = node[key] === null;\n break;\n\n default:\n if (typeof fieldType === 'string') {\n valid = node[key] && node[key].type === fieldType;\n } else if (Array.isArray(fieldType)) {\n valid = node[key] instanceof List;\n }\n }\n }\n } else {\n warn(node, 'Unknown field `' + key + '` for ' + type + ' node type');\n }\n\n if (!valid) {\n warn(node, 'Bad value for `' + type + '.' + key + '`');\n }\n }\n\n for (const key in fields) {\n if (hasOwnProperty.call(fields, key) &&\n hasOwnProperty.call(node, key) === false) {\n warn(node, 'Field `' + type + '.' + key + '` is missed');\n }\n }\n };\n}\n\nfunction processStructure(name, nodeType) {\n const structure = nodeType.structure;\n const fields = {\n type: String,\n loc: true\n };\n const docs = {\n type: '\"' + name + '\"'\n };\n\n for (const key in structure) {\n if (hasOwnProperty.call(structure, key) === false) {\n continue;\n }\n\n const docsTypes = [];\n const fieldTypes = fields[key] = Array.isArray(structure[key])\n ? structure[key].slice()\n : [structure[key]];\n\n for (let i = 0; i < fieldTypes.length; i++) {\n const fieldType = fieldTypes[i];\n if (fieldType === String || fieldType === Boolean) {\n docsTypes.push(fieldType.name);\n } else if (fieldType === null) {\n docsTypes.push('null');\n } else if (typeof fieldType === 'string') {\n docsTypes.push('<' + fieldType + '>');\n } else if (Array.isArray(fieldType)) {\n docsTypes.push('List'); // TODO: use type enum\n } else {\n throw new Error('Wrong value `' + fieldType + '` in `' + name + '.' + key + '` structure definition');\n }\n }\n\n docs[key] = docsTypes.join(' | ');\n }\n\n return {\n docs,\n check: createNodeStructureChecker(name, fields)\n };\n}\n\nexport function getStructureFromConfig(config) {\n const structure = {};\n\n if (config.node) {\n for (const name in config.node) {\n if (hasOwnProperty.call(config.node, name)) {\n const nodeType = config.node[name];\n\n if (nodeType.structure) {\n structure[name] = processStructure(name, nodeType);\n } else {\n throw new Error('Missed `structure` field in `' + name + '` node type definition');\n }\n }\n }\n }\n\n return structure;\n};\n","import { SyntaxReferenceError, SyntaxMatchError } from './error.js';\nimport * as names from '../utils/names.js';\nimport { cssWideKeywords } from './generic-const.js';\nimport { createGenericTypes } from './generic.js';\nimport * as units from './units.js';\nimport { parse, generate, walk } from '../definition-syntax/index.js';\nimport prepareTokens from './prepare-tokens.js';\nimport { buildMatchGraph } from './match-graph.js';\nimport { matchAsTree } from './match.js';\nimport * as trace from './trace.js';\nimport { matchFragments } from './search.js';\nimport { getStructureFromConfig } from './structure.js';\n\nconst cssWideKeywordsSyntax = buildMatchGraph(cssWideKeywords.join(' | '));\n\nfunction dumpMapSyntax(map, compact, syntaxAsAst) {\n const result = {};\n\n for (const name in map) {\n if (map[name].syntax) {\n result[name] = syntaxAsAst\n ? map[name].syntax\n : generate(map[name].syntax, { compact });\n }\n }\n\n return result;\n}\n\nfunction dumpAtruleMapSyntax(map, compact, syntaxAsAst) {\n const result = {};\n\n for (const [name, atrule] of Object.entries(map)) {\n result[name] = {\n prelude: atrule.prelude && (\n syntaxAsAst\n ? atrule.prelude.syntax\n : generate(atrule.prelude.syntax, { compact })\n ),\n descriptors: atrule.descriptors && dumpMapSyntax(atrule.descriptors, compact, syntaxAsAst)\n };\n }\n\n return result;\n}\n\nfunction valueHasVar(tokens) {\n for (let i = 0; i < tokens.length; i++) {\n if (tokens[i].value.toLowerCase() === 'var(') {\n return true;\n }\n }\n\n return false;\n}\n\nfunction buildMatchResult(matched, error, iterations) {\n return {\n matched,\n iterations,\n error,\n ...trace\n };\n}\n\nfunction matchSyntax(lexer, syntax, value, useCssWideKeywords) {\n const tokens = prepareTokens(value, lexer.syntax);\n let result;\n\n if (valueHasVar(tokens)) {\n return buildMatchResult(null, new Error('Matching for a tree with var() is not supported'));\n }\n\n if (useCssWideKeywords) {\n result = matchAsTree(tokens, lexer.cssWideKeywordsSyntax, lexer);\n }\n\n if (!useCssWideKeywords || !result.match) {\n result = matchAsTree(tokens, syntax.match, lexer);\n if (!result.match) {\n return buildMatchResult(\n null,\n new SyntaxMatchError(result.reason, syntax.syntax, value, result),\n result.iterations\n );\n }\n }\n\n return buildMatchResult(result.match, null, result.iterations);\n}\n\nexport class Lexer {\n constructor(config, syntax, structure) {\n this.cssWideKeywordsSyntax = cssWideKeywordsSyntax;\n this.syntax = syntax;\n this.generic = false;\n this.units = { ...units };\n this.atrules = Object.create(null);\n this.properties = Object.create(null);\n this.types = Object.create(null);\n this.structure = structure || getStructureFromConfig(config);\n\n if (config) {\n if (config.units) {\n for (const group of Object.keys(units)) {\n if (Array.isArray(config.units[group])) {\n this.units[group] = config.units[group];\n }\n }\n }\n\n if (config.types) {\n for (const name in config.types) {\n this.addType_(name, config.types[name]);\n }\n }\n\n if (config.generic) {\n this.generic = true;\n for (const [name, value] of Object.entries(createGenericTypes(this.units))) {\n this.addType_(name, value);\n }\n }\n\n if (config.atrules) {\n for (const name in config.atrules) {\n this.addAtrule_(name, config.atrules[name]);\n }\n }\n\n if (config.properties) {\n for (const name in config.properties) {\n this.addProperty_(name, config.properties[name]);\n }\n }\n }\n }\n\n checkStructure(ast) {\n function collectWarning(node, message) {\n warns.push({ node, message });\n }\n\n const structure = this.structure;\n const warns = [];\n\n this.syntax.walk(ast, function(node) {\n if (structure.hasOwnProperty(node.type)) {\n structure[node.type].check(node, collectWarning);\n } else {\n collectWarning(node, 'Unknown node type `' + node.type + '`');\n }\n });\n\n return warns.length ? warns : false;\n }\n\n createDescriptor(syntax, type, name, parent = null) {\n const ref = {\n type,\n name\n };\n const descriptor = {\n type,\n name,\n parent,\n serializable: typeof syntax === 'string' || (syntax && typeof syntax.type === 'string'),\n syntax: null,\n match: null\n };\n\n if (typeof syntax === 'function') {\n descriptor.match = buildMatchGraph(syntax, ref);\n } else {\n if (typeof syntax === 'string') {\n // lazy parsing on first access\n Object.defineProperty(descriptor, 'syntax', {\n get() {\n Object.defineProperty(descriptor, 'syntax', {\n value: parse(syntax)\n });\n\n return descriptor.syntax;\n }\n });\n } else {\n descriptor.syntax = syntax;\n }\n\n // lazy graph build on first access\n Object.defineProperty(descriptor, 'match', {\n get() {\n Object.defineProperty(descriptor, 'match', {\n value: buildMatchGraph(descriptor.syntax, ref)\n });\n\n return descriptor.match;\n }\n });\n }\n\n return descriptor;\n }\n addAtrule_(name, syntax) {\n if (!syntax) {\n return;\n }\n\n this.atrules[name] = {\n type: 'Atrule',\n name: name,\n prelude: syntax.prelude ? this.createDescriptor(syntax.prelude, 'AtrulePrelude', name) : null,\n descriptors: syntax.descriptors\n ? Object.keys(syntax.descriptors).reduce(\n (map, descName) => {\n map[descName] = this.createDescriptor(syntax.descriptors[descName], 'AtruleDescriptor', descName, name);\n return map;\n },\n Object.create(null)\n )\n : null\n };\n }\n addProperty_(name, syntax) {\n if (!syntax) {\n return;\n }\n\n this.properties[name] = this.createDescriptor(syntax, 'Property', name);\n }\n addType_(name, syntax) {\n if (!syntax) {\n return;\n }\n\n this.types[name] = this.createDescriptor(syntax, 'Type', name);\n }\n\n checkAtruleName(atruleName) {\n if (!this.getAtrule(atruleName)) {\n return new SyntaxReferenceError('Unknown at-rule', '@' + atruleName);\n }\n }\n checkAtrulePrelude(atruleName, prelude) {\n const error = this.checkAtruleName(atruleName);\n\n if (error) {\n return error;\n }\n\n const atrule = this.getAtrule(atruleName);\n\n if (!atrule.prelude && prelude) {\n return new SyntaxError('At-rule `@' + atruleName + '` should not contain a prelude');\n }\n\n if (atrule.prelude && !prelude) {\n if (!matchSyntax(this, atrule.prelude, '', false).matched) {\n return new SyntaxError('At-rule `@' + atruleName + '` should contain a prelude');\n }\n }\n }\n checkAtruleDescriptorName(atruleName, descriptorName) {\n const error = this.checkAtruleName(atruleName);\n\n if (error) {\n return error;\n }\n\n const atrule = this.getAtrule(atruleName);\n const descriptor = names.keyword(descriptorName);\n\n if (!atrule.descriptors) {\n return new SyntaxError('At-rule `@' + atruleName + '` has no known descriptors');\n }\n\n if (!atrule.descriptors[descriptor.name] &&\n !atrule.descriptors[descriptor.basename]) {\n return new SyntaxReferenceError('Unknown at-rule descriptor', descriptorName);\n }\n }\n checkPropertyName(propertyName) {\n if (!this.getProperty(propertyName)) {\n return new SyntaxReferenceError('Unknown property', propertyName);\n }\n }\n\n matchAtrulePrelude(atruleName, prelude) {\n const error = this.checkAtrulePrelude(atruleName, prelude);\n\n if (error) {\n return buildMatchResult(null, error);\n }\n\n const atrule = this.getAtrule(atruleName);\n\n if (!atrule.prelude) {\n return buildMatchResult(null, null);\n }\n\n return matchSyntax(this, atrule.prelude, prelude || '', false);\n }\n matchAtruleDescriptor(atruleName, descriptorName, value) {\n const error = this.checkAtruleDescriptorName(atruleName, descriptorName);\n\n if (error) {\n return buildMatchResult(null, error);\n }\n\n const atrule = this.getAtrule(atruleName);\n const descriptor = names.keyword(descriptorName);\n\n return matchSyntax(this, atrule.descriptors[descriptor.name] || atrule.descriptors[descriptor.basename], value, false);\n }\n matchDeclaration(node) {\n if (node.type !== 'Declaration') {\n return buildMatchResult(null, new Error('Not a Declaration node'));\n }\n\n return this.matchProperty(node.property, node.value);\n }\n matchProperty(propertyName, value) {\n // don't match syntax for a custom property at the moment\n if (names.property(propertyName).custom) {\n return buildMatchResult(null, new Error('Lexer matching doesn\\'t applicable for custom properties'));\n }\n\n const error = this.checkPropertyName(propertyName);\n\n if (error) {\n return buildMatchResult(null, error);\n }\n\n return matchSyntax(this, this.getProperty(propertyName), value, true);\n }\n matchType(typeName, value) {\n const typeSyntax = this.getType(typeName);\n\n if (!typeSyntax) {\n return buildMatchResult(null, new SyntaxReferenceError('Unknown type', typeName));\n }\n\n return matchSyntax(this, typeSyntax, value, false);\n }\n match(syntax, value) {\n if (typeof syntax !== 'string' && (!syntax || !syntax.type)) {\n return buildMatchResult(null, new SyntaxReferenceError('Bad syntax'));\n }\n\n if (typeof syntax === 'string' || !syntax.match) {\n syntax = this.createDescriptor(syntax, 'Type', 'anonymous');\n }\n\n return matchSyntax(this, syntax, value, false);\n }\n\n findValueFragments(propertyName, value, type, name) {\n return matchFragments(this, value, this.matchProperty(propertyName, value), type, name);\n }\n findDeclarationValueFragments(declaration, type, name) {\n return matchFragments(this, declaration.value, this.matchDeclaration(declaration), type, name);\n }\n findAllFragments(ast, type, name) {\n const result = [];\n\n this.syntax.walk(ast, {\n visit: 'Declaration',\n enter: (declaration) => {\n result.push.apply(result, this.findDeclarationValueFragments(declaration, type, name));\n }\n });\n\n return result;\n }\n\n getAtrule(atruleName, fallbackBasename = true) {\n const atrule = names.keyword(atruleName);\n const atruleEntry = atrule.vendor && fallbackBasename\n ? this.atrules[atrule.name] || this.atrules[atrule.basename]\n : this.atrules[atrule.name];\n\n return atruleEntry || null;\n }\n getAtrulePrelude(atruleName, fallbackBasename = true) {\n const atrule = this.getAtrule(atruleName, fallbackBasename);\n\n return atrule && atrule.prelude || null;\n }\n getAtruleDescriptor(atruleName, name) {\n return this.atrules.hasOwnProperty(atruleName) && this.atrules.declarators\n ? this.atrules[atruleName].declarators[name] || null\n : null;\n }\n getProperty(propertyName, fallbackBasename = true) {\n const property = names.property(propertyName);\n const propertyEntry = property.vendor && fallbackBasename\n ? this.properties[property.name] || this.properties[property.basename]\n : this.properties[property.name];\n\n return propertyEntry || null;\n }\n getType(name) {\n return hasOwnProperty.call(this.types, name) ? this.types[name] : null;\n }\n\n validate() {\n function validate(syntax, name, broken, descriptor) {\n if (broken.has(name)) {\n return broken.get(name);\n }\n\n broken.set(name, false);\n if (descriptor.syntax !== null) {\n walk(descriptor.syntax, function(node) {\n if (node.type !== 'Type' && node.type !== 'Property') {\n return;\n }\n\n const map = node.type === 'Type' ? syntax.types : syntax.properties;\n const brokenMap = node.type === 'Type' ? brokenTypes : brokenProperties;\n\n if (!hasOwnProperty.call(map, node.name) || validate(syntax, node.name, brokenMap, map[node.name])) {\n broken.set(name, true);\n }\n }, this);\n }\n }\n\n let brokenTypes = new Map();\n let brokenProperties = new Map();\n\n for (const key in this.types) {\n validate(this, key, brokenTypes, this.types[key]);\n }\n\n for (const key in this.properties) {\n validate(this, key, brokenProperties, this.properties[key]);\n }\n\n brokenTypes = [...brokenTypes.keys()].filter(name => brokenTypes.get(name));\n brokenProperties = [...brokenProperties.keys()].filter(name => brokenProperties.get(name));\n\n if (brokenTypes.length || brokenProperties.length) {\n return {\n types: brokenTypes,\n properties: brokenProperties\n };\n }\n\n return null;\n }\n dump(syntaxAsAst, pretty) {\n return {\n generic: this.generic,\n units: this.units,\n types: dumpMapSyntax(this.types, !pretty, syntaxAsAst),\n properties: dumpMapSyntax(this.properties, !pretty, syntaxAsAst),\n atrules: dumpAtruleMapSyntax(this.atrules, !pretty, syntaxAsAst)\n };\n }\n toString() {\n return JSON.stringify(this.dump());\n }\n};\n","function appendOrSet(a, b) {\n if (typeof b === 'string' && /^\\s*\\|/.test(b)) {\n return typeof a === 'string'\n ? a + b\n : b.replace(/^\\s*\\|\\s*/, '');\n }\n\n return b || null;\n}\n\nfunction sliceProps(obj, props) {\n const result = Object.create(null);\n\n for (const [key, value] of Object.entries(obj)) {\n if (value) {\n result[key] = {};\n for (const prop of Object.keys(value)) {\n if (props.includes(prop)) {\n result[key][prop] = value[prop];\n }\n }\n }\n }\n\n return result;\n}\n\nexport default function mix(dest, src) {\n const result = { ...dest };\n\n for (const [prop, value] of Object.entries(src)) {\n switch (prop) {\n case 'generic':\n result[prop] = Boolean(value);\n break;\n\n case 'units':\n result[prop] = { ...dest[prop] };\n for (const [name, patch] of Object.entries(value)) {\n result[prop][name] = Array.isArray(patch) ? patch : [];\n }\n break;\n\n case 'atrules':\n result[prop] = { ...dest[prop] };\n\n for (const [name, atrule] of Object.entries(value)) {\n const exists = result[prop][name] || {};\n const current = result[prop][name] = {\n prelude: exists.prelude || null,\n descriptors: {\n ...exists.descriptors\n }\n };\n\n if (!atrule) {\n continue;\n }\n\n current.prelude = atrule.prelude\n ? appendOrSet(current.prelude, atrule.prelude)\n : current.prelude || null;\n\n for (const [descriptorName, descriptorValue] of Object.entries(atrule.descriptors || {})) {\n current.descriptors[descriptorName] = descriptorValue\n ? appendOrSet(current.descriptors[descriptorName], descriptorValue)\n : null;\n }\n\n if (!Object.keys(current.descriptors).length) {\n current.descriptors = null;\n }\n }\n break;\n\n case 'types':\n case 'properties':\n result[prop] = { ...dest[prop] };\n for (const [name, syntax] of Object.entries(value)) {\n result[prop][name] = appendOrSet(result[prop][name], syntax);\n }\n break;\n\n case 'scope':\n result[prop] = { ...dest[prop] };\n for (const [name, props] of Object.entries(value)) {\n result[prop][name] = { ...result[prop][name], ...props };\n }\n break;\n\n case 'parseContext':\n result[prop] = {\n ...dest[prop],\n ...value\n };\n break;\n\n case 'atrule':\n case 'pseudo':\n result[prop] = {\n ...dest[prop],\n ...sliceProps(value, ['parse']) };\n break;\n\n case 'node':\n result[prop] = {\n ...dest[prop],\n ...sliceProps(value, ['name', 'structure', 'parse', 'generate', 'walkContext'])\n };\n break;\n }\n }\n\n return result;\n}\n","import { tokenize } from '../tokenizer/index.js';\nimport { createParser } from '../parser/create.js';\nimport { createGenerator } from '../generator/create.js';\nimport { createConvertor } from '../convertor/create.js';\nimport { createWalker } from '../walker/create.js';\nimport { Lexer } from '../lexer/Lexer.js';\nimport mix from './config/mix.js';\n\nfunction createSyntax(config) {\n const parse = createParser(config);\n const walk = createWalker(config);\n const generate = createGenerator(config);\n const { fromPlainObject, toPlainObject } = createConvertor(walk);\n\n const syntax = {\n lexer: null,\n createLexer: config => new Lexer(config, syntax, syntax.lexer.structure),\n\n tokenize,\n parse,\n generate,\n\n walk,\n find: walk.find,\n findLast: walk.findLast,\n findAll: walk.findAll,\n\n fromPlainObject,\n toPlainObject,\n\n fork(extension) {\n const base = mix({}, config); // copy of config\n\n return createSyntax(\n typeof extension === 'function'\n ? extension(base, Object.assign)\n : mix(base, extension)\n );\n }\n };\n\n syntax.lexer = new Lexer({\n generic: true,\n units: config.units,\n types: config.types,\n atrules: config.atrules,\n properties: config.properties,\n node: config.node\n }, syntax);\n\n return syntax;\n};\n\nexport default config => createSyntax(mix({}, config));\n","import { List } from '../utils/List.js';\n\nexport function createConvertor(walk) {\n return {\n fromPlainObject(ast) {\n walk(ast, {\n enter(node) {\n if (node.children && node.children instanceof List === false) {\n node.children = new List().fromArray(node.children);\n }\n }\n });\n\n return ast;\n },\n toPlainObject(ast) {\n walk(ast, {\n leave(node) {\n if (node.children && node.children instanceof List) {\n node.children = node.children.toArray();\n }\n }\n });\n\n return ast;\n }\n };\n};\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(startToken) {\n return this.Raw(startToken, 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(startToken) {\n return this.Raw(startToken, null, true);\n}\nfunction consumeRule() {\n return this.parseWithFallback(this.Rule, consumeRaw);\n}\nfunction consumeRawDeclaration(startToken) {\n return this.Raw(startToken, 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 { 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(startToken) {\n return this.Raw(startToken, this.consumeUntilExclamationMarkOrSemicolon, true);\n}\n\nfunction consumeCustomPropertyRaw(startToken) {\n return this.Raw(startToken, 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(startToken) {\n return this.Raw(startToken, 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 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 { 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 {\n Ident,\n Number,\n Dimension,\n LeftParenthesis,\n RightParenthesis,\n Colon,\n Delim\n} from '../../tokenizer/index.js';\n\nexport const name = 'MediaFeature';\nexport const structure = {\n name: String,\n value: ['Identifier', 'Number', 'Dimension', 'Ratio', null]\n};\n\nexport function parse() {\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 default:\n this.error('Number, dimension, ratio or identifier is expected');\n }\n\n this.skipSC();\n }\n\n this.eat(RightParenthesis);\n\n return {\n type: 'MediaFeature',\n loc: this.getLocation(start, this.tokenStart),\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 WhiteSpace,\n Comment,\n Ident,\n LeftParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'MediaQuery';\nexport const structure = {\n children: [[\n 'Identifier',\n 'MediaFeature',\n 'WhiteSpace'\n ]]\n};\n\nexport function parse() {\n const children = this.createList();\n let child = null;\n\n this.skipSC();\n\n scan:\n while (!this.eof) {\n switch (this.tokenType) {\n case Comment:\n case WhiteSpace:\n this.next();\n continue;\n\n case Ident:\n child = this.Identifier();\n break;\n\n case LeftParenthesis:\n child = this.MediaFeature();\n break;\n\n default:\n break scan;\n }\n\n children.push(child);\n }\n\n if (child === null) {\n this.error('Identifier or parenthesis is expected');\n }\n\n return {\n type: 'MediaQuery',\n loc: this.getLocationFromList(children),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node);\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 (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(this.tokenIndex, 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 (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(this.tokenIndex, 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 { isDigit, Delim, Number as NumberToken } from '../../tokenizer/index.js';\n\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\nconst FULLSTOP = 0x002E; // U+002E FULL STOP (.)\n\n// Terms of <ratio> should be a positive numbers (not zero or negative)\n// (see https://drafts.csswg.org/mediaqueries-3/#values)\n// However, -o-min-device-pixel-ratio takes fractional values as a ratio's term\n// and this is using by various sites. Therefore we relax checking on parse\n// to test a term is unsigned number without an exponent part.\n// Additional checking may be applied on lexer validation.\nfunction consumeNumber() {\n this.skipSC();\n\n const value = this.consume(NumberToken);\n\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if (!isDigit(code) && code !== FULLSTOP) {\n this.error('Unsigned number is expected', this.tokenStart - value.length + i);\n }\n }\n\n if (Number(value) === 0) {\n this.error('Zero number is not allowed', this.tokenStart - value.length);\n }\n\n return value;\n}\n\nexport const name = 'Ratio';\nexport const structure = {\n left: String,\n right: String\n};\n\n// <positive-integer> S* '/' S* <positive-integer>\nexport function parse() {\n const start = this.tokenStart;\n const left = consumeNumber.call(this);\n let right;\n\n this.skipSC();\n this.eatDelim(SOLIDUS);\n right = consumeNumber.call(this);\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.token(NumberToken, node.left);\n this.token(Delim, '/');\n this.token(NumberToken, node.right);\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(startToken, consumeUntil, excludeWhiteSpace) {\n const startOffset = this.getTokenStart(startToken);\n let endOffset;\n\n this.skipUntilBalanced(startToken, 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(startToken) {\n return this.Raw(startToken, 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","export const name = 'Selector';\nexport const structure = {\n children: [[\n 'TypeSelector',\n 'IdSelector',\n 'ClassSelector',\n 'AttributeSelector',\n 'PseudoClassSelector',\n 'PseudoElementSelector',\n 'Combinator',\n 'WhiteSpace'\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// § 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(startToken) {\n return this.Raw(startToken, 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 // §2.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 { 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 definitions from '../../data.js';\nimport * as node from '../node/index.js';\n\nexport default {\n generic: true,\n ...definitions,\n node\n};\n","export default {\n \"generic\": true,\n \"units\": {\n \"angle\": [\n \"deg\",\n \"grad\",\n \"rad\",\n \"turn\"\n ],\n \"decibel\": [\n \"db\"\n ],\n \"flex\": [\n \"fr\"\n ],\n \"frequency\": [\n \"hz\",\n \"khz\"\n ],\n \"length\": [\n \"cm\",\n \"mm\",\n \"q\",\n \"in\",\n \"pt\",\n \"pc\",\n \"px\",\n \"em\",\n \"rem\",\n \"ex\",\n \"rex\",\n \"cap\",\n \"rcap\",\n \"ch\",\n \"rch\",\n \"ic\",\n \"ric\",\n \"lh\",\n \"rlh\",\n \"vw\",\n \"svw\",\n \"lvw\",\n \"dvw\",\n \"vh\",\n \"svh\",\n \"lvh\",\n \"dvh\",\n \"vi\",\n \"svi\",\n \"lvi\",\n \"dvi\",\n \"vb\",\n \"svb\",\n \"lvb\",\n \"dvb\",\n \"vmin\",\n \"svmin\",\n \"lvmin\",\n \"dvmin\",\n \"vmax\",\n \"svmax\",\n \"lvmax\",\n \"dvmax\",\n \"cqw\",\n \"cqh\",\n \"cqi\",\n \"cqb\",\n \"cqmin\",\n \"cqmax\"\n ],\n \"resolution\": [\n \"dpi\",\n \"dpcm\",\n \"dppx\",\n \"x\"\n ],\n \"semitones\": [\n \"st\"\n ],\n \"time\": [\n \"s\",\n \"ms\"\n ]\n },\n \"types\": {\n \"abs()\": \"abs( <calc-sum> )\",\n \"absolute-size\": \"xx-small|x-small|small|medium|large|x-large|xx-large|xxx-large\",\n \"acos()\": \"acos( <calc-sum> )\",\n \"alpha-value\": \"<number>|<percentage>\",\n \"angle-percentage\": \"<angle>|<percentage>\",\n \"angular-color-hint\": \"<angle-percentage>\",\n \"angular-color-stop\": \"<color>&&<color-stop-angle>?\",\n \"angular-color-stop-list\": \"[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>\",\n \"animateable-feature\": \"scroll-position|contents|<custom-ident>\",\n \"asin()\": \"asin( <calc-sum> )\",\n \"atan()\": \"atan( <calc-sum> )\",\n \"atan2()\": \"atan2( <calc-sum> , <calc-sum> )\",\n \"attachment\": \"scroll|fixed|local\",\n \"attr()\": \"attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )\",\n \"attr-matcher\": \"['~'|'|'|'^'|'$'|'*']? '='\",\n \"attr-modifier\": \"i|s\",\n \"attribute-selector\": \"'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'\",\n \"auto-repeat\": \"repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )\",\n \"auto-track-list\": \"[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?\",\n \"axis\": \"block|inline|vertical|horizontal\",\n \"baseline-position\": \"[first|last]? baseline\",\n \"basic-shape\": \"<inset()>|<circle()>|<ellipse()>|<polygon()>|<path()>\",\n \"bg-image\": \"none|<image>\",\n \"bg-layer\": \"<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>\",\n \"bg-position\": \"[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]\",\n \"bg-size\": \"[<length-percentage>|auto]{1,2}|cover|contain\",\n \"blur()\": \"blur( <length> )\",\n \"blend-mode\": \"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity\",\n \"box\": \"border-box|padding-box|content-box\",\n \"brightness()\": \"brightness( <number-percentage> )\",\n \"calc()\": \"calc( <calc-sum> )\",\n \"calc-sum\": \"<calc-product> [['+'|'-'] <calc-product>]*\",\n \"calc-product\": \"<calc-value> ['*' <calc-value>|'/' <number>]*\",\n \"calc-value\": \"<number>|<dimension>|<percentage>|<calc-constant>|( <calc-sum> )\",\n \"calc-constant\": \"e|pi|infinity|-infinity|NaN\",\n \"cf-final-image\": \"<image>|<color>\",\n \"cf-mixing-image\": \"<percentage>?&&<image>\",\n \"circle()\": \"circle( [<shape-radius>]? [at <position>]? )\",\n \"clamp()\": \"clamp( <calc-sum>#{3} )\",\n \"class-selector\": \"'.' <ident-token>\",\n \"clip-source\": \"<url>\",\n \"color\": \"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>\",\n \"color-stop\": \"<color-stop-length>|<color-stop-angle>\",\n \"color-stop-angle\": \"<angle-percentage>{1,2}\",\n \"color-stop-length\": \"<length-percentage>{1,2}\",\n \"color-stop-list\": \"[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>\",\n \"combinator\": \"'>'|'+'|'~'|['||']\",\n \"common-lig-values\": \"[common-ligatures|no-common-ligatures]\",\n \"compat-auto\": \"searchfield|textarea|push-button|slider-horizontal|checkbox|radio|square-button|menulist|listbox|meter|progress-bar|button\",\n \"composite-style\": \"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor\",\n \"compositing-operator\": \"add|subtract|intersect|exclude\",\n \"compound-selector\": \"[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!\",\n \"compound-selector-list\": \"<compound-selector>#\",\n \"complex-selector\": \"<compound-selector> [<combinator>? <compound-selector>]*\",\n \"complex-selector-list\": \"<complex-selector>#\",\n \"conic-gradient()\": \"conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )\",\n \"contextual-alt-values\": \"[contextual|no-contextual]\",\n \"content-distribution\": \"space-between|space-around|space-evenly|stretch\",\n \"content-list\": \"[<string>|contents|<image>|<counter>|<quote>|<target>|<leader()>|<attr()>]+\",\n \"content-position\": \"center|start|end|flex-start|flex-end\",\n \"content-replacement\": \"<image>\",\n \"contrast()\": \"contrast( [<number-percentage>] )\",\n \"cos()\": \"cos( <calc-sum> )\",\n \"counter\": \"<counter()>|<counters()>\",\n \"counter()\": \"counter( <counter-name> , <counter-style>? )\",\n \"counter-name\": \"<custom-ident>\",\n \"counter-style\": \"<counter-style-name>|symbols( )\",\n \"counter-style-name\": \"<custom-ident>\",\n \"counters()\": \"counters( <counter-name> , <string> , <counter-style>? )\",\n \"cross-fade()\": \"cross-fade( <cf-mixing-image> , <cf-final-image>? )\",\n \"cubic-bezier-timing-function\": \"ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )\",\n \"deprecated-system-color\": \"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText\",\n \"discretionary-lig-values\": \"[discretionary-ligatures|no-discretionary-ligatures]\",\n \"display-box\": \"contents|none\",\n \"display-inside\": \"flow|flow-root|table|flex|grid|ruby\",\n \"display-internal\": \"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container\",\n \"display-legacy\": \"inline-block|inline-list-item|inline-table|inline-flex|inline-grid\",\n \"display-listitem\": \"<display-outside>?&&[flow|flow-root]?&&list-item\",\n \"display-outside\": \"block|inline|run-in\",\n \"drop-shadow()\": \"drop-shadow( <length>{2,3} <color>? )\",\n \"east-asian-variant-values\": \"[jis78|jis83|jis90|jis04|simplified|traditional]\",\n \"east-asian-width-values\": \"[full-width|proportional-width]\",\n \"element()\": \"element( <custom-ident> , [first|start|last|first-except]? )|element( <id-selector> )\",\n \"ellipse()\": \"ellipse( [<shape-radius>{2}]? [at <position>]? )\",\n \"ending-shape\": \"circle|ellipse\",\n \"env()\": \"env( <custom-ident> , <declaration-value>? )\",\n \"exp()\": \"exp( <calc-sum> )\",\n \"explicit-track-list\": \"[<line-names>? <track-size>]+ <line-names>?\",\n \"family-name\": \"<string>|<custom-ident>+\",\n \"feature-tag-value\": \"<string> [<integer>|on|off]?\",\n \"feature-type\": \"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation\",\n \"feature-value-block\": \"<feature-type> '{' <feature-value-declaration-list> '}'\",\n \"feature-value-block-list\": \"<feature-value-block>+\",\n \"feature-value-declaration\": \"<custom-ident> : <integer>+ ;\",\n \"feature-value-declaration-list\": \"<feature-value-declaration>\",\n \"feature-value-name\": \"<custom-ident>\",\n \"fill-rule\": \"nonzero|evenodd\",\n \"filter-function\": \"<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>\",\n \"filter-function-list\": \"[<filter-function>|<url>]+\",\n \"final-bg-layer\": \"<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>\",\n \"fixed-breadth\": \"<length-percentage>\",\n \"fixed-repeat\": \"repeat( [<integer [1,∞]>] , [<line-names>? <fixed-size>]+ <line-names>? )\",\n \"fixed-size\": \"<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )\",\n \"font-stretch-absolute\": \"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>\",\n \"font-variant-css21\": \"[normal|small-caps]\",\n \"font-weight-absolute\": \"normal|bold|<number [1,1000]>\",\n \"frequency-percentage\": \"<frequency>|<percentage>\",\n \"general-enclosed\": \"[<function-token> <any-value> )]|( <ident> <any-value> )\",\n \"generic-family\": \"serif|sans-serif|cursive|fantasy|monospace|-apple-system\",\n \"generic-name\": \"serif|sans-serif|cursive|fantasy|monospace\",\n \"geometry-box\": \"<shape-box>|fill-box|stroke-box|view-box\",\n \"gradient\": \"<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<repeating-conic-gradient()>|<-legacy-gradient>\",\n \"grayscale()\": \"grayscale( <number-percentage> )\",\n \"grid-line\": \"auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]\",\n \"historical-lig-values\": \"[historical-ligatures|no-historical-ligatures]\",\n \"hsl()\": \"hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\n \"hsla()\": \"hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\n \"hue\": \"<number>|<angle>\",\n \"hue-rotate()\": \"hue-rotate( <angle> )\",\n \"hwb()\": \"hwb( [<hue>|none] [<percentage>|none] [<percentage>|none] [/ [<alpha-value>|none]]? )\",\n \"hypot()\": \"hypot( <calc-sum># )\",\n \"image\": \"<url>|<image()>|<image-set()>|<element()>|<paint()>|<cross-fade()>|<gradient>\",\n \"image()\": \"image( <image-tags>? [<image-src>? , <color>?]! )\",\n \"image-set()\": \"image-set( <image-set-option># )\",\n \"image-set-option\": \"[<image>|<string>] [<resolution>||type( <string> )]\",\n \"image-src\": \"<url>|<string>\",\n \"image-tags\": \"ltr|rtl\",\n \"inflexible-breadth\": \"<length-percentage>|min-content|max-content|auto\",\n \"inset()\": \"inset( <length-percentage>{1,4} [round <'border-radius'>]? )\",\n \"invert()\": \"invert( <number-percentage> )\",\n \"keyframes-name\": \"<custom-ident>|<string>\",\n \"keyframe-block\": \"<keyframe-selector># { <declaration-list> }\",\n \"keyframe-block-list\": \"<keyframe-block>+\",\n \"keyframe-selector\": \"from|to|<percentage>\",\n \"lab()\": \"lab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )\",\n \"layer()\": \"layer( <layer-name> )\",\n \"layer-name\": \"<ident> ['.' <ident>]*\",\n \"lch()\": \"lch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )\",\n \"leader()\": \"leader( <leader-type> )\",\n \"leader-type\": \"dotted|solid|space|<string>\",\n \"length-percentage\": \"<length>|<percentage>\",\n \"line-names\": \"'[' <custom-ident>* ']'\",\n \"line-name-list\": \"[<line-names>|<name-repeat>]+\",\n \"line-style\": \"none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset\",\n \"line-width\": \"<length>|thin|medium|thick\",\n \"linear-color-hint\": \"<length-percentage>\",\n \"linear-color-stop\": \"<color> <color-stop-length>?\",\n \"linear-gradient()\": \"linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )\",\n \"log()\": \"log( <calc-sum> , <calc-sum>? )\",\n \"mask-layer\": \"<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>\",\n \"mask-position\": \"[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?\",\n \"mask-reference\": \"none|<image>|<mask-source>\",\n \"mask-source\": \"<url>\",\n \"masking-mode\": \"alpha|luminance|match-source\",\n \"matrix()\": \"matrix( <number>#{6} )\",\n \"matrix3d()\": \"matrix3d( <number>#{16} )\",\n \"max()\": \"max( <calc-sum># )\",\n \"media-and\": \"<media-in-parens> [and <media-in-parens>]+\",\n \"media-condition\": \"<media-not>|<media-and>|<media-or>|<media-in-parens>\",\n \"media-condition-without-or\": \"<media-not>|<media-and>|<media-in-parens>\",\n \"media-feature\": \"( [<mf-plain>|<mf-boolean>|<mf-range>] )\",\n \"media-in-parens\": \"( <media-condition> )|<media-feature>|<general-enclosed>\",\n \"media-not\": \"not <media-in-parens>\",\n \"media-or\": \"<media-in-parens> [or <media-in-parens>]+\",\n \"media-query\": \"<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?\",\n \"media-query-list\": \"<media-query>#\",\n \"media-type\": \"<ident>\",\n \"mf-boolean\": \"<mf-name>\",\n \"mf-name\": \"<ident>\",\n \"mf-plain\": \"<mf-name> : <mf-value>\",\n \"mf-range\": \"<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>\",\n \"mf-value\": \"<number>|<dimension>|<ident>|<ratio>\",\n \"min()\": \"min( <calc-sum># )\",\n \"minmax()\": \"minmax( [<length-percentage>|min-content|max-content|auto] , [<length-percentage>|<flex>|min-content|max-content|auto] )\",\n \"mod()\": \"mod( <calc-sum> , <calc-sum> )\",\n \"name-repeat\": \"repeat( [<integer [1,∞]>|auto-fill] , <line-names>+ )\",\n \"named-color\": \"transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>\",\n \"namespace-prefix\": \"<ident>\",\n \"ns-prefix\": \"[<ident-token>|'*']? '|'\",\n \"number-percentage\": \"<number>|<percentage>\",\n \"numeric-figure-values\": \"[lining-nums|oldstyle-nums]\",\n \"numeric-fraction-values\": \"[diagonal-fractions|stacked-fractions]\",\n \"numeric-spacing-values\": \"[proportional-nums|tabular-nums]\",\n \"nth\": \"<an-plus-b>|even|odd\",\n \"opacity()\": \"opacity( [<number-percentage>] )\",\n \"overflow-position\": \"unsafe|safe\",\n \"outline-radius\": \"<length>|<percentage>\",\n \"page-body\": \"<declaration>? [; <page-body>]?|<page-margin-box> <page-body>\",\n \"page-margin-box\": \"<page-margin-box-type> '{' <declaration-list> '}'\",\n \"page-margin-box-type\": \"@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom\",\n \"page-selector-list\": \"[<page-selector>#]?\",\n \"page-selector\": \"<pseudo-page>+|<ident> <pseudo-page>*\",\n \"page-size\": \"A5|A4|A3|B5|B4|JIS-B5|JIS-B4|letter|legal|ledger\",\n \"path()\": \"path( [<fill-rule> ,]? <string> )\",\n \"paint()\": \"paint( <ident> , <declaration-value>? )\",\n \"perspective()\": \"perspective( [<length [0,∞]>|none] )\",\n \"polygon()\": \"polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )\",\n \"position\": \"[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]\",\n \"pow()\": \"pow( <calc-sum> , <calc-sum> )\",\n \"pseudo-class-selector\": \"':' <ident-token>|':' <function-token> <any-value> ')'\",\n \"pseudo-element-selector\": \"':' <pseudo-class-selector>\",\n \"pseudo-page\": \": [left|right|first|blank]\",\n \"quote\": \"open-quote|close-quote|no-open-quote|no-close-quote\",\n \"radial-gradient()\": \"radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )\",\n \"ratio\": \"<number [0,∞]> [/ <number [0,∞]>]?\",\n \"relative-selector\": \"<combinator>? <complex-selector>\",\n \"relative-selector-list\": \"<relative-selector>#\",\n \"relative-size\": \"larger|smaller\",\n \"rem()\": \"rem( <calc-sum> , <calc-sum> )\",\n \"repeat-style\": \"repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}\",\n \"repeating-conic-gradient()\": \"repeating-conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )\",\n \"repeating-linear-gradient()\": \"repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )\",\n \"repeating-radial-gradient()\": \"repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )\",\n \"reversed-counter-name\": \"reversed( <counter-name> )\",\n \"rgb()\": \"rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )\",\n \"rgba()\": \"rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )\",\n \"rotate()\": \"rotate( [<angle>|<zero>] )\",\n \"rotate3d()\": \"rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )\",\n \"rotateX()\": \"rotateX( [<angle>|<zero>] )\",\n \"rotateY()\": \"rotateY( [<angle>|<zero>] )\",\n \"rotateZ()\": \"rotateZ( [<angle>|<zero>] )\",\n \"round()\": \"round( <rounding-strategy>? , <calc-sum> , <calc-sum> )\",\n \"rounding-strategy\": \"nearest|up|down|to-zero\",\n \"saturate()\": \"saturate( <number-percentage> )\",\n \"scale()\": \"scale( [<number>|<percentage>]#{1,2} )\",\n \"scale3d()\": \"scale3d( [<number>|<percentage>]#{3} )\",\n \"scaleX()\": \"scaleX( [<number>|<percentage>] )\",\n \"scaleY()\": \"scaleY( [<number>|<percentage>] )\",\n \"scaleZ()\": \"scaleZ( [<number>|<percentage>] )\",\n \"scroller\": \"root|nearest\",\n \"self-position\": \"center|start|end|self-start|self-end|flex-start|flex-end\",\n \"shape-radius\": \"<length-percentage>|closest-side|farthest-side\",\n \"sign()\": \"sign( <calc-sum> )\",\n \"skew()\": \"skew( [<angle>|<zero>] , [<angle>|<zero>]? )\",\n \"skewX()\": \"skewX( [<angle>|<zero>] )\",\n \"skewY()\": \"skewY( [<angle>|<zero>] )\",\n \"sepia()\": \"sepia( <number-percentage> )\",\n \"shadow\": \"inset?&&<length>{2,4}&&<color>?\",\n \"shadow-t\": \"[<length>{2,3}&&<color>?]\",\n \"shape\": \"rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )\",\n \"shape-box\": \"<box>|margin-box\",\n \"side-or-corner\": \"[left|right]||[top|bottom]\",\n \"sin()\": \"sin( <calc-sum> )\",\n \"single-animation\": \"<time>||<easing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]\",\n \"single-animation-direction\": \"normal|reverse|alternate|alternate-reverse\",\n \"single-animation-fill-mode\": \"none|forwards|backwards|both\",\n \"single-animation-iteration-count\": \"infinite|<number>\",\n \"single-animation-play-state\": \"running|paused\",\n \"single-animation-timeline\": \"auto|none|<timeline-name>|scroll( <axis>? <scroller>? )\",\n \"single-transition\": \"[none|<single-transition-property>]||<time>||<easing-function>||<time>\",\n \"single-transition-property\": \"all|<custom-ident>\",\n \"size\": \"closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}\",\n \"sqrt()\": \"sqrt( <calc-sum> )\",\n \"step-position\": \"jump-start|jump-end|jump-none|jump-both|start|end\",\n \"step-timing-function\": \"step-start|step-end|steps( <integer> [, <step-position>]? )\",\n \"subclass-selector\": \"<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>\",\n \"supports-condition\": \"not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*\",\n \"supports-in-parens\": \"( <supports-condition> )|<supports-feature>|<general-enclosed>\",\n \"supports-feature\": \"<supports-decl>|<supports-selector-fn>\",\n \"supports-decl\": \"( <declaration> )\",\n \"supports-selector-fn\": \"selector( <complex-selector> )\",\n \"symbol\": \"<string>|<image>|<custom-ident>\",\n \"tan()\": \"tan( <calc-sum> )\",\n \"target\": \"<target-counter()>|<target-counters()>|<target-text()>\",\n \"target-counter()\": \"target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )\",\n \"target-counters()\": \"target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )\",\n \"target-text()\": \"target-text( [<string>|<url>] , [content|before|after|first-letter]? )\",\n \"time-percentage\": \"<time>|<percentage>\",\n \"timeline-name\": \"<custom-ident>|<string>\",\n \"easing-function\": \"linear|<cubic-bezier-timing-function>|<step-timing-function>\",\n \"track-breadth\": \"<length-percentage>|<flex>|min-content|max-content|auto\",\n \"track-list\": \"[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?\",\n \"track-repeat\": \"repeat( [<integer [1,∞]>] , [<line-names>? <track-size>]+ <line-names>? )\",\n \"track-size\": \"<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( <length-percentage> )\",\n \"transform-function\": \"<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>\",\n \"transform-list\": \"<transform-function>+\",\n \"translate()\": \"translate( <length-percentage> , <length-percentage>? )\",\n \"translate3d()\": \"translate3d( <length-percentage> , <length-percentage> , <length> )\",\n \"translateX()\": \"translateX( <length-percentage> )\",\n \"translateY()\": \"translateY( <length-percentage> )\",\n \"translateZ()\": \"translateZ( <length> )\",\n \"type-or-unit\": \"string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%\",\n \"type-selector\": \"<wq-name>|<ns-prefix>? '*'\",\n \"var()\": \"var( <custom-property-name> , <declaration-value>? )\",\n \"viewport-length\": \"auto|<length-percentage>\",\n \"visual-box\": \"content-box|padding-box|border-box\",\n \"wq-name\": \"<ns-prefix>? <ident-token>\",\n \"-legacy-gradient\": \"<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>\",\n \"-legacy-linear-gradient\": \"-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )\",\n \"-legacy-repeating-linear-gradient\": \"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )\",\n \"-legacy-linear-gradient-arguments\": \"[<angle>|<side-or-corner>]? , <color-stop-list>\",\n \"-legacy-radial-gradient\": \"-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )\",\n \"-legacy-repeating-radial-gradient\": \"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )\",\n \"-legacy-radial-gradient-arguments\": \"[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>\",\n \"-legacy-radial-gradient-size\": \"closest-side|closest-corner|farthest-side|farthest-corner|contain|cover\",\n \"-legacy-radial-gradient-shape\": \"circle|ellipse\",\n \"-non-standard-font\": \"-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body\",\n \"-non-standard-color\": \"-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text\",\n \"-non-standard-image-rendering\": \"optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast\",\n \"-non-standard-overflow\": \"-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable\",\n \"-non-standard-width\": \"fill-available|min-intrinsic|intrinsic|-moz-available|-moz-fit-content|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content\",\n \"-webkit-gradient()\": \"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )\",\n \"-webkit-gradient-color-stop\": \"from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )\",\n \"-webkit-gradient-point\": \"[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]\",\n \"-webkit-gradient-radius\": \"<length>|<percentage>\",\n \"-webkit-gradient-type\": \"linear|radial\",\n \"-webkit-mask-box-repeat\": \"repeat|stretch|round\",\n \"-webkit-mask-clip-style\": \"border|border-box|padding|padding-box|content|content-box|text\",\n \"-ms-filter-function-list\": \"<-ms-filter-function>+\",\n \"-ms-filter-function\": \"<-ms-filter-function-progid>|<-ms-filter-function-legacy>\",\n \"-ms-filter-function-progid\": \"'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]\",\n \"-ms-filter-function-legacy\": \"<ident-token>|<function-token> <any-value>? )\",\n \"-ms-filter\": \"<string>\",\n \"age\": \"child|young|old\",\n \"attr-name\": \"<wq-name>\",\n \"attr-fallback\": \"<any-value>\",\n \"bg-clip\": \"<box>|border|text\",\n \"bottom\": \"<length>|auto\",\n \"generic-voice\": \"[<age>? <gender> <integer>?]\",\n \"gender\": \"male|female|neutral\",\n \"left\": \"<length>|auto\",\n \"mask-image\": \"<mask-reference>#\",\n \"paint\": \"none|<color>|<url> [none|<color>]?|context-fill|context-stroke\",\n \"right\": \"<length>|auto\",\n \"scroll-timeline-axis\": \"block|inline|vertical|horizontal\",\n \"scroll-timeline-name\": \"none|<custom-ident>\",\n \"single-animation-composition\": \"replace|add|accumulate\",\n \"svg-length\": \"<percentage>|<length>|<number>\",\n \"svg-writing-mode\": \"lr-tb|rl-tb|tb-rl|lr|rl|tb\",\n \"top\": \"<length>|auto\",\n \"x\": \"<number>\",\n \"y\": \"<number>\",\n \"declaration\": \"<ident-token> : <declaration-value>? ['!' important]?\",\n \"declaration-list\": \"[<declaration>? ';']* <declaration>?\",\n \"url\": \"url( <string> <url-modifier>* )|<url-token>\",\n \"url-modifier\": \"<ident>|<function-token> <any-value> )\",\n \"number-zero-one\": \"<number [0,1]>\",\n \"number-one-or-greater\": \"<number [1,∞]>\",\n \"-non-standard-display\": \"-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box\"\n },\n \"properties\": {\n \"--*\": \"<declaration-value>\",\n \"-ms-accelerator\": \"false|true\",\n \"-ms-block-progression\": \"tb|rl|bt|lr\",\n \"-ms-content-zoom-chaining\": \"none|chained\",\n \"-ms-content-zooming\": \"none|zoom\",\n \"-ms-content-zoom-limit\": \"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>\",\n \"-ms-content-zoom-limit-max\": \"<percentage>\",\n \"-ms-content-zoom-limit-min\": \"<percentage>\",\n \"-ms-content-zoom-snap\": \"<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>\",\n \"-ms-content-zoom-snap-points\": \"snapInterval( <percentage> , <percentage> )|snapList( <percentage># )\",\n \"-ms-content-zoom-snap-type\": \"none|proximity|mandatory\",\n \"-ms-filter\": \"<string>\",\n \"-ms-flow-from\": \"[none|<custom-ident>]#\",\n \"-ms-flow-into\": \"[none|<custom-ident>]#\",\n \"-ms-grid-columns\": \"none|<track-list>|<auto-track-list>\",\n \"-ms-grid-rows\": \"none|<track-list>|<auto-track-list>\",\n \"-ms-high-contrast-adjust\": \"auto|none\",\n \"-ms-hyphenate-limit-chars\": \"auto|<integer>{1,3}\",\n \"-ms-hyphenate-limit-lines\": \"no-limit|<integer>\",\n \"-ms-hyphenate-limit-zone\": \"<percentage>|<length>\",\n \"-ms-ime-align\": \"auto|after\",\n \"-ms-overflow-style\": \"auto|none|scrollbar|-ms-autohiding-scrollbar\",\n \"-ms-scrollbar-3dlight-color\": \"<color>\",\n \"-ms-scrollbar-arrow-color\": \"<color>\",\n \"-ms-scrollbar-base-color\": \"<color>\",\n \"-ms-scrollbar-darkshadow-color\": \"<color>\",\n \"-ms-scrollbar-face-color\": \"<color>\",\n \"-ms-scrollbar-highlight-color\": \"<color>\",\n \"-ms-scrollbar-shadow-color\": \"<color>\",\n \"-ms-scrollbar-track-color\": \"<color>\",\n \"-ms-scroll-chaining\": \"chained|none\",\n \"-ms-scroll-limit\": \"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>\",\n \"-ms-scroll-limit-x-max\": \"auto|<length>\",\n \"-ms-scroll-limit-x-min\": \"<length>\",\n \"-ms-scroll-limit-y-max\": \"auto|<length>\",\n \"-ms-scroll-limit-y-min\": \"<length>\",\n \"-ms-scroll-rails\": \"none|railed\",\n \"-ms-scroll-snap-points-x\": \"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )\",\n \"-ms-scroll-snap-points-y\": \"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )\",\n \"-ms-scroll-snap-type\": \"none|proximity|mandatory\",\n \"-ms-scroll-snap-x\": \"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>\",\n \"-ms-scroll-snap-y\": \"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>\",\n \"-ms-scroll-translation\": \"none|vertical-to-horizontal\",\n \"-ms-text-autospace\": \"none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space\",\n \"-ms-touch-select\": \"grippers|none\",\n \"-ms-user-select\": \"none|element|text\",\n \"-ms-wrap-flow\": \"auto|both|start|end|maximum|clear\",\n \"-ms-wrap-margin\": \"<length>\",\n \"-ms-wrap-through\": \"wrap|none\",\n \"-moz-appearance\": \"none|button|button-arrow-down|button-arrow-next|button-arrow-previous|button-arrow-up|button-bevel|button-focus|caret|checkbox|checkbox-container|checkbox-label|checkmenuitem|dualbutton|groupbox|listbox|listitem|menuarrow|menubar|menucheckbox|menuimage|menuitem|menuitemtext|menulist|menulist-button|menulist-text|menulist-textfield|menupopup|menuradio|menuseparator|meterbar|meterchunk|progressbar|progressbar-vertical|progresschunk|progresschunk-vertical|radio|radio-container|radio-label|radiomenuitem|range|range-thumb|resizer|resizerpanel|scale-horizontal|scalethumbend|scalethumb-horizontal|scalethumbstart|scalethumbtick|scalethumb-vertical|scale-vertical|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|separator|sheet|spinner|spinner-downbutton|spinner-textfield|spinner-upbutton|splitter|statusbar|statusbarpanel|tab|tabpanel|tabpanels|tab-scroll-arrow-back|tab-scroll-arrow-forward|textfield|textfield-multiline|toolbar|toolbarbutton|toolbarbutton-dropdown|toolbargripper|toolbox|tooltip|treeheader|treeheadercell|treeheadersortarrow|treeitem|treeline|treetwisty|treetwistyopen|treeview|-moz-mac-unified-toolbar|-moz-win-borderless-glass|-moz-win-browsertabbar-toolbox|-moz-win-communicationstext|-moz-win-communications-toolbox|-moz-win-exclude-glass|-moz-win-glass|-moz-win-mediatext|-moz-win-media-toolbox|-moz-window-button-box|-moz-window-button-box-maximized|-moz-window-button-close|-moz-window-button-maximize|-moz-window-button-minimize|-moz-window-button-restore|-moz-window-frame-bottom|-moz-window-frame-left|-moz-window-frame-right|-moz-window-titlebar|-moz-window-titlebar-maximized\",\n \"-moz-binding\": \"<url>|none\",\n \"-moz-border-bottom-colors\": \"<color>+|none\",\n \"-moz-border-left-colors\": \"<color>+|none\",\n \"-moz-border-right-colors\": \"<color>+|none\",\n \"-moz-border-top-colors\": \"<color>+|none\",\n \"-moz-context-properties\": \"none|[fill|fill-opacity|stroke|stroke-opacity]#\",\n \"-moz-float-edge\": \"border-box|content-box|margin-box|padding-box\",\n \"-moz-force-broken-image-icon\": \"0|1\",\n \"-moz-image-region\": \"<shape>|auto\",\n \"-moz-orient\": \"inline|block|horizontal|vertical\",\n \"-moz-outline-radius\": \"<outline-radius>{1,4} [/ <outline-radius>{1,4}]?\",\n \"-moz-outline-radius-bottomleft\": \"<outline-radius>\",\n \"-moz-outline-radius-bottomright\": \"<outline-radius>\",\n \"-moz-outline-radius-topleft\": \"<outline-radius>\",\n \"-moz-outline-radius-topright\": \"<outline-radius>\",\n \"-moz-stack-sizing\": \"ignore|stretch-to-fit\",\n \"-moz-text-blink\": \"none|blink\",\n \"-moz-user-focus\": \"ignore|normal|select-after|select-before|select-menu|select-same|select-all|none\",\n \"-moz-user-input\": \"auto|none|enabled|disabled\",\n \"-moz-user-modify\": \"read-only|read-write|write-only\",\n \"-moz-window-dragging\": \"drag|no-drag\",\n \"-moz-window-shadow\": \"default|menu|tooltip|sheet|none\",\n \"-webkit-appearance\": \"none|button|button-bevel|caps-lock-indicator|caret|checkbox|default-button|inner-spin-button|listbox|listitem|media-controls-background|media-controls-fullscreen-background|media-current-time-display|media-enter-fullscreen-button|media-exit-fullscreen-button|media-fullscreen-button|media-mute-button|media-overlay-play-button|media-play-button|media-seek-back-button|media-seek-forward-button|media-slider|media-sliderthumb|media-time-remaining-display|media-toggle-closed-captions-button|media-volume-slider|media-volume-slider-container|media-volume-sliderthumb|menulist|menulist-button|menulist-text|menulist-textfield|meter|progress-bar|progress-bar-value|push-button|radio|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|searchfield-cancel-button|searchfield-decoration|searchfield-results-button|searchfield-results-decoration|slider-horizontal|slider-vertical|sliderthumb-horizontal|sliderthumb-vertical|square-button|textarea|textfield|-apple-pay-button\",\n \"-webkit-border-before\": \"<'border-width'>||<'border-style'>||<color>\",\n \"-webkit-border-before-color\": \"<color>\",\n \"-webkit-border-before-style\": \"<'border-style'>\",\n \"-webkit-border-before-width\": \"<'border-width'>\",\n \"-webkit-box-reflect\": \"[above|below|right|left]? <length>? <image>?\",\n \"-webkit-line-clamp\": \"none|<integer>\",\n \"-webkit-mask\": \"[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#\",\n \"-webkit-mask-attachment\": \"<attachment>#\",\n \"-webkit-mask-clip\": \"[<box>|border|padding|content|text]#\",\n \"-webkit-mask-composite\": \"<composite-style>#\",\n \"-webkit-mask-image\": \"<mask-reference>#\",\n \"-webkit-mask-origin\": \"[<box>|border|padding|content]#\",\n \"-webkit-mask-position\": \"<position>#\",\n \"-webkit-mask-position-x\": \"[<length-percentage>|left|center|right]#\",\n \"-webkit-mask-position-y\": \"[<length-percentage>|top|center|bottom]#\",\n \"-webkit-mask-repeat\": \"<repeat-style>#\",\n \"-webkit-mask-repeat-x\": \"repeat|no-repeat|space|round\",\n \"-webkit-mask-repeat-y\": \"repeat|no-repeat|space|round\",\n \"-webkit-mask-size\": \"<bg-size>#\",\n \"-webkit-overflow-scrolling\": \"auto|touch\",\n \"-webkit-tap-highlight-color\": \"<color>\",\n \"-webkit-text-fill-color\": \"<color>\",\n \"-webkit-text-stroke\": \"<length>||<color>\",\n \"-webkit-text-stroke-color\": \"<color>\",\n \"-webkit-text-stroke-width\": \"<length>\",\n \"-webkit-touch-callout\": \"default|none\",\n \"-webkit-user-modify\": \"read-only|read-write|read-write-plaintext-only\",\n \"accent-color\": \"auto|<color>\",\n \"align-content\": \"normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>\",\n \"align-items\": \"normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]\",\n \"align-self\": \"auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>\",\n \"align-tracks\": \"[normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>]#\",\n \"all\": \"initial|inherit|unset|revert|revert-layer\",\n \"animation\": \"<single-animation>#\",\n \"animation-composition\": \"<single-animation-composition>#\",\n \"animation-delay\": \"<time>#\",\n \"animation-direction\": \"<single-animation-direction>#\",\n \"animation-duration\": \"<time>#\",\n \"animation-fill-mode\": \"<single-animation-fill-mode>#\",\n \"animation-iteration-count\": \"<single-animation-iteration-count>#\",\n \"animation-name\": \"[none|<keyframes-name>]#\",\n \"animation-play-state\": \"<single-animation-play-state>#\",\n \"animation-timing-function\": \"<easing-function>#\",\n \"animation-timeline\": \"<single-animation-timeline>#\",\n \"appearance\": \"none|auto|textfield|menulist-button|<compat-auto>\",\n \"aspect-ratio\": \"auto|<ratio>\",\n \"azimuth\": \"<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards\",\n \"backdrop-filter\": \"none|<filter-function-list>\",\n \"backface-visibility\": \"visible|hidden\",\n \"background\": \"[<bg-layer> ,]* <final-bg-layer>\",\n \"background-attachment\": \"<attachment>#\",\n \"background-blend-mode\": \"<blend-mode>#\",\n \"background-clip\": \"<bg-clip>#\",\n \"background-color\": \"<color>\",\n \"background-image\": \"<bg-image>#\",\n \"background-origin\": \"<box>#\",\n \"background-position\": \"<bg-position>#\",\n \"background-position-x\": \"[center|[[left|right|x-start|x-end]? <length-percentage>?]!]#\",\n \"background-position-y\": \"[center|[[top|bottom|y-start|y-end]? <length-percentage>?]!]#\",\n \"background-repeat\": \"<repeat-style>#\",\n \"background-size\": \"<bg-size>#\",\n \"block-overflow\": \"clip|ellipsis|<string>\",\n \"block-size\": \"<'width'>\",\n \"border\": \"<line-width>||<line-style>||<color>\",\n \"border-block\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n \"border-block-color\": \"<'border-top-color'>{1,2}\",\n \"border-block-style\": \"<'border-top-style'>\",\n \"border-block-width\": \"<'border-top-width'>\",\n \"border-block-end\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n \"border-block-end-color\": \"<'border-top-color'>\",\n \"border-block-end-style\": \"<'border-top-style'>\",\n \"border-block-end-width\": \"<'border-top-width'>\",\n \"border-block-start\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n \"border-block-start-color\": \"<'border-top-color'>\",\n \"border-block-start-style\": \"<'border-top-style'>\",\n \"border-block-start-width\": \"<'border-top-width'>\",\n \"border-bottom\": \"<line-width>||<line-style>||<color>\",\n \"border-bottom-color\": \"<'border-top-color'>\",\n \"border-bottom-left-radius\": \"<length-percentage>{1,2}\",\n \"border-bottom-right-radius\": \"<length-percentage>{1,2}\",\n \"border-bottom-style\": \"<line-style>\",\n \"border-bottom-width\": \"<line-width>\",\n \"border-collapse\": \"collapse|separate\",\n \"border-color\": \"<color>{1,4}\",\n \"border-end-end-radius\": \"<length-percentage>{1,2}\",\n \"border-end-start-radius\": \"<length-percentage>{1,2}\",\n \"border-image\": \"<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>\",\n \"border-image-outset\": \"[<length>|<number>]{1,4}\",\n \"border-image-repeat\": \"[stretch|repeat|round|space]{1,2}\",\n \"border-image-slice\": \"<number-percentage>{1,4}&&fill?\",\n \"border-image-source\": \"none|<image>\",\n \"border-image-width\": \"[<length-percentage>|<number>|auto]{1,4}\",\n \"border-inline\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n \"border-inline-end\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n \"border-inline-color\": \"<'border-top-color'>{1,2}\",\n \"border-inline-style\": \"<'border-top-style'>\",\n \"border-inline-width\": \"<'border-top-width'>\",\n \"border-inline-end-color\": \"<'border-top-color'>\",\n \"border-inline-end-style\": \"<'border-top-style'>\",\n \"border-inline-end-width\": \"<'border-top-width'>\",\n \"border-inline-start\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n \"border-inline-start-color\": \"<'border-top-color'>\",\n \"border-inline-start-style\": \"<'border-top-style'>\",\n \"border-inline-start-width\": \"<'border-top-width'>\",\n \"border-left\": \"<line-width>||<line-style>||<color>\",\n \"border-left-color\": \"<color>\",\n \"border-left-style\": \"<line-style>\",\n \"border-left-width\": \"<line-width>\",\n \"border-radius\": \"<length-percentage>{1,4} [/ <length-percentage>{1,4}]?\",\n \"border-right\": \"<line-width>||<line-style>||<color>\",\n \"border-right-color\": \"<color>\",\n \"border-right-style\": \"<line-style>\",\n \"border-right-width\": \"<line-width>\",\n \"border-spacing\": \"<length> <length>?\",\n \"border-start-end-radius\": \"<length-percentage>{1,2}\",\n \"border-start-start-radius\": \"<length-percentage>{1,2}\",\n \"border-style\": \"<line-style>{1,4}\",\n \"border-top\": \"<line-width>||<line-style>||<color>\",\n \"border-top-color\": \"<color>\",\n \"border-top-left-radius\": \"<length-percentage>{1,2}\",\n \"border-top-right-radius\": \"<length-percentage>{1,2}\",\n \"border-top-style\": \"<line-style>\",\n \"border-top-width\": \"<line-width>\",\n \"border-width\": \"<line-width>{1,4}\",\n \"bottom\": \"<length>|<percentage>|auto\",\n \"box-align\": \"start|center|end|baseline|stretch\",\n \"box-decoration-break\": \"slice|clone\",\n \"box-direction\": \"normal|reverse|inherit\",\n \"box-flex\": \"<number>\",\n \"box-flex-group\": \"<integer>\",\n \"box-lines\": \"single|multiple\",\n \"box-ordinal-group\": \"<integer>\",\n \"box-orient\": \"horizontal|vertical|inline-axis|block-axis|inherit\",\n \"box-pack\": \"start|center|end|justify\",\n \"box-shadow\": \"none|<shadow>#\",\n \"box-sizing\": \"content-box|border-box\",\n \"break-after\": \"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region\",\n \"break-before\": \"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region\",\n \"break-inside\": \"auto|avoid|avoid-page|avoid-column|avoid-region\",\n \"caption-side\": \"top|bottom|block-start|block-end|inline-start|inline-end\",\n \"caret\": \"<'caret-color'>||<'caret-shape'>\",\n \"caret-color\": \"auto|<color>\",\n \"caret-shape\": \"auto|bar|block|underscore\",\n \"clear\": \"none|left|right|both|inline-start|inline-end\",\n \"clip\": \"<shape>|auto\",\n \"clip-path\": \"<clip-source>|[<basic-shape>||<geometry-box>]|none\",\n \"color\": \"<color>\",\n \"print-color-adjust\": \"economy|exact\",\n \"color-scheme\": \"normal|[light|dark|<custom-ident>]+&&only?\",\n \"column-count\": \"<integer>|auto\",\n \"column-fill\": \"auto|balance|balance-all\",\n \"column-gap\": \"normal|<length-percentage>\",\n \"column-rule\": \"<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>\",\n \"column-rule-color\": \"<color>\",\n \"column-rule-style\": \"<'border-style'>\",\n \"column-rule-width\": \"<'border-width'>\",\n \"column-span\": \"none|all\",\n \"column-width\": \"<length>|auto\",\n \"columns\": \"<'column-width'>||<'column-count'>\",\n \"contain\": \"none|strict|content|[[size||inline-size]||layout||style||paint]\",\n \"contain-intrinsic-size\": \"[none|<length>|auto <length>]{1,2}\",\n \"contain-intrinsic-block-size\": \"none|<length>|auto <length>\",\n \"contain-intrinsic-height\": \"none|<length>|auto <length>\",\n \"contain-intrinsic-inline-size\": \"none|<length>|auto <length>\",\n \"contain-intrinsic-width\": \"none|<length>|auto <length>\",\n \"content\": \"normal|none|[<content-replacement>|<content-list>] [/ [<string>|<counter>]+]?\",\n \"content-visibility\": \"visible|auto|hidden\",\n \"counter-increment\": \"[<counter-name> <integer>?]+|none\",\n \"counter-reset\": \"[<counter-name> <integer>?|<reversed-counter-name> <integer>?]+|none\",\n \"counter-set\": \"[<counter-name> <integer>?]+|none\",\n \"cursor\": \"[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]\",\n \"direction\": \"ltr|rtl\",\n \"display\": \"[<display-outside>||<display-inside>]|<display-listitem>|<display-internal>|<display-box>|<display-legacy>|<-non-standard-display>\",\n \"empty-cells\": \"show|hide\",\n \"filter\": \"none|<filter-function-list>|<-ms-filter-function-list>\",\n \"flex\": \"none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]\",\n \"flex-basis\": \"content|<'width'>\",\n \"flex-direction\": \"row|row-reverse|column|column-reverse\",\n \"flex-flow\": \"<'flex-direction'>||<'flex-wrap'>\",\n \"flex-grow\": \"<number>\",\n \"flex-shrink\": \"<number>\",\n \"flex-wrap\": \"nowrap|wrap|wrap-reverse\",\n \"float\": \"left|right|none|inline-start|inline-end\",\n \"font\": \"[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar\",\n \"font-family\": \"[<family-name>|<generic-family>]#\",\n \"font-feature-settings\": \"normal|<feature-tag-value>#\",\n \"font-kerning\": \"auto|normal|none\",\n \"font-language-override\": \"normal|<string>\",\n \"font-optical-sizing\": \"auto|none\",\n \"font-variation-settings\": \"normal|[<string> <number>]#\",\n \"font-size\": \"<absolute-size>|<relative-size>|<length-percentage>\",\n \"font-size-adjust\": \"none|[ex-height|cap-height|ch-width|ic-width|ic-height]? [from-font|<number>]\",\n \"font-smooth\": \"auto|never|always|<absolute-size>|<length>\",\n \"font-stretch\": \"<font-stretch-absolute>\",\n \"font-style\": \"normal|italic|oblique <angle>?\",\n \"font-synthesis\": \"none|[weight||style||small-caps]\",\n \"font-variant\": \"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\n \"font-variant-alternates\": \"normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]\",\n \"font-variant-caps\": \"normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps\",\n \"font-variant-east-asian\": \"normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\n \"font-variant-ligatures\": \"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]\",\n \"font-variant-numeric\": \"normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]\",\n \"font-variant-position\": \"normal|sub|super\",\n \"font-weight\": \"<font-weight-absolute>|bolder|lighter\",\n \"forced-color-adjust\": \"auto|none\",\n \"gap\": \"<'row-gap'> <'column-gap'>?\",\n \"grid\": \"<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>\",\n \"grid-area\": \"<grid-line> [/ <grid-line>]{0,3}\",\n \"grid-auto-columns\": \"<track-size>+\",\n \"grid-auto-flow\": \"[row|column]||dense\",\n \"grid-auto-rows\": \"<track-size>+\",\n \"grid-column\": \"<grid-line> [/ <grid-line>]?\",\n \"grid-column-end\": \"<grid-line>\",\n \"grid-column-gap\": \"<length-percentage>\",\n \"grid-column-start\": \"<grid-line>\",\n \"grid-gap\": \"<'grid-row-gap'> <'grid-column-gap'>?\",\n \"grid-row\": \"<grid-line> [/ <grid-line>]?\",\n \"grid-row-end\": \"<grid-line>\",\n \"grid-row-gap\": \"<length-percentage>\",\n \"grid-row-start\": \"<grid-line>\",\n \"grid-template\": \"none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?\",\n \"grid-template-areas\": \"none|<string>+\",\n \"grid-template-columns\": \"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?\",\n \"grid-template-rows\": \"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?\",\n \"hanging-punctuation\": \"none|[first||[force-end|allow-end]||last]\",\n \"height\": \"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )\",\n \"hyphenate-character\": \"auto|<string>\",\n \"hyphens\": \"none|manual|auto\",\n \"image-orientation\": \"from-image|<angle>|[<angle>? flip]\",\n \"image-rendering\": \"auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>\",\n \"image-resolution\": \"[from-image||<resolution>]&&snap?\",\n \"ime-mode\": \"auto|normal|active|inactive|disabled\",\n \"initial-letter\": \"normal|[<number> <integer>?]\",\n \"initial-letter-align\": \"[auto|alphabetic|hanging|ideographic]\",\n \"inline-size\": \"<'width'>\",\n \"input-security\": \"auto|none\",\n \"inset\": \"<'top'>{1,4}\",\n \"inset-block\": \"<'top'>{1,2}\",\n \"inset-block-end\": \"<'top'>\",\n \"inset-block-start\": \"<'top'>\",\n \"inset-inline\": \"<'top'>{1,2}\",\n \"inset-inline-end\": \"<'top'>\",\n \"inset-inline-start\": \"<'top'>\",\n \"isolation\": \"auto|isolate\",\n \"justify-content\": \"normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]\",\n \"justify-items\": \"normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]\",\n \"justify-self\": \"auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]\",\n \"justify-tracks\": \"[normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]]#\",\n \"left\": \"<length>|<percentage>|auto\",\n \"letter-spacing\": \"normal|<length-percentage>\",\n \"line-break\": \"auto|loose|normal|strict|anywhere\",\n \"line-clamp\": \"none|<integer>\",\n \"line-height\": \"normal|<number>|<length>|<percentage>\",\n \"line-height-step\": \"<length>\",\n \"list-style\": \"<'list-style-type'>||<'list-style-position'>||<'list-style-image'>\",\n \"list-style-image\": \"<image>|none\",\n \"list-style-position\": \"inside|outside\",\n \"list-style-type\": \"<counter-style>|<string>|none\",\n \"margin\": \"[<length>|<percentage>|auto]{1,4}\",\n \"margin-block\": \"<'margin-left'>{1,2}\",\n \"margin-block-end\": \"<'margin-left'>\",\n \"margin-block-start\": \"<'margin-left'>\",\n \"margin-bottom\": \"<length>|<percentage>|auto\",\n \"margin-inline\": \"<'margin-left'>{1,2}\",\n \"margin-inline-end\": \"<'margin-left'>\",\n \"margin-inline-start\": \"<'margin-left'>\",\n \"margin-left\": \"<length>|<percentage>|auto\",\n \"margin-right\": \"<length>|<percentage>|auto\",\n \"margin-top\": \"<length>|<percentage>|auto\",\n \"margin-trim\": \"none|in-flow|all\",\n \"mask\": \"<mask-layer>#\",\n \"mask-border\": \"<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>\",\n \"mask-border-mode\": \"luminance|alpha\",\n \"mask-border-outset\": \"[<length>|<number>]{1,4}\",\n \"mask-border-repeat\": \"[stretch|repeat|round|space]{1,2}\",\n \"mask-border-slice\": \"<number-percentage>{1,4} fill?\",\n \"mask-border-source\": \"none|<image>\",\n \"mask-border-width\": \"[<length-percentage>|<number>|auto]{1,4}\",\n \"mask-clip\": \"[<geometry-box>|no-clip]#\",\n \"mask-composite\": \"<compositing-operator>#\",\n \"mask-image\": \"<mask-reference>#\",\n \"mask-mode\": \"<masking-mode>#\",\n \"mask-origin\": \"<geometry-box>#\",\n \"mask-position\": \"<position>#\",\n \"mask-repeat\": \"<repeat-style>#\",\n \"mask-size\": \"<bg-size>#\",\n \"mask-type\": \"luminance|alpha\",\n \"masonry-auto-flow\": \"[pack|next]||[definite-first|ordered]\",\n \"math-depth\": \"auto-add|add( <integer> )|<integer>\",\n \"math-shift\": \"normal|compact\",\n \"math-style\": \"normal|compact\",\n \"max-block-size\": \"<'max-width'>\",\n \"max-height\": \"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )\",\n \"max-inline-size\": \"<'max-width'>\",\n \"max-lines\": \"none|<integer>\",\n \"max-width\": \"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>\",\n \"min-block-size\": \"<'min-width'>\",\n \"min-height\": \"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )\",\n \"min-inline-size\": \"<'min-width'>\",\n \"min-width\": \"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>\",\n \"mix-blend-mode\": \"<blend-mode>|plus-lighter\",\n \"object-fit\": \"fill|contain|cover|none|scale-down\",\n \"object-position\": \"<position>\",\n \"offset\": \"[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?\",\n \"offset-anchor\": \"auto|<position>\",\n \"offset-distance\": \"<length-percentage>\",\n \"offset-path\": \"none|ray( [<angle>&&<size>&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]\",\n \"offset-position\": \"auto|<position>\",\n \"offset-rotate\": \"[auto|reverse]||<angle>\",\n \"opacity\": \"<alpha-value>\",\n \"order\": \"<integer>\",\n \"orphans\": \"<integer>\",\n \"outline\": \"[<'outline-color'>||<'outline-style'>||<'outline-width'>]\",\n \"outline-color\": \"<color>|invert\",\n \"outline-offset\": \"<length>\",\n \"outline-style\": \"auto|<'border-style'>\",\n \"outline-width\": \"<line-width>\",\n \"overflow\": \"[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>\",\n \"overflow-anchor\": \"auto|none\",\n \"overflow-block\": \"visible|hidden|clip|scroll|auto\",\n \"overflow-clip-box\": \"padding-box|content-box\",\n \"overflow-clip-margin\": \"<visual-box>||<length [0,∞]>\",\n \"overflow-inline\": \"visible|hidden|clip|scroll|auto\",\n \"overflow-wrap\": \"normal|break-word|anywhere\",\n \"overflow-x\": \"visible|hidden|clip|scroll|auto\",\n \"overflow-y\": \"visible|hidden|clip|scroll|auto\",\n \"overscroll-behavior\": \"[contain|none|auto]{1,2}\",\n \"overscroll-behavior-block\": \"contain|none|auto\",\n \"overscroll-behavior-inline\": \"contain|none|auto\",\n \"overscroll-behavior-x\": \"contain|none|auto\",\n \"overscroll-behavior-y\": \"contain|none|auto\",\n \"padding\": \"[<length>|<percentage>]{1,4}\",\n \"padding-block\": \"<'padding-left'>{1,2}\",\n \"padding-block-end\": \"<'padding-left'>\",\n \"padding-block-start\": \"<'padding-left'>\",\n \"padding-bottom\": \"<length>|<percentage>\",\n \"padding-inline\": \"<'padding-left'>{1,2}\",\n \"padding-inline-end\": \"<'padding-left'>\",\n \"padding-inline-start\": \"<'padding-left'>\",\n \"padding-left\": \"<length>|<percentage>\",\n \"padding-right\": \"<length>|<percentage>\",\n \"padding-top\": \"<length>|<percentage>\",\n \"page-break-after\": \"auto|always|avoid|left|right|recto|verso\",\n \"page-break-before\": \"auto|always|avoid|left|right|recto|verso\",\n \"page-break-inside\": \"auto|avoid\",\n \"paint-order\": \"normal|[fill||stroke||markers]\",\n \"perspective\": \"none|<length>\",\n \"perspective-origin\": \"<position>\",\n \"place-content\": \"<'align-content'> <'justify-content'>?\",\n \"place-items\": \"<'align-items'> <'justify-items'>?\",\n \"place-self\": \"<'align-self'> <'justify-self'>?\",\n \"pointer-events\": \"auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit\",\n \"position\": \"static|relative|absolute|sticky|fixed|-webkit-sticky\",\n \"quotes\": \"none|auto|[<string> <string>]+\",\n \"resize\": \"none|both|horizontal|vertical|block|inline\",\n \"right\": \"<length>|<percentage>|auto\",\n \"rotate\": \"none|<angle>|[x|y|z|<number>{3}]&&<angle>\",\n \"row-gap\": \"normal|<length-percentage>\",\n \"ruby-align\": \"start|center|space-between|space-around\",\n \"ruby-merge\": \"separate|collapse|auto\",\n \"ruby-position\": \"[alternate||[over|under]]|inter-character\",\n \"scale\": \"none|<number>{1,3}\",\n \"scrollbar-color\": \"auto|<color>{2}\",\n \"scrollbar-gutter\": \"auto|stable&&both-edges?\",\n \"scrollbar-width\": \"auto|thin|none\",\n \"scroll-behavior\": \"auto|smooth\",\n \"scroll-margin\": \"<length>{1,4}\",\n \"scroll-margin-block\": \"<length>{1,2}\",\n \"scroll-margin-block-start\": \"<length>\",\n \"scroll-margin-block-end\": \"<length>\",\n \"scroll-margin-bottom\": \"<length>\",\n \"scroll-margin-inline\": \"<length>{1,2}\",\n \"scroll-margin-inline-start\": \"<length>\",\n \"scroll-margin-inline-end\": \"<length>\",\n \"scroll-margin-left\": \"<length>\",\n \"scroll-margin-right\": \"<length>\",\n \"scroll-margin-top\": \"<length>\",\n \"scroll-padding\": \"[auto|<length-percentage>]{1,4}\",\n \"scroll-padding-block\": \"[auto|<length-percentage>]{1,2}\",\n \"scroll-padding-block-start\": \"auto|<length-percentage>\",\n \"scroll-padding-block-end\": \"auto|<length-percentage>\",\n \"scroll-padding-bottom\": \"auto|<length-percentage>\",\n \"scroll-padding-inline\": \"[auto|<length-percentage>]{1,2}\",\n \"scroll-padding-inline-start\": \"auto|<length-percentage>\",\n \"scroll-padding-inline-end\": \"auto|<length-percentage>\",\n \"scroll-padding-left\": \"auto|<length-percentage>\",\n \"scroll-padding-right\": \"auto|<length-percentage>\",\n \"scroll-padding-top\": \"auto|<length-percentage>\",\n \"scroll-snap-align\": \"[none|start|end|center]{1,2}\",\n \"scroll-snap-coordinate\": \"none|<position>#\",\n \"scroll-snap-destination\": \"<position>\",\n \"scroll-snap-points-x\": \"none|repeat( <length-percentage> )\",\n \"scroll-snap-points-y\": \"none|repeat( <length-percentage> )\",\n \"scroll-snap-stop\": \"normal|always\",\n \"scroll-snap-type\": \"none|[x|y|block|inline|both] [mandatory|proximity]?\",\n \"scroll-snap-type-x\": \"none|mandatory|proximity\",\n \"scroll-snap-type-y\": \"none|mandatory|proximity\",\n \"scroll-timeline\": \"<scroll-timeline-name>||<scroll-timeline-axis>\",\n \"scroll-timeline-axis\": \"block|inline|vertical|horizontal\",\n \"scroll-timeline-name\": \"none|<custom-ident>\",\n \"shape-image-threshold\": \"<alpha-value>\",\n \"shape-margin\": \"<length-percentage>\",\n \"shape-outside\": \"none|[<shape-box>||<basic-shape>]|<image>\",\n \"tab-size\": \"<integer>|<length>\",\n \"table-layout\": \"auto|fixed\",\n \"text-align\": \"start|end|left|right|center|justify|match-parent\",\n \"text-align-last\": \"auto|start|end|left|right|center|justify\",\n \"text-combine-upright\": \"none|all|[digits <integer>?]\",\n \"text-decoration\": \"<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>||<'text-decoration-thickness'>\",\n \"text-decoration-color\": \"<color>\",\n \"text-decoration-line\": \"none|[underline||overline||line-through||blink]|spelling-error|grammar-error\",\n \"text-decoration-skip\": \"none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]\",\n \"text-decoration-skip-ink\": \"auto|all|none\",\n \"text-decoration-style\": \"solid|double|dotted|dashed|wavy\",\n \"text-decoration-thickness\": \"auto|from-font|<length>|<percentage>\",\n \"text-emphasis\": \"<'text-emphasis-style'>||<'text-emphasis-color'>\",\n \"text-emphasis-color\": \"<color>\",\n \"text-emphasis-position\": \"[over|under]&&[right|left]\",\n \"text-emphasis-style\": \"none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>\",\n \"text-indent\": \"<length-percentage>&&hanging?&&each-line?\",\n \"text-justify\": \"auto|inter-character|inter-word|none\",\n \"text-orientation\": \"mixed|upright|sideways\",\n \"text-overflow\": \"[clip|ellipsis|<string>]{1,2}\",\n \"text-rendering\": \"auto|optimizeSpeed|optimizeLegibility|geometricPrecision\",\n \"text-shadow\": \"none|<shadow-t>#\",\n \"text-size-adjust\": \"none|auto|<percentage>\",\n \"text-transform\": \"none|capitalize|uppercase|lowercase|full-width|full-size-kana\",\n \"text-underline-offset\": \"auto|<length>|<percentage>\",\n \"text-underline-position\": \"auto|from-font|[under||[left|right]]\",\n \"top\": \"<length>|<percentage>|auto\",\n \"touch-action\": \"auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation\",\n \"transform\": \"none|<transform-list>\",\n \"transform-box\": \"content-box|border-box|fill-box|stroke-box|view-box\",\n \"transform-origin\": \"[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?\",\n \"transform-style\": \"flat|preserve-3d\",\n \"transition\": \"<single-transition>#\",\n \"transition-delay\": \"<time>#\",\n \"transition-duration\": \"<time>#\",\n \"transition-property\": \"none|<single-transition-property>#\",\n \"transition-timing-function\": \"<easing-function>#\",\n \"translate\": \"none|<length-percentage> [<length-percentage> <length>?]?\",\n \"unicode-bidi\": \"normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate|-webkit-isolate-override|-webkit-plaintext\",\n \"user-select\": \"auto|text|none|contain|all\",\n \"vertical-align\": \"baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>\",\n \"visibility\": \"visible|hidden|collapse\",\n \"white-space\": \"normal|pre|nowrap|pre-wrap|pre-line|break-spaces\",\n \"widows\": \"<integer>\",\n \"width\": \"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|fill|stretch|intrinsic|-moz-max-content|-webkit-max-content|-moz-fit-content|-webkit-fit-content\",\n \"will-change\": \"auto|<animateable-feature>#\",\n \"word-break\": \"normal|break-all|keep-all|break-word\",\n \"word-spacing\": \"normal|<length>\",\n \"word-wrap\": \"normal|break-word\",\n \"writing-mode\": \"horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>\",\n \"z-index\": \"auto|<integer>\",\n \"zoom\": \"normal|reset|<number>|<percentage>\",\n \"-moz-background-clip\": \"padding|border\",\n \"-moz-border-radius-bottomleft\": \"<'border-bottom-left-radius'>\",\n \"-moz-border-radius-bottomright\": \"<'border-bottom-right-radius'>\",\n \"-moz-border-radius-topleft\": \"<'border-top-left-radius'>\",\n \"-moz-border-radius-topright\": \"<'border-bottom-right-radius'>\",\n \"-moz-control-character-visibility\": \"visible|hidden\",\n \"-moz-osx-font-smoothing\": \"auto|grayscale\",\n \"-moz-user-select\": \"none|text|all|-moz-none\",\n \"-ms-flex-align\": \"start|end|center|baseline|stretch\",\n \"-ms-flex-item-align\": \"auto|start|end|center|baseline|stretch\",\n \"-ms-flex-line-pack\": \"start|end|center|justify|distribute|stretch\",\n \"-ms-flex-negative\": \"<'flex-shrink'>\",\n \"-ms-flex-pack\": \"start|end|center|justify|distribute\",\n \"-ms-flex-order\": \"<integer>\",\n \"-ms-flex-positive\": \"<'flex-grow'>\",\n \"-ms-flex-preferred-size\": \"<'flex-basis'>\",\n \"-ms-interpolation-mode\": \"nearest-neighbor|bicubic\",\n \"-ms-grid-column-align\": \"start|end|center|stretch\",\n \"-ms-grid-row-align\": \"start|end|center|stretch\",\n \"-ms-hyphenate-limit-last\": \"none|always|column|page|spread\",\n \"-webkit-background-clip\": \"[<box>|border|padding|content|text]#\",\n \"-webkit-column-break-after\": \"always|auto|avoid\",\n \"-webkit-column-break-before\": \"always|auto|avoid\",\n \"-webkit-column-break-inside\": \"always|auto|avoid\",\n \"-webkit-font-smoothing\": \"auto|none|antialiased|subpixel-antialiased\",\n \"-webkit-mask-box-image\": \"[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?\",\n \"-webkit-print-color-adjust\": \"economy|exact\",\n \"-webkit-text-security\": \"none|circle|disc|square\",\n \"-webkit-user-drag\": \"none|element|auto\",\n \"-webkit-user-select\": \"auto|none|text|all\",\n \"alignment-baseline\": \"auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical\",\n \"baseline-shift\": \"baseline|sub|super|<svg-length>\",\n \"behavior\": \"<url>+\",\n \"clip-rule\": \"nonzero|evenodd\",\n \"cue\": \"<'cue-before'> <'cue-after'>?\",\n \"cue-after\": \"<url> <decibel>?|none\",\n \"cue-before\": \"<url> <decibel>?|none\",\n \"dominant-baseline\": \"auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge\",\n \"fill\": \"<paint>\",\n \"fill-opacity\": \"<number-zero-one>\",\n \"fill-rule\": \"nonzero|evenodd\",\n \"glyph-orientation-horizontal\": \"<angle>\",\n \"glyph-orientation-vertical\": \"<angle>\",\n \"kerning\": \"auto|<svg-length>\",\n \"marker\": \"none|<url>\",\n \"marker-end\": \"none|<url>\",\n \"marker-mid\": \"none|<url>\",\n \"marker-start\": \"none|<url>\",\n \"pause\": \"<'pause-before'> <'pause-after'>?\",\n \"pause-after\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n \"pause-before\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n \"rest\": \"<'rest-before'> <'rest-after'>?\",\n \"rest-after\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n \"rest-before\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n \"shape-rendering\": \"auto|optimizeSpeed|crispEdges|geometricPrecision\",\n \"src\": \"[<url> [format( <string># )]?|local( <family-name> )]#\",\n \"speak\": \"auto|none|normal\",\n \"speak-as\": \"normal|spell-out||digits||[literal-punctuation|no-punctuation]\",\n \"stroke\": \"<paint>\",\n \"stroke-dasharray\": \"none|[<svg-length>+]#\",\n \"stroke-dashoffset\": \"<svg-length>\",\n \"stroke-linecap\": \"butt|round|square\",\n \"stroke-linejoin\": \"miter|round|bevel\",\n \"stroke-miterlimit\": \"<number-one-or-greater>\",\n \"stroke-opacity\": \"<number-zero-one>\",\n \"stroke-width\": \"<svg-length>\",\n \"text-anchor\": \"start|middle|end\",\n \"unicode-range\": \"<urange>#\",\n \"voice-balance\": \"<number>|left|center|right|leftwards|rightwards\",\n \"voice-duration\": \"auto|<time>\",\n \"voice-family\": \"[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve\",\n \"voice-pitch\": \"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]\",\n \"voice-range\": \"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]\",\n \"voice-rate\": \"[normal|x-slow|slow|medium|fast|x-fast]||<percentage>\",\n \"voice-stress\": \"normal|strong|moderate|none|reduced\",\n \"voice-volume\": \"silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]\"\n },\n \"atrules\": {\n \"charset\": {\n \"prelude\": \"<string>\",\n \"descriptors\": null\n },\n \"counter-style\": {\n \"prelude\": \"<counter-style-name>\",\n \"descriptors\": {\n \"additive-symbols\": \"[<integer>&&<symbol>]#\",\n \"fallback\": \"<counter-style-name>\",\n \"negative\": \"<symbol> <symbol>?\",\n \"pad\": \"<integer>&&<symbol>\",\n \"prefix\": \"<symbol>\",\n \"range\": \"[[<integer>|infinite]{2}]#|auto\",\n \"speak-as\": \"auto|bullets|numbers|words|spell-out|<counter-style-name>\",\n \"suffix\": \"<symbol>\",\n \"symbols\": \"<symbol>+\",\n \"system\": \"cyclic|numeric|alphabetic|symbolic|additive|[fixed <integer>?]|[extends <counter-style-name>]\"\n }\n },\n \"document\": {\n \"prelude\": \"[<url>|url-prefix( <string> )|domain( <string> )|media-document( <string> )|regexp( <string> )]#\",\n \"descriptors\": null\n },\n \"font-face\": {\n \"prelude\": null,\n \"descriptors\": {\n \"ascent-override\": \"normal|<percentage>\",\n \"descent-override\": \"normal|<percentage>\",\n \"font-display\": \"[auto|block|swap|fallback|optional]\",\n \"font-family\": \"<family-name>\",\n \"font-feature-settings\": \"normal|<feature-tag-value>#\",\n \"font-variation-settings\": \"normal|[<string> <number>]#\",\n \"font-stretch\": \"<font-stretch-absolute>{1,2}\",\n \"font-style\": \"normal|italic|oblique <angle>{0,2}\",\n \"font-weight\": \"<font-weight-absolute>{1,2}\",\n \"font-variant\": \"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\n \"line-gap-override\": \"normal|<percentage>\",\n \"size-adjust\": \"<percentage>\",\n \"src\": \"[<url> [format( <string># )]?|local( <family-name> )]#\",\n \"unicode-range\": \"<urange>#\"\n }\n },\n \"font-feature-values\": {\n \"prelude\": \"<family-name>#\",\n \"descriptors\": null\n },\n \"import\": {\n \"prelude\": \"[<string>|<url>] [layer|layer( <layer-name> )]? [supports( [<supports-condition>|<declaration>] )]? <media-query-list>?\",\n \"descriptors\": null\n },\n \"keyframes\": {\n \"prelude\": \"<keyframes-name>\",\n \"descriptors\": null\n },\n \"layer\": {\n \"prelude\": \"[<layer-name>#|<layer-name>?]\",\n \"descriptors\": null\n },\n \"media\": {\n \"prelude\": \"<media-query-list>\",\n \"descriptors\": null\n },\n \"namespace\": {\n \"prelude\": \"<namespace-prefix>? [<string>|<url>]\",\n \"descriptors\": null\n },\n \"page\": {\n \"prelude\": \"<page-selector-list>\",\n \"descriptors\": {\n \"bleed\": \"auto|<length>\",\n \"marks\": \"none|[crop||cross]\",\n \"size\": \"<length>{1,2}|auto|[<page-size>||[portrait|landscape]]\"\n }\n },\n \"property\": {\n \"prelude\": \"<custom-property-name>\",\n \"descriptors\": {\n \"syntax\": \"<string>\",\n \"inherits\": \"true|false\",\n \"initial-value\": \"<string>\"\n }\n },\n \"scroll-timeline\": {\n \"prelude\": \"<timeline-name>\",\n \"descriptors\": null\n },\n \"supports\": {\n \"prelude\": \"<supports-condition>\",\n \"descriptors\": null\n },\n \"viewport\": {\n \"prelude\": null,\n \"descriptors\": {\n \"height\": \"<viewport-length>{1,2}\",\n \"max-height\": \"<viewport-length>\",\n \"max-width\": \"<viewport-length>\",\n \"max-zoom\": \"auto|<number>|<percentage>\",\n \"min-height\": \"<viewport-length>\",\n \"min-width\": \"<viewport-length>\",\n \"min-zoom\": \"auto|<number>|<percentage>\",\n \"orientation\": \"auto|portrait|landscape\",\n \"user-zoom\": \"zoom|fixed\",\n \"viewport-fit\": \"auto|contain|cover\",\n \"width\": \"<viewport-length>{1,2}\",\n \"zoom\": \"auto|<number>|<percentage>\"\n }\n },\n \"nest\": {\n \"prelude\": \"<complex-selector-list>\",\n \"descriptors\": null\n }\n }\n};","import {\n Ident,\n String as StringToken,\n Number as NumberToken,\n Function as FunctionToken,\n Url,\n Hash,\n Dimension,\n Percentage,\n LeftParenthesis,\n LeftSquareBracket,\n Comma,\n Delim\n} from '../../tokenizer/index.js';\n\nconst NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)\nconst ASTERISK = 0x002A; // U+002A ASTERISK (*)\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\nconst U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)\n\nexport default function defaultRecognizer(context) {\n switch (this.tokenType) {\n case Hash:\n return this.Hash();\n\n case Comma:\n return this.Operator();\n\n case LeftParenthesis:\n return this.Parentheses(this.readSequence, context.recognizer);\n\n case LeftSquareBracket:\n return this.Brackets(this.readSequence, context.recognizer);\n\n case StringToken:\n return this.String();\n\n case Dimension:\n return this.Dimension();\n\n case Percentage:\n return this.Percentage();\n\n case NumberToken:\n return this.Number();\n\n case FunctionToken:\n return this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')\n ? this.Url()\n : this.Function(this.readSequence, context.recognizer);\n\n case Url:\n return this.Url();\n\n case Ident:\n // check for unicode range, it should start with u+ or U+\n if (this.cmpChar(this.tokenStart, U) &&\n this.cmpChar(this.tokenStart + 1, PLUSSIGN)) {\n return this.UnicodeRange();\n } else {\n return this.Identifier();\n }\n\n case Delim: {\n const code = this.charCodeAt(this.tokenStart);\n\n if (code === SOLIDUS ||\n code === ASTERISK ||\n code === PLUSSIGN ||\n code === HYPHENMINUS) {\n return this.Operator(); // TODO: replace with Delim\n }\n\n // TODO: produce a node with Delim node type\n\n if (code === NUMBERSIGN) {\n this.error('Hex or identifier is expected', this.tokenStart + 1);\n }\n\n break;\n }\n }\n};\n","import getNode from './default.js';\n\nexport default {\n getNode\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 getNode from './default.js';\nimport expressionFn from '../function/expression.js';\nimport varFn from '../function/var.js';\n\nfunction isPlusMinusOperator(node) {\n return (\n node !== null &&\n node.type === 'Operator' &&\n (node.value[node.value.length - 1] === '-' || node.value[node.value.length - 1] === '+')\n );\n}\n\nexport default {\n getNode,\n onWhiteSpace(next, children) {\n if (isPlusMinusOperator(next)) {\n next.value = ' ' + next.value;\n }\n if (isPlusMinusOperator(children.last)) {\n children.last.value += ' ';\n }\n },\n 'expression': expressionFn,\n 'var': varFn\n};\n","// legacy IE function\n// expression( <any-value> )\nexport default function() {\n return this.createSingleNodeList(\n this.Raw(this.tokenIndex, null, false)\n );\n}\n","import { Comma, WhiteSpace } from '../../tokenizer/index.js';\n\n// var( <ident> , <value>? )\nexport default function() {\n const children = this.createList();\n\n this.skipSC();\n\n // NOTE: Don't check more than a first argument is an ident, rest checks are for lexer\n children.push(this.Identifier());\n\n this.skipSC();\n\n if (this.tokenType === Comma) {\n children.push(this.Operator());\n\n const startIndex = this.tokenIndex;\n const value = this.parseCustomProperty\n ? this.Value(null)\n : this.Raw(this.tokenIndex, this.consumeUntilExclamationMarkOrSemicolon, false);\n\n if (value.type === 'Value' && value.children.isEmpty) {\n for (let offset = startIndex - 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 children.push(value);\n }\n\n return children;\n};\n","import {\n WhiteSpace,\n Comment,\n Ident,\n Function,\n Colon,\n LeftParenthesis\n} from '../../tokenizer/index.js';\n\nfunction consumeRaw() {\n return this.createSingleNodeList(\n this.Raw(this.tokenIndex, null, false)\n );\n}\n\nfunction parentheses() {\n this.skipSC();\n\n if (this.tokenType === Ident &&\n this.lookupNonWSType(1) === Colon) {\n return this.createSingleNodeList(\n this.Declaration()\n );\n }\n\n return readSequence.call(this);\n}\n\nfunction readSequence() {\n const children = this.createList();\n let child;\n\n this.skipSC();\n\n scan:\n while (!this.eof) {\n switch (this.tokenType) {\n case Comment:\n case WhiteSpace:\n this.next();\n continue;\n\n case Function:\n child = this.Function(consumeRaw, this.scope.AtrulePrelude);\n break;\n\n case Ident:\n child = this.Identifier();\n break;\n\n case LeftParenthesis:\n child = this.Parentheses(parentheses, this.scope.AtrulePrelude);\n break;\n\n default:\n break scan;\n }\n\n children.push(child);\n }\n\n return children;\n}\n\nexport default {\n parse: {\n prelude() {\n const children = readSequence.call(this);\n\n if (this.getFirstListNode(children) === null) {\n this.error('Condition is expected');\n }\n\n return children;\n },\n block(isStyleBlock = false) {\n return this.Block(isStyleBlock);\n }\n }\n};\n","import fontFace from './font-face.js';\nimport importAtrule from './import.js';\nimport media from './media.js';\nimport nest from './nest.js';\nimport page from './page.js';\nimport supports from './supports.js';\n\nexport default {\n 'font-face': fontFace,\n 'import': importAtrule,\n media,\n nest,\n page,\n supports\n};\n","export default {\n parse: {\n prelude: null,\n block() {\n return this.Block(true);\n }\n }\n};\n","import {\n String as StringToken,\n Ident,\n Url,\n Function as FunctionToken,\n LeftParenthesis\n} from '../../tokenizer/index.js';\n\nexport default {\n parse: {\n prelude() {\n const children = this.createList();\n\n this.skipSC();\n\n switch (this.tokenType) {\n case StringToken:\n children.push(this.String());\n break;\n\n case Url:\n case FunctionToken:\n children.push(this.Url());\n break;\n\n default:\n this.error('String or url() is expected');\n }\n\n if (this.lookupNonWSType(0) === Ident ||\n this.lookupNonWSType(0) === LeftParenthesis) {\n children.push(this.MediaQueryList());\n }\n\n return children;\n },\n block: null\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.MediaQueryList()\n );\n },\n block(isStyleBlock = false) {\n return this.Block(isStyleBlock);\n }\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.SelectorList()\n );\n },\n block() {\n return this.Block(true);\n }\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.SelectorList()\n );\n },\n block() {\n return this.Block(true);\n }\n }\n};\n","const 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 nth = {\n parse() {\n return this.createSingleNodeList(\n this.Nth()\n );\n }\n};\n\nexport default {\n 'dir': identList,\n 'has': selectorList,\n 'lang': identList,\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","import createSyntax from './create.js';\nimport lexerConfig from './config/lexer.js';\nimport parserConfig from './config/parser.js';\nimport walkerConfig from './config/walker.js';\n\nexport default createSyntax({\n ...lexerConfig,\n ...parserConfig,\n ...walkerConfig\n});\n","import * as scope from '../scope/index.js';\nimport atrule from '../atrule/index.js';\nimport pseudo from '../pseudo/index.js';\nimport * as node from '../node/index-parse.js';\n\nexport default {\n parseContext: {\n default: 'StyleSheet',\n stylesheet: 'StyleSheet',\n atrule: 'Atrule',\n atrulePrelude(options) {\n return this.AtrulePrelude(options.atrule ? String(options.atrule) : null);\n },\n mediaQueryList: 'MediaQueryList',\n mediaQuery: 'MediaQuery',\n rule: 'Rule',\n selectorList: 'SelectorList',\n selector: 'Selector',\n block() {\n return this.Block(true);\n },\n declarationList: 'DeclarationList',\n declaration: 'Declaration',\n value: 'Value'\n },\n scope,\n atrule,\n pseudo,\n node\n};\n","import * as node from '../node/index.js';\n\nexport default {\n node\n};\n","import { List } from './List.js';\n\nexport function clone(node) {\n const result = {};\n\n for (const key in node) {\n let value = node[key];\n\n if (value) {\n if (Array.isArray(value) || value instanceof List) {\n value = value.map(clone);\n } else if (value.constructor === Object) {\n value = clone(value);\n }\n }\n\n result[key] = value;\n }\n\n return result;\n}\n","import syntax from './syntax/index.js';\n\nexport * from './version.js';\nexport { default as createSyntax } from './syntax/create.js';\nexport { List } from './utils/List.js';\nexport { Lexer } from './lexer/Lexer.js';\nexport { tokenTypes, tokenNames, TokenStream } from './tokenizer/index.js';\nexport * as definitionSyntax from './definition-syntax/index.js';\nexport { clone } from './utils/clone.js';\nexport * from './utils/names.js';\nexport * as ident from './utils/ident.js';\nexport * as string from './utils/string.js';\nexport * as url from './utils/url.js';\nexport const {\n tokenize,\n parse,\n generate,\n lexer,\n createLexer,\n\n walk,\n find,\n findLast,\n findAll,\n\n toPlainObject,\n fromPlainObject,\n\n fork\n} = syntax;\n",null,null,null,"function level0Optimize(tokens) {\n // noop as level 0 means no optimizations!\n return tokens;\n}\n\nmodule.exports = level0Optimize;\n","// adapted from http://nedbatchelder.com/blog/200712.html#e20071211T054956\n\nvar NUMBER_PATTERN = /([0-9]+)/;\n\nfunction naturalCompare(value1, value2) {\n var keys1 = ('' + value1).split(NUMBER_PATTERN).map(tryParseInt);\n var keys2 = ('' + value2).split(NUMBER_PATTERN).map(tryParseInt);\n var key1;\n var key2;\n var compareFirst = Math.min(keys1.length, keys2.length);\n var i, l;\n\n for (i = 0, l = compareFirst; i < l; i++) {\n key1 = keys1[i];\n key2 = keys2[i];\n\n if (key1 != key2) {\n return key1 > key2 ? 1 : -1;\n }\n }\n\n return keys1.length > keys2.length ? 1 : (keys1.length == keys2.length ? 0 : -1);\n}\n\nfunction tryParseInt(value) {\n return ('' + parseInt(value)) == value\n ? parseInt(value)\n : value;\n}\n\nmodule.exports = naturalCompare;\n","var naturalCompare = require('../../utils/natural-compare');\n\nfunction naturalSorter(scope1, scope2) {\n return naturalCompare(scope1[1], scope2[1]);\n}\n\nfunction standardSorter(scope1, scope2) {\n return scope1[1] > scope2[1] ? 1 : -1;\n}\n\nfunction sortSelectors(selectors, method) {\n switch (method) {\n case 'natural':\n return selectors.sort(naturalSorter);\n case 'standard':\n return selectors.sort(standardSorter);\n case 'none':\n case false:\n return selectors;\n }\n}\n\nmodule.exports = sortSelectors;\n","function override(source1, source2) {\n var target = {};\n var key1;\n var key2;\n var item;\n\n for (key1 in source1) {\n item = source1[key1];\n\n if (Array.isArray(item)) {\n target[key1] = item.slice(0);\n } else if (typeof item == 'object' && item !== null) {\n target[key1] = override(item, {});\n } else {\n target[key1] = item;\n }\n }\n\n for (key2 in source2) {\n item = source2[key2];\n\n if (key2 in target && Array.isArray(item)) {\n target[key2] = item.slice(0);\n } else if (key2 in target && typeof item == 'object' && item !== null) {\n target[key2] = override(target[key2], item);\n } else {\n target[key2] = item;\n }\n }\n\n return target;\n}\n\nmodule.exports = override;\n","var override = require('../utils/override');\n\nfunction getSystemLineBreak() {\n var systemLineBreak = '\\n';\n try {\n var os = require('os');\n systemLineBreak = os.EOL;\n } catch (_) {\n // no op\n }\n return systemLineBreak;\n}\n\nvar Breaks = {\n AfterAtRule: 'afterAtRule',\n AfterBlockBegins: 'afterBlockBegins',\n AfterBlockEnds: 'afterBlockEnds',\n AfterComment: 'afterComment',\n AfterProperty: 'afterProperty',\n AfterRuleBegins: 'afterRuleBegins',\n AfterRuleEnds: 'afterRuleEnds',\n BeforeBlockEnds: 'beforeBlockEnds',\n BetweenSelectors: 'betweenSelectors'\n};\n\nvar BreakWith = {\n CarriageReturnLineFeed: '\\r\\n',\n LineFeed: '\\n',\n System: getSystemLineBreak()\n};\n\nvar IndentWith = {\n Space: ' ',\n Tab: '\\t'\n};\n\nvar Spaces = {\n AroundSelectorRelation: 'aroundSelectorRelation',\n BeforeBlockBegins: 'beforeBlockBegins',\n BeforeValue: 'beforeValue'\n};\n\nvar DEFAULTS = {\n breaks: breaks(false),\n breakWith: BreakWith.System,\n indentBy: 0,\n indentWith: IndentWith.Space,\n spaces: spaces(false),\n wrapAt: false,\n semicolonAfterLastProperty: false\n};\n\nvar BEAUTIFY_ALIAS = 'beautify';\nvar KEEP_BREAKS_ALIAS = 'keep-breaks';\n\nvar OPTION_SEPARATOR = ';';\nvar OPTION_NAME_VALUE_SEPARATOR = ':';\nvar HASH_VALUES_OPTION_SEPARATOR = ',';\nvar HASH_VALUES_NAME_VALUE_SEPARATOR = '=';\n\nvar FALSE_KEYWORD_1 = 'false';\nvar FALSE_KEYWORD_2 = 'off';\nvar TRUE_KEYWORD_1 = 'true';\nvar TRUE_KEYWORD_2 = 'on';\n\nfunction breaks(value) {\n var breakOptions = {};\n\n breakOptions[Breaks.AfterAtRule] = value;\n breakOptions[Breaks.AfterBlockBegins] = value;\n breakOptions[Breaks.AfterBlockEnds] = value;\n breakOptions[Breaks.AfterComment] = value;\n breakOptions[Breaks.AfterProperty] = value;\n breakOptions[Breaks.AfterRuleBegins] = value;\n breakOptions[Breaks.AfterRuleEnds] = value;\n breakOptions[Breaks.BeforeBlockEnds] = value;\n breakOptions[Breaks.BetweenSelectors] = value;\n\n return breakOptions;\n}\n\nfunction spaces(value) {\n var spaceOptions = {};\n\n spaceOptions[Spaces.AroundSelectorRelation] = value;\n spaceOptions[Spaces.BeforeBlockBegins] = value;\n spaceOptions[Spaces.BeforeValue] = value;\n\n return spaceOptions;\n}\n\nfunction formatFrom(source) {\n if (source === undefined || source === false) {\n return false;\n }\n\n if (typeof source == 'object' && 'breakWith' in source) {\n source = override(source, { breakWith: mapBreakWith(source.breakWith) });\n }\n\n if (typeof source == 'object' && 'indentBy' in source) {\n source = override(source, { indentBy: parseInt(source.indentBy) });\n }\n\n if (typeof source == 'object' && 'indentWith' in source) {\n source = override(source, { indentWith: mapIndentWith(source.indentWith) });\n }\n\n if (typeof source == 'object') {\n return remapBreaks(override(DEFAULTS, source));\n }\n\n if (typeof source == 'string' && source == BEAUTIFY_ALIAS) {\n return remapBreaks(\n override(DEFAULTS, {\n breaks: breaks(true),\n indentBy: 2,\n spaces: spaces(true)\n })\n );\n }\n\n if (typeof source == 'string' && source == KEEP_BREAKS_ALIAS) {\n return remapBreaks(\n override(DEFAULTS, {\n breaks: {\n afterAtRule: true,\n afterBlockBegins: true,\n afterBlockEnds: true,\n afterComment: true,\n afterRuleEnds: true,\n beforeBlockEnds: true\n }\n })\n );\n }\n\n if (typeof source == 'string') {\n return remapBreaks(override(DEFAULTS, toHash(source)));\n }\n\n return DEFAULTS;\n}\n\nfunction toHash(string) {\n return string\n .split(OPTION_SEPARATOR)\n .reduce(function(accumulator, directive) {\n var parts = directive.split(OPTION_NAME_VALUE_SEPARATOR);\n var name = parts[0];\n var value = parts[1];\n\n if (name == 'breaks' || name == 'spaces') {\n accumulator[name] = hashValuesToHash(value);\n } else if (name == 'indentBy' || name == 'wrapAt') {\n accumulator[name] = parseInt(value);\n } else if (name == 'indentWith') {\n accumulator[name] = mapIndentWith(value);\n } else if (name == 'breakWith') {\n accumulator[name] = mapBreakWith(value);\n }\n\n return accumulator;\n }, {});\n}\n\nfunction hashValuesToHash(string) {\n return string\n .split(HASH_VALUES_OPTION_SEPARATOR)\n .reduce(function(accumulator, directive) {\n var parts = directive.split(HASH_VALUES_NAME_VALUE_SEPARATOR);\n var name = parts[0];\n var value = parts[1];\n\n accumulator[name] = normalizeValue(value);\n\n return accumulator;\n }, {});\n}\n\nfunction normalizeValue(value) {\n switch (value) {\n case FALSE_KEYWORD_1:\n case FALSE_KEYWORD_2:\n return false;\n case TRUE_KEYWORD_1:\n case TRUE_KEYWORD_2:\n return true;\n default:\n return value;\n }\n}\n\nfunction mapBreakWith(value) {\n switch (value) {\n case 'windows':\n case 'crlf':\n case BreakWith.CarriageReturnLineFeed:\n return BreakWith.CarriageReturnLineFeed;\n case 'unix':\n case 'lf':\n case BreakWith.LineFeed:\n return BreakWith.LineFeed;\n default:\n return BreakWith.System;\n }\n}\n\nfunction mapIndentWith(value) {\n switch (value) {\n case 'space':\n return IndentWith.Space;\n case 'tab':\n return IndentWith.Tab;\n default:\n return value;\n }\n}\n\nfunction remapBreaks(source) {\n for (var key in Breaks) {\n var breakName = Breaks[key];\n var breakValue = source.breaks[breakName];\n\n if (breakValue === true) {\n source.breaks[breakName] = source.breakWith;\n } else if (breakValue === false) {\n source.breaks[breakName] = '';\n } else {\n source.breaks[breakName] = source.breakWith.repeat(parseInt(breakValue));\n }\n }\n\n return source;\n}\n\nmodule.exports = {\n Breaks: Breaks,\n Spaces: Spaces,\n formatFrom: formatFrom\n};\n","var Marker = {\n ASTERISK: '*',\n AT: '@',\n BACK_SLASH: '\\\\',\n CARRIAGE_RETURN: '\\r',\n CLOSE_CURLY_BRACKET: '}',\n CLOSE_ROUND_BRACKET: ')',\n CLOSE_SQUARE_BRACKET: ']',\n COLON: ':',\n COMMA: ',',\n DOUBLE_QUOTE: '\"',\n EXCLAMATION: '!',\n FORWARD_SLASH: '/',\n INTERNAL: '-clean-css-',\n NEW_LINE_NIX: '\\n',\n OPEN_CURLY_BRACKET: '{',\n OPEN_ROUND_BRACKET: '(',\n OPEN_SQUARE_BRACKET: '[',\n SEMICOLON: ';',\n SINGLE_QUOTE: '\\'',\n SPACE: ' ',\n TAB: '\\t',\n UNDERSCORE: '_'\n};\n\nmodule.exports = Marker;\n","function formatPosition(metadata) {\n var line = metadata[0];\n var column = metadata[1];\n var source = metadata[2];\n\n return source\n ? source + ':' + line + ':' + column\n : line + ':' + column;\n}\n\nmodule.exports = formatPosition;\n","var Spaces = require('../../options/format').Spaces;\nvar Marker = require('../../tokenizer/marker');\nvar formatPosition = require('../../utils/format-position');\n\nvar CASE_ATTRIBUTE_PATTERN = /[\\s\"'][iI]\\s*\\]/;\nvar CASE_RESTORE_PATTERN = /([\\d\\w])([iI])\\]/g;\nvar DOUBLE_QUOTE_CASE_PATTERN = /=\"([a-zA-Z][a-zA-Z\\d\\-_]+)\"([iI])/g;\nvar DOUBLE_QUOTE_PATTERN = /=\"([a-zA-Z][a-zA-Z\\d\\-_]+)\"(\\s|\\])/g;\nvar HTML_COMMENT_PATTERN = /^(?:(?:<!--|-->)\\s*)+/;\nvar SINGLE_QUOTE_CASE_PATTERN = /='([a-zA-Z][a-zA-Z\\d\\-_]+)'([iI])/g;\nvar SINGLE_QUOTE_PATTERN = /='([a-zA-Z][a-zA-Z\\d\\-_]+)'(\\s|\\])/g;\nvar RELATION_PATTERN = /[>+~]/;\nvar WHITESPACE_PATTERN = /\\s/;\n\nvar ASTERISK_PLUS_HTML_HACK = '*+html ';\nvar ASTERISK_FIRST_CHILD_PLUS_HTML_HACK = '*:first-child+html ';\nvar LESS_THAN = '<';\n\nvar PSEUDO_CLASSES_WITH_SELECTORS = [\n ':current',\n ':future',\n ':has',\n ':host',\n ':host-context',\n ':is',\n ':not',\n ':past',\n ':where'\n];\n\nfunction hasInvalidCharacters(value) {\n var isEscaped;\n var isInvalid = false;\n var character;\n var isQuote = false;\n var i, l;\n\n for (i = 0, l = value.length; i < l; i++) {\n character = value[i];\n\n if (isEscaped) {\n // continue as always\n } else if (character == Marker.SINGLE_QUOTE || character == Marker.DOUBLE_QUOTE) {\n isQuote = !isQuote;\n } else if (!isQuote\n && (character == Marker.CLOSE_CURLY_BRACKET\n || character == Marker.EXCLAMATION\n || character == LESS_THAN\n || character == Marker.SEMICOLON)\n ) {\n isInvalid = true;\n break;\n } else if (!isQuote && i === 0 && RELATION_PATTERN.test(character)) {\n isInvalid = true;\n break;\n }\n\n isEscaped = character == Marker.BACK_SLASH;\n }\n\n return isInvalid;\n}\n\nfunction removeWhitespace(value, format) {\n var stripped = [];\n var character;\n var isNewLineNix;\n var isNewLineWin;\n var isEscaped;\n var wasEscaped;\n var isQuoted;\n var isSingleQuoted;\n var isDoubleQuoted;\n var isAttribute;\n var isRelation;\n var isWhitespace;\n var isSpaceAwarePseudoClass;\n var roundBracketLevel = 0;\n var wasComma = false;\n var wasRelation = false;\n var wasWhitespace = false;\n var withCaseAttribute = CASE_ATTRIBUTE_PATTERN.test(value);\n var spaceAroundRelation = format && format.spaces[Spaces.AroundSelectorRelation];\n var i, l;\n\n for (i = 0, l = value.length; i < l; i++) {\n character = value[i];\n\n isNewLineNix = character == Marker.NEW_LINE_NIX;\n isNewLineWin = character == Marker.NEW_LINE_NIX && value[i - 1] == Marker.CARRIAGE_RETURN;\n isQuoted = isSingleQuoted || isDoubleQuoted;\n isRelation = !isAttribute && !isEscaped && roundBracketLevel === 0 && RELATION_PATTERN.test(character);\n isWhitespace = WHITESPACE_PATTERN.test(character);\n isSpaceAwarePseudoClass = roundBracketLevel == 1 && character == Marker.CLOSE_ROUND_BRACKET\n ? false\n : isSpaceAwarePseudoClass\n || (roundBracketLevel === 0 && character == Marker.COLON && isPseudoClassWithSelectors(value, i));\n\n if (wasEscaped && isQuoted && isNewLineWin) {\n // swallow escaped new windows lines in comments\n stripped.pop();\n stripped.pop();\n } else if (isEscaped && isQuoted && isNewLineNix) {\n // swallow escaped new *nix lines in comments\n stripped.pop();\n } else if (isEscaped) {\n stripped.push(character);\n } else if (character == Marker.OPEN_SQUARE_BRACKET && !isQuoted) {\n stripped.push(character);\n isAttribute = true;\n } else if (character == Marker.CLOSE_SQUARE_BRACKET && !isQuoted) {\n stripped.push(character);\n isAttribute = false;\n } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted) {\n stripped.push(character);\n roundBracketLevel++;\n } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted) {\n stripped.push(character);\n roundBracketLevel--;\n } else if (character == Marker.SINGLE_QUOTE && !isQuoted) {\n stripped.push(character);\n isSingleQuoted = true;\n } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) {\n stripped.push(character);\n isDoubleQuoted = true;\n } else if (character == Marker.SINGLE_QUOTE && isQuoted) {\n stripped.push(character);\n isSingleQuoted = false;\n } else if (character == Marker.DOUBLE_QUOTE && isQuoted) {\n stripped.push(character);\n isDoubleQuoted = false;\n } else if (isWhitespace && wasRelation && !spaceAroundRelation) {\n continue;\n } else if (!isWhitespace && wasRelation && spaceAroundRelation) {\n stripped.push(Marker.SPACE);\n stripped.push(character);\n } else if (isWhitespace && !wasWhitespace && wasComma && roundBracketLevel > 0 && isSpaceAwarePseudoClass) {\n // skip space\n } else if (isWhitespace && !wasWhitespace && roundBracketLevel > 0 && isSpaceAwarePseudoClass) {\n stripped.push(character);\n } else if (isWhitespace && (isAttribute || roundBracketLevel > 0) && !isQuoted) {\n // skip space\n } else if (isWhitespace && wasWhitespace && !isQuoted) {\n // skip extra space\n } else if ((isNewLineWin || isNewLineNix) && (isAttribute || roundBracketLevel > 0) && isQuoted) {\n // skip newline\n } else if (isRelation && wasWhitespace && !spaceAroundRelation) {\n stripped.pop();\n stripped.push(character);\n } else if (isRelation && !wasWhitespace && spaceAroundRelation) {\n stripped.push(Marker.SPACE);\n stripped.push(character);\n } else if (isWhitespace) {\n stripped.push(Marker.SPACE);\n } else {\n stripped.push(character);\n }\n\n wasEscaped = isEscaped;\n isEscaped = character == Marker.BACK_SLASH;\n wasRelation = isRelation;\n wasWhitespace = isWhitespace;\n wasComma = character == Marker.COMMA;\n }\n\n return withCaseAttribute\n ? stripped.join('').replace(CASE_RESTORE_PATTERN, '$1 $2]')\n : stripped.join('');\n}\n\nfunction isPseudoClassWithSelectors(value, colonPosition) {\n var pseudoClass = value.substring(colonPosition, value.indexOf(Marker.OPEN_ROUND_BRACKET, colonPosition));\n\n return PSEUDO_CLASSES_WITH_SELECTORS.indexOf(pseudoClass) > -1;\n}\n\nfunction removeQuotes(value) {\n if (value.indexOf('\\'') == -1 && value.indexOf('\"') == -1) {\n return value;\n }\n\n return value\n .replace(SINGLE_QUOTE_CASE_PATTERN, '=$1 $2')\n .replace(SINGLE_QUOTE_PATTERN, '=$1$2')\n .replace(DOUBLE_QUOTE_CASE_PATTERN, '=$1 $2')\n .replace(DOUBLE_QUOTE_PATTERN, '=$1$2');\n}\n\nfunction replacePseudoClasses(value) {\n return value\n .replace('nth-child(1)', 'first-child')\n .replace('nth-of-type(1)', 'first-of-type')\n .replace('nth-of-type(even)', 'nth-of-type(2n)')\n .replace('nth-child(even)', 'nth-child(2n)')\n .replace('nth-of-type(2n+1)', 'nth-of-type(odd)')\n .replace('nth-child(2n+1)', 'nth-child(odd)')\n .replace('nth-last-child(1)', 'last-child')\n .replace('nth-last-of-type(1)', 'last-of-type')\n .replace('nth-last-of-type(even)', 'nth-last-of-type(2n)')\n .replace('nth-last-child(even)', 'nth-last-child(2n)')\n .replace('nth-last-of-type(2n+1)', 'nth-last-of-type(odd)')\n .replace('nth-last-child(2n+1)', 'nth-last-child(odd)');\n}\n\nfunction tidyRules(rules, removeUnsupported, adjacentSpace, format, warnings) {\n var list = [];\n var repeated = [];\n\n function removeHTMLComment(rule, match) {\n warnings.push('HTML comment \\'' + match + '\\' at ' + formatPosition(rule[2][0]) + '. Removing.');\n return '';\n }\n\n for (var i = 0, l = rules.length; i < l; i++) {\n var rule = rules[i];\n var reduced = rule[1];\n\n reduced = reduced.replace(HTML_COMMENT_PATTERN, removeHTMLComment.bind(null, rule));\n\n if (hasInvalidCharacters(reduced)) {\n warnings.push('Invalid selector \\'' + rule[1] + '\\' at ' + formatPosition(rule[2][0]) + '. Ignoring.');\n continue;\n }\n\n reduced = removeWhitespace(reduced, format);\n reduced = removeQuotes(reduced);\n\n if (adjacentSpace && reduced.indexOf('nav') > 0) {\n reduced = reduced.replace(/\\+nav(\\S|$)/, '+ nav$1');\n }\n\n if (removeUnsupported && reduced.indexOf(ASTERISK_PLUS_HTML_HACK) > -1) {\n continue;\n }\n\n if (removeUnsupported && reduced.indexOf(ASTERISK_FIRST_CHILD_PLUS_HTML_HACK) > -1) {\n continue;\n }\n\n if (reduced.indexOf('*') > -1) {\n reduced = reduced\n .replace(/\\*([:#.[])/g, '$1')\n .replace(/^(:first-child)?\\+html/, '*$1+html');\n }\n\n if (repeated.indexOf(reduced) > -1) {\n continue;\n }\n\n reduced = replacePseudoClasses(reduced);\n\n rule[1] = reduced;\n repeated.push(reduced);\n list.push(rule);\n }\n\n if (list.length == 1 && list[0][1].length === 0) {\n warnings.push('Empty selector \\'' + list[0][1] + '\\' at ' + formatPosition(list[0][2][0]) + '. Ignoring.');\n list = [];\n }\n\n return list;\n}\n\nmodule.exports = tidyRules;\n","var SUPPORTED_COMPACT_BLOCK_MATCHER = /^@media\\W/;\nvar SUPPORTED_QUOTE_REMOVAL_MATCHER = /^@(?:keyframes|-moz-keyframes|-o-keyframes|-webkit-keyframes)\\W/;\n\nfunction tidyBlock(values, spaceAfterClosingBrace) {\n var withoutSpaceAfterClosingBrace;\n var withoutQuotes;\n var i;\n\n for (i = values.length - 1; i >= 0; i--) {\n withoutSpaceAfterClosingBrace = !spaceAfterClosingBrace && SUPPORTED_COMPACT_BLOCK_MATCHER.test(values[i][1]);\n withoutQuotes = SUPPORTED_QUOTE_REMOVAL_MATCHER.test(values[i][1]);\n\n values[i][1] = values[i][1]\n .replace(/\\n|\\r\\n/g, ' ')\n .replace(/\\s+/g, ' ')\n .replace(/(,|:|\\() /g, '$1')\n .replace(/ \\)/g, ')');\n\n if (withoutQuotes) {\n values[i][1] = values[i][1]\n .replace(/'([a-zA-Z][a-zA-Z\\d\\-_]+)'/, '$1')\n .replace(/\"([a-zA-Z][a-zA-Z\\d\\-_]+)\"/, '$1');\n }\n\n if (withoutSpaceAfterClosingBrace) {\n values[i][1] = values[i][1]\n .replace(/\\) /g, ')');\n }\n }\n\n return values;\n}\n\nmodule.exports = tidyBlock;\n","function tidyAtRule(value) {\n return value\n .replace(/\\s+/g, ' ')\n .replace(/url\\(\\s+/g, 'url(')\n .replace(/\\s+\\)/g, ')')\n .trim();\n}\n\nmodule.exports = tidyAtRule;\n","var Hack = {\n ASTERISK: 'asterisk',\n BANG: 'bang',\n BACKSLASH: 'backslash',\n UNDERSCORE: 'underscore'\n};\n\nmodule.exports = Hack;\n","function removeUnused(properties) {\n for (var i = properties.length - 1; i >= 0; i--) {\n var property = properties[i];\n\n if (property.unused) {\n property.all.splice(property.position, 1);\n }\n }\n}\n\nmodule.exports = removeUnused;\n","var Hack = require('./hack');\n\nvar Marker = require('../tokenizer/marker');\n\nvar ASTERISK_HACK = '*';\nvar BACKSLASH_HACK = '\\\\';\nvar IMPORTANT_TOKEN = '!important';\nvar UNDERSCORE_HACK = '_';\nvar BANG_HACK = '!ie';\n\nfunction restoreFromOptimizing(properties, restoreCallback) {\n var property;\n var restored;\n var current;\n var i;\n\n for (i = properties.length - 1; i >= 0; i--) {\n property = properties[i];\n\n if (property.dynamic && property.important) {\n restoreImportant(property);\n continue;\n }\n\n if (property.dynamic) {\n continue;\n }\n\n if (property.unused) {\n continue;\n }\n\n if (!property.dirty && !property.important && !property.hack) {\n continue;\n }\n\n if (property.optimizable && restoreCallback) {\n restored = restoreCallback(property);\n property.value = restored;\n } else {\n restored = property.value;\n }\n\n if (property.important) {\n restoreImportant(property);\n }\n\n if (property.hack) {\n restoreHack(property);\n }\n\n if ('all' in property) {\n current = property.all[property.position];\n current[1][1] = property.name;\n\n current.splice(2, current.length - 1);\n Array.prototype.push.apply(current, restored);\n }\n }\n}\n\nfunction restoreImportant(property) {\n property.value[property.value.length - 1][1] += IMPORTANT_TOKEN;\n}\n\nfunction restoreHack(property) {\n if (property.hack[0] == Hack.UNDERSCORE) {\n property.name = UNDERSCORE_HACK + property.name;\n } else if (property.hack[0] == Hack.ASTERISK) {\n property.name = ASTERISK_HACK + property.name;\n } else if (property.hack[0] == Hack.BACKSLASH) {\n property.value[property.value.length - 1][1] += BACKSLASH_HACK + property.hack[1];\n } else if (property.hack[0] == Hack.BANG) {\n property.value[property.value.length - 1][1] += Marker.SPACE + BANG_HACK;\n }\n}\n\nmodule.exports = restoreFromOptimizing;\n","var Token = {\n AT_RULE: 'at-rule', // e.g. `@import`, `@charset`\n AT_RULE_BLOCK: 'at-rule-block', // e.g. `@font-face{...}`\n AT_RULE_BLOCK_SCOPE: 'at-rule-block-scope', // e.g. `@font-face`\n COMMENT: 'comment', // e.g. `/* comment */`\n NESTED_BLOCK: 'nested-block', // e.g. `@media screen{...}`, `@keyframes animation {...}`\n NESTED_BLOCK_SCOPE: 'nested-block-scope', // e.g. `@media`, `@keyframes`\n PROPERTY: 'property', // e.g. `color:red`\n PROPERTY_BLOCK: 'property-block', // e.g. `--var:{color:red}`\n PROPERTY_NAME: 'property-name', // e.g. `color`\n PROPERTY_VALUE: 'property-value', // e.g. `red`\n RAW: 'raw', // e.g. anything between /* clean-css ignore:start */ and /* clean-css ignore:end */ comments\n RULE: 'rule', // e.g `div > a{...}`\n RULE_SCOPE: 'rule-scope' // e.g `div > a`\n};\n\nmodule.exports = Token;\n","var Hack = require('./hack');\n\nvar Marker = require('../tokenizer/marker');\nvar Token = require('../tokenizer/token');\n\nvar Match = {\n ASTERISK: '*',\n BACKSLASH: '\\\\',\n BANG: '!',\n BANG_SUFFIX_PATTERN: /!\\w+$/,\n IMPORTANT_TOKEN: '!important',\n IMPORTANT_TOKEN_PATTERN: new RegExp('!important$', 'i'),\n IMPORTANT_WORD: 'important',\n IMPORTANT_WORD_PATTERN: new RegExp('important$', 'i'),\n SUFFIX_BANG_PATTERN: /!$/,\n UNDERSCORE: '_',\n VARIABLE_REFERENCE_PATTERN: /var\\(--.+\\)$/\n};\n\nfunction wrapAll(properties, skipProperties) {\n var wrapped = [];\n var single;\n var property;\n var i;\n\n for (i = properties.length - 1; i >= 0; i--) {\n property = properties[i];\n\n if (property[0] != Token.PROPERTY) {\n continue;\n }\n\n if (skipProperties && skipProperties.indexOf(property[1][1]) > -1) {\n continue;\n }\n\n single = wrapSingle(property);\n single.all = properties;\n single.position = i;\n wrapped.unshift(single);\n }\n\n return wrapped;\n}\n\nfunction someVariableReferences(property) {\n var i, l;\n var value;\n\n // skipping `property` and property name tokens\n for (i = 2, l = property.length; i < l; i++) {\n value = property[i];\n\n if (value[0] != Token.PROPERTY_VALUE) {\n continue;\n }\n\n if (isVariableReference(value[1])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isVariableReference(value) {\n return Match.VARIABLE_REFERENCE_PATTERN.test(value);\n}\n\nfunction isMultiplex(property) {\n var value;\n var i, l;\n\n for (i = 3, l = property.length; i < l; i++) {\n value = property[i];\n\n if (value[0] == Token.PROPERTY_VALUE && (value[1] == Marker.COMMA || value[1] == Marker.FORWARD_SLASH)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction hackFrom(property) {\n var match = false;\n var name = property[1][1];\n var lastValue = property[property.length - 1];\n\n if (name[0] == Match.UNDERSCORE) {\n match = [Hack.UNDERSCORE];\n } else if (name[0] == Match.ASTERISK) {\n match = [Hack.ASTERISK];\n } else if (lastValue[1][0] == Match.BANG && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)) {\n match = [Hack.BANG];\n } else if (lastValue[1].indexOf(Match.BANG) > 0\n && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)\n && Match.BANG_SUFFIX_PATTERN.test(lastValue[1])) {\n match = [Hack.BANG];\n } else if (lastValue[1].indexOf(Match.BACKSLASH) > 0\n && lastValue[1].indexOf(Match.BACKSLASH) == lastValue[1].length - Match.BACKSLASH.length - 1) {\n match = [Hack.BACKSLASH, lastValue[1].substring(lastValue[1].indexOf(Match.BACKSLASH) + 1)];\n } else if (lastValue[1].indexOf(Match.BACKSLASH) === 0 && lastValue[1].length == 2) {\n match = [Hack.BACKSLASH, lastValue[1].substring(1)];\n }\n\n return match;\n}\n\nfunction isImportant(property) {\n if (property.length < 3) { return false; }\n\n var lastValue = property[property.length - 1];\n if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {\n return true;\n } if (Match.IMPORTANT_WORD_PATTERN.test(lastValue[1])\n && Match.SUFFIX_BANG_PATTERN.test(property[property.length - 2][1])) {\n return true;\n }\n\n return false;\n}\n\nfunction stripImportant(property) {\n var lastValue = property[property.length - 1];\n var oneButLastValue = property[property.length - 2];\n\n if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {\n lastValue[1] = lastValue[1].replace(Match.IMPORTANT_TOKEN_PATTERN, '');\n } else {\n lastValue[1] = lastValue[1].replace(Match.IMPORTANT_WORD_PATTERN, '');\n oneButLastValue[1] = oneButLastValue[1].replace(Match.SUFFIX_BANG_PATTERN, '');\n }\n\n if (lastValue[1].length === 0) {\n property.pop();\n }\n\n if (oneButLastValue[1].length === 0) {\n property.pop();\n }\n}\n\nfunction stripPrefixHack(property) {\n property[1][1] = property[1][1].substring(1);\n}\n\nfunction stripSuffixHack(property, hackFrom) {\n var lastValue = property[property.length - 1];\n lastValue[1] = lastValue[1]\n .substring(0, lastValue[1].indexOf(hackFrom[0] == Hack.BACKSLASH ? Match.BACKSLASH : Match.BANG))\n .trim();\n\n if (lastValue[1].length === 0) {\n property.pop();\n }\n}\n\nfunction wrapSingle(property) {\n var importantProperty = isImportant(property);\n if (importantProperty) {\n stripImportant(property);\n }\n\n var whichHack = hackFrom(property);\n if (whichHack[0] == Hack.ASTERISK || whichHack[0] == Hack.UNDERSCORE) {\n stripPrefixHack(property);\n } else if (whichHack[0] == Hack.BACKSLASH || whichHack[0] == Hack.BANG) {\n stripSuffixHack(property, whichHack);\n }\n\n return {\n block: property[2] && property[2][0] == Token.PROPERTY_BLOCK,\n components: [],\n dirty: false,\n dynamic: someVariableReferences(property),\n hack: whichHack,\n important: importantProperty,\n name: property[1][1],\n multiplex: property.length > 3 ? isMultiplex(property) : false,\n optimizable: true,\n position: 0,\n shorthand: false,\n unused: false,\n value: property.slice(2)\n };\n}\n\nmodule.exports = {\n all: wrapAll,\n single: wrapSingle\n};\n","function InvalidPropertyError(message) {\n this.name = 'InvalidPropertyError';\n this.message = message;\n this.stack = (new Error()).stack;\n}\n\nInvalidPropertyError.prototype = Object.create(Error.prototype);\nInvalidPropertyError.prototype.constructor = InvalidPropertyError;\n\nmodule.exports = InvalidPropertyError;\n","var InvalidPropertyError = require('../invalid-property-error');\n\nvar wrapSingle = require('../wrap-for-optimizing').single;\n\nvar Token = require('../../tokenizer/token');\nvar Marker = require('../../tokenizer/marker');\n\nvar formatPosition = require('../../utils/format-position');\n\nfunction _anyIsInherit(values) {\n var i, l;\n\n for (i = 0, l = values.length; i < l; i++) {\n if (values[i][1] == 'inherit') {\n return true;\n }\n }\n\n return false;\n}\n\nfunction _colorFilter(validator) {\n return function(value) {\n return value[1] == 'invert' || validator.isColor(value[1]) || validator.isPrefixed(value[1]);\n };\n}\n\nfunction _styleFilter(validator) {\n return function(value) {\n return value[1] != 'inherit' && validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]);\n };\n}\n\nfunction _wrapDefault(name, property, configuration) {\n var descriptor = configuration[name];\n if (descriptor.doubleValues && descriptor.defaultValue.length == 2) {\n return wrapSingle([\n Token.PROPERTY,\n [Token.PROPERTY_NAME, name],\n [Token.PROPERTY_VALUE, descriptor.defaultValue[0]],\n [Token.PROPERTY_VALUE, descriptor.defaultValue[1]]\n ]);\n } if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {\n return wrapSingle([\n Token.PROPERTY,\n [Token.PROPERTY_NAME, name],\n [Token.PROPERTY_VALUE, descriptor.defaultValue[0]]\n ]);\n }\n return wrapSingle([\n Token.PROPERTY,\n [Token.PROPERTY_NAME, name],\n [Token.PROPERTY_VALUE, descriptor.defaultValue]\n ]);\n}\n\nfunction _widthFilter(validator) {\n return function(value) {\n return value[1] != 'inherit'\n && (validator.isWidth(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1]))\n && !validator.isStyleKeyword(value[1])\n && !validator.isColorFunction(value[1]);\n };\n}\n\nfunction animation(property, configuration, validator) {\n var duration = _wrapDefault(property.name + '-duration', property, configuration);\n var timing = _wrapDefault(property.name + '-timing-function', property, configuration);\n var delay = _wrapDefault(property.name + '-delay', property, configuration);\n var iteration = _wrapDefault(property.name + '-iteration-count', property, configuration);\n var direction = _wrapDefault(property.name + '-direction', property, configuration);\n var fill = _wrapDefault(property.name + '-fill-mode', property, configuration);\n var play = _wrapDefault(property.name + '-play-state', property, configuration);\n var name = _wrapDefault(property.name + '-name', property, configuration);\n var components = [duration, timing, delay, iteration, direction, fill, play, name];\n var values = property.value;\n var value;\n var durationSet = false;\n var timingSet = false;\n var delaySet = false;\n var iterationSet = false;\n var directionSet = false;\n var fillSet = false;\n var playSet = false;\n var nameSet = false;\n var i;\n var l;\n\n if (property.value.length == 1 && property.value[0][1] == 'inherit') {\n // eslint-disable-next-line max-len\n duration.value = timing.value = delay.value = iteration.value = direction.value = fill.value = play.value = name.value = property.value;\n return components;\n }\n\n if (values.length > 1 && _anyIsInherit(values)) {\n throw new InvalidPropertyError('Invalid animation values at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n }\n\n for (i = 0, l = values.length; i < l; i++) {\n value = values[i];\n\n if (validator.isTime(value[1]) && !durationSet) {\n duration.value = [value];\n durationSet = true;\n } else if (validator.isTime(value[1]) && !delaySet) {\n delay.value = [value];\n delaySet = true;\n } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) {\n timing.value = [value];\n timingSet = true;\n } else if ((validator.isAnimationIterationCountKeyword(value[1])\n || validator.isPositiveNumber(value[1]))\n && !iterationSet) {\n iteration.value = [value];\n iterationSet = true;\n } else if (validator.isAnimationDirectionKeyword(value[1]) && !directionSet) {\n direction.value = [value];\n directionSet = true;\n } else if (validator.isAnimationFillModeKeyword(value[1]) && !fillSet) {\n fill.value = [value];\n fillSet = true;\n } else if (validator.isAnimationPlayStateKeyword(value[1]) && !playSet) {\n play.value = [value];\n playSet = true;\n } else if ((validator.isAnimationNameKeyword(value[1]) || validator.isIdentifier(value[1])) && !nameSet) {\n name.value = [value];\n nameSet = true;\n } else {\n throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.');\n }\n }\n\n return components;\n}\n\nfunction background(property, configuration, validator) {\n var image = _wrapDefault('background-image', property, configuration);\n var position = _wrapDefault('background-position', property, configuration);\n var size = _wrapDefault('background-size', property, configuration);\n var repeat = _wrapDefault('background-repeat', property, configuration);\n var attachment = _wrapDefault('background-attachment', property, configuration);\n var origin = _wrapDefault('background-origin', property, configuration);\n var clip = _wrapDefault('background-clip', property, configuration);\n var color = _wrapDefault('background-color', property, configuration);\n var components = [image, position, size, repeat, attachment, origin, clip, color];\n var values = property.value;\n\n var positionSet = false;\n var clipSet = false;\n var originSet = false;\n var repeatSet = false;\n\n var anyValueSet = false;\n\n if (property.value.length == 1 && property.value[0][1] == 'inherit') {\n // NOTE: 'inherit' is not a valid value for background-attachment\n color.value = image.value = repeat.value = position.value = size.value = origin.value = clip.value = property.value;\n return components;\n }\n\n if (property.value.length == 1 && property.value[0][1] == '0 0') {\n return components;\n }\n\n for (var i = values.length - 1; i >= 0; i--) {\n var value = values[i];\n\n if (validator.isBackgroundAttachmentKeyword(value[1])) {\n attachment.value = [value];\n anyValueSet = true;\n } else if (validator.isBackgroundClipKeyword(value[1]) || validator.isBackgroundOriginKeyword(value[1])) {\n if (clipSet) {\n origin.value = [value];\n originSet = true;\n } else {\n clip.value = [value];\n clipSet = true;\n }\n anyValueSet = true;\n } else if (validator.isBackgroundRepeatKeyword(value[1])) {\n if (repeatSet) {\n repeat.value.unshift(value);\n } else {\n repeat.value = [value];\n repeatSet = true;\n }\n anyValueSet = true;\n } else if (validator.isBackgroundPositionKeyword(value[1])\n || validator.isBackgroundSizeKeyword(value[1])\n || validator.isUnit(value[1])\n || validator.isDynamicUnit(value[1])) {\n if (i > 0) {\n var previousValue = values[i - 1];\n\n if (previousValue[1] == Marker.FORWARD_SLASH) {\n size.value = [value];\n } else if (i > 1 && values[i - 2][1] == Marker.FORWARD_SLASH) {\n size.value = [previousValue, value];\n i -= 2;\n } else {\n if (!positionSet) { position.value = []; }\n\n position.value.unshift(value);\n positionSet = true;\n }\n } else {\n if (!positionSet) { position.value = []; }\n\n position.value.unshift(value);\n positionSet = true;\n }\n anyValueSet = true;\n } else if ((color.value[0][1] == configuration[color.name].defaultValue || color.value[0][1] == 'none') && (validator.isColor(value[1]) || validator.isPrefixed(value[1]))) {\n color.value = [value];\n anyValueSet = true;\n } else if (validator.isUrl(value[1]) || validator.isFunction(value[1])) {\n image.value = [value];\n anyValueSet = true;\n }\n }\n\n if (clipSet && !originSet) { origin.value = clip.value.slice(0); }\n\n if (!anyValueSet) {\n throw new InvalidPropertyError('Invalid background value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n }\n\n return components;\n}\n\nfunction borderRadius(property, configuration) {\n var values = property.value;\n var splitAt = -1;\n\n for (var i = 0, l = values.length; i < l; i++) {\n if (values[i][1] == Marker.FORWARD_SLASH) {\n splitAt = i;\n break;\n }\n }\n\n if (splitAt === 0 || splitAt === values.length - 1) {\n throw new InvalidPropertyError('Invalid border-radius value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n }\n\n var target = _wrapDefault(property.name, property, configuration);\n target.value = splitAt > -1\n ? values.slice(0, splitAt)\n : values.slice(0);\n target.components = fourValues(target, configuration);\n\n var remainder = _wrapDefault(property.name, property, configuration);\n remainder.value = splitAt > -1\n ? values.slice(splitAt + 1)\n : values.slice(0);\n remainder.components = fourValues(remainder, configuration);\n\n for (var j = 0; j < 4; j++) {\n target.components[j].multiplex = true;\n target.components[j].value = target.components[j].value.concat(remainder.components[j].value);\n }\n\n return target.components;\n}\n\nfunction font(property, configuration, validator) {\n var style = _wrapDefault('font-style', property, configuration);\n var variant = _wrapDefault('font-variant', property, configuration);\n var weight = _wrapDefault('font-weight', property, configuration);\n var stretch = _wrapDefault('font-stretch', property, configuration);\n var size = _wrapDefault('font-size', property, configuration);\n var height = _wrapDefault('line-height', property, configuration);\n var family = _wrapDefault('font-family', property, configuration);\n var components = [style, variant, weight, stretch, size, height, family];\n var values = property.value;\n var fuzzyMatched = 4; // style, variant, weight, and stretch\n var index = 0;\n var isStretchSet = false;\n var isStretchValid;\n var isStyleSet = false;\n var isStyleValid;\n var isVariantSet = false;\n var isVariantValid;\n var isWeightSet = false;\n var isWeightValid;\n var appendableFamilyName = false;\n\n if (!values[index]) {\n throw new InvalidPropertyError('Missing font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.');\n }\n\n if (values.length == 1 && values[0][1] == 'inherit') {\n style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;\n return components;\n }\n\n if (values.length == 1\n && (validator.isFontKeyword(values[0][1])\n || validator.isGlobal(values[0][1])\n || validator.isPrefixed(values[0][1]))\n ) {\n values[0][1] = Marker.INTERNAL + values[0][1];\n style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;\n return components;\n }\n\n if (values.length < 2 || !_anyIsFontSize(values, validator) || !_anyIsFontFamily(values, validator)) {\n throw new InvalidPropertyError('Invalid font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.');\n }\n\n if (values.length > 1 && _anyIsInherit(values)) {\n throw new InvalidPropertyError('Invalid font values at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n }\n\n // fuzzy match style, variant, weight, and stretch on first elements\n while (index < fuzzyMatched) {\n isStretchValid = validator.isFontStretchKeyword(values[index][1]) || validator.isGlobal(values[index][1]);\n isStyleValid = validator.isFontStyleKeyword(values[index][1]) || validator.isGlobal(values[index][1]);\n isVariantValid = validator.isFontVariantKeyword(values[index][1]) || validator.isGlobal(values[index][1]);\n isWeightValid = validator.isFontWeightKeyword(values[index][1]) || validator.isGlobal(values[index][1]);\n\n if (isStyleValid && !isStyleSet) {\n style.value = [values[index]];\n isStyleSet = true;\n } else if (isVariantValid && !isVariantSet) {\n variant.value = [values[index]];\n isVariantSet = true;\n } else if (isWeightValid && !isWeightSet) {\n weight.value = [values[index]];\n isWeightSet = true;\n } else if (isStretchValid && !isStretchSet) {\n stretch.value = [values[index]];\n isStretchSet = true;\n } else if (isStyleValid\n && isStyleSet\n || isVariantValid\n && isVariantSet\n || isWeightValid\n && isWeightSet\n || isStretchValid\n && isStretchSet) {\n throw new InvalidPropertyError('Invalid font style / variant / weight / stretch value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n } else {\n break;\n }\n\n index++;\n }\n\n // now comes font-size ...\n if (validator.isFontSizeKeyword(values[index][1])\n || validator.isUnit(values[index][1])\n && !validator.isDynamicUnit(values[index][1])) {\n size.value = [values[index]];\n index++;\n } else {\n throw new InvalidPropertyError('Missing font size at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n }\n\n if (!values[index]) {\n throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n }\n\n // ... and perhaps line-height\n if (values[index]\n && values[index][1] == Marker.FORWARD_SLASH\n && values[index + 1]\n && (validator.isLineHeightKeyword(values[index + 1][1])\n || validator.isUnit(values[index + 1][1])\n || validator.isNumber(values[index + 1][1]))) {\n height.value = [values[index + 1]];\n index++;\n index++;\n }\n\n // ... and whatever comes next is font-family\n family.value = [];\n\n while (values[index]) {\n if (values[index][1] == Marker.COMMA) {\n appendableFamilyName = false;\n } else {\n if (appendableFamilyName) {\n family.value[family.value.length - 1][1] += Marker.SPACE + values[index][1];\n } else {\n family.value.push(values[index]);\n }\n\n appendableFamilyName = true;\n }\n\n index++;\n }\n\n if (family.value.length === 0) {\n throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n }\n\n return components;\n}\n\nfunction _anyIsFontSize(values, validator) {\n var value;\n var i, l;\n\n for (i = 0, l = values.length; i < l; i++) {\n value = values[i];\n\n if (validator.isFontSizeKeyword(value[1])\n || validator.isUnit(value[1])\n && !validator.isDynamicUnit(value[1])\n || validator.isFunction(value[1])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction _anyIsFontFamily(values, validator) {\n var value;\n var i, l;\n\n for (i = 0, l = values.length; i < l; i++) {\n value = values[i];\n\n if (validator.isIdentifier(value[1]) || validator.isQuotedText(value[1])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction fourValues(property, configuration) {\n var componentNames = configuration[property.name].components;\n var components = [];\n var value = property.value;\n\n if (value.length < 1) { return []; }\n\n if (value.length < 2) { value[1] = value[0].slice(0); }\n if (value.length < 3) { value[2] = value[0].slice(0); }\n if (value.length < 4) { value[3] = value[1].slice(0); }\n\n for (var i = componentNames.length - 1; i >= 0; i--) {\n var component = wrapSingle([\n Token.PROPERTY,\n [Token.PROPERTY_NAME, componentNames[i]]\n ]);\n component.value = [value[i]];\n components.unshift(component);\n }\n\n return components;\n}\n\nfunction multiplex(splitWith) {\n return function(property, configuration, validator) {\n var splitsAt = [];\n var values = property.value;\n var i, j, l, m;\n\n // find split commas\n for (i = 0, l = values.length; i < l; i++) {\n if (values[i][1] == ',') { splitsAt.push(i); }\n }\n\n if (splitsAt.length === 0) { return splitWith(property, configuration, validator); }\n\n var splitComponents = [];\n\n // split over commas, and into components\n for (i = 0, l = splitsAt.length; i <= l; i++) {\n var from = i === 0 ? 0 : splitsAt[i - 1] + 1;\n var to = i < l ? splitsAt[i] : values.length;\n\n var _property = _wrapDefault(property.name, property, configuration);\n _property.value = values.slice(from, to);\n\n if (_property.value.length > 0) {\n splitComponents.push(splitWith(_property, configuration, validator));\n }\n }\n\n var components = splitComponents[0];\n\n // group component values from each split\n for (i = 0, l = components.length; i < l; i++) {\n components[i].multiplex = true;\n\n for (j = 1, m = splitComponents.length; j < m; j++) {\n components[i].value.push([Token.PROPERTY_VALUE, Marker.COMMA]);\n Array.prototype.push.apply(components[i].value, splitComponents[j][i].value);\n }\n }\n\n return components;\n };\n}\n\nfunction listStyle(property, configuration, validator) {\n var type = _wrapDefault('list-style-type', property, configuration);\n var position = _wrapDefault('list-style-position', property, configuration);\n var image = _wrapDefault('list-style-image', property, configuration);\n var components = [type, position, image];\n\n if (property.value.length == 1 && property.value[0][1] == 'inherit') {\n type.value = position.value = image.value = [property.value[0]];\n return components;\n }\n\n var values = property.value.slice(0);\n var total = values.length;\n var index = 0;\n\n // `image` first...\n for (index = 0, total = values.length; index < total; index++) {\n if (validator.isUrl(values[index][1]) || values[index][1] == '0') {\n image.value = [values[index]];\n values.splice(index, 1);\n break;\n }\n }\n\n // ... then `position`\n for (index = 0, total = values.length; index < total; index++) {\n if (validator.isListStylePositionKeyword(values[index][1])) {\n position.value = [values[index]];\n values.splice(index, 1);\n break;\n }\n }\n\n // ... and what's left is a `type`\n if (values.length > 0 && (validator.isListStyleTypeKeyword(values[0][1]) || validator.isIdentifier(values[0][1]))) {\n type.value = [values[0]];\n }\n\n return components;\n}\n\nfunction transition(property, configuration, validator) {\n var prop = _wrapDefault(property.name + '-property', property, configuration);\n var duration = _wrapDefault(property.name + '-duration', property, configuration);\n var timing = _wrapDefault(property.name + '-timing-function', property, configuration);\n var delay = _wrapDefault(property.name + '-delay', property, configuration);\n var components = [prop, duration, timing, delay];\n var values = property.value;\n var value;\n var durationSet = false;\n var delaySet = false;\n var propSet = false;\n var timingSet = false;\n var i;\n var l;\n\n if (property.value.length == 1 && property.value[0][1] == 'inherit') {\n prop.value = duration.value = timing.value = delay.value = property.value;\n return components;\n }\n\n if (values.length > 1 && _anyIsInherit(values)) {\n throw new InvalidPropertyError('Invalid animation values at ' + formatPosition(values[0][2][0]) + '. Ignoring.');\n }\n\n for (i = 0, l = values.length; i < l; i++) {\n value = values[i];\n\n if (validator.isTime(value[1]) && !durationSet) {\n duration.value = [value];\n durationSet = true;\n } else if (validator.isTime(value[1]) && !delaySet) {\n delay.value = [value];\n delaySet = true;\n } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) {\n timing.value = [value];\n timingSet = true;\n } else if (validator.isIdentifier(value[1]) && !propSet) {\n prop.value = [value];\n propSet = true;\n } else {\n throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.');\n }\n }\n\n return components;\n}\n\nfunction widthStyleColor(property, configuration, validator) {\n var descriptor = configuration[property.name];\n var components = [\n _wrapDefault(descriptor.components[0], property, configuration),\n _wrapDefault(descriptor.components[1], property, configuration),\n _wrapDefault(descriptor.components[2], property, configuration)\n ];\n var color, style, width;\n\n for (var i = 0; i < 3; i++) {\n var component = components[i];\n\n if (component.name.indexOf('color') > 0) { color = component; } else if (component.name.indexOf('style') > 0) { style = component; } else { width = component; }\n }\n\n if ((property.value.length == 1 && property.value[0][1] == 'inherit')\n || (property.value.length == 3 && property.value[0][1] == 'inherit' && property.value[1][1] == 'inherit' && property.value[2][1] == 'inherit')) {\n color.value = style.value = width.value = [property.value[0]];\n return components;\n }\n\n var values = property.value.slice(0);\n var match, matches;\n\n // NOTE: usually users don't follow the required order of parts in this shorthand,\n // so we'll try to parse it caring as little about order as possible\n\n if (values.length > 0) {\n matches = values.filter(_widthFilter(validator));\n match = matches.length > 1 && (matches[0][1] == 'none' || matches[0][1] == 'auto') ? matches[1] : matches[0];\n if (match) {\n width.value = [match];\n values.splice(values.indexOf(match), 1);\n }\n }\n\n if (values.length > 0) {\n match = values.filter(_styleFilter(validator))[0];\n if (match) {\n style.value = [match];\n values.splice(values.indexOf(match), 1);\n }\n }\n\n if (values.length > 0) {\n match = values.filter(_colorFilter(validator))[0];\n if (match) {\n color.value = [match];\n values.splice(values.indexOf(match), 1);\n }\n }\n\n return components;\n}\n\nmodule.exports = {\n animation: animation,\n background: background,\n border: widthStyleColor,\n borderRadius: borderRadius,\n font: font,\n fourValues: fourValues,\n listStyle: listStyle,\n multiplex: multiplex,\n outline: widthStyleColor,\n transition: transition\n};\n","var VENDOR_PREFIX_PATTERN = /(?:^|\\W)(-\\w+-)/g;\n\nfunction unique(value) {\n var prefixes = [];\n var match;\n\n // eslint-disable-next-line no-cond-assign\n while ((match = VENDOR_PREFIX_PATTERN.exec(value)) !== null) {\n if (prefixes.indexOf(match[0]) == -1) {\n prefixes.push(match[0]);\n }\n }\n\n return prefixes;\n}\n\nfunction same(value1, value2) {\n return unique(value1).sort().join(',') == unique(value2).sort().join(',');\n}\n\nmodule.exports = {\n unique: unique,\n same: same\n};\n","var sameVendorPrefixes = require('../../vendor-prefixes').same;\n\nfunction understandable(validator, value1, value2, _position, isPaired) {\n if (!sameVendorPrefixes(value1, value2)) {\n return false;\n }\n\n if (isPaired && validator.isVariable(value1) !== validator.isVariable(value2)) {\n return false;\n }\n\n return true;\n}\n\nmodule.exports = understandable;\n","var understandable = require('./properties/understandable');\n\nfunction animationIterationCount(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true)\n && !(validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2))) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n }\n\n return validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2);\n}\n\nfunction animationName(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true)\n && !(validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2))) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n }\n\n return validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2);\n}\n\nfunction areSameFunction(validator, value1, value2) {\n if (!validator.isFunction(value1) || !validator.isFunction(value2)) {\n return false;\n }\n\n var function1Name = value1.substring(0, value1.indexOf('('));\n var function2Name = value2.substring(0, value2.indexOf('('));\n\n var function1Value = value1.substring(function1Name.length + 1, value1.length - 1);\n var function2Value = value2.substring(function2Name.length + 1, value2.length - 1);\n\n if (validator.isFunction(function1Value) || validator.isFunction(function2Value)) {\n return function1Name === function2Name && areSameFunction(validator, function1Value, function2Value);\n }\n return function1Name === function2Name;\n}\n\nfunction backgroundPosition(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true)\n && !(validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2))) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n } if (validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2)) {\n return true;\n }\n\n return unit(validator, value1, value2);\n}\n\nfunction backgroundSize(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true)\n && !(validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2))) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n } if (validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2)) {\n return true;\n }\n\n return unit(validator, value1, value2);\n}\n\nfunction color(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true) && !validator.isColor(value2)) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n } if (!validator.colorOpacity && (validator.isRgbColor(value1) || validator.isHslColor(value1))) {\n return false;\n } if (!validator.colorOpacity && (validator.isRgbColor(value2) || validator.isHslColor(value2))) {\n return false;\n } if (!validator.colorHexAlpha && (validator.isHexAlphaColor(value1) || validator.isHexAlphaColor(value2))) {\n return false;\n } if (validator.isColor(value1) && validator.isColor(value2)) {\n return true;\n }\n\n return sameFunctionOrValue(validator, value1, value2);\n}\n\nfunction components(overrideCheckers) {\n return function(validator, value1, value2, position) {\n return overrideCheckers[position](validator, value1, value2);\n };\n}\n\nfunction fontFamily(validator, value1, value2) {\n return understandable(validator, value1, value2, 0, true);\n}\n\nfunction image(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true) && !validator.isImage(value2)) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n } if (validator.isImage(value2)) {\n return true;\n } if (validator.isImage(value1)) {\n return false;\n }\n\n return sameFunctionOrValue(validator, value1, value2);\n}\n\nfunction keyword(propertyName) {\n return function(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true) && !validator.isKeyword(propertyName)(value2)) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n }\n\n return validator.isKeyword(propertyName)(value2);\n };\n}\n\nfunction keywordWithGlobal(propertyName) {\n return function(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true)\n && !(validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2))) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n }\n\n return validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2);\n };\n}\n\nfunction propertyName(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true) && !validator.isIdentifier(value2)) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n }\n\n return validator.isIdentifier(value2);\n}\n\nfunction sameFunctionOrValue(validator, value1, value2) {\n return areSameFunction(validator, value1, value2)\n ? true\n : value1 === value2;\n}\n\nfunction textShadow(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true)\n && !(validator.isUnit(value2)\n || validator.isColor(value2)\n || validator.isGlobal(value2))) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n }\n\n return validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2);\n}\n\nfunction time(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true) && !validator.isTime(value2)) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n } if (validator.isTime(value1) && !validator.isTime(value2)) {\n return false;\n } if (validator.isTime(value2)) {\n return true;\n } if (validator.isTime(value1)) {\n return false;\n } if (validator.isFunction(value1)\n && !validator.isPrefixed(value1)\n && validator.isFunction(value2)\n && !validator.isPrefixed(value2)) {\n return true;\n }\n\n return sameFunctionOrValue(validator, value1, value2);\n}\n\nfunction timingFunction(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true)\n && !(validator.isTimingFunction(value2) || validator.isGlobal(value2))) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n }\n\n return validator.isTimingFunction(value2) || validator.isGlobal(value2);\n}\n\nfunction unit(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true) && !validator.isUnit(value2)) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n } if (validator.isUnit(value1) && !validator.isUnit(value2)) {\n return false;\n } if (validator.isUnit(value2)) {\n return true;\n } if (validator.isUnit(value1)) {\n return false;\n } if (validator.isFunction(value1)\n && !validator.isPrefixed(value1)\n && validator.isFunction(value2)\n && !validator.isPrefixed(value2)) {\n return true;\n }\n\n return sameFunctionOrValue(validator, value1, value2);\n}\n\nfunction unitOrKeywordWithGlobal(propertyName) {\n var byKeyword = keywordWithGlobal(propertyName);\n\n return function(validator, value1, value2) {\n return unit(validator, value1, value2) || byKeyword(validator, value1, value2);\n };\n}\n\nfunction unitOrNumber(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true)\n && !(validator.isUnit(value2)\n || validator.isNumber(value2))) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n } if ((validator.isUnit(value1)\n || validator.isNumber(value1))\n && !(validator.isUnit(value2)\n || validator.isNumber(value2))) {\n return false;\n } if (validator.isUnit(value2) || validator.isNumber(value2)) {\n return true;\n } if (validator.isUnit(value1) || validator.isNumber(value1)) {\n return false;\n } if (validator.isFunction(value1)\n && !validator.isPrefixed(value1)\n && validator.isFunction(value2)\n && !validator.isPrefixed(value2)) {\n return true;\n }\n\n return sameFunctionOrValue(validator, value1, value2);\n}\n\nfunction zIndex(validator, value1, value2) {\n if (!understandable(validator, value1, value2, 0, true) && !validator.isZIndex(value2)) {\n return false;\n } if (validator.isVariable(value1) && validator.isVariable(value2)) {\n return true;\n }\n\n return validator.isZIndex(value2);\n}\n\nmodule.exports = {\n generic: {\n color: color,\n components: components,\n image: image,\n propertyName: propertyName,\n time: time,\n timingFunction: timingFunction,\n unit: unit,\n unitOrNumber: unitOrNumber\n },\n property: {\n animationDirection: keywordWithGlobal('animation-direction'),\n animationFillMode: keyword('animation-fill-mode'),\n animationIterationCount: animationIterationCount,\n animationName: animationName,\n animationPlayState: keywordWithGlobal('animation-play-state'),\n backgroundAttachment: keyword('background-attachment'),\n backgroundClip: keywordWithGlobal('background-clip'),\n backgroundOrigin: keyword('background-origin'),\n backgroundPosition: backgroundPosition,\n backgroundRepeat: keyword('background-repeat'),\n backgroundSize: backgroundSize,\n bottom: unitOrKeywordWithGlobal('bottom'),\n borderCollapse: keyword('border-collapse'),\n borderStyle: keywordWithGlobal('*-style'),\n clear: keywordWithGlobal('clear'),\n cursor: keywordWithGlobal('cursor'),\n display: keywordWithGlobal('display'),\n float: keywordWithGlobal('float'),\n left: unitOrKeywordWithGlobal('left'),\n fontFamily: fontFamily,\n fontStretch: keywordWithGlobal('font-stretch'),\n fontStyle: keywordWithGlobal('font-style'),\n fontVariant: keywordWithGlobal('font-variant'),\n fontWeight: keywordWithGlobal('font-weight'),\n listStyleType: keywordWithGlobal('list-style-type'),\n listStylePosition: keywordWithGlobal('list-style-position'),\n outlineStyle: keywordWithGlobal('*-style'),\n overflow: keywordWithGlobal('overflow'),\n position: keywordWithGlobal('position'),\n right: unitOrKeywordWithGlobal('right'),\n textAlign: keywordWithGlobal('text-align'),\n textDecoration: keywordWithGlobal('text-decoration'),\n textOverflow: keywordWithGlobal('text-overflow'),\n textShadow: textShadow,\n top: unitOrKeywordWithGlobal('top'),\n transform: sameFunctionOrValue,\n verticalAlign: unitOrKeywordWithGlobal('vertical-align'),\n visibility: keywordWithGlobal('visibility'),\n whiteSpace: keywordWithGlobal('white-space'),\n zIndex: zIndex\n }\n};\n","var wrapSingle = require('./wrap-for-optimizing').single;\n\nvar Token = require('../tokenizer/token');\n\nfunction deep(property) {\n var cloned = shallow(property);\n for (var i = property.components.length - 1; i >= 0; i--) {\n var component = shallow(property.components[i]);\n component.value = property.components[i].value.slice(0);\n cloned.components.unshift(component);\n }\n\n cloned.dirty = true;\n cloned.value = property.value.slice(0);\n\n return cloned;\n}\n\nfunction shallow(property) {\n var cloned = wrapSingle([\n Token.PROPERTY,\n [Token.PROPERTY_NAME, property.name]\n ]);\n cloned.important = property.important;\n cloned.hack = property.hack;\n cloned.unused = false;\n return cloned;\n}\n\nmodule.exports = {\n deep: deep,\n shallow: shallow\n};\n","var shallowClone = require('../clone').shallow;\n\nvar Token = require('../../tokenizer/token');\nvar Marker = require('../../tokenizer/marker');\n\nfunction isInheritOnly(values) {\n for (var i = 0, l = values.length; i < l; i++) {\n var value = values[i][1];\n\n if (value != 'inherit' && value != Marker.COMMA && value != Marker.FORWARD_SLASH) { return false; }\n }\n\n return true;\n}\n\nfunction background(property, configuration, lastInMultiplex) {\n var components = property.components;\n var restored = [];\n var needsOne, needsBoth;\n\n function restoreValue(component) {\n Array.prototype.unshift.apply(restored, component.value);\n }\n\n function isDefaultValue(component) {\n var descriptor = configuration[component.name];\n\n if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {\n return component.value[0][1] == descriptor.defaultValue[0]\n && (component.value[1]\n ? component.value[1][1] == descriptor.defaultValue[0]\n : true);\n } if (descriptor.doubleValues && descriptor.defaultValue.length != 1) {\n return component.value[0][1] == descriptor.defaultValue[0]\n && ((component.value[1] ? component.value[1][1] : component.value[0][1])\n == descriptor.defaultValue[1]);\n }\n return component.value[0][1] == descriptor.defaultValue;\n }\n\n for (var i = components.length - 1; i >= 0; i--) {\n var component = components[i];\n var isDefault = isDefaultValue(component);\n\n if (component.name == 'background-clip') {\n var originComponent = components[i - 1];\n var isOriginDefault = isDefaultValue(originComponent);\n\n needsOne = component.value[0][1] == originComponent.value[0][1];\n\n needsBoth = !needsOne && (\n (isOriginDefault && !isDefault)\n || (!isOriginDefault && !isDefault)\n || (!isOriginDefault && isDefault && component.value[0][1] != originComponent.value[0][1]));\n\n if (needsOne) {\n restoreValue(originComponent);\n } else if (needsBoth) {\n restoreValue(component);\n restoreValue(originComponent);\n }\n\n i--;\n } else if (component.name == 'background-size') {\n var positionComponent = components[i - 1];\n var isPositionDefault = isDefaultValue(positionComponent);\n\n needsOne = !isPositionDefault && isDefault;\n\n needsBoth = !needsOne\n && (isPositionDefault && !isDefault || !isPositionDefault && !isDefault);\n\n if (needsOne) {\n restoreValue(positionComponent);\n } else if (needsBoth) {\n restoreValue(component);\n restored.unshift([Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]);\n restoreValue(positionComponent);\n } else if (positionComponent.value.length == 1) {\n restoreValue(positionComponent);\n }\n\n i--;\n } else {\n if (isDefault || configuration[component.name].multiplexLastOnly && !lastInMultiplex) { continue; }\n\n restoreValue(component);\n }\n }\n\n if (restored.length === 0 && property.value.length == 1 && property.value[0][1] == '0') { restored.push(property.value[0]); }\n\n if (restored.length === 0) { restored.push([Token.PROPERTY_VALUE, configuration[property.name].defaultValue]); }\n\n if (isInheritOnly(restored)) { return [restored[0]]; }\n\n return restored;\n}\n\nfunction borderRadius(property) {\n if (property.multiplex) {\n var horizontal = shallowClone(property);\n var vertical = shallowClone(property);\n\n for (var i = 0; i < 4; i++) {\n var component = property.components[i];\n\n var horizontalComponent = shallowClone(property);\n horizontalComponent.value = [component.value[0]];\n horizontal.components.push(horizontalComponent);\n\n var verticalComponent = shallowClone(property);\n // FIXME: only shorthand compactor (see breakup#borderRadius) knows that border radius\n // longhands have two values, whereas tokenizer does not care about populating 2nd value\n // if it's missing, hence this fallback\n verticalComponent.value = [component.value[1] || component.value[0]];\n vertical.components.push(verticalComponent);\n }\n\n var horizontalValues = fourValues(horizontal);\n var verticalValues = fourValues(vertical);\n\n if (horizontalValues.length == verticalValues.length\n && horizontalValues[0][1] == verticalValues[0][1]\n && (horizontalValues.length > 1 ? horizontalValues[1][1] == verticalValues[1][1] : true)\n && (horizontalValues.length > 2 ? horizontalValues[2][1] == verticalValues[2][1] : true)\n && (horizontalValues.length > 3 ? horizontalValues[3][1] == verticalValues[3][1] : true)) {\n return horizontalValues;\n }\n return horizontalValues.concat([[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]).concat(verticalValues);\n }\n return fourValues(property);\n}\n\nfunction font(property, configuration) {\n var components = property.components;\n var restored = [];\n var component;\n var componentIndex = 0;\n var fontFamilyIndex = 0;\n\n if (property.value[0][1].indexOf(Marker.INTERNAL) === 0) {\n property.value[0][1] = property.value[0][1].substring(Marker.INTERNAL.length);\n return property.value;\n }\n\n // first four components are optional\n while (componentIndex < 4) {\n component = components[componentIndex];\n\n if (component.value[0][1] != configuration[component.name].defaultValue) {\n Array.prototype.push.apply(restored, component.value);\n }\n\n componentIndex++;\n }\n\n // then comes font-size\n Array.prototype.push.apply(restored, components[componentIndex].value);\n componentIndex++;\n\n // then may come line-height\n if (components[componentIndex].value[0][1] != configuration[components[componentIndex].name].defaultValue) {\n Array.prototype.push.apply(restored, [[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]);\n Array.prototype.push.apply(restored, components[componentIndex].value);\n }\n\n componentIndex++;\n\n // then comes font-family\n while (components[componentIndex].value[fontFamilyIndex]) {\n restored.push(components[componentIndex].value[fontFamilyIndex]);\n\n if (components[componentIndex].value[fontFamilyIndex + 1]) {\n restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);\n }\n\n fontFamilyIndex++;\n }\n\n if (isInheritOnly(restored)) {\n return [restored[0]];\n }\n\n return restored;\n}\n\nfunction fourValues(property) {\n var components = property.components;\n var value1 = components[0].value[0];\n var value2 = components[1].value[0];\n var value3 = components[2].value[0];\n var value4 = components[3].value[0];\n\n if (value1[1] == value2[1] && value1[1] == value3[1] && value1[1] == value4[1]) {\n return [value1];\n } if (value1[1] == value3[1] && value2[1] == value4[1]) {\n return [value1, value2];\n } if (value2[1] == value4[1]) {\n return [value1, value2, value3];\n }\n return [value1, value2, value3, value4];\n}\n\nfunction multiplex(restoreWith) {\n return function(property, configuration) {\n if (!property.multiplex) { return restoreWith(property, configuration, true); }\n\n var multiplexSize = 0;\n var restored = [];\n var componentMultiplexSoFar = {};\n var i, l;\n\n // At this point we don't know what's the multiplex size, e.g. how many background layers are there\n for (i = 0, l = property.components[0].value.length; i < l; i++) {\n if (property.components[0].value[i][1] == Marker.COMMA) { multiplexSize++; }\n }\n\n for (i = 0; i <= multiplexSize; i++) {\n var _property = shallowClone(property);\n\n // We split multiplex into parts and restore them one by one\n for (var j = 0, m = property.components.length; j < m; j++) {\n var componentToClone = property.components[j];\n var _component = shallowClone(componentToClone);\n _property.components.push(_component);\n\n // The trick is some properties has more than one value, so we iterate over values looking for\n // a multiplex separator - a comma\n for (var k = componentMultiplexSoFar[_component.name] || 0, n = componentToClone.value.length; k < n; k++) {\n if (componentToClone.value[k][1] == Marker.COMMA) {\n componentMultiplexSoFar[_component.name] = k + 1;\n break;\n }\n\n _component.value.push(componentToClone.value[k]);\n }\n }\n\n // No we can restore shorthand value\n var lastInMultiplex = i == multiplexSize;\n var _restored = restoreWith(_property, configuration, lastInMultiplex);\n Array.prototype.push.apply(restored, _restored);\n\n if (i < multiplexSize) { restored.push([Token.PROPERTY_VALUE, Marker.COMMA]); }\n }\n\n return restored;\n };\n}\n\nfunction withoutDefaults(property, configuration) {\n var components = property.components;\n var restored = [];\n\n for (var i = components.length - 1; i >= 0; i--) {\n var component = components[i];\n var descriptor = configuration[component.name];\n\n if (component.value[0][1] != descriptor.defaultValue || ('keepUnlessDefault' in descriptor) && !isDefault(components, configuration, descriptor.keepUnlessDefault)) {\n restored.unshift(component.value[0]);\n }\n }\n\n if (restored.length === 0) { restored.push([Token.PROPERTY_VALUE, configuration[property.name].defaultValue]); }\n\n if (isInheritOnly(restored)) { return [restored[0]]; }\n\n return restored;\n}\n\nfunction isDefault(components, configuration, propertyName) {\n var component;\n var i, l;\n\n for (i = 0, l = components.length; i < l; i++) {\n component = components[i];\n\n if (component.name == propertyName && component.value[0][1] == configuration[propertyName].defaultValue) {\n return true;\n }\n }\n\n return false;\n}\n\nmodule.exports = {\n background: background,\n borderRadius: borderRadius,\n font: font,\n fourValues: fourValues,\n multiplex: multiplex,\n withoutDefaults: withoutDefaults\n};\n","var override = require('../utils/override');\n\nvar INTEGER_PATTERN = /^\\d+$/;\n\nvar ALL_UNITS = ['*', 'all'];\nvar DEFAULT_PRECISION = 'off'; // all precision changes are disabled\nvar DIRECTIVES_SEPARATOR = ','; // e.g. *=5,px=3\nvar DIRECTIVE_VALUE_SEPARATOR = '='; // e.g. *=5\n\nfunction roundingPrecisionFrom(source) {\n return override(defaults(DEFAULT_PRECISION), buildPrecisionFrom(source));\n}\n\nfunction defaults(value) {\n return {\n ch: value,\n cm: value,\n em: value,\n ex: value,\n in: value,\n mm: value,\n pc: value,\n pt: value,\n px: value,\n q: value,\n rem: value,\n vh: value,\n vmax: value,\n vmin: value,\n vw: value,\n '%': value\n };\n}\n\nfunction buildPrecisionFrom(source) {\n if (source === null || source === undefined) {\n return {};\n }\n\n if (typeof source == 'boolean') {\n return {};\n }\n\n if (typeof source == 'number' && source == -1) {\n return defaults(DEFAULT_PRECISION);\n }\n\n if (typeof source == 'number') {\n return defaults(source);\n }\n\n if (typeof source == 'string' && INTEGER_PATTERN.test(source)) {\n return defaults(parseInt(source));\n }\n\n if (typeof source == 'string' && source == DEFAULT_PRECISION) {\n return defaults(DEFAULT_PRECISION);\n }\n\n if (typeof source == 'object') {\n return source;\n }\n\n return source\n .split(DIRECTIVES_SEPARATOR)\n .reduce(function(accumulator, directive) {\n var directiveParts = directive.split(DIRECTIVE_VALUE_SEPARATOR);\n var name = directiveParts[0];\n var value = parseInt(directiveParts[1]);\n\n if (Number.isNaN(value) || value == -1) {\n value = DEFAULT_PRECISION;\n }\n\n if (ALL_UNITS.indexOf(name) > -1) {\n accumulator = override(accumulator, defaults(value));\n } else {\n accumulator[name] = value;\n }\n\n return accumulator;\n }, {});\n}\n\nmodule.exports = {\n DEFAULT: DEFAULT_PRECISION,\n roundingPrecisionFrom: roundingPrecisionFrom\n};\n","var roundingPrecisionFrom = require('./rounding-precision').roundingPrecisionFrom;\n\nvar override = require('../utils/override');\n\nvar OptimizationLevel = {\n Zero: '0',\n One: '1',\n Two: '2'\n};\n\nvar DEFAULTS = {};\n\nDEFAULTS[OptimizationLevel.Zero] = {};\nDEFAULTS[OptimizationLevel.One] = {\n cleanupCharsets: true,\n normalizeUrls: true,\n optimizeBackground: true,\n optimizeBorderRadius: true,\n optimizeFilter: true,\n optimizeFontWeight: true,\n optimizeOutline: true,\n removeEmpty: true,\n removeNegativePaddings: true,\n removeQuotes: true,\n removeWhitespace: true,\n replaceMultipleZeros: true,\n replaceTimeUnits: true,\n replaceZeroUnits: true,\n roundingPrecision: roundingPrecisionFrom(undefined),\n selectorsSortingMethod: 'standard',\n specialComments: 'all',\n tidyAtRules: true,\n tidyBlockScopes: true,\n tidySelectors: true,\n variableValueOptimizers: []\n};\nDEFAULTS[OptimizationLevel.Two] = {\n mergeAdjacentRules: true,\n mergeIntoShorthands: true,\n mergeMedia: true,\n mergeNonAdjacentRules: true,\n mergeSemantically: false,\n overrideProperties: true,\n removeEmpty: true,\n reduceNonAdjacentRules: true,\n removeDuplicateFontRules: true,\n removeDuplicateMediaBlocks: true,\n removeDuplicateRules: true,\n removeUnusedAtRules: false,\n restructureRules: false,\n skipProperties: []\n};\n\nvar ALL_KEYWORD_1 = '*';\nvar ALL_KEYWORD_2 = 'all';\nvar FALSE_KEYWORD_1 = 'false';\nvar FALSE_KEYWORD_2 = 'off';\nvar TRUE_KEYWORD_1 = 'true';\nvar TRUE_KEYWORD_2 = 'on';\n\nvar LIST_VALUE_SEPARATOR = ',';\nvar OPTION_SEPARATOR = ';';\nvar OPTION_VALUE_SEPARATOR = ':';\n\nfunction optimizationLevelFrom(source) {\n var level = override(DEFAULTS, {});\n var Zero = OptimizationLevel.Zero;\n var One = OptimizationLevel.One;\n var Two = OptimizationLevel.Two;\n\n if (undefined === source) {\n delete level[Two];\n return level;\n }\n\n if (typeof source == 'string') {\n source = parseInt(source);\n }\n\n if (typeof source == 'number' && source === parseInt(Two)) {\n return level;\n }\n\n if (typeof source == 'number' && source === parseInt(One)) {\n delete level[Two];\n return level;\n }\n\n if (typeof source == 'number' && source === parseInt(Zero)) {\n delete level[Two];\n delete level[One];\n return level;\n }\n\n if (typeof source == 'object') {\n source = covertValuesToHashes(source);\n }\n\n if (One in source && 'roundingPrecision' in source[One]) {\n source[One].roundingPrecision = roundingPrecisionFrom(source[One].roundingPrecision);\n }\n\n if (Two in source && 'skipProperties' in source[Two] && typeof (source[Two].skipProperties) == 'string') {\n source[Two].skipProperties = source[Two].skipProperties.split(LIST_VALUE_SEPARATOR);\n }\n\n if (Zero in source || One in source || Two in source) {\n level[Zero] = override(level[Zero], source[Zero]);\n }\n\n if (One in source && ALL_KEYWORD_1 in source[One]) {\n level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1])));\n delete source[One][ALL_KEYWORD_1];\n }\n\n if (One in source && ALL_KEYWORD_2 in source[One]) {\n level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2])));\n delete source[One][ALL_KEYWORD_2];\n }\n\n if (One in source || Two in source) {\n level[One] = override(level[One], source[One]);\n } else {\n delete level[One];\n }\n\n if (Two in source && ALL_KEYWORD_1 in source[Two]) {\n level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_1])));\n delete source[Two][ALL_KEYWORD_1];\n }\n\n if (Two in source && ALL_KEYWORD_2 in source[Two]) {\n level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_2])));\n delete source[Two][ALL_KEYWORD_2];\n }\n\n if (Two in source) {\n level[Two] = override(level[Two], source[Two]);\n } else {\n delete level[Two];\n }\n\n return level;\n}\n\nfunction defaults(level, value) {\n var options = override(DEFAULTS[level], {});\n var key;\n\n for (key in options) {\n if (typeof options[key] == 'boolean') {\n options[key] = value;\n }\n }\n\n return options;\n}\n\nfunction normalizeValue(value) {\n switch (value) {\n case FALSE_KEYWORD_1:\n case FALSE_KEYWORD_2:\n return false;\n case TRUE_KEYWORD_1:\n case TRUE_KEYWORD_2:\n return true;\n default:\n return value;\n }\n}\n\nfunction covertValuesToHashes(source) {\n var clonedSource = override(source, {});\n var level;\n var i;\n\n for (i = 0; i <= 2; i++) {\n level = '' + i;\n\n if (level in clonedSource && (clonedSource[level] === undefined || clonedSource[level] === false)) {\n delete clonedSource[level];\n }\n\n if (level in clonedSource && clonedSource[level] === true) {\n clonedSource[level] = {};\n }\n\n if (level in clonedSource && typeof clonedSource[level] == 'string') {\n clonedSource[level] = covertToHash(clonedSource[level], level);\n }\n }\n\n return clonedSource;\n}\n\nfunction covertToHash(asString, level) {\n return asString\n .split(OPTION_SEPARATOR)\n .reduce(function(accumulator, directive) {\n var parts = directive.split(OPTION_VALUE_SEPARATOR);\n var name = parts[0];\n var value = parts[1];\n var normalizedValue = normalizeValue(value);\n\n if (ALL_KEYWORD_1 == name || ALL_KEYWORD_2 == name) {\n accumulator = override(accumulator, defaults(level, normalizedValue));\n } else {\n accumulator[name] = normalizedValue;\n }\n\n return accumulator;\n }, {});\n}\n\nmodule.exports = {\n OptimizationLevel: OptimizationLevel,\n optimizationLevelFrom: optimizationLevelFrom\n};\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar plugin = {\n level1: {\n property: function background(_rule, property, options) {\n var values = property.value;\n\n if (!options.level[OptimizationLevel.One].optimizeBackground) {\n return;\n }\n\n if (values.length == 1 && values[0][1] == 'none') {\n values[0][1] = '0 0';\n }\n\n if (values.length == 1 && values[0][1] == 'transparent') {\n values[0][1] = '0 0';\n }\n }\n }\n};\n\nmodule.exports = plugin;\n","var plugin = {\n level1: {\n property: function boxShadow(_rule, property) {\n var values = property.value;\n\n // remove multiple zeros\n if (values.length == 4 && values[0][1] === '0' && values[1][1] === '0' && values[2][1] === '0' && values[3][1] === '0') {\n property.value.splice(2);\n property.dirty = true;\n }\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar plugin = {\n level1: {\n property: function borderRadius(_rule, property, options) {\n var values = property.value;\n\n if (!options.level[OptimizationLevel.One].optimizeBorderRadius) {\n return;\n }\n\n if (values.length == 3 && values[1][1] == '/' && values[0][1] == values[2][1]) {\n property.value.splice(1);\n property.dirty = true;\n } else if (values.length == 5 && values[2][1] == '/' && values[0][1] == values[3][1] && values[1][1] == values[4][1]) {\n property.value.splice(2);\n property.dirty = true;\n } else if (values.length == 7 && values[3][1] == '/' && values[0][1] == values[4][1] && values[1][1] == values[5][1] && values[2][1] == values[6][1]) {\n property.value.splice(3);\n property.dirty = true;\n } else if (values.length == 9 && values[4][1] == '/' && values[0][1] == values[5][1] && values[1][1] == values[6][1] && values[2][1] == values[7][1] && values[3][1] == values[8][1]) {\n property.value.splice(4);\n property.dirty = true;\n }\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar ALPHA_OR_CHROMA_FILTER_PATTERN = /progid:DXImageTransform\\.Microsoft\\.(Alpha|Chroma)(\\W)/;\nvar NO_SPACE_AFTER_COMMA_PATTERN = /,(\\S)/g;\nvar WHITESPACE_AROUND_EQUALS_PATTERN = / ?= ?/g;\n\nvar plugin = {\n level1: {\n property: function filter(_rule, property, options) {\n if (!options.compatibility.properties.ieFilters) {\n return;\n }\n\n if (!options.level[OptimizationLevel.One].optimizeFilter) {\n return;\n }\n\n if (property.value.length == 1) {\n property.value[0][1] = property.value[0][1].replace(\n ALPHA_OR_CHROMA_FILTER_PATTERN,\n function(match, filter, suffix) {\n return filter.toLowerCase() + suffix;\n }\n );\n }\n\n property.value[0][1] = property.value[0][1]\n .replace(NO_SPACE_AFTER_COMMA_PATTERN, ', $1')\n .replace(WHITESPACE_AROUND_EQUALS_PATTERN, '=');\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar plugin = {\n level1: {\n property: function fontWeight(_rule, property, options) {\n var value = property.value[0][1];\n\n if (!options.level[OptimizationLevel.One].optimizeFontWeight) {\n return;\n }\n\n if (value == 'normal') {\n value = '400';\n } else if (value == 'bold') {\n value = '700';\n }\n\n property.value[0][1] = value;\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar plugin = {\n level1: {\n property: function margin(_rule, property, options) {\n var values = property.value;\n\n if (!options.level[OptimizationLevel.One].replaceMultipleZeros) {\n return;\n }\n\n // remove multiple zeros\n if (values.length == 4 && values[0][1] === '0' && values[1][1] === '0' && values[2][1] === '0' && values[3][1] === '0') {\n property.value.splice(1);\n property.dirty = true;\n }\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar plugin = {\n level1: {\n property: function outline(_rule, property, options) {\n var values = property.value;\n\n if (!options.level[OptimizationLevel.One].optimizeOutline) {\n return;\n }\n\n if (values.length == 1 && values[0][1] == 'none') {\n values[0][1] = '0';\n }\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nfunction isNegative(value) {\n return value && value[1][0] == '-' && parseFloat(value[1]) < 0;\n}\n\nvar plugin = {\n level1: {\n property: function padding(_rule, property, options) {\n var values = property.value;\n\n // remove multiple zeros\n if (values.length == 4 && values[0][1] === '0' && values[1][1] === '0' && values[2][1] === '0' && values[3][1] === '0') {\n property.value.splice(1);\n property.dirty = true;\n }\n\n // remove negative paddings\n if (options.level[OptimizationLevel.One].removeNegativePaddings\n && (\n isNegative(property.value[0])\n || isNegative(property.value[1])\n || isNegative(property.value[2])\n || isNegative(property.value[3])\n )) {\n property.unused = true;\n }\n }\n }\n};\n\nmodule.exports = plugin;\n","module.exports = {\n background: require('./property-optimizers/background').level1.property,\n boxShadow: require('./property-optimizers/box-shadow').level1.property,\n borderRadius: require('./property-optimizers/border-radius').level1.property,\n filter: require('./property-optimizers/filter').level1.property,\n fontWeight: require('./property-optimizers/font-weight').level1.property,\n margin: require('./property-optimizers/margin').level1.property,\n outline: require('./property-optimizers/outline').level1.property,\n padding: require('./property-optimizers/padding').level1.property\n};\n","var COLORS = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#0ff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000',\n blanchedalmond: '#ffebcd',\n blue: '#00f',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#0ff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#f0f',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#0f0',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#f00',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#fff',\n whitesmoke: '#f5f5f5',\n yellow: '#ff0',\n yellowgreen: '#9acd32'\n};\n\nvar toHex = {};\nvar toName = {};\n\nfor (var name in COLORS) {\n var hex = COLORS[name];\n\n if (name.length < hex.length) {\n toName[hex] = name;\n } else {\n toHex[name] = hex;\n }\n}\n\nvar toHexPattern = new RegExp('(^| |,|\\\\))(' + Object.keys(toHex).join('|') + ')( |,|\\\\)|$)', 'ig');\nvar toNamePattern = new RegExp('(' + Object.keys(toName).join('|') + ')([^a-f0-9]|$)', 'ig');\n\nfunction hexConverter(match, prefix, colorValue, suffix) {\n return prefix + toHex[colorValue.toLowerCase()] + suffix;\n}\n\nfunction nameConverter(match, colorValue, suffix) {\n return toName[colorValue.toLowerCase()] + suffix;\n}\n\nfunction shortenHex(value) {\n var hasHex = value.indexOf('#') > -1;\n var shortened = value.replace(toHexPattern, hexConverter);\n\n if (shortened != value) {\n shortened = shortened.replace(toHexPattern, hexConverter);\n }\n\n return hasHex\n ? shortened.replace(toNamePattern, nameConverter)\n : shortened;\n}\n\nmodule.exports = shortenHex;\n","// HSL to RGB converter. Both methods adapted from:\n// http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n // normalize hue orientation b/w 0 and 360 degrees\n h %= 360;\n if (h < 0) { h += 360; }\n h = ~~h / 360;\n\n if (s < 0) { s = 0; } else if (s > 100) { s = 100; }\n s = ~~s / 100;\n\n if (l < 0) { l = 0; } else if (l > 100) { l = 100; }\n l = ~~l / 100;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5\n ? l * (1 + s)\n : l + s - l * s;\n var p = 2 * l - q;\n r = hueToRgb(p, q, h + 1 / 3);\n g = hueToRgb(p, q, h);\n b = hueToRgb(p, q, h - 1 / 3);\n }\n\n return [~~(r * 255), ~~(g * 255), ~~(b * 255)];\n}\n\nfunction hueToRgb(p, q, t) {\n if (t < 0) { t += 1; }\n if (t > 1) { t -= 1; }\n if (t < 1 / 6) { return p + (q - p) * 6 * t; }\n if (t < 1 / 2) { return q; }\n if (t < 2 / 3) { return p + (q - p) * (2 / 3 - t) * 6; }\n return p;\n}\n\nfunction shortenHsl(hue, saturation, lightness) {\n var asRgb = hslToRgb(hue, saturation, lightness);\n var redAsHex = asRgb[0].toString(16);\n var greenAsHex = asRgb[1].toString(16);\n var blueAsHex = asRgb[2].toString(16);\n\n return '#'\n + ((redAsHex.length == 1 ? '0' : '') + redAsHex)\n + ((greenAsHex.length == 1 ? '0' : '') + greenAsHex)\n + ((blueAsHex.length == 1 ? '0' : '') + blueAsHex);\n}\n\nmodule.exports = shortenHsl;\n","function shortenRgb(red, green, blue) {\n var normalizedRed = Math.max(0, Math.min(parseInt(red), 255));\n var normalizedGreen = Math.max(0, Math.min(parseInt(green), 255));\n var normalizedBlue = Math.max(0, Math.min(parseInt(blue), 255));\n\n // Credit: Asen http://jsbin.com/UPUmaGOc/2/edit?js,console\n return '#' + ('00000' + (normalizedRed << 16 | normalizedGreen << 8 | normalizedBlue).toString(16)).slice(-6);\n}\n\nmodule.exports = shortenRgb;\n","var Marker = require('../tokenizer/marker');\n\nfunction is(value, separator, isSeparatorRegex) {\n return isSeparatorRegex\n ? separator.test(value)\n : value === separator;\n}\n\nfunction split(value, separator) {\n var openLevel = Marker.OPEN_ROUND_BRACKET;\n var closeLevel = Marker.CLOSE_ROUND_BRACKET;\n var level = 0;\n var cursor = 0;\n var lastStart = 0;\n var lastValue;\n var lastCharacter;\n var len = value.length;\n var parts = [];\n var isSeparatorRegex = typeof (separator) == 'object' && 'exec' in separator;\n\n if (!isSeparatorRegex && value.indexOf(separator) == -1) {\n return [value];\n }\n\n if (value.indexOf(openLevel) == -1) {\n return value.split(separator);\n }\n\n while (cursor < len) {\n if (value[cursor] == openLevel) {\n level++;\n } else if (value[cursor] == closeLevel) {\n level--;\n }\n\n if (level === 0 && cursor > 0 && cursor + 1 < len && is(value[cursor], separator, isSeparatorRegex)) {\n parts.push(value.substring(lastStart, cursor));\n\n if (isSeparatorRegex && separator.exec(value[cursor]).length > 1) {\n parts.push(value[cursor]);\n }\n\n lastStart = cursor + 1;\n }\n\n cursor++;\n }\n\n if (lastStart < cursor + 1) {\n lastValue = value.substring(lastStart);\n lastCharacter = lastValue[lastValue.length - 1];\n if (is(lastCharacter, separator, isSeparatorRegex)) {\n lastValue = lastValue.substring(0, lastValue.length - 1);\n }\n\n parts.push(lastValue);\n }\n\n return parts;\n}\n\nmodule.exports = split;\n","var shortenHex = require('./color/shorten-hex');\nvar shortenHsl = require('./color/shorten-hsl');\nvar shortenRgb = require('./color/shorten-rgb');\n\nvar split = require('../../../utils/split');\n\nvar ANY_COLOR_FUNCTION_PATTERN = /(rgb|rgba|hsl|hsla)\\(([^()]+)\\)/gi;\nvar COLOR_PREFIX_PATTERN = /#|rgb|hsl/gi;\nvar HEX_LONG_PATTERN = /(^|[^='\"])#([0-9a-f]{6})/gi;\nvar HEX_SHORT_PATTERN = /(^|[^='\"])#([0-9a-f]{3})/gi;\nvar HEX_VALUE_PATTERN = /[0-9a-f]/i;\nvar HSL_PATTERN = /hsl\\((-?\\d+),(-?\\d+)%?,(-?\\d+)%?\\)/gi;\nvar RGBA_HSLA_PATTERN = /(rgb|hsl)a?\\((-?\\d+),(-?\\d+%?),(-?\\d+%?),(0*[1-9]+[0-9]*(\\.?\\d*)?)\\)/gi;\nvar RGB_PATTERN = /rgb\\((-?\\d+),(-?\\d+),(-?\\d+)\\)/gi;\nvar TRANSPARENT_FUNCTION_PATTERN = /(?:rgba|hsla)\\(0,0%?,0%?,0\\)/g;\n\nvar plugin = {\n level1: {\n value: function color(name, value, options) {\n if (!options.compatibility.properties.colors) {\n return value;\n }\n\n if (!value.match(COLOR_PREFIX_PATTERN)) {\n return shortenHex(value);\n }\n\n value = value\n .replace(RGBA_HSLA_PATTERN, function(match, colorFn, p1, p2, p3, alpha) {\n return (parseInt(alpha) >= 1 ? colorFn + '(' + [p1, p2, p3].join(',') + ')' : match);\n })\n .replace(RGB_PATTERN, function(match, red, green, blue) {\n return shortenRgb(red, green, blue);\n })\n .replace(HSL_PATTERN, function(match, hue, saturation, lightness) {\n return shortenHsl(hue, saturation, lightness);\n })\n .replace(HEX_LONG_PATTERN, function(match, prefix, color, at, inputValue) {\n var suffix = inputValue[at + match.length];\n\n if (suffix && HEX_VALUE_PATTERN.test(suffix)) {\n return match;\n } if (color[0] == color[1] && color[2] == color[3] && color[4] == color[5]) {\n return (prefix + '#' + color[0] + color[2] + color[4]).toLowerCase();\n }\n return (prefix + '#' + color).toLowerCase();\n })\n .replace(HEX_SHORT_PATTERN, function(match, prefix, color) {\n return prefix + '#' + color.toLowerCase();\n })\n .replace(ANY_COLOR_FUNCTION_PATTERN, function(match, colorFunction, colorDef) {\n var tokens = colorDef.split(',');\n var colorFnLowercase = colorFunction && colorFunction.toLowerCase();\n var applies = (colorFnLowercase == 'hsl' && tokens.length == 3)\n || (colorFnLowercase == 'hsla' && tokens.length == 4)\n || (colorFnLowercase == 'rgb' && tokens.length === 3 && colorDef.indexOf('%') > 0)\n || (colorFnLowercase == 'rgba' && tokens.length == 4 && tokens[0].indexOf('%') > 0);\n\n if (!applies) {\n return match;\n }\n\n if (tokens[1].indexOf('%') == -1) {\n tokens[1] += '%';\n }\n\n if (tokens[2].indexOf('%') == -1) {\n tokens[2] += '%';\n }\n\n return colorFunction + '(' + tokens.join(',') + ')';\n });\n\n if (options.compatibility.colors.opacity && name.indexOf('background') == -1) {\n value = value.replace(TRANSPARENT_FUNCTION_PATTERN, function(match) {\n if (split(value, ',').pop().indexOf('gradient(') > -1) {\n return match;\n }\n\n return 'transparent';\n });\n }\n\n return shortenHex(value);\n }\n }\n};\n\nmodule.exports = plugin;\n","var ZERO_DEG_PATTERN = /\\(0deg\\)/g;\n\nvar plugin = {\n level1: {\n value: function degrees(_name, value, options) {\n if (!options.compatibility.properties.zeroUnits) {\n return value;\n }\n\n if (value.indexOf('0deg') == -1) {\n return value;\n }\n\n return value.replace(ZERO_DEG_PATTERN, '(0)');\n }\n }\n};\n\nmodule.exports = plugin;\n","var URL_PREFIX_PATTERN = /^url\\(/i;\n\nfunction startsAsUrl(value) {\n return URL_PREFIX_PATTERN.test(value);\n}\n\nmodule.exports = startsAsUrl;\n","var split = require('../../../utils/split');\nvar startsAsUrl = require('./starts-as-url');\n\nvar OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar EXPRESSION_PATTERN = /^expression\\(.*\\)$/;\nvar ANY_FUNCTION_PATTERN = /^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\\((.+)\\)$/;\nvar TOKEN_SEPARATOR_PATTERN = /([\\s,/])/;\n\nvar DOT_ZERO_PATTERN = /(^|\\D)\\.0+(\\D|$)/g;\nvar FRACTION_PATTERN = /\\.([1-9]*)0+(\\D|$)/g;\nvar LEADING_ZERO_FRACTION_PATTERN = /(^|\\D)0\\.(\\d)/g;\nvar MINUS_ZERO_FRACTION_PATTERN = /([^\\w\\d-]|^)-0([^.]|$)/g;\nvar ZERO_PREFIXED_UNIT_PATTERN = /(^|\\s)0+([1-9])/g;\n\nfunction optimizeRecursively(value) {\n var functionTokens;\n var tokens;\n\n if (startsAsUrl(value)) {\n return value;\n }\n\n if (EXPRESSION_PATTERN.test(value)) {\n return value;\n }\n\n functionTokens = ANY_FUNCTION_PATTERN.exec(value);\n\n if (!functionTokens) {\n return optimizeFractions(value);\n }\n\n tokens = split(functionTokens[2], TOKEN_SEPARATOR_PATTERN)\n .map(function(token) { return optimizeRecursively(token); });\n\n return functionTokens[1] + '(' + tokens.join('') + ')';\n}\n\nfunction optimizeFractions(value) {\n if (value.indexOf('0') == -1) {\n return value;\n }\n\n if (value.indexOf('-') > -1) {\n value = value\n .replace(MINUS_ZERO_FRACTION_PATTERN, '$10$2')\n .replace(MINUS_ZERO_FRACTION_PATTERN, '$10$2');\n }\n\n return value\n .replace(ZERO_PREFIXED_UNIT_PATTERN, '$1$2')\n .replace(DOT_ZERO_PATTERN, '$10$2')\n .replace(FRACTION_PATTERN, function(match, nonZeroPart, suffix) {\n return (nonZeroPart.length > 0 ? '.' : '') + nonZeroPart + suffix;\n })\n .replace(LEADING_ZERO_FRACTION_PATTERN, '$1.$2');\n}\n\nvar plugin = {\n level1: {\n value: function fraction(name, value, options) {\n if (!options.level[OptimizationLevel.One].replaceZeroUnits) {\n return value;\n }\n\n return optimizeRecursively(value);\n }\n }\n};\n\nmodule.exports = plugin;\n","var plugin = {\n level1: {\n value: function precision(_name, value, options) {\n if (!options.precision.enabled || value.indexOf('.') === -1) {\n return value;\n }\n\n return value\n .replace(options.precision.decimalPointMatcher, '$1$2$3')\n .replace(options.precision.zeroMatcher, function(match, integerPart, fractionPart, unit) {\n var multiplier = options.precision.units[unit].multiplier;\n var parsedInteger = parseInt(integerPart);\n var integer = Number.isNaN(parsedInteger) ? 0 : parsedInteger;\n var fraction = parseFloat(fractionPart);\n\n return Math.round((integer + fraction) * multiplier) / multiplier + unit;\n });\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar LOCAL_PREFIX_PATTERN = /^local\\(/i;\nvar QUOTED_PATTERN = /^('.*'|\".*\")$/;\nvar QUOTED_BUT_SAFE_PATTERN = /^['\"][a-zA-Z][a-zA-Z\\d\\-_]+['\"]$/;\n// eslint-disable-next-line max-len\nvar GENERIC_FONT_FAMILY_PATTERN = /^['\"](?:cursive|default|emoji|fangsong|fantasy|inherit|initial|math|monospace|revert|revert-layer|sans-serif|serif|system-ui|ui-monospace|ui-rounded|ui-sans-serif|ui-serif|unset)['\"]$/;\n\nvar plugin = {\n level1: {\n value: function textQuotes(name, value, options) {\n if ((name == 'font-family' || name == 'font') && GENERIC_FONT_FAMILY_PATTERN.test(value)) {\n return value;\n }\n\n if (!options.level[OptimizationLevel.One].removeQuotes) {\n return value;\n }\n\n if (!QUOTED_PATTERN.test(value) && !LOCAL_PREFIX_PATTERN.test(value)) {\n return value;\n }\n\n return QUOTED_BUT_SAFE_PATTERN.test(value)\n ? value.substring(1, value.length - 1)\n : value;\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar TIME_VALUE = /^(-?[\\d.]+)(m?s)$/;\n\nvar plugin = {\n level1: {\n value: function time(name, value, options) {\n if (!options.level[OptimizationLevel.One].replaceTimeUnits) {\n return value;\n }\n\n if (!TIME_VALUE.test(value)) {\n return value;\n }\n\n return value.replace(TIME_VALUE, function(match, val, unit) {\n var newValue;\n\n if (unit == 'ms') {\n newValue = parseInt(val) / 1000 + 's';\n } else if (unit == 's') {\n newValue = parseFloat(val) * 1000 + 'ms';\n }\n\n return newValue.length < match.length ? newValue : match;\n });\n }\n }\n};\n\nmodule.exports = plugin;\n","var WHOLE_PIXEL_VALUE = /(?:^|\\s|\\()(-?\\d+)px/;\n\nvar plugin = {\n level1: {\n value: function unit(_name, value, options) {\n if (!WHOLE_PIXEL_VALUE.test(value)) {\n return value;\n }\n\n return value.replace(WHOLE_PIXEL_VALUE, function(match, val) {\n var newValue;\n var intVal = parseInt(val);\n\n if (intVal === 0) {\n return match;\n }\n\n if (options.compatibility.properties.shorterLengthUnits\n && options.compatibility.units.pt\n && intVal * 3 % 4 === 0) {\n newValue = intVal * 3 / 4 + 'pt';\n }\n\n if (options.compatibility.properties.shorterLengthUnits\n && options.compatibility.units.pc\n && intVal % 16 === 0) {\n newValue = intVal / 16 + 'pc';\n }\n\n if (options.compatibility.properties.shorterLengthUnits\n && options.compatibility.units.in\n && intVal % 96 === 0) {\n newValue = intVal / 96 + 'in';\n }\n\n if (newValue) {\n newValue = match.substring(0, match.indexOf(val)) + newValue;\n }\n\n return newValue && newValue.length < match.length ? newValue : match;\n });\n }\n }\n};\n\nmodule.exports = plugin;\n","var startsAsUrl = require('./starts-as-url');\n\nvar OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar URL_PREFIX_PATTERN = /^url\\(/i;\n\nvar plugin = {\n level1: {\n value: function urlPrefix(_name, value, options) {\n if (!options.level[OptimizationLevel.One].normalizeUrls) {\n return value;\n }\n\n if (!startsAsUrl(value)) {\n return value;\n }\n\n return value.replace(URL_PREFIX_PATTERN, 'url(');\n }\n }\n};\n\nmodule.exports = plugin;\n","var QUOTED_URL_PATTERN = /^url\\(['\"].+['\"]\\)$/;\nvar QUOTED_URL_WITH_WHITESPACE_PATTERN = /^url\\(['\"].*[*\\s()'\"].*['\"]\\)$/;\nvar QUOTES_PATTERN = /[\"']/g;\nvar URL_DATA_PATTERN = /^url\\(['\"]data:[^;]+;charset/;\n\nvar plugin = {\n level1: {\n value: function urlQuotes(_name, value, options) {\n if (options.compatibility.properties.urlQuotes) {\n return value;\n }\n\n return QUOTED_URL_PATTERN.test(value)\n && !QUOTED_URL_WITH_WHITESPACE_PATTERN.test(value)\n && !URL_DATA_PATTERN.test(value)\n ? value.replace(QUOTES_PATTERN, '')\n : value;\n }\n }\n};\n\nmodule.exports = plugin;\n","var startsAsUrl = require('./starts-as-url');\n\nvar WHITESPACE_PATTERN = /\\\\?\\n|\\\\?\\r\\n/g;\nvar WHITESPACE_PREFIX_PATTERN = /(\\()\\s+/g;\nvar WHITESPACE_SUFFIX_PATTERN = /\\s+(\\))/g;\n\nvar plugin = {\n level1: {\n value: function urlWhitespace(_name, value) {\n if (!startsAsUrl(value)) {\n return value;\n }\n\n return value\n .replace(WHITESPACE_PATTERN, '')\n .replace(WHITESPACE_PREFIX_PATTERN, '$1')\n .replace(WHITESPACE_SUFFIX_PATTERN, '$1');\n }\n }\n};\n\nmodule.exports = plugin;\n","var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nvar Marker = require('../../../tokenizer/marker');\n\nvar CALC_DIVISION_WHITESPACE_PATTERN = /\\) ?\\/ ?/g;\nvar COMMA_AND_SPACE_PATTERN = /, /g;\nvar LINE_BREAK_PATTERN = /\\r?\\n/g;\nvar MULTI_WHITESPACE_PATTERN = /\\s+/g;\nvar FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN = /\\s+(;?\\))/g;\nvar FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN = /(\\(;?)\\s+/g;\nvar VARIABLE_NAME_PATTERN = /^--\\S+$/;\nvar VARIABLE_VALUE_PATTERN = /^var\\(\\s*--\\S+\\s*\\)$/;\n\nvar plugin = {\n level1: {\n value: function whitespace(name, value, options) {\n if (!options.level[OptimizationLevel.One].removeWhitespace) {\n return value;\n }\n\n if (VARIABLE_NAME_PATTERN.test(name) && !VARIABLE_VALUE_PATTERN.test(value)) {\n return value;\n }\n\n if ((value.indexOf(' ') == -1 && value.indexOf('\\n') == -1) || value.indexOf('expression') === 0) {\n return value;\n }\n\n if (value.indexOf(Marker.SINGLE_QUOTE) > -1 || value.indexOf(Marker.DOUBLE_QUOTE) > -1) {\n return value;\n }\n\n value = value.replace(LINE_BREAK_PATTERN, '');\n value = value.replace(MULTI_WHITESPACE_PATTERN, ' ');\n\n if (value.indexOf('calc') > -1) {\n value = value.replace(CALC_DIVISION_WHITESPACE_PATTERN, ')/ ');\n }\n\n return value\n .replace(FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN, '$1')\n .replace(FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN, '$1')\n .replace(COMMA_AND_SPACE_PATTERN, ',');\n }\n }\n};\n\nmodule.exports = plugin;\n","var split = require('../../../utils/split');\n\nvar ANY_FUNCTION_PATTERN = /^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\\((.+)\\)$/;\nvar SKIP_FUNCTION_PATTERN = /^(?:-moz-calc|-webkit-calc|calc|rgb|hsl|rgba|hsla|min|max|clamp|expression)\\(/;\nvar TOKEN_SEPARATOR_PATTERN = /([\\s,/])/;\n\nfunction removeRecursively(value, options) {\n var functionTokens;\n var tokens;\n\n if (SKIP_FUNCTION_PATTERN.test(value)) {\n return value;\n }\n\n functionTokens = ANY_FUNCTION_PATTERN.exec(value);\n\n if (!functionTokens) {\n return removeZeros(value, options);\n }\n\n tokens = split(functionTokens[2], TOKEN_SEPARATOR_PATTERN)\n .map(function(token) { return removeRecursively(token, options); });\n\n return functionTokens[1] + '(' + tokens.join('') + ')';\n}\n\nfunction removeZeros(value, options) {\n return value\n .replace(options.unitsRegexp, '$10$2')\n .replace(options.unitsRegexp, '$10$2');\n}\n\nvar plugin = {\n level1: {\n value: function zero(name, value, options) {\n if (!options.compatibility.properties.zeroUnits) {\n return value;\n }\n\n if (value.indexOf('%') > 0 && (name == 'height' || name == 'max-height' || name == 'width' || name == 'max-width')) {\n return value;\n }\n\n return removeRecursively(value, options);\n }\n }\n};\n\nmodule.exports = plugin;\n","module.exports = {\n color: require('./value-optimizers/color').level1.value,\n degrees: require('./value-optimizers/degrees').level1.value,\n fraction: require('./value-optimizers/fraction').level1.value,\n precision: require('./value-optimizers/precision').level1.value,\n textQuotes: require('./value-optimizers/text-quotes').level1.value,\n time: require('./value-optimizers/time').level1.value,\n unit: require('./value-optimizers/unit').level1.value,\n urlPrefix: require('./value-optimizers/url-prefix').level1.value,\n urlQuotes: require('./value-optimizers/url-quotes').level1.value,\n urlWhiteSpace: require('./value-optimizers/url-whitespace').level1.value,\n whiteSpace: require('./value-optimizers/whitespace').level1.value,\n zero: require('./value-optimizers/zero').level1.value\n};\n","// Contains the interpretation of CSS properties, as used by the property optimizer\n\nvar breakUp = require('./configuration/break-up');\nvar canOverride = require('./configuration/can-override');\nvar restore = require('./configuration/restore');\n\nvar propertyOptimizers = require('./level-1/property-optimizers');\nvar valueOptimizers = require('./level-1/value-optimizers');\n\nvar override = require('../utils/override');\n\n// Properties to process\n// Extend this object in order to add support for more properties in the optimizer.\n//\n// Each key in this object represents a CSS property and should be an object.\n// Such an object contains properties that describe how the represented CSS property should be handled.\n// Possible options:\n//\n// * components: array (Only specify for shorthand properties.)\n// Contains the names of the granular properties this shorthand compacts.\n//\n// * canOverride: function\n// Returns whether two tokens of this property can be merged with each other.\n// This property has no meaning for shorthands.\n//\n// * defaultValue: string\n// Specifies the default value of the property according to the CSS standard.\n// For shorthand, this is used when every component is set to its default value, therefore it should be the shortest possible default value of all the components.\n//\n// * shortestValue: string\n// Specifies the shortest possible value the property can possibly have.\n// (Falls back to defaultValue if unspecified.)\n//\n// * breakUp: function (Only specify for shorthand properties.)\n// Breaks the shorthand up to its components.\n//\n// * restore: function (Only specify for shorthand properties.)\n// Puts the shorthand together from its components.\n//\nvar configuration = {\n animation: {\n canOverride: canOverride.generic.components([\n canOverride.generic.time,\n canOverride.generic.timingFunction,\n canOverride.generic.time,\n canOverride.property.animationIterationCount,\n canOverride.property.animationDirection,\n canOverride.property.animationFillMode,\n canOverride.property.animationPlayState,\n canOverride.property.animationName\n ]),\n components: [\n 'animation-duration',\n 'animation-timing-function',\n 'animation-delay',\n 'animation-iteration-count',\n 'animation-direction',\n 'animation-fill-mode',\n 'animation-play-state',\n 'animation-name'\n ],\n breakUp: breakUp.multiplex(breakUp.animation),\n defaultValue: 'none',\n restore: restore.multiplex(restore.withoutDefaults),\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.textQuotes,\n valueOptimizers.time,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n 'animation-delay': {\n canOverride: canOverride.generic.time,\n componentOf: [\n 'animation'\n ],\n defaultValue: '0s',\n intoMultiplexMode: 'real',\n valueOptimizers: [\n valueOptimizers.time,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n 'animation-direction': {\n canOverride: canOverride.property.animationDirection,\n componentOf: [\n 'animation'\n ],\n defaultValue: 'normal',\n intoMultiplexMode: 'real',\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n 'animation-duration': {\n canOverride: canOverride.generic.time,\n componentOf: [\n 'animation'\n ],\n defaultValue: '0s',\n intoMultiplexMode: 'real',\n keepUnlessDefault: 'animation-delay',\n valueOptimizers: [\n valueOptimizers.time,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n 'animation-fill-mode': {\n canOverride: canOverride.property.animationFillMode,\n componentOf: [\n 'animation'\n ],\n defaultValue: 'none',\n intoMultiplexMode: 'real',\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n 'animation-iteration-count': {\n canOverride: canOverride.property.animationIterationCount,\n componentOf: [\n 'animation'\n ],\n defaultValue: '1',\n intoMultiplexMode: 'real',\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n 'animation-name': {\n canOverride: canOverride.property.animationName,\n componentOf: [\n 'animation'\n ],\n defaultValue: 'none',\n intoMultiplexMode: 'real',\n valueOptimizers: [\n valueOptimizers.textQuotes\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n 'animation-play-state': {\n canOverride: canOverride.property.animationPlayState,\n componentOf: [\n 'animation'\n ],\n defaultValue: 'running',\n intoMultiplexMode: 'real',\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n 'animation-timing-function': {\n canOverride: canOverride.generic.timingFunction,\n componentOf: [\n 'animation'\n ],\n defaultValue: 'ease',\n intoMultiplexMode: 'real',\n vendorPrefixes: [\n '-moz-',\n '-o-',\n '-webkit-'\n ]\n },\n background: {\n canOverride: canOverride.generic.components([\n canOverride.generic.image,\n canOverride.property.backgroundPosition,\n canOverride.property.backgroundSize,\n canOverride.property.backgroundRepeat,\n canOverride.property.backgroundAttachment,\n canOverride.property.backgroundOrigin,\n canOverride.property.backgroundClip,\n canOverride.generic.color\n ]),\n components: [\n 'background-image',\n 'background-position',\n 'background-size',\n 'background-repeat',\n 'background-attachment',\n 'background-origin',\n 'background-clip',\n 'background-color'\n ],\n breakUp: breakUp.multiplex(breakUp.background),\n defaultValue: '0 0',\n propertyOptimizer: propertyOptimizers.background,\n restore: restore.multiplex(restore.background),\n shortestValue: '0',\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.urlWhiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.zero,\n valueOptimizers.color,\n valueOptimizers.urlPrefix,\n valueOptimizers.urlQuotes\n ]\n },\n 'background-attachment': {\n canOverride: canOverride.property.backgroundAttachment,\n componentOf: [\n 'background'\n ],\n defaultValue: 'scroll',\n intoMultiplexMode: 'real'\n },\n 'background-clip': {\n canOverride: canOverride.property.backgroundClip,\n componentOf: [\n 'background'\n ],\n defaultValue: 'border-box',\n intoMultiplexMode: 'real',\n shortestValue: 'border-box'\n },\n 'background-color': {\n canOverride: canOverride.generic.color,\n componentOf: [\n 'background'\n ],\n defaultValue: 'transparent',\n intoMultiplexMode: 'real', // otherwise real color will turn into default since color appears in last multiplex only\n multiplexLastOnly: true,\n nonMergeableValue: 'none',\n shortestValue: 'red',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'background-image': {\n canOverride: canOverride.generic.image,\n componentOf: [\n 'background'\n ],\n defaultValue: 'none',\n intoMultiplexMode: 'default',\n valueOptimizers: [\n valueOptimizers.urlWhiteSpace,\n valueOptimizers.urlPrefix,\n valueOptimizers.urlQuotes,\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero,\n valueOptimizers.color\n ]\n },\n 'background-origin': {\n canOverride: canOverride.property.backgroundOrigin,\n componentOf: [\n 'background'\n ],\n defaultValue: 'padding-box',\n intoMultiplexMode: 'real',\n shortestValue: 'border-box'\n },\n 'background-position': {\n canOverride: canOverride.property.backgroundPosition,\n componentOf: [\n 'background'\n ],\n defaultValue: ['0', '0'],\n doubleValues: true,\n intoMultiplexMode: 'real',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'background-repeat': {\n canOverride: canOverride.property.backgroundRepeat,\n componentOf: [\n 'background'\n ],\n defaultValue: ['repeat'],\n doubleValues: true,\n intoMultiplexMode: 'real'\n },\n 'background-size': {\n canOverride: canOverride.property.backgroundSize,\n componentOf: [\n 'background'\n ],\n defaultValue: ['auto'],\n doubleValues: true,\n intoMultiplexMode: 'real',\n shortestValue: '0 0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n bottom: {\n canOverride: canOverride.property.bottom,\n defaultValue: 'auto',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n border: {\n breakUp: breakUp.border,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.property.borderStyle,\n canOverride.generic.color\n ]),\n components: [\n 'border-width',\n 'border-style',\n 'border-color'\n ],\n defaultValue: 'none',\n overridesShorthands: [\n 'border-bottom',\n 'border-left',\n 'border-right',\n 'border-top'\n ],\n restore: restore.withoutDefaults,\n shorthand: true,\n shorthandComponents: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.zero,\n valueOptimizers.color\n ]\n },\n 'border-bottom': {\n breakUp: breakUp.border,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.property.borderStyle,\n canOverride.generic.color\n ]),\n components: [\n 'border-bottom-width',\n 'border-bottom-style',\n 'border-bottom-color'\n ],\n defaultValue: 'none',\n restore: restore.withoutDefaults,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.zero,\n valueOptimizers.color\n ]\n },\n 'border-bottom-color': {\n canOverride: canOverride.generic.color,\n componentOf: [\n 'border-bottom',\n 'border-color'\n ],\n defaultValue: 'none',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'border-bottom-left-radius': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'border-radius'\n ],\n defaultValue: '0',\n propertyOptimizer: propertyOptimizers.borderRadius,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-'\n ]\n },\n 'border-bottom-right-radius': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'border-radius'\n ],\n defaultValue: '0',\n propertyOptimizer: propertyOptimizers.borderRadius,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-'\n ]\n },\n 'border-bottom-style': {\n canOverride: canOverride.property.borderStyle,\n componentOf: [\n 'border-bottom',\n 'border-style'\n ],\n defaultValue: 'none'\n },\n 'border-bottom-width': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'border-bottom',\n 'border-width'\n ],\n defaultValue: 'medium',\n oppositeTo: 'border-top-width',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'border-collapse': {\n canOverride: canOverride.property.borderCollapse,\n defaultValue: 'separate'\n },\n 'border-color': {\n breakUp: breakUp.fourValues,\n canOverride: canOverride.generic.components([\n canOverride.generic.color,\n canOverride.generic.color,\n canOverride.generic.color,\n canOverride.generic.color\n ]),\n componentOf: [\n 'border'\n ],\n components: [\n 'border-top-color',\n 'border-right-color',\n 'border-bottom-color',\n 'border-left-color'\n ],\n defaultValue: 'none',\n restore: restore.fourValues,\n shortestValue: 'red',\n shorthand: true,\n singleTypeComponents: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'border-left': {\n breakUp: breakUp.border,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.property.borderStyle,\n canOverride.generic.color\n ]),\n components: [\n 'border-left-width',\n 'border-left-style',\n 'border-left-color'\n ],\n defaultValue: 'none',\n restore: restore.withoutDefaults,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.zero,\n valueOptimizers.color\n ]\n },\n 'border-left-color': {\n canOverride: canOverride.generic.color,\n componentOf: [\n 'border-color',\n 'border-left'\n ],\n defaultValue: 'none',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'border-left-style': {\n canOverride: canOverride.property.borderStyle,\n componentOf: [\n 'border-left',\n 'border-style'\n ],\n defaultValue: 'none'\n },\n 'border-left-width': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'border-left',\n 'border-width'\n ],\n defaultValue: 'medium',\n oppositeTo: 'border-right-width',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'border-radius': {\n breakUp: breakUp.borderRadius,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.generic.unit\n ]),\n components: [\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius'\n ],\n defaultValue: '0',\n propertyOptimizer: propertyOptimizers.borderRadius,\n restore: restore.borderRadius,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-'\n ]\n },\n 'border-right': {\n breakUp: breakUp.border,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.property.borderStyle,\n canOverride.generic.color\n ]),\n components: [\n 'border-right-width',\n 'border-right-style',\n 'border-right-color'\n ],\n defaultValue: 'none',\n restore: restore.withoutDefaults,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'border-right-color': {\n canOverride: canOverride.generic.color,\n componentOf: [\n 'border-color',\n 'border-right'\n ],\n defaultValue: 'none',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'border-right-style': {\n canOverride: canOverride.property.borderStyle,\n componentOf: [\n 'border-right',\n 'border-style'\n ],\n defaultValue: 'none'\n },\n 'border-right-width': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'border-right',\n 'border-width'\n ],\n defaultValue: 'medium',\n oppositeTo: 'border-left-width',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'border-style': {\n breakUp: breakUp.fourValues,\n canOverride: canOverride.generic.components([\n canOverride.property.borderStyle,\n canOverride.property.borderStyle,\n canOverride.property.borderStyle,\n canOverride.property.borderStyle\n ]),\n componentOf: [\n 'border'\n ],\n components: [\n 'border-top-style',\n 'border-right-style',\n 'border-bottom-style',\n 'border-left-style'\n ],\n defaultValue: 'none',\n restore: restore.fourValues,\n shorthand: true,\n singleTypeComponents: true\n },\n 'border-top': {\n breakUp: breakUp.border,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.property.borderStyle,\n canOverride.generic.color\n ]),\n components: [\n 'border-top-width',\n 'border-top-style',\n 'border-top-color'\n ],\n defaultValue: 'none',\n restore: restore.withoutDefaults,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.zero,\n valueOptimizers.color,\n valueOptimizers.unit\n ]\n },\n 'border-top-color': {\n canOverride: canOverride.generic.color,\n componentOf: [\n 'border-color',\n 'border-top'\n ],\n defaultValue: 'none',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'border-top-left-radius': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'border-radius'\n ],\n defaultValue: '0',\n propertyOptimizer: propertyOptimizers.borderRadius,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-'\n ]\n },\n 'border-top-right-radius': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'border-radius'\n ],\n defaultValue: '0',\n propertyOptimizer: propertyOptimizers.borderRadius,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-o-'\n ]\n },\n 'border-top-style': {\n canOverride: canOverride.property.borderStyle,\n componentOf: [\n 'border-style',\n 'border-top'\n ],\n defaultValue: 'none'\n },\n 'border-top-width': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'border-top',\n 'border-width'\n ],\n defaultValue: 'medium',\n oppositeTo: 'border-bottom-width',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'border-width': {\n breakUp: breakUp.fourValues,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.generic.unit\n ]),\n componentOf: [\n 'border'\n ],\n components: [\n 'border-top-width',\n 'border-right-width',\n 'border-bottom-width',\n 'border-left-width'\n ],\n defaultValue: 'medium',\n restore: restore.fourValues,\n shortestValue: '0',\n shorthand: true,\n singleTypeComponents: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'box-shadow': {\n propertyOptimizer: propertyOptimizers.boxShadow,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero,\n valueOptimizers.color\n ],\n vendorPrefixes: [\n '-moz-',\n '-ms-',\n '-o-',\n '-webkit-'\n ]\n },\n clear: {\n canOverride: canOverride.property.clear,\n defaultValue: 'none'\n },\n clip: {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n color: {\n canOverride: canOverride.generic.color,\n defaultValue: 'transparent',\n shortestValue: 'red',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'column-gap': {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n cursor: {\n canOverride: canOverride.property.cursor,\n defaultValue: 'auto'\n },\n display: { canOverride: canOverride.property.display },\n filter: {\n propertyOptimizer: propertyOptimizers.filter,\n valueOptimizers: [\n valueOptimizers.fraction\n ]\n },\n float: {\n canOverride: canOverride.property.float,\n defaultValue: 'none'\n },\n font: {\n breakUp: breakUp.font,\n canOverride: canOverride.generic.components([\n canOverride.property.fontStyle,\n canOverride.property.fontVariant,\n canOverride.property.fontWeight,\n canOverride.property.fontStretch,\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.property.fontFamily\n ]),\n components: [\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'font-stretch',\n 'font-size',\n 'line-height',\n 'font-family'\n ],\n restore: restore.font,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.textQuotes\n ]\n },\n 'font-family': {\n canOverride: canOverride.property.fontFamily,\n defaultValue: 'user|agent|specific',\n valueOptimizers: [\n valueOptimizers.textQuotes\n ]\n },\n 'font-size': {\n canOverride: canOverride.generic.unit,\n defaultValue: 'medium',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.fraction\n ]\n },\n 'font-stretch': {\n canOverride: canOverride.property.fontStretch,\n defaultValue: 'normal'\n },\n 'font-style': {\n canOverride: canOverride.property.fontStyle,\n defaultValue: 'normal'\n },\n 'font-variant': {\n canOverride: canOverride.property.fontVariant,\n defaultValue: 'normal'\n },\n 'font-weight': {\n canOverride: canOverride.property.fontWeight,\n defaultValue: 'normal',\n propertyOptimizer: propertyOptimizers.fontWeight,\n shortestValue: '400'\n },\n gap: {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n height: {\n canOverride: canOverride.generic.unit,\n defaultValue: 'auto',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n left: {\n canOverride: canOverride.property.left,\n defaultValue: 'auto',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'letter-spacing': {\n valueOptimizers: [\n valueOptimizers.fraction,\n valueOptimizers.zero\n ]\n },\n 'line-height': {\n canOverride: canOverride.generic.unitOrNumber,\n defaultValue: 'normal',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.fraction,\n valueOptimizers.zero\n ]\n },\n 'list-style': {\n canOverride: canOverride.generic.components([\n canOverride.property.listStyleType,\n canOverride.property.listStylePosition,\n canOverride.property.listStyleImage\n ]),\n components: [\n 'list-style-type',\n 'list-style-position',\n 'list-style-image'\n ],\n breakUp: breakUp.listStyle,\n restore: restore.withoutDefaults,\n defaultValue: 'outside', // can't use 'disc' because that'd override default 'decimal' for <ol>\n shortestValue: 'none',\n shorthand: true\n },\n 'list-style-image': {\n canOverride: canOverride.generic.image,\n componentOf: [\n 'list-style'\n ],\n defaultValue: 'none'\n },\n 'list-style-position': {\n canOverride: canOverride.property.listStylePosition,\n componentOf: [\n 'list-style'\n ],\n defaultValue: 'outside',\n shortestValue: 'inside'\n },\n 'list-style-type': {\n canOverride: canOverride.property.listStyleType,\n componentOf: [\n 'list-style'\n ],\n // NOTE: we can't tell the real default value here, it's 'disc' for <ul> and 'decimal' for <ol>\n // this is a hack, but it doesn't matter because this value will be either overridden or\n // it will disappear at the final step anyway\n defaultValue: 'decimal|disc',\n shortestValue: 'none'\n },\n margin: {\n breakUp: breakUp.fourValues,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.generic.unit\n ]),\n components: [\n 'margin-top',\n 'margin-right',\n 'margin-bottom',\n 'margin-left'\n ],\n defaultValue: '0',\n propertyOptimizer: propertyOptimizers.margin,\n restore: restore.fourValues,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'margin-bottom': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'margin'\n ],\n defaultValue: '0',\n oppositeTo: 'margin-top',\n propertyOptimizer: propertyOptimizers.margin,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'margin-inline-end': {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'margin-inline-start': {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'margin-left': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'margin'\n ],\n defaultValue: '0',\n oppositeTo: 'margin-right',\n propertyOptimizer: propertyOptimizers.margin,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'margin-right': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'margin'\n ],\n defaultValue: '0',\n oppositeTo: 'margin-left',\n propertyOptimizer: propertyOptimizers.margin,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'margin-top': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'margin'\n ],\n defaultValue: '0',\n oppositeTo: 'margin-bottom',\n propertyOptimizer: propertyOptimizers.margin,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'max-height': {\n canOverride: canOverride.generic.unit,\n defaultValue: 'none',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'max-width': {\n canOverride: canOverride.generic.unit,\n defaultValue: 'none',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'min-height': {\n canOverride: canOverride.generic.unit,\n defaultValue: '0',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'min-width': {\n canOverride: canOverride.generic.unit,\n defaultValue: '0',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n opacity: {\n valueOptimizers: [\n valueOptimizers.fraction,\n valueOptimizers.precision\n ]\n },\n outline: {\n canOverride: canOverride.generic.components([\n canOverride.generic.color,\n canOverride.property.outlineStyle,\n canOverride.generic.unit\n ]),\n components: [\n 'outline-color',\n 'outline-style',\n 'outline-width'\n ],\n breakUp: breakUp.outline,\n restore: restore.withoutDefaults,\n defaultValue: '0',\n propertyOptimizer: propertyOptimizers.outline,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'outline-color': {\n canOverride: canOverride.generic.color,\n componentOf: [\n 'outline'\n ],\n defaultValue: 'invert',\n shortestValue: 'red',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.color\n ]\n },\n 'outline-style': {\n canOverride: canOverride.property.outlineStyle,\n componentOf: [\n 'outline'\n ],\n defaultValue: 'none'\n },\n 'outline-width': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'outline'\n ],\n defaultValue: 'medium',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n overflow: {\n canOverride: canOverride.property.overflow,\n defaultValue: 'visible'\n },\n 'overflow-x': {\n canOverride: canOverride.property.overflow,\n defaultValue: 'visible'\n },\n 'overflow-y': {\n canOverride: canOverride.property.overflow,\n defaultValue: 'visible'\n },\n padding: {\n breakUp: breakUp.fourValues,\n canOverride: canOverride.generic.components([\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.generic.unit,\n canOverride.generic.unit\n ]),\n components: [\n 'padding-top',\n 'padding-right',\n 'padding-bottom',\n 'padding-left'\n ],\n defaultValue: '0',\n propertyOptimizer: propertyOptimizers.padding,\n restore: restore.fourValues,\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'padding-bottom': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'padding'\n ],\n defaultValue: '0',\n oppositeTo: 'padding-top',\n propertyOptimizer: propertyOptimizers.padding,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'padding-left': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'padding'\n ],\n defaultValue: '0',\n oppositeTo: 'padding-right',\n propertyOptimizer: propertyOptimizers.padding,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'padding-right': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'padding'\n ],\n defaultValue: '0',\n oppositeTo: 'padding-left',\n propertyOptimizer: propertyOptimizers.padding,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'padding-top': {\n canOverride: canOverride.generic.unit,\n componentOf: [\n 'padding'\n ],\n defaultValue: '0',\n oppositeTo: 'padding-bottom',\n propertyOptimizer: propertyOptimizers.padding,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n position: {\n canOverride: canOverride.property.position,\n defaultValue: 'static'\n },\n right: {\n canOverride: canOverride.property.right,\n defaultValue: 'auto',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'row-gap': {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n src: {\n valueOptimizers: [\n valueOptimizers.urlWhiteSpace,\n valueOptimizers.urlPrefix,\n valueOptimizers.urlQuotes\n ]\n },\n 'stroke-width': {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'text-align': {\n canOverride: canOverride.property.textAlign,\n // NOTE: we can't tell the real default value here, as it depends on default text direction\n // this is a hack, but it doesn't matter because this value will be either overridden or\n // it will disappear anyway\n defaultValue: 'left|right'\n },\n 'text-decoration': {\n canOverride: canOverride.property.textDecoration,\n defaultValue: 'none'\n },\n 'text-indent': {\n canOverride: canOverride.property.textOverflow,\n defaultValue: 'none',\n valueOptimizers: [\n valueOptimizers.fraction,\n valueOptimizers.zero\n ]\n },\n 'text-overflow': {\n canOverride: canOverride.property.textOverflow,\n defaultValue: 'none'\n },\n 'text-shadow': {\n canOverride: canOverride.property.textShadow,\n defaultValue: 'none',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.zero,\n valueOptimizers.color\n ]\n },\n top: {\n canOverride: canOverride.property.top,\n defaultValue: 'auto',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n transform: {\n canOverride: canOverride.property.transform,\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.degrees,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ],\n vendorPrefixes: [\n '-moz-',\n '-ms-',\n '-o-',\n '-webkit-'\n ]\n },\n transition: {\n breakUp: breakUp.multiplex(breakUp.transition),\n canOverride: canOverride.generic.components([\n canOverride.property.transitionProperty,\n canOverride.generic.time,\n canOverride.generic.timingFunction,\n canOverride.generic.time\n ]),\n components: [\n 'transition-property',\n 'transition-duration',\n 'transition-timing-function',\n 'transition-delay'\n ],\n defaultValue: 'none',\n restore: restore.multiplex(restore.withoutDefaults),\n shorthand: true,\n valueOptimizers: [\n valueOptimizers.time,\n valueOptimizers.fraction\n ],\n vendorPrefixes: [\n '-moz-',\n '-ms-',\n '-o-',\n '-webkit-'\n ]\n },\n 'transition-delay': {\n canOverride: canOverride.generic.time,\n componentOf: [\n 'transition'\n ],\n defaultValue: '0s',\n intoMultiplexMode: 'real',\n valueOptimizers: [\n valueOptimizers.time\n ],\n vendorPrefixes: [\n '-moz-',\n '-ms-',\n '-o-',\n '-webkit-'\n ]\n },\n 'transition-duration': {\n canOverride: canOverride.generic.time,\n componentOf: [\n 'transition'\n ],\n defaultValue: '0s',\n intoMultiplexMode: 'real',\n keepUnlessDefault: 'transition-delay',\n valueOptimizers: [\n valueOptimizers.time,\n valueOptimizers.fraction\n ],\n vendorPrefixes: [\n '-moz-',\n '-ms-',\n '-o-',\n '-webkit-'\n ]\n },\n 'transition-property': {\n canOverride: canOverride.generic.propertyName,\n componentOf: [\n 'transition'\n ],\n defaultValue: 'all',\n intoMultiplexMode: 'placeholder',\n placeholderValue: '_', // it's a short value that won't match any property and still be a valid `transition-property`\n vendorPrefixes: [\n '-moz-',\n '-ms-',\n '-o-',\n '-webkit-'\n ]\n },\n 'transition-timing-function': {\n canOverride: canOverride.generic.timingFunction,\n componentOf: [\n 'transition'\n ],\n defaultValue: 'ease',\n intoMultiplexMode: 'real',\n vendorPrefixes: [\n '-moz-',\n '-ms-',\n '-o-',\n '-webkit-'\n ]\n },\n 'vertical-align': {\n canOverride: canOverride.property.verticalAlign,\n defaultValue: 'baseline',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n visibility: {\n canOverride: canOverride.property.visibility,\n defaultValue: 'visible'\n },\n '-webkit-tap-highlight-color': {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.color\n ]\n },\n '-webkit-margin-end': {\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'white-space': {\n canOverride: canOverride.property.whiteSpace,\n defaultValue: 'normal'\n },\n width: {\n canOverride: canOverride.generic.unit,\n defaultValue: 'auto',\n shortestValue: '0',\n valueOptimizers: [\n valueOptimizers.whiteSpace,\n valueOptimizers.fraction,\n valueOptimizers.precision,\n valueOptimizers.unit,\n valueOptimizers.zero\n ]\n },\n 'z-index': {\n canOverride: canOverride.property.zIndex,\n defaultValue: 'auto'\n }\n};\n\n// generate vendor-prefixed configuration\nvar vendorPrefixedConfiguration = {};\n\nfunction cloneDescriptor(propertyName, prefix) {\n var clonedDescriptor = override(configuration[propertyName], {});\n\n if ('componentOf' in clonedDescriptor) {\n clonedDescriptor.componentOf = clonedDescriptor.componentOf.map(function(shorthandName) {\n return prefix + shorthandName;\n });\n }\n\n if ('components' in clonedDescriptor) {\n clonedDescriptor.components = clonedDescriptor.components.map(function(longhandName) {\n return prefix + longhandName;\n });\n }\n\n if ('keepUnlessDefault' in clonedDescriptor) {\n clonedDescriptor.keepUnlessDefault = prefix + clonedDescriptor.keepUnlessDefault;\n }\n\n return clonedDescriptor;\n}\n\nfor (var propertyName in configuration) {\n var descriptor = configuration[propertyName];\n\n if (!('vendorPrefixes' in descriptor)) {\n continue;\n }\n\n for (var i = 0; i < descriptor.vendorPrefixes.length; i++) {\n var prefix = descriptor.vendorPrefixes[i];\n var clonedDescriptor = cloneDescriptor(propertyName, prefix);\n delete clonedDescriptor.vendorPrefixes;\n\n vendorPrefixedConfiguration[prefix + propertyName] = clonedDescriptor;\n }\n\n delete descriptor.vendorPrefixes;\n}\n\nmodule.exports = override(configuration, vendorPrefixedConfiguration);\n","var emptyCharacter = '';\n\nvar Breaks = require('../options/format').Breaks;\nvar Spaces = require('../options/format').Spaces;\n\nvar Marker = require('../tokenizer/marker');\nvar Token = require('../tokenizer/token');\n\nfunction supportsAfterClosingBrace(token) {\n return token[1][1] == 'background' || token[1][1] == 'transform' || token[1][1] == 'src';\n}\n\nfunction afterClosingBrace(token, valueIndex) {\n return token[valueIndex][1][token[valueIndex][1].length - 1] == Marker.CLOSE_ROUND_BRACKET;\n}\n\nfunction afterComma(token, valueIndex) {\n return token[valueIndex][1] == Marker.COMMA;\n}\n\nfunction afterSlash(token, valueIndex) {\n return token[valueIndex][1] == Marker.FORWARD_SLASH;\n}\n\nfunction beforeComma(token, valueIndex) {\n return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.COMMA;\n}\n\nfunction beforeSlash(token, valueIndex) {\n return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.FORWARD_SLASH;\n}\n\nfunction inFilter(token) {\n return token[1][1] == 'filter' || token[1][1] == '-ms-filter';\n}\n\nfunction disallowsSpace(context, token, valueIndex) {\n return !context.spaceAfterClosingBrace\n && supportsAfterClosingBrace(token)\n && afterClosingBrace(token, valueIndex)\n || beforeSlash(token, valueIndex)\n || afterSlash(token, valueIndex)\n || beforeComma(token, valueIndex)\n || afterComma(token, valueIndex);\n}\n\nfunction rules(context, tokens) {\n var store = context.store;\n\n for (var i = 0, l = tokens.length; i < l; i++) {\n store(context, tokens[i]);\n\n if (i < l - 1) {\n store(context, comma(context));\n }\n }\n}\n\nfunction body(context, tokens) {\n var lastPropertyAt = lastPropertyIndex(tokens);\n\n for (var i = 0, l = tokens.length; i < l; i++) {\n property(context, tokens, i, lastPropertyAt);\n }\n}\n\nfunction lastPropertyIndex(tokens) {\n var index = tokens.length - 1;\n\n for (; index >= 0; index--) {\n if (tokens[index][0] != Token.COMMENT) {\n break;\n }\n }\n\n return index;\n}\n\nfunction property(context, tokens, position, lastPropertyAt) {\n var store = context.store;\n var token = tokens[position];\n\n var propertyValue = token[2];\n var isPropertyBlock = propertyValue && propertyValue[0] === Token.PROPERTY_BLOCK;\n\n var needsSemicolon;\n if (context.format) {\n if (context.format.semicolonAfterLastProperty || isPropertyBlock) {\n needsSemicolon = true;\n } else if (position < lastPropertyAt) {\n needsSemicolon = true;\n } else {\n needsSemicolon = false;\n }\n } else {\n needsSemicolon = position < lastPropertyAt || isPropertyBlock;\n }\n\n var isLast = position === lastPropertyAt;\n\n switch (token[0]) {\n case Token.AT_RULE:\n store(context, token);\n store(context, semicolon(context, Breaks.AfterProperty, false));\n break;\n case Token.AT_RULE_BLOCK:\n rules(context, token[1]);\n store(context, openBrace(context, Breaks.AfterRuleBegins, true));\n body(context, token[2]);\n store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));\n break;\n case Token.COMMENT:\n store(context, token);\n store(context, breakFor(context, Breaks.AfterComment) + context.indentWith);\n break;\n case Token.PROPERTY:\n store(context, token[1]);\n store(context, colon(context));\n if (propertyValue) {\n value(context, token);\n }\n store(\n context,\n needsSemicolon ? semicolon(context, Breaks.AfterProperty, isLast) : emptyCharacter\n );\n break;\n case Token.RAW:\n store(context, token);\n }\n}\n\nfunction value(context, token) {\n var store = context.store;\n var j, m;\n\n if (token[2][0] == Token.PROPERTY_BLOCK) {\n store(context, openBrace(context, Breaks.AfterBlockBegins, false));\n body(context, token[2][1]);\n store(context, closeBrace(context, Breaks.AfterBlockEnds, false, true));\n } else {\n for (j = 2, m = token.length; j < m; j++) {\n store(context, token[j]);\n\n if (j < m - 1 && (inFilter(token) || !disallowsSpace(context, token, j))) {\n store(context, Marker.SPACE);\n }\n }\n }\n}\n\nfunction breakFor(context, where) {\n return context.format ? context.format.breaks[where] : emptyCharacter;\n}\n\nfunction allowsSpace(context, where) {\n return context.format && context.format.spaces[where];\n}\n\nfunction openBrace(context, where, needsPrefixSpace) {\n if (context.format) {\n context.indentBy += context.format.indentBy;\n context.indentWith = context.format.indentWith.repeat(context.indentBy);\n return (\n needsPrefixSpace\n && allowsSpace(context, Spaces.BeforeBlockBegins) ? Marker.SPACE : emptyCharacter\n ) + Marker.OPEN_CURLY_BRACKET\n + breakFor(context, where)\n + context.indentWith;\n }\n return Marker.OPEN_CURLY_BRACKET;\n}\n\nfunction closeBrace(context, where, beforeBlockEnd, isLast) {\n if (context.format) {\n context.indentBy -= context.format.indentBy;\n context.indentWith = context.format.indentWith.repeat(context.indentBy);\n return (\n beforeBlockEnd\n ? breakFor(context, Breaks.BeforeBlockEnds)\n : breakFor(context, Breaks.AfterProperty)\n ) + context.indentWith\n + Marker.CLOSE_CURLY_BRACKET\n + (isLast ? emptyCharacter : breakFor(context, where) + context.indentWith);\n }\n return Marker.CLOSE_CURLY_BRACKET;\n}\n\nfunction colon(context) {\n return context.format\n ? Marker.COLON + (allowsSpace(context, Spaces.BeforeValue) ? Marker.SPACE : emptyCharacter)\n : Marker.COLON;\n}\n\nfunction semicolon(context, where, isLast) {\n return context.format\n ? Marker.SEMICOLON + (isLast ? emptyCharacter : (breakFor(context, where) + context.indentWith))\n : Marker.SEMICOLON;\n}\n\nfunction comma(context) {\n return context.format\n ? Marker.COMMA + breakFor(context, Breaks.BetweenSelectors) + context.indentWith\n : Marker.COMMA;\n}\n\nfunction all(context, tokens) {\n var store = context.store;\n var token;\n var isLast;\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n token = tokens[i];\n isLast = i == l - 1;\n\n switch (token[0]) {\n case Token.AT_RULE:\n store(context, token);\n store(context, semicolon(context, Breaks.AfterAtRule, isLast));\n break;\n case Token.AT_RULE_BLOCK:\n rules(context, token[1]);\n store(context, openBrace(context, Breaks.AfterRuleBegins, true));\n body(context, token[2]);\n store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));\n break;\n case Token.NESTED_BLOCK:\n rules(context, token[1]);\n store(context, openBrace(context, Breaks.AfterBlockBegins, true));\n all(context, token[2]);\n store(context, closeBrace(context, Breaks.AfterBlockEnds, true, isLast));\n break;\n case Token.COMMENT:\n store(context, token);\n store(context, breakFor(context, Breaks.AfterComment) + context.indentWith);\n break;\n case Token.RAW:\n store(context, token);\n break;\n case Token.RULE:\n rules(context, token[1]);\n store(context, openBrace(context, Breaks.AfterRuleBegins, true));\n body(context, token[2]);\n store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));\n break;\n }\n }\n}\n\nmodule.exports = {\n all: all,\n body: body,\n property: property,\n rules: rules,\n value: value\n};\n","var helpers = require('./helpers');\n\nfunction store(serializeContext, token) {\n serializeContext.output.push(typeof token == 'string' ? token : token[1]);\n}\n\nfunction context() {\n var newContext = {\n output: [],\n store: store\n };\n\n return newContext;\n}\n\nfunction all(tokens) {\n var oneTimeContext = context();\n helpers.all(oneTimeContext, tokens);\n return oneTimeContext.output.join('');\n}\n\nfunction body(tokens) {\n var oneTimeContext = context();\n helpers.body(oneTimeContext, tokens);\n return oneTimeContext.output.join('');\n}\n\nfunction property(tokens, position) {\n var oneTimeContext = context();\n helpers.property(oneTimeContext, tokens, position, true);\n return oneTimeContext.output.join('');\n}\n\nfunction rules(tokens) {\n var oneTimeContext = context();\n helpers.rules(oneTimeContext, tokens);\n return oneTimeContext.output.join('');\n}\n\nfunction value(tokens) {\n var oneTimeContext = context();\n helpers.value(oneTimeContext, tokens);\n return oneTimeContext.output.join('');\n}\n\nmodule.exports = {\n all: all,\n body: body,\n property: property,\n rules: rules,\n value: value\n};\n","var sortSelectors = require('./sort-selectors');\nvar tidyRules = require('./tidy-rules');\nvar tidyBlock = require('./tidy-block');\nvar tidyAtRule = require('./tidy-at-rule');\n\nvar Hack = require('../hack');\nvar removeUnused = require('../remove-unused');\nvar restoreFromOptimizing = require('../restore-from-optimizing');\nvar wrapForOptimizing = require('../wrap-for-optimizing').all;\n\nvar configuration = require('../configuration');\nvar optimizers = require('./value-optimizers');\n\nvar OptimizationLevel = require('../../options/optimization-level').OptimizationLevel;\n\nvar Token = require('../../tokenizer/token');\nvar Marker = require('../../tokenizer/marker');\n\nvar formatPosition = require('../../utils/format-position');\n\nvar serializeRules = require('../../writer/one-time').rules;\n\nvar CHARSET_TOKEN = '@charset';\nvar CHARSET_REGEXP = new RegExp('^' + CHARSET_TOKEN, 'i');\n\nvar DEFAULT_ROUNDING_PRECISION = require('../../options/rounding-precision').DEFAULT;\n\nvar VARIABLE_PROPERTY_NAME_PATTERN = /^--\\S+$/;\nvar PROPERTY_NAME_PATTERN = /^(?:-chrome-|-[\\w-]+\\w|\\w[\\w-]+\\w|\\w{1,})$/;\nvar IMPORT_PREFIX_PATTERN = /^@import/i;\nvar URL_PREFIX_PATTERN = /^url\\(/i;\n\nfunction startsAsUrl(value) {\n return URL_PREFIX_PATTERN.test(value);\n}\n\nfunction isImport(token) {\n return IMPORT_PREFIX_PATTERN.test(token[1]);\n}\n\nfunction isLegacyFilter(property) {\n var value;\n\n if (property.name == 'filter' || property.name == '-ms-filter') {\n value = property.value[0][1];\n\n return value.indexOf('progid') > -1\n || value.indexOf('alpha') === 0\n || value.indexOf('chroma') === 0;\n }\n return false;\n}\n\nfunction noop() {}\n\nfunction noopValueOptimizer(_name, value, _options) { return value; }\n\nfunction optimizeBody(rule, properties, context) {\n var options = context.options;\n var valueOptimizers;\n var property, name, type, value;\n var propertyToken;\n var propertyOptimizer;\n var serializedRule = serializeRules(rule);\n var _properties = wrapForOptimizing(properties);\n var pluginValueOptimizers = context.options.plugins.level1Value;\n var pluginPropertyOptimizers = context.options.plugins.level1Property;\n var isVariable;\n var i, l;\n\n for (i = 0, l = _properties.length; i < l; i++) {\n var j, k, m, n;\n\n property = _properties[i];\n name = property.name;\n propertyOptimizer = configuration[name] && configuration[name].propertyOptimizer || noop;\n valueOptimizers = configuration[name] && configuration[name].valueOptimizers || [optimizers.whiteSpace];\n isVariable = VARIABLE_PROPERTY_NAME_PATTERN.test(name);\n\n if (isVariable) {\n valueOptimizers = options.variableOptimizers.length > 0\n ? options.variableOptimizers\n : [optimizers.whiteSpace];\n }\n\n if (!isVariable && !PROPERTY_NAME_PATTERN.test(name)) {\n propertyToken = property.all[property.position];\n context.warnings.push('Invalid property name \\'' + name + '\\' at ' + formatPosition(propertyToken[1][2][0]) + '. Ignoring.');\n property.unused = true;\n continue;\n }\n\n if (property.value.length === 0) {\n propertyToken = property.all[property.position];\n context.warnings.push('Empty property \\'' + name + '\\' at ' + formatPosition(propertyToken[1][2][0]) + '. Ignoring.');\n property.unused = true;\n continue;\n }\n\n if (property.hack && (\n (property.hack[0] == Hack.ASTERISK || property.hack[0] == Hack.UNDERSCORE)\n && !options.compatibility.properties.iePrefixHack\n || property.hack[0] == Hack.BACKSLASH && !options.compatibility.properties.ieSuffixHack\n || property.hack[0] == Hack.BANG && !options.compatibility.properties.ieBangHack)) {\n property.unused = true;\n continue;\n }\n\n if (!options.compatibility.properties.ieFilters && isLegacyFilter(property)) {\n property.unused = true;\n continue;\n }\n\n if (property.block) {\n optimizeBody(rule, property.value[0][1], context);\n continue;\n }\n\n for (j = 0, m = property.value.length; j < m; j++) {\n type = property.value[j][0];\n value = property.value[j][1];\n\n if (type == Token.PROPERTY_BLOCK) {\n property.unused = true;\n context.warnings.push('Invalid value token at ' + formatPosition(value[0][1][2][0]) + '. Ignoring.');\n break;\n }\n\n if (startsAsUrl(value) && !context.validator.isUrl(value)) {\n property.unused = true;\n context.warnings.push('Broken URL \\'' + value + '\\' at ' + formatPosition(property.value[j][2][0]) + '. Ignoring.');\n break;\n }\n\n for (k = 0, n = valueOptimizers.length; k < n; k++) {\n value = valueOptimizers[k](name, value, options);\n }\n\n for (k = 0, n = pluginValueOptimizers.length; k < n; k++) {\n value = pluginValueOptimizers[k](name, value, options);\n }\n\n property.value[j][1] = value;\n }\n\n propertyOptimizer(serializedRule, property, options);\n\n for (j = 0, m = pluginPropertyOptimizers.length; j < m; j++) {\n pluginPropertyOptimizers[j](serializedRule, property, options);\n }\n }\n\n restoreFromOptimizing(_properties);\n removeUnused(_properties);\n removeComments(properties, options);\n}\n\nfunction removeComments(tokens, options) {\n var token;\n var i;\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n if (token[0] != Token.COMMENT) {\n continue;\n }\n\n optimizeComment(token, options);\n\n if (token[1].length === 0) {\n tokens.splice(i, 1);\n i--;\n }\n }\n}\n\nfunction optimizeComment(token, options) {\n if (token[1][2] == Marker.EXCLAMATION && (options.level[OptimizationLevel.One].specialComments == 'all' || options.commentsKept < options.level[OptimizationLevel.One].specialComments)) {\n options.commentsKept++;\n return;\n }\n\n token[1] = [];\n}\n\nfunction cleanupCharsets(tokens) {\n var hasCharset = false;\n\n for (var i = 0, l = tokens.length; i < l; i++) {\n var token = tokens[i];\n\n if (token[0] != Token.AT_RULE) { continue; }\n\n if (!CHARSET_REGEXP.test(token[1])) { continue; }\n\n if (hasCharset || token[1].indexOf(CHARSET_TOKEN) == -1) {\n tokens.splice(i, 1);\n i--;\n l--;\n } else {\n hasCharset = true;\n tokens.splice(i, 1);\n tokens.unshift([Token.AT_RULE, token[1].replace(CHARSET_REGEXP, CHARSET_TOKEN)]);\n }\n }\n}\n\nfunction buildUnitRegexp(options) {\n var units = ['px', 'em', 'ex', 'cm', 'mm', 'in', 'pt', 'pc', '%'];\n var otherUnits = ['ch', 'rem', 'vh', 'vm', 'vmax', 'vmin', 'vw'];\n\n otherUnits.forEach(function(unit) {\n if (options.compatibility.units[unit]) {\n units.push(unit);\n }\n });\n\n return new RegExp('(^|\\\\s|\\\\(|,)0(?:' + units.join('|') + ')(\\\\W|$)', 'g');\n}\n\nfunction buildPrecisionOptions(roundingPrecision) {\n var precisionOptions = {\n matcher: null,\n units: {}\n };\n var optimizable = [];\n var unit;\n var value;\n\n for (unit in roundingPrecision) {\n value = roundingPrecision[unit];\n\n if (value != DEFAULT_ROUNDING_PRECISION) {\n precisionOptions.units[unit] = {};\n precisionOptions.units[unit].value = value;\n precisionOptions.units[unit].multiplier = 10 ** value;\n\n optimizable.push(unit);\n }\n }\n\n if (optimizable.length > 0) {\n precisionOptions.enabled = true;\n precisionOptions.decimalPointMatcher = new RegExp('(\\\\d)\\\\.($|' + optimizable.join('|') + ')($|\\\\W)', 'g');\n precisionOptions.zeroMatcher = new RegExp('(\\\\d*)(\\\\.\\\\d+)(' + optimizable.join('|') + ')', 'g');\n }\n\n return precisionOptions;\n}\n\nfunction buildVariableOptimizers(options) {\n return options.level[OptimizationLevel.One].variableValueOptimizers.map(function(optimizer) {\n if (typeof (optimizer) == 'string') {\n return optimizers[optimizer] || noopValueOptimizer;\n }\n\n return optimizer;\n });\n}\n\nfunction level1Optimize(tokens, context) {\n var options = context.options;\n var levelOptions = options.level[OptimizationLevel.One];\n var ie7Hack = options.compatibility.selectors.ie7Hack;\n var adjacentSpace = options.compatibility.selectors.adjacentSpace;\n var spaceAfterClosingBrace = options.compatibility.properties.spaceAfterClosingBrace;\n var format = options.format;\n var mayHaveCharset = false;\n var afterRules = false;\n\n options.unitsRegexp = options.unitsRegexp || buildUnitRegexp(options);\n options.precision = options.precision || buildPrecisionOptions(levelOptions.roundingPrecision);\n options.commentsKept = options.commentsKept || 0;\n options.variableOptimizers = options.variableOptimizers || buildVariableOptimizers(options);\n\n for (var i = 0, l = tokens.length; i < l; i++) {\n var token = tokens[i];\n\n switch (token[0]) {\n case Token.AT_RULE:\n token[1] = isImport(token) && afterRules ? '' : token[1];\n token[1] = levelOptions.tidyAtRules ? tidyAtRule(token[1]) : token[1];\n mayHaveCharset = true;\n break;\n case Token.AT_RULE_BLOCK:\n optimizeBody(token[1], token[2], context);\n afterRules = true;\n break;\n case Token.NESTED_BLOCK:\n token[1] = levelOptions.tidyBlockScopes ? tidyBlock(token[1], spaceAfterClosingBrace) : token[1];\n level1Optimize(token[2], context);\n afterRules = true;\n break;\n case Token.COMMENT:\n optimizeComment(token, options);\n break;\n case Token.RULE:\n token[1] = levelOptions.tidySelectors\n ? tidyRules(token[1], !ie7Hack, adjacentSpace, format, context.warnings)\n : token[1];\n token[1] = token[1].length > 1 ? sortSelectors(token[1], levelOptions.selectorsSortingMethod) : token[1];\n optimizeBody(token[1], token[2], context);\n afterRules = true;\n break;\n }\n\n if (token[0] == Token.COMMENT\n && token[1].length === 0\n || levelOptions.removeEmpty\n && (token[1].length === 0 || (token[2] && token[2].length === 0))) {\n tokens.splice(i, 1);\n i--;\n l--;\n }\n }\n\n if (levelOptions.cleanupCharsets && mayHaveCharset) {\n cleanupCharsets(tokens);\n }\n\n return tokens;\n}\n\nmodule.exports = level1Optimize;\n","var Marker = require('../../tokenizer/marker');\nvar split = require('../../utils/split');\n\nvar DEEP_SELECTOR_PATTERN = /\\/deep\\//;\nvar DOUBLE_COLON_PATTERN = /^::/;\nvar VENDOR_PREFIXED_PATTERN = /:(-moz-|-ms-|-o-|-webkit-)/;\n\nvar NOT_PSEUDO = ':not';\nvar PSEUDO_CLASSES_WITH_ARGUMENTS = [\n ':dir',\n ':lang',\n ':not',\n ':nth-child',\n ':nth-last-child',\n ':nth-last-of-type',\n ':nth-of-type'\n];\nvar RELATION_PATTERN = /[>+~]/;\nvar UNMIXABLE_PSEUDO_CLASSES = [\n ':after',\n ':before',\n ':first-letter',\n ':first-line',\n ':lang'\n];\nvar UNMIXABLE_PSEUDO_ELEMENTS = [\n '::after',\n '::before',\n '::first-letter',\n '::first-line'\n];\n\nvar Level = {\n DOUBLE_QUOTE: 'double-quote',\n SINGLE_QUOTE: 'single-quote',\n ROOT: 'root'\n};\n\nfunction isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {\n var singleSelectors = split(selector, Marker.COMMA);\n var singleSelector;\n var i, l;\n\n for (i = 0, l = singleSelectors.length; i < l; i++) {\n singleSelector = singleSelectors[i];\n\n if (singleSelector.length === 0\n || isDeepSelector(singleSelector)\n || isVendorPrefixed(singleSelector)\n || (singleSelector.indexOf(Marker.COLON) > -1\n && !areMergeable(\n singleSelector,\n extractPseudoFrom(singleSelector),\n mergeablePseudoClasses,\n mergeablePseudoElements,\n multiplePseudoMerging\n ))) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepSelector(selector) {\n return DEEP_SELECTOR_PATTERN.test(selector);\n}\n\nfunction isVendorPrefixed(selector) {\n return VENDOR_PREFIXED_PATTERN.test(selector);\n}\n\nfunction extractPseudoFrom(selector) {\n var list = [];\n var character;\n var buffer = [];\n var level = Level.ROOT;\n var roundBracketLevel = 0;\n var isQuoted;\n var isEscaped;\n var isPseudo = false;\n var isRelation;\n var wasColon = false;\n var index;\n var len;\n\n for (index = 0, len = selector.length; index < len; index++) {\n character = selector[index];\n\n isRelation = !isEscaped && RELATION_PATTERN.test(character);\n isQuoted = level == Level.DOUBLE_QUOTE || level == Level.SINGLE_QUOTE;\n\n if (isEscaped) {\n buffer.push(character);\n } else if (character == Marker.DOUBLE_QUOTE && level == Level.ROOT) {\n buffer.push(character);\n level = Level.DOUBLE_QUOTE;\n } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {\n buffer.push(character);\n level = Level.ROOT;\n } else if (character == Marker.SINGLE_QUOTE && level == Level.ROOT) {\n buffer.push(character);\n level = Level.SINGLE_QUOTE;\n } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {\n buffer.push(character);\n level = Level.ROOT;\n } else if (isQuoted) {\n buffer.push(character);\n } else if (character == Marker.OPEN_ROUND_BRACKET) {\n buffer.push(character);\n roundBracketLevel++;\n } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1 && isPseudo) {\n buffer.push(character);\n list.push(buffer.join(''));\n roundBracketLevel--;\n buffer = [];\n isPseudo = false;\n } else if (character == Marker.CLOSE_ROUND_BRACKET) {\n buffer.push(character);\n roundBracketLevel--;\n } else if (character == Marker.COLON && roundBracketLevel === 0 && isPseudo && !wasColon) {\n list.push(buffer.join(''));\n buffer = [];\n buffer.push(character);\n } else if (character == Marker.COLON && roundBracketLevel === 0 && !wasColon) {\n buffer = [];\n buffer.push(character);\n isPseudo = true;\n } else if (character == Marker.SPACE && roundBracketLevel === 0 && isPseudo) {\n list.push(buffer.join(''));\n buffer = [];\n isPseudo = false;\n } else if (isRelation && roundBracketLevel === 0 && isPseudo) {\n list.push(buffer.join(''));\n buffer = [];\n isPseudo = false;\n } else {\n buffer.push(character);\n }\n\n isEscaped = character == Marker.BACK_SLASH;\n wasColon = character == Marker.COLON;\n }\n\n if (buffer.length > 0 && isPseudo) {\n list.push(buffer.join(''));\n }\n\n return list;\n}\n\nfunction areMergeable(selector, matches, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {\n return areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements)\n && needArguments(matches)\n && (matches.length < 2 || !someIncorrectlyChained(selector, matches))\n && (matches.length < 2 || multiplePseudoMerging && allMixable(matches));\n}\n\nfunction areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) {\n var match;\n var name;\n var i, l;\n\n for (i = 0, l = matches.length; i < l; i++) {\n match = matches[i];\n name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1\n ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET))\n : match;\n\n if (mergeablePseudoClasses.indexOf(name) === -1 && mergeablePseudoElements.indexOf(name) === -1) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction needArguments(matches) {\n var match;\n var name;\n var bracketOpensAt;\n var hasArguments;\n var i, l;\n\n for (i = 0, l = matches.length; i < l; i++) {\n match = matches[i];\n\n bracketOpensAt = match.indexOf(Marker.OPEN_ROUND_BRACKET);\n hasArguments = bracketOpensAt > -1;\n name = hasArguments\n ? match.substring(0, bracketOpensAt)\n : match;\n\n if (hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) == -1) {\n return false;\n }\n\n if (!hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) > -1) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction someIncorrectlyChained(selector, matches) {\n var positionInSelector = 0;\n var match;\n var matchAt;\n var nextMatch;\n var nextMatchAt;\n var name;\n var nextName;\n var areChained;\n var i, l;\n\n for (i = 0, l = matches.length; i < l; i++) {\n match = matches[i];\n nextMatch = matches[i + 1];\n\n if (!nextMatch) {\n break;\n }\n\n matchAt = selector.indexOf(match, positionInSelector);\n nextMatchAt = selector.indexOf(match, matchAt + 1);\n positionInSelector = nextMatchAt;\n areChained = matchAt + match.length == nextMatchAt;\n\n if (areChained) {\n name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1\n ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET))\n : match;\n nextName = nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET) > -1\n ? nextMatch.substring(0, nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET))\n : nextMatch;\n\n if (name != NOT_PSEUDO || nextName != NOT_PSEUDO) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction allMixable(matches) {\n var unmixableMatches = 0;\n var match;\n var i, l;\n\n for (i = 0, l = matches.length; i < l; i++) {\n match = matches[i];\n\n if (isPseudoElement(match)) {\n unmixableMatches += UNMIXABLE_PSEUDO_ELEMENTS.indexOf(match) > -1 ? 1 : 0;\n } else {\n unmixableMatches += UNMIXABLE_PSEUDO_CLASSES.indexOf(match) > -1 ? 1 : 0;\n }\n\n if (unmixableMatches > 1) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isPseudoElement(pseudo) {\n return DOUBLE_COLON_PATTERN.test(pseudo);\n}\n\nmodule.exports = isMergeable;\n","var Marker = require('../../../tokenizer/marker');\n\nfunction everyValuesPair(fn, left, right) {\n var leftSize = left.value.length;\n var rightSize = right.value.length;\n var total = Math.max(leftSize, rightSize);\n var lowerBound = Math.min(leftSize, rightSize) - 1;\n var leftValue;\n var rightValue;\n var position;\n\n for (position = 0; position < total; position++) {\n leftValue = left.value[position] && left.value[position][1] || leftValue;\n rightValue = right.value[position] && right.value[position][1] || rightValue;\n\n if (leftValue == Marker.COMMA || rightValue == Marker.COMMA) {\n continue;\n }\n\n if (!fn(leftValue, rightValue, position, position <= lowerBound)) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = everyValuesPair;\n","function hasInherit(property) {\n for (var i = property.value.length - 1; i >= 0; i--) {\n if (property.value[i][1] == 'inherit') { return true; }\n }\n\n return false;\n}\n\nmodule.exports = hasInherit;\n","function hasSameValues(property) {\n var firstValue = property.value[0][1];\n var i, l;\n\n for (i = 1, l = property.value.length; i < l; i++) {\n if (property.value[i][1] != firstValue) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = hasSameValues;\n","var configuration = require('../../configuration');\nvar InvalidPropertyError = require('../../invalid-property-error');\n\nfunction populateComponents(properties, validator, warnings) {\n var component;\n var j, m;\n\n for (var i = properties.length - 1; i >= 0; i--) {\n var property = properties[i];\n var descriptor = configuration[property.name];\n\n if (!property.dynamic && descriptor && descriptor.shorthand) {\n if (onlyValueIsVariable(property, validator) || moreThanOneValueIsVariable(property, validator)) {\n property.optimizable = false;\n continue;\n }\n\n property.shorthand = true;\n property.dirty = true;\n\n try {\n property.components = descriptor.breakUp(property, configuration, validator);\n\n if (descriptor.shorthandComponents) {\n for (j = 0, m = property.components.length; j < m; j++) {\n component = property.components[j];\n component.components = configuration[component.name].breakUp(component, configuration, validator);\n }\n }\n } catch (e) {\n if (e instanceof InvalidPropertyError) {\n property.components = []; // this will set property.unused to true below\n warnings.push(e.message);\n } else {\n throw e;\n }\n }\n\n if (property.components.length > 0) {\n property.multiplex = property.components[0].multiplex;\n } else {\n property.unused = true;\n }\n }\n }\n}\n\nfunction onlyValueIsVariable(property, validator) {\n return property.value.length == 1 && validator.isVariable(property.value[0][1]);\n}\n\nfunction moreThanOneValueIsVariable(property, validator) {\n return property.value.length > 1\n && property.value.filter(\n function(value) {\n return validator.isVariable(value[1]);\n }\n ).length > 1;\n}\n\nmodule.exports = populateComponents;\n","var configuration = require('../configuration');\n\nfunction restoreWithComponents(property) {\n var descriptor = configuration[property.name];\n\n if (descriptor && descriptor.shorthand) {\n return descriptor.restore(property, configuration);\n }\n return property.value;\n}\n\nmodule.exports = restoreWithComponents;\n","var everyValuesPair = require('./every-values-pair');\nvar hasInherit = require('./has-inherit');\nvar hasSameValues = require('./has-same-values');\nvar populateComponents = require('./populate-components');\n\nvar configuration = require('../../configuration');\nvar deepClone = require('../../clone').deep;\nvar restoreWithComponents = require('../restore-with-components');\n\nvar restoreFromOptimizing = require('../../restore-from-optimizing');\nvar wrapSingle = require('../../wrap-for-optimizing').single;\n\nvar serializeBody = require('../../../writer/one-time').body;\nvar Token = require('../../../tokenizer/token');\n\nfunction mergeIntoShorthands(properties, validator) {\n var candidates = {};\n var descriptor;\n var componentOf;\n var property;\n var i, l;\n var j, m;\n\n // there is no shorthand property made up of less than 3 longhands\n if (properties.length < 3) {\n return;\n }\n\n for (i = 0, l = properties.length; i < l; i++) {\n property = properties[i];\n descriptor = configuration[property.name];\n\n if (property.dynamic) {\n continue;\n }\n\n if (property.unused) {\n continue;\n }\n\n if (property.hack) {\n continue;\n }\n\n if (property.block) {\n continue;\n }\n\n if (descriptor && descriptor.singleTypeComponents && !hasSameValues(property)) {\n continue;\n }\n\n invalidateOrCompact(properties, i, candidates, validator);\n\n if (descriptor && descriptor.componentOf) {\n for (j = 0, m = descriptor.componentOf.length; j < m; j++) {\n componentOf = descriptor.componentOf[j];\n\n candidates[componentOf] = candidates[componentOf] || {};\n candidates[componentOf][property.name] = property;\n }\n }\n }\n\n invalidateOrCompact(properties, i, candidates, validator);\n}\n\nfunction invalidateOrCompact(properties, position, candidates, validator) {\n var invalidatedBy = properties[position];\n var shorthandName;\n var shorthandDescriptor;\n var candidateComponents;\n var replacedCandidates = [];\n var i;\n\n for (shorthandName in candidates) {\n if (undefined !== invalidatedBy && shorthandName == invalidatedBy.name) {\n continue;\n }\n\n shorthandDescriptor = configuration[shorthandName];\n candidateComponents = candidates[shorthandName];\n if (invalidatedBy && invalidates(candidates, shorthandName, invalidatedBy)) {\n delete candidates[shorthandName];\n continue;\n }\n\n if (shorthandDescriptor.components.length > Object.keys(candidateComponents).length) {\n continue;\n }\n\n if (mixedImportance(candidateComponents)) {\n continue;\n }\n\n if (!overridable(candidateComponents, shorthandName, validator)) {\n continue;\n }\n\n if (!mergeable(candidateComponents)) {\n continue;\n }\n\n if (mixedInherit(candidateComponents)) {\n replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator);\n } else {\n replaceWithShorthand(properties, candidateComponents, shorthandName, validator);\n }\n\n replacedCandidates.push(shorthandName);\n }\n\n for (i = replacedCandidates.length - 1; i >= 0; i--) {\n delete candidates[replacedCandidates[i]];\n }\n}\n\nfunction invalidates(candidates, shorthandName, invalidatedBy) {\n var shorthandDescriptor = configuration[shorthandName];\n var invalidatedByDescriptor = configuration[invalidatedBy.name];\n var componentName;\n\n if ('overridesShorthands' in shorthandDescriptor && shorthandDescriptor.overridesShorthands.indexOf(invalidatedBy.name) > -1) {\n return true;\n }\n\n if (invalidatedByDescriptor && 'componentOf' in invalidatedByDescriptor) {\n for (componentName in candidates[shorthandName]) {\n if (invalidatedByDescriptor.componentOf.indexOf(componentName) > -1) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction mixedImportance(components) {\n var important;\n var componentName;\n\n for (componentName in components) {\n if (undefined !== important && components[componentName].important != important) {\n return true;\n }\n\n important = components[componentName].important;\n }\n\n return false;\n}\n\nfunction overridable(components, shorthandName, validator) {\n var descriptor = configuration[shorthandName];\n var newValuePlaceholder = [\n Token.PROPERTY,\n [Token.PROPERTY_NAME, shorthandName],\n [Token.PROPERTY_VALUE, descriptor.defaultValue]\n ];\n var newProperty = wrapSingle(newValuePlaceholder);\n var component;\n var mayOverride;\n var i, l;\n\n populateComponents([newProperty], validator, []);\n\n for (i = 0, l = descriptor.components.length; i < l; i++) {\n component = components[descriptor.components[i]];\n mayOverride = configuration[component.name].canOverride || sameValue;\n\n if (!everyValuesPair(mayOverride.bind(null, validator), newProperty.components[i], component)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction sameValue(_validator, value1, value2) {\n return value1 === value2;\n}\n\nfunction mergeable(components) {\n var lastCount = null;\n var currentCount;\n var componentName;\n var component;\n var descriptor;\n var values;\n\n for (componentName in components) {\n component = components[componentName];\n descriptor = configuration[componentName];\n\n if (!('restore' in descriptor)) {\n continue;\n }\n\n restoreFromOptimizing([component.all[component.position]], restoreWithComponents);\n values = descriptor.restore(component, configuration);\n\n currentCount = values.length;\n\n if (lastCount !== null && currentCount !== lastCount) {\n return false;\n }\n\n lastCount = currentCount;\n }\n\n return true;\n}\n\nfunction mixedInherit(components) {\n var componentName;\n var lastValue = null;\n var currentValue;\n\n for (componentName in components) {\n currentValue = hasInherit(components[componentName]);\n\n if (lastValue !== null && lastValue !== currentValue) {\n return true;\n }\n\n lastValue = currentValue;\n }\n\n return false;\n}\n\nfunction replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator) {\n var viaLonghands = buildSequenceWithInheritLonghands(candidateComponents, shorthandName, validator);\n var viaShorthand = buildSequenceWithInheritShorthand(candidateComponents, shorthandName, validator);\n var longhandTokensSequence = viaLonghands[0];\n var shorthandTokensSequence = viaShorthand[0];\n var isLonghandsShorter = serializeBody(longhandTokensSequence).length < serializeBody(shorthandTokensSequence).length;\n var newTokensSequence = isLonghandsShorter ? longhandTokensSequence : shorthandTokensSequence;\n var newProperty = isLonghandsShorter ? viaLonghands[1] : viaShorthand[1];\n var newComponents = isLonghandsShorter ? viaLonghands[2] : viaShorthand[2];\n var lastComponent = candidateComponents[Object.keys(candidateComponents).pop()];\n var all = lastComponent.all;\n var insertAt = lastComponent.position;\n var componentName;\n var oldComponent;\n var newComponent;\n var newToken;\n\n newProperty.position = insertAt;\n newProperty.shorthand = true;\n newProperty.important = lastComponent.important;\n newProperty.multiplex = false;\n newProperty.dirty = true;\n newProperty.all = all;\n newProperty.all[insertAt] = newTokensSequence[0];\n\n properties.splice(insertAt, 1, newProperty);\n\n for (componentName in candidateComponents) {\n oldComponent = candidateComponents[componentName];\n oldComponent.unused = true;\n\n newProperty.multiplex = newProperty.multiplex || oldComponent.multiplex;\n\n if (oldComponent.name in newComponents) {\n newComponent = newComponents[oldComponent.name];\n newToken = findTokenIn(newTokensSequence, componentName);\n\n newComponent.position = all.length;\n newComponent.all = all;\n newComponent.all.push(newToken);\n\n properties.push(newComponent);\n }\n }\n}\n\nfunction buildSequenceWithInheritLonghands(components, shorthandName, validator) {\n var tokensSequence = [];\n var inheritComponents = {};\n var nonInheritComponents = {};\n var descriptor = configuration[shorthandName];\n var shorthandToken = [\n Token.PROPERTY,\n [Token.PROPERTY_NAME, shorthandName],\n [Token.PROPERTY_VALUE, descriptor.defaultValue]\n ];\n var newProperty = wrapSingle(shorthandToken);\n var component;\n var longhandToken;\n var newComponent;\n var nameMetadata;\n var i, l;\n\n populateComponents([newProperty], validator, []);\n\n for (i = 0, l = descriptor.components.length; i < l; i++) {\n component = components[descriptor.components[i]];\n\n if (hasInherit(component)) {\n longhandToken = component.all[component.position].slice(0, 2);\n Array.prototype.push.apply(longhandToken, component.value);\n tokensSequence.push(longhandToken);\n\n newComponent = deepClone(component);\n newComponent.value = inferComponentValue(components, newComponent.name);\n\n newProperty.components[i] = newComponent;\n inheritComponents[component.name] = deepClone(component);\n } else {\n newComponent = deepClone(component);\n newComponent.all = component.all;\n newProperty.components[i] = newComponent;\n\n nonInheritComponents[component.name] = component;\n }\n }\n\n newProperty.important = components[Object.keys(components).pop()].important;\n\n nameMetadata = joinMetadata(nonInheritComponents, 1);\n shorthandToken[1].push(nameMetadata);\n\n restoreFromOptimizing([newProperty], restoreWithComponents);\n\n shorthandToken = shorthandToken.slice(0, 2);\n Array.prototype.push.apply(shorthandToken, newProperty.value);\n\n tokensSequence.unshift(shorthandToken);\n\n return [tokensSequence, newProperty, inheritComponents];\n}\n\nfunction inferComponentValue(components, propertyName) {\n var descriptor = configuration[propertyName];\n\n if ('oppositeTo' in descriptor) {\n return components[descriptor.oppositeTo].value;\n }\n return [[Token.PROPERTY_VALUE, descriptor.defaultValue]];\n}\n\nfunction joinMetadata(components, at) {\n var metadata = [];\n var component;\n var originalValue;\n var componentMetadata;\n var componentName;\n\n for (componentName in components) {\n component = components[componentName];\n originalValue = component.all[component.position];\n componentMetadata = originalValue[at][originalValue[at].length - 1];\n\n Array.prototype.push.apply(metadata, componentMetadata);\n }\n\n return metadata.sort(metadataSorter);\n}\n\nfunction metadataSorter(metadata1, metadata2) {\n var line1 = metadata1[0];\n var line2 = metadata2[0];\n var column1 = metadata1[1];\n var column2 = metadata2[1];\n\n if (line1 < line2) {\n return -1;\n } if (line1 === line2) {\n return column1 < column2 ? -1 : 1;\n }\n return 1;\n}\n\nfunction buildSequenceWithInheritShorthand(components, shorthandName, validator) {\n var tokensSequence = [];\n var inheritComponents = {};\n var nonInheritComponents = {};\n var descriptor = configuration[shorthandName];\n var shorthandToken = [\n Token.PROPERTY,\n [Token.PROPERTY_NAME, shorthandName],\n [Token.PROPERTY_VALUE, 'inherit']\n ];\n var newProperty = wrapSingle(shorthandToken);\n var component;\n var longhandToken;\n var nameMetadata;\n var valueMetadata;\n var i, l;\n\n populateComponents([newProperty], validator, []);\n\n for (i = 0, l = descriptor.components.length; i < l; i++) {\n component = components[descriptor.components[i]];\n\n if (hasInherit(component)) {\n inheritComponents[component.name] = component;\n } else {\n longhandToken = component.all[component.position].slice(0, 2);\n Array.prototype.push.apply(longhandToken, component.value);\n tokensSequence.push(longhandToken);\n\n nonInheritComponents[component.name] = deepClone(component);\n }\n }\n\n nameMetadata = joinMetadata(inheritComponents, 1);\n shorthandToken[1].push(nameMetadata);\n\n valueMetadata = joinMetadata(inheritComponents, 2);\n shorthandToken[2].push(valueMetadata);\n\n tokensSequence.unshift(shorthandToken);\n\n return [tokensSequence, newProperty, nonInheritComponents];\n}\n\nfunction findTokenIn(tokens, componentName) {\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n if (tokens[i][1][1] == componentName) {\n return tokens[i];\n }\n }\n}\n\nfunction replaceWithShorthand(properties, candidateComponents, shorthandName, validator) {\n var descriptor = configuration[shorthandName];\n var nameMetadata;\n var valueMetadata;\n var newValuePlaceholder = [\n Token.PROPERTY,\n [Token.PROPERTY_NAME, shorthandName],\n [Token.PROPERTY_VALUE, descriptor.defaultValue]\n ];\n var all;\n var insertAt = inferInsertAtFrom(properties, candidateComponents, shorthandName);\n\n var newProperty = wrapSingle(newValuePlaceholder);\n newProperty.shorthand = true;\n newProperty.dirty = true;\n newProperty.multiplex = false;\n\n populateComponents([newProperty], validator, []);\n\n for (var i = 0, l = descriptor.components.length; i < l; i++) {\n var component = candidateComponents[descriptor.components[i]];\n\n newProperty.components[i] = deepClone(component);\n newProperty.important = component.important;\n newProperty.multiplex = newProperty.multiplex || component.multiplex;\n\n all = component.all;\n }\n\n for (var componentName in candidateComponents) {\n candidateComponents[componentName].unused = true;\n }\n\n nameMetadata = joinMetadata(candidateComponents, 1);\n newValuePlaceholder[1].push(nameMetadata);\n\n valueMetadata = joinMetadata(candidateComponents, 2);\n newValuePlaceholder[2].push(valueMetadata);\n\n newProperty.position = insertAt;\n newProperty.all = all;\n newProperty.all[insertAt] = newValuePlaceholder;\n\n properties.splice(insertAt, 1, newProperty);\n}\n\nfunction inferInsertAtFrom(properties, candidateComponents, shorthandName) {\n var candidateComponentNames = Object.keys(candidateComponents);\n var firstCandidatePosition = candidateComponents[candidateComponentNames[0]].position;\n var lastCandidatePosition = candidateComponents[candidateComponentNames[candidateComponentNames.length - 1]].position;\n\n if (shorthandName == 'border' && traversesVia(properties.slice(firstCandidatePosition, lastCandidatePosition), 'border-image')) {\n return firstCandidatePosition;\n }\n return lastCandidatePosition;\n}\n\nfunction traversesVia(properties, propertyName) {\n for (var i = properties.length - 1; i >= 0; i--) {\n if (properties[i].name == propertyName) {\n return true;\n }\n }\n\n return false;\n}\n\nmodule.exports = mergeIntoShorthands;\n","function hasUnset(property) {\n for (var i = property.value.length - 1; i >= 0; i--) {\n if (property.value[i][1] == 'unset') { return true; }\n }\n\n return false;\n}\n\nmodule.exports = hasUnset;\n","var configuration = require('../../configuration');\n\nfunction findComponentIn(shorthand, longhand) {\n var comparator = nameComparator(longhand);\n\n return findInDirectComponents(shorthand, comparator) || findInSubComponents(shorthand, comparator);\n}\n\nfunction nameComparator(to) {\n return function(property) {\n return to.name === property.name;\n };\n}\n\nfunction findInDirectComponents(shorthand, comparator) {\n return shorthand.components.filter(comparator)[0];\n}\n\nfunction findInSubComponents(shorthand, comparator) {\n var shorthandComponent;\n var longhandMatch;\n var i, l;\n\n if (!configuration[shorthand.name].shorthandComponents) {\n return;\n }\n\n for (i = 0, l = shorthand.components.length; i < l; i++) {\n shorthandComponent = shorthand.components[i];\n longhandMatch = findInDirectComponents(shorthandComponent, comparator);\n\n if (longhandMatch) {\n return longhandMatch;\n }\n }\n}\n\nmodule.exports = findComponentIn;\n","var configuration = require('../../configuration');\n\nfunction isComponentOf(property1, property2, shallow) {\n return isDirectComponentOf(property1, property2)\n || !shallow && !!configuration[property1.name].shorthandComponents && isSubComponentOf(property1, property2);\n}\n\nfunction isDirectComponentOf(property1, property2) {\n var descriptor = configuration[property1.name];\n\n return 'components' in descriptor && descriptor.components.indexOf(property2.name) > -1;\n}\n\nfunction isSubComponentOf(property1, property2) {\n return property1\n .components\n .some(function(component) {\n return isDirectComponentOf(component, property2);\n });\n}\n\nmodule.exports = isComponentOf;\n","var Marker = require('../../../tokenizer/marker');\n\nfunction isMergeableShorthand(shorthand) {\n if (shorthand.name != 'font') {\n return true;\n }\n\n return shorthand.value[0][1].indexOf(Marker.INTERNAL) == -1;\n}\n\nmodule.exports = isMergeableShorthand;\n","var configuration = require('../../configuration');\n\nfunction overridesNonComponentShorthand(property1, property2) {\n return property1.name in configuration\n && 'overridesShorthands' in configuration[property1.name]\n && configuration[property1.name].overridesShorthands.indexOf(property2.name) > -1;\n}\n\nmodule.exports = overridesNonComponentShorthand;\n","var hasInherit = require('./has-inherit');\nvar hasUnset = require('./has-unset');\nvar everyValuesPair = require('./every-values-pair');\nvar findComponentIn = require('./find-component-in');\nvar isComponentOf = require('./is-component-of');\nvar isMergeableShorthand = require('./is-mergeable-shorthand');\nvar overridesNonComponentShorthand = require('./overrides-non-component-shorthand');\nvar sameVendorPrefixesIn = require('./../../vendor-prefixes').same;\n\nvar configuration = require('../../configuration');\nvar deepClone = require('../../clone').deep;\nvar restoreWithComponents = require('../restore-with-components');\nvar shallowClone = require('../../clone').shallow;\n\nvar restoreFromOptimizing = require('../../restore-from-optimizing');\n\nvar Token = require('../../../tokenizer/token');\nvar Marker = require('../../../tokenizer/marker');\n\nvar serializeProperty = require('../../../writer/one-time').property;\n\nfunction sameValue(_validator, value1, value2) {\n return value1 === value2;\n}\n\nfunction wouldBreakCompatibility(property, validator) {\n for (var i = 0; i < property.components.length; i++) {\n var component = property.components[i];\n var descriptor = configuration[component.name];\n var canOverride = descriptor && descriptor.canOverride || sameValue;\n\n var _component = shallowClone(component);\n _component.value = [[Token.PROPERTY_VALUE, descriptor.defaultValue]];\n\n if (!everyValuesPair(canOverride.bind(null, validator), _component, component)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction overrideIntoMultiplex(property, by) {\n by.unused = true;\n\n turnIntoMultiplex(by, multiplexSize(property));\n property.value = by.value;\n}\n\nfunction overrideByMultiplex(property, by) {\n by.unused = true;\n property.multiplex = true;\n property.value = by.value;\n}\n\nfunction overrideSimple(property, by) {\n by.unused = true;\n property.value = by.value;\n}\n\nfunction override(property, by) {\n if (by.multiplex) {\n overrideByMultiplex(property, by);\n } else if (property.multiplex) {\n overrideIntoMultiplex(property, by);\n } else {\n overrideSimple(property, by);\n }\n}\n\nfunction overrideShorthand(property, by) {\n by.unused = true;\n\n for (var i = 0, l = property.components.length; i < l; i++) {\n override(property.components[i], by.components[i]);\n }\n}\n\nfunction turnIntoMultiplex(property, size) {\n property.multiplex = true;\n\n if (configuration[property.name].shorthand) {\n turnShorthandValueIntoMultiplex(property, size);\n } else {\n turnLonghandValueIntoMultiplex(property, size);\n }\n}\n\nfunction turnShorthandValueIntoMultiplex(property, size) {\n var component;\n var i, l;\n\n for (i = 0, l = property.components.length; i < l; i++) {\n component = property.components[i];\n\n if (!component.multiplex) {\n turnLonghandValueIntoMultiplex(component, size);\n }\n }\n}\n\nfunction turnLonghandValueIntoMultiplex(property, size) {\n var descriptor = configuration[property.name];\n var withRealValue = descriptor.intoMultiplexMode == 'real';\n var withValue = descriptor.intoMultiplexMode == 'real'\n ? property.value.slice(0)\n : (descriptor.intoMultiplexMode == 'placeholder' ? descriptor.placeholderValue : descriptor.defaultValue);\n var i = multiplexSize(property);\n var j;\n var m = withValue.length;\n\n for (; i < size; i++) {\n property.value.push([Token.PROPERTY_VALUE, Marker.COMMA]);\n\n if (Array.isArray(withValue)) {\n for (j = 0; j < m; j++) {\n property.value.push(withRealValue ? withValue[j] : [Token.PROPERTY_VALUE, withValue[j]]);\n }\n } else {\n property.value.push(withRealValue ? withValue : [Token.PROPERTY_VALUE, withValue]);\n }\n }\n}\n\nfunction multiplexSize(component) {\n var size = 0;\n\n for (var i = 0, l = component.value.length; i < l; i++) {\n if (component.value[i][1] == Marker.COMMA) { size++; }\n }\n\n return size + 1;\n}\n\nfunction lengthOf(property) {\n var fakeAsArray = [\n Token.PROPERTY,\n [Token.PROPERTY_NAME, property.name]\n ].concat(property.value);\n return serializeProperty([fakeAsArray], 0).length;\n}\n\nfunction moreSameShorthands(properties, startAt, name) {\n // Since we run the main loop in `compactOverrides` backwards, at this point some\n // properties may not be marked as unused.\n // We should consider reverting the order if possible\n var count = 0;\n\n for (var i = startAt; i >= 0; i--) {\n if (properties[i].name == name && !properties[i].unused) { count++; }\n if (count > 1) { break; }\n }\n\n return count > 1;\n}\n\nfunction overridingFunction(shorthand, validator) {\n for (var i = 0, l = shorthand.components.length; i < l; i++) {\n if (!anyValue(validator.isUrl, shorthand.components[i])\n && anyValue(validator.isFunction, shorthand.components[i])) { return true; }\n }\n\n return false;\n}\n\nfunction anyValue(fn, property) {\n for (var i = 0, l = property.value.length; i < l; i++) {\n if (property.value[i][1] == Marker.COMMA) { continue; }\n\n if (fn(property.value[i][1])) { return true; }\n }\n\n return false;\n}\n\nfunction wouldResultInLongerValue(left, right) {\n if (!left.multiplex && !right.multiplex || left.multiplex && right.multiplex) { return false; }\n\n var multiplex = left.multiplex ? left : right;\n var simple = left.multiplex ? right : left;\n var component;\n\n var multiplexClone = deepClone(multiplex);\n restoreFromOptimizing([multiplexClone], restoreWithComponents);\n\n var simpleClone = deepClone(simple);\n restoreFromOptimizing([simpleClone], restoreWithComponents);\n\n var lengthBefore = lengthOf(multiplexClone) + 1 + lengthOf(simpleClone);\n\n if (left.multiplex) {\n component = findComponentIn(multiplexClone, simpleClone);\n overrideIntoMultiplex(component, simpleClone);\n } else {\n component = findComponentIn(simpleClone, multiplexClone);\n turnIntoMultiplex(simpleClone, multiplexSize(multiplexClone));\n overrideByMultiplex(component, multiplexClone);\n }\n\n restoreFromOptimizing([simpleClone], restoreWithComponents);\n\n var lengthAfter = lengthOf(simpleClone);\n\n return lengthBefore <= lengthAfter;\n}\n\nfunction isCompactable(property) {\n return property.name in configuration;\n}\n\nfunction noneOverrideHack(left, right) {\n return !left.multiplex\n && (left.name == 'background' || left.name == 'background-image')\n && right.multiplex\n && (right.name == 'background' || right.name == 'background-image')\n && anyLayerIsNone(right.value);\n}\n\nfunction anyLayerIsNone(values) {\n var layers = intoLayers(values);\n\n for (var i = 0, l = layers.length; i < l; i++) {\n if (layers[i].length == 1 && layers[i][0][1] == 'none') { return true; }\n }\n\n return false;\n}\n\nfunction intoLayers(values) {\n var layers = [];\n\n for (var i = 0, layer = [], l = values.length; i < l; i++) {\n var value = values[i];\n if (value[1] == Marker.COMMA) {\n layers.push(layer);\n layer = [];\n } else {\n layer.push(value);\n }\n }\n\n layers.push(layer);\n return layers;\n}\n\nfunction overrideProperties(properties, withMerging, compatibility, validator) {\n var mayOverride, right, left, component;\n var overriddenComponents;\n var overriddenComponent;\n var overridingComponent;\n var overridable;\n var i, j, k;\n\n propertyLoop:\n for (i = properties.length - 1; i >= 0; i--) {\n right = properties[i];\n\n if (!isCompactable(right)) { continue; }\n\n if (right.block) { continue; }\n\n mayOverride = configuration[right.name].canOverride || sameValue;\n\n traverseLoop:\n for (j = i - 1; j >= 0; j--) {\n left = properties[j];\n\n if (!isCompactable(left)) { continue; }\n\n if (left.block) { continue; }\n\n if (left.dynamic || right.dynamic) { continue; }\n\n if (left.unused || right.unused) { continue; }\n\n if (left.hack && !right.hack && !right.important || !left.hack && !left.important && right.hack) { continue; }\n\n if (left.important == right.important && left.hack[0] != right.hack[0]) { continue; }\n\n if (left.important == right.important\n && (left.hack[0] != right.hack[0] || (left.hack[1] && left.hack[1] != right.hack[1]))) { continue; }\n\n if (hasInherit(right)) { continue; }\n\n if (noneOverrideHack(left, right)) { continue; }\n\n if (right.shorthand && isComponentOf(right, left)) {\n // maybe `left` can be overridden by `right` which is a shorthand?\n if (!right.important && left.important) { continue; }\n\n if (!sameVendorPrefixesIn([left], right.components)) { continue; }\n\n if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) { continue; }\n\n if (!isMergeableShorthand(right)) {\n left.unused = true;\n continue;\n }\n\n component = findComponentIn(right, left);\n mayOverride = configuration[left.name].canOverride || sameValue;\n if (everyValuesPair(mayOverride.bind(null, validator), left, component)) {\n left.unused = true;\n }\n } else if (right.shorthand && overridesNonComponentShorthand(right, left)) {\n // `right` is a shorthand while `left` can be overriden by it, think `border` and `border-top`\n if (!right.important && left.important) {\n continue;\n }\n\n if (!sameVendorPrefixesIn([left], right.components)) {\n continue;\n }\n\n if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) {\n continue;\n }\n\n overriddenComponents = left.shorthand\n ? left.components\n : [left];\n\n for (k = overriddenComponents.length - 1; k >= 0; k--) {\n overriddenComponent = overriddenComponents[k];\n overridingComponent = findComponentIn(right, overriddenComponent);\n mayOverride = configuration[overriddenComponent.name].canOverride || sameValue;\n\n if (!everyValuesPair(mayOverride.bind(null, validator), left, overridingComponent)) {\n continue traverseLoop;\n }\n }\n\n left.unused = true;\n } else if (withMerging && left.shorthand && !right.shorthand && isComponentOf(left, right, true)) {\n // maybe `right` can be pulled into `left` which is a shorthand?\n if (right.important && !left.important) { continue; }\n\n if (!right.important && left.important) {\n right.unused = true;\n continue;\n }\n\n // Pending more clever algorithm in #527\n if (moreSameShorthands(properties, i - 1, left.name)) { continue; }\n\n if (overridingFunction(left, validator)) { continue; }\n\n if (!isMergeableShorthand(left)) { continue; }\n\n if (hasUnset(left) || hasUnset(right)) { continue; }\n\n component = findComponentIn(left, right);\n if (everyValuesPair(mayOverride.bind(null, validator), component, right)) {\n var disabledBackgroundMerging = !compatibility.properties.backgroundClipMerging && component.name.indexOf('background-clip') > -1\n || !compatibility.properties.backgroundOriginMerging && component.name.indexOf('background-origin') > -1\n || !compatibility.properties.backgroundSizeMerging && component.name.indexOf('background-size') > -1;\n var nonMergeableValue = configuration[right.name].nonMergeableValue === right.value[0][1];\n\n if (disabledBackgroundMerging || nonMergeableValue) { continue; }\n\n if (!compatibility.properties.merging && wouldBreakCompatibility(left, validator)) { continue; }\n\n if (component.value[0][1] != right.value[0][1] && (hasInherit(left) || hasInherit(right))) { continue; }\n\n if (wouldResultInLongerValue(left, right)) { continue; }\n\n if (!left.multiplex && right.multiplex) { turnIntoMultiplex(left, multiplexSize(right)); }\n\n override(component, right);\n left.dirty = true;\n }\n } else if (withMerging && left.shorthand && right.shorthand && left.name == right.name) {\n // merge if all components can be merged\n\n if (!left.multiplex && right.multiplex) { continue; }\n\n if (!right.important && left.important) {\n right.unused = true;\n continue propertyLoop;\n }\n\n if (right.important && !left.important) {\n left.unused = true;\n continue;\n }\n\n if (!isMergeableShorthand(right)) {\n left.unused = true;\n continue;\n }\n\n for (k = left.components.length - 1; k >= 0; k--) {\n var leftComponent = left.components[k];\n var rightComponent = right.components[k];\n\n mayOverride = configuration[leftComponent.name].canOverride || sameValue;\n if (!everyValuesPair(mayOverride.bind(null, validator), leftComponent, rightComponent)) {\n continue propertyLoop;\n }\n }\n\n overrideShorthand(left, right);\n left.dirty = true;\n } else if (withMerging && left.shorthand && right.shorthand && isComponentOf(left, right)) {\n // border is a shorthand but any of its components is a shorthand too\n\n if (!left.important && right.important) { continue; }\n\n component = findComponentIn(left, right);\n mayOverride = configuration[right.name].canOverride || sameValue;\n if (!everyValuesPair(mayOverride.bind(null, validator), component, right)) { continue; }\n\n if (left.important && !right.important) {\n right.unused = true;\n continue;\n }\n\n var rightRestored = configuration[right.name].restore(right, configuration);\n if (rightRestored.length > 1) { continue; }\n\n component = findComponentIn(left, right);\n override(component, right);\n right.dirty = true;\n } else if (left.name == right.name) {\n // two non-shorthands should be merged based on understandability\n overridable = true;\n\n if (right.shorthand) {\n for (k = right.components.length - 1; k >= 0 && overridable; k--) {\n overriddenComponent = left.components[k];\n overridingComponent = right.components[k];\n mayOverride = configuration[overridingComponent.name].canOverride || sameValue;\n\n overridable = everyValuesPair(mayOverride.bind(null, validator), overriddenComponent, overridingComponent);\n }\n } else {\n mayOverride = configuration[right.name].canOverride || sameValue;\n overridable = everyValuesPair(mayOverride.bind(null, validator), left, right);\n }\n\n if (left.important && !right.important && overridable) {\n right.unused = true;\n continue;\n }\n\n if (!left.important && right.important && overridable) {\n left.unused = true;\n continue;\n }\n\n if (!overridable) {\n continue;\n }\n\n left.unused = true;\n }\n }\n }\n}\n\nmodule.exports = overrideProperties;\n","var mergeIntoShorthands = require('./merge-into-shorthands');\nvar overrideProperties = require('./override-properties');\nvar populateComponents = require('./populate-components');\n\nvar restoreWithComponents = require('../restore-with-components');\n\nvar wrapForOptimizing = require('../../wrap-for-optimizing').all;\nvar removeUnused = require('../../remove-unused');\nvar restoreFromOptimizing = require('../../restore-from-optimizing');\n\nvar OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;\n\nfunction optimizeProperties(properties, withOverriding, withMerging, context) {\n var levelOptions = context.options.level[OptimizationLevel.Two];\n var _properties = wrapForOptimizing(properties, levelOptions.skipProperties);\n var _property;\n var i, l;\n\n populateComponents(_properties, context.validator, context.warnings);\n\n for (i = 0, l = _properties.length; i < l; i++) {\n _property = _properties[i];\n if (_property.block) {\n optimizeProperties(_property.value[0][1], withOverriding, withMerging, context);\n }\n }\n\n if (withMerging && levelOptions.mergeIntoShorthands) {\n mergeIntoShorthands(_properties, context.validator);\n }\n\n if (withOverriding && levelOptions.overrideProperties) {\n overrideProperties(_properties, withMerging, context.options.compatibility, context.validator);\n }\n\n restoreFromOptimizing(_properties, restoreWithComponents);\n removeUnused(_properties);\n}\n\nmodule.exports = optimizeProperties;\n","var isMergeable = require('./is-mergeable');\n\nvar optimizeProperties = require('./properties/optimize');\n\nvar sortSelectors = require('../level-1/sort-selectors');\nvar tidyRules = require('../level-1/tidy-rules');\n\nvar OptimizationLevel = require('../../options/optimization-level').OptimizationLevel;\n\nvar serializeBody = require('../../writer/one-time').body;\nvar serializeRules = require('../../writer/one-time').rules;\n\nvar Token = require('../../tokenizer/token');\n\nfunction mergeAdjacent(tokens, context) {\n var lastToken = [null, [], []];\n var options = context.options;\n var adjacentSpace = options.compatibility.selectors.adjacentSpace;\n var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod;\n var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;\n var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;\n var mergeLimit = options.compatibility.selectors.mergeLimit;\n var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;\n\n for (var i = 0, l = tokens.length; i < l; i++) {\n var token = tokens[i];\n\n if (token[0] != Token.RULE) {\n lastToken = [null, [], []];\n continue;\n }\n\n if (lastToken[0] == Token.RULE && serializeRules(token[1]) == serializeRules(lastToken[1])) {\n Array.prototype.push.apply(lastToken[2], token[2]);\n optimizeProperties(lastToken[2], true, true, context);\n token[2] = [];\n } else if (lastToken[0] == Token.RULE && serializeBody(token[2]) == serializeBody(lastToken[2])\n && isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)\n && isMergeable(\n serializeRules(lastToken[1]),\n mergeablePseudoClasses,\n mergeablePseudoElements,\n multiplePseudoMerging\n )\n && lastToken[1].length < mergeLimit) {\n lastToken[1] = tidyRules(lastToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings);\n lastToken[1] = lastToken.length > 1 ? sortSelectors(lastToken[1], selectorsSortingMethod) : lastToken[1];\n token[2] = [];\n } else {\n lastToken = token;\n }\n }\n}\n\nmodule.exports = mergeAdjacent;\n","var MODIFIER_PATTERN = /--.+$/;\n\nfunction rulesOverlap(rule1, rule2, bemMode) {\n var scope1;\n var scope2;\n var i, l;\n var j, m;\n\n for (i = 0, l = rule1.length; i < l; i++) {\n scope1 = rule1[i][1];\n\n for (j = 0, m = rule2.length; j < m; j++) {\n scope2 = rule2[j][1];\n\n if (scope1 == scope2) {\n return true;\n }\n\n if (bemMode && withoutModifiers(scope1) == withoutModifiers(scope2)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction withoutModifiers(scope) {\n return scope.replace(MODIFIER_PATTERN, '');\n}\n\nmodule.exports = rulesOverlap;\n","var Marker = require('../../tokenizer/marker');\n\nvar Selector = {\n ADJACENT_SIBLING: '+',\n DESCENDANT: '>',\n DOT: '.',\n HASH: '#',\n NON_ADJACENT_SIBLING: '~',\n PSEUDO: ':'\n};\n\nvar LETTER_PATTERN = /[a-zA-Z]/;\nvar NOT_PREFIX = ':not(';\nvar SEPARATOR_PATTERN = /[\\s,(>~+]/;\n\nfunction specificity(selector) {\n var result = [0, 0, 0];\n var character;\n var isEscaped;\n var isSingleQuoted;\n var isDoubleQuoted;\n var roundBracketLevel = 0;\n var couldIntroduceNewTypeSelector;\n var withinNotPseudoClass = false;\n var wasPseudoClass = false;\n var i, l;\n\n for (i = 0, l = selector.length; i < l; i++) {\n character = selector[i];\n\n if (isEscaped) {\n // noop\n } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {\n isSingleQuoted = true;\n } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && isSingleQuoted) {\n isSingleQuoted = false;\n } else if (character == Marker.DOUBLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {\n isDoubleQuoted = true;\n } else if (character == Marker.DOUBLE_QUOTE && isDoubleQuoted && !isSingleQuoted) {\n isDoubleQuoted = false;\n } else if (isSingleQuoted || isDoubleQuoted) {\n continue;\n } else if (roundBracketLevel > 0 && !withinNotPseudoClass) {\n // noop\n } else if (character == Marker.OPEN_ROUND_BRACKET) {\n roundBracketLevel++;\n } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1) {\n roundBracketLevel--;\n withinNotPseudoClass = false;\n } else if (character == Marker.CLOSE_ROUND_BRACKET) {\n roundBracketLevel--;\n } else if (character == Selector.HASH) {\n result[0]++;\n } else if (character == Selector.DOT || character == Marker.OPEN_SQUARE_BRACKET) {\n result[1]++;\n } else if (character == Selector.PSEUDO && !wasPseudoClass && !isNotPseudoClass(selector, i)) {\n result[1]++;\n withinNotPseudoClass = false;\n } else if (character == Selector.PSEUDO) {\n withinNotPseudoClass = true;\n } else if ((i === 0 || couldIntroduceNewTypeSelector) && LETTER_PATTERN.test(character)) {\n result[2]++;\n }\n\n isEscaped = character == Marker.BACK_SLASH;\n wasPseudoClass = character == Selector.PSEUDO;\n couldIntroduceNewTypeSelector = !isEscaped && SEPARATOR_PATTERN.test(character);\n }\n\n return result;\n}\n\nfunction isNotPseudoClass(selector, index) {\n return selector.indexOf(NOT_PREFIX, index) === index;\n}\n\nmodule.exports = specificity;\n","var specificity = require('./specificity');\n\nfunction specificitiesOverlap(selector1, selector2, cache) {\n var specificity1;\n var specificity2;\n var i, l;\n var j, m;\n\n for (i = 0, l = selector1.length; i < l; i++) {\n specificity1 = findSpecificity(selector1[i][1], cache);\n\n for (j = 0, m = selector2.length; j < m; j++) {\n specificity2 = findSpecificity(selector2[j][1], cache);\n\n if (specificity1[0] === specificity2[0]\n && specificity1[1] === specificity2[1]\n && specificity1[2] === specificity2[2]) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction findSpecificity(selector, cache) {\n var value;\n\n if (!(selector in cache)) {\n cache[selector] = value = specificity(selector);\n }\n\n return value || cache[selector];\n}\n\nmodule.exports = specificitiesOverlap;\n","// TODO: it'd be great to merge it with the other canReorder functionality\n\nvar rulesOverlap = require('./rules-overlap');\nvar specificitiesOverlap = require('./specificities-overlap');\n\nvar FLEX_PROPERTIES = /align-items|box-align|box-pack|flex|justify/;\nvar BORDER_PROPERTIES = /^border-(top|right|bottom|left|color|style|width|radius)/;\n\nfunction canReorder(left, right, cache) {\n for (var i = right.length - 1; i >= 0; i--) {\n for (var j = left.length - 1; j >= 0; j--) {\n if (!canReorderSingle(left[j], right[i], cache)) { return false; }\n }\n }\n\n return true;\n}\n\nfunction canReorderSingle(left, right, cache) {\n var leftName = left[0];\n var leftValue = left[1];\n var leftNameRoot = left[2];\n var leftSelector = left[5];\n var leftInSpecificSelector = left[6];\n var rightName = right[0];\n var rightValue = right[1];\n var rightNameRoot = right[2];\n var rightSelector = right[5];\n var rightInSpecificSelector = right[6];\n\n if (leftName == 'font' && rightName == 'line-height' || rightName == 'font' && leftName == 'line-height') { return false; }\n if (FLEX_PROPERTIES.test(leftName) && FLEX_PROPERTIES.test(rightName)) { return false; }\n if (leftNameRoot == rightNameRoot\n && unprefixed(leftName) == unprefixed(rightName)\n && (vendorPrefixed(leftName) ^ vendorPrefixed(rightName))) { return false; }\n if (leftNameRoot == 'border' && BORDER_PROPERTIES.test(rightNameRoot) && (leftName == 'border' || leftName == rightNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName)))) { return false; }\n if (rightNameRoot == 'border' && BORDER_PROPERTIES.test(leftNameRoot) && (rightName == 'border' || rightName == leftNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName)))) { return false; }\n if (leftNameRoot == 'border' && rightNameRoot == 'border' && leftName != rightName && (isSideBorder(leftName) && isStyleBorder(rightName) || isStyleBorder(leftName) && isSideBorder(rightName))) { return false; }\n if (leftNameRoot != rightNameRoot) { return true; }\n if (leftName == rightName\n && leftNameRoot == rightNameRoot\n && (leftValue == rightValue || withDifferentVendorPrefix(leftValue, rightValue))) { return true; }\n if (leftName != rightName\n && leftNameRoot == rightNameRoot\n && leftName != leftNameRoot\n && rightName != rightNameRoot) { return true; }\n if (leftName != rightName\n && leftNameRoot == rightNameRoot\n && leftValue == rightValue) { return true; }\n if (rightInSpecificSelector\n && leftInSpecificSelector\n && !inheritable(leftNameRoot)\n && !inheritable(rightNameRoot)\n && !rulesOverlap(rightSelector, leftSelector, false)) { return true; }\n if (!specificitiesOverlap(leftSelector, rightSelector, cache)) { return true; }\n\n return false;\n}\n\nfunction vendorPrefixed(name) {\n return /^-(?:moz|webkit|ms|o)-/.test(name);\n}\n\nfunction unprefixed(name) {\n return name.replace(/^-(?:moz|webkit|ms|o)-/, '');\n}\n\nfunction sameBorderComponent(name1, name2) {\n return name1.split('-').pop() == name2.split('-').pop();\n}\n\nfunction isSideBorder(name) {\n return name == 'border-top' || name == 'border-right' || name == 'border-bottom' || name == 'border-left';\n}\n\nfunction isStyleBorder(name) {\n return name == 'border-color' || name == 'border-style' || name == 'border-width';\n}\n\nfunction withDifferentVendorPrefix(value1, value2) {\n return vendorPrefixed(value1) && vendorPrefixed(value2) && value1.split('-')[1] != value2.split('-')[2];\n}\n\nfunction inheritable(name) {\n // According to http://www.w3.org/TR/CSS21/propidx.html\n // Others will be catched by other, preceeding rules\n return name == 'font' || name == 'line-height' || name == 'list-style';\n}\n\nmodule.exports = {\n canReorder: canReorder,\n canReorderSingle: canReorderSingle\n};\n","// This extractor is used in level 2 optimizations\n// IMPORTANT: Mind Token class and this code is not related!\n// Properties will be tokenized in one step, see #429\n\nvar Token = require('../../tokenizer/token');\nvar serializeRules = require('../../writer/one-time').rules;\nvar serializeValue = require('../../writer/one-time').value;\n\nfunction extractProperties(token) {\n var properties = [];\n var inSpecificSelector;\n var property;\n var name;\n var value;\n var i, l;\n\n if (token[0] == Token.RULE) {\n inSpecificSelector = !/[.+>~]/.test(serializeRules(token[1]));\n\n for (i = 0, l = token[2].length; i < l; i++) {\n property = token[2][i];\n\n if (property[0] != Token.PROPERTY) { continue; }\n\n name = property[1][1];\n if (name.length === 0) { continue; }\n\n value = serializeValue(property, i);\n\n properties.push([\n name,\n value,\n findNameRoot(name),\n token[2][i],\n name + ':' + value,\n token[1],\n inSpecificSelector\n ]);\n }\n } else if (token[0] == Token.NESTED_BLOCK) {\n for (i = 0, l = token[2].length; i < l; i++) {\n properties = properties.concat(extractProperties(token[2][i]));\n }\n }\n\n return properties;\n}\n\nfunction findNameRoot(name) {\n if (name == 'list-style') { return name; }\n if (name.indexOf('-radius') > 0) { return 'border-radius'; }\n if (name == 'border-collapse' || name == 'border-spacing' || name == 'border-image') { return name; }\n if (name.indexOf('border-') === 0 && /^border-\\w+-\\w+$/.test(name)) { return name.match(/border-\\w+/)[0]; }\n if (name.indexOf('border-') === 0 && /^border-\\w+$/.test(name)) { return 'border'; }\n if (name.indexOf('text-') === 0) { return name; }\n if (name == '-chrome-') { return name; }\n\n return name.replace(/^-\\w+-/, '').match(/([a-zA-Z]+)/)[0].toLowerCase();\n}\n\nmodule.exports = extractProperties;\n","var canReorder = require('./reorderable').canReorder;\nvar canReorderSingle = require('./reorderable').canReorderSingle;\nvar extractProperties = require('./extract-properties');\nvar rulesOverlap = require('./rules-overlap');\n\nvar serializeRules = require('../../writer/one-time').rules;\nvar OptimizationLevel = require('../../options/optimization-level').OptimizationLevel;\nvar Token = require('../../tokenizer/token');\n\nfunction mergeMediaQueries(tokens, context) {\n var mergeSemantically = context.options.level[OptimizationLevel.Two].mergeSemantically;\n var specificityCache = context.cache.specificity;\n var candidates = {};\n var reduced = [];\n\n for (var i = tokens.length - 1; i >= 0; i--) {\n var token = tokens[i];\n if (token[0] != Token.NESTED_BLOCK) {\n continue;\n }\n\n var key = serializeRules(token[1]);\n var candidate = candidates[key];\n if (!candidate) {\n candidate = [];\n candidates[key] = candidate;\n }\n\n candidate.push(i);\n }\n\n for (var name in candidates) {\n var positions = candidates[name];\n\n positionLoop:\n for (var j = positions.length - 1; j > 0; j--) {\n var positionOne = positions[j];\n var tokenOne = tokens[positionOne];\n var positionTwo = positions[j - 1];\n var tokenTwo = tokens[positionTwo];\n\n directionLoop:\n for (var direction = 1; direction >= -1; direction -= 2) {\n var topToBottom = direction == 1;\n var from = topToBottom ? positionOne + 1 : positionTwo - 1;\n var to = topToBottom ? positionTwo : positionOne;\n var delta = topToBottom ? 1 : -1;\n var source = topToBottom ? tokenOne : tokenTwo;\n var target = topToBottom ? tokenTwo : tokenOne;\n var movedProperties = extractProperties(source);\n\n while (from != to) {\n var traversedProperties = extractProperties(tokens[from]);\n from += delta;\n\n if (mergeSemantically\n && allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache)\n ) {\n continue;\n }\n\n if (!canReorder(movedProperties, traversedProperties, specificityCache)) { continue directionLoop; }\n }\n\n target[2] = topToBottom\n ? source[2].concat(target[2])\n : target[2].concat(source[2]);\n source[2] = [];\n\n reduced.push(target);\n continue positionLoop;\n }\n }\n }\n\n return reduced;\n}\n\nfunction allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache) {\n var movedProperty;\n var movedRule;\n var traversedProperty;\n var traversedRule;\n var i, l;\n var j, m;\n\n for (i = 0, l = movedProperties.length; i < l; i++) {\n movedProperty = movedProperties[i];\n movedRule = movedProperty[5];\n\n for (j = 0, m = traversedProperties.length; j < m; j++) {\n traversedProperty = traversedProperties[j];\n traversedRule = traversedProperty[5];\n\n if (rulesOverlap(movedRule, traversedRule, true)\n && !canReorderSingle(movedProperty, traversedProperty, specificityCache)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nmodule.exports = mergeMediaQueries;\n","var isMergeable = require('./is-mergeable');\n\nvar sortSelectors = require('../level-1/sort-selectors');\nvar tidyRules = require('../level-1/tidy-rules');\n\nvar OptimizationLevel = require('../../options/optimization-level').OptimizationLevel;\n\nvar serializeBody = require('../../writer/one-time').body;\nvar serializeRules = require('../../writer/one-time').rules;\n\nvar Token = require('../../tokenizer/token');\n\nfunction unsafeSelector(value) {\n return /\\.|\\*| :/.test(value);\n}\n\nfunction isBemElement(token) {\n var asString = serializeRules(token[1]);\n return asString.indexOf('__') > -1 || asString.indexOf('--') > -1;\n}\n\nfunction withoutModifier(selector) {\n return selector.replace(/--[^ ,>+~:]+/g, '');\n}\n\nfunction removeAnyUnsafeElements(left, candidates) {\n var leftSelector = withoutModifier(serializeRules(left[1]));\n\n for (var body in candidates) {\n var right = candidates[body];\n var rightSelector = withoutModifier(serializeRules(right[1]));\n\n if (rightSelector.indexOf(leftSelector) > -1 || leftSelector.indexOf(rightSelector) > -1) {\n delete candidates[body];\n }\n }\n}\n\nfunction mergeNonAdjacentByBody(tokens, context) {\n var options = context.options;\n var mergeSemantically = options.level[OptimizationLevel.Two].mergeSemantically;\n var adjacentSpace = options.compatibility.selectors.adjacentSpace;\n var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod;\n var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;\n var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;\n var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;\n var candidates = {};\n\n for (var i = tokens.length - 1; i >= 0; i--) {\n var token = tokens[i];\n if (token[0] != Token.RULE) { continue; }\n\n if (token[2].length > 0 && (!mergeSemantically && unsafeSelector(serializeRules(token[1])))) { candidates = {}; }\n\n if (token[2].length > 0 && mergeSemantically && isBemElement(token)) { removeAnyUnsafeElements(token, candidates); }\n\n var candidateBody = serializeBody(token[2]);\n var oldToken = candidates[candidateBody];\n if (oldToken\n && isMergeable(\n serializeRules(token[1]),\n mergeablePseudoClasses,\n mergeablePseudoElements,\n multiplePseudoMerging\n )\n && isMergeable(\n serializeRules(oldToken[1]),\n mergeablePseudoClasses,\n mergeablePseudoElements,\n multiplePseudoMerging\n )\n ) {\n if (token[2].length > 0) {\n token[1] = tidyRules(oldToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings);\n token[1] = token[1].length > 1 ? sortSelectors(token[1], selectorsSortingMethod) : token[1];\n } else {\n token[1] = oldToken[1].concat(token[1]);\n }\n\n oldToken[2] = [];\n candidates[candidateBody] = null;\n }\n\n candidates[serializeBody(token[2])] = token;\n }\n}\n\nmodule.exports = mergeNonAdjacentByBody;\n","var canReorder = require('./reorderable').canReorder;\nvar extractProperties = require('./extract-properties');\n\nvar optimizeProperties = require('./properties/optimize');\n\nvar serializeRules = require('../../writer/one-time').rules;\n\nvar Token = require('../../tokenizer/token');\n\nfunction mergeNonAdjacentBySelector(tokens, context) {\n var specificityCache = context.cache.specificity;\n var allSelectors = {};\n var repeatedSelectors = [];\n var i;\n\n for (i = tokens.length - 1; i >= 0; i--) {\n if (tokens[i][0] != Token.RULE) { continue; }\n if (tokens[i][2].length === 0) { continue; }\n\n var selector = serializeRules(tokens[i][1]);\n allSelectors[selector] = [i].concat(allSelectors[selector] || []);\n\n if (allSelectors[selector].length == 2) { repeatedSelectors.push(selector); }\n }\n\n for (i = repeatedSelectors.length - 1; i >= 0; i--) {\n var positions = allSelectors[repeatedSelectors[i]];\n\n selectorIterator:\n for (var j = positions.length - 1; j > 0; j--) {\n var positionOne = positions[j - 1];\n var tokenOne = tokens[positionOne];\n var positionTwo = positions[j];\n var tokenTwo = tokens[positionTwo];\n\n directionIterator:\n for (var direction = 1; direction >= -1; direction -= 2) {\n var topToBottom = direction == 1;\n var from = topToBottom ? positionOne + 1 : positionTwo - 1;\n var to = topToBottom ? positionTwo : positionOne;\n var delta = topToBottom ? 1 : -1;\n var moved = topToBottom ? tokenOne : tokenTwo;\n var target = topToBottom ? tokenTwo : tokenOne;\n var movedProperties = extractProperties(moved);\n\n while (from != to) {\n var traversedProperties = extractProperties(tokens[from]);\n from += delta;\n\n // traversed then moved as we move selectors towards the start\n var reorderable = topToBottom\n ? canReorder(movedProperties, traversedProperties, specificityCache)\n : canReorder(traversedProperties, movedProperties, specificityCache);\n\n if (!reorderable && !topToBottom) { continue selectorIterator; }\n if (!reorderable && topToBottom) { continue directionIterator; }\n }\n\n if (topToBottom) {\n Array.prototype.push.apply(moved[2], target[2]);\n target[2] = moved[2];\n } else {\n Array.prototype.push.apply(target[2], moved[2]);\n }\n\n optimizeProperties(target[2], true, true, context);\n moved[2] = [];\n }\n }\n }\n}\n\nmodule.exports = mergeNonAdjacentBySelector;\n","function cloneArray(array) {\n var cloned = array.slice(0);\n\n for (var i = 0, l = cloned.length; i < l; i++) {\n if (Array.isArray(cloned[i])) { cloned[i] = cloneArray(cloned[i]); }\n }\n\n return cloned;\n}\n\nmodule.exports = cloneArray;\n","var isMergeable = require('./is-mergeable');\n\nvar optimizeProperties = require('./properties/optimize');\n\nvar cloneArray = require('../../utils/clone-array');\n\nvar Token = require('../../tokenizer/token');\n\nvar serializeBody = require('../../writer/one-time').body;\nvar serializeRules = require('../../writer/one-time').rules;\n\nfunction reduceNonAdjacent(tokens, context) {\n var options = context.options;\n var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;\n var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;\n var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;\n var candidates = {};\n var repeated = [];\n\n for (var i = tokens.length - 1; i >= 0; i--) {\n var token = tokens[i];\n\n if (token[0] != Token.RULE) {\n continue;\n } else if (token[2].length === 0) {\n continue;\n }\n\n var selectorAsString = serializeRules(token[1]);\n var isComplexAndNotSpecial = token[1].length > 1\n && isMergeable(selectorAsString, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging);\n var wrappedSelectors = wrappedSelectorsFrom(token[1]);\n var selectors = isComplexAndNotSpecial\n ? [selectorAsString].concat(wrappedSelectors)\n : [selectorAsString];\n\n for (var j = 0, m = selectors.length; j < m; j++) {\n var selector = selectors[j];\n\n if (!candidates[selector]) { candidates[selector] = []; } else { repeated.push(selector); }\n\n candidates[selector].push({\n where: i,\n list: wrappedSelectors,\n isPartial: isComplexAndNotSpecial && j > 0,\n isComplex: isComplexAndNotSpecial && j === 0\n });\n }\n }\n\n reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context);\n reduceComplexNonAdjacentCases(tokens, candidates, options, context);\n}\n\nfunction wrappedSelectorsFrom(list) {\n var wrapped = [];\n\n for (var i = 0; i < list.length; i++) {\n wrapped.push([list[i][1]]);\n }\n\n return wrapped;\n}\n\nfunction reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context) {\n function filterOut(idx, bodies) {\n return data[idx].isPartial && bodies.length === 0;\n }\n\n function reduceBody(token, newBody, processedCount, tokenIdx) {\n if (!data[processedCount - tokenIdx - 1].isPartial) { token[2] = newBody; }\n }\n\n for (var i = 0, l = repeated.length; i < l; i++) {\n var selector = repeated[i];\n var data = candidates[selector];\n\n reduceSelector(tokens, data, {\n filterOut: filterOut,\n callback: reduceBody\n }, options, context);\n }\n}\n\nfunction reduceComplexNonAdjacentCases(tokens, candidates, options, context) {\n var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;\n var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;\n var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;\n var localContext = {};\n\n function filterOut(idx) {\n return localContext.data[idx].where < localContext.intoPosition;\n }\n\n function collectReducedBodies(token, newBody, processedCount, tokenIdx) {\n if (tokenIdx === 0) { localContext.reducedBodies.push(newBody); }\n }\n\n allSelectors:\n for (var complexSelector in candidates) {\n var into = candidates[complexSelector];\n if (!into[0].isComplex) { continue; }\n\n var intoPosition = into[into.length - 1].where;\n var intoToken = tokens[intoPosition];\n var reducedBodies = [];\n\n var selectors = isMergeable(complexSelector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)\n ? into[0].list\n : [complexSelector];\n\n localContext.intoPosition = intoPosition;\n localContext.reducedBodies = reducedBodies;\n\n for (var j = 0, m = selectors.length; j < m; j++) {\n var selector = selectors[j];\n var data = candidates[selector];\n\n if (data.length < 2) { continue allSelectors; }\n\n localContext.data = data;\n\n reduceSelector(tokens, data, {\n filterOut: filterOut,\n callback: collectReducedBodies\n }, options, context);\n\n if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0])) {\n continue allSelectors;\n }\n }\n\n intoToken[2] = reducedBodies[0];\n }\n}\n\nfunction reduceSelector(tokens, data, context, options, outerContext) {\n var bodies = [];\n var bodiesAsList = [];\n var processedTokens = [];\n\n for (var j = data.length - 1; j >= 0; j--) {\n if (context.filterOut(j, bodies)) { continue; }\n\n var where = data[j].where;\n var token = tokens[where];\n var clonedBody = cloneArray(token[2]);\n\n bodies = bodies.concat(clonedBody);\n bodiesAsList.push(clonedBody);\n processedTokens.push(where);\n }\n\n optimizeProperties(bodies, true, false, outerContext);\n\n var processedCount = processedTokens.length;\n var propertyIdx = bodies.length - 1;\n var tokenIdx = processedCount - 1;\n\n while (tokenIdx >= 0) {\n if ((tokenIdx === 0\n || (bodies[propertyIdx] && bodiesAsList[tokenIdx].indexOf(bodies[propertyIdx]) > -1)) && propertyIdx > -1) {\n propertyIdx--;\n continue;\n }\n\n var newBody = bodies.splice(propertyIdx + 1);\n context.callback(tokens[processedTokens[tokenIdx]], newBody, processedCount, tokenIdx);\n\n tokenIdx--;\n }\n}\n\nmodule.exports = reduceNonAdjacent;\n","var Token = require('../../tokenizer/token');\n\nvar serializeAll = require('../../writer/one-time').all;\n\nvar FONT_FACE_SCOPE = '@font-face';\n\nfunction removeDuplicateFontAtRules(tokens) {\n var fontAtRules = [];\n var token;\n var key;\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n token = tokens[i];\n\n if (token[0] != Token.AT_RULE_BLOCK && token[1][0][1] != FONT_FACE_SCOPE) {\n continue;\n }\n\n key = serializeAll([token]);\n\n if (fontAtRules.indexOf(key) > -1) {\n token[2] = [];\n } else {\n fontAtRules.push(key);\n }\n }\n}\n\nmodule.exports = removeDuplicateFontAtRules;\n","var Token = require('../../tokenizer/token');\n\nvar serializeAll = require('../../writer/one-time').all;\nvar serializeRules = require('../../writer/one-time').rules;\n\nfunction removeDuplicateMediaQueries(tokens) {\n var candidates = {};\n var candidate;\n var token;\n var key;\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n token = tokens[i];\n if (token[0] != Token.NESTED_BLOCK) {\n continue;\n }\n\n key = serializeRules(token[1]) + '%' + serializeAll(token[2]);\n candidate = candidates[key];\n\n if (candidate) {\n candidate[2] = [];\n }\n\n candidates[key] = token;\n }\n}\n\nmodule.exports = removeDuplicateMediaQueries;\n","var Token = require('../../tokenizer/token');\n\nvar serializeBody = require('../../writer/one-time').body;\nvar serializeRules = require('../../writer/one-time').rules;\n\nfunction removeDuplicates(tokens) {\n var matched = {};\n var moreThanOnce = [];\n var id, token;\n var body, bodies;\n\n for (var i = 0, l = tokens.length; i < l; i++) {\n token = tokens[i];\n if (token[0] != Token.RULE) { continue; }\n\n id = serializeRules(token[1]);\n\n if (matched[id] && matched[id].length == 1) { moreThanOnce.push(id); } else { matched[id] = matched[id] || []; }\n\n matched[id].push(i);\n }\n\n for (i = 0, l = moreThanOnce.length; i < l; i++) {\n id = moreThanOnce[i];\n bodies = [];\n\n for (var j = matched[id].length - 1; j >= 0; j--) {\n token = tokens[matched[id][j]];\n body = serializeBody(token[2]);\n\n if (bodies.indexOf(body) > -1) { token[2] = []; } else { bodies.push(body); }\n }\n }\n}\n\nmodule.exports = removeDuplicates;\n","var populateComponents = require('./properties/populate-components');\n\nvar wrapForOptimizing = require('../wrap-for-optimizing').single;\nvar restoreFromOptimizing = require('../restore-from-optimizing');\n\nvar Token = require('../../tokenizer/token');\n\nvar animationNameRegex = /^(-moz-|-o-|-webkit-)?animation-name$/;\nvar animationRegex = /^(-moz-|-o-|-webkit-)?animation$/;\nvar keyframeRegex = /^@(-moz-|-o-|-webkit-)?keyframes /;\nvar importantRegex = /\\s{0,31}!important$/;\nvar optionalMatchingQuotesRegex = /^(['\"]?)(.*)\\1$/;\n\nfunction normalize(value) {\n return value\n .replace(optionalMatchingQuotesRegex, '$2')\n .replace(importantRegex, '');\n}\n\nfunction removeUnusedAtRules(tokens, context) {\n removeUnusedAtRule(tokens, matchCounterStyle, markCounterStylesAsUsed, context);\n removeUnusedAtRule(tokens, matchFontFace, markFontFacesAsUsed, context);\n removeUnusedAtRule(tokens, matchKeyframe, markKeyframesAsUsed, context);\n removeUnusedAtRule(tokens, matchNamespace, markNamespacesAsUsed, context);\n}\n\nfunction removeUnusedAtRule(tokens, matchCallback, markCallback, context) {\n var atRules = {};\n var atRule;\n var atRuleTokens;\n var atRuleToken;\n var zeroAt;\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n matchCallback(tokens[i], atRules);\n }\n\n if (Object.keys(atRules).length === 0) {\n return;\n }\n\n markUsedAtRules(tokens, markCallback, atRules, context);\n\n for (atRule in atRules) {\n atRuleTokens = atRules[atRule];\n\n for (i = 0, l = atRuleTokens.length; i < l; i++) {\n atRuleToken = atRuleTokens[i];\n zeroAt = atRuleToken[0] == Token.AT_RULE ? 1 : 2;\n atRuleToken[zeroAt] = [];\n }\n }\n}\n\nfunction markUsedAtRules(tokens, markCallback, atRules, context) {\n var boundMarkCallback = markCallback(atRules);\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n switch (tokens[i][0]) {\n case Token.RULE:\n boundMarkCallback(tokens[i], context);\n break;\n case Token.NESTED_BLOCK:\n markUsedAtRules(tokens[i][2], markCallback, atRules, context);\n }\n }\n}\n\nfunction matchCounterStyle(token, atRules) {\n var match;\n\n if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1].indexOf('@counter-style') === 0) {\n match = token[1][0][1].split(' ')[1];\n atRules[match] = atRules[match] || [];\n atRules[match].push(token);\n }\n}\n\nfunction markCounterStylesAsUsed(atRules) {\n return function(token, context) {\n var property;\n var wrappedProperty;\n var i, l;\n\n for (i = 0, l = token[2].length; i < l; i++) {\n property = token[2][i];\n\n if (property[1][1] == 'list-style') {\n wrappedProperty = wrapForOptimizing(property);\n populateComponents([wrappedProperty], context.validator, context.warnings);\n\n if (wrappedProperty.components[0].value[0][1] in atRules) {\n delete atRules[property[2][1]];\n }\n\n restoreFromOptimizing([wrappedProperty]);\n }\n\n if (property[1][1] == 'list-style-type' && property[2][1] in atRules) {\n delete atRules[property[2][1]];\n }\n }\n };\n}\n\nfunction matchFontFace(token, atRules) {\n var property;\n var match;\n var i, l;\n\n if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1] == '@font-face') {\n for (i = 0, l = token[2].length; i < l; i++) {\n property = token[2][i];\n\n if (property[1][1] == 'font-family') {\n match = normalize(property[2][1].toLowerCase());\n atRules[match] = atRules[match] || [];\n atRules[match].push(token);\n break;\n }\n }\n }\n}\n\nfunction markFontFacesAsUsed(atRules) {\n return function(token, context) {\n var property;\n var wrappedProperty;\n var component;\n var normalizedMatch;\n var i, l;\n var j, m;\n\n for (i = 0, l = token[2].length; i < l; i++) {\n property = token[2][i];\n\n if (property[1][1] == 'font') {\n wrappedProperty = wrapForOptimizing(property);\n populateComponents([wrappedProperty], context.validator, context.warnings);\n component = wrappedProperty.components[6];\n\n for (j = 0, m = component.value.length; j < m; j++) {\n normalizedMatch = normalize(component.value[j][1].toLowerCase());\n\n if (normalizedMatch in atRules) {\n delete atRules[normalizedMatch];\n }\n }\n\n restoreFromOptimizing([wrappedProperty]);\n }\n\n if (property[1][1] == 'font-family') {\n for (j = 2, m = property.length; j < m; j++) {\n normalizedMatch = normalize(property[j][1].toLowerCase());\n\n if (normalizedMatch in atRules) {\n delete atRules[normalizedMatch];\n }\n }\n }\n }\n };\n}\n\nfunction matchKeyframe(token, atRules) {\n var match;\n\n if (token[0] == Token.NESTED_BLOCK && keyframeRegex.test(token[1][0][1])) {\n match = token[1][0][1].split(' ')[1];\n atRules[match] = atRules[match] || [];\n atRules[match].push(token);\n }\n}\n\nfunction markKeyframesAsUsed(atRules) {\n return function(token, context) {\n var property;\n var wrappedProperty;\n var component;\n var i, l;\n var j, m;\n\n for (i = 0, l = token[2].length; i < l; i++) {\n property = token[2][i];\n\n if (animationRegex.test(property[1][1])) {\n wrappedProperty = wrapForOptimizing(property);\n populateComponents([wrappedProperty], context.validator, context.warnings);\n component = wrappedProperty.components[7];\n\n for (j = 0, m = component.value.length; j < m; j++) {\n if (component.value[j][1] in atRules) {\n delete atRules[component.value[j][1]];\n }\n }\n\n restoreFromOptimizing([wrappedProperty]);\n }\n\n if (animationNameRegex.test(property[1][1])) {\n for (j = 2, m = property.length; j < m; j++) {\n if (property[j][1] in atRules) {\n delete atRules[property[j][1]];\n }\n }\n }\n }\n };\n}\n\nfunction matchNamespace(token, atRules) {\n var match;\n\n if (token[0] == Token.AT_RULE && token[1].indexOf('@namespace') === 0) {\n match = token[1].split(' ')[1];\n atRules[match] = atRules[match] || [];\n atRules[match].push(token);\n }\n}\n\nfunction markNamespacesAsUsed(atRules) {\n var namespaceRegex = new RegExp(Object.keys(atRules).join('\\\\||') + '\\\\|', 'g');\n\n return function(token) {\n var match;\n var scope;\n var normalizedMatch;\n var i, l;\n var j, m;\n\n for (i = 0, l = token[1].length; i < l; i++) {\n scope = token[1][i];\n match = scope[1].match(namespaceRegex);\n\n for (j = 0, m = match.length; j < m; j++) {\n normalizedMatch = match[j].substring(0, match[j].length - 1);\n\n if (normalizedMatch in atRules) {\n delete atRules[normalizedMatch];\n }\n }\n }\n };\n}\n\nmodule.exports = removeUnusedAtRules;\n","function ruleSorter(s1, s2) {\n return s1[1] > s2[1] ? 1 : -1;\n}\n\nfunction tidyRuleDuplicates(rules) {\n var list = [];\n var repeated = [];\n\n for (var i = 0, l = rules.length; i < l; i++) {\n var rule = rules[i];\n\n if (repeated.indexOf(rule[1]) == -1) {\n repeated.push(rule[1]);\n list.push(rule);\n }\n }\n\n return list.sort(ruleSorter);\n}\n\nmodule.exports = tidyRuleDuplicates;\n","var canReorderSingle = require('./reorderable').canReorderSingle;\nvar extractProperties = require('./extract-properties');\nvar isMergeable = require('./is-mergeable');\nvar tidyRuleDuplicates = require('./tidy-rule-duplicates');\n\nvar Token = require('../../tokenizer/token');\n\nvar cloneArray = require('../../utils/clone-array');\n\nvar serializeBody = require('../../writer/one-time').body;\nvar serializeRules = require('../../writer/one-time').rules;\n\nfunction naturalSorter(a, b) {\n return a > b ? 1 : -1;\n}\n\nfunction cloneAndMergeSelectors(propertyA, propertyB) {\n var cloned = cloneArray(propertyA);\n cloned[5] = cloned[5].concat(propertyB[5]);\n\n return cloned;\n}\n\nfunction restructure(tokens, context) {\n var options = context.options;\n var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;\n var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;\n var mergeLimit = options.compatibility.selectors.mergeLimit;\n var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;\n var specificityCache = context.cache.specificity;\n var movableTokens = {};\n var movedProperties = [];\n var multiPropertyMoveCache = {};\n var movedToBeDropped = [];\n var maxCombinationsLevel = 2;\n var ID_JOIN_CHARACTER = '%';\n\n function sendToMultiPropertyMoveCache(position, movedProperty, allFits) {\n for (var i = allFits.length - 1; i >= 0; i--) {\n var fit = allFits[i][0];\n var id = addToCache(movedProperty, fit);\n\n if (multiPropertyMoveCache[id].length > 1 && processMultiPropertyMove(position, multiPropertyMoveCache[id])) {\n removeAllMatchingFromCache(id);\n break;\n }\n }\n }\n\n function addToCache(movedProperty, fit) {\n var id = cacheId(fit);\n multiPropertyMoveCache[id] = multiPropertyMoveCache[id] || [];\n multiPropertyMoveCache[id].push([movedProperty, fit]);\n return id;\n }\n\n function removeAllMatchingFromCache(matchId) {\n var matchSelectors = matchId.split(ID_JOIN_CHARACTER);\n var forRemoval = [];\n var i;\n\n for (var id in multiPropertyMoveCache) {\n var selectors = id.split(ID_JOIN_CHARACTER);\n for (i = selectors.length - 1; i >= 0; i--) {\n if (matchSelectors.indexOf(selectors[i]) > -1) {\n forRemoval.push(id);\n break;\n }\n }\n }\n\n for (i = forRemoval.length - 1; i >= 0; i--) {\n delete multiPropertyMoveCache[forRemoval[i]];\n }\n }\n\n function cacheId(cachedTokens) {\n var id = [];\n for (var i = 0, l = cachedTokens.length; i < l; i++) {\n id.push(serializeRules(cachedTokens[i][1]));\n }\n return id.join(ID_JOIN_CHARACTER);\n }\n\n function tokensToMerge(sourceTokens) {\n var uniqueTokensWithBody = [];\n var mergeableTokens = [];\n\n for (var i = sourceTokens.length - 1; i >= 0; i--) {\n if (!isMergeable(\n serializeRules(sourceTokens[i][1]),\n mergeablePseudoClasses,\n mergeablePseudoElements,\n multiplePseudoMerging\n )) {\n continue;\n }\n\n mergeableTokens.unshift(sourceTokens[i]);\n if (sourceTokens[i][2].length > 0\n && uniqueTokensWithBody.indexOf(sourceTokens[i]) == -1) {\n uniqueTokensWithBody.push(sourceTokens[i]);\n }\n }\n\n return uniqueTokensWithBody.length > 1\n ? mergeableTokens\n : [];\n }\n\n function shortenIfPossible(position, movedProperty) {\n var name = movedProperty[0];\n var value = movedProperty[1];\n var key = movedProperty[4];\n var valueSize = name.length + value.length + 1;\n var allSelectors = [];\n var qualifiedTokens = [];\n\n var mergeableTokens = tokensToMerge(movableTokens[key]);\n if (mergeableTokens.length < 2) { return; }\n\n var allFits = findAllFits(mergeableTokens, valueSize, 1);\n var bestFit = allFits[0];\n if (bestFit[1] > 0) { return sendToMultiPropertyMoveCache(position, movedProperty, allFits); }\n\n for (var i = bestFit[0].length - 1; i >= 0; i--) {\n allSelectors = bestFit[0][i][1].concat(allSelectors);\n qualifiedTokens.unshift(bestFit[0][i]);\n }\n\n allSelectors = tidyRuleDuplicates(allSelectors);\n dropAsNewTokenAt(position, [movedProperty], allSelectors, qualifiedTokens);\n }\n\n function fitSorter(fit1, fit2) {\n return fit1[1] > fit2[1] ? 1 : (fit1[1] == fit2[1] ? 0 : -1);\n }\n\n function findAllFits(mergeableTokens, propertySize, propertiesCount) {\n var combinations = allCombinations(mergeableTokens, propertySize, propertiesCount, maxCombinationsLevel - 1);\n return combinations.sort(fitSorter);\n }\n\n function allCombinations(tokensVariant, propertySize, propertiesCount, level) {\n var differenceVariants = [[tokensVariant, sizeDifference(tokensVariant, propertySize, propertiesCount)]];\n if (tokensVariant.length > 2 && level > 0) {\n for (var i = tokensVariant.length - 1; i >= 0; i--) {\n var subVariant = Array.prototype.slice.call(tokensVariant, 0);\n subVariant.splice(i, 1);\n differenceVariants = differenceVariants.concat(\n allCombinations(subVariant, propertySize, propertiesCount, level - 1)\n );\n }\n }\n\n return differenceVariants;\n }\n\n function sizeDifference(tokensVariant, propertySize, propertiesCount) {\n var allSelectorsSize = 0;\n for (var i = tokensVariant.length - 1; i >= 0; i--) {\n allSelectorsSize += tokensVariant[i][2].length > propertiesCount\n ? serializeRules(tokensVariant[i][1]).length\n : -1;\n }\n return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1;\n }\n\n function dropAsNewTokenAt(position, properties, allSelectors, mergeableTokens) {\n var i, j, k, m;\n var allProperties = [];\n\n for (i = mergeableTokens.length - 1; i >= 0; i--) {\n var mergeableToken = mergeableTokens[i];\n\n for (j = mergeableToken[2].length - 1; j >= 0; j--) {\n var mergeableProperty = mergeableToken[2][j];\n\n for (k = 0, m = properties.length; k < m; k++) {\n var property = properties[k];\n\n var mergeablePropertyName = mergeableProperty[1][1];\n var propertyName = property[0];\n var propertyBody = property[4];\n if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) {\n mergeableToken[2].splice(j, 1);\n break;\n }\n }\n }\n }\n\n for (i = properties.length - 1; i >= 0; i--) {\n allProperties.unshift(properties[i][3]);\n }\n\n var newToken = [Token.RULE, allSelectors, allProperties];\n tokens.splice(position, 0, newToken);\n }\n\n function dropPropertiesAt(position, movedProperty) {\n var key = movedProperty[4];\n var toMove = movableTokens[key];\n\n if (toMove && toMove.length > 1) {\n if (!shortenMultiMovesIfPossible(position, movedProperty)) { shortenIfPossible(position, movedProperty); }\n }\n }\n\n function shortenMultiMovesIfPossible(position, movedProperty) {\n var candidates = [];\n var propertiesAndMergableTokens = [];\n var key = movedProperty[4];\n var j, k;\n\n var mergeableTokens = tokensToMerge(movableTokens[key]);\n if (mergeableTokens.length < 2) { return; }\n\n movableLoop:\n for (var value in movableTokens) {\n var tokensList = movableTokens[value];\n\n for (j = mergeableTokens.length - 1; j >= 0; j--) {\n if (tokensList.indexOf(mergeableTokens[j]) == -1) { continue movableLoop; }\n }\n\n candidates.push(value);\n }\n\n if (candidates.length < 2) { return false; }\n\n for (j = candidates.length - 1; j >= 0; j--) {\n for (k = movedProperties.length - 1; k >= 0; k--) {\n if (movedProperties[k][4] == candidates[j]) {\n propertiesAndMergableTokens.unshift([movedProperties[k], mergeableTokens]);\n break;\n }\n }\n }\n\n return processMultiPropertyMove(position, propertiesAndMergableTokens);\n }\n\n function processMultiPropertyMove(position, propertiesAndMergableTokens) {\n var valueSize = 0;\n var properties = [];\n var property;\n\n for (var i = propertiesAndMergableTokens.length - 1; i >= 0; i--) {\n property = propertiesAndMergableTokens[i][0];\n var fullValue = property[4];\n valueSize += fullValue.length + (i > 0 ? 1 : 0);\n\n properties.push(property);\n }\n\n var mergeableTokens = propertiesAndMergableTokens[0][1];\n var bestFit = findAllFits(mergeableTokens, valueSize, properties.length)[0];\n if (bestFit[1] > 0) { return false; }\n\n var allSelectors = [];\n var qualifiedTokens = [];\n for (i = bestFit[0].length - 1; i >= 0; i--) {\n allSelectors = bestFit[0][i][1].concat(allSelectors);\n qualifiedTokens.unshift(bestFit[0][i]);\n }\n\n allSelectors = tidyRuleDuplicates(allSelectors);\n dropAsNewTokenAt(position, properties, allSelectors, qualifiedTokens);\n\n for (i = properties.length - 1; i >= 0; i--) {\n property = properties[i];\n var index = movedProperties.indexOf(property);\n\n delete movableTokens[property[4]];\n\n if (index > -1 && movedToBeDropped.indexOf(index) == -1) { movedToBeDropped.push(index); }\n }\n\n return true;\n }\n\n function boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) {\n var propertyName = property[0];\n var movedPropertyName = movedProperty[0];\n if (propertyName != movedPropertyName) { return false; }\n\n var key = movedProperty[4];\n var toMove = movableTokens[key];\n return toMove && toMove.indexOf(token) > -1;\n }\n\n for (var i = tokens.length - 1; i >= 0; i--) {\n var token = tokens[i];\n var isRule;\n var j, k, m;\n var samePropertyAt;\n\n if (token[0] == Token.RULE) {\n isRule = true;\n } else if (token[0] == Token.NESTED_BLOCK) {\n isRule = false;\n } else {\n continue;\n }\n\n // We cache movedProperties.length as it may change in the loop\n var movedCount = movedProperties.length;\n\n var properties = extractProperties(token);\n movedToBeDropped = [];\n\n var unmovableInCurrentToken = [];\n for (j = properties.length - 1; j >= 0; j--) {\n for (k = j - 1; k >= 0; k--) {\n if (!canReorderSingle(properties[j], properties[k], specificityCache)) {\n unmovableInCurrentToken.push(j);\n break;\n }\n }\n }\n\n for (j = properties.length - 1; j >= 0; j--) {\n var property = properties[j];\n var movedSameProperty = false;\n\n for (k = 0; k < movedCount; k++) {\n var movedProperty = movedProperties[k];\n\n if (movedToBeDropped.indexOf(k) == -1 && (\n !canReorderSingle(property, movedProperty, specificityCache)\n && !boundToAnotherPropertyInCurrrentToken(property, movedProperty, token)\n || movableTokens[movedProperty[4]] && movableTokens[movedProperty[4]].length === mergeLimit)\n ) {\n dropPropertiesAt(i + 1, movedProperty);\n\n if (movedToBeDropped.indexOf(k) == -1) {\n movedToBeDropped.push(k);\n delete movableTokens[movedProperty[4]];\n }\n }\n\n if (!movedSameProperty) {\n movedSameProperty = property[0] == movedProperty[0] && property[1] == movedProperty[1];\n\n if (movedSameProperty) {\n samePropertyAt = k;\n }\n }\n }\n\n if (!isRule || unmovableInCurrentToken.indexOf(j) > -1) { continue; }\n\n var key = property[4];\n\n if (movedSameProperty && movedProperties[samePropertyAt][5].length + property[5].length > mergeLimit) {\n dropPropertiesAt(i + 1, movedProperties[samePropertyAt]);\n movedProperties.splice(samePropertyAt, 1);\n movableTokens[key] = [token];\n movedSameProperty = false;\n } else {\n movableTokens[key] = movableTokens[key] || [];\n movableTokens[key].push(token);\n }\n\n if (movedSameProperty) {\n movedProperties[samePropertyAt] = cloneAndMergeSelectors(movedProperties[samePropertyAt], property);\n } else {\n movedProperties.push(property);\n }\n }\n\n movedToBeDropped = movedToBeDropped.sort(naturalSorter);\n for (j = 0, m = movedToBeDropped.length; j < m; j++) {\n var dropAt = movedToBeDropped[j] - j;\n movedProperties.splice(dropAt, 1);\n }\n }\n\n var position = tokens[0] && tokens[0][0] == Token.AT_RULE && tokens[0][1].indexOf('@charset') === 0 ? 1 : 0;\n for (; position < tokens.length - 1; position++) {\n var isImportRule = tokens[position][0] === Token.AT_RULE && tokens[position][1].indexOf('@import') === 0;\n var isComment = tokens[position][0] === Token.COMMENT;\n if (!(isImportRule || isComment)) { break; }\n }\n\n for (i = 0; i < movedProperties.length; i++) {\n dropPropertiesAt(position, movedProperties[i]);\n }\n}\n\nmodule.exports = restructure;\n","var mergeAdjacent = require('./merge-adjacent');\nvar mergeMediaQueries = require('./merge-media-queries');\nvar mergeNonAdjacentByBody = require('./merge-non-adjacent-by-body');\nvar mergeNonAdjacentBySelector = require('./merge-non-adjacent-by-selector');\nvar reduceNonAdjacent = require('./reduce-non-adjacent');\nvar removeDuplicateFontAtRules = require('./remove-duplicate-font-at-rules');\nvar removeDuplicateMediaQueries = require('./remove-duplicate-media-queries');\nvar removeDuplicates = require('./remove-duplicates');\nvar removeUnusedAtRules = require('./remove-unused-at-rules');\nvar restructure = require('./restructure');\n\nvar optimizeProperties = require('./properties/optimize');\n\nvar OptimizationLevel = require('../../options/optimization-level').OptimizationLevel;\n\nvar Token = require('../../tokenizer/token');\n\nfunction removeEmpty(tokens) {\n for (var i = 0, l = tokens.length; i < l; i++) {\n var token = tokens[i];\n var isEmpty = false;\n\n switch (token[0]) {\n case Token.RULE:\n isEmpty = token[1].length === 0 || token[2].length === 0;\n break;\n case Token.NESTED_BLOCK:\n removeEmpty(token[2]);\n isEmpty = token[2].length === 0;\n break;\n case Token.AT_RULE:\n isEmpty = token[1].length === 0;\n break;\n case Token.AT_RULE_BLOCK:\n isEmpty = token[2].length === 0;\n }\n\n if (isEmpty) {\n tokens.splice(i, 1);\n i--;\n l--;\n }\n }\n}\n\nfunction recursivelyOptimizeBlocks(tokens, context) {\n for (var i = 0, l = tokens.length; i < l; i++) {\n var token = tokens[i];\n\n if (token[0] == Token.NESTED_BLOCK) {\n var isKeyframes = /@(-moz-|-o-|-webkit-)?keyframes/.test(token[1][0][1]);\n level2Optimize(token[2], context, !isKeyframes);\n }\n }\n}\n\nfunction recursivelyOptimizeProperties(tokens, context) {\n for (var i = 0, l = tokens.length; i < l; i++) {\n var token = tokens[i];\n\n switch (token[0]) {\n case Token.RULE:\n optimizeProperties(token[2], true, true, context);\n break;\n case Token.NESTED_BLOCK:\n recursivelyOptimizeProperties(token[2], context);\n }\n }\n}\n\nfunction level2Optimize(tokens, context, withRestructuring) {\n var levelOptions = context.options.level[OptimizationLevel.Two];\n var level2Plugins = context.options.plugins.level2Block;\n var reduced;\n var i;\n\n recursivelyOptimizeBlocks(tokens, context);\n recursivelyOptimizeProperties(tokens, context);\n\n if (levelOptions.removeDuplicateRules) {\n removeDuplicates(tokens, context);\n }\n\n if (levelOptions.mergeAdjacentRules) {\n mergeAdjacent(tokens, context);\n }\n\n if (levelOptions.reduceNonAdjacentRules) {\n reduceNonAdjacent(tokens, context);\n }\n\n if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != 'body') {\n mergeNonAdjacentBySelector(tokens, context);\n }\n\n if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != 'selector') {\n mergeNonAdjacentByBody(tokens, context);\n }\n\n if (levelOptions.restructureRules && levelOptions.mergeAdjacentRules && withRestructuring) {\n restructure(tokens, context);\n mergeAdjacent(tokens, context);\n }\n\n if (levelOptions.restructureRules && !levelOptions.mergeAdjacentRules && withRestructuring) {\n restructure(tokens, context);\n }\n\n if (levelOptions.removeDuplicateFontRules) {\n removeDuplicateFontAtRules(tokens, context);\n }\n\n if (levelOptions.removeDuplicateMediaBlocks) {\n removeDuplicateMediaQueries(tokens, context);\n }\n\n if (levelOptions.removeUnusedAtRules) {\n removeUnusedAtRules(tokens, context);\n }\n\n if (levelOptions.mergeMedia) {\n reduced = mergeMediaQueries(tokens, context);\n for (i = reduced.length - 1; i >= 0; i--) {\n level2Optimize(reduced[i][2], context, false);\n }\n }\n\n for (i = 0; i < level2Plugins.length; i++) {\n level2Plugins[i](tokens);\n }\n\n if (levelOptions.removeEmpty) {\n removeEmpty(tokens);\n }\n\n return tokens;\n}\n\nmodule.exports = level2Optimize;\n","var functionNoVendorRegexStr = '[A-Z]+(\\\\-|[A-Z]|[0-9])+\\\\(.*?\\\\)';\nvar functionVendorRegexStr = '\\\\-(\\\\-|[A-Z]|[0-9])+\\\\(.*?\\\\)';\nvar variableRegexStr = 'var\\\\(\\\\-\\\\-[^\\\\)]+\\\\)';\nvar functionAnyRegexStr = '(' + variableRegexStr + '|' + functionNoVendorRegexStr + '|' + functionVendorRegexStr + ')';\n\nvar calcRegex = new RegExp('^(\\\\-moz\\\\-|\\\\-webkit\\\\-)?calc\\\\([^\\\\)]+\\\\)$', 'i');\nvar decimalRegex = /[0-9]/;\nvar functionAnyRegex = new RegExp('^' + functionAnyRegexStr + '$', 'i');\nvar hexAlphaColorRegex = /^#(?:[0-9a-f]{4}|[0-9a-f]{8})$/i;\n// eslint-disable-next-line max-len\nvar hslColorRegex = /^hsl\\(\\s{0,31}[-.]?\\d+\\s{0,31},\\s{0,31}\\d*\\.?\\d+%\\s{0,31},\\s{0,31}\\d*\\.?\\d+%\\s{0,31}\\)|hsla\\(\\s{0,31}[-.]?\\d+\\s{0,31},\\s{0,31}\\d*\\.?\\d+%\\s{0,31},\\s{0,31}\\d*\\.?\\d+%\\s{0,31},\\s{0,31}\\.?\\d+\\s{0,31}\\)$/;\n// eslint-disable-next-line max-len\nvar hslColorWithSpacesRegex = /^hsl\\(\\s{0,31}[-.]?\\d+(deg)?\\s{1,31}\\d*\\.?\\d+%\\s{1,31}\\d*\\.?\\d+%\\s{0,31}\\)|hsla\\(\\s{0,31}[-.]?\\d+(deg)?\\s{1,31}\\d*\\.?\\d+%\\s{1,31}\\d*\\.?\\d+%\\s{1,31}\\/\\s{1,31}\\d*\\.?\\d+%?\\s{0,31}\\)$/;\nvar identifierRegex = /^(-[a-z0-9_][a-z0-9\\-_]*|[a-z_][a-z0-9\\-_]*)$/i;\nvar namedEntityRegex = /^[a-z]+$/i;\nvar prefixRegex = /^-([a-z0-9]|-)*$/i;\nvar quotedTextRegex = /^(\"[^\"]*\"|'[^']*')$/i;\n// eslint-disable-next-line max-len\nvar rgbColorRegex = /^rgb\\(\\s{0,31}[\\d]{1,3}\\s{0,31},\\s{0,31}[\\d]{1,3}\\s{0,31},\\s{0,31}[\\d]{1,3}\\s{0,31}\\)|rgba\\(\\s{0,31}[\\d]{1,3}\\s{0,31},\\s{0,31}[\\d]{1,3}\\s{0,31},\\s{0,31}[\\d]{1,3}\\s{0,31},\\s{0,31}[.\\d]+\\s{0,31}\\)$/i;\n// eslint-disable-next-line max-len\nvar rgbColorWithSpacesRegex = /^rgb\\(\\s{0,31}[\\d]{1,3}\\s{1,31}[\\d]{1,3}\\s{1,31}[\\d]{1,3}\\s{0,31}\\)|rgba\\(\\s{0,31}[\\d]{1,3}\\s{1,31}[\\d]{1,3}\\s{1,31}[\\d]{1,3}\\s{1,31}\\/\\s{1,31}[\\d]*\\.?[.\\d]+%?\\s{0,31}\\)$/i;\nvar timeUnitPattern = /\\d+(s|ms)/;\nvar timingFunctionRegex = /^(cubic-bezier|steps)\\([^)]+\\)$/;\nvar validTimeUnits = ['ms', 's'];\nvar urlRegex = /^url\\([\\s\\S]+\\)$/i;\nvar variableRegex = new RegExp('^' + variableRegexStr + '$', 'i');\n\nvar eightValueColorRegex = /^#[0-9a-f]{8}$/i;\nvar fourValueColorRegex = /^#[0-9a-f]{4}$/i;\nvar sixValueColorRegex = /^#[0-9a-f]{6}$/i;\nvar threeValueColorRegex = /^#[0-9a-f]{3}$/i;\n\nvar DECIMAL_DOT = '.';\nvar MINUS_SIGN = '-';\nvar PLUS_SIGN = '+';\n\nvar Keywords = {\n '^': [\n 'inherit',\n 'initial',\n 'unset'\n ],\n '*-style': [\n 'auto',\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid'\n ],\n '*-timing-function': [\n 'ease',\n 'ease-in',\n 'ease-in-out',\n 'ease-out',\n 'linear',\n 'step-end',\n 'step-start'\n ],\n 'animation-direction': [\n 'alternate',\n 'alternate-reverse',\n 'normal',\n 'reverse'\n ],\n 'animation-fill-mode': [\n 'backwards',\n 'both',\n 'forwards',\n 'none'\n ],\n 'animation-iteration-count': [\n 'infinite'\n ],\n 'animation-name': [\n 'none'\n ],\n 'animation-play-state': [\n 'paused',\n 'running'\n ],\n 'background-attachment': [\n 'fixed',\n 'inherit',\n 'local',\n 'scroll'\n ],\n 'background-clip': [\n 'border-box',\n 'content-box',\n 'inherit',\n 'padding-box',\n 'text'\n ],\n 'background-origin': [\n 'border-box',\n 'content-box',\n 'inherit',\n 'padding-box'\n ],\n 'background-position': [\n 'bottom',\n 'center',\n 'left',\n 'right',\n 'top'\n ],\n 'background-repeat': [\n 'no-repeat',\n 'inherit',\n 'repeat',\n 'repeat-x',\n 'repeat-y',\n 'round',\n 'space'\n ],\n 'background-size': [\n 'auto',\n 'cover',\n 'contain'\n ],\n 'border-collapse': [\n 'collapse',\n 'inherit',\n 'separate'\n ],\n bottom: [\n 'auto'\n ],\n clear: [\n 'both',\n 'left',\n 'none',\n 'right'\n ],\n color: [\n 'transparent'\n ],\n cursor: [\n 'all-scroll',\n 'auto',\n 'col-resize',\n 'crosshair',\n 'default',\n 'e-resize',\n 'help',\n 'move',\n 'n-resize',\n 'ne-resize',\n 'no-drop',\n 'not-allowed',\n 'nw-resize',\n 'pointer',\n 'progress',\n 'row-resize',\n 's-resize',\n 'se-resize',\n 'sw-resize',\n 'text',\n 'vertical-text',\n 'w-resize',\n 'wait'\n ],\n display: [\n 'block',\n 'inline',\n 'inline-block',\n 'inline-table',\n 'list-item',\n 'none',\n 'table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row',\n 'table-row-group'\n ],\n float: [\n 'left',\n 'none',\n 'right'\n ],\n left: [\n 'auto'\n ],\n font: [\n 'caption',\n 'icon',\n 'menu',\n 'message-box',\n 'small-caption',\n 'status-bar',\n 'unset'\n ],\n 'font-size': [\n 'large',\n 'larger',\n 'medium',\n 'small',\n 'smaller',\n 'x-large',\n 'x-small',\n 'xx-large',\n 'xx-small'\n ],\n 'font-stretch': [\n 'condensed',\n 'expanded',\n 'extra-condensed',\n 'extra-expanded',\n 'normal',\n 'semi-condensed',\n 'semi-expanded',\n 'ultra-condensed',\n 'ultra-expanded'\n ],\n 'font-style': [\n 'italic',\n 'normal',\n 'oblique'\n ],\n 'font-variant': [\n 'normal',\n 'small-caps'\n ],\n 'font-weight': [\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n 'bold',\n 'bolder',\n 'lighter',\n 'normal'\n ],\n 'line-height': [\n 'normal'\n ],\n 'list-style-position': [\n 'inside',\n 'outside'\n ],\n 'list-style-type': [\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'decimal|disc', // this is the default value of list-style-type, see comment in configuration.js\n 'georgian',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'none',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman'\n ],\n overflow: [\n 'auto',\n 'hidden',\n 'scroll',\n 'visible'\n ],\n position: [\n 'absolute',\n 'fixed',\n 'relative',\n 'static'\n ],\n right: [\n 'auto'\n ],\n 'text-align': [\n 'center',\n 'justify',\n 'left',\n 'left|right', // this is the default value of list-style-type, see comment in configuration.js\n 'right'\n ],\n 'text-decoration': [\n 'line-through',\n 'none',\n 'overline',\n 'underline'\n ],\n 'text-overflow': [\n 'clip',\n 'ellipsis'\n ],\n top: [\n 'auto'\n ],\n 'vertical-align': [\n 'baseline',\n 'bottom',\n 'middle',\n 'sub',\n 'super',\n 'text-bottom',\n 'text-top',\n 'top'\n ],\n visibility: [\n 'collapse',\n 'hidden',\n 'visible'\n ],\n 'white-space': [\n 'normal',\n 'nowrap',\n 'pre'\n ],\n width: [\n 'inherit',\n 'initial',\n 'medium',\n 'thick',\n 'thin'\n ]\n};\n\nvar Units = [\n '%',\n 'ch',\n 'cm',\n 'em',\n 'ex',\n 'in',\n 'mm',\n 'pc',\n 'pt',\n 'px',\n 'rem',\n 'vh',\n 'vm',\n 'vmax',\n 'vmin',\n 'vw'\n];\n\nfunction isColor(value) {\n return value != 'auto'\n && (\n isKeyword('color')(value)\n || isHexColor(value)\n || isColorFunction(value)\n || isNamedEntity(value)\n );\n}\n\nfunction isColorFunction(value) {\n return isRgbColor(value) || isHslColor(value);\n}\n\nfunction isDynamicUnit(value) {\n return calcRegex.test(value);\n}\n\nfunction isFunction(value) {\n return functionAnyRegex.test(value);\n}\n\nfunction isHexColor(value) {\n return threeValueColorRegex.test(value)\n || fourValueColorRegex.test(value)\n || sixValueColorRegex.test(value)\n || eightValueColorRegex.test(value);\n}\n\nfunction isHslColor(value) {\n return hslColorRegex.test(value) || hslColorWithSpacesRegex.test(value);\n}\n\nfunction isHexAlphaColor(value) {\n return hexAlphaColorRegex.test(value);\n}\n\nfunction isIdentifier(value) {\n return identifierRegex.test(value);\n}\n\nfunction isQuotedText(value) {\n return quotedTextRegex.test(value);\n}\n\nfunction isImage(value) {\n return value == 'none' || value == 'inherit' || isUrl(value);\n}\n\nfunction isKeyword(propertyName) {\n return function(value) {\n return Keywords[propertyName].indexOf(value) > -1;\n };\n}\n\nfunction isNamedEntity(value) {\n return namedEntityRegex.test(value);\n}\n\nfunction isNumber(value) {\n return scanForNumber(value) == value.length;\n}\n\nfunction isRgbColor(value) {\n return rgbColorRegex.test(value) || rgbColorWithSpacesRegex.test(value);\n}\n\nfunction isPrefixed(value) {\n return prefixRegex.test(value);\n}\n\nfunction isPositiveNumber(value) {\n return isNumber(value)\n && parseFloat(value) >= 0;\n}\n\nfunction isVariable(value) {\n return variableRegex.test(value);\n}\n\nfunction isTime(value) {\n var numberUpTo = scanForNumber(value);\n\n return numberUpTo == value.length && parseInt(value) === 0\n || numberUpTo > -1 && validTimeUnits.indexOf(value.slice(numberUpTo + 1)) > -1\n || isCalculatedTime(value);\n}\n\nfunction isCalculatedTime(value) {\n return isFunction(value) && timeUnitPattern.test(value);\n}\n\nfunction isTimingFunction() {\n var isTimingFunctionKeyword = isKeyword('*-timing-function');\n\n return function(value) {\n return isTimingFunctionKeyword(value) || timingFunctionRegex.test(value);\n };\n}\n\nfunction isUnit(validUnits, value) {\n var numberUpTo = scanForNumber(value);\n\n return numberUpTo == value.length && parseInt(value) === 0\n || numberUpTo > -1 && validUnits.indexOf(value.slice(numberUpTo + 1).toLowerCase()) > -1\n || value == 'auto'\n || value == 'inherit';\n}\n\nfunction isUrl(value) {\n return urlRegex.test(value);\n}\n\nfunction isZIndex(value) {\n return value == 'auto'\n || isNumber(value)\n || isKeyword('^')(value);\n}\n\nfunction scanForNumber(value) {\n var hasDot = false;\n var hasSign = false;\n var character;\n var i, l;\n\n for (i = 0, l = value.length; i < l; i++) {\n character = value[i];\n\n if (i === 0 && (character == PLUS_SIGN || character == MINUS_SIGN)) {\n hasSign = true;\n } else if (i > 0 && hasSign && (character == PLUS_SIGN || character == MINUS_SIGN)) {\n return i - 1;\n } else if (character == DECIMAL_DOT && !hasDot) {\n hasDot = true;\n } else if (character == DECIMAL_DOT && hasDot) {\n return i - 1;\n } else if (decimalRegex.test(character)) {\n continue;\n } else {\n return i - 1;\n }\n }\n\n return i;\n}\n\nfunction validator(compatibility) {\n var validUnits = Units.slice(0).filter(function(value) {\n return !(value in compatibility.units) || compatibility.units[value] === true;\n });\n\n if (compatibility.customUnits.rpx) {\n validUnits.push('rpx');\n }\n\n return {\n colorOpacity: compatibility.colors.opacity,\n colorHexAlpha: compatibility.colors.hexAlpha,\n isAnimationDirectionKeyword: isKeyword('animation-direction'),\n isAnimationFillModeKeyword: isKeyword('animation-fill-mode'),\n isAnimationIterationCountKeyword: isKeyword('animation-iteration-count'),\n isAnimationNameKeyword: isKeyword('animation-name'),\n isAnimationPlayStateKeyword: isKeyword('animation-play-state'),\n isTimingFunction: isTimingFunction(),\n isBackgroundAttachmentKeyword: isKeyword('background-attachment'),\n isBackgroundClipKeyword: isKeyword('background-clip'),\n isBackgroundOriginKeyword: isKeyword('background-origin'),\n isBackgroundPositionKeyword: isKeyword('background-position'),\n isBackgroundRepeatKeyword: isKeyword('background-repeat'),\n isBackgroundSizeKeyword: isKeyword('background-size'),\n isColor: isColor,\n isColorFunction: isColorFunction,\n isDynamicUnit: isDynamicUnit,\n isFontKeyword: isKeyword('font'),\n isFontSizeKeyword: isKeyword('font-size'),\n isFontStretchKeyword: isKeyword('font-stretch'),\n isFontStyleKeyword: isKeyword('font-style'),\n isFontVariantKeyword: isKeyword('font-variant'),\n isFontWeightKeyword: isKeyword('font-weight'),\n isFunction: isFunction,\n isGlobal: isKeyword('^'),\n isHexAlphaColor: isHexAlphaColor,\n isHslColor: isHslColor,\n isIdentifier: isIdentifier,\n isImage: isImage,\n isKeyword: isKeyword,\n isLineHeightKeyword: isKeyword('line-height'),\n isListStylePositionKeyword: isKeyword('list-style-position'),\n isListStyleTypeKeyword: isKeyword('list-style-type'),\n isNumber: isNumber,\n isPrefixed: isPrefixed,\n isPositiveNumber: isPositiveNumber,\n isQuotedText: isQuotedText,\n isRgbColor: isRgbColor,\n isStyleKeyword: isKeyword('*-style'),\n isTime: isTime,\n isUnit: isUnit.bind(null, validUnits),\n isUrl: isUrl,\n isVariable: isVariable,\n isWidth: isKeyword('width'),\n isZIndex: isZIndex\n };\n}\n\nmodule.exports = validator;\n","var DEFAULTS = {\n '*': {\n colors: {\n hexAlpha: false, // 4- and 8-character hex notation\n opacity: true // rgba / hsla\n },\n customUnits: { rpx: false },\n properties: {\n backgroundClipMerging: true, // background-clip to shorthand\n backgroundOriginMerging: true, // background-origin to shorthand\n backgroundSizeMerging: true, // background-size to shorthand\n colors: true, // any kind of color transformations, like `#ff00ff` to `#f0f` or `#fff` into `red`\n ieBangHack: false, // !ie suffix hacks on IE<8\n ieFilters: false, // whether to preserve `filter` and `-ms-filter` properties\n iePrefixHack: false, // underscore / asterisk prefix hacks on IE\n ieSuffixHack: false, // \\9 suffix hacks on IE6-9, \\0 suffix hack on IE6-11\n merging: true, // merging properties into one\n shorterLengthUnits: false, // optimize pixel units into `pt`, `pc` or `in` units\n spaceAfterClosingBrace: true, // 'url() no-repeat' to 'url()no-repeat'\n urlQuotes: true, // whether to wrap content of `url()` into quotes or not\n zeroUnits: true // 0[unit] -> 0\n },\n selectors: {\n adjacentSpace: false, // div+ nav Android stock browser hack\n ie7Hack: false, // *+html hack\n mergeablePseudoClasses: [\n ':active',\n ':after',\n ':before',\n ':empty',\n ':checked',\n ':disabled',\n ':empty',\n ':enabled',\n ':first-child',\n ':first-letter',\n ':first-line',\n ':first-of-type',\n ':focus',\n ':hover',\n ':lang',\n ':last-child',\n ':last-of-type',\n ':link',\n ':not',\n ':nth-child',\n ':nth-last-child',\n ':nth-last-of-type',\n ':nth-of-type',\n ':only-child',\n ':only-of-type',\n ':root',\n ':target',\n ':visited'\n ], // selectors with these pseudo-classes can be merged as these are universally supported\n mergeablePseudoElements: [\n '::after',\n '::before',\n '::first-letter',\n '::first-line'\n ], // selectors with these pseudo-elements can be merged as these are universally supported\n mergeLimit: 8191, // number of rules that can be safely merged together\n multiplePseudoMerging: true\n },\n units: {\n ch: true,\n in: true,\n pc: true,\n pt: true,\n rem: true,\n vh: true,\n vm: true, // vm is vmin on IE9+ see https://developer.mozilla.org/en-US/docs/Web/CSS/length\n vmax: true,\n vmin: true,\n vw: true\n }\n }\n};\n\nDEFAULTS.ie11 = merge(DEFAULTS['*'], { properties: { ieSuffixHack: true } });\n\nDEFAULTS.ie10 = merge(DEFAULTS['*'], { properties: { ieSuffixHack: true } });\n\nDEFAULTS.ie9 = merge(DEFAULTS['*'], {\n properties: {\n ieFilters: true,\n ieSuffixHack: true\n }\n});\n\nDEFAULTS.ie8 = merge(DEFAULTS.ie9, {\n colors: { opacity: false },\n properties: {\n backgroundClipMerging: false,\n backgroundOriginMerging: false,\n backgroundSizeMerging: false,\n iePrefixHack: true,\n merging: false\n },\n selectors: {\n mergeablePseudoClasses: [\n ':after',\n ':before',\n ':first-child',\n ':first-letter',\n ':focus',\n ':hover',\n ':visited'\n ],\n mergeablePseudoElements: []\n },\n units: {\n ch: false,\n rem: false,\n vh: false,\n vm: false,\n vmax: false,\n vmin: false,\n vw: false\n }\n});\n\nDEFAULTS.ie7 = merge(DEFAULTS.ie8, {\n properties: { ieBangHack: true },\n selectors: {\n ie7Hack: true,\n mergeablePseudoClasses: [\n ':first-child',\n ':first-letter',\n ':hover',\n ':visited'\n ]\n }\n});\n\nfunction compatibilityFrom(source) {\n return merge(DEFAULTS['*'], calculateSource(source));\n}\n\nfunction merge(source, target) {\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n var value = source[key];\n\n if (Object.prototype.hasOwnProperty.call(target, key) && typeof value === 'object' && !Array.isArray(value)) {\n target[key] = merge(value, target[key] || {});\n } else {\n target[key] = key in target ? target[key] : value;\n }\n }\n }\n\n return target;\n}\n\nfunction calculateSource(source) {\n if (typeof source == 'object') { return source; }\n\n if (!/[,+-]/.test(source)) { return DEFAULTS[source] || DEFAULTS['*']; }\n\n var parts = source.split(',');\n var template = parts[0] in DEFAULTS\n ? DEFAULTS[parts.shift()]\n : DEFAULTS['*'];\n\n source = {};\n\n parts.forEach(function(part) {\n var isAdd = part[0] == '+';\n var key = part.substring(1).split('.');\n var group = key[0];\n var option = key[1];\n\n source[group] = source[group] || {};\n source[group][option] = isAdd;\n });\n\n return merge(template, source);\n}\n\nmodule.exports = compatibilityFrom;\n","var HTTP_RESOURCE_PATTERN = /^http:\\/\\//;\n\nfunction isHttpResource(uri) {\n return HTTP_RESOURCE_PATTERN.test(uri);\n}\n\nmodule.exports = isHttpResource;\n","var HTTPS_RESOURCE_PATTERN = /^https:\\/\\//;\n\nfunction isHttpsResource(uri) {\n return HTTPS_RESOURCE_PATTERN.test(uri);\n}\n\nmodule.exports = isHttpsResource;\n","var http = require('http');\nvar https = require('https');\nvar url = require('url');\n\nvar isHttpResource = require('../utils/is-http-resource');\nvar isHttpsResource = require('../utils/is-https-resource');\nvar override = require('../utils/override');\n\nvar HTTP_PROTOCOL = 'http:';\n\nfunction loadRemoteResource(uri, inlineRequest, inlineTimeout, callback) {\n var proxyProtocol = inlineRequest.protocol || inlineRequest.hostname;\n var errorHandled = false;\n var requestOptions;\n var fetch;\n\n requestOptions = override(\n url.parse(uri),\n inlineRequest || {}\n );\n\n if (inlineRequest.hostname !== undefined) {\n // overwrite as we always expect a http proxy currently\n requestOptions.protocol = inlineRequest.protocol || HTTP_PROTOCOL;\n requestOptions.path = requestOptions.href;\n }\n\n fetch = (proxyProtocol && !isHttpsResource(proxyProtocol)) || isHttpResource(uri)\n ? http.get\n : https.get;\n\n fetch(requestOptions, function(res) {\n var chunks = [];\n var movedUri;\n\n if (errorHandled) {\n return;\n }\n\n if (res.statusCode < 200 || res.statusCode > 399) {\n return callback(res.statusCode, null);\n } if (res.statusCode > 299) {\n movedUri = url.resolve(uri, res.headers.location);\n return loadRemoteResource(movedUri, inlineRequest, inlineTimeout, callback);\n }\n\n res.on('data', function(chunk) {\n chunks.push(chunk.toString());\n });\n res.on('end', function() {\n var body = chunks.join('');\n callback(null, body);\n });\n })\n .on('error', function(res) {\n if (errorHandled) {\n return;\n }\n\n errorHandled = true;\n callback(res.message, null);\n })\n .on('timeout', function() {\n if (errorHandled) {\n return;\n }\n\n errorHandled = true;\n callback('timeout', null);\n })\n .setTimeout(inlineTimeout);\n}\n\nmodule.exports = loadRemoteResource;\n","var loadRemoteResource = require('../reader/load-remote-resource');\n\nfunction fetchFrom(callback) {\n return callback || loadRemoteResource;\n}\n\nmodule.exports = fetchFrom;\n","function inlineOptionsFrom(rules) {\n if (Array.isArray(rules)) {\n return rules;\n }\n\n if (rules === false) {\n return ['none'];\n }\n\n return undefined === rules\n ? ['local']\n : rules.split(',');\n}\n\nmodule.exports = inlineOptionsFrom;\n","var url = require('url');\n\nvar override = require('../utils/override');\n\nfunction inlineRequestFrom(option) {\n return override(\n /* jshint camelcase: false */\n proxyOptionsFrom(process.env.HTTP_PROXY || process.env.http_proxy),\n option || {}\n );\n}\n\nfunction proxyOptionsFrom(httpProxy) {\n return httpProxy\n ? {\n hostname: url.parse(httpProxy).hostname,\n port: parseInt(url.parse(httpProxy).port)\n }\n : {};\n}\n\nmodule.exports = inlineRequestFrom;\n","var DEFAULT_TIMEOUT = 5000;\n\nfunction inlineTimeoutFrom(option) {\n return option || DEFAULT_TIMEOUT;\n}\n\nmodule.exports = inlineTimeoutFrom;\n","function pluginsFrom(plugins) {\n var flatPlugins = {\n level1Value: [],\n level1Property: [],\n level2Block: []\n };\n\n plugins = plugins || [];\n\n flatPlugins.level1Value = plugins\n .map(function(plugin) { return plugin.level1 && plugin.level1.value; })\n .filter(function(plugin) { return plugin != null; });\n\n flatPlugins.level1Property = plugins\n .map(function(plugin) { return plugin.level1 && plugin.level1.property; })\n .filter(function(plugin) { return plugin != null; });\n\n flatPlugins.level2Block = plugins\n .map(function(plugin) { return plugin.level2 && plugin.level2.block; })\n .filter(function(plugin) { return plugin != null; });\n\n return flatPlugins;\n}\n\nmodule.exports = pluginsFrom;\n","function rebaseFrom(rebaseOption, rebaseToOption) {\n if (undefined !== rebaseToOption) {\n return true;\n } if (undefined === rebaseOption) {\n return false;\n }\n return !!rebaseOption;\n}\n\nmodule.exports = rebaseFrom;\n","var path = require('path');\n\nfunction rebaseToFrom(option) {\n return option ? path.resolve(option) : process.cwd();\n}\n\nmodule.exports = rebaseToFrom;\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\nconst 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","/* -*- 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\nconst 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\nconst VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nconst VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nconst VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nconst 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 */\n// eslint-disable-next-line no-unused-vars\nfunction fromVLQSigned(aValue) {\n const isNegative = (aValue & 1) === 1;\n const 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 let encoded = \"\";\n let digit;\n\n let 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","/* -*- 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 }\n throw new Error('\"' + aName + '\" is a required argument.');\n\n}\nexports.getArg = getArg;\n\nconst urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nconst dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n const 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 let 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\nconst 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 const cache = [];\n\n return function(input) {\n for (let i = 0; i < cache.length; i++) {\n if (cache[i].input === input) {\n const temp = cache[0];\n cache[0] = cache[i];\n cache[i] = temp;\n return cache[0].result;\n }\n }\n\n const 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 */\nconst normalize = lruMemoize(function normalize(aPath) {\n let path = aPath;\n const url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n const isAbsolute = exports.isAbsolute(path);\n\n // Split the path into parts between `/` characters. This is much faster than\n // using `.split(/\\/+/g)`.\n const parts = [];\n let start = 0;\n let 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 let up = 0;\n for (i = parts.length - 1; i >= 0; i--) {\n const 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 const aPathUrl = urlParse(aPath);\n const 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 const 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 let level = 0;\n while (aPath.indexOf(aRoot + \"/\") !== 0) {\n const 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\nconst supportsNullProto = (function() {\n const 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 const length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n /* eslint-disable no-multi-spaces */\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 /* eslint-enable no-multi-spaces */\n\n for (let 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 let 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\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 let 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 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 let 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 // “sources” entry. This value is prepended to the individual\n // entries in the “source” 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 // “sourceRoot”, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n const 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 const 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\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 */\nclass ArraySet {\n constructor() {\n this._array = [];\n this._set = new Map();\n }\n\n /**\n * Static method for creating ArraySet instances from an existing array.\n */\n static fromArray(aArray, aAllowDuplicates) {\n const set = new ArraySet();\n for (let 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 */\n size() {\n return this._set.size;\n }\n\n /**\n * Add the given string to this set.\n *\n * @param String aStr\n */\n add(aStr, aAllowDuplicates) {\n const isDuplicate = this.has(aStr);\n const idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n this._set.set(aStr, idx);\n }\n }\n\n /**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\n has(aStr) {\n return this._set.has(aStr);\n }\n\n /**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\n indexOf(aStr) {\n const idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\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 */\n 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 */\n 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\nconst 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 const lineA = mappingA.generatedLine;\n const lineB = mappingB.generatedLine;\n const columnA = mappingA.generatedColumn;\n const 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 negligible overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nclass MappingList {\n constructor() {\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 */\n unsortedForEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n }\n\n /**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\n 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 */\n toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n }\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\nconst base64VLQ = require(\"./base64-vlq\");\nconst util = require(\"./util\");\nconst ArraySet = require(\"./array-set\").ArraySet;\nconst 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 */\nclass SourceMapGenerator {\n constructor(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._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n }\n\n /**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\n static fromSourceMap(aSourceMapConsumer) {\n const sourceRoot = aSourceMapConsumer.sourceRoot;\n const generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot\n });\n aSourceMapConsumer.eachMapping(function(mapping) {\n const 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 let 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 const 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 */\n addMapping(aArgs) {\n const generated = util.getArg(aArgs, \"generated\");\n const original = util.getArg(aArgs, \"original\", null);\n let source = util.getArg(aArgs, \"source\", null);\n let name = util.getArg(aArgs, \"name\", null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\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,\n name\n });\n }\n\n /**\n * Set the source content for a source file.\n */\n setSourceContent(aSourceFile, aSourceContent) {\n let 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 */\n applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n let 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 const 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 const newSources = this._mappings.toArray().length > 0\n ? new ArraySet()\n : this._sources;\n const 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 const 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 const source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n const 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(srcFile) {\n const content = aSourceMapConsumer.sourceContentFor(srcFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n srcFile = util.join(aSourceMapPath, srcFile);\n }\n if (sourceRoot != null) {\n srcFile = util.relative(sourceRoot, srcFile);\n }\n this.setSourceContent(srcFile, 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 */\n _validateMapping(aGenerated, aOriginal, aSource, 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 throw new Error(\n \"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 }\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\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\n } else {\n throw new Error(\"Invalid mapping: \" + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\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 */\n _serializeMappings() {\n let previousGeneratedColumn = 0;\n let previousGeneratedLine = 1;\n let previousOriginalColumn = 0;\n let previousOriginalLine = 0;\n let previousName = 0;\n let previousSource = 0;\n let result = \"\";\n let next;\n let mapping;\n let nameIdx;\n let sourceIdx;\n\n const mappings = this._mappings.toArray();\n for (let i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = \"\";\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += \";\";\n previousGeneratedLine++;\n }\n } else if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += \",\";\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\n _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 const 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 */\n toJSON() {\n const 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 */\n toString() {\n return JSON.stringify(this.toJSON());\n }\n}\n\nSourceMapGenerator.prototype._version = 3;\nexports.SourceMapGenerator = SourceMapGenerator;\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\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n const mid = Math.floor((aHigh - aLow) / 2) + aLow;\n const cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n } else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n }\n return mid;\n }\n\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n }\n return aLow < 0 ? -1 : aLow;\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n let index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n","export default '/home/runner/work/jetpack/jetpack/projects/js-packages/critical-css-gen/node_modules/source-map/lib'","/* Determine browser vs node environment by testing the default top level context. Solution courtesy of: https://stackoverflow.com/questions/17575790/environment-detection-node-js-or-browser */\nconst isBrowserEnvironment = (function() {\n // eslint-disable-next-line no-undef\n return (typeof window !== \"undefined\") && (this === window);\n}).call();\n\nif (isBrowserEnvironment) {\n // Web version of reading a wasm file into an array buffer.\n\n let mappingsWasm = null;\n\n module.exports = function readWasm() {\n if (typeof mappingsWasm === \"string\") {\n return fetch(mappingsWasm)\n .then(response => response.arrayBuffer());\n }\n if (mappingsWasm instanceof ArrayBuffer) {\n return Promise.resolve(mappingsWasm);\n }\n throw new Error(\"You must provide the string URL or ArrayBuffer contents \" +\n \"of lib/mappings.wasm by calling \" +\n \"SourceMapConsumer.initialize({ 'lib/mappings.wasm': ... }) \" +\n \"before using SourceMapConsumer\");\n };\n\n module.exports.initialize = input => mappingsWasm = input;\n} else {\n // Node version of reading a wasm file into an array buffer.\n const fs = require(\"fs\");\n const path = require(\"path\");\n\n module.exports = function readWasm() {\n return new Promise((resolve, reject) => {\n const wasmPath = path.join(__dirname, \"mappings.wasm\");\n fs.readFile(wasmPath, null, (error, data) => {\n if (error) {\n reject(error);\n return;\n }\n\n resolve(data.buffer);\n });\n });\n };\n\n module.exports.initialize = _ => {\n console.debug(\"SourceMapConsumer.initialize is a no-op when running in node.js\");\n };\n}\n","const readWasm = require(\"../lib/read-wasm\");\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.lastGeneratedColumn = null;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\nlet cachedWasm = null;\n\nmodule.exports = function wasm() {\n if (cachedWasm) {\n return cachedWasm;\n }\n\n const callbackStack = [];\n\n cachedWasm = readWasm().then(buffer => {\n return WebAssembly.instantiate(buffer, {\n env: {\n mapping_callback(\n generatedLine,\n generatedColumn,\n\n hasLastGeneratedColumn,\n lastGeneratedColumn,\n\n hasOriginal,\n source,\n originalLine,\n originalColumn,\n\n hasName,\n name\n ) {\n const mapping = new Mapping();\n // JS uses 1-based line numbers, wasm uses 0-based.\n mapping.generatedLine = generatedLine + 1;\n mapping.generatedColumn = generatedColumn;\n\n if (hasLastGeneratedColumn) {\n // JS uses inclusive last generated column, wasm uses exclusive.\n mapping.lastGeneratedColumn = lastGeneratedColumn - 1;\n }\n\n if (hasOriginal) {\n mapping.source = source;\n // JS uses 1-based line numbers, wasm uses 0-based.\n mapping.originalLine = originalLine + 1;\n mapping.originalColumn = originalColumn;\n\n if (hasName) {\n mapping.name = name;\n }\n }\n\n callbackStack[callbackStack.length - 1](mapping);\n },\n\n start_all_generated_locations_for() { console.time(\"all_generated_locations_for\"); },\n end_all_generated_locations_for() { console.timeEnd(\"all_generated_locations_for\"); },\n\n start_compute_column_spans() { console.time(\"compute_column_spans\"); },\n end_compute_column_spans() { console.timeEnd(\"compute_column_spans\"); },\n\n start_generated_location_for() { console.time(\"generated_location_for\"); },\n end_generated_location_for() { console.timeEnd(\"generated_location_for\"); },\n\n start_original_location_for() { console.time(\"original_location_for\"); },\n end_original_location_for() { console.timeEnd(\"original_location_for\"); },\n\n start_parse_mappings() { console.time(\"parse_mappings\"); },\n end_parse_mappings() { console.timeEnd(\"parse_mappings\"); },\n\n start_sort_by_generated_location() { console.time(\"sort_by_generated_location\"); },\n end_sort_by_generated_location() { console.timeEnd(\"sort_by_generated_location\"); },\n\n start_sort_by_original_location() { console.time(\"sort_by_original_location\"); },\n end_sort_by_original_location() { console.timeEnd(\"sort_by_original_location\"); },\n }\n });\n }).then(Wasm => {\n return {\n exports: Wasm.instance.exports,\n withMappingCallback: (mappingCallback, f) => {\n callbackStack.push(mappingCallback);\n try {\n f();\n } finally {\n callbackStack.pop();\n }\n }\n };\n }).then(null, e => {\n cachedWasm = null;\n throw e;\n });\n\n return cachedWasm;\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\nconst util = require(\"./util\");\nconst binarySearch = require(\"./binary-search\");\nconst ArraySet = require(\"./array-set\").ArraySet;\nconst base64VLQ = require(\"./base64-vlq\"); // eslint-disable-line no-unused-vars\nconst readWasm = require(\"../lib/read-wasm\");\nconst wasm = require(\"./wasm\");\n\nconst INTERNAL = Symbol(\"smcInternal\");\n\nclass SourceMapConsumer {\n constructor(aSourceMap, aSourceMapURL) {\n // If the constructor was called by super(), just return Promise<this>.\n // Yes, this is a hack to retain the pre-existing API of the base-class\n // constructor also being an async factory function.\n if (aSourceMap == INTERNAL) {\n return Promise.resolve(this);\n }\n\n return _factory(aSourceMap, aSourceMapURL);\n }\n\n static initialize(opts) {\n readWasm.initialize(opts[\"lib/mappings.wasm\"]);\n }\n\n static fromSourceMap(aSourceMap, aSourceMapURL) {\n return _factoryBSM(aSourceMap, aSourceMapURL);\n }\n\n /**\n * Construct a new `SourceMapConsumer` from `rawSourceMap` and `sourceMapUrl`\n * (see the `SourceMapConsumer` constructor for details. Then, invoke the `async\n * function f(SourceMapConsumer) -> T` with the newly constructed consumer, wait\n * for `f` to complete, call `destroy` on the consumer, and return `f`'s return\n * value.\n *\n * You must not use the consumer after `f` completes!\n *\n * By using `with`, you do not have to remember to manually call `destroy` on\n * the consumer, since it will be called automatically once `f` completes.\n *\n * ```js\n * const xSquared = await SourceMapConsumer.with(\n * myRawSourceMap,\n * null,\n * async function (consumer) {\n * // Use `consumer` inside here and don't worry about remembering\n * // to call `destroy`.\n *\n * const x = await whatever(consumer);\n * return x * x;\n * }\n * );\n *\n * // You may not use that `consumer` anymore out here; it has\n * // been destroyed. But you can use `xSquared`.\n * console.log(xSquared);\n * ```\n */\n static async with(rawSourceMap, sourceMapUrl, f) {\n const consumer = await new SourceMapConsumer(rawSourceMap, sourceMapUrl);\n try {\n return await f(consumer);\n } finally {\n consumer.destroy();\n }\n }\n\n /**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\n _parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n }\n\n /**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\n eachMapping(aCallback, aContext, aOrder) {\n throw new Error(\"Subclasses must implement eachMapping\");\n }\n\n /**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number is 1-based.\n * - column: Optional. the column number in the original source.\n * The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\n allGeneratedPositionsFor(aArgs) {\n throw new Error(\"Subclasses must implement allGeneratedPositionsFor\");\n }\n\n destroy() {\n throw new Error(\"Subclasses must implement destroy\");\n }\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nclass BasicSourceMapConsumer extends SourceMapConsumer {\n constructor(aSourceMap, aSourceMapURL) {\n return super(INTERNAL).then(that => {\n let sourceMap = aSourceMap;\n if (typeof aSourceMap === \"string\") {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n const version = util.getArg(sourceMap, \"version\");\n let sources = util.getArg(sourceMap, \"sources\");\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n const names = util.getArg(sourceMap, \"names\", []);\n let sourceRoot = util.getArg(sourceMap, \"sourceRoot\", null);\n const sourcesContent = util.getArg(sourceMap, \"sourcesContent\", null);\n const mappings = util.getArg(sourceMap, \"mappings\");\n const file = util.getArg(sourceMap, \"file\", null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != that._version) {\n throw new Error(\"Unsupported version: \" + version);\n }\n\n if (sourceRoot) {\n sourceRoot = util.normalize(sourceRoot);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function(source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n that._names = ArraySet.fromArray(names.map(String), true);\n that._sources = ArraySet.fromArray(sources, true);\n\n that._absoluteSources = that._sources.toArray().map(function(s) {\n return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n });\n\n that.sourceRoot = sourceRoot;\n that.sourcesContent = sourcesContent;\n that._mappings = mappings;\n that._sourceMapURL = aSourceMapURL;\n that.file = file;\n\n that._computedColumnSpans = false;\n that._mappingsPtr = 0;\n that._wasm = null;\n\n return wasm().then(w => {\n that._wasm = w;\n return that;\n });\n });\n }\n\n /**\n * Utility function to find the index of a source. Returns -1 if not\n * found.\n */\n _findSourceIndex(aSource) {\n let relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n if (this._sources.has(relativeSource)) {\n return this._sources.indexOf(relativeSource);\n }\n\n // Maybe aSource is an absolute URL as returned by |sources|. In\n // this case we can't simply undo the transform.\n for (let i = 0; i < this._absoluteSources.length; ++i) {\n if (this._absoluteSources[i] == aSource) {\n return i;\n }\n }\n\n return -1;\n }\n\n /**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @param String aSourceMapURL\n * The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\n static fromSourceMap(aSourceMap, aSourceMapURL) {\n return new BasicSourceMapConsumer(aSourceMap.toString());\n }\n\n get sources() {\n return this._absoluteSources.slice();\n }\n\n _getMappingsPtr() {\n if (this._mappingsPtr === 0) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this._mappingsPtr;\n }\n\n /**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\n _parseMappings(aStr, aSourceRoot) {\n const size = aStr.length;\n\n const mappingsBufPtr = this._wasm.exports.allocate_mappings(size);\n const mappingsBuf = new Uint8Array(this._wasm.exports.memory.buffer, mappingsBufPtr, size);\n for (let i = 0; i < size; i++) {\n mappingsBuf[i] = aStr.charCodeAt(i);\n }\n\n const mappingsPtr = this._wasm.exports.parse_mappings(mappingsBufPtr);\n\n if (!mappingsPtr) {\n const error = this._wasm.exports.get_last_error();\n let msg = `Error parsing mappings (code ${error}): `;\n\n // XXX: keep these error codes in sync with `fitzgen/source-map-mappings`.\n switch (error) {\n case 1:\n msg += \"the mappings contained a negative line, column, source index, or name index\";\n break;\n case 2:\n msg += \"the mappings contained a number larger than 2**32\";\n break;\n case 3:\n msg += \"reached EOF while in the middle of parsing a VLQ\";\n break;\n case 4:\n msg += \"invalid base 64 character while parsing a VLQ\";\n break;\n default:\n msg += \"unknown error code\";\n break;\n }\n\n throw new Error(msg);\n }\n\n this._mappingsPtr = mappingsPtr;\n }\n\n eachMapping(aCallback, aContext, aOrder) {\n const context = aContext || null;\n const order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n const sourceRoot = this.sourceRoot;\n\n this._wasm.withMappingCallback(\n mapping => {\n if (mapping.source !== null) {\n mapping.source = this._sources.at(mapping.source);\n mapping.source = util.computeSourceURL(sourceRoot, mapping.source, this._sourceMapURL);\n\n if (mapping.name !== null) {\n mapping.name = this._names.at(mapping.name);\n }\n }\n\n aCallback.call(context, mapping);\n },\n () => {\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n this._wasm.exports.by_generated_location(this._getMappingsPtr());\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n this._wasm.exports.by_original_location(this._getMappingsPtr());\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n }\n );\n }\n\n allGeneratedPositionsFor(aArgs) {\n let source = util.getArg(aArgs, \"source\");\n const originalLine = util.getArg(aArgs, \"line\");\n const originalColumn = aArgs.column || 0;\n\n source = this._findSourceIndex(source);\n if (source < 0) {\n return [];\n }\n\n if (originalLine < 1) {\n throw new Error(\"Line numbers must be >= 1\");\n }\n\n if (originalColumn < 0) {\n throw new Error(\"Column numbers must be >= 0\");\n }\n\n const mappings = [];\n\n this._wasm.withMappingCallback(\n m => {\n let lastColumn = m.lastGeneratedColumn;\n if (this._computedColumnSpans && lastColumn === null) {\n lastColumn = Infinity;\n }\n mappings.push({\n line: m.generatedLine,\n column: m.generatedColumn,\n lastColumn,\n });\n }, () => {\n this._wasm.exports.all_generated_locations_for(\n this._getMappingsPtr(),\n source,\n originalLine - 1,\n \"column\" in aArgs,\n originalColumn\n );\n }\n );\n\n return mappings;\n }\n\n destroy() {\n if (this._mappingsPtr !== 0) {\n this._wasm.exports.free_mappings(this._mappingsPtr);\n this._mappingsPtr = 0;\n }\n }\n\n /**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\n computeColumnSpans() {\n if (this._computedColumnSpans) {\n return;\n }\n\n this._wasm.exports.compute_column_spans(this._getMappingsPtr());\n this._computedColumnSpans = true;\n }\n\n /**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\n originalPositionFor(aArgs) {\n const needle = {\n generatedLine: util.getArg(aArgs, \"line\"),\n generatedColumn: util.getArg(aArgs, \"column\")\n };\n\n if (needle.generatedLine < 1) {\n throw new Error(\"Line numbers must be >= 1\");\n }\n\n if (needle.generatedColumn < 0) {\n throw new Error(\"Column numbers must be >= 0\");\n }\n\n let bias = util.getArg(aArgs, \"bias\", SourceMapConsumer.GREATEST_LOWER_BOUND);\n if (bias == null) {\n bias = SourceMapConsumer.GREATEST_LOWER_BOUND;\n }\n\n let mapping;\n this._wasm.withMappingCallback(m => mapping = m, () => {\n this._wasm.exports.original_location_for(\n this._getMappingsPtr(),\n needle.generatedLine - 1,\n needle.generatedColumn,\n bias\n );\n });\n\n if (mapping) {\n if (mapping.generatedLine === needle.generatedLine) {\n let source = util.getArg(mapping, \"source\", null);\n if (source !== null) {\n source = this._sources.at(source);\n source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n }\n\n let name = util.getArg(mapping, \"name\", null);\n if (name !== null) {\n name = this._names.at(name);\n }\n\n return {\n source,\n line: util.getArg(mapping, \"originalLine\", null),\n column: util.getArg(mapping, \"originalColumn\", null),\n name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n /**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\n hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function(sc) { return sc == null; });\n }\n\n /**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\n sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n const index = this._findSourceIndex(aSource);\n if (index >= 0) {\n return this.sourcesContent[index];\n }\n\n let relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n let url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n const fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + relativeSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n\n throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n }\n\n /**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\n generatedPositionFor(aArgs) {\n let source = util.getArg(aArgs, \"source\");\n source = this._findSourceIndex(source);\n if (source < 0) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n\n const needle = {\n source,\n originalLine: util.getArg(aArgs, \"line\"),\n originalColumn: util.getArg(aArgs, \"column\")\n };\n\n if (needle.originalLine < 1) {\n throw new Error(\"Line numbers must be >= 1\");\n }\n\n if (needle.originalColumn < 0) {\n throw new Error(\"Column numbers must be >= 0\");\n }\n\n let bias = util.getArg(aArgs, \"bias\", SourceMapConsumer.GREATEST_LOWER_BOUND);\n if (bias == null) {\n bias = SourceMapConsumer.GREATEST_LOWER_BOUND;\n }\n\n let mapping;\n this._wasm.withMappingCallback(m => mapping = m, () => {\n this._wasm.exports.generated_location_for(\n this._getMappingsPtr(),\n needle.source,\n needle.originalLine - 1,\n needle.originalColumn,\n bias\n );\n });\n\n if (mapping) {\n if (mapping.source === needle.source) {\n let lastColumn = mapping.lastGeneratedColumn;\n if (this._computedColumnSpans && lastColumn === null) {\n lastColumn = Infinity;\n }\n return {\n line: util.getArg(mapping, \"generatedLine\", null),\n column: util.getArg(mapping, \"generatedColumn\", null),\n lastColumn,\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n}\n\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nclass IndexedSourceMapConsumer extends SourceMapConsumer {\n constructor(aSourceMap, aSourceMapURL) {\n return super(INTERNAL).then(that => {\n let sourceMap = aSourceMap;\n if (typeof aSourceMap === \"string\") {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n const version = util.getArg(sourceMap, \"version\");\n const sections = util.getArg(sourceMap, \"sections\");\n\n if (version != that._version) {\n throw new Error(\"Unsupported version: \" + version);\n }\n\n that._sources = new ArraySet();\n that._names = new ArraySet();\n that.__generatedMappings = null;\n that.__originalMappings = null;\n that.__generatedMappingsUnsorted = null;\n that.__originalMappingsUnsorted = null;\n\n let lastOffset = {\n line: -1,\n column: 0\n };\n return Promise.all(sections.map(s => {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error(\"Support for url field in sections not implemented.\");\n }\n const offset = util.getArg(s, \"offset\");\n const offsetLine = util.getArg(offset, \"line\");\n const offsetColumn = util.getArg(offset, \"column\");\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error(\"Section offsets must be ordered and non-overlapping.\");\n }\n lastOffset = offset;\n\n const cons = new SourceMapConsumer(util.getArg(s, \"map\"), aSourceMapURL);\n return cons.then(consumer => {\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer\n };\n });\n })).then(s => {\n that._sections = s;\n return that;\n });\n });\n }\n\n // `__generatedMappings` and `__originalMappings` are arrays that hold the\n // parsed mapping coordinates from the source map's \"mappings\" attribute. They\n // are lazily instantiated, accessed via the `_generatedMappings` and\n // `_originalMappings` getters respectively, and we only parse the mappings\n // and create these arrays once queried for a source location. We jump through\n // these hoops because there can be many thousands of mappings, and parsing\n // them is expensive, so we only want to do it if we must.\n //\n // Each object in the arrays is of the form:\n //\n // {\n // generatedLine: The line number in the generated code,\n // generatedColumn: The column number in the generated code,\n // source: The path to the original source file that generated this\n // chunk of code,\n // originalLine: The line number in the original source that\n // corresponds to this chunk of generated code,\n // originalColumn: The column number in the original source that\n // corresponds to this chunk of generated code,\n // name: The name of the original symbol which generated this chunk of\n // code.\n // }\n //\n // All properties except for `generatedLine` and `generatedColumn` can be\n // `null`.\n //\n // `_generatedMappings` is ordered by the generated positions.\n //\n // `_originalMappings` is ordered by the original positions.\n get _generatedMappings() {\n if (!this.__generatedMappings) {\n this._sortGeneratedMappings();\n }\n\n return this.__generatedMappings;\n }\n\n get _originalMappings() {\n if (!this.__originalMappings) {\n this._sortOriginalMappings();\n }\n\n return this.__originalMappings;\n }\n\n get _generatedMappingsUnsorted() {\n if (!this.__generatedMappingsUnsorted) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappingsUnsorted;\n }\n\n get _originalMappingsUnsorted() {\n if (!this.__originalMappingsUnsorted) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappingsUnsorted;\n }\n\n _sortGeneratedMappings() {\n const mappings = this._generatedMappingsUnsorted;\n mappings.sort(util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = mappings;\n }\n\n _sortOriginalMappings() {\n const mappings = this._originalMappingsUnsorted;\n mappings.sort(util.compareByOriginalPositions);\n this.__originalMappings = mappings;\n }\n\n /**\n * The list of original sources.\n */\n get sources() {\n const sources = [];\n for (let i = 0; i < this._sections.length; i++) {\n for (let j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n\n /**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\n originalPositionFor(aArgs) {\n const needle = {\n generatedLine: util.getArg(aArgs, \"line\"),\n generatedColumn: util.getArg(aArgs, \"column\")\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n const sectionIndex = binarySearch.search(needle, this._sections,\n function(aNeedle, section) {\n const cmp = aNeedle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (aNeedle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n const section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n }\n\n /**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\n hasContentsOfAllSources() {\n return this._sections.every(function(s) {\n return s.consumer.hasContentsOfAllSources();\n });\n }\n\n /**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\n sourceContentFor(aSource, nullOnMissing) {\n for (let i = 0; i < this._sections.length; i++) {\n const section = this._sections[i];\n\n const content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n\n /**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\n generatedPositionFor(aArgs) {\n for (let i = 0; i < this._sections.length; i++) {\n const section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer._findSourceIndex(util.getArg(aArgs, \"source\")) === -1) {\n continue;\n }\n const generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n const ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n }\n\n /**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\n _parseMappings(aStr, aSourceRoot) {\n const generatedMappings = this.__generatedMappingsUnsorted = [];\n const originalMappings = this.__originalMappingsUnsorted = [];\n for (let i = 0; i < this._sections.length; i++) {\n const section = this._sections[i];\n\n const sectionMappings = [];\n section.consumer.eachMapping(m => sectionMappings.push(m));\n\n for (let j = 0; j < sectionMappings.length; j++) {\n const mapping = sectionMappings[j];\n\n // TODO: test if null is correct here. The original code used\n // `source`, which would actually have gotten used as null because\n // var's get hoisted.\n // See: https://github.com/mozilla/source-map/issues/333\n let source = util.computeSourceURL(section.consumer.sourceRoot, null, this._sourceMapURL);\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n let name = null;\n if (mapping.name) {\n this._names.add(mapping.name);\n name = this._names.indexOf(mapping.name);\n }\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n const adjustedMapping = {\n source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name\n };\n\n generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === \"number\") {\n originalMappings.push(adjustedMapping);\n }\n }\n }\n }\n\n eachMapping(aCallback, aContext, aOrder) {\n const context = aContext || null;\n const order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n let mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n const sourceRoot = this.sourceRoot;\n mappings.map(function(mapping) {\n let source = null;\n if (mapping.source !== null) {\n source = this._sources.at(mapping.source);\n source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n }\n return {\n source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n }\n\n /**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\n _findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError(\"Line must be greater than or equal to 1, got \"\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError(\"Column must be greater than or equal to 0, got \"\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n }\n\n allGeneratedPositionsFor(aArgs) {\n const line = util.getArg(aArgs, \"line\");\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n const needle = {\n source: util.getArg(aArgs, \"source\"),\n originalLine: line,\n originalColumn: util.getArg(aArgs, \"column\", 0)\n };\n\n needle.source = this._findSourceIndex(needle.source);\n if (needle.source < 0) {\n return [];\n }\n\n if (needle.originalLine < 1) {\n throw new Error(\"Line numbers must be >= 1\");\n }\n\n if (needle.originalColumn < 0) {\n throw new Error(\"Column numbers must be >= 0\");\n }\n\n const mappings = [];\n\n let index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n let mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n const originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n let lastColumn = mapping.lastGeneratedColumn;\n if (this._computedColumnSpans && lastColumn === null) {\n lastColumn = Infinity;\n }\n mappings.push({\n line: util.getArg(mapping, \"generatedLine\", null),\n column: util.getArg(mapping, \"generatedColumn\", null),\n lastColumn,\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n const originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n let lastColumn = mapping.lastGeneratedColumn;\n if (this._computedColumnSpans && lastColumn === null) {\n lastColumn = Infinity;\n }\n mappings.push({\n line: util.getArg(mapping, \"generatedLine\", null),\n column: util.getArg(mapping, \"generatedColumn\", null),\n lastColumn,\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n }\n\n destroy() {\n for (let i = 0; i < this._sections.length; i++) {\n this._sections[i].consumer.destroy();\n }\n }\n}\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n/*\n * Cheat to get around inter-twingled classes. `factory()` can be at the end\n * where it has access to non-hoisted classes, but it gets hoisted itself.\n */\nfunction _factory(aSourceMap, aSourceMapURL) {\n let sourceMap = aSourceMap;\n if (typeof aSourceMap === \"string\") {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n const consumer = sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n return Promise.resolve(consumer);\n}\n\nfunction _factoryBSM(aSourceMap, aSourceMapURL) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\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\nconst SourceMapGenerator = require(\"./source-map-generator\").SourceMapGenerator;\nconst util = require(\"./util\");\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nconst REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nconst NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nconst isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nclass SourceNode {\n constructor(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n }\n\n /**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\n static fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n const node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n const remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n let remainingLinesIndex = 0;\n const shiftNextLine = function() {\n const lineContents = getNextLine();\n // The last line of a file might not have a newline.\n const newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n let lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n let lastMapping = null;\n let nextLine;\n\n aSourceMapConsumer.eachMapping(function(mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n nextLine = remainingLines[remainingLinesIndex] || \"\";\n const code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n nextLine = remainingLines[remainingLinesIndex] || \"\";\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function(sourceFile) {\n const content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n const source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n }\n\n /**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\n add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function(chunk) {\n this.add(chunk);\n }, this);\n } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n } else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n }\n\n /**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\n prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (let i = aChunk.length - 1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n } else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n }\n\n /**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\n walk(aFn) {\n let chunk;\n for (let i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n } else if (chunk !== \"\") {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n\n /**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\n join(aSep) {\n let newChildren;\n let i;\n const len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len - 1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n }\n\n /**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\n replaceRight(aPattern, aReplacement) {\n const lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n } else if (typeof lastChild === \"string\") {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n } else {\n this.children.push(\"\".replace(aPattern, aReplacement));\n }\n return this;\n }\n\n /**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\n setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n }\n\n /**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\n walkSourceContents(aFn) {\n for (let i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n const sources = Object.keys(this.sourceContents);\n for (let i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n }\n\n /**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\n toString() {\n let str = \"\";\n this.walk(function(chunk) {\n str += chunk;\n });\n return str;\n }\n\n /**\n * Returns the string representation of this source node along with a source\n * map.\n */\n toStringWithSourceMap(aArgs) {\n const generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n const map = new SourceMapGenerator(aArgs);\n let sourceMappingActive = false;\n let lastOriginalSource = null;\n let lastOriginalLine = null;\n let lastOriginalColumn = null;\n let lastOriginalName = null;\n this.walk(function(chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if (lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (let idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function(sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map };\n }\n}\n\nexports.SourceNode = SourceNode;\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require(\"./lib/source-map-generator\").SourceMapGenerator;\nexports.SourceMapConsumer = require(\"./lib/source-map-consumer\").SourceMapConsumer;\nexports.SourceNode = require(\"./lib/source-node\").SourceNode;\n","var SourceMapConsumer = require('source-map').SourceMapConsumer;\n\nfunction inputSourceMapTracker() {\n var maps = {};\n\n return {\n all: all.bind(null, maps),\n isTracking: isTracking.bind(null, maps),\n originalPositionFor: originalPositionFor.bind(null, maps),\n track: track.bind(null, maps)\n };\n}\n\nfunction all(maps) {\n return maps;\n}\n\nfunction isTracking(maps, source) {\n return source in maps;\n}\n\nfunction originalPositionFor(maps, metadata, range, selectorFallbacks) {\n var line = metadata[0];\n var column = metadata[1];\n var source = metadata[2];\n var position = {\n line: line,\n column: column + range\n };\n var originalPosition;\n\n while (!originalPosition && position.column > column) {\n position.column--;\n originalPosition = maps[source].originalPositionFor(position);\n }\n\n if (!originalPosition || originalPosition.column < 0) {\n return metadata;\n }\n\n if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) {\n return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1);\n }\n\n return originalPosition.line !== null\n ? toMetadata(originalPosition)\n : metadata;\n}\n\nfunction toMetadata(asHash) {\n return [asHash.line, asHash.column, asHash.source];\n}\n\nfunction track(maps, source, data) {\n maps[source] = new SourceMapConsumer(data);\n}\n\nmodule.exports = inputSourceMapTracker;\n","var REMOTE_RESOURCE_PATTERN = /^(\\w+:\\/\\/|\\/\\/)/;\nvar FILE_RESOURCE_PATTERN = /^file:\\/\\//;\n\nfunction isRemoteResource(uri) {\n return REMOTE_RESOURCE_PATTERN.test(uri) && !FILE_RESOURCE_PATTERN.test(uri);\n}\n\nmodule.exports = isRemoteResource;\n","var NO_PROTOCOL_RESOURCE_PATTERN = /^\\/\\//;\n\nfunction hasProtocol(uri) {\n return !NO_PROTOCOL_RESOURCE_PATTERN.test(uri);\n}\n\nmodule.exports = hasProtocol;\n","var path = require('path');\nvar url = require('url');\n\nvar isRemoteResource = require('../utils/is-remote-resource');\nvar hasProtocol = require('../utils/has-protocol');\n\nvar HTTP_PROTOCOL = 'http:';\n\nfunction isAllowedResource(uri, isRemote, rules) {\n var match;\n var absoluteUri;\n var allowed = !isRemote;\n var rule;\n var isNegated;\n var normalizedRule;\n var i;\n\n if (rules.length === 0) {\n return false;\n }\n\n if (isRemote && !hasProtocol(uri)) {\n uri = HTTP_PROTOCOL + uri;\n }\n\n match = isRemote\n ? url.parse(uri).host\n : uri;\n\n absoluteUri = isRemote\n ? uri\n : path.resolve(uri);\n\n for (i = 0; i < rules.length; i++) {\n rule = rules[i];\n isNegated = rule[0] == '!';\n normalizedRule = rule.substring(1);\n\n if (isNegated && isRemote && isRemoteRule(normalizedRule)) {\n allowed = allowed && !isAllowedResource(uri, true, [normalizedRule]);\n } else if (isNegated && !isRemote && !isRemoteRule(normalizedRule)) {\n allowed = allowed && !isAllowedResource(uri, false, [normalizedRule]);\n } else if (isNegated) {\n allowed = allowed && true;\n } else if (rule == 'all') {\n allowed = true;\n } else if (isRemote && rule == 'local') {\n allowed = allowed || false;\n } else if (isRemote && rule == 'remote') {\n allowed = true;\n } else if (!isRemote && rule == 'remote') {\n allowed = false;\n } else if (!isRemote && rule == 'local') {\n allowed = true;\n } else if (rule === match) {\n allowed = true;\n } else if (rule === uri) {\n allowed = true;\n } else if (isRemote && absoluteUri.indexOf(rule) === 0) {\n allowed = true;\n } else if (!isRemote && absoluteUri.indexOf(path.resolve(rule)) === 0) {\n allowed = true;\n } else if (isRemote != isRemoteRule(normalizedRule)) {\n allowed = allowed && true;\n } else {\n allowed = false;\n }\n }\n\n return allowed;\n}\n\nfunction isRemoteRule(rule) {\n return isRemoteResource(rule) || url.parse(HTTP_PROTOCOL + '//' + rule).host == rule;\n}\n\nmodule.exports = isAllowedResource;\n","var DATA_URI_PATTERN = /^data:(\\S*?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/;\n\nfunction matchDataUri(uri) {\n return DATA_URI_PATTERN.exec(uri);\n}\n\nmodule.exports = matchDataUri;\n","var path = require('path');\n\nfunction rebaseLocalMap(sourceMap, sourceUri, rebaseTo) {\n var currentPath = path.resolve('');\n var absoluteUri = path.resolve(currentPath, sourceUri);\n var absoluteUriDirectory = path.dirname(absoluteUri);\n\n sourceMap.sources = sourceMap.sources.map(function(source) {\n return path.relative(rebaseTo, path.resolve(absoluteUriDirectory, source));\n });\n\n return sourceMap;\n}\n\nmodule.exports = rebaseLocalMap;\n","var path = require('path');\nvar url = require('url');\n\nfunction rebaseRemoteMap(sourceMap, sourceUri) {\n var sourceDirectory = path.dirname(sourceUri);\n\n sourceMap.sources = sourceMap.sources.map(function(source) {\n return url.resolve(sourceDirectory, source);\n });\n\n return sourceMap;\n}\n\nmodule.exports = rebaseRemoteMap;\n","var DATA_URI_PATTERN = /^data:(\\S{0,31}?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/;\n\nfunction isDataUriResource(uri) {\n return DATA_URI_PATTERN.test(uri);\n}\n\nmodule.exports = isDataUriResource;\n","var fs = require('fs');\nvar path = require('path');\n\nvar isAllowedResource = require('./is-allowed-resource');\nvar matchDataUri = require('./match-data-uri');\nvar rebaseLocalMap = require('./rebase-local-map');\nvar rebaseRemoteMap = require('./rebase-remote-map');\n\nvar Token = require('../tokenizer/token');\nvar hasProtocol = require('../utils/has-protocol');\nvar isDataUriResource = require('../utils/is-data-uri-resource');\nvar isRemoteResource = require('../utils/is-remote-resource');\n\nvar MAP_MARKER_PATTERN = /^\\/\\*# sourceMappingURL=(\\S+) \\*\\/$/;\n\nfunction applySourceMaps(tokens, context, callback) {\n var applyContext = {\n callback: callback,\n fetch: context.options.fetch,\n index: 0,\n inline: context.options.inline,\n inlineRequest: context.options.inlineRequest,\n inlineTimeout: context.options.inlineTimeout,\n inputSourceMapTracker: context.inputSourceMapTracker,\n localOnly: context.localOnly,\n processedTokens: [],\n rebaseTo: context.options.rebaseTo,\n sourceTokens: tokens,\n warnings: context.warnings\n };\n\n return context.options.sourceMap && tokens.length > 0\n ? doApplySourceMaps(applyContext)\n : callback(tokens);\n}\n\nfunction doApplySourceMaps(applyContext) {\n var singleSourceTokens = [];\n var lastSource = findTokenSource(applyContext.sourceTokens[0]);\n var source;\n var token;\n var l;\n\n for (l = applyContext.sourceTokens.length; applyContext.index < l; applyContext.index++) {\n token = applyContext.sourceTokens[applyContext.index];\n source = findTokenSource(token);\n\n if (source != lastSource) {\n singleSourceTokens = [];\n lastSource = source;\n }\n\n singleSourceTokens.push(token);\n applyContext.processedTokens.push(token);\n\n if (token[0] == Token.COMMENT && MAP_MARKER_PATTERN.test(token[1])) {\n return fetchAndApplySourceMap(token[1], source, singleSourceTokens, applyContext);\n }\n }\n\n return applyContext.callback(applyContext.processedTokens);\n}\n\nfunction findTokenSource(token) {\n var scope;\n var metadata;\n\n if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT || token[0] == Token.RAW) {\n metadata = token[2][0];\n } else {\n scope = token[1][0];\n metadata = scope[2][0];\n }\n\n return metadata[2];\n}\n\nfunction fetchAndApplySourceMap(sourceMapComment, source, singleSourceTokens, applyContext) {\n return extractInputSourceMapFrom(sourceMapComment, applyContext, function(inputSourceMap) {\n if (inputSourceMap) {\n applyContext.inputSourceMapTracker.track(source, inputSourceMap);\n applySourceMapRecursively(singleSourceTokens, applyContext.inputSourceMapTracker);\n }\n\n applyContext.index++;\n return doApplySourceMaps(applyContext);\n });\n}\n\nfunction extractInputSourceMapFrom(sourceMapComment, applyContext, whenSourceMapReady) {\n var uri = MAP_MARKER_PATTERN.exec(sourceMapComment)[1];\n var absoluteUri;\n var sourceMap;\n var rebasedMap;\n\n if (isDataUriResource(uri)) {\n sourceMap = extractInputSourceMapFromDataUri(uri);\n return whenSourceMapReady(sourceMap);\n } if (isRemoteResource(uri)) {\n return loadInputSourceMapFromRemoteUri(uri, applyContext, function(sourceMap) {\n var parsedMap;\n\n if (sourceMap) {\n parsedMap = JSON.parse(sourceMap);\n rebasedMap = rebaseRemoteMap(parsedMap, uri);\n whenSourceMapReady(rebasedMap);\n } else {\n whenSourceMapReady(null);\n }\n });\n }\n // at this point `uri` is already rebased, see lib/reader/rebase.js#rebaseSourceMapComment\n // it is rebased to be consistent with rebasing other URIs\n // however here we need to resolve it back to read it from disk\n absoluteUri = path.resolve(applyContext.rebaseTo, uri);\n sourceMap = loadInputSourceMapFromLocalUri(absoluteUri, applyContext);\n\n if (sourceMap) {\n rebasedMap = rebaseLocalMap(sourceMap, absoluteUri, applyContext.rebaseTo);\n return whenSourceMapReady(rebasedMap);\n }\n return whenSourceMapReady(null);\n}\n\nfunction extractInputSourceMapFromDataUri(uri) {\n var dataUriMatch = matchDataUri(uri);\n var charset = dataUriMatch[2] ? dataUriMatch[2].split(/[=;]/)[2] : 'us-ascii';\n var encoding = dataUriMatch[3] ? dataUriMatch[3].split(';')[1] : 'utf8';\n var data = encoding == 'utf8' ? global.unescape(dataUriMatch[4]) : dataUriMatch[4];\n\n var buffer = Buffer.from(data, encoding);\n buffer.charset = charset;\n\n return JSON.parse(buffer.toString());\n}\n\nfunction loadInputSourceMapFromRemoteUri(uri, applyContext, whenLoaded) {\n var isAllowed = isAllowedResource(uri, true, applyContext.inline);\n var isRuntimeResource = !hasProtocol(uri);\n\n if (applyContext.localOnly) {\n applyContext.warnings.push('Cannot fetch remote resource from \"' + uri + '\" as no callback given.');\n return whenLoaded(null);\n } if (isRuntimeResource) {\n applyContext.warnings.push('Cannot fetch \"' + uri + '\" as no protocol given.');\n return whenLoaded(null);\n } if (!isAllowed) {\n applyContext.warnings.push('Cannot fetch \"' + uri + '\" as resource is not allowed.');\n return whenLoaded(null);\n }\n\n applyContext.fetch(uri, applyContext.inlineRequest, applyContext.inlineTimeout, function(error, body) {\n if (error) {\n applyContext.warnings.push('Missing source map at \"' + uri + '\" - ' + error);\n return whenLoaded(null);\n }\n\n whenLoaded(body);\n });\n}\n\nfunction loadInputSourceMapFromLocalUri(uri, applyContext) {\n var isAllowed = isAllowedResource(uri, false, applyContext.inline);\n var sourceMap;\n\n if (!fs.existsSync(uri) || !fs.statSync(uri).isFile()) {\n applyContext.warnings.push('Ignoring local source map at \"' + uri + '\" as resource is missing.');\n return null;\n } if (!isAllowed) {\n applyContext.warnings.push('Cannot fetch \"' + uri + '\" as resource is not allowed.');\n return null;\n } if (!fs.statSync(uri).size) {\n applyContext.warnings.push('Cannot fetch \"' + uri + '\" as resource is empty.');\n return null;\n }\n\n sourceMap = fs.readFileSync(uri, 'utf-8');\n return JSON.parse(sourceMap);\n}\n\nfunction applySourceMapRecursively(tokens, inputSourceMapTracker) {\n var token;\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n token = tokens[i];\n\n switch (token[0]) {\n case Token.AT_RULE:\n applySourceMapTo(token, inputSourceMapTracker);\n break;\n case Token.AT_RULE_BLOCK:\n applySourceMapRecursively(token[1], inputSourceMapTracker);\n applySourceMapRecursively(token[2], inputSourceMapTracker);\n break;\n case Token.AT_RULE_BLOCK_SCOPE:\n applySourceMapTo(token, inputSourceMapTracker);\n break;\n case Token.NESTED_BLOCK:\n applySourceMapRecursively(token[1], inputSourceMapTracker);\n applySourceMapRecursively(token[2], inputSourceMapTracker);\n break;\n case Token.NESTED_BLOCK_SCOPE:\n applySourceMapTo(token, inputSourceMapTracker);\n break;\n case Token.COMMENT:\n applySourceMapTo(token, inputSourceMapTracker);\n break;\n case Token.PROPERTY:\n applySourceMapRecursively(token, inputSourceMapTracker);\n break;\n case Token.PROPERTY_BLOCK:\n applySourceMapRecursively(token[1], inputSourceMapTracker);\n break;\n case Token.PROPERTY_NAME:\n applySourceMapTo(token, inputSourceMapTracker);\n break;\n case Token.PROPERTY_VALUE:\n applySourceMapTo(token, inputSourceMapTracker);\n break;\n case Token.RULE:\n applySourceMapRecursively(token[1], inputSourceMapTracker);\n applySourceMapRecursively(token[2], inputSourceMapTracker);\n break;\n case Token.RULE_SCOPE:\n applySourceMapTo(token, inputSourceMapTracker);\n }\n }\n\n return tokens;\n}\n\nfunction applySourceMapTo(token, inputSourceMapTracker) {\n var value = token[1];\n var metadata = token[2];\n var newMetadata = [];\n var i, l;\n\n for (i = 0, l = metadata.length; i < l; i++) {\n newMetadata.push(inputSourceMapTracker.originalPositionFor(metadata[i], value.length));\n }\n\n token[2] = newMetadata;\n}\n\nmodule.exports = applySourceMaps;\n","var split = require('../utils/split');\n\nvar BRACE_PREFIX = /^\\(/;\nvar BRACE_SUFFIX = /\\)$/;\nvar IMPORT_PREFIX_PATTERN = /^@import/i;\nvar QUOTE_PREFIX_PATTERN = /['\"]\\s{0,31}/;\nvar QUOTE_SUFFIX_PATTERN = /\\s{0,31}['\"]/;\nvar URL_PREFIX_PATTERN = /^url\\(\\s{0,31}/i;\nvar URL_SUFFIX_PATTERN = /\\s{0,31}\\)/i;\n\nfunction extractImportUrlAndMedia(atRuleValue) {\n var uri;\n var mediaQuery;\n var normalized;\n var parts;\n\n normalized = atRuleValue\n .replace(IMPORT_PREFIX_PATTERN, '')\n .trim()\n .replace(URL_PREFIX_PATTERN, '(')\n .replace(URL_SUFFIX_PATTERN, ') ')\n .replace(QUOTE_PREFIX_PATTERN, '')\n .replace(QUOTE_SUFFIX_PATTERN, '');\n\n parts = split(normalized, ' ');\n\n uri = parts[0]\n .replace(BRACE_PREFIX, '')\n .replace(BRACE_SUFFIX, '');\n mediaQuery = parts.slice(1).join(' ');\n\n return [uri, mediaQuery];\n}\n\nmodule.exports = extractImportUrlAndMedia;\n","var fs = require('fs');\nvar path = require('path');\n\nvar isAllowedResource = require('./is-allowed-resource');\n\nvar hasProtocol = require('../utils/has-protocol');\nvar isRemoteResource = require('../utils/is-remote-resource');\n\nfunction loadOriginalSources(context, callback) {\n var loadContext = {\n callback: callback,\n fetch: context.options.fetch,\n index: 0,\n inline: context.options.inline,\n inlineRequest: context.options.inlineRequest,\n inlineTimeout: context.options.inlineTimeout,\n localOnly: context.localOnly,\n rebaseTo: context.options.rebaseTo,\n sourcesContent: context.sourcesContent,\n uriToSource: uriToSourceMapping(context.inputSourceMapTracker.all()),\n warnings: context.warnings\n };\n\n return context.options.sourceMap && context.options.sourceMapInlineSources\n ? doLoadOriginalSources(loadContext)\n : callback();\n}\n\nfunction uriToSourceMapping(allSourceMapConsumers) {\n var mapping = {};\n var consumer;\n var uri;\n var source;\n var i, l;\n\n for (source in allSourceMapConsumers) {\n consumer = allSourceMapConsumers[source];\n\n for (i = 0, l = consumer.sources.length; i < l; i++) {\n uri = consumer.sources[i];\n source = consumer.sourceContentFor(uri, true);\n\n mapping[uri] = source;\n }\n }\n\n return mapping;\n}\n\nfunction doLoadOriginalSources(loadContext) {\n var uris = Object.keys(loadContext.uriToSource);\n var uri;\n var source;\n var total;\n\n for (total = uris.length; loadContext.index < total; loadContext.index++) {\n uri = uris[loadContext.index];\n source = loadContext.uriToSource[uri];\n\n if (source) {\n loadContext.sourcesContent[uri] = source;\n } else {\n return loadOriginalSource(uri, loadContext);\n }\n }\n\n return loadContext.callback();\n}\n\nfunction loadOriginalSource(uri, loadContext) {\n var content;\n\n if (isRemoteResource(uri)) {\n return loadOriginalSourceFromRemoteUri(uri, loadContext, function(content) {\n loadContext.index++;\n loadContext.sourcesContent[uri] = content;\n return doLoadOriginalSources(loadContext);\n });\n }\n content = loadOriginalSourceFromLocalUri(uri, loadContext);\n loadContext.index++;\n loadContext.sourcesContent[uri] = content;\n return doLoadOriginalSources(loadContext);\n}\n\nfunction loadOriginalSourceFromRemoteUri(uri, loadContext, whenLoaded) {\n var isAllowed = isAllowedResource(uri, true, loadContext.inline);\n var isRuntimeResource = !hasProtocol(uri);\n\n if (loadContext.localOnly) {\n loadContext.warnings.push('Cannot fetch remote resource from \"' + uri + '\" as no callback given.');\n return whenLoaded(null);\n } if (isRuntimeResource) {\n loadContext.warnings.push('Cannot fetch \"' + uri + '\" as no protocol given.');\n return whenLoaded(null);\n } if (!isAllowed) {\n loadContext.warnings.push('Cannot fetch \"' + uri + '\" as resource is not allowed.');\n return whenLoaded(null);\n }\n\n loadContext.fetch(uri, loadContext.inlineRequest, loadContext.inlineTimeout, function(error, content) {\n if (error) {\n loadContext.warnings.push('Missing original source at \"' + uri + '\" - ' + error);\n }\n\n whenLoaded(content);\n });\n}\n\nfunction loadOriginalSourceFromLocalUri(relativeUri, loadContext) {\n var isAllowed = isAllowedResource(relativeUri, false, loadContext.inline);\n var absoluteUri = path.resolve(loadContext.rebaseTo, relativeUri);\n\n if (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile()) {\n loadContext.warnings.push('Ignoring local source map at \"' + absoluteUri + '\" as resource is missing.');\n return null;\n } if (!isAllowed) {\n loadContext.warnings.push('Cannot fetch \"' + absoluteUri + '\" as resource is not allowed.');\n return null;\n }\n\n var result = fs.readFileSync(absoluteUri, 'utf8');\n if (result.charCodeAt(0) === 65279) {\n result = result.substring(1);\n }\n return result;\n}\n\nmodule.exports = loadOriginalSources;\n","var UNIX_SEPARATOR = '/';\nvar WINDOWS_SEPARATOR_PATTERN = /\\\\/g;\n\nfunction normalizePath(path) {\n return path.replace(WINDOWS_SEPARATOR_PATTERN, UNIX_SEPARATOR);\n}\n\nmodule.exports = normalizePath;\n","function restoreImport(uri, mediaQuery) {\n return ('@import ' + uri + ' ' + mediaQuery).trim();\n}\n\nmodule.exports = restoreImport;\n","var path = require('path');\nvar url = require('url');\n\nvar isDataUriResource = require('../utils/is-data-uri-resource');\n\nvar DOUBLE_QUOTE = '\"';\nvar SINGLE_QUOTE = '\\'';\nvar URL_PREFIX = 'url(';\nvar URL_SUFFIX = ')';\n\nvar PROTOCOL_LESS_PREFIX_PATTERN = /^[^\\w\\d]*\\/\\//;\nvar QUOTE_PREFIX_PATTERN = /^[\"']/;\nvar QUOTE_SUFFIX_PATTERN = /[\"']$/;\nvar ROUND_BRACKETS_PATTERN = /[()]/;\nvar URL_PREFIX_PATTERN = /^url\\(/i;\nvar URL_SUFFIX_PATTERN = /\\)$/;\nvar WHITESPACE_PATTERN = /\\s/;\n\nvar isWindows = process.platform == 'win32';\n\nfunction rebase(uri, rebaseConfig) {\n if (!rebaseConfig) {\n return uri;\n }\n\n if (isAbsolute(uri) && !isRemote(rebaseConfig.toBase)) {\n return uri;\n }\n\n if (isRemote(uri) || isSVGMarker(uri) || isInternal(uri) || isDataUriResource(uri)) {\n return uri;\n }\n\n if (isRemote(rebaseConfig.toBase)) {\n return url.resolve(rebaseConfig.toBase, uri);\n }\n\n return rebaseConfig.absolute\n ? normalize(absolute(uri, rebaseConfig))\n : normalize(relative(uri, rebaseConfig));\n}\n\nfunction isAbsolute(uri) {\n return path.isAbsolute(uri);\n}\n\nfunction isSVGMarker(uri) {\n return uri[0] == '#';\n}\n\nfunction isInternal(uri) {\n return /^\\w+:\\w+/.test(uri);\n}\n\nfunction isRemote(uri) {\n return /^[^:]+?:\\/\\//.test(uri) || PROTOCOL_LESS_PREFIX_PATTERN.test(uri);\n}\n\nfunction absolute(uri, rebaseConfig) {\n return path\n .resolve(path.join(rebaseConfig.fromBase || '', uri))\n .replace(rebaseConfig.toBase, '');\n}\n\nfunction relative(uri, rebaseConfig) {\n return path.relative(rebaseConfig.toBase, path.join(rebaseConfig.fromBase || '', uri));\n}\n\nfunction normalize(uri) {\n return isWindows ? uri.replace(/\\\\/g, '/') : uri;\n}\n\nfunction quoteFor(unquotedUrl) {\n if (unquotedUrl.indexOf(SINGLE_QUOTE) > -1) {\n return DOUBLE_QUOTE;\n } if (unquotedUrl.indexOf(DOUBLE_QUOTE) > -1) {\n return SINGLE_QUOTE;\n } if (hasWhitespace(unquotedUrl) || hasRoundBrackets(unquotedUrl)) {\n return SINGLE_QUOTE;\n }\n return '';\n}\n\nfunction hasWhitespace(url) {\n return WHITESPACE_PATTERN.test(url);\n}\n\nfunction hasRoundBrackets(url) {\n return ROUND_BRACKETS_PATTERN.test(url);\n}\n\nfunction rewriteUrl(originalUrl, rebaseConfig, pathOnly) {\n var strippedUrl = originalUrl\n .replace(URL_PREFIX_PATTERN, '')\n .replace(URL_SUFFIX_PATTERN, '')\n .trim();\n\n var unquotedUrl = strippedUrl\n .replace(QUOTE_PREFIX_PATTERN, '')\n .replace(QUOTE_SUFFIX_PATTERN, '')\n .trim();\n\n var quote = strippedUrl[0] == SINGLE_QUOTE || strippedUrl[0] == DOUBLE_QUOTE\n ? strippedUrl[0]\n : quoteFor(unquotedUrl);\n\n return pathOnly\n ? rebase(unquotedUrl, rebaseConfig)\n : URL_PREFIX + quote + rebase(unquotedUrl, rebaseConfig) + quote + URL_SUFFIX;\n}\n\nmodule.exports = rewriteUrl;\n","var IMPORT_PREFIX_PATTERN = /^@import/i;\n\nfunction isImport(value) {\n return IMPORT_PREFIX_PATTERN.test(value);\n}\n\nmodule.exports = isImport;\n","var extractImportUrlAndMedia = require('./extract-import-url-and-media');\nvar restoreImport = require('./restore-import');\nvar rewriteUrl = require('./rewrite-url');\n\nvar Token = require('../tokenizer/token');\nvar isImport = require('../utils/is-import');\n\nvar SOURCE_MAP_COMMENT_PATTERN = /^\\/\\*# sourceMappingURL=(\\S+) \\*\\/$/;\n\nfunction rebase(tokens, rebaseAll, validator, rebaseConfig) {\n return rebaseAll\n ? rebaseEverything(tokens, validator, rebaseConfig)\n : rebaseAtRules(tokens, validator, rebaseConfig);\n}\n\nfunction rebaseEverything(tokens, validator, rebaseConfig) {\n var token;\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n token = tokens[i];\n\n switch (token[0]) {\n case Token.AT_RULE:\n rebaseAtRule(token, validator, rebaseConfig);\n break;\n case Token.AT_RULE_BLOCK:\n rebaseProperties(token[2], validator, rebaseConfig);\n break;\n case Token.COMMENT:\n rebaseSourceMapComment(token, rebaseConfig);\n break;\n case Token.NESTED_BLOCK:\n rebaseEverything(token[2], validator, rebaseConfig);\n break;\n case Token.RULE:\n rebaseProperties(token[2], validator, rebaseConfig);\n break;\n }\n }\n\n return tokens;\n}\n\nfunction rebaseAtRules(tokens, validator, rebaseConfig) {\n var token;\n var i, l;\n\n for (i = 0, l = tokens.length; i < l; i++) {\n token = tokens[i];\n\n switch (token[0]) {\n case Token.AT_RULE:\n rebaseAtRule(token, validator, rebaseConfig);\n break;\n }\n }\n\n return tokens;\n}\n\nfunction rebaseAtRule(token, validator, rebaseConfig) {\n if (!isImport(token[1])) {\n return;\n }\n\n var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);\n var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig);\n var mediaQuery = uriAndMediaQuery[1];\n\n token[1] = restoreImport(newUrl, mediaQuery);\n}\n\nfunction rebaseSourceMapComment(token, rebaseConfig) {\n var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]);\n\n if (matches && matches[1].indexOf('data:') === -1) {\n token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true));\n }\n}\n\nfunction rebaseProperties(properties, validator, rebaseConfig) {\n var property;\n var value;\n var i, l;\n var j, m;\n\n for (i = 0, l = properties.length; i < l; i++) {\n property = properties[i];\n\n for (j = 2 /* 0 is Token.PROPERTY, 1 is name */, m = property.length; j < m; j++) {\n value = property[j][1];\n\n if (validator.isUrl(value)) {\n property[j][1] = rewriteUrl(value, rebaseConfig);\n }\n }\n }\n}\n\nmodule.exports = rebase;\n","var Marker = require('./marker');\nvar Token = require('./token');\n\nvar formatPosition = require('../utils/format-position');\n\nvar Level = {\n BLOCK: 'block',\n COMMENT: 'comment',\n DOUBLE_QUOTE: 'double-quote',\n RULE: 'rule',\n SINGLE_QUOTE: 'single-quote'\n};\n\nvar AT_RULES = [\n '@charset',\n '@import'\n];\n\nvar BLOCK_RULES = [\n '@-moz-document',\n '@document',\n '@-moz-keyframes',\n '@-ms-keyframes',\n '@-o-keyframes',\n '@-webkit-keyframes',\n '@keyframes',\n '@media',\n '@supports',\n '@container',\n '@layer'\n];\n\nvar IGNORE_END_COMMENT_PATTERN = /\\/\\* clean-css ignore:end \\*\\/$/;\nvar IGNORE_START_COMMENT_PATTERN = /^\\/\\* clean-css ignore:start \\*\\//;\n\nvar PAGE_MARGIN_BOXES = [\n '@bottom-center',\n '@bottom-left',\n '@bottom-left-corner',\n '@bottom-right',\n '@bottom-right-corner',\n '@left-bottom',\n '@left-middle',\n '@left-top',\n '@right-bottom',\n '@right-middle',\n '@right-top',\n '@top-center',\n '@top-left',\n '@top-left-corner',\n '@top-right',\n '@top-right-corner'\n];\n\nvar EXTRA_PAGE_BOXES = [\n '@footnote',\n '@footnotes',\n '@left',\n '@page-float-bottom',\n '@page-float-top',\n '@right'\n];\n\nvar REPEAT_PATTERN = /^\\[\\s{0,31}\\d+\\s{0,31}\\]$/;\nvar TAIL_BROKEN_VALUE_PATTERN = /([^}])\\}*$/;\nvar RULE_WORD_SEPARATOR_PATTERN = /[\\s(]/;\n\nfunction tokenize(source, externalContext) {\n var internalContext = {\n level: Level.BLOCK,\n position: {\n source: externalContext.source || undefined,\n line: 1,\n column: 0,\n index: 0\n }\n };\n\n return intoTokens(source, externalContext, internalContext, false);\n}\n\nfunction intoTokens(source, externalContext, internalContext, isNested) {\n var allTokens = [];\n var newTokens = allTokens;\n var lastToken;\n var ruleToken;\n var ruleTokens = [];\n var propertyToken;\n var metadata;\n var metadatas = [];\n var level = internalContext.level;\n var levels = [];\n var buffer = [];\n var buffers = [];\n var isBufferEmpty = true;\n var serializedBuffer;\n var serializedBufferPart;\n var roundBracketLevel = 0;\n var isQuoted;\n var isSpace;\n var isNewLineNix;\n var isNewLineWin;\n var isCarriageReturn;\n var isCommentStart;\n var wasCommentStart = false;\n var isCommentEnd;\n var wasCommentEnd = false;\n var isCommentEndMarker;\n var isEscaped;\n var wasEscaped = false;\n var characterWithNoSpecialMeaning;\n var isPreviousDash = false;\n var isVariable = false;\n var isRaw = false;\n var seekingValue = false;\n var seekingPropertyBlockClosing = false;\n var position = internalContext.position;\n var lastCommentStartAt;\n\n for (; position.index < source.length; position.index++) {\n var character = source[position.index];\n\n isQuoted = level == Level.SINGLE_QUOTE || level == Level.DOUBLE_QUOTE;\n isSpace = character == Marker.SPACE || character == Marker.TAB;\n isNewLineNix = character == Marker.NEW_LINE_NIX;\n isNewLineWin = character == Marker.NEW_LINE_NIX\n && source[position.index - 1] == Marker.CARRIAGE_RETURN;\n isCarriageReturn = character == Marker.CARRIAGE_RETURN\n && source[position.index + 1] && source[position.index + 1] != Marker.NEW_LINE_NIX;\n isCommentStart = !wasCommentEnd\n && level != Level.COMMENT && !isQuoted\n && character == Marker.ASTERISK && source[position.index - 1] == Marker.FORWARD_SLASH;\n isCommentEndMarker = !wasCommentStart\n && !isQuoted && character == Marker.FORWARD_SLASH\n && source[position.index - 1] == Marker.ASTERISK;\n isCommentEnd = level == Level.COMMENT && isCommentEndMarker;\n characterWithNoSpecialMeaning = !isSpace && !isCarriageReturn && (character >= 'A' && character <= 'Z' || character >= 'a' && character <= 'z' || character >= '0' && character <= '9' || character == '-');\n isVariable = isVariable || (level != Level.COMMENT && !seekingValue && isPreviousDash && character === '-' && buffer.length === 1);\n isPreviousDash = character === '-';\n roundBracketLevel = Math.max(roundBracketLevel, 0);\n\n metadata = isBufferEmpty\n ? [position.line, position.column, position.source]\n : metadata;\n\n if (isEscaped) {\n // previous character was a backslash\n buffer.push(character);\n isBufferEmpty = false;\n } else if (characterWithNoSpecialMeaning) {\n // it's just an alphanumeric character or a hyphen (part of any rule or property name) so let's end it quickly\n buffer.push(character);\n isBufferEmpty = false;\n } else if ((isSpace || isNewLineNix && !isNewLineWin) && (isQuoted || level == Level.COMMENT)) {\n buffer.push(character);\n isBufferEmpty = false;\n } else if ((isSpace || isNewLineNix && !isNewLineWin) && isBufferEmpty) {\n // noop\n } else if (!isCommentEnd && level == Level.COMMENT) {\n buffer.push(character);\n isBufferEmpty = false;\n } else if (!isCommentStart && !isCommentEnd && isRaw) {\n buffer.push(character);\n isBufferEmpty = false;\n } else if (isCommentStart\n && isVariable\n && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) {\n // comment start within a variable, e.g. var(/*<--\n buffer.push(character);\n isBufferEmpty = false;\n\n levels.push(level);\n level = Level.COMMENT;\n } else if (isCommentStart && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) {\n // comment start within block preceded by some content, e.g. div/*<--\n metadatas.push(metadata);\n buffer.push(character);\n buffers.push(buffer.slice(0, -2));\n isBufferEmpty = false;\n\n buffer = buffer.slice(-2);\n metadata = [position.line, position.column - 1, position.source];\n\n levels.push(level);\n level = Level.COMMENT;\n } else if (isCommentStart) {\n // comment start, e.g. /*<--\n levels.push(level);\n level = Level.COMMENT;\n buffer.push(character);\n isBufferEmpty = false;\n } else if (isCommentEnd && isVariable) {\n // comment end within a variable, e.g. var(/*!*/<--\n buffer.push(character);\n level = levels.pop();\n } else if (isCommentEnd && isIgnoreStartComment(buffer)) {\n // ignore:start comment end, e.g. /* clean-css ignore:start */<--\n serializedBuffer = buffer.join('').trim() + character;\n lastToken = [\n Token.COMMENT,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ];\n newTokens.push(lastToken);\n\n isRaw = true;\n metadata = metadatas.pop() || null;\n buffer = buffers.pop() || [];\n isBufferEmpty = buffer.length === 0;\n } else if (isCommentEnd && isIgnoreEndComment(buffer)) {\n // ignore:start comment end, e.g. /* clean-css ignore:end */<--\n serializedBuffer = buffer.join('') + character;\n lastCommentStartAt = serializedBuffer.lastIndexOf(Marker.FORWARD_SLASH + Marker.ASTERISK);\n\n serializedBufferPart = serializedBuffer.substring(0, lastCommentStartAt);\n lastToken = [\n Token.RAW,\n serializedBufferPart,\n [originalMetadata(metadata, serializedBufferPart, externalContext)]\n ];\n newTokens.push(lastToken);\n\n serializedBufferPart = serializedBuffer.substring(lastCommentStartAt);\n metadata = [position.line, position.column - serializedBufferPart.length + 1, position.source];\n lastToken = [\n Token.COMMENT,\n serializedBufferPart,\n [originalMetadata(metadata, serializedBufferPart, externalContext)]\n ];\n newTokens.push(lastToken);\n\n isRaw = false;\n level = levels.pop();\n metadata = metadatas.pop() || null;\n buffer = buffers.pop() || [];\n isBufferEmpty = buffer.length === 0;\n } else if (isCommentEnd) {\n // comment end, e.g. /* comment */<--\n serializedBuffer = buffer.join('').trim() + character;\n lastToken = [\n Token.COMMENT,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ];\n newTokens.push(lastToken);\n\n level = levels.pop();\n metadata = metadatas.pop() || null;\n buffer = buffers.pop() || [];\n isBufferEmpty = buffer.length === 0;\n } else if (isCommentEndMarker && source[position.index + 1] != Marker.ASTERISK) {\n externalContext.warnings.push('Unexpected \\'*/\\' at ' + formatPosition([position.line, position.column, position.source]) + '.');\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.SINGLE_QUOTE && !isQuoted) {\n // single quotation start, e.g. a[href^='https<--\n levels.push(level);\n level = Level.SINGLE_QUOTE;\n buffer.push(character);\n isBufferEmpty = false;\n } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {\n // single quotation end, e.g. a[href^='https'<--\n level = levels.pop();\n buffer.push(character);\n isBufferEmpty = false;\n } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) {\n // double quotation start, e.g. a[href^=\"<--\n levels.push(level);\n level = Level.DOUBLE_QUOTE;\n buffer.push(character);\n isBufferEmpty = false;\n } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {\n // double quotation end, e.g. a[href^=\"https\"<--\n level = levels.pop();\n buffer.push(character);\n isBufferEmpty = false;\n } else if (character != Marker.CLOSE_ROUND_BRACKET\n && character != Marker.OPEN_ROUND_BRACKET\n && level != Level.COMMENT && !isQuoted && roundBracketLevel > 0) {\n // character inside any function, e.g. hsla(.<--\n buffer.push(character);\n isBufferEmpty = false;\n } else if (character == Marker.OPEN_ROUND_BRACKET\n && !isQuoted && level != Level.COMMENT\n && !seekingValue) {\n // round open bracket, e.g. @import url(<--\n buffer.push(character);\n isBufferEmpty = false;\n\n roundBracketLevel++;\n } else if (character == Marker.CLOSE_ROUND_BRACKET\n && !isQuoted\n && level != Level.COMMENT\n && !seekingValue) {\n // round open bracket, e.g. @import url(test.css)<--\n buffer.push(character);\n isBufferEmpty = false;\n\n roundBracketLevel--;\n } else if (character == Marker.SEMICOLON && level == Level.BLOCK && buffer[0] == Marker.AT) {\n // semicolon ending rule at block level, e.g. @import '...';<--\n serializedBuffer = buffer.join('').trim();\n allTokens.push([\n Token.AT_RULE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.COMMA && level == Level.BLOCK && ruleToken) {\n // comma separator at block level, e.g. a,div,<--\n serializedBuffer = buffer.join('').trim();\n ruleToken[1].push([\n tokenScopeFrom(ruleToken[0]),\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.COMMA && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.AT_RULE) {\n // comma separator at block level, e.g. @import url(...) screen,<--\n // keep iterating as end semicolon will create the token\n buffer.push(character);\n isBufferEmpty = false;\n } else if (character == Marker.COMMA && level == Level.BLOCK) {\n // comma separator at block level, e.g. a,<--\n ruleToken = [tokenTypeFrom(buffer), [], []];\n serializedBuffer = buffer.join('').trim();\n ruleToken[1].push([\n tokenScopeFrom(ruleToken[0]),\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext, 0)]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.OPEN_CURLY_BRACKET\n && level == Level.BLOCK\n && ruleToken\n && ruleToken[0] == Token.NESTED_BLOCK) {\n // open brace opening at-rule at block level, e.g. @media{<--\n serializedBuffer = buffer.join('').trim();\n ruleToken[1].push([\n Token.NESTED_BLOCK_SCOPE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n allTokens.push(ruleToken);\n\n levels.push(level);\n position.column++;\n position.index++;\n buffer = [];\n isBufferEmpty = true;\n\n ruleToken[2] = intoTokens(source, externalContext, internalContext, true);\n ruleToken = null;\n } else if (character == Marker.OPEN_CURLY_BRACKET\n && level == Level.BLOCK\n && tokenTypeFrom(buffer) == Token.NESTED_BLOCK) {\n // open brace opening at-rule at block level, e.g. @media{<--\n serializedBuffer = buffer.join('').trim();\n ruleToken = ruleToken || [Token.NESTED_BLOCK, [], []];\n ruleToken[1].push([\n Token.NESTED_BLOCK_SCOPE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n allTokens.push(ruleToken);\n\n levels.push(level);\n position.column++;\n position.index++;\n buffer = [];\n isBufferEmpty = true;\n isVariable = false;\n\n ruleToken[2] = intoTokens(source, externalContext, internalContext, true);\n ruleToken = null;\n } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK) {\n // open brace opening rule at block level, e.g. div{<--\n serializedBuffer = buffer.join('').trim();\n ruleToken = ruleToken || [tokenTypeFrom(buffer), [], []];\n ruleToken[1].push([\n tokenScopeFrom(ruleToken[0]),\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]\n ]);\n newTokens = ruleToken[2];\n allTokens.push(ruleToken);\n\n levels.push(level);\n level = Level.RULE;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && seekingValue) {\n // open brace opening rule at rule level, e.g. div{--variable:{<--\n ruleTokens.push(ruleToken);\n ruleToken = [Token.PROPERTY_BLOCK, []];\n propertyToken.push(ruleToken);\n newTokens = ruleToken[1];\n\n levels.push(level);\n level = Level.RULE;\n seekingValue = false;\n } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && isPageMarginBox(buffer)) {\n // open brace opening page-margin box at rule level, e.g. @page{@top-center{<--\n serializedBuffer = buffer.join('').trim();\n ruleTokens.push(ruleToken);\n ruleToken = [Token.AT_RULE_BLOCK, [], []];\n ruleToken[1].push([\n Token.AT_RULE_BLOCK_SCOPE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n newTokens.push(ruleToken);\n newTokens = ruleToken[2];\n\n levels.push(level);\n level = Level.RULE;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.COLON && level == Level.RULE && !seekingValue) {\n // colon at rule level, e.g. a{color:<--\n serializedBuffer = buffer.join('').trim();\n propertyToken = [\n Token.PROPERTY,\n [\n Token.PROPERTY_NAME,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]\n ];\n newTokens.push(propertyToken);\n\n seekingValue = true;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.SEMICOLON\n && level == Level.RULE\n && propertyToken\n && ruleTokens.length > 0\n && !isBufferEmpty\n && buffer[0] == Marker.AT) {\n // semicolon at rule level for at-rule, e.g. a{--color:{@apply(--other-color);<--\n serializedBuffer = buffer.join('').trim();\n ruleToken[1].push([\n Token.AT_RULE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && !isBufferEmpty) {\n // semicolon at rule level, e.g. a{color:red;<--\n serializedBuffer = buffer.join('').trim();\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n\n propertyToken = null;\n seekingValue = false;\n buffer = [];\n isBufferEmpty = true;\n isVariable = false;\n } else if (character == Marker.SEMICOLON\n && level == Level.RULE\n && propertyToken\n && isBufferEmpty\n && isVariable\n && !propertyToken[2]) {\n // semicolon after empty variable value at rule level, e.g. a{--color: ;<--\n propertyToken.push([Token.PROPERTY_VALUE, ' ', [originalMetadata(metadata, ' ', externalContext)]]);\n isVariable = false;\n propertyToken = null;\n seekingValue = false;\n } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && isBufferEmpty) {\n // semicolon after bracketed value at rule level, e.g. a{color:rgb(...);<--\n propertyToken = null;\n seekingValue = false;\n } else if (character == Marker.SEMICOLON\n && level == Level.RULE\n && !isBufferEmpty\n && buffer[0] == Marker.AT) {\n // semicolon for at-rule at rule level, e.g. a{@apply(--variable);<--\n serializedBuffer = buffer.join('');\n newTokens.push([\n Token.AT_RULE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n\n seekingValue = false;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.SEMICOLON && level == Level.RULE && seekingPropertyBlockClosing) {\n // close brace after a property block at rule level, e.g. a{--custom:{color:red;};<--\n seekingPropertyBlockClosing = false;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.SEMICOLON && level == Level.RULE && isBufferEmpty) {\n // stray semicolon at rule level, e.g. a{;<--\n // noop\n } else if (character == Marker.CLOSE_CURLY_BRACKET\n && level == Level.RULE\n && propertyToken\n && seekingValue\n && !isBufferEmpty && ruleTokens.length > 0) {\n // close brace at rule level, e.g. a{--color:{color:red}<--\n serializedBuffer = buffer.join('');\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n propertyToken = null;\n ruleToken = ruleTokens.pop();\n newTokens = ruleToken[2];\n\n level = levels.pop();\n seekingValue = false;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.CLOSE_CURLY_BRACKET\n && level == Level.RULE\n && propertyToken\n && !isBufferEmpty\n && buffer[0] == Marker.AT\n && ruleTokens.length > 0) {\n // close brace at rule level for at-rule, e.g. a{--color:{@apply(--other-color)}<--\n serializedBuffer = buffer.join('');\n ruleToken[1].push([\n Token.AT_RULE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n propertyToken = null;\n ruleToken = ruleTokens.pop();\n newTokens = ruleToken[2];\n\n level = levels.pop();\n seekingValue = false;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.CLOSE_CURLY_BRACKET\n && level == Level.RULE\n && propertyToken\n && ruleTokens.length > 0) {\n // close brace at rule level after space, e.g. a{--color:{color:red }<--\n propertyToken = null;\n ruleToken = ruleTokens.pop();\n newTokens = ruleToken[2];\n\n level = levels.pop();\n seekingValue = false;\n } else if (character == Marker.CLOSE_CURLY_BRACKET\n && level == Level.RULE\n && propertyToken\n && !isBufferEmpty) {\n // close brace at rule level, e.g. a{color:red}<--\n serializedBuffer = buffer.join('');\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n propertyToken = null;\n ruleToken = ruleTokens.pop();\n newTokens = allTokens;\n\n level = levels.pop();\n seekingValue = false;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.CLOSE_CURLY_BRACKET\n && level == Level.RULE\n && !isBufferEmpty\n && buffer[0] == Marker.AT) {\n // close brace after at-rule at rule level, e.g. a{@apply(--variable)}<--\n propertyToken = null;\n ruleToken = null;\n serializedBuffer = buffer.join('').trim();\n newTokens.push([\n Token.AT_RULE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n newTokens = allTokens;\n\n level = levels.pop();\n seekingValue = false;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.CLOSE_CURLY_BRACKET\n && level == Level.RULE\n && levels[levels.length - 1] == Level.RULE) {\n // close brace after a property block at rule level, e.g. a{--custom:{color:red;}<--\n propertyToken = null;\n ruleToken = ruleTokens.pop();\n newTokens = ruleToken[2];\n\n level = levels.pop();\n seekingValue = false;\n seekingPropertyBlockClosing = true;\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.CLOSE_CURLY_BRACKET\n && level == Level.RULE\n && isVariable\n && propertyToken\n && !propertyToken[2]) {\n // close brace after an empty variable declaration inside a rule, e.g. a{--color: }<--\n propertyToken.push([Token.PROPERTY_VALUE, ' ', [originalMetadata(metadata, ' ', externalContext)]]);\n isVariable = false;\n propertyToken = null;\n ruleToken = null;\n newTokens = allTokens;\n\n level = levels.pop();\n seekingValue = false;\n isVariable = false;\n } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE) {\n // close brace after a rule, e.g. a{color:red;}<--\n propertyToken = null;\n ruleToken = null;\n newTokens = allTokens;\n\n level = levels.pop();\n seekingValue = false;\n isVariable = false;\n } else if (character == Marker.CLOSE_CURLY_BRACKET\n && level == Level.BLOCK\n && !isNested\n && position.index <= source.length - 1) {\n // stray close brace at block level, e.g. a{color:red}color:blue}<--\n externalContext.warnings.push('Unexpected \\'}\\' at ' + formatPosition([position.line, position.column, position.source]) + '.');\n buffer.push(character);\n isBufferEmpty = false;\n } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK) {\n // close brace at block level, e.g. @media screen {...}<--\n break;\n } else if (character == Marker.OPEN_ROUND_BRACKET && level == Level.RULE && seekingValue) {\n // round open bracket, e.g. a{color:hsla(<--\n buffer.push(character);\n isBufferEmpty = false;\n roundBracketLevel++;\n } else if (character == Marker.CLOSE_ROUND_BRACKET\n && level == Level.RULE\n && seekingValue\n && roundBracketLevel == 1) {\n // round close bracket, e.g. a{color:hsla(0,0%,0%)<--\n buffer.push(character);\n isBufferEmpty = false;\n serializedBuffer = buffer.join('').trim();\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n\n roundBracketLevel--;\n buffer = [];\n isBufferEmpty = true;\n isVariable = false;\n } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue) {\n // round close bracket within other brackets, e.g. a{width:calc((10rem / 2)<--\n buffer.push(character);\n isBufferEmpty = false;\n isVariable = false;\n roundBracketLevel--;\n } else if (character == Marker.FORWARD_SLASH\n && source[position.index + 1] != Marker.ASTERISK\n && level == Level.RULE\n && seekingValue\n && !isBufferEmpty) {\n // forward slash within a property, e.g. a{background:url(image.png) 0 0/<--\n serializedBuffer = buffer.join('').trim();\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n propertyToken.push([\n Token.PROPERTY_VALUE,\n character,\n [[position.line, position.column, position.source]]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.FORWARD_SLASH\n && source[position.index + 1] != Marker.ASTERISK\n && level == Level.RULE\n && seekingValue) {\n // forward slash within a property after space, e.g. a{background:url(image.png) 0 0 /<--\n propertyToken.push([\n Token.PROPERTY_VALUE,\n character,\n [[position.line, position.column, position.source]]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.COMMA && level == Level.RULE && seekingValue && !isBufferEmpty) {\n // comma within a property, e.g. a{background:url(image.png),<--\n serializedBuffer = buffer.join('').trim();\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n propertyToken.push([\n Token.PROPERTY_VALUE,\n character,\n [[position.line, position.column, position.source]]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.COMMA && level == Level.RULE && seekingValue) {\n // comma within a property after space, e.g. a{background:url(image.png) ,<--\n propertyToken.push([\n Token.PROPERTY_VALUE,\n character,\n [[position.line, position.column, position.source]]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (character == Marker.CLOSE_SQUARE_BRACKET\n && propertyToken\n && propertyToken.length > 1\n && !isBufferEmpty\n && isRepeatToken(buffer)) {\n buffer.push(character);\n serializedBuffer = buffer.join('').trim();\n propertyToken[propertyToken.length - 1][1] += serializedBuffer;\n\n buffer = [];\n isBufferEmpty = true;\n } else if ((isSpace || (isNewLineNix && !isNewLineWin))\n && level == Level.RULE\n && seekingValue\n && propertyToken\n && !isBufferEmpty) {\n // space or *nix newline within property, e.g. a{margin:0 <--\n serializedBuffer = buffer.join('').trim();\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (isNewLineWin && level == Level.RULE && seekingValue && propertyToken && buffer.length > 1) {\n // win newline within property, e.g. a{margin:0\\r\\n<--\n serializedBuffer = buffer.join('').trim();\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n\n buffer = [];\n isBufferEmpty = true;\n } else if (isNewLineWin && level == Level.RULE && seekingValue) {\n // win newline\n buffer = [];\n isBufferEmpty = true;\n } else if (isNewLineWin && buffer.length == 1) {\n // ignore windows newline which is composed of two characters\n buffer.pop();\n isBufferEmpty = buffer.length === 0;\n } else if (!isBufferEmpty || !isSpace && !isNewLineNix && !isNewLineWin && !isCarriageReturn) {\n // any character\n buffer.push(character);\n isBufferEmpty = false;\n }\n\n wasEscaped = isEscaped;\n isEscaped = !wasEscaped && character == Marker.BACK_SLASH;\n wasCommentStart = isCommentStart;\n wasCommentEnd = isCommentEnd;\n\n position.line = (isNewLineWin || isNewLineNix || isCarriageReturn) ? position.line + 1 : position.line;\n position.column = (isNewLineWin || isNewLineNix || isCarriageReturn) ? 0 : position.column + 1;\n }\n\n if (seekingValue) {\n externalContext.warnings.push('Missing \\'}\\' at ' + formatPosition([position.line, position.column, position.source]) + '.');\n }\n\n if (seekingValue && buffer.length > 0) {\n serializedBuffer = buffer.join('').trimRight().replace(TAIL_BROKEN_VALUE_PATTERN, '$1').trimRight();\n propertyToken.push([\n Token.PROPERTY_VALUE,\n serializedBuffer,\n [originalMetadata(metadata, serializedBuffer, externalContext)]\n ]);\n\n buffer = [];\n }\n\n if (buffer.length > 0) {\n externalContext.warnings.push('Invalid character(s) \\'' + buffer.join('') + '\\' at ' + formatPosition(metadata) + '. Ignoring.');\n }\n\n return allTokens;\n}\n\nfunction isIgnoreStartComment(buffer) {\n return IGNORE_START_COMMENT_PATTERN.test(buffer.join('') + Marker.FORWARD_SLASH);\n}\n\nfunction isIgnoreEndComment(buffer) {\n return IGNORE_END_COMMENT_PATTERN.test(buffer.join('') + Marker.FORWARD_SLASH);\n}\n\nfunction originalMetadata(metadata, value, externalContext, selectorFallbacks) {\n var source = metadata[2];\n\n return externalContext.inputSourceMapTracker.isTracking(source)\n ? externalContext.inputSourceMapTracker.originalPositionFor(metadata, value.length, selectorFallbacks)\n : metadata;\n}\n\nfunction tokenTypeFrom(buffer) {\n var isAtRule = buffer[0] == Marker.AT || buffer[0] == Marker.UNDERSCORE;\n var ruleWord = buffer.join('').split(RULE_WORD_SEPARATOR_PATTERN)[0];\n\n if (isAtRule && BLOCK_RULES.indexOf(ruleWord) > -1) {\n return Token.NESTED_BLOCK;\n } if (isAtRule && AT_RULES.indexOf(ruleWord) > -1) {\n return Token.AT_RULE;\n } if (isAtRule) {\n return Token.AT_RULE_BLOCK;\n }\n return Token.RULE;\n}\n\nfunction tokenScopeFrom(tokenType) {\n if (tokenType == Token.RULE) {\n return Token.RULE_SCOPE;\n } if (tokenType == Token.NESTED_BLOCK) {\n return Token.NESTED_BLOCK_SCOPE;\n } if (tokenType == Token.AT_RULE_BLOCK) {\n return Token.AT_RULE_BLOCK_SCOPE;\n }\n}\n\nfunction isPageMarginBox(buffer) {\n var serializedBuffer = buffer.join('').trim();\n\n return PAGE_MARGIN_BOXES.indexOf(serializedBuffer) > -1 || EXTRA_PAGE_BOXES.indexOf(serializedBuffer) > -1;\n}\n\nfunction isRepeatToken(buffer) {\n return REPEAT_PATTERN.test(buffer.join('') + Marker.CLOSE_SQUARE_BRACKET);\n}\n\nmodule.exports = tokenize;\n","var fs = require('fs');\nvar path = require('path');\n\nvar applySourceMaps = require('./apply-source-maps');\nvar extractImportUrlAndMedia = require('./extract-import-url-and-media');\nvar isAllowedResource = require('./is-allowed-resource');\nvar loadOriginalSources = require('./load-original-sources');\nvar normalizePath = require('./normalize-path');\nvar rebase = require('./rebase');\nvar rebaseLocalMap = require('./rebase-local-map');\nvar rebaseRemoteMap = require('./rebase-remote-map');\nvar restoreImport = require('./restore-import');\n\nvar tokenize = require('../tokenizer/tokenize');\nvar Token = require('../tokenizer/token');\nvar Marker = require('../tokenizer/marker');\nvar hasProtocol = require('../utils/has-protocol');\nvar isImport = require('../utils/is-import');\nvar isRemoteResource = require('../utils/is-remote-resource');\n\nvar UNKNOWN_URI = 'uri:unknown';\nvar FILE_RESOURCE_PROTOCOL = 'file://';\n\nfunction readSources(input, context, callback) {\n return doReadSources(input, context, function(tokens) {\n return applySourceMaps(tokens, context, function() {\n return loadOriginalSources(context, function() { return callback(tokens); });\n });\n });\n}\n\nfunction doReadSources(input, context, callback) {\n if (typeof input == 'string') {\n return fromString(input, context, callback);\n } if (Buffer.isBuffer(input)) {\n return fromString(input.toString(), context, callback);\n } if (Array.isArray(input)) {\n return fromArray(input, context, callback);\n } if (typeof input == 'object') {\n return fromHash(input, context, callback);\n }\n}\n\nfunction fromString(input, context, callback) {\n context.source = undefined;\n context.sourcesContent[undefined] = input;\n context.stats.originalSize += input.length;\n\n return fromStyles(input, context, { inline: context.options.inline }, callback);\n}\n\nfunction fromArray(input, context, callback) {\n var inputAsImports = input.reduce(function(accumulator, uriOrHash) {\n if (typeof uriOrHash === 'string') {\n return addStringSource(uriOrHash, accumulator);\n }\n return addHashSource(uriOrHash, context, accumulator);\n }, []);\n\n return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback);\n}\n\nfunction fromHash(input, context, callback) {\n var inputAsImports = addHashSource(input, context, []);\n return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback);\n}\n\nfunction addStringSource(input, imports) {\n imports.push(restoreAsImport(normalizeUri(input)));\n return imports;\n}\n\nfunction addHashSource(input, context, imports) {\n var uri;\n var normalizedUri;\n var source;\n\n for (uri in input) {\n source = input[uri];\n normalizedUri = normalizeUri(uri);\n\n imports.push(restoreAsImport(normalizedUri));\n\n context.sourcesContent[normalizedUri] = source.styles;\n\n if (source.sourceMap) {\n trackSourceMap(source.sourceMap, normalizedUri, context);\n }\n }\n\n return imports;\n}\n\nfunction normalizeUri(uri) {\n var currentPath = path.resolve('');\n var absoluteUri;\n var relativeToCurrentPath;\n var normalizedUri;\n\n if (isRemoteResource(uri)) {\n return uri;\n }\n\n absoluteUri = path.isAbsolute(uri)\n ? uri\n : path.resolve(uri);\n relativeToCurrentPath = path.relative(currentPath, absoluteUri);\n normalizedUri = normalizePath(relativeToCurrentPath);\n\n return normalizedUri;\n}\n\nfunction trackSourceMap(sourceMap, uri, context) {\n var parsedMap = typeof sourceMap == 'string'\n ? JSON.parse(sourceMap)\n : sourceMap;\n var rebasedMap = isRemoteResource(uri)\n ? rebaseRemoteMap(parsedMap, uri)\n : rebaseLocalMap(parsedMap, uri || UNKNOWN_URI, context.options.rebaseTo);\n\n context.inputSourceMapTracker.track(uri, rebasedMap);\n}\n\nfunction restoreAsImport(uri) {\n return restoreImport('url(' + uri + ')', '') + Marker.SEMICOLON;\n}\n\nfunction fromStyles(styles, context, parentInlinerContext, callback) {\n var tokens;\n var rebaseConfig = {};\n\n if (!context.source) {\n rebaseConfig.fromBase = path.resolve('');\n rebaseConfig.toBase = context.options.rebaseTo;\n } else if (isRemoteResource(context.source)) {\n rebaseConfig.fromBase = context.source;\n rebaseConfig.toBase = context.source;\n } else if (path.isAbsolute(context.source)) {\n rebaseConfig.fromBase = path.dirname(context.source);\n rebaseConfig.toBase = context.options.rebaseTo;\n } else {\n rebaseConfig.fromBase = path.dirname(path.resolve(context.source));\n rebaseConfig.toBase = context.options.rebaseTo;\n }\n\n tokens = tokenize(styles, context);\n tokens = rebase(tokens, context.options.rebase, context.validator, rebaseConfig);\n\n return allowsAnyImports(parentInlinerContext.inline)\n ? inline(tokens, context, parentInlinerContext, callback)\n : callback(tokens);\n}\n\nfunction allowsAnyImports(inline) {\n return !(inline.length == 1 && inline[0] == 'none');\n}\n\nfunction inline(tokens, externalContext, parentInlinerContext, callback) {\n var inlinerContext = {\n afterContent: false,\n callback: callback,\n errors: externalContext.errors,\n externalContext: externalContext,\n fetch: externalContext.options.fetch,\n inlinedStylesheets: parentInlinerContext.inlinedStylesheets || externalContext.inlinedStylesheets,\n inline: parentInlinerContext.inline,\n inlineRequest: externalContext.options.inlineRequest,\n inlineTimeout: externalContext.options.inlineTimeout,\n isRemote: parentInlinerContext.isRemote || false,\n localOnly: externalContext.localOnly,\n outputTokens: [],\n rebaseTo: externalContext.options.rebaseTo,\n sourceTokens: tokens,\n warnings: externalContext.warnings\n };\n\n return doInlineImports(inlinerContext);\n}\n\nfunction doInlineImports(inlinerContext) {\n var token;\n var i, l;\n\n for (i = 0, l = inlinerContext.sourceTokens.length; i < l; i++) {\n token = inlinerContext.sourceTokens[i];\n\n if (token[0] == Token.AT_RULE && isImport(token[1])) {\n inlinerContext.sourceTokens.splice(0, i);\n return inlineStylesheet(token, inlinerContext);\n } if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) {\n inlinerContext.outputTokens.push(token);\n } else {\n inlinerContext.outputTokens.push(token);\n inlinerContext.afterContent = true;\n }\n }\n\n inlinerContext.sourceTokens = [];\n return inlinerContext.callback(inlinerContext.outputTokens);\n}\n\nfunction inlineStylesheet(token, inlinerContext) {\n var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);\n var uri = uriAndMediaQuery[0];\n var mediaQuery = uriAndMediaQuery[1];\n var metadata = token[2];\n\n return isRemoteResource(uri)\n ? inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext)\n : inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext);\n}\n\nfunction inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) {\n var isAllowed = isAllowedResource(uri, true, inlinerContext.inline);\n var originalUri = uri;\n var isLoaded = uri in inlinerContext.externalContext.sourcesContent;\n var isRuntimeResource = !hasProtocol(uri);\n\n if (inlinerContext.inlinedStylesheets.indexOf(uri) > -1) {\n inlinerContext.warnings.push('Ignoring remote @import of \"' + uri + '\" as it has already been imported.');\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n return doInlineImports(inlinerContext);\n } if (inlinerContext.localOnly && inlinerContext.afterContent) {\n inlinerContext.warnings.push('Ignoring remote @import of \"' + uri + '\" as no callback given and after other content.');\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n return doInlineImports(inlinerContext);\n } if (isRuntimeResource) {\n inlinerContext.warnings.push('Skipping remote @import of \"' + uri + '\" as no protocol given.');\n inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n return doInlineImports(inlinerContext);\n } if (inlinerContext.localOnly && !isLoaded) {\n inlinerContext.warnings.push('Skipping remote @import of \"' + uri + '\" as no callback given.');\n inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n return doInlineImports(inlinerContext);\n } if (!isAllowed && inlinerContext.afterContent) {\n inlinerContext.warnings.push('Ignoring remote @import of \"' + uri + '\" as resource is not allowed and after other content.');\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n return doInlineImports(inlinerContext);\n } if (!isAllowed) {\n inlinerContext.warnings.push('Skipping remote @import of \"' + uri + '\" as resource is not allowed.');\n inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n return doInlineImports(inlinerContext);\n }\n\n inlinerContext.inlinedStylesheets.push(uri);\n\n function whenLoaded(error, importedStyles) {\n if (error) {\n inlinerContext.errors.push('Broken @import declaration of \"' + uri + '\" - ' + error);\n\n return process.nextTick(function() {\n inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n doInlineImports(inlinerContext);\n });\n }\n\n inlinerContext.inline = inlinerContext.externalContext.options.inline;\n inlinerContext.isRemote = true;\n\n inlinerContext.externalContext.source = originalUri;\n inlinerContext.externalContext.sourcesContent[uri] = importedStyles;\n inlinerContext.externalContext.stats.originalSize += importedStyles.length;\n\n return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function(importedTokens) {\n importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);\n\n inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n\n return doInlineImports(inlinerContext);\n });\n }\n\n return isLoaded\n ? whenLoaded(null, inlinerContext.externalContext.sourcesContent[uri])\n : inlinerContext.fetch(uri, inlinerContext.inlineRequest, inlinerContext.inlineTimeout, whenLoaded);\n}\n\nfunction inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext) {\n var protocolLessUri = uri.replace(FILE_RESOURCE_PROTOCOL, '');\n var currentPath = path.resolve('');\n var absoluteUri = path.isAbsolute(protocolLessUri)\n ? path.resolve(currentPath, protocolLessUri[0] == '/' ? protocolLessUri.substring(1) : protocolLessUri)\n : path.resolve(inlinerContext.rebaseTo, protocolLessUri);\n var relativeToCurrentPath = path.relative(currentPath, absoluteUri);\n var importedStyles;\n var isAllowed = isAllowedResource(protocolLessUri, false, inlinerContext.inline);\n var normalizedPath = normalizePath(relativeToCurrentPath);\n var isLoaded = normalizedPath in inlinerContext.externalContext.sourcesContent;\n\n if (inlinerContext.inlinedStylesheets.indexOf(absoluteUri) > -1) {\n inlinerContext.warnings.push('Ignoring local @import of \"' + protocolLessUri + '\" as it has already been imported.');\n } else if (isAllowed && !isLoaded && (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile())) {\n inlinerContext.errors.push('Ignoring local @import of \"' + protocolLessUri + '\" as resource is missing.');\n } else if (!isAllowed && inlinerContext.afterContent) {\n inlinerContext.warnings.push('Ignoring local @import of \"' + protocolLessUri + '\" as resource is not allowed and after other content.');\n } else if (inlinerContext.afterContent) {\n inlinerContext.warnings.push('Ignoring local @import of \"' + protocolLessUri + '\" as after other content.');\n } else if (!isAllowed) {\n inlinerContext.warnings.push('Skipping local @import of \"' + protocolLessUri + '\" as resource is not allowed.');\n inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));\n } else {\n importedStyles = isLoaded\n ? inlinerContext.externalContext.sourcesContent[normalizedPath]\n : fs.readFileSync(absoluteUri, 'utf-8');\n\n if (importedStyles.charCodeAt(0) === 65279) {\n importedStyles = importedStyles.substring(1);\n }\n\n inlinerContext.inlinedStylesheets.push(absoluteUri);\n inlinerContext.inline = inlinerContext.externalContext.options.inline;\n\n inlinerContext.externalContext.source = normalizedPath;\n inlinerContext.externalContext.sourcesContent[normalizedPath] = importedStyles;\n inlinerContext.externalContext.stats.originalSize += importedStyles.length;\n\n return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function(importedTokens) {\n importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);\n\n inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n\n return doInlineImports(inlinerContext);\n });\n }\n\n inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);\n\n return doInlineImports(inlinerContext);\n}\n\nfunction wrapInMedia(tokens, mediaQuery, metadata) {\n if (mediaQuery) {\n return [[Token.NESTED_BLOCK, [[Token.NESTED_BLOCK_SCOPE, '@media ' + mediaQuery, metadata]], tokens]];\n }\n return tokens;\n}\n\nmodule.exports = readSources;\n","var all = require('./helpers').all;\n\nfunction store(serializeContext, token) {\n var value = typeof token == 'string'\n ? token\n : token[1];\n var wrap = serializeContext.wrap;\n\n wrap(serializeContext, value);\n track(serializeContext, value);\n serializeContext.output.push(value);\n}\n\nfunction wrap(serializeContext, value) {\n if (serializeContext.column + value.length > serializeContext.format.wrapAt) {\n track(serializeContext, serializeContext.format.breakWith);\n serializeContext.output.push(serializeContext.format.breakWith);\n }\n}\n\nfunction track(serializeContext, value) {\n var parts = value.split('\\n');\n\n serializeContext.line += parts.length - 1;\n serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);\n}\n\nfunction serializeStyles(tokens, context) {\n var serializeContext = {\n column: 0,\n format: context.options.format,\n indentBy: 0,\n indentWith: '',\n line: 1,\n output: [],\n spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,\n store: store,\n wrap: context.options.format.wrapAt\n ? wrap\n : function() { /* noop */ }\n };\n\n all(serializeContext, tokens);\n\n return { styles: serializeContext.output.join('') };\n}\n\nmodule.exports = serializeStyles;\n","var SourceMapGenerator = require('source-map').SourceMapGenerator;\nvar all = require('./helpers').all;\n\nvar isRemoteResource = require('../utils/is-remote-resource');\n\nvar isWindows = process.platform == 'win32';\n\nvar NIX_SEPARATOR_PATTERN = /\\//g;\nvar UNKNOWN_SOURCE = '$stdin';\nvar WINDOWS_SEPARATOR = '\\\\';\n\nfunction store(serializeContext, element) {\n var fromString = typeof element == 'string';\n var value = fromString ? element : element[1];\n var mappings = fromString ? null : element[2];\n var wrap = serializeContext.wrap;\n\n wrap(serializeContext, value);\n track(serializeContext, value, mappings);\n serializeContext.output.push(value);\n}\n\nfunction wrap(serializeContext, value) {\n if (serializeContext.column + value.length > serializeContext.format.wrapAt) {\n track(serializeContext, serializeContext.format.breakWith, false);\n serializeContext.output.push(serializeContext.format.breakWith);\n }\n}\n\nfunction track(serializeContext, value, mappings) {\n var parts = value.split('\\n');\n\n if (mappings) {\n trackAllMappings(serializeContext, mappings);\n }\n\n serializeContext.line += parts.length - 1;\n serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);\n}\n\nfunction trackAllMappings(serializeContext, mappings) {\n for (var i = 0, l = mappings.length; i < l; i++) {\n trackMapping(serializeContext, mappings[i]);\n }\n}\n\nfunction trackMapping(serializeContext, mapping) {\n var line = mapping[0];\n var column = mapping[1];\n var originalSource = mapping[2];\n var source = originalSource;\n var storedSource = source || UNKNOWN_SOURCE;\n\n if (isWindows && source && !isRemoteResource(source)) {\n storedSource = source.replace(NIX_SEPARATOR_PATTERN, WINDOWS_SEPARATOR);\n }\n\n serializeContext.outputMap.addMapping({\n generated: {\n line: serializeContext.line,\n column: serializeContext.column\n },\n source: storedSource,\n original: {\n line: line,\n column: column\n }\n });\n\n if (serializeContext.inlineSources && (originalSource in serializeContext.sourcesContent)) {\n serializeContext.outputMap.setSourceContent(\n storedSource,\n serializeContext.sourcesContent[originalSource]\n );\n }\n}\n\nfunction serializeStylesAndSourceMap(tokens, context) {\n var serializeContext = {\n column: 0,\n format: context.options.format,\n indentBy: 0,\n indentWith: '',\n inlineSources: context.options.sourceMapInlineSources,\n line: 1,\n output: [],\n outputMap: new SourceMapGenerator(),\n sourcesContent: context.sourcesContent,\n spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,\n store: store,\n wrap: context.options.format.wrapAt\n ? wrap\n : function() { /* noop */ }\n };\n\n all(serializeContext, tokens);\n\n return {\n sourceMap: serializeContext.outputMap,\n styles: serializeContext.output.join('')\n };\n}\n\nmodule.exports = serializeStylesAndSourceMap;\n","/**\n * Clean-css - https://github.com/clean-css/clean-css\n * Released under the terms of MIT license\n */\n\nvar level0Optimize = require('./optimizer/level-0/optimize');\nvar level1Optimize = require('./optimizer/level-1/optimize');\nvar level2Optimize = require('./optimizer/level-2/optimize');\nvar validator = require('./optimizer/validator');\n\nvar compatibilityFrom = require('./options/compatibility');\nvar fetchFrom = require('./options/fetch');\nvar formatFrom = require('./options/format').formatFrom;\nvar inlineFrom = require('./options/inline');\nvar inlineRequestFrom = require('./options/inline-request');\nvar inlineTimeoutFrom = require('./options/inline-timeout');\nvar OptimizationLevel = require('./options/optimization-level').OptimizationLevel;\nvar optimizationLevelFrom = require('./options/optimization-level').optimizationLevelFrom;\nvar pluginsFrom = require('./options/plugins');\nvar rebaseFrom = require('./options/rebase');\nvar rebaseToFrom = require('./options/rebase-to');\n\nvar inputSourceMapTracker = require('./reader/input-source-map-tracker');\nvar readSources = require('./reader/read-sources');\n\nvar serializeStyles = require('./writer/simple');\nvar serializeStylesAndSourceMap = require('./writer/source-maps');\n\nvar CleanCSS = module.exports = function CleanCSS(options) {\n options = options || {};\n\n this.options = {\n batch: !!options.batch,\n compatibility: compatibilityFrom(options.compatibility),\n explicitRebaseTo: 'rebaseTo' in options,\n fetch: fetchFrom(options.fetch),\n format: formatFrom(options.format),\n inline: inlineFrom(options.inline),\n inlineRequest: inlineRequestFrom(options.inlineRequest),\n inlineTimeout: inlineTimeoutFrom(options.inlineTimeout),\n level: optimizationLevelFrom(options.level),\n plugins: pluginsFrom(options.plugins),\n rebase: rebaseFrom(options.rebase, options.rebaseTo),\n rebaseTo: rebaseToFrom(options.rebaseTo),\n returnPromise: !!options.returnPromise,\n sourceMap: !!options.sourceMap,\n sourceMapInlineSources: !!options.sourceMapInlineSources\n };\n};\n\n// for compatibility with optimize-css-assets-webpack-plugin\nCleanCSS.process = function(input, opts) {\n var cleanCss;\n var optsTo = opts.to;\n\n delete opts.to;\n cleanCss = new CleanCSS(Object.assign({\n returnPromise: true, rebaseTo: optsTo\n }, opts));\n\n return cleanCss.minify(input)\n .then(function(output) {\n return { css: output.styles };\n });\n};\n\nCleanCSS.prototype.minify = function(input, maybeSourceMap, maybeCallback) {\n var options = this.options;\n\n if (options.returnPromise) {\n return new Promise(function(resolve, reject) {\n minifyAll(input, options, maybeSourceMap, function(errors, output) {\n return errors\n ? reject(errors)\n : resolve(output);\n });\n });\n }\n return minifyAll(input, options, maybeSourceMap, maybeCallback);\n};\n\nfunction minifyAll(input, options, maybeSourceMap, maybeCallback) {\n if (options.batch && Array.isArray(input)) {\n return minifyInBatchesFromArray(input, options, maybeSourceMap, maybeCallback);\n } if (options.batch && (typeof input == 'object')) {\n return minifyInBatchesFromHash(input, options, maybeSourceMap, maybeCallback);\n }\n return minify(input, options, maybeSourceMap, maybeCallback);\n}\n\nfunction minifyInBatchesFromArray(input, options, maybeSourceMap, maybeCallback) {\n var callback = typeof maybeCallback == 'function'\n ? maybeCallback\n : (typeof maybeSourceMap == 'function' ? maybeSourceMap : null);\n var errors = [];\n var outputAsHash = {};\n var inputValue;\n var i, l;\n\n function whenHashBatchDone(innerErrors, output) {\n outputAsHash = Object.assign(outputAsHash, output);\n\n if (innerErrors !== null) {\n errors = errors.concat(innerErrors);\n }\n }\n\n for (i = 0, l = input.length; i < l; i++) {\n if (typeof input[i] == 'object') {\n minifyInBatchesFromHash(input[i], options, whenHashBatchDone);\n } else {\n inputValue = input[i];\n\n outputAsHash[inputValue] = minify([inputValue], options);\n errors = errors.concat(outputAsHash[inputValue].errors);\n }\n }\n\n return callback\n ? callback(errors.length > 0 ? errors : null, outputAsHash)\n : outputAsHash;\n}\n\nfunction minifyInBatchesFromHash(input, options, maybeSourceMap, maybeCallback) {\n var callback = typeof maybeCallback == 'function'\n ? maybeCallback\n : (typeof maybeSourceMap == 'function' ? maybeSourceMap : null);\n var errors = [];\n var outputAsHash = {};\n var inputKey;\n var inputValue;\n\n for (inputKey in input) {\n inputValue = input[inputKey];\n\n outputAsHash[inputKey] = minify(inputValue.styles, options, inputValue.sourceMap);\n errors = errors.concat(outputAsHash[inputKey].errors);\n }\n\n return callback\n ? callback(errors.length > 0 ? errors : null, outputAsHash)\n : outputAsHash;\n}\n\nfunction minify(input, options, maybeSourceMap, maybeCallback) {\n var sourceMap = typeof maybeSourceMap != 'function'\n ? maybeSourceMap\n : null;\n var callback = typeof maybeCallback == 'function'\n ? maybeCallback\n : (typeof maybeSourceMap == 'function' ? maybeSourceMap : null);\n var context = {\n stats: {\n efficiency: 0,\n minifiedSize: 0,\n originalSize: 0,\n startedAt: Date.now(),\n timeSpent: 0\n },\n cache: { specificity: {} },\n errors: [],\n inlinedStylesheets: [],\n inputSourceMapTracker: inputSourceMapTracker(),\n localOnly: !callback,\n options: options,\n source: null,\n sourcesContent: {},\n validator: validator(options.compatibility),\n warnings: []\n };\n var implicitRebaseToWarning;\n\n if (sourceMap) {\n context.inputSourceMapTracker.track(undefined, sourceMap);\n }\n\n if (options.rebase && !options.explicitRebaseTo) {\n implicitRebaseToWarning = 'You have set `rebase: true` without giving `rebaseTo` option, which, in this case, defaults to the current working directory. '\n + 'You are then warned this can lead to unexpected URL rebasing (aka here be dragons)! '\n + 'If you are OK with the clean-css output, then you can get rid of this warning by giving clean-css a `rebaseTo: process.cwd()` option.';\n context.warnings.push(implicitRebaseToWarning);\n }\n\n return runner(context.localOnly)(function() {\n return readSources(input, context, function(tokens) {\n var serialize = context.options.sourceMap\n ? serializeStylesAndSourceMap\n : serializeStyles;\n\n var optimizedTokens = optimize(tokens, context);\n var optimizedStyles = serialize(optimizedTokens, context);\n var output = withMetadata(optimizedStyles, context);\n\n return callback\n ? callback(context.errors.length > 0 ? context.errors : null, output)\n : output;\n });\n });\n}\n\nfunction runner(localOnly) {\n // to always execute code asynchronously when a callback is given\n // more at blog.izs.me/post/59142742143/designing-apis-for-asynchrony\n return localOnly\n ? function(callback) { return callback(); }\n : process.nextTick;\n}\n\nfunction optimize(tokens, context) {\n var optimized = level0Optimize(tokens, context);\n\n optimized = OptimizationLevel.One in context.options.level\n ? level1Optimize(tokens, context)\n : tokens;\n optimized = OptimizationLevel.Two in context.options.level\n ? level2Optimize(tokens, context, true)\n : optimized;\n\n return optimized;\n}\n\nfunction withMetadata(output, context) {\n output.stats = calculateStatsFrom(output.styles, context);\n output.errors = context.errors;\n output.inlinedStylesheets = context.inlinedStylesheets;\n output.warnings = context.warnings;\n\n return output;\n}\n\nfunction calculateStatsFrom(styles, context) {\n var finishedAt = Date.now();\n var timeSpent = finishedAt - context.stats.startedAt;\n\n delete context.stats.startedAt;\n context.stats.timeSpent = timeSpent;\n context.stats.efficiency = 1 - styles.length / context.stats.originalSize;\n context.stats.minifiedSize = styles.length;\n\n return context.stats;\n}\n",null,null,null,null],"names":["BrowserInterface","constructor","this","urlErrors","trackUrlError","url","error","filterValidUrls","urls","filter","runInPage","_pageUrl","_viewport","_method","_args","Error","fetch","_url","_options","_role","cleanup","getCssIncludes","pageUrl","innerGetCssIncludes","innerWindow","window","document","getElementsByTagName","link","rel","reduce","set","href","media","getInternalStyles","innerGetInternalStyles","Array","from","styles","style","innerText","innerFindMatchingSelectors","args","selectors","Object","keys","selector","querySelector","err","innerFindAboveFoldSelectors","pageSelectors","isAboveFold","element","originalClearStyle","clear","rect","getBoundingClientRect","top","innerHeight","s","matches","querySelectorAll","match","SuccessTargetError","super","values","map","e","message","join","isSuccessTargetError","errorObject","entries","type","meta","UrlError","HttpError","code","UnknownError","CrossDomainError","LoadTimeoutError","RedirectError","redirectUrl","UrlVerifyError","EmptyCSSError","XFrameDenyError","Ident","Function","AtKeyword","Hash","String","BadString","Url","BadUrl","Delim","Number","Percentage","Dimension","WhiteSpace","CDO","CDC","Colon","Semicolon","Comma","LeftSquareBracket","RightSquareBracket","LeftParenthesis","RightParenthesis","LeftCurlyBracket","RightCurlyBracket","Comment","EOF","isDigit","isHexDigit","isUppercaseLetter","isNameStart","isLowercaseLetter","isLetter","isNonAscii","isName","isNonPrintable","isNewline","isWhiteSpace","isValidEscape","first","second","isIdentifierStart","third","isNumberStart","isBOM","CATEGORY","WhiteSpaceCategory","DigitCategory","NameStartCategory","NonPrintableCategory","i","length","charCodeCategory","getCharCode","source","offset","charCodeAt","getNewlineLength","cmpChar","testStr","referenceCode","cmpStr","start","end","referenceStr","testCode","findWhiteSpaceEnd","findDecimalNumberEnd","consumeEscaped","maxOffset","Math","min","consumeName","consumeNumber","sign","consumeBadUrlRemnants","decodeEscaped","escaped","parseInt","fromCodePoint","tokenNames","MIN_SIZE","adoptBuffer","buffer","size","Uint32Array","max","computeLinesAndColumns","host","sourceLength","startOffset","lines","columns","line","startLine","column","startColumn","computed","OffsetToLocation","setSource","getLocation","filename","getLocationRange","OFFSET_MASK","TYPE_SHIFT","balancePair","Map","FunctionToken","TokenStream","tokenize","reset","eof","tokenIndex","tokenType","tokenStart","firstCharOffset","tokenEnd","offsetAndType","balance","tokenCount","balanceCloseType","balanceStart","balancePrev","get","next","lookupType","lookupOffset","lookupValue","getTokenStart","substrToCursor","substring","isBalanceEdge","pos","isDelim","skip","skipSC","skipUntilBalanced","startToken","stopConsume","balanceEnd","cursor","loop","forEachToken","fn","item","dump","tokens","index","idx","chunk","onToken","consumeNumericToken","TYPE.Dimension","TYPE.Percentage","TYPE.Number","consumeIdentLikeToken","nameStartOffset","TYPE.Function","TYPE.Url","TYPE.BadUrl","consumeUrlToken","TYPE.Ident","consumeStringToken","endingCodePoint","TYPE.String","TYPE.BadString","nextCode","TYPE.WhiteSpace","TYPE.Hash","TYPE.Delim","TYPE.LeftParenthesis","TYPE.RightParenthesis","TYPE.Comma","TYPE.CDC","TYPE.Comment","indexOf","TYPE.Colon","TYPE.Semicolon","TYPE.CDO","TYPE.AtKeyword","TYPE.LeftSquareBracket","TYPE.RightSquareBracket","TYPE.LeftCurlyBracket","TYPE.RightCurlyBracket","releasedCursors","List","createItem","data","prev","head","tail","allocateCursor","releaseCursor","updateCursors","prevOld","prevNew","nextOld","nextNew","Symbol","iterator","isEmpty","last","fromArray","array","toArray","toJSON","forEach","thisArg","call","forEachRight","initialValue","acc","reduceRight","some","result","appendData","nextUntil","prevUntil","copy","prepend","prependData","append","insert","before","insertData","remove","push","pop","unshift","shift","prependList","list","insertList","appendList","replace","oldItem","newItemOrList","createCustomError","name","create","SyntaxError","prototype","errorStack","assign","stack","MAX_LINE_LENGTH","OFFSET_CORRECTION","TAB_REPLACEMENT","sourceFragment","extraLines","processLines","slice","padStart","maxNumLength","split","endLine","cutLeft","substr","Boolean","isNaN","formattedMessage","readSequence","recognizer","children","createList","space","context","child","getNode","undefined","onWhiteSpace","NOOP","EXCLAMATIONMARK","NUMBERSIGN","SEMICOLON","LEFTCURLYBRACKET","NULL","createParseContext","fetchParseValues","dict","parse","createParser","config","needPositions","onParseError","onParseErrorThrow","locationMap","parser","parseConfig","scope","atrule","pseudo","node","parseContext","processConfig","parseAtrulePrelude","parseRulePrelude","parseValue","parseCustomProperty","consumeUntilBalanceEnd","consumeUntilLeftCurlyBracket","consumeUntilLeftCurlyBracketOrSemicolon","consumeUntilExclamationMarkOrSemicolon","consumeUntilSemicolonIncluded","createSingleNodeList","getFirstListNode","getLastListNode","parseWithFallback","consumer","fallback","fallbackNode","lookupNonWSType","offsetStart","offsetEnd","charCode","str","consume","eat","consumeFunctionName","number","tokenName","m","toUpperCase","test","NumberToken","eatIdent","eatDelim","fromCharCode","getLocationFromList","loc","location","findWhiteSpaceStart","source_","options","positions","onComment","value","ast","intToCharMap","base64","encode","TypeError","decode","require$$0","base64Vlq","aValue","digit","encoded","vlq","toVLQSigned","VLQ_BASE","base64Vlq$1","aStr","aIndex","aOutParam","continuation","shifted","strLen","charAt","rest","exports","getArg","aArgs","aName","aDefaultValue","arguments","urlRegexp","dataUrlRegexp","urlParse","aUrl","scheme","auth","port","path","urlGenerate","aParsedUrl","f","cache","normalize","aPath","isAbsolute","parts","part","up","splice","input","temp","aRoot","aPathUrl","aRootUrl","joined","relative","level","lastIndexOf","supportsNullProto","identity","isProtoString","strcmp","aStr1","aStr2","toSetString","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","originalLine","originalColumn","generatedColumn","generatedLine","compareByOriginalPositionsNoSource","compareByGeneratedPositionsDeflated","onlyCompareGenerated","compareByGeneratedPositionsDeflatedNoLine","compareByGeneratedPositionsInflated","parseSourceMapInput","JSON","computeSourceURL","sourceRoot","sourceURL","sourceMapURL","parsed","util","has","hasOwnProperty","hasNativeMap","ArraySet","_array","_set","ArraySet$4","aArray","aAllowDuplicates","len","add","getOwnPropertyNames","sStr","isDuplicate","at","aIdx","arraySet$1","MappingList","_sorted","_last","MappingList$3","unsortedForEach","aCallback","aThisArg","aMapping","lineA","lineB","columnA","columnB","sort","mappingList$1","base64VLQ","require$$1","require$$2","require$$3","SourceMapGenerator","_file","_sourceRoot","_skipValidation","_ignoreInvalidMapping","_sources","_names","_mappings","_sourcesContents","_version","fromSourceMap","aSourceMapConsumer","generatorOps","generator","file","eachMapping","mapping","newMapping","generated","original","addMapping","sources","sourceFile","sourceRelative","content","sourceContentFor","setSourceContent","SourceMapGenerator$3","_validateMapping","aSourceFile","aSourceContent","applySourceMap","aSourceMapPath","newSources","newNames","originalPositionFor","aGenerated","aOriginal","aSource","console","warn","stringify","_serializeMappings","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","mappings","_generateSourcesContent","aSources","aSourceRoot","key","version","names","sourcesContent","toString","SourceMapGenerator_1","trackNodes","Set","specPairs","safePairs","concat","StringToken","createMap","pairs","isWhiteSpaceRequired","prevCode","nextCharCode","emit","spec","safe","REVERSESOLIDUS","processChildren","delimeter","processChunk","token","createGenerator","types","generate","handlers","publicApi","tokenBefore","tokenBefore.safe","decorator","sourceMap","activatedGenerated","activatedMapping","sourceMappingActive","origHandlersNode","nodeLine","nodeColumn","origHandlersEmit","auto","origHandlersResult","css","generateSourceMap","mode","noop","ensureFunction","invokeForType","getWalkersFromStructure","nodeType","structure","walkers","fieldTypes","walker","nullable","isArray","fieldType","walkContext","fields","createTypeIterator","reverse","contextName","useContext","walk","walkReducer","prevContextValue","field","ref","createFastTraveralMap","StyleSheet","Atrule","Rule","Block","DeclarationList","Declaration","createWalker","getTypesFromConfig","iteratorsNatural","iteratorsReverse","breakWalk","skipNode","fastTraversalIteratorsNatural","fastTraversalIteratorsReverse","root","walkNode","enterRet","enter","iterators","leave","ret","break","stylesheet","atrulePrelude","rule","block","declaration","function","visit","find","found","findLast","findAll","internalGenerate","decorate","forceBraces","compact","combinator","terms","term","explicit","generateSequence","disallowEmpty","multiplier","comma","generateMultiplier","opts","generateTypeOpts","defaultLoc","fromLoc","point","buildLoc","extra","SyntaxReferenceError","referenceName","reference","SyntaxMatchError","syntax","matchResult","mismatchOffset","mismatchLength","longestMatch","mismatchNode","badNode","locateMismatch","rawMessage","keywords","properties","HYPHENMINUS","keyword","toLowerCase","descriptor","custom","isCustomProperty","vendor","getVendorPrefix","freeze","basename","prefix","property","hack","secondDashIndex","cssWideKeywords","PLUSSIGN","DISALLOW_SIGN","getNextToken","checkInteger","valueOffset","disallowSign","consumeB","offset_","QUESTIONMARK","hexSequence","allowDash","hexlen","withQuestionMarkSequence","consumed","calcFunctionNames","eqStr","actual","expected","eqStrAny","isPostfixIeHack","outOfRange","numEnd","num","calc","balanceStash","scan","consumeFunction","expectedTokenType","dimension","numberEnd","reverseSolidusOffset","unit","zero","tokenTypes","productionTypes","string","ident","percentage","integer","urange","consumedHexLength","startsWith","createDemensionTypes","units","angle","decibel","frequency","flex","resolution","semitones","time","Tokenizer","nextNonWsCode","findWsEnd","substringToPos","peek","TAB","N","F","R","SPACE","AMPERSAND","APOSTROPHE","LEFTPARENTHESIS","RIGHTPARENTHESIS","ASTERISK","COMMA","HYPERMINUS","LESSTHANSIGN","GREATERTHANSIGN","COMMERCIALAT","LEFTSQUAREBRACKET","RIGHTSQUAREBRACKET","VERTICALLINE","RIGHTCURLYBRACKET","INFINITY","NAME_CHAR","Uint8Array","_","COMBINATOR_PRECEDENCE","scanSpaces","tokenizer","scanWord","scanNumber","scanString","readMultiplierRange","maybeMultiplied","range","readMultiplier","maybeToken","ch","readType","readTypeRange","regroupTerms","combinators","createGroup","a","b","subgroupStart","readImplicitGroup","prevToken","prevTokenPos","readKeywordOrFunction","readGroup","readProperty","astToTokens","curNode","tmp","prepareTokens","stringToTokens","MATCH","MISMATCH","DISALLOW_EMPTY","createCondition","thenBranch","elseBranch","else","then","isFunctionType","isEnumCapatible","buildGroupMatchGraph","atLeastOneTermMatched","all","thenClause","newGroupTerm","buildMatchGraphInternal","matchTerm","buildMultiplierMatchGraph","buildMatchGraph","syntaxTree","STUB","TOKEN","OPEN_SYNTAX","CLOSE_SYNTAX","EXIT_REASON_MATCH","EXIT_REASON_MISMATCH","EXIT_REASON_ITERATION_LIMIT","ITERATION_LIMIT","areStringsEqualCaseInsensitive","isCommaContextStart","isContextEdgeDelim","isCommaContextEnd","matchAsTree","matchGraph","syntaxes","state","moveToNextToken","nextIndex","stateSnapshotFromSyntax","nextState","matchStack","syntaxStack","thenStack","pushThenStack","pushElseStack","elseStack","addTokenToMatch","syntaxStash","closeSyntax","iterationCount","exitReason","mask","matchFlag","lastTokenIndex","floor","syntaxDict","dictSyntax","keywordName","reason","iterations","internalMatch","hostStack","reverseList","getTrace","shouldPutToTrace","matched","hasMatch","matchNode","testNode","trace","getFirstMatchNode","getLastMatchNode","matchFragments","lexer","fragments","findFragments","nodes","parent","isValidNumber","isFinite","isValidLocation","createNodeStructureChecker","valid","processStructure","docs","docsTypes","check","cssWideKeywordsSyntax","dumpMapSyntax","syntaxAsAst","dumpAtruleMapSyntax","prelude","descriptors","buildMatchResult","matchSyntax","useCssWideKeywords","valueHasVar","Lexer","generic","atrules","getStructureFromConfig","group","addType_","createGenericTypes","addAtrule_","addProperty_","checkStructure","collectWarning","warns","createDescriptor","serializable","defineProperty","descName","checkAtruleName","atruleName","getAtrule","checkAtrulePrelude","checkAtruleDescriptorName","descriptorName","names.keyword","checkPropertyName","propertyName","getProperty","matchAtrulePrelude","matchAtruleDescriptor","matchDeclaration","matchProperty","names.property","matchType","typeName","typeSyntax","getType","findValueFragments","findDeclarationValueFragments","findAllFragments","apply","fallbackBasename","getAtrulePrelude","getAtruleDescriptor","declarators","validate","broken","brokenMap","brokenTypes","brokenProperties","pretty","appendOrSet","sliceProps","obj","props","prop","includes","mix","dest","src","patch","exists","current","descriptorValue","createSyntax","fromPlainObject","toPlainObject","createConvertor","createLexer","fork","extension","base","checkTokenIsInteger","expectCharCode","msg","consumeRaw","Raw","isDeclarationBlockAtrule","isDeclaration","nameLowerCase","AtrulePrelude","bind","DOLLARSIGN","EQUALSSIGN","CIRCUMFLEXACCENT","TILDE","getAttributeName","expectIdent","getOperator","matcher","flags","Identifier","consumeRule","consumeRawDeclaration","consumeDeclaration","isStyleBlock","SOLIDUS","consumeValueRaw","consumeCustomPropertyRaw","consumeValue","startValueToken","Value","important","customProperty","valueStart","getImportant","Ratio","MediaFeature","MediaQuery","nth","AnPlusB","SelectorList","FULLSTOP","left","right","getOffsetExcludeWS","consumeUntil","excludeWhiteSpace","endOffset","consumePrelude","Selector","REVERSE_SOLIDUS","QUOTATION_MARK","firstChar","decoded","escapeStart","escapeEnd","apostrophe","quote","quoteCode","wsBeforeHexIsNeeded","eatIdentifierOrAsterisk","eatHexSequence","eatQuestionMarkSequence","count","scanUnicodeRange","hexLength","url.decode","string.decode","url.encode","lexerConfig","attachment","axis","box","color","counter","gradient","hue","image","position","ratio","scroller","shadow","shape","symbol","target","age","bottom","gender","paint","x","y","animation","appearance","azimuth","background","border","caret","clip","contain","direction","display","float","font","gap","grid","height","hyphens","inset","isolation","margin","opacity","order","orphans","outline","overflow","padding","perspective","quotes","resize","rotate","scale","transform","transition","translate","visibility","widows","width","zoom","behavior","cue","fill","kerning","marker","pause","speak","stroke","charset","negative","pad","suffix","symbols","system","import","keyframes","layer","namespace","page","bleed","marks","inherits","supports","viewport","orientation","nest","defaultRecognizer","Operator","Parentheses","Brackets","UnicodeRange","selector$1","AttributeSelector","IdSelector","PseudoElementSelector","PseudoClassSelector","TypeSelector","Combinator","ClassSelector","NestingSelector","isPlusMinusOperator","value$2","expression","var","startIndex","parentheses","MediaQueryList","selectorList","identList","Nth","dir","lang","is","where","not","slotted","default","mediaQueryList","mediaQuery","declarationList","clone","validMediaTypes","base64Pattern","stringPattern","excludedSelectors","excludedProperties","hasEmptyChildList","csstree.List","StyleAST","errors","absolutifyUrls","csstree.walk","readValue","absolute","URL","pruned","criticalSelectors","csstree.clone","pruneMediaQueries","pruneAtRules","pruneNonCriticalSelectors","pruneExcludedProperties","pruneLargeBase64Embeds","pruneComments","originalText","applyFilters","filters","applyPropertiesFilter","atRules","applyAtRulesFilter","pruneUnusedVariables","usedVariables","getUsedVariables","func","csstree.keyword","atitem","atlist","mqrule","mqitem","mqlist","mediaItem","mediaList","isUsefulMediaQuery","isKeyframeRule","forEachSelector","callback","csstree.generate","criticalSelector","propertyNode","selectorText","tooLong","csstree.property","pruneNonCriticalFonts","fontWhitelist","decItem","decList","family","ruleCount","rules","getUsedFontFamilies","fontFamilies","csstree.lexer","frag","flat","mediaQueryNode","lastIdentifierNot","mediaTypes","identifier","mediaType","toCSS","csstree.parse","CSSFileSet","browserInterface","internalStyles","knownUrls","cssFiles","addMultiple","cssIncludes","Promise","addInternalStyles","cssUrl","settings","addExtraReference","response","ok","status","text","storeCss","wrappedError","storeError","collateSelectorPages","pages","prunedAsts","usefulSelectors","asts","internallyUsedVariables","prevUsedVariables","v","sum","matchingFile","getErrors","ignoredPseudoElements","removePseudoElementRegex","removeIgnoredPseudoElements","allIgnored","RegExp","getRemovePseudoElementRegex","trim","optimize","NUMBER_PATTERN","tryParseInt","naturalCompare_1","value1","value2","key1","key2","l","keys1","keys2","naturalCompare","naturalSorter","scope1","scope2","standardSorter","sortSelectors_1","method","override_1","override","source1","source2","Breaks","AfterAtRule","AfterBlockBegins","AfterBlockEnds","AfterComment","AfterProperty","AfterRuleBegins","AfterRuleEnds","BeforeBlockEnds","BetweenSelectors","BreakWith","CarriageReturnLineFeed","LineFeed","System","systemLineBreak","EOL","getSystemLineBreak","IndentWith","Space","Tab","Spaces","AroundSelectorRelation","BeforeBlockBegins","BeforeValue","DEFAULTS","breaks","breakWith","indentBy","indentWith","spaces","wrapAt","semicolonAfterLastProperty","OPTION_SEPARATOR","OPTION_NAME_VALUE_SEPARATOR","HASH_VALUES_OPTION_SEPARATOR","HASH_VALUES_NAME_VALUE_SEPARATOR","FALSE_KEYWORD_1","FALSE_KEYWORD_2","TRUE_KEYWORD_1","TRUE_KEYWORD_2","breakOptions","spaceOptions","mapBreakWith","mapIndentWith","remapBreaks","breakName","breakValue","repeat","format","afterAtRule","afterBlockBegins","afterBlockEnds","afterComment","afterRuleEnds","beforeBlockEnds","accumulator","directive","normalizeValue","hashValuesToHash","AT","BACK_SLASH","CARRIAGE_RETURN","CLOSE_CURLY_BRACKET","CLOSE_ROUND_BRACKET","CLOSE_SQUARE_BRACKET","COLON","DOUBLE_QUOTE","EXCLAMATION","FORWARD_SLASH","INTERNAL","NEW_LINE_NIX","OPEN_CURLY_BRACKET","OPEN_ROUND_BRACKET","OPEN_SQUARE_BRACKET","SINGLE_QUOTE","UNDERSCORE","formatPosition_1","metadata","Marker","formatPosition","CASE_ATTRIBUTE_PATTERN","CASE_RESTORE_PATTERN","DOUBLE_QUOTE_CASE_PATTERN","DOUBLE_QUOTE_PATTERN","HTML_COMMENT_PATTERN","SINGLE_QUOTE_CASE_PATTERN","SINGLE_QUOTE_PATTERN","RELATION_PATTERN","WHITESPACE_PATTERN","LESS_THAN","PSEUDO_CLASSES_WITH_SELECTORS","hasInvalidCharacters","isEscaped","character","isInvalid","isQuote","removeWhitespace","isNewLineNix","isNewLineWin","wasEscaped","isQuoted","isSingleQuoted","isDoubleQuoted","isAttribute","isRelation","isWhitespace","isSpaceAwarePseudoClass","stripped","roundBracketLevel","wasComma","wasRelation","wasWhitespace","withCaseAttribute","spaceAroundRelation","isPseudoClassWithSelectors","colonPosition","pseudoClass","removeQuotes","replacePseudoClasses","tidyRules_1","removeUnsupported","adjacentSpace","warnings","repeated","removeHTMLComment","reduced","SUPPORTED_COMPACT_BLOCK_MATCHER","SUPPORTED_QUOTE_REMOVAL_MATCHER","tidyBlock_1","spaceAfterClosingBrace","withoutSpaceAfterClosingBrace","withoutQuotes","tidyAtRule_1","BANG","BACKSLASH","removeUnused_1","unused","Hack","ASTERISK_HACK","BACKSLASH_HACK","IMPORTANT_TOKEN","UNDERSCORE_HACK","BANG_HACK","restoreImportant","restoreHack","restoreFromOptimizing_1","restoreCallback","restored","dynamic","dirty","optimizable","AT_RULE","AT_RULE_BLOCK","AT_RULE_BLOCK_SCOPE","COMMENT","NESTED_BLOCK","NESTED_BLOCK_SCOPE","PROPERTY","PROPERTY_BLOCK","PROPERTY_NAME","PROPERTY_VALUE","RAW","RULE","RULE_SCOPE","Token","Match","BANG_SUFFIX_PATTERN","IMPORTANT_TOKEN_PATTERN","IMPORTANT_WORD","IMPORTANT_WORD_PATTERN","SUFFIX_BANG_PATTERN","VARIABLE_REFERENCE_PATTERN","someVariableReferences","isVariableReference","isMultiplex","wrapSingle","importantProperty","lastValue","isImportant","oneButLastValue","stripImportant","whichHack","hackFrom","stripPrefixHack","stripSuffixHack","components","multiplex","shorthand","wrapForOptimizing","skipProperties","single","wrapped","InvalidPropertyError","InvalidPropertyError$2","invalidPropertyError","require$$4","_anyIsInherit","_wrapDefault","configuration","doubleValues","defaultValue","fourValues","componentNames","component","widthStyleColor","validator","isWidth","isUnit","isDynamicUnit","isStyleKeyword","isColorFunction","_widthFilter","_styleFilter","isColor","isPrefixed","_colorFilter","breakUp","duration","timing","delay","iteration","play","durationSet","timingSet","delaySet","iterationSet","directionSet","fillSet","playSet","nameSet","isTime","isGlobal","isTimingFunction","isAnimationIterationCountKeyword","isPositiveNumber","isAnimationDirectionKeyword","isAnimationFillModeKeyword","isAnimationPlayStateKeyword","isAnimationNameKeyword","isIdentifier","origin","positionSet","clipSet","originSet","repeatSet","anyValueSet","isBackgroundAttachmentKeyword","isBackgroundClipKeyword","isBackgroundOriginKeyword","isBackgroundRepeatKeyword","isBackgroundPositionKeyword","isBackgroundSizeKeyword","previousValue","isUrl","isFunction","borderRadius","splitAt","remainder","j","isStretchValid","isStyleValid","isVariantValid","isWeightValid","variant","weight","stretch","isStretchSet","isStyleSet","isVariantSet","isWeightSet","appendableFamilyName","isFontKeyword","isFontSizeKeyword","_anyIsFontSize","isQuotedText","_anyIsFontFamily","isFontStretchKeyword","isFontStyleKeyword","isFontVariantKeyword","isFontWeightKeyword","isLineHeightKeyword","isNumber","listStyle","total","isListStylePositionKeyword","isListStyleTypeKeyword","splitWith","splitsAt","splitComponents","to","_property","propSet","VENDOR_PREFIX_PATTERN","unique","prefixes","exec","vendorPrefixes","sameVendorPrefixes","understandable_1","_position","isPaired","isVariable","understandable","areSameFunction","function1Name","function2Name","function1Value","function2Value","isKeyword","keywordWithGlobal","sameFunctionOrValue","unitOrKeywordWithGlobal","byKeyword","canOverride","colorOpacity","isRgbColor","isHslColor","colorHexAlpha","isHexAlphaColor","overrideCheckers","isImage","timingFunction","unitOrNumber","animationDirection","animationFillMode","animationIterationCount","animationName","animationPlayState","backgroundAttachment","backgroundClip","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","borderCollapse","borderStyle","fontFamily","fontStretch","fontStyle","fontVariant","fontWeight","listStyleType","listStylePosition","outlineStyle","textAlign","textDecoration","textOverflow","textShadow","verticalAlign","whiteSpace","zIndex","isZIndex","shallow","cloned","shallowClone","isInheritOnly","value3","value4","isDefault","restore","lastInMultiplex","needsOne","needsBoth","restoreValue","isDefaultValue","originComponent","isOriginDefault","positionComponent","isPositionDefault","multiplexLastOnly","horizontal","vertical","horizontalComponent","verticalComponent","horizontalValues","verticalValues","componentIndex","fontFamilyIndex","restoreWith","multiplexSize","componentMultiplexSoFar","componentToClone","_component","k","n","_restored","withoutDefaults","keepUnlessDefault","INTEGER_PATTERN","ALL_UNITS","DEFAULT_PRECISION","DIRECTIVES_SEPARATOR","DIRECTIVE_VALUE_SEPARATOR","defaults","cm","em","ex","in","mm","pc","pt","px","q","rem","vh","vmax","vmin","vw","roundingPrecision","directiveParts","buildPrecisionFrom","roundingPrecisionFrom","OptimizationLevel","Zero","One","Two","cleanupCharsets","normalizeUrls","optimizeBackground","optimizeBorderRadius","optimizeFilter","optimizeFontWeight","optimizeOutline","removeEmpty","removeNegativePaddings","replaceMultipleZeros","replaceTimeUnits","replaceZeroUnits","selectorsSortingMethod","specialComments","tidyAtRules","tidyBlockScopes","tidySelectors","variableValueOptimizers","mergeAdjacentRules","mergeIntoShorthands","mergeMedia","mergeNonAdjacentRules","mergeSemantically","overrideProperties","reduceNonAdjacentRules","removeDuplicateFontRules","removeDuplicateMediaBlocks","removeDuplicateRules","removeUnusedAtRules","restructureRules","ALL_KEYWORD_1","ALL_KEYWORD_2","OPTION_VALUE_SEPARATOR","covertToHash","asString","normalizedValue","optimizationLevel","clonedSource","covertValuesToHashes","plugin","level1","_rule","boxShadow","ALPHA_OR_CHROMA_FILTER_PATTERN","NO_SPACE_AFTER_COMMA_PATTERN","WHITESPACE_AROUND_EQUALS_PATTERN","compatibility","ieFilters","isNegative","parseFloat","propertyOptimizers","require$$5","require$$6","require$$7","COLORS","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","toHex","toName","hex","toHexPattern","toNamePattern","hexConverter","colorValue","nameConverter","shortenHex_1","hasHex","shortened","hueToRgb","p","t","separator","isSeparatorRegex","split_1","openLevel","closeLevel","lastStart","shortenHex","shortenHsl","saturation","lightness","asRgb","h","r","g","hslToRgb","redAsHex","greenAsHex","blueAsHex","shortenRgb","ANY_COLOR_FUNCTION_PATTERN","COLOR_PREFIX_PATTERN","HEX_LONG_PATTERN","HEX_SHORT_PATTERN","HEX_VALUE_PATTERN","HSL_PATTERN","RGBA_HSLA_PATTERN","RGB_PATTERN","TRANSPARENT_FUNCTION_PATTERN","colors","colorFn","p1","p2","p3","alpha","inputValue","colorFunction","colorDef","colorFnLowercase","ZERO_DEG_PATTERN","_name","zeroUnits","degrees","URL_PREFIX_PATTERN","startsAsUrl_1","startsAsUrl","EXPRESSION_PATTERN","ANY_FUNCTION_PATTERN","TOKEN_SEPARATOR_PATTERN","DOT_ZERO_PATTERN","FRACTION_PATTERN","LEADING_ZERO_FRACTION_PATTERN","MINUS_ZERO_FRACTION_PATTERN","ZERO_PREFIXED_UNIT_PATTERN","optimizeRecursively","functionTokens","nonZeroPart","optimizeFractions","fraction","precision","enabled","decimalPointMatcher","zeroMatcher","integerPart","fractionPart","parsedInteger","round","LOCAL_PREFIX_PATTERN","QUOTED_PATTERN","QUOTED_BUT_SAFE_PATTERN","GENERIC_FONT_FAMILY_PATTERN","textQuotes","TIME_VALUE","val","newValue","WHOLE_PIXEL_VALUE","intVal","shorterLengthUnits","urlPrefix","QUOTED_URL_PATTERN","QUOTED_URL_WITH_WHITESPACE_PATTERN","QUOTES_PATTERN","URL_DATA_PATTERN","urlQuotes","WHITESPACE_PREFIX_PATTERN","WHITESPACE_SUFFIX_PATTERN","urlWhitespace","CALC_DIVISION_WHITESPACE_PATTERN","COMMA_AND_SPACE_PATTERN","LINE_BREAK_PATTERN","MULTI_WHITESPACE_PATTERN","FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN","FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN","VARIABLE_NAME_PATTERN","VARIABLE_VALUE_PATTERN","whitespace","SKIP_FUNCTION_PATTERN","removeRecursively","unitsRegexp","removeZeros","valueOptimizers","require$$8","urlWhiteSpace","require$$9","require$$10","require$$11","componentOf","intoMultiplexMode","propertyOptimizer","shortestValue","nonMergeableValue","overridesShorthands","shorthandComponents","oppositeTo","singleTypeComponents","listStyleImage","transitionProperty","placeholderValue","vendorPrefixedConfiguration","cloneDescriptor","clonedDescriptor","shorthandName","longhandName","configuration_1","emptyCharacter","inFilter","disallowsSpace","valueIndex","supportsAfterClosingBrace","afterClosingBrace","beforeSlash","afterSlash","beforeComma","afterComma","store","body","lastPropertyAt","lastPropertyIndex","needsSemicolon","propertyValue","isPropertyBlock","isLast","semicolon","openBrace","closeBrace","breakFor","allowsSpace","colon","needsPrefixSpace","beforeBlockEnd","helpers","serializeContext","output","oneTime","oneTimeContext","sortSelectors","tidyRules","tidyBlock","tidyAtRule","removeUnused","restoreFromOptimizing","optimizers","require$$12","require$$13","serializeRules","require$$14","CHARSET_TOKEN","CHARSET_REGEXP","DEFAULT_ROUNDING_PRECISION","require$$15","VARIABLE_PROPERTY_NAME_PATTERN","PROPERTY_NAME_PATTERN","IMPORT_PREFIX_PATTERN","isImport","isLegacyFilter","noopValueOptimizer","optimizeBody","propertyToken","serializedRule","_properties","pluginValueOptimizers","plugins","level1Value","pluginPropertyOptimizers","level1Property","variableOptimizers","iePrefixHack","ieSuffixHack","ieBangHack","optimizeComment","removeComments","commentsKept","level1Optimize","levelOptions","ie7Hack","mayHaveCharset","afterRules","buildUnitRegexp","precisionOptions","buildPrecisionOptions","optimizer","buildVariableOptimizers","hasCharset","DEEP_SELECTOR_PATTERN","DOUBLE_COLON_PATTERN","VENDOR_PREFIXED_PATTERN","NOT_PSEUDO","PSEUDO_CLASSES_WITH_ARGUMENTS","UNMIXABLE_PSEUDO_CLASSES","UNMIXABLE_PSEUDO_ELEMENTS","Level","ROOT","isDeepSelector","isVendorPrefixed","extractPseudoFrom","isPseudo","wasColon","areMergeable","mergeablePseudoClasses","mergeablePseudoElements","multiplePseudoMerging","areAllowed","bracketOpensAt","hasArguments","needArguments","matchAt","nextMatch","nextMatchAt","nextName","positionInSelector","someIncorrectlyChained","unmixableMatches","isPseudoElement","allMixable","isMergeable_1","singleSelector","singleSelectors","everyValuesPair_1","leftValue","rightValue","leftSize","rightSize","lowerBound","hasInherit_1","hasSameValues_1","firstValue","onlyValueIsVariable","moreThanOneValueIsVariable","populateComponents_1","restoreWithComponents_1","everyValuesPair","hasInherit","hasSameValues","populateComponents","deepClone","restoreWithComponents","serializeBody","invalidateOrCompact","candidates","shorthandDescriptor","candidateComponents","invalidatedBy","replacedCandidates","invalidates","mixedImportance","overridable","mergeable","mixedInherit","replaceWithInheritBestFit","replaceWithShorthand","componentName","invalidatedByDescriptor","mayOverride","newValuePlaceholder","newProperty","sameValue","_validator","currentCount","lastCount","currentValue","oldComponent","newComponent","newToken","viaLonghands","longhandToken","nameMetadata","tokensSequence","inheritComponents","nonInheritComponents","shorthandToken","inferComponentValue","joinMetadata","buildSequenceWithInheritLonghands","viaShorthand","valueMetadata","buildSequenceWithInheritShorthand","longhandTokensSequence","shorthandTokensSequence","isLonghandsShorter","newTokensSequence","newComponents","lastComponent","insertAt","findTokenIn","originalValue","componentMetadata","metadataSorter","metadata1","metadata2","line1","line2","column1","column2","candidateComponentNames","firstCandidatePosition","lastCandidatePosition","traversesVia","inferInsertAtFrom","mergeIntoShorthands_1","hasUnset_1","findInDirectComponents","comparator","findComponentIn_1","longhand","longhandMatch","findInSubComponents","isDirectComponentOf","property1","property2","isComponentOf_1","isSubComponentOf","hasUnset","findComponentIn","isComponentOf","isMergeableShorthand","overridesNonComponentShorthand","sameVendorPrefixesIn","serializeProperty","wouldBreakCompatibility","overrideIntoMultiplex","by","turnIntoMultiplex","overrideByMultiplex","overrideSimple","overrideShorthand","turnLonghandValueIntoMultiplex","turnShorthandValueIntoMultiplex","withRealValue","withValue","lengthOf","fakeAsArray","moreSameShorthands","startAt","overridingFunction","anyValue","wouldResultInLongerValue","simple","multiplexClone","simpleClone","lengthBefore","isCompactable","noneOverrideHack","layers","intoLayers","anyLayerIsNone","overrideProperties_1","withMerging","overriddenComponents","overriddenComponent","overridingComponent","propertyLoop","traverseLoop","disabledBackgroundMerging","backgroundClipMerging","backgroundOriginMerging","backgroundSizeMerging","merging","leftComponent","rightComponent","optimizeProperties","withOverriding","isMergeable","mergeAdjacent_1","lastToken","mergeLimit","MODIFIER_PATTERN","withoutModifiers","rulesOverlap_1","rule1","rule2","bemMode","LETTER_PATTERN","NOT_PREFIX","SEPARATOR_PATTERN","isNotPseudoClass","specificity_1","couldIntroduceNewTypeSelector","withinNotPseudoClass","wasPseudoClass","specificity","findSpecificity","specificitiesOverlap_1","selector1","selector2","specificity1","specificity2","rulesOverlap","specificitiesOverlap","FLEX_PROPERTIES","BORDER_PROPERTIES","canReorderSingle","leftName","leftNameRoot","leftSelector","leftInSpecificSelector","rightName","rightNameRoot","rightSelector","rightInSpecificSelector","unprefixed","vendorPrefixed","sameBorderComponent","isSideBorder","isStyleBorder","inheritable","name1","name2","reorderable","serializeValue","findNameRoot","extractProperties_1","extractProperties","inSpecificSelector","canReorder","allSameRulePropertiesCanBeReordered","movedProperties","traversedProperties","specificityCache","movedProperty","movedRule","traversedProperty","traversedRule","mergeMediaQueries_1","candidate","positionLoop","positionOne","tokenOne","positionTwo","tokenTwo","directionLoop","topToBottom","delta","unsafeSelector","isBemElement","withoutModifier","removeAnyUnsafeElements","mergeNonAdjacentByBody_1","candidateBody","oldToken","mergeNonAdjacentBySelector_1","allSelectors","repeatedSelectors","selectorIterator","directionIterator","moved","cloneArray_1","cloneArray","wrappedSelectorsFrom","reduceSelector","outerContext","bodies","bodiesAsList","processedTokens","filterOut","clonedBody","processedCount","propertyIdx","tokenIdx","newBody","reduceNonAdjacent_1","selectorAsString","isComplexAndNotSpecial","wrappedSelectors","isPartial","isComplex","reduceBody","reduceSimpleNonAdjacentCases","localContext","intoPosition","collectReducedBodies","reducedBodies","complexSelector","into","intoToken","reduceComplexNonAdjacentCases","serializeAll","removeDuplicateFontAtRules_1","fontAtRules","removeDuplicateMediaQueries_1","removeDuplicates_1","id","moreThanOnce","animationNameRegex","animationRegex","keyframeRegex","importantRegex","optionalMatchingQuotesRegex","removeUnusedAtRule","matchCallback","markCallback","atRule","atRuleTokens","atRuleToken","markUsedAtRules","boundMarkCallback","matchCounterStyle","markCounterStylesAsUsed","wrappedProperty","matchFontFace","markFontFacesAsUsed","normalizedMatch","matchKeyframe","markKeyframesAsUsed","matchNamespace","markNamespacesAsUsed","namespaceRegex","removeUnusedAtRules_1","ruleSorter","s1","s2","tidyRuleDuplicates_1","tidyRuleDuplicates","restructure_1","propertyA","propertyB","movableTokens","multiPropertyMoveCache","movedToBeDropped","maxCombinationsLevel","ID_JOIN_CHARACTER","addToCache","fit","cachedTokens","cacheId","removeAllMatchingFromCache","matchId","matchSelectors","forRemoval","tokensToMerge","sourceTokens","uniqueTokensWithBody","mergeableTokens","shortenIfPossible","valueSize","qualifiedTokens","allFits","findAllFits","bestFit","processMultiPropertyMove","sendToMultiPropertyMoveCache","dropAsNewTokenAt","fitSorter","fit1","fit2","propertySize","propertiesCount","allCombinations","tokensVariant","differenceVariants","sizeDifference","subVariant","allSelectorsSize","allProperties","mergeableToken","mergeableProperty","mergeablePropertyName","propertyBody","dropPropertiesAt","toMove","propertiesAndMergableTokens","movableLoop","tokensList","shortenMultiMovesIfPossible","boundToAnotherPropertyInCurrrentToken","isRule","samePropertyAt","movedCount","unmovableInCurrentToken","movedSameProperty","dropAt","isImportRule","isComment","mergeAdjacent","mergeMediaQueries","mergeNonAdjacentByBody","mergeNonAdjacentBySelector","reduceNonAdjacent","removeDuplicateFontAtRules","removeDuplicateMediaQueries","removeDuplicates","restructure","recursivelyOptimizeProperties","level2Optimize","withRestructuring","level2Plugins","level2Block","isKeyframes","recursivelyOptimizeBlocks","variableRegexStr","functionAnyRegexStr","calcRegex","decimalRegex","functionAnyRegex","hexAlphaColorRegex","hslColorRegex","hslColorWithSpacesRegex","identifierRegex","namedEntityRegex","prefixRegex","quotedTextRegex","rgbColorRegex","rgbColorWithSpacesRegex","timeUnitPattern","timingFunctionRegex","validTimeUnits","urlRegex","variableRegex","eightValueColorRegex","fourValueColorRegex","sixValueColorRegex","threeValueColorRegex","DECIMAL_DOT","MINUS_SIGN","PLUS_SIGN","Keywords","Units","isHexColor","isNamedEntity","scanForNumber","numberUpTo","isCalculatedTime","validUnits","hasDot","hasSign","validator_1","isTimingFunctionKeyword","customUnits","rpx","hexAlpha","vm","merge","ie11","ie10","ie9","ie8","ie7","template","isAdd","option","calculateSource","HTTP_RESOURCE_PATTERN","HTTPS_RESOURCE_PATTERN","http","https","isHttpResource","uri","isHttpsResource","loadRemoteResource_1","loadRemoteResource","inlineRequest","inlineTimeout","requestOptions","proxyProtocol","protocol","hostname","errorHandled","res","chunks","statusCode","resolve","headers","on","setTimeout","inline","httpProxy","process","env","HTTP_PROXY","http_proxy","flatPlugins","level2","rebase","rebaseOption","rebaseToOption","rebaseTo","cwd","lruMemoize","arraySet","mappingList","generatedPositionAfter","srcFile","sourceMapGenerator","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","mid","LEAST_UPPER_BOUND","GREATEST_LOWER_BOUND","search","mappingsWasm","readWasmModule","arrayBuffer","ArrayBuffer","fs","reject","wasmPath","readFile","initialize","debug","readWasm","Mapping","lastGeneratedColumn","cachedWasm","binarySearch","wasm","callbackStack","WebAssembly","instantiate","mapping_callback","hasLastGeneratedColumn","hasOriginal","hasName","start_all_generated_locations_for","end_all_generated_locations_for","timeEnd","start_compute_column_spans","end_compute_column_spans","start_generated_location_for","end_generated_location_for","start_original_location_for","end_original_location_for","start_parse_mappings","end_parse_mappings","start_sort_by_generated_location","end_sort_by_generated_location","start_sort_by_original_location","end_sort_by_original_location","Wasm","instance","withMappingCallback","mappingCallback","SourceMapConsumer","aSourceMap","aSourceMapURL","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","_factory","_factoryBSM","rawSourceMap","sourceMapUrl","destroy","_parseMappings","aContext","aOrder","allGeneratedPositionsFor","GENERATED_ORDER","ORIGINAL_ORDER","sourceMapConsumer","that","_absoluteSources","_sourceMapURL","_computedColumnSpans","_mappingsPtr","_wasm","w","_findSourceIndex","relativeSource","_getMappingsPtr","mappingsBufPtr","allocate_mappings","mappingsBuf","memory","mappingsPtr","parse_mappings","get_last_error","by_generated_location","by_original_location","lastColumn","Infinity","all_generated_locations_for","free_mappings","computeColumnSpans","compute_column_spans","needle","bias","original_location_for","hasContentsOfAllSources","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","generated_location_for","__generatedMappings","__originalMappings","__generatedMappingsUnsorted","__originalMappingsUnsorted","lastOffset","offsetLine","offsetColumn","generatedOffset","_sections","_generatedMappings","_sortGeneratedMappings","_originalMappings","_sortOriginalMappings","_generatedMappingsUnsorted","_originalMappingsUnsorted","sectionIndex","section","every","generatedPosition","generatedMappings","originalMappings","sectionMappings","adjustedMapping","_findMapping","aMappings","aLineName","aColumnName","aComparator","REGEX_NEWLINE","isSourceNode","SourceNode","aLine","aColumn","aChunks","sourceContents","fromStringWithSourceMap","aGeneratedCode","aRelativePath","remainingLines","remainingLinesIndex","shiftNextLine","getNextLine","nextLine","lastGeneratedLine","lastMapping","addMappingWithCode","aChunk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","toStringWithSourceMap","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent","sourceNode","maps","isTracking","selectorFallbacks","originalPosition","asHash","track","inputSourceMapTracker_1","REMOTE_RESOURCE_PATTERN","FILE_RESOURCE_PATTERN","isRemoteResource_1","NO_PROTOCOL_RESOURCE_PATTERN","hasProtocol_1","isRemoteResource","hasProtocol","HTTP_PROTOCOL","isRemoteRule","isAllowedResource_1","isAllowedResource","isRemote","absoluteUri","isNegated","normalizedRule","allowed","DATA_URI_PATTERN","rebaseLocalMap_1","sourceUri","currentPath","absoluteUriDirectory","dirname","rebaseRemoteMap_1","sourceDirectory","isDataUriResource_1","matchDataUri","rebaseLocalMap","rebaseRemoteMap","isDataUriResource","MAP_MARKER_PATTERN","doApplySourceMaps","applyContext","singleSourceTokens","lastSource","findTokenSource","fetchAndApplySourceMap","sourceMapComment","whenSourceMapReady","rebasedMap","dataUriMatch","encoding","global","unescape","Buffer","extractInputSourceMapFromDataUri","whenLoaded","isAllowed","isRuntimeResource","localOnly","loadInputSourceMapFromRemoteUri","parsedMap","existsSync","statSync","isFile","readFileSync","loadInputSourceMapFromLocalUri","extractInputSourceMapFrom","inputSourceMap","inputSourceMapTracker","applySourceMapRecursively","applySourceMapTo","newMetadata","applySourceMaps_1","BRACE_PREFIX","BRACE_SUFFIX","QUOTE_PREFIX_PATTERN","QUOTE_SUFFIX_PATTERN","URL_SUFFIX_PATTERN","extractImportUrlAndMedia_1","atRuleValue","normalized","uriToSourceMapping","allSourceMapConsumers","doLoadOriginalSources","loadContext","uris","uriToSource","loadOriginalSource","loadOriginalSourceFromRemoteUri","relativeUri","loadOriginalSourceFromLocalUri","loadOriginalSources_1","sourceMapInlineSources","WINDOWS_SEPARATOR_PATTERN","normalizePath_1","restoreImport_1","PROTOCOL_LESS_PREFIX_PATTERN","ROUND_BRACKETS_PATTERN","isWindows","platform","rebaseConfig","toBase","isSVGMarker","isInternal","fromBase","quoteFor","unquotedUrl","hasWhitespace","hasRoundBrackets","isImport_1","extractImportUrlAndMedia","restoreImport","rewriteUrl","originalUrl","pathOnly","strippedUrl","SOURCE_MAP_COMMENT_PATTERN","rebaseEverything","rebaseAtRule","rebaseProperties","rebaseSourceMapComment","uriAndMediaQuery","newUrl","rebase_1","rebaseAll","rebaseAtRules","BLOCK","AT_RULES","BLOCK_RULES","IGNORE_END_COMMENT_PATTERN","IGNORE_START_COMMENT_PATTERN","PAGE_MARGIN_BOXES","EXTRA_PAGE_BOXES","REPEAT_PATTERN","TAIL_BROKEN_VALUE_PATTERN","RULE_WORD_SEPARATOR_PATTERN","intoTokens","externalContext","internalContext","isNested","ruleToken","serializedBuffer","serializedBufferPart","isSpace","isCarriageReturn","isCommentStart","isCommentEnd","isCommentEndMarker","characterWithNoSpecialMeaning","lastCommentStartAt","allTokens","newTokens","ruleTokens","metadatas","levels","buffers","isBufferEmpty","wasCommentStart","wasCommentEnd","isPreviousDash","isRaw","seekingValue","seekingPropertyBlockClosing","isIgnoreStartComment","originalMetadata","isIgnoreEndComment","tokenScopeFrom","tokenTypeFrom","isPageMarginBox","isRepeatToken","trimRight","isAtRule","ruleWord","applySourceMaps","loadOriginalSources","normalizePath","require$$16","UNKNOWN_URI","FILE_RESOURCE_PROTOCOL","fromString","stats","originalSize","fromStyles","addHashSource","imports","normalizedUri","normalizeUri","restoreAsImport","trackSourceMap","relativeToCurrentPath","parentInlinerContext","allowsAnyImports","inlinerContext","afterContent","inlinedStylesheets","outputTokens","doInlineImports","inlineStylesheet","originalUri","isLoaded","importedStyles","nextTick","importedTokens","wrapInMedia","inlineRemoteStylesheet","protocolLessUri","normalizedPath","inlineLocalStylesheet","readSources_1","isBuffer","inputAsImports","uriOrHash","addStringSource","fromHash","doReadSources","wrap","NIX_SEPARATOR_PATTERN","UNKNOWN_SOURCE","WINDOWS_SEPARATOR","trackMapping","trackAllMappings","originalSource","storedSource","outputMap","inlineSources","sourceMaps","level0Optimize","compatibilityFrom","fetchFrom","formatFrom","inlineFrom","inlineRequestFrom","inlineTimeoutFrom","optimizationLevelFrom","pluginsFrom","rebaseFrom","rebaseToFrom","readSources","serializeStyles","serializeStylesAndSourceMap","require$$17","CleanCSS","cleanModule","batch","explicitRebaseTo","returnPromise","minifyAll","maybeSourceMap","maybeCallback","outputAsHash","whenHashBatchDone","innerErrors","minifyInBatchesFromHash","minify","minifyInBatchesFromArray","inputKey","efficiency","minifiedSize","startedAt","Date","now","timeSpent","serialize","optimizedTokens","optimized","calculateStatsFrom","withMetadata","optsTo","CleanCSS$1","requestGetParameters","loadTimeout","verifyPage","allowScripts","currentUrl","currentSize","wrapperDiv","createElement","setAttribute","iframe","loadPage","contentWindow","addGetParameters","rawUrl","urlObject","searchParams","diagnoseUrlError","redirect","sameOrigin","fullUrl","rawReject","timeoutId","onload","async","clearTimeout","contentDocument","progressCallback","viewports","successRatio","maxPages","successUrlsThreshold","ceil","progress","progressSteps","updateProgress","cssFileErrors","successes","absoluteIncludes","log","collateCssFiles","validUrls","selectorPages","aboveFoldSelectors","trimmedSelectors","dangerousSelectors","dangerousSelector","delete","getAboveFoldSelectors","cssErrors","minifyCss","emptyCSSErrors"],"mappings":"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B,CACtB,SACA,WAEF,wBAAyB,CACvB,QACA,UACA,QACA,UAEF,kBAAmB,CACjB,aACA,cACA,UACA,cACA,QAEF,oBAAqB,CACnB,aACA,cACA,UACA,eAEF,sBAAuB,CACrB,SACA,SACA,OACA,QACA,OAEF,oBAAqB,CACnB,YACA,UACA,SACA,WACA,WACA,QACA,SAEF,kBAAmB,CACjB,OACA,QACA,WAEF,kBAAmB,CACjB,WACA,UACA,YAEF19C,OAAQ,CACN,QAEFpiC,MAAO,CACL,OACA,OACA,OACA,SAEFuhC,MAAO,CACL,eAEF52B,OAAQ,CACN,aACA,OACA,aACA,YACA,UACA,WACA,OACA,OACA,WACA,YACA,UACA,cACA,YACA,UACA,WACA,aACA,WACA,YACA,YACA,OACA,gBACA,WACA,QAEFu4B,QAAS,CACP,QACA,SACA,eACA,eACA,YACA,OACA,QACA,gBACA,aACA,eACA,qBACA,qBACA,qBACA,YACA,mBAEFC,MAAO,CACL,OACA,OACA,SAEF3D,KAAM,CACJ,QAEF4D,KAAM,CACJ,UACA,OACA,OACA,cACA,gBACA,aACA,SAEF,YAAa,CACX,QACA,SACA,SACA,QACA,UACA,UACA,UACA,WACA,YAEF,eAAgB,CACd,YACA,WACA,kBACA,iBACA,SACA,iBACA,gBACA,kBACA,kBAEF,aAAc,CACZ,SACA,SACA,WAEF,eAAgB,CACd,SACA,cAEF,cAAe,CACb,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,SACA,UACA,UAEF,cAAe,CACb,UAEF,sBAAuB,CACrB,SACA,WAEF,kBAAmB,CACjB,WACA,SACA,UACA,uBACA,OACA,eACA,WACA,cACA,cACA,cACA,cACA,OACA,SACA,cACA,cACA,eAEFY,SAAU,CACR,OACA,SACA,SACA,WAEFpC,SAAU,CACR,WACA,QACA,WACA,UAEFnC,MAAO,CACL,QAEF,aAAc,CACZ,SACA,UACA,OACA,aACA,SAEF,kBAAmB,CACjB,eACA,OACA,WACA,aAEF,gBAAiB,CACf,OACA,YAEFt/B,IAAK,CACH,Q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"}