summaryrefslogtreecommitdiffstats
path: root/node_modules/scss-tokenizer
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/scss-tokenizer')
-rw-r--r--node_modules/scss-tokenizer/LICENSE22
-rw-r--r--node_modules/scss-tokenizer/README.md50
-rw-r--r--node_modules/scss-tokenizer/index.js1
-rw-r--r--node_modules/scss-tokenizer/lib/entry.js21
-rw-r--r--node_modules/scss-tokenizer/lib/input.js57
-rw-r--r--node_modules/scss-tokenizer/lib/previous-map.js105
-rw-r--r--node_modules/scss-tokenizer/lib/tokenize-comment.js148
-rw-r--r--node_modules/scss-tokenizer/lib/tokenize-interpolant.js303
-rw-r--r--node_modules/scss-tokenizer/lib/tokenize-string.js130
-rw-r--r--node_modules/scss-tokenizer/lib/tokenize.js302
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/README.md510
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/assert-shim.js56
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/mini-require.js152
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/prefix-source-map.jsm21
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/prefix-utils.jsm18
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/suffix-browser.js8
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/suffix-source-map.jsm6
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/suffix-utils.jsm21
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/test-prefix.js8
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/build/test-suffix.js3
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map.js8
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/array-set.js107
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/base64-vlq.js146
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/base64.js73
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/binary-search.js117
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/mapping-list.js86
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/quick-sort.js120
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-map-consumer.js1077
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-map-generator.js399
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-node.js414
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/util.js370
-rw-r--r--node_modules/scss-tokenizer/node_modules/source-map/package.json198
-rw-r--r--node_modules/scss-tokenizer/package.json73
33 files changed, 0 insertions, 5130 deletions
diff --git a/node_modules/scss-tokenizer/LICENSE b/node_modules/scss-tokenizer/LICENSE
deleted file mode 100644
index eb44a43..0000000
--- a/node_modules/scss-tokenizer/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 sasstools
-
-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.
-
diff --git a/node_modules/scss-tokenizer/README.md b/node_modules/scss-tokenizer/README.md
deleted file mode 100644
index cfcb2c0..0000000
--- a/node_modules/scss-tokenizer/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# scss-tokenizer
-A tokenzier for Sass' SCSS syntax
-
-![https://travis-ci.org/sasstools/scss-tokenizer.svg?branch=master](https://img.shields.io/travis/sasstools/scss-tokenizer.svg)
-![https://www.npmjs.com/package/scss-tokenizer](https://img.shields.io/npm/v/scss-tokenizer.svg)
-![https://github.com/sasstools/scss-tokenizer/issues](https://img.shields.io/github/issues/sasstools/scss-tokenizer.svg)
-![](https://img.shields.io/github/license/sasstools/scss-tokenizer.svg)
-
-# Install
-
-```
-npm install scss-tokenizer
-```
-
-# Usage
-
-```js
-var scss = require('scss-tokenizer');
-scss.tokenize(css);
-```
-
-# API
-
-### `tokenize`
-
-Tokenizes source `css` and returns an ordered array of tokens with positional
-data.
-
-```js
-var tokenizer = require('scss-tokenizer');
-var tokens = tokenize.tokenize(css);
-```
-
-Arguments:
-
-* `css (string|#toString)`: String with input CSS or any object
- with `toString()` method, like file stream.
-* `opts (object) optional`: options:
- * `from`: the path to the source CSS file. You should always set `from`,
- because it is used in map generation and in syntax error messages.
-
-# Test
-
-```
-npm test
-```
-
-## Attribution
-
-This project started as a fork of the [PostCSS](https://github.com/postcss/postcss) tokenizer.
diff --git a/node_modules/scss-tokenizer/index.js b/node_modules/scss-tokenizer/index.js
deleted file mode 100644
index 51d496c..0000000
--- a/node_modules/scss-tokenizer/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./lib/entry').default;
diff --git a/node_modules/scss-tokenizer/lib/entry.js b/node_modules/scss-tokenizer/lib/entry.js
deleted file mode 100644
index 282c6b6..0000000
--- a/node_modules/scss-tokenizer/lib/entry.js
+++ /dev/null
@@ -1,21 +0,0 @@
-'use strict';
-
-exports.__esModule = true;
-
-var _input = require('./input');
-
-var _input2 = _interopRequireDefault(_input);
-
-var _tokenize = require('./tokenize');
-
-var _tokenize2 = _interopRequireDefault(_tokenize);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var scss = {};
-scss.tokenize = function (css) {
- var input = new _input2.default(css);
- return (0, _tokenize2.default)(input);
-};
-
-exports.default = scss; \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/input.js b/node_modules/scss-tokenizer/lib/input.js
deleted file mode 100644
index ffbc009..0000000
--- a/node_modules/scss-tokenizer/lib/input.js
+++ /dev/null
@@ -1,57 +0,0 @@
-'use strict';
-
-exports.__esModule = true;
-
-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;
-
-var Input = function () {
- function Input(css) {
- var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-
- _classCallCheck(this, Input);
-
- this.css = css.toString();
-
- if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') {
- this.css = this.css.slice(1);
- }
-
- if (opts.from) this.file = _path2.default.resolve(opts.from);
-
- var map = new _previousMap2.default(this.css, opts, this.id);
- if (map.text) {
- this.map = map;
- var file = map.consumer().file;
- if (!this.file && file) this.file = this.mapResolve(file);
- }
-
- if (this.file) {
- this.from = this.file;
- } else {
- sequence += 1;
- this.id = '<input css ' + sequence + '>';
- this.from = this.id;
- }
- if (this.map) this.map.file = this.from;
- }
-
- Input.prototype.mapResolve = function mapResolve(file) {
- return _path2.default.resolve(this.map.consumer().sourceRoot || '.', file);
- };
-
- return Input;
-}();
-
-exports.default = Input; \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/previous-map.js b/node_modules/scss-tokenizer/lib/previous-map.js
deleted file mode 100644
index 034e9ca..0000000
--- a/node_modules/scss-tokenizer/lib/previous-map.js
+++ /dev/null
@@ -1,105 +0,0 @@
-'use strict';
-
-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 _jsBase = require('js-base64');
-
-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"); } }
-
-var PreviousMap = function () {
- function PreviousMap(css, opts) {
- _classCallCheck(this, PreviousMap);
-
- this.loadAnnotation(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;
- }
-
- PreviousMap.prototype.consumer = function consumer() {
- if (!this.consumerCache) {
- this.consumerCache = new _sourceMap2.default.SourceMapConsumer(this.text);
- }
- return this.consumerCache;
- };
-
- 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) {
- var uri = 'data:application/json,';
- var base64 = 'data:application/json;base64,';
-
- if (this.startWith(text, uri)) {
- return decodeURIComponent(text.substr(uri.length));
- } else if (this.startWith(text, base64)) {
- return _jsBase.Base64.decode(text.substr(base64.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 (prev instanceof _sourceMap2.default.SourceMapConsumer) {
- return _sourceMap2.default.SourceMapGenerator.fromSourceMap(prev).toString();
- } else if (prev instanceof _sourceMap2.default.SourceMapGenerator) {
- return prev.toString();
- } else if ((typeof prev === 'undefined' ? 'undefined' : _typeof(prev)) === 'object' && prev.mappings) {
- 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;
- }
- }
- };
-
- return PreviousMap;
-}();
-
-exports.default = PreviousMap; \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/tokenize-comment.js b/node_modules/scss-tokenizer/lib/tokenize-comment.js
deleted file mode 100644
index ade9717..0000000
--- a/node_modules/scss-tokenizer/lib/tokenize-comment.js
+++ /dev/null
@@ -1,148 +0,0 @@
-'use strict';
-
-exports.__esModule = true;
-exports.default = tokenize;
-
-var _input = require('./input');
-
-var _input2 = _interopRequireDefault(_input);
-
-var _tokenizeString = require('./tokenize-string');
-
-var _tokenizeString2 = _interopRequireDefault(_tokenizeString);
-
-var _tokenizeInterpolant2 = require('./tokenize-interpolant');
-
-var _tokenizeInterpolant3 = _interopRequireDefault(_tokenizeInterpolant2);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var newline = '\n'.charCodeAt(0),
- space = ' '.charCodeAt(0),
- feed = '\f'.charCodeAt(0),
- tab = '\t'.charCodeAt(0),
- cr = '\r'.charCodeAt(0),
- hash = '#'.charCodeAt(0),
- backslash = '\\'.charCodeAt(0),
- slash = '/'.charCodeAt(0),
- openCurly = '{'.charCodeAt(0),
- closeCurly = '}'.charCodeAt(0),
- asterisk = '*'.charCodeAt(0),
- wordEnd = /[ \n\t\r\(\)\{\},:;@!'"\\]|\*(?=\/)|#(?={)/g;
-
-function tokenize(input, l, p) {
- var tokens = [];
- var css = input.css.valueOf();
-
- var code = void 0,
- next = 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,
- inInterpolant = void 0,
- inComment = void 0,
- inString = void 0;
-
- var length = css.length;
- var offset = -1;
- var line = l || 1;
- var pos = p || 0;
-
- loop: while (pos < length) {
- code = css.charCodeAt(pos);
-
- if (code === newline) {
- offset = pos;
- line += 1;
- }
-
- switch (code) {
- 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 === tab || code === cr || code === feed);
-
- tokens.push(['space', css.slice(pos, next)]);
- pos = next - 1;
- break;
-
- case newline:
- tokens.push(['newline', '\n', line, pos - offset]);
- break;
-
- case closeCurly:
- tokens.push(['endInterpolant', '}', line, pos - offset]);
- 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;
- }
- tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
- pos = next;
- break;
-
- default:
-
- if (code === asterisk && css.charCodeAt(pos + 1) === slash) {
- next = pos;
- pos = next - 1;
- break loop;
- }
-
- if (code === hash && css.charCodeAt(pos + 1) === openCurly) {
- tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]);
- next = pos + 1;
-
- var _tokenizeInterpolant = (0, _tokenizeInterpolant3.default)(input, line, next + 1),
- t = _tokenizeInterpolant.tokens,
- _p = _tokenizeInterpolant.pos;
-
- tokens = tokens.concat(t);
- next = _p;
-
- pos = next;
- break;
- }
-
- wordEnd.lastIndex = pos + 1;
- wordEnd.test(css);
- if (wordEnd.lastIndex === 0) {
- next = css.length - 1;
- } else {
- next = wordEnd.lastIndex - 2;
- }
-
- tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
-
- break;
- }
-
- pos++;
- }
-
- return { tokens: tokens, line: line, pos: pos, offset: offset };
-} \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/tokenize-interpolant.js b/node_modules/scss-tokenizer/lib/tokenize-interpolant.js
deleted file mode 100644
index 415771f..0000000
--- a/node_modules/scss-tokenizer/lib/tokenize-interpolant.js
+++ /dev/null
@@ -1,303 +0,0 @@
-'use strict';
-
-exports.__esModule = true;
-exports.default = tokenize;
-
-var _input = require('./input');
-
-var _input2 = _interopRequireDefault(_input);
-
-var _tokenizeString2 = require('./tokenize-string');
-
-var _tokenizeString3 = _interopRequireDefault(_tokenizeString2);
-
-var _tokenizeComment2 = require('./tokenize-comment');
-
-var _tokenizeComment3 = _interopRequireDefault(_tokenizeComment2);
-
-var _tokenizeInterpolant2 = require('./tokenize-interpolant');
-
-var _tokenizeInterpolant3 = _interopRequireDefault(_tokenizeInterpolant2);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var singleQuote = "'".charCodeAt(0),
- doubleQuote = '"'.charCodeAt(0),
- dollar = '$'.charCodeAt(0),
- hash = '#'.charCodeAt(0),
- backslash = '\\'.charCodeAt(0),
- slash = '/'.charCodeAt(0),
- newline = '\n'.charCodeAt(0),
- space = ' '.charCodeAt(0),
- feed = '\f'.charCodeAt(0),
- tab = '\t'.charCodeAt(0),
- cr = '\r'.charCodeAt(0),
- openBracket = '('.charCodeAt(0),
- closeBracket = ')'.charCodeAt(0),
- openCurly = '{'.charCodeAt(0),
- closeCurly = '}'.charCodeAt(0),
- semicolon = ';'.charCodeAt(0),
- asterisk = '*'.charCodeAt(0),
- colon = ':'.charCodeAt(0),
- at = '@'.charCodeAt(0),
- comma = ','.charCodeAt(0),
- plus = '+'.charCodeAt(0),
- minus = '-'.charCodeAt(0),
- decComb = '>'.charCodeAt(0),
- adjComb = '~'.charCodeAt(0),
- number = /[+-]?(\d+(\.\d+)?|\.\d+)|(e[+-]\d+)/gi,
- sQuoteEnd = /(.*?)[^\\](?=((#{)|'))/gm,
- dQuoteEnd = /(.*?)[^\\](?=((#{)|"))/gm,
- wordEnd = /[ \n\t\r\(\)\{\},:;@!'"\\]|\/(?=\*)|#(?={)/g,
- ident = /-?([a-z_]|\\[^\\])([a-z-_0-9]|\\[^\\])*/gi;
-
-function tokenize(input, l, p) {
- var tokens = [];
- var css = input.css.valueOf();
-
- 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,
- inInterpolant = void 0,
- inComment = void 0,
- inString = void 0;
-
- var length = css.length;
- var offset = -1;
- var line = l || 1;
- var pos = p || 0;
-
- loop: while (pos < length) {
- code = css.charCodeAt(pos);
-
- if (code === newline) {
- offset = pos;
- line += 1;
- }
-
- switch (code) {
- 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 === tab || code === cr || code === feed);
-
- tokens.push(['space', css.slice(pos, next)]);
- pos = next - 1;
- break;
-
- case newline:
- tokens.push(['newline', '\n', line, pos - offset]);
- break;
-
- case plus:
- tokens.push(['+', '+', line, pos - offset]);
- break;
-
- case minus:
- tokens.push(['-', '-', line, pos - offset]);
- break;
-
- case decComb:
- tokens.push(['>', '>', line, pos - offset]);
- break;
-
- case adjComb:
- tokens.push(['~', '~', line, pos - offset]);
- break;
-
- case openCurly:
- tokens.push(['{', '{', line, pos - offset]);
- break;
-
- case closeCurly:
- if (inInterpolant) {
- inInterpolant = false;
- tokens.push(['endInterpolant', '}', line, pos - offset]);
- } else {
- break loop;
- }
- break;
-
- case comma:
- tokens.push([',', ',', line, pos - offset]);
- break;
-
- case dollar:
- tokens.push(['$', '$', line, pos - offset]);
- break;
-
- case colon:
- tokens.push([':', ':', line, pos - offset]);
- break;
-
- case semicolon:
- tokens.push([';', ';', line, pos - offset]);
- break;
-
- case openBracket:
- tokens.push(['(', '(', line, pos - offset]);
- break;
-
- case closeBracket:
- tokens.push([')', ')', line, pos - offset]);
- break;
-
- case singleQuote:
- case doubleQuote:
- quote = code === singleQuote ? "'" : '"';
- tokens.push([quote, quote, line, pos - offset]);
- next = pos + 1;
-
- var _tokenizeString = (0, _tokenizeString3.default)(input, line, next, quote),
- t = _tokenizeString.tokens,
- _p = _tokenizeString.pos;
-
- tokens = tokens.concat(t);
- next = _p;
-
- pos = next;
- break;
-
- case at:
- tokens.push(['@', '@', line, pos - offset]);
- 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 !== space && code !== newline && code !== tab && code !== cr && code !== feed) {
- next += 1;
- }
- tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
- pos = next;
- break;
-
- default:
- ident.lastIndex = pos;
- number.lastIndex = pos;
- wordEnd.lastIndex = pos;
-
- if (code === slash && css.charCodeAt(pos + 1) === asterisk) {
- inComment = true;
- tokens.push(['startComment', '/*', line, pos + 1 - offset]);
- next = pos + 1;
-
- var _tokenizeComment = (0, _tokenizeComment3.default)(input, line, next + 1),
- _t = _tokenizeComment.tokens,
- _l = _tokenizeComment.line,
- _p2 = _tokenizeComment.pos,
- o = _tokenizeComment.offset;
-
- tokens = tokens.concat(_t);
- next = _p2;
- line = _l;
- offset = o;
-
- pos = next;
- break;
- }
-
- if (code === asterisk && css.charCodeAt(pos + 1) !== slash) {
- tokens.push(['*', '*', line, pos - offset]);
- break;
- }
-
- if (inComment && code === asterisk && css.charCodeAt(pos + 1) === slash) {
- inComment = false;
- tokens.push(['endComment', '*/', line, pos + 1 - offset]);
- pos += 2;
- break;
- }
-
- if (code === slash && css.charCodeAt(pos + 1) !== slash) {
- tokens.push(['/', '/', line, pos - offset]);
- pos += 2;
- break;
- }
-
- if (code === hash && css.charCodeAt(pos + 1) === openCurly) {
- inInterpolant = true;
- tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]);
- next = pos + 1;
-
- var _tokenizeInterpolant = (0, _tokenizeInterpolant3.default)(input, line, next + 1),
- _t2 = _tokenizeInterpolant.tokens,
- _p3 = _tokenizeInterpolant.pos;
-
- tokens = tokens.concat(_t2);
- next = _p3;
-
- pos = next;
- break;
- }
-
- if (code === slash && css.charCodeAt(pos + 1) === slash) {
- next = css.indexOf('\n\n', pos + 2);
- next = next > 0 ? next : css.length;
-
- tokens.push(['scssComment', css.slice(pos, next), line, pos - offset, line, next - offset]);
-
- pos = next;
- break;
- }
-
- if (ident.test(css) && (ident.lastIndex = pos || 1) && ident.exec(css).index === pos) {
- next = ident.lastIndex - 1;
-
- tokens.push(['ident', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
- break;
- }
-
- if (number.test(css) && (number.lastIndex = pos || 1) && number.exec(css).index === pos) {
- next = number.lastIndex - 1;
-
- tokens.push(['number', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
- break;
- }
-
- wordEnd.lastIndex = pos + 1;
- wordEnd.test(css);
- if (wordEnd.lastIndex === 0) {
- next = css.length - 1;
- } else {
- next = wordEnd.lastIndex - 2;
- }
-
- tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
-
- break;
- }
-
- pos++;
- }
-
- return { tokens: tokens, pos: pos };
-} \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/tokenize-string.js b/node_modules/scss-tokenizer/lib/tokenize-string.js
deleted file mode 100644
index 55e7af5..0000000
--- a/node_modules/scss-tokenizer/lib/tokenize-string.js
+++ /dev/null
@@ -1,130 +0,0 @@
-'use strict';
-
-exports.__esModule = true;
-exports.default = tokenize;
-
-var _input = require('./input');
-
-var _input2 = _interopRequireDefault(_input);
-
-var _tokenizeString = require('./tokenize-string');
-
-var _tokenizeString2 = _interopRequireDefault(_tokenizeString);
-
-var _tokenizeInterpolant2 = require('./tokenize-interpolant');
-
-var _tokenizeInterpolant3 = _interopRequireDefault(_tokenizeInterpolant2);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var singleQuote = "'".charCodeAt(0),
- doubleQuote = '"'.charCodeAt(0),
- newline = '\n'.charCodeAt(0),
- space = ' '.charCodeAt(0),
- feed = '\f'.charCodeAt(0),
- tab = '\t'.charCodeAt(0),
- cr = '\r'.charCodeAt(0),
- hash = '#'.charCodeAt(0),
- backslash = '\\'.charCodeAt(0),
- slash = '/'.charCodeAt(0),
- openCurly = '{'.charCodeAt(0),
- closeCurly = '}'.charCodeAt(0),
- interpolantEnd = /([.\s]*?)[^\\](?=(}))/gm,
- sQuoteEnd = /([.\s]*?)[^\\](?=((#{)|'))/gm,
- dQuoteEnd = /([.\s]*?)[^\\](?=((#{)|"))/gm;
-
-function tokenize(input, l, p, quote) {
- var tokens = [];
- var css = input.css.valueOf();
-
- var code = void 0,
- next = 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,
- inInterpolant = void 0,
- inComment = void 0,
- inString = void 0;
-
- var length = css.length;
- var offset = -1;
- var line = l || 1;
- var pos = p || 0;
-
- var quoteEnd = quote === "'" ? sQuoteEnd : dQuoteEnd;
- var quoteChar = quote.charCodeAt(0);
-
- loop: while (pos < length) {
- code = css.charCodeAt(pos);
-
- if (code === newline) {
- offset = pos;
- line += 1;
- }
-
- switch (code) {
-
- case closeCurly:
- tokens.push(['endInterpolant', '}', line, pos - offset]);
- break;
-
- case quoteChar:
- tokens.push([quote, quote, line, pos - offset]);
- break loop;
-
- 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;
- }
- tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
- pos = next;
- break;
-
- default:
- if (code === hash && css.charCodeAt(pos + 1) === openCurly) {
- tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]);
- next = pos + 1;
-
- var _tokenizeInterpolant = (0, _tokenizeInterpolant3.default)(input, line, next + 1),
- t = _tokenizeInterpolant.tokens,
- _p = _tokenizeInterpolant.pos;
-
- tokens = tokens.concat(t);
- next = _p;
-
- pos = next;
- } else {
- quoteEnd.lastIndex = pos;
- quoteEnd.test(css);
-
- if (quoteEnd.lastIndex === 0) {
- next = css.length - 1;
- } else {
- next = quoteEnd.lastIndex - 1;
- }
-
- tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
- }
-
- break;
- }
-
- pos++;
- }
-
- return { tokens: tokens, pos: pos };
-} \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/tokenize.js b/node_modules/scss-tokenizer/lib/tokenize.js
deleted file mode 100644
index 4be34fe..0000000
--- a/node_modules/scss-tokenizer/lib/tokenize.js
+++ /dev/null
@@ -1,302 +0,0 @@
-'use strict';
-
-exports.__esModule = true;
-exports.default = tokenize;
-
-var _input = require('./input');
-
-var _input2 = _interopRequireDefault(_input);
-
-var _tokenizeString2 = require('./tokenize-string');
-
-var _tokenizeString3 = _interopRequireDefault(_tokenizeString2);
-
-var _tokenizeComment2 = require('./tokenize-comment');
-
-var _tokenizeComment3 = _interopRequireDefault(_tokenizeComment2);
-
-var _tokenizeInterpolant2 = require('./tokenize-interpolant');
-
-var _tokenizeInterpolant3 = _interopRequireDefault(_tokenizeInterpolant2);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var singleQuote = "'".charCodeAt(0),
- doubleQuote = '"'.charCodeAt(0),
- dollar = '$'.charCodeAt(0),
- hash = '#'.charCodeAt(0),
- backslash = '\\'.charCodeAt(0),
- slash = '/'.charCodeAt(0),
- newline = '\n'.charCodeAt(0),
- space = ' '.charCodeAt(0),
- feed = '\f'.charCodeAt(0),
- tab = '\t'.charCodeAt(0),
- cr = '\r'.charCodeAt(0),
- openBracket = '('.charCodeAt(0),
- closeBracket = ')'.charCodeAt(0),
- openCurly = '{'.charCodeAt(0),
- closeCurly = '}'.charCodeAt(0),
- semicolon = ';'.charCodeAt(0),
- asterisk = '*'.charCodeAt(0),
- colon = ':'.charCodeAt(0),
- at = '@'.charCodeAt(0),
- comma = ','.charCodeAt(0),
- plus = '+'.charCodeAt(0),
- minus = '-'.charCodeAt(0),
- decComb = '>'.charCodeAt(0),
- adjComb = '~'.charCodeAt(0),
- number = /[+-]?(\d+(\.\d+)?|\.\d+)|(e[+-]\d+)/gi,
- sQuoteEnd = /(.*?)[^\\](?=((#{)|'))/gm,
- dQuoteEnd = /(.*?)[^\\](?=((#{)|"))/gm,
- wordEnd = /[ \n\t\r\(\)\{\},:;@!'"\\]|\/(?=\*)|#(?={)/g,
- ident = /-?([a-z_]|\\[^\\])([a-z-_0-9]|\\[^\\])*/gi;
-
-function tokenize(input, l, p) {
- var tokens = [];
- var css = input.css.valueOf();
-
- 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,
- inInterpolant = void 0,
- inComment = void 0,
- inString = void 0;
-
- var length = css.length;
- var offset = -1;
- var line = l || 1;
- var pos = p || 0;
-
- while (pos < length) {
- code = css.charCodeAt(pos);
-
- if (code === newline) {
- offset = pos;
- line += 1;
- }
-
- switch (code) {
- 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 === tab || code === cr || code === feed);
-
- tokens.push(['space', css.slice(pos, next)]);
- pos = next - 1;
- break;
-
- case newline:
- tokens.push(['newline', '\n', line, pos - offset]);
- break;
-
- case plus:
- tokens.push(['+', '+', line, pos - offset]);
- break;
-
- case minus:
- tokens.push(['-', '-', line, pos - offset]);
- break;
-
- case decComb:
- tokens.push(['>', '>', line, pos - offset]);
- break;
-
- case adjComb:
- tokens.push(['~', '~', line, pos - offset]);
- break;
-
- case openCurly:
- tokens.push(['{', '{', line, pos - offset]);
- break;
-
- case closeCurly:
- if (inInterpolant) {
- inInterpolant = false;
- tokens.push(['endInterpolant', '}', line, pos - offset]);
- } else {
- tokens.push(['}', '}', line, pos - offset]);
- }
- break;
-
- case comma:
- tokens.push([',', ',', line, pos - offset]);
- break;
-
- case dollar:
- tokens.push(['$', '$', line, pos - offset]);
- break;
-
- case colon:
- tokens.push([':', ':', line, pos - offset]);
- break;
-
- case semicolon:
- tokens.push([';', ';', line, pos - offset]);
- break;
-
- case openBracket:
- tokens.push(['(', '(', line, pos - offset]);
- break;
-
- case closeBracket:
- tokens.push([')', ')', line, pos - offset]);
- break;
-
- case singleQuote:
- case doubleQuote:
- quote = code === singleQuote ? "'" : '"';
- tokens.push([quote, quote, line, pos - offset]);
- next = pos + 1;
-
- var _tokenizeString = (0, _tokenizeString3.default)(input, line, next, quote),
- t = _tokenizeString.tokens,
- _p = _tokenizeString.pos;
-
- tokens = tokens.concat(t);
- next = _p;
-
- pos = next;
- break;
-
- case at:
- tokens.push(['@', '@', line, pos - offset]);
- 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 !== space && code !== newline && code !== tab && code !== cr && code !== feed) {
- next += 1;
- }
- tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
- pos = next;
- break;
-
- default:
- ident.lastIndex = pos;
- number.lastIndex = pos;
- wordEnd.lastIndex = pos;
-
- if (code === slash && css.charCodeAt(pos + 1) === asterisk) {
- inComment = true;
- tokens.push(['startComment', '/*', line, pos + 1 - offset]);
- next = pos + 1;
-
- var _tokenizeComment = (0, _tokenizeComment3.default)(input, line, next + 1),
- _t = _tokenizeComment.tokens,
- _l = _tokenizeComment.line,
- _p2 = _tokenizeComment.pos,
- o = _tokenizeComment.offset;
-
- tokens = tokens.concat(_t);
- next = _p2;
- line = _l;
- offset = o;
-
- pos = next;
- break;
- }
-
- if (code === asterisk && css.charCodeAt(pos + 1) !== slash) {
- tokens.push(['*', '*', line, pos - offset]);
- break;
- }
-
- if (inComment && code === asterisk && css.charCodeAt(pos + 1) === slash) {
- inComment = false;
- tokens.push(['endComment', '*/', line, pos + 1 - offset]);
- pos += 2;
- break;
- }
-
- if (code === slash && css.charCodeAt(pos + 1) !== slash) {
- tokens.push(['/', '/', line, pos - offset]);
- break;
- }
-
- if (code === hash && css.charCodeAt(pos + 1) === openCurly) {
- inInterpolant = true;
- tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]);
- next = pos + 1;
-
- var _tokenizeInterpolant = (0, _tokenizeInterpolant3.default)(input, line, next + 1),
- _t2 = _tokenizeInterpolant.tokens,
- _p3 = _tokenizeInterpolant.pos;
-
- tokens = tokens.concat(_t2);
- next = _p3;
-
- pos = next;
- break;
- }
-
- if (code === slash && css.charCodeAt(pos + 1) === slash) {
- next = css.indexOf('\n', pos + 2);
- next = (next > 0 ? next : css.length) - 1;
-
- tokens.push(['scssComment', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
- break;
- }
-
- if (ident.test(css) && (ident.lastIndex = pos || 1) && ident.exec(css).index === pos) {
- next = ident.lastIndex - 1;
-
- tokens.push(['ident', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
- break;
- }
-
- if (number.test(css) && (number.lastIndex = pos || 1) && number.exec(css).index === pos) {
- next = number.lastIndex - 1;
-
- tokens.push(['number', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
- break;
- }
-
- wordEnd.lastIndex = pos + 1;
- wordEnd.test(css);
- if (wordEnd.lastIndex === 0) {
- next = css.length - 1;
- } else {
- next = wordEnd.lastIndex - 2;
- }
-
- tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
-
- pos = next;
-
- break;
- }
-
- pos++;
- }
-
- return tokens;
-} \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/README.md b/node_modules/scss-tokenizer/node_modules/source-map/README.md
deleted file mode 100644
index b7c6786..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/README.md
+++ /dev/null
@@ -1,510 +0,0 @@
-# Source Map
-
-This is a library to generate and consume the source map format
-[described here][format].
-
-This library is written in the Asynchronous Module Definition format, and works
-in the following environments:
-
-* Modern Browsers supporting ECMAScript 5 (either after the build, or with an
- AMD loader such as RequireJS)
-
-* Inside Firefox (as a JSM file, after the build)
-
-* With NodeJS versions 0.8.X and higher
-
-## Node
-
- $ npm install source-map
-
-## Building from Source (for everywhere else)
-
-Install Node and then run
-
- $ git clone https://fitzgen@github.com/mozilla/source-map.git
- $ cd source-map
- $ npm link .
-
-Next, run
-
- $ node Makefile.dryice.js
-
-This should spew a bunch of stuff to stdout, and create the following files:
-
-* `dist/source-map.js` - The unminified browser version.
-
-* `dist/source-map.min.js` - The minified browser version.
-
-* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source.
-
-## Examples
-
-### Consuming a source map
-
-```js
-var rawSourceMap = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['one.js', 'two.js'],
- sourceRoot: 'http://example.com/www/js/',
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
-};
-
-var smc = new SourceMapConsumer(rawSourceMap);
-
-console.log(smc.sources);
-// [ 'http://example.com/www/js/one.js',
-// 'http://example.com/www/js/two.js' ]
-
-console.log(smc.originalPositionFor({
- line: 2,
- column: 28
-}));
-// { source: 'http://example.com/www/js/two.js',
-// line: 2,
-// column: 10,
-// name: 'n' }
-
-console.log(smc.generatedPositionFor({
- source: 'http://example.com/www/js/two.js',
- line: 2,
- column: 10
-}));
-// { line: 2, column: 28 }
-
-smc.eachMapping(function (m) {
- // ...
-});
-```
-
-### Generating a source map
-
-In depth guide:
-[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
-
-#### With SourceNode (high level API)
-
-```js
-function compile(ast) {
- switch (ast.type) {
- case 'BinaryExpression':
- return new SourceNode(
- ast.location.line,
- ast.location.column,
- ast.location.source,
- [compile(ast.left), " + ", compile(ast.right)]
- );
- case 'Literal':
- return new SourceNode(
- ast.location.line,
- ast.location.column,
- ast.location.source,
- String(ast.value)
- );
- // ...
- default:
- throw new Error("Bad AST");
- }
-}
-
-var ast = parse("40 + 2", "add.js");
-console.log(compile(ast).toStringWithSourceMap({
- file: 'add.js'
-}));
-// { code: '40 + 2',
-// map: [object SourceMapGenerator] }
-```
-
-#### With SourceMapGenerator (low level API)
-
-```js
-var map = new SourceMapGenerator({
- file: "source-mapped.js"
-});
-
-map.addMapping({
- generated: {
- line: 10,
- column: 35
- },
- source: "foo.js",
- original: {
- line: 33,
- column: 2
- },
- name: "christopher"
-});
-
-console.log(map.toString());
-// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
-```
-
-## API
-
-Get a reference to the module:
-
-```js
-// NodeJS
-var sourceMap = require('source-map');
-
-// Browser builds
-var sourceMap = window.sourceMap;
-
-// Inside Firefox
-let sourceMap = {};
-Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
-```
-
-### SourceMapConsumer
-
-A SourceMapConsumer 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.
-
-#### new SourceMapConsumer(rawSourceMap)
-
-The only parameter is the raw source map (either as a string which can be
-`JSON.parse`'d, or 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 filename this source map is associated with.
-
-#### SourceMapConsumer.prototype.computeColumnSpans()
-
-Compute the last column for each generated mapping. The last column is
-inclusive.
-
-#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
-
-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 if this information is not
- available.
-
-* `line`: The line number in the original source, or null if this information is
- not available.
-
-* `column`: The column number in the original source, or null or null if this
- information is not available.
-
-* `name`: The original identifier, or null if this information is not available.
-
-#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
-
-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.
-
-#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
-
-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.hasContentsOfAllSources()
-
-Return true if we have the embedded source content for every source listed in
-the source map, false otherwise.
-
-In other words, if this method returns `true`, then `smc.sourceContentFor(s)`
-will succeed for every source `s` in `smc.sources`.
-
-#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
-
-Returns the original source content for the source provided. The only
-argument is the URL of the original source file.
-
-If the source content for the given source is not found, then an error is
-thrown. Optionally, pass `true` as the second param to have `null` returned
-instead.
-
-#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
-
-Iterate over each mapping between an original source/line/column and a
-generated line/column in this source map.
-
-* `callback`: The function that is called with each mapping. Mappings have the
- form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
- name }`
-
-* `context`: Optional. If specified, this object will be the value of `this`
- every time that `callback` is called.
-
-* `order`: 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`.
-
-### SourceMapGenerator
-
-An instance of the SourceMapGenerator represents a source map which is being
-built incrementally.
-
-#### new SourceMapGenerator([startOfSourceMap])
-
-You may pass an object with the following properties:
-
-* `file`: The filename of the generated source that this source map is
- associated with.
-
-* `sourceRoot`: A root for all relative URLs in this source map.
-
-* `skipValidation`: Optional. When `true`, disables validation of mappings as
- they are added. This can improve performance but should be used with
- discretion, as a last resort. Even then, one should avoid using this flag when
- running tests, if possible.
-
-#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)
-
-Creates a new SourceMapGenerator based on a SourceMapConsumer
-
-* `sourceMapConsumer` The SourceMap.
-
-#### SourceMapGenerator.prototype.addMapping(mapping)
-
-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.setSourceContent(sourceFile, sourceContent)
-
-Set the source content for an original source file.
-
-* `sourceFile` the URL of the original source file.
-
-* `sourceContent` the content of the source file.
-
-#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
-
-Applies a SourceMap for a source file to the SourceMap.
-Each mapping to the supplied source file is rewritten using the
-supplied SourceMap. Note: The resolution for the resulting mappings
-is the minimium of this map and the supplied map.
-
-* `sourceMapConsumer`: The SourceMap to be applied.
-
-* `sourceFile`: Optional. The filename of the source file.
- If omitted, sourceMapConsumer.file will be used, if it exists.
- Otherwise an error will be thrown.
-
-* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
- to be applied. If relative, it is relative to the SourceMap.
-
- This parameter is needed when the two SourceMaps aren't in the same
- directory, and the SourceMap to be applied contains relative source
- paths. If so, those relative source paths need to be rewritten
- relative to the SourceMap.
-
- If omitted, it is assumed that both SourceMaps are in the same directory,
- thus not needing any rewriting. (Supplying `'.'` has the same effect.)
-
-#### SourceMapGenerator.prototype.toString()
-
-Renders the source map being generated to a string.
-
-### SourceNode
-
-SourceNodes provide a way to abstract over interpolating and/or concatenating
-snippets of generated JavaScript source code, while maintaining the line and
-column information associated between those snippets and the original source
-code. This is useful as the final intermediate representation a compiler might
-use before outputting the generated JS and source map.
-
-#### new SourceNode([line, column, source[, chunk[, name]]])
-
-* `line`: The original line number associated with this source node, or null if
- it isn't associated with an original line.
-
-* `column`: The original column number associated with this source node, or null
- if it isn't associated with an original column.
-
-* `source`: The original source's filename; null if no filename is provided.
-
-* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
- below.
-
-* `name`: Optional. The original identifier.
-
-#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
-
-Creates a SourceNode from generated code and a SourceMapConsumer.
-
-* `code`: The generated code
-
-* `sourceMapConsumer` The SourceMap for the generated code
-
-* `relativePath` The optional path that relative sources in `sourceMapConsumer`
- should be relative to.
-
-#### SourceNode.prototype.add(chunk)
-
-Add a chunk of generated JS to this source node.
-
-* `chunk`: 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(chunk)
-
-Prepend a chunk of generated JS to this source node.
-
-* `chunk`: A string snippet of generated JS code, another instance of
- `SourceNode`, or an array where each member is one of those things.
-
-#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
-
-Set the source content for a source file. This will be added to the
-`SourceMap` in the `sourcesContent` field.
-
-* `sourceFile`: The filename of the source file
-
-* `sourceContent`: The content of the source file
-
-#### SourceNode.prototype.walk(fn)
-
-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.
-
-* `fn`: The traversal function.
-
-#### SourceNode.prototype.walkSourceContents(fn)
-
-Walk over the tree of SourceNodes. The walking function is called for each
-source file content and is passed the filename and source content.
-
-* `fn`: The traversal function.
-
-#### SourceNode.prototype.join(sep)
-
-Like `Array.prototype.join` except for SourceNodes. Inserts the separator
-between each of this source node's children.
-
-* `sep`: The separator.
-
-#### SourceNode.prototype.replaceRight(pattern, replacement)
-
-Call `String.prototype.replace` on the very right-most source snippet. Useful
-for trimming whitespace from the end of a source node, etc.
-
-* `pattern`: The pattern to replace.
-
-* `replacement`: The thing to replace the pattern with.
-
-#### SourceNode.prototype.toString()
-
-Return the string representation of this source node. Walks over the tree and
-concatenates all the various snippets together to one string.
-
-#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
-
-Returns the string representation of this tree of source nodes, plus a
-SourceMapGenerator which contains all the mappings between the generated and
-original sources.
-
-The arguments are the same as those to `new SourceMapGenerator`.
-
-## Tests
-
-[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map)
-
-Install NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`.
-
-To add new tests, create a new file named `test/test-<your new test name>.js`
-and export your test functions with names that start with "test", for example
-
-```js
-exports["test doing the foo bar"] = function (assert, util) {
- ...
-};
-```
-
-The new test will be located automatically when you run the suite.
-
-The `util` argument is the test utility module located at `test/source-map/util`.
-
-The `assert` argument is a cut down version of node's assert module. You have
-access to the following assertion functions:
-
-* `doesNotThrow`
-
-* `equal`
-
-* `ok`
-
-* `strictEqual`
-
-* `throws`
-
-(The reason for the restricted set of test functions is because we need the
-tests to run inside Firefox's test suite as well and so the assert module is
-shimmed in that environment. See `build/assert-shim.js`.)
-
-[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
-[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap
-[Dryice]: https://github.com/mozilla/dryice
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/assert-shim.js b/node_modules/scss-tokenizer/node_modules/source-map/build/assert-shim.js
deleted file mode 100644
index daa1a62..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/assert-shim.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- 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
- */
-define('test/source-map/assert', ['exports'], function (exports) {
-
- let do_throw = function (msg) {
- throw new Error(msg);
- };
-
- exports.init = function (throw_fn) {
- do_throw = throw_fn;
- };
-
- exports.doesNotThrow = function (fn) {
- try {
- fn();
- }
- catch (e) {
- do_throw(e.message);
- }
- };
-
- exports.equal = function (actual, expected, msg) {
- msg = msg || String(actual) + ' != ' + String(expected);
- if (actual != expected) {
- do_throw(msg);
- }
- };
-
- exports.ok = function (val, msg) {
- msg = msg || String(val) + ' is falsey';
- if (!Boolean(val)) {
- do_throw(msg);
- }
- };
-
- exports.strictEqual = function (actual, expected, msg) {
- msg = msg || String(actual) + ' !== ' + String(expected);
- if (actual !== expected) {
- do_throw(msg);
- }
- };
-
- exports.throws = function (fn) {
- try {
- fn();
- do_throw('Expected an error to be thrown, but it wasn\'t.');
- }
- catch (e) {
- }
- };
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/mini-require.js b/node_modules/scss-tokenizer/node_modules/source-map/build/mini-require.js
deleted file mode 100644
index 0daf453..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/mini-require.js
+++ /dev/null
@@ -1,152 +0,0 @@
-/* -*- 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
- */
-
-/**
- * Define a module along with a payload.
- * @param {string} moduleName Name for the payload
- * @param {ignored} deps Ignored. For compatibility with CommonJS AMD Spec
- * @param {function} payload Function with (require, exports, module) params
- */
-function define(moduleName, deps, payload) {
- if (typeof moduleName != "string") {
- throw new TypeError('Expected string, got: ' + moduleName);
- }
-
- if (arguments.length == 2) {
- payload = deps;
- }
-
- if (moduleName in define.modules) {
- throw new Error("Module already defined: " + moduleName);
- }
- define.modules[moduleName] = payload;
-};
-
-/**
- * The global store of un-instantiated modules
- */
-define.modules = {};
-
-
-/**
- * We invoke require() in the context of a Domain so we can have multiple
- * sets of modules running separate from each other.
- * This contrasts with JSMs which are singletons, Domains allows us to
- * optionally load a CommonJS module twice with separate data each time.
- * Perhaps you want 2 command lines with a different set of commands in each,
- * for example.
- */
-function Domain() {
- this.modules = {};
- this._currentModule = null;
-}
-
-(function () {
-
- /**
- * Lookup module names and resolve them by calling the definition function if
- * needed.
- * There are 2 ways to call this, either with an array of dependencies and a
- * callback to call when the dependencies are found (which can happen
- * asynchronously in an in-page context) or with a single string an no callback
- * where the dependency is resolved synchronously and returned.
- * The API is designed to be compatible with the CommonJS AMD spec and
- * RequireJS.
- * @param {string[]|string} deps A name, or names for the payload
- * @param {function|undefined} callback Function to call when the dependencies
- * are resolved
- * @return {undefined|object} The module required or undefined for
- * array/callback method
- */
- Domain.prototype.require = function(deps, callback) {
- if (Array.isArray(deps)) {
- var params = deps.map(function(dep) {
- return this.lookup(dep);
- }, this);
- if (callback) {
- callback.apply(null, params);
- }
- return undefined;
- }
- else {
- return this.lookup(deps);
- }
- };
-
- function normalize(path) {
- var bits = path.split('/');
- var i = 1;
- while (i < bits.length) {
- if (bits[i] === '..') {
- bits.splice(i-1, 1);
- } else if (bits[i] === '.') {
- bits.splice(i, 1);
- } else {
- i++;
- }
- }
- return bits.join('/');
- }
-
- function join(a, b) {
- a = a.trim();
- b = b.trim();
- if (/^\//.test(b)) {
- return b;
- } else {
- return a.replace(/\/*$/, '/') + b;
- }
- }
-
- function dirname(path) {
- var bits = path.split('/');
- bits.pop();
- return bits.join('/');
- }
-
- /**
- * Lookup module names and resolve them by calling the definition function if
- * needed.
- * @param {string} moduleName A name for the payload to lookup
- * @return {object} The module specified by aModuleName or null if not found.
- */
- Domain.prototype.lookup = function(moduleName) {
- if (/^\./.test(moduleName)) {
- moduleName = normalize(join(dirname(this._currentModule), moduleName));
- }
-
- if (moduleName in this.modules) {
- var module = this.modules[moduleName];
- return module;
- }
-
- if (!(moduleName in define.modules)) {
- throw new Error("Module not defined: " + moduleName);
- }
-
- var module = define.modules[moduleName];
-
- if (typeof module == "function") {
- var exports = {};
- var previousModule = this._currentModule;
- this._currentModule = moduleName;
- module(this.require.bind(this), exports, { id: moduleName, uri: "" });
- this._currentModule = previousModule;
- module = exports;
- }
-
- // cache the resulting module object for next time
- this.modules[moduleName] = module;
-
- return module;
- };
-
-}());
-
-define.Domain = Domain;
-define.globalDomain = new Domain();
-var require = define.globalDomain.require.bind(define.globalDomain);
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/prefix-source-map.jsm b/node_modules/scss-tokenizer/node_modules/source-map/build/prefix-source-map.jsm
deleted file mode 100644
index 209dbd7..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/prefix-source-map.jsm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- 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
- */
-
-/*
- * WARNING!
- *
- * Do not edit this file directly, it is built from the sources at
- * https://github.com/mozilla/source-map/
- */
-
-///////////////////////////////////////////////////////////////////////////////
-
-
-this.EXPORTED_SYMBOLS = [ "SourceMapConsumer", "SourceMapGenerator", "SourceNode" ];
-
-Components.utils.import("resource://gre/modules/devtools/Console.jsm");
-Components.utils.import('resource://gre/modules/devtools/Require.jsm');
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/prefix-utils.jsm b/node_modules/scss-tokenizer/node_modules/source-map/build/prefix-utils.jsm
deleted file mode 100644
index 80341d4..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/prefix-utils.jsm
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -*- 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
- */
-
-/*
- * WARNING!
- *
- * Do not edit this file directly, it is built from the sources at
- * https://github.com/mozilla/source-map/
- */
-
-Components.utils.import('resource://gre/modules/devtools/Require.jsm');
-Components.utils.import('resource://gre/modules/devtools/SourceMap.jsm');
-
-this.EXPORTED_SYMBOLS = [ "define", "runSourceMapTests" ];
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-browser.js b/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-browser.js
deleted file mode 100644
index fb29ff5..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-browser.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-///////////////////////////////////////////////////////////////////////////////
-
-this.sourceMap = {
- SourceMapConsumer: require('source-map/source-map-consumer').SourceMapConsumer,
- SourceMapGenerator: require('source-map/source-map-generator').SourceMapGenerator,
- SourceNode: require('source-map/source-node').SourceNode
-};
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-source-map.jsm b/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-source-map.jsm
deleted file mode 100644
index cf3c2d8..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-source-map.jsm
+++ /dev/null
@@ -1,6 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-///////////////////////////////////////////////////////////////////////////////
-
-this.SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer;
-this.SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator;
-this.SourceNode = require('source-map/source-node').SourceNode;
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-utils.jsm b/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-utils.jsm
deleted file mode 100644
index b31b84c..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/suffix-utils.jsm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- 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
- */
-function runSourceMapTests(modName, do_throw) {
- let mod = require(modName);
- let assert = require('test/source-map/assert');
- let util = require('test/source-map/util');
-
- assert.init(do_throw);
-
- for (let k in mod) {
- if (/^test/.test(k)) {
- mod[k](assert, util);
- }
- }
-
-}
-this.runSourceMapTests = runSourceMapTests;
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/test-prefix.js b/node_modules/scss-tokenizer/node_modules/source-map/build/test-prefix.js
deleted file mode 100644
index 1b13f30..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/test-prefix.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * WARNING!
- *
- * Do not edit this file directly, it is built from the sources at
- * https://github.com/mozilla/source-map/
- */
-
-Components.utils.import('resource://test/Utils.jsm');
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/build/test-suffix.js b/node_modules/scss-tokenizer/node_modules/source-map/build/test-suffix.js
deleted file mode 100644
index bec2de3..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/build/test-suffix.js
+++ /dev/null
@@ -1,3 +0,0 @@
-function run_test() {
- runSourceMapTests('{THIS_MODULE}', do_throw);
-}
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map.js
deleted file mode 100644
index 121ad24..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * 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('./source-map/source-map-generator').SourceMapGenerator;
-exports.SourceMapConsumer = require('./source-map/source-map-consumer').SourceMapConsumer;
-exports.SourceNode = require('./source-map/source-node').SourceNode;
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/array-set.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/array-set.js
deleted file mode 100644
index 19cb841..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/array-set.js
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var util = require('./util');
-
- /**
- * 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 = {};
- }
-
- /**
- * 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 isDuplicate = this.has(aStr);
- var idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- this._set[util.toSetString(aStr)] = idx;
- }
- };
-
- /**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
- ArraySet.prototype.has = function ArraySet_has(aStr) {
- return Object.prototype.hasOwnProperty.call(this._set,
- util.toSetString(aStr));
- };
-
- /**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
- ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
- if (this.has(aStr)) {
- return this._set[util.toSetString(aStr)];
- }
- 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;
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/base64-vlq.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/base64-vlq.js
deleted file mode 100644
index bbe9a58..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/base64-vlq.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- 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.
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- 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;
- };
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/base64.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/base64.js
deleted file mode 100644
index 35adbc1..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/base64.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- 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: " + aNumber);
- };
-
- /**
- * 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;
- };
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/binary-search.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/binary-search.js
deleted file mode 100644
index 7936f7e..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/binary-search.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- 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;
- };
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/mapping-list.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/mapping-list.js
deleted file mode 100644
index 01aff22..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/mapping-list.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- 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) {
- var mapping;
- 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;
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/quick-sort.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/quick-sort.js
deleted file mode 100644
index e0551ed..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/quick-sort.js
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- // 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);
- };
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-map-consumer.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-map-consumer.js
deleted file mode 100644
index cbdc467..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-map-consumer.js
+++ /dev/null
@@ -1,1077 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- 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);
- }
-
- // 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.
- sources = sources.map(util.normalize);
-
- // 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, 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
- * availible.
- */
- 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[i];
-
- 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.column +
- (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;
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-map-generator.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-map-generator.js
deleted file mode 100644
index d8a9025..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-map-generator.js
+++ /dev/null
@@ -1,399 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- 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 && !this._sources.has(source)) {
- this._sources.add(source);
- }
-
- if (name != null && !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 = {};
- }
- 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 mapping;
-
- var mappings = this._mappings.toArray();
- for (var i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
-
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- result += ';';
- previousGeneratedLine++;
- }
- }
- else {
- if (i > 0) {
- if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- result += ',';
- }
- }
-
- result += base64VLQ.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (mapping.source != null) {
- result += base64VLQ.encode(this._sources.indexOf(mapping.source)
- - previousSource);
- previousSource = this._sources.indexOf(mapping.source);
-
- // lines are stored 0-based in SourceMap spec version 3
- result += base64VLQ.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- result += base64VLQ.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
-
- if (mapping.name != null) {
- result += base64VLQ.encode(this._names.indexOf(mapping.name)
- - previousName);
- previousName = this._names.indexOf(mapping.name);
- }
- }
- }
-
- 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;
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-node.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-node.js
deleted file mode 100644
index 9ee90bd..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/source-node.js
+++ /dev/null
@@ -1,414 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- 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) {
- var code = "";
- // 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;
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/util.js b/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/util.js
deleted file mode 100644
index 0b9d75d..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/lib/source-map/util.js
+++ /dev/null
@@ -1,370 +0,0 @@
-/* -*- 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
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- /**
- * 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 consequtive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' 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 = (path.charAt(0) === '/');
-
- 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;
-
- /**
- * 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;
-
- /**
- * 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) {
- return '$' + aStr;
- }
- exports.toSetString = toSetString;
-
- function fromSetString(aStr) {
- return aStr.substr(1);
- }
- exports.fromSetString = fromSetString;
-
- /**
- * 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;
-
-});
diff --git a/node_modules/scss-tokenizer/node_modules/source-map/package.json b/node_modules/scss-tokenizer/node_modules/source-map/package.json
deleted file mode 100644
index 1ba0227..0000000
--- a/node_modules/scss-tokenizer/node_modules/source-map/package.json
+++ /dev/null
@@ -1,198 +0,0 @@
-{
- "_from": "source-map@^0.4.2",
- "_id": "source-map@0.4.4",
- "_inBundle": false,
- "_integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "_location": "/scss-tokenizer/source-map",
- "_phantomChildren": {},
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "source-map@^0.4.2",
- "name": "source-map",
- "escapedName": "source-map",
- "rawSpec": "^0.4.2",
- "saveSpec": null,
- "fetchSpec": "^0.4.2"
- },
- "_requiredBy": [
- "/scss-tokenizer"
- ],
- "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "_shasum": "eba4f5da9c0dc999de68032d8b4f76173652036b",
- "_spec": "source-map@^0.4.2",
- "_where": "/home/pruss/Dev/3-minute-website/node_modules/scss-tokenizer",
- "author": {
- "name": "Nick Fitzgerald",
- "email": "nfitzgerald@mozilla.com"
- },
- "bugs": {
- "url": "https://github.com/mozilla/source-map/issues"
- },
- "bundleDependencies": false,
- "contributors": [
- {
- "name": "Tobias Koppers",
- "email": "tobias.koppers@googlemail.com"
- },
- {
- "name": "Duncan Beevers",
- "email": "duncan@dweebd.com"
- },
- {
- "name": "Stephen Crane",
- "email": "scrane@mozilla.com"
- },
- {
- "name": "Ryan Seddon",
- "email": "seddon.ryan@gmail.com"
- },
- {
- "name": "Miles Elam",
- "email": "miles.elam@deem.com"
- },
- {
- "name": "Mihai Bazon",
- "email": "mihai.bazon@gmail.com"
- },
- {
- "name": "Michael Ficarra",
- "email": "github.public.email@michael.ficarra.me"
- },
- {
- "name": "Todd Wolfson",
- "email": "todd@twolfson.com"
- },
- {
- "name": "Alexander Solovyov",
- "email": "alexander@solovyov.net"
- },
- {
- "name": "Felix Gnass",
- "email": "fgnass@gmail.com"
- },
- {
- "name": "Conrad Irwin",
- "email": "conrad.irwin@gmail.com"
- },
- {
- "name": "usrbincc",
- "email": "usrbincc@yahoo.com"
- },
- {
- "name": "David Glasser",
- "email": "glasser@davidglasser.net"
- },
- {
- "name": "Chase Douglas",
- "email": "chase@newrelic.com"
- },
- {
- "name": "Evan Wallace",
- "email": "evan.exe@gmail.com"
- },
- {
- "name": "Heather Arthur",
- "email": "fayearthur@gmail.com"
- },
- {
- "name": "Hugh Kennedy",
- "email": "hughskennedy@gmail.com"
- },
- {
- "name": "David Glasser",
- "email": "glasser@davidglasser.net"
- },
- {
- "name": "Simon Lydell",
- "email": "simon.lydell@gmail.com"
- },
- {
- "name": "Jmeas Smith",
- "email": "jellyes2@gmail.com"
- },
- {
- "name": "Michael Z Goddard",
- "email": "mzgoddard@gmail.com"
- },
- {
- "name": "azu",
- "email": "azu@users.noreply.github.com"
- },
- {
- "name": "John Gozde",
- "email": "john@gozde.ca"
- },
- {
- "name": "Adam Kirkton",
- "email": "akirkton@truefitinnovation.com"
- },
- {
- "name": "Chris Montgomery",
- "email": "christopher.montgomery@dowjones.com"
- },
- {
- "name": "J. Ryan Stinnett",
- "email": "jryans@gmail.com"
- },
- {
- "name": "Jack Herrington",
- "email": "jherrington@walmartlabs.com"
- },
- {
- "name": "Chris Truter",
- "email": "jeffpalentine@gmail.com"
- },
- {
- "name": "Daniel Espeset",
- "email": "daniel@danielespeset.com"
- },
- {
- "name": "Jamie Wong",
- "email": "jamie.lf.wong@gmail.com"
- },
- {
- "name": "Eddy Bruël",
- "email": "ejpbruel@mozilla.com"
- },
- {
- "name": "Hawken Rives",
- "email": "hawkrives@gmail.com"
- },
- {
- "name": "Gilad Peleg",
- "email": "giladp007@gmail.com"
- }
- ],
- "dependencies": {
- "amdefine": ">=0.0.4"
- },
- "deprecated": false,
- "description": "Generates and consumes source maps",
- "devDependencies": {
- "dryice": ">=0.4.8"
- },
- "directories": {
- "lib": "./lib"
- },
- "engines": {
- "node": ">=0.8.0"
- },
- "files": [
- "lib/",
- "build/"
- ],
- "homepage": "https://github.com/mozilla/source-map",
- "license": "BSD-3-Clause",
- "main": "./lib/source-map.js",
- "name": "source-map",
- "repository": {
- "type": "git",
- "url": "git+ssh://git@github.com/mozilla/source-map.git"
- },
- "scripts": {
- "build": "node Makefile.dryice.js",
- "test": "node test/run-tests.js"
- },
- "version": "0.4.4"
-}
diff --git a/node_modules/scss-tokenizer/package.json b/node_modules/scss-tokenizer/package.json
deleted file mode 100644
index 59c3086..0000000
--- a/node_modules/scss-tokenizer/package.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "_from": "scss-tokenizer@^0.2.3",
- "_id": "scss-tokenizer@0.2.3",
- "_inBundle": false,
- "_integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
- "_location": "/scss-tokenizer",
- "_phantomChildren": {
- "amdefine": "1.0.1"
- },
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "scss-tokenizer@^0.2.3",
- "name": "scss-tokenizer",
- "escapedName": "scss-tokenizer",
- "rawSpec": "^0.2.3",
- "saveSpec": null,
- "fetchSpec": "^0.2.3"
- },
- "_requiredBy": [
- "/sass-graph"
- ],
- "_resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
- "_shasum": "8eb06db9a9723333824d3f5530641149847ce5d1",
- "_spec": "scss-tokenizer@^0.2.3",
- "_where": "/home/pruss/Dev/3-minute-website/node_modules/sass-graph",
- "author": {
- "name": "xzyfer"
- },
- "bugs": {
- "url": "https://github.com/sasstools/scss-tokenizer/issues"
- },
- "bundleDependencies": false,
- "dependencies": {
- "js-base64": "^2.1.8",
- "source-map": "^0.4.2"
- },
- "deprecated": false,
- "description": "A tokenzier for Sass' SCSS syntax",
- "devDependencies": {
- "babel-cli": "^6.24.1",
- "babel-preset-es2015": "^6.24.1",
- "chai": "^3.5.0",
- "glob": "^5.0.10",
- "mocha": "^3.2.0",
- "sass-spec": "^3.5.0-1"
- },
- "files": [
- "index.js",
- "lib"
- ],
- "homepage": "https://github.com/sasstools/scss-tokenizer",
- "keywords": [
- "parser",
- "tokenizer",
- "sass",
- "scss",
- "libsass"
- ],
- "license": "MIT",
- "main": "index.js",
- "name": "scss-tokenizer",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/sasstools/scss-tokenizer.git"
- },
- "scripts": {
- "build": "npm run clean; babel src/ --out-dir lib",
- "clean": "rm lib/*",
- "test": "mocha"
- },
- "version": "0.2.3"
-}