diff --git a/index.js b/index.js index 2c8d683..97ca18c 100644 --- a/index.js +++ b/index.js @@ -65,7 +65,10 @@ var defaults = { variables: {}, // Preserve variables injected via JS with the `variables` option above // before serializing to CSS (`false` will remove these variables from output) - preserveInjectedVariables: true + preserveInjectedVariables: true, + // Will write media queries in the same order as in the original file. + // Set it to true if you're working with min-width + preserveAtRulesOrder: false }; module.exports = postcss.plugin('postcss-css-variables', function(options) { @@ -249,7 +252,7 @@ module.exports = postcss.plugin('postcss-css-variables', function(options) { ruleToWorkOn.nodes.slice(0).forEach(function(node) { if(node.type === 'decl') { var decl = node; - resolveDecl(decl, map, opts.preserve, logResolveValueResult); + resolveDecl(decl, map, opts.preserve, logResolveValueResult, opts.preserveAtRulesOrder); } }); }); diff --git a/lib/resolve-decl.js b/lib/resolve-decl.js index cae8e03..ce8e416 100644 --- a/lib/resolve-decl.js +++ b/lib/resolve-decl.js @@ -71,8 +71,9 @@ function eachMapItemDependencyOfDecl(variablesUsedList, map, decl, cb) { // Resolve the decl with the computed value // Also add in any media queries that change the value as necessary -function resolveDecl(decl, map, /*optional*/shouldPreserve, /*optional*/logResolveValueResult) { +function resolveDecl(decl, map, /*optional*/shouldPreserve, /*optional*/logResolveValueResult, /*optional*/preserveAtRulesOrder) { shouldPreserve = shouldPreserve || false; + preserveAtRulesOrder = preserveAtRulesOrder !== undefined ? preserveAtRulesOrder : true; // Make it chainable var _logResolveValueResult = function(valueResults) { @@ -93,6 +94,7 @@ function resolveDecl(decl, map, /*optional*/shouldPreserve, /*optional*/logResol // Resolve the cascade dependencies // Now find any at-rule declarations that need to be added below each rule //console.log('resolveDecl 2'); + var previousAtRuleNode; eachMapItemDependencyOfDecl(valueResults.variablesUsed, map, decl, function(mimicDecl, mapItem) { var ruleClone = shallowCloneNode(decl.parent); var declClone = decl.clone(); @@ -112,6 +114,7 @@ function resolveDecl(decl, map, /*optional*/shouldPreserve, /*optional*/logResol // Add the rule to the atRule atRuleNode.append(ruleClone); + //console.log(atRuleNode) // Since that atRuleNode can be nested in other atRules, we need to make the appropriate structure @@ -129,14 +132,19 @@ function resolveDecl(decl, map, /*optional*/shouldPreserve, /*optional*/logResol currentAtRuleNode = currentAtRuleNode.parent; } - // Put the atRuleStructure after the declaration's rule - decl.parent.parent.insertAfter(decl.parent, parentAtRuleNode); + // Put the first atRuleStructure after the declaration's rule, + // and after that, put them right after the previous one + decl.parent.parent.insertAfter(preserveAtRulesOrder && previousAtRuleNode || decl.parent, parentAtRuleNode); + + // Save referance of previous atRuleStructure + previousAtRuleNode = parentAtRuleNode } else { ruleClone.selector = mimicDecl.parent.selector; - // Put the atRuleStructure after the declaration's rule - decl.parent.parent.insertAfter(decl.parent, ruleClone); + // Put the first atRuleStructure after the declaration's rule, + // and after that, put them right after the previous one + decl.parent.parent.insertAfter(preserveAtRulesOrder && previousAtRuleNode || decl.parent, ruleClone); } }); diff --git a/playground/build.js b/playground/build.js deleted file mode 100644 index 90d608f..0000000 --- a/playground/build.js +++ /dev/null @@ -1,41848 +0,0 @@ -"bundle"; -System.registerDynamic("npm:classnames@2.2.5.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:classnames@2.2.5/index.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /*! - Copyright (c) 2016 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames - */ - /* global define */ - - (function () { - 'use strict'; - - var hasOwn = {}.hasOwnProperty; - - function classNames() { - var classes = []; - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (!arg) continue; - - var argType = typeof arg; - - if (argType === 'string' || argType === 'number') { - classes.push(arg); - } else if (Array.isArray(arg)) { - classes.push(classNames.apply(null, arg)); - } else if (argType === 'object') { - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); - } - } - } - } - - return classes.join(' '); - } - - if (typeof module !== 'undefined' && module.exports) { - module.exports = classNames; - } else if (typeof undefined === 'function' && typeof define.amd === 'object' && define.amd) { - // register as 'classnames', consistent with npm package name - define('classnames', [], function () { - return classNames; - }); - } else { - window.classNames = classNames; - } - })(); -}); -System.registerDynamic("npm:lodash.throttle@4.1.1.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:lodash.throttle@4.1.1/index.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - - /** Used as the `TypeError` message for "Functions" methods. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used as references for various `Number` constants. */ - var NAN = 0 / 0; - - /** `Object#toString` result references. */ - var symbolTag = '[object Symbol]'; - - /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Built-in method references without a dependency on `root`. */ - var freeParseInt = parseInt; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMax = Math.max, - nativeMin = Math.min; - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = function () { - return root.Date.now(); - }; - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; - - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return !!value && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? other + '' : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; - } - - module.exports = throttle; -}); -System.registerDynamic('postcss-css-variables-playground/postcss/playground.css', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - module.exports = JSON.parse('{}'); -}); -System.register('postcss-css-variables-playground/js/stores/PlaygroundSettingsStore.js', ['../dispatcher/AppDispatcher', '../constants/PlaygroundConstants', 'object-assign', 'immutable', 'events'], function (_export, _context) { - "use strict"; - - var AppDispatcher, PlaygroundConstants, assign, Immutable, events, EventEmitter, CHANGE_EVENT, playgroundSettings, pluginSettings, PlaygroundSettingsStore; - return { - setters: [function (_dispatcherAppDispatcher) { - AppDispatcher = _dispatcherAppDispatcher.default; - }, function (_constantsPlaygroundConstants) { - PlaygroundConstants = _constantsPlaygroundConstants.default; - }, function (_objectAssign) { - assign = _objectAssign.default; - }, function (_immutable) { - Immutable = _immutable.default; - }, function (_events) { - events = _events.default; - }], - execute: function () { - EventEmitter = events.EventEmitter; - CHANGE_EVENT = 'CHANGE_EVENT'; - playgroundSettings = Immutable.Map({ - shouldLiveReload: true, - tabWidth: 'inherit' - }); - pluginSettings = Immutable.Map({ - 'postcss-css-variables': Immutable.Map({ - preserve: false - }) - }); - PlaygroundSettingsStore = assign({}, EventEmitter.prototype, { - - getPluginSettings: function getPluginSettings() { - return pluginSettings; - }, - - getShouldLiveReload: function getShouldLiveReload() { - return playgroundSettings.get('shouldLiveReload', true); - }, - getTabWidth: function getTabWidth() { - return playgroundSettings.get('tabWidth', 'inherit'); - }, - - emitChange: function emitChange() { - this.emit(CHANGE_EVENT); - }, - - addChangeListener: function addChangeListener(callback) { - this.on(CHANGE_EVENT, callback); - }, - - removeChangeListener: function removeChangeListener(callback) { - this.removeListener(CHANGE_EVENT, callback); - }, - - dispatchToken: AppDispatcher.register(function (action) { - switch (action.actionType) { - case PlaygroundConstants.PLAYGROUND_SET_POSTCSS_CSS_VARIABLES_PRESERVE: - pluginSettings = pluginSettings.setIn(['postcss-css-variables', 'preserve'], action.value); - PlaygroundSettingsStore.emitChange(); - break; - - case PlaygroundConstants.PLAYGROUND_SET_SHOULD_LIVE_RELOAD: - playgroundSettings = playgroundSettings.set('shouldLiveReload', action.value); - PlaygroundSettingsStore.emitChange(); - break; - - case PlaygroundConstants.PLAYGROUND_SET_TAB_WIDTH: - playgroundSettings = playgroundSettings.set('tabWidth', action.value); - PlaygroundSettingsStore.emitChange(); - break; - - default: - // no op - } - - // No errors. Needed by promise in Dispatcher. - return true; - }) - }); - - _export('default', PlaygroundSettingsStore); - } - }; -}); -System.registerDynamic("npm:jspm-nodelibs-events@0.2.2.json", [], true, function() { - return { - "main": "./events.js" - }; -}); - -System.registerDynamic('npm:jspm-nodelibs-events@0.2.2/events.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - // Copyright Joyent, Inc. and other Node contributors. - // - // Permission is hereby granted, free of charge, to any person obtaining a - // copy of this software and associated documentation files (the - // "Software"), to deal in the Software without restriction, including - // without limitation the rights to use, copy, modify, merge, publish, - // distribute, sublicense, and/or sell copies of the Software, and to permit - // persons to whom the Software is furnished to do so, subject to the - // following conditions: - // - // The above copyright notice and this permission notice shall be included - // in all copies or substantial portions of the Software. - // - // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN - // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; - } - module.exports = EventEmitter; - - // Backwards-compat with node 0.10.x - EventEmitter.EventEmitter = EventEmitter; - - EventEmitter.prototype._events = undefined; - EventEmitter.prototype._maxListeners = undefined; - - // By default EventEmitters will print a warning if more than 10 listeners are - // added to it. This is a useful default which helps finding memory leaks. - EventEmitter.defaultMaxListeners = 10; - - // Obviously not all Emitters should be limited to 10. This function allows - // that to be increased. Set to zero for unlimited. - EventEmitter.prototype.setMaxListeners = function (n) { - if (!isNumber(n) || n < 0 || isNaN(n)) throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; - }; - - EventEmitter.prototype.emit = function (type) { - var er, handler, len, args, i, listeners; - - if (!this._events) this._events = {}; - - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || isObject(this._events.error) && !this._events.error.length) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } - throw TypeError('Uncaught, unspecified "error" event.'); - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) return false; - - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - args = Array.prototype.slice.call(arguments, 1); - handler.apply(this, args); - } - } else if (isObject(handler)) { - args = Array.prototype.slice.call(arguments, 1); - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) listeners[i].apply(this, args); - } - - return true; - }; - - EventEmitter.prototype.addListener = function (type, listener) { - var m; - - if (!isFunction(listener)) throw TypeError('listener must be a function'); - - if (!this._events) this._events = {}; - - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) this.emit('newListener', type, isFunction(listener.listener) ? listener.listener : listener); - - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener;else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener);else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; - - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length); - if (typeof console.trace === 'function') { - // not supported in IE 10 - console.trace(); - } - } - } - - return this; - }; - - EventEmitter.prototype.on = EventEmitter.prototype.addListener; - - EventEmitter.prototype.once = function (type, listener) { - if (!isFunction(listener)) throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; - }; - - // emits a 'removeListener' event iff the listener was removed - EventEmitter.prototype.removeListener = function (type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || isFunction(list.listener) && list.listener === listener) { - delete this._events[type]; - if (this._events.removeListener) this.emit('removeListener', type, listener); - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || list[i].listener && list[i].listener === listener) { - position = i; - break; - } - } - - if (position < 0) return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) this.emit('removeListener', type, listener); - } - - return this; - }; - - EventEmitter.prototype.removeAllListeners = function (type) { - var key, listeners; - - if (!this._events) return this; - - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) this._events = {};else if (this._events[type]) delete this._events[type]; - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else if (listeners) { - // LIFO order - while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; - }; - - EventEmitter.prototype.listeners = function (type) { - var ret; - if (!this._events || !this._events[type]) ret = [];else if (isFunction(this._events[type])) ret = [this._events[type]];else ret = this._events[type].slice(); - return ret; - }; - - EventEmitter.prototype.listenerCount = function (type) { - if (this._events) { - var evlistener = this._events[type]; - - if (isFunction(evlistener)) return 1;else if (evlistener) return evlistener.length; - } - return 0; - }; - - EventEmitter.listenerCount = function (emitter, type) { - return emitter.listenerCount(type); - }; - - function isFunction(arg) { - return typeof arg === 'function'; - } - - function isNumber(arg) { - return typeof arg === 'number'; - } - - function isObject(arg) { - return typeof arg === 'object' && arg !== null; - } - - function isUndefined(arg) { - return arg === void 0; - } -}); -System.registerDynamic('npm:postcss@6.0.8/lib/vendor.js', ['process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - /** - * Contains helpers for working with vendor prefixes. - * - * @example - * const vendor = postcss.vendor; - * - * @namespace vendor - */ - var vendor = { - - /** - * Returns the vendor prefix extracted from an input string. - * - * @param {string} prop - string with or without vendor prefix - * - * @return {string} vendor prefix or empty string - * - * @example - * postcss.vendor.prefix('-moz-tab-size') //=> '-moz-' - * postcss.vendor.prefix('tab-size') //=> '' - */ - prefix: function prefix(prop) { - var match = prop.match(/^(-\w+-)/); - if (match) { - return match[0]; - } else { - return ''; - } - }, - - /** - * Returns the input string stripped of its vendor prefix. - * - * @param {string} prop - string with or without vendor prefix - * - * @return {string} string name without vendor prefixes - * - * @example - * postcss.vendor.unprefixed('-moz-tab-size') //=> 'tab-size' - */ - unprefixed: function unprefixed(prop) { - return prop.replace(/^-\w+-/, ''); - } - }; - - exports.default = vendor; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/map-generator.js', ['source-map', 'path', 'process', 'buffer/global'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'), Buffer = $__require('buffer/global'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _sourceMap = $__require('source-map'); - - var _sourceMap2 = _interopRequireDefault(_sourceMap); - - var _path = $__require('path'); - - var _path2 = _interopRequireDefault(_path); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var MapGenerator = function () { - function MapGenerator(stringify, root, opts) { - _classCallCheck(this, MapGenerator); - - this.stringify = stringify; - this.mapOpts = opts.map || {}; - this.root = root; - this.opts = opts; - } - - MapGenerator.prototype.isMap = function isMap() { - if (typeof this.opts.map !== 'undefined') { - return !!this.opts.map; - } else { - return this.previous().length > 0; - } - }; - - MapGenerator.prototype.previous = function previous() { - var _this = this; - - if (!this.previousMaps) { - this.previousMaps = []; - this.root.walk(function (node) { - if (node.source && node.source.input.map) { - var map = node.source.input.map; - if (_this.previousMaps.indexOf(map) === -1) { - _this.previousMaps.push(map); - } - } - }); - } - - return this.previousMaps; - }; - - MapGenerator.prototype.isInline = function isInline() { - if (typeof this.mapOpts.inline !== 'undefined') { - return this.mapOpts.inline; - } - - var annotation = this.mapOpts.annotation; - if (typeof annotation !== 'undefined' && annotation !== true) { - return false; - } - - if (this.previous().length) { - return this.previous().some(function (i) { - return i.inline; - }); - } else { - return true; - } - }; - - MapGenerator.prototype.isSourcesContent = function isSourcesContent() { - if (typeof this.mapOpts.sourcesContent !== 'undefined') { - return this.mapOpts.sourcesContent; - } - if (this.previous().length) { - return this.previous().some(function (i) { - return i.withContent(); - }); - } else { - return true; - } - }; - - MapGenerator.prototype.clearAnnotation = function clearAnnotation() { - if (this.mapOpts.annotation === false) return; - - var node = void 0; - for (var i = this.root.nodes.length - 1; i >= 0; i--) { - node = this.root.nodes[i]; - if (node.type !== 'comment') continue; - if (node.text.indexOf('# sourceMappingURL=') === 0) { - this.root.removeChild(i); - } - } - }; - - MapGenerator.prototype.setSourcesContent = function setSourcesContent() { - var _this2 = this; - - var already = {}; - this.root.walk(function (node) { - if (node.source) { - var from = node.source.input.from; - if (from && !already[from]) { - already[from] = true; - var relative = _this2.relative(from); - _this2.map.setSourceContent(relative, node.source.input.css); - } - } - }); - }; - - MapGenerator.prototype.applyPrevMaps = function applyPrevMaps() { - for (var _iterator = this.previous(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var prev = _ref; - - var from = this.relative(prev.file); - var root = prev.root || _path2.default.dirname(prev.file); - var map = void 0; - - if (this.mapOpts.sourcesContent === false) { - map = new _sourceMap2.default.SourceMapConsumer(prev.text); - if (map.sourcesContent) { - map.sourcesContent = map.sourcesContent.map(function () { - return null; - }); - } - } else { - map = prev.consumer(); - } - - this.map.applySourceMap(map, from, this.relative(root)); - } - }; - - MapGenerator.prototype.isAnnotation = function isAnnotation() { - if (this.isInline()) { - return true; - } else if (typeof this.mapOpts.annotation !== 'undefined') { - return this.mapOpts.annotation; - } else if (this.previous().length) { - return this.previous().some(function (i) { - return i.annotation; - }); - } else { - return true; - } - }; - - MapGenerator.prototype.toBase64 = function toBase64(str) { - if (Buffer) { - if (Buffer.from && Buffer.from !== Uint8Array.from) { - return Buffer.from(str).toString('base64'); - } else { - return new Buffer(str).toString('base64'); - } - } else { - return window.btoa(unescape(encodeURIComponent(str))); - } - }; - - MapGenerator.prototype.addAnnotation = function addAnnotation() { - var content = void 0; - - if (this.isInline()) { - - content = 'data:application/json;base64,' + this.toBase64(this.map.toString()); - } else if (typeof this.mapOpts.annotation === 'string') { - content = this.mapOpts.annotation; - } else { - content = this.outputFile() + '.map'; - } - - var eol = '\n'; - if (this.css.indexOf('\r\n') !== -1) eol = '\r\n'; - - this.css += eol + '/*# sourceMappingURL=' + content + ' */'; - }; - - MapGenerator.prototype.outputFile = function outputFile() { - if (this.opts.to) { - return this.relative(this.opts.to); - } else if (this.opts.from) { - return this.relative(this.opts.from); - } else { - return 'to.css'; - } - }; - - MapGenerator.prototype.generateMap = function generateMap() { - this.generateString(); - if (this.isSourcesContent()) this.setSourcesContent(); - if (this.previous().length > 0) this.applyPrevMaps(); - if (this.isAnnotation()) this.addAnnotation(); - - if (this.isInline()) { - return [this.css]; - } else { - return [this.css, this.map]; - } - }; - - MapGenerator.prototype.relative = function relative(file) { - if (file.indexOf('<') === 0) return file; - if (/^\w+:\/\//.test(file)) return file; - - var from = this.opts.to ? _path2.default.dirname(this.opts.to) : '.'; - - if (typeof this.mapOpts.annotation === 'string') { - from = _path2.default.dirname(_path2.default.resolve(from, this.mapOpts.annotation)); - } - - file = _path2.default.relative(from, file); - if (_path2.default.sep === '\\') { - return file.replace(/\\/g, '/'); - } else { - return file; - } - }; - - MapGenerator.prototype.sourcePath = function sourcePath(node) { - if (this.mapOpts.from) { - return this.mapOpts.from; - } else { - return this.relative(node.source.input.from); - } - }; - - MapGenerator.prototype.generateString = function generateString() { - var _this3 = this; - - this.css = ''; - this.map = new _sourceMap2.default.SourceMapGenerator({ file: this.outputFile() }); - - var line = 1; - var column = 1; - - var lines = void 0, - last = void 0; - this.stringify(this.root, function (str, node, type) { - _this3.css += str; - - if (node && type !== 'end') { - if (node.source && node.source.start) { - _this3.map.addMapping({ - source: _this3.sourcePath(node), - generated: { line: line, column: column - 1 }, - original: { - line: node.source.start.line, - column: node.source.start.column - 1 - } - }); - } else { - _this3.map.addMapping({ - source: '', - original: { line: 1, column: 0 }, - generated: { line: line, column: column - 1 } - }); - } - } - - lines = str.match(/\n/g); - if (lines) { - line += lines.length; - last = str.lastIndexOf('\n'); - column = str.length - last; - } else { - column += str.length; - } - - if (node && type !== 'start') { - if (node.source && node.source.end) { - _this3.map.addMapping({ - source: _this3.sourcePath(node), - generated: { line: line, column: column - 1 }, - original: { - line: node.source.end.line, - column: node.source.end.column - } - }); - } else { - _this3.map.addMapping({ - source: '', - original: { line: 1, column: 0 }, - generated: { line: line, column: column - 1 } - }); - } - } - }); - }; - - MapGenerator.prototype.generate = function generate() { - this.clearAnnotation(); - - if (this.isMap()) { - return this.generateMap(); - } else { - var result = ''; - this.stringify(this.root, function (i) { - result += i; - }); - return [result]; - } - }; - - return MapGenerator; - }(); - - exports.default = MapGenerator; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/warning.js', ['process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - /** - * Represents a plugin’s warning. It can be created using {@link Node#warn}. - * - * @example - * if ( decl.important ) { - * decl.warn(result, 'Avoid !important', { word: '!important' }); - * } - */ - var Warning = function () { - - /** - * @param {string} text - warning message - * @param {Object} [opts] - warning options - * @param {Node} opts.node - CSS node that caused the warning - * @param {string} opts.word - word in CSS source that caused the warning - * @param {number} opts.index - index in CSS node string that caused - * the warning - * @param {string} opts.plugin - name of the plugin that created - * this warning. {@link Result#warn} fills - * this property automatically. - */ - function Warning(text) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, Warning); - - /** - * @member {string} - Type to filter warnings from - * {@link Result#messages}. Always equal - * to `"warning"`. - * - * @example - * const nonWarning = result.messages.filter(i => i.type !== 'warning') - */ - this.type = 'warning'; - /** - * @member {string} - The warning message. - * - * @example - * warning.text //=> 'Try to avoid !important' - */ - this.text = text; - - if (opts.node && opts.node.source) { - var pos = opts.node.positionBy(opts); - /** - * @member {number} - Line in the input file - * with this warning’s source - * - * @example - * warning.line //=> 5 - */ - this.line = pos.line; - /** - * @member {number} - Column in the input file - * with this warning’s source. - * - * @example - * warning.column //=> 6 - */ - this.column = pos.column; - } - - for (var opt in opts) { - this[opt] = opts[opt]; - } - } - - /** - * Returns a warning position and message. - * - * @example - * warning.toString() //=> 'postcss-lint:a.css:10:14: Avoid !important' - * - * @return {string} warning position and message - */ - - Warning.prototype.toString = function toString() { - if (this.node) { - return this.node.error(this.text, { - plugin: this.plugin, - index: this.index, - word: this.word - }).message; - } else if (this.plugin) { - return this.plugin + ': ' + this.text; - } else { - return this.text; - } - }; - - /** - * @memberof Warning# - * @member {string} plugin - The name of the plugin that created - * it will fill this property automatically. - * this warning. When you call {@link Node#warn} - * - * @example - * warning.plugin //=> 'postcss-important' - */ - - /** - * @memberof Warning# - * @member {Node} node - Contains the CSS node that caused the warning. - * - * @example - * warning.node.toString() //=> 'color: white !important' - */ - - return Warning; - }(); - - exports.default = Warning; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/result.js', ['./warning', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor); - } - }return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; - }; - }(); - - var _warning = $__require('./warning'); - - var _warning2 = _interopRequireDefault(_warning); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - /** - * Provides the result of the PostCSS transformations. - * - * A Result instance is returned by {@link LazyResult#then} - * or {@link Root#toResult} methods. - * - * @example - * postcss([cssnext]).process(css).then(function (result) { - * console.log(result.css); - * }); - * - * @example - * var result2 = postcss.parse(css).toResult(); - */ - var Result = function () { - - /** - * @param {Processor} processor - processor used for this transformation. - * @param {Root} root - Root node after all transformations. - * @param {processOptions} opts - options from the {@link Processor#process} - * or {@link Root#toResult} - */ - function Result(processor, root, opts) { - _classCallCheck(this, Result); - - /** - * @member {Processor} - The Processor instance used - * for this transformation. - * - * @example - * for ( let plugin of result.processor.plugins) { - * if ( plugin.postcssPlugin === 'postcss-bad' ) { - * throw 'postcss-good is incompatible with postcss-bad'; - * } - * }); - */ - this.processor = processor; - /** - * @member {Message[]} - Contains messages from plugins - * (e.g., warnings or custom messages). - * Each message should have type - * and plugin properties. - * - * @example - * postcss.plugin('postcss-min-browser', () => { - * return (root, result) => { - * var browsers = detectMinBrowsersByCanIUse(root); - * result.messages.push({ - * type: 'min-browser', - * plugin: 'postcss-min-browser', - * browsers: browsers - * }); - * }; - * }); - */ - this.messages = []; - /** - * @member {Root} - Root node after all transformations. - * - * @example - * root.toResult().root == root; - */ - this.root = root; - /** - * @member {processOptions} - Options from the {@link Processor#process} - * or {@link Root#toResult} call - * that produced this Result instance. - * - * @example - * root.toResult(opts).opts == opts; - */ - this.opts = opts; - /** - * @member {string} - A CSS string representing of {@link Result#root}. - * - * @example - * postcss.parse('a{}').toResult().css //=> "a{}" - */ - this.css = undefined; - /** - * @member {SourceMapGenerator} - An instance of `SourceMapGenerator` - * class from the `source-map` library, - * representing changes - * to the {@link Result#root} instance. - * - * @example - * result.map.toJSON() //=> { version: 3, file: 'a.css', … } - * - * @example - * if ( result.map ) { - * fs.writeFileSync(result.opts.to + '.map', result.map.toString()); - * } - */ - this.map = undefined; - } - - /** - * Returns for @{link Result#css} content. - * - * @example - * result + '' === result.css - * - * @return {string} string representing of {@link Result#root} - */ - - Result.prototype.toString = function toString() { - return this.css; - }; - - /** - * Creates an instance of {@link Warning} and adds it - * to {@link Result#messages}. - * - * @param {string} text - warning message - * @param {Object} [opts] - warning options - * @param {Node} opts.node - CSS node that caused the warning - * @param {string} opts.word - word in CSS source that caused the warning - * @param {number} opts.index - index in CSS node string that caused - * the warning - * @param {string} opts.plugin - name of the plugin that created - * this warning. {@link Result#warn} fills - * this property automatically. - * - * @return {Warning} created warning - */ - - Result.prototype.warn = function warn(text) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (!opts.plugin) { - if (this.lastPlugin && this.lastPlugin.postcssPlugin) { - opts.plugin = this.lastPlugin.postcssPlugin; - } - } - - var warning = new _warning2.default(text, opts); - this.messages.push(warning); - - return warning; - }; - - /** - * Returns warnings from plugins. Filters {@link Warning} instances - * from {@link Result#messages}. - * - * @example - * result.warnings().forEach(warn => { - * console.warn(warn.toString()); - * }); - * - * @return {Warning[]} warnings from plugins - */ - - Result.prototype.warnings = function warnings() { - return this.messages.filter(function (i) { - return i.type === 'warning'; - }); - }; - - /** - * An alias for the {@link Result#css} property. - * Use it with syntaxes that generate non-CSS output. - * @type {string} - * - * @example - * result.css === result.content; - */ - - _createClass(Result, [{ - key: 'content', - get: function get() { - return this.css; - } - }]); - - return Result; - }(); - - exports.default = Result; - - /** - * @typedef {object} Message - * @property {string} type - message type - * @property {string} plugin - source PostCSS plugin name - */ - - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/declaration.js', ['./node', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _node = $__require('./node'); - - var _node2 = _interopRequireDefault(_node); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _possibleConstructorReturn(self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - }return call && (typeof call === "object" || typeof call === "function") ? call : self; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - } - - /** - * Represents a CSS declaration. - * - * @extends Node - * - * @example - * const root = postcss.parse('a { color: black }'); - * const decl = root.first.first; - * decl.type //=> 'decl' - * decl.toString() //=> ' color: black' - */ - var Declaration = function (_Node) { - _inherits(Declaration, _Node); - - function Declaration(defaults) { - _classCallCheck(this, Declaration); - - var _this = _possibleConstructorReturn(this, _Node.call(this, defaults)); - - _this.type = 'decl'; - return _this; - } - - /** - * @memberof Declaration# - * @member {string} prop - the declaration’s property name - * - * @example - * const root = postcss.parse('a { color: black }'); - * const decl = root.first.first; - * decl.prop //=> 'color' - */ - - /** - * @memberof Declaration# - * @member {string} value - the declaration’s value - * - * @example - * const root = postcss.parse('a { color: black }'); - * const decl = root.first.first; - * decl.value //=> 'black' - */ - - /** - * @memberof Declaration# - * @member {boolean} important - `true` if the declaration - * has an !important annotation. - * - * @example - * const root = postcss.parse('a { color: black !important; color: red }'); - * root.first.first.important //=> true - * root.first.last.important //=> undefined - */ - - /** - * @memberof Declaration# - * @member {object} raws - Information to generate byte-to-byte equal - * node string as it was in the origin input. - * - * Every parser saves its own properties, - * but the default CSS parser uses: - * - * * `before`: the space symbols before the node. It also stores `*` - * and `_` symbols before the declaration (IE hack). - * * `between`: the symbols between the property and value - * for declarations. - * * `important`: the content of the important statement, - * if it is not just `!important`. - * - * PostCSS cleans declaration from comments and extra spaces, - * but it stores origin content in raws properties. - * As such, if you don’t change a declaration’s value, - * PostCSS will use the raw value with comments. - * - * @example - * const root = postcss.parse('a {\n color:black\n}') - * root.first.first.raws //=> { before: '\n ', between: ':' } - */ - - return Declaration; - }(_node2.default); - - exports.default = Declaration; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/comment.js', ['./node', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _node = $__require('./node'); - - var _node2 = _interopRequireDefault(_node); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _possibleConstructorReturn(self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - }return call && (typeof call === "object" || typeof call === "function") ? call : self; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - } - - /** - * Represents a comment between declarations or statements (rule and at-rules). - * - * Comments inside selectors, at-rule parameters, or declaration values - * will be stored in the `raws` properties explained above. - * - * @extends Node - */ - var Comment = function (_Node) { - _inherits(Comment, _Node); - - function Comment(defaults) { - _classCallCheck(this, Comment); - - var _this = _possibleConstructorReturn(this, _Node.call(this, defaults)); - - _this.type = 'comment'; - return _this; - } - - /** - * @memberof Comment# - * @member {string} text - the comment’s text - */ - - /** - * @memberof Comment# - * @member {object} raws - Information to generate byte-to-byte equal - * node string as it was in the origin input. - * - * Every parser saves its own properties, - * but the default CSS parser uses: - * - * * `before`: the space symbols before the node. - * * `left`: the space symbols between `/*` and the comment’s text. - * * `right`: the space symbols between the comment’s text. - */ - - return Comment; - }(_node2.default); - - exports.default = Comment; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/stringifier.js', ['process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var defaultRaw = { - colon: ': ', - indent: ' ', - beforeDecl: '\n', - beforeRule: '\n', - beforeOpen: ' ', - beforeClose: '\n', - beforeComment: '\n', - after: '\n', - emptyBody: '', - commentLeft: ' ', - commentRight: ' ' - }; - - function capitalize(str) { - return str[0].toUpperCase() + str.slice(1); - } - - var Stringifier = function () { - function Stringifier(builder) { - _classCallCheck(this, Stringifier); - - this.builder = builder; - } - - Stringifier.prototype.stringify = function stringify(node, semicolon) { - this[node.type](node, semicolon); - }; - - Stringifier.prototype.root = function root(node) { - this.body(node); - if (node.raws.after) this.builder(node.raws.after); - }; - - Stringifier.prototype.comment = function comment(node) { - var left = this.raw(node, 'left', 'commentLeft'); - var right = this.raw(node, 'right', 'commentRight'); - this.builder('/*' + left + node.text + right + '*/', node); - }; - - Stringifier.prototype.decl = function decl(node, semicolon) { - var between = this.raw(node, 'between', 'colon'); - var string = node.prop + between + this.rawValue(node, 'value'); - - if (node.important) { - string += node.raws.important || ' !important'; - } - - if (semicolon) string += ';'; - this.builder(string, node); - }; - - Stringifier.prototype.rule = function rule(node) { - this.block(node, this.rawValue(node, 'selector')); - if (node.raws.ownSemicolon) { - this.builder(node.raws.ownSemicolon, node, 'end'); - } - }; - - Stringifier.prototype.atrule = function atrule(node, semicolon) { - var name = '@' + node.name; - var params = node.params ? this.rawValue(node, 'params') : ''; - - if (typeof node.raws.afterName !== 'undefined') { - name += node.raws.afterName; - } else if (params) { - name += ' '; - } - - if (node.nodes) { - this.block(node, name + params); - } else { - var end = (node.raws.between || '') + (semicolon ? ';' : ''); - this.builder(name + params + end, node); - } - }; - - Stringifier.prototype.body = function body(node) { - var last = node.nodes.length - 1; - while (last > 0) { - if (node.nodes[last].type !== 'comment') break; - last -= 1; - } - - var semicolon = this.raw(node, 'semicolon'); - for (var i = 0; i < node.nodes.length; i++) { - var child = node.nodes[i]; - var before = this.raw(child, 'before'); - if (before) this.builder(before); - this.stringify(child, last !== i || semicolon); - } - }; - - Stringifier.prototype.block = function block(node, start) { - var between = this.raw(node, 'between', 'beforeOpen'); - this.builder(start + between + '{', node, 'start'); - - var after = void 0; - if (node.nodes && node.nodes.length) { - this.body(node); - after = this.raw(node, 'after'); - } else { - after = this.raw(node, 'after', 'emptyBody'); - } - - if (after) this.builder(after); - this.builder('}', node, 'end'); - }; - - Stringifier.prototype.raw = function raw(node, own, detect) { - var value = void 0; - if (!detect) detect = own; - - // Already had - if (own) { - value = node.raws[own]; - if (typeof value !== 'undefined') return value; - } - - var parent = node.parent; - - // Hack for first rule in CSS - if (detect === 'before') { - if (!parent || parent.type === 'root' && parent.first === node) { - return ''; - } - } - - // Floating child without parent - if (!parent) return defaultRaw[detect]; - - // Detect style by other nodes - var root = node.root(); - if (!root.rawCache) root.rawCache = {}; - if (typeof root.rawCache[detect] !== 'undefined') { - return root.rawCache[detect]; - } - - if (detect === 'before' || detect === 'after') { - return this.beforeAfter(node, detect); - } else { - var method = 'raw' + capitalize(detect); - if (this[method]) { - value = this[method](root, node); - } else { - root.walk(function (i) { - value = i.raws[own]; - if (typeof value !== 'undefined') return false; - }); - } - } - - if (typeof value === 'undefined') value = defaultRaw[detect]; - - root.rawCache[detect] = value; - return value; - }; - - Stringifier.prototype.rawSemicolon = function rawSemicolon(root) { - var value = void 0; - root.walk(function (i) { - if (i.nodes && i.nodes.length && i.last.type === 'decl') { - value = i.raws.semicolon; - if (typeof value !== 'undefined') return false; - } - }); - return value; - }; - - Stringifier.prototype.rawEmptyBody = function rawEmptyBody(root) { - var value = void 0; - root.walk(function (i) { - if (i.nodes && i.nodes.length === 0) { - value = i.raws.after; - if (typeof value !== 'undefined') return false; - } - }); - return value; - }; - - Stringifier.prototype.rawIndent = function rawIndent(root) { - if (root.raws.indent) return root.raws.indent; - var value = void 0; - root.walk(function (i) { - var p = i.parent; - if (p && p !== root && p.parent && p.parent === root) { - if (typeof i.raws.before !== 'undefined') { - var parts = i.raws.before.split('\n'); - value = parts[parts.length - 1]; - value = value.replace(/[^\s]/g, ''); - return false; - } - } - }); - return value; - }; - - Stringifier.prototype.rawBeforeComment = function rawBeforeComment(root, node) { - var value = void 0; - root.walkComments(function (i) { - if (typeof i.raws.before !== 'undefined') { - value = i.raws.before; - if (value.indexOf('\n') !== -1) { - value = value.replace(/[^\n]+$/, ''); - } - return false; - } - }); - if (typeof value === 'undefined') { - value = this.raw(node, null, 'beforeDecl'); - } - return value; - }; - - Stringifier.prototype.rawBeforeDecl = function rawBeforeDecl(root, node) { - var value = void 0; - root.walkDecls(function (i) { - if (typeof i.raws.before !== 'undefined') { - value = i.raws.before; - if (value.indexOf('\n') !== -1) { - value = value.replace(/[^\n]+$/, ''); - } - return false; - } - }); - if (typeof value === 'undefined') { - value = this.raw(node, null, 'beforeRule'); - } - return value; - }; - - Stringifier.prototype.rawBeforeRule = function rawBeforeRule(root) { - var value = void 0; - root.walk(function (i) { - if (i.nodes && (i.parent !== root || root.first !== i)) { - if (typeof i.raws.before !== 'undefined') { - value = i.raws.before; - if (value.indexOf('\n') !== -1) { - value = value.replace(/[^\n]+$/, ''); - } - return false; - } - } - }); - return value; - }; - - Stringifier.prototype.rawBeforeClose = function rawBeforeClose(root) { - var value = void 0; - root.walk(function (i) { - if (i.nodes && i.nodes.length > 0) { - if (typeof i.raws.after !== 'undefined') { - value = i.raws.after; - if (value.indexOf('\n') !== -1) { - value = value.replace(/[^\n]+$/, ''); - } - return false; - } - } - }); - return value; - }; - - Stringifier.prototype.rawBeforeOpen = function rawBeforeOpen(root) { - var value = void 0; - root.walk(function (i) { - if (i.type !== 'decl') { - value = i.raws.between; - if (typeof value !== 'undefined') return false; - } - }); - return value; - }; - - Stringifier.prototype.rawColon = function rawColon(root) { - var value = void 0; - root.walkDecls(function (i) { - if (typeof i.raws.between !== 'undefined') { - value = i.raws.between.replace(/[^\s:]/g, ''); - return false; - } - }); - return value; - }; - - Stringifier.prototype.beforeAfter = function beforeAfter(node, detect) { - var value = void 0; - if (node.type === 'decl') { - value = this.raw(node, null, 'beforeDecl'); - } else if (node.type === 'comment') { - value = this.raw(node, null, 'beforeComment'); - } else if (detect === 'before') { - value = this.raw(node, null, 'beforeRule'); - } else { - value = this.raw(node, null, 'beforeClose'); - } - - var buf = node.parent; - var depth = 0; - while (buf && buf.type !== 'root') { - depth += 1; - buf = buf.parent; - } - - if (value.indexOf('\n') !== -1) { - var indent = this.raw(node, null, 'indent'); - if (indent.length) { - for (var step = 0; step < depth; step++) { - value += indent; - } - } - } - - return value; - }; - - Stringifier.prototype.rawValue = function rawValue(node, prop) { - var value = node[prop]; - var raw = node.raws[prop]; - if (raw && raw.value === value) { - return raw.raw; - } else { - return value; - } - }; - - return Stringifier; - }(); - - exports.default = Stringifier; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/stringify.js', ['./stringifier', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - exports.default = stringify; - - var _stringifier = $__require('./stringifier'); - - var _stringifier2 = _interopRequireDefault(_stringifier); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function stringify(node, builder) { - var str = new _stringifier2.default(builder); - str.stringify(node); - } - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/warn-once.js', ['process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - exports.default = warnOnce; - var printed = {}; - - function warnOnce(message) { - if (printed[message]) return; - printed[message] = true; - - if (typeof console !== 'undefined' && console.warn) console.warn(message); - } - module.exports = exports['default']; -}); -System.registerDynamic("npm:postcss@6.0.8/lib/node.js", ["./css-syntax-error", "./stringifier", "./stringify", "./warn-once", "process"], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - - var _cssSyntaxError = $__require('./css-syntax-error'); - - var _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError); - - var _stringifier = $__require('./stringifier'); - - var _stringifier2 = _interopRequireDefault(_stringifier); - - var _stringify = $__require('./stringify'); - - var _stringify2 = _interopRequireDefault(_stringify); - - var _warnOnce = $__require('./warn-once'); - - var _warnOnce2 = _interopRequireDefault(_warnOnce); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var cloneNode = function cloneNode(obj, parent) { - var cloned = new obj.constructor(); - - for (var i in obj) { - if (!obj.hasOwnProperty(i)) continue; - var value = obj[i]; - var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); - - if (i === 'parent' && type === 'object') { - if (parent) cloned[i] = parent; - } else if (i === 'source') { - cloned[i] = value; - } else if (value instanceof Array) { - cloned[i] = value.map(function (j) { - return cloneNode(j, cloned); - }); - } else { - if (type === 'object' && value !== null) value = cloneNode(value); - cloned[i] = value; - } - } - - return cloned; - }; - - /** - * All node classes inherit the following common methods. - * - * @abstract - */ - - var Node = function () { - - /** - * @param {object} [defaults] - value for node properties - */ - function Node() { - var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Node); - - this.raws = {}; - if ((typeof defaults === 'undefined' ? 'undefined' : _typeof(defaults)) !== 'object' && typeof defaults !== 'undefined') { - throw new Error('PostCSS nodes constructor accepts object, not ' + JSON.stringify(defaults)); - } - for (var name in defaults) { - this[name] = defaults[name]; - } - } - - /** - * Returns a CssSyntaxError instance containing the original position - * of the node in the source, showing line and column numbers and also - * a small excerpt to facilitate debugging. - * - * If present, an input source map will be used to get the original position - * of the source, even from a previous compilation step - * (e.g., from Sass compilation). - * - * This method produces very useful error messages. - * - * @param {string} message - error description - * @param {object} [opts] - options - * @param {string} opts.plugin - plugin name that created this error. - * PostCSS will set it automatically. - * @param {string} opts.word - a word inside a node’s string that should - * be highlighted as the source of the error - * @param {number} opts.index - an index inside a node’s string that should - * be highlighted as the source of the error - * - * @return {CssSyntaxError} error object to throw it - * - * @example - * if ( !variables[name] ) { - * throw decl.error('Unknown variable ' + name, { word: name }); - * // CssSyntaxError: postcss-vars:a.sass:4:3: Unknown variable $black - * // color: $black - * // a - * // ^ - * // background: white - * } - */ - - Node.prototype.error = function error(message) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (this.source) { - var pos = this.positionBy(opts); - return this.source.input.error(message, pos.line, pos.column, opts); - } else { - return new _cssSyntaxError2.default(message); - } - }; - - /** - * This method is provided as a convenience wrapper for {@link Result#warn}. - * - * @param {Result} result - the {@link Result} instance - * that will receive the warning - * @param {string} text - warning message - * @param {object} [opts] - options - * @param {string} opts.plugin - plugin name that created this warning. - * PostCSS will set it automatically. - * @param {string} opts.word - a word inside a node’s string that should - * be highlighted as the source of the warning - * @param {number} opts.index - an index inside a node’s string that should - * be highlighted as the source of the warning - * - * @return {Warning} created warning object - * - * @example - * const plugin = postcss.plugin('postcss-deprecated', () => { - * return (root, result) => { - * root.walkDecls('bad', decl => { - * decl.warn(result, 'Deprecated property bad'); - * }); - * }; - * }); - */ - - Node.prototype.warn = function warn(result, text, opts) { - var data = { node: this }; - for (var i in opts) { - data[i] = opts[i]; - }return result.warn(text, data); - }; - - /** - * Removes the node from its parent and cleans the parent properties - * from the node and its children. - * - * @example - * if ( decl.prop.match(/^-webkit-/) ) { - * decl.remove(); - * } - * - * @return {Node} node to make calls chain - */ - - Node.prototype.remove = function remove() { - if (this.parent) { - this.parent.removeChild(this); - } - this.parent = undefined; - return this; - }; - - /** - * Returns a CSS string representing the node. - * - * @param {stringifier|syntax} [stringifier] - a syntax to use - * in string generation - * - * @return {string} CSS string of this node - * - * @example - * postcss.rule({ selector: 'a' }).toString() //=> "a {}" - */ - - Node.prototype.toString = function toString() { - var stringifier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _stringify2.default; - - if (stringifier.stringify) stringifier = stringifier.stringify; - var result = ''; - stringifier(this, function (i) { - result += i; - }); - return result; - }; - - /** - * Returns a clone of the node. - * - * The resulting cloned node and its (cloned) children will have - * a clean parent and code style properties. - * - * @param {object} [overrides] - new properties to override in the clone. - * - * @example - * const cloned = decl.clone({ prop: '-moz-' + decl.prop }); - * cloned.raws.before //=> undefined - * cloned.parent //=> undefined - * cloned.toString() //=> -moz-transform: scale(0) - * - * @return {Node} clone of the node - */ - - Node.prototype.clone = function clone() { - var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var cloned = cloneNode(this); - for (var name in overrides) { - cloned[name] = overrides[name]; - } - return cloned; - }; - - /** - * Shortcut to clone the node and insert the resulting cloned node - * before the current node. - * - * @param {object} [overrides] - new properties to override in the clone. - * - * @example - * decl.cloneBefore({ prop: '-moz-' + decl.prop }); - * - * @return {Node} - new node - */ - - Node.prototype.cloneBefore = function cloneBefore() { - var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var cloned = this.clone(overrides); - this.parent.insertBefore(this, cloned); - return cloned; - }; - - /** - * Shortcut to clone the node and insert the resulting cloned node - * after the current node. - * - * @param {object} [overrides] - new properties to override in the clone. - * - * @return {Node} - new node - */ - - Node.prototype.cloneAfter = function cloneAfter() { - var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var cloned = this.clone(overrides); - this.parent.insertAfter(this, cloned); - return cloned; - }; - - /** - * Inserts node(s) before the current node and removes the current node. - * - * @param {...Node} nodes - node(s) to replace current one - * - * @example - * if ( atrule.name == 'mixin' ) { - * atrule.replaceWith(mixinRules[atrule.params]); - * } - * - * @return {Node} current node to methods chain - */ - - Node.prototype.replaceWith = function replaceWith() { - if (this.parent) { - for (var _len = arguments.length, nodes = Array(_len), _key = 0; _key < _len; _key++) { - nodes[_key] = arguments[_key]; - } - - for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var node = _ref; - - this.parent.insertBefore(this, node); - } - - this.remove(); - } - - return this; - }; - - Node.prototype.moveTo = function moveTo(newParent) { - (0, _warnOnce2.default)('Node#moveTo was deprecated. Use Container#append.'); - this.cleanRaws(this.root() === newParent.root()); - this.remove(); - newParent.append(this); - return this; - }; - - Node.prototype.moveBefore = function moveBefore(otherNode) { - (0, _warnOnce2.default)('Node#moveBefore was deprecated. Use Node#before.'); - this.cleanRaws(this.root() === otherNode.root()); - this.remove(); - otherNode.parent.insertBefore(otherNode, this); - return this; - }; - - Node.prototype.moveAfter = function moveAfter(otherNode) { - (0, _warnOnce2.default)('Node#moveAfter was deprecated. Use Node#after.'); - this.cleanRaws(this.root() === otherNode.root()); - this.remove(); - otherNode.parent.insertAfter(otherNode, this); - return this; - }; - - /** - * Returns the next child of the node’s parent. - * Returns `undefined` if the current node is the last child. - * - * @return {Node|undefined} next node - * - * @example - * if ( comment.text === 'delete next' ) { - * const next = comment.next(); - * if ( next ) { - * next.remove(); - * } - * } - */ - - Node.prototype.next = function next() { - var index = this.parent.index(this); - return this.parent.nodes[index + 1]; - }; - - /** - * Returns the previous child of the node’s parent. - * Returns `undefined` if the current node is the first child. - * - * @return {Node|undefined} previous node - * - * @example - * const annotation = decl.prev(); - * if ( annotation.type == 'comment' ) { - * readAnnotation(annotation.text); - * } - */ - - Node.prototype.prev = function prev() { - var index = this.parent.index(this); - return this.parent.nodes[index - 1]; - }; - - /** - * Insert new node before current node to current node’s parent. - * - * Just alias for `node.parent.insertBefore(node, add)`. - * - * @param {Node|object|string|Node[]} add - new node - * - * @return {Node} this node for methods chain. - * - * @example - * decl.before('content: ""'); - */ - - Node.prototype.before = function before(add) { - this.parent.insertBefore(this, add); - return this; - }; - - /** - * Insert new node after current node to current node’s parent. - * - * Just alias for `node.parent.insertAfter(node, add)`. - * - * @param {Node|object|string|Node[]} add - new node - * - * @return {Node} this node for methods chain. - * - * @example - * decl.after('color: black'); - */ - - Node.prototype.after = function after(add) { - this.parent.insertAfter(this, add); - return this; - }; - - Node.prototype.toJSON = function toJSON() { - var fixed = {}; - - for (var name in this) { - if (!this.hasOwnProperty(name)) continue; - if (name === 'parent') continue; - var value = this[name]; - - if (value instanceof Array) { - fixed[name] = value.map(function (i) { - if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && i.toJSON) { - return i.toJSON(); - } else { - return i; - } - }); - } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.toJSON) { - fixed[name] = value.toJSON(); - } else { - fixed[name] = value; - } - } - - return fixed; - }; - - /** - * Returns a {@link Node#raws} value. If the node is missing - * the code style property (because the node was manually built or cloned), - * PostCSS will try to autodetect the code style property by looking - * at other nodes in the tree. - * - * @param {string} prop - name of code style property - * @param {string} [defaultType] - name of default value, it can be missed - * if the value is the same as prop - * - * @example - * const root = postcss.parse('a { background: white }'); - * root.nodes[0].append({ prop: 'color', value: 'black' }); - * root.nodes[0].nodes[1].raws.before //=> undefined - * root.nodes[0].nodes[1].raw('before') //=> ' ' - * - * @return {string} code style value - */ - - Node.prototype.raw = function raw(prop, defaultType) { - var str = new _stringifier2.default(); - return str.raw(this, prop, defaultType); - }; - - /** - * Finds the Root instance of the node’s tree. - * - * @example - * root.nodes[0].nodes[0].root() === root - * - * @return {Root} root parent - */ - - Node.prototype.root = function root() { - var result = this; - while (result.parent) { - result = result.parent; - }return result; - }; - - Node.prototype.cleanRaws = function cleanRaws(keepBetween) { - delete this.raws.before; - delete this.raws.after; - if (!keepBetween) delete this.raws.between; - }; - - Node.prototype.positionInside = function positionInside(index) { - var string = this.toString(); - var column = this.source.start.column; - var line = this.source.start.line; - - for (var i = 0; i < index; i++) { - if (string[i] === '\n') { - column = 1; - line += 1; - } else { - column += 1; - } - } - - return { line: line, column: column }; - }; - - Node.prototype.positionBy = function positionBy(opts) { - var pos = this.source.start; - if (opts.index) { - pos = this.positionInside(opts.index); - } else if (opts.word) { - var index = this.toString().indexOf(opts.word); - if (index !== -1) pos = this.positionInside(index); - } - return pos; - }; - - /** - * @memberof Node# - * @member {string} type - String representing the node’s type. - * Possible values are `root`, `atrule`, `rule`, - * `decl`, or `comment`. - * - * @example - * postcss.decl({ prop: 'color', value: 'black' }).type //=> 'decl' - */ - - /** - * @memberof Node# - * @member {Container} parent - the node’s parent node. - * - * @example - * root.nodes[0].parent == root; - */ - - /** - * @memberof Node# - * @member {source} source - the input source of the node - * - * The property is used in source map generation. - * - * If you create a node manually (e.g., with `postcss.decl()`), - * that node will not have a `source` property and will be absent - * from the source map. For this reason, the plugin developer should - * consider cloning nodes to create new ones (in which case the new node’s - * source will reference the original, cloned node) or setting - * the `source` property manually. - * - * ```js - * // Bad - * const prefixed = postcss.decl({ - * prop: '-moz-' + decl.prop, - * value: decl.value - * }); - * - * // Good - * const prefixed = decl.clone({ prop: '-moz-' + decl.prop }); - * ``` - * - * ```js - * if ( atrule.name == 'add-link' ) { - * const rule = postcss.rule({ selector: 'a', source: atrule.source }); - * atrule.parent.insertBefore(atrule, rule); - * } - * ``` - * - * @example - * decl.source.input.from //=> '/home/ai/a.sass' - * decl.source.start //=> { line: 10, column: 2 } - * decl.source.end //=> { line: 10, column: 12 } - */ - - /** - * @memberof Node# - * @member {object} raws - Information to generate byte-to-byte equal - * node string as it was in the origin input. - * - * Every parser saves its own properties, - * but the default CSS parser uses: - * - * * `before`: the space symbols before the node. It also stores `*` - * and `_` symbols before the declaration (IE hack). - * * `after`: the space symbols after the last child of the node - * to the end of the node. - * * `between`: the symbols between the property and value - * for declarations, selector and `{` for rules, or last parameter - * and `{` for at-rules. - * * `semicolon`: contains true if the last child has - * an (optional) semicolon. - * * `afterName`: the space between the at-rule name and its parameters. - * * `left`: the space symbols between `/*` and the comment’s text. - * * `right`: the space symbols between the comment’s text - * and */. - * * `important`: the content of the important statement, - * if it is not just `!important`. - * - * PostCSS cleans selectors, declaration values and at-rule parameters - * from comments and extra spaces, but it stores origin content in raws - * properties. As such, if you don’t change a declaration’s value, - * PostCSS will use the raw value with comments. - * - * @example - * const root = postcss.parse('a {\n color:black\n}') - * root.first.first.raws //=> { before: '\n ', between: ':' } - */ - - return Node; - }(); - - exports.default = Node; - - /** - * @typedef {object} position - * @property {number} line - source line in file - * @property {number} column - source column in file - */ - - /** - * @typedef {object} source - * @property {Input} input - {@link Input} with input file - * @property {position} start - The starting position of the node’s source - * @property {position} end - The ending position of the node’s source - */ - - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/at-rule.js', ['./container', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _container = $__require('./container'); - - var _container2 = _interopRequireDefault(_container); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _possibleConstructorReturn(self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - }return call && (typeof call === "object" || typeof call === "function") ? call : self; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - } - - /** - * Represents an at-rule. - * - * If it’s followed in the CSS by a {} block, this node will have - * a nodes property representing its children. - * - * @extends Container - * - * @example - * const root = postcss.parse('@charset "UTF-8"; @media print {}'); - * - * const charset = root.first; - * charset.type //=> 'atrule' - * charset.nodes //=> undefined - * - * const media = root.last; - * media.nodes //=> [] - */ - var AtRule = function (_Container) { - _inherits(AtRule, _Container); - - function AtRule(defaults) { - _classCallCheck(this, AtRule); - - var _this = _possibleConstructorReturn(this, _Container.call(this, defaults)); - - _this.type = 'atrule'; - return _this; - } - - AtRule.prototype.append = function append() { - var _Container$prototype$; - - if (!this.nodes) this.nodes = []; - - for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) { - children[_key] = arguments[_key]; - } - - return (_Container$prototype$ = _Container.prototype.append).call.apply(_Container$prototype$, [this].concat(children)); - }; - - AtRule.prototype.prepend = function prepend() { - var _Container$prototype$2; - - if (!this.nodes) this.nodes = []; - - for (var _len2 = arguments.length, children = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - children[_key2] = arguments[_key2]; - } - - return (_Container$prototype$2 = _Container.prototype.prepend).call.apply(_Container$prototype$2, [this].concat(children)); - }; - - /** - * @memberof AtRule# - * @member {string} name - the at-rule’s name immediately follows the `@` - * - * @example - * const root = postcss.parse('@media print {}'); - * media.name //=> 'media' - * const media = root.first; - */ - - /** - * @memberof AtRule# - * @member {string} params - the at-rule’s parameters, the values - * that follow the at-rule’s name but precede - * any {} block - * - * @example - * const root = postcss.parse('@media print, screen {}'); - * const media = root.first; - * media.params //=> 'print, screen' - */ - - /** - * @memberof AtRule# - * @member {object} raws - Information to generate byte-to-byte equal - * node string as it was in the origin input. - * - * Every parser saves its own properties, - * but the default CSS parser uses: - * - * * `before`: the space symbols before the node. It also stores `*` - * and `_` symbols before the declaration (IE hack). - * * `after`: the space symbols after the last child of the node - * to the end of the node. - * * `between`: the symbols between the property and value - * for declarations, selector and `{` for rules, or last parameter - * and `{` for at-rules. - * * `semicolon`: contains true if the last child has - * an (optional) semicolon. - * * `afterName`: the space between the at-rule name and its parameters. - * - * PostCSS cleans at-rule parameters from comments and extra spaces, - * but it stores origin content in raws properties. - * As such, if you don’t change a declaration’s value, - * PostCSS will use the raw value with comments. - * - * @example - * const root = postcss.parse(' @media\nprint {\n}') - * root.first.first.raws //=> { before: ' ', - * // between: ' ', - * // afterName: '\n', - * // after: '\n' } - */ - - return AtRule; - }(_container2.default); - - exports.default = AtRule; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/container.js', ['./declaration', './comment', './node', './parse', './rule', './at-rule', './root', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor); - } - }return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; - }; - }(); - - var _declaration = $__require('./declaration'); - - var _declaration2 = _interopRequireDefault(_declaration); - - var _comment = $__require('./comment'); - - var _comment2 = _interopRequireDefault(_comment); - - var _node = $__require('./node'); - - var _node2 = _interopRequireDefault(_node); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _possibleConstructorReturn(self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - }return call && (typeof call === "object" || typeof call === "function") ? call : self; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - } - - function cleanSource(nodes) { - return nodes.map(function (i) { - if (i.nodes) i.nodes = cleanSource(i.nodes); - delete i.source; - return i; - }); - } - - /** - * The {@link Root}, {@link AtRule}, and {@link Rule} container nodes - * inherit some common methods to help work with their children. - * - * Note that all containers can store any content. If you write a rule inside - * a rule, PostCSS will parse it. - * - * @extends Node - * @abstract - */ - - var Container = function (_Node) { - _inherits(Container, _Node); - - function Container() { - _classCallCheck(this, Container); - - return _possibleConstructorReturn(this, _Node.apply(this, arguments)); - } - - Container.prototype.push = function push(child) { - child.parent = this; - this.nodes.push(child); - return this; - }; - - /** - * Iterates through the container’s immediate children, - * calling `callback` for each child. - * - * Returning `false` in the callback will break iteration. - * - * This method only iterates through the container’s immediate children. - * If you need to recursively iterate through all the container’s descendant - * nodes, use {@link Container#walk}. - * - * Unlike the for `{}`-cycle or `Array#forEach` this iterator is safe - * if you are mutating the array of child nodes during iteration. - * PostCSS will adjust the current index to match the mutations. - * - * @param {childIterator} callback - iterator receives each node and index - * - * @return {false|undefined} returns `false` if iteration was broke - * - * @example - * const root = postcss.parse('a { color: black; z-index: 1 }'); - * const rule = root.first; - * - * for ( let decl of rule.nodes ) { - * decl.cloneBefore({ prop: '-webkit-' + decl.prop }); - * // Cycle will be infinite, because cloneBefore moves the current node - * // to the next index - * } - * - * rule.each(decl => { - * decl.cloneBefore({ prop: '-webkit-' + decl.prop }); - * // Will be executed only for color and z-index - * }); - */ - - Container.prototype.each = function each(callback) { - if (!this.lastEach) this.lastEach = 0; - if (!this.indexes) this.indexes = {}; - - this.lastEach += 1; - var id = this.lastEach; - this.indexes[id] = 0; - - if (!this.nodes) return undefined; - - var index = void 0, - result = void 0; - while (this.indexes[id] < this.nodes.length) { - index = this.indexes[id]; - result = callback(this.nodes[index], index); - if (result === false) break; - - this.indexes[id] += 1; - } - - delete this.indexes[id]; - - return result; - }; - - /** - * Traverses the container’s descendant nodes, calling callback - * for each node. - * - * Like container.each(), this method is safe to use - * if you are mutating arrays during iteration. - * - * If you only need to iterate through the container’s immediate children, - * use {@link Container#each}. - * - * @param {childIterator} callback - iterator receives each node and index - * - * @return {false|undefined} returns `false` if iteration was broke - * - * @example - * root.walk(node => { - * // Traverses all descendant nodes. - * }); - */ - - Container.prototype.walk = function walk(callback) { - return this.each(function (child, i) { - var result = callback(child, i); - if (result !== false && child.walk) { - result = child.walk(callback); - } - return result; - }); - }; - - /** - * Traverses the container’s descendant nodes, calling callback - * for each declaration node. - * - * If you pass a filter, iteration will only happen over declarations - * with matching properties. - * - * Like {@link Container#each}, this method is safe - * to use if you are mutating arrays during iteration. - * - * @param {string|RegExp} [prop] - string or regular expression - * to filter declarations by property name - * @param {childIterator} callback - iterator receives each node and index - * - * @return {false|undefined} returns `false` if iteration was broke - * - * @example - * root.walkDecls(decl => { - * checkPropertySupport(decl.prop); - * }); - * - * root.walkDecls('border-radius', decl => { - * decl.remove(); - * }); - * - * root.walkDecls(/^background/, decl => { - * decl.value = takeFirstColorFromGradient(decl.value); - * }); - */ - - Container.prototype.walkDecls = function walkDecls(prop, callback) { - if (!callback) { - callback = prop; - return this.walk(function (child, i) { - if (child.type === 'decl') { - return callback(child, i); - } - }); - } else if (prop instanceof RegExp) { - return this.walk(function (child, i) { - if (child.type === 'decl' && prop.test(child.prop)) { - return callback(child, i); - } - }); - } else { - return this.walk(function (child, i) { - if (child.type === 'decl' && child.prop === prop) { - return callback(child, i); - } - }); - } - }; - - /** - * Traverses the container’s descendant nodes, calling callback - * for each rule node. - * - * If you pass a filter, iteration will only happen over rules - * with matching selectors. - * - * Like {@link Container#each}, this method is safe - * to use if you are mutating arrays during iteration. - * - * @param {string|RegExp} [selector] - string or regular expression - * to filter rules by selector - * @param {childIterator} callback - iterator receives each node and index - * - * @return {false|undefined} returns `false` if iteration was broke - * - * @example - * const selectors = []; - * root.walkRules(rule => { - * selectors.push(rule.selector); - * }); - * console.log(`Your CSS uses ${selectors.length} selectors`); - */ - - Container.prototype.walkRules = function walkRules(selector, callback) { - if (!callback) { - callback = selector; - - return this.walk(function (child, i) { - if (child.type === 'rule') { - return callback(child, i); - } - }); - } else if (selector instanceof RegExp) { - return this.walk(function (child, i) { - if (child.type === 'rule' && selector.test(child.selector)) { - return callback(child, i); - } - }); - } else { - return this.walk(function (child, i) { - if (child.type === 'rule' && child.selector === selector) { - return callback(child, i); - } - }); - } - }; - - /** - * Traverses the container’s descendant nodes, calling callback - * for each at-rule node. - * - * If you pass a filter, iteration will only happen over at-rules - * that have matching names. - * - * Like {@link Container#each}, this method is safe - * to use if you are mutating arrays during iteration. - * - * @param {string|RegExp} [name] - string or regular expression - * to filter at-rules by name - * @param {childIterator} callback - iterator receives each node and index - * - * @return {false|undefined} returns `false` if iteration was broke - * - * @example - * root.walkAtRules(rule => { - * if ( isOld(rule.name) ) rule.remove(); - * }); - * - * let first = false; - * root.walkAtRules('charset', rule => { - * if ( !first ) { - * first = true; - * } else { - * rule.remove(); - * } - * }); - */ - - Container.prototype.walkAtRules = function walkAtRules(name, callback) { - if (!callback) { - callback = name; - return this.walk(function (child, i) { - if (child.type === 'atrule') { - return callback(child, i); - } - }); - } else if (name instanceof RegExp) { - return this.walk(function (child, i) { - if (child.type === 'atrule' && name.test(child.name)) { - return callback(child, i); - } - }); - } else { - return this.walk(function (child, i) { - if (child.type === 'atrule' && child.name === name) { - return callback(child, i); - } - }); - } - }; - - /** - * Traverses the container’s descendant nodes, calling callback - * for each comment node. - * - * Like {@link Container#each}, this method is safe - * to use if you are mutating arrays during iteration. - * - * @param {childIterator} callback - iterator receives each node and index - * - * @return {false|undefined} returns `false` if iteration was broke - * - * @example - * root.walkComments(comment => { - * comment.remove(); - * }); - */ - - Container.prototype.walkComments = function walkComments(callback) { - return this.walk(function (child, i) { - if (child.type === 'comment') { - return callback(child, i); - } - }); - }; - - /** - * Inserts new nodes to the end of the container. - * - * @param {...(Node|object|string|Node[])} children - new nodes - * - * @return {Node} this node for methods chain - * - * @example - * const decl1 = postcss.decl({ prop: 'color', value: 'black' }); - * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' }); - * rule.append(decl1, decl2); - * - * root.append({ name: 'charset', params: '"UTF-8"' }); // at-rule - * root.append({ selector: 'a' }); // rule - * rule.append({ prop: 'color', value: 'black' }); // declaration - * rule.append({ text: 'Comment' }) // comment - * - * root.append('a {}'); - * root.first.append('color: black; z-index: 1'); - */ - - Container.prototype.append = function append() { - for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) { - children[_key] = arguments[_key]; - } - - for (var _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var child = _ref; - - var nodes = this.normalize(child, this.last); - for (var _iterator2 = nodes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var node = _ref2; - this.nodes.push(node); - } - } - return this; - }; - - /** - * Inserts new nodes to the start of the container. - * - * @param {...(Node|object|string|Node[])} children - new nodes - * - * @return {Node} this node for methods chain - * - * @example - * const decl1 = postcss.decl({ prop: 'color', value: 'black' }); - * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' }); - * rule.prepend(decl1, decl2); - * - * root.append({ name: 'charset', params: '"UTF-8"' }); // at-rule - * root.append({ selector: 'a' }); // rule - * rule.append({ prop: 'color', value: 'black' }); // declaration - * rule.append({ text: 'Comment' }) // comment - * - * root.append('a {}'); - * root.first.append('color: black; z-index: 1'); - */ - - Container.prototype.prepend = function prepend() { - for (var _len2 = arguments.length, children = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - children[_key2] = arguments[_key2]; - } - - children = children.reverse(); - for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var child = _ref3; - - var nodes = this.normalize(child, this.first, 'prepend').reverse(); - for (var _iterator4 = nodes, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) { - var _ref4; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref4 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref4 = _i4.value; - } - - var node = _ref4; - this.nodes.unshift(node); - }for (var id in this.indexes) { - this.indexes[id] = this.indexes[id] + nodes.length; - } - } - return this; - }; - - Container.prototype.cleanRaws = function cleanRaws(keepBetween) { - _Node.prototype.cleanRaws.call(this, keepBetween); - if (this.nodes) { - for (var _iterator5 = this.nodes, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) { - var _ref5; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref5 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref5 = _i5.value; - } - - var node = _ref5; - node.cleanRaws(keepBetween); - } - } - }; - - /** - * Insert new node before old node within the container. - * - * @param {Node|number} exist - child or child’s index. - * @param {Node|object|string|Node[]} add - new node - * - * @return {Node} this node for methods chain - * - * @example - * rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop })); - */ - - Container.prototype.insertBefore = function insertBefore(exist, add) { - exist = this.index(exist); - - var type = exist === 0 ? 'prepend' : false; - var nodes = this.normalize(add, this.nodes[exist], type).reverse(); - for (var _iterator6 = nodes, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) { - var _ref6; - - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref6 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref6 = _i6.value; - } - - var node = _ref6; - this.nodes.splice(exist, 0, node); - }var index = void 0; - for (var id in this.indexes) { - index = this.indexes[id]; - if (exist <= index) { - this.indexes[id] = index + nodes.length; - } - } - - return this; - }; - - /** - * Insert new node after old node within the container. - * - * @param {Node|number} exist - child or child’s index - * @param {Node|object|string|Node[]} add - new node - * - * @return {Node} this node for methods chain - */ - - Container.prototype.insertAfter = function insertAfter(exist, add) { - exist = this.index(exist); - - var nodes = this.normalize(add, this.nodes[exist]).reverse(); - for (var _iterator7 = nodes, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) { - var _ref7; - - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref7 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref7 = _i7.value; - } - - var node = _ref7; - this.nodes.splice(exist + 1, 0, node); - }var index = void 0; - for (var id in this.indexes) { - index = this.indexes[id]; - if (exist < index) { - this.indexes[id] = index + nodes.length; - } - } - - return this; - }; - - /** - * Removes node from the container and cleans the parent properties - * from the node and its children. - * - * @param {Node|number} child - child or child’s index - * - * @return {Node} this node for methods chain - * - * @example - * rule.nodes.length //=> 5 - * rule.removeChild(decl); - * rule.nodes.length //=> 4 - * decl.parent //=> undefined - */ - - Container.prototype.removeChild = function removeChild(child) { - child = this.index(child); - this.nodes[child].parent = undefined; - this.nodes.splice(child, 1); - - var index = void 0; - for (var id in this.indexes) { - index = this.indexes[id]; - if (index >= child) { - this.indexes[id] = index - 1; - } - } - - return this; - }; - - /** - * Removes all children from the container - * and cleans their parent properties. - * - * @return {Node} this node for methods chain - * - * @example - * rule.removeAll(); - * rule.nodes.length //=> 0 - */ - - Container.prototype.removeAll = function removeAll() { - for (var _iterator8 = this.nodes, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) { - var _ref8; - - if (_isArray8) { - if (_i8 >= _iterator8.length) break; - _ref8 = _iterator8[_i8++]; - } else { - _i8 = _iterator8.next(); - if (_i8.done) break; - _ref8 = _i8.value; - } - - var node = _ref8; - node.parent = undefined; - }this.nodes = []; - return this; - }; - - /** - * Passes all declaration values within the container that match pattern - * through callback, replacing those values with the returned result - * of callback. - * - * This method is useful if you are using a custom unit or function - * and need to iterate through all values. - * - * @param {string|RegExp} pattern - replace pattern - * @param {object} opts - options to speed up the search - * @param {string|string[]} opts.props - an array of property names - * @param {string} opts.fast - string that’s used - * to narrow down values and speed up - the regexp search - * @param {function|string} callback - string to replace pattern - * or callback that returns a new - * value. - * The callback will receive - * the same arguments as those - * passed to a function parameter - * of `String#replace`. - * - * @return {Node} this node for methods chain - * - * @example - * root.replaceValues(/\d+rem/, { fast: 'rem' }, string => { - * return 15 * parseInt(string) + 'px'; - * }); - */ - - Container.prototype.replaceValues = function replaceValues(pattern, opts, callback) { - if (!callback) { - callback = opts; - opts = {}; - } - - this.walkDecls(function (decl) { - if (opts.props && opts.props.indexOf(decl.prop) === -1) return; - if (opts.fast && decl.value.indexOf(opts.fast) === -1) return; - - decl.value = decl.value.replace(pattern, callback); - }); - - return this; - }; - - /** - * Returns `true` if callback returns `true` - * for all of the container’s children. - * - * @param {childCondition} condition - iterator returns true or false. - * - * @return {boolean} is every child pass condition - * - * @example - * const noPrefixes = rule.every(i => i.prop[0] !== '-'); - */ - - Container.prototype.every = function every(condition) { - return this.nodes.every(condition); - }; - - /** - * Returns `true` if callback returns `true` for (at least) one - * of the container’s children. - * - * @param {childCondition} condition - iterator returns true or false. - * - * @return {boolean} is some child pass condition - * - * @example - * const hasPrefix = rule.some(i => i.prop[0] === '-'); - */ - - Container.prototype.some = function some(condition) { - return this.nodes.some(condition); - }; - - /** - * Returns a `child`’s index within the {@link Container#nodes} array. - * - * @param {Node} child - child of the current container. - * - * @return {number} child index - * - * @example - * rule.index( rule.nodes[2] ) //=> 2 - */ - - Container.prototype.index = function index(child) { - if (typeof child === 'number') { - return child; - } else { - return this.nodes.indexOf(child); - } - }; - - /** - * The container’s first child. - * - * @type {Node} - * - * @example - * rule.first == rules.nodes[0]; - */ - - Container.prototype.normalize = function normalize(nodes, sample) { - var _this2 = this; - - if (typeof nodes === 'string') { - var parse = $__require('./parse'); - nodes = cleanSource(parse(nodes).nodes); - } else if (Array.isArray(nodes)) { - nodes = nodes.slice(0); - for (var _iterator9 = nodes, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) { - var _ref9; - - if (_isArray9) { - if (_i9 >= _iterator9.length) break; - _ref9 = _iterator9[_i9++]; - } else { - _i9 = _iterator9.next(); - if (_i9.done) break; - _ref9 = _i9.value; - } - - var i = _ref9; - - if (i.parent) i.parent.removeChild(i, 'ignore'); - } - } else if (nodes.type === 'root') { - nodes = nodes.nodes.slice(0); - for (var _iterator10 = nodes, _isArray10 = Array.isArray(_iterator10), _i11 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) { - var _ref10; - - if (_isArray10) { - if (_i11 >= _iterator10.length) break; - _ref10 = _iterator10[_i11++]; - } else { - _i11 = _iterator10.next(); - if (_i11.done) break; - _ref10 = _i11.value; - } - - var _i10 = _ref10; - - if (_i10.parent) _i10.parent.removeChild(_i10, 'ignore'); - } - } else if (nodes.type) { - nodes = [nodes]; - } else if (nodes.prop) { - if (typeof nodes.value === 'undefined') { - throw new Error('Value field is missed in node creation'); - } else if (typeof nodes.value !== 'string') { - nodes.value = String(nodes.value); - } - nodes = [new _declaration2.default(nodes)]; - } else if (nodes.selector) { - var Rule = $__require('./rule'); - nodes = [new Rule(nodes)]; - } else if (nodes.name) { - var AtRule = $__require('./at-rule'); - nodes = [new AtRule(nodes)]; - } else if (nodes.text) { - nodes = [new _comment2.default(nodes)]; - } else { - throw new Error('Unknown node type in node creation'); - } - - var processed = nodes.map(function (i) { - if (typeof i.before !== 'function') i = _this2.rebuild(i); - - if (i.parent) i.parent.removeChild(i); - if (typeof i.raws.before === 'undefined') { - if (sample && typeof sample.raws.before !== 'undefined') { - i.raws.before = sample.raws.before.replace(/[^\s]/g, ''); - } - } - i.parent = _this2; - return i; - }); - - return processed; - }; - - Container.prototype.rebuild = function rebuild(node, parent) { - var _this3 = this; - - var fix = void 0; - if (node.type === 'root') { - var Root = $__require('./root'); - fix = new Root(); - } else if (node.type === 'atrule') { - var AtRule = $__require('./at-rule'); - fix = new AtRule(); - } else if (node.type === 'rule') { - var Rule = $__require('./rule'); - fix = new Rule(); - } else if (node.type === 'decl') { - fix = new _declaration2.default(); - } else if (node.type === 'comment') { - fix = new _comment2.default(); - } - - for (var i in node) { - if (i === 'nodes') { - fix.nodes = node.nodes.map(function (j) { - return _this3.rebuild(j, fix); - }); - } else if (i === 'parent' && parent) { - fix.parent = parent; - } else if (node.hasOwnProperty(i)) { - fix[i] = node[i]; - } - } - - return fix; - }; - - /** - * @memberof Container# - * @member {Node[]} nodes - an array containing the container’s children - * - * @example - * const root = postcss.parse('a { color: black }'); - * root.nodes.length //=> 1 - * root.nodes[0].selector //=> 'a' - * root.nodes[0].nodes[0].prop //=> 'color' - */ - - _createClass(Container, [{ - key: 'first', - get: function get() { - if (!this.nodes) return undefined; - return this.nodes[0]; - } - - /** - * The container’s last child. - * - * @type {Node} - * - * @example - * rule.last == rule.nodes[rule.nodes.length - 1]; - */ - - }, { - key: 'last', - get: function get() { - if (!this.nodes) return undefined; - return this.nodes[this.nodes.length - 1]; - } - }]); - - return Container; - }(_node2.default); - - exports.default = Container; - - /** - * @callback childCondition - * @param {Node} node - container child - * @param {number} index - child index - * @param {Node[]} nodes - all container children - * @return {boolean} - */ - - /** - * @callback childIterator - * @param {Node} node - container child - * @param {number} index - child index - * @return {false|undefined} returning `false` will break iteration - */ - - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/list.js', ['process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - /** - * Contains helpers for safely splitting lists of CSS values, - * preserving parentheses and quotes. - * - * @example - * const list = postcss.list; - * - * @namespace list - */ - var list = { - split: function split(string, separators, last) { - var array = []; - var current = ''; - var split = false; - - var func = 0; - var quote = false; - var escape = false; - - for (var i = 0; i < string.length; i++) { - var letter = string[i]; - - if (quote) { - if (escape) { - escape = false; - } else if (letter === '\\') { - escape = true; - } else if (letter === quote) { - quote = false; - } - } else if (letter === '"' || letter === '\'') { - quote = letter; - } else if (letter === '(') { - func += 1; - } else if (letter === ')') { - if (func > 0) func -= 1; - } else if (func === 0) { - if (separators.indexOf(letter) !== -1) split = true; - } - - if (split) { - if (current !== '') array.push(current.trim()); - current = ''; - split = false; - } else { - current += letter; - } - } - - if (last || current !== '') array.push(current.trim()); - return array; - }, - - /** - * Safely splits space-separated values (such as those for `background`, - * `border-radius`, and other shorthand properties). - * - * @param {string} string - space-separated values - * - * @return {string[]} split values - * - * @example - * postcss.list.space('1px calc(10% + 1px)') //=> ['1px', 'calc(10% + 1px)'] - */ - space: function space(string) { - var spaces = [' ', '\n', '\t']; - return list.split(string, spaces); - }, - - /** - * Safely splits comma-separated values (such as those for `transition-*` - * and `background` properties). - * - * @param {string} string - comma-separated values - * - * @return {string[]} split values - * - * @example - * postcss.list.comma('black, linear-gradient(white, black)') - * //=> ['black', 'linear-gradient(white, black)'] - */ - comma: function comma(string) { - var comma = ','; - return list.split(string, [comma], true); - } - }; - - exports.default = list; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/rule.js', ['./container', './list', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor); - } - }return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; - }; - }(); - - var _container = $__require('./container'); - - var _container2 = _interopRequireDefault(_container); - - var _list = $__require('./list'); - - var _list2 = _interopRequireDefault(_list); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _possibleConstructorReturn(self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - }return call && (typeof call === "object" || typeof call === "function") ? call : self; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - } - - /** - * Represents a CSS rule: a selector followed by a declaration block. - * - * @extends Container - * - * @example - * const root = postcss.parse('a{}'); - * const rule = root.first; - * rule.type //=> 'rule' - * rule.toString() //=> 'a{}' - */ - var Rule = function (_Container) { - _inherits(Rule, _Container); - - function Rule(defaults) { - _classCallCheck(this, Rule); - - var _this = _possibleConstructorReturn(this, _Container.call(this, defaults)); - - _this.type = 'rule'; - if (!_this.nodes) _this.nodes = []; - return _this; - } - - /** - * An array containing the rule’s individual selectors. - * Groups of selectors are split at commas. - * - * @type {string[]} - * - * @example - * const root = postcss.parse('a, b { }'); - * const rule = root.first; - * - * rule.selector //=> 'a, b' - * rule.selectors //=> ['a', 'b'] - * - * rule.selectors = ['a', 'strong']; - * rule.selector //=> 'a, strong' - */ - - _createClass(Rule, [{ - key: 'selectors', - get: function get() { - return _list2.default.comma(this.selector); - }, - set: function set(values) { - var match = this.selector ? this.selector.match(/,\s*/) : null; - var sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen'); - this.selector = values.join(sep); - } - - /** - * @memberof Rule# - * @member {string} selector - the rule’s full selector represented - * as a string - * - * @example - * const root = postcss.parse('a, b { }'); - * const rule = root.first; - * rule.selector //=> 'a, b' - */ - - /** - * @memberof Rule# - * @member {object} raws - Information to generate byte-to-byte equal - * node string as it was in the origin input. - * - * Every parser saves its own properties, - * but the default CSS parser uses: - * - * * `before`: the space symbols before the node. It also stores `*` - * and `_` symbols before the declaration (IE hack). - * * `after`: the space symbols after the last child of the node - * to the end of the node. - * * `between`: the symbols between the property and value - * for declarations, selector and `{` for rules, or last parameter - * and `{` for at-rules. - * * `semicolon`: contains `true` if the last child has - * an (optional) semicolon. - * * `ownSemicolon`: contains `true` if there is semicolon after rule. - * - * PostCSS cleans selectors from comments and extra spaces, - * but it stores origin content in raws properties. - * As such, if you don’t change a declaration’s value, - * PostCSS will use the raw value with comments. - * - * @example - * const root = postcss.parse('a {\n color:black\n}') - * root.first.first.raws //=> { before: '', between: ' ', after: '\n' } - */ - - }]); - - return Rule; - }(_container2.default); - - exports.default = Rule; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/parser.js', ['./declaration', './tokenize', './comment', './at-rule', './root', './rule', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _declaration = $__require('./declaration'); - - var _declaration2 = _interopRequireDefault(_declaration); - - var _tokenize = $__require('./tokenize'); - - var _tokenize2 = _interopRequireDefault(_tokenize); - - var _comment = $__require('./comment'); - - var _comment2 = _interopRequireDefault(_comment); - - var _atRule = $__require('./at-rule'); - - var _atRule2 = _interopRequireDefault(_atRule); - - var _root = $__require('./root'); - - var _root2 = _interopRequireDefault(_root); - - var _rule = $__require('./rule'); - - var _rule2 = _interopRequireDefault(_rule); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var Parser = function () { - function Parser(input) { - _classCallCheck(this, Parser); - - this.input = input; - - this.root = new _root2.default(); - this.current = this.root; - this.spaces = ''; - this.semicolon = false; - - this.createTokenizer(); - this.root.source = { input: input, start: { line: 1, column: 1 } }; - } - - Parser.prototype.createTokenizer = function createTokenizer() { - this.tokenizer = (0, _tokenize2.default)(this.input); - }; - - Parser.prototype.parse = function parse() { - var token = void 0; - while (!this.tokenizer.endOfFile()) { - token = this.tokenizer.nextToken(); - - switch (token[0]) { - - case 'space': - this.spaces += token[1]; - break; - - case ';': - this.freeSemicolon(token); - break; - - case '}': - this.end(token); - break; - - case 'comment': - this.comment(token); - break; - - case 'at-word': - this.atrule(token); - break; - - case '{': - this.emptyRule(token); - break; - - default: - this.other(token); - break; - } - } - this.endFile(); - }; - - Parser.prototype.comment = function comment(token) { - var node = new _comment2.default(); - this.init(node, token[2], token[3]); - node.source.end = { line: token[4], column: token[5] }; - - var text = token[1].slice(2, -2); - if (/^\s*$/.test(text)) { - node.text = ''; - node.raws.left = text; - node.raws.right = ''; - } else { - var match = text.match(/^(\s*)([^]*[^\s])(\s*)$/); - node.text = match[2]; - node.raws.left = match[1]; - node.raws.right = match[3]; - } - }; - - Parser.prototype.emptyRule = function emptyRule(token) { - var node = new _rule2.default(); - this.init(node, token[2], token[3]); - node.selector = ''; - node.raws.between = ''; - this.current = node; - }; - - Parser.prototype.other = function other(start) { - var end = false; - var type = null; - var colon = false; - var bracket = null; - var brackets = []; - - var tokens = []; - var token = start; - while (token) { - type = token[0]; - tokens.push(token); - - if (type === '(' || type === '[') { - if (!bracket) bracket = token; - brackets.push(type === '(' ? ')' : ']'); - } else if (brackets.length === 0) { - if (type === ';') { - if (colon) { - this.decl(tokens); - return; - } else { - break; - } - } else if (type === '{') { - this.rule(tokens); - return; - } else if (type === '}') { - this.tokenizer.back(tokens.pop()); - end = true; - break; - } else if (type === ':') { - colon = true; - } - } else if (type === brackets[brackets.length - 1]) { - brackets.pop(); - if (brackets.length === 0) bracket = null; - } - - token = this.tokenizer.nextToken(); - } - - if (this.tokenizer.endOfFile()) end = true; - if (brackets.length > 0) this.unclosedBracket(bracket); - - if (end && colon) { - while (tokens.length) { - token = tokens[tokens.length - 1][0]; - if (token !== 'space' && token !== 'comment') break; - this.tokenizer.back(tokens.pop()); - } - this.decl(tokens); - return; - } else { - this.unknownWord(tokens); - } - }; - - Parser.prototype.rule = function rule(tokens) { - tokens.pop(); - - var node = new _rule2.default(); - this.init(node, tokens[0][2], tokens[0][3]); - - node.raws.between = this.spacesAndCommentsFromEnd(tokens); - this.raw(node, 'selector', tokens); - this.current = node; - }; - - Parser.prototype.decl = function decl(tokens) { - var node = new _declaration2.default(); - this.init(node); - - var last = tokens[tokens.length - 1]; - if (last[0] === ';') { - this.semicolon = true; - tokens.pop(); - } - if (last[4]) { - node.source.end = { line: last[4], column: last[5] }; - } else { - node.source.end = { line: last[2], column: last[3] }; - } - - while (tokens[0][0] !== 'word') { - if (tokens.length === 1) this.unknownWord(tokens); - node.raws.before += tokens.shift()[1]; - } - node.source.start = { line: tokens[0][2], column: tokens[0][3] }; - - node.prop = ''; - while (tokens.length) { - var type = tokens[0][0]; - if (type === ':' || type === 'space' || type === 'comment') { - break; - } - node.prop += tokens.shift()[1]; - } - - node.raws.between = ''; - - var token = void 0; - while (tokens.length) { - token = tokens.shift(); - - if (token[0] === ':') { - node.raws.between += token[1]; - break; - } else { - node.raws.between += token[1]; - } - } - - if (node.prop[0] === '_' || node.prop[0] === '*') { - node.raws.before += node.prop[0]; - node.prop = node.prop.slice(1); - } - node.raws.between += this.spacesAndCommentsFromStart(tokens); - this.precheckMissedSemicolon(tokens); - - for (var i = tokens.length - 1; i > 0; i--) { - token = tokens[i]; - if (token[1] === '!important') { - node.important = true; - var string = this.stringFrom(tokens, i); - string = this.spacesFromEnd(tokens) + string; - if (string !== ' !important') node.raws.important = string; - break; - } else if (token[1] === 'important') { - var cache = tokens.slice(0); - var str = ''; - for (var j = i; j > 0; j--) { - var _type = cache[j][0]; - if (str.trim().indexOf('!') === 0 && _type !== 'space') { - break; - } - str = cache.pop()[1] + str; - } - if (str.trim().indexOf('!') === 0) { - node.important = true; - node.raws.important = str; - tokens = cache; - } - } - - if (token[0] !== 'space' && token[0] !== 'comment') { - break; - } - } - - this.raw(node, 'value', tokens); - - if (node.value.indexOf(':') !== -1) this.checkMissedSemicolon(tokens); - }; - - Parser.prototype.atrule = function atrule(token) { - var node = new _atRule2.default(); - node.name = token[1].slice(1); - if (node.name === '') { - this.unnamedAtrule(node, token); - } - this.init(node, token[2], token[3]); - - var prev = void 0; - var shift = void 0; - var last = false; - var open = false; - var params = []; - - while (!this.tokenizer.endOfFile()) { - token = this.tokenizer.nextToken(); - - if (token[0] === ';') { - node.source.end = { line: token[2], column: token[3] }; - this.semicolon = true; - break; - } else if (token[0] === '{') { - open = true; - break; - } else if (token[0] === '}') { - if (params.length > 0) { - shift = params.length - 1; - prev = params[shift]; - while (prev && prev[0] === 'space') { - prev = params[--shift]; - } - if (prev) { - node.source.end = { line: prev[4], column: prev[5] }; - } - } - this.end(token); - break; - } else { - params.push(token); - } - - if (this.tokenizer.endOfFile()) { - last = true; - break; - } - } - - node.raws.between = this.spacesAndCommentsFromEnd(params); - if (params.length) { - node.raws.afterName = this.spacesAndCommentsFromStart(params); - this.raw(node, 'params', params); - if (last) { - token = params[params.length - 1]; - node.source.end = { line: token[4], column: token[5] }; - this.spaces = node.raws.between; - node.raws.between = ''; - } - } else { - node.raws.afterName = ''; - node.params = ''; - } - - if (open) { - node.nodes = []; - this.current = node; - } - }; - - Parser.prototype.end = function end(token) { - if (this.current.nodes && this.current.nodes.length) { - this.current.raws.semicolon = this.semicolon; - } - this.semicolon = false; - - this.current.raws.after = (this.current.raws.after || '') + this.spaces; - this.spaces = ''; - - if (this.current.parent) { - this.current.source.end = { line: token[2], column: token[3] }; - this.current = this.current.parent; - } else { - this.unexpectedClose(token); - } - }; - - Parser.prototype.endFile = function endFile() { - if (this.current.parent) this.unclosedBlock(); - if (this.current.nodes && this.current.nodes.length) { - this.current.raws.semicolon = this.semicolon; - } - this.current.raws.after = (this.current.raws.after || '') + this.spaces; - }; - - Parser.prototype.freeSemicolon = function freeSemicolon(token) { - this.spaces += token[1]; - if (this.current.nodes) { - var prev = this.current.nodes[this.current.nodes.length - 1]; - if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) { - prev.raws.ownSemicolon = this.spaces; - this.spaces = ''; - } - } - }; - - // Helpers - - Parser.prototype.init = function init(node, line, column) { - this.current.push(node); - - node.source = { start: { line: line, column: column }, input: this.input }; - node.raws.before = this.spaces; - this.spaces = ''; - if (node.type !== 'comment') this.semicolon = false; - }; - - Parser.prototype.raw = function raw(node, prop, tokens) { - var token = void 0, - type = void 0; - var length = tokens.length; - var value = ''; - var clean = true; - for (var i = 0; i < length; i += 1) { - token = tokens[i]; - type = token[0]; - if (type === 'comment' || type === 'space' && i === length - 1) { - clean = false; - } else { - value += token[1]; - } - } - if (!clean) { - var raw = tokens.reduce(function (all, i) { - return all + i[1]; - }, ''); - node.raws[prop] = { value: value, raw: raw }; - } - node[prop] = value; - }; - - Parser.prototype.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) { - var lastTokenType = void 0; - var spaces = ''; - while (tokens.length) { - lastTokenType = tokens[tokens.length - 1][0]; - if (lastTokenType !== 'space' && lastTokenType !== 'comment') break; - spaces = tokens.pop()[1] + spaces; - } - return spaces; - }; - - Parser.prototype.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) { - var next = void 0; - var spaces = ''; - while (tokens.length) { - next = tokens[0][0]; - if (next !== 'space' && next !== 'comment') break; - spaces += tokens.shift()[1]; - } - return spaces; - }; - - Parser.prototype.spacesFromEnd = function spacesFromEnd(tokens) { - var lastTokenType = void 0; - var spaces = ''; - while (tokens.length) { - lastTokenType = tokens[tokens.length - 1][0]; - if (lastTokenType !== 'space') break; - spaces = tokens.pop()[1] + spaces; - } - return spaces; - }; - - Parser.prototype.stringFrom = function stringFrom(tokens, from) { - var result = ''; - for (var i = from; i < tokens.length; i++) { - result += tokens[i][1]; - } - tokens.splice(from, tokens.length - from); - return result; - }; - - Parser.prototype.colon = function colon(tokens) { - var brackets = 0; - var token = void 0, - type = void 0, - prev = void 0; - for (var i = 0; i < tokens.length; i++) { - token = tokens[i]; - type = token[0]; - - if (type === '(') { - brackets += 1; - } else if (type === ')') { - brackets -= 1; - } else if (brackets === 0 && type === ':') { - if (!prev) { - this.doubleColon(token); - } else if (prev[0] === 'word' && prev[1] === 'progid') { - continue; - } else { - return i; - } - } - - prev = token; - } - return false; - }; - - // Errors - - Parser.prototype.unclosedBracket = function unclosedBracket(bracket) { - throw this.input.error('Unclosed bracket', bracket[2], bracket[3]); - }; - - Parser.prototype.unknownWord = function unknownWord(tokens) { - throw this.input.error('Unknown word', tokens[0][2], tokens[0][3]); - }; - - Parser.prototype.unexpectedClose = function unexpectedClose(token) { - throw this.input.error('Unexpected }', token[2], token[3]); - }; - - Parser.prototype.unclosedBlock = function unclosedBlock() { - var pos = this.current.source.start; - throw this.input.error('Unclosed block', pos.line, pos.column); - }; - - Parser.prototype.doubleColon = function doubleColon(token) { - throw this.input.error('Double colon', token[2], token[3]); - }; - - Parser.prototype.unnamedAtrule = function unnamedAtrule(node, token) { - throw this.input.error('At-rule without name', token[2], token[3]); - }; - - Parser.prototype.precheckMissedSemicolon = function precheckMissedSemicolon(tokens) { - // Hook for Safe Parser - tokens; - }; - - Parser.prototype.checkMissedSemicolon = function checkMissedSemicolon(tokens) { - var colon = this.colon(tokens); - if (colon === false) return; - - var founded = 0; - var token = void 0; - for (var j = colon - 1; j >= 0; j--) { - token = tokens[j]; - if (token[0] !== 'space') { - founded += 1; - if (founded === 2) break; - } - } - throw this.input.error('Missed semicolon', token[2], token[3]); - }; - - return Parser; - }(); - - exports.default = Parser; - module.exports = exports['default']; -}); -System.registerDynamic("npm:color-name@1.1.3.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic("npm:color-name@1.1.3/index.js", [], true, function ($__require, exports, module) { - 'use strict'; - - var global = this || self, - GLOBAL = global; - module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; -}); -System.registerDynamic('npm:color-convert@1.9.0/conversions.js', ['color-name'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* MIT license */ - var cssKeywords = $__require('color-name'); - - // NOTE: conversions should only return primitive values (i.e. arrays, or - // values that give correct `typeof` results). - // do not use box values types (i.e. Number(), String(), etc.) - - var reverseKeywords = {}; - for (var key in cssKeywords) { - if (cssKeywords.hasOwnProperty(key)) { - reverseKeywords[cssKeywords[key]] = key; - } - } - - var convert = module.exports = { - rgb: { channels: 3, labels: 'rgb' }, - hsl: { channels: 3, labels: 'hsl' }, - hsv: { channels: 3, labels: 'hsv' }, - hwb: { channels: 3, labels: 'hwb' }, - cmyk: { channels: 4, labels: 'cmyk' }, - xyz: { channels: 3, labels: 'xyz' }, - lab: { channels: 3, labels: 'lab' }, - lch: { channels: 3, labels: 'lch' }, - hex: { channels: 1, labels: ['hex'] }, - keyword: { channels: 1, labels: ['keyword'] }, - ansi16: { channels: 1, labels: ['ansi16'] }, - ansi256: { channels: 1, labels: ['ansi256'] }, - hcg: { channels: 3, labels: ['h', 'c', 'g'] }, - apple: { channels: 3, labels: ['r16', 'g16', 'b16'] }, - gray: { channels: 1, labels: ['gray'] } - }; - - // hide .channels and .labels properties - for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', { value: channels }); - Object.defineProperty(convert[model], 'labels', { value: labels }); - } - } - - convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; - }; - - convert.rgb.hsv = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var v; - - if (max === 0) { - s = 0; - } else { - s = delta / max * 1000 / 10; - } - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - v = max / 255 * 1000 / 10; - - return [h, s, v]; - }; - - convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; - }; - - convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; - }; - - /** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ - function comparativeDistance(x, y) { - return Math.pow(x[0] - y[0], 2) + Math.pow(x[1] - y[1], 2) + Math.pow(x[2] - y[2], 2); - } - - convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - var currentClosestDistance = Infinity; - var currentClosestKeyword; - - for (var keyword in cssKeywords) { - if (cssKeywords.hasOwnProperty(keyword)) { - var value = cssKeywords[keyword]; - - // Compute comparative distance - var distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } - - return currentClosestKeyword; - }; - - convert.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; - }; - - convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92; - g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92; - b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92; - - var x = r * 0.4124 + g * 0.3576 + b * 0.1805; - var y = r * 0.2126 + g * 0.7152 + b * 0.0722; - var z = r * 0.0193 + g * 0.1192 + b * 0.9505; - - return [x * 100, y * 100, z * 100]; - }; - - convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116; - y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116; - z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116; - - l = 116 * y - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; - }; - - convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - - l *= 2; - s *= l <= 1 ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s / (l + s); - - return [h, sv * 100, v * 100]; - }; - - convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - s * f); - var t = 255 * v * (1 - s * (1 - f)); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } - }; - - convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; - - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= lmin <= 1 ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; - }; - - // http://dev.w3.org/csswg/css-color/#hwb-to-rgb - convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - n = wh + f * (v - wh); // linear interpolation - - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: - r = v;g = n;b = wh;break; - case 1: - r = n;g = v;b = wh;break; - case 2: - r = wh;g = v;b = n;break; - case 3: - r = wh;g = n;b = v;break; - case 4: - r = n;g = wh;b = v;break; - case 5: - r = v;g = wh;b = n;break; - } - - return [r * 255, g * 255, b * 255]; - }; - - convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; - - r = x * 3.2406 + y * -1.5372 + z * -0.4986; - g = x * -0.9689 + y * 1.8758 + z * 0.0415; - b = x * 0.0557 + y * -0.2040 + z * 1.0570; - - // assume sRGB - r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r * 12.92; - - g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g * 12.92; - - b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116; - y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116; - z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116; - - l = 116 * y - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; - }; - - convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - c = Math.sqrt(a * a + b * b); - - return [l, c, h]; - }; - - convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - - return [l, a, b]; - }; - - convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; - }; - - convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); - }; - - convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round((r - 8) / 247 * 24) + 232; - } - - var ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5); - - return ansi; - }; - - convert.ansi16.rgb = function (args) { - var color = args % 10; - - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - var mult = (~~(args > 50) + 1) * 0.5; - var r = (color & 1) * mult * 255; - var g = (color >> 1 & 1) * mult * 255; - var b = (color >> 2 & 1) * mult * 255; - - return [r, g, b]; - }; - - convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = rem % 6 / 5 * 255; - - return [r, g, b]; - }; - - convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) + ((Math.round(args[1]) & 0xFF) << 8) + (Math.round(args[2]) & 0xFF); - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } - - var integer = parseInt(colorString, 16); - var r = integer >> 16 & 0xFF; - var g = integer >> 8 & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; - }; - - convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = max - min; - var grayscale; - var hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else if (max === r) { - hue = (g - b) / chroma % 6; - } else if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; - }; - - convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } - - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; - }; - - convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; - - var c = s * v; - var f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; - }; - - convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - var pure = [0, 0, 0]; - var hi = h % 1 * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; - - switch (Math.floor(hi)) { - case 0: - pure[0] = 1;pure[1] = v;pure[2] = 0;break; - case 1: - pure[0] = w;pure[1] = 1;pure[2] = 0;break; - case 2: - pure[0] = 0;pure[1] = 1;pure[2] = v;break; - case 3: - pure[0] = 0;pure[1] = w;pure[2] = 1;break; - case 4: - pure[0] = v;pure[1] = 0;pure[2] = 1;break; - default: - pure[0] = 1;pure[1] = 0;pure[2] = w; - } - - mg = (1.0 - c) * g; - - return [(c * pure[0] + mg) * 255, (c * pure[1] + mg) * 255, (c * pure[2] + mg) * 255]; - }; - - convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var v = c + g * (1.0 - c); - var f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; - }; - - convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; - }; - - convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; - }; - - convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; - }; - - convert.apple.rgb = function (apple) { - return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255]; - }; - - convert.rgb.apple = function (rgb) { - return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535]; - }; - - convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; - }; - - convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; - }; - - convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; - }; - - convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; - }; - - convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; - }; - - convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; - }; -}); -System.registerDynamic('npm:color-convert@1.9.0/route.js', ['./conversions'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - var conversions = $__require('./conversions'); - - /* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. - */ - - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); - - function buildGraph() { - var graph = {}; - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; - } - - // https://en.wikipedia.org/wiki/Breadth-first_search - function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; - } - - function link(from, to) { - return function (args) { - return to(from(args)); - }; - } - - function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; - } - - module.exports = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; - - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; - }; -}); -System.registerDynamic("npm:color-convert@1.9.0.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:color-convert@1.9.0/index.js', ['./conversions', './route'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - var conversions = $__require('./conversions'); - var route = $__require('./route'); - - var convert = {}; - - var models = Object.keys(conversions); - - function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - models.forEach(function (fromModel) { - convert[fromModel] = {}; - - Object.defineProperty(convert[fromModel], 'channels', { value: conversions[fromModel].channels }); - Object.defineProperty(convert[fromModel], 'labels', { value: conversions[fromModel].labels }); - - var routes = route(fromModel); - var routeModels = Object.keys(routes); - - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; - - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); - }); - - module.exports = convert; -}); -System.registerDynamic("npm:ansi-styles@3.2.0.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:ansi-styles@3.2.0/index.js', ['color-convert'], true, function ($__require, exports, module) { - 'use strict'; - - var global = this || self, - GLOBAL = global; - const colorConvert = $__require('color-convert'); - - const wrapAnsi16 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${code + offset}m`; - }; - - const wrapAnsi256 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};5;${code}m`; - }; - - const wrapAnsi16m = (fn, offset) => function () { - const rgb = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; - }; - - function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - gray: [90, 39], - - // Bright color - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; - - // Fix humans - styles.color.grey = styles.color.gray; - - for (const groupName of Object.keys(styles)) { - const group = styles[groupName]; - - for (const styleName of Object.keys(group)) { - const style = group[styleName]; - - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); - } - - const rgb2rgb = (r, g, b) => [r, g, b]; - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - styles.color.ansi = {}; - styles.color.ansi256 = {}; - styles.color.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 0) - }; - - styles.bgColor.ansi = {}; - styles.bgColor.ansi256 = {}; - styles.bgColor.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 10) - }; - - for (const key of Object.keys(colorConvert)) { - if (typeof colorConvert[key] !== 'object') { - continue; - } - - const suite = colorConvert[key]; - - if ('ansi16' in suite) { - styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); - styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); - } - - if ('ansi256' in suite) { - styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); - styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); - } - - if ('rgb' in suite) { - styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); - styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); - } - } - - return styles; - } - - // Make the export immutable - Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles - }); -}); -System.registerDynamic("npm:supports-color@4.2.1.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*": { - "globals": { - "process": "process" - } - }, - "*.json": { - "format": "json" - } - }, - "map": { - "./index.js": { - "browser": "./browser.js" - } - } - }; -}); - -System.registerDynamic('npm:supports-color@4.2.1/browser.js', ['process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - module.exports = false; -}); -System.registerDynamic('npm:chalk@2.1.0/templates.js', ['process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - const TEMPLATE_REGEX = /(?:\\(u[a-f0-9]{4}|x[a-f0-9]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; - const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; - const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; - const ESCAPE_REGEX = /\\(u[0-9a-f]{4}|x[0-9a-f]{2}|.)|([^\\])/gi; - - const ESCAPES = { - n: '\n', - r: '\r', - t: '\t', - b: '\b', - f: '\f', - v: '\v', - 0: '\0', - '\\': '\\', - e: '\u001b', - a: '\u0007' - }; - - function unescape(c) { - if (c[0] === 'u' && c.length === 5 || c[0] === 'x' && c.length === 3) { - return String.fromCharCode(parseInt(c.slice(1), 16)); - } - - return ESCAPES[c] || c; - } - - function parseArguments(name, args) { - const results = []; - const chunks = args.trim().split(/\s*,\s*/g); - let matches; - - for (const chunk of chunks) { - if (!isNaN(chunk)) { - results.push(Number(chunk)); - } else if (matches = chunk.match(STRING_REGEX)) { - results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr)); - } else { - throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); - } - } - - return results; - } - - function parseStyle(style) { - STYLE_REGEX.lastIndex = 0; - - const results = []; - let matches; - - while ((matches = STYLE_REGEX.exec(style)) !== null) { - const name = matches[1]; - - if (matches[2]) { - const args = parseArguments(name, matches[2]); - results.push([name].concat(args)); - } else { - results.push([name]); - } - } - - return results; - } - - function buildStyle(chalk, styles) { - const enabled = {}; - - for (const layer of styles) { - for (const style of layer.styles) { - enabled[style[0]] = layer.inverse ? null : style.slice(1); - } - } - - let current = chalk; - for (const styleName of Object.keys(enabled)) { - if (Array.isArray(enabled[styleName])) { - if (!(styleName in current)) { - throw new Error(`Unknown Chalk style: ${styleName}`); - } - - if (enabled[styleName].length > 0) { - current = current[styleName].apply(current, enabled[styleName]); - } else { - current = current[styleName]; - } - } - } - - return current; - } - - module.exports = (chalk, tmp) => { - const styles = []; - const chunks = []; - let chunk = []; - - // eslint-disable-next-line max-params - tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => { - if (escapeChar) { - chunk.push(unescape(escapeChar)); - } else if (style) { - const str = chunk.join(''); - chunk = []; - chunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str)); - styles.push({ inverse, styles: parseStyle(style) }); - } else if (close) { - if (styles.length === 0) { - throw new Error('Found extraneous } in Chalk template literal'); - } - - chunks.push(buildStyle(chalk, styles)(chunk.join(''))); - chunk = []; - styles.pop(); - } else { - chunk.push(chr); - } - }); - - chunks.push(chunk.join('')); - - if (styles.length > 0) { - const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; - throw new Error(errMsg); - } - - return chunks.join(''); - }; -}); -System.registerDynamic("npm:chalk@2.1.0.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*": { - "globals": { - "process": "process" - } - }, - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:chalk@2.1.0/index.js', ['escape-string-regexp', 'ansi-styles', 'supports-color', './templates.js', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - const escapeStringRegexp = $__require('escape-string-regexp'); - const ansiStyles = $__require('ansi-styles'); - const supportsColor = $__require('supports-color'); - - const template = $__require('./templates.js'); - - const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); - - // `supportsColor.level` → `ansiStyles.color[name]` mapping - const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; - - // `color-convert` models to exclude from the Chalk API due to conflicts and such - const skipModels = new Set(['gray']); - - const styles = Object.create(null); - - function applyOptions(obj, options) { - options = options || {}; - - // Detect level if not set manually - const scLevel = supportsColor ? supportsColor.level : 0; - obj.level = options.level === undefined ? scLevel : options.level; - obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; - } - - function Chalk(options) { - // We check for this.template here since calling `chalk.constructor()` - // by itself will have a `this` of a previously constructed chalk object - if (!this || !(this instanceof Chalk) || this.template) { - const chalk = {}; - applyOptions(chalk, options); - - chalk.template = function () { - const args = [].slice.call(arguments); - return chalkTag.apply(null, [chalk.template].concat(args)); - }; - - Object.setPrototypeOf(chalk, Chalk.prototype); - Object.setPrototypeOf(chalk.template, chalk); - - chalk.template.constructor = Chalk; - - return chalk.template; - } - - applyOptions(this, options); - } - - // Use bright blue on Windows as the normal blue color is illegible - if (isSimpleWindowsTerm) { - ansiStyles.blue.open = '\u001B[94m'; - } - - for (const key of Object.keys(ansiStyles)) { - ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); - - styles[key] = { - get() { - const codes = ansiStyles[key]; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], key); - } - }; - } - - ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); - for (const model of Object.keys(ansiStyles.color.ansi)) { - if (skipModels.has(model)) { - continue; - } - - styles[model] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.color.close, - closeRe: ansiStyles.color.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], model); - }; - } - }; - } - - ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); - for (const model of Object.keys(ansiStyles.bgColor.ansi)) { - if (skipModels.has(model)) { - continue; - } - - const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); - styles[bgModel] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.bgColor.close, - closeRe: ansiStyles.bgColor.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], model); - }; - } - }; - } - - const proto = Object.defineProperties(() => {}, styles); - - function build(_styles, key) { - const builder = function () { - return applyStyle.apply(builder, arguments); - }; - - builder._styles = _styles; - - const self = this; - - Object.defineProperty(builder, 'level', { - enumerable: true, - get() { - return self.level; - }, - set(level) { - self.level = level; - } - }); - - Object.defineProperty(builder, 'enabled', { - enumerable: true, - get() { - return self.enabled; - }, - set(enabled) { - self.enabled = enabled; - } - }); - - // See below for fix regarding invisible grey/dim combination on Windows - builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; - - // `__proto__` is used because we must return a function, but there is - // no way to create a function with a different prototype - builder.__proto__ = proto; // eslint-disable-line no-proto - - return builder; - } - - function applyStyle() { - // Support varags, but simply cast to string in case there's only one arg - const args = arguments; - const argsLen = args.length; - let str = String(arguments[0]); - - if (argsLen === 0) { - return ''; - } - - if (argsLen > 1) { - // Don't slice `arguments`, it prevents V8 optimizations - for (let a = 1; a < argsLen; a++) { - str += ' ' + args[a]; - } - } - - if (!this.enabled || this.level <= 0 || !str) { - return str; - } - - // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, - // see https://github.com/chalk/chalk/issues/58 - // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. - const originalDim = ansiStyles.dim.open; - if (isSimpleWindowsTerm && this.hasGrey) { - ansiStyles.dim.open = ''; - } - - for (const code of this._styles.slice().reverse()) { - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - str = code.open + str.replace(code.closeRe, code.open) + code.close; - - // Close the styling before a linebreak and reopen - // after next line to fix a bleed issue on macOS - // https://github.com/chalk/chalk/pull/92 - str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); - } - - // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue - ansiStyles.dim.open = originalDim; - - return str; - } - - function chalkTag(chalk, strings) { - if (!Array.isArray(strings)) { - // If chalk() was called by itself or with a string, - // return the string itself as a string. - return [].slice.call(arguments, 1).join(' '); - } - - const args = [].slice.call(arguments, 2); - const parts = [strings.raw[0]]; - - for (let i = 1; i < strings.length; i++) { - parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); - parts.push(String(strings.raw[i])); - } - - return template(chalk, parts.join('')); - } - - Object.defineProperties(Chalk.prototype, styles); - - module.exports = Chalk(); // eslint-disable-line new-cap - module.exports.supportsColor = supportsColor; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/tokenize.js', ['process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - exports.default = tokenizer; - var SINGLE_QUOTE = 39; - var DOUBLE_QUOTE = 34; - var BACKSLASH = 92; - var SLASH = 47; - var NEWLINE = 10; - var SPACE = 32; - var FEED = 12; - var TAB = 9; - var CR = 13; - var OPEN_SQUARE = 91; - var CLOSE_SQUARE = 93; - var OPEN_PARENTHESES = 40; - var CLOSE_PARENTHESES = 41; - var OPEN_CURLY = 123; - var CLOSE_CURLY = 125; - var SEMICOLON = 59; - var ASTERISK = 42; - var COLON = 58; - var AT = 64; - - var RE_AT_END = /[ \n\t\r\f\{\(\)'"\\;/\[\]#]/g; - var RE_WORD_END = /[ \n\t\r\f\(\)\{\}:;@!'"\\\]\[#]|\/(?=\*)/g; - var RE_BAD_BRACKET = /.[\\\/\("'\n]/; - var RE_HEX_ESCAPE = /[a-f0-9]/i; - - function tokenizer(input) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var css = input.css.valueOf(); - var ignore = options.ignoreErrors; - - var code = void 0, - next = void 0, - quote = void 0, - lines = void 0, - last = void 0, - content = void 0, - escape = void 0, - nextLine = void 0, - nextOffset = void 0, - escaped = void 0, - escapePos = void 0, - prev = void 0, - n = void 0, - currentToken = void 0; - - var length = css.length; - var offset = -1; - var line = 1; - var pos = 0; - var buffer = []; - var returned = []; - - function unclosed(what) { - throw input.error('Unclosed ' + what, line, pos - offset); - } - - function endOfFile() { - return returned.length === 0 && pos >= length; - } - - function nextToken() { - if (returned.length) return returned.pop(); - if (pos >= length) return; - - code = css.charCodeAt(pos); - if (code === NEWLINE || code === FEED || code === CR && css.charCodeAt(pos + 1) !== NEWLINE) { - offset = pos; - line += 1; - } - - switch (code) { - case NEWLINE: - case SPACE: - case TAB: - case CR: - case FEED: - next = pos; - do { - next += 1; - code = css.charCodeAt(next); - if (code === NEWLINE) { - offset = next; - line += 1; - } - } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED); - - currentToken = ['space', css.slice(pos, next)]; - pos = next - 1; - break; - - case OPEN_SQUARE: - currentToken = ['[', '[', line, pos - offset]; - break; - - case CLOSE_SQUARE: - currentToken = [']', ']', line, pos - offset]; - break; - - case OPEN_CURLY: - currentToken = ['{', '{', line, pos - offset]; - break; - - case CLOSE_CURLY: - currentToken = ['}', '}', line, pos - offset]; - break; - - case COLON: - currentToken = [':', ':', line, pos - offset]; - break; - - case SEMICOLON: - currentToken = [';', ';', line, pos - offset]; - break; - - case OPEN_PARENTHESES: - prev = buffer.length ? buffer.pop()[1] : ''; - n = css.charCodeAt(pos + 1); - if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) { - next = pos; - do { - escaped = false; - next = css.indexOf(')', next + 1); - if (next === -1) { - if (ignore) { - next = pos; - break; - } else { - unclosed('bracket'); - } - } - escapePos = next; - while (css.charCodeAt(escapePos - 1) === BACKSLASH) { - escapePos -= 1; - escaped = !escaped; - } - } while (escaped); - - currentToken = ['brackets', css.slice(pos, next + 1), line, pos - offset, line, next - offset]; - - pos = next; - } else { - next = css.indexOf(')', pos + 1); - content = css.slice(pos, next + 1); - - if (next === -1 || RE_BAD_BRACKET.test(content)) { - currentToken = ['(', '(', line, pos - offset]; - } else { - currentToken = ['brackets', content, line, pos - offset, line, next - offset]; - pos = next; - } - } - - break; - - case CLOSE_PARENTHESES: - currentToken = [')', ')', line, pos - offset]; - break; - - case SINGLE_QUOTE: - case DOUBLE_QUOTE: - quote = code === SINGLE_QUOTE ? '\'' : '"'; - next = pos; - do { - escaped = false; - next = css.indexOf(quote, next + 1); - if (next === -1) { - if (ignore) { - next = pos + 1; - break; - } else { - unclosed('string'); - } - } - escapePos = next; - while (css.charCodeAt(escapePos - 1) === BACKSLASH) { - escapePos -= 1; - escaped = !escaped; - } - } while (escaped); - - content = css.slice(pos, next + 1); - lines = content.split('\n'); - last = lines.length - 1; - - if (last > 0) { - nextLine = line + last; - nextOffset = next - lines[last].length; - } else { - nextLine = line; - nextOffset = offset; - } - - currentToken = ['string', css.slice(pos, next + 1), line, pos - offset, nextLine, next - nextOffset]; - - offset = nextOffset; - line = nextLine; - pos = next; - break; - - case AT: - RE_AT_END.lastIndex = pos + 1; - RE_AT_END.test(css); - if (RE_AT_END.lastIndex === 0) { - next = css.length - 1; - } else { - next = RE_AT_END.lastIndex - 2; - } - - currentToken = ['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]; - - pos = next; - break; - - case BACKSLASH: - next = pos; - escape = true; - while (css.charCodeAt(next + 1) === BACKSLASH) { - next += 1; - escape = !escape; - } - code = css.charCodeAt(next + 1); - if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) { - next += 1; - if (RE_HEX_ESCAPE.test(css.charAt(next))) { - while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) { - next += 1; - } - if (css.charCodeAt(next + 1) === SPACE) { - next += 1; - } - } - } - - currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]; - - pos = next; - break; - - default: - if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) { - next = css.indexOf('*/', pos + 2) + 1; - if (next === 0) { - if (ignore) { - next = css.length; - } else { - unclosed('comment'); - } - } - - content = css.slice(pos, next + 1); - lines = content.split('\n'); - last = lines.length - 1; - - if (last > 0) { - nextLine = line + last; - nextOffset = next - lines[last].length; - } else { - nextLine = line; - nextOffset = offset; - } - - currentToken = ['comment', content, line, pos - offset, nextLine, next - nextOffset]; - - offset = nextOffset; - line = nextLine; - pos = next; - } else { - RE_WORD_END.lastIndex = pos + 1; - RE_WORD_END.test(css); - if (RE_WORD_END.lastIndex === 0) { - next = css.length - 1; - } else { - next = RE_WORD_END.lastIndex - 2; - } - - currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]; - - buffer.push(currentToken); - - pos = next; - } - - break; - } - - pos++; - return currentToken; - } - - function back(token) { - returned.push(token); - } - - return { - back: back, - nextToken: nextToken, - endOfFile: endOfFile - }; - } - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/terminal-highlight.js', ['chalk', './tokenize', './input', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _chalk = $__require('chalk'); - - var _chalk2 = _interopRequireDefault(_chalk); - - var _tokenize = $__require('./tokenize'); - - var _tokenize2 = _interopRequireDefault(_tokenize); - - var _input = $__require('./input'); - - var _input2 = _interopRequireDefault(_input); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - var HIGHLIGHT_THEME = { - 'brackets': _chalk2.default.cyan, - 'at-word': _chalk2.default.cyan, - 'call': _chalk2.default.cyan, - 'comment': _chalk2.default.gray, - 'string': _chalk2.default.green, - 'class': _chalk2.default.yellow, - 'hash': _chalk2.default.magenta, - '(': _chalk2.default.cyan, - ')': _chalk2.default.cyan, - '{': _chalk2.default.yellow, - '}': _chalk2.default.yellow, - '[': _chalk2.default.yellow, - ']': _chalk2.default.yellow, - ':': _chalk2.default.yellow, - ';': _chalk2.default.yellow - }; - - function getTokenType(_ref, processor) { - var type = _ref[0], - value = _ref[1]; - - if (type === 'word') { - if (value[0] === '.') { - return 'class'; - } - if (value[0] === '#') { - return 'hash'; - } - } - - if (!processor.endOfFile()) { - var next = processor.nextToken(); - processor.back(next); - if (next[0] === 'brackets' || next[0] === '(') return 'call'; - } - - return type; - } - - function terminalHighlight(css) { - var processor = (0, _tokenize2.default)(new _input2.default(css), { ignoreErrors: true }); - var result = ''; - - var _loop = function _loop() { - var token = processor.nextToken(); - var color = HIGHLIGHT_THEME[getTokenType(token, processor)]; - if (color) { - result += token[1].split(/\r?\n/).map(function (i) { - return color(i); - }).join('\n'); - } else { - result += token[1]; - } - }; - - while (!processor.endOfFile()) { - _loop(); - } - return result; - } - - exports.default = terminalHighlight; - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/css-syntax-error.js', ['supports-color', 'chalk', './terminal-highlight', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _supportsColor = $__require('supports-color'); - - var _supportsColor2 = _interopRequireDefault(_supportsColor); - - var _chalk = $__require('chalk'); - - var _chalk2 = _interopRequireDefault(_chalk); - - var _terminalHighlight = $__require('./terminal-highlight'); - - var _terminalHighlight2 = _interopRequireDefault(_terminalHighlight); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - /** - * The CSS parser throws this error for broken CSS. - * - * Custom parsers can throw this error for broken custom syntax using - * the {@link Node#error} method. - * - * PostCSS will use the input source map to detect the original error location. - * If you wrote a Sass file, compiled it to CSS and then parsed it with PostCSS, - * PostCSS will show the original position in the Sass file. - * - * If you need the position in the PostCSS input - * (e.g., to debug the previous compiler), use `error.input.file`. - * - * @example - * // Catching and checking syntax error - * try { - * postcss.parse('a{') - * } catch (error) { - * if ( error.name === 'CssSyntaxError' ) { - * error //=> CssSyntaxError - * } - * } - * - * @example - * // Raising error from plugin - * throw node.error('Unknown variable', { plugin: 'postcss-vars' }); - */ - var CssSyntaxError = function () { - - /** - * @param {string} message - error message - * @param {number} [line] - source line of the error - * @param {number} [column] - source column of the error - * @param {string} [source] - source code of the broken file - * @param {string} [file] - absolute path to the broken file - * @param {string} [plugin] - PostCSS plugin name, if error came from plugin - */ - function CssSyntaxError(message, line, column, source, file, plugin) { - _classCallCheck(this, CssSyntaxError); - - /** - * @member {string} - Always equal to `'CssSyntaxError'`. You should - * always check error type - * by `error.name === 'CssSyntaxError'` instead of - * `error instanceof CssSyntaxError`, because - * npm could have several PostCSS versions. - * - * @example - * if ( error.name === 'CssSyntaxError' ) { - * error //=> CssSyntaxError - * } - */ - this.name = 'CssSyntaxError'; - /** - * @member {string} - Error message. - * - * @example - * error.message //=> 'Unclosed block' - */ - this.reason = message; - - if (file) { - /** - * @member {string} - Absolute path to the broken file. - * - * @example - * error.file //=> 'a.sass' - * error.input.file //=> 'a.css' - */ - this.file = file; - } - if (source) { - /** - * @member {string} - Source code of the broken file. - * - * @example - * error.source //=> 'a { b {} }' - * error.input.column //=> 'a b { }' - */ - this.source = source; - } - if (plugin) { - /** - * @member {string} - Plugin name, if error came from plugin. - * - * @example - * error.plugin //=> 'postcss-vars' - */ - this.plugin = plugin; - } - if (typeof line !== 'undefined' && typeof column !== 'undefined') { - /** - * @member {number} - Source line of the error. - * - * @example - * error.line //=> 2 - * error.input.line //=> 4 - */ - this.line = line; - /** - * @member {number} - Source column of the error. - * - * @example - * error.column //=> 1 - * error.input.column //=> 4 - */ - this.column = column; - } - - this.setMessage(); - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, CssSyntaxError); - } - } - - CssSyntaxError.prototype.setMessage = function setMessage() { - /** - * @member {string} - Full error text in the GNU error format - * with plugin, file, line and column. - * - * @example - * error.message //=> 'a.css:1:1: Unclosed block' - */ - this.message = this.plugin ? this.plugin + ': ' : ''; - this.message += this.file ? this.file : ''; - if (typeof this.line !== 'undefined') { - this.message += ':' + this.line + ':' + this.column; - } - this.message += ': ' + this.reason; - }; - - /** - * Returns a few lines of CSS source that caused the error. - * - * If the CSS has an input source map without `sourceContent`, - * this method will return an empty string. - * - * @param {boolean} [color] whether arrow will be colored red by terminal - * color codes. By default, PostCSS will detect - * color support by `process.stdout.isTTY` - * and `process.env.NODE_DISABLE_COLORS`. - * - * @example - * error.showSourceCode() //=> " 4 | } - * // 5 | a { - * // > 6 | bad - * // | ^ - * // 7 | } - * // 8 | b {" - * - * @return {string} few lines of CSS source that caused the error - */ - - CssSyntaxError.prototype.showSourceCode = function showSourceCode(color) { - var _this = this; - - if (!this.source) return ''; - - var css = this.source; - if (typeof color === 'undefined') color = _supportsColor2.default; - if (color) css = (0, _terminalHighlight2.default)(css); - - var lines = css.split(/\r?\n/); - var start = Math.max(this.line - 3, 0); - var end = Math.min(this.line + 2, lines.length); - - var maxWidth = String(end).length; - - function mark(text) { - if (color) { - return _chalk2.default.red.bold(text); - } else { - return text; - } - } - function aside(text) { - if (color) { - return _chalk2.default.gray(text); - } else { - return text; - } - } - - return lines.slice(start, end).map(function (line, index) { - var number = start + 1 + index; - var gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '; - if (number === _this.line) { - var spacing = aside(gutter.replace(/\d/g, ' ')) + line.slice(0, _this.column - 1).replace(/[^\t]/g, ' '); - return mark('>') + aside(gutter) + line + '\n ' + spacing + mark('^'); - } else { - return ' ' + aside(gutter) + line; - } - }).join('\n'); - }; - - /** - * Returns error position, message and source code of the broken part. - * - * @example - * error.toString() //=> "CssSyntaxError: app.css:1:1: Unclosed block - * // > 1 | a { - * // | ^" - * - * @return {string} error position, message and source code - */ - - CssSyntaxError.prototype.toString = function toString() { - var code = this.showSourceCode(); - if (code) { - code = '\n\n' + code + '\n'; - } - return this.name + ': ' + this.message + code; - }; - - /** - * @memberof CssSyntaxError# - * @member {Input} input - Input object with PostCSS internal information - * about input file. If input has source map - * from previous tool, PostCSS will use origin - * (for example, Sass) source. You can use this - * object to get PostCSS input source. - * - * @example - * error.input.file //=> 'a.css' - * error.file //=> 'a.sass' - */ - - return CssSyntaxError; - }(); - - exports.default = CssSyntaxError; - module.exports = exports['default']; -}); -System.registerDynamic("npm:source-map@0.5.6/lib/binary-search.js", [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - exports.GREATEST_LOWER_BOUND = 1; - exports.LEAST_UPPER_BOUND = 2; - - /** - * Recursive implementation of binary search. - * - * @param aLow Indices here and lower do not contain the needle. - * @param aHigh Indices here and higher do not contain the needle. - * @param aNeedle The element being searched for. - * @param aHaystack The non-empty array being searched. - * @param aCompare Function which takes two elements and returns -1, 0, or 1. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - */ - function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - // This function terminates when one of the following is true: - // - // 1. We find the exact element we are looking for. - // - // 2. We did not find the exact element, but we can return the index of - // the next-closest element. - // - // 3. We did not find the exact element, and there is no next-closest - // element than the one we are searching for, so we return -1. - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - // Found the element we are looking for. - return mid; - } else if (cmp > 0) { - // Our needle is greater than aHaystack[mid]. - if (aHigh - mid > 1) { - // The element is in the upper half. - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - - // The exact needle element was not found in this haystack. Determine if - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } else { - // Our needle is less than aHaystack[mid]. - if (mid - aLow > 1) { - // The element is in the lower half. - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } - } - - /** - * This is an implementation of binary search which will always try and return - * the index of the closest element if there is no exact hit. This is because - * mappings between original and generated line/col pairs are single points, - * and there is an implicit region between each of them, so a miss just means - * that you aren't on the very start of a region. - * - * @param aNeedle The element you are looking for. - * @param aHaystack The array that is being searched. - * @param aCompare A function which takes the needle and an element in the - * array and returns -1, 0, or 1 depending on whether the needle is less - * than, equal to, or greater than the element, respectively. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. - */ - exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - - // We have found either the exact element, or the next-closest element than - // the one we are searching for. However, there may be more than one such - // element. Make sure we always return the smallest of these. - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - - return index; - }; -}); -System.registerDynamic("npm:source-map@0.5.6/lib/quick-sort.js", [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - // It turns out that some (most?) JavaScript engines don't self-host - // `Array.prototype.sort`. This makes sense because C++ will likely remain - // faster than JS when doing raw CPU-intensive sorting. However, when using a - // custom comparator function, calling back and forth between the VM's C++ and - // JIT'd JS is rather slow *and* loses JIT type information, resulting in - // worse generated code for the comparator function than would be optimal. In - // fact, when sorting with a comparator, these costs outweigh the benefits of - // sorting in C++. By using our own JS-implemented Quick Sort (below), we get - // a ~3500ms mean speed-up in `bench/bench.html`. - - /** - * Swap the elements indexed by `x` and `y` in the array `ary`. - * - * @param {Array} ary - * The array. - * @param {Number} x - * The index of the first item. - * @param {Number} y - * The index of the second item. - */ - function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; - } - - /** - * Returns a random integer within the range `low .. high` inclusive. - * - * @param {Number} low - * The lower bound on the range. - * @param {Number} high - * The upper bound on the range. - */ - function randomIntInRange(low, high) { - return Math.round(low + Math.random() * (high - low)); - } - - /** - * The Quick Sort algorithm. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - * @param {Number} p - * Start index of the array - * @param {Number} r - * End index of the array - */ - function doQuickSort(ary, comparator, p, r) { - // If our lower bound is less than our upper bound, we (1) partition the - // array into two pieces and (2) recurse on each half. If it is not, this is - // the empty array and our base case. - - if (p < r) { - // (1) Partitioning. - // - // The partitioning chooses a pivot between `p` and `r` and moves all - // elements that are less than or equal to the pivot to the before it, and - // all the elements that are greater than it after it. The effect is that - // once partition is done, the pivot is in the exact place it will be when - // the array is put in sorted order, and it will not need to be moved - // again. This runs in O(n) time. - - // Always choose a random pivot so that an input array which is reverse - // sorted does not cause O(n^2) running time. - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - - swap(ary, pivotIndex, r); - var pivot = ary[r]; - - // Immediately after `j` is incremented in this loop, the following hold - // true: - // - // * Every element in `ary[p .. i]` is less than or equal to the pivot. - // - // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. - for (var j = p; j < r; j++) { - if (comparator(ary[j], pivot) <= 0) { - i += 1; - swap(ary, i, j); - } - } - - swap(ary, i + 1, j); - var q = i + 1; - - // (2) Recurse on each half. - - doQuickSort(ary, comparator, p, q - 1); - doQuickSort(ary, comparator, q + 1, r); - } - } - - /** - * Sort the given array in-place with the given comparator function. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - */ - exports.quickSort = function (ary, comparator) { - doQuickSort(ary, comparator, 0, ary.length - 1); - }; -}); -System.registerDynamic('npm:source-map@0.5.6/lib/source-map-consumer.js', ['./util', './binary-search', './array-set', './base64-vlq', './quick-sort'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = $__require('./util'); - var binarySearch = $__require('./binary-search'); - var ArraySet = $__require('./array-set').ArraySet; - var base64VLQ = $__require('./base64-vlq'); - var quickSort = $__require('./quick-sort').quickSort; - - function SourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap) : new BasicSourceMapConsumer(sourceMap); - } - - SourceMapConsumer.fromSourceMap = function (aSourceMap) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap); - }; - - /** - * The version of the source mapping spec that we are consuming. - */ - SourceMapConsumer.prototype._version = 3; - - // `__generatedMappings` and `__originalMappings` are arrays that hold the - // parsed mapping coordinates from the source map's "mappings" attribute. They - // are lazily instantiated, accessed via the `_generatedMappings` and - // `_originalMappings` getters respectively, and we only parse the mappings - // and create these arrays once queried for a source location. We jump through - // these hoops because there can be many thousands of mappings, and parsing - // them is expensive, so we only want to do it if we must. - // - // Each object in the arrays is of the form: - // - // { - // generatedLine: The line number in the generated code, - // generatedColumn: The column number in the generated code, - // source: The path to the original source file that generated this - // chunk of code, - // originalLine: The line number in the original source that - // corresponds to this chunk of generated code, - // originalColumn: The column number in the original source that - // corresponds to this chunk of generated code, - // name: The name of the original symbol which generated this chunk of - // code. - // } - // - // All properties except for `generatedLine` and `generatedColumn` can be - // `null`. - // - // `_generatedMappings` is ordered by the generated positions. - // - // `_originalMappings` is ordered by the original positions. - - SourceMapConsumer.prototype.__generatedMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { - get: function () { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__generatedMappings; - } - }); - - SourceMapConsumer.prototype.__originalMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { - get: function () { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__originalMappings; - } - }); - - SourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - - SourceMapConsumer.GENERATED_ORDER = 1; - SourceMapConsumer.ORIGINAL_ORDER = 2; - - SourceMapConsumer.GREATEST_LOWER_BOUND = 1; - SourceMapConsumer.LEAST_UPPER_BOUND = 2; - - /** - * Iterate over each mapping between an original source/line/column and a - * generated line/column in this source map. - * - * @param Function aCallback - * The function that is called with each mapping. - * @param Object aContext - * Optional. If specified, this object will be the value of `this` every - * time that `aCallback` is called. - * @param aOrder - * Either `SourceMapConsumer.GENERATED_ORDER` or - * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to - * iterate over the mappings sorted by the generated file's line/column - * order or the original's source/line/column order, respectively. Defaults to - * `SourceMapConsumer.GENERATED_ORDER`. - */ - SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - - var sourceRoot = this.sourceRoot; - mappings.map(function (mapping) { - var source = mapping.source === null ? null : this._sources.at(mapping.source); - if (source != null && sourceRoot != null) { - source = util.join(sourceRoot, source); - } - return { - source: source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : this._names.at(mapping.name) - }; - }, this).forEach(aCallback, context); - }; - - /** - * Returns all generated line and column information for the original source, - * line, and column provided. If no column is provided, returns all mappings - * corresponding to a either the line we are searching for or the next - * closest line that has any mappings. Otherwise, returns all mappings - * corresponding to the given line and either the column we are searching for - * or the next closest column that has any offsets. - * - * The only argument is an object with the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: Optional. the column number in the original source. - * - * and an array of objects is returned, each with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, 'line'); - - // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping - // returns the index of the closest mapping less than the needle. By - // setting needle.originalColumn to 0, we thus find the last mapping for - // the given line, provided such a mapping exists. - var needle = { - source: util.getArg(aArgs, 'source'), - originalLine: line, - originalColumn: util.getArg(aArgs, 'column', 0) - }; - - if (this.sourceRoot != null) { - needle.source = util.relative(this.sourceRoot, needle.source); - } - if (!this._sources.has(needle.source)) { - return []; - } - needle.source = this._sources.indexOf(needle.source); - - var mappings = []; - - var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we found. Since - // mappings are sorted, this is guaranteed to find all mappings for - // the line we found. - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we were searching for. - // Since mappings are sorted, this is guaranteed to find all mappings for - // the line we are searching for. - while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } - } - - return mappings; - }; - - exports.SourceMapConsumer = SourceMapConsumer; - - /** - * A BasicSourceMapConsumer instance represents a parsed source map which we can - * query for information about the original file positions by giving it a file - * position in the generated source. - * - * The only parameter is the raw source map (either as a JSON string, or - * already parsed to an object). According to the spec, source maps have the - * following attributes: - * - * - version: Which version of the source map spec this map is following. - * - sources: An array of URLs to the original source files. - * - names: An array of identifiers which can be referrenced by individual mappings. - * - sourceRoot: Optional. The URL root from which all sources are relative. - * - sourcesContent: Optional. An array of contents of the original source files. - * - mappings: A string of base64 VLQs which contain the actual mappings. - * - file: Optional. The generated file this source map is associated with. - * - * Here is an example source map, taken from the source map spec[0]: - * - * { - * version : 3, - * file: "out.js", - * sourceRoot : "", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AA,AB;;ABCDE;" - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# - */ - function BasicSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sources = util.getArg(sourceMap, 'sources'); - // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which - // requires the array) to play nice here. - var names = util.getArg(sourceMap, 'names', []); - var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); - var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); - var mappings = util.getArg(sourceMap, 'mappings'); - var file = util.getArg(sourceMap, 'file', null); - - // Once again, Sass deviates from the spec and supplies the version as a - // string rather than a number, so we use loose equality checking here. - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - sources = sources.map(String) - // Some source maps produce relative source paths like "./foo.js" instead of - // "foo.js". Normalize these first so that future comparisons will succeed. - // See bugzil.la/1090768. - .map(util.normalize) - // Always ensure that absolute sources are internally stored relative to - // the source root, if the source root is absolute. Not doing this would - // be particularly problematic when the source root is a prefix of the - // source (valid, but why??). See github issue #199 and bugzil.la/1188982. - .map(function (source) { - return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source; - }); - - // Pass `true` below to allow duplicate names and sources. While source maps - // are intended to be compressed and deduplicated, the TypeScript compiler - // sometimes generates source maps with duplicates in them. See Github issue - // #72 and bugzil.la/889492. - this._names = ArraySet.fromArray(names.map(String), true); - this._sources = ArraySet.fromArray(sources, true); - - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this.file = file; - } - - BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - - /** - * Create a BasicSourceMapConsumer from a SourceMapGenerator. - * - * @param SourceMapGenerator aSourceMap - * The source map that will be consumed. - * @returns BasicSourceMapConsumer - */ - BasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot); - smc.file = aSourceMap._file; - - // Because we are modifying the entries (by converting string sources and - // names to indices into the sources and names ArraySets), we have to make - // a copy of the entry or else bad things happen. Shared mutable state - // strikes again! See github issue #191. - - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - - for (var i = 0, length = generatedMappings.length; i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping(); - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - - destOriginalMappings.push(destMapping); - } - - destGeneratedMappings.push(destMapping); - } - - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - - return smc; - }; - - /** - * The version of the source mapping spec that we are consuming. - */ - BasicSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { - get: function () { - return this._sources.toArray().map(function (s) { - return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; - }, this); - } - }); - - /** - * Provide the JIT with a nice shape / hidden class. - */ - function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; - } - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - BasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - - while (index < length) { - if (aStr.charAt(index) === ';') { - generatedLine++; - index++; - previousGeneratedColumn = 0; - } else if (aStr.charAt(index) === ',') { - index++; - } else { - mapping = new Mapping(); - mapping.generatedLine = generatedLine; - - // Because each offset is encoded relative to the previous one, - // many segments often have the same encoding. We can exploit this - // fact by caching the parsed variable length fields of each segment, - // allowing us to avoid a second parse if we encounter the same - // segment again. - for (end = index; end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - - segment = cachedSegments[str]; - if (segment) { - index += str.length; - } else { - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - - if (segment.length === 2) { - throw new Error('Found a source, but no line and column'); - } - - if (segment.length === 3) { - throw new Error('Found a source and line, but no column'); - } - - cachedSegments[str] = segment; - } - - // Generated column. - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - - if (segment.length > 1) { - // Original source. - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - - // Original line. - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - // Lines are stored 0-based - mapping.originalLine += 1; - - // Original column. - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - - if (segment.length > 4) { - // Original name. - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - - generatedMappings.push(mapping); - if (typeof mapping.originalLine === 'number') { - originalMappings.push(mapping); - } - } - } - - quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); - this.__generatedMappings = generatedMappings; - - quickSort(originalMappings, util.compareByOriginalPositions); - this.__originalMappings = originalMappings; - }; - - /** - * Find the mapping that best matches the hypothetical "needle" mapping that - * we are searching for in the given "haystack" of mappings. - */ - BasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) { - // To return the position we are searching for, we must first find the - // mapping for the given position and then return the opposite position it - // points to. Because the mappings are sorted, we can use binary search to - // find the best mapping. - - if (aNeedle[aLineName] <= 0) { - throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]); - } - - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - - /** - * Compute the last column for each generated mapping. The last column is - * inclusive. - */ - BasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() { - for (var index = 0; index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - - // Mappings do not contain a field for the last generated columnt. We - // can come up with an optimistic estimate, however, by assuming that - // mappings are contiguous (i.e. given two consecutive mappings, the - // first mapping ends where the second one starts). - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - - // The last mapping for each line spans the entire line. - mapping.lastGeneratedColumn = Infinity; - } - }; - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - BasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping(needle, this._generatedMappings, "generatedLine", "generatedColumn", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)); - - if (index >= 0) { - var mapping = this._generatedMappings[index]; - - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, 'source', null); - if (source !== null) { - source = this._sources.at(source); - if (this.sourceRoot != null) { - source = util.join(this.sourceRoot, source); - } - } - var name = util.getArg(mapping, 'name', null); - if (name !== null) { - name = this._names.at(name); - } - return { - source: source, - line: util.getArg(mapping, 'originalLine', null), - column: util.getArg(mapping, 'originalColumn', null), - name: name - }; - } - } - - return { - source: null, - line: null, - column: null, - name: null - }; - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - BasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function (sc) { - return sc == null; - }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - BasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - - if (this.sourceRoot != null) { - aSource = util.relative(this.sourceRoot, aSource); - } - - if (this._sources.has(aSource)) { - return this.sourcesContent[this._sources.indexOf(aSource)]; - } - - var url; - if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) { - // XXX: file:// URIs and absolute paths lead to unexpected behavior for - // many users. We can help them out when they expect file:// URIs to - // behave like it would if they were running a local HTTP server. See - // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. - var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]; - } - - if ((!url.path || url.path == "/") && this._sources.has("/" + aSource)) { - return this.sourcesContent[this._sources.indexOf("/" + aSource)]; - } - } - - // This function is used recursively from - // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we - // don't want to throw if we can't find the source - we just want to - // return null, so we provide a flag to exit gracefully. - if (nullOnMissing) { - return null; - } else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - BasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, 'source'); - if (this.sourceRoot != null) { - source = util.relative(this.sourceRoot, source); - } - if (!this._sources.has(source)) { - return { - line: null, - column: null, - lastColumn: null - }; - } - source = this._sources.indexOf(source); - - var needle = { - source: source, - originalLine: util.getArg(aArgs, 'line'), - originalColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)); - - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }; - } - } - - return { - line: null, - column: null, - lastColumn: null - }; - }; - - exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - - /** - * An IndexedSourceMapConsumer instance represents a parsed source map which - * we can query for information. It differs from BasicSourceMapConsumer in - * that it takes "indexed" source maps (i.e. ones with a "sections" field) as - * input. - * - * The only parameter is a raw source map (either as a JSON string, or already - * parsed to an object). According to the spec for indexed source maps, they - * have the following attributes: - * - * - version: Which version of the source map spec this map is following. - * - file: Optional. The generated file this source map is associated with. - * - sections: A list of section definitions. - * - * Each value under the "sections" field has two fields: - * - offset: The offset into the original specified at which this section - * begins to apply, defined as an object with a "line" and "column" - * field. - * - map: A source map definition. This source map could also be indexed, - * but doesn't have to be. - * - * Instead of the "map" field, it's also possible to have a "url" field - * specifying a URL to retrieve a source map from, but that's currently - * unsupported. - * - * Here's an example source map, taken from the source map spec[0], but - * modified to omit a section which uses the "url" field. - * - * { - * version : 3, - * file: "app.js", - * sections: [{ - * offset: {line:100, column:10}, - * map: { - * version : 3, - * file: "section.js", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AAAA,E;;ABCDE;" - * } - * }], - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt - */ - function IndexedSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sections = util.getArg(sourceMap, 'sections'); - - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - this._sources = new ArraySet(); - this._names = new ArraySet(); - - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function (s) { - if (s.url) { - // The url field will require support for asynchronicity. - // See https://github.com/mozilla/source-map/issues/16 - throw new Error('Support for url field in sections not implemented.'); - } - var offset = util.getArg(s, 'offset'); - var offsetLine = util.getArg(offset, 'line'); - var offsetColumn = util.getArg(offset, 'column'); - - if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) { - throw new Error('Section offsets must be ordered and non-overlapping.'); - } - lastOffset = offset; - - return { - generatedOffset: { - // The offset fields are 0-based, but we use 1-based indices when - // encoding/decoding from VLQ. - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, 'map')) - }; - }); - } - - IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - - /** - * The version of the source mapping spec that we are consuming. - */ - IndexedSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { - get: function () { - var sources = []; - for (var i = 0; i < this._sections.length; i++) { - for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - } - return sources; - } - }); - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - IndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - // Find the section containing the generated position we're trying to map - // to an original position. - var sectionIndex = binarySearch.search(needle, this._sections, function (needle, section) { - var cmp = needle.generatedLine - section.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - - return needle.generatedColumn - section.generatedOffset.generatedColumn; - }); - var section = this._sections[sectionIndex]; - - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - - return section.consumer.originalPositionFor({ - line: needle.generatedLine - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0), - bias: aArgs.bias - }); - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function (s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - IndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - var content = section.consumer.sourceContentFor(aSource, true); - if (content) { - return content; - } - } - if (nullOnMissing) { - return null; - } else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - IndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - // Only consider this section if the requested source is in the list of - // sources of the consumer. - if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0) - }; - return ret; - } - } - - return { - line: null, - column: null - }; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - IndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0; j < sectionMappings.length; j++) { - var mapping = sectionMappings[j]; - - var source = section.consumer._sources.at(mapping.source); - if (section.consumer.sourceRoot !== null) { - source = util.join(section.consumer.sourceRoot, source); - } - this._sources.add(source); - source = this._sources.indexOf(source); - - var name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - - // The mappings coming from the consumer for the section have - // generated positions relative to the start of the section, so we - // need to offset them to be relative to the start of the concatenated - // generated file. - var adjustedMapping = { - source: source, - generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0), - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: name - }; - - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === 'number') { - this.__originalMappings.push(adjustedMapping); - } - } - } - - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - - exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; -}); -System.registerDynamic('npm:source-map@0.5.6/lib/base64.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - - /** - * Encode an integer in the range of 0 to 63 to a single base 64 digit. - */ - exports.encode = function (number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + number); - }; - - /** - * Decode a single base 64 character code digit to an integer. Returns -1 on - * failure. - */ - exports.decode = function (charCode) { - var bigA = 65; // 'A' - var bigZ = 90; // 'Z' - - var littleA = 97; // 'a' - var littleZ = 122; // 'z' - - var zero = 48; // '0' - var nine = 57; // '9' - - var plus = 43; // '+' - var slash = 47; // '/' - - var littleOffset = 26; - var numberOffset = 52; - - // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ - if (bigA <= charCode && charCode <= bigZ) { - return charCode - bigA; - } - - // 26 - 51: abcdefghijklmnopqrstuvwxyz - if (littleA <= charCode && charCode <= littleZ) { - return charCode - littleA + littleOffset; - } - - // 52 - 61: 0123456789 - if (zero <= charCode && charCode <= nine) { - return charCode - zero + numberOffset; - } - - // 62: + - if (charCode == plus) { - return 62; - } - - // 63: / - if (charCode == slash) { - return 63; - } - - // Invalid base64 digit. - return -1; - }; -}); -System.registerDynamic("npm:source-map@0.5.6/lib/base64-vlq.js", ["./base64"], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - * - * Based on the Base 64 VLQ implementation in Closure Compiler: - * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java - * - * Copyright 2011 The Closure Compiler Authors. All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - var base64 = $__require('./base64'); - - // A single base 64 digit can contain 6 bits of data. For the base 64 variable - // length quantities we use in the source map spec, the first bit is the sign, - // the next four bits are the actual value, and the 6th bit is the - // continuation bit. The continuation bit tells us whether there are more - // digits in this value following this digit. - // - // Continuation - // | Sign - // | | - // V V - // 101011 - - var VLQ_BASE_SHIFT = 5; - - // binary: 100000 - var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - - // binary: 011111 - var VLQ_BASE_MASK = VLQ_BASE - 1; - - // binary: 100000 - var VLQ_CONTINUATION_BIT = VLQ_BASE; - - /** - * Converts from a two-complement value to a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) - * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) - */ - function toVLQSigned(aValue) { - return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0; - } - - /** - * Converts to a two-complement value from a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 - * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 - */ - function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative ? -shifted : shifted; - } - - /** - * Returns the base 64 VLQ encoded value. - */ - exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - - var vlq = toVLQSigned(aValue); - - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - // There are still more digits in this value, so we must make sure the - // continuation bit is marked. - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - - return encoded; - }; - - /** - * Decodes the next base 64 VLQ value from the given string and returns the - * value and the rest of the string via the out parameter. - */ - exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; - }; -}); -System.registerDynamic('npm:source-map@0.5.6/lib/array-set.js', ['./util'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = $__require('./util'); - var has = Object.prototype.hasOwnProperty; - - /** - * A data structure which is a combination of an array and a set. Adding a new - * member is O(1), testing for membership is O(1), and finding the index of an - * element is O(1). Removing elements from the set is not supported. Only - * strings are supported for membership. - */ - function ArraySet() { - this._array = []; - this._set = Object.create(null); - } - - /** - * Static method for creating ArraySet instances from an existing array. - */ - ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { - var set = new ArraySet(); - for (var i = 0, len = aArray.length; i < len; i++) { - set.add(aArray[i], aAllowDuplicates); - } - return set; - }; - - /** - * Return how many unique items are in this ArraySet. If duplicates have been - * added, than those do not count towards the size. - * - * @returns Number - */ - ArraySet.prototype.size = function ArraySet_size() { - return Object.getOwnPropertyNames(this._set).length; - }; - - /** - * Add the given string to this set. - * - * @param String aStr - */ - ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { - var sStr = util.toSetString(aStr); - var isDuplicate = has.call(this._set, sStr); - var idx = this._array.length; - if (!isDuplicate || aAllowDuplicates) { - this._array.push(aStr); - } - if (!isDuplicate) { - this._set[sStr] = idx; - } - }; - - /** - * Is the given string a member of this set? - * - * @param String aStr - */ - ArraySet.prototype.has = function ArraySet_has(aStr) { - var sStr = util.toSetString(aStr); - return has.call(this._set, sStr); - }; - - /** - * What is the index of the given string in the array? - * - * @param String aStr - */ - ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { - var sStr = util.toSetString(aStr); - if (has.call(this._set, sStr)) { - return this._set[sStr]; - } - throw new Error('"' + aStr + '" is not in the set.'); - }; - - /** - * What is the element at the given index? - * - * @param Number aIdx - */ - ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error('No element indexed by ' + aIdx); - }; - - /** - * Returns the array representation of this set (which has the proper indices - * indicated by indexOf). Note that this is a copy of the internal array used - * for storing the members so that no one can mess with internal state. - */ - ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); - }; - - exports.ArraySet = ArraySet; -}); -System.registerDynamic('npm:source-map@0.5.6/lib/mapping-list.js', ['./util'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2014 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = $__require('./util'); - - /** - * Determine whether mappingB is after mappingA with respect to generated - * position. - */ - function generatedPositionAfter(mappingA, mappingB) { - // Optimized for most common case - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; - } - - /** - * A data structure to provide a sorted view of accumulated mappings in a - * performance conscious manner. It trades a neglibable overhead in general - * case for a large speedup in case of mappings being added in order. - */ - function MappingList() { - this._array = []; - this._sorted = true; - // Serves as infimum - this._last = { generatedLine: -1, generatedColumn: 0 }; - } - - /** - * Iterate through internal items. This method takes the same arguments that - * `Array.prototype.forEach` takes. - * - * NOTE: The order of the mappings is NOT guaranteed. - */ - MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - - /** - * Add the given source mapping. - * - * @param Object aMapping - */ - MappingList.prototype.add = function MappingList_add(aMapping) { - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } - }; - - /** - * Returns the flat, sorted array of mappings. The mappings are sorted by - * generated position. - * - * WARNING: This method returns internal data without copying, for - * performance. The return value must NOT be mutated, and should be treated as - * an immutable borrow. If you want to take ownership, you must make your own - * copy. - */ - MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; - }; - - exports.MappingList = MappingList; -}); -System.registerDynamic('npm:source-map@0.5.6/lib/source-map-generator.js', ['./base64-vlq', './util', './array-set', './mapping-list'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var base64VLQ = $__require('./base64-vlq'); - var util = $__require('./util'); - var ArraySet = $__require('./array-set').ArraySet; - var MappingList = $__require('./mapping-list').MappingList; - - /** - * An instance of the SourceMapGenerator represents a source map which is - * being built incrementally. You may pass an object with the following - * properties: - * - * - file: The filename of the generated source. - * - sourceRoot: A root for all relative URLs in this source map. - */ - function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, 'file', null); - this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); - this._skipValidation = util.getArg(aArgs, 'skipValidation', false); - this._sources = new ArraySet(); - this._names = new ArraySet(); - this._mappings = new MappingList(); - this._sourcesContents = null; - } - - SourceMapGenerator.prototype._version = 3; - - /** - * Creates a new SourceMapGenerator based on a SourceMapConsumer - * - * @param aSourceMapConsumer The SourceMap. - */ - SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator({ - file: aSourceMapConsumer.file, - sourceRoot: sourceRoot - }); - aSourceMapConsumer.eachMapping(function (mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - - /** - * Add a single mapping from original source line and column to the generated - * source's line and column for this source map being created. The mapping - * object should have the following properties: - * - * - generated: An object with the generated line and column positions. - * - original: An object with the original line and column positions. - * - source: The original source file (relative to the sourceRoot). - * - name: An optional original token name for this mapping. - */ - SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, 'generated'); - var original = util.getArg(aArgs, 'original', null); - var source = util.getArg(aArgs, 'source', null); - var name = util.getArg(aArgs, 'name', null); - - if (!this._skipValidation) { - this._validateMapping(generated, original, source, name); - } - - if (source != null) { - source = String(source); - if (!this._sources.has(source)) { - this._sources.add(source); - } - } - - if (name != null) { - name = String(name); - if (!this._names.has(name)) { - this._names.add(name); - } - } - - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source: source, - name: name - }); - }; - - /** - * Set the source content for a source file. - */ - SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - - if (aSourceContent != null) { - // Add the source content to the _sourcesContents map. - // Create a new _sourcesContents map if the property is null. - if (!this._sourcesContents) { - this._sourcesContents = Object.create(null); - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - // Remove the source file from the _sourcesContents map. - // If the _sourcesContents map is empty, set the property to null. - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - - /** - * Applies the mappings of a sub-source-map for a specific source file to the - * source map being generated. Each mapping to the supplied source file is - * rewritten using the supplied source map. Note: The resolution for the - * resulting mappings is the minimium of this map and the supplied map. - * - * @param aSourceMapConsumer The source map to be applied. - * @param aSourceFile Optional. The filename of the source file. - * If omitted, SourceMapConsumer's file property will be used. - * @param aSourceMapPath Optional. The dirname of the path to the source map - * to be applied. If relative, it is relative to the SourceMapConsumer. - * This parameter is needed when the two source maps aren't in the same - * directory, and the source map to be applied contains relative source - * paths. If so, those relative source paths need to be rewritten - * relative to the SourceMapGenerator. - */ - SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - // If aSourceFile is omitted, we will use the file property of the SourceMap - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\'s "file" property. Both were omitted.'); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - // Make "sourceFile" relative if an absolute Url is passed. - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - // Applying the SourceMap can add and remove items from the sources and - // the names array. - var newSources = new ArraySet(); - var newNames = new ArraySet(); - - // Find mappings for the "sourceFile" - this._mappings.unsortedForEach(function (mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - // Check if it can be mapped by the source map, then update the mapping. - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - // Copy mapping - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source); - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - }, this); - this._sources = newSources; - this._names = newNames; - - // Copy sourcesContents of applied map. - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile = util.join(aSourceMapPath, sourceFile); - } - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - this.setSourceContent(sourceFile, content); - } - }, this); - }; - - /** - * A mapping can have one of the three levels of data: - * - * 1. Just the generated position. - * 2. The Generated position, original position, and original source. - * 3. Generated and original position, original source, as well as a name - * token. - * - * To maintain consistency, we validate that any new mapping being added falls - * in to one of these categories. - */ - SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) { - if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) { - // Case 1. - return; - } else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) { - // Cases 2 and 3. - return; - } else { - throw new Error('Invalid mapping: ' + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - })); - } - }; - - /** - * Serialize the accumulated mappings in to the stream of base 64 VLQs - * specified by the source map format. - */ - SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ''; - var next; - var mapping; - var nameIdx; - var sourceIdx; - - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - next = ''; - - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - next += ';'; - previousGeneratedLine++; - } - } else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - next += ','; - } - } - - next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - - if (mapping.source != null) { - sourceIdx = this._sources.indexOf(mapping.source); - next += base64VLQ.encode(sourceIdx - previousSource); - previousSource = sourceIdx; - - // lines are stored 0-based in SourceMap spec version 3 - next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - - next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - - if (mapping.name != null) { - nameIdx = this._names.indexOf(mapping.name); - next += base64VLQ.encode(nameIdx - previousName); - previousName = nameIdx; - } - } - - result += next; - } - - return result; - }; - - SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function (source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null; - }, this); - }; - - /** - * Externalize the source map. - */ - SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - - return map; - }; - - /** - * Render the source map being generated to a string. - */ - SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - - exports.SourceMapGenerator = SourceMapGenerator; -}); -System.registerDynamic('npm:source-map@0.5.6/lib/util.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - /** - * This is a helper function for getting values from parameter/options - * objects. - * - * @param args The object we are extracting values from - * @param name The name of the property we are getting. - * @param defaultValue An optional value to return if the property is missing - * from the object. If this is not specified and the property is missing, an - * error will be thrown. - */ - function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } - } - exports.getArg = getArg; - - var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; - var dataUrlRegexp = /^data:.+\,.+$/; - - function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; - } - exports.urlParse = urlParse; - - function urlGenerate(aParsedUrl) { - var url = ''; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ':'; - } - url += '//'; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + '@'; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port; - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; - } - exports.urlGenerate = urlGenerate; - - /** - * Normalizes a path, or the path portion of a URL: - * - * - Replaces consecutive slashes with one slash. - * - Removes unnecessary '.' parts. - * - Removes unnecessary '/..' parts. - * - * Based on code in the Node.js 'path' core module. - * - * @param aPath The path or url to normalize. - */ - function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = exports.isAbsolute(path); - - var parts = path.split(/\/+/); - for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { - part = parts[i]; - if (part === '.') { - parts.splice(i, 1); - } else if (part === '..') { - up++; - } else if (up > 0) { - if (part === '') { - // The first part is blank if the path is absolute. Trying to go - // above the root is a no-op. Therefore we can remove all '..' parts - // directly after the root. - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join('/'); - - if (path === '') { - path = isAbsolute ? '/' : '.'; - } - - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; - } - exports.normalize = normalize; - - /** - * Joins two paths/URLs. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be joined with the root. - * - * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a - * scheme-relative URL: Then the scheme of aRoot, if any, is prepended - * first. - * - Otherwise aPath is a path. If aRoot is a URL, then its path portion - * is updated with the result and aRoot is returned. Otherwise the result - * is returned. - * - If aPath is absolute, the result is aPath. - * - Otherwise the two paths are joined with a slash. - * - Joining for example 'http://' and 'www.example.com' is also supported. - */ - function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || '/'; - } - - // `join(foo, '//www.example.org')` - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - - // `join('http://', 'www.example.com')` - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - - var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); - - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; - } - exports.join = join; - - exports.isAbsolute = function (aPath) { - return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); - }; - - /** - * Make a path relative to a URL or another path. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be made relative to aRoot. - */ - function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - - aRoot = aRoot.replace(/\/$/, ''); - - // It is possible for the path to be above the root. In this case, simply - // checking whether the root is a prefix of the path won't work. Instead, we - // need to remove components from the root one by one, until either we find - // a prefix that fits, or we run out of components to remove. - var level = 0; - while (aPath.indexOf(aRoot + '/') !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - - // If the only part of the root that is left is the scheme (i.e. http://, - // file:///, etc.), one or more slashes (/), or simply nothing at all, we - // have exhausted all components, so the path is not relative to the root. - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - - ++level; - } - - // Make sure we add a "../" for each component we removed from the root. - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); - } - exports.relative = relative; - - var supportsNullProto = function () { - var obj = Object.create(null); - return !('__proto__' in obj); - }(); - - function identity(s) { - return s; - } - - /** - * Because behavior goes wacky when you set `__proto__` on objects, we - * have to prefix all the strings in our set with an arbitrary character. - * - * See https://github.com/mozilla/source-map/pull/31 and - * https://github.com/mozilla/source-map/issues/30 - * - * @param String aStr - */ - function toSetString(aStr) { - if (isProtoString(aStr)) { - return '$' + aStr; - } - - return aStr; - } - exports.toSetString = supportsNullProto ? identity : toSetString; - - function fromSetString(aStr) { - if (isProtoString(aStr)) { - return aStr.slice(1); - } - - return aStr; - } - exports.fromSetString = supportsNullProto ? identity : fromSetString; - - function isProtoString(s) { - if (!s) { - return false; - } - - var length = s.length; - - if (length < 9 /* "__proto__".length */) { - return false; - } - - if (s.charCodeAt(length - 1) !== 95 /* '_' */ || s.charCodeAt(length - 2) !== 95 /* '_' */ || s.charCodeAt(length - 3) !== 111 /* 'o' */ || s.charCodeAt(length - 4) !== 116 /* 't' */ || s.charCodeAt(length - 5) !== 111 /* 'o' */ || s.charCodeAt(length - 6) !== 114 /* 'r' */ || s.charCodeAt(length - 7) !== 112 /* 'p' */ || s.charCodeAt(length - 8) !== 95 /* '_' */ || s.charCodeAt(length - 9) !== 95 /* '_' */) { - return false; - } - - for (var i = length - 10; i >= 0; i--) { - if (s.charCodeAt(i) !== 36 /* '$' */) { - return false; - } - } - - return true; - } - - /** - * Comparator between two mappings where the original positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same original source/line/column, but different generated - * line and column the same. Useful when searching for a mapping with a - * stubbed out mapping. - */ - function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByOriginalPositions = compareByOriginalPositions; - - /** - * Comparator between two mappings with deflated source and name indices where - * the generated positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same generated line and column, but different - * source/name/original line and column the same. Useful when searching for a - * mapping with a stubbed out mapping. - */ - function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - - cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - - function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - - if (aStr1 > aStr2) { - return 1; - } - - return -1; - } - - /** - * Comparator between two mappings with inflated source and name strings where - * the generated positions are compared. - */ - function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; -}); -System.registerDynamic('npm:source-map@0.5.6/lib/source-node.js', ['./source-map-generator', './util'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var SourceMapGenerator = $__require('./source-map-generator').SourceMapGenerator; - var util = $__require('./util'); - - // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other - // operating systems these days (capturing the result). - var REGEX_NEWLINE = /(\r?\n)/; - - // Newline character code for charCodeAt() comparisons - var NEWLINE_CODE = 10; - - // Private symbol for identifying `SourceNode`s when multiple versions of - // the source-map library are loaded. This MUST NOT CHANGE across - // versions! - var isSourceNode = "$$$isSourceNode$$$"; - - /** - * SourceNodes provide a way to abstract over interpolating/concatenating - * snippets of generated JavaScript source code while maintaining the line and - * column information associated with the original source code. - * - * @param aLine The original line number. - * @param aColumn The original column number. - * @param aSource The original source's filename. - * @param aChunks Optional. An array of strings which are snippets of - * generated JS, or other SourceNodes. - * @param aName The original identifier. - */ - function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) this.add(aChunks); - } - - /** - * Creates a SourceNode from generated code and a SourceMapConsumer. - * - * @param aGeneratedCode The generated code - * @param aSourceMapConsumer The SourceMap for the generated code - * @param aRelativePath Optional. The path that relative sources in the - * SourceMapConsumer should be relative to. - */ - SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - // The SourceNode we want to fill with the generated code - // and the SourceMap - var node = new SourceNode(); - - // All even indices of this array are one line of the generated code, - // while all odd indices are the newlines between two adjacent lines - // (since `REGEX_NEWLINE` captures its match). - // Processed fragments are removed from this array, by calling `shiftNextLine`. - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var shiftNextLine = function () { - var lineContents = remainingLines.shift(); - // The last line of a file might not have a newline. - var newLine = remainingLines.shift() || ""; - return lineContents + newLine; - }; - - // We need to remember the position of "remainingLines" - var lastGeneratedLine = 1, - lastGeneratedColumn = 0; - - // The generate SourceNodes we need a code range. - // To extract it current and last mapping is used. - // Here we store the last mapping. - var lastMapping = null; - - aSourceMapConsumer.eachMapping(function (mapping) { - if (lastMapping !== null) { - // We add the code from "lastMapping" to "mapping": - // First check if there is a new line in between. - if (lastGeneratedLine < mapping.generatedLine) { - // Associate first line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - // The remaining code is added without mapping - } else { - // There is no new line in between. - // Associate the code between "lastGeneratedColumn" and - // "mapping.generatedColumn" with "lastMapping" - var nextLine = remainingLines[0]; - var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn); - remainingLines[0] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - // No more remaining code, continue - lastMapping = mapping; - return; - } - } - // We add the generated code until the first mapping - // to the SourceNode without any mapping. - // Each line is added as separate string. - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[0]; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[0] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - // We have processed all mappings. - if (remainingLines.length > 0) { - if (lastMapping) { - // Associate the remaining code in the current line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - } - // and add the remaining lines without any mapping - node.add(remainingLines.join("")); - } - - // Copy sourcesContent into SourceNode - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - - return node; - - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source; - node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name)); - } - } - }; - - /** - * Add a chunk of generated JS to this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function (chunk) { - this.add(chunk); - }, this); - } else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } else { - throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk); - } - return this; - }; - - /** - * Add a chunk of generated JS to the beginning of this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length - 1; i >= 0; i--) { - this.prepend(aChunk[i]); - } - } else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } else { - throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk); - } - return this; - }; - - /** - * Walk over the tree of JS snippets in this node and its children. The - * walking function is called once for each snippet of JS and is passed that - * snippet and the its original associated source's line/column location. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length; i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } else { - if (chunk !== '') { - aFn(chunk, { source: this.source, - line: this.line, - column: this.column, - name: this.name }); - } - } - } - }; - - /** - * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between - * each of `this.children`. - * - * @param aSep The separator. - */ - SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0; i < len - 1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; - }; - - /** - * Call String.prototype.replace on the very right-most source snippet. Useful - * for trimming whitespace from the end of a source node, etc. - * - * @param aPattern The pattern to replace. - * @param aReplacement The thing to replace the pattern with. - */ - SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } else if (typeof lastChild === 'string') { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } else { - this.children.push(''.replace(aPattern, aReplacement)); - } - return this; - }; - - /** - * Set the source content for a source file. This will be added to the SourceMapGenerator - * in the sourcesContent field. - * - * @param aSourceFile The filename of the source file - * @param aSourceContent The content of the source file - */ - SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - - /** - * Walk over the tree of SourceNodes. The walking function is called for each - * source file content and is passed the filename and source content. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length; i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length; i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - - /** - * Return the string representation of this source node. Walks over the tree - * and concatenates all the various snippets together to one string. - */ - SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function (chunk) { - str += chunk; - }); - return str; - }; - - /** - * Returns the string representation of this source node along with a source - * map. - */ - SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function (chunk, original) { - generated.code += chunk; - if (original.source !== null && original.line !== null && original.column !== null) { - if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length; idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - // Mappings end at eol - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function (sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - - return { code: generated.code, map: map }; - }; - - exports.SourceNode = SourceNode; -}); -System.registerDynamic("npm:source-map@0.5.6.json", [], true, function() { - return { - "main": "source-map.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:source-map@0.5.6/source-map.js', ['./lib/source-map-generator', './lib/source-map-consumer', './lib/source-node'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - /* - * Copyright 2009-2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE.txt or: - * http://opensource.org/licenses/BSD-3-Clause - */ - exports.SourceMapGenerator = $__require('./lib/source-map-generator').SourceMapGenerator; - exports.SourceMapConsumer = $__require('./lib/source-map-consumer').SourceMapConsumer; - exports.SourceNode = $__require('./lib/source-node').SourceNode; -}); -System.registerDynamic("npm:base64-js@1.2.1.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:base64-js@1.2.1/index.js', [], true, function ($__require, exports, module) { - 'use strict'; - - var global = this || self, - GLOBAL = global; - exports.byteLength = byteLength; - exports.toByteArray = toByteArray; - exports.fromByteArray = fromByteArray; - - var lookup = []; - var revLookup = []; - var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; - - var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i]; - revLookup[code.charCodeAt(i)] = i; - } - - revLookup['-'.charCodeAt(0)] = 62; - revLookup['_'.charCodeAt(0)] = 63; - - function placeHoldersCount(b64) { - var len = b64.length; - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4'); - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0; - } - - function byteLength(b64) { - // base64 is 4/3 + up to two characters of the original data - return b64.length * 3 / 4 - placeHoldersCount(b64); - } - - function toByteArray(b64) { - var i, l, tmp, placeHolders, arr; - var len = b64.length; - placeHolders = placeHoldersCount(b64); - - arr = new Arr(len * 3 / 4 - placeHolders); - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? len - 4 : len; - - var L = 0; - - for (i = 0; i < l; i += 4) { - tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)]; - arr[L++] = tmp >> 16 & 0xFF; - arr[L++] = tmp >> 8 & 0xFF; - arr[L++] = tmp & 0xFF; - } - - if (placeHolders === 2) { - tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4; - arr[L++] = tmp & 0xFF; - } else if (placeHolders === 1) { - tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2; - arr[L++] = tmp >> 8 & 0xFF; - arr[L++] = tmp & 0xFF; - } - - return arr; - } - - function tripletToBase64(num) { - return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]; - } - - function encodeChunk(uint8, start, end) { - var tmp; - var output = []; - for (var i = start; i < end; i += 3) { - tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + uint8[i + 2]; - output.push(tripletToBase64(tmp)); - } - return output.join(''); - } - - function fromByteArray(uint8) { - var tmp; - var len = uint8.length; - var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes - var output = ''; - var parts = []; - var maxChunkLength = 16383; // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength)); - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1]; - output += lookup[tmp >> 2]; - output += lookup[tmp << 4 & 0x3F]; - output += '=='; - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1]; - output += lookup[tmp >> 10]; - output += lookup[tmp >> 4 & 0x3F]; - output += lookup[tmp << 2 & 0x3F]; - output += '='; - } - - parts.push(output); - - return parts.join(''); - } -}); -System.registerDynamic("npm:ieee754@1.1.8.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - }, - "test/*": { - "globals": { - "Buffer": "buffer/global" - } - } - } - }; -}); - -System.registerDynamic("npm:ieee754@1.1.8/index.js", [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m; - var eLen = nBytes * 8 - mLen - 1; - var eMax = (1 << eLen) - 1; - var eBias = eMax >> 1; - var nBits = -7; - var i = isLE ? nBytes - 1 : 0; - var d = isLE ? -1 : 1; - var s = buffer[offset + i]; - - i += d; - - e = s & (1 << -nBits) - 1; - s >>= -nBits; - nBits += eLen; - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & (1 << -nBits) - 1; - e >>= -nBits; - nBits += mLen; - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias; - } else if (e === eMax) { - return m ? NaN : (s ? -1 : 1) * Infinity; - } else { - m = m + Math.pow(2, mLen); - e = e - eBias; - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen); - }; - - exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c; - var eLen = nBytes * 8 - mLen - 1; - var eMax = (1 << eLen) - 1; - var eBias = eMax >> 1; - var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; - var i = isLE ? 0 : nBytes - 1; - var d = isLE ? 1 : -1; - var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; - - value = Math.abs(value); - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0; - e = eMax; - } else { - e = Math.floor(Math.log(value) / Math.LN2); - if (value * (c = Math.pow(2, -e)) < 1) { - e--; - c *= 2; - } - if (e + eBias >= 1) { - value += rt / c; - } else { - value += rt * Math.pow(2, 1 - eBias); - } - if (value * c >= 2) { - e++; - c /= 2; - } - - if (e + eBias >= eMax) { - m = 0; - e = eMax; - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen); - e = e + eBias; - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); - e = 0; - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = e << mLen | m; - eLen += mLen; - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128; - }; -}); -System.registerDynamic("npm:buffer@5.0.7.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - }, - "test/node/*": { - "globals": { - "Buffer": "buffer/global" - } - } - } - }; -}); - -System.registerDynamic('npm:buffer@5.0.7/index.js', ['base64-js', 'ieee754'], true, function ($__require, exports, module) { - /*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ - /* eslint-disable no-proto */ - - 'use strict'; - - var global = this || self, - GLOBAL = global; - var base64 = $__require('base64-js'); - var ieee754 = $__require('ieee754'); - - exports.Buffer = Buffer; - exports.SlowBuffer = SlowBuffer; - exports.INSPECT_MAX_BYTES = 50; - - var K_MAX_LENGTH = 0x7fffffff; - exports.kMaxLength = K_MAX_LENGTH; - - /** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Print warning and recommend using `buffer` v4.x which has an Object - * implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * We report that the browser does not support typed arrays if the are not subclassable - * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` - * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support - * for __proto__ and has a buggy typed array implementation. - */ - Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport(); - - if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') { - console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'); - } - - function typedArraySupport() { - // Can typed array instances can be augmented? - try { - var arr = new Uint8Array(1); - arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { - return 42; - } }; - return arr.foo() === 42; - } catch (e) { - return false; - } - } - - function createBuffer(length) { - if (length > K_MAX_LENGTH) { - throw new RangeError('Invalid typed array length'); - } - // Return an augmented `Uint8Array` instance - var buf = new Uint8Array(length); - buf.__proto__ = Buffer.prototype; - return buf; - } - - /** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - - function Buffer(arg, encodingOrOffset, length) { - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new Error('If encoding is specified then the first argument must be a string'); - } - return allocUnsafe(arg); - } - return from(arg, encodingOrOffset, length); - } - - // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 - if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) { - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true, - enumerable: false, - writable: false - }); - } - - Buffer.poolSize = 8192; // not used by this implementation - - function from(value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number'); - } - - if (isArrayBuffer(value)) { - return fromArrayBuffer(value, encodingOrOffset, length); - } - - if (typeof value === 'string') { - return fromString(value, encodingOrOffset); - } - - return fromObject(value); - } - - /** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ - Buffer.from = function (value, encodingOrOffset, length) { - return from(value, encodingOrOffset, length); - }; - - // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: - // https://github.com/feross/buffer/pull/148 - Buffer.prototype.__proto__ = Uint8Array.prototype; - Buffer.__proto__ = Uint8Array; - - function assertSize(size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number'); - } else if (size < 0) { - throw new RangeError('"size" argument must not be negative'); - } - } - - function alloc(size, fill, encoding) { - assertSize(size); - if (size <= 0) { - return createBuffer(size); - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill); - } - return createBuffer(size); - } - - /** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ - Buffer.alloc = function (size, fill, encoding) { - return alloc(size, fill, encoding); - }; - - function allocUnsafe(size) { - assertSize(size); - return createBuffer(size < 0 ? 0 : checked(size) | 0); - } - - /** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ - Buffer.allocUnsafe = function (size) { - return allocUnsafe(size); - }; - /** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ - Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(size); - }; - - function fromString(string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8'; - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('"encoding" must be a valid string encoding'); - } - - var length = byteLength(string, encoding) | 0; - var buf = createBuffer(length); - - var actual = buf.write(string, encoding); - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - buf = buf.slice(0, actual); - } - - return buf; - } - - function fromArrayLike(array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0; - var buf = createBuffer(length); - for (var i = 0; i < length; i += 1) { - buf[i] = array[i] & 255; - } - return buf; - } - - function fromArrayBuffer(array, byteOffset, length) { - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('\'offset\' is out of bounds'); - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('\'length\' is out of bounds'); - } - - var buf; - if (byteOffset === undefined && length === undefined) { - buf = new Uint8Array(array); - } else if (length === undefined) { - buf = new Uint8Array(array, byteOffset); - } else { - buf = new Uint8Array(array, byteOffset, length); - } - - // Return an augmented `Uint8Array` instance - buf.__proto__ = Buffer.prototype; - return buf; - } - - function fromObject(obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0; - var buf = createBuffer(len); - - if (buf.length === 0) { - return buf; - } - - obj.copy(buf, 0, 0, len); - return buf; - } - - if (obj) { - if (isArrayBufferView(obj) || 'length' in obj) { - if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { - return createBuffer(0); - } - return fromArrayLike(obj); - } - - if (obj.type === 'Buffer' && Array.isArray(obj.data)) { - return fromArrayLike(obj.data); - } - } - - throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.'); - } - - function checked(length) { - // Note: cannot use `length < K_MAX_LENGTH` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= K_MAX_LENGTH) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes'); - } - return length | 0; - } - - function SlowBuffer(length) { - if (+length != length) { - // eslint-disable-line eqeqeq - length = 0; - } - return Buffer.alloc(+length); - } - - Buffer.isBuffer = function isBuffer(b) { - return b != null && b._isBuffer === true; - }; - - Buffer.compare = function compare(a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers'); - } - - if (a === b) return 0; - - var x = a.length; - var y = b.length; - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i]; - y = b[i]; - break; - } - } - - if (x < y) return -1; - if (y < x) return 1; - return 0; - }; - - Buffer.isEncoding = function isEncoding(encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true; - default: - return false; - } - }; - - Buffer.concat = function concat(list, length) { - if (!Array.isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers'); - } - - if (list.length === 0) { - return Buffer.alloc(0); - } - - var i; - if (length === undefined) { - length = 0; - for (i = 0; i < list.length; ++i) { - length += list[i].length; - } - } - - var buffer = Buffer.allocUnsafe(length); - var pos = 0; - for (i = 0; i < list.length; ++i) { - var buf = list[i]; - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers'); - } - buf.copy(buffer, pos); - pos += buf.length; - } - return buffer; - }; - - function byteLength(string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length; - } - if (isArrayBufferView(string) || isArrayBuffer(string)) { - return string.byteLength; - } - if (typeof string !== 'string') { - string = '' + string; - } - - var len = string.length; - if (len === 0) return 0; - - // Use a for loop to avoid recursion - var loweredCase = false; - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len; - case 'utf8': - case 'utf-8': - case undefined: - return utf8ToBytes(string).length; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2; - case 'hex': - return len >>> 1; - case 'base64': - return base64ToBytes(string).length; - default: - if (loweredCase) return utf8ToBytes(string).length; // assume utf8 - encoding = ('' + encoding).toLowerCase(); - loweredCase = true; - } - } - } - Buffer.byteLength = byteLength; - - function slowToString(encoding, start, end) { - var loweredCase = false; - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0; - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return ''; - } - - if (end === undefined || end > this.length) { - end = this.length; - } - - if (end <= 0) { - return ''; - } - - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0; - start >>>= 0; - - if (end <= start) { - return ''; - } - - if (!encoding) encoding = 'utf8'; - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end); - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end); - - case 'ascii': - return asciiSlice(this, start, end); - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end); - - case 'base64': - return base64Slice(this, start, end); - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end); - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); - encoding = (encoding + '').toLowerCase(); - loweredCase = true; - } - } - } - - // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) - // to detect a Buffer instance. It's not possible to use `instanceof Buffer` - // reliably in a browserify context because there could be multiple different - // copies of the 'buffer' package in use. This method works even for Buffer - // instances that were created from another copy of the `buffer` package. - // See: https://github.com/feross/buffer/issues/154 - Buffer.prototype._isBuffer = true; - - function swap(b, n, m) { - var i = b[n]; - b[n] = b[m]; - b[m] = i; - } - - Buffer.prototype.swap16 = function swap16() { - var len = this.length; - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits'); - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1); - } - return this; - }; - - Buffer.prototype.swap32 = function swap32() { - var len = this.length; - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits'); - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3); - swap(this, i + 1, i + 2); - } - return this; - }; - - Buffer.prototype.swap64 = function swap64() { - var len = this.length; - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits'); - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7); - swap(this, i + 1, i + 6); - swap(this, i + 2, i + 5); - swap(this, i + 3, i + 4); - } - return this; - }; - - Buffer.prototype.toString = function toString() { - var length = this.length; - if (length === 0) return ''; - if (arguments.length === 0) return utf8Slice(this, 0, length); - return slowToString.apply(this, arguments); - }; - - Buffer.prototype.equals = function equals(b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer'); - if (this === b) return true; - return Buffer.compare(this, b) === 0; - }; - - Buffer.prototype.inspect = function inspect() { - var str = ''; - var max = exports.INSPECT_MAX_BYTES; - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' '); - if (this.length > max) str += ' ... '; - } - return ''; - }; - - Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { - if (!Buffer.isBuffer(target)) { - throw new TypeError('Argument must be a Buffer'); - } - - if (start === undefined) { - start = 0; - } - if (end === undefined) { - end = target ? target.length : 0; - } - if (thisStart === undefined) { - thisStart = 0; - } - if (thisEnd === undefined) { - thisEnd = this.length; - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index'); - } - - if (thisStart >= thisEnd && start >= end) { - return 0; - } - if (thisStart >= thisEnd) { - return -1; - } - if (start >= end) { - return 1; - } - - start >>>= 0; - end >>>= 0; - thisStart >>>= 0; - thisEnd >>>= 0; - - if (this === target) return 0; - - var x = thisEnd - thisStart; - var y = end - start; - var len = Math.min(x, y); - - var thisCopy = this.slice(thisStart, thisEnd); - var targetCopy = target.slice(start, end); - - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i]; - y = targetCopy[i]; - break; - } - } - - if (x < y) return -1; - if (y < x) return 1; - return 0; - }; - - // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, - // OR the last index of `val` in `buffer` at offset <= `byteOffset`. - // - // Arguments: - // - buffer - a Buffer to search - // - val - a string, Buffer, or number - // - byteOffset - an index into `buffer`; will be clamped to an int32 - // - encoding - an optional encoding, relevant is val is a string - // - dir - true for indexOf, false for lastIndexOf - function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1; - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset; - byteOffset = 0; - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; - } - byteOffset = +byteOffset; // Coerce to Number. - if (numberIsNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : buffer.length - 1; - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset; - if (byteOffset >= buffer.length) { - if (dir) return -1;else byteOffset = buffer.length - 1; - } else if (byteOffset < 0) { - if (dir) byteOffset = 0;else return -1; - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding); - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1; - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir); - } else if (typeof val === 'number') { - val = val & 0xFF; // Search for a byte value [0-255] - if (typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset); - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset); - } - } - return arrayIndexOf(buffer, [val], byteOffset, encoding, dir); - } - - throw new TypeError('val must be string, number or Buffer'); - } - - function arrayIndexOf(arr, val, byteOffset, encoding, dir) { - var indexSize = 1; - var arrLength = arr.length; - var valLength = val.length; - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase(); - if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1; - } - indexSize = 2; - arrLength /= 2; - valLength /= 2; - byteOffset /= 2; - } - } - - function read(buf, i) { - if (indexSize === 1) { - return buf[i]; - } else { - return buf.readUInt16BE(i * indexSize); - } - } - - var i; - if (dir) { - var foundIndex = -1; - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i; - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize; - } else { - if (foundIndex !== -1) i -= i - foundIndex; - foundIndex = -1; - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; - for (i = byteOffset; i >= 0; i--) { - var found = true; - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false; - break; - } - } - if (found) return i; - } - } - - return -1; - } - - Buffer.prototype.includes = function includes(val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1; - }; - - Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true); - }; - - Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false); - }; - - function hexWrite(buf, string, offset, length) { - offset = Number(offset) || 0; - var remaining = buf.length - offset; - if (!length) { - length = remaining; - } else { - length = Number(length); - if (length > remaining) { - length = remaining; - } - } - - // must be an even number of digits - var strLen = string.length; - if (strLen % 2 !== 0) throw new TypeError('Invalid hex string'); - - if (length > strLen / 2) { - length = strLen / 2; - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16); - if (numberIsNaN(parsed)) return i; - buf[offset + i] = parsed; - } - return i; - } - - function utf8Write(buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); - } - - function asciiWrite(buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length); - } - - function latin1Write(buf, string, offset, length) { - return asciiWrite(buf, string, offset, length); - } - - function base64Write(buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length); - } - - function ucs2Write(buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); - } - - Buffer.prototype.write = function write(string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8'; - length = this.length; - offset = 0; - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset; - length = this.length; - offset = 0; - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset >>> 0; - if (isFinite(length)) { - length = length >>> 0; - if (encoding === undefined) encoding = 'utf8'; - } else { - encoding = length; - length = undefined; - } - } else { - throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported'); - } - - var remaining = this.length - offset; - if (length === undefined || length > remaining) length = remaining; - - if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds'); - } - - if (!encoding) encoding = 'utf8'; - - var loweredCase = false; - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length); - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length); - - case 'ascii': - return asciiWrite(this, string, offset, length); - - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length); - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length); - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length); - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); - encoding = ('' + encoding).toLowerCase(); - loweredCase = true; - } - } - }; - - Buffer.prototype.toJSON = function toJSON() { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - }; - }; - - function base64Slice(buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf); - } else { - return base64.fromByteArray(buf.slice(start, end)); - } - } - - function utf8Slice(buf, start, end) { - end = Math.min(buf.length, end); - var res = []; - - var i = start; - while (i < end) { - var firstByte = buf[i]; - var codePoint = null; - var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1; - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint; - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte; - } - break; - case 2: - secondByte = buf[i + 1]; - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F; - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint; - } - } - break; - case 3: - secondByte = buf[i + 1]; - thirdByte = buf[i + 2]; - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F; - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint; - } - } - break; - case 4: - secondByte = buf[i + 1]; - thirdByte = buf[i + 2]; - fourthByte = buf[i + 3]; - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F; - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint; - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD; - bytesPerSequence = 1; - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000; - res.push(codePoint >>> 10 & 0x3FF | 0xD800); - codePoint = 0xDC00 | codePoint & 0x3FF; - } - - res.push(codePoint); - i += bytesPerSequence; - } - - return decodeCodePointsArray(res); - } - - // Based on http://stackoverflow.com/a/22747272/680742, the browser with - // the lowest limit is Chrome, with 0x10000 args. - // We go 1 magnitude less, for safety - var MAX_ARGUMENTS_LENGTH = 0x1000; - - function decodeCodePointsArray(codePoints) { - var len = codePoints.length; - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints); // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = ''; - var i = 0; - while (i < len) { - res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)); - } - return res; - } - - function asciiSlice(buf, start, end) { - var ret = ''; - end = Math.min(buf.length, end); - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F); - } - return ret; - } - - function latin1Slice(buf, start, end) { - var ret = ''; - end = Math.min(buf.length, end); - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]); - } - return ret; - } - - function hexSlice(buf, start, end) { - var len = buf.length; - - if (!start || start < 0) start = 0; - if (!end || end < 0 || end > len) end = len; - - var out = ''; - for (var i = start; i < end; ++i) { - out += toHex(buf[i]); - } - return out; - } - - function utf16leSlice(buf, start, end) { - var bytes = buf.slice(start, end); - var res = ''; - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); - } - return res; - } - - Buffer.prototype.slice = function slice(start, end) { - var len = this.length; - start = ~~start; - end = end === undefined ? len : ~~end; - - if (start < 0) { - start += len; - if (start < 0) start = 0; - } else if (start > len) { - start = len; - } - - if (end < 0) { - end += len; - if (end < 0) end = 0; - } else if (end > len) { - end = len; - } - - if (end < start) end = start; - - var newBuf = this.subarray(start, end); - // Return an augmented `Uint8Array` instance - newBuf.__proto__ = Buffer.prototype; - return newBuf; - }; - - /* - * Need to make sure that buffer isn't trying to write out of bounds. - */ - function checkOffset(offset, ext, length) { - if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint'); - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length'); - } - - Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) { - offset = offset >>> 0; - byteLength = byteLength >>> 0; - if (!noAssert) checkOffset(offset, byteLength, this.length); - - var val = this[offset]; - var mul = 1; - var i = 0; - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul; - } - - return val; - }; - - Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) { - offset = offset >>> 0; - byteLength = byteLength >>> 0; - if (!noAssert) { - checkOffset(offset, byteLength, this.length); - } - - var val = this[offset + --byteLength]; - var mul = 1; - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul; - } - - return val; - }; - - Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 1, this.length); - return this[offset]; - }; - - Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 2, this.length); - return this[offset] | this[offset + 1] << 8; - }; - - Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 2, this.length); - return this[offset] << 8 | this[offset + 1]; - }; - - Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 4, this.length); - - return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000; - }; - - Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 4, this.length); - - return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); - }; - - Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) { - offset = offset >>> 0; - byteLength = byteLength >>> 0; - if (!noAssert) checkOffset(offset, byteLength, this.length); - - var val = this[offset]; - var mul = 1; - var i = 0; - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul; - } - mul *= 0x80; - - if (val >= mul) val -= Math.pow(2, 8 * byteLength); - - return val; - }; - - Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) { - offset = offset >>> 0; - byteLength = byteLength >>> 0; - if (!noAssert) checkOffset(offset, byteLength, this.length); - - var i = byteLength; - var mul = 1; - var val = this[offset + --i]; - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul; - } - mul *= 0x80; - - if (val >= mul) val -= Math.pow(2, 8 * byteLength); - - return val; - }; - - Buffer.prototype.readInt8 = function readInt8(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 1, this.length); - if (!(this[offset] & 0x80)) return this[offset]; - return (0xff - this[offset] + 1) * -1; - }; - - Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 2, this.length); - var val = this[offset] | this[offset + 1] << 8; - return val & 0x8000 ? val | 0xFFFF0000 : val; - }; - - Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 2, this.length); - var val = this[offset + 1] | this[offset] << 8; - return val & 0x8000 ? val | 0xFFFF0000 : val; - }; - - Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 4, this.length); - - return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; - }; - - Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 4, this.length); - - return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; - }; - - Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 4, this.length); - return ieee754.read(this, offset, true, 23, 4); - }; - - Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 4, this.length); - return ieee754.read(this, offset, false, 23, 4); - }; - - Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 8, this.length); - return ieee754.read(this, offset, true, 52, 8); - }; - - Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) checkOffset(offset, 8, this.length); - return ieee754.read(this, offset, false, 52, 8); - }; - - function checkInt(buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds'); - if (offset + ext > buf.length) throw new RangeError('Index out of range'); - } - - Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) { - value = +value; - offset = offset >>> 0; - byteLength = byteLength >>> 0; - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1; - checkInt(this, value, offset, byteLength, maxBytes, 0); - } - - var mul = 1; - var i = 0; - this[offset] = value & 0xFF; - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = value / mul & 0xFF; - } - - return offset + byteLength; - }; - - Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) { - value = +value; - offset = offset >>> 0; - byteLength = byteLength >>> 0; - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1; - checkInt(this, value, offset, byteLength, maxBytes, 0); - } - - var i = byteLength - 1; - var mul = 1; - this[offset + i] = value & 0xFF; - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = value / mul & 0xFF; - } - - return offset + byteLength; - }; - - Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0); - this[offset] = value & 0xff; - return offset + 1; - }; - - Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); - this[offset] = value & 0xff; - this[offset + 1] = value >>> 8; - return offset + 2; - }; - - Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); - this[offset] = value >>> 8; - this[offset + 1] = value & 0xff; - return offset + 2; - }; - - Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); - this[offset + 3] = value >>> 24; - this[offset + 2] = value >>> 16; - this[offset + 1] = value >>> 8; - this[offset] = value & 0xff; - return offset + 4; - }; - - Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); - this[offset] = value >>> 24; - this[offset + 1] = value >>> 16; - this[offset + 2] = value >>> 8; - this[offset + 3] = value & 0xff; - return offset + 4; - }; - - Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1); - - checkInt(this, value, offset, byteLength, limit - 1, -limit); - } - - var i = 0; - var mul = 1; - var sub = 0; - this[offset] = value & 0xFF; - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1; - } - this[offset + i] = (value / mul >> 0) - sub & 0xFF; - } - - return offset + byteLength; - }; - - Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1); - - checkInt(this, value, offset, byteLength, limit - 1, -limit); - } - - var i = byteLength - 1; - var mul = 1; - var sub = 0; - this[offset + i] = value & 0xFF; - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1; - } - this[offset + i] = (value / mul >> 0) - sub & 0xFF; - } - - return offset + byteLength; - }; - - Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); - if (value < 0) value = 0xff + value + 1; - this[offset] = value & 0xff; - return offset + 1; - }; - - Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); - this[offset] = value & 0xff; - this[offset + 1] = value >>> 8; - return offset + 2; - }; - - Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); - this[offset] = value >>> 8; - this[offset + 1] = value & 0xff; - return offset + 2; - }; - - Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); - this[offset] = value & 0xff; - this[offset + 1] = value >>> 8; - this[offset + 2] = value >>> 16; - this[offset + 3] = value >>> 24; - return offset + 4; - }; - - Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); - if (value < 0) value = 0xffffffff + value + 1; - this[offset] = value >>> 24; - this[offset + 1] = value >>> 16; - this[offset + 2] = value >>> 8; - this[offset + 3] = value & 0xff; - return offset + 4; - }; - - function checkIEEE754(buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range'); - if (offset < 0) throw new RangeError('Index out of range'); - } - - function writeFloat(buf, value, offset, littleEndian, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38); - } - ieee754.write(buf, value, offset, littleEndian, 23, 4); - return offset + 4; - } - - Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert); - }; - - Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert); - }; - - function writeDouble(buf, value, offset, littleEndian, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308); - } - ieee754.write(buf, value, offset, littleEndian, 52, 8); - return offset + 8; - } - - Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert); - }; - - Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert); - }; - - // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) - Buffer.prototype.copy = function copy(target, targetStart, start, end) { - if (!start) start = 0; - if (!end && end !== 0) end = this.length; - if (targetStart >= target.length) targetStart = target.length; - if (!targetStart) targetStart = 0; - if (end > 0 && end < start) end = start; - - // Copy 0 bytes; we're done - if (end === start) return 0; - if (target.length === 0 || this.length === 0) return 0; - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds'); - } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds'); - if (end < 0) throw new RangeError('sourceEnd out of bounds'); - - // Are we oob? - if (end > this.length) end = this.length; - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start; - } - - var len = end - start; - var i; - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start]; - } - } else if (len < 1000) { - // ascending copy from start - for (i = 0; i < len; ++i) { - target[i + targetStart] = this[i + start]; - } - } else { - Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart); - } - - return len; - }; - - // Usage: - // buffer.fill(number[, offset[, end]]) - // buffer.fill(buffer[, offset[, end]]) - // buffer.fill(string[, offset[, end]][, encoding]) - Buffer.prototype.fill = function fill(val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start; - start = 0; - end = this.length; - } else if (typeof end === 'string') { - encoding = end; - end = this.length; - } - if (val.length === 1) { - var code = val.charCodeAt(0); - if (code < 256) { - val = code; - } - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string'); - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding); - } - } else if (typeof val === 'number') { - val = val & 255; - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index'); - } - - if (end <= start) { - return this; - } - - start = start >>> 0; - end = end === undefined ? this.length : end >>> 0; - - if (!val) val = 0; - - var i; - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val; - } - } else { - var bytes = Buffer.isBuffer(val) ? val : new Buffer(val, encoding); - var len = bytes.length; - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len]; - } - } - - return this; - }; - - // HELPER FUNCTIONS - // ================ - - var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g; - - function base64clean(str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = str.trim().replace(INVALID_BASE64_RE, ''); - // Node converts strings with length < 2 to '' - if (str.length < 2) return ''; - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '='; - } - return str; - } - - function toHex(n) { - if (n < 16) return '0' + n.toString(16); - return n.toString(16); - } - - function utf8ToBytes(string, units) { - units = units || Infinity; - var codePoint; - var length = string.length; - var leadSurrogate = null; - var bytes = []; - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i); - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); - continue; - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); - continue; - } - - // valid lead - leadSurrogate = codePoint; - - continue; - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); - leadSurrogate = codePoint; - continue; - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); - } - - leadSurrogate = null; - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break; - bytes.push(codePoint); - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break; - bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80); - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break; - bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break; - bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); - } else { - throw new Error('Invalid code point'); - } - } - - return bytes; - } - - function asciiToBytes(str) { - var byteArray = []; - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF); - } - return byteArray; - } - - function utf16leToBytes(str, units) { - var c, hi, lo; - var byteArray = []; - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break; - - c = str.charCodeAt(i); - hi = c >> 8; - lo = c % 256; - byteArray.push(lo); - byteArray.push(hi); - } - - return byteArray; - } - - function base64ToBytes(str) { - return base64.toByteArray(base64clean(str)); - } - - function blitBuffer(src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if (i + offset >= dst.length || i >= src.length) break; - dst[i + offset] = src[i]; - } - return i; - } - - // ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check - // but they should be treated as valid. See: https://github.com/feross/buffer/issues/166 - function isArrayBuffer(obj) { - return obj instanceof ArrayBuffer || obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' && typeof obj.byteLength === 'number'; - } - - // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView` - function isArrayBufferView(obj) { - return typeof ArrayBuffer.isView === 'function' && ArrayBuffer.isView(obj); - } - - function numberIsNaN(obj) { - return obj !== obj; // eslint-disable-line no-self-compare - } -}); -System.registerDynamic("npm:jspm-nodelibs-buffer@0.2.3.json", [], true, function() { - return { - "main": "buffer.js", - "map": { - "./buffer.js": { - "browser": "buffer" - } - } - }; -}); - -System.registerDynamic('npm:jspm-nodelibs-buffer@0.2.3/global.js', ['./buffer.js'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - module.exports = $__require('./buffer.js').Buffer; -}); -System.registerDynamic("npm:postcss@6.0.8/lib/previous-map.js", ["source-map", "path", "fs", "process", "buffer/global"], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require("process"), Buffer = $__require("buffer/global"); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - - var _sourceMap = $__require('source-map'); - - var _sourceMap2 = _interopRequireDefault(_sourceMap); - - var _path = $__require('path'); - - var _path2 = _interopRequireDefault(_path); - - var _fs = $__require('fs'); - - var _fs2 = _interopRequireDefault(_fs); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function fromBase64(str) { - if (Buffer) { - if (Buffer.from && Buffer.from !== Uint8Array.from) { - return Buffer.from(str, 'base64').toString(); - } else { - return new Buffer(str, 'base64').toString(); - } - } else { - return window.atob(str); - } - } - - /** - * Source map information from input CSS. - * For example, source map after Sass compiler. - * - * This class will automatically find source map in input CSS or in file system - * near input file (according `from` option). - * - * @example - * const root = postcss.parse(css, { from: 'a.sass.css' }); - * root.input.map //=> PreviousMap - */ - - var PreviousMap = function () { - - /** - * @param {string} css - input CSS source - * @param {processOptions} [opts] - {@link Processor#process} options - */ - function PreviousMap(css, opts) { - _classCallCheck(this, PreviousMap); - - this.loadAnnotation(css); - /** - * @member {boolean} - Was source map inlined by data-uri to input CSS. - */ - this.inline = this.startWith(this.annotation, 'data:'); - - var prev = opts.map ? opts.map.prev : undefined; - var text = this.loadMap(opts.from, prev); - if (text) this.text = text; - } - - /** - * Create a instance of `SourceMapGenerator` class - * from the `source-map` library to work with source map information. - * - * It is lazy method, so it will create object only on first call - * and then it will use cache. - * - * @return {SourceMapGenerator} object with source map information - */ - - PreviousMap.prototype.consumer = function consumer() { - if (!this.consumerCache) { - this.consumerCache = new _sourceMap2.default.SourceMapConsumer(this.text); - } - return this.consumerCache; - }; - - /** - * Does source map contains `sourcesContent` with input source text. - * - * @return {boolean} Is `sourcesContent` present - */ - - PreviousMap.prototype.withContent = function withContent() { - return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0); - }; - - PreviousMap.prototype.startWith = function startWith(string, start) { - if (!string) return false; - return string.substr(0, start.length) === start; - }; - - PreviousMap.prototype.loadAnnotation = function loadAnnotation(css) { - var match = css.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//); - if (match) this.annotation = match[1].trim(); - }; - - PreviousMap.prototype.decodeInline = function decodeInline(text) { - // data:application/json;charset=utf-8;base64, - // data:application/json;charset=utf8;base64, - // data:application/json;base64, - var baseUri = /^data:application\/json;(?:charset=utf-?8;)?base64,/; - var uri = 'data:application/json,'; - - if (this.startWith(text, uri)) { - return decodeURIComponent(text.substr(uri.length)); - } else if (baseUri.test(text)) { - return fromBase64(text.substr(RegExp.lastMatch.length)); - } else { - var encoding = text.match(/data:application\/json;([^,]+),/)[1]; - throw new Error('Unsupported source map encoding ' + encoding); - } - }; - - PreviousMap.prototype.loadMap = function loadMap(file, prev) { - if (prev === false) return false; - - if (prev) { - if (typeof prev === 'string') { - return prev; - } else if (typeof prev === 'function') { - var prevPath = prev(file); - if (prevPath && _fs2.default.existsSync && _fs2.default.existsSync(prevPath)) { - return _fs2.default.readFileSync(prevPath, 'utf-8').toString().trim(); - } else { - throw new Error('Unable to load previous source map: ' + prevPath.toString()); - } - } else if (prev instanceof _sourceMap2.default.SourceMapConsumer) { - return _sourceMap2.default.SourceMapGenerator.fromSourceMap(prev).toString(); - } else if (prev instanceof _sourceMap2.default.SourceMapGenerator) { - return prev.toString(); - } else if (this.isMap(prev)) { - return JSON.stringify(prev); - } else { - throw new Error('Unsupported previous source map format: ' + prev.toString()); - } - } else if (this.inline) { - return this.decodeInline(this.annotation); - } else if (this.annotation) { - var map = this.annotation; - if (file) map = _path2.default.join(_path2.default.dirname(file), map); - - this.root = _path2.default.dirname(map); - if (_fs2.default.existsSync && _fs2.default.existsSync(map)) { - return _fs2.default.readFileSync(map, 'utf-8').toString().trim(); - } else { - return false; - } - } - }; - - PreviousMap.prototype.isMap = function isMap(map) { - if ((typeof map === 'undefined' ? 'undefined' : _typeof(map)) !== 'object') return false; - return typeof map.mappings === 'string' || typeof map._mappings === 'string'; - }; - - return PreviousMap; - }(); - - exports.default = PreviousMap; - module.exports = exports['default']; -}); -System.registerDynamic("npm:jspm-nodelibs-path@0.2.3.json", [], true, function() { - return { - "main": "./path.js" - }; -}); - -System.registerDynamic('npm:jspm-nodelibs-path@0.2.3/path.js', ['process'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - // Copyright Joyent, Inc. and other Node contributors. - // - // Permission is hereby granted, free of charge, to any person obtaining a - // copy of this software and associated documentation files (the - // "Software"), to deal in the Software without restriction, including - // without limitation the rights to use, copy, modify, merge, publish, - // distribute, sublicense, and/or sell copies of the Software, and to permit - // persons to whom the Software is furnished to do so, subject to the - // following conditions: - // - // The above copyright notice and this permission notice shall be included - // in all copies or substantial portions of the Software. - // - // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN - // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - // resolves . and .. elements in a path array with directory names there - // must be no slashes, empty elements, or device names (c:\) in the array - // (so also no leading and trailing slashes - it does not distinguish - // relative and absolute paths) - var process = $__require('process'); - - function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - - return parts; - } - - // Split a filename into [root, dir, basename, ext], unix version - // 'root' is just a slash, or nothing. - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - var splitPath = function (filename) { - return splitPathRe.exec(filename).slice(1); - }; - - // path.resolve([from ...], to) - // posix version - exports.resolve = function () { - var resolvedPath = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = i >= 0 ? arguments[i] : process.cwd(); - - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) { - return !!p; - }), !resolvedAbsolute).join('/'); - - return (resolvedAbsolute ? '/' : '') + resolvedPath || '.'; - }; - - // path.normalize(path) - // posix version - exports.normalize = function (path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; - - // Normalize the path - path = normalizeArray(filter(path.split('/'), function (p) { - return !!p; - }), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; - }; - - // posix version - exports.isAbsolute = function (path) { - return path.charAt(0) === '/'; - }; - - // posix version - exports.join = function () { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function (p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); - }; - - // path.relative(from, to) - // posix version - exports.relative = function (from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); - }; - - exports.sep = '/'; - exports.delimiter = ':'; - - exports.dirname = function (path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; - }; - - exports.basename = function (path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; - }; - - exports.extname = function (path) { - return splitPath(path)[3]; - }; - - function filter(xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; - } - - // String.prototype.substr - negative index don't work in IE8 - var substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) { - return str.substr(start, len); - } : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - }; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/input.js', ['./css-syntax-error', './previous-map', 'path', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor); - } - }return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; - }; - }(); - - var _cssSyntaxError = $__require('./css-syntax-error'); - - var _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError); - - var _previousMap = $__require('./previous-map'); - - var _previousMap2 = _interopRequireDefault(_previousMap); - - var _path = $__require('path'); - - var _path2 = _interopRequireDefault(_path); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var sequence = 0; - - /** - * Represents the source CSS. - * - * @example - * const root = postcss.parse(css, { from: file }); - * const input = root.source.input; - */ - - var Input = function () { - - /** - * @param {string} css - input CSS source - * @param {object} [opts] - {@link Processor#process} options - */ - function Input(css) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, Input); - - /** - * @member {string} - input CSS source - * - * @example - * const input = postcss.parse('a{}', { from: file }).input; - * input.css //=> "a{}"; - */ - this.css = css.toString(); - - if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') { - this.css = this.css.slice(1); - } - - if (opts.from) { - if (/^\w+:\/\//.test(opts.from)) { - /** - * @member {string} - The absolute path to the CSS source file - * defined with the `from` option. - * - * @example - * const root = postcss.parse(css, { from: 'a.css' }); - * root.source.input.file //=> '/home/ai/a.css' - */ - this.file = opts.from; - } else { - this.file = _path2.default.resolve(opts.from); - } - } - - var map = new _previousMap2.default(this.css, opts); - if (map.text) { - /** - * @member {PreviousMap} - The input source map passed from - * a compilation step before PostCSS - * (for example, from Sass compiler). - * - * @example - * root.source.input.map.consumer().sources //=> ['a.sass'] - */ - this.map = map; - var file = map.consumer().file; - if (!this.file && file) this.file = this.mapResolve(file); - } - - if (!this.file) { - sequence += 1; - /** - * @member {string} - The unique ID of the CSS source. It will be - * created if `from` option is not provided - * (because PostCSS does not know the file path). - * - * @example - * const root = postcss.parse(css); - * root.source.input.file //=> undefined - * root.source.input.id //=> "" - */ - this.id = ''; - } - if (this.map) this.map.file = this.from; - } - - Input.prototype.error = function error(message, line, column) { - var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - - var result = void 0; - var origin = this.origin(line, column); - if (origin) { - result = new _cssSyntaxError2.default(message, origin.line, origin.column, origin.source, origin.file, opts.plugin); - } else { - result = new _cssSyntaxError2.default(message, line, column, this.css, this.file, opts.plugin); - } - - result.input = { line: line, column: column, source: this.css }; - if (this.file) result.input.file = this.file; - - return result; - }; - - /** - * Reads the input source map and returns a symbol position - * in the input source (e.g., in a Sass file that was compiled - * to CSS before being passed to PostCSS). - * - * @param {number} line - line in input CSS - * @param {number} column - column in input CSS - * - * @return {filePosition} position in input source - * - * @example - * root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 } - */ - - Input.prototype.origin = function origin(line, column) { - if (!this.map) return false; - var consumer = this.map.consumer(); - - var from = consumer.originalPositionFor({ line: line, column: column }); - if (!from.source) return false; - - var result = { - file: this.mapResolve(from.source), - line: from.line, - column: from.column - }; - - var source = consumer.sourceContentFor(from.source); - if (source) result.source = source; - - return result; - }; - - Input.prototype.mapResolve = function mapResolve(file) { - if (/^\w+:\/\//.test(file)) { - return file; - } else { - return _path2.default.resolve(this.map.consumer().sourceRoot || '.', file); - } - }; - - /** - * The CSS source identifier. Contains {@link Input#file} if the user - * set the `from` option, or {@link Input#id} if they did not. - * @type {string} - * - * @example - * const root = postcss.parse(css, { from: 'a.css' }); - * root.source.input.from //=> "/home/ai/a.css" - * - * const root = postcss.parse(css); - * root.source.input.from //=> "" - */ - - _createClass(Input, [{ - key: 'from', - get: function get() { - return this.file || this.id; - } - }]); - - return Input; - }(); - - exports.default = Input; - - /** - * @typedef {object} filePosition - * @property {string} file - path to file - * @property {number} line - source line in file - * @property {number} column - source column in file - */ - - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/parse.js', ['./parser', './input', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - exports.default = parse; - - var _parser = $__require('./parser'); - - var _parser2 = _interopRequireDefault(_parser); - - var _input = $__require('./input'); - - var _input2 = _interopRequireDefault(_input); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function parse(css, opts) { - if (opts && opts.safe) { - throw new Error('Option safe was removed. ' + 'Use parser: require("postcss-safe-parser")'); - } - - var input = new _input2.default(css, opts); - var parser = new _parser2.default(input); - try { - parser.parse(); - } catch (e) { - if (e.name === 'CssSyntaxError' && opts && opts.from) { - if (/\.scss$/i.test(opts.from)) { - e.message += '\nYou tried to parse SCSS with ' + 'the standard CSS parser; ' + 'try again with the postcss-scss parser'; - } else if (/\.sass/i.test(opts.from)) { - e.message += '\nYou tried to parse Sass with ' + 'the standard CSS parser; ' + 'try again with the postcss-sass parser'; - } else if (/\.less$/i.test(opts.from)) { - e.message += '\nYou tried to parse Less with ' + 'the standard CSS parser; ' + 'try again with the postcss-less parser'; - } - } - throw e; - } - - return parser.root; - } - module.exports = exports['default']; -}); -System.registerDynamic("npm:postcss@6.0.8/lib/lazy-result.js", ["./map-generator", "./stringify", "./result", "./parse", "process"], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor); - } - }return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; - }; - }(); - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - - var _mapGenerator = $__require('./map-generator'); - - var _mapGenerator2 = _interopRequireDefault(_mapGenerator); - - var _stringify2 = $__require('./stringify'); - - var _stringify3 = _interopRequireDefault(_stringify2); - - var _result = $__require('./result'); - - var _result2 = _interopRequireDefault(_result); - - var _parse = $__require('./parse'); - - var _parse2 = _interopRequireDefault(_parse); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function isPromise(obj) { - return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.then === 'function'; - } - - /** - * A Promise proxy for the result of PostCSS transformations. - * - * A `LazyResult` instance is returned by {@link Processor#process}. - * - * @example - * const lazy = postcss([cssnext]).process(css); - */ - - var LazyResult = function () { - function LazyResult(processor, css, opts) { - _classCallCheck(this, LazyResult); - - this.stringified = false; - this.processed = false; - - var root = void 0; - if ((typeof css === 'undefined' ? 'undefined' : _typeof(css)) === 'object' && css.type === 'root') { - root = css; - } else if (css instanceof LazyResult || css instanceof _result2.default) { - root = css.root; - if (css.map) { - if (typeof opts.map === 'undefined') opts.map = {}; - if (!opts.map.inline) opts.map.inline = false; - opts.map.prev = css.map; - } - } else { - var parser = _parse2.default; - if (opts.syntax) parser = opts.syntax.parse; - if (opts.parser) parser = opts.parser; - if (parser.parse) parser = parser.parse; - - try { - root = parser(css, opts); - } catch (error) { - this.error = error; - } - } - - this.result = new _result2.default(processor, root, opts); - } - - /** - * Returns a {@link Processor} instance, which will be used - * for CSS transformations. - * @type {Processor} - */ - - /** - * Processes input CSS through synchronous plugins - * and calls {@link Result#warnings()}. - * - * @return {Warning[]} warnings from plugins - */ - LazyResult.prototype.warnings = function warnings() { - return this.sync().warnings(); - }; - - /** - * Alias for the {@link LazyResult#css} property. - * - * @example - * lazy + '' === lazy.css; - * - * @return {string} output CSS - */ - - LazyResult.prototype.toString = function toString() { - return this.css; - }; - - /** - * Processes input CSS through synchronous and asynchronous plugins - * and calls `onFulfilled` with a Result instance. If a plugin throws - * an error, the `onRejected` callback will be executed. - * - * It implements standard Promise API. - * - * @param {onFulfilled} onFulfilled - callback will be executed - * when all plugins will finish work - * @param {onRejected} onRejected - callback will be executed on any error - * - * @return {Promise} Promise API to make queue - * - * @example - * postcss([cssnext]).process(css).then(result => { - * console.log(result.css); - * }); - */ - - LazyResult.prototype.then = function then(onFulfilled, onRejected) { - return this.async().then(onFulfilled, onRejected); - }; - - /** - * Processes input CSS through synchronous and asynchronous plugins - * and calls onRejected for each error thrown in any plugin. - * - * It implements standard Promise API. - * - * @param {onRejected} onRejected - callback will be executed on any error - * - * @return {Promise} Promise API to make queue - * - * @example - * postcss([cssnext]).process(css).then(result => { - * console.log(result.css); - * }).catch(error => { - * console.error(error); - * }); - */ - - LazyResult.prototype.catch = function _catch(onRejected) { - return this.async().catch(onRejected); - }; - - LazyResult.prototype.handleError = function handleError(error, plugin) { - try { - this.error = error; - if (error.name === 'CssSyntaxError' && !error.plugin) { - error.plugin = plugin.postcssPlugin; - error.setMessage(); - } else if (plugin.postcssVersion) { - var pluginName = plugin.postcssPlugin; - var pluginVer = plugin.postcssVersion; - var runtimeVer = this.result.processor.version; - var a = pluginVer.split('.'); - var b = runtimeVer.split('.'); - - if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) { - console.error('Your current PostCSS version ' + 'is ' + runtimeVer + ', but ' + pluginName + ' ' + 'uses ' + pluginVer + '. Perhaps this is ' + 'the source of the error below.'); - } - } - } catch (err) { - if (console && console.error) console.error(err); - } - }; - - LazyResult.prototype.asyncTick = function asyncTick(resolve, reject) { - var _this = this; - - if (this.plugin >= this.processor.plugins.length) { - this.processed = true; - return resolve(); - } - - try { - var plugin = this.processor.plugins[this.plugin]; - var promise = this.run(plugin); - this.plugin += 1; - - if (isPromise(promise)) { - promise.then(function () { - _this.asyncTick(resolve, reject); - }).catch(function (error) { - _this.handleError(error, plugin); - _this.processed = true; - reject(error); - }); - } else { - this.asyncTick(resolve, reject); - } - } catch (error) { - this.processed = true; - reject(error); - } - }; - - LazyResult.prototype.async = function async() { - var _this2 = this; - - if (this.processed) { - return new Promise(function (resolve, reject) { - if (_this2.error) { - reject(_this2.error); - } else { - resolve(_this2.stringify()); - } - }); - } - if (this.processing) { - return this.processing; - } - - this.processing = new Promise(function (resolve, reject) { - if (_this2.error) return reject(_this2.error); - _this2.plugin = 0; - _this2.asyncTick(resolve, reject); - }).then(function () { - _this2.processed = true; - return _this2.stringify(); - }); - - return this.processing; - }; - - LazyResult.prototype.sync = function sync() { - if (this.processed) return this.result; - this.processed = true; - - if (this.processing) { - throw new Error('Use process(css).then(cb) to work with async plugins'); - } - - if (this.error) throw this.error; - - for (var _iterator = this.result.processor.plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var plugin = _ref; - - var promise = this.run(plugin); - if (isPromise(promise)) { - throw new Error('Use process(css).then(cb) to work with async plugins'); - } - } - - return this.result; - }; - - LazyResult.prototype.run = function run(plugin) { - this.result.lastPlugin = plugin; - - try { - return plugin(this.result.root, this.result); - } catch (error) { - this.handleError(error, plugin); - throw error; - } - }; - - LazyResult.prototype.stringify = function stringify() { - if (this.stringified) return this.result; - this.stringified = true; - - this.sync(); - - var opts = this.result.opts; - var str = _stringify3.default; - if (opts.syntax) str = opts.syntax.stringify; - if (opts.stringifier) str = opts.stringifier; - if (str.stringify) str = str.stringify; - - var map = new _mapGenerator2.default(str, this.result.root, this.result.opts); - var data = map.generate(); - this.result.css = data[0]; - this.result.map = data[1]; - - return this.result; - }; - - _createClass(LazyResult, [{ - key: 'processor', - get: function get() { - return this.result.processor; - } - - /** - * Options from the {@link Processor#process} call. - * @type {processOptions} - */ - - }, { - key: 'opts', - get: function get() { - return this.result.opts; - } - - /** - * Processes input CSS through synchronous plugins, converts `Root` - * to a CSS string and returns {@link Result#css}. - * - * This property will only work with synchronous plugins. - * If the processor contains any asynchronous plugins - * it will throw an error. This is why this method is only - * for debug purpose, you should always use {@link LazyResult#then}. - * - * @type {string} - * @see Result#css - */ - - }, { - key: 'css', - get: function get() { - return this.stringify().css; - } - - /** - * An alias for the `css` property. Use it with syntaxes - * that generate non-CSS output. - * - * This property will only work with synchronous plugins. - * If the processor contains any asynchronous plugins - * it will throw an error. This is why this method is only - * for debug purpose, you should always use {@link LazyResult#then}. - * - * @type {string} - * @see Result#content - */ - - }, { - key: 'content', - get: function get() { - return this.stringify().content; - } - - /** - * Processes input CSS through synchronous plugins - * and returns {@link Result#map}. - * - * This property will only work with synchronous plugins. - * If the processor contains any asynchronous plugins - * it will throw an error. This is why this method is only - * for debug purpose, you should always use {@link LazyResult#then}. - * - * @type {SourceMapGenerator} - * @see Result#map - */ - - }, { - key: 'map', - get: function get() { - return this.stringify().map; - } - - /** - * Processes input CSS through synchronous plugins - * and returns {@link Result#root}. - * - * This property will only work with synchronous plugins. If the processor - * contains any asynchronous plugins it will throw an error. - * - * This is why this method is only for debug purpose, - * you should always use {@link LazyResult#then}. - * - * @type {Root} - * @see Result#root - */ - - }, { - key: 'root', - get: function get() { - return this.sync().root; - } - - /** - * Processes input CSS through synchronous plugins - * and returns {@link Result#messages}. - * - * This property will only work with synchronous plugins. If the processor - * contains any asynchronous plugins it will throw an error. - * - * This is why this method is only for debug purpose, - * you should always use {@link LazyResult#then}. - * - * @type {Message[]} - * @see Result#messages - */ - - }, { - key: 'messages', - get: function get() { - return this.sync().messages; - } - }]); - - return LazyResult; - }(); - - exports.default = LazyResult; - - /** - * @callback onFulfilled - * @param {Result} result - */ - - /** - * @callback onRejected - * @param {Error} error - */ - - module.exports = exports['default']; -}); -System.registerDynamic("npm:postcss@6.0.8/lib/processor.js", ["./lazy-result", "process"], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - - var _lazyResult = $__require('./lazy-result'); - - var _lazyResult2 = _interopRequireDefault(_lazyResult); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - /** - * Contains plugins to process CSS. Create one `Processor` instance, - * initialize its plugins, and then use that instance on numerous CSS files. - * - * @example - * const processor = postcss([autoprefixer, precss]); - * processor.process(css1).then(result => console.log(result.css)); - * processor.process(css2).then(result => console.log(result.css)); - */ - var Processor = function () { - - /** - * @param {Array.|Processor} plugins - PostCSS - * plugins. See {@link Processor#use} for plugin format. - */ - function Processor() { - var plugins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - _classCallCheck(this, Processor); - - /** - * @member {string} - Current PostCSS version. - * - * @example - * if ( result.processor.version.split('.')[0] !== '6' ) { - * throw new Error('This plugin works only with PostCSS 6'); - * } - */ - this.version = '6.0.8'; - /** - * @member {pluginFunction[]} - Plugins added to this processor. - * - * @example - * const processor = postcss([autoprefixer, precss]); - * processor.plugins.length //=> 2 - */ - this.plugins = this.normalize(plugins); - } - - /** - * Adds a plugin to be used as a CSS processor. - * - * PostCSS plugin can be in 4 formats: - * * A plugin created by {@link postcss.plugin} method. - * * A function. PostCSS will pass the function a @{link Root} - * as the first argument and current {@link Result} instance - * as the second. - * * An object with a `postcss` method. PostCSS will use that method - * as described in #2. - * * Another {@link Processor} instance. PostCSS will copy plugins - * from that instance into this one. - * - * Plugins can also be added by passing them as arguments when creating - * a `postcss` instance (see [`postcss(plugins)`]). - * - * Asynchronous plugins should return a `Promise` instance. - * - * @param {Plugin|pluginFunction|Processor} plugin - PostCSS plugin - * or {@link Processor} - * with plugins - * - * @example - * const processor = postcss() - * .use(autoprefixer) - * .use(precss); - * - * @return {Processes} current processor to make methods chain - */ - - Processor.prototype.use = function use(plugin) { - this.plugins = this.plugins.concat(this.normalize([plugin])); - return this; - }; - - /** - * Parses source CSS and returns a {@link LazyResult} Promise proxy. - * Because some plugins can be asynchronous it doesn’t make - * any transformations. Transformations will be applied - * in the {@link LazyResult} methods. - * - * @param {string|toString|Result} css - String with input CSS or - * any object with a `toString()` - * method, like a Buffer. - * Optionally, send a {@link Result} - * instance and the processor will - * take the {@link Root} from it. - * @param {processOptions} [opts] - options - * - * @return {LazyResult} Promise proxy - * - * @example - * processor.process(css, { from: 'a.css', to: 'a.out.css' }) - * .then(result => { - * console.log(result.css); - * }); - */ - - Processor.prototype.process = function process(css) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - return new _lazyResult2.default(this, css, opts); - }; - - Processor.prototype.normalize = function normalize(plugins) { - var normalized = []; - for (var _iterator = plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var i = _ref; - - if (i.postcss) i = i.postcss; - - if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && Array.isArray(i.plugins)) { - normalized = normalized.concat(i.plugins); - } else if (typeof i === 'function') { - normalized.push(i); - } else if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && (i.parse || i.stringify)) { - throw new Error('PostCSS syntaxes cannot be used as plugins. ' + 'Instead, please use one of the ' + 'syntax/parser/stringifier options as ' + 'outlined in your PostCSS ' + 'runner documentation.'); - } else { - throw new Error(i + ' is not a PostCSS plugin'); - } - } - return normalized; - }; - - return Processor; - }(); - - exports.default = Processor; - - /** - * @callback builder - * @param {string} part - part of generated CSS connected to this node - * @param {Node} node - AST node - * @param {"start"|"end"} [type] - node’s part type - */ - - /** - * @callback parser - * - * @param {string|toString} css - string with input CSS or any object - * with toString() method, like a Buffer - * @param {processOptions} [opts] - options with only `from` and `map` keys - * - * @return {Root} PostCSS AST - */ - - /** - * @callback stringifier - * - * @param {Node} node - start node for stringifing. Usually {@link Root}. - * @param {builder} builder - function to concatenate CSS from node’s parts - * or generate string and source map - * - * @return {void} - */ - - /** - * @typedef {object} syntax - * @property {parser} parse - function to generate AST by string - * @property {stringifier} stringify - function to generate string by AST - */ - - /** - * @typedef {object} toString - * @property {function} toString - */ - - /** - * @callback pluginFunction - * @param {Root} root - parsed input CSS - * @param {Result} result - result to set warnings or check other plugins - */ - - /** - * @typedef {object} Plugin - * @property {function} postcss - PostCSS plugin function - */ - - /** - * @typedef {object} processOptions - * @property {string} from - the path of the CSS source file. - * You should always set `from`, - * because it is used in source map - * generation and syntax error messages. - * @property {string} to - the path where you’ll put the output - * CSS file. You should always set `to` - * to generate correct source maps. - * @property {parser} parser - function to generate AST by string - * @property {stringifier} stringifier - class to generate string by AST - * @property {syntax} syntax - object with `parse` and `stringify` - * @property {object} map - source map options - * @property {boolean} map.inline - does source map should - * be embedded in the output - * CSS as a base64-encoded - * comment - * @property {string|object|false|function} map.prev - source map content - * from a previous - * processing step - * (for example, Sass). - * PostCSS will try to find - * previous map - * automatically, so you - * could disable it by - * `false` value. - * @property {boolean} map.sourcesContent - does PostCSS should set - * the origin content to map - * @property {string|false} map.annotation - does PostCSS should set - * annotation comment to map - * @property {string} map.from - override `from` in map’s - * `sources` - */ - - module.exports = exports['default']; -}); -System.registerDynamic('npm:postcss@6.0.8/lib/root.js', ['./container', './lazy-result', './processor', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _container = $__require('./container'); - - var _container2 = _interopRequireDefault(_container); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _possibleConstructorReturn(self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - }return call && (typeof call === "object" || typeof call === "function") ? call : self; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - } - - /** - * Represents a CSS file and contains all its parsed nodes. - * - * @extends Container - * - * @example - * const root = postcss.parse('a{color:black} b{z-index:2}'); - * root.type //=> 'root' - * root.nodes.length //=> 2 - */ - var Root = function (_Container) { - _inherits(Root, _Container); - - function Root(defaults) { - _classCallCheck(this, Root); - - var _this = _possibleConstructorReturn(this, _Container.call(this, defaults)); - - _this.type = 'root'; - if (!_this.nodes) _this.nodes = []; - return _this; - } - - Root.prototype.removeChild = function removeChild(child, ignore) { - var index = this.index(child); - - if (!ignore && index === 0 && this.nodes.length > 1) { - this.nodes[1].raws.before = this.nodes[index].raws.before; - } - - return _Container.prototype.removeChild.call(this, child); - }; - - Root.prototype.normalize = function normalize(child, sample, type) { - var nodes = _Container.prototype.normalize.call(this, child); - - if (sample) { - if (type === 'prepend') { - if (this.nodes.length > 1) { - sample.raws.before = this.nodes[1].raws.before; - } else { - delete sample.raws.before; - } - } else if (this.first !== sample) { - for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var node = _ref; - - node.raws.before = sample.raws.before; - } - } - } - - return nodes; - }; - - /** - * Returns a {@link Result} instance representing the root’s CSS. - * - * @param {processOptions} [opts] - options with only `to` and `map` keys - * - * @return {Result} result with current root’s CSS - * - * @example - * const root1 = postcss.parse(css1, { from: 'a.css' }); - * const root2 = postcss.parse(css2, { from: 'b.css' }); - * root1.append(root2); - * const result = root1.toResult({ to: 'all.css', map: true }); - */ - - Root.prototype.toResult = function toResult() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var LazyResult = $__require('./lazy-result'); - var Processor = $__require('./processor'); - - var lazy = new LazyResult(new Processor(), this, opts); - return lazy.stringify(); - }; - - /** - * @memberof Root# - * @member {object} raws - Information to generate byte-to-byte equal - * node string as it was in the origin input. - * - * Every parser saves its own properties, - * but the default CSS parser uses: - * - * * `after`: the space symbols after the last child to the end of file. - * * `semicolon`: is the last child has an (optional) semicolon. - * - * @example - * postcss.parse('a {}\n').raws //=> { after: '\n' } - * postcss.parse('a {}').raws //=> { after: '' } - */ - - return Root; - }(_container2.default); - - exports.default = Root; - module.exports = exports['default']; -}); -System.registerDynamic("npm:postcss@6.0.8.json", [], true, function() { - return { - "main": "lib/postcss.js", - "format": "cjs", - "meta": { - "*": { - "globals": { - "process": "process" - } - }, - "*.json": { - "format": "json" - }, - "lib/map-generator.js": { - "globals": { - "Buffer": "buffer/global" - } - }, - "lib/previous-map.js": { - "globals": { - "Buffer": "buffer/global" - } - } - }, - "map": { - "fs": { - "browser": "@empty" - } - } - }; -}); - -System.registerDynamic('npm:postcss@6.0.8/lib/postcss.js', ['./declaration', './processor', './stringify', './comment', './at-rule', './vendor', './parse', './list', './rule', './root', 'process'], true, function ($__require, exports, module) { - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - exports.__esModule = true; - - var _declaration = $__require('./declaration'); - - var _declaration2 = _interopRequireDefault(_declaration); - - var _processor = $__require('./processor'); - - var _processor2 = _interopRequireDefault(_processor); - - var _stringify = $__require('./stringify'); - - var _stringify2 = _interopRequireDefault(_stringify); - - var _comment = $__require('./comment'); - - var _comment2 = _interopRequireDefault(_comment); - - var _atRule = $__require('./at-rule'); - - var _atRule2 = _interopRequireDefault(_atRule); - - var _vendor = $__require('./vendor'); - - var _vendor2 = _interopRequireDefault(_vendor); - - var _parse = $__require('./parse'); - - var _parse2 = _interopRequireDefault(_parse); - - var _list = $__require('./list'); - - var _list2 = _interopRequireDefault(_list); - - var _rule = $__require('./rule'); - - var _rule2 = _interopRequireDefault(_rule); - - var _root = $__require('./root'); - - var _root2 = _interopRequireDefault(_root); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - /** - * Create a new {@link Processor} instance that will apply `plugins` - * as CSS processors. - * - * @param {Array.|Processor} plugins - PostCSS - * plugins. See {@link Processor#use} for plugin format. - * - * @return {Processor} Processor to process multiple CSS - * - * @example - * import postcss from 'postcss'; - * - * postcss(plugins).process(css, { from, to }).then(result => { - * console.log(result.css); - * }); - * - * @namespace postcss - */ - function postcss() { - for (var _len = arguments.length, plugins = Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - - if (plugins.length === 1 && Array.isArray(plugins[0])) { - plugins = plugins[0]; - } - return new _processor2.default(plugins); - } - - /** - * Creates a PostCSS plugin with a standard API. - * - * The newly-wrapped function will provide both the name and PostCSS - * version of the plugin. - * - * ```js - * const processor = postcss([replace]); - * processor.plugins[0].postcssPlugin //=> 'postcss-replace' - * processor.plugins[0].postcssVersion //=> '5.1.0' - * ``` - * - * The plugin function receives 2 arguments: {@link Root} - * and {@link Result} instance. The function should mutate the provided - * `Root` node. Alternatively, you can create a new `Root` node - * and override the `result.root` property. - * - * ```js - * const cleaner = postcss.plugin('postcss-cleaner', () => { - * return (root, result) => { - * result.root = postcss.root(); - * }; - * }); - * ``` - * - * As a convenience, plugins also expose a `process` method so that you can use - * them as standalone tools. - * - * ```js - * cleaner.process(css, processOpts, pluginOpts); - * // This is equivalent to: - * postcss([ cleaner(pluginOpts) ]).process(css, processOpts); - * ``` - * - * Asynchronous plugins should return a `Promise` instance. - * - * ```js - * postcss.plugin('postcss-import', () => { - * return (root, result) => { - * return new Promise( (resolve, reject) => { - * fs.readFile('base.css', (base) => { - * root.prepend(base); - * resolve(); - * }); - * }); - * }; - * }); - * ``` - * - * Add warnings using the {@link Node#warn} method. - * Send data to other plugins using the {@link Result#messages} array. - * - * ```js - * postcss.plugin('postcss-caniuse-test', () => { - * return (root, result) => { - * css.walkDecls(decl => { - * if ( !caniuse.support(decl.prop) ) { - * decl.warn(result, 'Some browsers do not support ' + decl.prop); - * } - * }); - * }; - * }); - * ``` - * - * @param {string} name - PostCSS plugin name. Same as in `name` - * property in `package.json`. It will be saved - * in `plugin.postcssPlugin` property. - * @param {function} initializer - will receive plugin options - * and should return {@link pluginFunction} - * - * @return {Plugin} PostCSS plugin - */ - postcss.plugin = function plugin(name, initializer) { - var creator = function creator() { - var transformer = initializer.apply(undefined, arguments); - transformer.postcssPlugin = name; - transformer.postcssVersion = new _processor2.default().version; - return transformer; - }; - - var cache = void 0; - Object.defineProperty(creator, 'postcss', { - get: function get() { - if (!cache) cache = creator(); - return cache; - } - }); - - creator.process = function (css, processOpts, pluginOpts) { - return postcss([creator(pluginOpts)]).process(css, processOpts); - }; - - return creator; - }; - - /** - * Default function to convert a node tree into a CSS string. - * - * @param {Node} node - start node for stringifing. Usually {@link Root}. - * @param {builder} builder - function to concatenate CSS from node’s parts - * or generate string and source map - * - * @return {void} - * - * @function - */ - postcss.stringify = _stringify2.default; - - /** - * Parses source css and returns a new {@link Root} node, - * which contains the source CSS nodes. - * - * @param {string|toString} css - string with input CSS or any object - * with toString() method, like a Buffer - * @param {processOptions} [opts] - options with only `from` and `map` keys - * - * @return {Root} PostCSS AST - * - * @example - * // Simple CSS concatenation with source map support - * const root1 = postcss.parse(css1, { from: file1 }); - * const root2 = postcss.parse(css2, { from: file2 }); - * root1.append(root2).toResult().css; - * - * @function - */ - postcss.parse = _parse2.default; - - /** - * @member {vendor} - Contains the {@link vendor} module. - * - * @example - * postcss.vendor.unprefixed('-moz-tab') //=> ['tab'] - */ - postcss.vendor = _vendor2.default; - - /** - * @member {list} - Contains the {@link list} module. - * - * @example - * postcss.list.space('5px calc(10% + 5px)') //=> ['5px', 'calc(10% + 5px)'] - */ - postcss.list = _list2.default; - - /** - * Creates a new {@link Comment} node. - * - * @param {object} [defaults] - properties for the new node. - * - * @return {Comment} new Comment node - * - * @example - * postcss.comment({ text: 'test' }) - */ - postcss.comment = function (defaults) { - return new _comment2.default(defaults); - }; - - /** - * Creates a new {@link AtRule} node. - * - * @param {object} [defaults] - properties for the new node. - * - * @return {AtRule} new AtRule node - * - * @example - * postcss.atRule({ name: 'charset' }).toString() //=> "@charset" - */ - postcss.atRule = function (defaults) { - return new _atRule2.default(defaults); - }; - - /** - * Creates a new {@link Declaration} node. - * - * @param {object} [defaults] - properties for the new node. - * - * @return {Declaration} new Declaration node - * - * @example - * postcss.decl({ prop: 'color', value: 'red' }).toString() //=> "color: red" - */ - postcss.decl = function (defaults) { - return new _declaration2.default(defaults); - }; - - /** - * Creates a new {@link Rule} node. - * - * @param {object} [defaults] - properties for the new node. - * - * @return {Rule} new Rule node - * - * @example - * postcss.rule({ selector: 'a' }).toString() //=> "a {\n}" - */ - postcss.rule = function (defaults) { - return new _rule2.default(defaults); - }; - - /** - * Creates a new {@link Root} node. - * - * @param {object} [defaults] - properties for the new node. - * - * @return {Root} new Root node - * - * @example - * postcss.root({ after: '\n' }).toString() //=> "\n" - */ - postcss.root = function (defaults) { - return new _root2.default(defaults); - }; - - exports.default = postcss; - module.exports = exports['default']; -}); -System.registerDynamic("npm:extend@3.0.1.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:extend@3.0.1/index.js', [], true, function ($__require, exports, module) { - 'use strict'; - - var global = this || self, - GLOBAL = global; - var hasOwn = Object.prototype.hasOwnProperty; - var toStr = Object.prototype.toString; - - var isArray = function isArray(arr) { - if (typeof Array.isArray === 'function') { - return Array.isArray(arr); - } - - return toStr.call(arr) === '[object Array]'; - }; - - var isPlainObject = function isPlainObject(obj) { - if (!obj || toStr.call(obj) !== '[object Object]') { - return false; - } - - var hasOwnConstructor = hasOwn.call(obj, 'constructor'); - var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); - // Not own constructor property must be Object - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - var key; - for (key in obj) {/**/} - - return typeof key === 'undefined' || hasOwn.call(obj, key); - }; - - module.exports = function extend() { - var options, name, src, copy, copyIsArray, clone; - var target = arguments[0]; - var i = 1; - var length = arguments.length; - var deep = false; - - // Handle a deep copy situation - if (typeof target === 'boolean') { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - if (target == null || typeof target !== 'object' && typeof target !== 'function') { - target = {}; - } - - for (; i < length; ++i) { - options = arguments[i]; - // Only deal with non-null/undefined values - if (options != null) { - // Extend the base object - for (name in options) { - src = target[name]; - copy = options[name]; - - // Prevent never-ending loop - if (target !== copy) { - // Recurse if we're merging plain objects or arrays - if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { - if (copyIsArray) { - copyIsArray = false; - clone = src && isArray(src) ? src : []; - } else { - clone = src && isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[name] = extend(deep, clone, copy); - - // Don't bring in undefined values - } else if (typeof copy !== 'undefined') { - target[name] = copy; - } - } - } - } - } - - // Return the modified object - return target; - }; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/resolve-value.js', ['./generate-scope-list', './is-node-under-scope', './gather-variable-dependencies', './find-node-ancestor-with-selector', './clone-splice-parent-onto-node-when'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - var generateScopeList = $__require('./generate-scope-list'); - var isNodeUnderScope = $__require('./is-node-under-scope'); - var gatherVariableDependencies = $__require('./gather-variable-dependencies'); - - var findNodeAncestorWithSelector = $__require('./find-node-ancestor-with-selector'); - var cloneSpliceParentOntoNodeWhen = $__require('./clone-splice-parent-onto-node-when'); - - // var() = var( [, ]? ) - // matches `name[, fallback]`, captures "name" and "fallback" - // See: http://dev.w3.org/csswg/css-variables/#funcdef-var - var RE_VAR_FUNC = /var\((--[^,\s]+?)(?:\s*,\s*(.+))?\)/; - - // Pass in a value string to parse/resolve and a map of available values - // and we can figure out the final value - // - // `ignorePseudoScope`: Optional bool to determine whether the scope resolution should be left alone or not - // - // Note: We do not modify the declaration - // Note: Resolving a declaration value without any `var(...)` does not harm the final value. - // This means, feel free to run everything through this function - var resolveValue = function (decl, map, /*optional*/ignorePseudoScope, /*internal debugging*/_debugIsInternal) { - - var resultantValue = decl.value; - var warnings = []; - - var variablesUsedInValueMap = {}; - // Use `replace` as a loop to go over all occurrences with the `g` flag - resultantValue.replace(new RegExp(RE_VAR_FUNC.source, 'g'), function (match, variableName, fallback) { - variablesUsedInValueMap[variableName] = true; - }); - var variablesUsedInValue = Object.keys(variablesUsedInValueMap); - - // Resolve any var(...) substitutons - var isResultantValueUndefined = false; - resultantValue = resultantValue.replace(new RegExp(RE_VAR_FUNC.source, 'g'), function (match, variableName, fallback) { - // Loop through the list of declarations for that value and find the one that best matches - // By best match, we mean, the variable actually applies. Criteria: - // - is under the same scope - // - The latest defined `!important` if any - var matchingVarDeclMapItem; - (map[variableName] || []).forEach(function (varDeclMapItem) { - // Make sure the variable declaration came from the right spot - // And if the current matching variable is already important, a new one to replace it has to be important - var isRoot = varDeclMapItem.parent.type === 'root' || varDeclMapItem.parent.selectors[0] === ':root'; - - //var debugIndent = _debugIsInternal ? '\t' : ''; - //console.log(debugIndent, generateScopeList(decl.parent, true)); - //console.log(debugIndent, generateScopeList(varDeclMapItem.parent, true)); - //console.log(debugIndent, 'isNodeUnderScope', isNodeUnderScope(decl.parent, varDeclMapItem.parent), varDeclMapItem.decl.value); - - if (isNodeUnderScope(decl.parent, varDeclMapItem.parent, ignorePseudoScope) && ( - // And if the currently matched declaration is `!important`, it will take another `!important` to override it - !(matchingVarDeclMapItem || {}).isImportant || varDeclMapItem.isImportant)) { - matchingVarDeclMapItem = varDeclMapItem; - } - }); - - // Default to the calculatedInPlaceValue which might be a previous fallback, then try this declarations fallback - var replaceValue = (matchingVarDeclMapItem || {}).calculatedInPlaceValue || function () { - // Resolve `var` values in fallback - var fallbackValue = fallback; - if (fallback) { - var fallbackDecl = decl.clone({ parent: decl.parent, value: fallback }); - fallbackValue = resolveValue(fallbackDecl, map, false, true).value; - } - - return fallbackValue; - }(); - // Otherwise if the dependency health is good(no circular or self references), dive deeper and resolve - if (matchingVarDeclMapItem !== undefined && !gatherVariableDependencies(variablesUsedInValue, map).hasCircularOrSelfReference) { - // Splice the declaration parent onto the matching entry - - var varDeclScopeList = generateScopeList(decl.parent.parent, true); - var innerMostAtRuleSelector = varDeclScopeList[0].slice(-1)[0]; - var nodeToSpliceParentOnto = findNodeAncestorWithSelector(innerMostAtRuleSelector, matchingVarDeclMapItem.decl.parent); - // See: `test/fixtures/cascade-with-calc-expression-on-nested-rules` - var matchingMimicDecl = cloneSpliceParentOntoNodeWhen(matchingVarDeclMapItem.decl, decl.parent.parent, function (ancestor) { - return ancestor === nodeToSpliceParentOnto; - }); - - replaceValue = resolveValue(matchingMimicDecl, map, false, /*internal*/true).value; - } - - isResultantValueUndefined = replaceValue === undefined; - if (isResultantValueUndefined) { - warnings.push(['variable ' + variableName + ' is undefined and used without a fallback', { node: decl }]); - } - - return replaceValue; - }); - - return { - // The resolved value - value: !isResultantValueUndefined ? resultantValue : undefined, - // Array of variable names used in resolving this value - variablesUsed: variablesUsedInValue, - // Any warnings generated from parsing this value - warnings: warnings - }; - }; - - resolveValue.RE_VAR_FUNC = RE_VAR_FUNC; - - module.exports = resolveValue; -}); -System.registerDynamic("npm:postcss-css-variables@0.8.0/lib/gather-variable-dependencies.js", [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - // Variables that referenced in some way by the target variable - // - // `variablesUsed`: Array of string variable names that may be in the map - // - // Returns: `object` - // - `deps`: array of complete dependecies recursively gathered (entries from the `map`) - // - `hasCircularOrSelfReference`: bool of whether there is some circular or self reference of dependencies. - // - If true, the variable can't be deduced - var gatherVariableDependencies = function (variablesUsed, map, _dependencyVariablesList) { - _dependencyVariablesList = _dependencyVariablesList || []; - var hasCircularOrSelfReference = false; - - if (variablesUsed) { - _dependencyVariablesList = variablesUsed.reduce(function (dependencyVariablesList, variableUsedName) { - var isVariableInMap = !!map[variableUsedName]; - var doesThisVarHaveCircularOrSelfReference = !isVariableInMap ? false : dependencyVariablesList.some(function (dep) { - return map[variableUsedName].some(function (mapItem) { - // If already in the list, we got a circular reference - if (dep === mapItem) { - return true; - } - - return false; - }); - }); - // Update the overall state of dependency health - hasCircularOrSelfReference = hasCircularOrSelfReference || doesThisVarHaveCircularOrSelfReference; - - if (isVariableInMap && !hasCircularOrSelfReference) { - dependencyVariablesList = dependencyVariablesList.concat(map[variableUsedName]); - - (map[variableUsedName] || []).forEach(function (mapItem) { - var result = gatherVariableDependencies(mapItem.variablesUsed, map, dependencyVariablesList); - dependencyVariablesList = result.deps; - hasCircularOrSelfReference = hasCircularOrSelfReference || result.hasCircularOrSelfReference; - }); - } - - return dependencyVariablesList; - }, _dependencyVariablesList); - } - - return { - deps: _dependencyVariablesList, - hasCircularOrSelfReference: hasCircularOrSelfReference - }; - }; - - module.exports = gatherVariableDependencies; -}); -System.registerDynamic("npm:escape-string-regexp@1.0.5.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:escape-string-regexp@1.0.5/index.js', [], true, function ($__require, exports, module) { - 'use strict'; - - var global = this || self, - GLOBAL = global; - var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; - - module.exports = function (str) { - if (typeof str !== 'string') { - throw new TypeError('Expected a string'); - } - - return str.replace(matchOperatorsRe, '\\$&'); - }; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/is-piece-always-ancestor-selector.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - var alwaysAncestorSelector = { - '*': true, - ':root': true, - 'html': true - }; - - // This means it will be always be an ancestor of any other selector - var isPieceIsAlwaysAncestorSelector = function (piece) { - return !!alwaysAncestorSelector[piece]; - }; - - module.exports = isPieceIsAlwaysAncestorSelector; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/generate-direct-descendant-pieces-from-selector.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - // Unit Tests: https://regex101.com/r/oS4zJ8/3 - - var RE_SELECTOR_DIRECT_DESCENDANT_SPLIT = /(.*?(?:(?:\([^\)]+\)|\[[^\]]+\]|(?!>>|<|\+|~|\s).)+)(?:(?:(?:>(?!>))|(?:\s?>(?!>)\s?))(?!\s+))(?!(?:>>|<|\+|~)[\s]+?))/; - - var generateDirectDescendantPiecesFromSelector = function (selector) { - return selector.split(RE_SELECTOR_DIRECT_DESCENDANT_SPLIT).filter(function (piece) { - if (piece.length > 0) { - return true; - } - return false; - }).map(function (piece) { - // Trim whitespace which would be a normal descendant selector - // and trim off the CSS4 descendant `>>` into a normal descendant selector - return piece.trim().replace(/\s*?>\s*?/g, ''); - }); - }; - - module.exports = generateDirectDescendantPiecesFromSelector; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/is-under-scope.js', ['escape-string-regexp', './is-piece-always-ancestor-selector', './generate-direct-descendant-pieces-from-selector'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - var escapeStringRegexp = $__require('escape-string-regexp'); - - var isPieceAlwaysAncestorSelector = $__require('./is-piece-always-ancestor-selector'); - var generateDirectDescendantPiecesFromSelector = $__require('./generate-direct-descendant-pieces-from-selector'); - - var RE_AT_RULE_SCOPE_PIECE = /^@.*/; - // This will match pseudo selectors that have a base part - // ex. .foo:hover - // It will NOT match `:root` - var RE_PSEUDO_SELECTOR = /([^\s:]+)((?::|::)[^\s]*?)(\s+|$)/; - - function getScopeMatchResults(nodeScopeList, scopeNodeScopeList) { - var currentPieceOffset; - var scopePieceIndex; - - // Check each comma separated piece of the complex selector - var doesMatchScope = scopeNodeScopeList.some(function (scopeNodeScopePieces) { - return nodeScopeList.some(function (nodeScopePieces) { - - //console.log('sp', scopeNodeScopePieces); - //console.log('np', nodeScopePieces); - - currentPieceOffset = null; - var wasEveryPieceFound = true; - for (scopePieceIndex = 0; scopePieceIndex < scopeNodeScopePieces.length; scopePieceIndex++) { - var scopePiece = scopeNodeScopePieces[scopePieceIndex]; - var pieceOffset = currentPieceOffset || 0; - - var foundIndex = -1; - // Look through the remaining pieces(start from the offset) - var piecesWeCanMatch = nodeScopePieces.slice(pieceOffset); - for (var nodeScopePieceIndex = 0; nodeScopePieceIndex < piecesWeCanMatch.length; nodeScopePieceIndex++) { - var nodeScopePiece = piecesWeCanMatch[nodeScopePieceIndex]; - var overallIndex = pieceOffset + nodeScopePieceIndex; - - // Find the scope piece at the end of the node selector - // Last-occurence - if ( - // If the part on the end of the piece itself matches: - // scopePiece `.bar` matches node `.bar` - // scopePiece `.bar` matches node `.foo + .bar` - new RegExp(escapeStringRegexp(scopePiece) + '$').test(nodeScopePiece)) { - foundIndex = overallIndex; - break; - } - - // If the scope piece is a always-ancestor, then it is valid no matter what - // - // Or the node scope piece could be an always-ancestor selector itself - // And we only want the first occurence so we can keep matching future scope pieces - if (isPieceAlwaysAncestorSelector(scopePiece) || isPieceAlwaysAncestorSelector(nodeScopePiece)) { - foundIndex = overallIndex; - - break; - } - - // Handle any direct descendant operators in each piece - var directDescendantPieces = generateDirectDescendantPiecesFromSelector(nodeScopePiece); - // Only try to work out direct descendants if there was the `>` combinator, meaning multiple pieces - if (directDescendantPieces.length > 1) { - - var ddNodeScopeList = [].concat([directDescendantPieces]); - // Massage into a direct descendant separated list - var ddScopeList = [].concat([scopeNodeScopePieces.slice(scopePieceIndex).reduce(function (prevScopePieces, scopePiece) { - return prevScopePieces.concat(generateDirectDescendantPiecesFromSelector(scopePiece)); - }, [])]); - var result = getScopeMatchResults(ddNodeScopeList, ddScopeList); - - // If it matches completely - // or there are still more pieces to match in the future - if (result.doesMatchScope || scopePieceIndex + 1 < scopeNodeScopePieces.length) { - foundIndex = overallIndex; - // Move the scope forward the amount that piece consumed - // -1 because the of for-loop increments at each iteration - scopePieceIndex += result.scopePieceIndex - 1; - } - - break; - } - } - - var isFurther = foundIndex >= pieceOffset; - - currentPieceOffset = foundIndex + 1; - - // Mimicing a `[].every` with a for-loop - wasEveryPieceFound = wasEveryPieceFound && isFurther; - if (!wasEveryPieceFound) { - break; - } - } - - return wasEveryPieceFound; - }); - }); - - return { - doesMatchScope: doesMatchScope, - nodeScopePieceIndex: currentPieceOffset - 1, - scopePieceIndex: scopePieceIndex - }; - } - - var stripPseudoSelectorsFromScopeList = function (scopeList) { - return scopeList.map(function (scopePieces) { - return scopePieces.map(function (descendantPiece) { - // If not an at-rule piece, remove the pseudo selector part `@media (max-width: 300px)` - if (!RE_AT_RULE_SCOPE_PIECE.test(descendantPiece)) { - return descendantPiece.replace(new RegExp(RE_PSEUDO_SELECTOR.source, 'g'), function (whole, baseSelector, pseudo, trailingWhitespace) { - return baseSelector + trailingWhitespace; - }); - } - return descendantPiece; - }); - }); - }; - - // Given the nodes scope, and the target scope, - // Is the node in the same or under the target scope (cascade wise) - // - // Another way to think about it: Can the target scope cascade properties to the node? - // - // For scope-lists see: `generateScopeList` - var isUnderScope = function (nodeScopeList, scopeNodeScopeList, /*optional*/ignorePseudo) { - // Because we only care about the scopeNodeScope matching to the nodeScope - // Remove the pseudo selectors from the nodeScope so it can match a broader version - // ex. `.foo:hover` can resolve variables from `.foo` - nodeScopeList = stripPseudoSelectorsFromScopeList(nodeScopeList); - - if (ignorePseudo) { - scopeNodeScopeList = stripPseudoSelectorsFromScopeList(scopeNodeScopeList); - } - - return getScopeMatchResults(nodeScopeList, scopeNodeScopeList).doesMatchScope; - }; - - isUnderScope.RE_PSEUDO_SELECTOR = RE_PSEUDO_SELECTOR; - - module.exports = isUnderScope; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/is-node-under-scope.js', ['./is-under-scope', './generate-scope-list'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - var isUnderScope = $__require('./is-under-scope'); - var generateScopeList = $__require('./generate-scope-list'); - - var isNodeUnderScope = function (node, scopeNode, /*optional*/ignorePseudo) { - var nodeScopeList = generateScopeList(node, true); - var scopeNodeScopeList = generateScopeList(scopeNode, true); - - return isUnderScope(nodeScopeList, scopeNodeScopeList, ignorePseudo); - }; - - module.exports = isNodeUnderScope; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/generate-descendant-pieces-from-selector.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - // Unit Tests: https://regex101.com/r/oP0fM9/15 - // - // It is a shame the regex has to be this long. Maybe a CSS selector parser would be better. - // We could almost use `/\b\s(?![><+~][\s]+?)/` to split the selector but this doesn't work with attribute selectors - var RE_SELECTOR_DESCENDANT_SPLIT = /(.*?(?:(?:\([^\)]+\)|\[[^\]]+\]|(?![><+~\s]).)+)(?:(?:(?:\s(?!>>))|(?:\t(?!>>))|(?:\s?>>\s?))(?!\s+))(?![><+~][\s]+?))/; - - var generateDescendantPiecesFromSelector = function (selector) { - return selector.split(RE_SELECTOR_DESCENDANT_SPLIT).filter(function (piece) { - if (piece.length > 0) { - return true; - } - return false; - }).map(function (piece) { - // Trim whitespace which would be a normal descendant selector - // and trim off the CSS4 descendant `>>` into a normal descendant selector - return piece.trim().replace(/\s*?>>\s*?/g, ''); - }); - }; - - module.exports = generateDescendantPiecesFromSelector; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/generate-scope-list.js', ['./generate-descendant-pieces-from-selector'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - - var generateDescendantPiecesFromSelector = $__require('./generate-descendant-pieces-from-selector'); - - var generateScopeList = function (node, /*optional*/includeSelf) { - includeSelf = includeSelf || false; - - var selectorScopeList = [ - // Start off with one branch - []]; - var currentNodeParent = includeSelf ? node : node.parent; - while (currentNodeParent) { - - // `currentNodeParent.selectors` is a list of each comma separated piece of the selector - var scopePieces = (currentNodeParent.selectors || []).map(function (selectorPiece) { - return { - value: selectorPiece, - type: 'selector' - }; - }); - - // If it is a at-rule, then we need to construct the proper piece - if (currentNodeParent.type === 'atrule') { - scopePieces = [].concat(currentNodeParent.params).map(function (param, index) { - return { - value: '@' + currentNodeParent.name + ' ' + param, - type: 'atrule' - }; - }); - } - - // Branch each current scope for each comma separated selector - // Otherwise just keep the [1] branch going - var branches = (scopePieces.length > 0 ? scopePieces : [1]).map(function () { - return selectorScopeList.map(function (scopePieces) { - return scopePieces.slice(0); - }); - }); - - scopePieces.forEach(function (scopeObject, index) { - // Update each selector string with the new piece - branches[index] = branches[index].map(function (scopeStringPieces) { - - var descendantPieces = [scopeObject.value]; - // Split at any descendant combinators to properly make the scope list - if (scopeObject.type === 'selector') { - descendantPieces = generateDescendantPiecesFromSelector(scopeObject.value); - } - - // Add to the front of the array - scopeStringPieces.unshift.apply(scopeStringPieces, descendantPieces); - - return scopeStringPieces; - }); - }); - - // Start from a new list so we can - // Flatten out the branches a bit and and merge back into the list - selectorScopeList = []; - branches.forEach(function (branch) { - selectorScopeList = selectorScopeList.concat(branch); - }); - - currentNodeParent = currentNodeParent.parent; - } - - return selectorScopeList; - }; - - module.exports = generateScopeList; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/find-node-ancestor-with-selector.js', ['./generate-scope-list'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - var generateScopeList = $__require('./generate-scope-list'); - - // Find a node starting from the given node that matches - // Works on a PostCSS AST tree - var findNodeAncestorWithSelector = function (selector, node) { - var matchingNode; - - // Keep going until we run out of parents to search - // or we found the node - var currentNode = node; - while (currentNode.parent && !matchingNode) { - // A trick to get the selector split up. Generate a scope list on a clone(clean parent) - var currentNodeScopeList = generateScopeList(currentNode.clone(), true); - - currentNodeScopeList.some(function (scopePieces) { - return scopePieces.some(function (scopePiece) { - if (scopePiece === selector) { - matchingNode = currentNode; - return true; - } - - return false; - }); - }); - - currentNode = currentNode.parent; - } - - return matchingNode; - }; - - module.exports = findNodeAncestorWithSelector; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/shallow-clone-node.js', [], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - // Inspired by the PostCSS clone: https://github.com/postcss/postcss/blob/caba908d0f4e362466252202e6be84660c33d8a5/lib/node.js#L17 - var shallowCloneNode = function (obj, parent) { - var cloned = new obj.constructor(); - - Object.keys(obj).forEach(function (i) { - if (!obj.hasOwnProperty(i)) { - return; - } - - var value = obj[i]; - var type = typeof value; - - if (i === 'parent' && type === 'object') { - if (parent) { - cloned[i] = parent; - } - } else if (i === 'source') { - cloned[i] = value; - } else if (value instanceof Array) { - if (i === 'nodes') { - cloned[i] = []; - } else { - cloned[i] = value.map(function (j) { - shallowCloneNode(j, cloned); - }); - } - } else if (i !== 'before' && i !== 'after' && i !== 'between' && i !== 'semicolon') { - if (type === 'object') { - value = shallowCloneNode(value); - } - - cloned[i] = value; - } - }); - - return cloned; - }; - - module.exports = shallowCloneNode; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/clone-splice-parent-onto-node-when.js', ['./shallow-clone-node'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - - var shallowCloneNode = $__require('./shallow-clone-node'); - - // Splice on a parent scope onto a node - // And return a detached clone - var cloneSpliceParentOntoNodeWhen = function (node, parent, /*optional*/whenCb) { - whenCb = whenCb || function () { - return true; - }; - - var cloneList = []; - - // Gather node ancestors and clone along the way - var current = node; - var isWhenNow = false; - while (current && !isWhenNow) { - if (current.type === 'decl') { - cloneList.push(current.clone()); - } else { - cloneList.push(shallowCloneNode(current)); - } - - isWhenNow = whenCb(current); - current = current.parent; - } - - // Gather parent ancestors all the way up and clone along the way - // The list goes from lowest to highest ancestor - var cloneParentList = []; - var currentParent = parent; - while (currentParent) { - cloneParentList.push(shallowCloneNode(currentParent)); - - currentParent = currentParent.parent; - } - // Assign parents to our parent clones - cloneParentList.forEach(function (parentClone, index, cloneParentList) { - // Keep assigning parents detached until just very end - if (index + 1 < cloneParentList.length) { - //parentClone.moveTo(cloneParentList[index+1]); - parentClone.parent = cloneParentList[index + 1]; - } - }); - - // Assign parents to our node clones - cloneList.forEach(function (clone, index, cloneList) { - // Keep assigning parents detached until just very end - if (index + 1 < cloneList.length) { - //clone.moveTo(cloneList[index+1]); - clone.parent = cloneList[index + 1]; - // Then splice on the new parent scope - } else { - // Set the highest parent ancestor to back to where we should splice in - cloneParentList.slice(-1)[0].parent = current; - // Set the node clone to the lowest parent ancestor to finish off the splice - //clone.moveTo(cloneParentList[0]); - clone.parent = cloneParentList[0]; - } - }); - - return cloneList[0]; - }; - - module.exports = cloneSpliceParentOntoNodeWhen; -}); -System.registerDynamic('npm:postcss-css-variables@0.8.0/lib/resolve-decl.js', ['./resolve-value', './generate-scope-list', './gather-variable-dependencies', './is-under-scope', './is-node-under-scope', './shallow-clone-node', './find-node-ancestor-with-selector', './clone-splice-parent-onto-node-when'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - var resolveValue = $__require('./resolve-value'); - var generateScopeList = $__require('./generate-scope-list'); - var gatherVariableDependencies = $__require('./gather-variable-dependencies'); - - var isUnderScope = $__require('./is-under-scope'); - var isNodeUnderScope = $__require('./is-node-under-scope'); - - var shallowCloneNode = $__require('./shallow-clone-node'); - var findNodeAncestorWithSelector = $__require('./find-node-ancestor-with-selector'); - var cloneSpliceParentOntoNodeWhen = $__require('./clone-splice-parent-onto-node-when'); - - function eachMapItemDependencyOfDecl(variablesUsedList, map, decl, cb) { - // Now find any at-rule declarations that pertains to each rule - // Loop through the variables used - variablesUsedList.forEach(function (variableUsedName) { - - // Find anything in the map that corresponds to that variable - gatherVariableDependencies(variablesUsedList, map).deps.forEach(function (mapItem) { - - var mimicDecl; - if (mapItem.isUnderAtRule) { - - // Get the inner-most selector of the at-rule scope variable declaration we are matching - // Because the inner-most selector will be the same for each branch, we can look at the first one [0] or any of the others - var varDeclScopeList = generateScopeList(mapItem.parent, true); - var innerMostAtRuleSelector = varDeclScopeList[0].slice(-1)[0]; - var nodeToSpliceParentOnto = findNodeAncestorWithSelector(innerMostAtRuleSelector, decl.parent); - - // Splice on where the selector starts matching the selector inside at-rule - // See: `test/fixtures/cascade-on-nested-rules.css` - var varDeclAtRule = mapItem.parent.parent; - mimicDecl = cloneSpliceParentOntoNodeWhen(decl, varDeclAtRule, function (ancestor) { - return ancestor === nodeToSpliceParentOnto; - }); - - //console.log('amd og', generateScopeList(decl.parent, true)); - //console.log('amd', generateScopeList(mimicDecl.parent, true)); - //console.log(generateScopeList(mapItem.parent, true)); - //console.log('amd isNodeUnderScope', isNodeUnderScope(mimicDecl.parent, mapItem.parent), mapItem.decl.value); - } - // TODO: use regex from `isUnderScope` - else if (isUnderScope.RE_PSEUDO_SELECTOR.test(mapItem.parent.selector)) { - // Create a detached clone - var ruleClone = shallowCloneNode(decl.parent); - ruleClone.parent = decl.parent.parent; - - // Add the declaration to it - mimicDecl = decl.clone(); - ruleClone.append(mimicDecl); - - var lastPseudoSelectorMatches = mapItem.parent.selector.match(new RegExp(isUnderScope.RE_PSEUDO_SELECTOR.source + '$')); - var lastPseudoSelector = lastPseudoSelectorMatches ? lastPseudoSelectorMatches[2] : ''; - - ruleClone.selector += lastPseudoSelector; - } - - // If it is under the proper scope, - // we need to check because we are iterating over all map entries - if (mimicDecl && isNodeUnderScope(mimicDecl, mapItem.parent, true)) { - cb(mimicDecl, mapItem); - } - }); - }); - } - - // Resolve the decl with the computed value - // Also add in any media queries that change the value as necessary - function resolveDecl(decl, map, /*optional*/shouldPreserve, /*optional*/logResolveValueResult) { - shouldPreserve = shouldPreserve || false; - - // Make it chainable - var _logResolveValueResult = function (valueResults) { - if (logResolveValueResult) { - logResolveValueResult(valueResults); - } - - return valueResults; - }; - - // Grab the balue for this declarations - var valueResults = _logResolveValueResult(resolveValue(decl, map)); - - // Resolve the cascade dependencies - // Now find any at-rule declarations that need to be added below each rule - eachMapItemDependencyOfDecl(valueResults.variablesUsed, map, decl, function (mimicDecl, mapItem) { - var ruleClone = shallowCloneNode(decl.parent); - var declClone = decl.clone(); - // Add the declaration to our new rule - ruleClone.append(declClone); - - if (shouldPreserve === true) { - declClone.cloneAfter(); - } - - // No mangle resolve - declClone.value = _logResolveValueResult(resolveValue(mimicDecl, map, true)).value; - - if (mapItem.isUnderAtRule) { - // Create the clean atRule for which we place the declaration under - var atRuleNode = shallowCloneNode(mapItem.parent.parent); - - // Add the rule to the atRule - atRuleNode.append(ruleClone); - - // Since that atRuleNode can be nested in other atRules, we need to make the appropriate structure - var parentAtRuleNode = atRuleNode; - var currentAtRuleNode = mapItem.parent.parent; - while (currentAtRuleNode.parent.type === 'atrule') { - // Create a new clean clone of that at rule to nest under - var newParentAtRuleNode = shallowCloneNode(currentAtRuleNode.parent); - - // Append the old parent - newParentAtRuleNode.append(parentAtRuleNode); - // Then set the new one as the current for next iteration - parentAtRuleNode = newParentAtRuleNode; - - currentAtRuleNode = currentAtRuleNode.parent; - } - - // Put the atRuleStructure after the declaration's rule - decl.parent.parent.insertAfter(decl.parent, parentAtRuleNode); - } else { - ruleClone.selector = mimicDecl.parent.selector; - - // Put the atRuleStructure after the declaration's rule - decl.parent.parent.insertAfter(decl.parent, ruleClone); - } - }); - - // If we are preserving var(...) usage and the value changed meaning it had some - if (shouldPreserve === true && decl.value !== valueResults.value) { - decl.cloneAfter(); - } - - // Set 'undefined' value as a string to avoid making other plugins down the line unhappy - // See #22 - if (valueResults.value === undefined) { - valueResults.value = 'undefined'; - } - - // Set the new value after we are done dealing with at-rule stuff - decl.value = valueResults.value; - } - - module.exports = resolveDecl; -}); -System.registerDynamic("npm:postcss-css-variables@0.8.0.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:postcss-css-variables@0.8.0/index.js', ['postcss', 'extend', './lib/shallow-clone-node', './lib/resolve-value', './lib/resolve-decl'], true, function ($__require, exports, module) { - var global = this || self, - GLOBAL = global; - // PostCSS CSS Variables (postcss-css-variables) - // v0.5.0 - // - // https://github.com/MadLittleMods/postcss-css-variables - - // For Debugging - //var nomo = require('node-monkey').start({port: 50501}); - - var postcss = $__require('postcss'); - var extend = $__require('extend'); - - var shallowCloneNode = $__require('./lib/shallow-clone-node'); - var resolveValue = $__require('./lib/resolve-value'); - var resolveDecl = $__require('./lib/resolve-decl'); - - // A custom property is any property whose name starts with two dashes (U+002D HYPHEN-MINUS) - // `--foo` - // See: http://dev.w3.org/csswg/css-variables/#custom-property - var RE_VAR_PROP = /(--(.+))/; - - function eachCssVariableDeclaration(css, cb) { - // Loop through all of the declarations and grab the variables and put them in the map - css.walkDecls(function (decl) { - // If declaration is a variable - if (RE_VAR_PROP.test(decl.prop)) { - cb(decl); - } - }); - } - - function cleanUpNode(node) { - // If we removed all of the declarations in the rule(making it empty), - // then just remove it - var nodeToPossiblyCleanUp = node; - while (nodeToPossiblyCleanUp && nodeToPossiblyCleanUp.nodes.length <= 0) { - var nodeToRemove = nodeToPossiblyCleanUp.type !== 'root' ? nodeToPossiblyCleanUp : null; - - if (nodeToRemove) { - // Get a reference to it before we remove - // and lose reference to the child after removing it - nodeToPossiblyCleanUp = nodeToRemove.parent; - - nodeToRemove.remove(); - } else { - nodeToPossiblyCleanUp = null; - } - } - } - - var defaults = { - // Allows you to preserve custom properties & var() usage in output. - // `true`, `false`, or `'computed'` - preserve: false, - // Define variables via JS - // Simple key-value pair - // or an object with a `value` property and an optional `isImportant` bool property - variables: {} - }; - - module.exports = postcss.plugin('postcss-css-variables', function (options) { - - var opts = extend({}, defaults, options); - - // Work with opts here - - return function (css, result) { - // Transform CSS AST here - - /* * / - try { - /* */ - - // List of nodes that if empty, will be removed - // We use this because we don't want to modify the AST when we still need to reference these later on - var nodesToRemoveAtEnd = []; - - // Map of variable names to a list of declarations - var map = {}; - - // Add the js defined variables `opts.variables` to the map - map = extend(map, Object.keys(opts.variables).reduce(function (prevVariableMap, variableName) { - var variableEntry = opts.variables[variableName]; - // Automatically prefix any variable with `--` (CSS custom property syntax) if it doesn't have it already - variableName = variableName.slice(0, 2) === '--' ? variableName : '--' + variableName; - var variableValue = (variableEntry || {}).value || variableEntry; - var isImportant = (variableEntry || {}).isImportant || false; - - // Add a root node to the AST - var variableRootRule = postcss.rule({ selector: ':root' }); - css.root().prepend(variableRootRule); - // Add the variable decl to the root node - var varDecl = postcss.decl({ - prop: variableName, - value: variableValue - }); - variableRootRule.append(varDecl); - - // Add the entry to the map - prevVariableMap[variableName] = (prevVariableMap[variableName] || []).concat({ - decl: varDecl, - prop: variableName, - calculatedInPlaceValue: variableValue, - isImportant: isImportant, - variablesUsed: [], - parent: variableRootRule, - isUnderAtRule: false - }); - - return prevVariableMap; - }, {})); - - // Chainable helper function to log any messages (warnings) - var logResolveValueResult = function (valueResult) { - // Log any warnings that might of popped up - var warningList = [].concat(valueResult.warnings); - warningList.forEach(function (warningArgs) { - warningArgs = [].concat(warningArgs); - result.warn.apply(result, warningArgs); - }); - - // Keep the chain going - return valueResult; - }; - - // Collect all of the variables defined - // --------------------------------------------------------- - // --------------------------------------------------------- - eachCssVariableDeclaration(css, function (decl) { - var declParentRule = decl.parent; - - var valueResults = logResolveValueResult(resolveValue(decl, map)); - // Split out each selector piece into its own declaration for easier logic down the road - decl.parent.selectors.forEach(function (selector) { - // Create a detached clone - var splitOutRule = shallowCloneNode(decl.parent); - splitOutRule.selector = selector; - splitOutRule.parent = decl.parent.parent; - - var declClone = decl.clone(); - splitOutRule.append(declClone); - - var prop = decl.prop; - map[prop] = (map[prop] || []).concat({ - decl: declClone, - prop: prop, - calculatedInPlaceValue: valueResults.value, - isImportant: decl.important || false, - variablesUsed: valueResults.variablesUsed, - parent: splitOutRule, - // variables inside root or at-rules (eg. @media, @support) - isUnderAtRule: splitOutRule.parent.type === 'atrule' - }); - }); - - // Remove the variable declaration because they are pretty much useless after we resolve them - if (!opts.preserve) { - decl.remove(); - } - // Or we can also just show the computed value used for that variable - else if (opts.preserve === 'computed') { - decl.value = valueResults.value; - } - // Otherwise just keep them as var declarations - //else {} - - // We add to the clean up list if we removed some variable declarations to make it become an empty rule - // We clean up later on because we don't want to modify the AST when we still need to reference these later on - if (declParentRule.nodes.length <= 0) { - nodesToRemoveAtEnd.push(declParentRule); - } - }); - - // Resolve variables everywhere - // --------------------------------------------------------- - // --------------------------------------------------------- - - // Collect all the rules that have declarations that use variables - var rulesThatHaveDeclarationsWithVariablesList = []; - css.walkRules(function (rule) { - var doesRuleUseVariables = rule.nodes.some(function (node) { - if (node.type === 'decl') { - var decl = node; - // If it uses variables - // and is not a variable declarations that we may be preserving from earlier - if (resolveValue.RE_VAR_FUNC.test(decl.value) && !RE_VAR_PROP.test(decl.prop)) { - return true; - } - } - - return false; - }); - - if (doesRuleUseVariables) { - rulesThatHaveDeclarationsWithVariablesList.push(rule); - } - }); - - rulesThatHaveDeclarationsWithVariablesList.forEach(function (rule) { - var rulesToWorkOn = [].concat(rule); - // Split out the rule into each comma separated selector piece - // We only need to split if is actually comma separted(selectors > 1) - if (rule.selectors.length > 1) { - // Reverse the selectors so that we can cloneAfter in the same comma separated order - rulesToWorkOn = rule.selectors.reverse().map(function (selector) { - var ruleClone = rule.cloneAfter(); - ruleClone.selector = selector; - - return ruleClone; - }); - - rule.remove(); - } - - // Resolve the declarations - rulesToWorkOn.forEach(function (ruleToWorkOn) { - ruleToWorkOn.nodes.slice(0).forEach(function (node) { - if (node.type === 'decl') { - var decl = node; - resolveDecl(decl, map, opts.preserve); - } - }); - }); - }); - - // Clean up any nodes we don't want anymore - // We clean up at the end because we don't want to modify the AST when we still need to reference these later on - nodesToRemoveAtEnd.forEach(cleanUpNode); - - //console.log('map', map); - - /* * / - } - catch(e) { - //console.log('e', e.message); - console.log('e', e.message, e.stack); - } - /* */ - }; - }); -}); -System.register('postcss-css-variables-playground/js/stores/PlaygroundStore.js', ['../dispatcher/AppDispatcher', '../constants/PlaygroundConstants', '../stores/PlaygroundSettingsStore', 'object-assign', 'immutable', 'events', 'postcss', 'postcss-css-variables'], function (_export, _context) { - "use strict"; - - var AppDispatcher, PlaygroundConstants, PlaygroundSettingsStore, assign, Immutable, events, postcss, cssvariables, EventEmitter, CHANGE_EVENT, keyboardActionStream, playgroundProcessor, postcssUnprocessedInputText, processingResult, PlaygroundStore; - - - function updateProcessor(settings) { - settings = settings || {}; - - playgroundProcessor = postcss().use(cssvariables(settings.get('postcss-css-variables').toObject())); - - // Whenever the plugin option updates, - // we need to update the output - updateOutput(); - } - - function updateOutput() { - processingResult = processingResult.set('input', postcssUnprocessedInputText); - - playgroundProcessor.process(postcssUnprocessedInputText).then(function (result) { - _setOuput(result.css, null); - }).catch(function (error) { - // Because there was an error, reset the output text - _setOuput('', error); - //console.warn(error); - }); - } - - function _setOuput(text, error) { - processingResult = processingResult.set('output', text); - processingResult = processingResult.set('error', error); - PlaygroundStore.emitChange(); - } - - return { - setters: [function (_dispatcherAppDispatcher) { - AppDispatcher = _dispatcherAppDispatcher.default; - }, function (_constantsPlaygroundConstants) { - PlaygroundConstants = _constantsPlaygroundConstants.default; - }, function (_storesPlaygroundSettingsStore) { - PlaygroundSettingsStore = _storesPlaygroundSettingsStore.default; - }, function (_objectAssign) { - assign = _objectAssign.default; - }, function (_immutable) { - Immutable = _immutable.default; - }, function (_events) { - events = _events.default; - }, function (_postcss) { - postcss = _postcss.default; - }, function (_postcssCssVariables) { - cssvariables = _postcssCssVariables.default; - }], - execute: function () { - EventEmitter = events.EventEmitter; - CHANGE_EVENT = 'CHANGE_EVENT'; - keyboardActionStream = assign({}, EventEmitter.prototype); - playgroundProcessor = postcss().use(cssvariables()); - postcssUnprocessedInputText = ''; - processingResult = Immutable.Map({ - input: '', - output: '', - error: null - }); - PlaygroundStore = assign({}, EventEmitter.prototype, { - - getKeyboardActionStream: function getKeyboardActionStream() { - return keyboardActionStream; - }, - - getInputText: function getInputText() { - return postcssUnprocessedInputText; - }, - - getOutputResult: function getOutputResult() { - return processingResult; - }, - - emitChange: function emitChange() { - this.emit(CHANGE_EVENT); - }, - - addChangeListener: function addChangeListener(callback) { - this.on(CHANGE_EVENT, callback); - }, - - removeChangeListener: function removeChangeListener(callback) { - this.removeListener(CHANGE_EVENT, callback); - }, - - dispatchToken: AppDispatcher.register(function (action) { - - switch (action.actionType) { - case PlaygroundConstants.PLAYGROUND_KEYBOARD_ACTION: - keyboardActionStream.emit('KEYBOARD_ACTION'); - break; - - // Whenever the plugin option updates, - // we need to update the output - case PlaygroundConstants.PLAYGROUND_SET_POSTCSS_CSS_VARIABLES_PRESERVE: - AppDispatcher.waitFor([PlaygroundSettingsStore.dispatchToken]); - updateProcessor(PlaygroundSettingsStore.getPluginSettings()); - break; - - case PlaygroundConstants.PLAYGROUND_INPUT_UPDATED: - postcssUnprocessedInputText = action.value; - PlaygroundStore.emitChange(); - break; - - case PlaygroundConstants.PLAYGROUND_START_PROCESS_INPUT: - updateOutput(); - break; - - default: - // no op - } - - // No errors. Needed by promise in Dispatcher. - return true; - }) - }); - - _export('default', PlaygroundStore); - } - }; -}); -System.registerDynamic("npm:object-assign@4.1.1.json", [], true, function() { - return { - "main": "index.js", - "format": "cjs", - "meta": { - "*.json": { - "format": "json" - } - } - }; -}); - -System.registerDynamic('npm:object-assign@4.1.1/index.js', [], true, function ($__require, exports, module) { - /* - object-assign - (c) Sindre Sorhus - @license MIT - */ - - 'use strict'; - /* eslint-disable no-unused-vars */ - - var global = this || self, - GLOBAL = global; - var getOwnPropertySymbols = Object.getOwnPropertySymbols; - var hasOwnProperty = Object.prototype.hasOwnProperty; - var propIsEnumerable = Object.prototype.propertyIsEnumerable; - - function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); - } - - function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } - } - - module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; - }; -}); -System.register('postcss-css-variables-playground/js/components/PlaygroundHeader.js', ['npm:systemjs-plugin-babel@0.0.25/babel-helpers/classCallCheck.js', 'npm:systemjs-plugin-babel@0.0.25/babel-helpers/createClass.js', 'npm:systemjs-plugin-babel@0.0.25/babel-helpers/possibleConstructorReturn.js', 'npm:systemjs-plugin-babel@0.0.25/babel-helpers/inherits.js', 'react', '../stores/PlaygroundStore', '../actions/PlaygroundActions', '../services/PlaygroundPersistentSettingsDAO', 'object-assign'], function (_export, _context) { - "use strict"; - - var _classCallCheck, _createClass, _possibleConstructorReturn, _inherits, React, PlaygroundStore, PlaygroundActions, PlaygroundPersistentSettingsDAO, assign, PlaygroundHeader; - - return { - setters: [function (_npmSystemjsPluginBabel0025BabelHelpersClassCallCheckJs) { - _classCallCheck = _npmSystemjsPluginBabel0025BabelHelpersClassCallCheckJs.default; - }, function (_npmSystemjsPluginBabel0025BabelHelpersCreateClassJs) { - _createClass = _npmSystemjsPluginBabel0025BabelHelpersCreateClassJs.default; - }, function (_npmSystemjsPluginBabel0025BabelHelpersPossibleConstructorReturnJs) { - _possibleConstructorReturn = _npmSystemjsPluginBabel0025BabelHelpersPossibleConstructorReturnJs.default; - }, function (_npmSystemjsPluginBabel0025BabelHelpersInheritsJs) { - _inherits = _npmSystemjsPluginBabel0025BabelHelpersInheritsJs.default; - }, function (_react) { - React = _react.default; - }, function (_storesPlaygroundStore) { - PlaygroundStore = _storesPlaygroundStore.default; - }, function (_actionsPlaygroundActions) { - PlaygroundActions = _actionsPlaygroundActions.default; - }, function (_servicesPlaygroundPersistentSettingsDAO) { - PlaygroundPersistentSettingsDAO = _servicesPlaygroundPersistentSettingsDAO; - }, function (_objectAssign) { - assign = _objectAssign.default; - }], - execute: function () { - PlaygroundHeader = function (_React$Component) { - _inherits(PlaygroundHeader, _React$Component); - - function PlaygroundHeader(props) { - _classCallCheck(this, PlaygroundHeader); - - var _this = _possibleConstructorReturn(this, (PlaygroundHeader.__proto__ || Object.getPrototypeOf(PlaygroundHeader)).call(this, props)); - - _this.state = assign({ - optionsMenuDisplayToggle: false - }); - return _this; - } - - _createClass(PlaygroundHeader, [{ - key: 'componentDidMount', - value: function componentDidMount() { - PlaygroundStore.getKeyboardActionStream().on('KEYBOARD_ACTION', this._handleKeyboardAction.bind(this)); - - document.addEventListener('mousedown', this._handleMouseDown.bind(this)); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - PlaygroundStore.getKeyboardActionStream().removeEventListener('KEYBOARD_ACTION', this._handleKeyboardAction.bind(this)); - - document.removeEventListener('mousedown', this._handleMouseDown.bind(this)); - } - }, { - key: 'render', - value: function render() { - //console.log('render', this.state); - return React.createElement('header', { - className: 'playground-header' - }, React.createElement('h1', { - className: 'playground-header-heading' - }, React.createElement('a', { className: 'playground-header-heading-primary-title', href: 'https://github.com/MadLittleMods/postcss-css-variables' }, 'postcss-css-variables'), ' Playground - ', React.createElement('a', { href: 'https://github.com/postcss/postcss' }, 'PostCSS')), React.createElement('div', { - className: 'playground-options-holder', - ref: 'playgroundOptionsHolder' - }, React.createElement('input', { - type: 'checkbox', - id: 'id-playground-options-menu-display-toggle-checkbox', - className: 'playground-options-menu-toggle-checkbox visually-hidden', - checked: this.state.optionsMenuDisplayToggle, - onChange: this._onOptionsMenuDisplayToggleCheckboxChanged.bind(this) - }), React.createElement('label', { - className: 'playground-options-menu-toggle', - htmlFor: 'id-playground-options-menu-display-toggle-checkbox' - }, React.createElement('svg', { - className: 'playground-options-menu-toggle-icon icon', - viewBox: '0 0 1024 1024', - dangerouslySetInnerHTML: { __html: '' } - })), React.createElement('div', { - className: 'playground-options-menu-wrapper' - }, React.createElement('div', { - className: 'playground-options-menu' - }, React.createElement('ul', { - className: 'playground-options-menu-options-group' - }, React.createElement('li', { className: 'playground-options-menu-item' }, React.createElement('label', { - className: 'playground-options-menu-item-label', - htmlFor: 'id-playground-postcss-css-variables-preserve-menu-option' - }, 'Preserve:'), React.createElement('input', { - type: 'checkbox', - id: 'id-playground-postcss-css-variables-preserve-menu-option', - checked: this.props.postcssCssVariablesPreserve, - onChange: this._onPostcssCssVariablesPreserveCheckboxChanged.bind(this) - }))), React.createElement('hr', null), React.createElement('ul', { - className: 'playground-options-menu-options-group' - }, React.createElement('li', { className: 'playground-options-menu-item' }, React.createElement('label', { - className: 'playground-options-menu-item-label', - htmlFor: 'id-playground-tab-width-menu-option' - }, 'Tab Width:'), React.createElement('div', null, React.createElement('div', { className: 'playground-options-menu-item-secondary' }, React.createElement('label', { - className: 'playground-options-menu-item-label-secondary', - htmlFor: 'id-playground-tab-width-inherit-menu-option' - }, 'Auto:'), React.createElement('input', { - type: 'checkbox', - id: 'id-playground-tab-width-inherit-menu-option', - checked: this.props.tabWidth === 'inherit', - onChange: this._onTabWidthAutoCheckboxChanged.bind(this) - })), React.createElement('input', { - type: 'range', - id: 'id-playground-tab-width-menu-option', - value: this.props.tabWidth === 'inherit' ? '4' : this.props.tabWidth, - onChange: this._onTabWidthChanged.bind(this), - - min: '1', - max: '12', - step: '1', - disabled: this.props.tabWidth === 'inherit' - }))), React.createElement('li', { className: 'playground-options-menu-item' }, React.createElement('label', { - className: 'playground-options-menu-item-label', - htmlFor: 'id-playground-should-live-reload-menu-option' - }, 'Live Reload:'), React.createElement('input', { - type: 'checkbox', - id: 'id-playground-should-live-reload-menu-option', - checked: this.props.shouldLiveReload, - onChange: this._onLiveReloadCheckboxChanged.bind(this) - })))))), React.createElement('div', null, React.createElement('input', { - type: 'checkbox', - id: 'id-playground-live-reload-checkbox', - className: 'playground-live-reload-toggle-checkbox visually-hidden', - 'aria-label': 'Live Reload', - checked: this.props.shouldLiveReload, - onChange: this._onLiveReloadCheckboxChanged.bind(this) - }), React.createElement('label', { - className: 'playground-live-reload-toggle-togglebox', - htmlFor: 'id-playground-live-reload-checkbox' - }, React.createElement('label', { - className: 'switch', - htmlFor: 'id-playground-live-reload-checkbox' - }))), React.createElement('button', { - className: 'playground-header-save-button', - onClick: this._onProcessClick.bind(this) - }, 'Process')); - } - }, { - key: '_onProcessClick', - value: function _onProcessClick() { - PlaygroundActions.processInput(); - } - }, { - key: '_onPostcssCssVariablesPreserveCheckboxChanged', - value: function _onPostcssCssVariablesPreserveCheckboxChanged(e) { - PlaygroundPersistentSettingsDAO.setPostCssCssVariablesPreserveOption(e.target.checked); - } - }, { - key: '_onLiveReloadCheckboxChanged', - value: function _onLiveReloadCheckboxChanged(e) { - PlaygroundPersistentSettingsDAO.setShouldLiveReload(e.target.checked); - } - }, { - key: '_onTabWidthChanged', - value: function _onTabWidthChanged(e) { - //console.log(e.target.value); - PlaygroundPersistentSettingsDAO.setTabWidth(e.target.value); - } - }, { - key: '_onTabWidthAutoCheckboxChanged', - value: function _onTabWidthAutoCheckboxChanged(e) { - if (e.target.checked) { - PlaygroundPersistentSettingsDAO.setTabWidth('inherit'); - } else { - PlaygroundPersistentSettingsDAO.setTabWidth('4'); - } - } - }, { - key: '_onOptionsMenuDisplayToggleCheckboxChanged', - value: function _onOptionsMenuDisplayToggleCheckboxChanged(e) { - this.setState({ - optionsMenuDisplayToggle: e.target.checked - }); - } - }, { - key: '_handleKeyboardAction', - value: function _handleKeyboardAction() { - //console.log('keyboard action'); - - // Also hide the options menu because we need it out of the way to start typing - this.setState({ - optionsMenuDisplayToggle: false - }); - } - }, { - key: '_handleMouseDown', - value: function _handleMouseDown(e) { - // If they clicked somewhere outside of the menu, then close it - if (!React.findDOMNode(this.refs.playgroundOptionsHolder).contains(e.target)) { - this.setState({ - optionsMenuDisplayToggle: false - }); - } - } - }]); - - return PlaygroundHeader; - }(React.Component); - - _export('default', PlaygroundHeader); - - PlaygroundHeader.propTypes = { - tabWidth: React.PropTypes.string.isRequired, - shouldLiveReload: React.PropTypes.bool.isRequired, - - postcssCssVariablesPreserve: React.PropTypes.bool.isRequired - }; - } - }; -}); -System.register("npm:systemjs-plugin-babel@0.0.25/babel-helpers/classCallCheck.js", [], function (_export, _context) { - "use strict"; - - return { - setters: [], - execute: function () { - _export("default", function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }); - } - }; -}); -System.register("npm:systemjs-plugin-babel@0.0.25/babel-helpers/createClass.js", [], function (_export, _context) { - "use strict"; - - return { - setters: [], - execute: function () { - _export("default", function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }()); - } - }; -}); -System.register("npm:systemjs-plugin-babel@0.0.25/babel-helpers/possibleConstructorReturn.js", [], function (_export, _context) { - "use strict"; - - return { - setters: [], - execute: function () { - _export("default", function (self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return call && (typeof call === "object" || typeof call === "function") ? call : self; - }); - } - }; -}); -System.register("npm:systemjs-plugin-babel@0.0.25/babel-helpers/inherits.js", [], function (_export, _context) { - "use strict"; - - return { - setters: [], - execute: function () { - _export("default", function (subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true - } - }); - if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - }); - } - }; -}); -System.registerDynamic("npm:react@0.13.3/lib/ReactChildren.js", ["./PooledClass", "./ReactFragment", "./traverseAllChildren", "./warning", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactChildren - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var PooledClass = $__require("./PooledClass"); - var ReactFragment = $__require("./ReactFragment"); - - var traverseAllChildren = $__require("./traverseAllChildren"); - var warning = $__require("./warning"); - - var twoArgumentPooler = PooledClass.twoArgumentPooler; - var threeArgumentPooler = PooledClass.threeArgumentPooler; - - /** - * PooledClass representing the bookkeeping associated with performing a child - * traversal. Allows avoiding binding callbacks. - * - * @constructor ForEachBookKeeping - * @param {!function} forEachFunction Function to perform traversal with. - * @param {?*} forEachContext Context to perform context with. - */ - function ForEachBookKeeping(forEachFunction, forEachContext) { - this.forEachFunction = forEachFunction; - this.forEachContext = forEachContext; - } - PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler); - - function forEachSingleChild(traverseContext, child, name, i) { - var forEachBookKeeping = traverseContext; - forEachBookKeeping.forEachFunction.call(forEachBookKeeping.forEachContext, child, i); - } - - /** - * Iterates through children that are typically specified as `props.children`. - * - * The provided forEachFunc(child, index) will be called for each - * leaf child. - * - * @param {?*} children Children tree container. - * @param {function(*, int)} forEachFunc. - * @param {*} forEachContext Context for forEachContext. - */ - function forEachChildren(children, forEachFunc, forEachContext) { - if (children == null) { - return children; - } - - var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext); - traverseAllChildren(children, forEachSingleChild, traverseContext); - ForEachBookKeeping.release(traverseContext); - } - - /** - * PooledClass representing the bookkeeping associated with performing a child - * mapping. Allows avoiding binding callbacks. - * - * @constructor MapBookKeeping - * @param {!*} mapResult Object containing the ordered map of results. - * @param {!function} mapFunction Function to perform mapping with. - * @param {?*} mapContext Context to perform mapping with. - */ - function MapBookKeeping(mapResult, mapFunction, mapContext) { - this.mapResult = mapResult; - this.mapFunction = mapFunction; - this.mapContext = mapContext; - } - PooledClass.addPoolingTo(MapBookKeeping, threeArgumentPooler); - - function mapSingleChildIntoContext(traverseContext, child, name, i) { - var mapBookKeeping = traverseContext; - var mapResult = mapBookKeeping.mapResult; - - var keyUnique = !mapResult.hasOwnProperty(name); - if ("production" !== "production") { - "production" !== "production" ? warning(keyUnique, 'ReactChildren.map(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : null; - } - - if (keyUnique) { - var mappedChild = mapBookKeeping.mapFunction.call(mapBookKeeping.mapContext, child, i); - mapResult[name] = mappedChild; - } - } - - /** - * Maps children that are typically specified as `props.children`. - * - * The provided mapFunction(child, key, index) will be called for each - * leaf child. - * - * TODO: This may likely break any calls to `ReactChildren.map` that were - * previously relying on the fact that we guarded against null children. - * - * @param {?*} children Children tree container. - * @param {function(*, int)} mapFunction. - * @param {*} mapContext Context for mapFunction. - * @return {object} Object containing the ordered map of results. - */ - function mapChildren(children, func, context) { - if (children == null) { - return children; - } - - var mapResult = {}; - var traverseContext = MapBookKeeping.getPooled(mapResult, func, context); - traverseAllChildren(children, mapSingleChildIntoContext, traverseContext); - MapBookKeeping.release(traverseContext); - return ReactFragment.create(mapResult); - } - - function forEachSingleChildDummy(traverseContext, child, name, i) { - return null; - } - - /** - * Count the number of children that are typically specified as - * `props.children`. - * - * @param {?*} children Children tree container. - * @return {number} The number of children. - */ - function countChildren(children, context) { - return traverseAllChildren(children, forEachSingleChildDummy, null); - } - - var ReactChildren = { - forEach: forEachChildren, - map: mapChildren, - count: countChildren - }; - - module.exports = ReactChildren; -}); -System.registerDynamic('npm:react@0.13.3/lib/mapObject.js', ['process'], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule mapObject - */ - - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - /** - * Executes the provided `callback` once for each enumerable own property in the - * object and constructs a new object from the results. The `callback` is - * invoked with three arguments: - * - * - the property value - * - the property name - * - the object being traversed - * - * Properties that are added after the call to `mapObject` will not be visited - * by `callback`. If the values of existing properties are changed, the value - * passed to `callback` will be the value at the time `mapObject` visits them. - * Properties that are deleted before being visited are not visited. - * - * @grep function objectMap() - * @grep function objMap() - * - * @param {?object} object - * @param {function} callback - * @param {*} context - * @return {?object} - */ - function mapObject(object, callback, context) { - if (!object) { - return null; - } - var result = {}; - for (var name in object) { - if (hasOwnProperty.call(object, name)) { - result[name] = callback.call(context, object[name], name, object); - } - } - return result; - } - - module.exports = mapObject; -}); -System.registerDynamic("npm:react@0.13.3/lib/ReactDOM.js", ["./ReactElement", "./ReactElementValidator", "./mapObject", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactDOM - * @typechecks static-only - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var ReactElement = $__require("./ReactElement"); - var ReactElementValidator = $__require("./ReactElementValidator"); - - var mapObject = $__require("./mapObject"); - - /** - * Create a factory that creates HTML tag elements. - * - * @param {string} tag Tag name (e.g. `div`). - * @private - */ - function createDOMFactory(tag) { - if ("production" !== "production") { - return ReactElementValidator.createFactory(tag); - } - return ReactElement.createFactory(tag); - } - - /** - * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes. - * This is also accessible via `React.DOM`. - * - * @public - */ - var ReactDOM = mapObject({ - a: 'a', - abbr: 'abbr', - address: 'address', - area: 'area', - article: 'article', - aside: 'aside', - audio: 'audio', - b: 'b', - base: 'base', - bdi: 'bdi', - bdo: 'bdo', - big: 'big', - blockquote: 'blockquote', - body: 'body', - br: 'br', - button: 'button', - canvas: 'canvas', - caption: 'caption', - cite: 'cite', - code: 'code', - col: 'col', - colgroup: 'colgroup', - data: 'data', - datalist: 'datalist', - dd: 'dd', - del: 'del', - details: 'details', - dfn: 'dfn', - dialog: 'dialog', - div: 'div', - dl: 'dl', - dt: 'dt', - em: 'em', - embed: 'embed', - fieldset: 'fieldset', - figcaption: 'figcaption', - figure: 'figure', - footer: 'footer', - form: 'form', - h1: 'h1', - h2: 'h2', - h3: 'h3', - h4: 'h4', - h5: 'h5', - h6: 'h6', - head: 'head', - header: 'header', - hr: 'hr', - html: 'html', - i: 'i', - iframe: 'iframe', - img: 'img', - input: 'input', - ins: 'ins', - kbd: 'kbd', - keygen: 'keygen', - label: 'label', - legend: 'legend', - li: 'li', - link: 'link', - main: 'main', - map: 'map', - mark: 'mark', - menu: 'menu', - menuitem: 'menuitem', - meta: 'meta', - meter: 'meter', - nav: 'nav', - noscript: 'noscript', - object: 'object', - ol: 'ol', - optgroup: 'optgroup', - option: 'option', - output: 'output', - p: 'p', - param: 'param', - picture: 'picture', - pre: 'pre', - progress: 'progress', - q: 'q', - rp: 'rp', - rt: 'rt', - ruby: 'ruby', - s: 's', - samp: 'samp', - script: 'script', - section: 'section', - select: 'select', - small: 'small', - source: 'source', - span: 'span', - strong: 'strong', - style: 'style', - sub: 'sub', - summary: 'summary', - sup: 'sup', - table: 'table', - tbody: 'tbody', - td: 'td', - textarea: 'textarea', - tfoot: 'tfoot', - th: 'th', - thead: 'thead', - time: 'time', - title: 'title', - tr: 'tr', - track: 'track', - u: 'u', - ul: 'ul', - 'var': 'var', - video: 'video', - wbr: 'wbr', - - // SVG - circle: 'circle', - clipPath: 'clipPath', - defs: 'defs', - ellipse: 'ellipse', - g: 'g', - line: 'line', - linearGradient: 'linearGradient', - mask: 'mask', - path: 'path', - pattern: 'pattern', - polygon: 'polygon', - polyline: 'polyline', - radialGradient: 'radialGradient', - rect: 'rect', - stop: 'stop', - svg: 'svg', - text: 'text', - tspan: 'tspan' - - }, createDOMFactory); - - module.exports = ReactDOM; -}); -System.registerDynamic("npm:react@0.13.3/lib/FallbackCompositionState.js", ["./PooledClass", "./Object.assign", "./getTextContentAccessor", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule FallbackCompositionState - * @typechecks static-only - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var PooledClass = $__require("./PooledClass"); - - var assign = $__require("./Object.assign"); - var getTextContentAccessor = $__require("./getTextContentAccessor"); - - /** - * This helper class stores information about text content of a target node, - * allowing comparison of content before and after a given event. - * - * Identify the node where selection currently begins, then observe - * both its text content and its current position in the DOM. Since the - * browser may natively replace the target node during composition, we can - * use its position to find its replacement. - * - * @param {DOMEventTarget} root - */ - function FallbackCompositionState(root) { - this._root = root; - this._startText = this.getText(); - this._fallbackText = null; - } - - assign(FallbackCompositionState.prototype, { - /** - * Get current text of input. - * - * @return {string} - */ - getText: function () { - if ('value' in this._root) { - return this._root.value; - } - return this._root[getTextContentAccessor()]; - }, - - /** - * Determine the differing substring between the initially stored - * text content and the current content. - * - * @return {string} - */ - getData: function () { - if (this._fallbackText) { - return this._fallbackText; - } - - var start; - var startValue = this._startText; - var startLength = startValue.length; - var end; - var endValue = this.getText(); - var endLength = endValue.length; - - for (start = 0; start < startLength; start++) { - if (startValue[start] !== endValue[start]) { - break; - } - } - - var minEnd = startLength - start; - for (end = 1; end <= minEnd; end++) { - if (startValue[startLength - end] !== endValue[endLength - end]) { - break; - } - } - - var sliceTail = end > 1 ? 1 - end : undefined; - this._fallbackText = endValue.slice(start, sliceTail); - return this._fallbackText; - } - }); - - PooledClass.addPoolingTo(FallbackCompositionState); - - module.exports = FallbackCompositionState; -}); -System.registerDynamic("npm:react@0.13.3/lib/SyntheticCompositionEvent.js", ["./SyntheticEvent", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule SyntheticCompositionEvent - * @typechecks static-only - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var SyntheticEvent = $__require("./SyntheticEvent"); - - /** - * @interface Event - * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents - */ - var CompositionEventInterface = { - data: null - }; - - /** - * @param {object} dispatchConfig Configuration used to dispatch this event. - * @param {string} dispatchMarker Marker identifying the event target. - * @param {object} nativeEvent Native browser event. - * @extends {SyntheticUIEvent} - */ - function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent) { - SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent); - } - - SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface); - - module.exports = SyntheticCompositionEvent; -}); -System.registerDynamic("npm:react@0.13.3/lib/SyntheticInputEvent.js", ["./SyntheticEvent", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule SyntheticInputEvent - * @typechecks static-only - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var SyntheticEvent = $__require("./SyntheticEvent"); - - /** - * @interface Event - * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105 - * /#events-inputevents - */ - var InputEventInterface = { - data: null - }; - - /** - * @param {object} dispatchConfig Configuration used to dispatch this event. - * @param {string} dispatchMarker Marker identifying the event target. - * @param {object} nativeEvent Native browser event. - * @extends {SyntheticUIEvent} - */ - function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent) { - SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent); - } - - SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface); - - module.exports = SyntheticInputEvent; -}); -System.registerDynamic("npm:react@0.13.3/lib/BeforeInputEventPlugin.js", ["./EventConstants", "./EventPropagators", "./ExecutionEnvironment", "./FallbackCompositionState", "./SyntheticCompositionEvent", "./SyntheticInputEvent", "./keyOf", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015 Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule BeforeInputEventPlugin - * @typechecks static-only - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var EventConstants = $__require("./EventConstants"); - var EventPropagators = $__require("./EventPropagators"); - var ExecutionEnvironment = $__require("./ExecutionEnvironment"); - var FallbackCompositionState = $__require("./FallbackCompositionState"); - var SyntheticCompositionEvent = $__require("./SyntheticCompositionEvent"); - var SyntheticInputEvent = $__require("./SyntheticInputEvent"); - - var keyOf = $__require("./keyOf"); - - var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space - var START_KEYCODE = 229; - - var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window; - - var documentMode = null; - if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) { - documentMode = document.documentMode; - } - - // Webkit offers a very useful `textInput` event that can be used to - // directly represent `beforeInput`. The IE `textinput` event is not as - // useful, so we don't use it. - var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto(); - - // In IE9+, we have access to composition events, but the data supplied - // by the native compositionend event may be incorrect. Japanese ideographic - // spaces, for instance (\u3000) are not recorded correctly. - var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11); - - /** - * Opera <= 12 includes TextEvent in window, but does not fire - * text input events. Rely on keypress instead. - */ - function isPresto() { - var opera = window.opera; - return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12; - } - - var SPACEBAR_CODE = 32; - var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); - - var topLevelTypes = EventConstants.topLevelTypes; - - // Events and their corresponding property names. - var eventTypes = { - beforeInput: { - phasedRegistrationNames: { - bubbled: keyOf({ onBeforeInput: null }), - captured: keyOf({ onBeforeInputCapture: null }) - }, - dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste] - }, - compositionEnd: { - phasedRegistrationNames: { - bubbled: keyOf({ onCompositionEnd: null }), - captured: keyOf({ onCompositionEndCapture: null }) - }, - dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] - }, - compositionStart: { - phasedRegistrationNames: { - bubbled: keyOf({ onCompositionStart: null }), - captured: keyOf({ onCompositionStartCapture: null }) - }, - dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] - }, - compositionUpdate: { - phasedRegistrationNames: { - bubbled: keyOf({ onCompositionUpdate: null }), - captured: keyOf({ onCompositionUpdateCapture: null }) - }, - dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] - } - }; - - // Track whether we've ever handled a keypress on the space key. - var hasSpaceKeypress = false; - - /** - * Return whether a native keypress event is assumed to be a command. - * This is required because Firefox fires `keypress` events for key commands - * (cut, copy, select-all, etc.) even though no character is inserted. - */ - function isKeypressCommand(nativeEvent) { - return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && - // ctrlKey && altKey is equivalent to AltGr, and is not a command. - !(nativeEvent.ctrlKey && nativeEvent.altKey); - } - - /** - * Translate native top level events into event types. - * - * @param {string} topLevelType - * @return {object} - */ - function getCompositionEventType(topLevelType) { - switch (topLevelType) { - case topLevelTypes.topCompositionStart: - return eventTypes.compositionStart; - case topLevelTypes.topCompositionEnd: - return eventTypes.compositionEnd; - case topLevelTypes.topCompositionUpdate: - return eventTypes.compositionUpdate; - } - } - - /** - * Does our fallback best-guess model think this event signifies that - * composition has begun? - * - * @param {string} topLevelType - * @param {object} nativeEvent - * @return {boolean} - */ - function isFallbackCompositionStart(topLevelType, nativeEvent) { - return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE; - } - - /** - * Does our fallback mode think that this event is the end of composition? - * - * @param {string} topLevelType - * @param {object} nativeEvent - * @return {boolean} - */ - function isFallbackCompositionEnd(topLevelType, nativeEvent) { - switch (topLevelType) { - case topLevelTypes.topKeyUp: - // Command keys insert or clear IME input. - return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1; - case topLevelTypes.topKeyDown: - // Expect IME keyCode on each keydown. If we get any other - // code we must have exited earlier. - return nativeEvent.keyCode !== START_KEYCODE; - case topLevelTypes.topKeyPress: - case topLevelTypes.topMouseDown: - case topLevelTypes.topBlur: - // Events are not possible without cancelling IME. - return true; - default: - return false; - } - } - - /** - * Google Input Tools provides composition data via a CustomEvent, - * with the `data` property populated in the `detail` object. If this - * is available on the event object, use it. If not, this is a plain - * composition event and we have nothing special to extract. - * - * @param {object} nativeEvent - * @return {?string} - */ - function getDataFromCustomEvent(nativeEvent) { - var detail = nativeEvent.detail; - if (typeof detail === 'object' && 'data' in detail) { - return detail.data; - } - return null; - } - - // Track the current IME composition fallback object, if any. - var currentComposition = null; - - /** - * @param {string} topLevelType Record from `EventConstants`. - * @param {DOMEventTarget} topLevelTarget The listening component root node. - * @param {string} topLevelTargetID ID of `topLevelTarget`. - * @param {object} nativeEvent Native browser event. - * @return {?object} A SyntheticCompositionEvent. - */ - function extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) { - var eventType; - var fallbackData; - - if (canUseCompositionEvent) { - eventType = getCompositionEventType(topLevelType); - } else if (!currentComposition) { - if (isFallbackCompositionStart(topLevelType, nativeEvent)) { - eventType = eventTypes.compositionStart; - } - } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) { - eventType = eventTypes.compositionEnd; - } - - if (!eventType) { - return null; - } - - if (useFallbackCompositionData) { - // The current composition is stored statically and must not be - // overwritten while composition continues. - if (!currentComposition && eventType === eventTypes.compositionStart) { - currentComposition = FallbackCompositionState.getPooled(topLevelTarget); - } else if (eventType === eventTypes.compositionEnd) { - if (currentComposition) { - fallbackData = currentComposition.getData(); - } - } - } - - var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent); - - if (fallbackData) { - // Inject data generated from fallback path into the synthetic event. - // This matches the property of native CompositionEventInterface. - event.data = fallbackData; - } else { - var customData = getDataFromCustomEvent(nativeEvent); - if (customData !== null) { - event.data = customData; - } - } - - EventPropagators.accumulateTwoPhaseDispatches(event); - return event; - } - - /** - * @param {string} topLevelType Record from `EventConstants`. - * @param {object} nativeEvent Native browser event. - * @return {?string} The string corresponding to this `beforeInput` event. - */ - function getNativeBeforeInputChars(topLevelType, nativeEvent) { - switch (topLevelType) { - case topLevelTypes.topCompositionEnd: - return getDataFromCustomEvent(nativeEvent); - case topLevelTypes.topKeyPress: - /** - * If native `textInput` events are available, our goal is to make - * use of them. However, there is a special case: the spacebar key. - * In Webkit, preventing default on a spacebar `textInput` event - * cancels character insertion, but it *also* causes the browser - * to fall back to its default spacebar behavior of scrolling the - * page. - * - * Tracking at: - * https://code.google.com/p/chromium/issues/detail?id=355103 - * - * To avoid this issue, use the keypress event as if no `textInput` - * event is available. - */ - var which = nativeEvent.which; - if (which !== SPACEBAR_CODE) { - return null; - } - - hasSpaceKeypress = true; - return SPACEBAR_CHAR; - - case topLevelTypes.topTextInput: - // Record the characters to be added to the DOM. - var chars = nativeEvent.data; - - // If it's a spacebar character, assume that we have already handled - // it at the keypress level and bail immediately. Android Chrome - // doesn't give us keycodes, so we need to blacklist it. - if (chars === SPACEBAR_CHAR && hasSpaceKeypress) { - return null; - } - - return chars; - - default: - // For other native event types, do nothing. - return null; - } - } - - /** - * For browsers that do not provide the `textInput` event, extract the - * appropriate string to use for SyntheticInputEvent. - * - * @param {string} topLevelType Record from `EventConstants`. - * @param {object} nativeEvent Native browser event. - * @return {?string} The fallback string for this `beforeInput` event. - */ - function getFallbackBeforeInputChars(topLevelType, nativeEvent) { - // If we are currently composing (IME) and using a fallback to do so, - // try to extract the composed characters from the fallback object. - if (currentComposition) { - if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) { - var chars = currentComposition.getData(); - FallbackCompositionState.release(currentComposition); - currentComposition = null; - return chars; - } - return null; - } - - switch (topLevelType) { - case topLevelTypes.topPaste: - // If a paste event occurs after a keypress, throw out the input - // chars. Paste events should not lead to BeforeInput events. - return null; - case topLevelTypes.topKeyPress: - /** - * As of v27, Firefox may fire keypress events even when no character - * will be inserted. A few possibilities: - * - * - `which` is `0`. Arrow keys, Esc key, etc. - * - * - `which` is the pressed key code, but no char is available. - * Ex: 'AltGr + d` in Polish. There is no modified character for - * this key combination and no character is inserted into the - * document, but FF fires the keypress for char code `100` anyway. - * No `input` event will occur. - * - * - `which` is the pressed key code, but a command combination is - * being used. Ex: `Cmd+C`. No character is inserted, and no - * `input` event will occur. - */ - if (nativeEvent.which && !isKeypressCommand(nativeEvent)) { - return String.fromCharCode(nativeEvent.which); - } - return null; - case topLevelTypes.topCompositionEnd: - return useFallbackCompositionData ? null : nativeEvent.data; - default: - return null; - } - } - - /** - * Extract a SyntheticInputEvent for `beforeInput`, based on either native - * `textInput` or fallback behavior. - * - * @param {string} topLevelType Record from `EventConstants`. - * @param {DOMEventTarget} topLevelTarget The listening component root node. - * @param {string} topLevelTargetID ID of `topLevelTarget`. - * @param {object} nativeEvent Native browser event. - * @return {?object} A SyntheticInputEvent. - */ - function extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) { - var chars; - - if (canUseTextInputEvent) { - chars = getNativeBeforeInputChars(topLevelType, nativeEvent); - } else { - chars = getFallbackBeforeInputChars(topLevelType, nativeEvent); - } - - // If no characters are being inserted, no BeforeInput event should - // be fired. - if (!chars) { - return null; - } - - var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent); - - event.data = chars; - EventPropagators.accumulateTwoPhaseDispatches(event); - return event; - } - - /** - * Create an `onBeforeInput` event to match - * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents. - * - * This event plugin is based on the native `textInput` event - * available in Chrome, Safari, Opera, and IE. This event fires after - * `onKeyPress` and `onCompositionEnd`, but before `onInput`. - * - * `beforeInput` is spec'd but not implemented in any browsers, and - * the `input` event does not provide any useful information about what has - * actually been added, contrary to the spec. Thus, `textInput` is the best - * available event to identify the characters that have actually been inserted - * into the target node. - * - * This plugin is also responsible for emitting `composition` events, thus - * allowing us to share composition fallback code for both `beforeInput` and - * `composition` event types. - */ - var BeforeInputEventPlugin = { - - eventTypes: eventTypes, - - /** - * @param {string} topLevelType Record from `EventConstants`. - * @param {DOMEventTarget} topLevelTarget The listening component root node. - * @param {string} topLevelTargetID ID of `topLevelTarget`. - * @param {object} nativeEvent Native browser event. - * @return {*} An accumulation of synthetic events. - * @see {EventPluginHub.extractEvents} - */ - extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) { - return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent)]; - } - }; - - module.exports = BeforeInputEventPlugin; -}); -System.registerDynamic("npm:react@0.13.3/lib/ChangeEventPlugin.js", ["./EventConstants", "./EventPluginHub", "./EventPropagators", "./ExecutionEnvironment", "./ReactUpdates", "./SyntheticEvent", "./isEventSupported", "./isTextInputElement", "./keyOf", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ChangeEventPlugin - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var EventConstants = $__require("./EventConstants"); - var EventPluginHub = $__require("./EventPluginHub"); - var EventPropagators = $__require("./EventPropagators"); - var ExecutionEnvironment = $__require("./ExecutionEnvironment"); - var ReactUpdates = $__require("./ReactUpdates"); - var SyntheticEvent = $__require("./SyntheticEvent"); - - var isEventSupported = $__require("./isEventSupported"); - var isTextInputElement = $__require("./isTextInputElement"); - var keyOf = $__require("./keyOf"); - - var topLevelTypes = EventConstants.topLevelTypes; - - var eventTypes = { - change: { - phasedRegistrationNames: { - bubbled: keyOf({ onChange: null }), - captured: keyOf({ onChangeCapture: null }) - }, - dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange] - } - }; - - /** - * For IE shims - */ - var activeElement = null; - var activeElementID = null; - var activeElementValue = null; - var activeElementValueProp = null; - - /** - * SECTION: handle `change` event - */ - function shouldUseChangeEvent(elem) { - return elem.nodeName === 'SELECT' || elem.nodeName === 'INPUT' && elem.type === 'file'; - } - - var doesChangeEventBubble = false; - if (ExecutionEnvironment.canUseDOM) { - // See `handleChange` comment below - doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8); - } - - function manualDispatchChangeEvent(nativeEvent) { - var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent); - EventPropagators.accumulateTwoPhaseDispatches(event); - - // If change and propertychange bubbled, we'd just bind to it like all the - // other events and have it go through ReactBrowserEventEmitter. Since it - // doesn't, we manually listen for the events and so we have to enqueue and - // process the abstract event manually. - // - // Batching is necessary here in order to ensure that all event handlers run - // before the next rerender (including event handlers attached to ancestor - // elements instead of directly on the input). Without this, controlled - // components don't work properly in conjunction with event bubbling because - // the component is rerendered and the value reverted before all the event - // handlers can run. See https://github.com/facebook/react/issues/708. - ReactUpdates.batchedUpdates(runEventInBatch, event); - } - - function runEventInBatch(event) { - EventPluginHub.enqueueEvents(event); - EventPluginHub.processEventQueue(); - } - - function startWatchingForChangeEventIE8(target, targetID) { - activeElement = target; - activeElementID = targetID; - activeElement.attachEvent('onchange', manualDispatchChangeEvent); - } - - function stopWatchingForChangeEventIE8() { - if (!activeElement) { - return; - } - activeElement.detachEvent('onchange', manualDispatchChangeEvent); - activeElement = null; - activeElementID = null; - } - - function getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) { - if (topLevelType === topLevelTypes.topChange) { - return topLevelTargetID; - } - } - function handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) { - if (topLevelType === topLevelTypes.topFocus) { - // stopWatching() should be a noop here but we call it just in case we - // missed a blur event somehow. - stopWatchingForChangeEventIE8(); - startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID); - } else if (topLevelType === topLevelTypes.topBlur) { - stopWatchingForChangeEventIE8(); - } - } - - /** - * SECTION: handle `input` event - */ - var isInputEventSupported = false; - if (ExecutionEnvironment.canUseDOM) { - // IE9 claims to support the input event but fails to trigger it when - // deleting text, so we ignore its input events - isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9); - } - - /** - * (For old IE.) Replacement getter/setter for the `value` property that gets - * set on the active element. - */ - var newValueProp = { - get: function () { - return activeElementValueProp.get.call(this); - }, - set: function (val) { - // Cast to a string so we can do equality checks. - activeElementValue = '' + val; - activeElementValueProp.set.call(this, val); - } - }; - - /** - * (For old IE.) Starts tracking propertychange events on the passed-in element - * and override the value property so that we can distinguish user events from - * value changes in JS. - */ - function startWatchingForValueChange(target, targetID) { - activeElement = target; - activeElementID = targetID; - activeElementValue = target.value; - activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value'); - - Object.defineProperty(activeElement, 'value', newValueProp); - activeElement.attachEvent('onpropertychange', handlePropertyChange); - } - - /** - * (For old IE.) Removes the event listeners from the currently-tracked element, - * if any exists. - */ - function stopWatchingForValueChange() { - if (!activeElement) { - return; - } - - // delete restores the original property definition - delete activeElement.value; - activeElement.detachEvent('onpropertychange', handlePropertyChange); - - activeElement = null; - activeElementID = null; - activeElementValue = null; - activeElementValueProp = null; - } - - /** - * (For old IE.) Handles a propertychange event, sending a `change` event if - * the value of the active element has changed. - */ - function handlePropertyChange(nativeEvent) { - if (nativeEvent.propertyName !== 'value') { - return; - } - var value = nativeEvent.srcElement.value; - if (value === activeElementValue) { - return; - } - activeElementValue = value; - - manualDispatchChangeEvent(nativeEvent); - } - - /** - * If a `change` event should be fired, returns the target's ID. - */ - function getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) { - if (topLevelType === topLevelTypes.topInput) { - // In modern browsers (i.e., not IE8 or IE9), the input event is exactly - // what we want so fall through here and trigger an abstract event - return topLevelTargetID; - } - } - - // For IE8 and IE9. - function handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) { - if (topLevelType === topLevelTypes.topFocus) { - // In IE8, we can capture almost all .value changes by adding a - // propertychange handler and looking for events with propertyName - // equal to 'value' - // In IE9, propertychange fires for most input events but is buggy and - // doesn't fire when text is deleted, but conveniently, selectionchange - // appears to fire in all of the remaining cases so we catch those and - // forward the event if the value has changed - // In either case, we don't want to call the event handler if the value - // is changed from JS so we redefine a setter for `.value` that updates - // our activeElementValue variable, allowing us to ignore those changes - // - // stopWatching() should be a noop here but we call it just in case we - // missed a blur event somehow. - stopWatchingForValueChange(); - startWatchingForValueChange(topLevelTarget, topLevelTargetID); - } else if (topLevelType === topLevelTypes.topBlur) { - stopWatchingForValueChange(); - } - } - - // For IE8 and IE9. - function getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) { - if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) { - // On the selectionchange event, the target is just document which isn't - // helpful for us so just check activeElement instead. - // - // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire - // propertychange on the first input event after setting `value` from a - // script and fires only keydown, keypress, keyup. Catching keyup usually - // gets it and catching keydown lets us fire an event for the first - // keystroke if user does a key repeat (it'll be a little delayed: right - // before the second keystroke). Other input methods (e.g., paste) seem to - // fire selectionchange normally. - if (activeElement && activeElement.value !== activeElementValue) { - activeElementValue = activeElement.value; - return activeElementID; - } - } - } - - /** - * SECTION: handle `click` event - */ - function shouldUseClickEvent(elem) { - // Use the `click` event to detect changes to checkbox and radio inputs. - // This approach works across all browsers, whereas `change` does not fire - // until `blur` in IE8. - return elem.nodeName === 'INPUT' && (elem.type === 'checkbox' || elem.type === 'radio'); - } - - function getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) { - if (topLevelType === topLevelTypes.topClick) { - return topLevelTargetID; - } - } - - /** - * This plugin creates an `onChange` event that normalizes change events - * across form elements. This event fires at a time when it's possible to - * change the element's value without seeing a flicker. - * - * Supported elements are: - * - input (see `isTextInputElement`) - * - textarea - * - select - */ - var ChangeEventPlugin = { - - eventTypes: eventTypes, - - /** - * @param {string} topLevelType Record from `EventConstants`. - * @param {DOMEventTarget} topLevelTarget The listening component root node. - * @param {string} topLevelTargetID ID of `topLevelTarget`. - * @param {object} nativeEvent Native browser event. - * @return {*} An accumulation of synthetic events. - * @see {EventPluginHub.extractEvents} - */ - extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) { - - var getTargetIDFunc, handleEventFunc; - if (shouldUseChangeEvent(topLevelTarget)) { - if (doesChangeEventBubble) { - getTargetIDFunc = getTargetIDForChangeEvent; - } else { - handleEventFunc = handleEventsForChangeEventIE8; - } - } else if (isTextInputElement(topLevelTarget)) { - if (isInputEventSupported) { - getTargetIDFunc = getTargetIDForInputEvent; - } else { - getTargetIDFunc = getTargetIDForInputEventIE; - handleEventFunc = handleEventsForInputEventIE; - } - } else if (shouldUseClickEvent(topLevelTarget)) { - getTargetIDFunc = getTargetIDForClickEvent; - } - - if (getTargetIDFunc) { - var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID); - if (targetID) { - var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent); - EventPropagators.accumulateTwoPhaseDispatches(event); - return event; - } - } - - if (handleEventFunc) { - handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID); - } - } - - }; - - module.exports = ChangeEventPlugin; -}); -System.registerDynamic('npm:react@0.13.3/lib/ClientReactRootIndex.js', ['process'], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ClientReactRootIndex - * @typechecks - */ - - 'use strict'; - - var process = $__require('process'); - var global = this || self, - GLOBAL = global; - var nextReactRootIndex = 0; - - var ClientReactRootIndex = { - createReactRootIndex: function () { - return nextReactRootIndex++; - } - }; - - module.exports = ClientReactRootIndex; -}); -System.registerDynamic("npm:react@0.13.3/lib/DefaultEventPluginOrder.js", ["./keyOf", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule DefaultEventPluginOrder - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var keyOf = $__require("./keyOf"); - - /** - * Module that is injectable into `EventPluginHub`, that specifies a - * deterministic ordering of `EventPlugin`s. A convenient way to reason about - * plugins, without having to package every one of them. This is better than - * having plugins be ordered in the same order that they are injected because - * that ordering would be influenced by the packaging order. - * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that - * preventing default on events is convenient in `SimpleEventPlugin` handlers. - */ - var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null }), keyOf({ AnalyticsEventPlugin: null }), keyOf({ MobileSafariClickEventPlugin: null })]; - - module.exports = DefaultEventPluginOrder; -}); -System.registerDynamic("npm:react@0.13.3/lib/EnterLeaveEventPlugin.js", ["./EventConstants", "./EventPropagators", "./SyntheticMouseEvent", "./ReactMount", "./keyOf", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule EnterLeaveEventPlugin - * @typechecks static-only - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var EventConstants = $__require("./EventConstants"); - var EventPropagators = $__require("./EventPropagators"); - var SyntheticMouseEvent = $__require("./SyntheticMouseEvent"); - - var ReactMount = $__require("./ReactMount"); - var keyOf = $__require("./keyOf"); - - var topLevelTypes = EventConstants.topLevelTypes; - var getFirstReactDOM = ReactMount.getFirstReactDOM; - - var eventTypes = { - mouseEnter: { - registrationName: keyOf({ onMouseEnter: null }), - dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver] - }, - mouseLeave: { - registrationName: keyOf({ onMouseLeave: null }), - dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver] - } - }; - - var extractedEvents = [null, null]; - - var EnterLeaveEventPlugin = { - - eventTypes: eventTypes, - - /** - * For almost every interaction we care about, there will be both a top-level - * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that - * we do not extract duplicate events. However, moving the mouse into the - * browser from outside will not fire a `mouseout` event. In this case, we use - * the `mouseover` top-level event. - * - * @param {string} topLevelType Record from `EventConstants`. - * @param {DOMEventTarget} topLevelTarget The listening component root node. - * @param {string} topLevelTargetID ID of `topLevelTarget`. - * @param {object} nativeEvent Native browser event. - * @return {*} An accumulation of synthetic events. - * @see {EventPluginHub.extractEvents} - */ - extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) { - if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) { - return null; - } - if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) { - // Must not be a mouse in or mouse out - ignoring. - return null; - } - - var win; - if (topLevelTarget.window === topLevelTarget) { - // `topLevelTarget` is probably a window object. - win = topLevelTarget; - } else { - // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8. - var doc = topLevelTarget.ownerDocument; - if (doc) { - win = doc.defaultView || doc.parentWindow; - } else { - win = window; - } - } - - var from, to; - if (topLevelType === topLevelTypes.topMouseOut) { - from = topLevelTarget; - to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement) || win; - } else { - from = win; - to = topLevelTarget; - } - - if (from === to) { - // Nothing pertains to our managed components. - return null; - } - - var fromID = from ? ReactMount.getID(from) : ''; - var toID = to ? ReactMount.getID(to) : ''; - - var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent); - leave.type = 'mouseleave'; - leave.target = from; - leave.relatedTarget = to; - - var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent); - enter.type = 'mouseenter'; - enter.target = to; - enter.relatedTarget = from; - - EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID); - - extractedEvents[0] = leave; - extractedEvents[1] = enter; - - return extractedEvents; - } - - }; - - module.exports = EnterLeaveEventPlugin; -}); -System.registerDynamic("npm:react@0.13.3/lib/HTMLDOMPropertyConfig.js", ["./DOMProperty", "./ExecutionEnvironment", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule HTMLDOMPropertyConfig - */ - - /*jslint bitwise: true*/ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var DOMProperty = $__require("./DOMProperty"); - var ExecutionEnvironment = $__require("./ExecutionEnvironment"); - - var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE; - var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY; - var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE; - var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS; - var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE; - var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE; - var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE; - - var hasSVG; - if (ExecutionEnvironment.canUseDOM) { - var implementation = document.implementation; - hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1'); - } - - var HTMLDOMPropertyConfig = { - isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/), - Properties: { - /** - * Standard Properties - */ - accept: null, - acceptCharset: null, - accessKey: null, - action: null, - allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, - allowTransparency: MUST_USE_ATTRIBUTE, - alt: null, - async: HAS_BOOLEAN_VALUE, - autoComplete: null, - // autoFocus is polyfilled/normalized by AutoFocusMixin - // autoFocus: HAS_BOOLEAN_VALUE, - autoPlay: HAS_BOOLEAN_VALUE, - cellPadding: null, - cellSpacing: null, - charSet: MUST_USE_ATTRIBUTE, - checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, - classID: MUST_USE_ATTRIBUTE, - // To set className on SVG elements, it's necessary to use .setAttribute; - // this works on HTML elements too in all browsers except IE8. Conveniently, - // IE8 doesn't support SVG and so we can simply use the attribute in - // browsers that support SVG and the property in browsers that don't, - // regardless of whether the element is HTML or SVG. - className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY, - cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, - colSpan: null, - content: null, - contentEditable: null, - contextMenu: MUST_USE_ATTRIBUTE, - controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, - coords: null, - crossOrigin: null, - data: null, // For `` acts as `src`. - dateTime: MUST_USE_ATTRIBUTE, - defer: HAS_BOOLEAN_VALUE, - dir: null, - disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, - download: HAS_OVERLOADED_BOOLEAN_VALUE, - draggable: null, - encType: null, - form: MUST_USE_ATTRIBUTE, - formAction: MUST_USE_ATTRIBUTE, - formEncType: MUST_USE_ATTRIBUTE, - formMethod: MUST_USE_ATTRIBUTE, - formNoValidate: HAS_BOOLEAN_VALUE, - formTarget: MUST_USE_ATTRIBUTE, - frameBorder: MUST_USE_ATTRIBUTE, - headers: null, - height: MUST_USE_ATTRIBUTE, - hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, - high: null, - href: null, - hrefLang: null, - htmlFor: null, - httpEquiv: null, - icon: null, - id: MUST_USE_PROPERTY, - label: null, - lang: null, - list: MUST_USE_ATTRIBUTE, - loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, - low: null, - manifest: MUST_USE_ATTRIBUTE, - marginHeight: null, - marginWidth: null, - max: null, - maxLength: MUST_USE_ATTRIBUTE, - media: MUST_USE_ATTRIBUTE, - mediaGroup: null, - method: null, - min: null, - multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, - muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, - name: null, - noValidate: HAS_BOOLEAN_VALUE, - open: HAS_BOOLEAN_VALUE, - optimum: null, - pattern: null, - placeholder: null, - poster: null, - preload: null, - radioGroup: null, - readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, - rel: null, - required: HAS_BOOLEAN_VALUE, - role: MUST_USE_ATTRIBUTE, - rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, - rowSpan: null, - sandbox: null, - scope: null, - scoped: HAS_BOOLEAN_VALUE, - scrolling: null, - seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, - selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, - shape: null, - size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, - sizes: MUST_USE_ATTRIBUTE, - span: HAS_POSITIVE_NUMERIC_VALUE, - spellCheck: null, - src: null, - srcDoc: MUST_USE_PROPERTY, - srcSet: MUST_USE_ATTRIBUTE, - start: HAS_NUMERIC_VALUE, - step: null, - style: null, - tabIndex: null, - target: null, - title: null, - type: null, - useMap: null, - value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS, - width: MUST_USE_ATTRIBUTE, - wmode: MUST_USE_ATTRIBUTE, - - /** - * Non-standard Properties - */ - // autoCapitalize and autoCorrect are supported in Mobile Safari for - // keyboard hints. - autoCapitalize: null, - autoCorrect: null, - // itemProp, itemScope, itemType are for - // Microdata support. See http://schema.org/docs/gs.html - itemProp: MUST_USE_ATTRIBUTE, - itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, - itemType: MUST_USE_ATTRIBUTE, - // itemID and itemRef are for Microdata support as well but - // only specified in the the WHATWG spec document. See - // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api - itemID: MUST_USE_ATTRIBUTE, - itemRef: MUST_USE_ATTRIBUTE, - // property is supported for OpenGraph in meta tags. - property: null, - // IE-only attribute that controls focus behavior - unselectable: MUST_USE_ATTRIBUTE - }, - DOMAttributeNames: { - acceptCharset: 'accept-charset', - className: 'class', - htmlFor: 'for', - httpEquiv: 'http-equiv' - }, - DOMPropertyNames: { - autoCapitalize: 'autocapitalize', - autoComplete: 'autocomplete', - autoCorrect: 'autocorrect', - autoFocus: 'autofocus', - autoPlay: 'autoplay', - // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter. - // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding - encType: 'encoding', - hrefLang: 'hreflang', - radioGroup: 'radiogroup', - spellCheck: 'spellcheck', - srcDoc: 'srcdoc', - srcSet: 'srcset' - } - }; - - module.exports = HTMLDOMPropertyConfig; -}); -System.registerDynamic("npm:react@0.13.3/lib/MobileSafariClickEventPlugin.js", ["./EventConstants", "./emptyFunction", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule MobileSafariClickEventPlugin - * @typechecks static-only - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var EventConstants = $__require("./EventConstants"); - - var emptyFunction = $__require("./emptyFunction"); - - var topLevelTypes = EventConstants.topLevelTypes; - - /** - * Mobile Safari does not fire properly bubble click events on non-interactive - * elements, which means delegated click listeners do not fire. The workaround - * for this bug involves attaching an empty click listener on the target node. - * - * This particular plugin works around the bug by attaching an empty click - * listener on `touchstart` (which does fire on every element). - */ - var MobileSafariClickEventPlugin = { - - eventTypes: null, - - /** - * @param {string} topLevelType Record from `EventConstants`. - * @param {DOMEventTarget} topLevelTarget The listening component root node. - * @param {string} topLevelTargetID ID of `topLevelTarget`. - * @param {object} nativeEvent Native browser event. - * @return {*} An accumulation of synthetic events. - * @see {EventPluginHub.extractEvents} - */ - extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) { - if (topLevelType === topLevelTypes.topTouchStart) { - var target = nativeEvent.target; - if (target && !target.onclick) { - target.onclick = emptyFunction; - } - } - } - - }; - - module.exports = MobileSafariClickEventPlugin; -}); -System.registerDynamic("npm:react@0.13.3/lib/ReactDefaultBatchingStrategy.js", ["./ReactUpdates", "./Transaction", "./Object.assign", "./emptyFunction", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactDefaultBatchingStrategy - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var ReactUpdates = $__require("./ReactUpdates"); - var Transaction = $__require("./Transaction"); - - var assign = $__require("./Object.assign"); - var emptyFunction = $__require("./emptyFunction"); - - var RESET_BATCHED_UPDATES = { - initialize: emptyFunction, - close: function () { - ReactDefaultBatchingStrategy.isBatchingUpdates = false; - } - }; - - var FLUSH_BATCHED_UPDATES = { - initialize: emptyFunction, - close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates) - }; - - var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES]; - - function ReactDefaultBatchingStrategyTransaction() { - this.reinitializeTransaction(); - } - - assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, { - getTransactionWrappers: function () { - return TRANSACTION_WRAPPERS; - } - }); - - var transaction = new ReactDefaultBatchingStrategyTransaction(); - - var ReactDefaultBatchingStrategy = { - isBatchingUpdates: false, - - /** - * Call the provided function in a context within which calls to `setState` - * and friends are batched such that components aren't updated unnecessarily. - */ - batchedUpdates: function (callback, a, b, c, d) { - var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates; - - ReactDefaultBatchingStrategy.isBatchingUpdates = true; - - // The code is written this way to avoid extra allocations - if (alreadyBatchingUpdates) { - callback(a, b, c, d); - } else { - transaction.perform(callback, null, a, b, c, d); - } - } - }; - - module.exports = ReactDefaultBatchingStrategy; -}); -System.registerDynamic("npm:react@0.13.3/lib/ReactDOMButton.js", ["./AutoFocusMixin", "./ReactBrowserComponentMixin", "./ReactClass", "./ReactElement", "./keyMirror", "process"], true, function ($__require, exports, module) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactDOMButton - */ - - 'use strict'; - - var process = $__require("process"); - var global = this || self, - GLOBAL = global; - var AutoFocusMixin = $__require("./AutoFocusMixin"); - var ReactBrowserComponentMixin = $__require("./ReactBrowserComponentMixin"); - var ReactClass = $__require("./ReactClass"); - var ReactElement = $__require("./ReactElement"); - - var keyMirror = $__require("./keyMirror"); - - var button = ReactElement.createFactory('button'); - - var mouseListenerNames = keyMirror({ - onClick: true, - onDoubleClick: true, - onMouseDown: true, - onMouseMove: true, - onMouseUp: true, - onClickCapture: true, - onDoubleClickCapture: true, - onMouseDownCapture: true, - onMouseMoveCapture: true, - onMouseUpCapture: true - }); - - /** - * Implements a