{"version":3,"file":"less.min.js","sources":["../src/less-browser/utils.js","../
src/less-browser/browser.js","../src/less/logger.js","../src/less/environment/en
vironment.js","../src/less/data/colors.js","../src/less/data/unit-conversions.js
","../src/less/data/index.js","../src/less/tree/node.js","../src/less/tree/color
.js","../src/less/tree/paren.js","../src/less/tree/combinator.js","../src/less/t
ree/element.js","../src/less/constants.js","../node_modules/is-what/dist/index.e
sm.js","../node_modules/copy-anything/dist/index.esm.js","../src/less/utils.js",
"../src/less/less-error.js","../src/less/tree/selector.js","../src/less/tree/val
ue.js","../src/less/tree/keyword.js","../src/less/tree/anonymous.js","../src/les
s/tree/declaration.js","../src/less/tree/debug-info.js","../src/less/tree/commen
t.js","../src/less/contexts.js","../src/less/functions/function-registry.js","..
/src/less/functions/default.js","../src/less/tree/ruleset.js","../src/less/tree/
atrule.js","../src/less/tree/detached-ruleset.js","../src/less/tree/unit.js","..
/src/less/tree/dimension.js","../src/less/tree/operation.js","../src/less/tree/e
xpression.js","../src/less/functions/function-caller.js","../node_modules/tslib/
tslib.es6.js","../src/less/tree/call.js","../src/less/tree/variable.js","../src/
less/tree/property.js","../src/less/tree/attribute.js","../src/less/tree/quoted.
js","../src/less/tree/url.js","../src/less/tree/media.js","../src/less/tree/impo
rt.js","../src/less/tree/js-eval-node.js","../src/less/tree/javascript.js","../s
rc/less/tree/assignment.js","../src/less/tree/condition.js","../src/less/tree/un
icode-descriptor.js","../src/less/tree/negative.js","../src/less/tree/extend.js"
,"../src/less/tree/variable-call.js","../src/less/tree/namespace-value.js","../s
rc/less/tree/mixin-definition.js","../src/less/tree/mixin-call.js","../src/less/
tree/index.js","../src/less/environment/abstract-file-manager.js","../src/less/e
nvironment/abstract-plugin-loader.js","../src/less/visitors/visitor.js","../src/
less/visitors/import-sequencer.js","../src/less/visitors/import-visitor.js","../
src/less/visitors/set-tree-visibility-visitor.js","../src/less/visitors/extend-v
isitor.js","../src/less/visitors/join-selector-visitor.js","../src/less/visitors
/to-css-visitor.js","../src/less/visitors/index.js","../src/less/parser/parser-i
nput.js","../src/less/parser/chunker.js","../src/less/parser/parser.js","../src/
less/functions/boolean.js","../src/less/functions/color.js","../src/less/functio
ns/color-blending.js","../src/less/functions/list.js","../src/less/functions/mat
h-helper.js","../src/less/functions/math.js","../src/less/functions/number.js","
../src/less/functions/string.js","../src/less/functions/types.js","../src/less/f
unctions/index.js","../src/less/functions/data-uri.js","../src/less/functions/sv
g.js","../src/less/transform-tree.js","../src/less/plugin-manager.js","../node_m
odules/parse-node-version/index.js","../src/less-browser/file-manager.js","../sr
c/less/index.js","../src/less/parse-tree.js","../src/less/source-map-builder.js"
,"../src/less/source-map-output.js","../src/less/import-manager.js","../src/less
/render.js","../src/less/parse.js","../src/less-browser/plugin-loader.js","../sr
c/less-browser/error-reporting.js","../src/less-browser/bootstrap.js","../src/le
ss/default-options.js","../src/less-browser/add-default-options.js","../src/less
-browser/index.js","../src/less-browser/log-listener.js","../src/less-browser/ca
che.js","../src/less-browser/image-size.js"],"sourcesContent":["\nexport functio
n extractId(href) {\n return href.replace(/^[a-z-]+:\\/+?[^\\/]+/, '') // Re
move protocol & domain\n .replace(/[\\?\\&]livereload=\\w+/, '') /
/ Remove LiveReload cachebuster\n .replace(/^\\//, '')
// Remove root /\n .replace(/\\.[a-zA-Z]+$/, '') //
Remove simple extension\n .replace(/[^\\.\\w-]+/g, '-') /
/ Replace illegal characters\n .replace(/\\./g, ':');
// Replace dots with colons(for valid id)\n}\n\nexport function addDataAttr(o
ptions, tag) {\n for (const opt in tag.dataset) {\n if (tag.dataset.ha
sOwnProperty(opt)) {\n if (opt === 'env' || opt === 'dumpLineNumbers'
|| opt === 'rootpath' || opt === 'errorReporting') {\n options[o
pt] = tag.dataset[opt];\n } else {\n try {\n
options[opt] = JSON.parse(tag.dataset[opt]);\n }\n
catch (_) {}\n }\n }\n }\n}\n","import * as util
s from './utils';\n\nexport default {\n createCSS: function (document, styles
, sheet) {\n // Strip the query-string\n const href = sheet.href |
| '';\n\n // If there is no title set, use the filename, minus the extens
ion\n const id = `less:${sheet.title || utils.extractId(href)}`;\n\n
// If this has already been inserted into the DOM, we may need to replace it\
n const oldStyleNode = document.getElementById(id);\n let keepOldS
tyleNode = false;\n\n // Create a new stylesheet node for insertion or (i
f necessary) replacement\n const styleNode = document.createElement('styl
e');\n styleNode.setAttribute('type', 'text/css');\n if (sheet.med
ia) {\n styleNode.setAttribute('media', sheet.media);\n }\n
styleNode.id = id;\n\n if (!styleNode.styleSheet) {\n sty
leNode.appendChild(document.createTextNode(styles));\n\n // If new co
ntents match contents of oldStyleNode, don't replace oldStyleNode\n k
eepOldStyleNode = (oldStyleNode !== null && oldStyleNode.childNodes.length > 0 &
& styleNode.childNodes.length > 0 &&\n oldStyleNode.firstChild.no
deValue === styleNode.firstChild.nodeValue);\n }\n\n const head =
document.getElementsByTagName('head')[0];\n\n // If there is no oldStyleN
ode, just append; otherwise, only append if we need\n // to replace oldSt
yleNode with an updated stylesheet\n if (oldStyleNode === null || keepOld
StyleNode === false) {\n const nextEl = sheet && sheet.nextSibling ||
null;\n if (nextEl) {\n nextEl.parentNode.insertBefor
e(styleNode, nextEl);\n } else {\n head.appendChild(st
yleNode);\n }\n }\n if (oldStyleNode && keepOldStyleNod
e === false) {\n oldStyleNode.parentNode.removeChild(oldStyleNode);\n
}\n\n // For IE.\n // This needs to happen *after* the sty
le element is added to the DOM, otherwise IE 7 and 8 may crash.\n // See
http://social.msdn.microsoft.com/Forums/en-US/7e081b65-878a-4c22-8e68-c10d39c2ed
32/internet-explorer-crashes-appending-style-element-to-head\n if (styleN
ode.styleSheet) {\n try {\n styleNode.styleSheet.cssTe
xt = styles;\n } catch (e) {\n throw new Error('Couldn
\\'t reassign styleSheet.cssText.');\n }\n }\n },\n curr
entScript: function(window) {\n const document = window.document;\n
return document.currentScript || (() => {\n const scripts = documen
t.getElementsByTagName('script');\n return scripts[scripts.length - 1
];\n })();\n }\n};\n","export default {\n error: function(msg) {\n
this._fireEvent('error', msg);\n },\n warn: function(msg) {\n
this._fireEvent('warn', msg);\n },\n info: function(msg) {\n this
._fireEvent('info', msg);\n },\n debug: function(msg) {\n this._fir
eEvent('debug', msg);\n },\n addListener: function(listener) {\n th
is._listeners.push(listener);\n },\n removeListener: function(listener) {\
n for (let i = 0; i < this._listeners.length; i++) {\n if (thi
s._listeners[i] === listener) {\n this._listeners.splice(i, 1);\n
return;\n }\n }\n },\n _fireEvent: funct
ion(type, msg) {\n for (let i = 0; i < this._listeners.length; i++) {\n
const logFunction = this._listeners[i][type];\n if (logFunc
tion) {\n logFunction(msg);\n }\n }\n },\n
_listeners: []\n};\n","/**\n * @todo Document why this abstraction exists, and
the relationship between\n * environment, file managers, and plugin manag
er\n */\n\nimport logger from '../logger';\n\nclass Environment {\n construct
or(externalEnvironment, fileManagers) {\n this.fileManagers = fileManager
s || [];\n externalEnvironment = externalEnvironment || {};\n\n co
nst optionalFunctions = ['encodeBase64', 'mimeLookup', 'charsetLookup', 'getSour
ceMapGenerator'];\n const requiredFunctions = [];\n const function
s = requiredFunctions.concat(optionalFunctions);\n\n for (let i = 0; i <
functions.length; i++) {\n const propName = functions[i];\n
const environmentFunc = externalEnvironment[propName];\n if (enviro
nmentFunc) {\n this[propName] = environmentFunc.bind(externalEnvi
ronment);\n } else if (i < requiredFunctions.length) {\n
this.warn(`missing required function in environment - ${propName}`);\n
}\n }\n }\n\n getFileManager(filename, currentDirectory, optio
ns, environment, isSync) {\n\n if (!filename) {\n logger.warn(
'getFileManager called with no filename.. Please report this issue. continuing.'
);\n }\n if (currentDirectory == null) {\n logger.warn(
'getFileManager called with null directory.. Please report this issue. continuin
g.');\n }\n\n let fileManagers = this.fileManagers;\n if (o
ptions.pluginManager) {\n fileManagers = [].concat(fileManagers).conc
at(options.pluginManager.getFileManagers());\n }\n for (let i = fi
leManagers.length - 1; i >= 0 ; i--) {\n const fileManager = fileMana
gers[i];\n if (fileManager[isSync ? 'supportsSync' : 'supports'](file
name, currentDirectory, options, environment)) {\n return fileMan
ager;\n }\n }\n return null;\n }\n\n addFileManag
er(fileManager) {\n this.fileManagers.push(fileManager);\n }\n\n cl
earFileManagers() {\n this.fileManagers = [];\n }\n}\n\nexport default
Environment;\n","export default {\n 'aliceblue':'#f0f8ff',\n 'antiquewhit
e':'#faebd7',\n 'aqua':'#00ffff',\n 'aquamarine':'#7fffd4',\n 'azure':'
#f0ffff',\n 'beige':'#f5f5dc',\n 'bisque':'#ffe4c4',\n 'black':'#000000
',\n 'blanchedalmond':'#ffebcd',\n 'blue':'#0000ff',\n 'blueviolet':'#8
a2be2',\n 'brown':'#a52a2a',\n 'burlywood':'#deb887',\n 'cadetblue':'#5
f9ea0',\n 'chartreuse':'#7fff00',\n 'chocolate':'#d2691e',\n 'coral':'#
ff7f50',\n 'cornflowerblue':'#6495ed',\n 'cornsilk':'#fff8dc',\n 'crims
on':'#dc143c',\n 'cyan':'#00ffff',\n 'darkblue':'#00008b',\n 'darkcyan'
:'#008b8b',\n 'darkgoldenrod':'#b8860b',\n 'darkgray':'#a9a9a9',\n 'dar
kgrey':'#a9a9a9',\n 'darkgreen':'#006400',\n 'darkkhaki':'#bdb76b',\n '
darkmagenta':'#8b008b',\n 'darkolivegreen':'#556b2f',\n 'darkorange':'#ff8
c00',\n 'darkorchid':'#9932cc',\n 'darkred':'#8b0000',\n 'darksalmon':'
#e9967a',\n 'darkseagreen':'#8fbc8f',\n 'darkslateblue':'#483d8b',\n 'd
arkslategray':'#2f4f4f',\n 'darkslategrey':'#2f4f4f',\n 'darkturquoise':'#
00ced1',\n 'darkviolet':'#9400d3',\n 'deeppink':'#ff1493',\n 'deepskybl
ue':'#00bfff',\n 'dimgray':'#696969',\n 'dimgrey':'#696969',\n 'dodgerb
lue':'#1e90ff',\n 'firebrick':'#b22222',\n 'floralwhite':'#fffaf0',\n '
forestgreen':'#228b22',\n 'fuchsia':'#ff00ff',\n 'gainsboro':'#dcdcdc',\n
'ghostwhite':'#f8f8ff',\n 'gold':'#ffd700',\n 'goldenrod':'#daa520',\n
'gray':'#808080',\n 'grey':'#808080',\n 'green':'#008000',\n 'greeny
ellow':'#adff2f',\n 'honeydew':'#f0fff0',\n 'hotpink':'#ff69b4',\n 'ind
ianred':'#cd5c5c',\n 'indigo':'#4b0082',\n 'ivory':'#fffff0',\n 'khaki'
:'#f0e68c',\n 'lavender':'#e6e6fa',\n 'lavenderblush':'#fff0f5',\n 'law
ngreen':'#7cfc00',\n 'lemonchiffon':'#fffacd',\n 'lightblue':'#add8e6',\n
'lightcoral':'#f08080',\n 'lightcyan':'#e0ffff',\n 'lightgoldenrodyello
w':'#fafad2',\n 'lightgray':'#d3d3d3',\n 'lightgrey':'#d3d3d3',\n 'ligh
tgreen':'#90ee90',\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':'#00ff00',\n 'limegreen':'#32cd32',\
n 'linen':'#faf0e6',\n 'magenta':'#ff00ff',\n 'maroon':'#800000',\n
'mediumaquamarine':'#66cdaa',\n 'mediumblue':'#0000cd',\n 'mediumorchid':'
#ba55d3',\n 'mediumpurple':'#9370d8',\n 'mediumseagreen':'#3cb371',\n '
mediumslateblue':'#7b68ee',\n 'mediumspringgreen':'#00fa9a',\n 'mediumturq
uoise':'#48d1cc',\n 'mediumvioletred':'#c71585',\n 'midnightblue':'#191970
',\n 'mintcream':'#f5fffa',\n 'mistyrose':'#ffe4e1',\n 'moccasin':'#ffe
4b5',\n 'navajowhite':'#ffdead',\n 'navy':'#000080',\n 'oldlace':'#fdf5
e6',\n 'olive':'#808000',\n 'olivedrab':'#6b8e23',\n 'orange':'#ffa500'
,\n 'orangered':'#ff4500',\n 'orchid':'#da70d6',\n 'palegoldenrod':'#ee
e8aa',\n 'palegreen':'#98fb98',\n 'paleturquoise':'#afeeee',\n 'palevio
letred':'#d87093',\n 'papayawhip':'#ffefd5',\n 'peachpuff':'#ffdab9',\n
'peru':'#cd853f',\n 'pink':'#ffc0cb',\n 'plum':'#dda0dd',\n 'powderblu
e':'#b0e0e6',\n 'purple':'#800080',\n 'rebeccapurple':'#663399',\n 'red
':'#ff0000',\n 'rosybrown':'#bc8f8f',\n 'royalblue':'#4169e1',\n 'saddl
ebrown':'#8b4513',\n 'salmon':'#fa8072',\n 'sandybrown':'#f4a460',\n 's
eagreen':'#2e8b57',\n 'seashell':'#fff5ee',\n 'sienna':'#a0522d',\n 'si
lver':'#c0c0c0',\n 'skyblue':'#87ceeb',\n 'slateblue':'#6a5acd',\n 'sla
tegray':'#708090',\n 'slategrey':'#708090',\n 'snow':'#fffafa',\n 'spri
nggreen':'#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':'#ffff
ff',\n 'whitesmoke':'#f5f5f5',\n 'yellow':'#ffff00',\n 'yellowgreen':'#
9acd32'\n};","export default {\n length: {\n 'm': 1,\n 'cm': 0.
01,\n 'mm': 0.001,\n 'in': 0.0254,\n 'px': 0.0254 / 96,\n
'pt': 0.0254 / 72,\n 'pc': 0.0254 / 72 * 12\n },\n duration:
{\n 's': 1,\n 'ms': 0.001\n },\n angle: {\n 'rad': 1
/ (2 * Math.PI),\n 'deg': 1 / 360,\n 'grad': 1 / 400,\n 'tu
rn': 1\n }\n};","import colors from './colors';\nimport unitConversions from
'./unit-conversions';\n\nexport default { colors, unitConversions };\n","/**\n *
The reason why Node is a class and other nodes simply do not extend\n * from No
de (since we're transpiling) is due to this issue:\n * \n * https://github.com/l
ess/less.js/issues/3434\n */\nclass Node {\n constructor() {\n this.pa
rent = null;\n this.visibilityBlocks = undefined;\n this.nodeVisib
le = undefined;\n this.rootNode = null;\n this.parsed = null;\n
}\n\n get currentFileInfo() {\n return this.fileInfo();\n }\n\n
get index() {\n return this.getIndex();\n }\n\n setParent(nodes, p
arent) {\n function set(node) {\n if (node && node instanceof
Node) {\n node.parent = parent;\n }\n }\n
if (Array.isArray(nodes)) {\n nodes.forEach(set);\n }\n
else {\n set(nodes);\n }\n }\n\n getIndex() {\n
return this._index || (this.parent && this.parent.getIndex()) || 0;\n }\n\n
fileInfo() {\n return this._fileInfo || (this.parent && this.parent.f
ileInfo()) || {};\n }\n\n isRulesetLike() { return false; }\n\n toCSS(c
ontext) {\n const strs = [];\n this.genCSS(context, {\n
add: function(chunk, fileInfo, index) {\n strs.push(chunk);\n
},\n isEmpty: function () {\n return strs.len
gth === 0;\n }\n });\n return strs.join('');\n }\n\n
genCSS(context, output) {\n output.add(this.value);\n }\n\n acc
ept(visitor) {\n this.value = visitor.visit(this.value);\n }\n\n ev
al() { return this; }\n\n _operate(context, op, a, b) {\n switch (op)
{\n case '+': return a + b;\n case '-': return a - b;\n
case '*': return a * b;\n case '/': return a / b;\n }
\n }\n\n fround(context, value) {\n const precision = context && co
ntext.numPrecision;\n // add \"epsilon\" to ensure numbers like 1.0000000
05 (represented as 1.000000004999...) are properly rounded:\n return (pre
cision) ? Number((value + 2e-16).toFixed(precision)) : value;\n }\n\n stat
ic compare(a, b) {\n /* returns:\n -1: a < b\n 0: a = b\n
1: a > b\n and *any* other value for a != b (e.g. undefined, Na
N, -2 etc.) */\n\n if ((a.compare) &&\n // for \"symmetric res
ults\" force toCSS-based comparison\n // of Quoted or Anonymous if ei
ther value is one of those\n !(b.type === 'Quoted' || b.type === 'Ano
nymous')) {\n return a.compare(b);\n } else if (b.compare) {\n
return -b.compare(a);\n } else if (a.type !== b.type) {\n
return undefined;\n }\n\n a = a.value;\n b = b.valu
e;\n if (!Array.isArray(a)) {\n return a === b ? 0 : undefined
;\n }\n if (a.length !== b.length) {\n return undefined
;\n }\n for (let i = 0; i < a.length; i++) {\n if (Node
.compare(a[i], b[i]) !== 0) {\n return undefined;\n }\
n }\n return 0;\n }\n\n static numericCompare(a, b) {\n
return a < b ? -1\n : a === b ? 0\n : a > b ?
1 : undefined;\n }\n\n // Returns true if this node represents root of as
t imported by reference\n blocksVisibility() {\n if (this.visibilityBl
ocks == null) {\n this.visibilityBlocks = 0;\n }\n retu
rn this.visibilityBlocks !== 0;\n }\n\n addVisibilityBlock() {\n if
(this.visibilityBlocks == null) {\n this.visibilityBlocks = 0;\n
}\n this.visibilityBlocks = this.visibilityBlocks + 1;\n }\n\n
removeVisibilityBlock() {\n if (this.visibilityBlocks == null) {\n
this.visibilityBlocks = 0;\n }\n this.visibilityBlocks = this
.visibilityBlocks - 1;\n }\n\n // Turns on node visibility - if called nod
e will be shown in output regardless\n // of whether it comes from import by
reference or not\n ensureVisibility() {\n this.nodeVisible = true;\n
}\n\n // Turns off node visibility - if called node will NOT be shown in ou
tput regardless\n // of whether it comes from import by reference or not\n
ensureInvisibility() {\n this.nodeVisible = false;\n }\n\n // retu
rn values:\n // false - the node must not be visible\n // true - the node
must be visible\n // undefined or null - the node has the same visibility as
its parent\n isVisible() {\n return this.nodeVisible;\n }\n\n vi
sibilityInfo() {\n return {\n visibilityBlocks: this.visibilit
yBlocks,\n nodeVisible: this.nodeVisible\n };\n }\n\n co
pyVisibilityInfo(info) {\n if (!info) {\n return;\n }\n
this.visibilityBlocks = info.visibilityBlocks;\n this.nodeVisible
= info.nodeVisible;\n }\n}\n\nexport default Node;\n","import Node from './n
ode';\nimport colors from '../data/colors';\n\n//\n// RGB Colors - #ff0014, #eee
\n//\nconst Color = function(rgb, a, originalForm) {\n const self = this;\n
//\n // The end goal here, is to parse the arguments\n // into an intege
r triplet, such as `128, 255, 0`\n //\n // This facilitates operations and
conversions.\n //\n if (Array.isArray(rgb)) {\n this.rgb = rgb;\n
} else if (rgb.length >= 6) {\n this.rgb = [];\n rgb.match(/.{2
}/g).map(function (c, i) {\n if (i < 3) {\n self.rgb.p
ush(parseInt(c, 16));\n } else {\n self.alpha = (parse
Int(c, 16)) / 255;\n }\n });\n } else {\n this.rgb =
[];\n rgb.split('').map(function (c, i) {\n if (i < 3) {\n
self.rgb.push(parseInt(c + c, 16));\n } else {\n
self.alpha = (parseInt(c + c, 16)) / 255;\n }\n });\n
}\n this.alpha = this.alpha || (typeof a === 'number' ? a : 1);\n if (t
ypeof originalForm !== 'undefined') {\n this.value = originalForm;\n }
\n}\n\nColor.prototype = Object.assign(new Node(), {\n type: 'Color',\n\n
luma() {\n let r = this.rgb[0] / 255, g = this.rgb[1] / 255, b = this.rgb
[2] / 255;\n\n r = (r <= 0.03928) ? r / 12.92 : Math.pow(((r + 0.055) / 1
.055), 2.4);\n g = (g <= 0.03928) ? g / 12.92 : Math.pow(((g + 0.055) / 1
.055), 2.4);\n b = (b <= 0.03928) ? b / 12.92 : Math.pow(((b + 0.055) / 1
.055), 2.4);\n\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n },\n\n
genCSS(context, output) {\n output.add(this.toCSS(context));\n },\
n\n toCSS(context, doNotCompress) {\n const compress = context && cont
ext.compress && !doNotCompress;\n let color;\n let alpha;\n
let colorFunction;\n let args = [];\n\n // `value` is set if this
color was originally\n // converted from a named color string so we need
\n // to respect this and try to output named color too.\n alpha =
this.fround(context, this.alpha);\n\n if (this.value) {\n if
(this.value.indexOf('rgb') === 0) {\n if (alpha < 1) {\n
colorFunction = 'rgba';\n }\n } else if (th
is.value.indexOf('hsl') === 0) {\n if (alpha < 1) {\n
colorFunction = 'hsla';\n } else {\n c
olorFunction = 'hsl';\n }\n } else {\n
return this.value;\n }\n } else {\n if (alpha < 1)
{\n colorFunction = 'rgba';\n }\n }\n\n
switch (colorFunction) {\n case 'rgba':\n args = this.
rgb.map(function (c) {\n return clamp(Math.round(c), 255);\n
}).concat(clamp(alpha, 1));\n break;\n
case 'hsla':\n args.push(clamp(alpha, 1));\n case 'hsl
':\n color = this.toHSL();\n args = [\n
this.fround(context, color.h),\n `${this.fround(cont
ext, color.s * 100)}%`,\n `${this.fround(context, color.l * 1
00)}%`\n ].concat(args);\n }\n\n if (colorFunction)
{\n // Values are capped between `0` and `255`, rounded and zero-pad
ded.\n return `${colorFunction}(${args.join(`,${compress ? '' : ' '}`
)})`;\n }\n\n color = this.toRGB();\n\n if (compress) {\n
const splitcolor = color.split('');\n\n // Convert color to
short format\n if (splitcolor[1] === splitcolor[2] && splitcolor[3]
=== splitcolor[4] && splitcolor[5] === splitcolor[6]) {\n color =
`#${splitcolor[1]}${splitcolor[3]}${splitcolor[5]}`;\n }\n }\
n\n return color;\n },\n\n //\n // Operations have to be done pe
r-channel, if not,\n // channels will spill onto each other. Once we have\n
// our result, in the form of an integer triplet,\n // we create a new Colo
r node to hold the result.\n //\n operate(context, op, other) {\n c
onst rgb = new Array(3);\n const alpha = this.alpha * (1 - other.alpha) +
other.alpha;\n for (let c = 0; c < 3; c++) {\n rgb[c] = this.
_operate(context, op, this.rgb[c], other.rgb[c]);\n }\n return new
Color(rgb, alpha);\n },\n\n toRGB() {\n return toHex(this.rgb);\n
},\n\n toHSL() {\n const r = this.rgb[0] / 255, g = this.rgb[1] / 2
55, b = this.rgb[2] / 255, a = this.alpha;\n\n const max = Math.max(r, g,
b), min = Math.min(r, g, b);\n let h;\n let s;\n const l =
(max + min) / 2;\n const d = max - min;\n\n if (max === min) {\n
h = s = 0;\n } else {\n s = l > 0.5 ? d / (2 - max
- min) : d / (max + min);\n\n switch (max) {\n case r:
h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r)
/ d + 2; break;\n case b: h = (r - g) / d + 4;
break;\n }\n h /= 6;\n }\n return
{ h: h * 360, s, l, a };\n },\n\n // Adapted from http://mjijackson.com/20
08/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\
n toHSV() {\n const r = this.rgb[0] / 255, g = this.rgb[1] / 255, b =
this.rgb[2] / 255, a = this.alpha;\n\n const max = Math.max(r, g, b), min
= Math.min(r, g, b);\n let h;\n let s;\n const v = max;\n\
n const d = max - min;\n if (max === 0) {\n s = 0;\n
} else {\n s = d / max;\n }\n\n if (max === min) {
\n h = 0;\n } else {\n switch (max) {\n
case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h
= (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\
n }\n h /= 6;\n }\n return { h: h * 360, s,
v, a };\n },\n\n toARGB() {\n return toHex([this.alpha * 255].conca
t(this.rgb));\n },\n\n compare(x) {\n return (x.rgb &&\n
x.rgb[0] === this.rgb[0] &&\n x.rgb[1] === this.rgb[1] &&\n
x.rgb[2] === this.rgb[2] &&\n x.alpha === this.alpha) ? 0 : undef
ined;\n }\n});\n\nColor.fromKeyword = function(keyword) {\n let c;\n co
nst key = keyword.toLowerCase();\n if (colors.hasOwnProperty(key)) {\n
c = new Color(colors[key].slice(1));\n }\n else if (key === 'transparent'
) {\n c = new Color([0, 0, 0], 0);\n }\n\n if (c) {\n c.valu
e = keyword;\n return c;\n }\n};\n\nfunction clamp(v, max) {\n retu
rn Math.min(Math.max(v, 0), max);\n}\n\nfunction toHex(v) {\n return `#${v.ma
p(function (c) {\n c = clamp(Math.round(c), 255);\n return (c < 16
? '0' : '') + c.toString(16);\n }).join('')}`;\n}\n\nexport default Color;\n
","import Node from './node';\n\nconst Paren = function(node) {\n this.value
= node;\n};\n\nParen.prototype = Object.assign(new Node(), {\n type: 'Paren',
\n\n genCSS(context, output) {\n output.add('(');\n this.value.
genCSS(context, output);\n output.add(')');\n },\n\n eval(context)
{\n return new Paren(this.value.eval(context));\n }\n});\n\nexport def
ault Paren;\n","import Node from './node';\nconst _noSpaceCombinators = {\n '
': true,\n ' ': true,\n '|': true\n};\n\nconst Combinator = function(value
) {\n if (value === ' ') {\n this.value = ' ';\n this.emptyOrWh
itespace = true;\n } else {\n this.value = value ? value.trim() : '';\
n this.emptyOrWhitespace = this.value === '';\n }\n}\n\nCombinator.pro
totype = Object.assign(new Node(), {\n type: 'Combinator',\n\n genCSS(cont
ext, output) {\n const spaceOrEmpty = (context.compress || _noSpaceCombin
ators[this.value]) ? '' : ' ';\n output.add(spaceOrEmpty + this.value + s
paceOrEmpty);\n }\n});\n\nexport default Combinator;\n","import Node from './
node';\nimport Paren from './paren';\nimport Combinator from './combinator';\n\n
const Element = function(combinator, value, isVariable, index, currentFileInfo,
visibilityInfo) {\n this.combinator = combinator instanceof Combinator ?\n
combinator : new Combinator(combinator);\n\n if (typeof value === 'strin
g') {\n this.value = value.trim();\n } else if (value) {\n this
.value = value;\n } else {\n this.value = '';\n }\n this.isVaria
ble = isVariable;\n this._index = index;\n this._fileInfo = currentFileInf
o;\n this.copyVisibilityInfo(visibilityInfo);\n this.setParent(this.combin
ator, this);\n}\n\nElement.prototype = Object.assign(new Node(), {\n type: 'E
lement',\n\n accept(visitor) {\n const value = this.value;\n th
is.combinator = visitor.visit(this.combinator);\n if (typeof value === 'o
bject') {\n this.value = visitor.visit(value);\n }\n },\n\n
eval(context) {\n return new Element(this.combinator,\n th
is.value.eval ? this.value.eval(context) : this.value,\n this.isVaria
ble,\n this.getIndex(),\n this.fileInfo(), this.visibility
Info());\n },\n\n clone() {\n return new Element(this.combinator,\n
this.value,\n this.isVariable,\n this.getIndex
(),\n this.fileInfo(), this.visibilityInfo());\n },\n\n genCSS(
context, output) {\n output.add(this.toCSS(context), this.fileInfo(), thi
s.getIndex());\n },\n\n toCSS(context) {\n context = context || {};
\n let value = this.value;\n const firstSelector = context.firstSe
lector;\n if (value instanceof Paren) {\n // selector in paren
s should not be affected by outer selector\n // flags (breaks only in
terpolated selectors - see #1973)\n context.firstSelector = true;\n
}\n value = value.toCSS ? value.toCSS(context) : value;\n co
ntext.firstSelector = firstSelector;\n if (value === '' && this.combinato
r.value.charAt(0) === '&') {\n return '';\n } else {\n
return this.combinator.toCSS(context) + value;\n }\n }\n});\n\nexp
ort default Element;\n","\nexport const Math = {\n ALWAYS: 0,\n PARENS_DIV
ISION: 1,\n PARENS: 2\n // removed - STRICT_LEGACY: 3\n};\n\nexport const
RewriteUrls = {\n OFF: 0,\n LOCAL: 1,\n ALL: 2\n};","/**\r\n * Returns
the object type of the given payload\r\n *\r\n * @param {*} payload\r\n * @retur
ns {string}\r\n */\r\nfunction getType(payload) {\r\n return Object.prototype
.toString.call(payload).slice(8, -1);\r\n}\r\n/**\r\n * Returns whether the payl
oad is undefined\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undef
ined}\r\n */\r\nfunction isUndefined(payload) {\r\n return getType(payload) =
== 'Undefined';\r\n}\r\n/**\r\n * Returns whether the payload is null\r\n *\r\n
* @param {*} payload\r\n * @returns {payload is null}\r\n */\r\nfunction isNull(
payload) {\r\n return getType(payload) === 'Null';\r\n}\r\n/**\r\n * Returns
whether the payload is a plain JavaScript object (excluding special classes or o
bjects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {pay
load is Record<string, any>}\r\n */\r\nfunction isPlainObject(payload) {\r\n
if (getType(payload) !== 'Object')\r\n return false;\r\n return payloa
d.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;
\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (exc
luding special classes or objects with other prototypes)\r\n *\r\n * @param {*}
payload\r\n * @returns {payload is Record<string, any>}\r\n */\r\nfunction isObj
ect(payload) {\r\n return isPlainObject(payload);\r\n}\r\n/**\r\n * Returns w
hether the payload is a an empty object (excluding special classes or objects wi
th other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {
[K in any]: never }}\r\n */\r\nfunction isEmptyObject(payload) {\r\n return
isPlainObject(payload) && Object.keys(payload).length === 0;\r\n}\r\n/**\r\n * R
eturns whether the payload is an any kind of object (including special classes o
r objects with different prototypes)\r\n *\r\n * @param {*} payload\r\n * @retur
ns {payload is Record<string, any>}\r\n */\r\nfunction isAnyObject(payload) {\r\
n return getType(payload) === 'Object';\r\n}\r\n/**\r\n * Returns whether the
payload is an object like a type passed in < >\r\n *\r\n * Usage: isObjectLike<
{id: any}>(payload) // will make sure it's an object and has an `id` prop.\r\n *
\r\n * @template T this must be passed in < >\r\n * @param {*} payload\r\n * @re
turns {payload is T}\r\n */\r\nfunction isObjectLike(payload) {\r\n return is
AnyObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a function
(regular or async)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Any
Function}\r\n */\r\nfunction isFunction(payload) {\r\n return typeof payload
=== \"function\";\r\n}\r\n/**\r\n * Returns whether the payload is an array\r\n
*\r\n * @param {any} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunctio
n isArray(payload) {\r\n return getType(payload) === 'Array';\r\n}\r\n/**\r\n
* Returns whether the payload is a an array with at least 1 item\r\n *\r\n * @p
aram {*} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunction isFullArra
y(payload) {\r\n return isArray(payload) && payload.length > 0;\r\n}\r\n/**\r
\n * Returns whether the payload is a an empty array\r\n *\r\n * @param {*} payl
oad\r\n * @returns {payload is []}\r\n */\r\nfunction isEmptyArray(payload) {\r\
n return isArray(payload) && payload.length === 0;\r\n}\r\n/**\r\n * Returns
whether the payload is a string\r\n *\r\n * @param {*} payload\r\n * @returns {p
ayload is string}\r\n */\r\nfunction isString(payload) {\r\n return getType(p
ayload) === 'String';\r\n}\r\n/**\r\n * Returns whether the payload is a string,
BUT returns false for ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload
is string}\r\n */\r\nfunction isFullString(payload) {\r\n return isString(pa
yload) && payload !== '';\r\n}\r\n/**\r\n * Returns whether the payload is ''\r\
n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfuncti
on isEmptyString(payload) {\r\n return payload === '';\r\n}\r\n/**\r\n * Retu
rns whether the payload is a number (but not NaN)\r\n *\r\n * This will return `
false` for `NaN`!!\r\n *\r\n * @param {*} payload\r\n * @returns {payload is num
ber}\r\n */\r\nfunction isNumber(payload) {\r\n return getType(payload) === '
Number' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a b
oolean\r\n *\r\n * @param {*} payload\r\n * @returns {payload is boolean}\r\n */
\r\nfunction isBoolean(payload) {\r\n return getType(payload) === 'Boolean';\
r\n}\r\n/**\r\n * Returns whether the payload is a regular expression (RegExp)\r
\n *\r\n * @param {*} payload\r\n * @returns {payload is RegExp}\r\n */\r\nfunct
ion isRegExp(payload) {\r\n return getType(payload) === 'RegExp';\r\n}\r\n/**
\r\n * Returns whether the payload is a Map\r\n *\r\n * @param {*} payload\r\n *
@returns {payload is Map<any, any>}\r\n */\r\nfunction isMap(payload) {\r\n
return getType(payload) === 'Map';\r\n}\r\n/**\r\n * Returns whether the payload
is a WeakMap\r\n *\r\n * @param {*} payload\r\n * @returns {payload is WeakMap<
any, any>}\r\n */\r\nfunction isWeakMap(payload) {\r\n return getType(payload
) === 'WeakMap';\r\n}\r\n/**\r\n * Returns whether the payload is a Set\r\n *\r\
n * @param {*} payload\r\n * @returns {payload is Set<any>}\r\n */\r\nfunction i
sSet(payload) {\r\n return getType(payload) === 'Set';\r\n}\r\n/**\r\n * Retu
rns whether the payload is a WeakSet\r\n *\r\n * @param {*} payload\r\n * @retur
ns {payload is WeakSet<any>}\r\n */\r\nfunction isWeakSet(payload) {\r\n retu
rn getType(payload) === 'WeakSet';\r\n}\r\n/**\r\n * Returns whether the payload
is a Symbol\r\n *\r\n * @param {*} payload\r\n * @returns {payload is symbol}\r
\n */\r\nfunction isSymbol(payload) {\r\n return getType(payload) === 'Symbol
';\r\n}\r\n/**\r\n * Returns whether the payload is a Date, and that the date is
valid\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Date}\r\n */\r\
nfunction isDate(payload) {\r\n return getType(payload) === 'Date' && !isNaN(
payload);\r\n}\r\n/**\r\n * Returns whether the payload is a Blob\r\n *\r\n * @p
aram {*} payload\r\n * @returns {payload is Blob}\r\n */\r\nfunction isBlob(payl
oad) {\r\n return getType(payload) === 'Blob';\r\n}\r\n/**\r\n * Returns whet
her the payload is a File\r\n *\r\n * @param {*} payload\r\n * @returns {payload
is File}\r\n */\r\nfunction isFile(payload) {\r\n return getType(payload) ==
= 'File';\r\n}\r\n/**\r\n * Returns whether the payload is a Promise\r\n *\r\n *
@param {*} payload\r\n * @returns {payload is Promise<any>}\r\n */\r\nfunction
isPromise(payload) {\r\n return getType(payload) === 'Promise';\r\n}\r\n/**\r
\n * Returns whether the payload is an Error\r\n *\r\n * @param {*} payload\r\n
* @returns {payload is Error}\r\n */\r\nfunction isError(payload) {\r\n retur
n getType(payload) === 'Error';\r\n}\r\n/**\r\n * Returns whether the payload is
literally the value `NaN` (it's `NaN` and also a `number`)\r\n *\r\n * @param {
*} payload\r\n * @returns {payload is typeof NaN}\r\n */\r\nfunction isNaNValue(
payload) {\r\n return getType(payload) === 'Number' && isNaN(payload);\r\n}\r
\n/**\r\n * Returns whether the payload is a primitive type (eg. Boolean | Null
| Undefined | Number | String | Symbol)\r\n *\r\n * @param {*} payload\r\n * @re
turns {(payload is boolean | null | undefined | number | string | symbol)}\r\n *
/\r\nfunction isPrimitive(payload) {\r\n return (isBoolean(payload) ||\r\n
isNull(payload) ||\r\n isUndefined(payload) ||\r\n isNumber(p
ayload) ||\r\n isString(payload) ||\r\n isSymbol(payload));\r\n}\r
\n/**\r\n * Returns true whether the payload is null or undefined\r\n *\r\n * @p
aram {*} payload\r\n * @returns {(payload is null | undefined)}\r\n */\r\nfuncti
on isNullOrUndefined(payload) {\r\n return isNull(payload) || isUndefined(pay
load);\r\n}\r\n/**\r\n * Does a generic check to check that the given payload is
of a given type.\r\n * In cases like Number, it will return true for NaN as NaN
is a Number (thanks javascript!);\r\n * It will, however, differentiate between
object and null\r\n *\r\n * @template T\r\n * @param {*} payload\r\n * @param {
T} type\r\n * @throws {TypeError} Will throw type error if type is an invalid ty
pe\r\n * @returns {payload is T}\r\n */\r\nfunction isType(payload, type) {\r\n
if (!(type instanceof Function)) {\r\n throw new TypeError('Type must
be a function');\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(type,
'prototype')) {\r\n throw new TypeError('Type is not a class');\r\n }
\r\n // Classes usually have names (as functions usually have names)\r\n v
ar name = type.name;\r\n return getType(payload) === name || Boolean(payload
&& payload.constructor === type);\r\n}\n\nexport { getType, isAnyObject, isArray
, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError
, isFile, isFullArray, isFullString, isFunction, isMap, isNaNValue, isNull, isNu
llOrUndefined, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isP
romise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isW
eakSet };\n","import { isArray, isPlainObject } from 'is-what';\n\n/*! *********
********************************************************************\r\nCopyrigh
t (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache L
icense, Version 2.0 (the \"License\"); you may not use\r\nthis file except in co
mpliance with the License. You may obtain a copy of the\r\nLicense at http://www
.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASI
S, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, I
NCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FI
TNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSe
e the Apache Version 2.0 License for specific language governing permissions\r\n
and limitations under the License.\r\n******************************************
*********************************** */\r\n\r\nfunction __spreadArrays() {\r\n
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].le
ngth;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (v
ar a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k]
= a[j];\r\n return r;\r\n}\n\nfunction assignProp(carry, key, newVal, origin
alObject, includeNonenumerable) {\r\n var propType = {}.propertyIsEnumerable.
call(originalObject, key)\r\n ? 'enumerable'\r\n : 'nonenumerable'
;\r\n if (propType === 'enumerable')\r\n carry[key] = newVal;\r\n i
f (includeNonenumerable && propType === 'nonenumerable') {\r\n Object.def
ineProperty(carry, key, {\r\n value: newVal,\r\n enumerabl
e: false,\r\n writable: true,\r\n configurable: true,\r\n
});\r\n }\r\n}\r\n/**\r\n * Copy (clone) an object and all its props r
ecursively to get rid of any prop referenced of the original object. Arrays are
also cloned, however objects inside arrays are still linked.\r\n *\r\n * @export
\r\n * @template T\r\n * @param {T} target Target can be anything\r\n * @param {
Options} [options={}] Options can be `props` or `nonenumerable`\r\n * @returns {
T} the target with replaced values\r\n * @export\r\n */\r\nfunction copy(target,
options) {\r\n if (options === void 0) { options = {}; }\r\n if (isArray(
target))\r\n return target.map(function (i) { return copy(i, options); })
;\r\n if (!isPlainObject(target))\r\n return target;\r\n var props
= Object.getOwnPropertyNames(target);\r\n var symbols = Object.getOwnProperty
Symbols(target);\r\n return __spreadArrays(props, symbols).reduce(function (c
arry, key) {\r\n if (isArray(options.props) && !options.props.includes(ke
y)) {\r\n return carry;\r\n }\r\n var val = target[key]
;\r\n var newVal = copy(val, options);\r\n assignProp(carry, key,
newVal, target, options.nonenumerable);\r\n return carry;\r\n }, {});\
r\n}\n\nexport { copy };\n","/* jshint proto: true */\nimport * as Constants fro
m './constants';\nimport { copy } from 'copy-anything';\n\nexport function getLo
cation(index, inputStream) {\n let n = index + 1;\n let line = null;\n
let column = -1;\n\n while (--n >= 0 && inputStream.charAt(n) !== '\\n') {\n
column++;\n }\n\n if (typeof index === 'number') {\n line =
(inputStream.slice(0, index).match(/\\n/g) || '').length;\n }\n\n return {
\n line,\n column\n };\n}\n\nexport function copyArray(arr) {\n
let i;\n const length = arr.length;\n const copy = new Array(length);\
n\n for (i = 0; i < length; i++) {\n copy[i] = arr[i];\n }\n ret
urn copy;\n}\n\nexport function clone(obj) {\n const cloned = {};\n for (c
onst prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n cloned
[prop] = obj[prop];\n }\n }\n return cloned;\n}\n\nexport function
defaults(obj1, obj2) {\n let newObj = obj2 || {};\n if (!obj2._defaults) {
\n newObj = {};\n const defaults = copy(obj1);\n newObj._de
faults = defaults;\n const cloned = obj2 ? copy(obj2) : {};\n Obje
ct.assign(newObj, defaults, cloned);\n }\n return newObj;\n}\n\nexport fun
ction copyOptions(obj1, obj2) {\n if (obj2 && obj2._defaults) {\n retu
rn obj2;\n }\n const opts = defaults(obj1, obj2);\n if (opts.strictMath
) {\n opts.math = Constants.Math.PARENS;\n }\n // Back compat with
changed relativeUrls option\n if (opts.relativeUrls) {\n opts.rewriteU
rls = Constants.RewriteUrls.ALL;\n }\n if (typeof opts.math === 'string')
{\n switch (opts.math.toLowerCase()) {\n case 'always':\n
opts.math = Constants.Math.ALWAYS;\n break;\n
case 'parens-division':\n opts.math = Constants.Math.PARENS_DI
VISION;\n break;\n case 'strict':\n case 'p
arens':\n opts.math = Constants.Math.PARENS;\n bre
ak;\n default:\n opts.math = Constants.Math.PARENS;\n
}\n }\n if (typeof opts.rewriteUrls === 'string') {\n switch
(opts.rewriteUrls.toLowerCase()) {\n case 'off':\n op
ts.rewriteUrls = Constants.RewriteUrls.OFF;\n break;\n
case 'local':\n opts.rewriteUrls = Constants.RewriteUrls.LOCAL;\
n break;\n case 'all':\n opts.rewriteUr
ls = Constants.RewriteUrls.ALL;\n break;\n }\n }\n r
eturn opts;\n}\n\nexport function merge(obj1, obj2) {\n for (const prop in ob
j2) {\n if (obj2.hasOwnProperty(prop)) {\n obj1[prop] = obj2[p
rop];\n }\n }\n return obj1;\n}\n\nexport function flattenArray(arr
, result = []) {\n for (let i = 0, length = arr.length; i < length; i++) {\n
const value = arr[i];\n if (Array.isArray(value)) {\n f
lattenArray(value, result);\n } else {\n if (value !== undefin
ed) {\n result.push(value);\n }\n }\n }\n
return result;\n}","import * as utils from './utils';\n\nconst anonymousFunc =
/(<anonymous>|Function):(\\d+):(\\d+)/;\n\n/**\n * This is a centralized class o
f any error that could be thrown internally (mostly by the parser).\n * Besides
standard .message it keeps some additional data like a path to the file where th
e error\n * occurred along with line and column numbers.\n *\n * @class\n * @ext
ends Error\n * @type {module.LessError}\n *\n * @prop {string} type\n * @prop {s
tring} filename\n * @prop {number} index\n * @prop {number} line\n * @prop {numb
er} column\n * @prop {number} callLine\n * @prop {number} callExtract\n * @prop
{string[]} extract\n *\n * @param {Object} e - An error object to w
rap around or just a descriptive object\n * @param {Object} fileContentMap - An
object with file contents in 'contents' property (like importManager) @todo - mo
ve to fileManager?\n * @param {string} [currentFilename]\n */\nconst LessError =
function(e, fileContentMap, currentFilename) {\n Error.call(this);\n\n co
nst filename = e.filename || currentFilename;\n\n this.message = e.message;\n
this.stack = e.stack;\n\n if (fileContentMap && filename) {\n cons
t input = fileContentMap.contents[filename];\n const loc = utils.getLocat
ion(e.index, input);\n var line = loc.line;\n const col = loc.col
umn;\n const callLine = e.call && utils.getLocation(e.call, input).line;\
n const lines = input ? input.split('\\n') : '';\n\n this.type = e
.type || 'Syntax';\n this.filename = filename;\n this.index = e.in
dex;\n this.line = typeof line === 'number' ? line + 1 : null;\n t
his.column = col;\n\n if (!this.line && this.stack) {\n const
found = this.stack.match(anonymousFunc);\n\n /**\n * We h
ave to figure out how this environment stringifies anonymous functions\n
* so we can correctly map plugin errors.\n * \n * N
ote, in Node 8, the output of anonymous funcs varied based on parameters\n
* being present or not, so we inject dummy params.\n */\n
const func = new Function('a', 'throw new Error()');\n let li
neAdjust = 0;\n try {\n func();\n } catch (
e) {\n const match = e.stack.match(anonymousFunc);\n
var line = parseInt(match[2]);\n lineAdjust = 1 - line;\n
}\n\n if (found) {\n if (found[2]) {\n
this.line = parseInt(found[2]) + lineAdjust;\n }\n
if (found[3]) {\n this.column = parseInt(found[3]
);\n }\n }\n }\n\n this.callLine = callL
ine + 1;\n this.callExtract = lines[callLine];\n\n this.extract =
[\n lines[this.line - 2],\n lines[this.line - 1],\n
lines[this.line]\n ];\n }\n\n};\n\nif (typeof Object.create === '
undefined') {\n const F = function () {};\n F.prototype = Error.prototype;
\n LessError.prototype = new F();\n} else {\n LessError.prototype = Object
.create(Error.prototype);\n}\n\nLessError.prototype.constructor = LessError;\n\n
/**\n * An overridden version of the default Object.prototype.toString\n * which
uses additional information to create a helpful message.\n *\n * @param {Object
} options\n * @returns {string}\n */\nLessError.prototype.toString = function(op
tions) {\n options = options || {};\n\n let message = '';\n const extra
ct = this.extract || [];\n let error = [];\n let stylize = function (str)
{ return str; };\n if (options.stylize) {\n const type = typeof option
s.stylize;\n if (type !== 'function') {\n throw Error(`options
.stylize should be a function, got a ${type}!`);\n }\n stylize = o
ptions.stylize;\n }\n\n if (this.line !== null) {\n if (typeof extr
act[0] === 'string') {\n error.push(stylize(`${this.line - 1} ${extra
ct[0]}`, 'grey'));\n }\n\n if (typeof extract[1] === 'string') {\n
let errorTxt = `${this.line} `;\n if (extract[1]) {\n
errorTxt += extract[1].slice(0, this.column) +\n
stylize(stylize(stylize(extract[1].substr(this.column, 1), 'bold') +\n
extract[1].slice(this.column + 1), 'red'), 'inverse');\n
}\n error.push(errorTxt);\n }\n\n if (typeof extract[
2] === 'string') {\n error.push(stylize(`${this.line + 1} ${extract[2
]}`, 'grey'));\n }\n error = `${error.join('\\n') + stylize('', 'r
eset')}\\n`;\n }\n\n message += stylize(`${this.type}Error: ${this.message
}`, 'red');\n if (this.filename) {\n message += stylize(' in ', 'red')
+ this.filename;\n }\n if (this.line) {\n message += stylize(` on
line ${this.line}, column ${this.column + 1}:`, 'grey');\n }\n\n message +
= `\\n${error}`;\n\n if (this.callLine) {\n message += `${stylize('fro
m ', 'red') + (this.filename || '')}/n`;\n message += `${stylize(this.cal
lLine, 'grey')} ${this.callExtract}/n`;\n }\n\n return message;\n};\n\nexp
ort default LessError;","import Node from './node';\nimport Element from './elem
ent';\nimport LessError from '../less-error';\n\nconst Selector = function(eleme
nts, extendList, condition, index, currentFileInfo, visibilityInfo) {\n this.
extendList = extendList;\n this.condition = condition;\n this.evaldConditi
on = !condition;\n this._index = index;\n this._fileInfo = currentFileInfo
;\n this.elements = this.getElements(elements);\n this.mixinElements_ = un
defined;\n this.copyVisibilityInfo(visibilityInfo);\n this.setParent(this.
elements, this);\n};\n\nSelector.prototype = Object.assign(new Node(), {\n ty
pe: 'Selector',\n\n accept(visitor) {\n if (this.elements) {\n
this.elements = visitor.visitArray(this.elements);\n }\n if (t
his.extendList) {\n this.extendList = visitor.visitArray(this.extendL
ist);\n }\n if (this.condition) {\n this.condition = vi
sitor.visit(this.condition);\n }\n },\n\n createDerived(elements, e
xtendList, evaldCondition) {\n elements = this.getElements(elements);\n
const newSelector = new Selector(elements, extendList || this.extendList,\
n null, this.getIndex(), this.fileInfo(), this.visibilityInfo());\n
newSelector.evaldCondition = (evaldCondition != null) ? evaldCondition : t
his.evaldCondition;\n newSelector.mediaEmpty = this.mediaEmpty;\n
return newSelector;\n },\n\n getElements(els) {\n if (!els) {\n
return [new Element('', '&', false, this._index, this._fileInfo)];\n
}\n if (typeof els === 'string') {\n this.parse.parseNode(
\n els, \n ['selector'],\n this._in
dex, \n this._fileInfo, \n function(err, result) {
\n if (err) {\n throw new LessError({\
n index: err.index,\n mess
age: err.message\n }, this.parse.imports, this._fileInfo.
filename);\n }\n els = result[0].elements;
\n });\n }\n return els;\n },\n\n createEmpty
Selectors() {\n const el = new Element('', '&', false, this._index, this.
_fileInfo), sels = [new Selector([el], null, null, this._index, this._fileInfo)]
;\n sels[0].mediaEmpty = true;\n return sels;\n },\n\n match
(other) {\n const elements = this.elements;\n const len = elements
.length;\n let olen;\n let i;\n\n other = other.mixinElemen
ts();\n olen = other.length;\n if (olen === 0 || len < olen) {\n
return 0;\n } else {\n for (i = 0; i < olen; i++) {\
n if (elements[i].value !== other[i]) {\n retu
rn 0;\n }\n }\n }\n\n return olen; // re
turn number of matched elements\n },\n\n mixinElements() {\n if (th
is.mixinElements_) {\n return this.mixinElements_;\n }\n\n
let elements = this.elements.map( function(v) {\n return v.combin
ator.value + (v.value.value || v.value);\n }).join('').match(/[,&#\\*\\.\
\w-]([\\w-]|(\\\\.))*/g);\n\n if (elements) {\n if (elements[0
] === '&') {\n elements.shift();\n }\n } else {
\n elements = [];\n }\n\n return (this.mixinElements_ =
elements);\n },\n\n isJustParentSelector() {\n return !this.mediaE
mpty &&\n this.elements.length === 1 &&\n this.elements[0]
.value === '&' &&\n (this.elements[0].combinator.value === ' ' || thi
s.elements[0].combinator.value === '');\n },\n\n eval(context) {\n
const evaldCondition = this.condition && this.condition.eval(context);\n
let elements = this.elements;\n let extendList = this.extendList;\n\n
elements = elements && elements.map(function (e) { return e.eval(context); }
);\n extendList = extendList && extendList.map(function(extend) { return
extend.eval(context); });\n\n return this.createDerived(elements, extendL
ist, evaldCondition);\n },\n\n genCSS(context, output) {\n let i, e
lement;\n if ((!context || !context.firstSelector) && this.elements[0].co
mbinator.value === '') {\n output.add(' ', this.fileInfo(), this.getI
ndex());\n }\n for (i = 0; i < this.elements.length; i++) {\n
element = this.elements[i];\n element.genCSS(context, output);
\n }\n },\n\n getIsOutput() {\n return this.evaldCondition;\
n }\n});\n\nexport default Selector;\n","import Node from './node';\n\nconst
Value = function(value) {\n if (!value) {\n throw new Error('Value req
uires an array argument');\n }\n if (!Array.isArray(value)) {\n thi
s.value = [ value ];\n }\n else {\n this.value = value;\n }\n};\
n\nValue.prototype = Object.assign(new Node(), {\n type: 'Value',\n\n acce
pt(visitor) {\n if (this.value) {\n this.value = visitor.visit
Array(this.value);\n }\n },\n\n eval(context) {\n if (this.v
alue.length === 1) {\n return this.value[0].eval(context);\n }
else {\n return new Value(this.value.map(function (v) {\n
return v.eval(context);\n }));\n }\n },\n\n genCSS(
context, output) {\n let i;\n for (i = 0; i < this.value.length; i
++) {\n this.value[i].genCSS(context, output);\n if (i + 1
< this.value.length) {\n output.add((context && context.compress
) ? ',' : ', ');\n }\n }\n }\n});\n\nexport default Value;\
n","import Node from './node';\n\nconst Keyword = function(value) {\n this.va
lue = value;\n};\n\nKeyword.prototype = Object.assign(new Node(), {\n type: '
Keyword',\n\n genCSS(context, output) {\n if (this.value === '%') { th
row { type: 'Syntax', message: 'Invalid % without number' }; }\n output.a
dd(this.value);\n }\n});\n\nKeyword.True = new Keyword('true');\nKeyword.Fals
e = new Keyword('false');\n\nexport default Keyword;\n","import Node from './nod
e';\n\nconst Anonymous = function(value, index, currentFileInfo, mapLines, rules
etLike, visibilityInfo) {\n this.value = value;\n this._index = index;\n
this._fileInfo = currentFileInfo;\n this.mapLines = mapLines;\n this.rul
esetLike = (typeof rulesetLike === 'undefined') ? false : rulesetLike;\n this
.allowRoot = true;\n this.copyVisibilityInfo(visibilityInfo);\n}\n\nAnonymous
.prototype = Object.assign(new Node(), {\n type: 'Anonymous',\n eval() {\n
return new Anonymous(this.value, this._index, this._fileInfo, this.mapLi
nes, this.rulesetLike, this.visibilityInfo());\n },\n compare(other) {\n
return other.toCSS && this.toCSS() === other.toCSS() ? 0 : undefined;\n
},\n isRulesetLike() {\n return this.rulesetLike;\n },\n genCSS
(context, output) {\n this.nodeVisible = Boolean(this.value);\n if
(this.nodeVisible) {\n output.add(this.value, this._fileInfo, this._
index, this.mapLines);\n }\n }\n})\n\nexport default Anonymous;\n","im
port Node from './node';\nimport Value from './value';\nimport Keyword from './k
eyword';\nimport Anonymous from './anonymous';\nimport * as Constants from '../c
onstants';\nconst MATH = Constants.Math;\n\nfunction evalName(context, name) {\n
let value = '';\n let i;\n const n = name.length;\n const output =
{add: function (s) {value += s;}};\n for (i = 0; i < n; i++) {\n name[
i].eval(context).genCSS(context, output);\n }\n return value;\n}\n\nconst
Declaration = function(name, value, important, merge, index, currentFileInfo, in
line, variable) {\n this.name = name;\n this.value = (value instanceof Nod
e) ? value : new Value([value ? new Anonymous(value) : null]);\n this.importa
nt = important ? ` ${important.trim()}` : '';\n this.merge = merge;\n this
._index = index;\n this._fileInfo = currentFileInfo;\n this.inline = inlin
e || false;\n this.variable = (variable !== undefined) ? variable\n :
(name.charAt && (name.charAt(0) === '@'));\n this.allowRoot = true;\n this
.setParent(this.value, this);\n};\n\nDeclaration.prototype = Object.assign(new N
ode(), {\n type: 'Declaration',\n\n genCSS(context, output) {\n out
put.add(this.name + (context.compress ? ':' : ': '), this.fileInfo(), this.getIn
dex());\n try {\n this.value.genCSS(context, output);\n
}\n catch (e) {\n e.index = this._index;\n e.filen
ame = this._fileInfo.filename;\n throw e;\n }\n output.
add(this.important + ((this.inline || (context.lastRule && context.compress)) ?
'' : ';'), this._fileInfo, this._index);\n },\n\n eval(context) {\n
let mathBypass = false, prevMath, name = this.name, evaldValue, variable = this
.variable;\n if (typeof name !== 'string') {\n // expand 'prim
itive' name directly to get\n // things faster (~10% for benchmark.le
ss):\n name = (name.length === 1) && (name[0] instanceof Keyword) ?\n
name[0].value : evalName(context, name);\n variable =
false; // never treat expanded interpolation as new variable name\n }\n\
n // @todo remove when parens-division is default\n if (name === '
font' && context.math === MATH.ALWAYS) {\n mathBypass = true;\n
prevMath = context.math;\n context.math = MATH.PARENS_DIVISION;
\n }\n try {\n context.importantScope.push({});\n
evaldValue = this.value.eval(context);\n\n if (!this.variable &
& evaldValue.type === 'DetachedRuleset') {\n throw { message: 'Ru
lesets cannot be evaluated on a property.',\n index: this.get
Index(), filename: this.fileInfo().filename };\n }\n let i
mportant = this.important;\n const importantResult = context.importan
tScope.pop();\n if (!important && importantResult.important) {\n
important = importantResult.important;\n }\n\n
return new Declaration(name,\n evaldValue,\n impor
tant,\n this.merge,\n this.getIndex(), this.fileIn
fo(), this.inline,\n variable);\n }\n catch (e) {\n
if (typeof e.index !== 'number') {\n e.index = this.g
etIndex();\n e.filename = this.fileInfo().filename;\n
}\n throw e;\n }\n finally {\n if (mathBypas
s) {\n context.math = prevMath;\n }\n }\n },
\n\n makeImportant() {\n return new Declaration(this.name,\n
this.value,\n '!important',\n this.merge,\n t
his.getIndex(), this.fileInfo(), this.inline);\n }\n});\n\nexport default Dec
laration;","class debugInfo {\n constructor(context, ctx, lineSeparator) {\n
let result = '';\n if (context.dumpLineNumbers && !context.compres
s) {\n switch (context.dumpLineNumbers) {\n case 'comm
ents':\n result = debugInfo.asComment(ctx);\n
break;\n case 'mediaquery':\n result = deb
ugInfo.asMediaQuery(ctx);\n break;\n case 'all
':\n result = debugInfo.asComment(ctx) + (lineSeparator || ''
) + debugInfo.asMediaQuery(ctx);\n break;\n }\n
}\n return result;\n }\n\n static asComment(ctx) {\n re
turn `/* line ${ctx.debugInfo.lineNumber}, ${ctx.debugInfo.fileName} */\\n`;\n
}\n\n static asMediaQuery(ctx) {\n let filenameWithProtocol = ctx.de
bugInfo.fileName;\n if (!/^[a-z]+:\\/\\//i.test(filenameWithProtocol)) {\
n filenameWithProtocol = `file://${filenameWithProtocol}`;\n }
\n return `@media -sass-debug-info{filename{font-family:${filenameWithPro
tocol.replace(/([.:\\/\\\\])/g, function (a) {\n if (a == '\\\\') {\n
a = '\\/';\n }\n return `\\\\${a}`;\n
})}}line{font-family:\\\\00003${ctx.debugInfo.lineNumber}}}\\n`;\n }\n}\n\
nexport default debugInfo;\n","import Node from './node';\nimport getDebugInfo f
rom './debug-info';\n\nconst Comment = function(value, isLineComment, index, cur
rentFileInfo) {\n this.value = value;\n this.isLineComment = isLineComment
;\n this._index = index;\n this._fileInfo = currentFileInfo;\n this.all
owRoot = true;\n}\n\nComment.prototype = Object.assign(new Node(), {\n type:
'Comment',\n\n genCSS(context, output) {\n if (this.debugInfo) {\n
output.add(getDebugInfo(context, this), this.fileInfo(), this.getIndex()
);\n }\n output.add(this.value);\n },\n\n isSilent(context)
{\n const isCompressed = context.compress && this.value[2] !== '!';\n
return this.isLineComment || isCompressed;\n }\n});\n\nexport default Com
ment;\n","const contexts = {};\nexport default contexts;\nimport * as Constants
from './constants';\n\nconst copyFromOriginal = function copyFromOriginal(origin
al, destination, propertiesToCopy) {\n if (!original) { return; }\n\n for
(let i = 0; i < propertiesToCopy.length; i++) {\n if (original.hasOwnProp
erty(propertiesToCopy[i])) {\n destination[propertiesToCopy[i]] = ori
ginal[propertiesToCopy[i]];\n }\n }\n};\n\n/*\n parse is used whilst p
arsing\n */\nconst parseCopyProperties = [\n // options\n 'paths',
// option - unmodified - paths to search for imports on\n 'rewriteUrls',
// option - whether to adjust URL's to be relative\n 'rootpath',
// option - rootpath to append to URL's\n 'strictImports', // option -\n
'insecure', // option - whether to allow imports from insecure ssl ho
sts\n 'dumpLineNumbers', // option - whether to dump line numbers\n 'comp
ress', // option - whether to compress\n 'syncImport', // optio
n - whether to import synchronously\n 'chunkInput', // option - whether
to chunk input. more performant but causes parse issues.\n 'mime',
// browser only - mime type for sheet import\n 'useFileCache', // brow
ser only - whether to use the per file session cache\n // context\n 'proce
ssImports', // option & context - whether to process imports. if false then im
ports will not be imported.\n // Used by the import manager to stop multiple
import visitors being created.\n 'pluginManager' // Used as the plugin ma
nager for the session\n];\n\ncontexts.Parse = function(options) {\n copyFromO
riginal(options, this, parseCopyProperties);\n\n if (typeof this.paths === 's
tring') { this.paths = [this.paths]; }\n};\n\nconst evalCopyProperties = [\n
'paths', // additional include paths\n 'compress', // wh
ether to compress\n 'math', // whether math has to be within par
enthesis\n 'strictUnits', // whether units need to evaluate correctly\n
'sourceMap', // whether to output a source map\n 'importMultiple'
, // whether we are currently importing multiple copies\n 'urlArgs',
// whether to add args into url tokens\n 'javascriptEnabled', // option
- whether Inline JavaScript is enabled. if undefined, defaults to false\n 'pl
uginManager', // Used as the plugin manager for the session\n 'importantS
cope', // used to bubble up !important statements\n 'rewriteUrls' /
/ option - whether to adjust URL's to be relative\n];\n\ncontexts.Eval = functio
n(options, frames) {\n copyFromOriginal(options, this, evalCopyProperties);\n
\n if (typeof this.paths === 'string') { this.paths = [this.paths]; }\n\n
this.frames = frames || [];\n this.importantScope = this.importantScope || []
;\n};\n\ncontexts.Eval.prototype.enterCalc = function () {\n if (!this.calcSt
ack) {\n this.calcStack = [];\n }\n this.calcStack.push(true);\n
this.inCalc = true;\n};\n\ncontexts.Eval.prototype.exitCalc = function () {\n
this.calcStack.pop();\n if (!this.calcStack.length) {\n this.inCalc
= false;\n }\n};\n\ncontexts.Eval.prototype.inParenthesis = function () {\n
if (!this.parensStack) {\n this.parensStack = [];\n }\n this.pare
nsStack.push(true);\n};\n\ncontexts.Eval.prototype.outOfParenthesis = function (
) {\n this.parensStack.pop();\n};\n\ncontexts.Eval.prototype.inCalc = false;\
ncontexts.Eval.prototype.mathOn = true;\ncontexts.Eval.prototype.isMathOn = func
tion (op) {\n if (!this.mathOn) {\n return false;\n }\n if (op =
== '/' && this.math !== Constants.Math.ALWAYS && (!this.parensStack || !this.par
ensStack.length)) {\n return false;\n }\n if (this.math > Constants
.Math.PARENS_DIVISION) {\n return this.parensStack && this.parensStack.le
ngth;\n }\n return true;\n};\n\ncontexts.Eval.prototype.pathRequiresRewrit
e = function (path) {\n const isRelative = this.rewriteUrls === Constants.Rew
riteUrls.LOCAL ? isPathLocalRelative : isPathRelative;\n\n return isRelative(
path);\n};\n\ncontexts.Eval.prototype.rewritePath = function (path, rootpath) {\
n let newPath;\n\n rootpath = rootpath ||Â '';\n newPath = this.normaliz
ePath(rootpath + path);\n\n // If a path was explicit relative and the rootpa
th was not an absolute path\n // we must ensure that the new path is also exp
licit relative.\n if (isPathLocalRelative(path) &&\n isPathRelative(ro
otpath) &&\n isPathLocalRelative(newPath) === false) {\n newPath =
`./${newPath}`;\n }\n\n return newPath;\n};\n\ncontexts.Eval.prototype.no
rmalizePath = function (path) {\n const segments = path.split('/').reverse();
\n let segment;\n\n path = [];\n while (segments.length !== 0) {\n
segment = segments.pop();\n switch ( segment ) {\n case '.'
:\n break;\n case '..':\n if ((path.len
gth === 0) || (path[path.length - 1] === '..')) {\n path.push
( segment );\n } else {\n path.pop();\n
}\n break;\n default:\n path.p
ush(segment);\n break;\n }\n }\n\n return path.join(
'/');\n};\n\nfunction isPathRelative(path) {\n return !/^(?:[a-z-]+:|\\/|#)/i
.test(path);\n}\n\nfunction isPathLocalRelative(path) {\n return path.charAt(
0) === '.';\n}\n\n// todo - do the same for the toCSS ?\n","function makeRegistr
y( base ) {\n return {\n _data: {},\n add: function(name, func)
{\n // precautionary case conversion, as later querying of\n
// the registry by function-caller uses lower case as well.\n nam
e = name.toLowerCase();\n\n if (this._data.hasOwnProperty(name)) {\n
// TODO warn\n }\n this._data[name] = func;
\n },\n addMultiple: function(functions) {\n Object.key
s(functions).forEach(\n name => {\n this.add(n
ame, functions[name]);\n });\n },\n get: function(n
ame) {\n return this._data[name] || ( base && base.get( name ));\n
},\n getLocalFunctions: function() {\n return this._data;
\n },\n inherit: function() {\n return makeRegistry( th
is );\n },\n create: function(base) {\n return makeRegi
stry(base);\n }\n };\n}\n\nexport default makeRegistry( null );","impo
rt Keyword from '../tree/keyword';\n\nconst defaultFunc = {\n eval: function
() {\n const v = this.value_;\n const e = this.error_;\n if
(e) {\n throw e;\n }\n if (v != null) {\n r
eturn v ? Keyword.True : Keyword.False;\n }\n },\n value: function
(v) {\n this.value_ = v;\n },\n error: function (e) {\n this
.error_ = e;\n },\n reset: function () {\n this.value_ = this.error
_ = null;\n }\n};\n\nexport default defaultFunc;\n","import Node from './node
';\nimport Declaration from './declaration';\nimport Keyword from './keyword';\n
import Comment from './comment';\nimport Paren from './paren';\nimport Selector
from './selector';\nimport Element from './element';\nimport Anonymous from './a
nonymous';\nimport contexts from '../contexts';\nimport globalFunctionRegistry f
rom '../functions/function-registry';\nimport defaultFunc from '../functions/def
ault';\nimport getDebugInfo from './debug-info';\nimport * as utils from '../uti
ls';\n\nconst Ruleset = function(selectors, rules, strictImports, visibilityInfo
) {\n this.selectors = selectors;\n this.rules = rules;\n this._lookups
= {};\n this._variables = null;\n this._properties = null;\n this.stri
ctImports = strictImports;\n this.copyVisibilityInfo(visibilityInfo);\n th
is.allowRoot = true;\n\n this.setParent(this.selectors, this);\n this.setP
arent(this.rules, this);\n}\n\nRuleset.prototype = Object.assign(new Node(), {\n
type: 'Ruleset',\n isRuleset: true,\n\n isRulesetLike() { return true;
},\n\n accept(visitor) {\n if (this.paths) {\n this.paths
= visitor.visitArray(this.paths, true);\n } else if (this.selectors) {\n
this.selectors = visitor.visitArray(this.selectors);\n }\n
if (this.rules && this.rules.length) {\n this.rules = visitor.vis
itArray(this.rules);\n }\n },\n\n eval(context) {\n const th
at = this;\n let selectors;\n let selCnt;\n let selector;\n
let i;\n let hasVariable;\n let hasOnePassingSelector = fa
lse;\n\n if (this.selectors && (selCnt = this.selectors.length)) {\n
selectors = new Array(selCnt);\n defaultFunc.error({\n
type: 'Syntax',\n message: 'it is currently only allowed
in parametric mixin guards,'\n });\n\n for (i = 0; i < sel
Cnt; i++) {\n selector = this.selectors[i].eval(context);\n
for (var j = 0; j < selector.elements.length; j++) {\n
if (selector.elements[j].isVariable) {\n hasVariable
= true;\n break;\n }\n
}\n selectors[i] = selector;\n if (selector.evaldC
ondition) {\n hasOnePassingSelector = true;\n
}\n }\n\n if (hasVariable) {\n const toPars
eSelectors = new Array(selCnt);\n for (i = 0; i < selCnt; i++) {\
n selector = selectors[i];\n toParseSelect
ors[i] = selector.toCSS(context);\n }\n this.parse
.parseNode(\n toParseSelectors.join(','),\n
[\"selectors\"], \n selectors[0].getIndex(), \n
selectors[0].fileInfo(), \n function(err, result) {\n
if (result) {\n selectors = u
tils.flattenArray(result);\n }\n });\n
}\n\n defaultFunc.reset();\n } else {\n
hasOnePassingSelector = true;\n }\n\n let rules = this.rules ? ut
ils.copyArray(this.rules) : null;\n const ruleset = new Ruleset(selectors
, rules, this.strictImports, this.visibilityInfo());\n let rule;\n
let subRule;\n\n ruleset.originalRuleset = this;\n ruleset.root =
this.root;\n ruleset.firstRoot = this.firstRoot;\n ruleset.allowI
mports = this.allowImports;\n\n if (this.debugInfo) {\n rulese
t.debugInfo = this.debugInfo;\n }\n\n if (!hasOnePassingSelector)
{\n rules.length = 0;\n }\n\n // inherit a function reg
istry from the frames stack when possible;\n // otherwise from the global
registry\n ruleset.functionRegistry = (function (frames) {\n
let i = 0;\n const n = frames.length;\n let found;\n
for ( ; i !== n ; ++i ) {\n found = frames[ i ].functionReg
istry;\n if ( found ) { return found; }\n }\n
return globalFunctionRegistry;\n }(context.frames)).inherit();\n\n
// push the current ruleset to the frames stack\n const ctxFrames = c
ontext.frames;\n ctxFrames.unshift(ruleset);\n\n // currrent selec
tors\n let ctxSelectors = context.selectors;\n if (!ctxSelectors)
{\n context.selectors = ctxSelectors = [];\n }\n ctxSel
ectors.unshift(this.selectors);\n\n // Evaluate imports\n if (rule
set.root || ruleset.allowImports || !ruleset.strictImports) {\n rules
et.evalImports(context);\n }\n\n // Store the frames around mixin
definitions,\n // so they can be evaluated like closures when the time co
mes.\n const rsRules = ruleset.rules;\n for (i = 0; (rule = rsRule
s[i]); i++) {\n if (rule.evalFirst) {\n rsRules[i] = r
ule.eval(context);\n }\n }\n\n const mediaBlockCount =
(context.mediaBlocks && context.mediaBlocks.length) || 0;\n\n // Evaluate
mixin calls.\n for (i = 0; (rule = rsRules[i]); i++) {\n if (
rule.type === 'MixinCall') {\n /* jshint loopfunc:true */\n
rules = rule.eval(context).filter(function(r) {\n i
f ((r instanceof Declaration) && r.variable) {\n // do no
t pollute the scope if the variable is\n // already there
. consider returning false here\n // but we need a way to
\"return\" variable from mixins\n return !(ruleset.varia
ble(r.name));\n }\n return true;\n
});\n rsRules.splice.apply(rsRules, [i, 1].concat(rules))
;\n i += rules.length - 1;\n ruleset.resetCache();
\n } else if (rule.type === 'VariableCall') {\n /* js
hint loopfunc:true */\n rules = rule.eval(context).rules.filter(f
unction(r) {\n if ((r instanceof Declaration) && r.variable)
{\n // do not pollute the scope at all\n
return false;\n }\n return true;\n
});\n rsRules.splice.apply(rsRules, [i, 1].concat(
rules));\n i += rules.length - 1;\n ruleset.resetC
ache();\n }\n }\n\n // Evaluate everything else\n
for (i = 0; (rule = rsRules[i]); i++) {\n if (!rule.evalFirst) {\n
rsRules[i] = rule = rule.eval ? rule.eval(context) : rule;\n
}\n }\n\n // Evaluate everything else\n for (i = 0;
(rule = rsRules[i]); i++) {\n // for rulesets, check if it is a css g
uard and can be removed\n if (rule instanceof Ruleset && rule.selecto
rs && rule.selectors.length === 1) {\n // check if it can be fold
ed in (e.g. & where)\n if (rule.selectors[0] && rule.selectors[0]
.isJustParentSelector()) {\n rsRules.splice(i--, 1);\n\n
for (var j = 0; (subRule = rule.rules[j]); j++) {\n
if (subRule instanceof Node) {\n subRule.co
pyVisibilityInfo(rule.visibilityInfo());\n if (!(subR
ule instanceof Declaration) || !subRule.variable) {\n
rsRules.splice(++i, 0, subRule);\n }\n
}\n }\n }\n }\n
}\n\n // Pop the stack\n ctxFrames.shift();\n ctxSelector
s.shift();\n\n if (context.mediaBlocks) {\n for (i = mediaBloc
kCount; i < context.mediaBlocks.length; i++) {\n context.mediaBlo
cks[i].bubbleSelectors(selectors);\n }\n }\n\n return r
uleset;\n },\n\n evalImports(context) {\n const rules = this.rules;
\n let i;\n let importRules;\n if (!rules) { return; }\n\n
for (i = 0; i < rules.length; i++) {\n if (rules[i].type === '
Import') {\n importRules = rules[i].eval(context);\n
if (importRules && (importRules.length || importRules.length === 0)) {\n
rules.splice.apply(rules, [i, 1].concat(importRules));\n
i += importRules.length - 1;\n } else {\n
rules.splice(i, 1, importRules);\n }\n this
.resetCache();\n }\n }\n },\n\n makeImportant() {\n
const result = new Ruleset(this.selectors, this.rules.map(function (r) {\n
if (r.makeImportant) {\n return r.makeImportant();\n
} else {\n return r;\n }\n }), this.str
ictImports, this.visibilityInfo());\n\n return result;\n },\n\n mat
chArgs(args) {\n return !args || args.length === 0;\n },\n\n // let
s you call a css selector with a guard\n matchCondition(args, context) {\n
const lastSelector = this.selectors[this.selectors.length - 1];\n if
(!lastSelector.evaldCondition) {\n return false;\n }\n
if (lastSelector.condition &&\n !lastSelector.condition.eval(\n
new contexts.Eval(context,\n context.frames))) {\n
return false;\n }\n return true;\n },\n\n resetC
ache() {\n this._rulesets = null;\n this._variables = null;\n
this._properties = null;\n this._lookups = {};\n },\n\n variable
s() {\n if (!this._variables) {\n this._variables = !this.rule
s ? {} : this.rules.reduce(function (hash, r) {\n if (r instanceo
f Declaration && r.variable === true) {\n hash[r.name] = r;\n
}\n // when evaluating variables in an import sta
tement, imports have not been eval'd\n // so we need to go inside
import statements.\n // guard against root being a string (in th
e case of inlined less)\n if (r.type === 'Import' && r.root && r.
root.variables) {\n const vars = r.root.variables();\n
for (const name in vars) {\n if (vars.hasOwn
Property(name)) {\n hash[name] = r.root.variable(name
);\n }\n }\n }\n
return hash;\n }, {});\n }\n return this._vari
ables;\n },\n\n properties() {\n if (!this._properties) {\n
this._properties = !this.rules ? {} : this.rules.reduce(function (hash, r) {
\n if (r instanceof Declaration && r.variable !== true) {\n
const name = (r.name.length === 1) && (r.name[0] instanceof Keywor
d) ?\n r.name[0].value : r.name;\n //
Properties don't overwrite as they can merge\n if (!hash[`$${
name}`]) {\n hash[`$${name}`] = [ r ];\n
}\n else {\n hash[`$${name}`].push(
r);\n }\n }\n return hash;\n
}, {});\n }\n return this._properties;\n },\n\n var
iable(name) {\n const decl = this.variables()[name];\n if (decl) {
\n return this.parseValue(decl);\n }\n },\n\n property(n
ame) {\n const decl = this.properties()[name];\n if (decl) {\n
return this.parseValue(decl);\n }\n },\n\n lastDeclaration(
) {\n for (let i = this.rules.length; i > 0; i--) {\n const de
cl = this.rules[i - 1];\n if (decl instanceof Declaration) {\n
return this.parseValue(decl);\n }\n }\n },\n\n
parseValue(toParse) {\n const self = this;\n function transformDec
laration(decl) {\n if (decl.value instanceof Anonymous && !decl.parse
d) {\n if (typeof decl.value.value === 'string') {\n
this.parse.parseNode(\n decl.value.value,\n
['value', 'important'], \n decl.value.ge
tIndex(), \n decl.fileInfo(), \n f
unction(err, result) {\n if (err) {\n
decl.parsed = true;\n }\n
if (result) {\n decl.value = resu
lt[0];\n decl.important = result[1] || '';\n
decl.parsed = true;\n }\n
});\n } else {\n decl.p
arsed = true;\n }\n\n return decl;\n }\
n else {\n return decl;\n }\n }\n
if (!Array.isArray(toParse)) {\n return transformDeclaration.cal
l(self, toParse);\n }\n else {\n const nodes = [];\n
toParse.forEach(function(n) {\n nodes.push(transformDecl
aration.call(self, n));\n });\n return nodes;\n }\n
},\n\n rulesets() {\n if (!this.rules) { return []; }\n\n c
onst filtRules = [];\n const rules = this.rules;\n let i;\n
let rule;\n\n for (i = 0; (rule = rules[i]); i++) {\n if (rul
e.isRuleset) {\n filtRules.push(rule);\n }\n }\
n\n return filtRules;\n },\n\n prependRule(rule) {\n const r
ules = this.rules;\n if (rules) {\n rules.unshift(rule);\n
} else {\n this.rules = [ rule ];\n }\n this.setPar
ent(rule, this);\n },\n\n find(selector, self, filter) {\n self = s
elf || this;\n const rules = [];\n let match;\n let foundMi
xins;\n const key = selector.toCSS();\n\n if (key in this._lookups
) { return this._lookups[key]; }\n\n this.rulesets().forEach(function (ru
le) {\n if (rule !== self) {\n for (let j = 0; j < rul
e.selectors.length; j++) {\n match = selector.match(rule.sele
ctors[j]);\n if (match) {\n if (select
or.elements.length > match) {\n if (!filter || filter
(rule)) {\n foundMixins = rule.find(new Selector(
selector.elements.slice(match)), self, filter);\n
for (let i = 0; i < foundMixins.length; ++i) {\n
foundMixins[i].path.push(rule);\n }\n
Array.prototype.push.apply(rules, foundMixins);\n
}\n } else {\n
rules.push({ rule, path: []});\n }\n
break;\n }\n }\n }\n
});\n this._lookups[key] = rules;\n return rules;\n },\n\n
genCSS(context, output) {\n let i;\n let j;\n const chars
etRuleNodes = [];\n let ruleNodes = [];\n\n let // Line number deb
ugging\n debugInfo;\n\n let rule;\n let path;\n\n
context.tabLevel = (context.tabLevel || 0);\n\n if (!this.root) {\n
context.tabLevel++;\n }\n\n const tabRuleStr = context.com
press ? '' : Array(context.tabLevel + 1).join(' ');\n const tabSetStr =
context.compress ? '' : Array(context.tabLevel).join(' ');\n let sep;\n\
n let charsetNodeIndex = 0;\n let importNodeIndex = 0;\n fo
r (i = 0; (rule = this.rules[i]); i++) {\n if (rule instanceof Commen
t) {\n if (importNodeIndex === i) {\n importNo
deIndex++;\n }\n ruleNodes.push(rule);\n
} else if (rule.isCharset && rule.isCharset()) {\n ruleNodes.sp
lice(charsetNodeIndex, 0, rule);\n charsetNodeIndex++;\n
importNodeIndex++;\n } else if (rule.type === 'Import') {\n
ruleNodes.splice(importNodeIndex, 0, rule);\n import
NodeIndex++;\n } else {\n ruleNodes.push(rule);\n
}\n }\n ruleNodes = charsetRuleNodes.concat(ruleNodes);\n\n
// If this is the root node, we don't render\n // a selector, or
{}.\n if (!this.root) {\n debugInfo = getDebugInfo(context, th
is, tabSetStr);\n\n if (debugInfo) {\n output.add(debu
gInfo);\n output.add(tabSetStr);\n }\n\n co
nst paths = this.paths;\n const pathCnt = paths.length;\n
let pathSubCnt;\n\n sep = context.compress ? ',' : (`,\\n${tabSetStr}
`);\n\n for (i = 0; i < pathCnt; i++) {\n path = paths
[i];\n if (!(pathSubCnt = path.length)) { continue; }\n
if (i > 0) { output.add(sep); }\n\n context.firstSelector =
true;\n path[0].genCSS(context, output);\n\n cont
ext.firstSelector = false;\n for (j = 1; j < pathSubCnt; j++) {\n
path[j].genCSS(context, output);\n }\n
}\n\n output.add((context.compress ? '{' : ' {\\n') + tabRuleStr
);\n }\n\n // Compile rules and rulesets\n for (i = 0; (rul
e = ruleNodes[i]); i++) {\n\n if (i + 1 === ruleNodes.length) {\n
context.lastRule = true;\n }\n\n const current
LastRule = context.lastRule;\n if (rule.isRulesetLike(rule)) {\n
context.lastRule = false;\n }\n\n if (rule.genC
SS) {\n rule.genCSS(context, output);\n } else if (rul
e.value) {\n output.add(rule.value.toString());\n }\n\
n context.lastRule = currentLastRule;\n\n if (!context.las
tRule && rule.isVisible()) {\n output.add(context.compress ? '' :
(`\\n${tabRuleStr}`));\n } else {\n context.lastRule
= false;\n }\n }\n\n if (!this.root) {\n out
put.add((context.compress ? '}' : `\\n${tabSetStr}}`));\n context.tab
Level--;\n }\n\n if (!output.isEmpty() && !context.compress && thi
s.firstRoot) {\n output.add('\\n');\n }\n },\n\n joinSel
ectors(paths, context, selectors) {\n for (let s = 0; s < selectors.lengt
h; s++) {\n this.joinSelector(paths, context, selectors[s]);\n
}\n },\n\n joinSelector(paths, context, selector) {\n\n function c
reateParenthesis(elementsToPak, originalElement) {\n let replacementP
aren, j;\n if (elementsToPak.length === 0) {\n replace
mentParen = new Paren(elementsToPak[0]);\n } else {\n
const insideParent = new Array(elementsToPak.length);\n for (j =
0; j < elementsToPak.length; j++) {\n insideParent[j] = new E
lement(\n null,\n elementsToPak[j]
,\n originalElement.isVariable,\n
originalElement._index,\n originalElement._fileInfo\n
);\n }\n replacementParen = new Pa
ren(new Selector(insideParent));\n }\n return replacementP
aren;\n }\n\n function createSelector(containedElement, originalEl
ement) {\n let element, selector;\n element = new Element(
null, containedElement, originalElement.isVariable, originalElement._index, orig
inalElement._fileInfo);\n selector = new Selector([element]);\n
return selector;\n }\n\n // joins selector path from `beginn
ingPath` with selector path in `addPath`\n // `replacedElement` contains
element that is being replaced by `addPath`\n // returns concatenated pat
h\n function addReplacementIntoPath(beginningPath, addPath, replacedEleme
nt, originalSelector) {\n let newSelectorPath, lastSelector, newJoine
dSelector;\n // our new selector path\n newSelectorPath =
[];\n\n // construct the joined selector - if & is the first thing th
is will be empty,\n // if not newJoinedSelector will be the last set
of elements in the selector\n if (beginningPath.length > 0) {\n
newSelectorPath = utils.copyArray(beginningPath);\n las
tSelector = newSelectorPath.pop();\n newJoinedSelector = original
Selector.createDerived(utils.copyArray(lastSelector.elements));\n }\n
else {\n newJoinedSelector = originalSelector.createD
erived([]);\n }\n\n if (addPath.length > 0) {\n
// /deep/ is a CSS4 selector - (removed, so should deprecate)\n
// that is valid without anything in front of it\n // so if t
he & does not have a combinator that is \"\" or \" \" then\n // a
nd there is a combinator on the parent, then grab that.\n // this
also allows + a { & .b { .a & { ... though not sure why you would want to do th
at\n let combinator = replacedElement.combinator;\n\n
const parentEl = addPath[0].elements[0];\n if (combinator.emp
tyOrWhitespace && !parentEl.combinator.emptyOrWhitespace) {\n
combinator = parentEl.combinator;\n }\n // join t
he elements so far with the first part of the parent\n newJoinedS
elector.elements.push(new Element(\n combinator,\n
parentEl.value,\n replacedElement.isVariable,\n
replacedElement._index,\n replacedElement._fil
eInfo\n ));\n newJoinedSelector.elements = newJoin
edSelector.elements.concat(addPath[0].elements.slice(1));\n }\n\n
// now add the joined selector - but only if it is not empty\n
if (newJoinedSelector.elements.length !== 0) {\n newSelectorPat
h.push(newJoinedSelector);\n }\n\n // put together the par
ent selectors after the join (e.g. the rest of the parent)\n if (addP
ath.length > 1) {\n let restOfPath = addPath.slice(1);\n
restOfPath = restOfPath.map(function (selector) {\n re
turn selector.createDerived(selector.elements, []);\n });\n
newSelectorPath = newSelectorPath.concat(restOfPath);\n }\n
return newSelectorPath;\n }\n\n // joins selector path
from `beginningPath` with every selector path in `addPaths` array\n // `
replacedElement` contains element that is being replaced by `addPath`\n /
/ returns array with all concatenated paths\n function addAllReplacements
IntoPath( beginningPath, addPaths, replacedElement, originalSelector, result) {\
n let j;\n for (j = 0; j < beginningPath.length; j++) {\n
const newSelectorPath = addReplacementIntoPath(beginningPath[j],
addPaths, replacedElement, originalSelector);\n result.push(newSe
lectorPath);\n }\n return result;\n }\n\n fu
nction mergeElementsOnToSelectors(elements, selectors) {\n let i, sel
;\n\n if (elements.length === 0) {\n return ;\n
}\n if (selectors.length === 0) {\n selectors.pus
h([ new Selector(elements) ]);\n return;\n }\n\n
for (i = 0; (sel = selectors[i]); i++) {\n // if the previo
us thing in sel is a parent this needs to join on to it\n if (sel
.length > 0) {\n sel[sel.length - 1] = sel[sel.length - 1].cr
eateDerived(sel[sel.length - 1].elements.concat(elements));\n }\n
else {\n sel.push(new Selector(elements));\n
}\n }\n }\n\n // replace all parent sele
ctors inside `inSelector` by content of `context` array\n // resulting se
lectors are returned inside `paths` array\n // returns true if `inSelecto
r` contained at least one parent selector\n function replaceParentSelecto
r(paths, context, inSelector) {\n // The paths are [[Selector]]\n
// The first list is a list of comma separated selectors\n //
The inner list is a list of inheritance separated selectors\n // e.g
.\n // .a, .b {\n // .c {\n // }\n
// }\n // == [[.a] [.c]] [[.b] [.c]]\n //\n
let i, j, k, currentElements, newSelectors, selectorsMultiplied, sel, el, hadPar
entSelector = false, length, lastSelector;\n function findNestedSelec
tor(element) {\n let maybeSelector;\n if (!(elemen
t.value instanceof Paren)) {\n return null;\n
}\n\n maybeSelector = element.value.value;\n if (!
(maybeSelector instanceof Selector)) {\n return null;\n
}\n\n return maybeSelector;\n }\n\n
// the elements from the current selector so far\n currentElements
= [];\n // the current list of new selectors to add to the path.\n
// We will build it up. We initiate it with one empty selector as we \
"multiply\" the new selectors\n // by the parents\n newSel
ectors = [\n []\n ];\n\n for (i = 0; (el =
inSelector.elements[i]); i++) {\n // non parent reference element
s just get added\n if (el.value !== '&') {\n c
onst nestedSelector = findNestedSelector(el);\n if (nestedSel
ector != null) {\n // merge the current list of non paren
t selector elements\n // on to the current list of select
ors to add\n mergeElementsOnToSelectors(currentElements,
newSelectors);\n\n const nestedPaths = [];\n
let replaced;\n const replacedNewSelectors = [
];\n replaced = replaceParentSelector(nestedPaths, contex
t, nestedSelector);\n hadParentSelector = hadParentSelect
or || replaced;\n // the nestedPaths array should have on
ly one member - replaceParentSelector does not multiply selectors\n
for (k = 0; k < nestedPaths.length; k++) {\n
const replacementSelector = createSelector(createParenthesis(nestedPaths[k],
el), el);\n addAllReplacementsIntoPath(newSelectors,
[replacementSelector], el, inSelector, replacedNewSelectors);\n
}\n newSelectors = replacedNewSelectors;\n
currentElements = [];\n } else {\n
currentElements.push(el);\n }\n\n
} else {\n hadParentSelector = true;\n //
the new list of selectors to add\n selectorsMultiplied = [];
\n\n // merge the current list of non parent selector element
s\n // on to the current list of selectors to add\n
mergeElementsOnToSelectors(currentElements, newSelectors);\n\n
// loop through our current selectors\n for (j =
0; j < newSelectors.length; j++) {\n sel = newSelectors[j
];\n // if we don't have any parent paths, the & might be
in a mixin so that it can be used\n // whether there are
parents or not\n if (context.length === 0) {\n
// the combinator used on el should now be applied to the next
element instead so that\n // it is not lost\n
if (sel.length > 0) {\n sel[
0].elements.push(new Element(el.combinator, '', el.isVariable, el._index, el._fi
leInfo));\n }\n selectorsM
ultiplied.push(sel);\n }\n else {\
n // and the parent selectors\n
for (k = 0; k < context.length; k++) {\n //
We need to put the current selectors\n // then j
oin the last selector's elements on to the parents selectors\n
const newSelectorPath = addReplacementIntoPath(sel, context[k], el
, inSelector);\n // add that to our new set of se
lectors\n selectorsMultiplied.push(newSelectorPat
h);\n }\n }\n
}\n\n // our new selectors has been multiplied, so reset t
he state\n newSelectors = selectorsMultiplied;\n
currentElements = [];\n }\n }\n\n //
if we have any elements left over (e.g. .a& .b == .b)\n // add them
on to all the current selectors\n mergeElementsOnToSelectors(currentE
lements, newSelectors);\n\n for (i = 0; i < newSelectors.length; i++)
{\n length = newSelectors[i].length;\n if (length
> 0) {\n paths.push(newSelectors[i]);\n l
astSelector = newSelectors[i][length - 1];\n newSelectors[i][
length - 1] = lastSelector.createDerived(lastSelector.elements, inSelector.exten
dList);\n }\n }\n\n return hadParentSelecto
r;\n }\n\n function deriveSelector(visibilityInfo, deriveFrom) {\n
const newSelector = deriveFrom.createDerived(deriveFrom.elements, de
riveFrom.extendList, deriveFrom.evaldCondition);\n newSelector.copyVi
sibilityInfo(visibilityInfo);\n return newSelector;\n }\n\n
// joinSelector code follows\n let i, newPaths, hadParentSelector;\n
\n newPaths = [];\n hadParentSelector = replaceParentSelector(newP
aths, context, selector);\n\n if (!hadParentSelector) {\n if (
context.length > 0) {\n newPaths = [];\n for (i =
0; i < context.length; i++) {\n\n const concatenated = contex
t[i].map(deriveSelector.bind(this, selector.visibilityInfo()));\n\n
concatenated.push(selector);\n newPaths.push(concatena
ted);\n }\n }\n else {\n new
Paths = [[selector]];\n }\n }\n\n for (i = 0; i < newPa
ths.length; i++) {\n paths.push(newPaths[i]);\n }\n\n }\n})
;\n\nexport default Ruleset;\n","import Node from './node';\nimport Selector fro
m './selector';\nimport Ruleset from './ruleset';\nimport Anonymous from './anon
ymous';\n\nconst AtRule = function(\n name,\n value,\n rules,\n inde
x,\n currentFileInfo,\n debugInfo,\n isRooted,\n visibilityInfo\n) {
\n let i;\n\n this.name = name;\n this.value = (value instanceof Node)
? value : (value ? new Anonymous(value) : value);\n if (rules) {\n if
(Array.isArray(rules)) {\n this.rules = rules;\n } else {\n
this.rules = [rules];\n this.rules[0].selectors = (new Sele
ctor([], null, null, index, currentFileInfo)).createEmptySelectors();\n }
\n for (i = 0; i < this.rules.length; i++) {\n this.rules[i].a
llowImports = true;\n }\n this.setParent(this.rules, this);\n }
\n this._index = index;\n this._fileInfo = currentFileInfo;\n this.debu
gInfo = debugInfo;\n this.isRooted = isRooted || false;\n this.copyVisibil
ityInfo(visibilityInfo);\n this.allowRoot = true;\n}\n\nAtRule.prototype = Ob
ject.assign(new Node(), {\n type: 'AtRule',\n accept(visitor) {\n c
onst value = this.value, rules = this.rules;\n if (rules) {\n
this.rules = visitor.visitArray(rules);\n }\n if (value) {\n
this.value = visitor.visit(value);\n }\n },\n\n isRulesetLike
() {\n return this.rules || !this.isCharset();\n },\n\n isCharset()
{\n return '@charset' === this.name;\n },\n\n genCSS(context, outp
ut) {\n const value = this.value, rules = this.rules;\n output.add
(this.name, this.fileInfo(), this.getIndex());\n if (value) {\n
output.add(' ');\n value.genCSS(context, output);\n }\n
if (rules) {\n this.outputRuleset(context, output, rules);\n
} else {\n output.add(';');\n }\n },\n\n eval(context)
{\n let mediaPathBackup, mediaBlocksBackup, value = this.value, rules =
this.rules;\n\n // media stored inside other atrule should not bubble ove
r it\n // backpup media bubbling information\n mediaPathBackup = c
ontext.mediaPath;\n mediaBlocksBackup = context.mediaBlocks;\n //
deleted media bubbling information\n context.mediaPath = [];\n con
text.mediaBlocks = [];\n\n if (value) {\n value = value.eval(c
ontext);\n }\n if (rules) {\n // assuming that there is
only one rule at this point - that is how parser constructs the rule\n
rules = [rules[0].eval(context)];\n rules[0].root = true;\n
}\n // restore media bubbling information\n context.mediaPath = m
ediaPathBackup;\n context.mediaBlocks = mediaBlocksBackup;\n\n ret
urn new AtRule(this.name, value, rules,\n this.getIndex(), this.fileI
nfo(), this.debugInfo, this.isRooted, this.visibilityInfo());\n },\n\n var
iable(name) {\n if (this.rules) {\n // assuming that there is
only one rule at this point - that is how parser constructs the rule\n
return Ruleset.prototype.variable.call(this.rules[0], name);\n }\n }
,\n\n find() {\n if (this.rules) {\n // assuming that there
is only one rule at this point - that is how parser constructs the rule\n
return Ruleset.prototype.find.apply(this.rules[0], arguments);\n }\
n },\n\n rulesets() {\n if (this.rules) {\n // assuming
that there is only one rule at this point - that is how parser constructs the ru
le\n return Ruleset.prototype.rulesets.apply(this.rules[0]);\n
}\n },\n\n outputRuleset(context, output, rules) {\n const ruleCnt
= rules.length;\n let i;\n context.tabLevel = (context.tabLevel |
0) + 1;\n\n // Compressed\n if (context.compress) {\n
output.add('{');\n for (i = 0; i < ruleCnt; i++) {\n r
ules[i].genCSS(context, output);\n }\n output.add('}');\n
context.tabLevel--;\n return;\n }\n\n // Non
-compressed\n const tabSetStr = `\\n${Array(context.tabLevel).join(' ')}
`, tabRuleStr = `${tabSetStr} `;\n if (!ruleCnt) {\n output.a
dd(` {${tabSetStr}}`);\n } else {\n output.add(` {${tabRuleStr
}`);\n rules[0].genCSS(context, output);\n for (i = 1; i <
ruleCnt; i++) {\n output.add(tabRuleStr);\n rules
[i].genCSS(context, output);\n }\n output.add(`${tabSetStr
}}`);\n }\n\n context.tabLevel--;\n }\n});\n\nexport default At
Rule;\n","import Node from './node';\nimport contexts from '../contexts';\nimpor
t * as utils from '../utils';\n\nconst DetachedRuleset = function(ruleset, frame
s) {\n this.ruleset = ruleset;\n this.frames = frames;\n this.setParent
(this.ruleset, this);\n};\n\nDetachedRuleset.prototype = Object.assign(new Node(
), {\n type: 'DetachedRuleset',\n evalFirst: true,\n\n accept(visitor)
{\n this.ruleset = visitor.visit(this.ruleset);\n },\n\n eval(conte
xt) {\n const frames = this.frames || utils.copyArray(context.frames);\n
return new DetachedRuleset(this.ruleset, frames);\n },\n\n callEval
(context) {\n return this.ruleset.eval(this.frames ? new contexts.Eval(co
ntext, this.frames.concat(context.frames)) : context);\n }\n});\n\nexport def
ault DetachedRuleset;\n","import Node from './node';\nimport unitConversions fro
m '../data/unit-conversions';\nimport * as utils from '../utils';\n\nconst Unit
= function(numerator, denominator, backupUnit) {\n this.numerator = numerator
? utils.copyArray(numerator).sort() : [];\n this.denominator = denominator ?
utils.copyArray(denominator).sort() : [];\n if (backupUnit) {\n this.
backupUnit = backupUnit;\n } else if (numerator && numerator.length) {\n
this.backupUnit = numerator[0];\n }\n};\n\nUnit.prototype = Object.assign(
new Node(), {\n type: 'Unit',\n\n clone() {\n return new Unit(utils
.copyArray(this.numerator), utils.copyArray(this.denominator), this.backupUnit);
\n },\n\n genCSS(context, output) {\n // Dimension checks the unit
is singular and throws an error if in strict math mode.\n const strictUni
ts = context && context.strictUnits;\n if (this.numerator.length === 1) {
\n output.add(this.numerator[0]); // the ideal situation\n } e
lse if (!strictUnits && this.backupUnit) {\n output.add(this.backupUn
it);\n } else if (!strictUnits && this.denominator.length) {\n
output.add(this.denominator[0]);\n }\n },\n\n toString() {\n
let i, returnStr = this.numerator.join('*');\n for (i = 0; i < this.den
ominator.length; i++) {\n returnStr += `/${this.denominator[i]}`;\n
}\n return returnStr;\n },\n\n compare(other) {\n retu
rn this.is(other.toString()) ? 0 : undefined;\n },\n\n is(unitString) {\n
return this.toString().toUpperCase() === unitString.toUpperCase();\n }
,\n\n isLength() {\n return RegExp('^(px|em|ex|ch|rem|in|cm|mm|pc|pt|e
x|vw|vh|vmin|vmax)$', 'gi').test(this.toCSS());\n },\n\n isEmpty() {\n
return this.numerator.length === 0 && this.denominator.length === 0;\n },
\n\n isSingular() {\n return this.numerator.length <= 1 && this.denomi
nator.length === 0;\n },\n\n map(callback) {\n let i;\n\n fo
r (i = 0; i < this.numerator.length; i++) {\n this.numerator[i] = cal
lback(this.numerator[i], false);\n }\n\n for (i = 0; i < this.deno
minator.length; i++) {\n this.denominator[i] = callback(this.denomina
tor[i], true);\n }\n },\n\n usedUnits() {\n let group;\n
const result = {};\n let mapUnit;\n let groupName;\n\n
mapUnit = function (atomicUnit) {\n /* jshint loopfunc:true */\n
if (group.hasOwnProperty(atomicUnit) && !result[groupName]) {\n
result[groupName] = atomicUnit;\n }\n\n return atomi
cUnit;\n };\n\n for (groupName in unitConversions) {\n
if (unitConversions.hasOwnProperty(groupName)) {\n group = unitCo
nversions[groupName];\n\n this.map(mapUnit);\n }\n
}\n\n return result;\n },\n\n cancel() {\n const counter
= {};\n let atomicUnit;\n let i;\n\n for (i = 0; i < this.
numerator.length; i++) {\n atomicUnit = this.numerator[i];\n
counter[atomicUnit] = (counter[atomicUnit] || 0) + 1;\n }\n\n f
or (i = 0; i < this.denominator.length; i++) {\n atomicUnit = this.de
nominator[i];\n counter[atomicUnit] = (counter[atomicUnit] || 0) - 1;
\n }\n\n this.numerator = [];\n this.denominator = [];\n\n
for (atomicUnit in counter) {\n if (counter.hasOwnProperty(ato
micUnit)) {\n const count = counter[atomicUnit];\n\n
if (count > 0) {\n for (i = 0; i < count; i++) {\n
this.numerator.push(atomicUnit);\n }\n
} else if (count < 0) {\n for (i = 0; i < -count; i+
+) {\n this.denominator.push(atomicUnit);\n
}\n }\n }\n }\n\n this.numerator.s
ort();\n this.denominator.sort();\n }\n});\n\nexport default Unit;\n",
"import Node from './node';\nimport unitConversions from '../data/unit-conversio
ns';\nimport Unit from './unit';\nimport Color from './color';\n\n//\n// A numbe
r with a unit\n//\nconst Dimension = function(value, unit) {\n this.value = p
arseFloat(value);\n if (isNaN(this.value)) {\n throw new Error('Dimens
ion is not a number.');\n }\n this.unit = (unit && unit instanceof Unit) ?
unit :\n new Unit(unit ? [unit] : undefined);\n this.setParent(this.u
nit, this);\n};\n\nDimension.prototype = Object.assign(new Node(), {\n type:
'Dimension',\n\n accept(visitor) {\n this.unit = visitor.visit(this.un
it);\n },\n\n eval(context) {\n return this;\n },\n\n toColor
() {\n return new Color([this.value, this.value, this.value]);\n },\n\
n genCSS(context, output) {\n if ((context && context.strictUnits) &&
!this.unit.isSingular()) {\n throw new Error(`Multiple units in dimen
sion. Correct the units or use the unit function. Bad unit: ${this.unit.toString
()}`);\n }\n\n const value = this.fround(context, this.value);\n
let strValue = String(value);\n\n if (value !== 0 && value < 0.0000
01 && value > -0.000001) {\n // would be output 1e-6 etc.\n
strValue = value.toFixed(20).replace(/0+$/, '');\n }\n\n if (con
text && context.compress) {\n // Zero values doesn't need a unit\n
if (value === 0 && this.unit.isLength()) {\n output.add(
strValue);\n return;\n }\n\n // Float value
s doesn't need a leading zero\n if (value > 0 && value < 1) {\n
strValue = (strValue).substr(1);\n }\n }\n\n
output.add(strValue);\n this.unit.genCSS(context, output);\n },\n\n
// In an operation between two Dimensions,\n // we default to the first Dime
nsion's unit,\n // so `1px + 2` will yield `3px`.\n operate(context, op, o
ther) {\n /* jshint noempty:false */\n let value = this._operate(c
ontext, op, this.value, other.value);\n let unit = this.unit.clone();\n\n
if (op === '+' || op === '-') {\n if (unit.numerator.length =
== 0 && unit.denominator.length === 0) {\n unit = other.unit.clon
e();\n if (this.unit.backupUnit) {\n unit.back
upUnit = this.unit.backupUnit;\n }\n } else if (other.
unit.numerator.length === 0 && unit.denominator.length === 0) {\n
// do nothing\n } else {\n other = other.convertTo(th
is.unit.usedUnits());\n\n if (context.strictUnits && other.unit.t
oString() !== unit.toString()) {\n throw new Error(`Incompati
ble units. Change the units or use the unit function. `\n
+ `Bad units: '${unit.toString()}' and '${other.unit.toString()}'.`);\n
}\n\n value = this._operate(context, op, this.value, othe
r.value);\n }\n } else if (op === '*') {\n unit.num
erator = unit.numerator.concat(other.unit.numerator).sort();\n unit.d
enominator = unit.denominator.concat(other.unit.denominator).sort();\n
unit.cancel();\n } else if (op === '/') {\n unit.numerator =
unit.numerator.concat(other.unit.denominator).sort();\n unit.denomin
ator = unit.denominator.concat(other.unit.numerator).sort();\n unit.c
ancel();\n }\n return new Dimension(value, unit);\n },\n\n c
ompare(other) {\n let a, b;\n\n if (!(other instanceof Dimension))
{\n return undefined;\n }\n\n if (this.unit.isEmpty()
|| other.unit.isEmpty()) {\n a = this;\n b = other;\n
} else {\n a = this.unify();\n b = other.unify();\n
if (a.unit.compare(b.unit) !== 0) {\n return undefined;\n
}\n }\n\n return Node.numericCompare(a.value, b.value)
;\n },\n\n unify() {\n return this.convertTo({ length: 'px', durati
on: 's', angle: 'rad' });\n },\n\n convertTo(conversions) {\n let v
alue = this.value;\n const unit = this.unit.clone();\n let i;\n
let groupName;\n let group;\n let targetUnit;\n let de
rivedConversions = {};\n let applyUnit;\n\n if (typeof conversions
=== 'string') {\n for (i in unitConversions) {\n if (
unitConversions[i].hasOwnProperty(conversions)) {\n derivedCo
nversions = {};\n derivedConversions[i] = conversions;\n
}\n }\n conversions = derivedConversions;\n
}\n applyUnit = function (atomicUnit, denominator) {\n /*
jshint loopfunc:true */\n if (group.hasOwnProperty(atomicUnit)) {\n
if (denominator) {\n value = value / (group[ato
micUnit] / group[targetUnit]);\n } else {\n va
lue = value * (group[atomicUnit] / group[targetUnit]);\n }\n\n
return targetUnit;\n }\n\n return atomicUnit;
\n };\n\n for (groupName in conversions) {\n if (conver
sions.hasOwnProperty(groupName)) {\n targetUnit = conversions[gro
upName];\n group = unitConversions[groupName];\n\n
unit.map(applyUnit);\n }\n }\n\n unit.cancel();\n\n
return new Dimension(value, unit);\n }\n});\n\nexport default Dimension;
\n","import Node from './node';\nimport Color from './color';\nimport Dimension
from './dimension';\nimport * as Constants from '../constants';\nconst MATH = Co
nstants.Math;\n\n\nconst Operation = function(op, operands, isSpaced) {\n thi
s.op = op.trim();\n this.operands = operands;\n this.isSpaced = isSpaced;\
n};\n\nOperation.prototype = Object.assign(new Node(), {\n type: 'Operation',
\n\n accept(visitor) {\n this.operands = visitor.visitArray(this.opera
nds);\n },\n\n eval(context) {\n let a = this.operands[0].eval(cont
ext), b = this.operands[1].eval(context), op;\n\n if (context.isMathOn(th
is.op)) {\n op = this.op === './' ? '/' : this.op;\n if (a
instanceof Dimension && b instanceof Color) {\n a = a.toColor();
\n }\n if (b instanceof Dimension && a instanceof Color) {
\n b = b.toColor();\n }\n if (!a.operate ||
!b.operate) {\n if (\n (a instanceof Operatio
n || b instanceof Operation)\n && a.op === '/' && context.mat
h === MATH.PARENS_DIVISION\n ) {\n return new
Operation(this.op, [a, b], this.isSpaced);\n }\n t
hrow { type: 'Operation',\n message: 'Operation on an invalid
type' };\n }\n\n return a.operate(context, op, b);\n
} else {\n return new Operation(this.op, [a, b], this.isSpaced);\n
}\n },\n\n genCSS(context, output) {\n this.operands[0].gen
CSS(context, output);\n if (this.isSpaced) {\n output.add(' ')
;\n }\n output.add(this.op);\n if (this.isSpaced) {\n
output.add(' ');\n }\n this.operands[1].genCSS(context, outp
ut);\n }\n});\n\nexport default Operation;\n","import Node from './node';\nim
port Paren from './paren';\nimport Comment from './comment';\nimport Dimension f
rom './dimension';\nimport * as Constants from '../constants';\nconst MATH = Con
stants.Math;\n\nconst Expression = function(value, noSpacing) {\n this.value
= value;\n this.noSpacing = noSpacing;\n if (!value) {\n throw new
Error('Expression requires an array parameter');\n }\n};\n\nExpression.protot
ype = Object.assign(new Node(), {\n type: 'Expression',\n\n accept(visitor
) {\n this.value = visitor.visitArray(this.value);\n },\n\n eval(co
ntext) {\n let returnValue;\n const mathOn = context.isMathOn();\n
const inParenthesis = this.parens;\n\n let doubleParen = false;\n
if (inParenthesis) {\n context.inParenthesis();\n }\n
if (this.value.length > 1) {\n returnValue = new Expression(th
is.value.map(function (e) {\n if (!e.eval) {\n
return e;\n }\n return e.eval(context);\n
}), this.noSpacing);\n } else if (this.value.length === 1) {\n
if (this.value[0].parens && !this.value[0].parensInOp && !context.inCalc) {
\n doubleParen = true;\n }\n returnValue =
this.value[0].eval(context);\n } else {\n returnValue = this;\
n }\n if (inParenthesis) {\n context.outOfParenthesis()
;\n }\n if (this.parens && this.parensInOp && !mathOn && !doublePa
ren \n && (!(returnValue instanceof Dimension))) {\n retur
nValue = new Paren(returnValue);\n }\n return returnValue;\n },
\n\n genCSS(context, output) {\n for (let i = 0; i < this.value.length
; i++) {\n this.value[i].genCSS(context, output);\n if (!t
his.noSpacing && i + 1 < this.value.length) {\n output.add(' ');\
n }\n }\n },\n\n throwAwayComments() {\n this.val
ue = this.value.filter(function(v) {\n return !(v instanceof Comment)
;\n });\n }\n});\n\nexport default Expression;\n","import Expression f
rom '../tree/expression';\n\nclass functionCaller {\n constructor(name, conte
xt, index, currentFileInfo) {\n this.name = name.toLowerCase();\n
this.index = index;\n this.context = context;\n this.currentFileIn
fo = currentFileInfo;\n\n this.func = context.frames[0].functionRegistry.
get(this.name);\n }\n\n isValid() {\n return Boolean(this.func);\n
}\n\n call(args) {\n if (!(Array.isArray(args))) {\n arg
s = [args];\n }\n const evalArgs = this.func.evalArgs;\n if
(evalArgs !== false) {\n args = args.map(a => a.eval(this.context));
\n }\n const commentFilter = item => !(item.type === 'Comment');\n
\n // This code is terrible and should be replaced as per this issue...\n
// https://github.com/less/less.js/issues/2477\n args = args\n
.filter(commentFilter)\n .map(item => {\n if
(item.type === 'Expression') {\n const subNodes = item.value.
filter(commentFilter);\n if (subNodes.length === 1) {\n
// https://github.com/less/less.js/issues/3616\n
if (item.parens && subNodes[0].op === '/') {\n
return item;\n }\n return subN
odes[0];\n } else {\n return new Expre
ssion(subNodes);\n }\n }\n retu
rn item;\n });\n\n if (evalArgs === false) {\n retu
rn this.func(this.context, ...args);\n }\n\n return this.func(...a
rgs);\n }\n}\n\nexport default functionCaller;\n","/*! **********************
*******************************************************\r\nCopyright (c) Microso
ft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this s
oftware for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOF
TWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGA
RD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND F
ITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIR
ECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS O
F USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE
OF THIS SOFTWARE.\r\n**********************************************************
******************* */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics
= function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n (
{ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r
\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty
.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexp
ort function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== nul
l)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is n
ot a constructor or null\");\r\n extendStatics(d, b);\r\n function __() {
this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__
.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function(
) {\r\n __assign = Object.assign || function __assign(t) {\r\n for (va
r s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];
\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.
apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t
= {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) &&
e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.
getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.ge
tOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i])
< 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t
[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __de
corate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c <
3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key
) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate
=== \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n e
lse for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r =
(c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return
c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport funct
ion __param(paramIndex, decorator) {\r\n return function (target, key) { deco
rator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadat
aKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflec
t.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue)
;\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n
function adopt(value) { return value instanceof P ? value : new P(function (
resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function
(resolve, reject) {\r\n function fulfilled(value) { try { step(generator
.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value)
{ try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n
function step(result) { result.done ? resolve(result.value) : adopt(result.va
lue).then(fulfilled, rejected); }\r\n step((generator = generator.apply(t
hisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __gen
erator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] &
1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g
= { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol ===
\"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n f
unction verb(n) { return function (v) { return step([n, v]); }; }\r\n functio
n step(op) {\r\n if (f) throw new TypeError(\"Generator is already execut
ing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] &
2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0
) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0,
t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n
case 0: case 1: t = op; break;\r\n case 4: _.label++; return {
value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op
= [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); con
tinue;\r\n default:\r\n if (!(t = _.trys, t =
t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; conti
nue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] <
t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _
.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t &
& _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n
if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n
}\r\n op = body.call(thisArg, _);\r\n } catch (e) { o
p = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1
]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nex
port var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k
2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true,
get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if
(k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function _
_exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.pro
totype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport f
unction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.it
erator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && ty
peof o.length === \"number\") return {\r\n next: function () {\r\n
if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i
++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object
is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport fu
nction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.
iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n
try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) a
r.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n
finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"]
)) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }
\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread()
{\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.
concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r
\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = argument
s.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k
= 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.le
ngth; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\
nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.le
ngth === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar
|| !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from
, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.
concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this
instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport fun
ction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyn
cIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n
var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i
= {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator]
= function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = f
unction (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || r
esume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catc
h (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __a
wait ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\
r\n function fulfill(value) { resume(\"next\", value); }\r\n function reje
ct(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v),
q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __
asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(
\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = fu
nction () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? functi
on (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } :
f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if
(!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defin
ed.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) :
(o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i =
{}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator]
= function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && fun
ction (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(
resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reje
ct, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d })
; }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\
r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { val
ue: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar
__setModuleDefault = Object.create ? (function(o, v) {\r\n Object.definePrope
rty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\
n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n
if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod !
= null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnPrope
rty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(res
ult, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod
) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\n
export function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (ki
nd === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a
getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f
: !state.has(receiver)) throw new TypeError(\"Cannot read private member from an
object whose class did not declare it\");\r\n return kind === \"m\" ? f : ki
nd === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\
nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n
if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r
\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defin
ed without a setter\");\r\n if (typeof state === \"function\" ? receiver !==
state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private m
ember to an object whose class did not declare it\");\r\n return (kind === \"
a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)
), value;\r\n}\r\n","import Node from './node';\nimport Anonymous from './anonym
ous';\nimport FunctionCaller from '../functions/function-caller';\n\n//\n// A fu
nction call node.\n//\nconst Call = function(name, args, index, currentFileInfo)
{\n this.name = name;\n this.args = args;\n this.calc = name === 'calc
';\n this._index = index;\n this._fileInfo = currentFileInfo;\n}\n\nCall.p
rototype = Object.assign(new Node(), {\n type: 'Call',\n\n accept(visitor)
{\n if (this.args) {\n this.args = visitor.visitArray(this.ar
gs);\n }\n },\n\n //\n // When evaluating a function call,\n
// we either find the function in the functionRegistry,\n // in which case we
call it, passing the evaluated arguments,\n // if this returns null or we c
annot find the function, we\n // simply print it out as it appeared originall
y [2].\n //\n // The reason why we evaluate the arguments, is in the case
where\n // we try to pass a variable to a function, like: `saturate(@color)`.
\n // The function should receive the value, not the variable.\n //\n e
val(context) {\n /**\n * Turn off math for calc(), and switch bac
k on for evaluating nested functions\n */\n const currentMathCont
ext = context.mathOn;\n context.mathOn = !this.calc;\n if (this.ca
lc || context.inCalc) {\n context.enterCalc();\n }\n\n
const exitCalc = () => {\n if (this.calc || context.inCalc) {\n
context.exitCalc();\n }\n context.mathOn = curre
ntMathContext;\n };\n\n let result;\n const funcCaller = ne
w FunctionCaller(this.name, context, this.getIndex(), this.fileInfo());\n\n
if (funcCaller.isValid()) {\n try {\n result = func
Caller.call(this.args);\n exitCalc();\n } catch (e) {\
n if (e.hasOwnProperty('line') && e.hasOwnProperty('column')) {\n
throw e;\n }\n throw { \n
type: e.type || 'Runtime',\n message: `Error e
valuating function \\`${this.name}\\`${e.message ? `: ${e.message}` : ''}`,\n
index: this.getIndex(), \n filename: this.fi
leInfo().filename,\n line: e.lineNumber,\n
column: e.columnNumber\n };\n }\n }\n\n
if (result !== null && result !== undefined) {\n // Results that tha
t are not nodes are cast as Anonymous nodes\n // Falsy values or bool
eans are returned as empty nodes\n if (!(result instanceof Node)) {\n
if (!result || result === true) {\n result =
new Anonymous(null); \n }\n else {\n
result = new Anonymous(result.toString()); \n }\n
\n }\n result._index = this._index;\n res
ult._fileInfo = this._fileInfo;\n return result;\n }\n\n
const args = this.args.map(a => a.eval(context));\n exitCalc();\n\n
return new Call(this.name, args, this.getIndex(), this.fileInfo());\n },\
n\n genCSS(context, output) {\n output.add(`${this.name}(`, this.fileI
nfo(), this.getIndex());\n\n for (let i = 0; i < this.args.length; i++) {
\n this.args[i].genCSS(context, output);\n if (i + 1 < thi
s.args.length) {\n output.add(', ');\n }\n }\n\
n output.add(')');\n }\n});\n\nexport default Call;\n","import Node fr
om './node';\nimport Call from './call';\n\nconst Variable = function(name, inde
x, currentFileInfo) {\n this.name = name;\n this._index = index;\n this
._fileInfo = currentFileInfo;\n};\n\nVariable.prototype = Object.assign(new Node
(), {\n type: 'Variable',\n\n eval(context) {\n let variable, name
= this.name;\n\n if (name.indexOf('@@') === 0) {\n name = `@${
new Variable(name.slice(1), this.getIndex(), this.fileInfo()).eval(context).valu
e}`;\n }\n\n if (this.evaluating) {\n throw { type: 'Na
me',\n message: `Recursive variable definition for ${name}`,\n
filename: this.fileInfo().filename,\n index: this.ge
tIndex() };\n }\n\n this.evaluating = true;\n\n variable =
this.find(context.frames, function (frame) {\n const v = frame.variab
le(name);\n if (v) {\n if (v.important) {\n
const importantScope = context.importantScope[context.importantScope.le
ngth - 1];\n importantScope.important = v.important;\n
}\n // If in calc, wrap vars in a function call to casca
de evaluate args first\n if (context.inCalc) {\n
return (new Call('_SELF', [v.value])).eval(context);\n }\n
else {\n return v.value.eval(context);\n
}\n }\n });\n if (variable) {\n this.
evaluating = false;\n return variable;\n } else {\n
throw { type: 'Name',\n message: `variable ${name} is undefined`
,\n filename: this.fileInfo().filename,\n index: t
his.getIndex() };\n }\n },\n\n find(obj, fun) {\n for (let i
= 0, r; i < obj.length; i++) {\n r = fun.call(obj, obj[i]);\n
if (r) { return r; }\n }\n return null;\n }\n});\n\nexport
default Variable;\n","import Node from './node';\nimport Declaration from './de
claration';\n\nconst Property = function(name, index, currentFileInfo) {\n th
is.name = name;\n this._index = index;\n this._fileInfo = currentFileInfo;
\n};\n\nProperty.prototype = Object.assign(new Node(), {\n type: 'Property',\
n\n eval(context) {\n let property;\n const name = this.name;\n
// TODO: shorten this reference\n const mergeRules = context.plug
inManager.less.visitors.ToCSSVisitor.prototype._mergeRules;\n\n if (this.
evaluating) {\n throw { type: 'Name',\n message: `Recu
rsive property reference for ${name}`,\n filename: this.fileInfo(
).filename,\n index: this.getIndex() };\n }\n\n thi
s.evaluating = true;\n\n property = this.find(context.frames, function (f
rame) {\n let v;\n const vArr = frame.property(name);\n
if (vArr) {\n for (let i = 0; i < vArr.length; i++) {\n
v = vArr[i];\n\n vArr[i] = new Declaration
(v.name,\n v.value,\n v.important,
\n v.merge,\n v.index,\n
v.currentFileInfo,\n v.inline,\n
v.variable\n );\n }\n
mergeRules(vArr);\n\n v = vArr[vArr.length - 1];\n
if (v.important) {\n const importantScope = context.impo
rtantScope[context.importantScope.length - 1];\n importantSco
pe.important = v.important;\n }\n v = v.value.eval
(context);\n return v;\n }\n });\n if (p
roperty) {\n this.evaluating = false;\n return property;\n
} else {\n throw { type: 'Name',\n message: `P
roperty '${name}' is undefined`,\n filename: this.currentFileInfo
.filename,\n index: this.index };\n }\n },\n\n find(
obj, fun) {\n for (let i = 0, r; i < obj.length; i++) {\n r =
fun.call(obj, obj[i]);\n if (r) { return r; }\n }\n ret
urn null;\n }\n});\n\nexport default Property;\n","import Node from './node';
\n\nconst Attribute = function(key, op, value) {\n this.key = key;\n this.
op = op;\n this.value = value;\n}\n\nAttribute.prototype = Object.assign(new
Node(), {\n type: 'Attribute',\n\n eval(context) {\n return new Att
ribute(this.key.eval ? this.key.eval(context) : this.key,\n this.op,
(this.value && this.value.eval) ? this.value.eval(context) : this.value);\n }
,\n\n genCSS(context, output) {\n output.add(this.toCSS(context));\n
},\n\n toCSS(context) {\n let value = this.key.toCSS ? this.key.toCS
S(context) : this.key;\n\n if (this.op) {\n value += this.op;\
n value += (this.value.toCSS ? this.value.toCSS(context) : this.value
);\n }\n\n return `[${value}]`;\n }\n});\n\nexport default Attr
ibute;\n","import Node from './node';\nimport Variable from './variable';\nimpor
t Property from './property';\n\n\nconst Quoted = function(str, content, escaped
, index, currentFileInfo) {\n this.escaped = (escaped == null) ? true : escap
ed;\n this.value = content || '';\n this.quote = str.charAt(0);\n this.
_index = index;\n this._fileInfo = currentFileInfo;\n this.variableRegex =
/@\\{([\\w-]+)\\}/g;\n this.propRegex = /\\$\\{([\\w-]+)\\}/g;\n this.all
owRoot = escaped;\n};\n\nQuoted.prototype = Object.assign(new Node(), {\n typ
e: 'Quoted',\n\n genCSS(context, output) {\n if (!this.escaped) {\n
output.add(this.quote, this.fileInfo(), this.getIndex());\n }\n
output.add(this.value);\n if (!this.escaped) {\n output
.add(this.quote);\n }\n },\n\n containsVariables() {\n retur
n this.value.match(this.variableRegex);\n },\n\n eval(context) {\n
const that = this;\n let value = this.value;\n const variableRepla
cement = function (_, name) {\n const v = new Variable(`@${name}`, th
at.getIndex(), that.fileInfo()).eval(context, true);\n return (v inst
anceof Quoted) ? v.value : v.toCSS();\n };\n const propertyReplace
ment = function (_, name) {\n const v = new Property(`$${name}`, that
.getIndex(), that.fileInfo()).eval(context, true);\n return (v instan
ceof Quoted) ? v.value : v.toCSS();\n };\n function iterativeRepla
ce(value, regexp, replacementFnc) {\n let evaluatedValue = value;\n
do {\n value = evaluatedValue.toString();\n
evaluatedValue = value.replace(regexp, replacementFnc);\n } while
(value !== evaluatedValue);\n return evaluatedValue;\n }\n
value = iterativeReplace(value, this.variableRegex, variableReplacement);\n
value = iterativeReplace(value, this.propRegex, propertyReplacement);\n
return new Quoted(this.quote + value + this.quote, value, this.escaped, t
his.getIndex(), this.fileInfo());\n },\n\n compare(other) {\n // wh
en comparing quoted strings allow the quote to differ\n if (other.type ==
= 'Quoted' && !this.escaped && !other.escaped) {\n return Node.numeri
cCompare(this.value, other.value);\n } else {\n return other.t
oCSS && this.toCSS() === other.toCSS() ? 0 : undefined;\n }\n }\n});\n
\nexport default Quoted;\n","import Node from './node';\n\nfunction escapePath(p
ath) {\n return path.replace(/[\\(\\)'\"\\s]/g, function(match) { return `\\\
\${match}`; });\n}\n\nconst URL = function(val, index, currentFileInfo, isEvald)
{\n this.value = val;\n this._index = index;\n this._fileInfo = curren
tFileInfo;\n this.isEvald = isEvald;\n};\n\nURL.prototype = Object.assign(new
Node(), {\n type: 'Url',\n\n accept(visitor) {\n this.value = visi
tor.visit(this.value);\n },\n\n genCSS(context, output) {\n output.
add('url(');\n this.value.genCSS(context, output);\n output.add(')
');\n },\n\n eval(context) {\n const val = this.value.eval(context)
;\n let rootpath;\n\n if (!this.isEvald) {\n // Add the
rootpath if the URL requires a rewrite\n rootpath = this.fileInfo()
&& this.fileInfo().rootpath;\n if (typeof rootpath === 'string' &&\n
typeof val.value === 'string' &&\n context.pathReq
uiresRewrite(val.value))Â {\n if (!val.quote) {\n
rootpath = escapePath(rootpath);\n }\n val.valu
e = context.rewritePath(val.value, rootpath);\n } else {\n
val.value = context.normalizePath(val.value);\n }\n\n
// Add url args if enabled\n if (context.urlArgs) {\n
if (!val.value.match(/^\\s*data:/)) {\n const delimiter = va
l.value.indexOf('?') === -1 ? '?' : '&';\n const urlArgs = de
limiter + context.urlArgs;\n if (val.value.indexOf('#') !== -
1) {\n val.value = val.value.replace('#', `${urlArgs}#`);
\n } else {\n val.value += urlArgs;\n
}\n }\n }\n }\n\n ret
urn new URL(val, this.getIndex(), this.fileInfo(), true);\n }\n});\n\nexport
default URL;\n","import Ruleset from './ruleset';\nimport Value from './value';\
nimport Selector from './selector';\nimport Anonymous from './anonymous';\nimpor
t Expression from './expression';\nimport AtRule from './atrule';\nimport * as u
tils from '../utils';\n\nconst Media = function(value, features, index, currentF
ileInfo, visibilityInfo) {\n this._index = index;\n this._fileInfo = curre
ntFileInfo;\n\n const selectors = (new Selector([], null, null, this._index,
this._fileInfo)).createEmptySelectors();\n\n this.features = new Value(featur
es);\n this.rules = [new Ruleset(selectors, value)];\n this.rules[0].allow
Imports = true;\n this.copyVisibilityInfo(visibilityInfo);\n this.allowRoo
t = true;\n this.setParent(selectors, this);\n this.setParent(this.feature
s, this);\n this.setParent(this.rules, this);\n};\n\nMedia.prototype = Object
.assign(new AtRule(), {\n type: 'Media',\n\n isRulesetLike() {\n re
turn true;\n },\n\n accept(visitor) {\n if (this.features) {\n
this.features = visitor.visit(this.features);\n }\n if (thi
s.rules) {\n this.rules = visitor.visitArray(this.rules);\n }\
n },\n\n genCSS(context, output) {\n output.add('@media ', this._fi
leInfo, this._index);\n this.features.genCSS(context, output);\n t
his.outputRuleset(context, output, this.rules);\n },\n\n eval(context) {\n
if (!context.mediaBlocks) {\n context.mediaBlocks = [];\n
context.mediaPath = [];\n }\n\n const media = new Media(nu
ll, [], this._index, this._fileInfo, this.visibilityInfo());\n if (this.d
ebugInfo) {\n this.rules[0].debugInfo = this.debugInfo;\n
media.debugInfo = this.debugInfo;\n }\n \n media.features =
this.features.eval(context);\n\n context.mediaPath.push(media);\n
context.mediaBlocks.push(media);\n\n this.rules[0].functionRegistry = co
ntext.frames[0].functionRegistry.inherit();\n context.frames.unshift(this
.rules[0]);\n media.rules = [this.rules[0].eval(context)];\n conte
xt.frames.shift();\n\n context.mediaPath.pop();\n\n return context
.mediaPath.length === 0 ? media.evalTop(context) :\n media.evalNested
(context);\n },\n\n evalTop(context) {\n let result = this;\n\n
// Render all dependent Media blocks.\n if (context.mediaBlocks.lengt
h > 1) {\n const selectors = (new Selector([], null, null, this.getIn
dex(), this.fileInfo())).createEmptySelectors();\n result = new Rules
et(selectors, context.mediaBlocks);\n result.multiMedia = true;\n
result.copyVisibilityInfo(this.visibilityInfo());\n this.setP
arent(result, this);\n }\n\n delete context.mediaBlocks;\n
delete context.mediaPath;\n\n return result;\n },\n\n evalNested(co
ntext) {\n let i;\n let value;\n const path = context.media
Path.concat([this]);\n\n // Extract the media-query conditions separated
with `,` (OR).\n for (i = 0; i < path.length; i++) {\n value =
path[i].features instanceof Value ?\n path[i].features.value : p
ath[i].features;\n path[i] = Array.isArray(value) ? value : [value];\
n }\n\n // Trace all permutations to generate the resulting media-
query.\n //\n // (a, b and c) with nested (d, e) ->\n //
a and d\n // a and e\n // b and c and d\n // b an
d c and e\n this.features = new Value(this.permute(path).map(path => {\n
path = path.map(fragment => fragment.toCSS ? fragment : new Anonymous
(fragment));\n\n for (i = path.length - 1; i > 0; i--) {\n
path.splice(i, 0, new Anonymous('and'));\n }\n\n retu
rn new Expression(path);\n }));\n this.setParent(this.features, th
is);\n\n // Fake a tree-node that doesn't output anything.\n retur
n new Ruleset([], []);\n },\n\n permute(arr) {\n if (arr.length ===
0) {\n return [];\n } else if (arr.length === 1) {\n
return arr[0];\n } else {\n const result = [];\n
const rest = this.permute(arr.slice(1));\n for (let i = 0; i < rest.
length; i++) {\n for (let j = 0; j < arr[0].length; j++) {\n
result.push([arr[0][j]].concat(rest[i]));\n }\n
}\n return result;\n }\n },\n\n bubbleSelectors
(selectors) {\n if (!selectors) {\n return;\n }\n
this.rules = [new Ruleset(utils.copyArray(selectors), [this.rules[0]])];\n
this.setParent(this.rules, this);\n }\n});\n\nexport default Media;\n","i
mport Node from './node';\nimport Media from './media';\nimport URL from './url'
;\nimport Quoted from './quoted';\nimport Ruleset from './ruleset';\nimport Anon
ymous from './anonymous';\nimport * as utils from '../utils';\nimport LessError
from '../less-error';\n\n//\n// CSS @import node\n//\n// The general strategy he
re is that we don't want to wait\n// for the parsing to be completed, before we
start importing\n// the file. That's because in the context of a browser,\n// mo
st of the time will be spent waiting for the server to respond.\n//\n// On creat
ion, we push the import path to our import queue, though\n// `import,push`, we a
lso pass it a callback, which it'll call once\n// the file has been fetched, and
parsed.\n//\nconst Import = function(path, features, options, index, currentFil
eInfo, visibilityInfo) {\n this.options = options;\n this._index = index;\
n this._fileInfo = currentFileInfo;\n this.path = path;\n this.features
= features;\n this.allowRoot = true;\n\n if (this.options.less !== undefi
ned || this.options.inline) {\n this.css = !this.options.less || this.opt
ions.inline;\n } else {\n const pathValue = this.getPath();\n i
f (pathValue && /[#\\.\\&\\?]css([\\?;].*)?$/.test(pathValue)) {\n th
is.css = true;\n }\n }\n this.copyVisibilityInfo(visibilityInfo);\n
this.setParent(this.features, this);\n this.setParent(this.path, this);\n
};\n\nImport.prototype = Object.assign(new Node(), {\n type: 'Import',\n\n
accept(visitor) {\n if (this.features) {\n this.features = vi
sitor.visit(this.features);\n }\n this.path = visitor.visit(this.p
ath);\n if (!this.options.isPlugin && !this.options.inline && this.root)
{\n this.root = visitor.visit(this.root);\n }\n },\n\n g
enCSS(context, output) {\n if (this.css && this.path._fileInfo.reference
=== undefined) {\n output.add('@import ', this._fileInfo, this._index
);\n this.path.genCSS(context, output);\n if (this.feature
s) {\n output.add(' ');\n this.features.genCSS(con
text, output);\n }\n output.add(';');\n }\n },\n
\n getPath() {\n return (this.path instanceof URL) ?\n this
.path.value.value : this.path.value;\n },\n\n isVariableImport() {\n
let path = this.path;\n if (path instanceof URL) {\n path =
path.value;\n }\n if (path instanceof Quoted) {\n retur
n path.containsVariables();\n }\n\n return true;\n },\n\n ev
alForImport(context) {\n let path = this.path;\n\n if (path instan
ceof URL) {\n path = path.value;\n }\n\n return new Imp
ort(path.eval(context), this.features, this.options, this._index, this._fileInfo
, this.visibilityInfo());\n },\n\n evalPath(context) {\n const path
= this.path.eval(context);\n const fileInfo = this._fileInfo;\n\n
if (!(path instanceof URL)) {\n // Add the rootpath if the URL requi
res a rewrite\n const pathValue = path.value;\n if (fileIn
fo &&\n pathValue &&\n context.pathRequiresRewrite
(pathValue)) {\n path.value = context.rewritePath(pathValue, file
Info.rootpath);\n } else {\n path.value = context.norm
alizePath(path.value);\n }\n }\n\n return path;\n },
\n\n eval(context) {\n const result = this.doEval(context);\n i
f (this.options.reference || this.blocksVisibility()) {\n if (result.
length || result.length === 0) {\n result.forEach(function (node)
{\n node.addVisibilityBlock();\n }\n
);\n } else {\n result.addVisibilityBlock();\n
}\n }\n return result;\n },\n\n doEval(context) {
\n let ruleset;\n let registry;\n const features = this.fea
tures && this.features.eval(context);\n\n if (this.options.isPlugin) {\n
if (this.root && this.root.eval) {\n try {\n
this.root.eval(context);\n }\n catch (e)
{\n e.message = 'Plugin error during evaluation';\n
throw new LessError(e, this.root.imports, this.root.filename);\n
}\n }\n registry = context.frames[0] && context
.frames[0].functionRegistry;\n if ( registry && this.root && this.roo
t.functions ) {\n registry.addMultiple( this.root.functions );\n
}\n\n return [];\n }\n\n if (this.skip) {\n
if (typeof this.skip === 'function') {\n this.skip = t
his.skip();\n }\n if (this.skip) {\n return
[];\n }\n }\n if (this.options.inline) {\n
const contents = new Anonymous(this.root, 0,\n {\n
filename: this.importedFilename,\n reference: this.path.
_fileInfo && this.path._fileInfo.reference\n }, true, true);\n\n
return this.features ? new Media([contents], this.features.value) : [
contents];\n } else if (this.css) {\n const newImport = new Im
port(this.evalPath(context), features, this.options, this._index);\n
if (!newImport.css && this.error) {\n throw this.error;\n
}\n return newImport;\n } else if (this.root) {\n
ruleset = new Ruleset(null, utils.copyArray(this.root.rules));\n r
uleset.evalImports(context);\n\n return this.features ? new Media(rul
eset.rules, this.features.value) : ruleset.rules;\n } else {\n
return [];\n }\n }\n});\n\nexport default Import;\n","import Node fro
m './node';\nimport Variable from './variable';\n\nconst JsEvalNode = function()
{};\n\nJsEvalNode.prototype = Object.assign(new Node(), {\n evaluateJavaScri
pt(expression, context) {\n let result;\n const that = this;\n
const evalContext = {};\n\n if (!context.javascriptEnabled) {\n
throw { message: 'Inline JavaScript is not enabled. Is it set in your opti
ons?',\n filename: this.fileInfo().filename,\n ind
ex: this.getIndex() };\n }\n\n expression = expression.replace(/@\
\{([\\w-]+)\\}/g, function (_, name) {\n return that.jsify(new Variab
le(`@${name}`, that.getIndex(), that.fileInfo()).eval(context));\n });\n\
n try {\n expression = new Function(`return (${expression})`);
\n } catch (e) {\n throw { message: `JavaScript evaluation err
or: ${e.message} from \\`${expression}\\`` ,\n filename: this.fil
eInfo().filename,\n index: this.getIndex() };\n }\n\n
const variables = context.frames[0].variables();\n for (const k in var
iables) {\n if (variables.hasOwnProperty(k)) {\n /* js
hint loopfunc:true */\n evalContext[k.slice(1)] = {\n
value: variables[k].value,\n toJS: function () {\n
return this.value.eval(context).toCSS();\n
}\n };\n }\n }\n\n try {\n
result = expression.call(evalContext);\n } catch (e) {\n thro
w { message: `JavaScript evaluation error: '${e.name}: ${e.message.replace(/[\"]
/g, '\\'')}'` ,\n filename: this.fileInfo().filename,\n
index: this.getIndex() };\n }\n return result;\n },\n\n
jsify(obj) {\n if (Array.isArray(obj.value) && (obj.value.length > 1))
{\n return `[${obj.value.map(function (v) { return v.toCSS(); }).join
(', ')}]`;\n } else {\n return obj.toCSS();\n }\n }\
n});\n\nexport default JsEvalNode;\n","import JsEvalNode from './js-eval-node';\
nimport Dimension from './dimension';\nimport Quoted from './quoted';\nimport An
onymous from './anonymous';\n\nconst JavaScript = function(string, escaped, inde
x, currentFileInfo) {\n this.escaped = escaped;\n this.expression = string
;\n this._index = index;\n this._fileInfo = currentFileInfo;\n}\n\nJavaScr
ipt.prototype = Object.assign(new JsEvalNode(), {\n type: 'JavaScript',\n\n
eval(context) {\n const result = this.evaluateJavaScript(this.expressio
n, context);\n const type = typeof result;\n\n if (type === 'numbe
r' && !isNaN(result)) {\n return new Dimension(result);\n } el
se if (type === 'string') {\n return new Quoted(`\"${result}\"`, resu
lt, this.escaped, this._index);\n } else if (Array.isArray(result)) {\n
return new Anonymous(result.join(', '));\n } else {\n
return new Anonymous(result);\n }\n }\n});\n\nexport default JavaScr
ipt;\n","import Node from './node';\n\nconst Assignment = function(key, val) {\n
this.key = key;\n this.value = val;\n}\n\nAssignment.prototype = Object.a
ssign(new Node(), {\n type: 'Assignment',\n\n accept(visitor) {\n t
his.value = visitor.visit(this.value);\n },\n\n eval(context) {\n i
f (this.value.eval) {\n return new Assignment(this.key, this.value.ev
al(context));\n }\n return this;\n },\n\n genCSS(context, ou
tput) {\n output.add(`${this.key}=`);\n if (this.value.genCSS) {\n
this.value.genCSS(context, output);\n } else {\n o
utput.add(this.value);\n }\n }\n});\n\nexport default Assignment;\n","
import Node from './node';\n\nconst Condition = function(op, l, r, i, negate) {\
n this.op = op.trim();\n this.lvalue = l;\n this.rvalue = r;\n this.
_index = i;\n this.negate = negate;\n};\n\nCondition.prototype = Object.assig
n(new Node(), {\n type: 'Condition',\n\n accept(visitor) {\n this.l
value = visitor.visit(this.lvalue);\n this.rvalue = visitor.visit(this.rv
alue);\n },\n\n eval(context) {\n const result = (function (op, a,
b) {\n switch (op) {\n case 'and': return a && b;\n
case 'or': return a || b;\n default:\n
switch (Node.compare(a, b)) {\n case -1:\n
return op === '<' || op === '=<' || op === '<=';\n
case 0:\n return op === '=' || op === '
>=' || op === '=<' || op === '<=';\n case 1:\n
return op === '>' || op === '>=';\n defa
ult:\n return false;\n }\n
}\n })(this.op, this.lvalue.eval(context), this.rvalue.eval(context))
;\n\n return this.negate ? !result : result;\n }\n});\n\nexport defaul
t Condition;\n","import Node from './node';\n\nconst UnicodeDescriptor = functio
n(value) {\n this.value = value;\n}\n\nUnicodeDescriptor.prototype = Object.a
ssign(new Node(), {\n type: 'UnicodeDescriptor'\n})\n\nexport default Unicode
Descriptor;\n","import Node from './node';\nimport Operation from './operation';
\nimport Dimension from './dimension';\n\nconst Negative = function(node) {\n
this.value = node;\n};\n\nNegative.prototype = Object.assign(new Node(), {\n
type: 'Negative',\n\n genCSS(context, output) {\n output.add('-');\n
this.value.genCSS(context, output);\n },\n\n eval(context) {\n
if (context.isMathOn()) {\n return (new Operation('*', [new Dimens
ion(-1), this.value])).eval(context);\n }\n return new Negative(th
is.value.eval(context));\n }\n});\n\nexport default Negative;\n","import Node
from './node';\nimport Selector from './selector';\n\nconst Extend = function(s
elector, option, index, currentFileInfo, visibilityInfo) {\n this.selector =
selector;\n this.option = option;\n this.object_id = Extend.next_id++;\n
this.parent_ids = [this.object_id];\n this._index = index;\n this._fileI
nfo = currentFileInfo;\n this.copyVisibilityInfo(visibilityInfo);\n this.a
llowRoot = true;\n\n switch (option) {\n case 'all':\n this
.allowBefore = true;\n this.allowAfter = true;\n break;\n
default:\n this.allowBefore = false;\n this.allowAf
ter = false;\n break;\n }\n this.setParent(this.selector, this)
;\n};\n\nExtend.prototype = Object.assign(new Node(), {\n type: 'Extend',\n\n
accept(visitor) {\n this.selector = visitor.visit(this.selector);\n
},\n\n eval(context) {\n return new Extend(this.selector.eval(contex
t), this.option, this.getIndex(), this.fileInfo(), this.visibilityInfo());\n
},\n\n clone(context) {\n return new Extend(this.selector, this.option
, this.getIndex(), this.fileInfo(), this.visibilityInfo());\n },\n\n // it
concatenates (joins) all selectors in selector array\n findSelfSelectors(sel
ectors) {\n let selfElements = [], i, selectorElements;\n\n for (i
= 0; i < selectors.length; i++) {\n selectorElements = selectors[i].
elements;\n // duplicate the logic in genCSS function inside the sele
ctor node.\n // future TODO - move both logics into the selector join
er visitor\n if (i > 0 && selectorElements.length && selectorElements
[0].combinator.value === '') {\n selectorElements[0].combinator.v
alue = ' ';\n }\n selfElements = selfElements.concat(selec
tors[i].elements);\n }\n\n this.selfSelectors = [new Selector(self
Elements)];\n this.selfSelectors[0].copyVisibilityInfo(this.visibilityInf
o());\n }\n});\n\nExtend.next_id = 0;\nexport default Extend;\n","import Node
from './node';\nimport Variable from './variable';\nimport Ruleset from './rule
set';\nimport DetachedRuleset from './detached-ruleset';\nimport LessError from
'../less-error';\n\nconst VariableCall = function(variable, index, currentFileIn
fo) {\n this.variable = variable;\n this._index = index;\n this._fileIn
fo = currentFileInfo;\n this.allowRoot = true;\n};\n\nVariableCall.prototype
= Object.assign(new Node(), {\n type: 'VariableCall',\n\n eval(context) {\
n let rules;\n let detachedRuleset = new Variable(this.variable, t
his.getIndex(), this.fileInfo()).eval(context);\n const error = new LessE
rror({message: `Could not evaluate variable call ${this.variable}`});\n\n
if (!detachedRuleset.ruleset) {\n if (detachedRuleset.rules) {\n
rules = detachedRuleset;\n }\n else if (Array.
isArray(detachedRuleset)) {\n rules = new Ruleset('', detachedRul
eset);\n }\n else if (Array.isArray(detachedRuleset.value)
) {\n rules = new Ruleset('', detachedRuleset.value);\n
}\n else {\n throw error;\n }\n
detachedRuleset = new DetachedRuleset(rules);\n }\n\n if (detach
edRuleset.ruleset) {\n return detachedRuleset.callEval(context);\n
}\n throw error;\n }\n});\n\nexport default VariableCall;\n","imp
ort Node from './node';\nimport Variable from './variable';\nimport Ruleset from
'./ruleset';\nimport Selector from './selector';\n\nconst NamespaceValue = func
tion(ruleCall, lookups, index, fileInfo) {\n this.value = ruleCall;\n this
.lookups = lookups;\n this._index = index;\n this._fileInfo = fileInfo;\n}
;\n\nNamespaceValue.prototype = Object.assign(new Node(), {\n type: 'Namespac
eValue',\n\n eval(context) {\n let i, j, name, rules = this.value.eval
(context);\n \n for (i = 0; i < this.lookups.length; i++) {\n
name = this.lookups[i];\n\n /**\n * Eval'd DRs ret
urn rulesets.\n * Eval'd mixins return rules, so let's make a rulese
t if we need it.\n * We need to do this because of late parsing of v
alues\n */\n if (Array.isArray(rules)) {\n
rules = new Ruleset([new Selector()], rules);\n }\n\n if
(name === '') {\n rules = rules.lastDeclaration();\n }
\n else if (name.charAt(0) === '@') {\n if (name.charA
t(1) === '@') {\n name = `@${new Variable(name.substr(1)).eva
l(context).value}`;\n }\n if (rules.variables) {\n
rules = rules.variable(name);\n }\n
\n if (!rules) {\n throw { type: 'Name',
\n message: `variable ${name} not found`,\n
filename: this.fileInfo().filename,\n index: th
is.getIndex() };\n }\n }\n else {\n
if (name.substring(0, 2) === '$@') {\n name = `$${new
Variable(name.substr(1)).eval(context).value}`;\n }\n
else {\n name = name.charAt(0) === '$' ? name : `$${name
}`;\n }\n if (rules.properties) {\n
rules = rules.property(name);\n }\n \n
if (!rules) {\n throw { type: 'Name',\n
message: `property \"${name.substr(1)}\" not found`,\n
filename: this.fileInfo().filename,\n index: this.ge
tIndex() };\n }\n // Properties are an array of va
lues, since a ruleset can have multiple props.\n // We pick the l
ast one (the \"cascaded\" value)\n rules = rules[rules.length - 1
];\n }\n\n if (rules.value) {\n rules = rul
es.eval(context).value;\n }\n if (rules.ruleset) {\n
rules = rules.ruleset.eval(context);\n }\n }\n
return rules;\n }\n});\n\nexport default NamespaceValue;\n","import Selecto
r from './selector';\nimport Element from './element';\nimport Ruleset from './r
uleset';\nimport Declaration from './declaration';\nimport DetachedRuleset from
'./detached-ruleset';\nimport Expression from './expression';\nimport contexts f
rom '../contexts';\nimport * as utils from '../utils';\n\nconst Definition = fun
ction(name, params, rules, condition, variadic, frames, visibilityInfo) {\n t
his.name = name || 'anonymous mixin';\n this.selectors = [new Selector([new E
lement(null, name, false, this._index, this._fileInfo)])];\n this.params = pa
rams;\n this.condition = condition;\n this.variadic = variadic;\n this.
arity = params.length;\n this.rules = rules;\n this._lookups = {};\n co
nst optionalParameters = [];\n this.required = params.reduce(function (count,
p) {\n if (!p.name || (p.name && !p.value)) {\n return count
+ 1;\n }\n else {\n optionalParameters.push(p.name);\n
return count;\n }\n }, 0);\n this.optionalParameters = o
ptionalParameters;\n this.frames = frames;\n this.copyVisibilityInfo(visib
ilityInfo);\n this.allowRoot = true;\n}\n\nDefinition.prototype = Object.assi
gn(new Ruleset(), {\n type: 'MixinDefinition',\n evalFirst: true,\n\n a
ccept(visitor) {\n if (this.params && this.params.length) {\n
this.params = visitor.visitArray(this.params);\n }\n this.rules =
visitor.visitArray(this.rules);\n if (this.condition) {\n this
.condition = visitor.visit(this.condition);\n }\n },\n\n evalParams
(context, mixinEnv, args, evaldArguments) {\n /* jshint boss:true */\n
const frame = new Ruleset(null, null);\n\n let varargs;\n let
arg;\n const params = utils.copyArray(this.params);\n let i;\n
let j;\n let val;\n let name;\n let isNamedFound;\n
let argIndex;\n let argsLength = 0;\n\n if (mixinEnv.frames &
& mixinEnv.frames[0] && mixinEnv.frames[0].functionRegistry) {\n fram
e.functionRegistry = mixinEnv.frames[0].functionRegistry.inherit();\n }\n
mixinEnv = new contexts.Eval(mixinEnv, [frame].concat(mixinEnv.frames));
\n\n if (args) {\n args = utils.copyArray(args);\n
argsLength = args.length;\n\n for (i = 0; i < argsLength; i++) {\n
arg = args[i];\n if (name = (arg && arg.name)) {\n
isNamedFound = false;\n for (j = 0; j < par
ams.length; j++) {\n if (!evaldArguments[j] && name === p
arams[j].name) {\n evaldArguments[j] = arg.value.eval
(context);\n frame.prependRule(new Declaration(name,
arg.value.eval(context)));\n isNamedFound = true;\n
break;\n }\n
}\n if (isNamedFound) {\n args.splice
(i, 1);\n i--;\n continue;\n
} else {\n throw { type: 'Runtime', message
: `Named argument for ${this.name} ${args[i].name} not found` };\n
}\n }\n }\n }\n argIndex = 0;\n
for (i = 0; i < params.length; i++) {\n if (evaldArguments[i]) {
continue; }\n\n arg = args && args[argIndex];\n\n if (nam
e = params[i].name) {\n if (params[i].variadic) {\n
varargs = [];\n for (j = argIndex; j < argsLength; j++)
{\n varargs.push(args[j].value.eval(context));\n
}\n frame.prependRule(new Declaration(name, new E
xpression(varargs).eval(context)));\n } else {\n
val = arg && arg.value;\n if (val) {\n
// This was a mixin call, pass in a detached ruleset of it's eval'd rules\n
if (Array.isArray(val)) {\n va
l = new DetachedRuleset(new Ruleset('', val));\n }\n
else {\n val = val.eval(context);\
n }\n } else if (params[i].value) {\n
val = params[i].value.eval(mixinEnv);\n
frame.resetCache();\n } else {\n
throw { type: 'Runtime', message: `wrong number of arguments for ${this.name} (
${argsLength} for ${this.arity})` };\n }\n\n
frame.prependRule(new Declaration(name, val));\n evaldArgu
ments[i] = val;\n }\n }\n\n if (params[i].v
ariadic && args) {\n for (j = argIndex; j < argsLength; j++) {\n
evaldArguments[j] = args[j].value.eval(context);\n
}\n }\n argIndex++;\n }\n\n return fram
e;\n },\n\n makeImportant() {\n const rules = !this.rules ? this.ru
les : this.rules.map(function (r) {\n if (r.makeImportant) {\n
return r.makeImportant(true);\n } else {\n re
turn r;\n }\n });\n const result = new Definition(this.
name, this.params, rules, this.condition, this.variadic, this.frames);\n
return result;\n },\n\n eval(context) {\n return new Definition(thi
s.name, this.params, this.rules, this.condition, this.variadic, this.frames || u
tils.copyArray(context.frames));\n },\n\n evalCall(context, args, importan
t) {\n const _arguments = [];\n const mixinFrames = this.frames ?
this.frames.concat(context.frames) : context.frames;\n const frame = this
.evalParams(context, new contexts.Eval(context, mixinFrames), args, _arguments);
\n let rules;\n let ruleset;\n\n frame.prependRule(new Decl
aration('@arguments', new Expression(_arguments).eval(context)));\n\n rul
es = utils.copyArray(this.rules);\n\n ruleset = new Ruleset(null, rules);
\n ruleset.originalRuleset = this;\n ruleset = ruleset.eval(new co
ntexts.Eval(context, [this, frame].concat(mixinFrames)));\n if (important
) {\n ruleset = ruleset.makeImportant();\n }\n return r
uleset;\n },\n\n matchCondition(args, context) {\n if (this.conditi
on && !this.condition.eval(\n new contexts.Eval(context,\n
[this.evalParams(context, /* the parameter variables */\n
new contexts.Eval(context, this.frames ? this.frames.concat(context.frames) :
context.frames), args, [])]\n .concat(this.frames || []) // t
he parent namespace/mixin frames\n .concat(context.frames))))
{ // the current environment frames\n return false;\n }\n
return true;\n },\n\n matchArgs(args, context) {\n const allArg
sCnt = (args && args.length) || 0;\n let len;\n const optionalPara
meters = this.optionalParameters;\n const requiredArgsCnt = !args ? 0 : a
rgs.reduce(function (count, p) {\n if (optionalParameters.indexOf(p.n
ame) < 0) {\n return count + 1;\n } else {\n
return count;\n }\n }, 0);\n\n if (!this.variadic
) {\n if (requiredArgsCnt < this.required) {\n return
false;\n }\n if (allArgsCnt > this.params.length) {\n
return false;\n }\n } else {\n if (requi
redArgsCnt < (this.required - 1)) {\n return false;\n
}\n }\n\n // check patterns\n len = Math.min(requiredArgsCn
t, this.arity);\n\n for (let i = 0; i < len; i++) {\n if (!thi
s.params[i].name && !this.params[i].variadic) {\n if (args[i].val
ue.eval(context).toCSS() != this.params[i].value.eval(context).toCSS()) {\n
return false;\n }\n }\n }\n
return true;\n }\n});\n\nexport default Definition;\n","import Node from '
./node';\nimport Selector from './selector';\nimport MixinDefinition from './mix
in-definition';\nimport defaultFunc from '../functions/default';\n\nconst MixinC
all = function(elements, args, index, currentFileInfo, important) {\n this.se
lector = new Selector(elements);\n this.arguments = args || [];\n this._in
dex = index;\n this._fileInfo = currentFileInfo;\n this.important = import
ant;\n this.allowRoot = true;\n this.setParent(this.selector, this);\n};\n
\nMixinCall.prototype = Object.assign(new Node(), {\n type: 'MixinCall',\n\n
accept(visitor) {\n if (this.selector) {\n this.selector =
visitor.visit(this.selector);\n }\n if (this.arguments.length) {\n
this.arguments = visitor.visitArray(this.arguments);\n }\n
},\n\n eval(context) {\n let mixins;\n let mixin;\n let
mixinPath;\n const args = [];\n let arg;\n let argValue;\n
const rules = [];\n let match = false;\n let i;\n l
et m;\n let f;\n let isRecursive;\n let isOneFound;\n
const candidates = [];\n let candidate;\n const conditionResult
= [];\n let defaultResult;\n const defFalseEitherCase = -1;\n
const defNone = 0;\n const defTrue = 1;\n const defFalse = 2;\n
let count;\n let originalRuleset;\n let noArgumentsFilter;
\n\n this.selector = this.selector.eval(context);\n\n function cal
cDefGroup(mixin, mixinPath) {\n let f, p, namespace;\n\n f
or (f = 0; f < 2; f++) {\n conditionResult[f] = true;\n
defaultFunc.value(f);\n for (p = 0; p < mixinPath.length &&
conditionResult[f]; p++) {\n namespace = mixinPath[p];\n
if (namespace.matchCondition) {\n conditi
onResult[f] = conditionResult[f] && namespace.matchCondition(null, context);\n
}\n }\n if (mixin.matchCondition
) {\n conditionResult[f] = conditionResult[f] && mixin.matchC
ondition(args, context);\n }\n }\n if (cond
itionResult[0] || conditionResult[1]) {\n if (conditionResult[0]
!= conditionResult[1]) {\n return conditionResult[1] ?\n
defTrue : defFalse;\n }\n\n ret
urn defNone;\n }\n return defFalseEitherCase;\n }\n
\n for (i = 0; i < this.arguments.length; i++) {\n arg = this.
arguments[i];\n argValue = arg.value.eval(context);\n if (
arg.expand && Array.isArray(argValue.value)) {\n argValue = argVa
lue.value;\n for (m = 0; m < argValue.length; m++) {\n
args.push({value: argValue[m]});\n }\n } else
{\n args.push({name: arg.name, value: argValue});\n }
\n }\n\n noArgumentsFilter = function(rule) {return rule.matchArgs
(null, context);};\n\n for (i = 0; i < context.frames.length; i++) {\n
if ((mixins = context.frames[i].find(this.selector, null, noArgumentsFi
lter)).length > 0) {\n isOneFound = true;\n\n // T
o make `default()` function independent of definition order we have two \"subpas
ses\" here.\n // At first we evaluate each guard *twice* (with `d
efault() == true` and `default() == false`),\n // and build candi
date list with corresponding flags. Then, when we know all possible matches,\n
// we make a final decision.\n\n for (m = 0; m < mi
xins.length; m++) {\n mixin = mixins[m].rule;\n
mixinPath = mixins[m].path;\n isRecursive = false;\n
for (f = 0; f < context.frames.length; f++) {\n
if ((!(mixin instanceof MixinDefinition)) && mixin === (context.frames[f
].originalRuleset || context.frames[f])) {\n isRecurs
ive = true;\n break;\n }\n
}\n if (isRecursive) {\n
continue;\n }\n\n if (mixin.matchArgs(a
rgs, context)) {\n candidate = {mixin, group: calcDefGrou
p(mixin, mixinPath)};\n\n if (candidate.group !== defFals
eEitherCase) {\n candidates.push(candidate);\n
}\n\n match = true;\n
}\n }\n\n defaultFunc.reset();\n\n
count = [0, 0, 0];\n for (m = 0; m < candidates.length; m++) {\n
count[candidates[m].group]++;\n }\n\n
if (count[defNone] > 0) {\n defaultResult = defFalse;
\n } else {\n defaultResult = defTrue;\n
if ((count[defTrue] + count[defFalse]) > 1) {\n
throw { type: 'Runtime',\n message: `Ambiguous u
se of \\`default()\\` found when matching for \\`${this.format(args)}\\``,\n
index: this.getIndex(), filename: this.fileInfo().filena
me };\n }\n }\n\n for (m = 0; m
< candidates.length; m++) {\n candidate = candidates[m].grou
p;\n if ((candidate === defNone) || (candidate === defaultRes
ult)) {\n try {\n mixin = cand
idates[m].mixin;\n if (!(mixin instanceof MixinDefini
tion)) {\n originalRuleset = mixin.originalRulese
t || mixin;\n mixin = new MixinDefinition('', [],
mixin.rules, null, false, null, originalRuleset.visibilityInfo());\n
mixin.originalRuleset = originalRuleset;\n
}\n const newRules = mixin.evalCall(contex
t, args, this.important).rules;\n this._setVisibility
ToReplacement(newRules);\n Array.prototype.push.apply
(rules, newRules);\n } catch (e) {\n
throw { message: e.message, index: this.getIndex(), filename: this.fileIn
fo().filename, stack: e.stack };\n }\n
}\n }\n\n if (match) {\n retur
n rules;\n }\n }\n }\n if (isOneFound) {
\n throw { type: 'Runtime',\n message: `No matching
definition was found for \\`${this.format(args)}\\``,\n index:
this.getIndex(), filename: this.fileInfo().filename };\n } else {\n
throw { type: 'Name',\n message: `${this.selector.toCSS
().trim()} is undefined`,\n index: this.getIndex(), filename: t
his.fileInfo().filename };\n }\n },\n\n _setVisibilityToReplacement
(replacement) {\n let i, rule;\n if (this.blocksVisibility()) {\n
for (i = 0; i < replacement.length; i++) {\n rule = re
placement[i];\n rule.addVisibilityBlock();\n }\n
}\n },\n\n format(args) {\n return `${this.selector.toCSS().trim(
)}(${args ? args.map(function (a) {\n let argValue = '';\n
if (a.name) {\n argValue += `${a.name}:`;\n }\n
if (a.value.toCSS) {\n argValue += a.value.toCSS();\n
} else {\n argValue += '???';\n }\n r
eturn argValue;\n }).join(', ') : ''})`;\n }\n});\n\nexport default Mi
xinCall;\n","import Node from './node';\nimport Color from './color';\nimport At
Rule from './atrule';\nimport DetachedRuleset from './detached-ruleset';\nimport
Operation from './operation';\nimport Dimension from './dimension';\nimport Uni
t from './unit';\nimport Keyword from './keyword';\nimport Variable from './vari
able';\nimport Property from './property';\nimport Ruleset from './ruleset';\nim
port Element from './element';\nimport Attribute from './attribute';\nimport Com
binator from './combinator';\nimport Selector from './selector';\nimport Quoted
from './quoted';\nimport Expression from './expression';\nimport Declaration fro
m './declaration';\nimport Call from './call';\nimport URL from './url';\nimport
Import from './import';\nimport Comment from './comment';\nimport Anonymous fro
m './anonymous';\nimport Value from './value';\nimport JavaScript from './javasc
ript';\nimport Assignment from './assignment';\nimport Condition from './conditi
on';\nimport Paren from './paren';\nimport Media from './media';\nimport Unicode
Descriptor from './unicode-descriptor';\nimport Negative from './negative';\nimp
ort Extend from './extend';\nimport VariableCall from './variable-call';\nimport
NamespaceValue from './namespace-value';\n\n// mixins\nimport MixinCall from '.
/mixin-call';\nimport MixinDefinition from './mixin-definition';\n\nexport defau
lt {\n Node, Color, AtRule, DetachedRuleset, Operation,\n Dimension, Unit,
Keyword, Variable, Property,\n Ruleset, Element, Attribute, Combinator, Sele
ctor,\n Quoted, Expression, Declaration, Call, URL, Import,\n Comment, Ano
nymous, Value, JavaScript, Assignment,\n Condition, Paren, Media, UnicodeDesc
riptor, Negative,\n Extend, VariableCall, NamespaceValue,\n mixin: {\n
Call: MixinCall,\n Definition: MixinDefinition\n }\n};","class Abs
tractFileManager {\n getPath(filename) {\n let j = filename.lastIndexO
f('?');\n if (j > 0) {\n filename = filename.slice(0, j);\n
}\n j = filename.lastIndexOf('/');\n if (j < 0) {\n
j = filename.lastIndexOf('\\\\');\n }\n if (j < 0) {\n
return '';\n }\n return filename.slice(0, j + 1);\n }\n\n
tryAppendExtension(path, ext) {\n return /(\\.[a-z]*$)|([\\?;].*)$/.test(
path) ? path : path + ext;\n }\n\n tryAppendLessExtension(path) {\n
return this.tryAppendExtension(path, '.less');\n }\n\n supportsSync() {\n
return false;\n }\n\n alwaysMakePathsAbsolute() {\n return
false;\n }\n\n isPathAbsolute(filename) {\n return (/^(?:[a-z-]+:|\
\/|\\\\|#)/i).test(filename);\n }\n\n // TODO: pull out / replace?\n jo
in(basePath, laterPath) {\n if (!basePath) {\n return laterPat
h;\n }\n return basePath + laterPath;\n }\n\n pathDiff(url,
baseUrl) {\n // diff between two paths to create a relative path\n\n
const urlParts = this.extractUrlParts(url);\n\n const baseUrlParts = t
his.extractUrlParts(baseUrl);\n let i;\n let max;\n let url
Directories;\n let baseUrlDirectories;\n let diff = '';\n i
f (urlParts.hostPart !== baseUrlParts.hostPart) {\n return '';\n
}\n max = Math.max(baseUrlParts.directories.length, urlParts.directori
es.length);\n for (i = 0; i < max; i++) {\n if (baseUrlParts.d
irectories[i] !== urlParts.directories[i]) { break; }\n }\n baseUr
lDirectories = baseUrlParts.directories.slice(i);\n urlDirectories = urlP
arts.directories.slice(i);\n for (i = 0; i < baseUrlDirectories.length -
1; i++) {\n diff += '../';\n }\n for (i = 0; i < urlDir
ectories.length - 1; i++) {\n diff += `${urlDirectories[i]}/`;\n
}\n return diff;\n }\n\n // helper function, not part of API\n
extractUrlParts(url, baseUrl) {\n // urlParts[1] = protocol://hostname/
OR /\n // urlParts[2] = / if path relative to host base\n // urlP
arts[3] = directories\n // urlParts[4] = filename\n // urlParts[5]
= parameters\n\n const urlPartsRegex = /^((?:[a-z-]+:)?\\/{2}(?:[^\\/\\?
#]*\\/)|([\\/\\\\]))?((?:[^\\/\\\\\\?#]*[\\/\\\\])*)([^\\/\\\\\\?#]*)([#\\?].*)?
$/i;\n\n const urlParts = url.match(urlPartsRegex);\n const return
er = {};\n let rawDirectories = [];\n const directories = [];\n
let i;\n let baseUrlParts;\n\n if (!urlParts) {\n
throw new Error(`Could not parse sheet href - '${url}'`);\n }\n\n
// Stylesheets in IE don't always return the full path\n if (baseUrl && (
!urlParts[1] || urlParts[2])) {\n baseUrlParts = baseUrl.match(urlPar
tsRegex);\n if (!baseUrlParts) {\n throw new Error(`Co
uld not parse page url - '${baseUrl}'`);\n }\n urlParts[1]
= urlParts[1] || baseUrlParts[1] || '';\n if (!urlParts[2]) {\n
urlParts[3] = baseUrlParts[3] + urlParts[3];\n }\n
}\n\n if (urlParts[3]) {\n rawDirectories = urlParts[3].replac
e(/\\\\/g, '/').split('/');\n\n // collapse '..' and skip '.'\n
for (i = 0; i < rawDirectories.length; i++) {\n\n if (rawDi
rectories[i] === '..') {\n directories.pop();\n
}\n else if (rawDirectories[i] !== '.') {\n
directories.push(rawDirectories[i]);\n }\n \n
}\n }\n\n returner.hostPart = urlParts[1];\n returner.di
rectories = directories;\n returner.rawPath = (urlParts[1] || '') + rawDi
rectories.join('/');\n returner.path = (urlParts[1] || '') + directories.
join('/');\n returner.filename = urlParts[4];\n returner.fileUrl =
returner.path + (urlParts[4] || '');\n returner.url = returner.fileUrl +
(urlParts[5] || '');\n return returner;\n }\n}\n\nexport default Abst
ractFileManager;\n","import functionRegistry from '../functions/function-registr
y';\nimport LessError from '../less-error';\n\nclass AbstractPluginLoader {\n
constructor() {\n // Implemented by Node.js plugin loader\n this.
require = function() {\n return null;\n }\n }\n\n evalPl
ugin(contents, context, imports, pluginOptions, fileInfo) {\n\n let loade
r, registry, pluginObj, localModule, pluginManager, filename, result;\n\n
pluginManager = context.pluginManager;\n\n if (fileInfo) {\n
if (typeof fileInfo === 'string') {\n filename = fileInfo;\n
}\n else {\n filename = fileInfo.filename;\n
}\n }\n const shortname = (new this.less.FileManager()).e
xtractUrlParts(filename).filename;\n\n if (filename) {\n plugi
nObj = pluginManager.get(filename);\n\n if (pluginObj) {\n
result = this.trySetOptions(pluginObj, filename, shortname, pluginOptions);
\n if (result) {\n return result;\n
}\n try {\n if (pluginObj.use) {\n
pluginObj.use.call(this.context, pluginObj);\n
}\n }\n catch (e) {\n e.mess
age = e.message || 'Error during @plugin call';\n return new
LessError(e, imports, filename);\n }\n return plug
inObj;\n }\n }\n localModule = {\n exports:
{},\n pluginManager,\n fileInfo\n };\n regis
try = functionRegistry.create();\n\n const registerPlugin = function(obj)
{\n pluginObj = obj;\n };\n\n try {\n loade
r = new Function('module', 'require', 'registerPlugin', 'functions', 'tree', 'le
ss', 'fileInfo', contents);\n loader(localModule, this.require(filena
me), registerPlugin, registry, this.less.tree, this.less, fileInfo);\n }\
n catch (e) {\n return new LessError(e, imports, filename);\n
}\n\n if (!pluginObj) {\n pluginObj = localModule.expor
ts;\n }\n pluginObj = this.validatePlugin(pluginObj, filename, sho
rtname);\n\n if (pluginObj instanceof LessError) {\n return pl
uginObj;\n }\n\n if (pluginObj) {\n pluginObj.imports =
imports;\n pluginObj.filename = filename;\n\n // For < 3.
x (or unspecified minVersion) - setOptions() before install()\n if (!
pluginObj.minVersion || this.compareVersion('3.0.0', pluginObj.minVersion) < 0)
{\n result = this.trySetOptions(pluginObj, filename, shortname, p
luginOptions);\n\n if (result) {\n return resu
lt;\n }\n }\n\n // Run on first load\n
pluginManager.addPlugin(pluginObj, fileInfo.filename, registry);\n
pluginObj.functions = registry.getLocalFunctions();\n\n // Need
to call setOptions again because the pluginObj might have functions\n
result = this.trySetOptions(pluginObj, filename, shortname, pluginOptions);\n
if (result) {\n return result;\n }\n\n
// Run every @plugin call\n try {\n if (pluginOb
j.use) {\n pluginObj.use.call(this.context, pluginObj);\n
}\n }\n catch (e) {\n e.message
= e.message || 'Error during @plugin call';\n return new LessErr
or(e, imports, filename);\n }\n\n }\n else {\n
return new LessError({ message: 'Not a valid plugin' }, imports, filename);\n
}\n\n return pluginObj;\n\n }\n\n trySetOptions(plugin, fil
ename, name, options) {\n if (options && !plugin.setOptions) {\n
return new LessError({\n message: `Options have been provided
but the plugin ${name} does not support any options.`\n });\n
}\n try {\n plugin.setOptions && plugin.setOptions(options);\n
}\n catch (e) {\n return new LessError(e);\n }\
n }\n\n validatePlugin(plugin, filename, name) {\n if (plugin) {\n
// support plugins being a function\n // so that the plugi
n can be more usable programmatically\n if (typeof plugin === 'functi
on') {\n plugin = new plugin();\n }\n\n if
(plugin.minVersion) {\n if (this.compareVersion(plugin.minVersion
, this.less.version) < 0) {\n return new LessError({\n
message: `Plugin ${name} requires version ${this.versionToStrin
g(plugin.minVersion)}`\n });\n }\n
}\n return plugin;\n }\n return null;\n }\n\n com
pareVersion(aVersion, bVersion) {\n if (typeof aVersion === 'string') {\n
aVersion = aVersion.match(/^(\\d+)\\.?(\\d+)?\\.?(\\d+)?/);\n
aVersion.shift();\n }\n for (let i = 0; i < aVersion.length;
i++) {\n if (aVersion[i] !== bVersion[i]) {\n return p
arseInt(aVersion[i]) > parseInt(bVersion[i]) ? -1 : 1;\n }\n }
\n return 0;\n }\n\n versionToString(version) {\n let versio
nString = '';\n for (let i = 0; i < version.length; i++) {\n v
ersionString += (versionString ? '.' : '') + version[i];\n }\n ret
urn versionString;\n }\n\n printUsage(plugins) {\n for (let i = 0;
i < plugins.length; i++) {\n const plugin = plugins[i];\n
if (plugin.printUsage) {\n plugin.printUsage();\n }\n
}\n }\n}\n\nexport default AbstractPluginLoader;\n\n","import tree fro
m '../tree';\n\nconst _visitArgs = { visitDeeper: true };\nlet _hasIndexed = fal
se;\n\nfunction _noop(node) {\n return node;\n}\n\nfunction indexNodeTypes(pa
rent, ticker) {\n // add .typeIndex to tree node types for lookup table\n
let key, child;\n for (key in parent) { \n /* eslint guard-for-in: 0 *
/\n child = parent[key];\n switch (typeof child) {\n ca
se 'function':\n // ignore bound functions directly on tree which
do not have a prototype\n // or aren't nodes\n if
(child.prototype && child.prototype.type) {\n child.prototyp
e.typeIndex = ticker++;\n }\n break;\n
case 'object':\n ticker = indexNodeTypes(child, ticker);\n
break;\n \n }\n }\n return ticker;\n}\n\nclass Visi
tor {\n constructor(implementation) {\n this._implementation = impleme
ntation;\n this._visitInCache = {};\n this._visitOutCache = {};\n\
n if (!_hasIndexed) {\n indexNodeTypes(tree, 1);\n
_hasIndexed = true;\n }\n }\n\n visit(node) {\n if (!node) {
\n return node;\n }\n\n const nodeTypeIndex = node.type
Index;\n if (!nodeTypeIndex) {\n // MixinCall args aren't a no
de type?\n if (node.value && node.value.typeIndex) {\n
this.visit(node.value);\n }\n return node;\n }\n\n
const impl = this._implementation;\n let func = this._visitInCach
e[nodeTypeIndex];\n let funcOut = this._visitOutCache[nodeTypeIndex];\n
const visitArgs = _visitArgs;\n let fnName;\n\n visitArgs.vi
sitDeeper = true;\n\n if (!func) {\n fnName = `visit${node.typ
e}`;\n func = impl[fnName] || _noop;\n funcOut = impl[`${f
nName}Out`] || _noop;\n this._visitInCache[nodeTypeIndex] = func;\n
this._visitOutCache[nodeTypeIndex] = funcOut;\n }\n\n if
(func !== _noop) {\n const newNode = func.call(impl, node, visitArgs
);\n if (node && impl.isReplacing) {\n node = newNode;
\n }\n }\n\n if (visitArgs.visitDeeper && node) {\n
if (node.length) {\n for (let i = 0, cnt = node.length; i
< cnt; i++) {\n if (node[i].accept) {\n
node[i].accept(this);\n }\n }\n
} else if (node.accept) {\n node.accept(this);\n }\n
}\n\n if (funcOut != _noop) {\n funcOut.call(impl, node)
;\n }\n\n return node;\n }\n\n visitArray(nodes, nonReplacin
g) {\n if (!nodes) {\n return nodes;\n }\n\n con
st cnt = nodes.length;\n let i;\n\n // Non-replacing\n if (
nonReplacing || !this._implementation.isReplacing) {\n for (i = 0; i
< cnt; i++) {\n this.visit(nodes[i]);\n }\n
return nodes;\n }\n\n // Replacing\n const out = [];\n
for (i = 0; i < cnt; i++) {\n const evald = this.visit(nodes[i]);
\n if (evald === undefined) { continue; }\n if (!evald.spl
ice) {\n out.push(evald);\n } else if (evald.length) {
\n this.flatten(evald, out);\n }\n }\n r
eturn out;\n }\n\n flatten(arr, out) {\n if (!out) {\n o
ut = [];\n }\n\n let cnt, i, item, nestedCnt, j, nestedItem;\n\n
for (i = 0, cnt = arr.length; i < cnt; i++) {\n item = arr[i];\
n if (item === undefined) {\n continue;\n }
\n if (!item.splice) {\n out.push(item);\n
continue;\n }\n\n for (j = 0, nestedCnt = item.length;
j < nestedCnt; j++) {\n nestedItem = item[j];\n i
f (nestedItem === undefined) {\n continue;\n }
\n if (!nestedItem.splice) {\n out.push(nested
Item);\n } else if (nestedItem.length) {\n thi
s.flatten(nestedItem, out);\n }\n }\n }\n\n
return out;\n }\n}\n\nexport default Visitor;\n","class ImportSequencer {
\n constructor(onSequencerEmpty) {\n this.imports = [];\n this.
variableImports = [];\n this._onSequencerEmpty = onSequencerEmpty;\n
this._currentDepth = 0;\n }\n\n addImport(callback) {\n const im
portSequencer = this,\n importItem = {\n callback,\n
args: null,\n isReady: false\n };\n
this.imports.push(importItem);\n return function() {\n impo
rtItem.args = Array.prototype.slice.call(arguments, 0);\n importItem.
isReady = true;\n importSequencer.tryRun();\n };\n }\n\n
addVariableImport(callback) {\n this.variableImports.push(callback);\n
}\n\n tryRun() {\n this._currentDepth++;\n try {\n
while (true) {\n while (this.imports.length > 0) {\n
const importItem = this.imports[0];\n if (!importItem
.isReady) {\n return;\n }\n
this.imports = this.imports.slice(1);\n importItem.c
allback.apply(null, importItem.args);\n }\n if (th
is.variableImports.length === 0) {\n break;\n
}\n const variableImport = this.variableImports[0];\n
this.variableImports = this.variableImports.slice(1);\n varia
bleImport();\n }\n } finally {\n this._currentDepth
--;\n }\n if (this._currentDepth === 0 && this._onSequencerEmpty)
{\n this._onSequencerEmpty();\n }\n }\n}\n\nexport default
ImportSequencer;\n","import contexts from '../contexts';\nimport Visitor from '.
/visitor';\nimport ImportSequencer from './import-sequencer';\nimport * as utils
from '../utils';\n\nconst ImportVisitor = function(importer, finish) {\n\n t
his._visitor = new Visitor(this);\n this._importer = importer;\n this._fin
ish = finish;\n this.context = new contexts.Eval();\n this.importCount = 0
;\n this.onceFileDetectionMap = {};\n this.recursionDetector = {};\n th
is._sequencer = new ImportSequencer(this._onSequencerEmpty.bind(this));\n};\n\nI
mportVisitor.prototype = {\n isReplacing: false,\n run: function (root) {\
n try {\n // process the contents\n this._visitor.v
isit(root);\n }\n catch (e) {\n this.error = e;\n
}\n\n this.isFinished = true;\n this._sequencer.tryRun();\n }
,\n _onSequencerEmpty: function() {\n if (!this.isFinished) {\n
return;\n }\n this._finish(this.error);\n },\n visitImp
ort: function (importNode, visitArgs) {\n const inlineCSS = importNode.op
tions.inline;\n\n if (!importNode.css || inlineCSS) {\n\n cons
t context = new contexts.Eval(this.context, utils.copyArray(this.context.frames)
);\n const importParent = context.frames[0];\n\n this.impo
rtCount++;\n if (importNode.isVariableImport()) {\n th
is._sequencer.addVariableImport(this.processImportNode.bind(this, importNode, co
ntext, importParent));\n } else {\n this.processImport
Node(importNode, context, importParent);\n }\n }\n visi
tArgs.visitDeeper = false;\n },\n processImportNode: function(importNode,
context, importParent) {\n let evaldImportNode;\n const inlineCSS
= importNode.options.inline;\n\n try {\n evaldImportNode = imp
ortNode.evalForImport(context);\n } catch (e) {\n if (!e.filen
ame) { e.index = importNode.getIndex(); e.filename = importNode.fileInfo().filen
ame; }\n // attempt to eval properly and treat as css\n im
portNode.css = true;\n // if that fails, this error will be thrown\n
importNode.error = e;\n }\n\n if (evaldImportNode && (!
evaldImportNode.css || inlineCSS)) {\n\n if (evaldImportNode.options.
multiple) {\n context.importMultiple = true;\n }\n\n
// try appending if we haven't determined if it is css or not\n
const tryAppendLessExtension = evaldImportNode.css === undefined;\n\n
for (let i = 0; i < importParent.rules.length; i++) {\n if
(importParent.rules[i] === importNode) {\n importParent.rules
[i] = evaldImportNode;\n break;\n }\n
}\n\n const onImported = this.onImported.bind(this, evaldImportNod
e, context), sequencedOnImported = this._sequencer.addImport(onImported);\n\n
this._importer.push(evaldImportNode.getPath(), tryAppendLessExtension,
evaldImportNode.fileInfo(),\n evaldImportNode.options, sequencedO
nImported);\n } else {\n this.importCount--;\n if (
this.isFinished) {\n this._sequencer.tryRun();\n }\n
}\n },\n onImported: function (importNode, context, e, root, importe
dAtRoot, fullPath) {\n if (e) {\n if (!e.filename) {\n
e.index = importNode.getIndex(); e.filename = importNode.fileInfo().file
name;\n }\n this.error = e;\n }\n\n const im
portVisitor = this,\n inlineCSS = importNode.options.inline,\n
isPlugin = importNode.options.isPlugin,\n isOptional = importNod
e.options.optional,\n duplicateImport = importedAtRoot || fullPath in
importVisitor.recursionDetector;\n\n if (!context.importMultiple) {\n
if (duplicateImport) {\n importNode.skip = true;\n
} else {\n importNode.skip = function() {\n
if (fullPath in importVisitor.onceFileDetectionMap) {\n
return true;\n }\n importVisitor.onceFi
leDetectionMap[fullPath] = true;\n return false;\n
};\n }\n }\n\n if (!fullPath && isOptional) {\n
importNode.skip = true;\n }\n\n if (root) {\n
importNode.root = root;\n importNode.importedFilename = fullPath;\n\n
if (!inlineCSS && !isPlugin && (context.importMultiple || !duplicate
Import)) {\n importVisitor.recursionDetector[fullPath] = true;\n\
n const oldContext = this.context;\n this.context
= context;\n try {\n this._visitor.visit(root)
;\n } catch (e) {\n this.error = e;\n
}\n this.context = oldContext;\n }\n }\n
\n importVisitor.importCount--;\n\n if (importVisitor.isFinished)
{\n importVisitor._sequencer.tryRun();\n }\n },\n visitD
eclaration: function (declNode, visitArgs) {\n if (declNode.value.type ==
= 'DetachedRuleset') {\n this.context.frames.unshift(declNode);\n
} else {\n visitArgs.visitDeeper = false;\n }\n },\n
visitDeclarationOut: function(declNode) {\n if (declNode.value.type ===
'DetachedRuleset') {\n this.context.frames.shift();\n }\n }
,\n visitAtRule: function (atRuleNode, visitArgs) {\n this.context.fra
mes.unshift(atRuleNode);\n },\n visitAtRuleOut: function (atRuleNode) {\n
this.context.frames.shift();\n },\n visitMixinDefinition: function
(mixinDefinitionNode, visitArgs) {\n this.context.frames.unshift(mixinDef
initionNode);\n },\n visitMixinDefinitionOut: function (mixinDefinitionNod
e) {\n this.context.frames.shift();\n },\n visitRuleset: function (
rulesetNode, visitArgs) {\n this.context.frames.unshift(rulesetNode);\n
},\n visitRulesetOut: function (rulesetNode) {\n this.context.frames
.shift();\n },\n visitMedia: function (mediaNode, visitArgs) {\n th
is.context.frames.unshift(mediaNode.rules[0]);\n },\n visitMediaOut: funct
ion (mediaNode) {\n this.context.frames.shift();\n }\n};\nexport defau
lt ImportVisitor;\n","class SetTreeVisibilityVisitor {\n constructor(visible)
{\n this.visible = visible;\n }\n\n run(root) {\n this.visi
t(root);\n }\n\n visitArray(nodes) {\n if (!nodes) {\n r
eturn nodes;\n }\n\n const cnt = nodes.length;\n let i;\n
for (i = 0; i < cnt; i++) {\n this.visit(nodes[i]);\n }\
n return nodes;\n }\n\n visit(node) {\n if (!node) {\n
return node;\n }\n if (node.constructor === Array) {\n
return this.visitArray(node);\n }\n\n if (!node.blocksVisibi
lity || node.blocksVisibility()) {\n return node;\n }\n
if (this.visible) {\n node.ensureVisibility();\n } else {\n
node.ensureInvisibility();\n }\n\n node.accept(this);\n
return node;\n }\n}\n\nexport default SetTreeVisibilityVisitor;","impo
rt tree from '../tree';\nimport Visitor from './visitor';\nimport logger from '.
./logger';\nimport * as utils from '../utils';\n\n/* jshint loopfunc:true */\n\n
class ExtendFinderVisitor {\n constructor() {\n this._visitor = new Vi
sitor(this);\n this.contexts = [];\n this.allExtendsStack = [[]];\
n }\n\n run(root) {\n root = this._visitor.visit(root);\n ro
ot.allExtends = this.allExtendsStack[0];\n return root;\n }\n\n vis
itDeclaration(declNode, visitArgs) {\n visitArgs.visitDeeper = false;\n
}\n\n visitMixinDefinition(mixinDefinitionNode, visitArgs) {\n visit
Args.visitDeeper = false;\n }\n\n visitRuleset(rulesetNode, visitArgs) {\n
if (rulesetNode.root) {\n return;\n }\n\n let i
;\n let j;\n let extend;\n const allSelectorsExtendList = [
];\n let extendList;\n\n // get &:extend(.a); rules which apply to
all selectors in this ruleset\n const rules = rulesetNode.rules, ruleCnt
= rules ? rules.length : 0;\n for (i = 0; i < ruleCnt; i++) {\n
if (rulesetNode.rules[i] instanceof tree.Extend) {\n allSelect
orsExtendList.push(rules[i]);\n rulesetNode.extendOnEveryPath = t
rue;\n }\n }\n\n // now find every selector and apply t
he extends that apply to all extends\n // and the ones which apply to an
individual extend\n const paths = rulesetNode.paths;\n for (i = 0;
i < paths.length; i++) {\n const selectorPath = paths[i], selector =
selectorPath[selectorPath.length - 1], selExtendList = selector.extendList;\n\n
extendList = selExtendList ? utils.copyArray(selExtendList).concat(a
llSelectorsExtendList)\n : allSelectorsExtendList;\n\n
if (extendList) {\n extendList = extendList.map(function(allSele
ctorsExtend) {\n return allSelectorsExtend.clone();\n
});\n }\n\n for (j = 0; j < extendList.length; j++
) {\n this.foundExtends = true;\n extend = extendL
ist[j];\n extend.findSelfSelectors(selectorPath);\n
extend.ruleset = rulesetNode;\n if (j === 0) { extend.firstExte
ndOnThisSelectorPath = true; }\n this.allExtendsStack[this.allExt
endsStack.length - 1].push(extend);\n }\n }\n\n this.co
ntexts.push(rulesetNode.selectors);\n }\n\n visitRulesetOut(rulesetNode) {
\n if (!rulesetNode.root) {\n this.contexts.length = this.cont
exts.length - 1;\n }\n }\n\n visitMedia(mediaNode, visitArgs) {\n
mediaNode.allExtends = [];\n this.allExtendsStack.push(mediaNode.al
lExtends);\n }\n\n visitMediaOut(mediaNode) {\n this.allExtendsStac
k.length = this.allExtendsStack.length - 1;\n }\n\n visitAtRule(atRuleNode
, visitArgs) {\n atRuleNode.allExtends = [];\n this.allExtendsStac
k.push(atRuleNode.allExtends);\n }\n\n visitAtRuleOut(atRuleNode) {\n
this.allExtendsStack.length = this.allExtendsStack.length - 1;\n }\n}\n\nc
lass ProcessExtendsVisitor {\n constructor() {\n this._visitor = new V
isitor(this);\n }\n\n run(root) {\n const extendFinder = new Extend
FinderVisitor();\n this.extendIndices = {};\n extendFinder.run(roo
t);\n if (!extendFinder.foundExtends) { return root; }\n root.allE
xtends = root.allExtends.concat(this.doExtendChaining(root.allExtends, root.allE
xtends));\n this.allExtendsStack = [root.allExtends];\n const newR
oot = this._visitor.visit(root);\n this.checkExtendsForNonMatched(root.al
lExtends);\n return newRoot;\n }\n\n checkExtendsForNonMatched(exte
ndList) {\n const indices = this.extendIndices;\n extendList.filte
r(function(extend) {\n return !extend.hasFoundMatches && extend.paren
t_ids.length == 1;\n }).forEach(function(extend) {\n let selec
tor = '_unknown_';\n try {\n selector = extend.selecto
r.toCSS({});\n }\n catch (_) {}\n\n if (!indice
s[`${extend.index} ${selector}`]) {\n indices[`${extend.index} ${
selector}`] = true;\n logger.warn(`extend '${selector}' has no ma
tches`);\n }\n });\n }\n\n doExtendChaining(extendsList,
extendsListTarget, iterationCount) {\n //\n // chaining is differ
ent from normal extension.. if we extend an extend then we are not just copying,
altering\n // and pasting the selector we would do normally, but we are
also adding an extend with the same target selector\n // this means this
new extend can then go and alter other extends\n //\n // this meth
od deals with all the chaining work - without it, extend is flat and doesn't wor
k on other extend selectors\n // this is also the most expensive.. and a
match on one selector can cause an extension of a selector we had already\n
// processed if we look at each selector at a time, as is done in visitRulese
t\n\n let extendIndex;\n\n let targetExtendIndex;\n let mat
ches;\n const extendsToAdd = [];\n let newSelector;\n const
extendVisitor = this;\n let selectorPath;\n let extend;\n
let targetExtend;\n let newExtend;\n\n iterationCount = iterationC
ount || 0;\n\n // loop through comparing every extend with every target e
xtend.\n // a target extend is the one on the ruleset we are looking at c
opy/edit/pasting in place\n // e.g. .a:extend(.b) {} and .b:extend(.c)
{} then the first extend extends the second one\n // and the second is th
e target.\n // the separation into two lists allows us to process a subse
t of chains with a bigger set, as is the\n // case when processing media
queries\n for (extendIndex = 0; extendIndex < extendsList.length; extendI
ndex++) {\n for (targetExtendIndex = 0; targetExtendIndex < extendsLi
stTarget.length; targetExtendIndex++) {\n\n extend = extendsList[
extendIndex];\n targetExtend = extendsListTarget[targetExtendInde
x];\n\n // look for circular references\n if ( ext
end.parent_ids.indexOf( targetExtend.object_id ) >= 0 ) { continue; }\n\n
// find a match in the target extends self selector (the bit before :ex
tend)\n selectorPath = [targetExtend.selfSelectors[0]];\n
matches = extendVisitor.findMatch(extend, selectorPath);\n\n
if (matches.length) {\n extend.hasFoundMatches = true;\n\
n // we found a match, so for each self selector..\n
extend.selfSelectors.forEach(function(selfSelector) {\n
const info = targetExtend.visibilityInfo();\n\n
// process the extend as usual\n newSelector = extendVis
itor.extendSelector(matches, selectorPath, selfSelector, extend.isVisible());\n\
n // but now we create a new extend from it\n
newExtend = new(tree.Extend)(targetExtend.selector, targetExtend.opt
ion, 0, targetExtend.fileInfo(), info);\n newExtend.selfS
electors = newSelector;\n\n // add the extend onto the li
st of extends for that selector\n newSelector[newSelector
.length - 1].extendList = [newExtend];\n\n // record that
we need to add it.\n extendsToAdd.push(newExtend);\n
newExtend.ruleset = targetExtend.ruleset;\n\n
// remember its parents for circular references\n
newExtend.parent_ids = newExtend.parent_ids.concat(targetExtend.parent_ids, ex
tend.parent_ids);\n\n // only process the selector once..
if we have :extend(.a,.b) then multiple\n // extends wil
l look at the same selector path, so when extending\n //
we know that any others will be duplicates in terms of what is added to the css\
n if (targetExtend.firstExtendOnThisSelectorPath) {\n
newExtend.firstExtendOnThisSelectorPath = true;\n
targetExtend.ruleset.paths.push(newSelector);\n
}\n });\n }\n }\n
}\n\n if (extendsToAdd.length) {\n // try to detect circular
references to stop a stack overflow.\n // may no longer be needed.\n
this.extendChainCount++;\n if (iterationCount > 100) {\n
let selectorOne = '{unable to calculate}';\n let s
electorTwo = '{unable to calculate}';\n try {\n
selectorOne = extendsToAdd[0].selfSelectors[0].toCSS();\n s
electorTwo = extendsToAdd[0].selector.toCSS();\n }\n
catch (e) {}\n throw { message: `extend circular reference det
ected. One of the circular extends is currently:${selectorOne}:extend(${selector
Two})`};\n }\n\n // now process the new extends on the exi
sting rules so that we can handle a extending b extending c extending\n
// d extending e...\n return extendsToAdd.concat(extendVisitor.doE
xtendChaining(extendsToAdd, extendsListTarget, iterationCount + 1));\n }
else {\n return extendsToAdd;\n }\n }\n\n visitDeclarati
on(ruleNode, visitArgs) {\n visitArgs.visitDeeper = false;\n }\n\n
visitMixinDefinition(mixinDefinitionNode, visitArgs) {\n visitArgs.visitD
eeper = false;\n }\n\n visitSelector(selectorNode, visitArgs) {\n v
isitArgs.visitDeeper = false;\n }\n\n visitRuleset(rulesetNode, visitArgs)
{\n if (rulesetNode.root) {\n return;\n }\n let
matches;\n let pathIndex;\n let extendIndex;\n const allEx
tends = this.allExtendsStack[this.allExtendsStack.length - 1];\n const se
lectorsToAdd = [];\n const extendVisitor = this;\n let selectorPat
h;\n\n // look at each selector path in the ruleset, find any extend matc
hes and then copy, find and replace\n\n for (extendIndex = 0; extendIndex
< allExtends.length; extendIndex++) {\n for (pathIndex = 0; pathInde
x < rulesetNode.paths.length; pathIndex++) {\n selectorPath = rul
esetNode.paths[pathIndex];\n\n // extending extends happens initi
ally, before the main pass\n if (rulesetNode.extendOnEveryPath) {
continue; }\n const extendList = selectorPath[selectorPath.lengt
h - 1].extendList;\n if (extendList && extendList.length) { conti
nue; }\n\n matches = this.findMatch(allExtends[extendIndex], sele
ctorPath);\n\n if (matches.length) {\n allExte
nds[extendIndex].hasFoundMatches = true;\n\n allExtends[exten
dIndex].selfSelectors.forEach(function(selfSelector) {\n
let extendedSelectors;\n extendedSelectors = extendVisito
r.extendSelector(matches, selectorPath, selfSelector, allExtends[extendIndex].is
Visible());\n selectorsToAdd.push(extendedSelectors);\n
});\n }\n }\n }\n rule
setNode.paths = rulesetNode.paths.concat(selectorsToAdd);\n }\n\n findMatc
h(extend, haystackSelectorPath) {\n //\n // look through the hayst
ack selector path to try and find the needle - extend.selector\n // retur
ns an array of selector matches that can then be replaced\n //\n l
et haystackSelectorIndex;\n\n let hackstackSelector;\n let hacksta
ckElementIndex;\n let haystackElement;\n let targetCombinator;\n
let i;\n const extendVisitor = this;\n const needleElements
= extend.selector.elements;\n const potentialMatches = [];\n let p
otentialMatch;\n const matches = [];\n\n // loop through the hayst
ack elements\n for (haystackSelectorIndex = 0; haystackSelectorIndex < ha
ystackSelectorPath.length; haystackSelectorIndex++) {\n hackstackSele
ctor = haystackSelectorPath[haystackSelectorIndex];\n\n for (hackstac
kElementIndex = 0; hackstackElementIndex < hackstackSelector.elements.length; ha
ckstackElementIndex++) {\n\n haystackElement = hackstackSelector.
elements[hackstackElementIndex];\n\n // if we allow elements befo
re our match we can add a potential match every time. otherwise only at the firs
t element.\n if (extend.allowBefore || (haystackSelectorIndex ===
0 && hackstackElementIndex === 0)) {\n potentialMatches.push
({pathIndex: haystackSelectorIndex, index: hackstackElementIndex, matched: 0,\n
initialCombinator: haystackElement.combinator});\n
}\n\n for (i = 0; i < potentialMatches.length; i++) {\n
potentialMatch = potentialMatches[i];\n\n
// selectors add \" \" onto the first element. When we use & it joins the select
ors together, but if we don't\n // then each selector in hays
tackSelectorPath has a space before it added in the toCSS phase. so we need to\n
// work out what the resulting combinator will be\n
targetCombinator = haystackElement.combinator.value;\n
if (targetCombinator === '' && hackstackElementIndex === 0) {\n
targetCombinator = ' ';\n }\n\n
// if we don't match, null our match to indicate failure\n
if (!extendVisitor.isElementValuesEqual(needleElements[potentialMatch.matched].v
alue, haystackElement.value) ||\n (potentialMatch.matched
> 0 && needleElements[potentialMatch.matched].combinator.value !== targetCombin
ator)) {\n potentialMatch = null;\n }
else {\n potentialMatch.matched++;\n }
\n\n // if we are still valid and have finished, test whether
we have elements after and whether these are allowed\n if (p
otentialMatch) {\n potentialMatch.finished = potentialMat
ch.matched === needleElements.length;\n if (potentialMatc
h.finished &&\n (!extend.allowAfter &&\n
(hackstackElementIndex + 1 < hackstackSelector.elements.lengt
h || haystackSelectorIndex + 1 < haystackSelectorPath.length))) {\n
potentialMatch = null;\n }\n
}\n // if null we remove, if not, we are still valid, s
o either push as a valid match or continue\n if (potentialMat
ch) {\n if (potentialMatch.finished) {\n
potentialMatch.length = needleElements.length;\n
potentialMatch.endPathIndex = haystackSelectorIndex;\n
potentialMatch.endPathElementIndex = hackstackElementIndex + 1; // inde
x after end of match\n potentialMatches.length = 0; /
/ we don't allow matches to overlap, so start matching again\n
matches.push(potentialMatch);\n }\n
} else {\n potentialMatches.splice(i, 1);\n
i--;\n }\n }\n }\
n }\n return matches;\n }\n\n isElementValuesEqual(elementVa
lue1, elementValue2) {\n if (typeof elementValue1 === 'string' || typeof
elementValue2 === 'string') {\n return elementValue1 === elementValue
2;\n }\n if (elementValue1 instanceof tree.Attribute) {\n
if (elementValue1.op !== elementValue2.op || elementValue1.key !== elementVal
ue2.key) {\n return false;\n }\n if (!eleme
ntValue1.value || !elementValue2.value) {\n if (elementValue1.val
ue || elementValue2.value) {\n return false;\n
}\n return true;\n }\n elementValue1 = ele
mentValue1.value.value || elementValue1.value;\n elementValue2 = elem
entValue2.value.value || elementValue2.value;\n return elementValue1
=== elementValue2;\n }\n elementValue1 = elementValue1.value;\n
elementValue2 = elementValue2.value;\n if (elementValue1 instanceof
tree.Selector) {\n if (!(elementValue2 instanceof tree.Selector) || e
lementValue1.elements.length !== elementValue2.elements.length) {\n
return false;\n }\n for (let i = 0; i < elementValue1.
elements.length; i++) {\n if (elementValue1.elements[i].combinato
r.value !== elementValue2.elements[i].combinator.value) {\n i
f (i !== 0 || (elementValue1.elements[i].combinator.value || ' ') !== (elementVa
lue2.elements[i].combinator.value || ' ')) {\n return fal
se;\n }\n }\n if (!this.isEleme
ntValuesEqual(elementValue1.elements[i].value, elementValue2.elements[i].value))
{\n return false;\n }\n }\n
return true;\n }\n return false;\n }\n\n extendSelector
(matches, selectorPath, replacementSelector, isVisible) {\n\n // for a se
t of matches, replace each match with the replacement selector\n\n let cu
rrentSelectorPathIndex = 0, currentSelectorPathElementIndex = 0, path = [], matc
hIndex, selector, firstElement, match, newElements;\n\n for (matchIndex =
0; matchIndex < matches.length; matchIndex++) {\n match = matches[ma
tchIndex];\n selector = selectorPath[match.pathIndex];\n f
irstElement = new tree.Element(\n match.initialCombinator,\n
replacementSelector.elements[0].value,\n replacementSe
lector.elements[0].isVariable,\n replacementSelector.elements[0].
getIndex(),\n replacementSelector.elements[0].fileInfo()\n
);\n\n if (match.pathIndex > currentSelectorPathIndex && current
SelectorPathElementIndex > 0) {\n path[path.length - 1].elements
= path[path.length - 1]\n .elements.concat(selectorPath[curre
ntSelectorPathIndex].elements.slice(currentSelectorPathElementIndex));\n
currentSelectorPathElementIndex = 0;\n currentSelectorPat
hIndex++;\n }\n\n newElements = selector.elements\n
.slice(currentSelectorPathElementIndex, match.index)\n .
concat([firstElement])\n .concat(replacementSelector.elements.sli
ce(1));\n\n if (currentSelectorPathIndex === match.pathIndex && match
Index > 0) {\n path[path.length - 1].elements =\n
path[path.length - 1].elements.concat(newElements);\n } else {\n
path = path.concat(selectorPath.slice(currentSelectorPathIndex, m
atch.pathIndex));\n\n path.push(new tree.Selector(\n
newElements\n ));\n }\n currentSelec
torPathIndex = match.endPathIndex;\n currentSelectorPathElementIndex
= match.endPathElementIndex;\n if (currentSelectorPathElementIndex >=
selectorPath[currentSelectorPathIndex].elements.length) {\n curr
entSelectorPathElementIndex = 0;\n currentSelectorPathIndex++;\n
}\n }\n\n if (currentSelectorPathIndex < selectorPath.l
ength && currentSelectorPathElementIndex > 0) {\n path[path.length -
1].elements = path[path.length - 1]\n .elements.concat(selectorPa
th[currentSelectorPathIndex].elements.slice(currentSelectorPathElementIndex));\n
currentSelectorPathIndex++;\n }\n\n path = path.concat
(selectorPath.slice(currentSelectorPathIndex, selectorPath.length));\n pa
th = path.map(function (currentValue) {\n // we can re-use elements h
ere, because the visibility property matters only for selectors\n con
st derived = currentValue.createDerived(currentValue.elements);\n if
(isVisible) {\n derived.ensureVisibility();\n } else {
\n derived.ensureInvisibility();\n }\n retu
rn derived;\n });\n return path;\n }\n\n visitMedia(mediaNod
e, visitArgs) {\n let newAllExtends = mediaNode.allExtends.concat(this.al
lExtendsStack[this.allExtendsStack.length - 1]);\n newAllExtends = newAll
Extends.concat(this.doExtendChaining(newAllExtends, mediaNode.allExtends));\n
this.allExtendsStack.push(newAllExtends);\n }\n\n visitMediaOut(media
Node) {\n const lastIndex = this.allExtendsStack.length - 1;\n thi
s.allExtendsStack.length = lastIndex;\n }\n\n visitAtRule(atRuleNode, visi
tArgs) {\n let newAllExtends = atRuleNode.allExtends.concat(this.allExten
dsStack[this.allExtendsStack.length - 1]);\n newAllExtends = newAllExtend
s.concat(this.doExtendChaining(newAllExtends, atRuleNode.allExtends));\n
this.allExtendsStack.push(newAllExtends);\n }\n\n visitAtRuleOut(atRuleNod
e) {\n const lastIndex = this.allExtendsStack.length - 1;\n this.a
llExtendsStack.length = lastIndex;\n }\n}\n\nexport default ProcessExtendsVis
itor;\n","import Visitor from './visitor';\n\nclass JoinSelectorVisitor {\n c
onstructor() {\n this.contexts = [[]];\n this._visitor = new Visit
or(this);\n }\n\n run(root) {\n return this._visitor.visit(root);\n
}\n\n visitDeclaration(declNode, visitArgs) {\n visitArgs.visitDee
per = false;\n }\n\n visitMixinDefinition(mixinDefinitionNode, visitArgs)
{\n visitArgs.visitDeeper = false;\n }\n\n visitRuleset(rulesetNode
, visitArgs) {\n const context = this.contexts[this.contexts.length - 1];
\n const paths = [];\n let selectors;\n\n this.contexts.pus
h(paths);\n\n if (!rulesetNode.root) {\n selectors = rulesetNo
de.selectors;\n if (selectors) {\n selectors = selecto
rs.filter(function(selector) { return selector.getIsOutput(); });\n
rulesetNode.selectors = selectors.length ? selectors : (selectors = null);\n
if (selectors) { rulesetNode.joinSelectors(paths, context, select
ors); }\n }\n if (!selectors) { rulesetNode.rules = null;
}\n rulesetNode.paths = paths;\n }\n }\n\n visitRulesetO
ut(rulesetNode) {\n this.contexts.length = this.contexts.length - 1;\n
}\n\n visitMedia(mediaNode, visitArgs) {\n const context = this.conte
xts[this.contexts.length - 1];\n mediaNode.rules[0].root = (context.lengt
h === 0 || context[0].multiMedia);\n }\n\n visitAtRule(atRuleNode, visitAr
gs) {\n const context = this.contexts[this.contexts.length - 1];\n
if (atRuleNode.rules && atRuleNode.rules.length) {\n atRuleNode.rule
s[0].root = (atRuleNode.isRooted || context.length === 0 || null);\n }\n
}\n}\n\nexport default JoinSelectorVisitor;\n","import tree from '../tree';\n
import Visitor from './visitor';\n\nclass CSSVisitorUtils {\n constructor(con
text) {\n this._visitor = new Visitor(this);\n this._context = con
text;\n }\n\n containsSilentNonBlockedChild(bodyRules) {\n let rule
;\n if (!bodyRules) {\n return false;\n }\n for
(let r = 0; r < bodyRules.length; r++) {\n rule = bodyRules[r];\n
if (rule.isSilent && rule.isSilent(this._context) && !rule.blocksVisibil
ity()) {\n // the atrule contains something that was referenced (
likely by extend)\n // therefore it needs to be shown in output t
oo\n return true;\n }\n }\n return false
;\n }\n\n keepOnlyVisibleChilds(owner) {\n if (owner && owner.rules
) {\n owner.rules = owner.rules.filter(thing => thing.isVisible());\n
}\n }\n\n isEmpty(owner) {\n return (owner && owner.rules)
\n ? (owner.rules.length === 0) : true;\n }\n\n hasVisibleSelec
tor(rulesetNode) {\n return (rulesetNode && rulesetNode.paths)\n
? (rulesetNode.paths.length > 0) : false;\n }\n\n resolveVisibility(nod
e, originalRules) {\n if (!node.blocksVisibility()) {\n if (th
is.isEmpty(node) && !this.containsSilentNonBlockedChild(originalRules)) {\n
return ;\n }\n\n return node;\n }\n\n
const compiledRulesBody = node.rules[0];\n this.keepOnlyVisibleChild
s(compiledRulesBody);\n\n if (this.isEmpty(compiledRulesBody)) {\n
return ;\n }\n\n node.ensureVisibility();\n node.remov
eVisibilityBlock();\n\n return node;\n }\n\n isVisibleRuleset(rules
etNode) {\n if (rulesetNode.firstRoot) {\n return true;\n
}\n\n if (this.isEmpty(rulesetNode)) {\n return false;\n
}\n\n if (!rulesetNode.root && !this.hasVisibleSelector(rulesetNode)
) {\n return false;\n }\n\n return true;\n }\n}\n\nc
onst ToCSSVisitor = function(context) {\n this._visitor = new Visitor(this);\
n this._context = context;\n this.utils = new CSSVisitorUtils(context);\n}
;\n\nToCSSVisitor.prototype = {\n isReplacing: true,\n run: function (root
) {\n return this._visitor.visit(root);\n },\n\n visitDeclaration:
function (declNode, visitArgs) {\n if (declNode.blocksVisibility() || dec
lNode.variable) {\n return;\n }\n return declNode;\n
},\n\n visitMixinDefinition: function (mixinNode, visitArgs) {\n // m
ixin definitions do not get eval'd - this means they keep state\n // so w
e have to clear that state here so it isn't used if toCSS is called twice\n
mixinNode.frames = [];\n },\n\n visitExtend: function (extendNode, visi
tArgs) {\n },\n\n visitComment: function (commentNode, visitArgs) {\n
if (commentNode.blocksVisibility() || commentNode.isSilent(this._context)) {\
n return;\n }\n return commentNode;\n },\n\n visi
tMedia: function(mediaNode, visitArgs) {\n const originalRules = mediaNod
e.rules[0].rules;\n mediaNode.accept(this._visitor);\n visitArgs.v
isitDeeper = false;\n\n return this.utils.resolveVisibility(mediaNode, or
iginalRules);\n },\n\n visitImport: function (importNode, visitArgs) {\n
if (importNode.blocksVisibility()) {\n return ;\n }\n
return importNode;\n },\n\n visitAtRule: function(atRuleNode, visitAr
gs) {\n if (atRuleNode.rules && atRuleNode.rules.length) {\n r
eturn this.visitAtRuleWithBody(atRuleNode, visitArgs);\n } else {\n
return this.visitAtRuleWithoutBody(atRuleNode, visitArgs);\n }\n
},\n\n visitAnonymous: function(anonymousNode, visitArgs) {\n if (!an
onymousNode.blocksVisibility()) {\n anonymousNode.accept(this._visito
r);\n return anonymousNode;\n }\n },\n\n visitAtRuleWith
Body: function(atRuleNode, visitArgs) {\n // if there is only one nested
ruleset and that one has no path, then it is\n // just fake ruleset\n
function hasFakeRuleset(atRuleNode) {\n const bodyRules = atRuleN
ode.rules;\n return bodyRules.length === 1 && (!bodyRules[0].paths ||
bodyRules[0].paths.length === 0);\n }\n function getBodyRules(atR
uleNode) {\n const nodeRules = atRuleNode.rules;\n if (has
FakeRuleset(atRuleNode)) {\n return nodeRules[0].rules;\n
}\n\n return nodeRules;\n }\n // it is still true t
hat it is only one ruleset in array\n // this is last such moment\n
// process childs\n const originalRules = getBodyRules(atRuleNode);\n
atRuleNode.accept(this._visitor);\n visitArgs.visitDeeper = false;\
n\n if (!this.utils.isEmpty(atRuleNode)) {\n this._mergeRules(
atRuleNode.rules[0].rules);\n }\n\n return this.utils.resolveVisib
ility(atRuleNode, originalRules);\n },\n\n visitAtRuleWithoutBody: functio
n(atRuleNode, visitArgs) {\n if (atRuleNode.blocksVisibility()) {\n
return;\n }\n\n if (atRuleNode.name === '@charset') {\n
// Only output the debug info together with subsequent @charset definitio
ns\n // a comment (or @media statement) before the actual @charset at
rule would\n // be considered illegal css as it has to be on the firs
t line\n if (this.charset) {\n if (atRuleNode.debugInf
o) {\n const comment = new tree.Comment(`/* ${atRuleNode.toCS
S(this._context).replace(/\\n/g, '')} */\\n`);\n comment.debu
gInfo = atRuleNode.debugInfo;\n return this._visitor.visit(co
mment);\n }\n return;\n }\n
this.charset = true;\n }\n\n return atRuleNode;\n },\n\n che
ckValidNodes: function(rules, isRoot) {\n if (!rules) {\n retu
rn;\n }\n\n for (let i = 0; i < rules.length; i++) {\n
const ruleNode = rules[i];\n if (isRoot && ruleNode instanceof tree.D
eclaration && !ruleNode.variable) {\n throw { message: 'Propertie
s must be inside selector blocks. They cannot be in the root',\n
index: ruleNode.getIndex(), filename: ruleNode.fileInfo() && ruleNode.fileIn
fo().filename};\n }\n if (ruleNode instanceof tree.Call) {
\n throw { message: `Function '${ruleNode.name}' did not return a
root node`,\n index: ruleNode.getIndex(), filename: ruleNode
.fileInfo() && ruleNode.fileInfo().filename};\n }\n if (ru
leNode.type && !ruleNode.allowRoot) {\n throw { message: `${ruleN
ode.type} node returned by a function is not valid here`,\n i
ndex: ruleNode.getIndex(), filename: ruleNode.fileInfo() && ruleNode.fileInfo().
filename};\n }\n }\n },\n\n visitRuleset: function (rule
setNode, visitArgs) {\n // at this point rulesets are nested into each ot
her\n let rule;\n\n const rulesets = [];\n\n this.checkVali
dNodes(rulesetNode.rules, rulesetNode.firstRoot);\n\n if (!rulesetNode.ro
ot) {\n // remove invisible paths\n this._compileRulesetPa
ths(rulesetNode);\n\n // remove rulesets from this ruleset body and c
ompile them separately\n const nodeRules = rulesetNode.rules;\n\n
let nodeRuleCnt = nodeRules ? nodeRules.length : 0;\n for (le
t i = 0; i < nodeRuleCnt; ) {\n rule = nodeRules[i];\n
if (rule && rule.rules) {\n // visit because we are movi
ng them out from being a child\n rulesets.push(this._visitor.
visit(rule));\n nodeRules.splice(i, 1);\n
nodeRuleCnt--;\n continue;\n }\n
i++;\n }\n // accept the visitor to remove rules and ref
actor itself\n // then we can decide nogw whether we want it or not\n
// compile body\n if (nodeRuleCnt > 0) {\n
rulesetNode.accept(this._visitor);\n } else {\n rules
etNode.rules = null;\n }\n visitArgs.visitDeeper = false;\
n } else { // if (! rulesetNode.root) {\n rulesetNode.accept(t
his._visitor);\n visitArgs.visitDeeper = false;\n }\n\n
if (rulesetNode.rules) {\n this._mergeRules(rulesetNode.rules);\n
this._removeDuplicateRules(rulesetNode.rules);\n }\n\n //
now decide whether we keep the ruleset\n if (this.utils.isVisibleRuleset
(rulesetNode)) {\n rulesetNode.ensureVisibility();\n rules
ets.splice(0, 0, rulesetNode);\n }\n\n if (rulesets.length === 1)
{\n return rulesets[0];\n }\n return rulesets;\n },\
n\n _compileRulesetPaths: function(rulesetNode) {\n if (rulesetNode.pa
ths) {\n rulesetNode.paths = rulesetNode.paths\n .filt
er(p => {\n let i;\n if (p[0].elements[0].
combinator.value === ' ') {\n p[0].elements[0].combinator
= new(tree.Combinator)('');\n }\n for (i
= 0; i < p.length; i++) {\n if (p[i].isVisible() && p[i].
getIsOutput()) {\n return true;\n
}\n }\n return false;\n
});\n }\n },\n\n _removeDuplicateRules: function(rules) {\n
if (!rules) { return; }\n\n // remove duplicates\n const ruleCach
e = {};\n\n let ruleList;\n let rule;\n let i;\n\n f
or (i = rules.length - 1; i >= 0 ; i--) {\n rule = rules[i];\n
if (rule instanceof tree.Declaration) {\n if (!ruleCache[rul
e.name]) {\n ruleCache[rule.name] = rule;\n }
else {\n ruleList = ruleCache[rule.name];\n
if (ruleList instanceof tree.Declaration) {\n ruleList
= ruleCache[rule.name] = [ruleCache[rule.name].toCSS(this._context)];\n
}\n const ruleCSS = rule.toCSS(this._context);\n
if (ruleList.indexOf(ruleCSS) !== -1) {\n
rules.splice(i, 1);\n } else {\n ru
leList.push(ruleCSS);\n }\n }\n }\n
}\n },\n\n _mergeRules: function(rules) {\n if (!rules) {\n
return; \n }\n\n const groups = {};\n const
groupsArr = [];\n\n for (let i = 0; i < rules.length; i++) {\n
const rule = rules[i];\n if (rule.merge) {\n const ke
y = rule.name;\n groups[key] ? rules.splice(i--, 1) : \n
groupsArr.push(groups[key] = []);\n groups[key].push(r
ule);\n }\n }\n\n groupsArr.forEach(group => {\n
if (group.length > 0) {\n const result = group[0];\n
let space = [];\n const comma = [new tree.Expression(sp
ace)];\n group.forEach(rule => {\n if ((rule.m
erge === '+') && (space.length > 0)) {\n comma.push(new t
ree.Expression(space = []));\n }\n space.p
ush(rule.value);\n result.important = result.important || rul
e.important;\n });\n result.value = new tree.Value
(comma);\n }\n });\n }\n};\n\nexport default ToCSSVisitor;\
n","import Visitor from './visitor';\nimport ImportVisitor from './import-visito
r';\nimport MarkVisibleSelectorsVisitor from './set-tree-visibility-visitor';\ni
mport ExtendVisitor from './extend-visitor';\nimport JoinSelectorVisitor from '.
/join-selector-visitor';\nimport ToCSSVisitor from './to-css-visitor';\n\nexport
default {\n Visitor,\n ImportVisitor,\n MarkVisibleSelectorsVisitor,\n
ExtendVisitor,\n JoinSelectorVisitor,\n ToCSSVisitor\n};\n","import ch
unker from './chunker';\n\nexport default () => {\n let // Less input string\
n input;\n\n let // current chunk\n j;\n\n const // holds st
ate for backtracking\n saveStack = [];\n\n let // furthest index the p
arser has gone to\n furthest;\n\n let // if this is furthest we got to
, this is the probably cause\n furthestPossibleErrorMessage;\n\n let /
/ chunkified input\n chunks;\n\n let // current chunk\n current
;\n\n let // index of current chunk, in `input`\n currentPos;\n\n c
onst parserInput = {};\n const CHARCODE_SPACE = 32;\n const CHARCODE_TAB =
9;\n const CHARCODE_LF = 10;\n const CHARCODE_CR = 13;\n const CHARCOD
E_PLUS = 43;\n const CHARCODE_COMMA = 44;\n const CHARCODE_FORWARD_SLASH =
47;\n const CHARCODE_9 = 57;\n\n function skipWhitespace(length) {\n
const oldi = parserInput.i;\n const oldj = j;\n const curr = pa
rserInput.i - currentPos;\n const endIndex = parserInput.i + current.leng
th - curr;\n const mem = (parserInput.i += length);\n const inp =
input;\n let c;\n let nextChar;\n let comment;\n\n f
or (; parserInput.i < endIndex; parserInput.i++) {\n c = inp.charCode
At(parserInput.i);\n\n if (parserInput.autoCommentAbsorb && c === CHA
RCODE_FORWARD_SLASH) {\n nextChar = inp.charAt(parserInput.i + 1)
;\n if (nextChar === '/') {\n comment = {index
: parserInput.i, isLineComment: true};\n let nextNewLine = in
p.indexOf('\\n', parserInput.i + 2);\n if (nextNewLine < 0) {
\n nextNewLine = endIndex;\n }\n
parserInput.i = nextNewLine;\n comment.text = i
np.substr(comment.index, parserInput.i - comment.index);\n pa
rserInput.commentStore.push(comment);\n continue;\n
} else if (nextChar === '*') {\n const nextStarSlash =
inp.indexOf('*/', parserInput.i + 2);\n if (nextStarSlash >=
0) {\n comment = {\n index: pa
rserInput.i,\n text: inp.substr(parserInput.i, nextSt
arSlash + 2 - parserInput.i),\n isLineComment: false\
n };\n parserInput.i += comment.te
xt.length - 1;\n parserInput.commentStore.push(comment);\
n continue;\n }\n }\n
break;\n }\n\n if ((c !== CHARCODE_SPACE) &&
(c !== CHARCODE_LF) && (c !== CHARCODE_TAB) && (c !== CHARCODE_CR)) {\n
break;\n }\n }\n\n current = current.slice(leng
th + parserInput.i - mem + curr);\n currentPos = parserInput.i;\n\n
if (!current.length) {\n if (j < chunks.length - 1) {\n
current = chunks[++j];\n skipWhitespace(0); // skip space at
the beginning of a chunk\n return true; // things changed\n
}\n parserInput.finished = true;\n }\n\n return o
ldi !== parserInput.i || oldj !== j;\n }\n\n parserInput.save = () => {\n
currentPos = parserInput.i;\n saveStack.push( { current, i: parser
Input.i, j });\n };\n parserInput.restore = possibleErrorMessage => {\n\n
if (parserInput.i > furthest || (parserInput.i === furthest && possibleEr
rorMessage && !furthestPossibleErrorMessage)) {\n furthest = parserIn
put.i;\n furthestPossibleErrorMessage = possibleErrorMessage;\n
}\n const state = saveStack.pop();\n current = state.current;\n
currentPos = parserInput.i = state.i;\n j = state.j;\n };\n
parserInput.forget = () => {\n saveStack.pop();\n };\n parserInput.
isWhitespace = offset => {\n const pos = parserInput.i + (offset || 0);\n
const code = input.charCodeAt(pos);\n return (code === CHARCODE_S
PACE || code === CHARCODE_CR || code === CHARCODE_TAB || code === CHARCODE_LF);\
n };\n\n // Specialization of $(tok)\n parserInput.$re = tok => {\n
if (parserInput.i > currentPos) {\n current = current.slice(parse
rInput.i - currentPos);\n currentPos = parserInput.i;\n }\n\n
const m = tok.exec(current);\n if (!m) {\n return null;
\n }\n\n skipWhitespace(m[0].length);\n if (typeof m === 's
tring') {\n return m;\n }\n\n return m.length === 1 ? m
[0] : m;\n };\n\n parserInput.$char = tok => {\n if (input.charAt(p
arserInput.i) !== tok) {\n return null;\n }\n skipWhite
space(1);\n return tok;\n };\n\n parserInput.$str = tok => {\n
const tokLength = tok.length;\n\n // https://jsperf.com/string-startsw
ith/21\n for (let i = 0; i < tokLength; i++) {\n if (input.cha
rAt(parserInput.i + i) !== tok.charAt(i)) {\n return null;\n
}\n }\n\n skipWhitespace(tokLength);\n return tok;\n
};\n\n parserInput.$quoted = loc => {\n const pos = loc || parserI
nput.i;\n const startChar = input.charAt(pos);\n\n if (startChar !
== '\\'' && startChar !== '\"') {\n return;\n }\n const
length = input.length;\n const currentPosition = pos;\n\n for (le
t i = 1; i + currentPosition < length; i++) {\n const nextChar = inpu
t.charAt(i + currentPosition);\n switch (nextChar) {\n
case '\\\\':\n i++;\n continue;\n
case '\\r':\n case '\\n':\n break;\n
case startChar:\n const str = input.substr(curr
entPosition, i + 1);\n if (!loc && loc !== 0) {\n
skipWhitespace(i + 1);\n return str\n
}\n return [startChar, str];\n def
ault:\n }\n }\n return null;\n };\n\n /**\n *
Permissive parsing. Ignores everything except matching {} [] () and quotes\n
* until matching token (outside of blocks)\n */\n parserInput.$parseUnt
il = tok => {\n let quote = '';\n let returnVal = null;\n l
et inComment = false;\n let blockDepth = 0;\n const blockStack = [
];\n const parseGroups = [];\n const length = input.length;\n
const startPos = parserInput.i;\n let lastPos = parserInput.i;\n
let i = parserInput.i;\n let loop = true;\n let testChar;\n\n
if (typeof tok === 'string') {\n testChar = char => char === tok
\n } else {\n testChar = char => tok.test(char)\n }\n\n
do {\n let prevChar;\n let nextChar = input.charAt
(i);\n if (blockDepth === 0 && testChar(nextChar)) {\n
returnVal = input.substr(lastPos, i - lastPos);\n if (returnVal)
{\n parseGroups.push(returnVal);\n }\n
else {\n parseGroups.push(' ');\n }\n
returnVal = parseGroups;\n skipWhitespace(i - sta
rtPos);\n loop = false\n } else {\n if
(inComment) {\n if (nextChar === '*' && \n
input.charAt(i + 1) === '/') {\n i++;\n
blockDepth--;\n inComment = false;\n
}\n i++;\n continue;\n
}\n switch (nextChar) {\n case '\\\\':\n
i++;\n nextChar = input.charAt(i)
;\n parseGroups.push(input.substr(lastPos, i - lastPos +
1));\n lastPos = i + 1;\n break;\n
case '/':\n if (input.charAt(i + 1) =
== '*') {\n i++;\n inComme
nt = true;\n blockDepth++;\n }
\n break;\n case '\\'':\n
case '\"':\n quote = parserInput.$quoted(i);\n
if (quote) {\n parseGroups.push(i
nput.substr(lastPos, i - lastPos), quote);\n i += quo
te[1].length - 1;\n lastPos = i + 1;\n
}\n else {\n skipWhit
espace(i - startPos);\n returnVal = nextChar;\n
loop = false;\n }\n
break;\n case '{':\n blockStac
k.push('}');\n blockDepth++;\n bre
ak;\n case '(':\n blockStack.push(')')
;\n blockDepth++;\n break;\n
case '[':\n blockStack.push(']');\n
blockDepth++;\n break;\n
case '}':\n case ')':\n case ']':\n
const expected = blockStack.pop();\n
if (nextChar === expected) {\n blockDepth--;\n
} else {\n // move the parser to the
error and return expected\n skipWhitespace(i - start
Pos);\n returnVal = expected;\n
loop = false;\n }\n }\n
i++;\n if (i > length) {\n loop = false;\n
}\n }\n prevChar = nextChar;\n } whi
le (loop);\n\n return returnVal ? returnVal : null;\n }\n\n parserI
nput.autoCommentAbsorb = true;\n parserInput.commentStore = [];\n parserIn
put.finished = false;\n\n // Same as $(), but don't change the state of the p
arser,\n // just return the match.\n parserInput.peek = tok => {\n
if (typeof tok === 'string') {\n // https://jsperf.com/string-startsw
ith/21\n for (let i = 0; i < tok.length; i++) {\n if (
input.charAt(parserInput.i + i) !== tok.charAt(i)) {\n return
false;\n }\n }\n return true;\n } e
lse {\n return tok.test(current);\n }\n };\n\n // Specia
lization of peek()\n // TODO remove or change some currentChar calls to peekC
har\n parserInput.peekChar = tok => input.charAt(parserInput.i) === tok;\n\n
parserInput.currentChar = () => input.charAt(parserInput.i);\n\n parserInp
ut.prevChar = () => input.charAt(parserInput.i - 1);\n\n parserInput.getInput
= () => input;\n\n parserInput.peekNotNumeric = () => {\n const c = i
nput.charCodeAt(parserInput.i);\n // Is the first char of the dimension 0
-9, '.', '+' or '-'\n return (c > CHARCODE_9 || c < CHARCODE_PLUS) || c =
== CHARCODE_FORWARD_SLASH || c === CHARCODE_COMMA;\n };\n\n parserInput.st
art = (str, chunkInput, failFunction) => {\n input = str;\n parser
Input.i = j = currentPos = furthest = 0;\n\n // chunking apparently makes
things quicker (but my tests indicate\n // it might actually make things
slower in node at least)\n // and it is a non-perfect parse - it can't r
ecognise\n // unquoted urls, meaning it can't distinguish comments\n
// meaning comments with quotes or {}() in them get 'counted'\n // and
then lead to parse errors.\n // In addition if the chunking chunks in th
e wrong place we might\n // not be able to parse a parser statement in on
e go\n // this is officially deprecated but can be switched on via an opt
ion\n // in the case it causes too much performance issues.\n if (
chunkInput) {\n chunks = chunker(str, failFunction);\n } else
{\n chunks = [str];\n }\n\n current = chunks[0];\n\n
skipWhitespace(0);\n };\n\n parserInput.end = () => {\n let me
ssage;\n const isFinished = parserInput.i >= input.length;\n\n if
(parserInput.i < furthest) {\n message = furthestPossibleErrorMessage
;\n parserInput.i = furthest;\n }\n return {\n
isFinished,\n furthest: parserInput.i,\n furthestPossib
leErrorMessage: message,\n furthestReachedEnd: parserInput.i >= input
.length - 1,\n furthestChar: input[parserInput.i]\n };\n };
\n\n return parserInput;\n};\n","// Split the input into chunks.\nexport defa
ult function (input, fail) {\n const len = input.length;\n let level = 0;\
n let parenLevel = 0;\n let lastOpening;\n let lastOpeningParen;\n l
et lastMultiComment;\n let lastMultiCommentEndBrace;\n const chunks = [];\
n let emitFrom = 0;\n let chunkerCurrentIndex;\n let currentChunkStartI
ndex;\n let cc;\n let cc2;\n let matched;\n\n function emitChunk(for
ce) {\n const len = chunkerCurrentIndex - emitFrom;\n if (((len <
512) && !force) || !len) {\n return;\n }\n chunks.push(
input.slice(emitFrom, chunkerCurrentIndex + 1));\n emitFrom = chunkerCurr
entIndex + 1;\n }\n\n for (chunkerCurrentIndex = 0; chunkerCurrentIndex <
len; chunkerCurrentIndex++) {\n cc = input.charCodeAt(chunkerCurrentIndex
);\n if (((cc >= 97) && (cc <= 122)) || (cc < 34)) {\n // a-z
or whitespace\n continue;\n }\n\n switch (cc) {\n
case 40: // (\n parenLevel++;\n
lastOpeningParen = chunkerCurrentIndex;\n continue;\n
case 41: // )\n if (--parenLeve
l < 0) {\n return fail('missing opening `(`', chunkerCurrentI
ndex);\n }\n continue;\n case 59:
// ;\n if (!parenLevel) { emitChunk(); }\n
continue;\n case 123: // {\n
level++;\n lastOpening = chunkerCurrentIndex;\n
continue;\n case 125: // }\n
if (--level < 0) {\n return fail('missing opening `{`', ch
unkerCurrentIndex);\n }\n if (!level && !parenLeve
l) { emitChunk(); }\n continue;\n case 92:
// \\\n if (chunkerCurrentIndex < len - 1) { chunkerC
urrentIndex++; continue; }\n return fail('unescaped `\\\\`', chun
kerCurrentIndex);\n case 34:\n case 39:\n case
96: // \", ' and `\n matched = 0;\n
currentChunkStartIndex = chunkerCurrentIndex;\n for (chu
nkerCurrentIndex = chunkerCurrentIndex + 1; chunkerCurrentIndex < len; chunkerCu
rrentIndex++) {\n cc2 = input.charCodeAt(chunkerCurrentIndex)
;\n if (cc2 > 96) { continue; }\n if (cc2
== cc) { matched = 1; break; }\n if (cc2 == 92) { // \
\\n if (chunkerCurrentIndex == len - 1) {\n
return fail('unescaped `\\\\`', chunkerCurrentIndex);\n
}\n chunkerCurrentIndex++;\n
}\n }\n if (matched) { continue; }\n
return fail(`unmatched \\`${String.fromCharCode(cc)}\\``, currentChunkStar
tIndex);\n case 47: // /, check for comment\n
if (parenLevel || (chunkerCurrentIndex == len - 1)) { continue; }
\n cc2 = input.charCodeAt(chunkerCurrentIndex + 1);\n
if (cc2 == 47) {\n // //, find lnfeed\n
for (chunkerCurrentIndex = chunkerCurrentIndex + 2; chunkerCurrentIndex < len;
chunkerCurrentIndex++) {\n cc2 = input.charCodeAt(chunke
rCurrentIndex);\n if ((cc2 <= 13) && ((cc2 == 10) || (cc2
== 13))) { break; }\n }\n } else if (cc2 == 4
2) {\n // /*, find */\n lastMultiComment =
currentChunkStartIndex = chunkerCurrentIndex;\n for (chunker
CurrentIndex = chunkerCurrentIndex + 2; chunkerCurrentIndex < len - 1; chunkerCu
rrentIndex++) {\n cc2 = input.charCodeAt(chunkerCurrentIn
dex);\n if (cc2 == 125) { lastMultiCommentEndBrace = chun
kerCurrentIndex; }\n if (cc2 != 42) { continue; }\n
if (input.charCodeAt(chunkerCurrentIndex + 1) == 47) { break;
}\n }\n if (chunkerCurrentIndex == len - 1
) {\n return fail('missing closing `*/`', currentChunkSta
rtIndex);\n }\n chunkerCurrentIndex++;\n
}\n continue;\n case 42:
// *, check for unmatched */\n if ((chunkerCurrentIndex <
len - 1) && (input.charCodeAt(chunkerCurrentIndex + 1) == 47)) {\n
return fail('unmatched `/*`', chunkerCurrentIndex);\n }\n
continue;\n }\n }\n\n if (level !== 0) {\n if
((lastMultiComment > lastOpening) && (lastMultiCommentEndBrace > lastMultiCommen
t)) {\n return fail('missing closing `}` or `*/`', lastOpening);\n
} else {\n return fail('missing closing `}`', lastOpening);\n
}\n } else if (parenLevel !== 0) {\n return fail('missing closing
`)`', lastOpeningParen);\n }\n\n emitChunk(true);\n return chunks;\n};
\n","import LessError from '../less-error';\nimport tree from '../tree';\nimport
visitors from '../visitors';\nimport getParserInput from './parser-input';\nimp
ort * as utils from '../utils';\nimport functionRegistry from '../functions/func
tion-registry';\n\n//\n// less.js - parser\n//\n// A relatively straight-forw
ard predictive parser.\n// There is no tokenization/lexing stage, the input i
s parsed\n// in one sweep.\n//\n// To make the parser fast enough to run i
n the browser, several\n// optimization had to be made:\n//\n// - Matching
and slicing on a huge input is often cause of slowdowns.\n// The solution
is to chunkify the input into smaller strings.\n// The chunks are stored in
the `chunks` var,\n// `j` holds the current chunk index, and `currentPos`
holds\n// the index of the current chunk in relation to `input`.\n// T
his gives us an almost 4x speed-up.\n//\n// - In many cases, we don't need to
match individual tokens;\n// for example, if a value doesn't hold any vari
ables, operations\n// or dynamic references, the parser can effectively 'sk
ip' it,\n// treating it as a literal.\n// An example would be '1px sol
id #000' - which evaluates to itself,\n// we don't need to know what the in
dividual components are.\n// The drawback, of course is that you don't get
the benefits of\n// syntax-checking on the CSS. This gives us a 50% speed-u
p in the parser,\n// and a smaller speed-up in the code-gen.\n//\n//\n//
Token matching is done with the `$` function, which either takes\n// a termi
nal string or regexp, or a non-terminal function to call.\n// It also takes c
are of moving all the indices forwards.\n//\n\nconst Parser = function Parser(co
ntext, imports, fileInfo) {\n let parsers;\n const parserInput = getParser
Input();\n\n function error(msg, type) {\n throw new LessError(\n
{\n index: parserInput.i,\n filename: fileI
nfo.filename,\n type: type || 'Syntax',\n message:
msg\n },\n imports\n );\n }\n\n function exp
ect(arg, msg) {\n // some older browsers return typeof 'function' for Reg
Exp\n const result = (arg instanceof Function) ? arg.call(parsers) : pars
erInput.$re(arg);\n if (result) {\n return result;\n }\
n \n error(msg || (typeof arg === 'string'\n ? `expecte
d '${arg}' got '${parserInput.currentChar()}'`\n : 'unexpected token'
));\n }\n\n // Specialization of expect()\n function expectChar(arg, ms
g) {\n if (parserInput.$char(arg)) {\n return arg;\n }\
n error(msg || `expected '${arg}' got '${parserInput.currentChar()}'`);\n
}\n\n function getDebugInfo(index) {\n const filename = fileInfo.f
ilename;\n\n return {\n lineNumber: utils.getLocation(index, p
arserInput.getInput()).line + 1,\n fileName: filename\n };\n
}\n\n /**\n * Used after initial parsing to create nodes on the fly\n
* \n * @param {String} str - string to parse \n * @param
{Array} parseList - array of parsers to run input through e.g. [\"value\", \
"important\"]\n * @param {Number} currentIndex - start number to begin inde
xing\n * @param {Object} fileInfo - fileInfo to attach to created nodes
\n */\n function parseNode(str, parseList, currentIndex, fileInfo, callba
ck) {\n let result;\n const returnNodes = [];\n const parse
r = parserInput;\n\n try {\n parser.start(str, false, function
fail(msg, index) {\n callback({\n message: ms
g,\n index: index + currentIndex\n });\n
});\n for (let x = 0, p, i; (p = parseList[x]); x++) {\n
i = parser.i;\n result = parsers[p]();\n
if (result) {\n try {\n result._index
= i + currentIndex;\n result._fileInfo = fileInfo;\n
} catch (e) {}\n returnNodes.push(result);\n
}\n else {\n returnNodes.push(nu
ll);\n }\n }\n\n const endInfo = parser.end
();\n if (endInfo.isFinished) {\n callback(null, retur
nNodes);\n }\n else {\n callback(true, null
);\n }\n } catch (e) {\n throw new LessError({\n
index: e.index + currentIndex,\n message: e.message\
n }, imports, fileInfo.filename);\n }\n }\n\n //\n //
The Parser\n //\n return {\n parserInput,\n imports,\n
fileInfo,\n parseNode,\n //\n // Parse an input string i
nto an abstract syntax tree,\n // @param str A string containing 'less' m
arkup\n // @param callback call `callback` when done.\n // @param
[additionalData] An optional map which can contains vars - a map (key, value) of
variables to apply\n //\n parse: function (str, callback, additio
nalData) {\n let root;\n let error = null;\n le
t globalVars;\n let modifyVars;\n let ignored;\n
let preText = '';\n\n globalVars = (additionalData && additionalDat
a.globalVars) ? `${Parser.serializeVars(additionalData.globalVars)}\\n` : '';\n
modifyVars = (additionalData && additionalData.modifyVars) ? `\\n${Pa
rser.serializeVars(additionalData.modifyVars)}` : '';\n\n if (context
.pluginManager) {\n const preProcessors = context.pluginManager.g
etPreProcessors();\n for (let i = 0; i < preProcessors.length; i+
+) {\n str = preProcessors[i].process(str, { context, imports
, fileInfo });\n }\n }\n\n if (globalVars |
| (additionalData && additionalData.banner)) {\n preText = ((addi
tionalData && additionalData.banner) ? additionalData.banner : '') + globalVars;
\n ignored = imports.contentsIgnoredChars;\n ignor
ed[fileInfo.filename] = ignored[fileInfo.filename] || 0;\n ignore
d[fileInfo.filename] += preText.length;\n }\n\n str = str.
replace(/\\r\\n?/g, '\\n');\n // Remove potential UTF Byte Order Mark
\n str = preText + str.replace(/^\\uFEFF/, '') + modifyVars;\n
imports.contents[fileInfo.filename] = str;\n\n // Start with the
primary rule.\n // The whole syntax tree is held under a Ruleset nod
e,\n // with the `root` property set to true, so no `{}` are\n
// output. The callback is called when the input is parsed.\n tr
y {\n parserInput.start(str, context.chunkInput, function fail(ms
g, index) {\n throw new LessError({\n
index,\n type: 'Parse',\n message:
msg,\n filename: fileInfo.filename\n
}, imports);\n });\n\n tree.Node.prototype.parse =
this;\n root = new tree.Ruleset(null, this.parsers.primary());\n
tree.Node.prototype.rootNode = root;\n root.root
= true;\n root.firstRoot = true;\n root.functionRe
gistry = functionRegistry.inherit();\n \n } catch (e)
{\n return callback(new LessError(e, imports, fileInfo.filename))
;\n }\n\n // If `i` is smaller than the `input.length - 1`
,\n // it means the parser wasn't able to parse the whole\n
// string, so we've got a parsing error.\n //\n // We tr
y to extract a \\n delimited string,\n // showing the line where the
parse error occurred.\n // We split it up into two parts (the part wh
ich parsed,\n // and the part which didn't), so we can color them dif
ferently.\n const endInfo = parserInput.end();\n if (!endI
nfo.isFinished) {\n\n let message = endInfo.furthestPossibleError
Message;\n\n if (!message) {\n message = 'Unre
cognised input';\n if (endInfo.furthestChar === '}') {\n
message += '. Possibly missing opening \\'{\\'';\n
} else if (endInfo.furthestChar === ')') {\n mes
sage += '. Possibly missing opening \\'(\\'';\n } else if (en
dInfo.furthestReachedEnd) {\n message += '. Possibly miss
ing something';\n }\n }\n\n err
or = new LessError({\n type: 'Parse',\n me
ssage,\n index: endInfo.furthest,\n filena
me: fileInfo.filename\n }, imports);\n }\n\n
const finish = e => {\n e = error || e || imports.error;\n\n
if (e) {\n if (!(e instanceof LessError)) {\n
e = new LessError(e, imports, fileInfo.filename);\n
}\n\n return callback(e);\n }\n
else {\n return callback(null, root);\n
}\n };\n\n if (context.processImports !== false) {\
n new visitors.ImportVisitor(imports, finish)\n
.run(root);\n } else {\n return finish();\n
}\n },\n\n //\n // Here in, the parsing rules/functions\
n //\n // The basic structure of the syntax tree generated is as f
ollows:\n //\n // Ruleset -> Declaration -> Value -> Expression
-> Entity\n //\n // Here's some Less code:\n //\n /
/ .class {\n // color: #fff;\n // border: 1px solid #
000;\n // width: @w + 4px;\n // > .child {...}\n
// }\n //\n // And here's what the parse tree might look like:\
n //\n // Ruleset (Selector '.class', [\n // De
claration (\"color\", Value ([Expression [Color #fff]]))\n // De
claration (\"border\", Value ([Expression [Dimension 1px][Keyword \"solid\"][Col
or #000]]))\n // Declaration (\"width\", Value ([Expression [Ope
ration \" + \" [Variable \"@w\"][Dimension 4px]]]))\n // Ruleset
(Selector [Element '>', '.child'], [...])\n // ])\n //\n
// In general, most rules will try to parse a token with the `$re()` function
, and if the return\n // value is truly, will return a new node, of the
relevant type. Sometimes, we need to check\n // first, before parsing, t
hat's when we use `peek()`.\n //\n parsers: parsers = {\n
//\n // The `primary` rule is the *entry* and *exit* point of the
parser.\n // The rules here can appear at any level of the parse tree
.\n //\n // The recursive nature of the grammar is an inte
rplay between the `block`\n // rule, which represents `{ ... }`, the
`ruleset` rule, and this `primary` rule,\n // as represented by this
simplified grammar:\n //\n // primary → (ruleset | d
eclaration)+\n // ruleset → selector+ block\n //
block → '{' primary '}'\n //\n // Only at one point i
s the primary rule not called from the\n // block rule: at the root l
evel.\n //\n primary: function () {\n const
mixin = this.mixin;\n let root = [];\n let node;\
n\n while (true) {\n while (true) {\n
node = this.comment();\n if (!node) { brea
k; }\n root.push(node);\n }\n
// always process comments before deciding if finished\n
if (parserInput.finished) {\n break;\n
}\n if (parserInput.peek('}')) {\n
break;\n }\n\n node = this.extendRule
();\n if (node) {\n root = root.concat
(node);\n continue;\n }\n\n
node = mixin.definition() || this.declaration() || mixin.call(false, fa
lse) || \n this.ruleset() || this.variableCall() || this.
entities.call() || this.atrule();\n if (node) {\n
root.push(node);\n } else {\n
let foundSemiColon = false;\n while (parserInput.$cha
r(';')) {\n foundSemiColon = true;\n
}\n if (!foundSemiColon) {\n
break;\n }\n }\n
}\n\n return root;\n },\n\n // comments are
collected by the main parsing mechanism and then assigned to nodes\n
// where the current structure allows it\n comment: function () {\n
if (parserInput.commentStore.length) {\n const
comment = parserInput.commentStore.shift();\n return new(tre
e.Comment)(comment.text, comment.isLineComment, comment.index, fileInfo);\n
}\n },\n\n //\n // Entities are toke
ns which can be found inside an Expression\n //\n entities
: {\n mixinLookup: function() {\n return parse
rs.mixin.call(true, true);\n },\n //\n
// A string, which supports escaping \" and '\n //\n
// \"milky way\" 'he\\'s the one!'\n //\n
quoted: function (forceEscaped) {\n let str;\n
const index = parserInput.i;\n let isEscaped = false;
\n\n parserInput.save();\n if (parserInput
.$char('~')) {\n isEscaped = true;\n }
else if (forceEscaped) {\n parserInput.restore();\n
return;\n }\n\n str = p
arserInput.$quoted();\n if (!str) {\n
parserInput.restore();\n return;\n }\n
parserInput.forget();\n\n return new(tree
.Quoted)(str.charAt(0), str.substr(1, str.length - 2), isEscaped, index, fileInf
o);\n },\n\n //\n // A catch-all wo
rd, such as:\n //\n // black border-collapse\n
//\n keyword: function () {\n
const k = parserInput.$char('%') || parserInput.$re(/^\\[?(?:[\\w-]|\\\\(?:[A-Fa
-f0-9]{1,6} ?|[^A-Fa-f0-9]))+\\]?/);\n if (k) {\n
return tree.Color.fromKeyword(k) || new(tree.Keyword)(k);\n
}\n },\n\n //\n // A fun
ction call\n //\n // rgb(255, 0, 255)\n
//\n // The arguments are parsed with the `entities.argu
ments` parser.\n //\n call: function () {\n
let name;\n let args;\n let f
unc;\n const index = parserInput.i;\n\n //
http://jsperf.com/case-insensitive-regex-vs-strtolower-then-regex/18\n
if (parserInput.peek(/^url\\(/i)) {\n return;\
n }\n\n parserInput.save();\n\n
name = parserInput.$re(/^([\\w-]+|%|~|progid:[\\w\\.]+)\\(/);\n
if (!name) {\n parserInput.forget(); \n
return;\n }\n\n name = n
ame[1];\n func = this.customFuncCall(name);\n
if (func) {\n args = func.parse();\n
if (args && func.stop) {\n parserInput.forget(
);\n return args;\n }\n
}\n\n args = this.arguments(args);\n\n
if (!parserInput.$char(')')) {\n parserInput.re
store('Could not parse call arguments or missing \\')\\'');\n
return;\n }\n\n parserInput.forget();
\n\n return new(tree.Call)(name, args, index, fileInfo);\n
},\n \n //\n // Parsin
g rules for functions with non-standard args, e.g.:\n //\n
// boolean(not(2 > 1))\n //\n //
This is a quick prototype, to be modified/improved when\n //
more custom-parsed funcs come (e.g. `selector(...)`)\n //\n\n
customFuncCall: function (name) {\n /* Ideally th
e table is to be moved out of here for faster perf.,\n but
it's quite tricky since it relies on all these `parsers`\n
and `expect` available only here */\n return {\n
alpha: f(parsers.ieAlpha, true),\n boolean
: f(condition),\n 'if': f(condition)\n
}[name.toLowerCase()];\n\n function f(parse, stop) {\n
return {\n parse, // parsing fun
ction\n stop // when true - stop after parse() and
return its result, \n // otherwise continue for plain
args\n };\n }\n \n
function condition() {\n return [expect(p
arsers.condition, 'expected condition')];\n }\n
},\n\n arguments: function (prevArgs) {\n le
t argsComma = prevArgs || [];\n const argsSemiColon = [];\n
let isSemiColonSeparated;\n let value;\n\n
parserInput.save();\n\n while (true) {\n
if (prevArgs) {\n prevArgs = fa
lse;\n } else {\n value = pars
ers.detachedRuleset() || this.assignment() || parsers.expression();\n
if (!value) {\n break;\n
}\n\n if (value.value && value.va
lue.length == 1) {\n value = value.value[0];\n
}\n\n argsComma.push(value);
\n }\n\n if (parserInput.$char(','
)) {\n continue;\n }\n\n
if (parserInput.$char(';') || isSemiColonSeparated) {\n
isSemiColonSeparated = true;\n v
alue = (argsComma.length < 1) ? argsComma[0]\n :
new tree.Value(argsComma);\n argsSemiColon.push(value
);\n argsComma = [];\n }\n
}\n\n parserInput.forget();\n
return isSemiColonSeparated ? argsSemiColon : argsComma;\n },
\n literal: function () {\n return this.dimens
ion() ||\n this.color() ||\n
this.quoted() ||\n this.unicodeDescriptor();\n
},\n\n // Assignments are argument entities for calls.\n
// They are present in ie filter properties as shown below.\n
//\n // filter: progid:DXImageTransform.Microsof
t.Alpha( *opacity=50* )\n //\n\n assignment: funct
ion () {\n let key;\n let value;\n
parserInput.save();\n key = parserInput.$re(/^\\w
+(?=\\s?=)/i);\n if (!key) {\n parserI
nput.restore();\n return;\n }\n
if (!parserInput.$char('=')) {\n parserInput
.restore();\n return;\n }\n
value = parsers.entity();\n if (value) {\n
parserInput.forget();\n return new(tree.Ass
ignment)(key, value);\n } else {\n par
serInput.restore();\n }\n },\n\n
//\n // Parse url() tokens\n //\n
// We use a specific rule for urls, because they don't really behave like\n
// standard function calls. The difference is that the argument does
n't have\n // to be enclosed within a string, so it can't be pars
ed as an Expression.\n //\n url: function () {\n
let value;\n const index = parserInput.i;\n
\n parserInput.autoCommentAbsorb = false;\n\n
if (!parserInput.$str('url(')) {\n parserInput.autoCo
mmentAbsorb = true;\n return;\n }\n\n
value = this.quoted() || this.variable() || this.property() |
|\n parserInput.$re(/^(?:(?:\\\\[\\(\\)'\"])|[^\\(\\)
'\"])+/) || '';\n\n parserInput.autoCommentAbsorb = true;\n\n
expectChar(')');\n\n return new(tree.URL)
((value.value != null || \n value instanceof tree.Variabl
e || \n value instanceof tree.Property) ?\n
value : new(tree.Anonymous)(value, index), index, fileInfo);\n
},\n\n //\n // A Variable entity, such as
`@fink`, in\n //\n // width: @fink + 2px\n
//\n // We use a different parser for variable defini
tions,\n // see `parsers.variable`.\n //\n
variable: function () {\n let ch;\n
let name;\n const index = parserInput.i;\n\n
parserInput.save();\n if (parserInput.currentChar() ===
'@' && (name = parserInput.$re(/^@@?[\\w-]+/))) {\n ch =
parserInput.currentChar();\n if (ch === '(' || ch === '['
&& !parserInput.prevChar().match(/^\\s/)) {\n // thi
s may be a VariableCall lookup\n const result = parse
rs.variableCall(name);\n if (result) {\n
parserInput.forget();\n return
result;\n }\n }\n
parserInput.forget();\n return new(tree.Varia
ble)(name, index, fileInfo);\n }\n parserI
nput.restore();\n },\n\n // A variable entity usin
g the protective {} e.g. @{var}\n variableCurly: function () {\n
let curly;\n const index = parserInput.i;\
n\n if (parserInput.currentChar() === '@' && (curly = parserI
nput.$re(/^@\\{([\\w-]+)\\}/))) {\n return new(tree.Varia
ble)(`@${curly[1]}`, index, fileInfo);\n }\n }
,\n //\n // A Property accessor, such as `$color`,
in\n //\n // background-color: $color\n
//\n property: function () {\n let n
ame;\n const index = parserInput.i;\n\n if
(parserInput.currentChar() === '$' && (name = parserInput.$re(/^\\$[\\w-]+/)))
{\n return new(tree.Property)(name, index, fileInfo);\n
}\n },\n\n // A property entity
useing the protective {} e.g. ${prop}\n propertyCurly: function (
) {\n let curly;\n const index = parserInp
ut.i;\n\n if (parserInput.currentChar() === '$' && (curly = p
arserInput.$re(/^\\$\\{([\\w-]+)\\}/))) {\n return new(tr
ee.Property)(`$${curly[1]}`, index, fileInfo);\n }\n
},\n //\n // A Hexadecimal color\n
//\n // #4F3C2F\n //\n /
/ `rgb` and `hsl` colors are parsed through the `entities.call` parser.\n
//\n color: function () {\n let rgb;\
n parserInput.save();\n\n if (parserInput.
currentChar() === '#' && (rgb = parserInput.$re(/^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6
}|[A-Fa-f0-9]{3,4})([\\w.#\\[])?/))) {\n if (!rgb[2]) {\n
parserInput.forget();\n r
eturn new(tree.Color)(rgb[1], undefined, rgb[0]);\n } \n
}\n parserInput.restore();\n
},\n\n colorKeyword: function () {\n parserI
nput.save();\n const autoCommentAbsorb = parserInput.autoComm
entAbsorb;\n parserInput.autoCommentAbsorb = false;\n
const k = parserInput.$re(/^[_A-Za-z-][_A-Za-z0-9-]+/);\n
parserInput.autoCommentAbsorb = autoCommentAbsorb;\n
if (!k) {\n parserInput.forget();\n
return;\n }\n parserInput.restore();\n
const color = tree.Color.fromKeyword(k);\n
if (color) {\n parserInput.$str(k);\n
return color;\n }\n },\n\n
//\n // A Dimension, that is, a number and a unit\n
//\n // 0.5em 95%\n //\n dim
ension: function () {\n if (parserInput.peekNotNumeric()) {\n
return;\n }\n\n co
nst value = parserInput.$re(/^([+-]?\\d*\\.?\\d+)(%|[a-z_]+)?/i);\n
if (value) {\n return new(tree.Dimension)(value[1]
, value[2]);\n }\n },\n\n //\n
// A unicode descriptor, as is used in unicode-range\n
//\n // U+0?? or U+00A1-00A9\n //\n
unicodeDescriptor: function () {\n let ud;\n\n
ud = parserInput.$re(/^U\\+[0-9a-fA-F?]+(\\-[0-9a-fA-F?]+)?/);\n
if (ud) {\n return new(tree.UnicodeDescri
ptor)(ud[0]);\n }\n },\n\n //\n
// JavaScript code to be evaluated\n //\n
// `window.location.href`\n //\n javas
cript: function () {\n let js;\n const ind
ex = parserInput.i;\n\n parserInput.save();\n\n
const escape = parserInput.$char('~');\n const jsQuote
= parserInput.$char('`');\n\n if (!jsQuote) {\n
parserInput.restore();\n return;\n
}\n\n js = parserInput.$re(/^[^`]*`/);\n
if (js) {\n parserInput.forget();\n
return new(tree.JavaScript)(js.substr(0, js.length - 1), Boolean(escape)
, index, fileInfo);\n }\n parserInput.rest
ore('invalid javascript definition');\n }\n },\n\n
//\n // The variable part of a variable definition. Used in t
he `rule` parser\n //\n // @fink:\n //\n
variable: function () {\n let name;\n\n i
f (parserInput.currentChar() === '@' && (name = parserInput.$re(/^(@[\\w-]+)\\s*
:/))) { return name[1]; }\n },\n\n //\n // Call
a variable value to retrieve a detached ruleset\n // or a value from
a detached ruleset's rules.\n //\n // @fink();\n
// @fink;\n // color: @fink[@color];\n //\n
variableCall: function (parsedName) {\n let lookups;\
n const i = parserInput.i;\n const inValue = !!par
sedName;\n let name = parsedName;\n\n parserInput.
save();\n\n if (name || (parserInput.currentChar() === '@'\n
&& (name = parserInput.$re(/^(@[\\w-]+)(\\(\\s*\\))?/)))) {\n\n
lookups = this.mixin.ruleLookups();\n\n if
(!lookups && ((inValue && parserInput.$str('()') !== '()') || (name[2] !== '()')
)) {\n parserInput.restore('Missing \\'[...]\\' lookup in
variable call');\n return;\n }\n\n
if (!inValue) {\n name = name[1];\n
}\n\n const call = new tree.VariableCall(name,
i, fileInfo);\n if (!inValue && parsers.end()) {\n
parserInput.forget();\n return call;\n
}\n else {\n parserInpu
t.forget();\n return new tree.NamespaceValue(call, lookup
s, i, fileInfo);\n }\n }\n\n pa
rserInput.restore();\n },\n\n //\n // extend sy
ntax - used to extend selectors\n //\n extend: function(is
Rule) {\n let elements;\n let e;\n
const index = parserInput.i;\n let option;\n let e
xtendList;\n let extend;\n\n if (!parserInput.$str
(isRule ? '&:extend(' : ':extend(')) {\n return;\n
}\n\n do {\n option = null;\n
elements = null;\n while (!(option = parserInput.$re(
/^(all)(?=\\s*(\\)|,))/))) {\n e = this.element();\n
if (!e) {\n break;\n
}\n if (elements) {\n
elements.push(e);\n } else {\n
elements = [ e ];\n }\n }\n\n
option = option && option[1];\n if (!elements)
{\n error('Missing target selector for :extend().');\n
}\n extend = new(tree.Extend)(new(tree.Selec
tor)(elements), option, index, fileInfo);\n if (extendList) {
\n extendList.push(extend);\n } else {
\n extendList = [ extend ];\n }\n
} while (parserInput.$char(','));\n\n expect(/^\\)/);\
n\n if (isRule) {\n expect(/^;/);\n
}\n\n return extendList;\n },\n\n //\n
// extendRule - used in a rule to extend all the parent selectors\n
//\n extendRule: function() {\n return this
.extend(true);\n },\n\n //\n // Mixins\n
//\n mixin: {\n //\n // A Mixin ca
ll, with an optional argument list\n //\n // #
mixins > .square(#fff);\n // #mixins.square(#fff);\n
// .rounded(4px, black);\n // .button;\n
//\n // We can lookup / return a value using the lookup syn
tax:\n //\n // color: #mixin.square(#fff)[@col
or];\n //\n // The `while` loop is there because m
ixins can be\n // namespaced, but we only support the child and d
escendant\n // selector for now.\n //\n
call: function (inValue, getLookup) {\n const s = parser
Input.currentChar();\n let important = false;\n
let lookups;\n const index = parserInput.i;\n
let elements;\n let args;\n let
hasParens;\n\n if (s !== '.' && s !== '#') { return; }\n\n
parserInput.save(); // stop us absorbing part of an invalid sel
ector\n\n elements = this.elements();\n\n
if (elements) {\n if (parserInput.$char('(')) {\n
args = this.args(true).args;\n ex
pectChar(')');\n hasParens = true;\n
}\n\n if (getLookup !== false) {\n
lookups = this.ruleLookups();\n }\n
if (getLookup === true && !lookups) {\n
parserInput.restore();\n return;\n
}\n\n if (inValue && !lookups && !hasParens) {\n
// This isn't a valid in-value mixin call\n
parserInput.restore();\n return;\n
}\n\n if (!inValue && parsers.import
ant()) {\n important = true;\n
}\n\n if (inValue || parsers.end()) {\n
parserInput.forget();\n const mixin = new(
tree.mixin.Call)(elements, args, index, fileInfo, !lookups && important);\n
if (lookups) {\n return ne
w tree.NamespaceValue(mixin, lookups);\n }\n
else {\n return mixin;\n
}\n }\n }\n\n
parserInput.restore();\n },\n /**
\n * Matching elements for mixins\n * (Start wit
h . or # and can have > )\n */\n elements: functi
on() {\n let elements;\n let e;\n
let c;\n let elem;\n let elemIn
dex;\n const re = /^[#.](?:[\\w-]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[
^A-Fa-f0-9]))+/;\n while (true) {\n el
emIndex = parserInput.i;\n e = parserInput.$re(re);\n
\n if (!e) {\n
break;\n }\n elem = new(tree.
Element)(c, e, false, elemIndex, fileInfo);\n if (element
s) {\n elements.push(elem);\n
} else {\n elements = [ elem ];\n
}\n c = parserInput.$char('>');\n
}\n return elements;\n },\n arg
s: function (isCall) {\n const entities = parsers.entities;\n
const returner = { args:null, variadic: false };\n
let expressions = [];\n const argsSemiColon = [];\n
const argsComma = [];\n let isSemiColonSe
parated;\n let expressionContainsNamed;\n
let name;\n let nameLoop;\n let value;\n
let arg;\n let expand;\n
let hasSep = true;\n\n parserInput.save();\n\n
while (true) {\n if (isCall) {\n
arg = parsers.detachedRuleset() || parsers.expression();\n
} else {\n parserInput.commentStore.length
= 0;\n if (parserInput.$str('...')) {\n
returner.variadic = true;\n if
(parserInput.$char(';') && !isSemiColonSeparated) {\n
isSemiColonSeparated = true;\n }\n
(isSemiColonSeparated ? argsSemiColon : argsComma)\n
.push({ variadic: true });\n
break;\n }\n
arg = entities.variable() || entities.property() || entities.literal() || enti
ties.keyword() || this.call(true);\n }\n\n
if (!arg || !hasSep) {\n break;\n
}\n\n nameLoop = null;\n
if (arg.throwAwayComments) {\n arg.throwAwayComme
nts();\n }\n value = arg;\n
let val = null;\n\n if (isCall) {\n
// Variable\n if (arg.value &&
arg.value.length == 1) {\n val = arg.value[0];\n
}\n } else {\n
val = arg;\n }\n\n if
(val && (val instanceof tree.Variable || val instanceof tree.Property)) {\n
if (parserInput.$char(':')) {\n
if (expressions.length > 0) {\n if (is
SemiColonSeparated) {\n error('Cannot mix
; and , as delimiter types');\n }\n
expressionContainsNamed = true;\n
}\n\n value = parsers.detachedRuleset
() || parsers.expression();\n\n if (!value) {\n
if (isCall) {\n
error('could not understand value for named argument');\n
} else {\n parserIn
put.restore();\n returner.args = [];\n
return returner;\n
}\n }\n
nameLoop = (name = val.name);\n } else if (parserInp
ut.$str('...')) {\n if (!isCall) {\n
returner.variadic = true;\n
if (parserInput.$char(';') && !isSemiColonSeparated) {\n
isSemiColonSeparated = true;\n
}\n (isSemiColonSeparated ? argsSemiC
olon : argsComma)\n .push({ name: arg.nam
e, variadic: true });\n break;\n
} else {\n expand = true;\
n }\n } else if (!isCa
ll) {\n name = nameLoop = val.name;\n
value = null;\n }\n
}\n\n if (value) {\n
expressions.push(value);\n }\n\n
argsComma.push({ name:nameLoop, value, expand });\n\n if
(parserInput.$char(',')) {\n hasSep = true;\n
continue;\n }\n
hasSep = parserInput.$char(';') === ';';\n\n if (hasSep
|| isSemiColonSeparated) {\n\n if (expressionContain
sNamed) {\n error('Cannot mix ; and , as delimite
r types');\n }\n\n isSemiC
olonSeparated = true;\n\n if (expressions.length > 1)
{\n value = new(tree.Value)(expressions);\n
}\n argsSemiColon.push({ name,
value, expand });\n\n name = null;\n
expressions = [];\n expressionContainsNam
ed = false;\n }\n }\n\n
parserInput.forget();\n returner.args = isSemiColonSepar
ated ? argsSemiColon : argsComma;\n return returner;\n
},\n //\n // A Mixin definition, with a l
ist of parameters\n //\n // .rounded (@radius:
2px, @color) {\n // ...\n // }\n
//\n // Until we have a finer grained state-machine, we
have to\n // do a look-ahead, to make sure we don't have a mixin
call.\n // See the `rule` function for more information.\n
//\n // We start by matching `.rounded (`, and then pro
ceed on to\n // the argument list, which has optional default val
ues.\n // We store the parameters in `params`, with a `value` key
,\n // if there is a value, such as in the case of `@radius`.\n
//\n // Once we've got our params list, and a closi
ng `)`, we parse\n // the `{...}` block.\n //\n
definition: function () {\n let name;\n
let params = [];\n let match;\n
let ruleset;\n let cond;\n let variadic =
false;\n if ((parserInput.currentChar() !== '.' && parserInp
ut.currentChar() !== '#') ||\n parserInput.peek(/^[^{]*\\
}/)) {\n return;\n }\n\n
parserInput.save();\n\n match = parserInput.$re(/^([#.]
(?:[\\w-]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\\s*\\(/);\n
if (match) {\n name = match[1];\n\n
const argInfo = this.args(false);\n params = argInf
o.args;\n variadic = argInfo.variadic;\n\n
// .mixincall(\"@{a}\");\n // looks a bit like a
mixin definition..\n // also\n //
.mixincall(@a: {rule: set;});\n // so we have to be nice
and restore\n if (!parserInput.$char(')')) {\n
parserInput.restore('Missing closing \\')\\'');\n
return;\n }\n\n par
serInput.commentStore.length = 0;\n\n if (parserInput.$st
r('when')) { // Guard\n cond = expect(parsers.conditi
ons, 'expected condition');\n }\n\n
ruleset = parsers.block();\n\n if (ruleset) {\n
parserInput.forget();\n return ne
w(tree.mixin.Definition)(name, params, ruleset, cond, variadic);\n
} else {\n parserInput.restore();\n
}\n } else {\n parserI
nput.restore();\n }\n },\n \n
ruleLookups: function() {\n let rule;\n
let args;\n const lookups = [];\n\n
if (parserInput.currentChar() !== '[') { \n return;\n
}\n\n while (true) {\n
parserInput.save();\n args = null;\n
rule = this.lookupValue();\n if (!rule && rule !==
'') {\n parserInput.restore();\n
break;\n }\n lookups.push(r
ule);\n parserInput.forget();\n }\n
if (lookups.length > 0) {\n return looku
ps;\n }\n },\n \n lookupValu
e: function() {\n parserInput.save();\n \n
if (!parserInput.$char('[')) { \n parserInput.restore
();\n return;\n }\n \n
const name = parserInput.$re(/^(?:[@$]{0,2})[_a-zA-Z0-9-]*/);\n \n
if (!parserInput.$char(']')) {\n parserIn
put.restore();\n return;\n } \n\n
if (name || name === '') {\n parserInput.f
orget();\n return name;\n }\n \n
parserInput.restore();\n }\n },\n
//\n // Entities are the smallest recognized token,\n
// and can be found inside a rule's value.\n //\n enti
ty: function () {\n const entities = this.entities;\n\n
return this.comment() || entities.literal() || entities.variable() || enti
ties.url() ||\n entities.property() || entities.call() || ent
ities.keyword() || this.mixin.call(true) ||\n entities.javasc
ript();\n },\n\n //\n // A Declaration terminat
or. Note that we use `peek()` to check for '}',\n // because the `blo
ck` rule will be expecting it, but we still need to make sure\n // it
's there, if ';' was omitted.\n //\n end: function () {\n
return parserInput.$char(';') || parserInput.peek('}');\n
},\n\n //\n // IE's alpha function\n //\n
// alpha(opacity=88)\n //\n ieAlpha: functio
n () {\n let value;\n\n // http://jsperf.com/case-
insensitive-regex-vs-strtolower-then-regex/18\n if (!parserInput.
$re(/^opacity=/i)) { return; }\n value = parserInput.$re(/^\\d+/)
;\n if (!value) {\n value = expect(parsers.ent
ities.variable, 'Could not parse alpha');\n value = `@{${valu
e.name.slice(1)}}`;\n }\n expectChar(')');\n
return new tree.Quoted('', `alpha(opacity=${value})`);\n },
\n\n //\n // A Selector Element\n //\n
// div\n // + h1\n // #socks\n /
/ input[type=\"text\"]\n //\n // Elements are the buil
ding blocks for Selectors,\n // they are made out of a `Combinator` (
see combinator rule),\n // and an element name, such as a tag a class
, or `*`.\n //\n element: function () {\n l
et e;\n let c;\n let v;\n const ind
ex = parserInput.i;\n\n c = this.combinator();\n\n
e = parserInput.$re(/^(?:\\d+\\.\\d+|\\d+)%/) ||\n parserInp
ut.$re(/^(?:[.#]?|:*)(?:[\\w-]|[^\\x00-\\x9f]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f
0-9]))+/) ||\n parserInput.$char('*') || parserInput.$char('&
') || this.attribute() ||\n parserInput.$re(/^\\([^&()@]+\\)/
) || parserInput.$re(/^[\\.#:](?=@)/) ||\n this.entities.var
iableCurly();\n\n if (!e) {\n parserInput.save
();\n if (parserInput.$char('(')) {\n
if ((v = this.selector(false)) && parserInput.$char(')')) {\n
e = new(tree.Paren)(v);\n parserInput.forget
();\n } else {\n parserInput.r
estore('Missing closing \\')\\'');\n }\n
} else {\n parserInput.forget();\n
}\n }\n\n if (e) { return new(tree.Element)(c, e,
e instanceof tree.Variable, index, fileInfo); }\n },\n\n /
/\n // Combinators combine elements together, in a Selector.\n
//\n // Because our parser isn't white-space sensitive, special
care\n // has to be taken, when parsing the descendant combinator, `
`,\n // as it's an empty space. We have to check the previous charact
er\n // in the input, to see if it's a ` ` character. More info on ho
w\n // we deal with this in *combinator.js*.\n //\n
combinator: function () {\n let c = parserInput.currentChar(
);\n\n if (c === '/') {\n parserInput.save();\
n const slashedCombinator = parserInput.$re(/^\\/[a-z]+\\//i)
;\n if (slashedCombinator) {\n parserI
nput.forget();\n return new(tree.Combinator)(slashedCombi
nator);\n }\n parserInput.restore();\n
}\n\n if (c === '>' || c === '+' || c === '~' || c ==
= '|' || c === '^') {\n parserInput.i++;\n
if (c === '^' && parserInput.currentChar() === '^') {\n
c = '^^';\n parserInput.i++;\n }\n
while (parserInput.isWhitespace()) { parserInput.i++; }\n
return new(tree.Combinator)(c);\n } else if (parserI
nput.isWhitespace(-1)) {\n return new(tree.Combinator)(' ');\
n } else {\n return new(tree.Combinator)(null)
;\n }\n },\n //\n // A CSS Selec
tor\n // with less extensions e.g. the ability to extend and guard\n
//\n // .class > div + h1\n // li a:hov
er\n //\n // Selectors are made out of one or more Element
s, see above.\n //\n selector: function (isLess) {\n
const index = parserInput.i;\n let elements;\n
let extendList;\n let c;\n let e;\n
let allExtends;\n let when;\n let conditio
n;\n isLess = isLess !== false;\n while ((isLess &
& (extendList = this.extend())) || (isLess && (when = parserInput.$str('when')))
|| (e = this.element())) {\n if (when) {\n
condition = expect(this.conditions, 'expected condition');\n
} else if (condition) {\n error('CSS guard can only
be used at the end of selector');\n } else if (extendList) {
\n if (allExtends) {\n allExte
nds = allExtends.concat(extendList);\n } else {\n
allExtends = extendList;\n }\n
} else {\n if (allExtends) { error('Extend c
an only be used at the end of selector'); }\n c = parserI
nput.currentChar();\n if (elements) {\n
elements.push(e);\n } else {\n
elements = [ e ];\n }\n
e = null;\n }\n if (c === '{' || c === '}
' || c === ';' || c === ',' || c === ')') {\n break;\n
}\n }\n\n if (elements) { return
new(tree.Selector)(elements, allExtends, condition, index, fileInfo); }\n
if (allExtends) { error('Extend must be used to extend a selector, it c
annot be used on its own'); }\n },\n selectors: function (
) {\n let s;\n let selectors;\n whi
le (true) {\n s = this.selector();\n if (!
s) {\n break;\n }\n
if (selectors) {\n selectors.push(s);\n
} else {\n selectors = [ s ];\n }\n
parserInput.commentStore.length = 0;\n if
(s.condition && selectors.length > 1) {\n error(\"Guards
are only currently allowed on a single selector.\");\n }\n
if (!parserInput.$char(',')) { break; }\n i
f (s.condition) {\n error(\"Guards are only currently all
owed on a single selector.\");\n }\n parse
rInput.commentStore.length = 0;\n }\n return selec
tors;\n },\n attribute: function () {\n if
(!parserInput.$char('[')) { return; }\n\n const entities = this.e
ntities;\n let key;\n let val;\n le
t op;\n\n if (!(key = entities.variableCurly())) {\n
key = expect(/^(?:[_A-Za-z0-9-\\*]*\\|)?(?:[_A-Za-z0-9-]|\\\\.)+/);\n
}\n\n op = parserInput.$re(/^[|~*$^]?=/);\n
if (op) {\n val = entities.quoted() || parserInput.$re(
/^[0-9]+%/) || parserInput.$re(/^[\\w-]+/) || entities.variableCurly();\n
}\n\n expectChar(']');\n\n return new(tre
e.Attribute)(key, op, val);\n },\n\n //\n // Th
e `block` rule is used by `ruleset` and `mixin.definition`.\n // It's
a wrapper around the `primary` rule, with added `{}`.\n //\n
block: function () {\n let content;\n if (pars
erInput.$char('{') && (content = this.primary()) && parserInput.$char('}')) {\n
return content;\n }\n },\n\n
blockRuleset: function() {\n let block = this.block();\n\n
if (block) {\n block = new tree.Ruleset(null, b
lock);\n }\n return block;\n },\n\n
detachedRuleset: function() {\n let argInfo;\n
let params;\n let variadic;\n\n parserInput.s
ave();\n if (parserInput.$re(/^[.#]\\(/)) {\n
/**\n * DR args currently only implemented for each() functi
on, and not \n * yet settable as `@dr: #(@arg) {}`\n
* This should be done when DRs are merged with mixins.\n
* See: https://github.com/less/less-meta/issues/16\n
*/\n argInfo = this.mixin.args(false);\n
params = argInfo.args;\n variadic = argInfo.variadic;\n
if (!parserInput.$char(')')) {\n parserIn
put.restore();\n return;\n }\n
}\n const blockRuleset = this.blockRuleset();\n
if (blockRuleset) {\n parserInput.forget();\n
if (params) {\n return new tree.mixin.Definitio
n(null, params, blockRuleset, null, variadic);\n }\n
return new tree.DetachedRuleset(blockRuleset);\n }\n
parserInput.restore();\n },\n\n //\n
// div, .class, body > p {...}\n //\n ruleset: functio
n () {\n let selectors;\n let rules;\n
let debugInfo;\n\n parserInput.save();\n\n if
(context.dumpLineNumbers) {\n debugInfo = getDebugInfo(parser
Input.i);\n }\n\n selectors = this.selectors();\n\
n if (selectors && (rules = this.block())) {\n
parserInput.forget();\n const ruleset = new(tree.Ruleset)(se
lectors, rules, context.strictImports);\n if (context.dumpLin
eNumbers) {\n ruleset.debugInfo = debugInfo;\n
}\n return ruleset;\n } else {\n
parserInput.restore();\n }\n },\n
declaration: function () {\n let name;\n let
value;\n const index = parserInput.i;\n let hasDR
;\n const c = parserInput.currentChar();\n let imp
ortant;\n let merge;\n let isVariable;\n\n
if (c === '.' || c === '#' || c === '&' || c === ':') { return; }\n\n
parserInput.save();\n\n name = this.variable() || th
is.ruleProperty();\n if (name) {\n isVariable
= typeof name === 'string';\n\n if (isVariable) {\n
value = this.detachedRuleset();\n if (value
) {\n hasDR = true;\n }\n
}\n\n parserInput.commentStore.length = 0;\n
if (!value) {\n // a name returned by t
his.ruleProperty() is always an array of the form:\n // [
string-1, ..., string-n, \"\"] or [string-1, ..., string-n, \"+\"]\n
// where each item is a tree.Keyword or tree.Variable\n
merge = !isVariable && name.length > 1 && name.pop().value;\n\n
// Custom property values get permissive parsing\n
if (name[0].value && name[0].value.slice(0, 2) === '--') {\n
value = this.permissiveValue();\n }\n
// Try to store values as anonymous\n
// If we need the value later we'll re-parse it in ruleset.parseValue\n
else {\n value = this.anonymousVa
lue();\n }\n if (value) {\n
parserInput.forget();\n // anony
mous values absorb the end ';' which is required for them to work\n
return new(tree.Declaration)(name, value, false, merge, index, fi
leInfo);\n }\n\n if (!value) {\n
value = this.value();\n }\n\n
if (value) {\n important = this
.important();\n } else if (isVariable) {\n
// As a last resort, try permissiveValue\n
value = this.permissiveValue();\n }\n
}\n\n if (value && (this.end() || hasDR)) {\n
parserInput.forget();\n return new(tree.Declar
ation)(name, value, important, merge, index, fileInfo);\n }\n
else {\n parserInput.restore();\n
}\n } else {\n parserInput.res
tore();\n }\n },\n anonymousValue: function
() {\n const index = parserInput.i;\n const match
= parserInput.$re(/^([^.#@\\$+\\/'\"*`(;{}-]*);/);\n if (match)
{\n return new(tree.Anonymous)(match[1], index);\n
}\n },\n /**\n * Used for custom properti
es, at-rules, and variables (as fallback)\n * Parses almost anything
inside of {} [] () \"\" blocks\n * until it reaches outer-most toke
ns.\n * \n * First, it will try to parse comments and en
tities to reach\n * the end. This is mostly like the Expression pars
er except no\n * math is allowed.\n */\n perm
issiveValue: function (untilTokens) {\n let i;\n l
et e;\n let done;\n let value;\n co
nst tok = untilTokens || ';';\n const index = parserInput.i;\n
const result = [];\n\n function testCurrentChar() {\
n const char = parserInput.currentChar();\n
if (typeof tok === 'string') {\n return char === tok;\n
} else {\n return tok.test(char);\n
}\n }\n if (testCurrentChar()) {
\n return;\n }\n value = [];\n
do {\n e = this.comment();\n
if (e) {\n value.push(e);\n cont
inue;\n }\n e = this.entity();\n
if (e) {\n value.push(e);\n
}\n } while (e);\n\n done = testCurrentChar();\n\n
if (value.length > 0) {\n value = new(tree.Ex
pression)(value);\n if (done) {\n retu
rn value;\n }\n else {\n
result.push(value);\n }\n // Preserv
e space before $parseUntil as it will not\n if (parserInput.p
revChar() === ' ') {\n result.push(new tree.Anonymous(' '
, index));\n }\n }\n parserInpu
t.save();\n\n value = parserInput.$parseUntil(tok);\n\n
if (value) {\n if (typeof value === 'string') {\n
error(`Expected '${value}'`, 'Parse');\n }\
n if (value.length === 1 && value[0] === ' ') {\n
parserInput.forget();\n return new tree.Anony
mous('', index);\n }\n let item;\n
for (i = 0; i < value.length; i++) {\n item =
value[i];\n if (Array.isArray(item)) {\n
// Treat actual quotes as normal quoted values\n
result.push(new tree.Quoted(item[0], item[1], true, index, fileInfo));\n
}\n else {\n
if (i === value.length - 1) {\n item = ite
m.trim();\n }\n // Treat l
ike quoted values, but replace vars like unquoted expressions\n
const quote = new tree.Quoted('\\'', item, true, index, fileInfo);\n
quote.variableRegex = /@([\\w-]+)/g;\n
quote.propRegex = /\\$([\\w-]+)/g;\n res
ult.push(quote);\n }\n }\n
parserInput.forget();\n return new tree.Expression(re
sult, true);\n }\n parserInput.restore();\n
},\n\n //\n // An @import atrule\n //\n
// @import \"lib\";\n //\n // Depending on ou
r environment, importing is done differently:\n // In the browser, it
's an XHR request, in Node, it would be a\n // file-system operation.
The function used for importing is\n // stored in `import`, which we
pass to the Import constructor.\n //\n 'import': function
() {\n let path;\n let features;\n
const index = parserInput.i;\n\n const dir = parserInput.$re(/^@
import?\\s+/);\n\n if (dir) {\n const options
= (dir ? this.importOptions() : null) || {};\n\n if ((path =
this.entities.quoted() || this.entities.url())) {\n featu
res = this.mediaFeatures();\n\n if (!parserInput.$char(';
')) {\n parserInput.i = index;\n
error('missing semi-colon or unrecognised media features on import');\n
}\n features = features && new(tree
.Value)(features);\n return new(tree.Import)(path, featur
es, options, index, fileInfo);\n }\n else
{\n parserInput.i = index;\n error
('malformed import statement');\n }\n }\n
},\n\n importOptions: function() {\n let o;\n
const options = {};\n let optionName;\n
let value;\n\n // list of options, surrounded by parens\n
if (!parserInput.$char('(')) { return null; }\n do {\
n o = this.importOption();\n if (o) {\n
optionName = o;\n value = true;\n
switch (optionName) {\n case 'cs
s':\n optionName = 'less';\n
value = false;\n break;\n
case 'once':\n optionName = 'multi
ple';\n value = false;\n
break;\n }\n options[option
Name] = value;\n if (!parserInput.$char(',')) { break; }\
n }\n } while (o);\n expectChar
(')');\n return options;\n },\n\n importOpt
ion: function() {\n const opt = parserInput.$re(/^(less|css|multi
ple|once|inline|reference|optional)/);\n if (opt) {\n
return opt[1];\n }\n },\n\n mediaFe
ature: function () {\n const entities = this.entities;\n
const nodes = [];\n let e;\n let p;\n
parserInput.save();\n do {\n e = ent
ities.keyword() || entities.variable() || entities.mixinLookup();\n
if (e) {\n nodes.push(e);\n } e
lse if (parserInput.$char('(')) {\n p = this.property();\
n e = this.value();\n if (parserIn
put.$char(')')) {\n if (p && e) {\n
nodes.push(new(tree.Paren)(new(tree.Declaration)(p, e, null, null,
parserInput.i, fileInfo, true)));\n } else if (e) {\
n nodes.push(new(tree.Paren)(e));\n
} else {\n error('badly formed medi
a feature definition');\n }\n
} else {\n error('Missing closing \\')\\'', 'Parse');
\n }\n }\n } while (e);
\n\n parserInput.forget();\n if (nodes.length > 0)
{\n return new(tree.Expression)(nodes);\n }\n
},\n\n mediaFeatures: function () {\n cons
t entities = this.entities;\n const features = [];\n
let e;\n do {\n e = this.mediaFeature();\n
if (e) {\n features.push(e);\n
if (!parserInput.$char(',')) { break; }\n } e
lse {\n e = entities.variable() || entities.mixinLookup()
;\n if (e) {\n features.push(e
);\n if (!parserInput.$char(',')) { break; }\n
}\n }\n } while (e);\n\n
return features.length > 0 ? features : null;\n },\n\n
media: function () {\n let features;\n let
rules;\n let media;\n let debugInfo;\n
const index = parserInput.i;\n\n if (context.dumpLineNumbers
) {\n debugInfo = getDebugInfo(index);\n }\n\n
parserInput.save();\n\n if (parserInput.$str('@me
dia')) {\n features = this.mediaFeatures();\n\n
rules = this.block();\n\n if (!rules) {\n
error('media definitions require block statements after any features')
;\n }\n\n parserInput.forget();\n\n
media = new(tree.Media)(rules, features, index, fileInfo);\n
if (context.dumpLineNumbers) {\n media.debug
Info = debugInfo;\n }\n\n return media;\n
}\n\n parserInput.restore();\n },\n\n
//\n\n // A @plugin directive, used to import plugins dynam
ically.\n //\n // @plugin (args) \"lib\";\n
//\n plugin: function () {\n let path;\n
let args;\n let options;\n const index = parser
Input.i;\n const dir = parserInput.$re(/^@plugin?\\s+/);\n\n
if (dir) {\n args = this.pluginArgs();\n\n
if (args) {\n options = {\n
pluginArgs: args,\n isPlugin: true\n
};\n }\n else {\n
options = { isPlugin: true };\n }\n\n
if ((path = this.entities.quoted() || this.entities.url())) {\n\n
if (!parserInput.$char(';')) {\n
parserInput.i = index;\n error('missing semi-colon
on @plugin');\n }\n return new(tr
ee.Import)(path, null, options, index, fileInfo);\n }\n
else {\n parserInput.i = index;\n
error('malformed @plugin statement');\n }\n
}\n },\n\n pluginArgs: function() {\n
// list of options, surrounded by parens\n parserInput.sav
e();\n if (!parserInput.$char('(')) {\n parser
Input.restore();\n return null;\n }\n
const args = parserInput.$re(/^\\s*([^\\);]+)\\)\\s*/);\n
if (args[1]) {\n parserInput.forget();\n r
eturn args[1].trim();\n }\n else { \n
parserInput.restore();\n return null;\n
}\n },\n\n //\n // A CSS AtRule\n /
/\n // @charset \"utf-8\";\n //\n atrule: f
unction () {\n const index = parserInput.i;\n let
name;\n let value;\n let rules;\n l
et nonVendorSpecificName;\n let hasIdentifier;\n l
et hasExpression;\n let hasUnknown;\n let hasBlock
= true;\n let isRooted = true;\n\n if (parserInpu
t.currentChar() !== '@') { return; }\n\n value = this['import']()
|| this.plugin() || this.media();\n if (value) {\n
return value;\n }\n\n parserInput.save();\n\
n name = parserInput.$re(/^@[a-z-]+/);\n\n if (!na
me) { return; }\n\n nonVendorSpecificName = name;\n
if (name.charAt(1) == '-' && name.indexOf('-', 2) > 0) {\n
nonVendorSpecificName = `@${name.slice(name.indexOf('-', 2) + 1)}`;\n
}\n\n switch (nonVendorSpecificName) {\n
case '@charset':\n hasIdentifier = true;\n
hasBlock = false;\n break;\n
case '@namespace':\n hasExpression = true;\n
hasBlock = false;\n break;\n
case '@keyframes':\n case '@counter-style':\n
hasIdentifier = true;\n break;\n
case '@document':\n case '@supports':\n
hasUnknown = true;\n isRooted = false;\n
break;\n default:\n hasU
nknown = true;\n break;\n }\n\n
parserInput.commentStore.length = 0;\n\n if (hasIdentifier)
{\n value = this.entity();\n if (!value) {
\n error(`expected ${name} identifier`);\n
}\n } else if (hasExpression) {\n value =
this.expression();\n if (!value) {\n
error(`expected ${name} expression`);\n }\n }
else if (hasUnknown) {\n value = this.permissiveValue(/^[{;]/
);\n hasBlock = (parserInput.currentChar() === '{');\n
if (!value) {\n if (!hasBlock && parserInput
.currentChar() !== ';') {\n error(`${name} rule is mi
ssing block or ending semi-colon`);\n }\n
}\n else if (!value.value) {\n val
ue = null;\n }\n }\n\n if (hasB
lock) {\n rules = this.blockRuleset();\n }\n\n
if (rules || (!hasBlock && value && parserInput.$char(';'))) {\n
parserInput.forget();\n return new(tree.A
tRule)(name, value, rules, index, fileInfo,\n context.dum
pLineNumbers ? getDebugInfo(index) : null,\n isRooted\n
);\n }\n\n parserInput.restore('
at-rule options not recognised');\n },\n\n //\n
// A Value is a comma-delimited list of Expressions\n //\n
// font-family: Baskerville, Georgia, serif;\n //\n
// In a Rule, a Value represents everything after the `:`,\n // and b
efore the `;`.\n //\n value: function () {\n
let e;\n const expressions = [];\n const index =
parserInput.i;\n\n do {\n e = this.expression
();\n if (e) {\n expressions.push(e);\
n if (!parserInput.$char(',')) { break; }\n
}\n } while (e);\n\n if (expressions.length
> 0) {\n return new(tree.Value)(expressions, index);\n
}\n },\n important: function () {\n
if (parserInput.currentChar() === '!') {\n return parserInp
ut.$re(/^! *important/);\n }\n },\n sub: fu
nction () {\n let a;\n let e;\n\n p
arserInput.save();\n if (parserInput.$char('(')) {\n
a = this.addition();\n if (a && parserInput.$char(')')
) {\n parserInput.forget();\n e =
new(tree.Expression)([a]);\n e.parens = true;\n
return e;\n }\n parserInput.
restore('Expected \\')\\'');\n return;\n }\n
parserInput.restore();\n },\n multiplication
: function () {\n let m;\n let a;\n
let op;\n let operation;\n let isSpaced;\n
m = this.operand();\n if (m) {\n isSp
aced = parserInput.isWhitespace(-1);\n while (true) {\n
if (parserInput.peek(/^\\/[*\\/]/)) {\n
break;\n }\n\n parserInput.sa
ve();\n\n op = parserInput.$char('/') || parserInput.$cha
r('*') || parserInput.$str('./');\n\n if (!op) { parserIn
put.forget(); break; }\n\n a = this.operand();\n\n
if (!a) { parserInput.restore(); break; }\n
parserInput.forget();\n\n m.parensInOp = true;\n
a.parensInOp = true;\n operation = new
(tree.Operation)(op, [operation || m, a], isSpaced);\n is
Spaced = parserInput.isWhitespace(-1);\n }\n
return operation || m;\n }\n },\n additi
on: function () {\n let m;\n let a;\n
let op;\n let operation;\n let isSpaced;\n
m = this.multiplication();\n if (m) {\n
isSpaced = parserInput.isWhitespace(-1);\n while (true)
{\n op = parserInput.$re(/^[-+]\\s+/) || (!isSpaced && (p
arserInput.$char('+') || parserInput.$char('-')));\n if (
!op) {\n break;\n }\n
a = this.multiplication();\n if (!a) {\n
break;\n }\n\n
m.parensInOp = true;\n a.parensInOp = true;\n
operation = new(tree.Operation)(op, [operation || m, a], isSp
aced);\n isSpaced = parserInput.isWhitespace(-1);\n
}\n return operation || m;\n }\n
},\n conditions: function () {\n let a;\n
let b;\n const index = parserInput.i;\n
let condition;\n\n a = this.condition(true);\n
if (a) {\n while (true) {\n if (!par
serInput.peek(/^,\\s*(not\\s*)?\\(/) || !parserInput.$char(',')) {\n
break;\n }\n b = t
his.condition(true);\n if (!b) {\n
break;\n }\n condition = new(
tree.Condition)('or', condition || a, b, index);\n }\n
return condition || a;\n }\n },\n
condition: function (needsParens) {\n let result;\n
let logical;\n let next;\n function or() {\n
return parserInput.$str('or');\n }\n\n
result = this.conditionAnd(needsParens);\n if (!result)
{\n return ;\n }\n logical = or
();\n if (logical) {\n next = this.condition(n
eedsParens);\n if (next) {\n result =
new(tree.Condition)(logical, result, next);\n } else {\n
return ;\n }\n }\n
return result;\n },\n conditionAnd: function (needs
Parens) {\n let result;\n let logical;\n
let next;\n const self = this;\n function in
sideCondition() {\n const cond = self.negatedCondition(needsP
arens) || self.parenthesisCondition(needsParens);\n if (!cond
&& !needsParens) {\n return self.atomicCondition(needsPa
rens);\n }\n return cond;\n
}\n function and() {\n return parserInput.$st
r('and');\n }\n\n result = insideCondition();\n
if (!result) {\n return ;\n }\n
logical = and();\n if (logical) {\n
next = this.conditionAnd(needsParens);\n if (next) {\n
result = new(tree.Condition)(logical, result, next);\n
} else {\n return ;\n }
\n }\n return result;\n },\n
negatedCondition: function (needsParens) {\n if (parserInput.$st
r('not')) {\n const result = this.parenthesisCondition(needsP
arens);\n if (result) {\n result.negat
e = !result.negate;\n }\n return result;\n
}\n },\n parenthesisCondition: function (n
eedsParens) {\n function tryConditionFollowedByParenthesis(me) {\
n let body;\n parserInput.save();\n
body = me.condition(needsParens);\n if (!body) {
\n parserInput.restore();\n return
;\n }\n if (!parserInput.$char(')')) {\n
parserInput.restore();\n return ;\
n }\n parserInput.forget();\n
return body;\n }\n\n let body;\n
parserInput.save();\n if (!parserInput.$str('(')) {\n
parserInput.restore();\n return ;\n
}\n body = tryConditionFollowedByParenthesis(this);\n
if (body) {\n parserInput.forget();\n
return body;\n }\n\n body = this.atomicConditio
n(needsParens);\n if (!body) {\n parserInput.r
estore();\n return ;\n }\n if (
!parserInput.$char(')')) {\n parserInput.restore(`expected ')
' got '${parserInput.currentChar()}'`);\n return ;\n
}\n parserInput.forget();\n return body;\n
},\n atomicCondition: function (needsParens) {\n
const entities = this.entities;\n const index = parserInput
.i;\n let a;\n let b;\n let c;\n
let op;\n\n function cond() {\n r
eturn this.addition() || entities.keyword() || entities.quoted() || entities.mix
inLookup();\n }\n cond = cond.bind(this);\n\n
a = cond();\n if (a) {\n if (parser
Input.$char('>')) {\n if (parserInput.$char('=')) {\n
op = '>=';\n } else {\n
op = '>';\n }\n } el
se\n if (parserInput.$char('<')) {\n i
f (parserInput.$char('=')) {\n op = '<=';\n
} else {\n op = '<';\n
}\n } else\n if (parserInput.$char(
'=')) {\n if (parserInput.$char('>')) {\n
op = '=>';\n } else if (parserInput.$char('<'
)) {\n op = '=<';\n } else {\n
op = '=';\n }\n
}\n if (op) {\n b = cond();\n
if (b) {\n c = new(tree.Conditio
n)(op, a, b, index, false);\n } else {\n
error('expected expression');\n }\n
} else {\n c = new(tree.Condition)('=', a, new(t
ree.Keyword)('true'), index, false);\n }\n
return c;\n }\n },\n\n //\n //
An operand is anything that can be part of an operation,\n // such as
a Color, or a Variable\n //\n operand: function () {\n
const entities = this.entities;\n let negate;\n\n
if (parserInput.peek(/^-[@\\$\\(]/)) {\n negate
= parserInput.$char('-');\n }\n\n let o = this.sub
() || entities.dimension() ||\n entities.color() || entit
ies.variable() ||\n entities.property() || entities.call(
) ||\n entities.quoted(true) || entities.colorKeyword() |
|\n entities.mixinLookup();\n\n if (negate
) {\n o.parensInOp = true;\n o = new(tree.
Negative)(o);\n }\n\n return o;\n },\n\
n //\n // Expressions either represent mathematical operat
ions,\n // or white-space delimited Entities.\n //\n
// 1px solid black\n // @var * 2\n //\n
expression: function () {\n const entities = [];\n
let e;\n let delim;\n const index = parser
Input.i;\n\n do {\n e = this.comment();\n
if (e) {\n entities.push(e);\n
continue;\n }\n e = this.addit
ion() || this.entity();\n\n if (e instanceof tree.Comment) {\
n e = null;\n }\n\n
if (e) {\n entities.push(e);\n //
operations do not allow keyword \"/\" dimension (e.g. small/20px) so we support
that here\n if (!parserInput.peek(/^\\/[\\/*]/)) {\n
delim = parserInput.$char('/');\n
if (delim) {\n entities.push(new(tree.Anonym
ous)(delim, index));\n }\n }\n
}\n } while (e);\n if (entitie
s.length > 0) {\n return new(tree.Expression)(entities);\n
}\n },\n property: function () {\n
const name = parserInput.$re(/^(\\*?-?[_a-zA-Z0-9-]+)\\s*:/);\n
if (name) {\n return name[1];\n }\n
},\n ruleProperty: function () {\n let name = [];
\n const index = [];\n let s;\n let
k;\n\n parserInput.save();\n\n const simpleProper
ty = parserInput.$re(/^([_a-zA-Z0-9-]+)\\s*:/);\n if (simplePrope
rty) {\n name = [new(tree.Keyword)(simpleProperty[1])];\n
parserInput.forget();\n return name;\n
}\n\n function match(re) {\n const i
= parserInput.i;\n const chunk = parserInput.$re(re);\n
if (chunk) {\n index.push(i);\n
return name.push(chunk[1]);\n }\n
}\n\n match(/^(\\*?)/);\n while (true) {\n
if (!match(/^((?:[\\w-]+)|(?:[@\\$]\\{[\\w-]+\\}))/)) {\n
break;\n }\n }\n\n
if ((name.length > 1) && match(/^((?:\\+_|\\+)?)\\s*:/)) {\n
parserInput.forget();\n\n // at last, we have the complete m
atch now. move forward,\n // convert name particles to tree o
bjects and return:\n if (name[0] === '') {\n
name.shift();\n index.shift();\n
}\n for (k = 0; k < name.length; k++) {\n
s = name[k];\n name[k] = (s.charAt(0) !== '@' && s.
charAt(0) !== '$') ?\n new(tree.Keyword)(s) :\n
(s.charAt(0) === '@' ?\n ne
w(tree.Variable)(`@${s.slice(2, -1)}`, index[k], fileInfo) :\n
new(tree.Property)(`$${s.slice(2, -1)}`, index[k], fileInfo));\n
}\n return name;\n }\n
parserInput.restore();\n }\n }\n };\n};\nParser.s
erializeVars = vars => {\n let s = '';\n\n for (const name in vars) {\n
if (Object.hasOwnProperty.call(vars, name)) {\n const value = va
rs[name];\n s += `${((name[0] === '@') ? '' : '@') + name}: ${value}$
{(String(value).slice(-1) === ';') ? '' : ';'}`;\n }\n }\n\n return
s;\n};\n\nexport default Parser;\n","import Anonymous from '../tree/anonymous';
\nimport Keyword from '../tree/keyword';\n\nfunction boolean(condition) {\n r
eturn condition ? Keyword.True : Keyword.False;\n}\n\n/**\n * Functions with eva
lArgs set to false are sent context\n * as the first argument.\n */\nfunction If
(context, condition, trueValue, falseValue) {\n return condition.eval(context
) ? trueValue.eval(context)\n : (falseValue ? falseValue.eval(context) :
new Anonymous);\n}\nIf.evalArgs = false;\n\nfunction isdefined(context, variable
) {\n try {\n variable.eval(context);\n return Keyword.True;\n
} catch (e) {\n return Keyword.False;\n }\n}\n\nisdefined.evalArgs
= false;\n\nexport default { isdefined, boolean, 'if': If };\n","import Dimensio
n from '../tree/dimension';\nimport Color from '../tree/color';\nimport Quoted f
rom '../tree/quoted';\nimport Anonymous from '../tree/anonymous';\nimport Expres
sion from '../tree/expression';\nimport Operation from '../tree/operation';\nlet
colorFunctions;\n\nfunction clamp(val) {\n return Math.min(1, Math.max(0, va
l));\n}\nfunction hsla(origColor, hsl) {\n const color = colorFunctions.hsla(
hsl.h, hsl.s, hsl.l, hsl.a);\n if (color) {\n if (origColor.value && \
n /^(rgb|hsl)/.test(origColor.value)) {\n color.value = or
igColor.value;\n } else {\n color.value = 'rgb';\n }\n
return color;\n }\n}\nfunction toHSL(color) {\n if (color.toHSL) {\
n return color.toHSL();\n } else {\n throw new Error('Argument
cannot be evaluated to a color');\n }\n}\n\nfunction toHSV(color) {\n if (
color.toHSV) {\n return color.toHSV();\n } else {\n throw new E
rror('Argument cannot be evaluated to a color');\n }\n}\n\nfunction number(n)
{\n if (n instanceof Dimension) {\n return parseFloat(n.unit.is('%')
? n.value / 100 : n.value);\n } else if (typeof n === 'number') {\n re
turn n;\n } else {\n throw {\n type: 'Argument',\n
message: 'color functions take numbers as parameters'\n };\n }\n}\n
function scaled(n, size) {\n if (n instanceof Dimension && n.unit.is('%')) {\
n return parseFloat(n.value * size / 100);\n } else {\n return
number(n);\n }\n}\ncolorFunctions = {\n rgb: function (r, g, b) {\n
let a = 1\n /**\n * Comma-less syntax\n * e.g. rgb(0 1
28 255 / 50%)\n */\n if (r instanceof Expression) {\n
const val = r.value\n r = val[0]\n g = val[1]\n
b = val[2]\n /** \n * @todo - should this be normalized
in\n * function caller? Or parsed differently?\n */\n
if (b instanceof Operation) {\n const op = b\n
b = op.operands[0]\n a = op.operands[1]\n }\n
}\n const color = colorFunctions.rgba(r, g, b, a);\n if (co
lor) {\n color.value = 'rgb';\n return color;\n }\n
},\n rgba: function (r, g, b, a) {\n try {\n if (r inst
anceof Color) {\n if (g) {\n a = number(g);\n
} else {\n a = r.alpha;\n }\n
return new Color(r.rgb, a, 'rgba');\n }\n co
nst rgb = [r, g, b].map(c => scaled(c, 255));\n a = number(a);\n
return new Color(rgb, a, 'rgba');\n }\n catch (e) {}\n }
,\n hsl: function (h, s, l) {\n let a = 1\n if (h instanceof Ex
pression) {\n const val = h.value\n h = val[0]\n
s = val[1]\n l = val[2]\n\n if (l instanceof Operation)
{\n const op = l\n l = op.operands[0]\n
a = op.operands[1]\n }\n }\n const color = colorFu
nctions.hsla(h, s, l, a);\n if (color) {\n color.value = 'hsl'
;\n return color;\n }\n },\n hsla: function (h, s, l, a)
{\n try {\n if (h instanceof Color) {\n if (s)
{\n a = number(s);\n } else {\n
a = h.alpha;\n }\n return new Color(h.rgb, a
, 'hsla');\n }\n\n let m1;\n let m2;\n\n
function hue(h) {\n h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
\n if (h * 6 < 1) {\n return m1 + (m2 - m1) *
h * 6;\n }\n else if (h * 2 < 1) {\n
return m2;\n }\n else if (h * 3 < 2) {\n
return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n }\n
else {\n return m1;\n }\n
}\n\n h = (number(h) % 360) / 360;\n s = clamp(number(
s));l = clamp(number(l));a = clamp(number(a));\n\n m2 = l <= 0.5 ? l
* (s + 1) : l + s - l * s;\n m1 = l * 2 - m2;\n\n const rg
b = [\n hue(h + 1 / 3) * 255,\n hue(h) * 255
,\n hue(h - 1 / 3) * 255\n ];\n a = number(
a);\n return new Color(rgb, a, 'hsla');\n }\n catch (e)
{}\n },\n\n hsv: function(h, s, v) {\n return colorFunctions.hsva(
h, s, v, 1.0);\n },\n\n hsva: function(h, s, v, a) {\n h = ((number
(h) % 360) / 360) * 360;\n s = number(s);v = number(v);a = number(a);\n\n
let i;\n let f;\n i = Math.floor((h / 60) % 6);\n f
= (h / 60) - i;\n\n const vs = [v,\n v * (1 - s),\n
v * (1 - f * s),\n v * (1 - (1 - f) * s)];\n const perm = [[
0, 3, 1],\n [2, 0, 1],\n [1, 0, 3],\n [1, 2, 0]
,\n [3, 1, 0],\n [0, 1, 2]];\n\n return colorFuncti
ons.rgba(vs[perm[i][0]] * 255,\n vs[perm[i][1]] * 255,\n v
s[perm[i][2]] * 255,\n a);\n },\n\n hue: function (color) {\n
return new Dimension(toHSL(color).h);\n },\n saturation: function (c
olor) {\n return new Dimension(toHSL(color).s * 100, '%');\n },\n l
ightness: function (color) {\n return new Dimension(toHSL(color).l * 100,
'%');\n },\n hsvhue: function(color) {\n return new Dimension(toHS
V(color).h);\n },\n hsvsaturation: function (color) {\n return new
Dimension(toHSV(color).s * 100, '%');\n },\n hsvvalue: function (color) {\
n return new Dimension(toHSV(color).v * 100, '%');\n },\n red: func
tion (color) {\n return new Dimension(color.rgb[0]);\n },\n green:
function (color) {\n return new Dimension(color.rgb[1]);\n },\n blu
e: function (color) {\n return new Dimension(color.rgb[2]);\n },\n
alpha: function (color) {\n return new Dimension(toHSL(color).a);\n },
\n luma: function (color) {\n return new Dimension(color.luma() * colo
r.alpha * 100, '%');\n },\n luminance: function (color) {\n const l
uminance =\n (0.2126 * color.rgb[0] / 255) +\n (0.7152
* color.rgb[1] / 255) +\n (0.0722 * color.rgb[2] / 255);\n\n
return new Dimension(luminance * color.alpha * 100, '%');\n },\n satur
ate: function (color, amount, method) {\n // filter: saturate(3.2);\n
// should be kept as is, so check for color\n if (!color.rgb) {\n
return null;\n }\n const hsl = toHSL(color);\n\n if
(typeof method !== 'undefined' && method.value === 'relative') {\n h
sl.s += hsl.s * amount.value / 100;\n }\n else {\n hsl
.s += amount.value / 100;\n }\n hsl.s = clamp(hsl.s);\n ret
urn hsla(color, hsl);\n },\n desaturate: function (color, amount, method)
{\n const hsl = toHSL(color);\n\n if (typeof method !== 'undefined
' && method.value === 'relative') {\n hsl.s -= hsl.s * amount.value
/ 100;\n }\n else {\n hsl.s -= amount.value / 100;\n
}\n hsl.s = clamp(hsl.s);\n return hsla(color, hsl);\n },\
n lighten: function (color, amount, method) {\n const hsl = toHSL(colo
r);\n\n if (typeof method !== 'undefined' && method.value === 'relative')
{\n hsl.l += hsl.l * amount.value / 100;\n }\n else {
\n hsl.l += amount.value / 100;\n }\n hsl.l = clamp(hsl
.l);\n return hsla(color, hsl);\n },\n darken: function (color, amo
unt, method) {\n const hsl = toHSL(color);\n\n if (typeof method !
== 'undefined' && method.value === 'relative') {\n hsl.l -= hsl.l *
amount.value / 100;\n }\n else {\n hsl.l -= amount.valu
e / 100;\n }\n hsl.l = clamp(hsl.l);\n return hsla(color, h
sl);\n },\n fadein: function (color, amount, method) {\n const hsl
= toHSL(color);\n\n if (typeof method !== 'undefined' && method.value ===
'relative') {\n hsl.a += hsl.a * amount.value / 100;\n }\n
else {\n hsl.a += amount.value / 100;\n }\n hsl.a
= clamp(hsl.a);\n return hsla(color, hsl);\n },\n fadeout: functio
n (color, amount, method) {\n const hsl = toHSL(color);\n\n if (ty
peof method !== 'undefined' && method.value === 'relative') {\n hsl.a
-= hsl.a * amount.value / 100;\n }\n else {\n hsl.a -
= amount.value / 100;\n }\n hsl.a = clamp(hsl.a);\n return
hsla(color, hsl);\n },\n fade: function (color, amount) {\n const h
sl = toHSL(color);\n\n hsl.a = amount.value / 100;\n hsl.a = clamp
(hsl.a);\n return hsla(color, hsl);\n },\n spin: function (color, a
mount) {\n const hsl = toHSL(color);\n const hue = (hsl.h + amount
.value) % 360;\n\n hsl.h = hue < 0 ? 360 + hue : hue;\n\n return h
sla(color, hsl);\n },\n //\n // Copyright (c) 2006-2009 Hampton Catlin,
Natalie Weizenbaum, and Chris Eppstein\n // http://sass-lang.com\n //\n
mix: function (color1, color2, weight) {\n if (!weight) {\n
weight = new Dimension(50);\n }\n const p = weight.value / 100.0;\
n const w = p * 2 - 1;\n const a = toHSL(color1).a - toHSL(color2)
.a;\n\n const w1 = (((w * a == -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.
0;\n const w2 = 1 - w1;\n\n const rgb = [color1.rgb[0] * w1 + colo
r2.rgb[0] * w2,\n color1.rgb[1] * w1 + color2.rgb[1] * w2,\n
color1.rgb[2] * w1 + color2.rgb[2] * w2];\n\n const alpha = color1.alp
ha * p + color2.alpha * (1 - p);\n\n return new Color(rgb, alpha);\n }
,\n greyscale: function (color) {\n return colorFunctions.desaturate(c
olor, new Dimension(100));\n },\n contrast: function (color, dark, light,
threshold) {\n // filter: contrast(3.2);\n // should be kept as is
, so check for color\n if (!color.rgb) {\n return null;\n
}\n if (typeof light === 'undefined') {\n light = colorFunc
tions.rgba(255, 255, 255, 1.0);\n }\n if (typeof dark === 'undefin
ed') {\n dark = colorFunctions.rgba(0, 0, 0, 1.0);\n }\n
// Figure out which is actually light and dark:\n if (dark.luma() > lig
ht.luma()) {\n const t = light;\n light = dark;\n
dark = t;\n }\n if (typeof threshold === 'undefined') {\n
threshold = 0.43;\n } else {\n threshold = number(thresh
old);\n }\n if (color.luma() < threshold) {\n return li
ght;\n } else {\n return dark;\n }\n },\n // Chan
ges made in 2.7.0 - Reverted in 3.0.0\n // contrast: function (color, color1,
color2, threshold) {\n // // Return which of `color1` and `color2` has t
he greatest contrast with `color`\n // // according to the standard WCAG
contrast ratio calculation.\n // // http://www.w3.org/TR/WCAG20/#contrast
-ratiodef\n // // The threshold param is no longer used, in line with SAS
S.\n // // filter: contrast(3.2);\n // // should be kept as is, so
check for color\n // if (!color.rgb) {\n // return null;\n
// }\n // if (typeof color1 === 'undefined') {\n // color
1 = colorFunctions.rgba(0, 0, 0, 1.0);\n // }\n // if (typeof colo
r2 === 'undefined') {\n // color2 = colorFunctions.rgba(255, 255, 255
, 1.0);\n // }\n // var contrast1, contrast2;\n // var luma
= color.luma();\n // var luma1 = color1.luma();\n // var luma2 =
color2.luma();\n // // Calculate contrast ratios for each color\n //
if (luma > luma1) {\n // contrast1 = (luma + 0.05) / (luma1 + 0.05
);\n // } else {\n // contrast1 = (luma1 + 0.05) / (luma + 0.0
5);\n // }\n // if (luma > luma2) {\n // contrast2 = (l
uma + 0.05) / (luma2 + 0.05);\n // } else {\n // contrast2 = (
luma2 + 0.05) / (luma + 0.05);\n // }\n // if (contrast1 > contras
t2) {\n // return color1;\n // } else {\n // return
color2;\n // }\n // },\n argb: function (color) {\n return
new Anonymous(color.toARGB());\n },\n color: function(c) {\n if ((c
instanceof Quoted) &&\n (/^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-
9]{3,4})$/i.test(c.value))) {\n const val = c.value.slice(1);\n
return new Color(val, undefined, `#${val}`);\n }\n if ((c in
stanceof Color) || (c = Color.fromKeyword(c.value))) {\n c.value = un
defined;\n return c;\n }\n throw {\n type:
'Argument',\n message: 'argument must be a color keyword or 3|4|6|8
digit hex e.g. #FFF'\n };\n },\n tint: function(color, amount) {\n
return colorFunctions.mix(colorFunctions.rgb(255, 255, 255), color, amou
nt);\n },\n shade: function(color, amount) {\n return colorFunction
s.mix(colorFunctions.rgb(0, 0, 0), color, amount);\n }\n};\n\nexport default
colorFunctions;\n","import Color from '../tree/color';\n\n// Color Blending\n//
ref: http://www.w3.org/TR/compositing-1\n\nfunction colorBlend(mode, color1, col
or2) {\n const ab = color1.alpha; // result\n\n let // backdrop\n
cb;\n\n const as = color2.alpha;\n\n let // source\n cs;\n\n
let ar;\n let cr;\n const r = [];\n\n ar = as + ab * (1 - as);\n
for (let i = 0; i < 3; i++) {\n cb = color1.rgb[i] / 255;\n cs = c
olor2.rgb[i] / 255;\n cr = mode(cb, cs);\n if (ar) {\n
cr = (as * cs + ab * (cb -\n as * (cb + cs - cr))) / ar;\n
}\n r[i] = cr * 255;\n }\n\n return new Color(r, ar);\n}\n\ncons
t colorBlendModeFunctions = {\n multiply: function(cb, cs) {\n return
cb * cs;\n },\n screen: function(cb, cs) {\n return cb + cs - cb *
cs;\n },\n overlay: function(cb, cs) {\n cb *= 2;\n return (
cb <= 1) ?\n colorBlendModeFunctions.multiply(cb, cs) :\n
colorBlendModeFunctions.screen(cb - 1, cs);\n },\n softlight: function(cb,
cs) {\n let d = 1;\n let e = cb;\n if (cs > 0.5) {\n
e = 1;\n d = (cb > 0.25) ? Math.sqrt(cb)\n : ((1
6 * cb - 12) * cb + 4) * cb;\n }\n return cb - (1 - 2 * cs) * e *
(d - cb);\n },\n hardlight: function(cb, cs) {\n return colorBlendM
odeFunctions.overlay(cs, cb);\n },\n difference: function(cb, cs) {\n
return Math.abs(cb - cs);\n },\n exclusion: function(cb, cs) {\n
return cb + cs - 2 * cb * cs;\n },\n\n // non-w3c functions:\n average
: function(cb, cs) {\n return (cb + cs) / 2;\n },\n negation: funct
ion(cb, cs) {\n return 1 - Math.abs(cb + cs - 1);\n }\n};\n\nfor (cons
t f in colorBlendModeFunctions) {\n if (colorBlendModeFunctions.hasOwnPropert
y(f)) {\n colorBlend[f] = colorBlend.bind(null, colorBlendModeFunctions[f
]);\n }\n}\n\nexport default colorBlend;\n","import Comment from '../tree/com
ment';\nimport Node from '../tree/node';\nimport Dimension from '../tree/dimensi
on';\nimport Declaration from '../tree/declaration';\nimport Expression from '..
/tree/expression';\nimport Ruleset from '../tree/ruleset';\nimport Selector from
'../tree/selector';\nimport Element from '../tree/element';\nimport Quote from
'../tree/quoted';\nimport Value from '../tree/value';\n\nconst getItemsFromNode
= node => {\n // handle non-array values as an array of length 1\n // retu
rn 'undefined' if index is invalid\n const items = Array.isArray(node.value)
?\n node.value : Array(node);\n\n return items;\n};\n\nexport default
{\n _SELF: function(n) {\n return n;\n },\n '~': function(...exp
r) {\n if (expr.length === 1) {\n return expr[0];\n }\n
return new Value(expr);\n },\n extract: function(values, index) {\
n // (1-based index)\n index = index.value - 1;\n\n return
getItemsFromNode(values)[index];\n },\n length: function(values) {\n
return new Dimension(getItemsFromNode(values).length);\n },\n /**\n
* Creates a Less list of incremental values.\n * Modeled after Lodash's rang
e function, also exists natively in PHP\n * \n * @param {Dimension} [sta
rt=1]\n * @param {Dimension} end - e.g. 10 or 10px - unit is added to outpu
t\n * @param {Dimension} [step=1] \n */\n range: function(start, end,
step) {\n let from;\n let to;\n let stepValue = 1;\n
const list = [];\n if (end) {\n to = end;\n from
= start.value;\n if (step) {\n stepValue = step.value;
\n }\n }\n else {\n from = 1;\n t
o = start;\n }\n\n for (let i = from; i <= to.value; i += stepValu
e) {\n list.push(new Dimension(i, to.unit));\n }\n\n re
turn new Expression(list);\n },\n each: function(list, rs) {\n cons
t rules = [];\n let newRules;\n let iterator;\n\n const try
Eval = val => {\n if (val instanceof Node) {\n return
val.eval(this.context);\n }\n return val;\n };\n\n
if (list.value && !(list instanceof Quote)) {\n if (Array.isAr
ray(list.value)) {\n iterator = list.value.map(tryEval);\n
} else {\n iterator = [tryEval(list.value)];\n }\
n } else if (list.ruleset) {\n iterator = tryEval(list.ruleset
).rules;\n } else if (list.rules) {\n iterator = list.rules.ma
p(tryEval);\n } else if (Array.isArray(list)) {\n iterator = l
ist.map(tryEval);\n } else {\n iterator = [tryEval(list)];\n
}\n\n let valueName = '@value';\n let keyName = '@key';\n
let indexName = '@index';\n\n if (rs.params) {\n valueNam
e = rs.params[0] && rs.params[0].name;\n keyName = rs.params[1] && rs
.params[1].name;\n indexName = rs.params[2] && rs.params[2].name;\n
rs = rs.rules;\n } else {\n rs = rs.ruleset;\n
}\n\n for (let i = 0; i < iterator.length; i++) {\n let key;
\n let value;\n const item = iterator[i];\n if
(item instanceof Declaration) {\n key = typeof item.name === 'str
ing' ? item.name : item.name[0].value;\n value = item.value;\n
} else {\n key = new Dimension(i + 1);\n
value = item;\n }\n\n if (item instanceof Comment) {\n
continue;\n }\n\n newRules = rs.rules.slice(0)
;\n if (valueName) {\n newRules.push(new Declaration(v
alueName,\n value,\n false, false, this.in
dex, this.currentFileInfo));\n }\n if (indexName) {\n
newRules.push(new Declaration(indexName,\n new Dim
ension(i + 1),\n false, false, this.index, this.currentFileIn
fo));\n }\n if (keyName) {\n newRules.push(
new Declaration(keyName,\n key,\n false, f
alse, this.index, this.currentFileInfo));\n }\n\n rules.pu
sh(new Ruleset([ new(Selector)([ new Element(\"\", '&') ]) ],\n n
ewRules,\n rs.strictImports,\n rs.visibilityInfo()
\n ));\n }\n\n return new Ruleset([ new(Selector)([ new
Element(\"\", '&') ]) ],\n rules,\n rs.strictImports,\n
rs.visibilityInfo()\n ).eval(this.context);\n }\n};\n","impo
rt Dimension from '../tree/dimension';\n\nconst MathHelper = (fn, unit, n) => {\
n if (!(n instanceof Dimension)) {\n throw { type: 'Argument', message
: 'argument must be a number' };\n }\n if (unit == null) {\n unit =
n.unit;\n } else {\n n = n.unify();\n }\n return new Dimension(
fn(parseFloat(n.value)), unit);\n};\n\nexport default MathHelper;","import mathH
elper from './math-helper.js';\n\nconst mathFunctions = {\n // name, unit\n
ceil: null,\n floor: null,\n sqrt: null,\n abs: null,\n tan:
'',\n sin: '',\n cos: '',\n atan: 'rad',\n asin: 'rad',\n
acos: 'rad'\n};\n\nfor (const f in mathFunctions) {\n if (mathFunctions.has
OwnProperty(f)) {\n mathFunctions[f] = mathHelper.bind(null, Math[f], mat
hFunctions[f]);\n }\n}\n\nmathFunctions.round = (n, f) => {\n const fracti
on = typeof f === 'undefined' ? 0 : f.value;\n return mathHelper(num => num.t
oFixed(fraction), null, n);\n};\n\nexport default mathFunctions;\n","import Dime
nsion from '../tree/dimension';\nimport Anonymous from '../tree/anonymous';\nimp
ort mathHelper from './math-helper.js';\n\nconst minMax = function (isMin, args)
{\n args = Array.prototype.slice.call(args);\n switch (args.length) {\n
case 0: throw { type: 'Argument', message: 'one or more arguments required
' };\n }\n let i; // key is the unit.toString() for unified Dimension valu
es,\n let j;\n let current;\n let currentUnified;\n let referenceUni
fied;\n let unit;\n let unitStatic;\n let unitClone;\n\n const // el
ems only contains original argument values.\n order = [];\n\n const v
alues = {};\n // value is the index into the order array.\n for (i = 0; i
< args.length; i++) {\n current = args[i];\n if (!(current instanc
eof Dimension)) {\n if (Array.isArray(args[i].value)) {\n
Array.prototype.push.apply(args, Array.prototype.slice.call(args[i].value));
\n }\n continue;\n }\n currentUnified = curr
ent.unit.toString() === '' && unitClone !== undefined ? new Dimension(current.va
lue, unitClone).unify() : current.unify();\n unit = currentUnified.unit.t
oString() === '' && unitStatic !== undefined ? unitStatic : currentUnified.unit.
toString();\n unitStatic = unit !== '' && unitStatic === undefined || uni
t !== '' && order[0].unify().unit.toString() === '' ? unit : unitStatic;\n
unitClone = unit !== '' && unitClone === undefined ? current.unit.toString() :
unitClone;\n j = values[''] !== undefined && unit !== '' && unit === uni
tStatic ? values[''] : values[unit];\n if (j === undefined) {\n
if (unitStatic !== undefined && unit !== unitStatic) {\n throw
{ type: 'Argument', message: 'incompatible types' };\n }\n
values[unit] = order.length;\n order.push(current);\n con
tinue;\n }\n referenceUnified = order[j].unit.toString() === '' &&
unitClone !== undefined ? new Dimension(order[j].value, unitClone).unify() : or
der[j].unify();\n if ( isMin && currentUnified.value < referenceUnified.v
alue ||\n !isMin && currentUnified.value > referenceUnified.value) {\
n order[j] = current;\n }\n }\n if (order.length == 1) {
\n return order[0];\n }\n args = order.map(function (a) { return a.
toCSS(this.context); }).join(this.context.compress ? ',' : ', ');\n return ne
w Anonymous(`${isMin ? 'min' : 'max'}(${args})`);\n};\n\nexport default {\n m
in: function(...args) {\n try {\n return minMax(true, args);\n
} catch (e) {}\n },\n max: function(...args) {\n try {\n
return minMax(false, args);\n } catch (e) {}\n },\n conver
t: function (val, unit) {\n return val.convertTo(unit.value);\n },\n
pi: function () {\n return new Dimension(Math.PI);\n },\n mod: fu
nction(a, b) {\n return new Dimension(a.value % b.value, a.unit);\n },
\n pow: function(x, y) {\n if (typeof x === 'number' && typeof y === '
number') {\n x = new Dimension(x);\n y = new Dimension(y);
\n } else if (!(x instanceof Dimension) || !(y instanceof Dimension)) {\n
throw { type: 'Argument', message: 'arguments must be numbers' };\n
}\n\n return new Dimension(Math.pow(x.value, y.value), x.unit);\n
},\n percentage: function (n) {\n const result = mathHelper(num =>
num * 100, '%', n);\n\n return result;\n }\n};\n","import Quoted from
'../tree/quoted';\nimport Anonymous from '../tree/anonymous';\nimport JavaScript
from '../tree/javascript';\n\nexport default {\n e: function (str) {\n
return new Quoted('\"', str instanceof JavaScript ? str.evaluated : str.value,
true);\n },\n escape: function (str) {\n return new Anonymous(\n
encodeURI(str.value).replace(/=/g, '%3D').replace(/:/g, '%3A').replace
(/#/g, '%23').replace(/;/g, '%3B')\n .replace(/\\(/g, '%28').repl
ace(/\\)/g, '%29'));\n },\n replace: function (string, pattern, replacemen
t, flags) {\n let result = string.value;\n replacement = (replacem
ent.type === 'Quoted') ?\n replacement.value : replacement.toCSS();\n
result = result.replace(new RegExp(pattern.value, flags ? flags.value :
''), replacement);\n return new Quoted(string.quote || '', result, string
.escaped);\n },\n '%': function (string /* arg, arg, ... */) {\n co
nst args = Array.prototype.slice.call(arguments, 1);\n let result = strin
g.value;\n\n for (let i = 0; i < args.length; i++) {\n /* jshi
nt loopfunc:true */\n result = result.replace(/%[sda]/i, token => {\n
const value = ((args[i].type === 'Quoted') &&\n
token.match(/s/i)) ? args[i].value : args[i].toCSS();\n return
token.match(/[A-Z]$/) ? encodeURIComponent(value) : value;\n });\n
}\n result = result.replace(/%%/g, '%');\n return new Quoted
(string.quote || '', result, string.escaped);\n }\n};\n","import Keyword from
'../tree/keyword';\nimport DetachedRuleset from '../tree/detached-ruleset';\nim
port Dimension from '../tree/dimension';\nimport Color from '../tree/color';\nim
port Quoted from '../tree/quoted';\nimport Anonymous from '../tree/anonymous';\n
import URL from '../tree/url';\nimport Operation from '../tree/operation';\n\nco
nst isa = (n, Type) => (n instanceof Type) ? Keyword.True : Keyword.False;\ncons
t isunit = (n, unit) => {\n if (unit === undefined) {\n throw { type:
'Argument', message: 'missing the required second argument to isunit.' };\n }
\n unit = typeof unit.value === 'string' ? unit.value : unit;\n if (typeof
unit !== 'string') {\n throw { type: 'Argument', message: 'Second argume
nt to isunit should be a unit or a string.' };\n }\n return (n instanceof
Dimension) && n.unit.is(unit) ? Keyword.True : Keyword.False;\n};\n\nexport defa
ult {\n isruleset: function (n) {\n return isa(n, DetachedRuleset);\n
},\n iscolor: function (n) {\n return isa(n, Color);\n },\n i
snumber: function (n) {\n return isa(n, Dimension);\n },\n isstring
: function (n) {\n return isa(n, Quoted);\n },\n iskeyword: functio
n (n) {\n return isa(n, Keyword);\n },\n isurl: function (n) {\n
return isa(n, URL);\n },\n ispixel: function (n) {\n return is
unit(n, 'px');\n },\n ispercentage: function (n) {\n return isunit(
n, '%');\n },\n isem: function (n) {\n return isunit(n, 'em');\n
},\n isunit,\n unit: function (val, unit) {\n if (!(val instanceof
Dimension)) {\n throw { type: 'Argument',\n message:
`the first argument to unit must be a number${val instanceof Operation ? '. Have
you forgotten parenthesis?' : ''}` };\n }\n if (unit) {\n
if (unit instanceof Keyword) {\n unit = unit.value;\n
} else {\n unit = unit.toCSS();\n }\n } els
e {\n unit = '';\n }\n return new Dimension(val.value,
unit);\n },\n 'get-unit': function (n) {\n return new Anonymous(n.u
nit);\n }\n};\n","import functionRegistry from './function-registry';\nimport
functionCaller from './function-caller';\n\nimport boolean from './boolean';\ni
mport defaultFunc from './default';\nimport color from './color';\nimport colorB
lending from './color-blending';\nimport dataUri from './data-uri';\nimport list
from './list';\nimport math from './math';\nimport number from './number';\nimp
ort string from './string';\nimport svg from './svg';\nimport types from './type
s';\n\nexport default environment => {\n const functions = { functionRegistry
, functionCaller };\n\n // register functions\n functionRegistry.addMultip
le(boolean);\n functionRegistry.add('default', defaultFunc.eval.bind(defaultF
unc));\n functionRegistry.addMultiple(color);\n functionRegistry.addMultip
le(colorBlending);\n functionRegistry.addMultiple(dataUri(environment));\n
functionRegistry.addMultiple(list);\n functionRegistry.addMultiple(math);\n
functionRegistry.addMultiple(number);\n functionRegistry.addMultiple(strin
g);\n functionRegistry.addMultiple(svg(environment));\n functionRegistry.a
ddMultiple(types);\n\n return functions;\n};\n","import Quoted from '../tree/
quoted';\nimport URL from '../tree/url';\nimport * as utils from '../utils';\nim
port logger from '../logger';\n\nexport default environment => {\n \n cons
t fallback = (functionThis, node) => new URL(node, functionThis.index, functionT
his.currentFileInfo).eval(functionThis.context); \n\n return { 'data-uri':
function(mimetypeNode, filePathNode) {\n\n if (!filePathNode) {\n
filePathNode = mimetypeNode;\n mimetypeNode = null;\n }\n
\n let mimetype = mimetypeNode && mimetypeNode.value;\n let filePa
th = filePathNode.value;\n const currentFileInfo = this.currentFileInfo;\
n const currentDirectory = currentFileInfo.rewriteUrls ?\n cur
rentFileInfo.currentDirectory : currentFileInfo.entryPath;\n\n const frag
mentStart = filePath.indexOf('#');\n let fragment = '';\n if (frag
mentStart !== -1) {\n fragment = filePath.slice(fragmentStart);\n
filePath = filePath.slice(0, fragmentStart);\n }\n const c
ontext = utils.clone(this.context);\n context.rawBuffer = true;\n\n
const fileManager = environment.getFileManager(filePath, currentDirectory, con
text, environment, true);\n\n if (!fileManager) {\n return fal
lback(this, filePathNode);\n }\n\n let useBase64 = false;\n\n
// detect the mimetype if not given\n if (!mimetypeNode) {\n\n
mimetype = environment.mimeLookup(filePath);\n\n if (mimetype ===
'image/svg+xml') {\n useBase64 = false;\n } else {\n
// use base 64 unless it's an ASCII or UTF-8 format\n
const charset = environment.charsetLookup(mimetype);\n useBas
e64 = ['US-ASCII', 'UTF-8'].indexOf(charset) < 0;\n }\n if
(useBase64) { mimetype += ';base64'; }\n }\n else {\n
useBase64 = /;base64$/.test(mimetype);\n }\n\n const fileSync = fi
leManager.loadFileSync(filePath, currentDirectory, context, environment);\n
if (!fileSync.contents) {\n logger.warn(`Skipped data-uri embeddin
g of ${filePath} because file not found`);\n return fallback(this, fi
lePathNode || mimetypeNode);\n }\n let buf = fileSync.contents;\n
if (useBase64 && !environment.encodeBase64) {\n return fallbac
k(this, filePathNode);\n }\n\n buf = useBase64 ? environment.encod
eBase64(buf) : encodeURIComponent(buf);\n\n const uri = `data:${mimetype}
,${buf}${fragment}`;\n\n return new URL(new Quoted(`\"${uri}\"`, uri, fal
se, this.index, this.currentFileInfo), this.index, this.currentFileInfo);\n }
};\n};\n","import Dimension from '../tree/dimension';\nimport Color from '../tre
e/color';\nimport Expression from '../tree/expression';\nimport Quoted from '../
tree/quoted';\nimport URL from '../tree/url';\n\nexport default environment => {
\n return { 'svg-gradient': function(direction) {\n let stops;\n
let gradientDirectionSvg;\n let gradientType = 'linear';\n let r
ectangleDimension = 'x=\"0\" y=\"0\" width=\"1\" height=\"1\"';\n const r
enderEnv = {compress: false};\n let returner;\n const directionVal
ue = direction.toCSS(renderEnv);\n let i;\n let color;\n le
t position;\n let positionValue;\n let alpha;\n\n function
throwArgumentDescriptor() {\n throw { type: 'Argument',\n
message: 'svg-gradient expects direction, start_color [start_position], [col
or position,]...,' +\n ' end_color [end_position] or
direction, color list' };\n }\n\n if (arguments.length == 2) {\n
if (arguments[1].value.length < 2) {\n throwArgumentDes
criptor();\n }\n stops = arguments[1].value;\n } el
se if (arguments.length < 3) {\n throwArgumentDescriptor();\n
} else {\n stops = Array.prototype.slice.call(arguments, 1);\n
}\n\n switch (directionValue) {\n case 'to bottom':\n
gradientDirectionSvg = 'x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\"';\n
break;\n case 'to right':\n gradientDirec
tionSvg = 'x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"';\n break;\n
case 'to bottom right':\n gradientDirectionSvg = 'x1=
\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"';\n break;\n
case 'to top right':\n gradientDirectionSvg = 'x1=\"0%\" y1=\"100
%\" x2=\"100%\" y2=\"0%\"';\n break;\n case 'ellipse':
\n case 'ellipse at center':\n gradientType = 'radial'
;\n gradientDirectionSvg = 'cx=\"50%\" cy=\"50%\" r=\"75%\"';\n
rectangleDimension = 'x=\"-50\" y=\"-50\" width=\"101\" height=\"1
01\"';\n break;\n default:\n throw { ty
pe: 'Argument', message: 'svg-gradient direction must be \\'to bottom\\', \\'to
right\\',' +\n ' \\'to bottom right\\', \\'to top right\\' or
\\'ellipse at center\\'' };\n }\n returner = `<svg xmlns=\"http:/
/www.w3.org/2000/svg\" viewBox=\"0 0 1 1\"><${gradientType}Gradient id=\"g\" ${g
radientDirectionSvg}>`;\n\n for (i = 0; i < stops.length; i += 1) {\n
if (stops[i] instanceof Expression) {\n color = stops[i].
value[0];\n position = stops[i].value[1];\n } else {\n
color = stops[i];\n position = undefined;\n
}\n\n if (!(color instanceof Color) || (!((i === 0 || i + 1 ===
stops.length) && position === undefined) && !(position instanceof Dimension)))
{\n throwArgumentDescriptor();\n }\n positi
onValue = position ? position.toCSS(renderEnv) : i === 0 ? '0%' : '100%';\n
alpha = color.alpha;\n returner += `<stop offset=\"${positionV
alue}\" stop-color=\"${color.toRGB()}\"${alpha < 1 ? ` stop-opacity=\"${alpha}\"
` : ''}/>`;\n }\n returner += `</${gradientType}Gradient><rect ${r
ectangleDimension} fill=\"url(#g)\" /></svg>`;\n\n returner = encodeURICo
mponent(returner);\n\n returner = `data:image/svg+xml,${returner}`;\n
return new URL(new Quoted(`'${returner}'`, returner, false, this.index, this
.currentFileInfo), this.index, this.currentFileInfo);\n }};\n};\n","import co
ntexts from './contexts';\nimport visitor from './visitors';\nimport tree from '
./tree';\n\nexport default function(root, options) {\n options = options || {
};\n let evaldRoot;\n let variables = options.variables;\n const evalEn
v = new contexts.Eval(options);\n\n //\n // Allows setting variables with
a hash, so:\n //\n // `{ color: new tree.Color('#f01') }` will become:\n
//\n // new tree.Declaration('@color',\n // new tree.Value([\n
// new tree.Expression([\n // new tree.Color('#f01')\n //
])\n // ])\n // )\n //\n if (typeof variables === 'objec
t' && !Array.isArray(variables)) {\n variables = Object.keys(variables).m
ap(function (k) {\n let value = variables[k];\n\n if (!(va
lue instanceof tree.Value)) {\n if (!(value instanceof tree.Expre
ssion)) {\n value = new tree.Expression([value]);\n
}\n value = new tree.Value([value]);\n }\n
return new tree.Declaration(`@${k}`, value, false, null, 0);\n });\
n evalEnv.frames = [new tree.Ruleset(null, variables)];\n }\n\n con
st visitors = [\n new visitor.JoinSelectorVisitor(),\n new visitor
.MarkVisibleSelectorsVisitor(true),\n new visitor.ExtendVisitor(),\n
new visitor.ToCSSVisitor({compress: Boolean(options.compress)})\n ];\n\n
const preEvalVisitors = [];\n let v;\n let visitorIterator;\n\n /**\n
* first() / get() allows visitors to be added while visiting\n * \n
* @todo Add scoping for visitors just like functions for @plugin; right now the
y're global\n */\n if (options.pluginManager) {\n visitorIterator
= options.pluginManager.visitor();\n for (var i = 0; i < 2; i++) {\n
visitorIterator.first();\n while ((v = visitorIterator.get()))
{\n if (v.isPreEvalVisitor) {\n if (i === 0 |
| preEvalVisitors.indexOf(v) === -1) {\n preEvalVisitors.
push(v);\n v.run(root);\n }\n
}\n else {\n if (i === 0 || visitors.in
dexOf(v) === -1) {\n if (v.isPreVisitor) {\n
visitors.unshift(v);\n }\n
else {\n visitors.push(v);\n
}\n }\n }\n }\n }\n
}\n\n evaldRoot = root.eval(evalEnv);\n\n for (var i = 0; i < visitors.l
ength; i++) {\n visitors[i].run(evaldRoot);\n }\n\n // Run any rema
ining visitors added after eval pass\n if (options.pluginManager) {\n
visitorIterator.first();\n while ((v = visitorIterator.get())) {\n
if (visitors.indexOf(v) === -1 && preEvalVisitors.indexOf(v) === -1) {\n
v.run(evaldRoot);\n }\n }\n }\n\n return ev
aldRoot;\n};\n","/**\n * Plugin Manager\n */\nclass PluginManager {\n constru
ctor(less) {\n this.less = less;\n this.visitors = [];\n th
is.preProcessors = [];\n this.postProcessors = [];\n this.installe
dPlugins = [];\n this.fileManagers = [];\n this.iterator = -1;\n
this.pluginCache = {};\n this.Loader = new less.PluginLoader(less);
\n }\n\n /**\n * Adds all the plugins in the array\n * @param {Arr
ay} plugins\n */\n addPlugins(plugins) {\n if (plugins) {\n
for (let i = 0; i < plugins.length; i++) {\n this.addPlugin(
plugins[i]);\n }\n }\n }\n\n /**\n *\n * @param
plugin\n * @param {String} filename\n */\n addPlugin(plugin, filename
, functionRegistry) {\n this.installedPlugins.push(plugin);\n if (
filename) {\n this.pluginCache[filename] = plugin;\n }\n
if (plugin.install) {\n plugin.install(this.less, this, functionReg
istry || this.less.functions.functionRegistry);\n }\n }\n\n /**\n
*\n * @param filename\n */\n get(filename) {\n return this.
pluginCache[filename];\n }\n\n /**\n * Adds a visitor. The visitor obj
ect has options on itself to determine\n * when it should run.\n * @para
m visitor\n */\n addVisitor(visitor) {\n this.visitors.push(visito
r);\n }\n\n /**\n * Adds a pre processor object\n * @param {object
} preProcessor\n * @param {number} priority - guidelines 1 = before import,
1000 = import, 2000 = after import\n */\n addPreProcessor(preProcessor, p
riority) {\n let indexToInsertAt;\n for (indexToInsertAt = 0; inde
xToInsertAt < this.preProcessors.length; indexToInsertAt++) {\n if (t
his.preProcessors[indexToInsertAt].priority >= priority) {\n brea
k;\n }\n }\n this.preProcessors.splice(indexToInsertAt,
0, {preProcessor, priority});\n }\n\n /**\n * Adds a post processor o
bject\n * @param {object} postProcessor\n * @param {number} priority - g
uidelines 1 = before compression, 1000 = compression, 2000 = after compression\n
*/\n addPostProcessor(postProcessor, priority) {\n let indexToIns
ertAt;\n for (indexToInsertAt = 0; indexToInsertAt < this.postProcessors.
length; indexToInsertAt++) {\n if (this.postProcessors[indexToInsertA
t].priority >= priority) {\n break;\n }\n }\n
this.postProcessors.splice(indexToInsertAt, 0, {postProcessor, priority});
\n }\n\n /**\n *\n * @param manager\n */\n addFileManager(m
anager) {\n this.fileManagers.push(manager);\n }\n\n /**\n *\n
* @returns {Array}\n * @private\n */\n getPreProcessors() {\n
const preProcessors = [];\n for (let i = 0; i < this.preProcessors.le
ngth; i++) {\n preProcessors.push(this.preProcessors[i].preProcessor)
;\n }\n return preProcessors;\n }\n\n /**\n *\n * @r
eturns {Array}\n * @private\n */\n getPostProcessors() {\n con
st postProcessors = [];\n for (let i = 0; i < this.postProcessors.length;
i++) {\n postProcessors.push(this.postProcessors[i].postProcessor);\
n }\n return postProcessors;\n }\n\n /**\n *\n * @re
turns {Array}\n * @private\n */\n getVisitors() {\n return thi
s.visitors;\n }\n\n visitor() {\n const self = this;\n retur
n {\n first: function() {\n self.iterator = -1;\n
return self.visitors[self.iterator];\n },\n get
: function() {\n self.iterator += 1;\n return self
.visitors[self.iterator];\n }\n };\n }\n\n /**\n *\n
* @returns {Array}\n * @private\n */\n getFileManagers() {\n
return this.fileManagers;\n }\n}\n\nlet pm;\n\nconst PluginManagerFactory
= function(less, newFactory) {\n if (newFactory || !pm) {\n pm = new
PluginManager(less);\n }\n return pm;\n};\n\n//\nexport default PluginMana
gerFactory;\n","'use strict';\n\nfunction parseNodeVersion(version) {\n var mat
ch = version.match(/^v(\\d{1,2})\\.(\\d{1,2})\\.(\\d{1,2})(?:-([0-9A-Za-z-.]+))?
(?:\\+([0-9A-Za-z-.]+))?$/); // eslint-disable-line max-len\n if (!match) {\n
throw new Error('Unable to parse: ' + version);\n }\n\n var res = {\n maj
or: parseInt(match[1], 10),\n minor: parseInt(match[2], 10),\n patch: pars
eInt(match[3], 10),\n pre: match[4] || '',\n build: match[5] || '',\n };\
n\n return res;\n}\n\nmodule.exports = parseNodeVersion;\n","/* global window,
XMLHttpRequest */\n\nimport AbstractFileManager from '../less/environment/abstra
ct-file-manager.js';\n\nlet options;\nlet logger;\nlet fileCache = {};\n\n// TOD
OS - move log somewhere. pathDiff and doing something similar in node. use pathD
iff in the other browser file for the initial load\nconst FileManager = function
() {}\nFileManager.prototype = Object.assign(new AbstractFileManager(), {\n a
lwaysMakePathsAbsolute() {\n return true;\n },\n\n join(basePath, l
aterPath) {\n if (!basePath) {\n return laterPath;\n }\
n return this.extractUrlParts(laterPath, basePath).path;\n },\n\n d
oXHR(url, type, callback, errback) {\n const xhr = new XMLHttpRequest();\
n const async = options.isFileProtocol ? options.fileAsync : true;\n\n
if (typeof xhr.overrideMimeType === 'function') {\n xhr.override
MimeType('text/css');\n }\n logger.debug(`XHR: Getting '${url}'`);
\n xhr.open('GET', url, async);\n xhr.setRequestHeader('Accept', t
ype || 'text/x-less, text/css; q=0.9, */*; q=0.5');\n xhr.send(null);\n\n
function handleResponse(xhr, callback, errback) {\n if (xhr.s
tatus >= 200 && xhr.status < 300) {\n callback(xhr.responseText,\
n xhr.getResponseHeader('Last-Modified'));\n } els
e if (typeof errback === 'function') {\n errback(xhr.status, url)
;\n }\n }\n\n if (options.isFileProtocol && !options.fi
leAsync) {\n if (xhr.status === 0 || (xhr.status >= 200 && xhr.status
< 300)) {\n callback(xhr.responseText);\n } else {\n
errback(xhr.status, url);\n }\n } else if (asyn
c) {\n xhr.onreadystatechange = () => {\n if (xhr.read
yState == 4) {\n handleResponse(xhr, callback, errback);\n
}\n };\n } else {\n handleResponse(xhr
, callback, errback);\n }\n },\n\n supports() {\n return tru
e;\n },\n\n clearFileCache() {\n fileCache = {};\n },\n\n loa
dFile(filename, currentDirectory, options, environment) {\n // TODO: Add
prefix support like less-node?\n // What about multiple paths?\n\n
if (currentDirectory && !this.isPathAbsolute(filename)) {\n filename
= currentDirectory + filename;\n }\n\n filename = options.ext ? t
his.tryAppendExtension(filename, options.ext) : filename;\n\n options = o
ptions || {};\n\n // sheet may be set to the stylesheet for the initial l
oad or a collection of properties including\n // some context variables f
or imports\n const hrefParts = this.extractUrlParts(filename, window.loca
tion.href);\n const href = hrefParts.url;\n const self =
this;\n \n return new Promise((resolve, reject) => {\n
if (options.useFileCache && fileCache[href]) {\n try {\n
const lessText = fileCache[href];\n return resolv
e({ contents: lessText, filename: href, webInfo: { lastModified: new Date() }});
\n } catch (e) {\n return reject({ filename: h
ref, message: `Error loading file ${href} error was ${e.message}` });\n
}\n }\n\n self.doXHR(href, options.mime, function d
oXHRCallback(data, lastModified) {\n // per file cache\n
fileCache[href] = data;\n\n // Use remote copy (re-parse)\
n resolve({ contents: data, filename: href, webInfo: { lastModifi
ed }});\n }, function doXHRError(status, url) {\n reje
ct({ type: 'File', message: `'${url}' wasn't found (${status})`, href });\n
});\n });\n }\n});\n\nexport default (opts, log) => {\n opti
ons = opts;\n logger = log;\n return FileManager;\n}\n","import Environmen
t from './environment/environment';\nimport data from './data';\nimport tree fro
m './tree';\nimport AbstractFileManager from './environment/abstract-file-manage
r';\nimport AbstractPluginLoader from './environment/abstract-plugin-loader';\ni
mport visitors from './visitors';\nimport Parser from './parser/parser';\nimport
functions from './functions';\nimport contexts from './contexts';\nimport LessE
rror from './less-error';\nimport transformTree from './transform-tree';\nimport
* as utils from './utils';\nimport PluginManager from './plugin-manager';\nimpo
rt logger from './logger';\nimport SourceMapOutput from './source-map-output';\n
import SourceMapBuilder from './source-map-builder';\nimport ParseTree from './p
arse-tree';\nimport ImportManager from './import-manager';\nimport Parse from '.
/parse';\nimport Render from './render';\nimport { version } from '../../package
.json';\nimport parseVersion from 'parse-node-version';\n\nexport default functi
on(environment, fileManagers) {\n let sourceMapOutput, sourceMapBuilder, pars
eTree, importManager;\n\n environment = new Environment(environment, fileMana
gers);\n sourceMapOutput = SourceMapOutput(environment);\n sourceMapBuilde
r = SourceMapBuilder(sourceMapOutput, environment);\n parseTree = ParseTree(s
ourceMapBuilder);\n importManager = ImportManager(environment);\n\n const
render = Render(environment, parseTree, importManager);\n const parse = Parse
(environment, parseTree, importManager);\n\n const v = parseVersion(`v${versi
on}`);\n const initial = {\n version: [v.major, v.minor, v.patch],\n
data,\n tree,\n Environment,\n AbstractFileManager,\n
AbstractPluginLoader,\n environment,\n visitors,\n
Parser,\n functions: functions(environment),\n contexts,\n
SourceMapOutput: sourceMapOutput,\n SourceMapBuilder: sourceMapBuilder,\n
ParseTree: parseTree,\n ImportManager: importManager,\n re
nder,\n parse,\n LessError,\n transformTree,\n utils
,\n PluginManager,\n logger\n };\n\n // Create a public API\
n\n const ctor = function(t) {\n return function() {\n cons
t obj = Object.create(t.prototype);\n t.apply(obj, Array.prototype.sl
ice.call(arguments, 0));\n return obj;\n };\n };\n let t
;\n const api = Object.create(initial);\n for (const n in initial.tree) {\
n /* eslint guard-for-in: 0 */\n t = initial.tree[n];\n if
(typeof t === 'function') {\n api[n.toLowerCase()] = ctor(t);\n
}\n else {\n api[n] = Object.create(null);\n for
(const o in t) {\n /* eslint guard-for-in: 0 */\n
api[n][o.toLowerCase()] = ctor(t[o]);\n }\n }\n }\n\n /*
*\n * Some of the functions assume a `this` context of the API object,\n
* which causes it to fail when wrapped for ES6 imports.\n * \n * An ass
umed `this` should be removed in the future.\n */\n initial.parse = initi
al.parse.bind(api);\n initial.render = initial.render.bind(api);\n\n retur
n api;\n};\n","import LessError from './less-error';\nimport transformTree from
'./transform-tree';\nimport logger from './logger';\n\nexport default function(S
ourceMapBuilder) {\n class ParseTree {\n constructor(root, imports) {\
n this.root = root;\n this.imports = imports;\n }\n
\n toCSS(options) {\n let evaldRoot;\n const result
= {};\n let sourceMapBuilder;\n try {\n ev
aldRoot = transformTree(this.root, options);\n } catch (e) {\n
throw new LessError(e, this.imports);\n }\n\n try
{\n const compress = Boolean(options.compress);\n
if (compress) {\n logger.warn('The compress option has been
deprecated. ' + \n 'We recommend you use a dedicated css
minifier, for instance see less-plugin-clean-css.');\n }\n\n
const toCSSOptions = {\n compress,\n
dumpLineNumbers: options.dumpLineNumbers,\n strictUnits
: Boolean(options.strictUnits),\n numPrecision: 8};\n\n
if (options.sourceMap) {\n sourceMapBuilder = new S
ourceMapBuilder(options.sourceMap);\n result.css = sourceMapB
uilder.toCSS(evaldRoot, toCSSOptions, this.imports);\n } else {\n
result.css = evaldRoot.toCSS(toCSSOptions);\n
}\n } catch (e) {\n throw new LessError(e, this.impor
ts);\n }\n\n if (options.pluginManager) {\n
const postProcessors = options.pluginManager.getPostProcessors();\n
for (let i = 0; i < postProcessors.length; i++) {\n resul
t.css = postProcessors[i].process(result.css, { sourceMap: sourceMapBuilder, opt
ions, imports: this.imports });\n }\n }\n i
f (options.sourceMap) {\n result.map = sourceMapBuilder.getExtern
alSourceMap();\n }\n\n result.imports = [];\n f
or (const file in this.imports.files) {\n if (this.imports.files.
hasOwnProperty(file) && file !== this.imports.rootFilename) {\n
result.imports.push(file);\n }\n }\n ret
urn result;\n }\n }\n\n return ParseTree;\n};\n","export default fu
nction (SourceMapOutput, environment) {\n class SourceMapBuilder {\n c
onstructor(options) {\n this.options = options;\n }\n\n
toCSS(rootNode, options, imports) {\n const sourceMapOutput = new So
urceMapOutput(\n {\n contentsIgnoredCharsMap:
imports.contentsIgnoredChars,\n rootNode,\n
contentsMap: imports.contents,\n sourceMapFilename: this.op
tions.sourceMapFilename,\n sourceMapURL: this.options.sourceM
apURL,\n outputFilename: this.options.sourceMapOutputFilename
,\n sourceMapBasepath: this.options.sourceMapBasepath,\n
sourceMapRootpath: this.options.sourceMapRootpath,\n
outputSourceFiles: this.options.outputSourceFiles,\n s
ourceMapGenerator: this.options.sourceMapGenerator,\n sourceM
apFileInline: this.options.sourceMapFileInline, \n disable
SourcemapAnnotation: this.options.disableSourcemapAnnotation\n })
;\n\n const css = sourceMapOutput.toCSS(options);\n this.s
ourceMap = sourceMapOutput.sourceMap;\n this.sourceMapURL = sourceMap
Output.sourceMapURL;\n if (this.options.sourceMapInputFilename) {\n
this.sourceMapInputFilename = sourceMapOutput.normalizeFilename(th
is.options.sourceMapInputFilename);\n }\n if (this.options
.sourceMapBasepath !== undefined && this.sourceMapURL !== undefined) {\n
this.sourceMapURL = sourceMapOutput.removeBasepath(this.sourceMapURL);\n
}\n return css + this.getCSSAppendage();\n }\n\n
getCSSAppendage() {\n\n let sourceMapURL = this.sourceMapURL;\n
if (this.options.sourceMapFileInline) {\n if (this.so
urceMap === undefined) {\n return '';\n }\n
sourceMapURL = `data:application/json;base64,${environment.encodeBa
se64(this.sourceMap)}`;\n }\n\n if (this.options.disableSo
urcemapAnnotation) {\n return '';\n }\n\n i
f (sourceMapURL) {\n return `/*# sourceMappingURL=${sourceMapURL}
*/`;\n }\n return '';\n }\n\n getExternalSo
urceMap() {\n return this.sourceMap;\n }\n\n setExterna
lSourceMap(sourceMap) {\n this.sourceMap = sourceMap;\n }\n\n
isInline() {\n return this.options.sourceMapFileInline;\n
}\n\n getSourceMapURL() {\n return this.sourceMapURL;\n
}\n\n getOutputFilename() {\n return this.options.sourceMa
pOutputFilename;\n }\n\n getInputFilename() {\n return
this.sourceMapInputFilename;\n }\n }\n\n return SourceMapBuilder;\n
};\n","export default function (environment) {\n class SourceMapOutput {\n
constructor(options) {\n this._css = [];\n this._root
Node = options.rootNode;\n this._contentsMap = options.contentsMap;\n
this._contentsIgnoredCharsMap = options.contentsIgnoredCharsMap;\n
if (options.sourceMapFilename) {\n this._sourceMapFilen
ame = options.sourceMapFilename.replace(/\\\\/g, '/');\n }\n
this._outputFilename = options.outputFilename;\n this.sourceMapURL
= options.sourceMapURL;\n if (options.sourceMapBasepath) {\n
this._sourceMapBasepath = options.sourceMapBasepath.replace(/\\\\/g, '/'
);\n }\n if (options.sourceMapRootpath) {\n
this._sourceMapRootpath = options.sourceMapRootpath.replace(/\\\\/g, '/');\n
if (this._sourceMapRootpath.charAt(this._sourceMapRootpath.length -
1) !== '/') {\n this._sourceMapRootpath += '/';\n
}\n } else {\n this._sourceMapRootpath = '';\n
}\n this._outputSourceFiles = options.outputSourceFiles;\n
this._sourceMapGeneratorConstructor = environment.getSourceMapGenerato
r();\n\n this._lineNumber = 0;\n this._column = 0;\n
}\n\n removeBasepath(path) {\n if (this._sourceMapBasepath &
& path.indexOf(this._sourceMapBasepath) === 0) {\n path = path.su
bstring(this._sourceMapBasepath.length);\n if (path.charAt(0) ===
'\\\\' || path.charAt(0) === '/') {\n path = path.substring(
1);\n }\n }\n\n return path;\n }\n\n
normalizeFilename(filename) {\n filename = filename.replace(/
\\\\/g, '/');\n filename = this.removeBasepath(filename);\n
return (this._sourceMapRootpath || '') + filename;\n }\n\n add(c
hunk, fileInfo, index, mapLines) {\n\n // ignore adding empty strings
\n if (!chunk) {\n return;\n }\n\n
let lines, sourceLines, columns, sourceColumns, i;\n\n if (fileInf
o && fileInfo.filename) {\n let inputSource = this._contentsMap[f
ileInfo.filename];\n\n // remove vars/banner added to the top of
the file\n if (this._contentsIgnoredCharsMap[fileInfo.filename])
{\n // adjust the index\n index -= this._c
ontentsIgnoredCharsMap[fileInfo.filename];\n if (index < 0) {
index = 0; }\n // adjust the source\n inp
utSource = inputSource.slice(this._contentsIgnoredCharsMap[fileInfo.filename]);\
n }\n\n /** \n * ignore empty cont
ent, or failsafe\n * if contents map is incorrect\n
*/\n if (inputSource === undefined) {\n th
is._css.push(chunk);\n return;\n }\n\n
inputSource = inputSource.substring(0, index);\n sourceLi
nes = inputSource.split('\\n');\n sourceColumns = sourceLines[sou
rceLines.length - 1];\n }\n\n lines = chunk.split('\\n');\
n columns = lines[lines.length - 1];\n\n if (fileInfo && f
ileInfo.filename) {\n if (!mapLines) {\n this.
_sourceMapGenerator.addMapping({ generated: { line: this._lineNumber + 1, column
: this._column},\n original: { line: sourceLines.length,
column: sourceColumns.length},\n source: this.normalizeFi
lename(fileInfo.filename)});\n } else {\n for
(i = 0; i < lines.length; i++) {\n this._sourceMapGenerat
or.addMapping({ generated: { line: this._lineNumber + i + 1, column: i === 0 ? t
his._column : 0},\n original: { line: sourceLines.len
gth + i, column: i === 0 ? sourceColumns.length : 0},\n
source: this.normalizeFilename(fileInfo.filename)});\n }\n
}\n }\n\n if (lines.length === 1) {\n
this._column += columns.length;\n } else {\n
this._lineNumber += lines.length - 1;\n this._column = columns.
length;\n }\n\n this._css.push(chunk);\n }\n\n
isEmpty() {\n return this._css.length === 0;\n }\n\n
toCSS(context) {\n this._sourceMapGenerator = new this._sourceMapGen
eratorConstructor({ file: this._outputFilename, sourceRoot: null });\n\n
if (this._outputSourceFiles) {\n for (const filename in this.
_contentsMap) {\n if (this._contentsMap.hasOwnProperty(filena
me)) {\n let source = this._contentsMap[filename];\n
if (this._contentsIgnoredCharsMap[filename]) {\n
source = source.slice(this._contentsIgnoredCharsMap[filename]);\n
}\n this._sourceMapGenerator.setS
ourceContent(this.normalizeFilename(filename), source);\n }\n
}\n }\n\n this._rootNode.genCSS(context, t
his);\n\n if (this._css.length > 0) {\n let sourceMapU
RL;\n const sourceMapContent = JSON.stringify(this._sourceMapGene
rator.toJSON());\n\n if (this.sourceMapURL) {\n
sourceMapURL = this.sourceMapURL;\n } else if (this._sourceMapF
ilename) {\n sourceMapURL = this._sourceMapFilename;\n
}\n this.sourceMapURL = sourceMapURL;\n\n
this.sourceMap = sourceMapContent;\n }\n\n return this._c
ss.join('');\n }\n }\n\n return SourceMapOutput;\n};\n","import con
texts from './contexts';\nimport Parser from './parser/parser';\nimport LessErro
r from './less-error';\nimport * as utils from './utils';\nimport logger from '.
/logger';\n\nexport default function(environment) {\n // FileInfo = {\n //
'rewriteUrls' - option - whether to adjust URL's to be relative\n // 'file
name' - full resolved filename of current file\n // 'rootpath' - path to app
end to normal URLs for this node\n // 'currentDirectory' - path to the curre
nt file, absolute\n // 'rootFilename' - filename of the base file\n // '
entryPath' - absolute path to the entry file\n // 'reference' - whether the
file should not be output and only output parts that are referenced\n\n class
ImportManager {\n constructor(less, context, rootFileInfo) {\n
this.less = less;\n this.rootFilename = rootFileInfo.filename;\n
this.paths = context.paths || []; // Search paths, when importing\n
this.contents = {}; // map - filename to contents of all th
e files\n this.contentsIgnoredChars = {}; // map - filename to lines
at the beginning of each file to ignore\n this.mime = context.mime;\n
this.error = null;\n this.context = context;\n
// Deprecated? Unused outside of here, could be useful.\n this.queue
= []; // Files which haven't been imported yet\n this.files =
{}; // Holds the imported parse trees.\n }\n\n /**\n
* Add an import to be imported\n * @param path - the raw path\n
* @param tryAppendExtension - whether to try appending a file extension (.les
s or .js if the path has no extension)\n * @param currentFileInfo - the
current file info (used for instance to work out relative paths)\n * @pa
ram importOptions - import options\n * @param callback - callback for wh
en it is imported\n */\n push(path, tryAppendExtension, currentFi
leInfo, importOptions, callback) {\n const importManager = this, plug
inLoader = this.context.pluginManager.Loader;\n\n this.queue.push(pat
h);\n\n const fileParsedFunc = function (e, root, fullPath) {\n
importManager.queue.splice(importManager.queue.indexOf(path), 1); // R
emove the path from the queue\n\n const importedEqualsRoot = full
Path === importManager.rootFilename;\n if (importOptions.optional
&& e) {\n callback(null, {rules:[]}, false, null);\n
logger.info(`The file ${fullPath} was skipped because it was not fou
nd and the import was marked optional.`);\n }\n el
se {\n // Inline imports aren't cached here.\n
// If we start to cache them, please make sure they won't conflict with non
-inline imports of the\n // same name as they used to do befo
re this comment and the condition below have been added.\n if
(!importManager.files[fullPath] && !importOptions.inline) {\n
importManager.files[fullPath] = { root, options: importOptions };\n
}\n if (e && !importManager.error) { importManag
er.error = e; }\n callback(e, root, importedEqualsRoot, fullP
ath);\n }\n };\n\n const newFileInfo = {\n
rewriteUrls: this.context.rewriteUrls,\n entryPath
: currentFileInfo.entryPath,\n rootpath: currentFileInfo.rootpath
,\n rootFilename: currentFileInfo.rootFilename\n };\n\
n const fileManager = environment.getFileManager(path, currentFileInf
o.currentDirectory, this.context, environment);\n\n if (!fileManager)
{\n fileParsedFunc({ message: `Could not find a file-manager for
${path}` });\n return;\n }\n\n const loadF
ileCallback = function(loadedFile) {\n let plugin;\n
const resolvedFilename = loadedFile.filename;\n const contents
= loadedFile.contents.replace(/^\\uFEFF/, '');\n\n // Pass on an
updated rootpath if path of imported file is relative and file\n
// is in a (sub|sup) directory\n //\n // Examples
:\n // - If path of imported file is 'module/nav/nav.less' and ro
otpath is 'less/',\n // then rootpath should become 'less/modul
e/nav/'\n // - If path of imported file is '../mixins.less' and r
ootpath is 'less/',\n // then rootpath should become 'less/../'
\n newFileInfo.currentDirectory = fileManager.getPath(resolvedFil
ename);\n if (newFileInfo.rewriteUrls) {\n new
FileInfo.rootpath = fileManager.join(\n (importManager.co
ntext.rootpath || ''),\n fileManager.pathDiff(newFileInfo
.currentDirectory, newFileInfo.entryPath));\n\n if (!fileMana
ger.isPathAbsolute(newFileInfo.rootpath) && fileManager.alwaysMakePathsAbsolute(
)) {\n newFileInfo.rootpath = fileManager.join(newFileInf
o.entryPath, newFileInfo.rootpath);\n }\n }\n
newFileInfo.filename = resolvedFilename;\n\n const
newEnv = new contexts.Parse(importManager.context);\n\n newEnv.p
rocessImports = false;\n importManager.contents[resolvedFilename]
= contents;\n\n if (currentFileInfo.reference || importOptions.r
eference) {\n newFileInfo.reference = true;\n
}\n\n if (importOptions.isPlugin) {\n plugin =
pluginLoader.evalPlugin(contents, newEnv, importManager, importOptions.pluginAr
gs, newFileInfo);\n if (plugin instanceof LessError) {\n
fileParsedFunc(plugin, null, resolvedFilename);\n
}\n else {\n fileParsedFunc(nu
ll, plugin, resolvedFilename);\n }\n } else if
(importOptions.inline) {\n fileParsedFunc(null, contents, re
solvedFilename);\n } else {\n // import (multi
ple) parse trees apparently get altered and can't be cached.\n
// TODO: investigate why this is\n if (importManager.files[
resolvedFilename]\n && !importManager.files[resolvedFilen
ame].options.multiple\n && !importOptions.multiple) {\n\n
fileParsedFunc(null, importManager.files[resolvedFilenam
e].root, resolvedFilename);\n }\n else {\n
new Parser(newEnv, importManager, newFileInfo).parse(con
tents, function (e, root) {\n fileParsedFunc(e, root,
resolvedFilename);\n });\n }\n
}\n };\n let loadedFile;\n let promise
;\n const context = utils.clone(this.context);\n\n if (try
AppendExtension) {\n context.ext = importOptions.isPlugin ? '.js'
: '.less';\n }\n\n if (importOptions.isPlugin) {\n
context.mime = 'application/javascript';\n\n if (context
.syncImport) {\n loadedFile = pluginLoader.loadPluginSync(pat
h, currentFileInfo.currentDirectory, context, environment, fileManager);\n
} else {\n promise = pluginLoader.loadPlugin(path,
currentFileInfo.currentDirectory, context, environment, fileManager);\n
}\n }\n else {\n if (context.syncImp
ort) {\n loadedFile = fileManager.loadFileSync(path, currentF
ileInfo.currentDirectory, context, environment);\n } else {\n
promise = fileManager.loadFile(path, currentFileInfo.currentDire
ctory, context, environment,\n (err, loadedFile) => {\n
if (err) {\n fileParsed
Func(err);\n } else {\n
loadFileCallback(loadedFile);\n }\n
});\n }\n }\n if (loadedFile) {\n
if (!loadedFile.filename) {\n fileParsedFunc(lo
adedFile);\n } else {\n loadFileCallback(loade
dFile);\n }\n } else if (promise) {\n p
romise.then(loadFileCallback, fileParsedFunc);\n }\n }\n }\
n\n return ImportManager;\n};\n","import * as utils from './utils';\n\nexport
default function(environment, ParseTree, ImportManager) {\n const render = f
unction (input, options, callback) {\n if (typeof options === 'function')
{\n callback = options;\n options = utils.copyOptions(thi
s.options, {});\n }\n else {\n options = utils.copyOpti
ons(this.options, options || {});\n }\n\n if (!callback) {\n
const self = this;\n return new Promise(function (resolve, reje
ct) {\n render.call(self, input, options, function(err, output) {
\n if (err) {\n reject(err);\n
} else {\n resolve(output);\n
}\n });\n });\n } else {\n this.
parse(input, options, function(err, root, imports, options) {\n i
f (err) { return callback(err); }\n\n let result;\n
try {\n const parseTree = new ParseTree(root, imports);\n
result = parseTree.toCSS(options);\n }\n
catch (err) { return callback(err); }\n\n callback(null,
result);\n });\n }\n };\n\n return render;\n};\n","impo
rt contexts from './contexts';\nimport Parser from './parser/parser';\nimport Pl
uginManager from './plugin-manager';\nimport LessError from './less-error';\nimp
ort * as utils from './utils';\n\nexport default function(environment, ParseTree
, ImportManager) {\n const parse = function (input, options, callback) {\n\n
if (typeof options === 'function') {\n callback = options;\n
options = utils.copyOptions(this.options, {});\n }\n els
e {\n options = utils.copyOptions(this.options, options || {});\n
}\n\n if (!callback) {\n const self = this;\n r
eturn new Promise(function (resolve, reject) {\n parse.call(self,
input, options, function(err, output) {\n if (err) {\n
reject(err);\n } else {\n
resolve(output);\n }\n });\n
});\n } else {\n let context;\n let rootFileInfo;\n
const pluginManager = new PluginManager(this, !options.reUsePluginMa
nager);\n\n options.pluginManager = pluginManager;\n\n con
text = new contexts.Parse(options);\n\n if (options.rootFileInfo) {\n
rootFileInfo = options.rootFileInfo;\n } else {\n
const filename = options.filename || 'input';\n const
entryPath = filename.replace(/[^\\/\\\\]*$/, '');\n rootFileInfo
= {\n filename,\n rewriteUrls: context.re
writeUrls,\n rootpath: context.rootpath || '',\n
currentDirectory: entryPath,\n entryPath,\n
rootFilename: filename\n };\n // add in a
missing trailing slash\n if (rootFileInfo.rootpath && rootFileIn
fo.rootpath.slice(-1) !== '/') {\n rootFileInfo.rootpath += '
/';\n }\n }\n\n const imports = new ImportM
anager(this, context, rootFileInfo);\n this.importManager = imports;\
n\n // TODO: allow the plugins to be just a list of paths or names\n
// Do an async plugin queue like lessc\n\n if (options.plu
gins) {\n options.plugins.forEach(function(plugin) {\n
let evalResult, contents;\n if (plugin.fileContent)
{\n contents = plugin.fileContent.replace(/^\\uFEFF/, '')
;\n evalResult = pluginManager.Loader.evalPlugin(contents
, context, imports, plugin.options, plugin.filename);\n i
f (evalResult instanceof LessError) {\n return callba
ck(evalResult);\n }\n }\n
else {\n pluginManager.addPlugin(plugin);\n
}\n });\n }\n\n new Parser(con
text, imports, rootFileInfo)\n .parse(input, function (e, root) {
\n if (e) { return callback(e); }\n callba
ck(null, root, imports, options);\n }, options);\n }\n
};\n return parse;\n};\n","// TODO: Add tests for browser @plugin\n/* global
window */\n\nimport AbstractPluginLoader from '../less/environment/abstract-plug
in-loader.js';\n\n/**\n * Browser Plugin Loader\n */\nconst PluginLoader = funct
ion(less) {\n this.less = less;\n // Should we shim this.require for brows
er? Probably not?\n};\n\nPluginLoader.prototype = Object.assign(new AbstractPlug
inLoader(), {\n loadPlugin(filename, basePath, context, environment, fileMana
ger) {\n return new Promise((fulfill, reject) => {\n fileManag
er.loadFile(filename, basePath, context, environment)\n .then(ful
fill).catch(reject);\n });\n }\n});\n\nexport default PluginLoader;\n\
n","import * as utils from './utils';\nimport browser from './browser';\n\nexpor
t default (window, less, options) => {\n\n function errorHTML(e, rootHref) {\
n const id = `less-error-message:${utils.extractId(rootHref || '')}`;\n
const template = '<li><label>{line}</label><pre class=\"{class}\">{content
}</pre></li>';\n const elem = window.document.createElement('div');\n
let timer;\n let content;\n const errors = [];\n const
filename = e.filename || rootHref;\n const filenameNoPath = filename.matc
h(/([^\\/]+(\\?.*)?)$/)[1];\n\n elem.id = id;\n elem.classN
ame = 'less-error-message';\n\n content = `<h3>${e.type || 'Syntax'}Error
: ${e.message || 'There is an error in your .less file'}` + \n `</h3>
<p>in <a href=\"${filename}\">${filenameNoPath}</a> `;\n\n const errorlin
e = (e, i, classname) => {\n if (e.extract[i] !== undefined) {\n
errors.push(template.replace(/\\{line\\}/, (parseInt(e.line, 10) || 0
) + (i - 1))\n .replace(/\\{class\\}/, classname)\n
.replace(/\\{content\\}/, e.extract[i]));\n }\n };\n
\n if (e.line) {\n errorline(e, 0, '');\n errorline
(e, 1, 'line');\n errorline(e, 2, '');\n content += `on li
ne ${e.line}, column ${e.column + 1}:</p><ul>${errors.join('')}</ul>`;\n
}\n if (e.stack && (e.extract || options.logLevel >= 4)) {\n c
ontent += `<br/>Stack Trace</br />${e.stack.split('\\n').slice(1).join('<br/>')}
`;\n }\n elem.innerHTML = content;\n\n // CSS for error mes
sages\n browser.createCSS(window.document, [\n '.less-error-me
ssage ul, .less-error-message li {',\n 'list-style-type: none;',\n
'margin-right: 15px;',\n 'padding: 4px 0;',\n 'ma
rgin: 0;',\n '}',\n '.less-error-message label {',\n
'font-size: 12px;',\n 'margin-right: 15px;',\n 'padd
ing: 4px 0;',\n 'color: #cc7777;',\n '}',\n '.l
ess-error-message pre {',\n 'color: #dd6666;',\n 'padding:
4px 0;',\n 'margin: 0;',\n 'display: inline-block;',\n
'}',\n '.less-error-message pre.line {',\n 'color
: #ff0000;',\n '}',\n '.less-error-message h3 {',\n
'font-size: 20px;',\n 'font-weight: bold;',\n 'paddin
g: 15px 0 5px 0;',\n 'margin: 0;',\n '}',\n '.l
ess-error-message a {',\n 'color: #10a',\n '}',\n
'.less-error-message .error {',\n 'color: red;',\n 'fon
t-weight: bold;',\n 'padding-bottom: 2px;',\n 'border-bott
om: 1px dashed red;',\n '}'\n ].join('\\n'), { title: 'error-m
essage' });\n\n elem.style.cssText = [\n 'font-family: Arial,
sans-serif',\n 'border: 1px solid #e00',\n 'background-col
or: #eee',\n 'border-radius: 5px',\n '-webkit-border-radiu
s: 5px',\n '-moz-border-radius: 5px',\n 'color: #e00',\n
'padding: 15px',\n 'margin-bottom: 15px'\n ].join(';
');\n\n if (options.env === 'development') {\n timer = setInte
rval(() => {\n const document = window.document;\n
const body = document.body;\n if (body) {\n i
f (document.getElementById(id)) {\n body.replaceChild(ele
m, document.getElementById(id));\n } else {\n
body.insertBefore(elem, body.firstChild);\n }\n
clearInterval(timer);\n }\n }, 10);\n
}\n }\n\n function removeErrorHTML(path) {\n const node = wind
ow.document.getElementById(`less-error-message:${utils.extractId(path)}`);\n
if (node) {\n node.parentNode.removeChild(node);\n }\n
}\n\n function removeErrorConsole(path) {\n // no action\n }\n\n
function removeError(path) {\n if (!options.errorReporting || options.er
rorReporting === 'html') {\n removeErrorHTML(path);\n } else i
f (options.errorReporting === 'console') {\n removeErrorConsole(path)
;\n } else if (typeof options.errorReporting === 'function') {\n
options.errorReporting('remove', path);\n }\n }\n\n function err
orConsole(e, rootHref) {\n const template = '{line} {content}';\n
const filename = e.filename || rootHref;\n const errors = [];\n le
t content = `${e.type || 'Syntax'}Error: ${e.message || 'There is an error in yo
ur .less file'} in ${filename}`;\n\n const errorline = (e, i, classname)
=> {\n if (e.extract[i] !== undefined) {\n errors.push
(template.replace(/\\{line\\}/, (parseInt(e.line, 10) || 0) + (i - 1))\n
.replace(/\\{class\\}/, classname)\n .replace(/\\
{content\\}/, e.extract[i]));\n }\n };\n\n if (e.line)
{\n errorline(e, 0, '');\n errorline(e, 1, 'line');\n
errorline(e, 2, '');\n content += ` on line ${e.line}, column
${e.column + 1}:\\n${errors.join('\\n')}`;\n }\n if (e.stack && (e
.extract || options.logLevel >= 4)) {\n content += `\\nStack Trace\\n
${e.stack}`;\n }\n less.logger.error(content);\n }\n\n funct
ion error(e, rootHref) {\n if (!options.errorReporting || options.errorRe
porting === 'html') {\n errorHTML(e, rootHref);\n } else if (o
ptions.errorReporting === 'console') {\n errorConsole(e, rootHref);\n
} else if (typeof options.errorReporting === 'function') {\n
options.errorReporting('add', e, rootHref);\n }\n }\n\n return {\n
add: error,\n remove: removeError\n };\n};\n","/**\n * Kicks of
f less and compiles any stylesheets\n * used in the browser distributed version
of less\n * to kick-start less using the browser api\n */\n/* global window, doc
ument */\n\nimport defaultOptions from '../less/default-options';\nimport addDef
aultOptions from './add-default-options';\nimport root from './index';\n\nconst
options = defaultOptions();\n\nif (window.less) {\n for (const key in window.
less) {\n if (window.less.hasOwnProperty(key)) {\n options[key
] = window.less[key];\n }\n }\n}\naddDefaultOptions(window, options);\
n\noptions.plugins = options.plugins || [];\n\nif (window.LESS_PLUGINS) {\n o
ptions.plugins = options.plugins.concat(window.LESS_PLUGINS);\n}\n\nconst less =
root(window, options);\nexport default less;\n\nwindow.less = less;\n\nlet css;
\nlet head;\nlet style;\n\n// Always restore page visibility\nfunction resolveOr
Reject(data) {\n if (data.filename) {\n console.warn(data);\n }\n
if (!options.async) {\n head.removeChild(style);\n }\n}\n\nif (optio
ns.onReady) {\n if (/!watch/.test(window.location.hash)) {\n less.watc
h();\n }\n // Simulate synchronous stylesheet loading by hiding page rende
ring\n if (!options.async) {\n css = 'body { display: none !important
}';\n head = document.head || document.getElementsByTagName('head')[0];\n
style = document.createElement('style');\n\n style.type = 'text/c
ss';\n if (style.styleSheet) {\n style.styleSheet.cssText = cs
s;\n } else {\n style.appendChild(document.createTextNode(css)
);\n }\n\n head.appendChild(style);\n }\n less.registerStyle
sheetsImmediately();\n less.pageLoadFinished = less.refresh(less.env === 'dev
elopment').then(resolveOrReject, resolveOrReject);\n}\n","// Export a new defaul
t each time\nexport default function() {\n return {\n /* Inline Javasc
ript - @plugin still allowed */\n javascriptEnabled: false,\n\n /*
Outputs a makefile import dependency list to stdout. */\n depends: false
,\n\n /* (DEPRECATED) Compress using less built-in compression. \n
* This does an okay job but does not utilise all the tricks of \n * de
dicated css compression. */\n compress: false,\n\n /* Runs the les
s parser and just reports errors without any output. */\n lint: false,\n\
n /* Sets available include paths.\n * If the file in an @import
rule does not exist at that exact location, \n * less will look for it a
t the location(s) passed to this option. \n * You might use this for ins
tance to specify a path to a library which \n * you want to be reference
d simply and relatively in the less files. */\n paths: [],\n\n /*
color output in the terminal */\n color: true,\n\n /* The strictIm
ports controls whether the compiler will allow an @import inside of either \n
* @media blocks or (a later addition) other selector blocks.\n * S
ee: https://github.com/less/less.js/issues/656 */\n strictImports: false,
\n\n /* Allow Imports from Insecure HTTPS Hosts */\n insecure: fal
se,\n\n /* Allows you to add a path to every generated import and url in
your css. \n * This does not affect less import statements that are proc
essed, just ones \n * that are left in the output css. */\n rootp
ath: '',\n\n /* By default URLs are kept as-is, so if you import a file i
n a sub-directory \n * that references an image, exactly the same URL wi
ll be output in the css. \n * This option allows you to re-write URL's i
n imported files so that the \n * URL is always relative to the base imp
orted file */\n rewriteUrls: false,\n\n /* How to process math \n
* 0 always - eagerly try to solve all operations\n *
1 parens-division - require parens for division \"/\"\n * 2 parens
| strict - require parens for all operations\n * 3 strict-legacy
- legacy strict behavior (super-strict)\n */\n math: 1,\n\n
/* Without this option, less attempts to guess at the output unit when it does
maths. */\n strictUnits: false,\n\n /* Effectively the declaratio
n is put at the top of your base Less file, \n * meaning it can be used
but it also can be overridden if this variable \n * is defined in the fi
le. */\n globalVars: null,\n\n /* As opposed to the global variabl
e option, this puts the declaration at the\n * end of your base file, me
aning it will override anything defined in your Less file. */\n modifyVar
s: null,\n\n /* This option allows you to specify a argument to go on to
every URL. */\n urlArgs: ''\n }\n};","import {addDataAttr} from './ut
ils';\nimport browser from './browser';\n\nexport default (window, options) => {
\n\n // use options from the current script tag data attribues\n addDataAt
tr(options, browser.currentScript(window));\n\n if (options.isFileProtocol ==
= undefined) {\n options.isFileProtocol = /^(file|(chrome|safari)(-extens
ion)?|resource|qrc|app):/.test(window.location.protocol);\n }\n\n // Load
styles asynchronously (default: false)\n //\n // This is set to `false` by
default, so that the body\n // doesn't start loading before the stylesheets
are parsed.\n // Setting this to `true` can result in flickering.\n //\n
options.async = options.async || false;\n options.fileAsync = options.fileA
sync || false;\n\n // Interval between watch polls\n options.poll = option
s.poll || (options.isFileProtocol ? 1000 : 1500);\n\n options.env = options.e
nv || (window.location.hostname == '127.0.0.1' ||\n window.location.hostn
ame == '0.0.0.0' ||\n window.location.hostname == 'localhost' ||\n
(window.location.port &&\n window.location.port.length > 0) |
|\n options.isFileProtocol ? 'development'\n : '
production');\n\n const dumpLineNumbers = /!dumpLineNumbers:(comments|mediaqu
ery|all)/.exec(window.location.hash);\n if (dumpLineNumbers) {\n optio
ns.dumpLineNumbers = dumpLineNumbers[1];\n }\n\n if (options.useFileCache
=== undefined) {\n options.useFileCache = true;\n }\n\n if (options
.onReady === undefined) {\n options.onReady = true;\n }\n\n if (opt
ions.relativeUrls) {\n options.rewriteUrls = 'all';\n }\n};\n","//\n//
index.js\n// Should expose the additional browser functions on to the less obje
ct\n//\nimport {addDataAttr} from './utils';\nimport lessRoot from '../less';\ni
mport browser from './browser';\nimport FM from './file-manager';\nimport Plugin
Loader from './plugin-loader';\nimport LogListener from './log-listener';\nimpor
t ErrorReporting from './error-reporting';\nimport Cache from './cache';\nimport
ImageSize from './image-size';\n\nexport default (window, options) => {\n co
nst document = window.document;\n const less = lessRoot();\n\n less.option
s = options;\n const environment = less.environment;\n const FileManager =
FM(options, less.logger);\n const fileManager = new FileManager();\n envi
ronment.addFileManager(fileManager);\n less.FileManager = FileManager;\n l
ess.PluginLoader = PluginLoader;\n\n LogListener(less, options);\n const e
rrors = ErrorReporting(window, less, options);\n const cache = less.cache = o
ptions.cache || Cache(window, options, less.logger);\n ImageSize(less.environ
ment);\n\n // Setup user functions - Deprecate?\n if (options.functions) {
\n less.functions.functionRegistry.addMultiple(options.functions);\n }
\n\n const typePattern = /^text\\/(x-)?less$/;\n\n function clone(obj) {\n
const cloned = {};\n for (const prop in obj) {\n if (o
bj.hasOwnProperty(prop)) {\n cloned[prop] = obj[prop];\n
}\n }\n return cloned;\n }\n\n // only really needed for
phantom\n function bind(func, thisArg) {\n const curryArgs = Array.pro
totype.slice.call(arguments, 2);\n return function() {\n const
args = curryArgs.concat(Array.prototype.slice.call(arguments, 0));\n
return func.apply(thisArg, args);\n };\n }\n\n function loadStyles
(modifyVars) {\n const styles = document.getElementsByTagName('style');\n
let style;\n\n for (let i = 0; i < styles.length; i++) {\n
style = styles[i];\n if (style.type.match(typePattern)) {\n
const instanceOptions = clone(options);\n instanceOpti
ons.modifyVars = modifyVars;\n const lessText = style.innerHTML |
| '';\n instanceOptions.filename = document.location.href.replace
(/#.*$/, '');\n\n /* jshint loopfunc:true */\n //
use closure to store current style\n less.render(lessText, instan
ceOptions,\n bind((style, e, result) => {\n
if (e) {\n errors.add(e, 'inline');\n
} else {\n style.type = 'text/css';\n
if (style.styleSheet) {\n
style.styleSheet.cssText = result.css;\n } else {\
n style.innerHTML = result.css;\n
}\n }\n }, null, style));\
n }\n }\n }\n\n function loadStyleSheet(sheet, callback,
reload, remaining, modifyVars) {\n\n const instanceOptions = clone(optio
ns);\n addDataAttr(instanceOptions, sheet);\n instanceOptions.mime
= sheet.type;\n\n if (modifyVars) {\n instanceOptions.modifyV
ars = modifyVars;\n }\n\n function loadInitialFileCallback(loadedF
ile) {\n const data = loadedFile.contents;\n const path =
loadedFile.filename;\n const webInfo = loadedFile.webInfo;\n\n
const newFileInfo = {\n currentDirectory: fileManager.getPat
h(path),\n filename: path,\n rootFilename: path,\n
rewriteUrls: instanceOptions.rewriteUrls\n };\n\n
newFileInfo.entryPath = newFileInfo.currentDirectory;\n newFi
leInfo.rootpath = instanceOptions.rootpath || newFileInfo.currentDirectory;\n\n
if (webInfo) {\n webInfo.remaining = remaining;\n\n
const css = cache.getCSS(path, webInfo, instanceOptions.modifyVars)
;\n if (!reload && css) {\n webInfo.local = tr
ue;\n callback(null, css, data, sheet, webInfo, path);\n
return;\n }\n\n }\n\n // TOD
O add tests around how this behaves when reloading\n errors.remove(pa
th);\n\n instanceOptions.rootFileInfo = newFileInfo;\n les
s.render(data, instanceOptions, (e, result) => {\n if (e) {\n
e.href = path;\n callback(e);\n
} else {\n cache.setCSS(sheet.href, webInfo.lastModified, i
nstanceOptions.modifyVars, result.css);\n callback(null, resu
lt.css, data, sheet, webInfo, path);\n }\n });\n
}\n\n fileManager.loadFile(sheet.href, null, instanceOptions, environme
nt)\n .then(loadedFile => {\n loadInitialFileCallback(
loadedFile);\n }).catch(err => {\n console.log(err);\n
callback(err);\n });\n\n }\n\n function loadSty
leSheets(callback, reload, modifyVars) {\n for (let i = 0; i < less.sheet
s.length; i++) {\n loadStyleSheet(less.sheets[i], callback, reload, l
ess.sheets.length - (i + 1), modifyVars);\n }\n }\n\n function init
RunningMode() {\n if (less.env === 'development') {\n less.wat
chTimer = setInterval(() => {\n if (less.watchMode) {\n
fileManager.clearFileCache();\n loadStyleSheets((e,
css, _, sheet, webInfo) => {\n if (e) {\n
errors.add(e, e.href || sheet.href);\n } els
e if (css) {\n browser.createCSS(window.document, css
, sheet);\n }\n });\n }
\n }, options.poll);\n }\n }\n\n //\n // Watch mode\n
//\n less.watch = function () {\n if (!less.watchMode ) {\n
less.env = 'development';\n initRunningMode();\n }\n
this.watchMode = true;\n return true;\n };\n\n less.unwatch =
function () {clearInterval(less.watchTimer); this.watchMode = false; return fals
e; };\n\n //\n // Synchronously get all <link> tags with the 'rel' attribu
te set to\n // \"stylesheet/less\".\n //\n less.registerStylesheetsImme
diately = () => {\n const links = document.getElementsByTagName('link');\
n less.sheets = [];\n\n for (let i = 0; i < links.length; i++) {\n
if (links[i].rel === 'stylesheet/less' || (links[i].rel.match(/style
sheet/) &&\n (links[i].type.match(typePattern)))) {\n
less.sheets.push(links[i]);\n }\n }\n };\n\n //\n
// Asynchronously get all <link> tags with the 'rel' attribute set to\n // \
"stylesheet/less\", returning a Promise.\n //\n less.registerStylesheets =
() => new Promise((resolve, reject) => {\n less.registerStylesheetsImmed
iately();\n resolve();\n });\n\n //\n // With this function, it'
s possible to alter variables and re-render\n // CSS without reloading less-f
iles\n //\n less.modifyVars = record => less.refresh(true, record, false);
\n\n less.refresh = (reload, modifyVars, clearFileCache) => {\n if ((r
eload || clearFileCache) && clearFileCache !== false) {\n fileManager
.clearFileCache();\n }\n return new Promise((resolve, reject) => {
\n let startTime;\n let endTime;\n let totalMil
liseconds;\n let remainingSheets;\n startTime = endTime =
new Date();\n\n // Set counter for remaining unprocessed sheets\n
remainingSheets = less.sheets.length;\n\n if (remainingSheets
=== 0) {\n\n endTime = new Date();\n totalMillise
conds = endTime - startTime;\n less.logger.info('Less has finishe
d and no sheets were loaded.');\n resolve({\n
startTime,\n endTime,\n totalMilliseconds,
\n sheets: less.sheets.length\n });\n\n
} else {\n // Relies on less.sheets array, callback seems to
be guaranteed to be called for every element of the array\n load
StyleSheets((e, css, _, sheet, webInfo) => {\n if (e) {\n
errors.add(e, e.href || sheet.href);\n
reject(e);\n return;\n }\n
if (webInfo.local) {\n less.logger.info(`Loadin
g ${sheet.href} from cache.`);\n } else {\n
less.logger.info(`Rendered ${sheet.href} successfully.`);\n
}\n browser.createCSS(window.document, css, sheet);\n
less.logger.info(`CSS for ${sheet.href} generated in ${new Date
() - endTime}ms`);\n\n // Count completed sheet\n
remainingSheets--;\n\n // Check if the last remaining
sheet was processed and then call the promise\n if (remainin
gSheets === 0) {\n totalMilliseconds = new Date() - start
Time;\n less.logger.info(`Less has finished. CSS generate
d in ${totalMilliseconds}ms`);\n resolve({\n
startTime,\n endTime,\n
totalMilliseconds,\n sheets: less.sheets
.length\n });\n }\n
endTime = new Date();\n }, reload, modifyVars);\n }\n
\n loadStyles(modifyVars);\n });\n };\n\n less.refreshSt
yles = loadStyles;\n return less;\n};\n","export default (less, options) => {
\n const logLevel_debug = 4;\n const logLevel_info = 3;\n const logLeve
l_warn = 2;\n const logLevel_error = 1;\n\n // The amount of logging in th
e javascript console.\n // 3 - Debug, information and errors\n // 2 - Info
rmation and errors\n // 1 - Errors\n // 0 - None\n // Defaults to 2\n
options.logLevel = typeof options.logLevel !== 'undefined' ? options.logLevel
: (options.env === 'development' ? logLevel_info : logLevel_error);\n\n if (
!options.loggers) {\n options.loggers = [{\n debug: function(m
sg) {\n if (options.logLevel >= logLevel_debug) {\n
console.log(msg);\n }\n },\n info: fu
nction(msg) {\n if (options.logLevel >= logLevel_info) {\n
console.log(msg);\n }\n },\n w
arn: function(msg) {\n if (options.logLevel >= logLevel_warn) {\n
console.warn(msg);\n }\n },\n
error: function(msg) {\n if (options.logLevel >= logLevel_
error) {\n console.error(msg);\n }\n
}\n }];\n }\n for (let i = 0; i < options.loggers.length; i++) {\
n less.logger.addListener(options.loggers[i]);\n }\n};\n","// Cache sy
stem is a bit outdated and could do with work\n\nexport default (window, options
, logger) => {\n let cache = null;\n if (options.env !== 'development') {\
n try {\n cache = (typeof window.localStorage === 'undefined')
? null : window.localStorage;\n } catch (_) {}\n }\n return {\n
setCSS: function(path, lastModified, modifyVars, styles) {\n if
(cache) {\n logger.info(`saving ${path} to cache.`);\n
try {\n cache.setItem(path, styles);\n
cache.setItem(`${path}:timestamp`, lastModified);\n if (mod
ifyVars) {\n cache.setItem(`${path}:vars`, JSON.stringify
(modifyVars));\n }\n } catch (e) {\n
// TODO - could do with adding more robust error handling\n
logger.error(`failed to save \"${path}\" to local storage for caching.`
);\n }\n }\n },\n getCSS: function(path,
webInfo, modifyVars) {\n const css = cache && cache.getItem(pa
th);\n const timestamp = cache && cache.getItem(`${path}:timestamp`);
\n let vars = cache && cache.getItem(`${path}:vars`);\n\n
modifyVars = modifyVars || {};\n vars = vars || \"{}\"; // if no
t set, treat as the JSON representation of an empty object\n\n if (ti
mestamp && webInfo.lastModified &&\n (new Date(webInfo.lastModifi
ed).valueOf() ===\n new Date(timestamp).valueOf()) &&\n
JSON.stringify(modifyVars) === vars) {\n // Use local c
opy\n return css;\n }\n }\n };\n};\n","\nimp
ort functionRegistry from './../less/functions/function-registry';\n\nexport def
ault () => {\n function imageSize() {\n throw {\n type: 'Ru
ntime',\n message: 'Image size functions are not supported in browser
version of less'\n };\n }\n\n const imageFunctions = {\n 'i
mage-size': function(filePathNode) {\n imageSize(this, filePathNode);
\n return -1;\n },\n 'image-width': function(filePathNo
de) {\n imageSize(this, filePathNode);\n return -1;\n
},\n 'image-height': function(filePathNode) {\n imageSize(t
his, filePathNode);\n return -1;\n }\n };\n\n functionRe
gistry.addMultiple(imageFunctions);\n};\n"],"names":["extractId","href","replace
","addDataAttr","options","tag","opt","dataset","hasOwnProperty","JSON","parse",
"_","document","styles","sheet","id","title","utils.extractId","oldStyleNode","g
etElementById","keepOldStyleNode","styleNode","createElement","setAttribute","me
dia","styleSheet","appendChild","createTextNode","childNodes","length","firstChi
ld","nodeValue","head","getElementsByTagName","nextEl","nextSibling","parentNode
","insertBefore","removeChild","cssText","e","Error","window","scripts","current
Script","error","msg","this","_fireEvent","warn","info","debug","addListener","l
istener","_listeners","push","removeListener","i","splice","type","logFunction",
"externalEnvironment","fileManagers","requiredFunctions","functions","concat","p
ropName","environmentFunc","bind","Environment","filename","currentDirectory","e
nvironment","isSync","logger","pluginManager","getFileManagers","fileManager","a
liceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","b
lanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse",
"chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","dar
kcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagent
a","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagre
en","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet"
,"deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwh
ite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray",
"grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","
khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightc
oral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","l
ightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsl
ategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","ma
roon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagr
een","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","
midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace",
"olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","p
aleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","pow
derblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","s
almon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue
","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle
","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgre
en","m","cm","mm","in","px","pt","pc","duration","s","ms","angle","rad","Math","
PI","deg","grad","turn","colors","unitConversions","parent","visibilityBlocks","
undefined","nodeVisible","rootNode","parsed","Object","Node","fileInfo","getInde
x","nodes","set","node","Array","isArray","forEach","_index","_fileInfo","contex
t","strs","genCSS","add","chunk","index","isEmpty","join","output","value","visi
tor","visit","op","a","b","precision","numPrecision","Number","toFixed","compare
","Color","rgb","originalForm","self","match","map","c","parseInt","alpha","spli
t","clamp","v","max","min","toHex","round","toString","prototype","assign","luma
","r","g","pow","toCSS","doNotCompress","color","colorFunction","compress","args
","fround","indexOf","toHSL","h","l","toRGB","splitcolor","operate","other","_op
erate","d","toHSV","toARGB","x","fromKeyword","keyword","key","toLowerCase","sli
ce","Paren","eval","_noSpaceCombinators"," ","|","Combinator","emptyOrWhitespace
","trim","spaceOrEmpty","Element","combinator","isVariable","currentFileInfo","v
isibilityInfo","copyVisibilityInfo","setParent","accept","clone","firstSelector"
,"charAt","ALWAYS","PARENS_DIVISION","PARENS","RewriteUrls","getType","payload",
"call","copy","target","constructor","getPrototypeOf","il","arguments","k","j","
jl","__spreadArrays","getOwnPropertyNames","getOwnPropertySymbols","reduce","car
ry","props","includes","newVal","originalObject","includeNonenumerable","propTyp
e","propertyIsEnumerable","defineProperty","enumerable","writable","configurable
","assignProp","nonenumerable","getLocation","inputStream","n","line","column","
copyArray","arr","obj","cloned","prop","defaults","obj1","obj2","newObj","_defau
lts","defaults_1","copyOptions","opts","strictMath","math","Constants.Math","rel
ativeUrls","rewriteUrls","Constants.RewriteUrls","flattenArray","result","length
_1","anonymousFunc","LessError","fileContentMap","currentFilename","message","st
ack","input","contents","loc","utils.getLocation","col","callLine","lines","foun
d","func","Function","lineAdjust","callExtract","extract","create","F","stylize"
,"str","errorTxt","substr","Selector","elements","extendList","condition","evald
Condition","getElements","mixinElements_","visitArray","createDerived","newSelec
tor","mediaEmpty","els","parseNode","err","imports","createEmptySelectors","el",
"sels","olen","len","mixinElements","shift","isJustParentSelector","extend","get
IsOutput","Value","Keyword","True","False","Anonymous","mapLines","rulesetLike",
"allowRoot","isRulesetLike","Boolean","MATH","Declaration","name","important","m
erge","inline","variable","lastRule","prevMath","evaldValue","mathBypass","evalN
ame","importantScope","importantResult","pop","makeImportant","ctx","lineSeparat
or","dumpLineNumbers","debugInfo","asComment","asMediaQuery","lineNumber","fileN
ame","filenameWithProtocol","test","Comment","isLineComment","getDebugInfo","isS
ilent","isCompressed","contexts","copyFromOriginal","original","destination","pr
opertiesToCopy","parseCopyProperties","Parse","paths","evalCopyProperties","isPa
thRelative","path","isPathLocalRelative","Eval","frames","enterCalc","calcStack"
,"inCalc","exitCalc","inParenthesis","parensStack","outOfParenthesis","mathOn","
isMathOn","pathRequiresRewrite","rewritePath","rootpath","newPath","normalizePat
h","segment","segments","reverse","makeRegistry","base","_data","addMultiple","k
eys","_this","get","getLocalFunctions","inherit","defaultFunc","value_","error_"
,"reset","Ruleset","selectors","rules","strictImports","_lookups","_variables","
_properties","isRuleset","selCnt","selector","hasVariable","hasOnePassingSelecto
r","toParseSelectors","utils.flattenArray","rule","subRule","utils.copyArray","r
uleset","originalRuleset","root","firstRoot","allowImports","functionRegistry","
globalFunctionRegistry","ctxFrames","unshift","ctxSelectors","evalImports","rsRu
les","evalFirst","mediaBlockCount","mediaBlocks","filter","apply","resetCache","
bubbleSelectors","importRules","matchArgs","matchCondition","lastSelector","_rul
esets","variables","hash","vars","name_1","properties","name_2","decl","parseVal
ue","property","lastDeclaration","toParse","transformDeclaration","nodes_1","rul
esets","filtRules","prependRule","find","foundMixins","ruleNodes","tabLevel","se
p","tabRuleStr","tabSetStr","charsetNodeIndex","importNodeIndex","isCharset","pa
thCnt","pathSubCnt","currentLastRule","isVisible","joinSelectors","joinSelector"
,"createParenthesis","elementsToPak","originalElement","replacementParen","insid
eParent","createSelector","containedElement","element","addReplacementIntoPath",
"beginningPath","addPath","replacedElement","originalSelector","newSelectorPath"
,"newJoinedSelector","parentEl","restOfPath","addAllReplacementsIntoPath","addPa
ths","mergeElementsOnToSelectors","sel","deriveSelector","deriveFrom","newPaths"
,"replaceParentSelector","inSelector","currentElements","newSelectors","selector
sMultiplied","maybeSelector","hadParentSelector","nestedSelector","replaced","ne
stedPaths","replacedNewSelectors","concatenated","AtRule","isRooted","outputRule
set","mediaPathBackup","mediaBlocksBackup","mediaPath","ruleCnt","DetachedRulese
t","callEval","Unit","numerator","denominator","backupUnit","sort","strictUnits"
,"returnStr","is","unitString","toUpperCase","isLength","RegExp","isSingular","c
allback","usedUnits","group","mapUnit","groupName","atomicUnit","cancel","counte
r","count","Dimension","unit","parseFloat","isNaN","toColor","strValue","String"
,"convertTo","unify","numericCompare","conversions","targetUnit","applyUnit","de
rivedConversions","Operation","operands","isSpaced","Expression","noSpacing","re
turnValue","parens","doubleParen","parensInOp","throwAwayComments","functionCall
er","evalArgs","commentFilter","item","subNodes","to","from","pack","ar","Call",
"calc","currentMathContext","funcCaller","FunctionCaller","isValid","columnNumbe
r","Variable","evaluating","frame","fun","Property","mergeRules","less","visitor
s","ToCSSVisitor","_mergeRules","vArr","Attribute","Quoted","content","escaped",
"quote","variableRegex","propRegex","containsVariables","that","iterativeReplace
","regexp","replacementFnc","evaluatedValue","URL","val","isEvald","urlArgs","Me
dia","features","evalTop","evalNested","multiMedia","permute","fragment","rest",
"Import","css","pathValue","getPath","isPlugin","reference","isVariableImport","
evalForImport","evalPath","doEval","blocksVisibility","addVisibilityBlock","regi
stry","skip","importedFilename","newImport","JsEvalNode","evaluateJavaScript","e
xpression","evalContext","javascriptEnabled","jsify","toJS","JavaScript","string
","Assignment","Condition","negate","lvalue","rvalue","UnicodeDescriptor","Negat
ive","Extend","option","object_id","next_id","parent_ids","allowBefore","allowAf
ter","findSelfSelectors","selectorElements","selfElements","selfSelectors","Vari
ableCall","detachedRuleset","NamespaceValue","ruleCall","lookups","substring","D
efinition","params","variadic","arity","optionalParameters","required","p","eval
Params","mixinEnv","evaldArguments","varargs","arg","isNamedFound","argIndex","a
rgsLength","evalCall","_arguments","mixinFrames","allArgsCnt","requiredArgsCnt",
"MixinCall","mixins","mixin","mixinPath","argValue","f","isRecursive","isOneFoun
d","candidate","defaultResult","noArgumentsFilter","candidates","conditionResult
","calcDefGroup","namespace","expand","MixinDefinition","format","newRules","_se
tVisibilityToReplacement","replacement","AbstractFileManager","lastIndexOf","ext
","tryAppendExtension","basePath","laterPath","url","baseUrl","urlDirectories","
baseUrlDirectories","urlParts","extractUrlParts","baseUrlParts","diff","hostPart
","directories","urlPartsRegex","returner","rawDirectories","rawPath","fileUrl",
"require","AbstractPluginLoader","pluginOptions","pluginObj","localModule","shor
tname","FileManager","trySetOptions","use","exports","loader","tree","validatePl
ugin","minVersion","compareVersion","addPlugin","plugin","setOptions","version",
"versionToString","aVersion","bVersion","versionString","plugins","printUsage","
_visitArgs","visitDeeper","_hasIndexed","_noop","implementation","_implementatio
n","_visitInCache","_visitOutCache","indexNodeTypes","ticker","child","typeIndex
","Visitor","nodeTypeIndex","fnName","impl","funcOut","visitArgs","newNode","isR
eplacing","cnt","nonReplacing","out","evald","flatten","nestedCnt","nestedItem",
"onSequencerEmpty","variableImports","_onSequencerEmpty","_currentDepth","Import
Sequencer","importSequencer","importItem","isReady","tryRun","variableImport","I
mportVisitor","importer","finish","_visitor","_importer","_finish","importCount"
,"onceFileDetectionMap","recursionDetector","_sequencer","run","isFinished","vis
itImport","importNode","inlineCSS","importParent","addVariableImport","processIm
portNode","evaldImportNode","multiple","importMultiple","tryAppendLessExtension"
,"onImported","sequencedOnImported","addImport","importedAtRoot","fullPath","imp
ortVisitor","isOptional","optional","duplicateImport","oldContext","visitDeclara
tion","declNode","visitDeclarationOut","visitAtRule","atRuleNode","visitAtRuleOu
t","visitMixinDefinition","mixinDefinitionNode","visitMixinDefinitionOut","visit
Ruleset","rulesetNode","visitRulesetOut","visitMedia","mediaNode","visitMediaOut
","visible","SetTreeVisibilityVisitor","ensureVisibility","ensureInvisibility","
allExtendsStack","ExtendFinderVisitor","allExtends","allSelectorsExtendList","ex
tendOnEveryPath","selectorPath","selExtendList","allSelectorsExtend","foundExten
ds","firstExtendOnThisSelectorPath","ProcessExtendsVisitor","extendFinder","exte
ndIndices","doExtendChaining","newRoot","checkExtendsForNonMatched","indices","h
asFoundMatches","extendsList","extendsListTarget","iterationCount","extendIndex"
,"targetExtendIndex","matches","targetExtend","newExtend","extendsToAdd","extend
Visitor","findMatch","selfSelector","extendSelector","extendChainCount","selecto
rOne","selectorTwo","ruleNode","selectorNode","pathIndex","selectorsToAdd","exte
ndedSelectors","haystackSelectorPath","haystackSelectorIndex","hackstackSelector
","hackstackElementIndex","haystackElement","targetCombinator","potentialMatch",
"needleElements","potentialMatches","matched","initialCombinator","isElementValu
esEqual","finished","endPathIndex","endPathElementIndex","elementValue1","elemen
tValue2","replacementSelector","matchIndex","firstElement","newElements","curren
tSelectorPathIndex","currentSelectorPathElementIndex","currentValue","derived","
newAllExtends","lastIndex","JoinSelectorVisitor","_context","CSSVisitorUtils","b
odyRules","owner","thing","originalRules","containsSilentNonBlockedChild","compi
ledRulesBody","keepOnlyVisibleChilds","removeVisibilityBlock","hasVisibleSelecto
r","utils","mixinNode","visitExtend","extendNode","visitComment","commentNode","
resolveVisibility","visitAtRuleWithBody","visitAtRuleWithoutBody","visitAnonymou
s","anonymousNode","nodeRules","hasFakeRuleset","getBodyRules","charset","commen
t","checkValidNodes","isRoot","_compileRulesetPaths","nodeRuleCnt","_removeDupli
cateRules","isVisibleRuleset","ruleList","ruleCache","ruleCSS","groups","groupsA
rr","result_1","space_1","comma_1","MarkVisibleSelectorsVisitor","ExtendVisitor"
,"furthest","furthestPossibleErrorMessage","chunks","current","currentPos","save
Stack","parserInput","skipWhitespace","nextChar","oldi","oldj","curr","endIndex"
,"mem","inp","charCodeAt","autoCommentAbsorb","nextNewLine","text","commentStore
","nextStarSlash","save","restore","possibleErrorMessage","state","forget","isWh
itespace","offset","pos","code","$re","tok","exec","$char","$str","tokLength","$
quoted","startChar","currentPosition","$parseUntil","testChar","returnVal","inCo
mment","blockDepth","blockStack","parseGroups","startPos","lastPos","loop","char
","expected","peek","peekChar","currentChar","prevChar","getInput","peekNotNumer
ic","start","chunkInput","failFunction","fail","lastOpening","lastOpeningParen",
"lastMultiComment","lastMultiCommentEndBrace","chunkerCurrentIndex","currentChun
kStartIndex","cc","cc2","level","parenLevel","emitFrom","emitChunk","force","fro
mCharCode","chunker","end","furthestReachedEnd","furthestChar","Parser","parsers
","getParserInput","expect","expectChar","parseList","currentIndex","returnNodes
","parser","additionalData","globalVars","modifyVars","ignored","preText","seria
lizeVars","preProcessors","getPreProcessors","process","banner","contentsIgnored
Chars","primary","endInfo","processImports","extendRule","definition","declarati
on","variableCall","entities","atrule","foundSemiColon","mixinLookup","quoted","
forceEscaped","isEscaped","customFuncCall","stop","ieAlpha","boolean","if","prev
Args","isSemiColonSeparated","argsComma","argsSemiColon","assignment","literal",
"dimension","unicodeDescriptor","entity","ch","variableCurly","curly","propertyC
urly","colorKeyword","ud","javascript","js","escape","parsedName","inValue","rul
eLookups","isRule","getLookup","hasParens","elem","elemIndex","re","isCall","exp
ressionContainsNamed","nameLoop","expressions","hasSep","cond","argInfo","condit
ions","block","lookupValue","attribute","slashedCombinator","isLess","when","blo
ckRuleset","hasDR","ruleProperty","permissiveValue","anonymousValue","untilToken
s","done","testCurrentChar","import","dir","importOptions","mediaFeatures","o","
optionName","importOption","mediaFeature","pluginArgs","nonVendorSpecificName","
hasIdentifier","hasExpression","hasUnknown","hasBlock","sub","addition","multipl
ication","operation","operand","needsParens","logical","next","conditionAnd","ne
gatedCondition","parenthesisCondition","atomicCondition","body","me","tryConditi
onFollowedByParenthesis","delim","simpleProperty","If","trueValue","falseValue",
"isdefined","colorFunctions","hsla","origColor","hsl","number","rgba","size","m1
_1","m2_1","hue","hsv","hsva","vs","floor","perm","saturation","lightness","hsvh
ue","hsvsaturation","hsvvalue","luminance","saturate","amount","method","desatur
ate","lighten","darken","fadein","fadeout","fade","spin","mix","color1","color2"
,"weight","w","w1","w2","greyscale","contrast","dark","light","threshold","t","a
rgb","tint","shade","colorBlend","mode","cb","cs","cr","ab","as","colorBlendMode
Functions","multiply","screen","overlay","softlight","sqrt","hardlight","differe
nce","abs","exclusion","average","negation","getItemsFromNode","_SELF","~","_i",
"expr","values","range","step","stepValue","list","each","rs","iterator","tryEva
l","Quote","valueName","keyName","indexName","MathHelper","fn","mathFunctions","
ceil","sin","cos","atan","asin","acos","mathHelper","fraction","num","minMax","i
sMin","currentUnified","referenceUnified","unitStatic","unitClone","order","conv
ert","pi","mod","y","percentage","evaluated","encodeURI","pattern","flags","%","
token","encodeURIComponent","isa","Type","isunit","isruleset","iscolor","isnumbe
r","isstring","iskeyword","isurl","ispixel","ispercentage","isem","get-unit","co
lorBlending","fallback","functionThis","data-uri","mimetypeNode","filePathNode",
"mimetype","filePath","entryPath","fragmentStart","utils.clone","rawBuffer","get
FileManager","useBase64","mimeLookup","charsetLookup","fileSync","loadFileSync",
"buf","encodeBase64","uri","dataUri","svg-gradient","direction","stops","gradien
tDirectionSvg","position","positionValue","gradientType","rectangleDimension","r
enderEnv","directionValue","throwArgumentDescriptor","types","evaldRoot","evalEn
v","visitorIterator","preEvalVisitors","first","isPreEvalVisitor","isPreVisitor"
,"pm","postProcessors","installedPlugins","pluginCache","Loader","PluginLoader",
"PluginManager","install","preProcessor","priority","indexToInsertAt","postProce
ssor","manager","PluginManagerFactory","newFactory","major","minor","patch","pre
","build","sourceMapOutput","sourceMapBuilder","parseTree","importManager","Sour
ceMapBuilder","ParseTree","transformTree","toCSSOptions","sourceMap","getPostPro
cessors","file","getExternalSourceMap","files","rootFilename","SourceMapOutput",
"contentsIgnoredCharsMap","contentsMap","sourceMapFilename","sourceMapURL","outp
utFilename","sourceMapOutputFilename","sourceMapBasepath","sourceMapRootpath","o
utputSourceFiles","sourceMapGenerator","sourceMapFileInline","disableSourcemapAn
notation","sourceMapInputFilename","normalizeFilename","removeBasepath","getCSSA
ppendage","_css","_rootNode","_contentsMap","_contentsIgnoredCharsMap","_sourceM
apFilename","_outputFilename","_sourceMapBasepath","_sourceMapRootpath","_output
SourceFiles","_sourceMapGeneratorConstructor","getSourceMapGenerator","_lineNumb
er","_column","sourceLines","columns","sourceColumns","inputSource","_sourceMapG
enerator","addMapping","generated","source","sourceRoot","setSourceContent","sou
rceMapContent","stringify","toJSON","rootFileInfo","mime","queue","ImportManager
","pluginLoader","fileParsedFunc","importedEqualsRoot","newFileInfo","loadedFile
","promise","loadFileCallback","resolvedFilename","pathDiff","isPathAbsolute","a
lwaysMakePathsAbsolute","newEnv","evalPlugin","syncImport","loadPluginSync","loa
dPlugin","loadFile","then","render","utils.copyOptions","self_1","Promise","reso
lve","reject","Render","context_1","pluginManager_1","reUsePluginManager","impor
ts_1","evalResult","fileContent","parseVersion","initial","data","ctor","api","f
ileCache","doXHR","errback","xhr","XMLHttpRequest","async","isFileProtocol","fil
eAsync","handleResponse","status","responseText","getResponseHeader","overrideMi
meType","open","setRequestHeader","send","onreadystatechange","readyState","supp
orts","clearFileCache","location","useFileCache","lessText","webInfo","lastModif
ied","Date","log","fulfill","catch","rootHref","errorReporting","errors","errorl
ine","classname","logLevel","errorConsole","timer","filenameNoPath","className",
"innerHTML","browser","style","env","setInterval","replaceChild","clearInterval"
,"errorHTML","remove","removeErrorHTML","depends","lint","insecure","protocol","
poll","hostname","port","onReady","addDefaultOptions","LESS_PLUGINS","lessRoot",
"FM","addFileManager","loggers","console","LogListener","ErrorReporting","cache"
,"localStorage","setCSS","setItem","getCSS","getItem","timestamp","valueOf","Cac
he","imageSize","imageFunctions","image-size","image-width","image-height","Imag
eSize","typePattern","thisArg","curryArgs","loadStyles","instanceOptions","loadS
tyleSheet","reload","remaining","local","loadInitialFileCallback","loadStyleShee
ts","sheets","watch","watchMode","watchTimer","unwatch","registerStylesheetsImme
diately","links","rel","registerStylesheets","record","refresh","startTime","end
Time","totalMilliseconds","remainingSheets","refreshStyles","resolveOrReject","p
ageLoadFinished"],"mappings":"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
AAW,SAAU1P,GACzC,QAAKpO,KAAK6d,YAGC,MAAPzP,GAAcpO,KAAKqW,OAASC,EAAetD,QAAYhT,KAA
K2d,aAAgB3d,KAAK2d,YAAY7e,YAG7FkB,KAAKqW,KAAOC,EAAerD,kBACpBjT,KAAK2d,aAAe3d,KAA
K2d,YAAY7e,UAKpD0d,EAASY,KAAKvN,UAAUkO,oBAAsB,SAAUb,GAGpD,OAFmBld,KAAKwW,cAAgBC,
EAA8B0G,EAAsBF,GAE1EC,IAGtBV,EAASY,KAAKvN,UAAUmO,YAAc,SAAUd,EAAMe,GAClD,IAAIC,EA
aJ,OAXAD,EAAWA,GAAY,GACvBC,EAAUle,KAAKme,cAAcF,EAAWf,GAIpCC,EAAoBD,IACpBD,EAAegB
,KACkB,IAAjCd,EAAoBe,KACpBA,EAAU,KAAKA,GAGZA,GAGX1B,EAASY,KAAKvN,UAAUsO,cAAgB,SA
AUjB,GAC9C,IACIkB,EADEC,EAAWnB,EAAK7N,MAAM,KAAKiP,UAIjC,IADApB,EAAO,GACoB,IAApBm
B,EAASvf,QAEZ,OADAsf,EAAUC,EAAS9C,OAEf,IAAK,IACD,MACJ,IAAK,KACoB,IAAhB2B,EAAKpe,
QAA4C,OAA1Boe,EAAKA,EAAKpe,OAAS,GAC3Coe,EAAK1c,KAAM4d,GAEXlB,EAAK3B,MAET,MACJ,QA
CI2B,EAAK1c,KAAK4d,GAKtB,OAAOlB,EAAKnP,KAAK,YCxJrB,SAASwQ,EAAcC,GACnB,MAAO,CACHC
,MAAO,GACP9Q,IAAK,SAASgN,EAAMhD,GAGhBgD,EAAOA,EAAKjJ,cAER1R,KAAKye,MAAMhhB,eAAek
d,GAG9B3a,KAAKye,MAAM9D,GAAQhD,GAEvB+G,YAAa,SAASzd,GAAT,WACT2L,OAAO+R,KAAK1d,GAA
WoM,SACnB,SAAAsN,GACIiE,EAAKjR,IAAIgN,EAAM1Z,EAAU0Z,QAGrCkE,IAAK,SAASlE,GACV,OAA
O3a,KAAKye,MAAM9D,IAAW6D,GAAQA,EAAKK,IAAKlE,IAEnDmE,kBAAmB,WACf,OAAO9e,KAAKye,OA
EhBM,QAAS,WACL,OAAOR,EAAcve,OAEzBgY,OAAQ,SAASwG,GACb,OAAOD,EAAaC,KAKjBD,CAAc,MCh
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
X,cAAKrE,GACD,IAA4EY,EAAxEC,EAAIrO,KAAK+oB,SAAS,GAAGlX,KAAKrE,GAAUc,EAAItO,KAAK+
oB,SAAS,GAAGlX,KAAKrE,GAElE,GAAIA,EAAQsQ,SAAS9d,KAAKoO,IAAK,CAQ3B,GAPAA,EAAiB,OA
AZpO,KAAKoO,GAAc,IAAMpO,KAAKoO,GAC/BC,aAAa2Z,IAAa1Z,aAAaM,IACvCP,EAAIA,EAAE+Z,WA
EN9Z,aAAa0Z,IAAa3Z,aAAaO,IACvCN,EAAIA,EAAE8Z,YAEL/Z,EAAE2C,UAAY1C,EAAE0C,QAAS,CA
C1B,IACK3C,aAAaya,IAAaxa,aAAawa,KAC5B,MAATza,EAAED,IAAcZ,EAAQ6I,OAASoE,GAAKxH,gB
AEzC,OAAO,IAAI6V,GAAU9oB,KAAKoO,GAAI,CAACC,EAAGC,GAAItO,KAAKgpB,UAE/C,KAAM,CAAEp
oB,KAAM,YACVqW,QAAS,gCAGjB,OAAO5I,EAAE2C,QAAQxD,EAASY,EAAIE,GAE9B,OAAO,IAAIwa,GA
AU9oB,KAAKoO,GAAI,CAACC,EAAGC,GAAItO,KAAKgpB,WAInDtb,gBAAOF,EAASQ,GACZhO,KAAK+oB
,SAAS,GAAGrb,OAAOF,EAASQ,GAC7BhO,KAAKgpB,UACLhb,EAAOL,IAAI,KAEfK,EAAOL,IAAI3N,KA
AKoO,IACZpO,KAAKgpB,UACLhb,EAAOL,IAAI,KAEf3N,KAAK+oB,SAAS,GAAGrb,OAAOF,EAASQ,MCl
DzC,IAAMib,GAAa,SAAShb,EAAOib,GAG/B,GAFAlpB,KAAKiO,MAAQA,EACbjO,KAAKkpB,UAAYA,GA
CZjb,EACD,MAAM,IAAIvO,MAAM,2CAIxBupB,GAAWpZ,UAAYjD,OAAOkD,OAAO,IAAIjD,EAAQ,CAC7C
jM,KAAM,aAENgS,gBAAO1E,GACHlO,KAAKiO,MAAQC,EAAQ2K,WAAW7Y,KAAKiO,QAGzC4D,cAAKrE,G
ACD,IAAI2b,EACEtL,EAASrQ,EAAQsQ,WACjBJ,EAAgB1d,KAAKopB,OAEvBC,GAAc,EA0BlB,OAzBI3
L,GACAlQ,EAAQkQ,gBAER1d,KAAKiO,MAAMnP,OAAS,EACpBqqB,EAAc,IAAIF,GAAWjpB,KAAKiO,MA
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
EAAQ6P,OAAO,IAAM7P,EAAQ6P,OAAO,GAAGqD,mBACjC1gB,KAAKugB,MAAQvgB,KAAKugB,KAAKtf,W
ACpCusB,EAAS9O,YAAa1e,KAAKugB,KAAKtf,WAG7B,GAGX,GAAIjB,KAAKytB,OACoB,mBAAdztB,KA
AKytB,OACZztB,KAAKytB,KAAOztB,KAAKytB,QAEjBztB,KAAKytB,MACL,MAAO,GAGf,GAAIztB,KA
AK3C,QAAQyd,OAAQ,CACrB,IAAM1D,EAAW,IAAI+C,EAAUna,KAAKugB,KAAM,EACtC,CACIhf,SAAUv
B,KAAK0tB,iBACfT,UAAWjtB,KAAKkd,KAAK3P,WAAavN,KAAKkd,KAAK3P,UAAU0f,YACvD,GAAM,GA
Eb,OAAOjtB,KAAKqsB,SAAW,IAAID,GAAM,CAAChV,GAAWpX,KAAKqsB,SAASpe,OAAS,CAACmJ,GACl
E,GAAIpX,KAAK6sB,IAAK,CACjB,IAAMc,EAAY,IAAIf,GAAO5sB,KAAKotB,SAAS5f,GAAU6e,EAAUr
sB,KAAK3C,QAAS2C,KAAKsN,QAClF,IAAKqgB,EAAUd,KAAO7sB,KAAKF,MACvB,MAAME,KAAKF,MAEf
,OAAO6tB,EACJ,OAAI3tB,KAAKugB,OACZF,EAAU,IAAIjB,EAAQ,KAAMgB,EAAgBpgB,KAAKugB,KAA
KjB,SAC9CyB,YAAYvT,GAEbxN,KAAKqsB,SAAW,IAAID,GAAM/L,EAAQf,MAAOtf,KAAKqsB,SAASpe,
OAASoS,EAAQf,OAExE,MChLnB,IAAMsO,GAAa,aAEnBA,GAAW/d,UAAYjD,OAAOkD,OAAO,IAAIjD,EA
AQ,CAC7CghB,4BAAmBC,EAAYtgB,GAC3B,IAAImJ,EACEgV,EAAO3rB,KACP+tB,EAAc,GAEpB,IAAKv
gB,EAAQwgB,kBACT,KAAM,CAAE/W,QAAS,+DACb1V,SAAUvB,KAAK8M,WAAWvL,SAC1BsM,MAAO7N,KA
AK+M,YAGpB+gB,EAAaA,EAAW3wB,QAAQ,kBAAkB,SAAUS,EAAG+c,GAC3D,OAAOgR,EAAKsC,MAAM,IA
AIzD,GAAS,IAAI7P,EAAQgR,EAAK5e,WAAY4e,EAAK7e,YAAY+E,KAAKrE,OAGtF,IACIsgB,EAAa,IA
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
gB,KAAKwN,QAAQ6P,SACvEmb,EAAehrB,EAAQ6P,OAAO,GAEpCrd,KAAK+3B,cACDO,EAAWpL,mBACXl
tB,KAAKk4B,WAAWO,kBAAkBz4B,KAAK04B,kBAAkBr3B,KAAKrB,KAAMs4B,EAAY9qB,EAASgrB,IAEz
Fx4B,KAAK04B,kBAAkBJ,EAAY9qB,EAASgrB,GAGpDnC,EAAUhB,aAAc,GAE5BqD,kBAAmB,SAASJ,EA
AY9qB,EAASgrB,GAC7C,IAAIG,EACEJ,EAAYD,EAAWj7B,QAAQyd,OAErC,IACI6d,EAAkBL,EAAWnL,
cAAc3f,GAC7C,MAAO/N,GACAA,EAAE8B,WAAY9B,EAAEoO,MAAQyqB,EAAWvrB,WAAYtN,EAAE8B,SAA
W+2B,EAAWxrB,WAAWvL,UAEvF+2B,EAAWzL,KAAM,EAEjByL,EAAWx4B,MAAQL,EAGvB,IAAIk5B,GAA
qBA,EAAgB9L,MAAO0L,EAqB5Cv4B,KAAK+3B,cACD/3B,KAAKo4B,YACLp4B,KAAKk4B,WAAWX,aAvBo
C,CAEpDoB,EAAgBt7B,QAAQu7B,WACxBprB,EAAQqrB,gBAAiB,GAM7B,IAFA,IAAMC,OAAiDtsB,IAA
xBmsB,EAAgB9L,IAEtCnsB,EAAI,EAAGA,EAAI83B,EAAalZ,MAAMxgB,OAAQ4B,IAC3C,GAAI83B,EA
AalZ,MAAM5e,KAAO43B,EAAY,CACtCE,EAAalZ,MAAM5e,GAAKi4B,EACxB,MAIR,IAAMI,EAAa/4B,K
AAK+4B,WAAW13B,KAAKrB,KAAM24B,EAAiBnrB,GAAUwrB,EAAsBh5B,KAAKk4B,WAAWe,UAAUF,GAEz
H/4B,KAAK63B,UAAUr3B,KAAKm4B,EAAgB5L,UAAW+L,EAAwBH,EAAgB7rB,WACnF6rB,EAAgBt7B,QA
AS27B,KAQrCD,WAAY,SAAUT,EAAY9qB,EAAS/N,EAAG8gB,EAAM2Y,EAAgBC,GAC5D15B,IACKA,EAAE
8B,WACH9B,EAAEoO,MAAQyqB,EAAWvrB,WAAYtN,EAAE8B,SAAW+2B,EAAWxrB,WAAWvL,UAExEvB,KA
AKF,MAAQL,GAGjB,IAAM25B,EAAgBp5B,KAClBu4B,EAAYD,EAAWj7B,QAAQyd,OAC/BkS,EAAWsL,EA
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
HujB,EAAYJ,EAAGnjB,OAAO,IAAMmjB,EAAGnjB,OAAO,GAAGnV,KACzC24B,EAAUL,EAAGnjB,OAAO,
IAAMmjB,EAAGnjB,OAAO,GAAGnV,KACvC44B,EAAYN,EAAGnjB,OAAO,IAAMmjB,EAAGnjB,OAAO,GAA
GnV,KACzCs4B,EAAKA,EAAG3zB,OAER2zB,EAAKA,EAAG5yB,QAGZ,IAAK,IAAI3f,EAAI,EAAGA,EAA
IwyC,EAASp0C,OAAQ4B,IAAK,CACtC,IAAI+Q,SACAxD,SACE0b,EAAOupB,EAASxyC,GAClBipB,aAA
gBjP,GAChBjJ,EAA2B,iBAAdkY,EAAKhP,KAAoBgP,EAAKhP,KAAOgP,EAAKhP,KAAK,GAAG1M,MAC/D
A,EAAQ0b,EAAK1b,QAEbwD,EAAM,IAAIuW,GAAUtnB,EAAI,GACxBuN,EAAQ0b,GAGRA,aAAgBxN,IAI
pBgW,EAAW8gB,EAAG3zB,MAAM3N,MAAM,GACtB0hC,GACAlhB,EAAS3xB,KAAK,IAAIka,EAAY24B,EA
C1BplC,GACA,GAAO,EAAOjO,KAAK6N,MAAO7N,KAAKwS,kBAEnC+gC,GACAphB,EAAS3xB,KAAK,IAAI
ka,EAAY64B,EAC1B,IAAIvrB,GAAUtnB,EAAI,IAClB,GAAO,EAAOV,KAAK6N,MAAO7N,KAAKwS,kBAE
nC8gC,GACAnhB,EAAS3xB,KAAK,IAAIka,EAAY44B,EAC1B7hC,GACA,GAAO,EAAOzR,KAAK6N,MAAO7
N,KAAKwS,kBAGvC8M,EAAM9e,KAAK,IAAI4e,EAAQ,CAAE,MAAc,CAAE,IAAI/M,EAAQ,GAAI,QACrD8
f,EACA8gB,EAAG1zB,cACH0zB,EAAGxgC,oBAIX,OAAO,IAAI2M,EAAQ,CAAE,MAAc,CAAE,IAAI/M,E
AAQ,GAAI,QACjDiN,EACA2zB,EAAG1zB,cACH0zB,EAAGxgC,kBACLZ,KAAK7R,KAAKwN,WCzJdgmC,G
AAa,SAACC,EAAIxrB,EAAM7S,GAC1B,KAAMA,aAAa4S,IACf,KAAM,CAAEpnB,KAAM,WAAYqW,QAAS,6
BAOvC,OALY,MAARgR,EACAA,EAAO7S,EAAE6S,KAET7S,EAAIA,EAAEoT,QAEH,IAAIR,GAAUyrB,EAA
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
pjD,EAAQojD,YAAa,EAGzCpjD,EAAQkmD,KAAOlmD,EAAQkmD,OAASlmD,EAAQmjD,eAAiB,IAAO,MAE
hEnjD,EAAQulD,IAAMvlD,EAAQulD,MAAoC,aAA5BjjD,EAAO2hD,SAASkC,UACd,WAA5B7jD,EAAO2h
D,SAASkC,UACY,aAA5B7jD,EAAO2hD,SAASkC,UACf7jD,EAAO2hD,SAASmC,MACb9jD,EAAO2hD,SAA
SmC,KAAK3kD,OAAS,GAClCzB,EAAQmjD,eAAmC,cACzC,cAEN,IAAM7kC,EAAkB,6CAA6C+nB,KAAK/j
C,EAAO2hD,SAASx/B,MACtFnG,IACAte,EAAQse,gBAAkBA,EAAgB,SAGjBnP,IAAzBnP,EAAQkkD,eA
CRlkD,EAAQkkD,cAAe,QAGH/0C,IAApBnP,EAAQqmD,UACRrmD,EAAQqmD,SAAU,GAGlBrmD,EAAQkZ,
eACRlZ,EAAQmZ,YAAc,OF1B9BmtC,CAAkBhkD,OAAQtC,IAE1BA,GAAQ63B,QAAU73B,GAAQ63B,SAAW
,GAEjCv1B,OAAOikD,eACPvmD,GAAQ63B,QAAU73B,GAAQ63B,QAAQh0B,OAAOvB,OAAOikD,mBAQhD/
2B,GACA5tB,GACA0jD,GAPE73B,YGdUnrB,EAAQtC,GACpB,IAAMQ,EAAW8B,EAAO9B,SAClBitB,EAA
O+4B,KAEb/4B,EAAKztB,QAAUA,EACf,IAAMoE,EAAcqpB,EAAKrpB,YACnBwyB,EAAc6vB,GAAGzmD,
EAASytB,EAAKnpB,QAC/BG,EAAc,IAAImyB,EACxBxyB,EAAYsiD,eAAejiD,GAC3BgpB,EAAKmJ,YAA
cA,EACnBnJ,EAAKouB,aAAeA,YCxBRpuB,EAAMztB,GAYlBA,EAAQ+kD,cAAuC,IAArB/kD,EAAQ+kD,
SAA2B/kD,EAAQ+kD,SAA4B,gBAAhB/kD,EAAQulD,IAVnE,EAEC,EAUlBvlD,EAAQ2mD,UACT3mD,EAA
Q2mD,QAAU,CAAC,CACf5jD,MAAO,SAASL,GACR1C,EAAQ+kD,UAhBD,GAiBP6B,QAAQrC,IAAI7hD,IA
GpBI,KAAM,SAASJ,GACP1C,EAAQ+kD,UApBF,GAqBN6B,QAAQrC,IAAI7hD,IAGpBG,KAAM,SAASH,GA
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
AAK+H,GAAiBA"} | | {"version":3,"file":"less.min.js","sources":["../src/less-browser/utils.js","../
src/less-browser/browser.js","../src/less/logger.js","../src/less/environment/en
vironment.js","../src/less/data/colors.js","../src/less/data/unit-conversions.js
","../src/less/data/index.js","../src/less/tree/node.js","../src/less/tree/color
.js","../src/less/tree/paren.js","../src/less/tree/combinator.js","../src/less/t
ree/element.js","../src/less/constants.js","../node_modules/is-what/dist/index.e
sm.js","../node_modules/copy-anything/dist/index.esm.js","../src/less/utils.js",
"../src/less/less-error.js","../src/less/tree/selector.js","../src/less/tree/val
ue.js","../src/less/tree/keyword.js","../src/less/tree/anonymous.js","../src/les
s/tree/declaration.js","../src/less/tree/debug-info.js","../src/less/tree/commen
t.js","../src/less/contexts.js","../src/less/functions/function-registry.js","..
/src/less/functions/default.js","../src/less/tree/ruleset.js","../src/less/tree/
atrule.js","../src/less/tree/detached-ruleset.js","../src/less/tree/unit.js","..
/src/less/tree/dimension.js","../src/less/tree/operation.js","../src/less/tree/e
xpression.js","../src/less/functions/function-caller.js","../node_modules/tslib/
tslib.es6.js","../src/less/tree/call.js","../src/less/tree/variable.js","../src/
less/tree/property.js","../src/less/tree/attribute.js","../src/less/tree/quoted.
js","../src/less/tree/url.js","../src/less/tree/media.js","../src/less/tree/impo
rt.js","../src/less/tree/js-eval-node.js","../src/less/tree/javascript.js","../s
rc/less/tree/assignment.js","../src/less/tree/condition.js","../src/less/tree/un
icode-descriptor.js","../src/less/tree/negative.js","../src/less/tree/extend.js"
,"../src/less/tree/variable-call.js","../src/less/tree/namespace-value.js","../s
rc/less/tree/mixin-definition.js","../src/less/tree/mixin-call.js","../src/less/
tree/index.js","../src/less/environment/abstract-file-manager.js","../src/less/e
nvironment/abstract-plugin-loader.js","../src/less/visitors/visitor.js","../src/
less/visitors/import-sequencer.js","../src/less/visitors/import-visitor.js","../
src/less/visitors/set-tree-visibility-visitor.js","../src/less/visitors/extend-v
isitor.js","../src/less/visitors/join-selector-visitor.js","../src/less/visitors
/to-css-visitor.js","../src/less/visitors/index.js","../src/less/parser/parser-i
nput.js","../src/less/parser/chunker.js","../src/less/parser/parser.js","../src/
less/functions/boolean.js","../src/less/functions/color.js","../src/less/functio
ns/color-blending.js","../src/less/functions/list.js","../src/less/functions/mat
h-helper.js","../src/less/functions/math.js","../src/less/functions/number.js","
../src/less/functions/string.js","../src/less/functions/types.js","../src/less/f
unctions/index.js","../src/less/functions/data-uri.js","../src/less/functions/sv
g.js","../src/less/transform-tree.js","../src/less/plugin-manager.js","../node_m
odules/parse-node-version/index.js","../src/less-browser/file-manager.js","../sr
c/less/index.js","../src/less/parse-tree.js","../src/less/source-map-builder.js"
,"../src/less/source-map-output.js","../src/less/import-manager.js","../src/less
/render.js","../src/less/parse.js","../src/less-browser/plugin-loader.js","../sr
c/less-browser/error-reporting.js","../src/less-browser/bootstrap.js","../src/le
ss/default-options.js","../src/less-browser/add-default-options.js","../src/less
-browser/index.js","../src/less-browser/log-listener.js","../src/less-browser/ca
che.js","../src/less-browser/image-size.js"],"sourcesContent":["\nexport functio
n extractId(href) {\n return href.replace(/^[a-z-]+:\\/+?[^\\/]+/, '') // Re
move protocol & domain\n .replace(/[\\?\\&]livereload=\\w+/, '') /
/ Remove LiveReload cachebuster\n .replace(/^\\//, '')
// Remove root /\n .replace(/\\.[a-zA-Z]+$/, '') //
Remove simple extension\n .replace(/[^\\.\\w-]+/g, '-') /
/ Replace illegal characters\n .replace(/\\./g, ':');
// Replace dots with colons(for valid id)\n}\n\nexport function addDataAttr(o
ptions, tag) {\n if (!tag) {return;} // in case of tag is null or undefined\n
for (const opt in tag.dataset) {\n if (tag.dataset.hasOwnProperty(opt
)) {\n if (opt === 'env' || opt === 'dumpLineNumbers' || opt === 'roo
tpath' || opt === 'errorReporting') {\n options[opt] = tag.datase
t[opt];\n } else {\n try {\n option
s[opt] = JSON.parse(tag.dataset[opt]);\n }\n catch
(_) {}\n }\n }\n }\n}\n","import * as utils from './utils'
;\n\nexport default {\n createCSS: function (document, styles, sheet) {\n
// Strip the query-string\n const href = sheet.href || '';\n\n
// If there is no title set, use the filename, minus the extension\n con
st id = `less:${sheet.title || utils.extractId(href)}`;\n\n // If this ha
s already been inserted into the DOM, we may need to replace it\n const o
ldStyleNode = document.getElementById(id);\n let keepOldStyleNode = false
;\n\n // Create a new stylesheet node for insertion or (if necessary) rep
lacement\n const styleNode = document.createElement('style');\n st
yleNode.setAttribute('type', 'text/css');\n if (sheet.media) {\n
styleNode.setAttribute('media', sheet.media);\n }\n styleNode.i
d = id;\n\n if (!styleNode.styleSheet) {\n styleNode.appendChi
ld(document.createTextNode(styles));\n\n // If new contents match con
tents of oldStyleNode, don't replace oldStyleNode\n keepOldStyleNode
= (oldStyleNode !== null && oldStyleNode.childNodes.length > 0 && styleNode.chil
dNodes.length > 0 &&\n oldStyleNode.firstChild.nodeValue === styl
eNode.firstChild.nodeValue);\n }\n\n const head = document.getElem
entsByTagName('head')[0];\n\n // If there is no oldStyleNode, just append
; otherwise, only append if we need\n // to replace oldStyleNode with an
updated stylesheet\n if (oldStyleNode === null || keepOldStyleNode === fa
lse) {\n const nextEl = sheet && sheet.nextSibling || null;\n
if (nextEl) {\n nextEl.parentNode.insertBefore(styleNode, nex
tEl);\n } else {\n head.appendChild(styleNode);\n
}\n }\n if (oldStyleNode && keepOldStyleNode === false) {\n
oldStyleNode.parentNode.removeChild(oldStyleNode);\n }\n\n
// For IE.\n // This needs to happen *after* the style element is ad
ded to the DOM, otherwise IE 7 and 8 may crash.\n // See http://social.ms
dn.microsoft.com/Forums/en-US/7e081b65-878a-4c22-8e68-c10d39c2ed32/internet-expl
orer-crashes-appending-style-element-to-head\n if (styleNode.styleSheet)
{\n try {\n styleNode.styleSheet.cssText = styles;\n
} catch (e) {\n throw new Error('Couldn\\'t reassign st
yleSheet.cssText.');\n }\n }\n },\n currentScript: funct
ion(window) {\n const document = window.document;\n return documen
t.currentScript || (() => {\n const scripts = document.getElementsByT
agName('script');\n return scripts[scripts.length - 1];\n })()
;\n }\n};\n","export default {\n error: function(msg) {\n this._fir
eEvent('error', msg);\n },\n warn: function(msg) {\n this._fireEven
t('warn', msg);\n },\n info: function(msg) {\n this._fireEvent('inf
o', msg);\n },\n debug: function(msg) {\n this._fireEvent('debug',
msg);\n },\n addListener: function(listener) {\n this._listeners.pu
sh(listener);\n },\n removeListener: function(listener) {\n for (le
t i = 0; i < this._listeners.length; i++) {\n if (this._listeners[i]
=== listener) {\n this._listeners.splice(i, 1);\n
return;\n }\n }\n },\n _fireEvent: function(type, msg) {
\n for (let i = 0; i < this._listeners.length; i++) {\n const
logFunction = this._listeners[i][type];\n if (logFunction) {\n
logFunction(msg);\n }\n }\n },\n _listeners: []
\n};\n","/**\n * @todo Document why this abstraction exists, and the relationshi
p between\n * environment, file managers, and plugin manager\n */\n\nimpor
t logger from '../logger';\n\nclass Environment {\n constructor(externalEnvir
onment, fileManagers) {\n this.fileManagers = fileManagers || [];\n
externalEnvironment = externalEnvironment || {};\n\n const optionalFunc
tions = ['encodeBase64', 'mimeLookup', 'charsetLookup', 'getSourceMapGenerator']
;\n const requiredFunctions = [];\n const functions = requiredFunc
tions.concat(optionalFunctions);\n\n for (let i = 0; i < functions.length
; i++) {\n const propName = functions[i];\n const environm
entFunc = externalEnvironment[propName];\n if (environmentFunc) {\n
this[propName] = environmentFunc.bind(externalEnvironment);\n
} else if (i < requiredFunctions.length) {\n this.warn(`mi
ssing required function in environment - ${propName}`);\n }\n
}\n }\n\n getFileManager(filename, currentDirectory, options, environment,
isSync) {\n\n if (!filename) {\n logger.warn('getFileManager
called with no filename.. Please report this issue. continuing.');\n }\n
if (currentDirectory == null) {\n logger.warn('getFileManager
called with null directory.. Please report this issue. continuing.');\n }
\n\n let fileManagers = this.fileManagers;\n if (options.pluginMan
ager) {\n fileManagers = [].concat(fileManagers).concat(options.plugi
nManager.getFileManagers());\n }\n for (let i = fileManagers.lengt
h - 1; i >= 0 ; i--) {\n const fileManager = fileManagers[i];\n
if (fileManager[isSync ? 'supportsSync' : 'supports'](filename, currentDir
ectory, options, environment)) {\n return fileManager;\n
}\n }\n return null;\n }\n\n addFileManager(fileManager)
{\n this.fileManagers.push(fileManager);\n }\n\n clearFileManagers(
) {\n this.fileManagers = [];\n }\n}\n\nexport default Environment;\n"
,"export default {\n 'aliceblue':'#f0f8ff',\n 'antiquewhite':'#faebd7',\n
'aqua':'#00ffff',\n 'aquamarine':'#7fffd4',\n 'azure':'#f0ffff',\n '
beige':'#f5f5dc',\n 'bisque':'#ffe4c4',\n 'black':'#000000',\n 'blanche
dalmond':'#ffebcd',\n 'blue':'#0000ff',\n 'blueviolet':'#8a2be2',\n 'br
own':'#a52a2a',\n 'burlywood':'#deb887',\n 'cadetblue':'#5f9ea0',\n 'ch
artreuse':'#7fff00',\n 'chocolate':'#d2691e',\n 'coral':'#ff7f50',\n 'c
ornflowerblue':'#6495ed',\n 'cornsilk':'#fff8dc',\n 'crimson':'#dc143c',\n
'cyan':'#00ffff',\n 'darkblue':'#00008b',\n 'darkcyan':'#008b8b',\n
'darkgoldenrod':'#b8860b',\n 'darkgray':'#a9a9a9',\n 'darkgrey':'#a9a9a9'
,\n 'darkgreen':'#006400',\n 'darkkhaki':'#bdb76b',\n 'darkmagenta':'#8
b008b',\n 'darkolivegreen':'#556b2f',\n 'darkorange':'#ff8c00',\n 'dark
orchid':'#9932cc',\n 'darkred':'#8b0000',\n 'darksalmon':'#e9967a',\n '
darkseagreen':'#8fbc8f',\n 'darkslateblue':'#483d8b',\n 'darkslategray':'#
2f4f4f',\n 'darkslategrey':'#2f4f4f',\n 'darkturquoise':'#00ced1',\n 'd
arkviolet':'#9400d3',\n 'deeppink':'#ff1493',\n 'deepskyblue':'#00bfff',\n
'dimgray':'#696969',\n 'dimgrey':'#696969',\n 'dodgerblue':'#1e90ff',\
n 'firebrick':'#b22222',\n 'floralwhite':'#fffaf0',\n 'forestgreen':'#2
28b22',\n 'fuchsia':'#ff00ff',\n 'gainsboro':'#dcdcdc',\n 'ghostwhite':
'#f8f8ff',\n 'gold':'#ffd700',\n 'goldenrod':'#daa520',\n 'gray':'#8080
80',\n 'grey':'#808080',\n 'green':'#008000',\n 'greenyellow':'#adff2f'
,\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 'lightgrey':'#d3d3d3',\n 'lightgreen':'#90ee90
',\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':'#00ff00',\n 'limegreen':'#32cd32',\n 'linen':'#f
af0e6',\n 'magenta':'#ff00ff',\n 'maroon':'#800000',\n 'mediumaquamarin
e':'#66cdaa',\n 'mediumblue':'#0000cd',\n 'mediumorchid':'#ba55d3',\n '
mediumpurple':'#9370d8',\n 'mediumseagreen':'#3cb371',\n 'mediumslateblue'
:'#7b68ee',\n 'mediumspringgreen':'#00fa9a',\n 'mediumturquoise':'#48d1cc'
,\n 'mediumvioletred':'#c71585',\n 'midnightblue':'#191970',\n 'mintcre
am':'#f5fffa',\n 'mistyrose':'#ffe4e1',\n 'moccasin':'#ffe4b5',\n 'nava
jowhite':'#ffdead',\n 'navy':'#000080',\n 'oldlace':'#fdf5e6',\n 'olive
':'#808000',\n 'olivedrab':'#6b8e23',\n 'orange':'#ffa500',\n 'orangere
d':'#ff4500',\n 'orchid':'#da70d6',\n 'palegoldenrod':'#eee8aa',\n 'pal
egreen':'#98fb98',\n 'paleturquoise':'#afeeee',\n 'palevioletred':'#d87093
',\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':'#ff0000',\n
'rosybrown':'#bc8f8f',\n 'royalblue':'#4169e1',\n 'saddlebrown':'#8b4513
',\n 'salmon':'#fa8072',\n 'sandybrown':'#f4a460',\n 'seagreen':'#2e8b5
7',\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':'#00ff7
f',\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':'#ffffff',\n 'white
smoke':'#f5f5f5',\n 'yellow':'#ffff00',\n 'yellowgreen':'#9acd32'\n};","ex
port default {\n length: {\n 'm': 1,\n 'cm': 0.01,\n 'mm
': 0.001,\n 'in': 0.0254,\n 'px': 0.0254 / 96,\n 'pt': 0.02
54 / 72,\n 'pc': 0.0254 / 72 * 12\n },\n duration: {\n 's':
1,\n 'ms': 0.001\n },\n angle: {\n 'rad': 1 / (2 * Math.PI),
\n 'deg': 1 / 360,\n 'grad': 1 / 400,\n 'turn': 1\n }\n}
;","import colors from './colors';\nimport unitConversions from './unit-conversi
ons';\n\nexport default { colors, unitConversions };\n","/**\n * The reason why
Node is a class and other nodes simply do not extend\n * from Node (since we're
transpiling) is due to this issue:\n * \n * https://github.com/less/less.js/issu
es/3434\n */\nclass Node {\n constructor() {\n this.parent = null;\n
this.visibilityBlocks = undefined;\n this.nodeVisible = undefined;\
n this.rootNode = null;\n this.parsed = null;\n }\n\n get cu
rrentFileInfo() {\n return this.fileInfo();\n }\n\n get index() {\n
return this.getIndex();\n }\n\n setParent(nodes, parent) {\n
function set(node) {\n if (node && node instanceof Node) {\n
node.parent = parent;\n }\n }\n if (Array.isAr
ray(nodes)) {\n nodes.forEach(set);\n }\n else {\n
set(nodes);\n }\n }\n\n getIndex() {\n return this._i
ndex || (this.parent && this.parent.getIndex()) || 0;\n }\n\n fileInfo() {
\n return this._fileInfo || (this.parent && this.parent.fileInfo()) || {}
;\n }\n\n isRulesetLike() { return false; }\n\n toCSS(context) {\n
const strs = [];\n this.genCSS(context, {\n add: function(c
hunk, fileInfo, index) {\n strs.push(chunk);\n },\n
isEmpty: function () {\n return strs.length === 0;\n
}\n });\n return strs.join('');\n }\n\n genCSS(conte
xt, output) {\n output.add(this.value);\n }\n\n accept(visitor) {\n
this.value = visitor.visit(this.value);\n }\n\n eval() { return th
is; }\n\n _operate(context, op, a, b) {\n switch (op) {\n c
ase '+': return a + b;\n case '-': return a - b;\n case '*
': return a * b;\n case '/': return a / b;\n }\n }\n\n f
round(context, value) {\n const precision = context && context.numPrecisi
on;\n // add \"epsilon\" to ensure numbers like 1.000000005 (represented
as 1.000000004999...) are properly rounded:\n return (precision) ? Number
((value + 2e-16).toFixed(precision)) : value;\n }\n\n static compare(a, b)
{\n /* returns:\n -1: a < b\n 0: a = b\n 1: a >
b\n and *any* other value for a != b (e.g. undefined, NaN, -2 etc.) */\n
\n if ((a.compare) &&\n // for \"symmetric results\" force toC
SS-based comparison\n // of Quoted or Anonymous if either value is on
e of those\n !(b.type === 'Quoted' || b.type === 'Anonymous')) {\n
return a.compare(b);\n } else if (b.compare) {\n retu
rn -b.compare(a);\n } else if (a.type !== b.type) {\n return u
ndefined;\n }\n\n a = a.value;\n b = b.value;\n if (
!Array.isArray(a)) {\n return a === b ? 0 : undefined;\n }\n
if (a.length !== b.length) {\n return undefined;\n }\n
for (let i = 0; i < a.length; i++) {\n if (Node.compare(a[i], b
[i]) !== 0) {\n return undefined;\n }\n }\n
return 0;\n }\n\n static numericCompare(a, b) {\n return a <
b ? -1\n : a === b ? 0\n : a > b ? 1 : undefined;\
n }\n\n // Returns true if this node represents root of ast imported by re
ference\n blocksVisibility() {\n if (this.visibilityBlocks == null) {\
n this.visibilityBlocks = 0;\n }\n return this.visibili
tyBlocks !== 0;\n }\n\n addVisibilityBlock() {\n if (this.visibilit
yBlocks == null) {\n this.visibilityBlocks = 0;\n }\n t
his.visibilityBlocks = this.visibilityBlocks + 1;\n }\n\n removeVisibility
Block() {\n if (this.visibilityBlocks == null) {\n this.visibi
lityBlocks = 0;\n }\n this.visibilityBlocks = this.visibilityBlock
s - 1;\n }\n\n // Turns on node visibility - if called node will be shown
in output regardless\n // of whether it comes from import by reference or not
\n ensureVisibility() {\n this.nodeVisible = true;\n }\n\n // Tu
rns off node visibility - if called node will NOT be shown in output regardless\
n // of whether it comes from import by reference or not\n ensureInvisibil
ity() {\n this.nodeVisible = false;\n }\n\n // return values:\n
// false - the node must not be visible\n // true - the node must be visible\
n // undefined or null - the node has the same visibility as its parent\n
isVisible() {\n return this.nodeVisible;\n }\n\n visibilityInfo() {
\n return {\n visibilityBlocks: this.visibilityBlocks,\n
nodeVisible: this.nodeVisible\n };\n }\n\n copyVisibilityInfo
(info) {\n if (!info) {\n return;\n }\n this.vis
ibilityBlocks = info.visibilityBlocks;\n this.nodeVisible = info.nodeVisi
ble;\n }\n}\n\nexport default Node;\n","import Node from './node';\nimport co
lors from '../data/colors';\n\n//\n// RGB Colors - #ff0014, #eee\n//\nconst Colo
r = function(rgb, a, originalForm) {\n const self = this;\n //\n // The
end goal here, is to parse the arguments\n // into an integer triplet, such
as `128, 255, 0`\n //\n // This facilitates operations and conversions.\n
//\n if (Array.isArray(rgb)) {\n this.rgb = rgb;\n } else if (rg
b.length >= 6) {\n this.rgb = [];\n rgb.match(/.{2}/g).map(functio
n (c, i) {\n if (i < 3) {\n self.rgb.push(parseInt(c,
16));\n } else {\n self.alpha = (parseInt(c, 16)) / 25
5;\n }\n });\n } else {\n this.rgb = [];\n rg
b.split('').map(function (c, i) {\n if (i < 3) {\n sel
f.rgb.push(parseInt(c + c, 16));\n } else {\n self.alp
ha = (parseInt(c + c, 16)) / 255;\n }\n });\n }\n this.a
lpha = this.alpha || (typeof a === 'number' ? a : 1);\n if (typeof originalFo
rm !== 'undefined') {\n this.value = originalForm;\n }\n}\n\nColor.pro
totype = Object.assign(new Node(), {\n type: 'Color',\n\n luma() {\n
let r = this.rgb[0] / 255, g = this.rgb[1] / 255, b = this.rgb[2] / 255;\n\n
r = (r <= 0.03928) ? r / 12.92 : Math.pow(((r + 0.055) / 1.055), 2.4);\n
g = (g <= 0.03928) ? g / 12.92 : Math.pow(((g + 0.055) / 1.055), 2.4);\n
b = (b <= 0.03928) ? b / 12.92 : Math.pow(((b + 0.055) / 1.055), 2.4);\n\n
return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n },\n\n genCSS(conte
xt, output) {\n output.add(this.toCSS(context));\n },\n\n toCSS(con
text, doNotCompress) {\n const compress = context && context.compress &&
!doNotCompress;\n let color;\n let alpha;\n let colorFuncti
on;\n let args = [];\n\n // `value` is set if this color was origi
nally\n // converted from a named color string so we need\n // to
respect this and try to output named color too.\n alpha = this.fround(con
text, this.alpha);\n\n if (this.value) {\n if (this.value.inde
xOf('rgb') === 0) {\n if (alpha < 1) {\n color
Function = 'rgba';\n }\n } else if (this.value.indexOf
('hsl') === 0) {\n if (alpha < 1) {\n colorFun
ction = 'hsla';\n } else {\n colorFunction = '
hsl';\n }\n } else {\n return this.valu
e;\n }\n } else {\n if (alpha < 1) {\n
colorFunction = 'rgba';\n }\n }\n\n switch (colorFun
ction) {\n case 'rgba':\n args = this.rgb.map(function
(c) {\n return clamp(Math.round(c), 255);\n }
).concat(clamp(alpha, 1));\n break;\n case 'hsla':\n
args.push(clamp(alpha, 1));\n case 'hsl':\n
color = this.toHSL();\n args = [\n this.fr
ound(context, color.h),\n `${this.fround(context, color.s * 1
00)}%`,\n `${this.fround(context, color.l * 100)}%`\n
].concat(args);\n }\n\n if (colorFunction) {\n
// Values are capped between `0` and `255`, rounded and zero-padded.\n
return `${colorFunction}(${args.join(`,${compress ? '' : ' '}`)})`;\n }
\n\n color = this.toRGB();\n\n if (compress) {\n const
splitcolor = color.split('');\n\n // Convert color to short format\n
if (splitcolor[1] === splitcolor[2] && splitcolor[3] === splitcolor[4
] && splitcolor[5] === splitcolor[6]) {\n color = `#${splitcolor[
1]}${splitcolor[3]}${splitcolor[5]}`;\n }\n }\n\n retur
n color;\n },\n\n //\n // Operations have to be done per-channel, if no
t,\n // channels will spill onto each other. Once we have\n // our result,
in the form of an integer triplet,\n // we create a new Color node to hold t
he result.\n //\n operate(context, op, other) {\n const rgb = new A
rray(3);\n const alpha = this.alpha * (1 - other.alpha) + other.alpha;\n
for (let c = 0; c < 3; c++) {\n rgb[c] = this._operate(context
, op, this.rgb[c], other.rgb[c]);\n }\n return new Color(rgb, alph
a);\n },\n\n toRGB() {\n return toHex(this.rgb);\n },\n\n toH
SL() {\n const r = this.rgb[0] / 255, g = this.rgb[1] / 255, b = this.rgb
[2] / 255, a = this.alpha;\n\n const max = Math.max(r, g, b), min = Math.
min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2
;\n const d = max - min;\n\n if (max === min) {\n h = s
= 0;\n } else {\n s = l > 0.5 ? d / (2 - max - min) : d / (ma
x + min);\n\n switch (max) {\n case r: h = (g - b) / d
+ (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2;
break;\n case b: h = (r - g) / d + 4; break;
\n }\n h /= 6;\n }\n return { h: h * 360, s,
l, a };\n },\n\n // Adapted from http://mjijackson.com/2008/02/rgb-to-hsl
-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n toHSV() {\n
const r = this.rgb[0] / 255, g = this.rgb[1] / 255, b = this.rgb[2] / 25
5, a = this.alpha;\n\n const max = Math.max(r, g, b), min = Math.min(r, g
, b);\n let h;\n let s;\n const v = max;\n\n const d
= max - min;\n if (max === 0) {\n s = 0;\n } else {\n
s = d / max;\n }\n\n if (max === min) {\n h
= 0;\n } else {\n switch (max) {\n case r: h =
(g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d +
2; break;\n case b: h = (r - g) / d + 4; break;\n }\n
h /= 6;\n }\n return { h: h * 360, s, v, a };\n },\
n\n toARGB() {\n return toHex([this.alpha * 255].concat(this.rgb));\n
},\n\n compare(x) {\n return (x.rgb &&\n x.rgb[0] === th
is.rgb[0] &&\n x.rgb[1] === this.rgb[1] &&\n x.rgb[2] ===
this.rgb[2] &&\n x.alpha === this.alpha) ? 0 : undefined;\n }\n})
;\n\nColor.fromKeyword = function(keyword) {\n let c;\n const key = keywor
d.toLowerCase();\n if (colors.hasOwnProperty(key)) {\n c = new Color(c
olors[key].slice(1));\n }\n else if (key === 'transparent') {\n c =
new Color([0, 0, 0], 0);\n }\n\n if (c) {\n c.value = keyword;\n
return c;\n }\n};\n\nfunction clamp(v, max) {\n return Math.min(Math
.max(v, 0), max);\n}\n\nfunction toHex(v) {\n return `#${v.map(function (c) {
\n c = clamp(Math.round(c), 255);\n return (c < 16 ? '0' : '') + c
.toString(16);\n }).join('')}`;\n}\n\nexport default Color;\n","import Node f
rom './node';\n\nconst Paren = function(node) {\n this.value = node;\n};\n\nP
aren.prototype = Object.assign(new Node(), {\n type: 'Paren',\n\n genCSS(c
ontext, output) {\n output.add('(');\n this.value.genCSS(context,
output);\n output.add(')');\n },\n\n eval(context) {\n retur
n new Paren(this.value.eval(context));\n }\n});\n\nexport default Paren;\n","
import Node from './node';\nconst _noSpaceCombinators = {\n '': true,\n '
': true,\n '|': true\n};\n\nconst Combinator = function(value) {\n if (val
ue === ' ') {\n this.value = ' ';\n this.emptyOrWhitespace = true;
\n } else {\n this.value = value ? value.trim() : '';\n this.em
ptyOrWhitespace = this.value === '';\n }\n}\n\nCombinator.prototype = Object.
assign(new Node(), {\n type: 'Combinator',\n\n genCSS(context, output) {\n
const spaceOrEmpty = (context.compress || _noSpaceCombinators[this.value
]) ? '' : ' ';\n output.add(spaceOrEmpty + this.value + spaceOrEmpty);\n
}\n});\n\nexport default Combinator;\n","import Node from './node';\nimport P
aren from './paren';\nimport Combinator from './combinator';\n\nconst Element =
function(combinator, value, isVariable, index, currentFileInfo, visibilityInfo)
{\n this.combinator = combinator instanceof Combinator ?\n combinator
: new Combinator(combinator);\n\n if (typeof value === 'string') {\n t
his.value = value.trim();\n } else if (value) {\n this.value = value;\
n } else {\n this.value = '';\n }\n this.isVariable = isVariable
;\n this._index = index;\n this._fileInfo = currentFileInfo;\n this.cop
yVisibilityInfo(visibilityInfo);\n this.setParent(this.combinator, this);\n}\
n\nElement.prototype = Object.assign(new Node(), {\n type: 'Element',\n\n
accept(visitor) {\n const value = this.value;\n this.combinator =
visitor.visit(this.combinator);\n if (typeof value === 'object') {\n
this.value = visitor.visit(value);\n }\n },\n\n eval(context
) {\n return new Element(this.combinator,\n this.value.eval ?
this.value.eval(context) : this.value,\n this.isVariable,\n
this.getIndex(),\n this.fileInfo(), this.visibilityInfo());\n },
\n\n clone() {\n return new Element(this.combinator,\n this
.value,\n this.isVariable,\n this.getIndex(),\n
this.fileInfo(), this.visibilityInfo());\n },\n\n genCSS(context, output)
{\n output.add(this.toCSS(context), this.fileInfo(), this.getIndex());\n
},\n\n toCSS(context) {\n context = context || {};\n let va
lue = this.value;\n const firstSelector = context.firstSelector;\n
if (value instanceof Paren) {\n // selector in parens should not be
affected by outer selector\n // flags (breaks only interpolated selec
tors - see #1973)\n context.firstSelector = true;\n }\n
value = value.toCSS ? value.toCSS(context) : value;\n context.firstSelec
tor = firstSelector;\n if (value === '' && this.combinator.value.charAt(0
) === '&') {\n return '';\n } else {\n return this.
combinator.toCSS(context) + value;\n }\n }\n});\n\nexport default Elem
ent;\n","\nexport const Math = {\n ALWAYS: 0,\n PARENS_DIVISION: 1,\n P
ARENS: 2\n // removed - STRICT_LEGACY: 3\n};\n\nexport const RewriteUrls = {\
n OFF: 0,\n LOCAL: 1,\n ALL: 2\n};","/**\r\n * Returns the object type
of the given payload\r\n *\r\n * @param {*} payload\r\n * @returns {string}\r\n
*/\r\nfunction getType(payload) {\r\n return Object.prototype.toString.call(p
ayload).slice(8, -1);\r\n}\r\n/**\r\n * Returns whether the payload is undefined
\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\r\n
function isUndefined(payload) {\r\n return getType(payload) === 'Undefined';\
r\n}\r\n/**\r\n * Returns whether the payload is null\r\n *\r\n * @param {*} pay
load\r\n * @returns {payload is null}\r\n */\r\nfunction isNull(payload) {\r\n
return getType(payload) === 'Null';\r\n}\r\n/**\r\n * Returns whether the payl
oad is a plain JavaScript object (excluding special classes or objects with othe
r prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Record<s
tring, any>}\r\n */\r\nfunction isPlainObject(payload) {\r\n if (getType(payl
oad) !== 'Object')\r\n return false;\r\n return payload.constructor ==
= Object && Object.getPrototypeOf(payload) === Object.prototype;\r\n}\r\n/**\r\n
* Returns whether the payload is a plain JavaScript object (excluding special c
lasses or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @r
eturns {payload is Record<string, any>}\r\n */\r\nfunction isObject(payload) {\r
\n return isPlainObject(payload);\r\n}\r\n/**\r\n * Returns whether the paylo
ad is a an empty object (excluding special classes or objects with other prototy
pes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is { [K in any]: nev
er }}\r\n */\r\nfunction isEmptyObject(payload) {\r\n return isPlainObject(pa
yload) && Object.keys(payload).length === 0;\r\n}\r\n/**\r\n * Returns whether t
he payload is an any kind of object (including special classes or objects with d
ifferent prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is R
ecord<string, any>}\r\n */\r\nfunction isAnyObject(payload) {\r\n return getT
ype(payload) === 'Object';\r\n}\r\n/**\r\n * Returns whether the payload is an o
bject like a type passed in < >\r\n *\r\n * Usage: isObjectLike<{id: any}>(paylo
ad) // will make sure it's an object and has an `id` prop.\r\n *\r\n * @template
T this must be passed in < >\r\n * @param {*} payload\r\n * @returns {payload i
s T}\r\n */\r\nfunction isObjectLike(payload) {\r\n return isAnyObject(payloa
d);\r\n}\r\n/**\r\n * Returns whether the payload is a function (regular or asyn
c)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is AnyFunction}\r\n */
\r\nfunction isFunction(payload) {\r\n return typeof payload === \"function\"
;\r\n}\r\n/**\r\n * Returns whether the payload is an array\r\n *\r\n * @param {
any} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunction isArray(payloa
d) {\r\n return getType(payload) === 'Array';\r\n}\r\n/**\r\n * Returns wheth
er the payload is a an array with at least 1 item\r\n *\r\n * @param {*} payload
\r\n * @returns {payload is any[]}\r\n */\r\nfunction isFullArray(payload) {\r\n
return isArray(payload) && payload.length > 0;\r\n}\r\n/**\r\n * Returns whe
ther the payload is a an empty array\r\n *\r\n * @param {*} payload\r\n * @retur
ns {payload is []}\r\n */\r\nfunction isEmptyArray(payload) {\r\n return isAr
ray(payload) && payload.length === 0;\r\n}\r\n/**\r\n * Returns whether the payl
oad is a string\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string
}\r\n */\r\nfunction isString(payload) {\r\n return getType(payload) === 'Str
ing';\r\n}\r\n/**\r\n * Returns whether the payload is a string, BUT returns fal
se for ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n
*/\r\nfunction isFullString(payload) {\r\n return isString(payload) && payloa
d !== '';\r\n}\r\n/**\r\n * Returns whether the payload is ''\r\n *\r\n * @param
{*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isEmptyString
(payload) {\r\n return payload === '';\r\n}\r\n/**\r\n * Returns whether the
payload is a number (but not NaN)\r\n *\r\n * This will return `false` for `NaN`
!!\r\n *\r\n * @param {*} payload\r\n * @returns {payload is number}\r\n */\r\nf
unction isNumber(payload) {\r\n return getType(payload) === 'Number' && !isNa
N(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a boolean\r\n *\r\n
* @param {*} payload\r\n * @returns {payload is boolean}\r\n */\r\nfunction isB
oolean(payload) {\r\n return getType(payload) === 'Boolean';\r\n}\r\n/**\r\n
* Returns whether the payload is a regular expression (RegExp)\r\n *\r\n * @para
m {*} payload\r\n * @returns {payload is RegExp}\r\n */\r\nfunction isRegExp(pay
load) {\r\n return getType(payload) === 'RegExp';\r\n}\r\n/**\r\n * Returns w
hether the payload is a Map\r\n *\r\n * @param {*} payload\r\n * @returns {paylo
ad is Map<any, any>}\r\n */\r\nfunction isMap(payload) {\r\n return getType(p
ayload) === 'Map';\r\n}\r\n/**\r\n * Returns whether the payload is a WeakMap\r\
n *\r\n * @param {*} payload\r\n * @returns {payload is WeakMap<any, any>}\r\n *
/\r\nfunction isWeakMap(payload) {\r\n return getType(payload) === 'WeakMap';
\r\n}\r\n/**\r\n * Returns whether the payload is a Set\r\n *\r\n * @param {*} p
ayload\r\n * @returns {payload is Set<any>}\r\n */\r\nfunction isSet(payload) {\
r\n return getType(payload) === 'Set';\r\n}\r\n/**\r\n * Returns whether the
payload is a WeakSet\r\n *\r\n * @param {*} payload\r\n * @returns {payload is W
eakSet<any>}\r\n */\r\nfunction isWeakSet(payload) {\r\n return getType(paylo
ad) === 'WeakSet';\r\n}\r\n/**\r\n * Returns whether the payload is a Symbol\r\n
*\r\n * @param {*} payload\r\n * @returns {payload is symbol}\r\n */\r\nfunctio
n isSymbol(payload) {\r\n return getType(payload) === 'Symbol';\r\n}\r\n/**\r
\n * Returns whether the payload is a Date, and that the date is valid\r\n *\r\n
* @param {*} payload\r\n * @returns {payload is Date}\r\n */\r\nfunction isDate
(payload) {\r\n return getType(payload) === 'Date' && !isNaN(payload);\r\n}\r
\n/**\r\n * Returns whether the payload is a Blob\r\n *\r\n * @param {*} payload
\r\n * @returns {payload is Blob}\r\n */\r\nfunction isBlob(payload) {\r\n re
turn getType(payload) === 'Blob';\r\n}\r\n/**\r\n * Returns whether the payload
is a File\r\n *\r\n * @param {*} payload\r\n * @returns {payload is File}\r\n */
\r\nfunction isFile(payload) {\r\n return getType(payload) === 'File';\r\n}\r
\n/**\r\n * Returns whether the payload is a Promise\r\n *\r\n * @param {*} payl
oad\r\n * @returns {payload is Promise<any>}\r\n */\r\nfunction isPromise(payloa
d) {\r\n return getType(payload) === 'Promise';\r\n}\r\n/**\r\n * Returns whe
ther the payload is an Error\r\n *\r\n * @param {*} payload\r\n * @returns {payl
oad is Error}\r\n */\r\nfunction isError(payload) {\r\n return getType(payloa
d) === 'Error';\r\n}\r\n/**\r\n * Returns whether the payload is literally the v
alue `NaN` (it's `NaN` and also a `number`)\r\n *\r\n * @param {*} payload\r\n *
@returns {payload is typeof NaN}\r\n */\r\nfunction isNaNValue(payload) {\r\n
return getType(payload) === 'Number' && isNaN(payload);\r\n}\r\n/**\r\n * Retu
rns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Nu
mber | String | Symbol)\r\n *\r\n * @param {*} payload\r\n * @returns {(payload
is boolean | null | undefined | number | string | symbol)}\r\n */\r\nfunction is
Primitive(payload) {\r\n return (isBoolean(payload) ||\r\n isNull(payl
oad) ||\r\n isUndefined(payload) ||\r\n isNumber(payload) ||\r\n
isString(payload) ||\r\n isSymbol(payload));\r\n}\r\n/**\r\n * Retu
rns true whether the payload is null or undefined\r\n *\r\n * @param {*} payload
\r\n * @returns {(payload is null | undefined)}\r\n */\r\nfunction isNullOrUndef
ined(payload) {\r\n return isNull(payload) || isUndefined(payload);\r\n}\r\n/
**\r\n * Does a generic check to check that the given payload is of a given type
.\r\n * In cases like Number, it will return true for NaN as NaN is a Number (th
anks javascript!);\r\n * It will, however, differentiate between object and null
\r\n *\r\n * @template T\r\n * @param {*} payload\r\n * @param {T} type\r\n * @t
hrows {TypeError} Will throw type error if type is an invalid type\r\n * @return
s {payload is T}\r\n */\r\nfunction isType(payload, type) {\r\n if (!(type in
stanceof Function)) {\r\n throw new TypeError('Type must be a function');
\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) {
\r\n throw new TypeError('Type is not a class');\r\n }\r\n // Class
es usually have names (as functions usually have names)\r\n var name = type.n
ame;\r\n return getType(payload) === name || Boolean(payload && payload.const
ructor === type);\r\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBool
ean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFull
Array, isFullString, isFunction, isMap, isNaNValue, isNull, isNullOrUndefined, i
sNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isPromise, isRegExp
, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };\n","im
port { isArray, isPlainObject } from 'is-what';\n\n/*! *************************
****************************************************\r\nCopyright (c) Microsoft
Corporation. All rights reserved.\r\nLicensed under the Apache License, Version
2.0 (the \"License\"); you may not use\r\nthis file except in compliance with th
e License. You may obtain a copy of the\r\nLicense at http://www.apache.org/lice
nses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRA
NTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PART
ICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Ver
sion 2.0 License for specific language governing permissions\r\nand limitations
under the License.\r\n**********************************************************
******************* */\r\n\r\nfunction __spreadArrays() {\r\n for (var s = 0,
i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for
(var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments
[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n
return r;\r\n}\n\nfunction assignProp(carry, key, newVal, originalObject, includ
eNonenumerable) {\r\n var propType = {}.propertyIsEnumerable.call(originalObj
ect, key)\r\n ? 'enumerable'\r\n : 'nonenumerable';\r\n if (pro
pType === 'enumerable')\r\n carry[key] = newVal;\r\n if (includeNonenu
merable && propType === 'nonenumerable') {\r\n Object.defineProperty(carr
y, key, {\r\n value: newVal,\r\n enumerable: false,\r\n
writable: true,\r\n configurable: true,\r\n });\r\n
}\r\n}\r\n/**\r\n * Copy (clone) an object and all its props recursively to ge
t rid of any prop referenced of the original object. Arrays are also cloned, how
ever objects inside arrays are still linked.\r\n *\r\n * @export\r\n * @template
T\r\n * @param {T} target Target can be anything\r\n * @param {Options} [option
s={}] Options can be `props` or `nonenumerable`\r\n * @returns {T} the target wi
th replaced values\r\n * @export\r\n */\r\nfunction copy(target, options) {\r\n
if (options === void 0) { options = {}; }\r\n if (isArray(target))\r\n
return target.map(function (i) { return copy(i, options); });\r\n if (!is
PlainObject(target))\r\n return target;\r\n var props = Object.getOwnP
ropertyNames(target);\r\n var symbols = Object.getOwnPropertySymbols(target);
\r\n return __spreadArrays(props, symbols).reduce(function (carry, key) {\r\n
if (isArray(options.props) && !options.props.includes(key)) {\r\n
return carry;\r\n }\r\n var val = target[key];\r\n var
newVal = copy(val, options);\r\n assignProp(carry, key, newVal, target,
options.nonenumerable);\r\n return carry;\r\n }, {});\r\n}\n\nexport {
copy };\n","/* jshint proto: true */\nimport * as Constants from './constants';
\nimport { copy } from 'copy-anything';\n\nexport function getLocation(index, in
putStream) {\n let n = index + 1;\n let line = null;\n let column = -1;
\n\n while (--n >= 0 && inputStream.charAt(n) !== '\\n') {\n column++;
\n }\n\n if (typeof index === 'number') {\n line = (inputStream.sli
ce(0, index).match(/\\n/g) || '').length;\n }\n\n return {\n line,\
n column\n };\n}\n\nexport function copyArray(arr) {\n let i;\n
const length = arr.length;\n const copy = new Array(length);\n\n for (i =
0; i < length; i++) {\n copy[i] = arr[i];\n }\n return copy;\n}\n\n
export function clone(obj) {\n const cloned = {};\n for (const prop in obj
) {\n if (obj.hasOwnProperty(prop)) {\n cloned[prop] = obj[pro
p];\n }\n }\n return cloned;\n}\n\nexport function defaults(obj1, o
bj2) {\n let newObj = obj2 || {};\n if (!obj2._defaults) {\n newObj
= {};\n const defaults = copy(obj1);\n newObj._defaults = default
s;\n const cloned = obj2 ? copy(obj2) : {};\n Object.assign(newObj
, defaults, cloned);\n }\n return newObj;\n}\n\nexport function copyOption
s(obj1, obj2) {\n if (obj2 && obj2._defaults) {\n return obj2;\n }\
n const opts = defaults(obj1, obj2);\n if (opts.strictMath) {\n opt
s.math = Constants.Math.PARENS;\n }\n // Back compat with changed relative
Urls option\n if (opts.relativeUrls) {\n opts.rewriteUrls = Constants.
RewriteUrls.ALL;\n }\n if (typeof opts.math === 'string') {\n switc
h (opts.math.toLowerCase()) {\n case 'always':\n opts.
math = Constants.Math.ALWAYS;\n break;\n case 'parens-
division':\n opts.math = Constants.Math.PARENS_DIVISION;\n
break;\n case 'strict':\n case 'parens':\n
opts.math = Constants.Math.PARENS;\n break;\n
default:\n opts.math = Constants.Math.PARENS;\n }\n }\
n if (typeof opts.rewriteUrls === 'string') {\n switch (opts.rewriteUr
ls.toLowerCase()) {\n case 'off':\n opts.rewriteUrls =
Constants.RewriteUrls.OFF;\n break;\n case 'local':\n
opts.rewriteUrls = Constants.RewriteUrls.LOCAL;\n
break;\n case 'all':\n opts.rewriteUrls = Constants.R
ewriteUrls.ALL;\n break;\n }\n }\n return opts;\n}\n
\nexport function merge(obj1, obj2) {\n for (const prop in obj2) {\n i
f (obj2.hasOwnProperty(prop)) {\n obj1[prop] = obj2[prop];\n }
\n }\n return obj1;\n}\n\nexport function flattenArray(arr, result = []) {
\n for (let i = 0, length = arr.length; i < length; i++) {\n const val
ue = arr[i];\n if (Array.isArray(value)) {\n flattenArray(valu
e, result);\n } else {\n if (value !== undefined) {\n
result.push(value);\n }\n }\n }\n return result;\
n}","import * as utils from './utils';\n\nconst anonymousFunc = /(<anonymous>|Fu
nction):(\\d+):(\\d+)/;\n\n/**\n * This is a centralized class of any error that
could be thrown internally (mostly by the parser).\n * Besides standard .messag
e it keeps some additional data like a path to the file where the error\n * occu
rred along with line and column numbers.\n *\n * @class\n * @extends Error\n * @
type {module.LessError}\n *\n * @prop {string} type\n * @prop {string} filename\
n * @prop {number} index\n * @prop {number} line\n * @prop {number} column\n * @
prop {number} callLine\n * @prop {number} callExtract\n * @prop {string[]} extra
ct\n *\n * @param {Object} e - An error object to wrap around or ju
st a descriptive object\n * @param {Object} fileContentMap - An object with file
contents in 'contents' property (like importManager) @todo - move to fileManage
r?\n * @param {string} [currentFilename]\n */\nconst LessError = function(e, fil
eContentMap, currentFilename) {\n Error.call(this);\n\n const filename = e
.filename || currentFilename;\n\n this.message = e.message;\n this.stack =
e.stack;\n\n if (fileContentMap && filename) {\n const input = fileCo
ntentMap.contents[filename];\n const loc = utils.getLocation(e.index, inp
ut);\n var line = loc.line;\n const col = loc.column;\n co
nst callLine = e.call && utils.getLocation(e.call, input).line;\n const l
ines = input ? input.split('\\n') : '';\n\n this.type = e.type || 'Syntax
';\n this.filename = filename;\n this.index = e.index;\n th
is.line = typeof line === 'number' ? line + 1 : null;\n this.column = col
;\n\n if (!this.line && this.stack) {\n const found = this.sta
ck.match(anonymousFunc);\n\n /**\n * We have to figure ou
t how this environment stringifies anonymous functions\n * so we can
correctly map plugin errors.\n * \n * Note, in Node 8,
the output of anonymous funcs varied based on parameters\n * being p
resent or not, so we inject dummy params.\n */\n const fu
nc = new Function('a', 'throw new Error()');\n let lineAdjust = 0;\n
try {\n func();\n } catch (e) {\n
const match = e.stack.match(anonymousFunc);\n var line = pa
rseInt(match[2]);\n lineAdjust = 1 - line;\n }\n\n
if (found) {\n if (found[2]) {\n this.
line = parseInt(found[2]) + lineAdjust;\n }\n if (
found[3]) {\n this.column = parseInt(found[3]);\n
}\n }\n }\n\n this.callLine = callLine + 1;\n
this.callExtract = lines[callLine];\n\n this.extract = [\n l
ines[this.line - 2],\n lines[this.line - 1],\n lines[this.
line]\n ];\n }\n\n};\n\nif (typeof Object.create === 'undefined') {\n
const F = function () {};\n F.prototype = Error.prototype;\n LessError.
prototype = new F();\n} else {\n LessError.prototype = Object.create(Error.pr
ototype);\n}\n\nLessError.prototype.constructor = LessError;\n\n/**\n * An overr
idden version of the default Object.prototype.toString\n * which uses additional
information to create a helpful message.\n *\n * @param {Object} options\n * @r
eturns {string}\n */\nLessError.prototype.toString = function(options) {\n op
tions = options || {};\n\n let message = '';\n const extract = this.extrac
t || [];\n let error = [];\n let stylize = function (str) { return str; };
\n if (options.stylize) {\n const type = typeof options.stylize;\n
if (type !== 'function') {\n throw Error(`options.stylize should
be a function, got a ${type}!`);\n }\n stylize = options.stylize;\
n }\n\n if (this.line !== null) {\n if (typeof extract[0] === 'stri
ng') {\n error.push(stylize(`${this.line - 1} ${extract[0]}`, 'grey')
);\n }\n\n if (typeof extract[1] === 'string') {\n let
errorTxt = `${this.line} `;\n if (extract[1]) {\n erro
rTxt += extract[1].slice(0, this.column) +\n stylize(stylize(
stylize(extract[1].substr(this.column, 1), 'bold') +\n ex
tract[1].slice(this.column + 1), 'red'), 'inverse');\n }\n
error.push(errorTxt);\n }\n\n if (typeof extract[2] === 'string')
{\n error.push(stylize(`${this.line + 1} ${extract[2]}`, 'grey'));\n
}\n error = `${error.join('\\n') + stylize('', 'reset')}\\n`;\n
}\n\n message += stylize(`${this.type}Error: ${this.message}`, 'red');\n
if (this.filename) {\n message += stylize(' in ', 'red') + this.filename
;\n }\n if (this.line) {\n message += stylize(` on line ${this.line
}, column ${this.column + 1}:`, 'grey');\n }\n\n message += `\\n${error}`;
\n\n if (this.callLine) {\n message += `${stylize('from ', 'red') + (t
his.filename || '')}/n`;\n message += `${stylize(this.callLine, 'grey')}
${this.callExtract}/n`;\n }\n\n return message;\n};\n\nexport default Less
Error;","import Node from './node';\nimport Element from './element';\nimport Le
ssError from '../less-error';\n\nconst Selector = function(elements, extendList,
condition, index, currentFileInfo, visibilityInfo) {\n this.extendList = ext
endList;\n this.condition = condition;\n this.evaldCondition = !condition;
\n this._index = index;\n this._fileInfo = currentFileInfo;\n this.elem
ents = this.getElements(elements);\n this.mixinElements_ = undefined;\n th
is.copyVisibilityInfo(visibilityInfo);\n this.setParent(this.elements, this);
\n};\n\nSelector.prototype = Object.assign(new Node(), {\n type: 'Selector',\
n\n accept(visitor) {\n if (this.elements) {\n this.element
s = visitor.visitArray(this.elements);\n }\n if (this.extendList)
{\n this.extendList = visitor.visitArray(this.extendList);\n }
\n if (this.condition) {\n this.condition = visitor.visit(this
.condition);\n }\n },\n\n createDerived(elements, extendList, evald
Condition) {\n elements = this.getElements(elements);\n const newS
elector = new Selector(elements, extendList || this.extendList,\n nul
l, this.getIndex(), this.fileInfo(), this.visibilityInfo());\n newSelecto
r.evaldCondition = (evaldCondition != null) ? evaldCondition : this.evaldConditi
on;\n newSelector.mediaEmpty = this.mediaEmpty;\n return newSelect
or;\n },\n\n getElements(els) {\n if (!els) {\n return [
new Element('', '&', false, this._index, this._fileInfo)];\n }\n i
f (typeof els === 'string') {\n this.parse.parseNode(\n
els, \n ['selector'],\n this._index, \n
this._fileInfo, \n function(err, result) {\n
if (err) {\n throw new LessError({\n
index: err.index,\n message: err.message
\n }, this.parse.imports, this._fileInfo.filename);\n
}\n els = result[0].elements;\n
});\n }\n return els;\n },\n\n createEmptySelectors() {\n
const el = new Element('', '&', false, this._index, this._fileInfo), sels
= [new Selector([el], null, null, this._index, this._fileInfo)];\n sels[
0].mediaEmpty = true;\n return sels;\n },\n\n match(other) {\n
const elements = this.elements;\n const len = elements.length;\n
let olen;\n let i;\n\n other = other.mixinElements();\n o
len = other.length;\n if (olen === 0 || len < olen) {\n return
0;\n } else {\n for (i = 0; i < olen; i++) {\n
if (elements[i].value !== other[i]) {\n return 0;\n
}\n }\n }\n\n return olen; // return number of m
atched elements\n },\n\n mixinElements() {\n if (this.mixinElements
_) {\n return this.mixinElements_;\n }\n\n let elements
= this.elements.map( function(v) {\n return v.combinator.value + (v.
value.value || v.value);\n }).join('').match(/[,&#\\*\\.\\w-]([\\w-]|(\\\
\.))*/g);\n\n if (elements) {\n if (elements[0] === '&') {\n
elements.shift();\n }\n } else {\n el
ements = [];\n }\n\n return (this.mixinElements_ = elements);\n
},\n\n isJustParentSelector() {\n return !this.mediaEmpty &&\n
this.elements.length === 1 &&\n this.elements[0].value === '&' &
&\n (this.elements[0].combinator.value === ' ' || this.elements[0].co
mbinator.value === '');\n },\n\n eval(context) {\n const evaldCondi
tion = this.condition && this.condition.eval(context);\n let elements = t
his.elements;\n let extendList = this.extendList;\n\n elements = e
lements && elements.map(function (e) { return e.eval(context); });\n exte
ndList = extendList && extendList.map(function(extend) { return extend.eval(cont
ext); });\n\n return this.createDerived(elements, extendList, evaldCondit
ion);\n },\n\n genCSS(context, output) {\n let i, element;\n
if ((!context || !context.firstSelector) && this.elements[0].combinator.value =
== '') {\n output.add(' ', this.fileInfo(), this.getIndex());\n
}\n for (i = 0; i < this.elements.length; i++) {\n element =
this.elements[i];\n element.genCSS(context, output);\n }\n
},\n\n getIsOutput() {\n return this.evaldCondition;\n }\n});\n\ne
xport default Selector;\n","import Node from './node';\n\nconst Value = function
(value) {\n if (!value) {\n throw new Error('Value requires an array a
rgument');\n }\n if (!Array.isArray(value)) {\n this.value = [ valu
e ];\n }\n else {\n this.value = value;\n }\n};\n\nValue.prototy
pe = Object.assign(new Node(), {\n type: 'Value',\n\n accept(visitor) {\n
if (this.value) {\n this.value = visitor.visitArray(this.value
);\n }\n },\n\n eval(context) {\n if (this.value.length ===
1) {\n return this.value[0].eval(context);\n } else {\n
return new Value(this.value.map(function (v) {\n return v.ev
al(context);\n }));\n }\n },\n\n genCSS(context, output)
{\n let i;\n for (i = 0; i < this.value.length; i++) {\n
this.value[i].genCSS(context, output);\n if (i + 1 < this.value.le
ngth) {\n output.add((context && context.compress) ? ',' : ', ');
\n }\n }\n }\n});\n\nexport default Value;\n","import Node
from './node';\n\nconst Keyword = function(value) {\n this.value = value;\n};
\n\nKeyword.prototype = Object.assign(new Node(), {\n type: 'Keyword',\n\n
genCSS(context, output) {\n if (this.value === '%') { throw { type: 'Syn
tax', message: 'Invalid % without number' }; }\n output.add(this.value);\
n }\n});\n\nKeyword.True = new Keyword('true');\nKeyword.False = new Keyword(
'false');\n\nexport default Keyword;\n","import Node from './node';\n\nconst Ano
nymous = function(value, index, currentFileInfo, mapLines, rulesetLike, visibili
tyInfo) {\n this.value = value;\n this._index = index;\n this._fileInfo
= currentFileInfo;\n this.mapLines = mapLines;\n this.rulesetLike = (type
of rulesetLike === 'undefined') ? false : rulesetLike;\n this.allowRoot = tru
e;\n this.copyVisibilityInfo(visibilityInfo);\n}\n\nAnonymous.prototype = Obj
ect.assign(new Node(), {\n type: 'Anonymous',\n eval() {\n return n
ew Anonymous(this.value, this._index, this._fileInfo, this.mapLines, this.rulese
tLike, this.visibilityInfo());\n },\n compare(other) {\n return oth
er.toCSS && this.toCSS() === other.toCSS() ? 0 : undefined;\n },\n isRules
etLike() {\n return this.rulesetLike;\n },\n genCSS(context, output
) {\n this.nodeVisible = Boolean(this.value);\n if (this.nodeVisib
le) {\n output.add(this.value, this._fileInfo, this._index, this.mapL
ines);\n }\n }\n})\n\nexport default Anonymous;\n","import Node from '
./node';\nimport Value from './value';\nimport Keyword from './keyword';\nimport
Anonymous from './anonymous';\nimport * as Constants from '../constants';\ncons
t MATH = Constants.Math;\n\nfunction evalName(context, name) {\n let value =
'';\n let i;\n const n = name.length;\n const output = {add: function (
s) {value += s;}};\n for (i = 0; i < n; i++) {\n name[i].eval(context)
.genCSS(context, output);\n }\n return value;\n}\n\nconst Declaration = fu
nction(name, value, important, merge, index, currentFileInfo, inline, variable)
{\n this.name = name;\n this.value = (value instanceof Node) ? value : new
Value([value ? new Anonymous(value) : null]);\n this.important = important ?
` ${important.trim()}` : '';\n this.merge = merge;\n this._index = index;
\n this._fileInfo = currentFileInfo;\n this.inline = inline || false;\n
this.variable = (variable !== undefined) ? variable\n : (name.charAt &&
(name.charAt(0) === '@'));\n this.allowRoot = true;\n this.setParent(this.
value, this);\n};\n\nDeclaration.prototype = Object.assign(new Node(), {\n ty
pe: 'Declaration',\n\n genCSS(context, output) {\n output.add(this.nam
e + (context.compress ? ':' : ': '), this.fileInfo(), this.getIndex());\n
try {\n this.value.genCSS(context, output);\n }\n catc
h (e) {\n e.index = this._index;\n e.filename = this._file
Info.filename;\n throw e;\n }\n output.add(this.importa
nt + ((this.inline || (context.lastRule && context.compress)) ? '' : ';'), this.
_fileInfo, this._index);\n },\n\n eval(context) {\n let mathBypass
= false, prevMath, name = this.name, evaldValue, variable = this.variable;\n
if (typeof name !== 'string') {\n // expand 'primitive' name dire
ctly to get\n // things faster (~10% for benchmark.less):\n
name = (name.length === 1) && (name[0] instanceof Keyword) ?\n
name[0].value : evalName(context, name);\n variable = false; // never
treat expanded interpolation as new variable name\n }\n\n // @tod
o remove when parens-division is default\n if (name === 'font' && context
.math === MATH.ALWAYS) {\n mathBypass = true;\n prevMath =
context.math;\n context.math = MATH.PARENS_DIVISION;\n }\n
try {\n context.importantScope.push({});\n evaldValue
= this.value.eval(context);\n\n if (!this.variable && evaldValue.typ
e === 'DetachedRuleset') {\n throw { message: 'Rulesets cannot be
evaluated on a property.',\n index: this.getIndex(), filenam
e: this.fileInfo().filename };\n }\n let important = this.
important;\n const importantResult = context.importantScope.pop();\n
if (!important && importantResult.important) {\n impor
tant = importantResult.important;\n }\n\n return new Decla
ration(name,\n evaldValue,\n important,\n
this.merge,\n this.getIndex(), this.fileInfo(), this.inlin
e,\n variable);\n }\n catch (e) {\n if (
typeof e.index !== 'number') {\n e.index = this.getIndex();\n
e.filename = this.fileInfo().filename;\n }\n t
hrow e;\n }\n finally {\n if (mathBypass) {\n
context.math = prevMath;\n }\n }\n },\n\n makeImpo
rtant() {\n return new Declaration(this.name,\n this.value,\n
'!important',\n this.merge,\n this.getIndex(),
this.fileInfo(), this.inline);\n }\n});\n\nexport default Declaration;","func
tion asComment(ctx) {\n return `/* line ${ctx.debugInfo.lineNumber}, ${ctx.de
bugInfo.fileName} */\\n`;\n}\n\nfunction asMediaQuery(ctx) {\n let filenameWi
thProtocol = ctx.debugInfo.fileName;\n if (!/^[a-z]+:\\/\\//i.test(filenameWi
thProtocol)) {\n filenameWithProtocol = `file://${filenameWithProtocol}`;
\n }\n return `@media -sass-debug-info{filename{font-family:${filenameWith
Protocol.replace(/([.:\\/\\\\])/g, function (a) {\n if (a == '\\\\') {\n
a = '\\/';\n }\n return `\\\\${a}`;\n })}}line{font-
family:\\\\00003${ctx.debugInfo.lineNumber}}}\\n`;\n}\n\nfunction debugInfo(cont
ext, ctx, lineSeparator) {\n let result = '';\n if (context.dumpLineNumber
s && !context.compress) {\n switch (context.dumpLineNumbers) {\n
case 'comments':\n result = asComment(ctx);\n b
reak;\n case 'mediaquery':\n result = asMediaQuery(ctx
);\n break;\n case 'all':\n result = as
Comment(ctx) + (lineSeparator || '') + asMediaQuery(ctx);\n break
;\n }\n }\n return result;\n}\n\nexport default debugInfo;\n\n","im
port Node from './node';\nimport getDebugInfo from './debug-info';\n\nconst Comm
ent = function(value, isLineComment, index, currentFileInfo) {\n this.value =
value;\n this.isLineComment = isLineComment;\n this._index = index;\n
this._fileInfo = currentFileInfo;\n this.allowRoot = true;\n}\n\nComment.prot
otype = Object.assign(new Node(), {\n type: 'Comment',\n\n genCSS(context,
output) {\n if (this.debugInfo) {\n output.add(getDebugInfo(c
ontext, this), this.fileInfo(), this.getIndex());\n }\n output.add
(this.value);\n },\n\n isSilent(context) {\n const isCompressed = c
ontext.compress && this.value[2] !== '!';\n return this.isLineComment ||
isCompressed;\n }\n});\n\nexport default Comment;\n","const contexts = {};\ne
xport default contexts;\nimport * as Constants from './constants';\n\nconst copy
FromOriginal = function copyFromOriginal(original, destination, propertiesToCopy
) {\n if (!original) { return; }\n\n for (let i = 0; i < propertiesToCopy.
length; i++) {\n if (original.hasOwnProperty(propertiesToCopy[i])) {\n
destination[propertiesToCopy[i]] = original[propertiesToCopy[i]];\n
}\n }\n};\n\n/*\n parse is used whilst parsing\n */\nconst parseCopyPrope
rties = [\n // options\n 'paths', // option - unmodified - path
s to search for imports on\n 'rewriteUrls', // option - whether to adjus
t URL's to be relative\n 'rootpath', // option - rootpath to append t
o URL's\n 'strictImports', // option -\n 'insecure', // option
- whether to allow imports from insecure ssl hosts\n 'dumpLineNumbers', // o
ption - whether to dump line numbers\n 'compress', // option - whethe
r to compress\n 'syncImport', // option - whether to import synchronous
ly\n 'chunkInput', // option - whether to chunk input. more performant
but causes parse issues.\n 'mime', // browser only - mime type fo
r sheet import\n 'useFileCache', // browser only - whether to use the per
file session cache\n // context\n 'processImports', // option & context
- whether to process imports. if false then imports will not be imported.\n
// Used by the import manager to stop multiple import visitors being created.\n
'pluginManager' // Used as the plugin manager for the session\n];\n\ncont
exts.Parse = function(options) {\n copyFromOriginal(options, this, parseCopyP
roperties);\n\n if (typeof this.paths === 'string') { this.paths = [this.path
s]; }\n};\n\nconst evalCopyProperties = [\n 'paths', // additiona
l include paths\n 'compress', // whether to compress\n 'math',
// whether math has to be within parenthesis\n 'strictUnits',
// whether units need to evaluate correctly\n 'sourceMap', // wheth
er to output a source map\n 'importMultiple', // whether we are currently
importing multiple copies\n 'urlArgs', // whether to add args into
url tokens\n 'javascriptEnabled', // option - whether Inline JavaScript is en
abled. if undefined, defaults to false\n 'pluginManager', // Used as the
plugin manager for the session\n 'importantScope', // used to bubble up !i
mportant statements\n 'rewriteUrls' // option - whether to adjust URL'
s to be relative\n];\n\ncontexts.Eval = function(options, frames) {\n copyFro
mOriginal(options, this, evalCopyProperties);\n\n if (typeof this.paths === '
string') { this.paths = [this.paths]; }\n\n this.frames = frames || [];\n
this.importantScope = this.importantScope || [];\n};\n\ncontexts.Eval.prototype.
enterCalc = function () {\n if (!this.calcStack) {\n this.calcStack =
[];\n }\n this.calcStack.push(true);\n this.inCalc = true;\n};\n\nconte
xts.Eval.prototype.exitCalc = function () {\n this.calcStack.pop();\n if (
!this.calcStack.length) {\n this.inCalc = false;\n }\n};\n\ncontexts.E
val.prototype.inParenthesis = function () {\n if (!this.parensStack) {\n
this.parensStack = [];\n }\n this.parensStack.push(true);\n};\n\ncontex
ts.Eval.prototype.outOfParenthesis = function () {\n this.parensStack.pop();\
n};\n\ncontexts.Eval.prototype.inCalc = false;\ncontexts.Eval.prototype.mathOn =
true;\ncontexts.Eval.prototype.isMathOn = function (op) {\n if (!this.mathOn
) {\n return false;\n }\n if (op === '/' && this.math !== Constants
.Math.ALWAYS && (!this.parensStack || !this.parensStack.length)) {\n retu
rn false;\n }\n if (this.math > Constants.Math.PARENS_DIVISION) {\n
return this.parensStack && this.parensStack.length;\n }\n return true;\n}
;\n\ncontexts.Eval.prototype.pathRequiresRewrite = function (path) {\n const
isRelative = this.rewriteUrls === Constants.RewriteUrls.LOCAL ? isPathLocalRelat
ive : isPathRelative;\n\n return isRelative(path);\n};\n\ncontexts.Eval.proto
type.rewritePath = function (path, rootpath) {\n let newPath;\n\n rootpath
= rootpath ||Â '';\n newPath = this.normalizePath(rootpath + path);\n\n //
If a path was explicit relative and the rootpath was not an absolute path\n
// we must ensure that the new path is also explicit relative.\n if (isPathLo
calRelative(path) &&\n isPathRelative(rootpath) &&\n isPathLocalRe
lative(newPath) === false) {\n newPath = `./${newPath}`;\n }\n\n re
turn newPath;\n};\n\ncontexts.Eval.prototype.normalizePath = function (path) {\n
const segments = path.split('/').reverse();\n let segment;\n\n path =
[];\n while (segments.length !== 0) {\n segment = segments.pop();\n
switch ( segment ) {\n case '.':\n break;\n
case '..':\n if ((path.length === 0) || (path[path.length -
1] === '..')) {\n path.push( segment );\n } e
lse {\n path.pop();\n }\n break
;\n default:\n path.push(segment);\n br
eak;\n }\n }\n\n return path.join('/');\n};\n\nfunction isPathRelat
ive(path) {\n return !/^(?:[a-z-]+:|\\/|#)/i.test(path);\n}\n\nfunction isPat
hLocalRelative(path) {\n return path.charAt(0) === '.';\n}\n\n// todo - do th
e same for the toCSS ?\n","function makeRegistry( base ) {\n return {\n
_data: {},\n add: function(name, func) {\n // precautionary
case conversion, as later querying of\n // the registry by function-c
aller uses lower case as well.\n name = name.toLowerCase();\n\n
if (this._data.hasOwnProperty(name)) {\n // TODO warn\n
}\n this._data[name] = func;\n },\n addMultiple
: function(functions) {\n Object.keys(functions).forEach(\n
name => {\n this.add(name, functions[name]);\n
});\n },\n get: function(name) {\n return this._
data[name] || ( base && base.get( name ));\n },\n getLocalFunction
s: function() {\n return this._data;\n },\n inherit: fu
nction() {\n return makeRegistry( this );\n },\n create
: function(base) {\n return makeRegistry(base);\n }\n };\n}
\n\nexport default makeRegistry( null );","import Keyword from '../tree/keyword'
;\n\nconst defaultFunc = {\n eval: function () {\n const v = this.valu
e_;\n const e = this.error_;\n if (e) {\n throw e;\n
}\n if (v != null) {\n return v ? Keyword.True : Keyword.
False;\n }\n },\n value: function (v) {\n this.value_ = v;\n
},\n error: function (e) {\n this.error_ = e;\n },\n reset:
function () {\n this.value_ = this.error_ = null;\n }\n};\n\nexport de
fault defaultFunc;\n","import Node from './node';\nimport Declaration from './de
claration';\nimport Keyword from './keyword';\nimport Comment from './comment';\
nimport Paren from './paren';\nimport Selector from './selector';\nimport Elemen
t from './element';\nimport Anonymous from './anonymous';\nimport contexts from
'../contexts';\nimport globalFunctionRegistry from '../functions/function-regist
ry';\nimport defaultFunc from '../functions/default';\nimport getDebugInfo from
'./debug-info';\nimport * as utils from '../utils';\n\nconst Ruleset = function(
selectors, rules, strictImports, visibilityInfo) {\n this.selectors = selecto
rs;\n this.rules = rules;\n this._lookups = {};\n this._variables = nul
l;\n this._properties = null;\n this.strictImports = strictImports;\n t
his.copyVisibilityInfo(visibilityInfo);\n this.allowRoot = true;\n\n this.
setParent(this.selectors, this);\n this.setParent(this.rules, this);\n}\n\nRu
leset.prototype = Object.assign(new Node(), {\n type: 'Ruleset',\n isRules
et: true,\n\n isRulesetLike() { return true; },\n\n accept(visitor) {\n
if (this.paths) {\n this.paths = visitor.visitArray(this.paths,
true);\n } else if (this.selectors) {\n this.selectors = visit
or.visitArray(this.selectors);\n }\n if (this.rules && this.rules.
length) {\n this.rules = visitor.visitArray(this.rules);\n }\n
},\n\n eval(context) {\n const that = this;\n let selectors
;\n let selCnt;\n let selector;\n let i;\n let hasVa
riable;\n let hasOnePassingSelector = false;\n\n if (this.selector
s && (selCnt = this.selectors.length)) {\n selectors = new Array(selC
nt);\n defaultFunc.error({\n type: 'Syntax',\n
message: 'it is currently only allowed in parametric mixin guards,'\n
});\n\n for (i = 0; i < selCnt; i++) {\n sele
ctor = this.selectors[i].eval(context);\n for (var j = 0; j < sel
ector.elements.length; j++) {\n if (selector.elements[j].isVa
riable) {\n hasVariable = true;\n
break;\n }\n }\n selectors[i] =
selector;\n if (selector.evaldCondition) {\n
hasOnePassingSelector = true;\n }\n }\n\n i
f (hasVariable) {\n const toParseSelectors = new Array(selCnt);\n
for (i = 0; i < selCnt; i++) {\n selector = s
electors[i];\n toParseSelectors[i] = selector.toCSS(context);
\n }\n this.parse.parseNode(\n
toParseSelectors.join(','),\n [\"selectors\"], \n
selectors[0].getIndex(), \n selectors[0].fileInfo(),
\n function(err, result) {\n if (resul
t) {\n selectors = utils.flattenArray(result);\n
}\n });\n }\n\n defa
ultFunc.reset();\n } else {\n hasOnePassingSelector = true;\n
}\n\n let rules = this.rules ? utils.copyArray(this.rules) : null;
\n const ruleset = new Ruleset(selectors, rules, this.strictImports, this
.visibilityInfo());\n let rule;\n let subRule;\n\n ruleset.
originalRuleset = this;\n ruleset.root = this.root;\n ruleset.firs
tRoot = this.firstRoot;\n ruleset.allowImports = this.allowImports;\n\n
if (this.debugInfo) {\n ruleset.debugInfo = this.debugInfo;\n
}\n\n if (!hasOnePassingSelector) {\n rules.length = 0;\
n }\n\n // inherit a function registry from the frames stack when
possible;\n // otherwise from the global registry\n ruleset.functi
onRegistry = (function (frames) {\n let i = 0;\n const n =
frames.length;\n let found;\n for ( ; i !== n ; ++i ) {\n
found = frames[ i ].functionRegistry;\n if ( foun
d ) { return found; }\n }\n return globalFunctionRegistry;
\n }(context.frames)).inherit();\n\n // push the current ruleset t
o the frames stack\n const ctxFrames = context.frames;\n ctxFrames
.unshift(ruleset);\n\n // currrent selectors\n let ctxSelectors =
context.selectors;\n if (!ctxSelectors) {\n context.selectors
= ctxSelectors = [];\n }\n ctxSelectors.unshift(this.selectors);\n
\n // Evaluate imports\n if (ruleset.root || ruleset.allowImports
|| !ruleset.strictImports) {\n ruleset.evalImports(context);\n
}\n\n // Store the frames around mixin definitions,\n // so they
can be evaluated like closures when the time comes.\n const rsRules = rul
eset.rules;\n for (i = 0; (rule = rsRules[i]); i++) {\n if (ru
le.evalFirst) {\n rsRules[i] = rule.eval(context);\n }
\n }\n\n const mediaBlockCount = (context.mediaBlocks && context.m
ediaBlocks.length) || 0;\n\n // Evaluate mixin calls.\n for (i = 0
; (rule = rsRules[i]); i++) {\n if (rule.type === 'MixinCall') {\n
/* jshint loopfunc:true */\n rules = rule.eval(conte
xt).filter(function(r) {\n if ((r instanceof Declaration) &&
r.variable) {\n // do not pollute the scope if the variab
le is\n // already there. consider returning false here\n
// but we need a way to \"return\" variable from mixins\
n return !(ruleset.variable(r.name));\n
}\n return true;\n });\n rsRu
les.splice.apply(rsRules, [i, 1].concat(rules));\n i += rules.len
gth - 1;\n ruleset.resetCache();\n } else if (rule.typ
e === 'VariableCall') {\n /* jshint loopfunc:true */\n
rules = rule.eval(context).rules.filter(function(r) {\n
if ((r instanceof Declaration) && r.variable) {\n // do
not pollute the scope at all\n return false;\n
}\n return true;\n });\n
rsRules.splice.apply(rsRules, [i, 1].concat(rules));\n i += ru
les.length - 1;\n ruleset.resetCache();\n }\n }
\n\n // Evaluate everything else\n for (i = 0; (rule = rsRules[i])
; i++) {\n if (!rule.evalFirst) {\n rsRules[i] = rule
= rule.eval ? rule.eval(context) : rule;\n }\n }\n\n //
Evaluate everything else\n for (i = 0; (rule = rsRules[i]); i++) {\n
// for rulesets, check if it is a css guard and can be removed\n
if (rule instanceof Ruleset && rule.selectors && rule.selectors.length === 1
) {\n // check if it can be folded in (e.g. & where)\n
if (rule.selectors[0] && rule.selectors[0].isJustParentSelector()) {\n
rsRules.splice(i--, 1);\n\n for (var j = 0; (s
ubRule = rule.rules[j]); j++) {\n if (subRule instanceof
Node) {\n subRule.copyVisibilityInfo(rule.visibilityI
nfo());\n if (!(subRule instanceof Declaration) || !s
ubRule.variable) {\n rsRules.splice(++i, 0, subRu
le);\n }\n }\n
}\n }\n }\n }\n\n // Pop the stack\n
ctxFrames.shift();\n ctxSelectors.shift();\n\n if (context
.mediaBlocks) {\n for (i = mediaBlockCount; i < context.mediaBlocks.l
ength; i++) {\n context.mediaBlocks[i].bubbleSelectors(selectors)
;\n }\n }\n\n return ruleset;\n },\n\n evalImport
s(context) {\n const rules = this.rules;\n let i;\n let imp
ortRules;\n if (!rules) { return; }\n\n for (i = 0; i < rules.leng
th; i++) {\n if (rules[i].type === 'Import') {\n impor
tRules = rules[i].eval(context);\n if (importRules && (importRule
s.length || importRules.length === 0)) {\n rules.splice.apply
(rules, [i, 1].concat(importRules));\n i += importRules.lengt
h - 1;\n } else {\n rules.splice(i, 1, importR
ules);\n }\n this.resetCache();\n }\n
}\n },\n\n makeImportant() {\n const result = new Ruleset(thi
s.selectors, this.rules.map(function (r) {\n if (r.makeImportant) {\n
return r.makeImportant();\n } else {\n
return r;\n }\n }), this.strictImports, this.visibilityInfo()
);\n\n return result;\n },\n\n matchArgs(args) {\n return !a
rgs || args.length === 0;\n },\n\n // lets you call a css selector with a
guard\n matchCondition(args, context) {\n const lastSelector = this.se
lectors[this.selectors.length - 1];\n if (!lastSelector.evaldCondition) {
\n return false;\n }\n if (lastSelector.condition &&\n
!lastSelector.condition.eval(\n new contexts.Eval(cont
ext,\n context.frames))) {\n return false;\n
}\n return true;\n },\n\n resetCache() {\n this._rulesets
= null;\n this._variables = null;\n this._properties = null;\n
this._lookups = {};\n },\n\n variables() {\n if (!this._variabl
es) {\n this._variables = !this.rules ? {} : this.rules.reduce(functi
on (hash, r) {\n if (r instanceof Declaration && r.variable === t
rue) {\n hash[r.name] = r;\n }\n
// when evaluating variables in an import statement, imports have not been eva
l'd\n // so we need to go inside import statements.\n
// guard against root being a string (in the case of inlined less)\n
if (r.type === 'Import' && r.root && r.root.variables) {\n
const vars = r.root.variables();\n for (const name in v
ars) {\n if (vars.hasOwnProperty(name)) {\n
hash[name] = r.root.variable(name);\n }\n
}\n }\n return hash;\n
}, {});\n }\n return this._variables;\n },\n\n properties(
) {\n if (!this._properties) {\n this._properties = !this.rule
s ? {} : this.rules.reduce(function (hash, r) {\n if (r instanceo
f Declaration && r.variable !== true) {\n const name = (r.nam
e.length === 1) && (r.name[0] instanceof Keyword) ?\n r.n
ame[0].value : r.name;\n // Properties don't overwrite as the
y can merge\n if (!hash[`$${name}`]) {\n
hash[`$${name}`] = [ r ];\n }\n else {\
n hash[`$${name}`].push(r);\n }\n
}\n return hash;\n }, {});\n }\n
return this._properties;\n },\n\n variable(name) {\n const decl
= this.variables()[name];\n if (decl) {\n return this.parseVa
lue(decl);\n }\n },\n\n property(name) {\n const decl = this
.properties()[name];\n if (decl) {\n return this.parseValue(de
cl);\n }\n },\n\n lastDeclaration() {\n for (let i = this.ru
les.length; i > 0; i--) {\n const decl = this.rules[i - 1];\n
if (decl instanceof Declaration) {\n return this.parseValue(d
ecl);\n }\n }\n },\n\n parseValue(toParse) {\n co
nst self = this;\n function transformDeclaration(decl) {\n if
(decl.value instanceof Anonymous && !decl.parsed) {\n if (typeof
decl.value.value === 'string') {\n this.parse.parseNode(\n
decl.value.value,\n ['value', 'impor
tant'], \n decl.value.getIndex(), \n
decl.fileInfo(), \n function(err, result) {\n
if (err) {\n decl.parsed = tru
e;\n }\n if (result) {\n
decl.value = result[0];\n
decl.important = result[1] || '';\n decl.p
arsed = true;\n }\n });\n
} else {\n decl.parsed = true;\n }\
n\n return decl;\n }\n else {\n
return decl;\n }\n }\n if (!Array.isArray(toParse))
{\n return transformDeclaration.call(self, toParse);\n }\n
else {\n const nodes = [];\n toParse.forEach(function
(n) {\n nodes.push(transformDeclaration.call(self, n));\n
});\n return nodes;\n }\n },\n\n rulesets() {\n
if (!this.rules) { return []; }\n\n const filtRules = [];\n con
st rules = this.rules;\n let i;\n let rule;\n\n for (i = 0;
(rule = rules[i]); i++) {\n if (rule.isRuleset) {\n f
iltRules.push(rule);\n }\n }\n\n return filtRules;\n
},\n\n prependRule(rule) {\n const rules = this.rules;\n if (r
ules) {\n rules.unshift(rule);\n } else {\n this.ru
les = [ rule ];\n }\n this.setParent(rule, this);\n },\n\n f
ind(selector, self, filter) {\n self = self || this;\n const rules
= [];\n let match;\n let foundMixins;\n const key = select
or.toCSS();\n\n if (key in this._lookups) { return this._lookups[key]; }\
n\n this.rulesets().forEach(function (rule) {\n if (rule !== s
elf) {\n for (let j = 0; j < rule.selectors.length; j++) {\n
match = selector.match(rule.selectors[j]);\n i
f (match) {\n if (selector.elements.length > match) {\n
if (!filter || filter(rule)) {\n
foundMixins = rule.find(new Selector(selector.elements.slice(match)),
self, filter);\n for (let i = 0; i < foundMixins.
length; ++i) {\n foundMixins[i].path.push(rul
e);\n }\n Array.pr
ototype.push.apply(rules, foundMixins);\n }\n
} else {\n rules.push({ rule, path: [
]});\n }\n break;\n
}\n }\n }\n });\n this._lookups[key
] = rules;\n return rules;\n },\n\n genCSS(context, output) {\n
let i;\n let j;\n const charsetRuleNodes = [];\n let ru
leNodes = [];\n\n let // Line number debugging\n debugInfo;\n\
n let rule;\n let path;\n\n context.tabLevel = (context.tab
Level || 0);\n\n if (!this.root) {\n context.tabLevel++;\n
}\n\n const tabRuleStr = context.compress ? '' : Array(context.tabLev
el + 1).join(' ');\n const tabSetStr = context.compress ? '' : Array(con
text.tabLevel).join(' ');\n let sep;\n\n let charsetNodeIndex = 0
;\n let importNodeIndex = 0;\n for (i = 0; (rule = this.rules[i]);
i++) {\n if (rule instanceof Comment) {\n if (importN
odeIndex === i) {\n importNodeIndex++;\n }\n
ruleNodes.push(rule);\n } else if (rule.isCharset && ru
le.isCharset()) {\n ruleNodes.splice(charsetNodeIndex, 0, rule);\
n charsetNodeIndex++;\n importNodeIndex++;\n
} else if (rule.type === 'Import') {\n ruleNodes.splice(imp
ortNodeIndex, 0, rule);\n importNodeIndex++;\n } else
{\n ruleNodes.push(rule);\n }\n }\n rule
Nodes = charsetRuleNodes.concat(ruleNodes);\n\n // If this is the root no
de, we don't render\n // a selector, or {}.\n if (!this.root) {\n
debugInfo = getDebugInfo(context, this, tabSetStr);\n\n if
(debugInfo) {\n output.add(debugInfo);\n output.a
dd(tabSetStr);\n }\n\n const paths = this.paths;\n
const pathCnt = paths.length;\n let pathSubCnt;\n\n se
p = context.compress ? ',' : (`,\\n${tabSetStr}`);\n\n for (i = 0; i
< pathCnt; i++) {\n path = paths[i];\n if (!(pathS
ubCnt = path.length)) { continue; }\n if (i > 0) { output.add(sep
); }\n\n context.firstSelector = true;\n path[0].g
enCSS(context, output);\n\n context.firstSelector = false;\n
for (j = 1; j < pathSubCnt; j++) {\n path[j].genCS
S(context, output);\n }\n }\n\n output.add(
(context.compress ? '{' : ' {\\n') + tabRuleStr);\n }\n\n // Compi
le rules and rulesets\n for (i = 0; (rule = ruleNodes[i]); i++) {\n\n
if (i + 1 === ruleNodes.length) {\n context.lastRule = tr
ue;\n }\n\n const currentLastRule = context.lastRule;\n
if (rule.isRulesetLike(rule)) {\n context.lastRule = fal
se;\n }\n\n if (rule.genCSS) {\n rule.genCS
S(context, output);\n } else if (rule.value) {\n outpu
t.add(rule.value.toString());\n }\n\n context.lastRule = c
urrentLastRule;\n\n if (!context.lastRule && rule.isVisible()) {\n
output.add(context.compress ? '' : (`\\n${tabRuleStr}`));\n
} else {\n context.lastRule = false;\n }\n
}\n\n if (!this.root) {\n output.add((context.compress ? '}' :
`\\n${tabSetStr}}`));\n context.tabLevel--;\n }\n\n if
(!output.isEmpty() && !context.compress && this.firstRoot) {\n outpu
t.add('\\n');\n }\n },\n\n joinSelectors(paths, context, selectors)
{\n for (let s = 0; s < selectors.length; s++) {\n this.joinS
elector(paths, context, selectors[s]);\n }\n },\n\n joinSelector(pa
ths, context, selector) {\n\n function createParenthesis(elementsToPak, o
riginalElement) {\n let replacementParen, j;\n if (element
sToPak.length === 0) {\n replacementParen = new Paren(elementsToP
ak[0]);\n } else {\n const insideParent = new Array(el
ementsToPak.length);\n for (j = 0; j < elementsToPak.length; j++)
{\n insideParent[j] = new Element(\n
null,\n elementsToPak[j],\n origin
alElement.isVariable,\n originalElement._index,\n
originalElement._fileInfo\n );\n
}\n replacementParen = new Paren(new Selector(insideParent));\
n }\n return replacementParen;\n }\n\n funct
ion createSelector(containedElement, originalElement) {\n let element
, selector;\n element = new Element(null, containedElement, originalE
lement.isVariable, originalElement._index, originalElement._fileInfo);\n
selector = new Selector([element]);\n return selector;\n }
\n\n // joins selector path from `beginningPath` with selector path in `a
ddPath`\n // `replacedElement` contains element that is being replaced by
`addPath`\n // returns concatenated path\n function addReplacemen
tIntoPath(beginningPath, addPath, replacedElement, originalSelector) {\n
let newSelectorPath, lastSelector, newJoinedSelector;\n // our ne
w selector path\n newSelectorPath = [];\n\n // construct t
he joined selector - if & is the first thing this will be empty,\n //
if not newJoinedSelector will be the last set of elements in the selector\n
if (beginningPath.length > 0) {\n newSelectorPath = utils
.copyArray(beginningPath);\n lastSelector = newSelectorPath.pop()
;\n newJoinedSelector = originalSelector.createDerived(utils.copy
Array(lastSelector.elements));\n }\n else {\n
newJoinedSelector = originalSelector.createDerived([]);\n }\n\n
if (addPath.length > 0) {\n // /deep/ is a CSS4 selector
- (removed, so should deprecate)\n // that is valid without anyt
hing in front of it\n // so if the & does not have a combinator t
hat is \"\" or \" \" then\n // and there is a combinator on the p
arent, then grab that.\n // this also allows + a { & .b { .a & {
... though not sure why you would want to do that\n let combinato
r = replacedElement.combinator;\n\n const parentEl = addPath[0].e
lements[0];\n if (combinator.emptyOrWhitespace && !parentEl.combi
nator.emptyOrWhitespace) {\n combinator = parentEl.combinator
;\n }\n // join the elements so far with the first
part of the parent\n newJoinedSelector.elements.push(new Element
(\n combinator,\n parentEl.value,\n
replacedElement.isVariable,\n replacedElement._i
ndex,\n replacedElement._fileInfo\n ));\n
newJoinedSelector.elements = newJoinedSelector.elements.concat(addPat
h[0].elements.slice(1));\n }\n\n // now add the joined sel
ector - but only if it is not empty\n if (newJoinedSelector.elements.
length !== 0) {\n newSelectorPath.push(newJoinedSelector);\n
}\n\n // put together the parent selectors after the join (e.g
. the rest of the parent)\n if (addPath.length > 1) {\n
let restOfPath = addPath.slice(1);\n restOfPath = restOfPath.ma
p(function (selector) {\n return selector.createDerived(selec
tor.elements, []);\n });\n newSelectorPath = newSe
lectorPath.concat(restOfPath);\n }\n return newSelectorPat
h;\n }\n\n // joins selector path from `beginningPath` with every
selector path in `addPaths` array\n // `replacedElement` contains element
that is being replaced by `addPath`\n // returns array with all concaten
ated paths\n function addAllReplacementsIntoPath( beginningPath, addPaths
, replacedElement, originalSelector, result) {\n let j;\n
for (j = 0; j < beginningPath.length; j++) {\n const newSelectorP
ath = addReplacementIntoPath(beginningPath[j], addPaths, replacedElement, origin
alSelector);\n result.push(newSelectorPath);\n }\n
return result;\n }\n\n function mergeElementsOnToSelectors
(elements, selectors) {\n let i, sel;\n\n if (elements.len
gth === 0) {\n return ;\n }\n if (selectors
.length === 0) {\n selectors.push([ new Selector(elements) ]);\n
return;\n }\n\n for (i = 0; (sel = selector
s[i]); i++) {\n // if the previous thing in sel is a parent this
needs to join on to it\n if (sel.length > 0) {\n
sel[sel.length - 1] = sel[sel.length - 1].createDerived(sel[sel.length - 1].e
lements.concat(elements));\n }\n else {\n
sel.push(new Selector(elements));\n }\n }\n
}\n\n // replace all parent selectors inside `inSelector` by cont
ent of `context` array\n // resulting selectors are returned inside `path
s` array\n // returns true if `inSelector` contained at least one parent
selector\n function replaceParentSelector(paths, context, inSelector) {\n
// The paths are [[Selector]]\n // The first list is a li
st of comma separated selectors\n // The inner list is a list of inhe
ritance separated selectors\n // e.g.\n // .a, .b {\n
// .c {\n // }\n // }\n // == [[.a]
[.c]] [[.b] [.c]]\n //\n let i, j, k, currentElements, new
Selectors, selectorsMultiplied, sel, el, hadParentSelector = false, length, last
Selector;\n function findNestedSelector(element) {\n l
et maybeSelector;\n if (!(element.value instanceof Paren)) {\n
return null;\n }\n\n maybeSelecto
r = element.value.value;\n if (!(maybeSelector instanceof Selecto
r)) {\n return null;\n }\n\n re
turn maybeSelector;\n }\n\n // the elements from the curre
nt selector so far\n currentElements = [];\n // the curren
t list of new selectors to add to the path.\n // We will build it up.
We initiate it with one empty selector as we \"multiply\" the new selectors\n
// by the parents\n newSelectors = [\n []\n
];\n\n for (i = 0; (el = inSelector.elements[i]); i++) {\n
// non parent reference elements just get added\n
if (el.value !== '&') {\n const nestedSelector = findNestedS
elector(el);\n if (nestedSelector != null) {\n
// merge the current list of non parent selector elements\n
// on to the current list of selectors to add\n
mergeElementsOnToSelectors(currentElements, newSelectors);\n\n
const nestedPaths = [];\n let replaced;\n
const replacedNewSelectors = [];\n repla
ced = replaceParentSelector(nestedPaths, context, nestedSelector);\n
hadParentSelector = hadParentSelector || replaced;\n
// the nestedPaths array should have only one member - replaceParentSele
ctor does not multiply selectors\n for (k = 0; k < nested
Paths.length; k++) {\n const replacementSelector = cr
eateSelector(createParenthesis(nestedPaths[k], el), el);\n
addAllReplacementsIntoPath(newSelectors, [replacementSelector], el, inSele
ctor, replacedNewSelectors);\n }\n
newSelectors = replacedNewSelectors;\n currentElements =
[];\n } else {\n currentElements.push
(el);\n }\n\n } else {\n ha
dParentSelector = true;\n // the new list of selectors to add
\n selectorsMultiplied = [];\n\n // merge
the current list of non parent selector elements\n // on to t
he current list of selectors to add\n mergeElementsOnToSelect
ors(currentElements, newSelectors);\n\n // loop through our c
urrent selectors\n for (j = 0; j < newSelectors.length; j++)
{\n sel = newSelectors[j];\n // if
we don't have any parent paths, the & might be in a mixin so that it can be use
d\n // whether there are parents or not\n
if (context.length === 0) {\n // the combinat
or used on el should now be applied to the next element instead so that\n
// it is not lost\n if (sel.leng
th > 0) {\n sel[0].elements.push(new Element(el.c
ombinator, '', el.isVariable, el._index, el._fileInfo));\n
}\n selectorsMultiplied.push(sel);\n
}\n else {\n // a
nd the parent selectors\n for (k = 0; k < context.len
gth; k++) {\n // We need to put the current selec
tors\n // then join the last selector's elements
on to the parents selectors\n const newSelectorPa
th = addReplacementIntoPath(sel, context[k], el, inSelector);\n
// add that to our new set of selectors\n
selectorsMultiplied.push(newSelectorPath);\n
}\n }\n }\n\n // ou
r new selectors has been multiplied, so reset the state\n new
Selectors = selectorsMultiplied;\n currentElements = [];\n
}\n }\n\n // if we have any elements left ove
r (e.g. .a& .b == .b)\n // add them on to all the current selectors\n
mergeElementsOnToSelectors(currentElements, newSelectors);\n\n
for (i = 0; i < newSelectors.length; i++) {\n length = newS
electors[i].length;\n if (length > 0) {\n path
s.push(newSelectors[i]);\n lastSelector = newSelectors[i][len
gth - 1];\n newSelectors[i][length - 1] = lastSelector.create
Derived(lastSelector.elements, inSelector.extendList);\n }\n
}\n\n return hadParentSelector;\n }\n\n function
deriveSelector(visibilityInfo, deriveFrom) {\n const newSelector = d
eriveFrom.createDerived(deriveFrom.elements, deriveFrom.extendList, deriveFrom.e
valdCondition);\n newSelector.copyVisibilityInfo(visibilityInfo);\n
return newSelector;\n }\n\n // joinSelector code follows
\n let i, newPaths, hadParentSelector;\n\n newPaths = [];\n
hadParentSelector = replaceParentSelector(newPaths, context, selector);\n\n
if (!hadParentSelector) {\n if (context.length > 0) {\n
newPaths = [];\n for (i = 0; i < context.length; i++) {\n\n
const concatenated = context[i].map(deriveSelector.bind(this
, selector.visibilityInfo()));\n\n concatenated.push(selector
);\n newPaths.push(concatenated);\n }\n
}\n else {\n newPaths = [[selector]];\n
}\n }\n\n for (i = 0; i < newPaths.length; i++) {\n p
aths.push(newPaths[i]);\n }\n\n }\n});\n\nexport default Ruleset;\n","
import Node from './node';\nimport Selector from './selector';\nimport Ruleset f
rom './ruleset';\nimport Anonymous from './anonymous';\n\nconst AtRule = functio
n(\n name,\n value,\n rules,\n index,\n currentFileInfo,\n deb
ugInfo,\n isRooted,\n visibilityInfo\n) {\n let i;\n\n this.name =
name;\n this.value = (value instanceof Node) ? value : (value ? new Anonymous
(value) : value);\n if (rules) {\n if (Array.isArray(rules)) {\n
this.rules = rules;\n } else {\n this.rules = [rules];\n
this.rules[0].selectors = (new Selector([], null, null, index, curre
ntFileInfo)).createEmptySelectors();\n }\n for (i = 0; i < this.ru
les.length; i++) {\n this.rules[i].allowImports = true;\n }\n
this.setParent(this.rules, this);\n }\n this._index = index;\n t
his._fileInfo = currentFileInfo;\n this.debugInfo = debugInfo;\n this.isRo
oted = isRooted || false;\n this.copyVisibilityInfo(visibilityInfo);\n thi
s.allowRoot = true;\n}\n\nAtRule.prototype = Object.assign(new Node(), {\n ty
pe: 'AtRule',\n accept(visitor) {\n const value = this.value, rules =
this.rules;\n if (rules) {\n this.rules = visitor.visitArray(r
ules);\n }\n if (value) {\n this.value = visitor.visit(
value);\n }\n },\n\n isRulesetLike() {\n return this.rules |
| !this.isCharset();\n },\n\n isCharset() {\n return '@charset' ===
this.name;\n },\n\n genCSS(context, output) {\n const value = this
.value, rules = this.rules;\n output.add(this.name, this.fileInfo(), this
.getIndex());\n if (value) {\n output.add(' ');\n v
alue.genCSS(context, output);\n }\n if (rules) {\n this
.outputRuleset(context, output, rules);\n } else {\n output.ad
d(';');\n }\n },\n\n eval(context) {\n let mediaPathBackup,
mediaBlocksBackup, value = this.value, rules = this.rules;\n\n // media s
tored inside other atrule should not bubble over it\n // backpup media bu
bbling information\n mediaPathBackup = context.mediaPath;\n mediaB
locksBackup = context.mediaBlocks;\n // deleted media bubbling informatio
n\n context.mediaPath = [];\n context.mediaBlocks = [];\n\n
if (value) {\n value = value.eval(context);\n }\n if (
rules) {\n // assuming that there is only one rule at this point - th
at is how parser constructs the rule\n rules = [rules[0].eval(context
)];\n rules[0].root = true;\n }\n // restore media bubb
ling information\n context.mediaPath = mediaPathBackup;\n context.
mediaBlocks = mediaBlocksBackup;\n\n return new AtRule(this.name, value,
rules,\n this.getIndex(), this.fileInfo(), this.debugInfo, this.isRoo
ted, this.visibilityInfo());\n },\n\n variable(name) {\n if (this.r
ules) {\n // assuming that there is only one rule at this point - tha
t is how parser constructs the rule\n return Ruleset.prototype.variab
le.call(this.rules[0], name);\n }\n },\n\n find() {\n if (th
is.rules) {\n // assuming that there is only one rule at this point -
that is how parser constructs the rule\n return Ruleset.prototype.fi
nd.apply(this.rules[0], arguments);\n }\n },\n\n rulesets() {\n
if (this.rules) {\n // assuming that there is only one rule at th
is point - that is how parser constructs the rule\n return Ruleset.pr
ototype.rulesets.apply(this.rules[0]);\n }\n },\n\n outputRuleset(c
ontext, output, rules) {\n const ruleCnt = rules.length;\n let i;\
n context.tabLevel = (context.tabLevel | 0) + 1;\n\n // Compressed
\n if (context.compress) {\n output.add('{');\n for
(i = 0; i < ruleCnt; i++) {\n rules[i].genCSS(context, output);\
n }\n output.add('}');\n context.tabLevel--;\n
return;\n }\n\n // Non-compressed\n const tabSet
Str = `\\n${Array(context.tabLevel).join(' ')}`, tabRuleStr = `${tabSetStr} `;
\n if (!ruleCnt) {\n output.add(` {${tabSetStr}}`);\n }
else {\n output.add(` {${tabRuleStr}`);\n rules[0].genCSS
(context, output);\n for (i = 1; i < ruleCnt; i++) {\n
output.add(tabRuleStr);\n rules[i].genCSS(context, output);\n
}\n output.add(`${tabSetStr}}`);\n }\n\n conte
xt.tabLevel--;\n }\n});\n\nexport default AtRule;\n","import Node from './nod
e';\nimport contexts from '../contexts';\nimport * as utils from '../utils';\n\n
const DetachedRuleset = function(ruleset, frames) {\n this.ruleset = ruleset;
\n this.frames = frames;\n this.setParent(this.ruleset, this);\n};\n\nDeta
chedRuleset.prototype = Object.assign(new Node(), {\n type: 'DetachedRuleset'
,\n evalFirst: true,\n\n accept(visitor) {\n this.ruleset = visitor
.visit(this.ruleset);\n },\n\n eval(context) {\n const frames = thi
s.frames || utils.copyArray(context.frames);\n return new DetachedRuleset
(this.ruleset, frames);\n },\n\n callEval(context) {\n return this.
ruleset.eval(this.frames ? new contexts.Eval(context, this.frames.concat(context
.frames)) : context);\n }\n});\n\nexport default DetachedRuleset;\n","import
Node from './node';\nimport unitConversions from '../data/unit-conversions';\nim
port * as utils from '../utils';\n\nconst Unit = function(numerator, denominator
, backupUnit) {\n this.numerator = numerator ? utils.copyArray(numerator).sor
t() : [];\n this.denominator = denominator ? utils.copyArray(denominator).sor
t() : [];\n if (backupUnit) {\n this.backupUnit = backupUnit;\n } e
lse if (numerator && numerator.length) {\n this.backupUnit = numerator[0]
;\n }\n};\n\nUnit.prototype = Object.assign(new Node(), {\n type: 'Unit',\
n\n clone() {\n return new Unit(utils.copyArray(this.numerator), utils
.copyArray(this.denominator), this.backupUnit);\n },\n\n genCSS(context, o
utput) {\n // Dimension checks the unit is singular and throws an error i
f in strict math mode.\n const strictUnits = context && context.strictUni
ts;\n if (this.numerator.length === 1) {\n output.add(this.num
erator[0]); // the ideal situation\n } else if (!strictUnits && this.back
upUnit) {\n output.add(this.backupUnit);\n } else if (!strictU
nits && this.denominator.length) {\n output.add(this.denominator[0]);
\n }\n },\n\n toString() {\n let i, returnStr = this.numerat
or.join('*');\n for (i = 0; i < this.denominator.length; i++) {\n
returnStr += `/${this.denominator[i]}`;\n }\n return returnStr
;\n },\n\n compare(other) {\n return this.is(other.toString()) ? 0
: undefined;\n },\n\n is(unitString) {\n return this.toString().toU
pperCase() === unitString.toUpperCase();\n },\n\n isLength() {\n re
turn RegExp('^(px|em|ex|ch|rem|in|cm|mm|pc|pt|ex|vw|vh|vmin|vmax)$', 'gi').test(
this.toCSS());\n },\n\n isEmpty() {\n return this.numerator.length
=== 0 && this.denominator.length === 0;\n },\n\n isSingular() {\n r
eturn this.numerator.length <= 1 && this.denominator.length === 0;\n },\n\n
map(callback) {\n let i;\n\n for (i = 0; i < this.numerator.leng
th; i++) {\n this.numerator[i] = callback(this.numerator[i], false);\
n }\n\n for (i = 0; i < this.denominator.length; i++) {\n
this.denominator[i] = callback(this.denominator[i], true);\n }\n },
\n\n usedUnits() {\n let group;\n const result = {};\n l
et mapUnit;\n let groupName;\n\n mapUnit = function (atomicUnit) {
\n /* jshint loopfunc:true */\n if (group.hasOwnProperty(a
tomicUnit) && !result[groupName]) {\n result[groupName] = atomicU
nit;\n }\n\n return atomicUnit;\n };\n\n for
(groupName in unitConversions) {\n if (unitConversions.hasOwnPropert
y(groupName)) {\n group = unitConversions[groupName];\n\n
this.map(mapUnit);\n }\n }\n\n return result;\n
},\n\n cancel() {\n const counter = {};\n let atomicUnit;\n
let i;\n\n for (i = 0; i < this.numerator.length; i++) {\n
atomicUnit = this.numerator[i];\n counter[atomicUnit] = (counter
[atomicUnit] || 0) + 1;\n }\n\n for (i = 0; i < this.denominator.l
ength; i++) {\n atomicUnit = this.denominator[i];\n counte
r[atomicUnit] = (counter[atomicUnit] || 0) - 1;\n }\n\n this.numer
ator = [];\n this.denominator = [];\n\n for (atomicUnit in counter
) {\n if (counter.hasOwnProperty(atomicUnit)) {\n cons
t count = counter[atomicUnit];\n\n if (count > 0) {\n
for (i = 0; i < count; i++) {\n this.numerator.pu
sh(atomicUnit);\n }\n } else if (count < 0) {\
n for (i = 0; i < -count; i++) {\n thi
s.denominator.push(atomicUnit);\n }\n }\n
}\n }\n\n this.numerator.sort();\n this.denominator.
sort();\n }\n});\n\nexport default Unit;\n","import Node from './node';\nimpo
rt unitConversions from '../data/unit-conversions';\nimport Unit from './unit';\
nimport Color from './color';\n\n//\n// A number with a unit\n//\nconst Dimensio
n = function(value, unit) {\n this.value = parseFloat(value);\n if (isNaN(
this.value)) {\n throw new Error('Dimension is not a number.');\n }\n
this.unit = (unit && unit instanceof Unit) ? unit :\n new Unit(unit ?
[unit] : undefined);\n this.setParent(this.unit, this);\n};\n\nDimension.prot
otype = Object.assign(new Node(), {\n type: 'Dimension',\n\n accept(visito
r) {\n this.unit = visitor.visit(this.unit);\n },\n\n eval(context)
{\n return this;\n },\n\n toColor() {\n return new Color([t
his.value, this.value, this.value]);\n },\n\n genCSS(context, output) {\n
if ((context && context.strictUnits) && !this.unit.isSingular()) {\n
throw new Error(`Multiple units in dimension. Correct the units or use th
e unit function. Bad unit: ${this.unit.toString()}`);\n }\n\n cons
t value = this.fround(context, this.value);\n let strValue = String(value
);\n\n if (value !== 0 && value < 0.000001 && value > -0.000001) {\n
// would be output 1e-6 etc.\n strValue = value.toFixed(20).re
place(/0+$/, '');\n }\n\n if (context && context.compress) {\n
// Zero values doesn't need a unit\n if (value === 0 && this.
unit.isLength()) {\n output.add(strValue);\n retur
n;\n }\n\n // Float values doesn't need a leading zero\n
if (value > 0 && value < 1) {\n strValue = (strValue).s
ubstr(1);\n }\n }\n\n output.add(strValue);\n th
is.unit.genCSS(context, output);\n },\n\n // In an operation between two D
imensions,\n // we default to the first Dimension's unit,\n // so `1px + 2
` will yield `3px`.\n operate(context, op, other) {\n /* jshint noempt
y:false */\n let value = this._operate(context, op, this.value, other.val
ue);\n let unit = this.unit.clone();\n\n if (op === '+' || op ===
'-') {\n if (unit.numerator.length === 0 && unit.denominator.length =
== 0) {\n unit = other.unit.clone();\n if (this.un
it.backupUnit) {\n unit.backupUnit = this.unit.backupUnit;\n
}\n } else if (other.unit.numerator.length === 0 && un
it.denominator.length === 0) {\n // do nothing\n } els
e {\n other = other.convertTo(this.unit.usedUnits());\n\n
if (context.strictUnits && other.unit.toString() !== unit.toString()) {\
n throw new Error(`Incompatible units. Change the units or us
e the unit function. `\n + `Bad units: '${unit.toString()
}' and '${other.unit.toString()}'.`);\n }\n\n valu
e = this._operate(context, op, this.value, other.value);\n }\n
} else if (op === '*') {\n unit.numerator = unit.numerator.concat(ot
her.unit.numerator).sort();\n unit.denominator = unit.denominator.con
cat(other.unit.denominator).sort();\n unit.cancel();\n } else
if (op === '/') {\n unit.numerator = unit.numerator.concat(other.unit
.denominator).sort();\n unit.denominator = unit.denominator.concat(ot
her.unit.numerator).sort();\n unit.cancel();\n }\n retu
rn new Dimension(value, unit);\n },\n\n compare(other) {\n let a, b
;\n\n if (!(other instanceof Dimension)) {\n return undefined;
\n }\n\n if (this.unit.isEmpty() || other.unit.isEmpty()) {\n
a = this;\n b = other;\n } else {\n a = this
.unify();\n b = other.unify();\n if (a.unit.compare(b.unit
) !== 0) {\n return undefined;\n }\n }\n\n
return Node.numericCompare(a.value, b.value);\n },\n\n unify() {\n
return this.convertTo({ length: 'px', duration: 's', angle: 'rad' });\n },
\n\n convertTo(conversions) {\n let value = this.value;\n const
unit = this.unit.clone();\n let i;\n let groupName;\n let
group;\n let targetUnit;\n let derivedConversions = {};\n l
et applyUnit;\n\n if (typeof conversions === 'string') {\n for
(i in unitConversions) {\n if (unitConversions[i].hasOwnProperty
(conversions)) {\n derivedConversions = {};\n
derivedConversions[i] = conversions;\n }\n }\n
conversions = derivedConversions;\n }\n applyUnit = functi
on (atomicUnit, denominator) {\n /* jshint loopfunc:true */\n
if (group.hasOwnProperty(atomicUnit)) {\n if (denominator) {\
n value = value / (group[atomicUnit] / group[targetUnit]);\n
} else {\n value = value * (group[atomicUnit]
/ group[targetUnit]);\n }\n\n return targetUnit;\n
}\n\n return atomicUnit;\n };\n\n for (grou
pName in conversions) {\n if (conversions.hasOwnProperty(groupName))
{\n targetUnit = conversions[groupName];\n group =
unitConversions[groupName];\n\n unit.map(applyUnit);\n
}\n }\n\n unit.cancel();\n\n return new Dimension(value,
unit);\n }\n});\n\nexport default Dimension;\n","import Node from './node';\n
import Color from './color';\nimport Dimension from './dimension';\nimport * as
Constants from '../constants';\nconst MATH = Constants.Math;\n\n\nconst Operatio
n = function(op, operands, isSpaced) {\n this.op = op.trim();\n this.opera
nds = operands;\n this.isSpaced = isSpaced;\n};\n\nOperation.prototype = Obje
ct.assign(new Node(), {\n type: 'Operation',\n\n accept(visitor) {\n
this.operands = visitor.visitArray(this.operands);\n },\n\n eval(context
) {\n let a = this.operands[0].eval(context), b = this.operands[1].eval(c
ontext), op;\n\n if (context.isMathOn(this.op)) {\n op = this.
op === './' ? '/' : this.op;\n if (a instanceof Dimension && b instan
ceof Color) {\n a = a.toColor();\n }\n if (
b instanceof Dimension && a instanceof Color) {\n b = b.toColor()
;\n }\n if (!a.operate || !b.operate) {\n i
f (\n (a instanceof Operation || b instanceof Operation)\n
&& a.op === '/' && context.math === MATH.PARENS_DIVISION\n
) {\n return new Operation(this.op, [a, b], this.i
sSpaced);\n }\n throw { type: 'Operation',\n
message: 'Operation on an invalid type' };\n }\n\n
return a.operate(context, op, b);\n } else {\n return n
ew Operation(this.op, [a, b], this.isSpaced);\n }\n },\n\n genCSS(c
ontext, output) {\n this.operands[0].genCSS(context, output);\n if
(this.isSpaced) {\n output.add(' ');\n }\n output.add(
this.op);\n if (this.isSpaced) {\n output.add(' ');\n }
\n this.operands[1].genCSS(context, output);\n }\n});\n\nexport defaul
t Operation;\n","import Node from './node';\nimport Paren from './paren';\nimpor
t Comment from './comment';\nimport Dimension from './dimension';\n\nconst Expre
ssion = function(value, noSpacing) {\n this.value = value;\n this.noSpacin
g = noSpacing;\n if (!value) {\n throw new Error('Expression requires
an array parameter');\n }\n};\n\nExpression.prototype = Object.assign(new Nod
e(), {\n type: 'Expression',\n\n accept(visitor) {\n this.value = v
isitor.visitArray(this.value);\n },\n\n eval(context) {\n let retur
nValue;\n const mathOn = context.isMathOn();\n const inParenthesis
= this.parens;\n\n let doubleParen = false;\n if (inParenthesis)
{\n context.inParenthesis();\n }\n if (this.value.lengt
h > 1) {\n returnValue = new Expression(this.value.map(function (e) {
\n if (!e.eval) {\n return e;\n
}\n return e.eval(context);\n }), this.noSpacing);\n
} else if (this.value.length === 1) {\n if (this.value[0].pare
ns && !this.value[0].parensInOp && !context.inCalc) {\n doublePar
en = true;\n }\n returnValue = this.value[0].eval(context)
;\n } else {\n returnValue = this;\n }\n if (inP
arenthesis) {\n context.outOfParenthesis();\n }\n if (t
his.parens && this.parensInOp && !mathOn && !doubleParen \n && (!(ret
urnValue instanceof Dimension))) {\n returnValue = new Paren(returnVa
lue);\n }\n return returnValue;\n },\n\n genCSS(context, out
put) {\n for (let i = 0; i < this.value.length; i++) {\n this.
value[i].genCSS(context, output);\n if (!this.noSpacing && i + 1 < th
is.value.length) {\n output.add(' ');\n }\n }\n
},\n\n throwAwayComments() {\n this.value = this.value.filter(func
tion(v) {\n return !(v instanceof Comment);\n });\n }\n});\
n\nexport default Expression;\n","import Expression from '../tree/expression';\n
\nclass functionCaller {\n constructor(name, context, index, currentFileInfo)
{\n this.name = name.toLowerCase();\n this.index = index;\n
this.context = context;\n this.currentFileInfo = currentFileInfo;\n\n
this.func = context.frames[0].functionRegistry.get(this.name);\n }\n\n
isValid() {\n return Boolean(this.func);\n }\n\n call(args) {\n
if (!(Array.isArray(args))) {\n args = [args];\n }\n
const evalArgs = this.func.evalArgs;\n if (evalArgs !== false) {\n
args = args.map(a => a.eval(this.context));\n }\n const
commentFilter = item => !(item.type === 'Comment');\n\n // This code is t
errible and should be replaced as per this issue...\n // https://github.c
om/less/less.js/issues/2477\n args = args\n .filter(commentFil
ter)\n .map(item => {\n if (item.type === 'Expression'
) {\n const subNodes = item.value.filter(commentFilter);\n
if (subNodes.length === 1) {\n // https:
//github.com/less/less.js/issues/3616\n if (item.parens &
& subNodes[0].op === '/') {\n return item;\n
}\n return subNodes[0];\n
} else {\n return new Expression(subNodes);\n
}\n }\n return item;\n });\n
\n if (evalArgs === false) {\n return this.func(this.context,
...args);\n }\n\n return this.func(...args);\n }\n}\n\nexport d
efault functionCaller;\n","/*! *************************************************
****************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPerm
ission to use, copy, modify, and/or distribute this software for any\r\npurpose
with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\"
AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDI
NG ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL T
HE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAG
ES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHE
THER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING O
UT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n*****
************************************************************************ */\r\n/
* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n
extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceo
f Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) {
for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }
;\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b
) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new Typ
eError(\"Class extends value \" + String(b) + \" is not a constructor or null\")
;\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, n
ew __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Objec
t.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.l
ength; i < n; i++) {\r\n s = arguments[i];\r\n for (var p
in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\
r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n
}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in
s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n
t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \
"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i <
p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.pro
pertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n
}\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target,
key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null
? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typ
eof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Refl
ect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators
.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(t
arget, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.define
Property(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, dec
orator) {\r\n return function (target, key) { decorator(target, key, paramInd
ex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n
if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\"
) return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport functi
on __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) {
return value instanceof P ? value : new P(function (resolve) { resolve(value);
}); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n
function fulfilled(value) { try { step(generator.next(value)); } catch (e)
{ reject(e); } }\r\n function rejected(value) { try { step(generator[\"th
row\"](value)); } catch (e) { reject(e); } }\r\n function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, reject
ed); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).
next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]
; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw
\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.
iterator] = function() { return this; }), g;\r\n function verb(n) { return fu
nction (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if
(f) throw new TypeError(\"Generator is already executing.\");\r\n while (
_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ?
y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call
(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.valu
e];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; b
reak;\r\n case 4: _.label++; return { value: op[1], done: false }
;\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n
case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n d
efault:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length
- 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1];
break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label =
t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label
= t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\
r\n _.trys.pop(); continue;\r\n }\r\n o
p = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finall
y { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ?
op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding =
Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\
n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m
[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;
\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n
for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(
o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n
var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i =
0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\
") return {\r\n next: function () {\r\n if (o && i >= o.length
) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n
}\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symb
ol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n
var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) r
eturn o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while
((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r
\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\
r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\
r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n
\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [],
i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i])
);\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadA
rrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s +=
arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r
\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n
r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadAr
ray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0,
l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n
if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[
i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\
n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.
v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(this
Arg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeEr
ror(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(th
isArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(
\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return thi
s; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Pr
omise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e);
} }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.va
lue.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(val
ue) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\
", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resum
e(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n
var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { t
hrow e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; },
i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ?
{ value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n
}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) th
row new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Sy
mbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \
"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\
"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this
; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Prom
ise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.
value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve
(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\
nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.definePro
perty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked
.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object
.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enume
rable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\
n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule)
return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod)
if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createB
inding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return re
sult;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && m
od.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPriv
ateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw n
ew TypeError(\"Private accessor was defined without a getter\");\r\n if (type
of state === \"function\" ? receiver !== state || !f : !state.has(receiver)) thr
ow new TypeError(\"Cannot read private member from an object whose class did not
declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(recei
ver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPri
vateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw
new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" &&
!f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n
if (typeof state === \"function\" ? receiver !== state || !f : !state.has(re
ceiver)) throw new TypeError(\"Cannot write private member to an object whose cl
ass did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, valu
e) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import
Node from './node';\nimport Anonymous from './anonymous';\nimport FunctionCalle
r from '../functions/function-caller';\n\n//\n// A function call node.\n//\ncons
t Call = function(name, args, index, currentFileInfo) {\n this.name = name;\n
this.args = args;\n this.calc = name === 'calc';\n this._index = index
;\n this._fileInfo = currentFileInfo;\n}\n\nCall.prototype = Object.assign(ne
w Node(), {\n type: 'Call',\n\n accept(visitor) {\n if (this.args)
{\n this.args = visitor.visitArray(this.args);\n }\n },\n\n
//\n // When evaluating a function call,\n // we either find the funct
ion in the functionRegistry,\n // in which case we call it, passing the eval
uated arguments,\n // if this returns null or we cannot find the function, we
\n // simply print it out as it appeared originally [2].\n //\n // The
reason why we evaluate the arguments, is in the case where\n // we try to pas
s a variable to a function, like: `saturate(@color)`.\n // The function shoul
d receive the value, not the variable.\n //\n eval(context) {\n /**
\n * Turn off math for calc(), and switch back on for evaluating nested
functions\n */\n const currentMathContext = context.mathOn;\n
context.mathOn = !this.calc;\n if (this.calc || context.inCalc) {\n
context.enterCalc();\n }\n\n const exitCalc = () => {\n
if (this.calc || context.inCalc) {\n context.exitCalc(
);\n }\n context.mathOn = currentMathContext;\n };\
n\n let result;\n const funcCaller = new FunctionCaller(this.name,
context, this.getIndex(), this.fileInfo());\n\n if (funcCaller.isValid()
) {\n try {\n result = funcCaller.call(this.args);\n
exitCalc();\n } catch (e) {\n if (e.hasO
wnProperty('line') && e.hasOwnProperty('column')) {\n throw e
;\n }\n throw { \n type: e.type
|| 'Runtime',\n message: `Error evaluating function \\`${thi
s.name}\\`${e.message ? `: ${e.message}` : ''}`,\n index: thi
s.getIndex(), \n filename: this.fileInfo().filename,\n
line: e.lineNumber,\n column: e.columnNumber\n
};\n }\n }\n\n if (result !== null && res
ult !== undefined) {\n // Results that that are not nodes are cast as
Anonymous nodes\n // Falsy values or booleans are returned as empty
nodes\n if (!(result instanceof Node)) {\n if (!result
|| result === true) {\n result = new Anonymous(null); \n
}\n else {\n result = new Anonymou
s(result.toString()); \n }\n \n }\n
result._index = this._index;\n result._fileInfo = this._fileI
nfo;\n return result;\n }\n\n const args = this.args.ma
p(a => a.eval(context));\n exitCalc();\n\n return new Call(this.na
me, args, this.getIndex(), this.fileInfo());\n },\n\n genCSS(context, outp
ut) {\n output.add(`${this.name}(`, this.fileInfo(), this.getIndex());\n\
n for (let i = 0; i < this.args.length; i++) {\n this.args[i].
genCSS(context, output);\n if (i + 1 < this.args.length) {\n
output.add(', ');\n }\n }\n\n output.add(')');\n
}\n});\n\nexport default Call;\n","import Node from './node';\nimport Call f
rom './call';\n\nconst Variable = function(name, index, currentFileInfo) {\n
this.name = name;\n this._index = index;\n this._fileInfo = currentFileInf
o;\n};\n\nVariable.prototype = Object.assign(new Node(), {\n type: 'Variable'
,\n\n eval(context) {\n let variable, name = this.name;\n\n if
(name.indexOf('@@') === 0) {\n name = `@${new Variable(name.slice(1),
this.getIndex(), this.fileInfo()).eval(context).value}`;\n }\n\n
if (this.evaluating) {\n throw { type: 'Name',\n messa
ge: `Recursive variable definition for ${name}`,\n filename: this
.fileInfo().filename,\n index: this.getIndex() };\n }\n\n
this.evaluating = true;\n\n variable = this.find(context.frames, f
unction (frame) {\n const v = frame.variable(name);\n if (
v) {\n if (v.important) {\n const importantSco
pe = context.importantScope[context.importantScope.length - 1];\n
importantScope.important = v.important;\n }\n
// If in calc, wrap vars in a function call to cascade evaluate args first\n
if (context.inCalc) {\n return (new Call('_SELF'
, [v.value])).eval(context);\n }\n else {\n
return v.value.eval(context);\n }\n }\n
});\n if (variable) {\n this.evaluating = false;\n
return variable;\n } else {\n throw { type: 'Name',\n
message: `variable ${name} is undefined`,\n filename
: this.fileInfo().filename,\n index: this.getIndex() };\n
}\n },\n\n find(obj, fun) {\n for (let i = 0, r; i < obj.length; i+
+) {\n r = fun.call(obj, obj[i]);\n if (r) { return r; }\n
}\n return null;\n }\n});\n\nexport default Variable;\n","impo
rt Node from './node';\nimport Declaration from './declaration';\n\nconst Proper
ty = function(name, index, currentFileInfo) {\n this.name = name;\n this._
index = index;\n this._fileInfo = currentFileInfo;\n};\n\nProperty.prototype
= Object.assign(new Node(), {\n type: 'Property',\n\n eval(context) {\n
let property;\n const name = this.name;\n // TODO: shorten th
is reference\n const mergeRules = context.pluginManager.less.visitors.ToC
SSVisitor.prototype._mergeRules;\n\n if (this.evaluating) {\n
throw { type: 'Name',\n message: `Recursive property reference fo
r ${name}`,\n filename: this.fileInfo().filename,\n
index: this.getIndex() };\n }\n\n this.evaluating = true;\n\n
property = this.find(context.frames, function (frame) {\n let v;
\n const vArr = frame.property(name);\n if (vArr) {\n
for (let i = 0; i < vArr.length; i++) {\n v = vArr
[i];\n\n vArr[i] = new Declaration(v.name,\n
v.value,\n v.important,\n v
.merge,\n v.index,\n v.currentFile
Info,\n v.inline,\n v.variable\n
);\n }\n mergeRules(vArr);\n\n
v = vArr[vArr.length - 1];\n if (v.important) {\n
const importantScope = context.importantScope[context.importan
tScope.length - 1];\n importantScope.important = v.important;
\n }\n v = v.value.eval(context);\n
return v;\n }\n });\n if (property) {\n thi
s.evaluating = false;\n return property;\n } else {\n
throw { type: 'Name',\n message: `Property '${name}' is undefi
ned`,\n filename: this.currentFileInfo.filename,\n
index: this.index };\n }\n },\n\n find(obj, fun) {\n for (l
et i = 0, r; i < obj.length; i++) {\n r = fun.call(obj, obj[i]);\n
if (r) { return r; }\n }\n return null;\n }\n});\n\nex
port default Property;\n","import Node from './node';\n\nconst Attribute = funct
ion(key, op, value, cif) {\n this.key = key;\n this.op = op;\n this.val
ue = value;\n this.cif = cif;\n}\n\nAttribute.prototype = Object.assign(new N
ode(), {\n type: 'Attribute',\n\n eval(context) {\n return new Attr
ibute(\n this.key.eval ? this.key.eval(context) : this.key,\n
this.op,\n (this.value && this.value.eval) ? this.value.eval(cont
ext) : this.value,\n this.cif\n );\n },\n\n genCSS(conte
xt, output) {\n output.add(this.toCSS(context));\n },\n\n toCSS(con
text) {\n let value = this.key.toCSS ? this.key.toCSS(context) : this.key
;\n\n if (this.op) {\n value += this.op;\n value +=
(this.value.toCSS ? this.value.toCSS(context) : this.value);\n }\n\n
if (this.cif) {\n value = value + \" \" + this.cif;\n }\n\
n return `[${value}]`;\n }\n});\n\nexport default Attribute;\n","impor
t Node from './node';\nimport Variable from './variable';\nimport Property from
'./property';\n\n\nconst Quoted = function(str, content, escaped, index, current
FileInfo) {\n this.escaped = (escaped == null) ? true : escaped;\n this.va
lue = content || '';\n this.quote = str.charAt(0);\n this._index = index;\
n this._fileInfo = currentFileInfo;\n this.variableRegex = /@\\{([\\w-]+)\
\}/g;\n this.propRegex = /\\$\\{([\\w-]+)\\}/g;\n this.allowRoot = escaped
;\n};\n\nQuoted.prototype = Object.assign(new Node(), {\n type: 'Quoted',\n\n
genCSS(context, output) {\n if (!this.escaped) {\n output.
add(this.quote, this.fileInfo(), this.getIndex());\n }\n output.ad
d(this.value);\n if (!this.escaped) {\n output.add(this.quote)
;\n }\n },\n\n containsVariables() {\n return this.value.mat
ch(this.variableRegex);\n },\n\n eval(context) {\n const that = thi
s;\n let value = this.value;\n const variableReplacement = functio
n (_, name) {\n const v = new Variable(`@${name}`, that.getIndex(), t
hat.fileInfo()).eval(context, true);\n return (v instanceof Quoted) ?
v.value : v.toCSS();\n };\n const propertyReplacement = function
(_, name) {\n const v = new Property(`$${name}`, that.getIndex(), tha
t.fileInfo()).eval(context, true);\n return (v instanceof Quoted) ? v
.value : v.toCSS();\n };\n function iterativeReplace(value, regexp
, replacementFnc) {\n let evaluatedValue = value;\n do {\n
value = evaluatedValue.toString();\n evaluatedVal
ue = value.replace(regexp, replacementFnc);\n } while (value !== eval
uatedValue);\n return evaluatedValue;\n }\n value = ite
rativeReplace(value, this.variableRegex, variableReplacement);\n value =
iterativeReplace(value, this.propRegex, propertyReplacement);\n return ne
w Quoted(this.quote + value + this.quote, value, this.escaped, this.getIndex(),
this.fileInfo());\n },\n\n compare(other) {\n // when comparing quo
ted strings allow the quote to differ\n if (other.type === 'Quoted' && !t
his.escaped && !other.escaped) {\n return Node.numericCompare(this.va
lue, other.value);\n } else {\n return other.toCSS && this.toC
SS() === other.toCSS() ? 0 : undefined;\n }\n }\n});\n\nexport default
Quoted;\n","import Node from './node';\n\nfunction escapePath(path) {\n retu
rn path.replace(/[\\(\\)'\"\\s]/g, function(match) { return `\\\\${match}`; });\
n}\n\nconst URL = function(val, index, currentFileInfo, isEvald) {\n this.val
ue = val;\n this._index = index;\n this._fileInfo = currentFileInfo;\n
this.isEvald = isEvald;\n};\n\nURL.prototype = Object.assign(new Node(), {\n
type: 'Url',\n\n accept(visitor) {\n this.value = visitor.visit(this.v
alue);\n },\n\n genCSS(context, output) {\n output.add('url(');\n
this.value.genCSS(context, output);\n output.add(')');\n },\n\n
eval(context) {\n const val = this.value.eval(context);\n let r
ootpath;\n\n if (!this.isEvald) {\n // Add the rootpath if the
URL requires a rewrite\n rootpath = this.fileInfo() && this.fileInfo
().rootpath;\n if (typeof rootpath === 'string' &&\n t
ypeof val.value === 'string' &&\n context.pathRequiresRewrite(val
.value))Â {\n if (!val.quote) {\n rootpath = es
capePath(rootpath);\n }\n val.value = context.rewr
itePath(val.value, rootpath);\n } else {\n val.value =
context.normalizePath(val.value);\n }\n\n // Add url args
if enabled\n if (context.urlArgs) {\n if (!val.value.
match(/^\\s*data:/)) {\n const delimiter = val.value.indexOf(
'?') === -1 ? '?' : '&';\n const urlArgs = delimiter + contex
t.urlArgs;\n if (val.value.indexOf('#') !== -1) {\n
val.value = val.value.replace('#', `${urlArgs}#`);\n
} else {\n val.value += urlArgs;\n
}\n }\n }\n }\n\n return new URL(val,
this.getIndex(), this.fileInfo(), true);\n }\n});\n\nexport default URL;\n",
"import Ruleset from './ruleset';\nimport Value from './value';\nimport Selector
from './selector';\nimport Anonymous from './anonymous';\nimport Expression fro
m './expression';\nimport AtRule from './atrule';\nimport * as utils from '../ut
ils';\n\nconst Media = function(value, features, index, currentFileInfo, visibil
ityInfo) {\n this._index = index;\n this._fileInfo = currentFileInfo;\n\n
const selectors = (new Selector([], null, null, this._index, this._fileInfo))
.createEmptySelectors();\n\n this.features = new Value(features);\n this.r
ules = [new Ruleset(selectors, value)];\n this.rules[0].allowImports = true;\
n this.copyVisibilityInfo(visibilityInfo);\n this.allowRoot = true;\n t
his.setParent(selectors, this);\n this.setParent(this.features, this);\n t
his.setParent(this.rules, this);\n};\n\nMedia.prototype = Object.assign(new AtRu
le(), {\n type: 'Media',\n\n isRulesetLike() {\n return true;\n
},\n\n accept(visitor) {\n if (this.features) {\n this.feat
ures = visitor.visit(this.features);\n }\n if (this.rules) {\n
this.rules = visitor.visitArray(this.rules);\n }\n },\n\n g
enCSS(context, output) {\n output.add('@media ', this._fileInfo, this._in
dex);\n this.features.genCSS(context, output);\n this.outputRulese
t(context, output, this.rules);\n },\n\n eval(context) {\n if (!con
text.mediaBlocks) {\n context.mediaBlocks = [];\n context.
mediaPath = [];\n }\n\n const media = new Media(null, [], this._in
dex, this._fileInfo, this.visibilityInfo());\n if (this.debugInfo) {\n
this.rules[0].debugInfo = this.debugInfo;\n media.debugInfo
= this.debugInfo;\n }\n \n media.features = this.features.e
val(context);\n\n context.mediaPath.push(media);\n context.mediaBl
ocks.push(media);\n\n this.rules[0].functionRegistry = context.frames[0].
functionRegistry.inherit();\n context.frames.unshift(this.rules[0]);\n
media.rules = [this.rules[0].eval(context)];\n context.frames.shift(
);\n\n context.mediaPath.pop();\n\n return context.mediaPath.lengt
h === 0 ? media.evalTop(context) :\n media.evalNested(context);\n
},\n\n evalTop(context) {\n let result = this;\n\n // Render al
l dependent Media blocks.\n if (context.mediaBlocks.length > 1) {\n
const selectors = (new Selector([], null, null, this.getIndex(), this.file
Info())).createEmptySelectors();\n result = new Ruleset(selectors, co
ntext.mediaBlocks);\n result.multiMedia = true;\n result.c
opyVisibilityInfo(this.visibilityInfo());\n this.setParent(result, th
is);\n }\n\n delete context.mediaBlocks;\n delete context.m
ediaPath;\n\n return result;\n },\n\n evalNested(context) {\n
let i;\n let value;\n const path = context.mediaPath.concat([thi
s]);\n\n // Extract the media-query conditions separated with `,` (OR).\n
for (i = 0; i < path.length; i++) {\n value = path[i].feature
s instanceof Value ?\n path[i].features.value : path[i].features;
\n path[i] = Array.isArray(value) ? value : [value];\n }\n\n
// Trace all permutations to generate the resulting media-query.\n
//\n // (a, b and c) with nested (d, e) ->\n // a and d\n
// a and e\n // b and c and d\n // b and c and e\n
this.features = new Value(this.permute(path).map(path => {\n path
= path.map(fragment => fragment.toCSS ? fragment : new Anonymous(fragment));\n\n
for (i = path.length - 1; i > 0; i--) {\n path.splice
(i, 0, new Anonymous('and'));\n }\n\n return new Expressio
n(path);\n }));\n this.setParent(this.features, this);\n\n
// Fake a tree-node that doesn't output anything.\n return new Ruleset([]
, []);\n },\n\n permute(arr) {\n if (arr.length === 0) {\n
return [];\n } else if (arr.length === 1) {\n return arr[0]
;\n } else {\n const result = [];\n const rest = th
is.permute(arr.slice(1));\n for (let i = 0; i < rest.length; i++) {\n
for (let j = 0; j < arr[0].length; j++) {\n r
esult.push([arr[0][j]].concat(rest[i]));\n }\n }\n
return result;\n }\n },\n\n bubbleSelectors(selectors) {\n
if (!selectors) {\n return;\n }\n this.rules = [
new Ruleset(utils.copyArray(selectors), [this.rules[0]])];\n this.setPare
nt(this.rules, this);\n }\n});\n\nexport default Media;\n","import Node from
'./node';\nimport Media from './media';\nimport URL from './url';\nimport Quoted
from './quoted';\nimport Ruleset from './ruleset';\nimport Anonymous from './an
onymous';\nimport * as utils from '../utils';\nimport LessError from '../less-er
ror';\n\n//\n// CSS @import node\n//\n// The general strategy here is that we do
n't want to wait\n// for the parsing to be completed, before we start importing\
n// the file. That's because in the context of a browser,\n// most of the time w
ill be spent waiting for the server to respond.\n//\n// On creation, we push the
import path to our import queue, though\n// `import,push`, we also pass it a ca
llback, which it'll call once\n// the file has been fetched, and parsed.\n//\nco
nst Import = function(path, features, options, index, currentFileInfo, visibilit
yInfo) {\n this.options = options;\n this._index = index;\n this._fileI
nfo = currentFileInfo;\n this.path = path;\n this.features = features;\n
this.allowRoot = true;\n\n if (this.options.less !== undefined || this.opti
ons.inline) {\n this.css = !this.options.less || this.options.inline;\n
} else {\n const pathValue = this.getPath();\n if (pathValue &&
/[#\\.\\&\\?]css([\\?;].*)?$/.test(pathValue)) {\n this.css = true;\n
}\n }\n this.copyVisibilityInfo(visibilityInfo);\n this.setPare
nt(this.features, this);\n this.setParent(this.path, this);\n};\n\nImport.pro
totype = Object.assign(new Node(), {\n type: 'Import',\n\n accept(visitor)
{\n if (this.features) {\n this.features = visitor.visit(this
.features);\n }\n this.path = visitor.visit(this.path);\n i
f (!this.options.isPlugin && !this.options.inline && this.root) {\n t
his.root = visitor.visit(this.root);\n }\n },\n\n genCSS(context, o
utput) {\n if (this.css && this.path._fileInfo.reference === undefined) {
\n output.add('@import ', this._fileInfo, this._index);\n
this.path.genCSS(context, output);\n if (this.features) {\n
output.add(' ');\n this.features.genCSS(context, output);\n
}\n output.add(';');\n }\n },\n\n getPath()
{\n return (this.path instanceof URL) ?\n this.path.value.valu
e : this.path.value;\n },\n\n isVariableImport() {\n let path = thi
s.path;\n if (path instanceof URL) {\n path = path.value;\n
}\n if (path instanceof Quoted) {\n return path.containsV
ariables();\n }\n\n return true;\n },\n\n evalForImport(cont
ext) {\n let path = this.path;\n\n if (path instanceof URL) {\n
path = path.value;\n }\n\n return new Import(path.eval(co
ntext), this.features, this.options, this._index, this._fileInfo, this.visibilit
yInfo());\n },\n\n evalPath(context) {\n const path = this.path.eva
l(context);\n const fileInfo = this._fileInfo;\n\n if (!(path inst
anceof URL)) {\n // Add the rootpath if the URL requires a rewrite\n
const pathValue = path.value;\n if (fileInfo &&\n
pathValue &&\n context.pathRequiresRewrite(pathValue)) {\n
path.value = context.rewritePath(pathValue, fileInfo.rootpath);\
n } else {\n path.value = context.normalizePath(path.v
alue);\n }\n }\n\n return path;\n },\n\n eval(con
text) {\n const result = this.doEval(context);\n if (this.options.
reference || this.blocksVisibility()) {\n if (result.length || result
.length === 0) {\n result.forEach(function (node) {\n
node.addVisibilityBlock();\n }\n );\n
} else {\n result.addVisibilityBlock();\n }\n
}\n return result;\n },\n\n doEval(context) {\n let ru
leset;\n let registry;\n const features = this.features && this.fe
atures.eval(context);\n\n if (this.options.isPlugin) {\n if (t
his.root && this.root.eval) {\n try {\n this.r
oot.eval(context);\n }\n catch (e) {\n
e.message = 'Plugin error during evaluation';\n throw
new LessError(e, this.root.imports, this.root.filename);\n }\n
}\n registry = context.frames[0] && context.frames[0].funct
ionRegistry;\n if ( registry && this.root && this.root.functions ) {\
n registry.addMultiple( this.root.functions );\n }\n\n
return [];\n }\n\n if (this.skip) {\n if (t
ypeof this.skip === 'function') {\n this.skip = this.skip();\n
}\n if (this.skip) {\n return [];\n
}\n }\n if (this.options.inline) {\n const contents =
new Anonymous(this.root, 0,\n {\n filename: t
his.importedFilename,\n reference: this.path._fileInfo && thi
s.path._fileInfo.reference\n }, true, true);\n\n retur
n this.features ? new Media([contents], this.features.value) : [contents];\n
} else if (this.css) {\n const newImport = new Import(this.evalPa
th(context), features, this.options, this._index);\n if (!newImport.c
ss && this.error) {\n throw this.error;\n }\n
return newImport;\n } else if (this.root) {\n ruleset = new
Ruleset(null, utils.copyArray(this.root.rules));\n ruleset.evalImpor
ts(context);\n\n return this.features ? new Media(ruleset.rules, this
.features.value) : ruleset.rules;\n } else {\n return [];\n
}\n }\n});\n\nexport default Import;\n","import Node from './node';\nimp
ort Variable from './variable';\n\nconst JsEvalNode = function() {};\n\nJsEvalNo
de.prototype = Object.assign(new Node(), {\n evaluateJavaScript(expression, c
ontext) {\n let result;\n const that = this;\n const evalCo
ntext = {};\n\n if (!context.javascriptEnabled) {\n throw { me
ssage: 'Inline JavaScript is not enabled. Is it set in your options?',\n
filename: this.fileInfo().filename,\n index: this.getInde
x() };\n }\n\n expression = expression.replace(/@\\{([\\w-]+)\\}/g
, function (_, name) {\n return that.jsify(new Variable(`@${name}`, t
hat.getIndex(), that.fileInfo()).eval(context));\n });\n\n try {\n
expression = new Function(`return (${expression})`);\n } catc
h (e) {\n throw { message: `JavaScript evaluation error: ${e.message}
from \\`${expression}\\`` ,\n filename: this.fileInfo().filename
,\n index: this.getIndex() };\n }\n\n const variabl
es = context.frames[0].variables();\n for (const k in variables) {\n
if (variables.hasOwnProperty(k)) {\n /* jshint loopfunc:tr
ue */\n evalContext[k.slice(1)] = {\n value: v
ariables[k].value,\n toJS: function () {\n
return this.value.eval(context).toCSS();\n }\n
};\n }\n }\n\n try {\n result = expres
sion.call(evalContext);\n } catch (e) {\n throw { message: `Ja
vaScript evaluation error: '${e.name}: ${e.message.replace(/[\"]/g, '\\'')}'` ,\
n filename: this.fileInfo().filename,\n index: thi
s.getIndex() };\n }\n return result;\n },\n\n jsify(obj) {\n
if (Array.isArray(obj.value) && (obj.value.length > 1)) {\n r
eturn `[${obj.value.map(function (v) { return v.toCSS(); }).join(', ')}]`;\n
} else {\n return obj.toCSS();\n }\n }\n});\n\nexport d
efault JsEvalNode;\n","import JsEvalNode from './js-eval-node';\nimport Dimensio
n from './dimension';\nimport Quoted from './quoted';\nimport Anonymous from './
anonymous';\n\nconst JavaScript = function(string, escaped, index, currentFileIn
fo) {\n this.escaped = escaped;\n this.expression = string;\n this._ind
ex = index;\n this._fileInfo = currentFileInfo;\n}\n\nJavaScript.prototype =
Object.assign(new JsEvalNode(), {\n type: 'JavaScript',\n\n eval(context)
{\n const result = this.evaluateJavaScript(this.expression, context);\n
const type = typeof result;\n\n if (type === 'number' && !isNaN(res
ult)) {\n return new Dimension(result);\n } else if (type ===
'string') {\n return new Quoted(`\"${result}\"`, result, this.escaped
, this._index);\n } else if (Array.isArray(result)) {\n return
new Anonymous(result.join(', '));\n } else {\n return new Ano
nymous(result);\n }\n }\n});\n\nexport default JavaScript;\n","import
Node from './node';\n\nconst Assignment = function(key, val) {\n this.key = k
ey;\n this.value = val;\n}\n\nAssignment.prototype = Object.assign(new Node()
, {\n type: 'Assignment',\n\n accept(visitor) {\n this.value = visi
tor.visit(this.value);\n },\n\n eval(context) {\n if (this.value.ev
al) {\n return new Assignment(this.key, this.value.eval(context));\n
}\n return this;\n },\n\n genCSS(context, output) {\n
output.add(`${this.key}=`);\n if (this.value.genCSS) {\n this
.value.genCSS(context, output);\n } else {\n output.add(this.v
alue);\n }\n }\n});\n\nexport default Assignment;\n","import Node from
'./node';\n\nconst Condition = function(op, l, r, i, negate) {\n this.op = o
p.trim();\n this.lvalue = l;\n this.rvalue = r;\n this._index = i;\n
this.negate = negate;\n};\n\nCondition.prototype = Object.assign(new Node(), {\
n type: 'Condition',\n\n accept(visitor) {\n this.lvalue = visitor.
visit(this.lvalue);\n this.rvalue = visitor.visit(this.rvalue);\n },\n
\n eval(context) {\n const result = (function (op, a, b) {\n
switch (op) {\n case 'and': return a && b;\n cas
e 'or': return a || b;\n default:\n switch (N
ode.compare(a, b)) {\n case -1:\n
return op === '<' || op === '=<' || op === '<=';\n ca
se 0:\n return op === '=' || op === '>=' || op === '=
<' || op === '<=';\n case 1:\n
return op === '>' || op === '>=';\n default:\n
return false;\n }\n }\n }
)(this.op, this.lvalue.eval(context), this.rvalue.eval(context));\n\n ret
urn this.negate ? !result : result;\n }\n});\n\nexport default Condition;\n",
"import Node from './node';\n\nconst UnicodeDescriptor = function(value) {\n
this.value = value;\n}\n\nUnicodeDescriptor.prototype = Object.assign(new Node()
, {\n type: 'UnicodeDescriptor'\n})\n\nexport default UnicodeDescriptor;\n","
import Node from './node';\nimport Operation from './operation';\nimport Dimensi
on from './dimension';\n\nconst Negative = function(node) {\n this.value = no
de;\n};\n\nNegative.prototype = Object.assign(new Node(), {\n type: 'Negative
',\n\n genCSS(context, output) {\n output.add('-');\n this.valu
e.genCSS(context, output);\n },\n\n eval(context) {\n if (context.i
sMathOn()) {\n return (new Operation('*', [new Dimension(-1), this.va
lue])).eval(context);\n }\n return new Negative(this.value.eval(co
ntext));\n }\n});\n\nexport default Negative;\n","import Node from './node';\
nimport Selector from './selector';\n\nconst Extend = function(selector, option,
index, currentFileInfo, visibilityInfo) {\n this.selector = selector;\n t
his.option = option;\n this.object_id = Extend.next_id++;\n this.parent_id
s = [this.object_id];\n this._index = index;\n this._fileInfo = currentFil
eInfo;\n this.copyVisibilityInfo(visibilityInfo);\n this.allowRoot = true;
\n\n switch (option) {\n case 'all':\n this.allowBefore = t
rue;\n this.allowAfter = true;\n break;\n default:\
n this.allowBefore = false;\n this.allowAfter = false;\n
break;\n }\n this.setParent(this.selector, this);\n};\n\nExtend.
prototype = Object.assign(new Node(), {\n type: 'Extend',\n\n accept(visit
or) {\n this.selector = visitor.visit(this.selector);\n },\n\n eval
(context) {\n return new Extend(this.selector.eval(context), this.option,
this.getIndex(), this.fileInfo(), this.visibilityInfo());\n },\n\n clone(
context) {\n return new Extend(this.selector, this.option, this.getIndex(
), this.fileInfo(), this.visibilityInfo());\n },\n\n // it concatenates (j
oins) all selectors in selector array\n findSelfSelectors(selectors) {\n
let selfElements = [], i, selectorElements;\n\n for (i = 0; i < select
ors.length; i++) {\n selectorElements = selectors[i].elements;\n
// duplicate the logic in genCSS function inside the selector node.\n
// future TODO - move both logics into the selector joiner visitor\n
if (i > 0 && selectorElements.length && selectorElements[0].combinator.v
alue === '') {\n selectorElements[0].combinator.value = ' ';\n
}\n selfElements = selfElements.concat(selectors[i].elements
);\n }\n\n this.selfSelectors = [new Selector(selfElements)];\n
this.selfSelectors[0].copyVisibilityInfo(this.visibilityInfo());\n }\n})
;\n\nExtend.next_id = 0;\nexport default Extend;\n","import Node from './node';\
nimport Variable from './variable';\nimport Ruleset from './ruleset';\nimport De
tachedRuleset from './detached-ruleset';\nimport LessError from '../less-error';
\n\nconst VariableCall = function(variable, index, currentFileInfo) {\n this.
variable = variable;\n this._index = index;\n this._fileInfo = currentFile
Info;\n this.allowRoot = true;\n};\n\nVariableCall.prototype = Object.assign(
new Node(), {\n type: 'VariableCall',\n\n eval(context) {\n let rul
es;\n let detachedRuleset = new Variable(this.variable, this.getIndex(),
this.fileInfo()).eval(context);\n const error = new LessError({message: `
Could not evaluate variable call ${this.variable}`});\n\n if (!detachedRu
leset.ruleset) {\n if (detachedRuleset.rules) {\n rule
s = detachedRuleset;\n }\n else if (Array.isArray(detached
Ruleset)) {\n rules = new Ruleset('', detachedRuleset);\n
}\n else if (Array.isArray(detachedRuleset.value)) {\n
rules = new Ruleset('', detachedRuleset.value);\n }\n
else {\n throw error;\n }\n detachedRulese
t = new DetachedRuleset(rules);\n }\n\n if (detachedRuleset.rulese
t) {\n return detachedRuleset.callEval(context);\n }\n
throw error;\n }\n});\n\nexport default VariableCall;\n","import Node from '.
/node';\nimport Variable from './variable';\nimport Ruleset from './ruleset';\ni
mport Selector from './selector';\n\nconst NamespaceValue = function(ruleCall, l
ookups, index, fileInfo) {\n this.value = ruleCall;\n this.lookups = looku
ps;\n this._index = index;\n this._fileInfo = fileInfo;\n};\n\nNamespaceVa
lue.prototype = Object.assign(new Node(), {\n type: 'NamespaceValue',\n\n
eval(context) {\n let i, j, name, rules = this.value.eval(context);\n
\n for (i = 0; i < this.lookups.length; i++) {\n name = th
is.lookups[i];\n\n /**\n * Eval'd DRs return rulesets.\n
* Eval'd mixins return rules, so let's make a ruleset if we need it.
\n * We need to do this because of late parsing of values\n
*/\n if (Array.isArray(rules)) {\n rules = new Rul
eset([new Selector()], rules);\n }\n\n if (name === '') {\
n rules = rules.lastDeclaration();\n }\n el
se if (name.charAt(0) === '@') {\n if (name.charAt(1) === '@') {\
n name = `@${new Variable(name.substr(1)).eval(context).value
}`;\n }\n if (rules.variables) {\n
rules = rules.variable(name);\n }\n \n
if (!rules) {\n throw { type: 'Name',\n
message: `variable ${name} not found`,\n filena
me: this.fileInfo().filename,\n index: this.getIndex() };
\n }\n }\n else {\n if (name
.substring(0, 2) === '$@') {\n name = `$${new Variable(name.s
ubstr(1)).eval(context).value}`;\n }\n else {\n
name = name.charAt(0) === '$' ? name : `$${name}`;\n
}\n if (rules.properties) {\n rules = rul
es.property(name);\n }\n \n if (!rules)
{\n throw { type: 'Name',\n message:
`property \"${name.substr(1)}\" not found`,\n filename: t
his.fileInfo().filename,\n index: this.getIndex() };\n
}\n // Properties are an array of values, since a ru
leset can have multiple props.\n // We pick the last one (the \"c
ascaded\" value)\n rules = rules[rules.length - 1];\n
}\n\n if (rules.value) {\n rules = rules.eval(context)
.value;\n }\n if (rules.ruleset) {\n rules
= rules.ruleset.eval(context);\n }\n }\n return rules;\
n }\n});\n\nexport default NamespaceValue;\n","import Selector from './select
or';\nimport Element from './element';\nimport Ruleset from './ruleset';\nimport
Declaration from './declaration';\nimport DetachedRuleset from './detached-rule
set';\nimport Expression from './expression';\nimport contexts from '../contexts
';\nimport * as utils from '../utils';\n\nconst Definition = function(name, para
ms, rules, condition, variadic, frames, visibilityInfo) {\n this.name = name
|| 'anonymous mixin';\n this.selectors = [new Selector([new Element(null, nam
e, false, this._index, this._fileInfo)])];\n this.params = params;\n this.
condition = condition;\n this.variadic = variadic;\n this.arity = params.l
ength;\n this.rules = rules;\n this._lookups = {};\n const optionalPara
meters = [];\n this.required = params.reduce(function (count, p) {\n i
f (!p.name || (p.name && !p.value)) {\n return count + 1;\n }\
n else {\n optionalParameters.push(p.name);\n retur
n count;\n }\n }, 0);\n this.optionalParameters = optionalParameter
s;\n this.frames = frames;\n this.copyVisibilityInfo(visibilityInfo);\n
this.allowRoot = true;\n}\n\nDefinition.prototype = Object.assign(new Ruleset()
, {\n type: 'MixinDefinition',\n evalFirst: true,\n\n accept(visitor) {
\n if (this.params && this.params.length) {\n this.params = vi
sitor.visitArray(this.params);\n }\n this.rules = visitor.visitArr
ay(this.rules);\n if (this.condition) {\n this.condition = vis
itor.visit(this.condition);\n }\n },\n\n evalParams(context, mixinE
nv, args, evaldArguments) {\n /* jshint boss:true */\n const frame
= new Ruleset(null, null);\n\n let varargs;\n let arg;\n c
onst params = utils.copyArray(this.params);\n let i;\n let j;\n
let val;\n let name;\n let isNamedFound;\n let argInde
x;\n let argsLength = 0;\n\n if (mixinEnv.frames && mixinEnv.frame
s[0] && mixinEnv.frames[0].functionRegistry) {\n frame.functionRegist
ry = mixinEnv.frames[0].functionRegistry.inherit();\n }\n mixinEnv
= new contexts.Eval(mixinEnv, [frame].concat(mixinEnv.frames));\n\n if (
args) {\n args = utils.copyArray(args);\n argsLength = arg
s.length;\n\n for (i = 0; i < argsLength; i++) {\n arg
= args[i];\n if (name = (arg && arg.name)) {\n
isNamedFound = false;\n for (j = 0; j < params.length; j++)
{\n if (!evaldArguments[j] && name === params[j].name) {
\n evaldArguments[j] = arg.value.eval(context);\n
frame.prependRule(new Declaration(name, arg.value.eval(c
ontext)));\n isNamedFound = true;\n
break;\n }\n }\n
if (isNamedFound) {\n args.splice(i, 1);\n
i--;\n continue;\n }
else {\n throw { type: 'Runtime', message: `Named argumen
t for ${this.name} ${args[i].name} not found` };\n }\n
}\n }\n }\n argIndex = 0;\n for (i = 0;
i < params.length; i++) {\n if (evaldArguments[i]) { continue; }\n\n
arg = args && args[argIndex];\n\n if (name = params[i].na
me) {\n if (params[i].variadic) {\n varargs =
[];\n for (j = argIndex; j < argsLength; j++) {\n
varargs.push(args[j].value.eval(context));\n }\n
frame.prependRule(new Declaration(name, new Expression(vararg
s).eval(context)));\n } else {\n val = arg &&
arg.value;\n if (val) {\n // This was
a mixin call, pass in a detached ruleset of it's eval'd rules\n
if (Array.isArray(val)) {\n val = new Detached
Ruleset(new Ruleset('', val));\n }\n
else {\n val = val.eval(context);\n
}\n } else if (params[i].value) {\n
val = params[i].value.eval(mixinEnv);\n frame.rese
tCache();\n } else {\n throw { type: '
Runtime', message: `wrong number of arguments for ${this.name} (${argsLength} fo
r ${this.arity})` };\n }\n\n frame.prepend
Rule(new Declaration(name, val));\n evaldArguments[i] = val;\
n }\n }\n\n if (params[i].variadic && args)
{\n for (j = argIndex; j < argsLength; j++) {\n
evaldArguments[j] = args[j].value.eval(context);\n }\n
}\n argIndex++;\n }\n\n return frame;\n },\n\n
makeImportant() {\n const rules = !this.rules ? this.rules : this.rules
.map(function (r) {\n if (r.makeImportant) {\n return
r.makeImportant(true);\n } else {\n return r;\n
}\n });\n const result = new Definition(this.name, this.param
s, rules, this.condition, this.variadic, this.frames);\n return result;\n
},\n\n eval(context) {\n return new Definition(this.name, this.par
ams, this.rules, this.condition, this.variadic, this.frames || utils.copyArray(c
ontext.frames));\n },\n\n evalCall(context, args, important) {\n co
nst _arguments = [];\n const mixinFrames = this.frames ? this.frames.conc
at(context.frames) : context.frames;\n const frame = this.evalParams(cont
ext, new contexts.Eval(context, mixinFrames), args, _arguments);\n let ru
les;\n let ruleset;\n\n frame.prependRule(new Declaration('@argume
nts', new Expression(_arguments).eval(context)));\n\n rules = utils.copyA
rray(this.rules);\n\n ruleset = new Ruleset(null, rules);\n rulese
t.originalRuleset = this;\n ruleset = ruleset.eval(new contexts.Eval(cont
ext, [this, frame].concat(mixinFrames)));\n if (important) {\n
ruleset = ruleset.makeImportant();\n }\n return ruleset;\n },\
n\n matchCondition(args, context) {\n if (this.condition && !this.cond
ition.eval(\n new contexts.Eval(context,\n [this.evalP
arams(context, /* the parameter variables */\n new contexts.E
val(context, this.frames ? this.frames.concat(context.frames) : context.frames),
args, [])]\n .concat(this.frames || []) // the parent namesp
ace/mixin frames\n .concat(context.frames)))) { // the curren
t environment frames\n return false;\n }\n return true;
\n },\n\n matchArgs(args, context) {\n const allArgsCnt = (args &&
args.length) || 0;\n let len;\n const optionalParameters = this.op
tionalParameters;\n const requiredArgsCnt = !args ? 0 : args.reduce(funct
ion (count, p) {\n if (optionalParameters.indexOf(p.name) < 0) {\n
return count + 1;\n } else {\n return cou
nt;\n }\n }, 0);\n\n if (!this.variadic) {\n
if (requiredArgsCnt < this.required) {\n return false;\n
}\n if (allArgsCnt > this.params.length) {\n retur
n false;\n }\n } else {\n if (requiredArgsCnt < (th
is.required - 1)) {\n return false;\n }\n }\n\n
// check patterns\n len = Math.min(requiredArgsCnt, this.arity);\
n\n for (let i = 0; i < len; i++) {\n if (!this.params[i].name
&& !this.params[i].variadic) {\n if (args[i].value.eval(context)
.toCSS() != this.params[i].value.eval(context).toCSS()) {\n r
eturn false;\n }\n }\n }\n return true;\
n }\n});\n\nexport default Definition;\n","import Node from './node';\nimport
Selector from './selector';\nimport MixinDefinition from './mixin-definition';\
nimport defaultFunc from '../functions/default';\n\nconst MixinCall = function(e
lements, args, index, currentFileInfo, important) {\n this.selector = new Sel
ector(elements);\n this.arguments = args || [];\n this._index = index;\n
this._fileInfo = currentFileInfo;\n this.important = important;\n this.a
llowRoot = true;\n this.setParent(this.selector, this);\n};\n\nMixinCall.prot
otype = Object.assign(new Node(), {\n type: 'MixinCall',\n\n accept(visito
r) {\n if (this.selector) {\n this.selector = visitor.visit(th
is.selector);\n }\n if (this.arguments.length) {\n this
.arguments = visitor.visitArray(this.arguments);\n }\n },\n\n eval(
context) {\n let mixins;\n let mixin;\n let mixinPath;\n
const args = [];\n let arg;\n let argValue;\n const ru
les = [];\n let match = false;\n let i;\n let m;\n l
et f;\n let isRecursive;\n let isOneFound;\n const candidat
es = [];\n let candidate;\n const conditionResult = [];\n l
et defaultResult;\n const defFalseEitherCase = -1;\n const defNone
= 0;\n const defTrue = 1;\n const defFalse = 2;\n let coun
t;\n let originalRuleset;\n let noArgumentsFilter;\n\n this
.selector = this.selector.eval(context);\n\n function calcDefGroup(mixin,
mixinPath) {\n let f, p, namespace;\n\n for (f = 0; f < 2
; f++) {\n conditionResult[f] = true;\n defaultFun
c.value(f);\n for (p = 0; p < mixinPath.length && conditionResult
[f]; p++) {\n namespace = mixinPath[p];\n
if (namespace.matchCondition) {\n conditionResult[f] = co
nditionResult[f] && namespace.matchCondition(null, context);\n
}\n }\n if (mixin.matchCondition) {\n
conditionResult[f] = conditionResult[f] && mixin.matchCondition(args, c
ontext);\n }\n }\n if (conditionResult[0] |
| conditionResult[1]) {\n if (conditionResult[0] != conditionResu
lt[1]) {\n return conditionResult[1] ?\n
defTrue : defFalse;\n }\n\n return defNone;\n
}\n return defFalseEitherCase;\n }\n\n for (i
= 0; i < this.arguments.length; i++) {\n arg = this.arguments[i];\n
argValue = arg.value.eval(context);\n if (arg.expand && Ar
ray.isArray(argValue.value)) {\n argValue = argValue.value;\n
for (m = 0; m < argValue.length; m++) {\n args.pu
sh({value: argValue[m]});\n }\n } else {\n
args.push({name: arg.name, value: argValue});\n }\n }\n\n
noArgumentsFilter = function(rule) {return rule.matchArgs(null, context);
};\n\n for (i = 0; i < context.frames.length; i++) {\n if ((mi
xins = context.frames[i].find(this.selector, null, noArgumentsFilter)).length >
0) {\n isOneFound = true;\n\n // To make `default(
)` function independent of definition order we have two \"subpasses\" here.\n
// At first we evaluate each guard *twice* (with `default() == true
` and `default() == false`),\n // and build candidate list with c
orresponding flags. Then, when we know all possible matches,\n //
we make a final decision.\n\n for (m = 0; m < mixins.length; m++
) {\n mixin = mixins[m].rule;\n mixinPath
= mixins[m].path;\n isRecursive = false;\n
for (f = 0; f < context.frames.length; f++) {\n if ((!(m
ixin instanceof MixinDefinition)) && mixin === (context.frames[f].originalRulese
t || context.frames[f])) {\n isRecursive = true;\n
break;\n }\n
}\n if (isRecursive) {\n continue;\n
}\n\n if (mixin.matchArgs(args, context)) {
\n candidate = {mixin, group: calcDefGroup(mixin, mixinPa
th)};\n\n if (candidate.group !== defFalseEitherCase) {\n
candidates.push(candidate);\n
}\n\n match = true;\n }\n
}\n\n defaultFunc.reset();\n\n count = [0, 0,
0];\n for (m = 0; m < candidates.length; m++) {\n
count[candidates[m].group]++;\n }\n\n if (coun
t[defNone] > 0) {\n defaultResult = defFalse;\n
} else {\n defaultResult = defTrue;\n if
((count[defTrue] + count[defFalse]) > 1) {\n throw { typ
e: 'Runtime',\n message: `Ambiguous use of \\`default
()\\` found when matching for \\`${this.format(args)}\\``,\n
index: this.getIndex(), filename: this.fileInfo().filename };\n
}\n }\n\n for (m = 0; m < candidates.le
ngth; m++) {\n candidate = candidates[m].group;\n
if ((candidate === defNone) || (candidate === defaultResult)) {\n
try {\n mixin = candidates[m].mixin;
\n if (!(mixin instanceof MixinDefinition)) {\n
originalRuleset = mixin.originalRuleset || mixin;\n
mixin = new MixinDefinition('', [], mixin.rules, nu
ll, false, null, originalRuleset.visibilityInfo());\n
mixin.originalRuleset = originalRuleset;\n }\n
const newRules = mixin.evalCall(context, args, this.im
portant).rules;\n this._setVisibilityToReplacement(ne
wRules);\n Array.prototype.push.apply(rules, newRules
);\n } catch (e) {\n throw { m
essage: e.message, index: this.getIndex(), filename: this.fileInfo().filename, s
tack: e.stack };\n }\n }\n
}\n\n if (match) {\n return rules;\n
}\n }\n }\n if (isOneFound) {\n th
row { type: 'Runtime',\n message: `No matching definition was
found for \\`${this.format(args)}\\``,\n index: this.getIndex()
, filename: this.fileInfo().filename };\n } else {\n throw { t
ype: 'Name',\n message: `${this.selector.toCSS().trim()} is un
defined`,\n index: this.getIndex(), filename: this.fileInfo().f
ilename };\n }\n },\n\n _setVisibilityToReplacement(replacement) {\
n let i, rule;\n if (this.blocksVisibility()) {\n for (
i = 0; i < replacement.length; i++) {\n rule = replacement[i];\n
rule.addVisibilityBlock();\n }\n }\n },\n\n
format(args) {\n return `${this.selector.toCSS().trim()}(${args ? args
.map(function (a) {\n let argValue = '';\n if (a.name) {\n
argValue += `${a.name}:`;\n }\n if (a.valu
e.toCSS) {\n argValue += a.value.toCSS();\n } else {\n
argValue += '???';\n }\n return argValue;\
n }).join(', ') : ''})`;\n }\n});\n\nexport default MixinCall;\n","imp
ort Node from './node';\nimport Color from './color';\nimport AtRule from './atr
ule';\nimport DetachedRuleset from './detached-ruleset';\nimport Operation from
'./operation';\nimport Dimension from './dimension';\nimport Unit from './unit';
\nimport Keyword from './keyword';\nimport Variable from './variable';\nimport P
roperty from './property';\nimport Ruleset from './ruleset';\nimport Element fro
m './element';\nimport Attribute from './attribute';\nimport Combinator from './
combinator';\nimport Selector from './selector';\nimport Quoted from './quoted';
\nimport Expression from './expression';\nimport Declaration from './declaration
';\nimport Call from './call';\nimport URL from './url';\nimport Import from './
import';\nimport Comment from './comment';\nimport Anonymous from './anonymous';
\nimport Value from './value';\nimport JavaScript from './javascript';\nimport A
ssignment from './assignment';\nimport Condition from './condition';\nimport Par
en from './paren';\nimport Media from './media';\nimport UnicodeDescriptor from
'./unicode-descriptor';\nimport Negative from './negative';\nimport Extend from
'./extend';\nimport VariableCall from './variable-call';\nimport NamespaceValue
from './namespace-value';\n\n// mixins\nimport MixinCall from './mixin-call';\ni
mport MixinDefinition from './mixin-definition';\n\nexport default {\n Node,
Color, AtRule, DetachedRuleset, Operation,\n Dimension, Unit, Keyword, Variab
le, Property,\n Ruleset, Element, Attribute, Combinator, Selector,\n Quote
d, Expression, Declaration, Call, URL, Import,\n Comment, Anonymous, Value, J
avaScript, Assignment,\n Condition, Paren, Media, UnicodeDescriptor, Negative
,\n Extend, VariableCall, NamespaceValue,\n mixin: {\n Call: MixinC
all,\n Definition: MixinDefinition\n }\n};","class AbstractFileManager
{\n getPath(filename) {\n let j = filename.lastIndexOf('?');\n
if (j > 0) {\n filename = filename.slice(0, j);\n }\n
j = filename.lastIndexOf('/');\n if (j < 0) {\n j = filename.l
astIndexOf('\\\\');\n }\n if (j < 0) {\n return '';\n
}\n return filename.slice(0, j + 1);\n }\n\n tryAppendExtensi
on(path, ext) {\n return /(\\.[a-z]*$)|([\\?;].*)$/.test(path) ? path : p
ath + ext;\n }\n\n tryAppendLessExtension(path) {\n return this.try
AppendExtension(path, '.less');\n }\n\n supportsSync() {\n return f
alse;\n }\n\n alwaysMakePathsAbsolute() {\n return false;\n }\n\
n isPathAbsolute(filename) {\n return (/^(?:[a-z-]+:|\\/|\\\\|#)/i).te
st(filename);\n }\n\n // TODO: pull out / replace?\n join(basePath, lat
erPath) {\n if (!basePath) {\n return laterPath;\n }\n
return basePath + laterPath;\n }\n\n pathDiff(url, baseUrl) {\n
// diff between two paths to create a relative path\n\n const urlPart
s = this.extractUrlParts(url);\n\n const baseUrlParts = this.extractUrlPa
rts(baseUrl);\n let i;\n let max;\n let urlDirectories;\n
let baseUrlDirectories;\n let diff = '';\n if (urlParts.host
Part !== baseUrlParts.hostPart) {\n return '';\n }\n ma
x = Math.max(baseUrlParts.directories.length, urlParts.directories.length);\n
for (i = 0; i < max; i++) {\n if (baseUrlParts.directories[i] !=
= urlParts.directories[i]) { break; }\n }\n baseUrlDirectories = b
aseUrlParts.directories.slice(i);\n urlDirectories = urlParts.directories
.slice(i);\n for (i = 0; i < baseUrlDirectories.length - 1; i++) {\n
diff += '../';\n }\n for (i = 0; i < urlDirectories.length
- 1; i++) {\n diff += `${urlDirectories[i]}/`;\n }\n re
turn diff;\n }\n\n // helper function, not part of API\n extractUrlPart
s(url, baseUrl) {\n // urlParts[1] = protocol://hostname/ OR /\n /
/ urlParts[2] = / if path relative to host base\n // urlParts[3] = direct
ories\n // urlParts[4] = filename\n // urlParts[5] = parameters\n\
n const urlPartsRegex = /^((?:[a-z-]+:)?\\/{2}(?:[^\\/\\?#]*\\/)|([\\/\\\
\]))?((?:[^\\/\\\\\\?#]*[\\/\\\\])*)([^\\/\\\\\\?#]*)([#\\?].*)?$/i;\n\n
const urlParts = url.match(urlPartsRegex);\n const returner = {};\n
let rawDirectories = [];\n const directories = [];\n let i;\n
let baseUrlParts;\n\n if (!urlParts) {\n throw new Error(
`Could not parse sheet href - '${url}'`);\n }\n\n // Stylesheets i
n IE don't always return the full path\n if (baseUrl && (!urlParts[1] ||
urlParts[2])) {\n baseUrlParts = baseUrl.match(urlPartsRegex);\n
if (!baseUrlParts) {\n throw new Error(`Could not parse pa
ge url - '${baseUrl}'`);\n }\n urlParts[1] = urlParts[1] |
| baseUrlParts[1] || '';\n if (!urlParts[2]) {\n urlPa
rts[3] = baseUrlParts[3] + urlParts[3];\n }\n }\n\n if
(urlParts[3]) {\n rawDirectories = urlParts[3].replace(/\\\\/g, '/').
split('/');\n\n // collapse '..' and skip '.'\n for (i = 0
; i < rawDirectories.length; i++) {\n\n if (rawDirectories[i] ===
'..') {\n directories.pop();\n }\n
else if (rawDirectories[i] !== '.') {\n directories.push
(rawDirectories[i]);\n }\n \n }\n }\
n\n returner.hostPart = urlParts[1];\n returner.directories = dire
ctories;\n returner.rawPath = (urlParts[1] || '') + rawDirectories.join('
/');\n returner.path = (urlParts[1] || '') + directories.join('/');\n
returner.filename = urlParts[4];\n returner.fileUrl = returner.path +
(urlParts[4] || '');\n returner.url = returner.fileUrl + (urlParts[5] ||
'');\n return returner;\n }\n}\n\nexport default AbstractFileManager;
\n","import functionRegistry from '../functions/function-registry';\nimport Less
Error from '../less-error';\n\nclass AbstractPluginLoader {\n constructor() {
\n // Implemented by Node.js plugin loader\n this.require = functi
on() {\n return null;\n }\n }\n\n evalPlugin(contents, c
ontext, imports, pluginOptions, fileInfo) {\n\n let loader, registry, plu
ginObj, localModule, pluginManager, filename, result;\n\n pluginManager =
context.pluginManager;\n\n if (fileInfo) {\n if (typeof fileI
nfo === 'string') {\n filename = fileInfo;\n }\n
else {\n filename = fileInfo.filename;\n }\n
}\n const shortname = (new this.less.FileManager()).extractUrlParts(f
ilename).filename;\n\n if (filename) {\n pluginObj = pluginMan
ager.get(filename);\n\n if (pluginObj) {\n result = th
is.trySetOptions(pluginObj, filename, shortname, pluginOptions);\n
if (result) {\n return result;\n }\n
try {\n if (pluginObj.use) {\n
pluginObj.use.call(this.context, pluginObj);\n }\n
}\n catch (e) {\n e.message = e.message
|| 'Error during @plugin call';\n return new LessError(e, imp
orts, filename);\n }\n return pluginObj;\n
}\n }\n localModule = {\n exports: {},\n
pluginManager,\n fileInfo\n };\n registry = functionRe
gistry.create();\n\n const registerPlugin = function(obj) {\n
pluginObj = obj;\n };\n\n try {\n loader = new Function
('module', 'require', 'registerPlugin', 'functions', 'tree', 'less', 'fileInfo',
contents);\n loader(localModule, this.require(filename), registerPlu
gin, registry, this.less.tree, this.less, fileInfo);\n }\n catch (
e) {\n return new LessError(e, imports, filename);\n }\n\n
if (!pluginObj) {\n pluginObj = localModule.exports;\n }\n
pluginObj = this.validatePlugin(pluginObj, filename, shortname);\n\n
if (pluginObj instanceof LessError) {\n return pluginObj;\n
}\n\n if (pluginObj) {\n pluginObj.imports = imports;\n
pluginObj.filename = filename;\n\n // For < 3.x (or unspecifie
d minVersion) - setOptions() before install()\n if (!pluginObj.minVer
sion || this.compareVersion('3.0.0', pluginObj.minVersion) < 0) {\n
result = this.trySetOptions(pluginObj, filename, shortname, pluginOptions);\n
\n if (result) {\n return result;\n
}\n }\n\n // Run on first load\n pluginMan
ager.addPlugin(pluginObj, fileInfo.filename, registry);\n pluginObj.f
unctions = registry.getLocalFunctions();\n\n // Need to call setOptio
ns again because the pluginObj might have functions\n result = this.t
rySetOptions(pluginObj, filename, shortname, pluginOptions);\n if (re
sult) {\n return result;\n }\n\n // Run eve
ry @plugin call\n try {\n if (pluginObj.use) {\n
pluginObj.use.call(this.context, pluginObj);\n }\n
}\n catch (e) {\n e.message = e.message ||
'Error during @plugin call';\n return new LessError(e, imports, f
ilename);\n }\n\n }\n else {\n return new Le
ssError({ message: 'Not a valid plugin' }, imports, filename);\n }\n\n
return pluginObj;\n\n }\n\n trySetOptions(plugin, filename, name, opt
ions) {\n if (options && !plugin.setOptions) {\n return new Le
ssError({\n message: `Options have been provided but the plugin $
{name} does not support any options.`\n });\n }\n try {
\n plugin.setOptions && plugin.setOptions(options);\n }\n
catch (e) {\n return new LessError(e);\n }\n }\n\n va
lidatePlugin(plugin, filename, name) {\n if (plugin) {\n // su
pport plugins being a function\n // so that the plugin can be more us
able programmatically\n if (typeof plugin === 'function') {\n
plugin = new plugin();\n }\n\n if (plugin.minVersi
on) {\n if (this.compareVersion(plugin.minVersion, this.less.vers
ion) < 0) {\n return new LessError({\n
message: `Plugin ${name} requires version ${this.versionToString(plugin.minVers
ion)}`\n });\n }\n }\n r
eturn plugin;\n }\n return null;\n }\n\n compareVersion(aVer
sion, bVersion) {\n if (typeof aVersion === 'string') {\n aVer
sion = aVersion.match(/^(\\d+)\\.?(\\d+)?\\.?(\\d+)?/);\n aVersion.sh
ift();\n }\n for (let i = 0; i < aVersion.length; i++) {\n
if (aVersion[i] !== bVersion[i]) {\n return parseInt(aVersion
[i]) > parseInt(bVersion[i]) ? -1 : 1;\n }\n }\n return
0;\n }\n\n versionToString(version) {\n let versionString = '';\n
for (let i = 0; i < version.length; i++) {\n versionString +=
(versionString ? '.' : '') + version[i];\n }\n return versionStrin
g;\n }\n\n printUsage(plugins) {\n for (let i = 0; i < plugins.leng
th; i++) {\n const plugin = plugins[i];\n if (plugin.print
Usage) {\n plugin.printUsage();\n }\n }\n }\
n}\n\nexport default AbstractPluginLoader;\n\n","import tree from '../tree';\n\n
const _visitArgs = { visitDeeper: true };\nlet _hasIndexed = false;\n\nfunction
_noop(node) {\n return node;\n}\n\nfunction indexNodeTypes(parent, ticker) {\
n // add .typeIndex to tree node types for lookup table\n let key, child;\
n for (key in parent) { \n /* eslint guard-for-in: 0 */\n child
= parent[key];\n switch (typeof child) {\n case 'function':\n
// ignore bound functions directly on tree which do not have a p
rototype\n // or aren't nodes\n if (child.prototyp
e && child.prototype.type) {\n child.prototype.typeIndex = ti
cker++;\n }\n break;\n case 'object':\n
ticker = indexNodeTypes(child, ticker);\n break;\
n \n }\n }\n return ticker;\n}\n\nclass Visitor {\n const
ructor(implementation) {\n this._implementation = implementation;\n
this._visitInCache = {};\n this._visitOutCache = {};\n\n if (!_h
asIndexed) {\n indexNodeTypes(tree, 1);\n _hasIndexed = tr
ue;\n }\n }\n\n visit(node) {\n if (!node) {\n re
turn node;\n }\n\n const nodeTypeIndex = node.typeIndex;\n
if (!nodeTypeIndex) {\n // MixinCall args aren't a node type?\n
if (node.value && node.value.typeIndex) {\n this.visit(node
.value);\n }\n return node;\n }\n\n const im
pl = this._implementation;\n let func = this._visitInCache[nodeTypeIndex]
;\n let funcOut = this._visitOutCache[nodeTypeIndex];\n const visi
tArgs = _visitArgs;\n let fnName;\n\n visitArgs.visitDeeper = true
;\n\n if (!func) {\n fnName = `visit${node.type}`;\n
func = impl[fnName] || _noop;\n funcOut = impl[`${fnName}Out`] || _
noop;\n this._visitInCache[nodeTypeIndex] = func;\n this._
visitOutCache[nodeTypeIndex] = funcOut;\n }\n\n if (func !== _noop
) {\n const newNode = func.call(impl, node, visitArgs);\n
if (node && impl.isReplacing) {\n node = newNode;\n }\
n }\n\n if (visitArgs.visitDeeper && node) {\n if (node
.length) {\n for (let i = 0, cnt = node.length; i < cnt; i++) {\n
if (node[i].accept) {\n node[i].accep
t(this);\n }\n }\n } else if (node.
accept) {\n node.accept(this);\n }\n }\n\n
if (funcOut != _noop) {\n funcOut.call(impl, node);\n }\n\n
return node;\n }\n\n visitArray(nodes, nonReplacing) {\n if
(!nodes) {\n return nodes;\n }\n\n const cnt = nodes.l
ength;\n let i;\n\n // Non-replacing\n if (nonReplacing ||
!this._implementation.isReplacing) {\n for (i = 0; i < cnt; i++) {\n
this.visit(nodes[i]);\n }\n return nodes;\n
}\n\n // Replacing\n const out = [];\n for (i = 0;
i < cnt; i++) {\n const evald = this.visit(nodes[i]);\n if
(evald === undefined) { continue; }\n if (!evald.splice) {\n
out.push(evald);\n } else if (evald.length) {\n
this.flatten(evald, out);\n }\n }\n return out;\n
}\n\n flatten(arr, out) {\n if (!out) {\n out = [];\n
}\n\n let cnt, i, item, nestedCnt, j, nestedItem;\n\n for (i = 0
, cnt = arr.length; i < cnt; i++) {\n item = arr[i];\n if
(item === undefined) {\n continue;\n }\n if
(!item.splice) {\n out.push(item);\n continue;\n
}\n\n for (j = 0, nestedCnt = item.length; j < nestedCnt;
j++) {\n nestedItem = item[j];\n if (nestedItem ==
= undefined) {\n continue;\n }\n
if (!nestedItem.splice) {\n out.push(nestedItem);\n
} else if (nestedItem.length) {\n this.flatten(nested
Item, out);\n }\n }\n }\n\n return out;\
n }\n}\n\nexport default Visitor;\n","class ImportSequencer {\n constructo
r(onSequencerEmpty) {\n this.imports = [];\n this.variableImports
= [];\n this._onSequencerEmpty = onSequencerEmpty;\n this._current
Depth = 0;\n }\n\n addImport(callback) {\n const importSequencer =
this,\n importItem = {\n callback,\n ar
gs: null,\n isReady: false\n };\n this.imports.
push(importItem);\n return function() {\n importItem.args = Ar
ray.prototype.slice.call(arguments, 0);\n importItem.isReady = true;\
n importSequencer.tryRun();\n };\n }\n\n addVariableImpo
rt(callback) {\n this.variableImports.push(callback);\n }\n\n tryRu
n() {\n this._currentDepth++;\n try {\n while (true) {\
n while (this.imports.length > 0) {\n const im
portItem = this.imports[0];\n if (!importItem.isReady) {\n
return;\n }\n this.im
ports = this.imports.slice(1);\n importItem.callback.apply(nu
ll, importItem.args);\n }\n if (this.variableImpor
ts.length === 0) {\n break;\n }\n
const variableImport = this.variableImports[0];\n this.variabl
eImports = this.variableImports.slice(1);\n variableImport();\n
}\n } finally {\n this._currentDepth--;\n }\n
if (this._currentDepth === 0 && this._onSequencerEmpty) {\n t
his._onSequencerEmpty();\n }\n }\n}\n\nexport default ImportSequencer;
\n","import contexts from '../contexts';\nimport Visitor from './visitor';\nimpo
rt ImportSequencer from './import-sequencer';\nimport * as utils from '../utils'
;\n\nconst ImportVisitor = function(importer, finish) {\n\n this._visitor = n
ew Visitor(this);\n this._importer = importer;\n this._finish = finish;\n
this.context = new contexts.Eval();\n this.importCount = 0;\n this.once
FileDetectionMap = {};\n this.recursionDetector = {};\n this._sequencer =
new ImportSequencer(this._onSequencerEmpty.bind(this));\n};\n\nImportVisitor.pro
totype = {\n isReplacing: false,\n run: function (root) {\n try {\n
// process the contents\n this._visitor.visit(root);\n
}\n catch (e) {\n this.error = e;\n }\n\n t
his.isFinished = true;\n this._sequencer.tryRun();\n },\n _onSequen
cerEmpty: function() {\n if (!this.isFinished) {\n return;\n
}\n this._finish(this.error);\n },\n visitImport: function (i
mportNode, visitArgs) {\n const inlineCSS = importNode.options.inline;\n\
n if (!importNode.css || inlineCSS) {\n\n const context = new
contexts.Eval(this.context, utils.copyArray(this.context.frames));\n
const importParent = context.frames[0];\n\n this.importCount++;\n
if (importNode.isVariableImport()) {\n this._sequencer.ad
dVariableImport(this.processImportNode.bind(this, importNode, context, importPar
ent));\n } else {\n this.processImportNode(importNode,
context, importParent);\n }\n }\n visitArgs.visitDeepe
r = false;\n },\n processImportNode: function(importNode, context, importP
arent) {\n let evaldImportNode;\n const inlineCSS = importNode.opt
ions.inline;\n\n try {\n evaldImportNode = importNode.evalForI
mport(context);\n } catch (e) {\n if (!e.filename) { e.index =
importNode.getIndex(); e.filename = importNode.fileInfo().filename; }\n
// attempt to eval properly and treat as css\n importNode.css = t
rue;\n // if that fails, this error will be thrown\n impor
tNode.error = e;\n }\n\n if (evaldImportNode && (!evaldImportNode.
css || inlineCSS)) {\n\n if (evaldImportNode.options.multiple) {\n
context.importMultiple = true;\n }\n\n // try
appending if we haven't determined if it is css or not\n const tryAp
pendLessExtension = evaldImportNode.css === undefined;\n\n for (let i
= 0; i < importParent.rules.length; i++) {\n if (importParent.ru
les[i] === importNode) {\n importParent.rules[i] = evaldImpor
tNode;\n break;\n }\n }\n\n
const onImported = this.onImported.bind(this, evaldImportNode, context), seq
uencedOnImported = this._sequencer.addImport(onImported);\n\n this._i
mporter.push(evaldImportNode.getPath(), tryAppendLessExtension, evaldImportNode.
fileInfo(),\n evaldImportNode.options, sequencedOnImported);\n
} else {\n this.importCount--;\n if (this.isFinished)
{\n this._sequencer.tryRun();\n }\n }\n },\
n onImported: function (importNode, context, e, root, importedAtRoot, fullPat
h) {\n if (e) {\n if (!e.filename) {\n e.index
= importNode.getIndex(); e.filename = importNode.fileInfo().filename;\n
}\n this.error = e;\n }\n\n const importVisitor = th
is,\n inlineCSS = importNode.options.inline,\n isPlugin =
importNode.options.isPlugin,\n isOptional = importNode.options.option
al,\n duplicateImport = importedAtRoot || fullPath in importVisitor.r
ecursionDetector;\n\n if (!context.importMultiple) {\n if (dup
licateImport) {\n importNode.skip = true;\n } else {\n
importNode.skip = function() {\n if (fullPath
in importVisitor.onceFileDetectionMap) {\n return true;\
n }\n importVisitor.onceFileDetectionMap[f
ullPath] = true;\n return false;\n };\n
}\n }\n\n if (!fullPath && isOptional) {\n importN
ode.skip = true;\n }\n\n if (root) {\n importNode.root
= root;\n importNode.importedFilename = fullPath;\n\n if (
!inlineCSS && !isPlugin && (context.importMultiple || !duplicateImport)) {\n
importVisitor.recursionDetector[fullPath] = true;\n\n
const oldContext = this.context;\n this.context = context;\n
try {\n this._visitor.visit(root);\n
} catch (e) {\n this.error = e;\n }\n
this.context = oldContext;\n }\n }\n\n import
Visitor.importCount--;\n\n if (importVisitor.isFinished) {\n i
mportVisitor._sequencer.tryRun();\n }\n },\n visitDeclaration: func
tion (declNode, visitArgs) {\n if (declNode.value.type === 'DetachedRules
et') {\n this.context.frames.unshift(declNode);\n } else {\n
visitArgs.visitDeeper = false;\n }\n },\n visitDeclaratio
nOut: function(declNode) {\n if (declNode.value.type === 'DetachedRuleset
') {\n this.context.frames.shift();\n }\n },\n visitAtRu
le: function (atRuleNode, visitArgs) {\n this.context.frames.unshift(atRu
leNode);\n },\n visitAtRuleOut: function (atRuleNode) {\n this.cont
ext.frames.shift();\n },\n visitMixinDefinition: function (mixinDefinition
Node, visitArgs) {\n this.context.frames.unshift(mixinDefinitionNode);\n
},\n visitMixinDefinitionOut: function (mixinDefinitionNode) {\n th
is.context.frames.shift();\n },\n visitRuleset: function (rulesetNode, vis
itArgs) {\n this.context.frames.unshift(rulesetNode);\n },\n visitR
ulesetOut: function (rulesetNode) {\n this.context.frames.shift();\n }
,\n visitMedia: function (mediaNode, visitArgs) {\n this.context.frame
s.unshift(mediaNode.rules[0]);\n },\n visitMediaOut: function (mediaNode)
{\n this.context.frames.shift();\n }\n};\nexport default ImportVisitor
;\n","class SetTreeVisibilityVisitor {\n constructor(visible) {\n this
.visible = visible;\n }\n\n run(root) {\n this.visit(root);\n }\
n\n visitArray(nodes) {\n if (!nodes) {\n return nodes;\n
}\n\n const cnt = nodes.length;\n let i;\n for (i = 0
; i < cnt; i++) {\n this.visit(nodes[i]);\n }\n return
nodes;\n }\n\n visit(node) {\n if (!node) {\n return nod
e;\n }\n if (node.constructor === Array) {\n return thi
s.visitArray(node);\n }\n\n if (!node.blocksVisibility || node.blo
cksVisibility()) {\n return node;\n }\n if (this.visibl
e) {\n node.ensureVisibility();\n } else {\n node.e
nsureInvisibility();\n }\n\n node.accept(this);\n return no
de;\n }\n}\n\nexport default SetTreeVisibilityVisitor;","import tree from '..
/tree';\nimport Visitor from './visitor';\nimport logger from '../logger';\nimpo
rt * as utils from '../utils';\n\n/* jshint loopfunc:true */\n\nclass ExtendFind
erVisitor {\n constructor() {\n this._visitor = new Visitor(this);\n
this.contexts = [];\n this.allExtendsStack = [[]];\n }\n\n ru
n(root) {\n root = this._visitor.visit(root);\n root.allExtends =
this.allExtendsStack[0];\n return root;\n }\n\n visitDeclaration(de
clNode, visitArgs) {\n visitArgs.visitDeeper = false;\n }\n\n visit
MixinDefinition(mixinDefinitionNode, visitArgs) {\n visitArgs.visitDeeper
= false;\n }\n\n visitRuleset(rulesetNode, visitArgs) {\n if (rule
setNode.root) {\n return;\n }\n\n let i;\n let j
;\n let extend;\n const allSelectorsExtendList = [];\n let
extendList;\n\n // get &:extend(.a); rules which apply to all selectors i
n this ruleset\n const rules = rulesetNode.rules, ruleCnt = rules ? rules
.length : 0;\n for (i = 0; i < ruleCnt; i++) {\n if (rulesetNo
de.rules[i] instanceof tree.Extend) {\n allSelectorsExtendList.pu
sh(rules[i]);\n rulesetNode.extendOnEveryPath = true;\n
}\n }\n\n // now find every selector and apply the extends that
apply to all extends\n // and the ones which apply to an individual exten
d\n const paths = rulesetNode.paths;\n for (i = 0; i < paths.lengt
h; i++) {\n const selectorPath = paths[i], selector = selectorPath[se
lectorPath.length - 1], selExtendList = selector.extendList;\n\n exte
ndList = selExtendList ? utils.copyArray(selExtendList).concat(allSelectorsExten
dList)\n : allSelectorsExtendList;\n\n if (extendList)
{\n extendList = extendList.map(function(allSelectorsExtend) {\n
return allSelectorsExtend.clone();\n });\n
}\n\n for (j = 0; j < extendList.length; j++) {\n
this.foundExtends = true;\n extend = extendList[j];\n
extend.findSelfSelectors(selectorPath);\n extend.ruleset
= rulesetNode;\n if (j === 0) { extend.firstExtendOnThisSelector
Path = true; }\n this.allExtendsStack[this.allExtendsStack.length
- 1].push(extend);\n }\n }\n\n this.contexts.push(rule
setNode.selectors);\n }\n\n visitRulesetOut(rulesetNode) {\n if (!r
ulesetNode.root) {\n this.contexts.length = this.contexts.length - 1;
\n }\n }\n\n visitMedia(mediaNode, visitArgs) {\n mediaNode.
allExtends = [];\n this.allExtendsStack.push(mediaNode.allExtends);\n
}\n\n visitMediaOut(mediaNode) {\n this.allExtendsStack.length = this.
allExtendsStack.length - 1;\n }\n\n visitAtRule(atRuleNode, visitArgs) {\n
atRuleNode.allExtends = [];\n this.allExtendsStack.push(atRuleNod
e.allExtends);\n }\n\n visitAtRuleOut(atRuleNode) {\n this.allExten
dsStack.length = this.allExtendsStack.length - 1;\n }\n}\n\nclass ProcessExte
ndsVisitor {\n constructor() {\n this._visitor = new Visitor(this);\n
}\n\n run(root) {\n const extendFinder = new ExtendFinderVisitor();
\n this.extendIndices = {};\n extendFinder.run(root);\n if
(!extendFinder.foundExtends) { return root; }\n root.allExtends = root.al
lExtends.concat(this.doExtendChaining(root.allExtends, root.allExtends));\n
this.allExtendsStack = [root.allExtends];\n const newRoot = this._visi
tor.visit(root);\n this.checkExtendsForNonMatched(root.allExtends);\n
return newRoot;\n }\n\n checkExtendsForNonMatched(extendList) {\n
const indices = this.extendIndices;\n extendList.filter(function(exten
d) {\n return !extend.hasFoundMatches && extend.parent_ids.length ==
1;\n }).forEach(function(extend) {\n let selector = '_unknown_
';\n try {\n selector = extend.selector.toCSS({});\n
}\n catch (_) {}\n\n if (!indices[`${extend.inde
x} ${selector}`]) {\n indices[`${extend.index} ${selector}`] = tr
ue;\n logger.warn(`extend '${selector}' has no matches`);\n
}\n });\n }\n\n doExtendChaining(extendsList, extendsListTarg
et, iterationCount) {\n //\n // chaining is different from normal
extension.. if we extend an extend then we are not just copying, altering\n
// and pasting the selector we would do normally, but we are also adding an e
xtend with the same target selector\n // this means this new extend can t
hen go and alter other extends\n //\n // this method deals with al
l the chaining work - without it, extend is flat and doesn't work on other exten
d selectors\n // this is also the most expensive.. and a match on one sel
ector can cause an extension of a selector we had already\n // processed
if we look at each selector at a time, as is done in visitRuleset\n\n let
extendIndex;\n\n let targetExtendIndex;\n let matches;\n c
onst extendsToAdd = [];\n let newSelector;\n const extendVisitor =
this;\n let selectorPath;\n let extend;\n let targetExtend
;\n let newExtend;\n\n iterationCount = iterationCount || 0;\n\n
// loop through comparing every extend with every target extend.\n
// a target extend is the one on the ruleset we are looking at copy/edit/pasting
in place\n // e.g. .a:extend(.b) {} and .b:extend(.c) {} then the firs
t extend extends the second one\n // and the second is the target.\n
// the separation into two lists allows us to process a subset of chains with
a bigger set, as is the\n // case when processing media queries\n
for (extendIndex = 0; extendIndex < extendsList.length; extendIndex++) {\n
for (targetExtendIndex = 0; targetExtendIndex < extendsListTarget.length;
targetExtendIndex++) {\n\n extend = extendsList[extendIndex];\n
targetExtend = extendsListTarget[targetExtendIndex];\n\n
// look for circular references\n if ( extend.parent_ids.i
ndexOf( targetExtend.object_id ) >= 0 ) { continue; }\n\n // find
a match in the target extends self selector (the bit before :extend)\n
selectorPath = [targetExtend.selfSelectors[0]];\n matches
= extendVisitor.findMatch(extend, selectorPath);\n\n if (matches.
length) {\n extend.hasFoundMatches = true;\n\n
// we found a match, so for each self selector..\n exten
d.selfSelectors.forEach(function(selfSelector) {\n const
info = targetExtend.visibilityInfo();\n\n // process the
extend as usual\n newSelector = extendVisitor.extendSelec
tor(matches, selectorPath, selfSelector, extend.isVisible());\n\n
// but now we create a new extend from it\n newE
xtend = new(tree.Extend)(targetExtend.selector, targetExtend.option, 0, targetEx
tend.fileInfo(), info);\n newExtend.selfSelectors = newSe
lector;\n\n // add the extend onto the list of extends fo
r that selector\n newSelector[newSelector.length - 1].ext
endList = [newExtend];\n\n // record that we need to add
it.\n extendsToAdd.push(newExtend);\n
newExtend.ruleset = targetExtend.ruleset;\n\n // reme
mber its parents for circular references\n newExtend.pare
nt_ids = newExtend.parent_ids.concat(targetExtend.parent_ids, extend.parent_ids)
;\n\n // only process the selector once.. if we have :ext
end(.a,.b) then multiple\n // extends will look at the sa
me selector path, so when extending\n // we know that any
others will be duplicates in terms of what is added to the css\n
if (targetExtend.firstExtendOnThisSelectorPath) {\n
newExtend.firstExtendOnThisSelectorPath = true;\n
targetExtend.ruleset.paths.push(newSelector);\n }\n
});\n }\n }\n }\n\n i
f (extendsToAdd.length) {\n // try to detect circular references to s
top a stack overflow.\n // may no longer be needed.\n this
.extendChainCount++;\n if (iterationCount > 100) {\n l
et selectorOne = '{unable to calculate}';\n let selectorTwo = '{u
nable to calculate}';\n try {\n selectorOne =
extendsToAdd[0].selfSelectors[0].toCSS();\n selectorTwo = ext
endsToAdd[0].selector.toCSS();\n }\n catch (e) {}\
n throw { message: `extend circular reference detected. One of th
e circular extends is currently:${selectorOne}:extend(${selectorTwo})`};\n
}\n\n // now process the new extends on the existing rules so t
hat we can handle a extending b extending c extending\n // d extendin
g e...\n return extendsToAdd.concat(extendVisitor.doExtendChaining(ex
tendsToAdd, extendsListTarget, iterationCount + 1));\n } else {\n
return extendsToAdd;\n }\n }\n\n visitDeclaration(ruleNode, vis
itArgs) {\n visitArgs.visitDeeper = false;\n }\n\n visitMixinDefini
tion(mixinDefinitionNode, visitArgs) {\n visitArgs.visitDeeper = false;\n
}\n\n visitSelector(selectorNode, visitArgs) {\n visitArgs.visitDe
eper = false;\n }\n\n visitRuleset(rulesetNode, visitArgs) {\n if (
rulesetNode.root) {\n return;\n }\n let matches;\n
let pathIndex;\n let extendIndex;\n const allExtends = this.all
ExtendsStack[this.allExtendsStack.length - 1];\n const selectorsToAdd = [
];\n const extendVisitor = this;\n let selectorPath;\n\n //
look at each selector path in the ruleset, find any extend matches and then cop
y, find and replace\n\n for (extendIndex = 0; extendIndex < allExtends.le
ngth; extendIndex++) {\n for (pathIndex = 0; pathIndex < rulesetNode.
paths.length; pathIndex++) {\n selectorPath = rulesetNode.paths[p
athIndex];\n\n // extending extends happens initially, before the
main pass\n if (rulesetNode.extendOnEveryPath) { continue; }\n
const extendList = selectorPath[selectorPath.length - 1].extendLis
t;\n if (extendList && extendList.length) { continue; }\n\n
matches = this.findMatch(allExtends[extendIndex], selectorPath);\n\n
if (matches.length) {\n allExtends[extendIndex]
.hasFoundMatches = true;\n\n allExtends[extendIndex].selfSele
ctors.forEach(function(selfSelector) {\n let extendedSele
ctors;\n extendedSelectors = extendVisitor.extendSelector
(matches, selectorPath, selfSelector, allExtends[extendIndex].isVisible());\n
selectorsToAdd.push(extendedSelectors);\n
});\n }\n }\n }\n rulesetNode.paths =
rulesetNode.paths.concat(selectorsToAdd);\n }\n\n findMatch(extend, haysta
ckSelectorPath) {\n //\n // look through the haystack selector pat
h to try and find the needle - extend.selector\n // returns an array of s
elector matches that can then be replaced\n //\n let haystackSelec
torIndex;\n\n let hackstackSelector;\n let hackstackElementIndex;\
n let haystackElement;\n let targetCombinator;\n let i;\n
const extendVisitor = this;\n const needleElements = extend.selecto
r.elements;\n const potentialMatches = [];\n let potentialMatch;\n
const matches = [];\n\n // loop through the haystack elements\n
for (haystackSelectorIndex = 0; haystackSelectorIndex < haystackSelectorPa
th.length; haystackSelectorIndex++) {\n hackstackSelector = haystackS
electorPath[haystackSelectorIndex];\n\n for (hackstackElementIndex =
0; hackstackElementIndex < hackstackSelector.elements.length; hackstackElementIn
dex++) {\n\n haystackElement = hackstackSelector.elements[hacksta
ckElementIndex];\n\n // if we allow elements before our match we
can add a potential match every time. otherwise only at the first element.\n
if (extend.allowBefore || (haystackSelectorIndex === 0 && hackstackE
lementIndex === 0)) {\n potentialMatches.push({pathIndex: hay
stackSelectorIndex, index: hackstackElementIndex, matched: 0,\n
initialCombinator: haystackElement.combinator});\n }\n\n
for (i = 0; i < potentialMatches.length; i++) {\n
potentialMatch = potentialMatches[i];\n\n // selectors add
\" \" onto the first element. When we use & it joins the selectors together, bu
t if we don't\n // then each selector in haystackSelectorPath
has a space before it added in the toCSS phase. so we need to\n
// work out what the resulting combinator will be\n targe
tCombinator = haystackElement.combinator.value;\n if (targetC
ombinator === '' && hackstackElementIndex === 0) {\n targ
etCombinator = ' ';\n }\n\n // if we don't
match, null our match to indicate failure\n if (!extendVisit
or.isElementValuesEqual(needleElements[potentialMatch.matched].value, haystackEl
ement.value) ||\n (potentialMatch.matched > 0 && needleEl
ements[potentialMatch.matched].combinator.value !== targetCombinator)) {\n
potentialMatch = null;\n } else {\n
potentialMatch.matched++;\n }\n\n
// if we are still valid and have finished, test whether we have element
s after and whether these are allowed\n if (potentialMatch) {
\n potentialMatch.finished = potentialMatch.matched === n
eedleElements.length;\n if (potentialMatch.finished &&\n
(!extend.allowAfter &&\n
(hackstackElementIndex + 1 < hackstackSelector.elements.length || haystackSel
ectorIndex + 1 < haystackSelectorPath.length))) {\n p
otentialMatch = null;\n }\n }\n
// if null we remove, if not, we are still valid, so either push as
a valid match or continue\n if (potentialMatch) {\n
if (potentialMatch.finished) {\n poten
tialMatch.length = needleElements.length;\n potential
Match.endPathIndex = haystackSelectorIndex;\n potenti
alMatch.endPathElementIndex = hackstackElementIndex + 1; // index after end of m
atch\n potentialMatches.length = 0; // we don't allow
matches to overlap, so start matching again\n matche
s.push(potentialMatch);\n }\n } else {
\n potentialMatches.splice(i, 1);\n
i--;\n }\n }\n }\n }\n
return matches;\n }\n\n isElementValuesEqual(elementValue1, elementVal
ue2) {\n if (typeof elementValue1 === 'string' || typeof elementValue2 ==
= 'string') {\n return elementValue1 === elementValue2;\n }\n
if (elementValue1 instanceof tree.Attribute) {\n if (elementVa
lue1.op !== elementValue2.op || elementValue1.key !== elementValue2.key) {\n
return false;\n }\n if (!elementValue1.value |
| !elementValue2.value) {\n if (elementValue1.value || elementVal
ue2.value) {\n return false;\n }\n
return true;\n }\n elementValue1 = elementValue1.value
.value || elementValue1.value;\n elementValue2 = elementValue2.value.
value || elementValue2.value;\n return elementValue1 === elementValue
2;\n }\n elementValue1 = elementValue1.value;\n elementValu
e2 = elementValue2.value;\n if (elementValue1 instanceof tree.Selector) {
\n if (!(elementValue2 instanceof tree.Selector) || elementValue1.ele
ments.length !== elementValue2.elements.length) {\n return false;
\n }\n for (let i = 0; i < elementValue1.elements.length;
i++) {\n if (elementValue1.elements[i].combinator.value !== elem
entValue2.elements[i].combinator.value) {\n if (i !== 0 || (e
lementValue1.elements[i].combinator.value || ' ') !== (elementValue2.elements[i]
.combinator.value || ' ')) {\n return false;\n
}\n }\n if (!this.isElementValuesEqual(el
ementValue1.elements[i].value, elementValue2.elements[i].value)) {\n
return false;\n }\n }\n return true
;\n }\n return false;\n }\n\n extendSelector(matches, select
orPath, replacementSelector, isVisible) {\n\n // for a set of matches, re
place each match with the replacement selector\n\n let currentSelectorPat
hIndex = 0, currentSelectorPathElementIndex = 0, path = [], matchIndex, selector
, firstElement, match, newElements;\n\n for (matchIndex = 0; matchIndex <
matches.length; matchIndex++) {\n match = matches[matchIndex];\n
selector = selectorPath[match.pathIndex];\n firstElement = ne
w tree.Element(\n match.initialCombinator,\n repla
cementSelector.elements[0].value,\n replacementSelector.elements[
0].isVariable,\n replacementSelector.elements[0].getIndex(),\n
replacementSelector.elements[0].fileInfo()\n );\n\n
if (match.pathIndex > currentSelectorPathIndex && currentSelectorPathElem
entIndex > 0) {\n path[path.length - 1].elements = path[path.leng
th - 1]\n .elements.concat(selectorPath[currentSelectorPathIn
dex].elements.slice(currentSelectorPathElementIndex));\n currentS
electorPathElementIndex = 0;\n currentSelectorPathIndex++;\n
}\n\n newElements = selector.elements\n .slice(
currentSelectorPathElementIndex, match.index)\n .concat([firstEle
ment])\n .concat(replacementSelector.elements.slice(1));\n\n
if (currentSelectorPathIndex === match.pathIndex && matchIndex > 0) {\n
path[path.length - 1].elements =\n path[path.le
ngth - 1].elements.concat(newElements);\n } else {\n p
ath = path.concat(selectorPath.slice(currentSelectorPathIndex, match.pathIndex))
;\n\n path.push(new tree.Selector(\n newElemen
ts\n ));\n }\n currentSelectorPathIndex = m
atch.endPathIndex;\n currentSelectorPathElementIndex = match.endPathE
lementIndex;\n if (currentSelectorPathElementIndex >= selectorPath[cu
rrentSelectorPathIndex].elements.length) {\n currentSelectorPathE
lementIndex = 0;\n currentSelectorPathIndex++;\n }\n
}\n\n if (currentSelectorPathIndex < selectorPath.length && current
SelectorPathElementIndex > 0) {\n path[path.length - 1].elements = pa
th[path.length - 1]\n .elements.concat(selectorPath[currentSelect
orPathIndex].elements.slice(currentSelectorPathElementIndex));\n curr
entSelectorPathIndex++;\n }\n\n path = path.concat(selectorPath.sl
ice(currentSelectorPathIndex, selectorPath.length));\n path = path.map(fu
nction (currentValue) {\n // we can re-use elements here, because the
visibility property matters only for selectors\n const derived = cur
rentValue.createDerived(currentValue.elements);\n if (isVisible) {\n
derived.ensureVisibility();\n } else {\n
derived.ensureInvisibility();\n }\n return derived;\n
});\n return path;\n }\n\n visitMedia(mediaNode, visitArgs) {\
n let newAllExtends = mediaNode.allExtends.concat(this.allExtendsStack[th
is.allExtendsStack.length - 1]);\n newAllExtends = newAllExtends.concat(t
his.doExtendChaining(newAllExtends, mediaNode.allExtends));\n this.allExt
endsStack.push(newAllExtends);\n }\n\n visitMediaOut(mediaNode) {\n
const lastIndex = this.allExtendsStack.length - 1;\n this.allExtendsStac
k.length = lastIndex;\n }\n\n visitAtRule(atRuleNode, visitArgs) {\n
let newAllExtends = atRuleNode.allExtends.concat(this.allExtendsStack[this.all
ExtendsStack.length - 1]);\n newAllExtends = newAllExtends.concat(this.do
ExtendChaining(newAllExtends, atRuleNode.allExtends));\n this.allExtendsS
tack.push(newAllExtends);\n }\n\n visitAtRuleOut(atRuleNode) {\n co
nst lastIndex = this.allExtendsStack.length - 1;\n this.allExtendsStack.l
ength = lastIndex;\n }\n}\n\nexport default ProcessExtendsVisitor;\n","import
Visitor from './visitor';\n\nclass JoinSelectorVisitor {\n constructor() {\n
this.contexts = [[]];\n this._visitor = new Visitor(this);\n }
\n\n run(root) {\n return this._visitor.visit(root);\n }\n\n vis
itDeclaration(declNode, visitArgs) {\n visitArgs.visitDeeper = false;\n
}\n\n visitMixinDefinition(mixinDefinitionNode, visitArgs) {\n visit
Args.visitDeeper = false;\n }\n\n visitRuleset(rulesetNode, visitArgs) {\n
const context = this.contexts[this.contexts.length - 1];\n const
paths = [];\n let selectors;\n\n this.contexts.push(paths);\n\n
if (!rulesetNode.root) {\n selectors = rulesetNode.selectors;\n
if (selectors) {\n selectors = selectors.filter(functi
on(selector) { return selector.getIsOutput(); });\n rulesetNode.s
electors = selectors.length ? selectors : (selectors = null);\n i
f (selectors) { rulesetNode.joinSelectors(paths, context, selectors); }\n
}\n if (!selectors) { rulesetNode.rules = null; }\n r
ulesetNode.paths = paths;\n }\n }\n\n visitRulesetOut(rulesetNode)
{\n this.contexts.length = this.contexts.length - 1;\n }\n\n visitM
edia(mediaNode, visitArgs) {\n const context = this.contexts[this.context
s.length - 1];\n mediaNode.rules[0].root = (context.length === 0 || conte
xt[0].multiMedia);\n }\n\n visitAtRule(atRuleNode, visitArgs) {\n c
onst context = this.contexts[this.contexts.length - 1];\n if (atRuleNode.
rules && atRuleNode.rules.length) {\n atRuleNode.rules[0].root = (atR
uleNode.isRooted || context.length === 0 || null);\n }\n }\n}\n\nexpor
t default JoinSelectorVisitor;\n","import tree from '../tree';\nimport Visitor f
rom './visitor';\n\nclass CSSVisitorUtils {\n constructor(context) {\n
this._visitor = new Visitor(this);\n this._context = context;\n }\n\n
containsSilentNonBlockedChild(bodyRules) {\n let rule;\n if (!
bodyRules) {\n return false;\n }\n for (let r = 0; r <
bodyRules.length; r++) {\n rule = bodyRules[r];\n if (rule
.isSilent && rule.isSilent(this._context) && !rule.blocksVisibility()) {\n
// the atrule contains something that was referenced (likely by extend
)\n // therefore it needs to be shown in output too\n
return true;\n }\n }\n return false;\n }\n\n
keepOnlyVisibleChilds(owner) {\n if (owner && owner.rules) {\n
owner.rules = owner.rules.filter(thing => thing.isVisible());\n }\n }
\n\n isEmpty(owner) {\n return (owner && owner.rules) \n ?
(owner.rules.length === 0) : true;\n }\n\n hasVisibleSelector(rulesetNode)
{\n return (rulesetNode && rulesetNode.paths)\n ? (rulesetNod
e.paths.length > 0) : false;\n }\n\n resolveVisibility(node, originalRules
) {\n if (!node.blocksVisibility()) {\n if (this.isEmpty(node)
&& !this.containsSilentNonBlockedChild(originalRules)) {\n retur
n ;\n }\n\n return node;\n }\n\n const compi
ledRulesBody = node.rules[0];\n this.keepOnlyVisibleChilds(compiledRulesB
ody);\n\n if (this.isEmpty(compiledRulesBody)) {\n return ;\n
}\n\n node.ensureVisibility();\n node.removeVisibilityBlock
();\n\n return node;\n }\n\n isVisibleRuleset(rulesetNode) {\n
if (rulesetNode.firstRoot) {\n return true;\n }\n\n
if (this.isEmpty(rulesetNode)) {\n return false;\n }\n\n
if (!rulesetNode.root && !this.hasVisibleSelector(rulesetNode)) {\n
return false;\n }\n\n return true;\n }\n}\n\nconst ToCSSVisito
r = function(context) {\n this._visitor = new Visitor(this);\n this._conte
xt = context;\n this.utils = new CSSVisitorUtils(context);\n};\n\nToCSSVisito
r.prototype = {\n isReplacing: true,\n run: function (root) {\n ret
urn this._visitor.visit(root);\n },\n\n visitDeclaration: function (declNo
de, visitArgs) {\n if (declNode.blocksVisibility() || declNode.variable)
{\n return;\n }\n return declNode;\n },\n\n visit
MixinDefinition: function (mixinNode, visitArgs) {\n // mixin definitions
do not get eval'd - this means they keep state\n // so we have to clear
that state here so it isn't used if toCSS is called twice\n mixinNode.fra
mes = [];\n },\n\n visitExtend: function (extendNode, visitArgs) {\n },
\n\n visitComment: function (commentNode, visitArgs) {\n if (commentNo
de.blocksVisibility() || commentNode.isSilent(this._context)) {\n ret
urn;\n }\n return commentNode;\n },\n\n visitMedia: function
(mediaNode, visitArgs) {\n const originalRules = mediaNode.rules[0].rules
;\n mediaNode.accept(this._visitor);\n visitArgs.visitDeeper = fal
se;\n\n return this.utils.resolveVisibility(mediaNode, originalRules);\n
},\n\n visitImport: function (importNode, visitArgs) {\n if (import
Node.blocksVisibility()) {\n return ;\n }\n return impo
rtNode;\n },\n\n visitAtRule: function(atRuleNode, visitArgs) {\n i
f (atRuleNode.rules && atRuleNode.rules.length) {\n return this.visit
AtRuleWithBody(atRuleNode, visitArgs);\n } else {\n return thi
s.visitAtRuleWithoutBody(atRuleNode, visitArgs);\n }\n },\n\n visit
Anonymous: function(anonymousNode, visitArgs) {\n if (!anonymousNode.bloc
ksVisibility()) {\n anonymousNode.accept(this._visitor);\n
return anonymousNode;\n }\n },\n\n visitAtRuleWithBody: function(a
tRuleNode, visitArgs) {\n // if there is only one nested ruleset and that
one has no path, then it is\n // just fake ruleset\n function has
FakeRuleset(atRuleNode) {\n const bodyRules = atRuleNode.rules;\n
return bodyRules.length === 1 && (!bodyRules[0].paths || bodyRules[0].pa
ths.length === 0);\n }\n function getBodyRules(atRuleNode) {\n
const nodeRules = atRuleNode.rules;\n if (hasFakeRuleset(atRu
leNode)) {\n return nodeRules[0].rules;\n }\n\n
return nodeRules;\n }\n // it is still true that it is only o
ne ruleset in array\n // this is last such moment\n // process chi
lds\n const originalRules = getBodyRules(atRuleNode);\n atRuleNode
.accept(this._visitor);\n visitArgs.visitDeeper = false;\n\n if (!
this.utils.isEmpty(atRuleNode)) {\n this._mergeRules(atRuleNode.rules
[0].rules);\n }\n\n return this.utils.resolveVisibility(atRuleNode
, originalRules);\n },\n\n visitAtRuleWithoutBody: function(atRuleNode, vi
sitArgs) {\n if (atRuleNode.blocksVisibility()) {\n return;\n
}\n\n if (atRuleNode.name === '@charset') {\n // Only o
utput the debug info together with subsequent @charset definitions\n
// a comment (or @media statement) before the actual @charset atrule would\n
// be considered illegal css as it has to be on the first line\n
if (this.charset) {\n if (atRuleNode.debugInfo) {\n
const comment = new tree.Comment(`/* ${atRuleNode.toCSS(this._context)
.replace(/\\n/g, '')} */\\n`);\n comment.debugInfo = atRuleNo
de.debugInfo;\n return this._visitor.visit(comment);\n
}\n return;\n }\n this.charset = t
rue;\n }\n\n return atRuleNode;\n },\n\n checkValidNodes: fu
nction(rules, isRoot) {\n if (!rules) {\n return;\n }\n
\n for (let i = 0; i < rules.length; i++) {\n const ruleNode =
rules[i];\n if (isRoot && ruleNode instanceof tree.Declaration && !r
uleNode.variable) {\n throw { message: 'Properties must be inside
selector blocks. They cannot be in the root',\n index: ruleN
ode.getIndex(), filename: ruleNode.fileInfo() && ruleNode.fileInfo().filename};\
n }\n if (ruleNode instanceof tree.Call) {\n
throw { message: `Function '${ruleNode.name}' did not return a root node`,\n
index: ruleNode.getIndex(), filename: ruleNode.fileInfo() && r
uleNode.fileInfo().filename};\n }\n if (ruleNode.type && !
ruleNode.allowRoot) {\n throw { message: `${ruleNode.type} node r
eturned by a function is not valid here`,\n index: ruleNode.g
etIndex(), filename: ruleNode.fileInfo() && ruleNode.fileInfo().filename};\n
}\n }\n },\n\n visitRuleset: function (rulesetNode, visitAr
gs) {\n // at this point rulesets are nested into each other\n let
rule;\n\n const rulesets = [];\n\n this.checkValidNodes(rulesetNo
de.rules, rulesetNode.firstRoot);\n\n if (!rulesetNode.root) {\n
// remove invisible paths\n this._compileRulesetPaths(rulesetNode)
;\n\n // remove rulesets from this ruleset body and compile them sepa
rately\n const nodeRules = rulesetNode.rules;\n\n let node
RuleCnt = nodeRules ? nodeRules.length : 0;\n for (let i = 0; i < nod
eRuleCnt; ) {\n rule = nodeRules[i];\n if (rule &&
rule.rules) {\n // visit because we are moving them out from
being a child\n rulesets.push(this._visitor.visit(rule));\n
nodeRules.splice(i, 1);\n nodeRuleCnt--;\n
continue;\n }\n i++;\n
}\n // accept the visitor to remove rules and refactor itself\n
// then we can decide nogw whether we want it or not\n // c
ompile body\n if (nodeRuleCnt > 0) {\n rulesetNode.acc
ept(this._visitor);\n } else {\n rulesetNode.rules = n
ull;\n }\n visitArgs.visitDeeper = false;\n } else
{ // if (! rulesetNode.root) {\n rulesetNode.accept(this._visitor);\n
visitArgs.visitDeeper = false;\n }\n\n if (rulesetNode
.rules) {\n this._mergeRules(rulesetNode.rules);\n this._r
emoveDuplicateRules(rulesetNode.rules);\n }\n\n // now decide whet
her we keep the ruleset\n if (this.utils.isVisibleRuleset(rulesetNode)) {
\n rulesetNode.ensureVisibility();\n rulesets.splice(0, 0,
rulesetNode);\n }\n\n if (rulesets.length === 1) {\n r
eturn rulesets[0];\n }\n return rulesets;\n },\n\n _compileR
ulesetPaths: function(rulesetNode) {\n if (rulesetNode.paths) {\n
rulesetNode.paths = rulesetNode.paths\n .filter(p => {\n
let i;\n if (p[0].elements[0].combinator.value
=== ' ') {\n p[0].elements[0].combinator = new(tree.Comb
inator)('');\n }\n for (i = 0; i < p.lengt
h; i++) {\n if (p[i].isVisible() && p[i].getIsOutput()) {
\n return true;\n }\n
}\n return false;\n });\n }\
n },\n\n _removeDuplicateRules: function(rules) {\n if (!rules) { r
eturn; }\n\n // remove duplicates\n const ruleCache = {};\n\n
let ruleList;\n let rule;\n let i;\n\n for (i = rules.le
ngth - 1; i >= 0 ; i--) {\n rule = rules[i];\n if (rule in
stanceof tree.Declaration) {\n if (!ruleCache[rule.name]) {\n
ruleCache[rule.name] = rule;\n } else {\n
ruleList = ruleCache[rule.name];\n if (ruleList i
nstanceof tree.Declaration) {\n ruleList = ruleCache[rule
.name] = [ruleCache[rule.name].toCSS(this._context)];\n }\n
const ruleCSS = rule.toCSS(this._context);\n
if (ruleList.indexOf(ruleCSS) !== -1) {\n rules.splice(
i, 1);\n } else {\n ruleList.push(rule
CSS);\n }\n }\n }\n }\n }
,\n\n _mergeRules: function(rules) {\n if (!rules) {\n retu
rn; \n }\n\n const groups = {};\n const groupsArr = [];\
n\n for (let i = 0; i < rules.length; i++) {\n const rule = ru
les[i];\n if (rule.merge) {\n const key = rule.name;\n
groups[key] ? rules.splice(i--, 1) : \n group
sArr.push(groups[key] = []);\n groups[key].push(rule);\n
}\n }\n\n groupsArr.forEach(group => {\n if (group.l
ength > 0) {\n const result = group[0];\n let spac
e = [];\n const comma = [new tree.Expression(space)];\n
group.forEach(rule => {\n if ((rule.merge === '+') &&
(space.length > 0)) {\n comma.push(new tree.Expression(s
pace = []));\n }\n space.push(rule.value);
\n result.important = result.important || rule.important;\n
});\n result.value = new tree.Value(comma);\n
}\n });\n }\n};\n\nexport default ToCSSVisitor;\n","import Visit
or from './visitor';\nimport ImportVisitor from './import-visitor';\nimport Mark
VisibleSelectorsVisitor from './set-tree-visibility-visitor';\nimport ExtendVisi
tor from './extend-visitor';\nimport JoinSelectorVisitor from './join-selector-v
isitor';\nimport ToCSSVisitor from './to-css-visitor';\n\nexport default {\n
Visitor,\n ImportVisitor,\n MarkVisibleSelectorsVisitor,\n ExtendVisito
r,\n JoinSelectorVisitor,\n ToCSSVisitor\n};\n","import chunker from './ch
unker';\n\nexport default () => {\n let // Less input string\n input;\
n\n let // current chunk\n j;\n\n const // holds state for backtrac
king\n saveStack = [];\n\n let // furthest index the parser has gone t
o\n furthest;\n\n let // if this is furthest we got to, this is the pr
obably cause\n furthestPossibleErrorMessage;\n\n let // chunkified inp
ut\n chunks;\n\n let // current chunk\n current;\n\n let //
index of current chunk, in `input`\n currentPos;\n\n const parserInput
= {};\n const CHARCODE_SPACE = 32;\n const CHARCODE_TAB = 9;\n const C
HARCODE_LF = 10;\n const CHARCODE_CR = 13;\n const CHARCODE_PLUS = 43;\n
const CHARCODE_COMMA = 44;\n const CHARCODE_FORWARD_SLASH = 47;\n const
CHARCODE_9 = 57;\n\n function skipWhitespace(length) {\n const oldi =
parserInput.i;\n const oldj = j;\n const curr = parserInput.i - cu
rrentPos;\n const endIndex = parserInput.i + current.length - curr;\n
const mem = (parserInput.i += length);\n const inp = input;\n
let c;\n let nextChar;\n let comment;\n\n for (; parserInpu
t.i < endIndex; parserInput.i++) {\n c = inp.charCodeAt(parserInput.i
);\n\n if (parserInput.autoCommentAbsorb && c === CHARCODE_FORWARD_SL
ASH) {\n nextChar = inp.charAt(parserInput.i + 1);\n
if (nextChar === '/') {\n comment = {index: parserInput.i,
isLineComment: true};\n let nextNewLine = inp.indexOf('\\n',
parserInput.i + 2);\n if (nextNewLine < 0) {\n
nextNewLine = endIndex;\n }\n pa
rserInput.i = nextNewLine;\n comment.text = inp.substr(commen
t.index, parserInput.i - comment.index);\n parserInput.commen
tStore.push(comment);\n continue;\n } else if
(nextChar === '*') {\n const nextStarSlash = inp.indexOf('*/'
, parserInput.i + 2);\n if (nextStarSlash >= 0) {\n
comment = {\n index: parserInput.i,\n
text: inp.substr(parserInput.i, nextStarSlash + 2 - pa
rserInput.i),\n isLineComment: false\n
};\n parserInput.i += comment.text.length - 1;\n
parserInput.commentStore.push(comment);\n
continue;\n }\n }\n br
eak;\n }\n\n if ((c !== CHARCODE_SPACE) && (c !== CHARCODE
_LF) && (c !== CHARCODE_TAB) && (c !== CHARCODE_CR)) {\n break;\n
}\n }\n\n current = current.slice(length + parserInput
.i - mem + curr);\n currentPos = parserInput.i;\n\n if (!current.l
ength) {\n if (j < chunks.length - 1) {\n current = ch
unks[++j];\n skipWhitespace(0); // skip space at the beginning of
a chunk\n return true; // things changed\n }\n
parserInput.finished = true;\n }\n\n return oldi !== parserIn
put.i || oldj !== j;\n }\n\n parserInput.save = () => {\n currentPo
s = parserInput.i;\n saveStack.push( { current, i: parserInput.i, j });\n
};\n parserInput.restore = possibleErrorMessage => {\n\n if (parse
rInput.i > furthest || (parserInput.i === furthest && possibleErrorMessage && !f
urthestPossibleErrorMessage)) {\n furthest = parserInput.i;\n
furthestPossibleErrorMessage = possibleErrorMessage;\n }\n con
st state = saveStack.pop();\n current = state.current;\n currentPo
s = parserInput.i = state.i;\n j = state.j;\n };\n parserInput.forg
et = () => {\n saveStack.pop();\n };\n parserInput.isWhitespace = o
ffset => {\n const pos = parserInput.i + (offset || 0);\n const co
de = input.charCodeAt(pos);\n return (code === CHARCODE_SPACE || code ===
CHARCODE_CR || code === CHARCODE_TAB || code === CHARCODE_LF);\n };\n\n /
/ Specialization of $(tok)\n parserInput.$re = tok => {\n if (parserIn
put.i > currentPos) {\n current = current.slice(parserInput.i - curre
ntPos);\n currentPos = parserInput.i;\n }\n\n const m =
tok.exec(current);\n if (!m) {\n return null;\n }\n\n
skipWhitespace(m[0].length);\n if (typeof m === 'string') {\n
return m;\n }\n\n return m.length === 1 ? m[0] : m;\n };
\n\n parserInput.$char = tok => {\n if (input.charAt(parserInput.i) !=
= tok) {\n return null;\n }\n skipWhitespace(1);\n
return tok;\n };\n\n parserInput.$str = tok => {\n const tokLeng
th = tok.length;\n\n // https://jsperf.com/string-startswith/21\n
for (let i = 0; i < tokLength; i++) {\n if (input.charAt(parserInput.
i + i) !== tok.charAt(i)) {\n return null;\n }\n
}\n\n skipWhitespace(tokLength);\n return tok;\n };\n\n pa
rserInput.$quoted = loc => {\n const pos = loc || parserInput.i;\n
const startChar = input.charAt(pos);\n\n if (startChar !== '\\'' && star
tChar !== '\"') {\n return;\n }\n const length = input.
length;\n const currentPosition = pos;\n\n for (let i = 1; i + cur
rentPosition < length; i++) {\n const nextChar = input.charAt(i + cur
rentPosition);\n switch (nextChar) {\n case '\\\\':\n
i++;\n continue;\n case '\\
r':\n case '\\n':\n break;\n ca
se startChar:\n const str = input.substr(currentPosition, i +
1);\n if (!loc && loc !== 0) {\n skip
Whitespace(i + 1);\n return str\n }\n
return [startChar, str];\n default:\n
}\n }\n return null;\n };\n\n /**\n * Permissive pars
ing. Ignores everything except matching {} [] () and quotes\n * until matchi
ng token (outside of blocks)\n */\n parserInput.$parseUntil = tok => {\n
let quote = '';\n let returnVal = null;\n let inComment = f
alse;\n let blockDepth = 0;\n const blockStack = [];\n cons
t parseGroups = [];\n const length = input.length;\n const startPo
s = parserInput.i;\n let lastPos = parserInput.i;\n let i = parser
Input.i;\n let loop = true;\n let testChar;\n\n if (typeof
tok === 'string') {\n testChar = char => char === tok\n } else
{\n testChar = char => tok.test(char)\n }\n\n do {\n
let prevChar;\n let nextChar = input.charAt(i);\n
if (blockDepth === 0 && testChar(nextChar)) {\n returnVal = inp
ut.substr(lastPos, i - lastPos);\n if (returnVal) {\n
parseGroups.push(returnVal);\n }\n else {\
n parseGroups.push(' ');\n }\n
returnVal = parseGroups;\n skipWhitespace(i - startPos);\n
loop = false\n } else {\n if (inComment) {\n
if (nextChar === '*' && \n input.charA
t(i + 1) === '/') {\n i++;\n block
Depth--;\n inComment = false;\n }\n
i++;\n continue;\n }\n
switch (nextChar) {\n case '\\\\':\n
i++;\n nextChar = input.charAt(i);\n
parseGroups.push(input.substr(lastPos, i - lastPos + 1));\n
lastPos = i + 1;\n break;\n
case '/':\n if (input.charAt(i + 1) === '*') {\n
i++;\n inComment = true;\n
blockDepth++;\n }\n
break;\n case '\\'':\n case '\"'
:\n quote = parserInput.$quoted(i);\n
if (quote) {\n parseGroups.push(input.substr(last
Pos, i - lastPos), quote);\n i += quote[1].length - 1
;\n lastPos = i + 1;\n }\n
else {\n skipWhitespace(i - start
Pos);\n returnVal = nextChar;\n
loop = false;\n }\n break;\n
case '{':\n blockStack.push('}');\n
blockDepth++;\n break;\n
case '(':\n blockStack.push(')');\n
blockDepth++;\n break;\n ca
se '[':\n blockStack.push(']');\n
blockDepth++;\n break;\n case '}':\n
case ')':\n case ']':\n
const expected = blockStack.pop();\n if (nextChar ===
expected) {\n blockDepth--;\n
} else {\n // move the parser to the error and retur
n expected\n skipWhitespace(i - startPos);\n
returnVal = expected;\n loop = fal
se;\n }\n }\n i++;\n
if (i > length) {\n loop = false;\n }
\n }\n prevChar = nextChar;\n } while (loop);\n\n
return returnVal ? returnVal : null;\n }\n\n parserInput.autoComment
Absorb = true;\n parserInput.commentStore = [];\n parserInput.finished = f
alse;\n\n // Same as $(), but don't change the state of the parser,\n // j
ust return the match.\n parserInput.peek = tok => {\n if (typeof tok =
== 'string') {\n // https://jsperf.com/string-startswith/21\n
for (let i = 0; i < tok.length; i++) {\n if (input.charAt(par
serInput.i + i) !== tok.charAt(i)) {\n return false;\n
}\n }\n return true;\n } else {\n
return tok.test(current);\n }\n };\n\n // Specialization of peek
()\n // TODO remove or change some currentChar calls to peekChar\n parserI
nput.peekChar = tok => input.charAt(parserInput.i) === tok;\n\n parserInput.c
urrentChar = () => input.charAt(parserInput.i);\n\n parserInput.prevChar = ()
=> input.charAt(parserInput.i - 1);\n\n parserInput.getInput = () => input;\
n\n parserInput.peekNotNumeric = () => {\n const c = input.charCodeAt(
parserInput.i);\n // Is the first char of the dimension 0-9, '.', '+' or
'-'\n return (c > CHARCODE_9 || c < CHARCODE_PLUS) || c === CHARCODE_FORW
ARD_SLASH || c === CHARCODE_COMMA;\n };\n\n parserInput.start = (str, chun
kInput, failFunction) => {\n input = str;\n parserInput.i = j = cu
rrentPos = furthest = 0;\n\n // chunking apparently makes things quicker
(but my tests indicate\n // it might actually make things slower in node
at least)\n // and it is a non-perfect parse - it can't recognise\n
// unquoted urls, meaning it can't distinguish comments\n // meaning co
mments with quotes or {}() in them get 'counted'\n // and then lead to pa
rse errors.\n // In addition if the chunking chunks in the wrong place we
might\n // not be able to parse a parser statement in one go\n //
this is officially deprecated but can be switched on via an option\n //
in the case it causes too much performance issues.\n if (chunkInput) {\n
chunks = chunker(str, failFunction);\n } else {\n c
hunks = [str];\n }\n\n current = chunks[0];\n\n skipWhitesp
ace(0);\n };\n\n parserInput.end = () => {\n let message;\n
const isFinished = parserInput.i >= input.length;\n\n if (parserInput.i <
furthest) {\n message = furthestPossibleErrorMessage;\n p
arserInput.i = furthest;\n }\n return {\n isFinished,\n
furthest: parserInput.i,\n furthestPossibleErrorMessage:
message,\n furthestReachedEnd: parserInput.i >= input.length - 1,\n
furthestChar: input[parserInput.i]\n };\n };\n\n return p
arserInput;\n};\n","// Split the input into chunks.\nexport default function (in
put, fail) {\n const len = input.length;\n let level = 0;\n let parenLe
vel = 0;\n let lastOpening;\n let lastOpeningParen;\n let lastMultiComm
ent;\n let lastMultiCommentEndBrace;\n const chunks = [];\n let emitFro
m = 0;\n let chunkerCurrentIndex;\n let currentChunkStartIndex;\n let c
c;\n let cc2;\n let matched;\n\n function emitChunk(force) {\n c
onst len = chunkerCurrentIndex - emitFrom;\n if (((len < 512) && !force)
|| !len) {\n return;\n }\n chunks.push(input.slice(emit
From, chunkerCurrentIndex + 1));\n emitFrom = chunkerCurrentIndex + 1;\n
}\n\n for (chunkerCurrentIndex = 0; chunkerCurrentIndex < len; chunkerCurr
entIndex++) {\n cc = input.charCodeAt(chunkerCurrentIndex);\n if (
((cc >= 97) && (cc <= 122)) || (cc < 34)) {\n // a-z or whitespace\n
continue;\n }\n\n switch (cc) {\n case 40:
// (\n parenLevel++;\n lastO
peningParen = chunkerCurrentIndex;\n continue;\n case
41: // )\n if (--parenLevel < 0) {\n
return fail('missing opening `(`', chunkerCurrentIndex);\n
}\n continue;\n case 59:
// ;\n if (!parenLevel) { emitChunk(); }\n conti
nue;\n case 123: // {\n level++;
\n lastOpening = chunkerCurrentIndex;\n continue;\
n case 125: // }\n if (--level <
0) {\n return fail('missing opening `{`', chunkerCurrentInde
x);\n }\n if (!level && !parenLevel) { emitChunk()
; }\n continue;\n case 92: // \
\\n if (chunkerCurrentIndex < len - 1) { chunkerCurrentIndex++; c
ontinue; }\n return fail('unescaped `\\\\`', chunkerCurrentIndex)
;\n case 34:\n case 39:\n case 96:
// \", ' and `\n matched = 0;\n current
ChunkStartIndex = chunkerCurrentIndex;\n for (chunkerCurrentIndex
= chunkerCurrentIndex + 1; chunkerCurrentIndex < len; chunkerCurrentIndex++) {\
n cc2 = input.charCodeAt(chunkerCurrentIndex);\n
if (cc2 > 96) { continue; }\n if (cc2 == cc) { matched
= 1; break; }\n if (cc2 == 92) { // \\\n
if (chunkerCurrentIndex == len - 1) {\n re
turn fail('unescaped `\\\\`', chunkerCurrentIndex);\n }\n
chunkerCurrentIndex++;\n }\n
}\n if (matched) { continue; }\n return fai
l(`unmatched \\`${String.fromCharCode(cc)}\\``, currentChunkStartIndex);\n
case 47: // /, check for comment\n i
f (parenLevel || (chunkerCurrentIndex == len - 1)) { continue; }\n
cc2 = input.charCodeAt(chunkerCurrentIndex + 1);\n if (cc2 == 4
7) {\n // //, find lnfeed\n for (chunkerCu
rrentIndex = chunkerCurrentIndex + 2; chunkerCurrentIndex < len; chunkerCurrentI
ndex++) {\n cc2 = input.charCodeAt(chunkerCurrentIndex);\
n if ((cc2 <= 13) && ((cc2 == 10) || (cc2 == 13))) { brea
k; }\n }\n } else if (cc2 == 42) {\n
// /*, find */\n lastMultiComment = currentChunkSta
rtIndex = chunkerCurrentIndex;\n for (chunkerCurrentIndex = c
hunkerCurrentIndex + 2; chunkerCurrentIndex < len - 1; chunkerCurrentIndex++) {\
n cc2 = input.charCodeAt(chunkerCurrentIndex);\n
if (cc2 == 125) { lastMultiCommentEndBrace = chunkerCurrentIndex;
}\n if (cc2 != 42) { continue; }\n
if (input.charCodeAt(chunkerCurrentIndex + 1) == 47) { break; }\n
}\n if (chunkerCurrentIndex == len - 1) {\n
return fail('missing closing `*/`', currentChunkStartIndex);\n
}\n chunkerCurrentIndex++;\n }\
n continue;\n case 42: // *, che
ck for unmatched */\n if ((chunkerCurrentIndex < len - 1) && (inp
ut.charCodeAt(chunkerCurrentIndex + 1) == 47)) {\n return fai
l('unmatched `/*`', chunkerCurrentIndex);\n }\n co
ntinue;\n }\n }\n\n if (level !== 0) {\n if ((lastMultiComme
nt > lastOpening) && (lastMultiCommentEndBrace > lastMultiComment)) {\n
return fail('missing closing `}` or `*/`', lastOpening);\n } else {\n
return fail('missing closing `}`', lastOpening);\n }\n } el
se if (parenLevel !== 0) {\n return fail('missing closing `)`', lastOpeni
ngParen);\n }\n\n emitChunk(true);\n return chunks;\n};\n","import Less
Error from '../less-error';\nimport tree from '../tree';\nimport visitors from '
../visitors';\nimport getParserInput from './parser-input';\nimport * as utils f
rom '../utils';\nimport functionRegistry from '../functions/function-registry';\
n\n//\n// less.js - parser\n//\n// A relatively straight-forward predictive p
arser.\n// There is no tokenization/lexing stage, the input is parsed\n//
in one sweep.\n//\n// To make the parser fast enough to run in the browser, s
everal\n// optimization had to be made:\n//\n// - Matching and slicing on
a huge input is often cause of slowdowns.\n// The solution is to chunkify t
he input into smaller strings.\n// The chunks are stored in the `chunks` va
r,\n// `j` holds the current chunk index, and `currentPos` holds\n// t
he index of the current chunk in relation to `input`.\n// This gives us an
almost 4x speed-up.\n//\n// - In many cases, we don't need to match individua
l tokens;\n// for example, if a value doesn't hold any variables, operation
s\n// or dynamic references, the parser can effectively 'skip' it,\n//
treating it as a literal.\n// An example would be '1px solid #000' - which
evaluates to itself,\n// we don't need to know what the individual compone
nts are.\n// The drawback, of course is that you don't get the benefits of\
n// syntax-checking on the CSS. This gives us a 50% speed-up in the parser,
\n// and a smaller speed-up in the code-gen.\n//\n//\n// Token matching
is done with the `$` function, which either takes\n// a terminal string or re
gexp, or a non-terminal function to call.\n// It also takes care of moving al
l the indices forwards.\n//\n\nconst Parser = function Parser(context, imports,
fileInfo) {\n let parsers;\n const parserInput = getParserInput();\n\n
function error(msg, type) {\n throw new LessError(\n {\n
index: parserInput.i,\n filename: fileInfo.filename,\n
type: type || 'Syntax',\n message: msg\n
},\n imports\n );\n }\n\n function expect(arg, msg) {\
n // some older browsers return typeof 'function' for RegExp\n con
st result = (arg instanceof Function) ? arg.call(parsers) : parserInput.$re(arg)
;\n if (result) {\n return result;\n }\n \n
error(msg || (typeof arg === 'string'\n ? `expected '${arg}' got '
${parserInput.currentChar()}'`\n : 'unexpected token'));\n }\n\n
// Specialization of expect()\n function expectChar(arg, msg) {\n if
(parserInput.$char(arg)) {\n return arg;\n }\n error(m
sg || `expected '${arg}' got '${parserInput.currentChar()}'`);\n }\n\n fun
ction getDebugInfo(index) {\n const filename = fileInfo.filename;\n\n
return {\n lineNumber: utils.getLocation(index, parserInput.getIn
put()).line + 1,\n fileName: filename\n };\n }\n\n /**\n
* Used after initial parsing to create nodes on the fly\n * \n *
@param {String} str - string to parse \n * @param {Array} parseLi
st - array of parsers to run input through e.g. [\"value\", \"important\"]\n
* @param {Number} currentIndex - start number to begin indexing\n * @p
aram {Object} fileInfo - fileInfo to attach to created nodes\n */\n f
unction parseNode(str, parseList, currentIndex, fileInfo, callback) {\n l
et result;\n const returnNodes = [];\n const parser = parserInput;
\n\n try {\n parser.start(str, false, function fail(msg, index
) {\n callback({\n message: msg,\n
index: index + currentIndex\n });\n });\n
for (let x = 0, p, i; (p = parseList[x]); x++) {\n i = par
ser.i;\n result = parsers[p]();\n if (result) {\n
try {\n result._index = i + currentInd
ex;\n result._fileInfo = fileInfo;\n }
catch (e) {}\n returnNodes.push(result);\n }\
n else {\n returnNodes.push(null);\n
}\n }\n\n const endInfo = parser.end();\n
if (endInfo.isFinished) {\n callback(null, returnNodes);\n
}\n else {\n callback(true, null);\n
}\n } catch (e) {\n throw new LessError({\n ind
ex: e.index + currentIndex,\n message: e.message\n },
imports, fileInfo.filename);\n }\n }\n\n //\n // The Parser\n
//\n return {\n parserInput,\n imports,\n fileInfo,\n
parseNode,\n //\n // Parse an input string into an abstract
syntax tree,\n // @param str A string containing 'less' markup\n /
/ @param callback call `callback` when done.\n // @param [additionalData]
An optional map which can contains vars - a map (key, value) of variables to ap
ply\n //\n parse: function (str, callback, additionalData) {\n
let root;\n let err = null;\n let globalVars;\n
let modifyVars;\n let ignored;\n let preText = ''
;\n\n // Optionally disable @plugin parsing\n if (addition
alData && additionalData.disablePluginRule) {\n parsers.plugin =
function() {\n var dir = parserInput.$re(/^@plugin?\\s+/);\n
if (dir) {\n error('@plugin statements
are not allowed when disablePluginRule is set to true');\n }
\n }\n };\n\n globalVars = (additionalData
&& additionalData.globalVars) ? `${Parser.serializeVars(additionalData.globalVar
s)}\\n` : '';\n modifyVars = (additionalData && additionalData.modify
Vars) ? `\\n${Parser.serializeVars(additionalData.modifyVars)}` : '';\n\n
if (context.pluginManager) {\n const preProcessors = context
.pluginManager.getPreProcessors();\n for (let i = 0; i < preProce
ssors.length; i++) {\n str = preProcessors[i].process(str, {
context, imports, fileInfo });\n }\n }\n\n
if (globalVars || (additionalData && additionalData.banner)) {\n
preText = ((additionalData && additionalData.banner) ? additionalData.banner : '
') + globalVars;\n ignored = imports.contentsIgnoredChars;\n
ignored[fileInfo.filename] = ignored[fileInfo.filename] || 0;\n
ignored[fileInfo.filename] += preText.length;\n }\n\n
str = str.replace(/\\r\\n?/g, '\\n');\n // Remove potential UTF
Byte Order Mark\n str = preText + str.replace(/^\\uFEFF/, '') + modi
fyVars;\n imports.contents[fileInfo.filename] = str;\n\n /
/ Start with the primary rule.\n // The whole syntax tree is held und
er a Ruleset node,\n // with the `root` property set to true, so no `
{}` are\n // output. The callback is called when the input is parsed.
\n try {\n parserInput.start(str, context.chunkInput,
function fail(msg, index) {\n throw new LessError({\n
index,\n type: 'Parse',\n
message: msg,\n filename: fileInfo.filename\n
}, imports);\n });\n\n tree.Node.p
rototype.parse = this;\n root = new tree.Ruleset(null, this.parse
rs.primary());\n tree.Node.prototype.rootNode = root;\n
root.root = true;\n root.firstRoot = true;\n
root.functionRegistry = functionRegistry.inherit();\n \n
} catch (e) {\n return callback(new LessError(e, imports, fil
eInfo.filename));\n }\n\n // If `i` is smaller than the `i
nput.length - 1`,\n // it means the parser wasn't able to parse the w
hole\n // string, so we've got a parsing error.\n //\n
// We try to extract a \\n delimited string,\n // showing the
line where the parse error occurred.\n // We split it up into two pa
rts (the part which parsed,\n // and the part which didn't), so we ca
n color them differently.\n const endInfo = parserInput.end();\n
if (!endInfo.isFinished) {\n\n let message = endInfo.furth
estPossibleErrorMessage;\n\n if (!message) {\n
message = 'Unrecognised input';\n if (endInfo.furthestChar =
== '}') {\n message += '. Possibly missing opening \\'{\\
'';\n } else if (endInfo.furthestChar === ')') {\n
message += '. Possibly missing opening \\'(\\'';\n
} else if (endInfo.furthestReachedEnd) {\n message +=
'. Possibly missing something';\n }\n }\n\n
err = new LessError({\n type: 'Parse',\n
message,\n index: endInfo.furthest,\n
filename: fileInfo.filename\n }, imports);\n }
\n\n const finish = e => {\n e = err || e || imports.e
rror;\n\n if (e) {\n if (!(e instanceof LessEr
ror)) {\n e = new LessError(e, imports, fileInfo.filename
);\n }\n\n return callback(e);\n
}\n else {\n return callback(null, root)
;\n }\n };\n\n if (context.processImports !
== false) {\n new visitors.ImportVisitor(imports, finish)\n
.run(root);\n } else {\n return finish()
;\n }\n },\n\n //\n // Here in, the parsing rule
s/functions\n //\n // The basic structure of the syntax tree gener
ated is as follows:\n //\n // Ruleset -> Declaration -> Value -
> Expression -> Entity\n //\n // Here's some Less code:\n /
/\n // .class {\n // color: #fff;\n // border:
1px solid #000;\n // width: @w + 4px;\n // > .child {..
.}\n // }\n //\n // And here's what the parse tree might
look like:\n //\n // Ruleset (Selector '.class', [\n /
/ Declaration (\"color\", Value ([Expression [Color #fff]]))\n /
/ Declaration (\"border\", Value ([Expression [Dimension 1px][Keyword \"
solid\"][Color #000]]))\n // Declaration (\"width\", Value ([Exp
ression [Operation \" + \" [Variable \"@w\"][Dimension 4px]]]))\n //
Ruleset (Selector [Element '>', '.child'], [...])\n // ])\n
//\n // In general, most rules will try to parse a token with the `$re
()` function, and if the return\n // value is truly, will return a new n
ode, of the relevant type. Sometimes, we need to check\n // first, befor
e parsing, that's when we use `peek()`.\n //\n parsers: parsers =
{\n //\n // The `primary` rule is the *entry* and *exit* p
oint of the parser.\n // The rules here can appear at any level of th
e parse tree.\n //\n // The recursive nature of the gramma
r is an interplay between the `block`\n // rule, which represents `{
... }`, the `ruleset` rule, and this `primary` rule,\n // as represen
ted by this simplified grammar:\n //\n // primary →
(ruleset | declaration)+\n // ruleset → selector+ block\n
// block → '{' primary '}'\n //\n // Only at
one point is the primary rule not called from the\n // block rule: a
t the root level.\n //\n primary: function () {\n
const mixin = this.mixin;\n let root = [];\n
let node;\n\n while (true) {\n while (true)
{\n node = this.comment();\n if (!
node) { break; }\n root.push(node);\n
}\n // always process comments before deciding if finished\n
if (parserInput.finished) {\n break;\n
}\n if (parserInput.peek('}')) {\n
break;\n }\n\n node = thi
s.extendRule();\n if (node) {\n root =
root.concat(node);\n continue;\n }\n\
n node = mixin.definition() || this.declaration() || mixin.ca
ll(false, false) || \n this.ruleset() || this.variableCal
l() || this.entities.call() || this.atrule();\n if (node) {\n
root.push(node);\n } else {\n
let foundSemiColon = false;\n while (pars
erInput.$char(';')) {\n foundSemiColon = true;\n
}\n if (!foundSemiColon) {\n
break;\n }\n }\n
}\n\n return root;\n },\n\n //
comments are collected by the main parsing mechanism and then assigned to nodes\
n // where the current structure allows it\n comment: func
tion () {\n if (parserInput.commentStore.length) {\n
const comment = parserInput.commentStore.shift();\n re
turn new(tree.Comment)(comment.text, comment.isLineComment, comment.index, fileI
nfo);\n }\n },\n\n //\n // Entit
ies are tokens which can be found inside an Expression\n //\n
entities: {\n mixinLookup: function() {\n
return parsers.mixin.call(true, true);\n },\n //\n
// A string, which supports escaping \" and '\n /
/\n // \"milky way\" 'he\\'s the one!'\n //\n
quoted: function (forceEscaped) {\n let str;\n
const index = parserInput.i;\n let isEsca
ped = false;\n\n parserInput.save();\n if
(parserInput.$char('~')) {\n isEscaped = true;\n
} else if (forceEscaped) {\n parserInput.resto
re();\n return;\n }\n\n
str = parserInput.$quoted();\n if (!str) {\n
parserInput.restore();\n return;\n
}\n parserInput.forget();\n\n ret
urn new(tree.Quoted)(str.charAt(0), str.substr(1, str.length - 2), isEscaped, in
dex, fileInfo);\n },\n\n //\n // A
catch-all word, such as:\n //\n // black borde
r-collapse\n //\n keyword: function () {\n
const k = parserInput.$char('%') || parserInput.$re(/^\\[?(?:[\\w-]|
\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+\\]?/);\n if (k) {\n
return tree.Color.fromKeyword(k) || new(tree.Keyword)(k)
;\n }\n },\n\n //\n
// A function call\n //\n // rgb(255, 0, 2
55)\n //\n // The arguments are parsed with the `e
ntities.arguments` parser.\n //\n call: function (
) {\n let name;\n let args;\n
let func;\n const index = parserInput.i;\n\n
// http://jsperf.com/case-insensitive-regex-vs-strtolower-then-regex/1
8\n if (parserInput.peek(/^url\\(/i)) {\n
return;\n }\n\n parserInput.save();\n\
n name = parserInput.$re(/^([\\w-]+|%|~|progid:[\\w\\.]+)\\(/
);\n if (!name) {\n parserInput.forget
(); \n return;\n }\n\n
name = name[1];\n func = this.customFuncCall(name);\n
if (func) {\n args = func.parse();\n
if (args && func.stop) {\n parserI
nput.forget();\n return args;\n
}\n }\n\n args = this.arguments(args);\n
\n if (!parserInput.$char(')')) {\n pa
rserInput.restore('Could not parse call arguments or missing \\')\\'');\n
return;\n }\n\n parserInp
ut.forget();\n\n return new(tree.Call)(name, args, index, fil
eInfo);\n },\n \n //\n
// Parsing rules for functions with non-standard args, e.g.:\n
//\n // boolean(not(2 > 1))\n //\n
// This is a quick prototype, to be modified/improved when\n
// more custom-parsed funcs come (e.g. `selector(...)`)\n
//\n\n customFuncCall: function (name) {\n /
* Ideally the table is to be moved out of here for faster perf.,\n
but it's quite tricky since it relies on all these `parsers`\n
and `expect` available only here */\n return {\
n alpha: f(parsers.ieAlpha, true),\n
boolean: f(condition),\n 'if': f(condition)\n
}[name.toLowerCase()];\n\n function f(parse,
stop) {\n return {\n parse, //
parsing function\n stop // when true - stop after
parse() and return its result, \n // otherwise contin
ue for plain args\n };\n }\n
\n function condition() {\n retu
rn [expect(parsers.condition, 'expected condition')];\n }\n
},\n\n arguments: function (prevArgs) {\n
let argsComma = prevArgs || [];\n const argsSemiCol
on = [];\n let isSemiColonSeparated;\n let
value;\n\n parserInput.save();\n\n while
(true) {\n if (prevArgs) {\n p
revArgs = false;\n } else {\n
value = parsers.detachedRuleset() || this.assignment() || parsers.expression();\
n if (!value) {\n brea
k;\n }\n\n if (value.value
&& value.value.length == 1) {\n value = value.va
lue[0];\n }\n\n argsComma.
push(value);\n }\n\n if (parserInp
ut.$char(',')) {\n continue;\n
}\n\n if (parserInput.$char(';') || isSemiColonSeparated
) {\n isSemiColonSeparated = true;\n
value = (argsComma.length < 1) ? argsComma[0]\n
: new tree.Value(argsComma);\n argsSemiColo
n.push(value);\n argsComma = [];\n
}\n }\n\n parserInput.forget();\n
return isSemiColonSeparated ? argsSemiColon : argsComma;\n
},\n literal: function () {\n return
this.dimension() ||\n this.color() ||\n
this.quoted() ||\n this.unicodeDescriptor
();\n },\n\n // Assignments are argument entities
for calls.\n // They are present in ie filter properties as shown
below.\n //\n // filter: progid:DXImageTransf
orm.Microsoft.Alpha( *opacity=50* )\n //\n\n assig
nment: function () {\n let key;\n let valu
e;\n parserInput.save();\n key = parserInp
ut.$re(/^\\w+(?=\\s?=)/i);\n if (!key) {\n
parserInput.restore();\n return;\n
}\n if (!parserInput.$char('=')) {\n
parserInput.restore();\n return;\n }\
n value = parsers.entity();\n if (value) {
\n parserInput.forget();\n return
new(tree.Assignment)(key, value);\n } else {\n
parserInput.restore();\n }\n },\n\n
//\n // Parse url() tokens\n //\n
// We use a specific rule for urls, because they don't really behav
e like\n // standard function calls. The difference is that the a
rgument doesn't have\n // to be enclosed within a string, so it c
an't be parsed as an Expression.\n //\n url: funct
ion () {\n let value;\n const index = pars
erInput.i;\n\n parserInput.autoCommentAbsorb = false;\n\n
if (!parserInput.$str('url(')) {\n parser
Input.autoCommentAbsorb = true;\n return;\n
}\n\n value = this.quoted() || this.variable() || this.
property() ||\n parserInput.$re(/^(?:(?:\\\\[\\(\\)'\
"])|[^\\(\\)'\"])+/) || '';\n\n parserInput.autoCommentAbsorb
= true;\n\n expectChar(')');\n\n return n
ew(tree.URL)((value.value != null || \n value instanceof
tree.Variable || \n value instanceof tree.Property) ?\n
value : new(tree.Anonymous)(value, index), index, fileInfo
);\n },\n\n //\n // A Variable enti
ty, such as `@fink`, in\n //\n // width: @fink
+ 2px\n //\n // We use a different parser for var
iable definitions,\n // see `parsers.variable`.\n
//\n variable: function () {\n let ch;\n
let name;\n const index = parserInput.i;\n\n
parserInput.save();\n if (parserInput.curren
tChar() === '@' && (name = parserInput.$re(/^@@?[\\w-]+/))) {\n
ch = parserInput.currentChar();\n if (ch === '(' |
| ch === '[' && !parserInput.prevChar().match(/^\\s/)) {\n
// this may be a VariableCall lookup\n const re
sult = parsers.variableCall(name);\n if (result) {\n
parserInput.forget();\n
return result;\n }\n }\n
parserInput.forget();\n return ne
w(tree.Variable)(name, index, fileInfo);\n }\n
parserInput.restore();\n },\n\n // A variable
entity using the protective {} e.g. @{var}\n variableCurly: func
tion () {\n let curly;\n const index = par
serInput.i;\n\n if (parserInput.currentChar() === '@' && (cur
ly = parserInput.$re(/^@\\{([\\w-]+)\\}/))) {\n return ne
w(tree.Variable)(`@${curly[1]}`, index, fileInfo);\n }\n
},\n //\n // A Property accessor, such
as `$color`, in\n //\n // background-color: $c
olor\n //\n property: function () {\n
let name;\n const index = parserInput.i;\n\n
if (parserInput.currentChar() === '$' && (name = parserInput.$re(/^\\$
[\\w-]+/))) {\n return new(tree.Property)(name, index, fi
leInfo);\n }\n },\n\n // A prop
erty entity useing the protective {} e.g. ${prop}\n propertyCurly
: function () {\n let curly;\n const index
= parserInput.i;\n\n if (parserInput.currentChar() === '$' &
& (curly = parserInput.$re(/^\\$\\{([\\w-]+)\\}/))) {\n r
eturn new(tree.Property)(`$${curly[1]}`, index, fileInfo);\n
}\n },\n //\n // A Hexadecimal colo
r\n //\n // #4F3C2F\n //\n
// `rgb` and `hsl` colors are parsed through the `entities.call` pars
er.\n //\n color: function () {\n
let rgb;\n parserInput.save();\n\n if (
parserInput.currentChar() === '#' && (rgb = parserInput.$re(/^#([A-Fa-f0-9]{8}|[
A-Fa-f0-9]{6}|[A-Fa-f0-9]{3,4})([\\w.#\\[])?/))) {\n if (
!rgb[2]) {\n parserInput.forget();\n
return new(tree.Color)(rgb[1], undefined, rgb[0]);\n
} \n }\n parserInput.restore();\n
},\n\n colorKeyword: function () {\n
parserInput.save();\n const autoCommentAbsorb = parserIn
put.autoCommentAbsorb;\n parserInput.autoCommentAbsorb = fals
e;\n const k = parserInput.$re(/^[_A-Za-z-][_A-Za-z0-9-]+/);\
n parserInput.autoCommentAbsorb = autoCommentAbsorb;\n
if (!k) {\n parserInput.forget();\n
return;\n }\n parserInput.r
estore();\n const color = tree.Color.fromKeyword(k);\n
if (color) {\n parserInput.$str(k);\n
return color;\n }\n },\n\n
//\n // A Dimension, that is, a number and a unit\n
//\n // 0.5em 95%\n //\n
dimension: function () {\n if (parserInput.peekNotNu
meric()) {\n return;\n }\n\n
const value = parserInput.$re(/^([+-]?\\d*\\.?\\d+)(%|[a-z_]+)?/i);\n
if (value) {\n return new(tree.Dimensi
on)(value[1], value[2]);\n }\n },\n\n
//\n // A unicode descriptor, as is used in unicode-range\
n //\n // U+0?? or U+00A1-00A9\n /
/\n unicodeDescriptor: function () {\n let ud;
\n\n ud = parserInput.$re(/^U\\+[0-9a-fA-F?]+(\\-[0-9a-fA-F?]
+)?/);\n if (ud) {\n return new(tree.U
nicodeDescriptor)(ud[0]);\n }\n },\n\n
//\n // JavaScript code to be evaluated\n
//\n // `window.location.href`\n //\n
javascript: function () {\n let js;\n
const index = parserInput.i;\n\n parserInput.save();\n\n
const escape = parserInput.$char('~');\n co
nst jsQuote = parserInput.$char('`');\n\n if (!jsQuote) {\n
parserInput.restore();\n return;\n
}\n\n js = parserInput.$re(/^[^`]*`/);\n
if (js) {\n parserInput.forget();\n
return new(tree.JavaScript)(js.substr(0, js.length - 1), Boo
lean(escape), index, fileInfo);\n }\n pars
erInput.restore('invalid javascript definition');\n }\n
},\n\n //\n // The variable part of a variable definitio
n. Used in the `rule` parser\n //\n // @fink:\n
//\n variable: function () {\n let name;\n\n
if (parserInput.currentChar() === '@' && (name = parserInput.$re(/^(@
[\\w-]+)\\s*:/))) { return name[1]; }\n },\n\n //\n
// Call a variable value to retrieve a detached ruleset\n // or
a value from a detached ruleset's rules.\n //\n // @fi
nk();\n // @fink;\n // color: @fink[@color];\n
//\n variableCall: function (parsedName) {\n l
et lookups;\n const i = parserInput.i;\n const inV
alue = !!parsedName;\n let name = parsedName;\n\n
parserInput.save();\n\n if (name || (parserInput.currentChar() ==
= '@'\n && (name = parserInput.$re(/^(@[\\w-]+)(\\(\\s*\\))?/
)))) {\n\n lookups = this.mixin.ruleLookups();\n\n
if (!lookups && ((inValue && parserInput.$str('()') !== '()') || (name[
2] !== '()'))) {\n parserInput.restore('Missing \\'[...]\
\' lookup in variable call');\n return;\n
}\n\n if (!inValue) {\n name = nam
e[1];\n }\n\n const call = new tree.Variab
leCall(name, i, fileInfo);\n if (!inValue && parsers.end()) {
\n parserInput.forget();\n return
call;\n }\n else {\n
parserInput.forget();\n return new tree.NamespaceValue(
call, lookups, i, fileInfo);\n }\n }\n\n
parserInput.restore();\n },\n\n //\n
// extend syntax - used to extend selectors\n //\n extend:
function(isRule) {\n let elements;\n let e;\n
const index = parserInput.i;\n let option;\n
let extendList;\n let extend;\n\n if (!pars
erInput.$str(isRule ? '&:extend(' : ':extend(')) {\n return;\
n }\n\n do {\n option = null;\n
elements = null;\n while (!(option = pars
erInput.$re(/^(all)(?=\\s*(\\)|,))/))) {\n e = this.eleme
nt();\n if (!e) {\n break;\n
}\n if (elements) {\n
elements.push(e);\n } else {\n
elements = [ e ];\n }\n
}\n\n option = option && option[1];\n if
(!elements) {\n error('Missing target selector for :exten
d().');\n }\n extend = new(tree.Extend)(ne
w(tree.Selector)(elements), option, index, fileInfo);\n if (e
xtendList) {\n extendList.push(extend);\n
} else {\n extendList = [ extend ];\n
}\n } while (parserInput.$char(','));\n\n expe
ct(/^\\)/);\n\n if (isRule) {\n expect(/^;/);\
n }\n\n return extendList;\n },\n\n
//\n // extendRule - used in a rule to extend all the parent
selectors\n //\n extendRule: function() {\n
return this.extend(true);\n },\n\n //\n // Mix
ins\n //\n mixin: {\n //\n /
/ A Mixin call, with an optional argument list\n //\n
// #mixins > .square(#fff);\n // #mixins.square(#fff)
;\n // .rounded(4px, black);\n // .button;
\n //\n // We can lookup / return a value using th
e lookup syntax:\n //\n // color: #mixin.squar
e(#fff)[@color];\n //\n // The `while` loop is the
re because mixins can be\n // namespaced, but we only support the
child and descendant\n // selector for now.\n //\
n call: function (inValue, getLookup) {\n cons
t s = parserInput.currentChar();\n let important = false;\n
let lookups;\n const index = parserInput.i;
\n let elements;\n let args;\n
let hasParens;\n\n if (s !== '.' && s !== '#') { retu
rn; }\n\n parserInput.save(); // stop us absorbing part of an
invalid selector\n\n elements = this.elements();\n\n
if (elements) {\n if (parserInput.$char('('))
{\n args = this.args(true).args;\n
expectChar(')');\n hasParens = true;\n
}\n\n if (getLookup !== false) {\n
lookups = this.ruleLookups();\n }
\n if (getLookup === true && !lookups) {\n
parserInput.restore();\n return;\n
}\n\n if (inValue && !lookups && !hasPa
rens) {\n // This isn't a valid in-value mixin call\n
parserInput.restore();\n
return;\n }\n\n if (!inValue && pa
rsers.important()) {\n important = true;\n
}\n\n if (inValue || parsers.end()) {\n
parserInput.forget();\n const
mixin = new(tree.mixin.Call)(elements, args, index, fileInfo, !lookups && import
ant);\n if (lookups) {\n
return new tree.NamespaceValue(mixin, lookups);\n
}\n else {\n return mi
xin;\n }\n }\n
}\n\n parserInput.restore();\n },\n
/**\n * Matching elements for mixins\n
* (Start with . or # and can have > )\n */\n elem
ents: function() {\n let elements;\n let e
;\n let c;\n let elem;\n
let elemIndex;\n const re = /^[#.](?:[\\w-]|\\\\(?:[A-Fa-f0
-9]{1,6} ?|[^A-Fa-f0-9]))+/;\n while (true) {\n
elemIndex = parserInput.i;\n e = parserInput.$r
e(re);\n \n if (!e) {\n
break;\n }\n elem
= new(tree.Element)(c, e, false, elemIndex, fileInfo);\n
if (elements) {\n elements.push(elem);\n
} else {\n elements = [ elem ];\n
}\n c = parserInput.$char('>');\n
}\n return elements;\n },\n
args: function (isCall) {\n const entities = parsers
.entities;\n const returner = { args:null, variadic: false };
\n let expressions = [];\n const argsSemiC
olon = [];\n const argsComma = [];\n let i
sSemiColonSeparated;\n let expressionContainsNamed;\n
let name;\n let nameLoop;\n le
t value;\n let arg;\n let expand;\n
let hasSep = true;\n\n parserInput.save();\n\n
while (true) {\n if (isCall) {\n
arg = parsers.detachedRuleset() || parsers.expression();\n
} else {\n parserInput.comment
Store.length = 0;\n if (parserInput.$str('...')) {\n
returner.variadic = true;\n
if (parserInput.$char(';') && !isSemiColonSeparated) {\n
isSemiColonSeparated = true;\n
}\n (isSemiColonSeparated ? argsSemiColon : a
rgsComma)\n .push({ variadic: true });\n
break;\n }\n
arg = entities.variable() || entities.property() || entities.liter
al() || entities.keyword() || this.call(true);\n }\n\n
if (!arg || !hasSep) {\n break;\
n }\n\n nameLoop = null;\n
if (arg.throwAwayComments) {\n arg.th
rowAwayComments();\n }\n value = a
rg;\n let val = null;\n\n if (isCa
ll) {\n // Variable\n if (
arg.value && arg.value.length == 1) {\n val = arg
.value[0];\n }\n } else {\n
val = arg;\n }\n\n
if (val && (val instanceof tree.Variable || val instanceof tree.Proper
ty)) {\n if (parserInput.$char(':')) {\n
if (expressions.length > 0) {\n
if (isSemiColonSeparated) {\n error
('Cannot mix ; and , as delimiter types');\n
}\n expressionContainsNamed = true;\n
}\n\n value = parsers.det
achedRuleset() || parsers.expression();\n\n if (!
value) {\n if (isCall) {\n
error('could not understand value for named argument');\n
} else {\n
parserInput.restore();\n returner.arg
s = [];\n return returner;\n
}\n }\n
nameLoop = (name = val.name);\n } else i
f (parserInput.$str('...')) {\n if (!isCall) {\n
returner.variadic = true;\n
if (parserInput.$char(';') && !isSemiColonSeparated) {\n
isSemiColonSeparated = true;\n
}\n (isSemiColonSeparated
? argsSemiColon : argsComma)\n .push({ n
ame: arg.name, variadic: true });\n break;\n
} else {\n exp
and = true;\n }\n } el
se if (!isCall) {\n name = nameLoop = val.name;\n
value = null;\n }\n
}\n\n if (value) {\n
expressions.push(value);\n }\n\n
argsComma.push({ name:nameLoop, value, expand });\n\n
if (parserInput.$char(',')) {\n hasSep = tru
e;\n continue;\n }\n
hasSep = parserInput.$char(';') === ';';\n\n
if (hasSep || isSemiColonSeparated) {\n\n if (expre
ssionContainsNamed) {\n error('Cannot mix ; and ,
as delimiter types');\n }\n\n
isSemiColonSeparated = true;\n\n if (expressions
.length > 1) {\n value = new(tree.Value)(expressi
ons);\n }\n argsSemiColon.
push({ name, value, expand });\n\n name = null;\n
expressions = [];\n expressio
nContainsNamed = false;\n }\n }\n\n
parserInput.forget();\n returner.args = isSe
miColonSeparated ? argsSemiColon : argsComma;\n return return
er;\n },\n //\n // A Mixin definiti
on, with a list of parameters\n //\n // .round
ed (@radius: 2px, @color) {\n // ...\n //
}\n //\n // Until we have a finer grained state
-machine, we have to\n // do a look-ahead, to make sure we don't
have a mixin call.\n // See the `rule` function for more informat
ion.\n //\n // We start by matching `.rounded (`,
and then proceed on to\n // the argument list, which has optional
default values.\n // We store the parameters in `params`, with a
`value` key,\n // if there is a value, such as in the case of `@
radius`.\n //\n // Once we've got our params list,
and a closing `)`, we parse\n // the `{...}` block.\n
//\n definition: function () {\n let name
;\n let params = [];\n let match;\n
let ruleset;\n let cond;\n le
t variadic = false;\n if ((parserInput.currentChar() !== '.'
&& parserInput.currentChar() !== '#') ||\n parserInput.pe
ek(/^[^{]*\\}/)) {\n return;\n }\n\n
parserInput.save();\n\n match = parserInput
.$re(/^([#.](?:[\\w-]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\\s*\\(/);\n
if (match) {\n name = match[1];\n\n
const argInfo = this.args(false);\n par
ams = argInfo.args;\n variadic = argInfo.variadic;\n\n
// .mixincall(\"@{a}\");\n // looks
a bit like a mixin definition..\n // also\n
// .mixincall(@a: {rule: set;});\n // so we hav
e to be nice and restore\n if (!parserInput.$char(')')) {
\n parserInput.restore('Missing closing \\')\\'');\n
return;\n }\n\n
parserInput.commentStore.length = 0;\n\n if (par
serInput.$str('when')) { // Guard\n cond = expect(par
sers.conditions, 'expected condition');\n }\n\n
ruleset = parsers.block();\n\n if (ruleset)
{\n parserInput.forget();\n
return new(tree.mixin.Definition)(name, params, ruleset, cond, variadic);\n
} else {\n parserInput.restore(
);\n }\n } else {\n
parserInput.restore();\n }\n },\n
\n ruleLookups: function() {\n let rule;\n
let args;\n const lookups = [];\n\n
if (parserInput.currentChar() !== '[') { \n
return;\n }\n\n while (true) {\n
parserInput.save();\n args = null;\n
rule = this.lookupValue();\n if (!rule
&& rule !== '') {\n parserInput.restore();\n
break;\n }\n lo
okups.push(rule);\n parserInput.forget();\n
}\n if (lookups.length > 0) {\n
return lookups;\n }\n },\n \n
lookupValue: function() {\n parserInput.save();\n \n
if (!parserInput.$char('[')) { \n parserI
nput.restore();\n return;\n }\n \n
const name = parserInput.$re(/^(?:[@$]{0,2})[_a-zA-Z0-9-]*/);
\n \n if (!parserInput.$char(']')) {\n
parserInput.restore();\n return;\n
} \n\n if (name || name === '') {\n p
arserInput.forget();\n return name;\n
}\n \n parserInput.restore();\n }\n
},\n //\n // Entities are the smallest recognized toke
n,\n // and can be found inside a rule's value.\n //\n
entity: function () {\n const entities = this.entities;\n
\n return this.comment() || entities.literal() || entities.variab
le() || entities.url() ||\n entities.property() || entities.c
all() || entities.keyword() || this.mixin.call(true) ||\n ent
ities.javascript();\n },\n\n //\n // A Declarat
ion terminator. Note that we use `peek()` to check for '}',\n // beca
use the `block` rule will be expecting it, but we still need to make sure\n
// it's there, if ';' was omitted.\n //\n end: func
tion () {\n return parserInput.$char(';') || parserInput.peek('}'
);\n },\n\n //\n // IE's alpha function\n
//\n // alpha(opacity=88)\n //\n ieAl
pha: function () {\n let value;\n\n // http://jspe
rf.com/case-insensitive-regex-vs-strtolower-then-regex/18\n if (!
parserInput.$re(/^opacity=/i)) { return; }\n value = parserInput.
$re(/^\\d+/);\n if (!value) {\n value = expect
(parsers.entities.variable, 'Could not parse alpha');\n value
= `@{${value.name.slice(1)}}`;\n }\n expectChar('
)');\n return new tree.Quoted('', `alpha(opacity=${value})`);\n
},\n\n //\n // A Selector Element\n /
/\n // div\n // + h1\n // #socks\n
// input[type=\"text\"]\n //\n // Elements
are the building blocks for Selectors,\n // they are made out of a `C
ombinator` (see combinator rule),\n // and an element name, such as a
tag a class, or `*`.\n //\n element: function () {\n
let e;\n let c;\n let v;\n
const index = parserInput.i;\n\n c = this.combinator();\n\n
e = parserInput.$re(/^(?:\\d+\\.\\d+|\\d+)%/) ||\n
parserInput.$re(/^(?:[.#]?|:*)(?:[\\w-]|[^\\x00-\\x9f]|\\\\(?:[A-Fa-f0-9]{1,6
} ?|[^A-Fa-f0-9]))+/) ||\n parserInput.$char('*') || parserIn
put.$char('&') || this.attribute() ||\n parserInput.$re(/^\\(
[^&()@]+\\)/) || parserInput.$re(/^[\\.#:](?=@)/) ||\n this.
entities.variableCurly();\n\n if (!e) {\n pars
erInput.save();\n if (parserInput.$char('(')) {\n
if ((v = this.selector(false)) && parserInput.$char(')')) {\n
e = new(tree.Paren)(v);\n parser
Input.forget();\n } else {\n p
arserInput.restore('Missing closing \\')\\'');\n }\n
} else {\n parserInput.forget();\n
}\n }\n\n if (e) { return new(tree.Ele
ment)(c, e, e instanceof tree.Variable, index, fileInfo); }\n },\n\n
//\n // Combinators combine elements together, in a Select
or.\n //\n // Because our parser isn't white-space sensiti
ve, special care\n // has to be taken, when parsing the descendant co
mbinator, ` `,\n // as it's an empty space. We have to check the prev
ious character\n // in the input, to see if it's a ` ` character. Mor
e info on how\n // we deal with this in *combinator.js*.\n
//\n combinator: function () {\n let c = parserInput.
currentChar();\n\n if (c === '/') {\n parserIn
put.save();\n const slashedCombinator = parserInput.$re(/^\\/
[a-z]+\\//i);\n if (slashedCombinator) {\n
parserInput.forget();\n return new(tree.Combinator)(
slashedCombinator);\n }\n parserInput.rest
ore();\n }\n\n if (c === '>' || c === '+' || c ===
'~' || c === '|' || c === '^') {\n parserInput.i++;\n
if (c === '^' && parserInput.currentChar() === '^') {\n
c = '^^';\n parserInput.i++;\n
}\n while (parserInput.isWhitespace()) { parserInput.i++
; }\n return new(tree.Combinator)(c);\n } else
if (parserInput.isWhitespace(-1)) {\n return new(tree.Combin
ator)(' ');\n } else {\n return new(tree.Combi
nator)(null);\n }\n },\n //\n //
A CSS Selector\n // with less extensions e.g. the ability to extend
and guard\n //\n // .class > div + h1\n //
li a:hover\n //\n // Selectors are made out of one or
more Elements, see above.\n //\n selector: function (isLes
s) {\n const index = parserInput.i;\n let elements
;\n let extendList;\n let c;\n let
e;\n let allExtends;\n let when;\n
let condition;\n isLess = isLess !== false;\n whil
e ((isLess && (extendList = this.extend())) || (isLess && (when = parserInput.$s
tr('when'))) || (e = this.element())) {\n if (when) {\n
condition = expect(this.conditions, 'expected condition');\n
} else if (condition) {\n error('CSS gu
ard can only be used at the end of selector');\n } else if (e
xtendList) {\n if (allExtends) {\n
allExtends = allExtends.concat(extendList);\n } else
{\n allExtends = extendList;\n
}\n } else {\n if (allExtends) { err
or('Extend can only be used at the end of selector'); }\n
c = parserInput.currentChar();\n if (elements) {\n
elements.push(e);\n } else {\n
elements = [ e ];\n }\n
e = null;\n }\n if (c === '{'
|| c === '}' || c === ';' || c === ',' || c === ')') {\n
break;\n }\n }\n\n if (element
s) { return new(tree.Selector)(elements, allExtends, condition, index, fileInfo)
; }\n if (allExtends) { error('Extend must be used to extend a se
lector, it cannot be used on its own'); }\n },\n selectors
: function () {\n let s;\n let selectors;\n
while (true) {\n s = this.selector();\n
if (!s) {\n break;\n }\n
if (selectors) {\n selectors.push(s);\n
} else {\n selectors = [ s ];\n
}\n parserInput.commentStore.length = 0;\n
if (s.condition && selectors.length > 1) {\n er
ror(\"Guards are only currently allowed on a single selector.\");\n
}\n if (!parserInput.$char(',')) { break; }\n
if (s.condition) {\n error(\"Guards are only c
urrently allowed on a single selector.\");\n }\n
parserInput.commentStore.length = 0;\n }\n
return selectors;\n },\n attribute: function () {\n
if (!parserInput.$char('[')) { return; }\n\n const entit
ies = this.entities;\n let key;\n let val;\n
let op;\n //\n // case-insensitive flag\
n // e.g. [attr operator value i]\n //\n
let cif;\n\n if (!(key = entities.variableCurly())) {\n
key = expect(/^(?:[_A-Za-z0-9-\\*]*\\|)?(?:[_A-Za-z0-9-]|\\\\.)+
/);\n }\n\n op = parserInput.$re(/^[|~*$^]?=/);\n
if (op) {\n val = entities.quoted() || parserI
nput.$re(/^[0-9]+%/) || parserInput.$re(/^[\\w-]+/) || entities.variableCurly();
\n if (val) {\n cif = parserInput.$re(
/^[iIsS]/);\n }\n }\n\n expectC
har(']');\n\n return new(tree.Attribute)(key, op, val, cif);\n
},\n\n //\n // The `block` rule is used by `rules
et` and `mixin.definition`.\n // It's a wrapper around the `primary`
rule, with added `{}`.\n //\n block: function () {\n
let content;\n if (parserInput.$char('{') && (content =
this.primary()) && parserInput.$char('}')) {\n return conten
t;\n }\n },\n\n blockRuleset: function() {\
n let block = this.block();\n\n if (block) {\n
block = new tree.Ruleset(null, block);\n }\n
return block;\n },\n\n detachedRuleset: functio
n() {\n let argInfo;\n let params;\n
let variadic;\n\n parserInput.save();\n if (pars
erInput.$re(/^[.#]\\(/)) {\n /**\n * DR a
rgs currently only implemented for each() function, and not \n
* yet settable as `@dr: #(@arg) {}`\n * This should be do
ne when DRs are merged with mixins.\n * See: https://github.
com/less/less-meta/issues/16\n */\n argIn
fo = this.mixin.args(false);\n params = argInfo.args;\n
variadic = argInfo.variadic;\n if (!parserInput
.$char(')')) {\n parserInput.restore();\n
return;\n }\n }\n const
blockRuleset = this.blockRuleset();\n if (blockRuleset) {\n
parserInput.forget();\n if (params) {\n
return new tree.mixin.Definition(null, params, blockRuleset, nu
ll, variadic);\n }\n return new tree.Detac
hedRuleset(blockRuleset);\n }\n parserInput.restor
e();\n },\n\n //\n // div, .class, body > p {..
.}\n //\n ruleset: function () {\n let sele
ctors;\n let rules;\n let debugInfo;\n\n
parserInput.save();\n\n if (context.dumpLineNumbers) {\n
debugInfo = getDebugInfo(parserInput.i);\n }\n\n
selectors = this.selectors();\n\n if (selectors &
& (rules = this.block())) {\n parserInput.forget();\n
const ruleset = new(tree.Ruleset)(selectors, rules, context.strictIm
ports);\n if (context.dumpLineNumbers) {\n
ruleset.debugInfo = debugInfo;\n }\n
return ruleset;\n } else {\n parserInput.resto
re();\n }\n },\n declaration: function () {
\n let name;\n let value;\n const i
ndex = parserInput.i;\n let hasDR;\n const c = par
serInput.currentChar();\n let important;\n let mer
ge;\n let isVariable;\n\n if (c === '.' || c === '
#' || c === '&' || c === ':') { return; }\n\n parserInput.save();
\n\n name = this.variable() || this.ruleProperty();\n
if (name) {\n isVariable = typeof name === 'string';\n\n
if (isVariable) {\n value = this.detac
hedRuleset();\n if (value) {\n
hasDR = true;\n }\n }\n\n
parserInput.commentStore.length = 0;\n if (!value) {\
n // a name returned by this.ruleProperty() is always an
array of the form:\n // [string-1, ..., string-n, \"\"] o
r [string-1, ..., string-n, \"+\"]\n // where each item i
s a tree.Keyword or tree.Variable\n merge = !isVariable &
& name.length > 1 && name.pop().value;\n\n // Custom prop
erty values get permissive parsing\n if (name[0].value &&
name[0].value.slice(0, 2) === '--') {\n value = this
.permissiveValue();\n }\n // Try t
o store values as anonymous\n // If we need the value lat
er we'll re-parse it in ruleset.parseValue\n else {\n
value = this.anonymousValue();\n
}\n if (value) {\n parserInput
.forget();\n // anonymous values absorb the end ';' w
hich is required for them to work\n return new(tree.D
eclaration)(name, value, false, merge, index, fileInfo);\n
}\n\n if (!value) {\n value
= this.value();\n }\n\n if (value)
{\n important = this.important();\n
} else if (isVariable) {\n // As a last resort
, try permissiveValue\n value = this.permissiveValue(
);\n }\n }\n\n if (
value && (this.end() || hasDR)) {\n parserInput.forget();
\n return new(tree.Declaration)(name, value, important, m
erge, index, fileInfo);\n }\n else {\n
parserInput.restore();\n }\n
} else {\n parserInput.restore();\n }\n
},\n anonymousValue: function () {\n const ind
ex = parserInput.i;\n const match = parserInput.$re(/^([^.#@\\$+\
\/'\"*`(;{}-]*);/);\n if (match) {\n return ne
w(tree.Anonymous)(match[1], index);\n }\n },\n
/**\n * Used for custom properties, at-rules, and variables (as
fallback)\n * Parses almost anything inside of {} [] () \"\" blocks\
n * until it reaches outer-most tokens.\n * \n
* First, it will try to parse comments and entities to reach\n *
the end. This is mostly like the Expression parser except no\n * mat
h is allowed.\n */\n permissiveValue: function (untilToke
ns) {\n let i;\n let e;\n let done;
\n let value;\n const tok = untilTokens || ';';\n
const index = parserInput.i;\n const result = [];\
n\n function testCurrentChar() {\n const char
= parserInput.currentChar();\n if (typeof tok === 'string') {
\n return char === tok;\n } else {\n
return tok.test(char);\n }\n
}\n if (testCurrentChar()) {\n return;\n
}\n value = [];\n do {\n
e = this.comment();\n if (e) {\n
value.push(e);\n continue;\n }\n
e = this.entity();\n if (e) {\n
value.push(e);\n }\n } while (e);\
n\n done = testCurrentChar();\n\n if (value.length
> 0) {\n value = new(tree.Expression)(value);\n
if (done) {\n return value;\n }
\n else {\n result.push(value);\n
}\n // Preserve space before $parseUntil as it
will not\n if (parserInput.prevChar() === ' ') {\n
result.push(new tree.Anonymous(' ', index));\n
}\n }\n parserInput.save();\n\n val
ue = parserInput.$parseUntil(tok);\n\n if (value) {\n
if (typeof value === 'string') {\n error(`Expecte
d '${value}'`, 'Parse');\n }\n if (value.l
ength === 1 && value[0] === ' ') {\n parserInput.forget()
;\n return new tree.Anonymous('', index);\n
}\n let item;\n for (i = 0; i < valu
e.length; i++) {\n item = value[i];\n
if (Array.isArray(item)) {\n // Treat actual quot
es as normal quoted values\n result.push(new tree.Quo
ted(item[0], item[1], true, index, fileInfo));\n }\n
else {\n if (i === value.length -
1) {\n item = item.trim();\n
}\n // Treat like quoted values, but replace v
ars like unquoted expressions\n const quote = new tre
e.Quoted('\\'', item, true, index, fileInfo);\n quote
.variableRegex = /@([\\w-]+)/g;\n quote.propRegex = /
\\$([\\w-]+)/g;\n result.push(quote);\n
}\n }\n parserInput.forget();\n
return new tree.Expression(result, true);\n }\
n parserInput.restore();\n },\n\n //\n
// An @import atrule\n //\n // @import \"lib\";
\n //\n // Depending on our environment, importing is done
differently:\n // In the browser, it's an XHR request, in Node, it w
ould be a\n // file-system operation. The function used for importing
is\n // stored in `import`, which we pass to the Import constructor.
\n //\n 'import': function () {\n let path;
\n let features;\n const index = parserInput.i;\n\
n const dir = parserInput.$re(/^@import\\s+/);\n\n
if (dir) {\n const options = (dir ? this.importOptions() : n
ull) || {};\n\n if ((path = this.entities.quoted() || this.en
tities.url())) {\n features = this.mediaFeatures();\n\n
if (!parserInput.$char(';')) {\n
parserInput.i = index;\n error('missing semi-colon
or unrecognised media features on import');\n }\n
features = features && new(tree.Value)(features);\n
return new(tree.Import)(path, features, options, index, fileInfo);\n
}\n else {\n parser
Input.i = index;\n error('malformed import statement');\n
}\n }\n },\n\n importOp
tions: function() {\n let o;\n const options = {};
\n let optionName;\n let value;\n\n
// list of options, surrounded by parens\n if (!parserInput.$cha
r('(')) { return null; }\n do {\n o = this.imp
ortOption();\n if (o) {\n optionName =
o;\n value = true;\n switch (opti
onName) {\n case 'css':\n
optionName = 'less';\n value = false;\n
break;\n case 'once':\n
optionName = 'multiple';\n
value = false;\n break;\n
}\n options[optionName] = value;\n
if (!parserInput.$char(',')) { break; }\n }\n
} while (o);\n expectChar(')');\n return op
tions;\n },\n\n importOption: function() {\n
const opt = parserInput.$re(/^(less|css|multiple|once|inline|reference|optiona
l)/);\n if (opt) {\n return opt[1];\n
}\n },\n\n mediaFeature: function () {\n
const entities = this.entities;\n const nodes = [];\n
let e;\n let p;\n parserInput.save();\n
do {\n e = entities.keyword() || entities.varia
ble() || entities.mixinLookup();\n if (e) {\n
nodes.push(e);\n } else if (parserInput.$char('(')) {
\n p = this.property();\n e = this
.value();\n if (parserInput.$char(')')) {\n
if (p && e) {\n nodes.push(new(tree
.Paren)(new(tree.Declaration)(p, e, null, null, parserInput.i, fileInfo, true)))
;\n } else if (e) {\n
nodes.push(new(tree.Paren)(e));\n } else {\n
error('badly formed media feature definition');\n
}\n } else {\n
error('Missing closing \\')\\'', 'Parse');\n }\n
}\n } while (e);\n\n parserInput.f
orget();\n if (nodes.length > 0) {\n return ne
w(tree.Expression)(nodes);\n }\n },\n\n med
iaFeatures: function () {\n const entities = this.entities;\n
const features = [];\n let e;\n do {\n
e = this.mediaFeature();\n if (e) {\n
features.push(e);\n if (!parserInput.
$char(',')) { break; }\n } else {\n e
= entities.variable() || entities.mixinLookup();\n if (e)
{\n features.push(e);\n i
f (!parserInput.$char(',')) { break; }\n }\n
}\n } while (e);\n\n return features.length
> 0 ? features : null;\n },\n\n media: function () {\n
let features;\n let rules;\n let medi
a;\n let debugInfo;\n const index = parserInput.i;
\n\n if (context.dumpLineNumbers) {\n debugInf
o = getDebugInfo(index);\n }\n\n parserInput.save(
);\n\n if (parserInput.$str('@media')) {\n fea
tures = this.mediaFeatures();\n\n rules = this.block();\n\n
if (!rules) {\n error('media definition
s require block statements after any features');\n }\n\n
parserInput.forget();\n\n media = new(tree.Med
ia)(rules, features, index, fileInfo);\n if (context.dumpLine
Numbers) {\n media.debugInfo = debugInfo;\n
}\n\n return media;\n }\n\n
parserInput.restore();\n },\n\n //\n\n // A
@plugin directive, used to import plugins dynamically.\n //\n
// @plugin (args) \"lib\";\n //\n plugin: function
() {\n let path;\n let args;\n let
options;\n const index = parserInput.i;\n const d
ir = parserInput.$re(/^@plugin\\s+/);\n\n if (dir) {\n
args = this.pluginArgs();\n\n if (args) {\n
options = {\n pluginArgs: args,\n
isPlugin: true\n };\n
}\n else {\n options = { isPl
ugin: true };\n }\n\n if ((path = this.ent
ities.quoted() || this.entities.url())) {\n\n if (!parser
Input.$char(';')) {\n parserInput.i = index;\n
error('missing semi-colon on @plugin');\n
}\n return new(tree.Import)(path, null, options, in
dex, fileInfo);\n }\n else {\n
parserInput.i = index;\n error('malformed @pl
ugin statement');\n }\n }\n },\n\n
pluginArgs: function() {\n // list of options, surroun
ded by parens\n parserInput.save();\n if (!parserI
nput.$char('(')) {\n parserInput.restore();\n
return null;\n }\n const args = parserInput.$r
e(/^\\s*([^\\);]+)\\)\\s*/);\n if (args[1]) {\n
parserInput.forget();\n return args[1].trim();\n
}\n else { \n parserInput.restore();\n
return null;\n }\n },\n\n
//\n // A CSS AtRule\n //\n // @charset \"u
tf-8\";\n //\n atrule: function () {\n cons
t index = parserInput.i;\n let name;\n let value;\
n let rules;\n let nonVendorSpecificName;\n
let hasIdentifier;\n let hasExpression;\n
let hasUnknown;\n let hasBlock = true;\n let isRo
oted = true;\n\n if (parserInput.currentChar() !== '@') { return;
}\n\n value = this['import']() || this.plugin() || this.media();
\n if (value) {\n return value;\n
}\n\n parserInput.save();\n\n name = parserInpu
t.$re(/^@[a-z-]+/);\n\n if (!name) { return; }\n\n
nonVendorSpecificName = name;\n if (name.charAt(1) == '-' && nam
e.indexOf('-', 2) > 0) {\n nonVendorSpecificName = `@${name.s
lice(name.indexOf('-', 2) + 1)}`;\n }\n\n switch (
nonVendorSpecificName) {\n case '@charset':\n
hasIdentifier = true;\n hasBlock = false;\n
break;\n case '@namespace':\n
hasExpression = true;\n hasBlock = false;\n
break;\n case '@keyframes':\n
case '@counter-style':\n hasIdentifier = true;\n
break;\n case '@document':\n
case '@supports':\n hasUnknown = true;\n
isRooted = false;\n break;\n
default:\n hasUnknown = true;\n
break;\n }\n\n parserInput.commentStore.leng
th = 0;\n\n if (hasIdentifier) {\n value = thi
s.entity();\n if (!value) {\n error(`e
xpected ${name} identifier`);\n }\n } else if
(hasExpression) {\n value = this.expression();\n
if (!value) {\n error(`expected ${name} expression
`);\n }\n } else if (hasUnknown) {\n
value = this.permissiveValue(/^[{;]/);\n hasBlock =
(parserInput.currentChar() === '{');\n if (!value) {\n
if (!hasBlock && parserInput.currentChar() !== ';') {\n
error(`${name} rule is missing block or ending semi-colon`)
;\n }\n }\n else if
(!value.value) {\n value = null;\n }\
n }\n\n if (hasBlock) {\n rules
= this.blockRuleset();\n }\n\n if (rules || (!has
Block && value && parserInput.$char(';'))) {\n parserInput.fo
rget();\n return new(tree.AtRule)(name, value, rules, index,
fileInfo,\n context.dumpLineNumbers ? getDebugInfo(index)
: null,\n isRooted\n );\n
}\n\n parserInput.restore('at-rule options not recognised');\
n },\n\n //\n // A Value is a comma-delimited l
ist of Expressions\n //\n // font-family: Baskerville,
Georgia, serif;\n //\n // In a Rule, a Value represents e
verything after the `:`,\n // and before the `;`.\n //\n
value: function () {\n let e;\n const ex
pressions = [];\n const index = parserInput.i;\n\n
do {\n e = this.expression();\n if (e) {\
n expressions.push(e);\n if (!pars
erInput.$char(',')) { break; }\n }\n } while (
e);\n\n if (expressions.length > 0) {\n return
new(tree.Value)(expressions, index);\n }\n },\n
important: function () {\n if (parserInput.currentChar() ==
= '!') {\n return parserInput.$re(/^! *important/);\n
}\n },\n sub: function () {\n let a
;\n let e;\n\n parserInput.save();\n
if (parserInput.$char('(')) {\n a = this.addition();\n
if (a && parserInput.$char(')')) {\n parse
rInput.forget();\n e = new(tree.Expression)([a]);\n
e.parens = true;\n return e;\n
}\n parserInput.restore('Expected \\')\\'');\n
return;\n }\n parserInput.restore(
);\n },\n multiplication: function () {\n l
et m;\n let a;\n let op;\n let oper
ation;\n let isSpaced;\n m = this.operand();\n
if (m) {\n isSpaced = parserInput.isWhitespace(-1
);\n while (true) {\n if (parserInput.
peek(/^\\/[*\\/]/)) {\n break;\n
}\n\n parserInput.save();\n\n o
p = parserInput.$char('/') || parserInput.$char('*') || parserInput.$str('./');\
n\n if (!op) { parserInput.forget(); break; }\n\n
a = this.operand();\n\n if (!a) { parserI
nput.restore(); break; }\n parserInput.forget();\n\n
m.parensInOp = true;\n a.parensInOp =
true;\n operation = new(tree.Operation)(op, [operation ||
m, a], isSpaced);\n isSpaced = parserInput.isWhitespace(
-1);\n }\n return operation || m;\n
}\n },\n addition: function () {\n
let m;\n let a;\n let op;\n let op
eration;\n let isSpaced;\n m = this.multiplication
();\n if (m) {\n isSpaced = parserInput.isWhit
espace(-1);\n while (true) {\n op = pa
rserInput.$re(/^[-+]\\s+/) || (!isSpaced && (parserInput.$char('+') || parserInp
ut.$char('-')));\n if (!op) {\n
break;\n }\n a = this.multiplica
tion();\n if (!a) {\n break;\n
}\n\ |