You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35614 lines
1.0 MiB
35614 lines
1.0 MiB
(function webpackUniversalModuleDefinition(root, factory) { |
|
if(typeof exports === 'object' && typeof module === 'object') |
|
module.exports = factory(); |
|
else if(typeof define === 'function' && define.amd) |
|
define([], factory); |
|
else if(typeof exports === 'object') |
|
exports["expect"] = factory(); |
|
else |
|
root["expect"] = factory(); |
|
})(window, function() { |
|
return /******/ (function(modules) { // webpackBootstrap |
|
/******/ // The module cache |
|
/******/ var installedModules = {}; |
|
/******/ |
|
/******/ // The require function |
|
/******/ function __webpack_require__(moduleId) { |
|
/******/ |
|
/******/ // Check if module is in cache |
|
/******/ if(installedModules[moduleId]) { |
|
/******/ return installedModules[moduleId].exports; |
|
/******/ } |
|
/******/ // Create a new module (and put it into the cache) |
|
/******/ var module = installedModules[moduleId] = { |
|
/******/ i: moduleId, |
|
/******/ l: false, |
|
/******/ exports: {} |
|
/******/ }; |
|
/******/ |
|
/******/ // Execute the module function |
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); |
|
/******/ |
|
/******/ // Flag the module as loaded |
|
/******/ module.l = true; |
|
/******/ |
|
/******/ // Return the exports of the module |
|
/******/ return module.exports; |
|
/******/ } |
|
/******/ |
|
/******/ |
|
/******/ // expose the modules object (__webpack_modules__) |
|
/******/ __webpack_require__.m = modules; |
|
/******/ |
|
/******/ // expose the module cache |
|
/******/ __webpack_require__.c = installedModules; |
|
/******/ |
|
/******/ // define getter function for harmony exports |
|
/******/ __webpack_require__.d = function(exports, name, getter) { |
|
/******/ if(!__webpack_require__.o(exports, name)) { |
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); |
|
/******/ } |
|
/******/ }; |
|
/******/ |
|
/******/ // define __esModule on exports |
|
/******/ __webpack_require__.r = function(exports) { |
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { |
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); |
|
/******/ } |
|
/******/ Object.defineProperty(exports, '__esModule', { value: true }); |
|
/******/ }; |
|
/******/ |
|
/******/ // create a fake namespace object |
|
/******/ // mode & 1: value is a module id, require it |
|
/******/ // mode & 2: merge all properties of value into the ns |
|
/******/ // mode & 4: return value when already ns object |
|
/******/ // mode & 8|1: behave like require |
|
/******/ __webpack_require__.t = function(value, mode) { |
|
/******/ if(mode & 1) value = __webpack_require__(value); |
|
/******/ if(mode & 8) return value; |
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; |
|
/******/ var ns = Object.create(null); |
|
/******/ __webpack_require__.r(ns); |
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); |
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); |
|
/******/ return ns; |
|
/******/ }; |
|
/******/ |
|
/******/ // getDefaultExport function for compatibility with non-harmony modules |
|
/******/ __webpack_require__.n = function(module) { |
|
/******/ var getter = module && module.__esModule ? |
|
/******/ function getDefault() { return module['default']; } : |
|
/******/ function getModuleExports() { return module; }; |
|
/******/ __webpack_require__.d(getter, 'a', getter); |
|
/******/ return getter; |
|
/******/ }; |
|
/******/ |
|
/******/ // Object.prototype.hasOwnProperty.call |
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; |
|
/******/ |
|
/******/ // __webpack_public_path__ |
|
/******/ __webpack_require__.p = ""; |
|
/******/ |
|
/******/ |
|
/******/ // Load entry module and return exports |
|
/******/ return __webpack_require__(__webpack_require__.s = "./packages/expect/src/index.ts"); |
|
/******/ }) |
|
/************************************************************************/ |
|
/******/ ({ |
|
|
|
/***/ "./node_modules/@babel/code-frame/lib/index.js": |
|
/*!*****************************************************!*\ |
|
!*** ./node_modules/@babel/code-frame/lib/index.js ***! |
|
\*****************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) { |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.codeFrameColumns = codeFrameColumns; |
|
exports.default = _default; |
|
|
|
function _highlight() { |
|
var data = _interopRequireWildcard(__webpack_require__(/*! @babel/highlight */ "./node_modules/@babel/highlight/lib/index.js")); |
|
|
|
_highlight = function _highlight() { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _interopRequireWildcard(obj) { |
|
if (obj && obj.__esModule) { |
|
return obj; |
|
} else { |
|
var newObj = {}; |
|
|
|
if (obj != null) { |
|
for (var key in obj) { |
|
if (Object.prototype.hasOwnProperty.call(obj, key)) { |
|
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; |
|
|
|
if (desc.get || desc.set) { |
|
Object.defineProperty(newObj, key, desc); |
|
} else { |
|
newObj[key] = obj[key]; |
|
} |
|
} |
|
} |
|
} |
|
|
|
newObj.default = obj; |
|
return newObj; |
|
} |
|
} |
|
|
|
var deprecationWarningShown = false; |
|
|
|
function getDefs(chalk) { |
|
return { |
|
gutter: chalk.grey, |
|
marker: chalk.red.bold, |
|
message: chalk.red.bold |
|
}; |
|
} |
|
|
|
var NEWLINE = /\r\n|[\n\r\u2028\u2029]/; |
|
|
|
function getMarkerLines(loc, source, opts) { |
|
var startLoc = Object.assign({ |
|
column: 0, |
|
line: -1 |
|
}, loc.start); |
|
var endLoc = Object.assign({}, startLoc, loc.end); |
|
|
|
var _ref = opts || {}, |
|
_ref$linesAbove = _ref.linesAbove, |
|
linesAbove = _ref$linesAbove === void 0 ? 2 : _ref$linesAbove, |
|
_ref$linesBelow = _ref.linesBelow, |
|
linesBelow = _ref$linesBelow === void 0 ? 3 : _ref$linesBelow; |
|
|
|
var startLine = startLoc.line; |
|
var startColumn = startLoc.column; |
|
var endLine = endLoc.line; |
|
var endColumn = endLoc.column; |
|
var start = Math.max(startLine - (linesAbove + 1), 0); |
|
var end = Math.min(source.length, endLine + linesBelow); |
|
|
|
if (startLine === -1) { |
|
start = 0; |
|
} |
|
|
|
if (endLine === -1) { |
|
end = source.length; |
|
} |
|
|
|
var lineDiff = endLine - startLine; |
|
var markerLines = {}; |
|
|
|
if (lineDiff) { |
|
for (var i = 0; i <= lineDiff; i++) { |
|
var lineNumber = i + startLine; |
|
|
|
if (!startColumn) { |
|
markerLines[lineNumber] = true; |
|
} else if (i === 0) { |
|
var sourceLength = source[lineNumber - 1].length; |
|
markerLines[lineNumber] = [startColumn, sourceLength - startColumn]; |
|
} else if (i === lineDiff) { |
|
markerLines[lineNumber] = [0, endColumn]; |
|
} else { |
|
var _sourceLength = source[lineNumber - i].length; |
|
markerLines[lineNumber] = [0, _sourceLength]; |
|
} |
|
} |
|
} else { |
|
if (startColumn === endColumn) { |
|
if (startColumn) { |
|
markerLines[startLine] = [startColumn, 0]; |
|
} else { |
|
markerLines[startLine] = true; |
|
} |
|
} else { |
|
markerLines[startLine] = [startColumn, endColumn - startColumn]; |
|
} |
|
} |
|
|
|
return { |
|
start: start, |
|
end: end, |
|
markerLines: markerLines |
|
}; |
|
} |
|
|
|
function codeFrameColumns(rawLines, loc) { |
|
var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; |
|
var highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight().shouldHighlight)(opts); |
|
var chalk = (0, _highlight().getChalk)(opts); |
|
var defs = getDefs(chalk); |
|
|
|
var maybeHighlight = function maybeHighlight(chalkFn, string) { |
|
return highlighted ? chalkFn(string) : string; |
|
}; |
|
|
|
if (highlighted) rawLines = (0, _highlight().default)(rawLines, opts); |
|
var lines = rawLines.split(NEWLINE); |
|
|
|
var _getMarkerLines = getMarkerLines(loc, lines, opts), |
|
start = _getMarkerLines.start, |
|
end = _getMarkerLines.end, |
|
markerLines = _getMarkerLines.markerLines; |
|
|
|
var hasColumns = loc.start && typeof loc.start.column === "number"; |
|
var numberMaxWidth = String(end).length; |
|
var frame = lines.slice(start, end).map(function (line, index) { |
|
var number = start + 1 + index; |
|
var paddedNumber = " ".concat(number).slice(-numberMaxWidth); |
|
var gutter = " ".concat(paddedNumber, " | "); |
|
var hasMarker = markerLines[number]; |
|
var lastMarkerLine = !markerLines[number + 1]; |
|
|
|
if (hasMarker) { |
|
var markerLine = ""; |
|
|
|
if (Array.isArray(hasMarker)) { |
|
var markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " "); |
|
var numberOfMarkers = hasMarker[1] || 1; |
|
markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join(""); |
|
|
|
if (lastMarkerLine && opts.message) { |
|
markerLine += " " + maybeHighlight(defs.message, opts.message); |
|
} |
|
} |
|
|
|
return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line, markerLine].join(""); |
|
} else { |
|
return " ".concat(maybeHighlight(defs.gutter, gutter)).concat(line); |
|
} |
|
}).join("\n"); |
|
|
|
if (opts.message && !hasColumns) { |
|
frame = "".concat(" ".repeat(numberMaxWidth + 1)).concat(opts.message, "\n").concat(frame); |
|
} |
|
|
|
if (highlighted) { |
|
return chalk.reset(frame); |
|
} else { |
|
return frame; |
|
} |
|
} |
|
|
|
function _default(rawLines, lineNumber, colNumber) { |
|
var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; |
|
|
|
if (!deprecationWarningShown) { |
|
deprecationWarningShown = true; |
|
var message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; |
|
|
|
if (process.emitWarning) { |
|
process.emitWarning(message, "DeprecationWarning"); |
|
} else { |
|
var deprecationError = new Error(message); |
|
deprecationError.name = "DeprecationWarning"; |
|
console.warn(new Error(message)); |
|
} |
|
} |
|
|
|
colNumber = Math.max(colNumber, 0); |
|
var location = { |
|
start: { |
|
column: colNumber, |
|
line: lineNumber |
|
} |
|
}; |
|
return codeFrameColumns(rawLines, location, opts); |
|
} |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/@babel/highlight/lib/index.js": |
|
/*!****************************************************!*\ |
|
!*** ./node_modules/@babel/highlight/lib/index.js ***! |
|
\****************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } |
|
|
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } |
|
|
|
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } |
|
|
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.shouldHighlight = shouldHighlight; |
|
exports.getChalk = getChalk; |
|
exports.default = highlight; |
|
|
|
function _jsTokens() { |
|
var data = _interopRequireWildcard(__webpack_require__(/*! js-tokens */ "./node_modules/js-tokens/index.js")); |
|
|
|
_jsTokens = function _jsTokens() { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _esutils() { |
|
var data = _interopRequireDefault(__webpack_require__(/*! esutils */ "./node_modules/esutils/lib/utils.js")); |
|
|
|
_esutils = function _esutils() { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _chalk() { |
|
var data = _interopRequireDefault(__webpack_require__(/*! chalk */ "./packages/expect/build/fakeChalk.js")); |
|
|
|
_chalk = function _chalk() { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
|
|
function _interopRequireWildcard(obj) { |
|
if (obj && obj.__esModule) { |
|
return obj; |
|
} else { |
|
var newObj = {}; |
|
|
|
if (obj != null) { |
|
for (var key in obj) { |
|
if (Object.prototype.hasOwnProperty.call(obj, key)) { |
|
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; |
|
|
|
if (desc.get || desc.set) { |
|
Object.defineProperty(newObj, key, desc); |
|
} else { |
|
newObj[key] = obj[key]; |
|
} |
|
} |
|
} |
|
} |
|
|
|
newObj.default = obj; |
|
return newObj; |
|
} |
|
} |
|
|
|
function getDefs(chalk) { |
|
return { |
|
keyword: chalk.cyan, |
|
capitalized: chalk.yellow, |
|
jsx_tag: chalk.yellow, |
|
punctuator: chalk.yellow, |
|
number: chalk.magenta, |
|
string: chalk.green, |
|
regex: chalk.magenta, |
|
comment: chalk.grey, |
|
invalid: chalk.white.bgRed.bold |
|
}; |
|
} |
|
|
|
var NEWLINE = /\r\n|[\n\r\u2028\u2029]/; |
|
var JSX_TAG = /^[a-z][\w-]*$/i; |
|
var BRACKET = /^[()[\]{}]$/; |
|
|
|
function getTokenType(match) { |
|
var _match$slice = match.slice(-2), |
|
_match$slice2 = _slicedToArray(_match$slice, 2), |
|
offset = _match$slice2[0], |
|
text = _match$slice2[1]; |
|
|
|
var token = (0, _jsTokens().matchToToken)(match); |
|
|
|
if (token.type === "name") { |
|
if (_esutils().default.keyword.isReservedWordES6(token.value)) { |
|
return "keyword"; |
|
} |
|
|
|
if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == "</")) { |
|
return "jsx_tag"; |
|
} |
|
|
|
if (token.value[0] !== token.value[0].toLowerCase()) { |
|
return "capitalized"; |
|
} |
|
} |
|
|
|
if (token.type === "punctuator" && BRACKET.test(token.value)) { |
|
return "bracket"; |
|
} |
|
|
|
if (token.type === "invalid" && (token.value === "@" || token.value === "#")) { |
|
return "punctuator"; |
|
} |
|
|
|
return token.type; |
|
} |
|
|
|
function highlightTokens(defs, text) { |
|
return text.replace(_jsTokens().default, function () { |
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
|
args[_key] = arguments[_key]; |
|
} |
|
|
|
var type = getTokenType(args); |
|
var colorize = defs[type]; |
|
|
|
if (colorize) { |
|
return args[0].split(NEWLINE).map(function (str) { |
|
return colorize(str); |
|
}).join("\n"); |
|
} else { |
|
return args[0]; |
|
} |
|
}); |
|
} |
|
|
|
function shouldHighlight(options) { |
|
return _chalk().default.supportsColor || options.forceColor; |
|
} |
|
|
|
function getChalk(options) { |
|
var chalk = _chalk().default; |
|
|
|
if (options.forceColor) { |
|
chalk = new (_chalk().default.constructor)({ |
|
enabled: true, |
|
level: 1 |
|
}); |
|
} |
|
|
|
return chalk; |
|
} |
|
|
|
function highlight(code) { |
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; |
|
|
|
if (shouldHighlight(options)) { |
|
var chalk = getChalk(options); |
|
var defs = getDefs(chalk); |
|
return highlightTokens(defs, code); |
|
} else { |
|
return code; |
|
} |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/ansi-regex/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/ansi-regex/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
module.exports = function (options) { |
|
options = Object.assign({ |
|
onlyFirst: false |
|
}, options); |
|
var pattern = ["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'].join('|'); |
|
return new RegExp(pattern, options.onlyFirst ? undefined : 'g'); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/ansi-styles/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/ansi-styles/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(module) { |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var colorConvert = __webpack_require__(/*! color-convert */ "./node_modules/color-convert/index.js"); |
|
|
|
var wrapAnsi16 = function wrapAnsi16(fn, offset) { |
|
return function () { |
|
var code = fn.apply(colorConvert, arguments); |
|
return "\x1B[".concat(code + offset, "m"); |
|
}; |
|
}; |
|
|
|
var wrapAnsi256 = function wrapAnsi256(fn, offset) { |
|
return function () { |
|
var code = fn.apply(colorConvert, arguments); |
|
return "\x1B[".concat(38 + offset, ";5;").concat(code, "m"); |
|
}; |
|
}; |
|
|
|
var wrapAnsi16m = function wrapAnsi16m(fn, offset) { |
|
return function () { |
|
var rgb = fn.apply(colorConvert, arguments); |
|
return "\x1B[".concat(38 + offset, ";2;").concat(rgb[0], ";").concat(rgb[1], ";").concat(rgb[2], "m"); |
|
}; |
|
}; |
|
|
|
function assembleStyles() { |
|
var codes = new Map(); |
|
var styles = { |
|
modifier: { |
|
reset: [0, 0], |
|
// 21 isn't widely supported and 22 does the same thing |
|
bold: [1, 22], |
|
dim: [2, 22], |
|
italic: [3, 23], |
|
underline: [4, 24], |
|
inverse: [7, 27], |
|
hidden: [8, 28], |
|
strikethrough: [9, 29] |
|
}, |
|
color: { |
|
black: [30, 39], |
|
red: [31, 39], |
|
green: [32, 39], |
|
yellow: [33, 39], |
|
blue: [34, 39], |
|
magenta: [35, 39], |
|
cyan: [36, 39], |
|
white: [37, 39], |
|
gray: [90, 39], |
|
// Bright color |
|
redBright: [91, 39], |
|
greenBright: [92, 39], |
|
yellowBright: [93, 39], |
|
blueBright: [94, 39], |
|
magentaBright: [95, 39], |
|
cyanBright: [96, 39], |
|
whiteBright: [97, 39] |
|
}, |
|
bgColor: { |
|
bgBlack: [40, 49], |
|
bgRed: [41, 49], |
|
bgGreen: [42, 49], |
|
bgYellow: [43, 49], |
|
bgBlue: [44, 49], |
|
bgMagenta: [45, 49], |
|
bgCyan: [46, 49], |
|
bgWhite: [47, 49], |
|
// Bright color |
|
bgBlackBright: [100, 49], |
|
bgRedBright: [101, 49], |
|
bgGreenBright: [102, 49], |
|
bgYellowBright: [103, 49], |
|
bgBlueBright: [104, 49], |
|
bgMagentaBright: [105, 49], |
|
bgCyanBright: [106, 49], |
|
bgWhiteBright: [107, 49] |
|
} |
|
}; // Fix humans |
|
|
|
styles.color.grey = styles.color.gray; |
|
|
|
var _arr = Object.keys(styles); |
|
|
|
for (var _i = 0; _i < _arr.length; _i++) { |
|
var groupName = _arr[_i]; |
|
var group = styles[groupName]; |
|
|
|
var _arr3 = Object.keys(group); |
|
|
|
for (var _i3 = 0; _i3 < _arr3.length; _i3++) { |
|
var styleName = _arr3[_i3]; |
|
var style = group[styleName]; |
|
styles[styleName] = { |
|
open: "\x1B[".concat(style[0], "m"), |
|
close: "\x1B[".concat(style[1], "m") |
|
}; |
|
group[styleName] = styles[styleName]; |
|
codes.set(style[0], style[1]); |
|
} |
|
|
|
Object.defineProperty(styles, groupName, { |
|
value: group, |
|
enumerable: false |
|
}); |
|
Object.defineProperty(styles, 'codes', { |
|
value: codes, |
|
enumerable: false |
|
}); |
|
} |
|
|
|
var ansi2ansi = function ansi2ansi(n) { |
|
return n; |
|
}; |
|
|
|
var rgb2rgb = function rgb2rgb(r, g, b) { |
|
return [r, g, b]; |
|
}; |
|
|
|
styles.color.close = "\x1B[39m"; |
|
styles.bgColor.close = "\x1B[49m"; |
|
styles.color.ansi = { |
|
ansi: wrapAnsi16(ansi2ansi, 0) |
|
}; |
|
styles.color.ansi256 = { |
|
ansi256: wrapAnsi256(ansi2ansi, 0) |
|
}; |
|
styles.color.ansi16m = { |
|
rgb: wrapAnsi16m(rgb2rgb, 0) |
|
}; |
|
styles.bgColor.ansi = { |
|
ansi: wrapAnsi16(ansi2ansi, 10) |
|
}; |
|
styles.bgColor.ansi256 = { |
|
ansi256: wrapAnsi256(ansi2ansi, 10) |
|
}; |
|
styles.bgColor.ansi16m = { |
|
rgb: wrapAnsi16m(rgb2rgb, 10) |
|
}; |
|
|
|
var _arr2 = Object.keys(colorConvert); |
|
|
|
for (var _i2 = 0; _i2 < _arr2.length; _i2++) { |
|
var key = _arr2[_i2]; |
|
|
|
if (_typeof(colorConvert[key]) !== 'object') { |
|
continue; |
|
} |
|
|
|
var suite = colorConvert[key]; |
|
|
|
if (key === 'ansi16') { |
|
key = 'ansi'; |
|
} |
|
|
|
if ('ansi16' in suite) { |
|
styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); |
|
styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); |
|
} |
|
|
|
if ('ansi256' in suite) { |
|
styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); |
|
styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); |
|
} |
|
|
|
if ('rgb' in suite) { |
|
styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); |
|
styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); |
|
} |
|
} |
|
|
|
return styles; |
|
} // Make the export immutable |
|
|
|
|
|
Object.defineProperty(module, 'exports', { |
|
enumerable: true, |
|
get: assembleStyles |
|
}); |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/arr-diff/index.js": |
|
/*!****************************************!*\ |
|
!*** ./node_modules/arr-diff/index.js ***! |
|
\****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* arr-diff <https://github.com/jonschlinkert/arr-diff> |
|
* |
|
* Copyright (c) 2014-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
module.exports = function diff(arr |
|
/*, arrays*/ |
|
) { |
|
var len = arguments.length; |
|
var idx = 0; |
|
|
|
while (++idx < len) { |
|
arr = diffArray(arr, arguments[idx]); |
|
} |
|
|
|
return arr; |
|
}; |
|
|
|
function diffArray(one, two) { |
|
if (!Array.isArray(two)) { |
|
return one.slice(); |
|
} |
|
|
|
var tlen = two.length; |
|
var olen = one.length; |
|
var idx = -1; |
|
var arr = []; |
|
|
|
while (++idx < olen) { |
|
var ele = one[idx]; |
|
var hasEle = false; |
|
|
|
for (var i = 0; i < tlen; i++) { |
|
var val = two[i]; |
|
|
|
if (ele === val) { |
|
hasEle = true; |
|
break; |
|
} |
|
} |
|
|
|
if (hasEle === false) { |
|
arr.push(ele); |
|
} |
|
} |
|
|
|
return arr; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/arr-flatten/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/arr-flatten/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* arr-flatten <https://github.com/jonschlinkert/arr-flatten> |
|
* |
|
* Copyright (c) 2014-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
module.exports = function (arr) { |
|
return flat(arr, []); |
|
}; |
|
|
|
function flat(arr, res) { |
|
var i = 0, |
|
cur; |
|
var len = arr.length; |
|
|
|
for (; i < len; i++) { |
|
cur = arr[i]; |
|
Array.isArray(cur) ? flat(cur, res) : res.push(cur); |
|
} |
|
|
|
return res; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/arr-union/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/arr-union/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
module.exports = function union(init) { |
|
if (!Array.isArray(init)) { |
|
throw new TypeError('arr-union expects the first argument to be an array.'); |
|
} |
|
|
|
var len = arguments.length; |
|
var i = 0; |
|
|
|
while (++i < len) { |
|
var arg = arguments[i]; |
|
if (!arg) continue; |
|
|
|
if (!Array.isArray(arg)) { |
|
arg = [arg]; |
|
} |
|
|
|
for (var j = 0; j < arg.length; j++) { |
|
var ele = arg[j]; |
|
|
|
if (init.indexOf(ele) >= 0) { |
|
continue; |
|
} |
|
|
|
init.push(ele); |
|
} |
|
} |
|
|
|
return init; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/array-unique/index.js": |
|
/*!********************************************!*\ |
|
!*** ./node_modules/array-unique/index.js ***! |
|
\********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* array-unique <https://github.com/jonschlinkert/array-unique> |
|
* |
|
* Copyright (c) 2014-2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
module.exports = function unique(arr) { |
|
if (!Array.isArray(arr)) { |
|
throw new TypeError('array-unique expects an array.'); |
|
} |
|
|
|
var len = arr.length; |
|
var i = -1; |
|
|
|
while (i++ < len) { |
|
var j = i + 1; |
|
|
|
for (; j < arr.length; ++j) { |
|
if (arr[i] === arr[j]) { |
|
arr.splice(j--, 1); |
|
} |
|
} |
|
} |
|
|
|
return arr; |
|
}; |
|
|
|
module.exports.immutable = function uniqueImmutable(arr) { |
|
if (!Array.isArray(arr)) { |
|
throw new TypeError('array-unique expects an array.'); |
|
} |
|
|
|
var arrLen = arr.length; |
|
var newArr = new Array(arrLen); |
|
|
|
for (var i = 0; i < arrLen; i++) { |
|
newArr[i] = arr[i]; |
|
} |
|
|
|
return module.exports(newArr); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/assign-symbols/index.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/assign-symbols/index.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* assign-symbols <https://github.com/jonschlinkert/assign-symbols> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
module.exports = function (receiver, objects) { |
|
if (receiver === null || typeof receiver === 'undefined') { |
|
throw new TypeError('expected first argument to be an object.'); |
|
} |
|
|
|
if (typeof objects === 'undefined' || typeof Symbol === 'undefined') { |
|
return receiver; |
|
} |
|
|
|
if (typeof Object.getOwnPropertySymbols !== 'function') { |
|
return receiver; |
|
} |
|
|
|
var isEnumerable = Object.prototype.propertyIsEnumerable; |
|
var target = Object(receiver); |
|
var len = arguments.length, |
|
i = 0; |
|
|
|
while (++i < len) { |
|
var provider = Object(arguments[i]); |
|
var names = Object.getOwnPropertySymbols(provider); |
|
|
|
for (var j = 0; j < names.length; j++) { |
|
var key = names[j]; |
|
|
|
if (isEnumerable.call(provider, key)) { |
|
target[key] = provider[key]; |
|
} |
|
} |
|
} |
|
|
|
return target; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/base/index.js": |
|
/*!************************************!*\ |
|
!*** ./node_modules/base/index.js ***! |
|
\************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var util = __webpack_require__(/*! util */ "./node_modules/util/util.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/base/node_modules/define-property/index.js"); |
|
|
|
var CacheBase = __webpack_require__(/*! cache-base */ "./node_modules/cache-base/index.js"); |
|
|
|
var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/base/node_modules/component-emitter/index.js"); |
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
var merge = __webpack_require__(/*! mixin-deep */ "./node_modules/mixin-deep/index.js"); |
|
|
|
var pascal = __webpack_require__(/*! pascalcase */ "./node_modules/pascalcase/index.js"); |
|
|
|
var cu = __webpack_require__(/*! class-utils */ "./node_modules/class-utils/index.js"); |
|
/** |
|
* Optionally define a custom `cache` namespace to use. |
|
*/ |
|
|
|
|
|
function namespace(name) { |
|
var Cache = name ? CacheBase.namespace(name) : CacheBase; |
|
var fns = []; |
|
/** |
|
* Create an instance of `Base` with the given `config` and `options`. |
|
* |
|
* ```js |
|
* // initialize with `config` and `options` |
|
* var app = new Base({isApp: true}, {abc: true}); |
|
* app.set('foo', 'bar'); |
|
* |
|
* // values defined with the given `config` object will be on the root of the instance |
|
* console.log(app.baz); //=> undefined |
|
* console.log(app.foo); //=> 'bar' |
|
* // or use `.get` |
|
* console.log(app.get('isApp')); //=> true |
|
* console.log(app.get('foo')); //=> 'bar' |
|
* |
|
* // values defined with the given `options` object will be on `app.options |
|
* console.log(app.options.abc); //=> true |
|
* ``` |
|
* |
|
* @param {Object} `config` If supplied, this object is passed to [cache-base][] to merge onto the the instance upon instantiation. |
|
* @param {Object} `options` If supplied, this object is used to initialize the `base.options` object. |
|
* @api public |
|
*/ |
|
|
|
function Base(config, options) { |
|
if (!(this instanceof Base)) { |
|
return new Base(config, options); |
|
} |
|
|
|
Cache.call(this, config); |
|
this.is('base'); |
|
this.initBase(config, options); |
|
} |
|
/** |
|
* Inherit cache-base |
|
*/ |
|
|
|
|
|
util.inherits(Base, Cache); |
|
/** |
|
* Add static emitter methods |
|
*/ |
|
|
|
Emitter(Base); |
|
/** |
|
* Initialize `Base` defaults with the given `config` object |
|
*/ |
|
|
|
Base.prototype.initBase = function (config, options) { |
|
this.options = merge({}, this.options, options); |
|
this.cache = this.cache || {}; |
|
this.define('registered', {}); |
|
if (name) this[name] = {}; // make `app._callbacks` non-enumerable |
|
|
|
this.define('_callbacks', this._callbacks); |
|
|
|
if (isObject(config)) { |
|
this.visit('set', config); |
|
} |
|
|
|
Base.run(this, 'use', fns); |
|
}; |
|
/** |
|
* Set the given `name` on `app._name` and `app.is*` properties. Used for doing |
|
* lookups in plugins. |
|
* |
|
* ```js |
|
* app.is('foo'); |
|
* console.log(app._name); |
|
* //=> 'foo' |
|
* console.log(app.isFoo); |
|
* //=> true |
|
* app.is('bar'); |
|
* console.log(app.isFoo); |
|
* //=> true |
|
* console.log(app.isBar); |
|
* //=> true |
|
* console.log(app._name); |
|
* //=> 'bar' |
|
* ``` |
|
* @name .is |
|
* @param {String} `name` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
Base.prototype.is = function (name) { |
|
if (typeof name !== 'string') { |
|
throw new TypeError('expected name to be a string'); |
|
} |
|
|
|
this.define('is' + pascal(name), true); |
|
this.define('_name', name); |
|
this.define('_appname', name); |
|
return this; |
|
}; |
|
/** |
|
* Returns true if a plugin has already been registered on an instance. |
|
* |
|
* Plugin implementors are encouraged to use this first thing in a plugin |
|
* to prevent the plugin from being called more than once on the same |
|
* instance. |
|
* |
|
* ```js |
|
* var base = new Base(); |
|
* base.use(function(app) { |
|
* if (app.isRegistered('myPlugin')) return; |
|
* // do stuff to `app` |
|
* }); |
|
* |
|
* // to also record the plugin as being registered |
|
* base.use(function(app) { |
|
* if (app.isRegistered('myPlugin', true)) return; |
|
* // do stuff to `app` |
|
* }); |
|
* ``` |
|
* @name .isRegistered |
|
* @emits `plugin` Emits the name of the plugin being registered. Useful for unit tests, to ensure plugins are only registered once. |
|
* @param {String} `name` The plugin name. |
|
* @param {Boolean} `register` If the plugin if not already registered, to record it as being registered pass `true` as the second argument. |
|
* @return {Boolean} Returns true if a plugin is already registered. |
|
* @api public |
|
*/ |
|
|
|
|
|
Base.prototype.isRegistered = function (name, register) { |
|
if (this.registered.hasOwnProperty(name)) { |
|
return true; |
|
} |
|
|
|
if (register !== false) { |
|
this.registered[name] = true; |
|
this.emit('plugin', name); |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Define a plugin function to be called immediately upon init. Plugins are chainable |
|
* and expose the following arguments to the plugin function: |
|
* |
|
* - `app`: the current instance of `Base` |
|
* - `base`: the [first ancestor instance](#base) of `Base` |
|
* |
|
* ```js |
|
* var app = new Base() |
|
* .use(foo) |
|
* .use(bar) |
|
* .use(baz) |
|
* ``` |
|
* @name .use |
|
* @param {Function} `fn` plugin function to call |
|
* @return {Object} Returns the item instance for chaining. |
|
* @api public |
|
*/ |
|
|
|
|
|
Base.prototype.use = function (fn) { |
|
fn.call(this, this); |
|
return this; |
|
}; |
|
/** |
|
* The `.define` method is used for adding non-enumerable property on the instance. |
|
* Dot-notation is **not supported** with `define`. |
|
* |
|
* ```js |
|
* // arbitrary `render` function using lodash `template` |
|
* app.define('render', function(str, locals) { |
|
* return _.template(str)(locals); |
|
* }); |
|
* ``` |
|
* @name .define |
|
* @param {String} `key` The name of the property to define. |
|
* @param {any} `value` |
|
* @return {Object} Returns the instance for chaining. |
|
* @api public |
|
*/ |
|
|
|
|
|
Base.prototype.define = function (key, val) { |
|
if (isObject(key)) { |
|
return this.visit('define', key); |
|
} |
|
|
|
define(this, key, val); |
|
return this; |
|
}; |
|
/** |
|
* Mix property `key` onto the Base prototype. If base is inherited using |
|
* `Base.extend` this method will be overridden by a new `mixin` method that will |
|
* only add properties to the prototype of the inheriting application. |
|
* |
|
* ```js |
|
* app.mixin('foo', function() { |
|
* // do stuff |
|
* }); |
|
* ``` |
|
* @name .mixin |
|
* @param {String} `key` |
|
* @param {Object|Array} `val` |
|
* @return {Object} Returns the `base` instance for chaining. |
|
* @api public |
|
*/ |
|
|
|
|
|
Base.prototype.mixin = function (key, val) { |
|
Base.prototype[key] = val; |
|
return this; |
|
}; |
|
/** |
|
* Non-enumberable mixin array, used by the static [Base.mixin]() method. |
|
*/ |
|
|
|
|
|
Base.prototype.mixins = Base.prototype.mixins || []; |
|
/** |
|
* Getter/setter used when creating nested instances of `Base`, for storing a reference |
|
* to the first ancestor instance. This works by setting an instance of `Base` on the `parent` |
|
* property of a "child" instance. The `base` property defaults to the current instance if |
|
* no `parent` property is defined. |
|
* |
|
* ```js |
|
* // create an instance of `Base`, this is our first ("base") instance |
|
* var first = new Base(); |
|
* first.foo = 'bar'; // arbitrary property, to make it easier to see what's happening later |
|
* |
|
* // create another instance |
|
* var second = new Base(); |
|
* // create a reference to the first instance (`first`) |
|
* second.parent = first; |
|
* |
|
* // create another instance |
|
* var third = new Base(); |
|
* // create a reference to the previous instance (`second`) |
|
* // repeat this pattern every time a "child" instance is created |
|
* third.parent = second; |
|
* |
|
* // we can always access the first instance using the `base` property |
|
* console.log(first.base.foo); |
|
* //=> 'bar' |
|
* console.log(second.base.foo); |
|
* //=> 'bar' |
|
* console.log(third.base.foo); |
|
* //=> 'bar' |
|
* // and now you know how to get to third base ;) |
|
* ``` |
|
* @name .base |
|
* @api public |
|
*/ |
|
|
|
Object.defineProperty(Base.prototype, 'base', { |
|
configurable: true, |
|
get: function get() { |
|
return this.parent ? this.parent.base : this; |
|
} |
|
}); |
|
/** |
|
* Static method for adding global plugin functions that will |
|
* be added to an instance when created. |
|
* |
|
* ```js |
|
* Base.use(function(app) { |
|
* app.foo = 'bar'; |
|
* }); |
|
* var app = new Base(); |
|
* console.log(app.foo); |
|
* //=> 'bar' |
|
* ``` |
|
* @name #use |
|
* @param {Function} `fn` Plugin function to use on each instance. |
|
* @return {Object} Returns the `Base` constructor for chaining |
|
* @api public |
|
*/ |
|
|
|
define(Base, 'use', function (fn) { |
|
fns.push(fn); |
|
return Base; |
|
}); |
|
/** |
|
* Run an array of functions by passing each function |
|
* to a method on the given object specified by the given property. |
|
* |
|
* @param {Object} `obj` Object containing method to use. |
|
* @param {String} `prop` Name of the method on the object to use. |
|
* @param {Array} `arr` Array of functions to pass to the method. |
|
*/ |
|
|
|
define(Base, 'run', function (obj, prop, arr) { |
|
var len = arr.length, |
|
i = 0; |
|
|
|
while (len--) { |
|
obj[prop](arr[i++]); |
|
} |
|
|
|
return Base; |
|
}); |
|
/** |
|
* Static method for inheriting the prototype and static methods of the `Base` class. |
|
* This method greatly simplifies the process of creating inheritance-based applications. |
|
* See [static-extend][] for more details. |
|
* |
|
* ```js |
|
* var extend = cu.extend(Parent); |
|
* Parent.extend(Child); |
|
* |
|
* // optional methods |
|
* Parent.extend(Child, { |
|
* foo: function() {}, |
|
* bar: function() {} |
|
* }); |
|
* ``` |
|
* @name #extend |
|
* @param {Function} `Ctor` constructor to extend |
|
* @param {Object} `methods` Optional prototype properties to mix in. |
|
* @return {Object} Returns the `Base` constructor for chaining |
|
* @api public |
|
*/ |
|
|
|
define(Base, 'extend', cu.extend(Base, function (Ctor, Parent) { |
|
Ctor.prototype.mixins = Ctor.prototype.mixins || []; |
|
define(Ctor, 'mixin', function (fn) { |
|
var mixin = fn(Ctor.prototype, Ctor); |
|
|
|
if (typeof mixin === 'function') { |
|
Ctor.prototype.mixins.push(mixin); |
|
} |
|
|
|
return Ctor; |
|
}); |
|
define(Ctor, 'mixins', function (Child) { |
|
Base.run(Child, 'mixin', Ctor.prototype.mixins); |
|
return Ctor; |
|
}); |
|
|
|
Ctor.prototype.mixin = function (key, value) { |
|
Ctor.prototype[key] = value; |
|
return this; |
|
}; |
|
|
|
return Base; |
|
})); |
|
/** |
|
* Used for adding methods to the `Base` prototype, and/or to the prototype of child instances. |
|
* When a mixin function returns a function, the returned function is pushed onto the `.mixins` |
|
* array, making it available to be used on inheriting classes whenever `Base.mixins()` is |
|
* called (e.g. `Base.mixins(Child)`). |
|
* |
|
* ```js |
|
* Base.mixin(function(proto) { |
|
* proto.foo = function(msg) { |
|
* return 'foo ' + msg; |
|
* }; |
|
* }); |
|
* ``` |
|
* @name #mixin |
|
* @param {Function} `fn` Function to call |
|
* @return {Object} Returns the `Base` constructor for chaining |
|
* @api public |
|
*/ |
|
|
|
define(Base, 'mixin', function (fn) { |
|
var mixin = fn(Base.prototype, Base); |
|
|
|
if (typeof mixin === 'function') { |
|
Base.prototype.mixins.push(mixin); |
|
} |
|
|
|
return Base; |
|
}); |
|
/** |
|
* Static method for running global mixin functions against a child constructor. |
|
* Mixins must be registered before calling this method. |
|
* |
|
* ```js |
|
* Base.extend(Child); |
|
* Base.mixins(Child); |
|
* ``` |
|
* @name #mixins |
|
* @param {Function} `Child` Constructor function of a child class |
|
* @return {Object} Returns the `Base` constructor for chaining |
|
* @api public |
|
*/ |
|
|
|
define(Base, 'mixins', function (Child) { |
|
Base.run(Child, 'mixin', Base.prototype.mixins); |
|
return Base; |
|
}); |
|
/** |
|
* Similar to `util.inherit`, but copies all static properties, prototype properties, and |
|
* getters/setters from `Provider` to `Receiver`. See [class-utils][]{#inherit} for more details. |
|
* |
|
* ```js |
|
* Base.inherit(Foo, Bar); |
|
* ``` |
|
* @name #inherit |
|
* @param {Function} `Receiver` Receiving (child) constructor |
|
* @param {Function} `Provider` Providing (parent) constructor |
|
* @return {Object} Returns the `Base` constructor for chaining |
|
* @api public |
|
*/ |
|
|
|
define(Base, 'inherit', cu.inherit); |
|
define(Base, 'bubble', cu.bubble); |
|
return Base; |
|
} |
|
/** |
|
* Expose `Base` with default settings |
|
*/ |
|
|
|
|
|
module.exports = namespace(); |
|
/** |
|
* Allow users to define a namespace |
|
*/ |
|
|
|
module.exports.namespace = namespace; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/base/node_modules/component-emitter/index.js": |
|
/*!*******************************************************************!*\ |
|
!*** ./node_modules/base/node_modules/component-emitter/index.js ***! |
|
\*******************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/**
|
|
* Expose `Emitter`.
|
|
*/ |
|
if (true) { |
|
module.exports = Emitter; |
|
} |
|
/**
|
|
* Initialize a new `Emitter`.
|
|
*
|
|
* @api public
|
|
*/ |
|
|
|
|
|
function Emitter(obj) { |
|
if (obj) return mixin(obj); |
|
} |
|
|
|
; |
|
/**
|
|
* Mixin the emitter properties.
|
|
*
|
|
* @param {Object} obj
|
|
* @return {Object}
|
|
* @api private
|
|
*/ |
|
|
|
function mixin(obj) { |
|
for (var key in Emitter.prototype) { |
|
obj[key] = Emitter.prototype[key]; |
|
} |
|
|
|
return obj; |
|
} |
|
/**
|
|
* Listen on the given `event` with `fn`.
|
|
*
|
|
* @param {String} event
|
|
* @param {Function} fn
|
|
* @return {Emitter}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) { |
|
this._callbacks = this._callbacks || {}; |
|
(this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); |
|
return this; |
|
}; |
|
/**
|
|
* Adds an `event` listener that will be invoked a single
|
|
* time then automatically removed.
|
|
*
|
|
* @param {String} event
|
|
* @param {Function} fn
|
|
* @return {Emitter}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.once = function (event, fn) { |
|
function on() { |
|
this.off(event, on); |
|
fn.apply(this, arguments); |
|
} |
|
|
|
on.fn = fn; |
|
this.on(event, on); |
|
return this; |
|
}; |
|
/**
|
|
* Remove the given callback for `event` or all
|
|
* registered callbacks.
|
|
*
|
|
* @param {String} event
|
|
* @param {Function} fn
|
|
* @return {Emitter}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) { |
|
this._callbacks = this._callbacks || {}; // all |
|
|
|
if (0 == arguments.length) { |
|
this._callbacks = {}; |
|
return this; |
|
} // specific event |
|
|
|
|
|
var callbacks = this._callbacks['$' + event]; |
|
if (!callbacks) return this; // remove all handlers |
|
|
|
if (1 == arguments.length) { |
|
delete this._callbacks['$' + event]; |
|
return this; |
|
} // remove specific handler |
|
|
|
|
|
var cb; |
|
|
|
for (var i = 0; i < callbacks.length; i++) { |
|
cb = callbacks[i]; |
|
|
|
if (cb === fn || cb.fn === fn) { |
|
callbacks.splice(i, 1); |
|
break; |
|
} |
|
} // Remove event specific arrays for event types that no |
|
// one is subscribed for to avoid memory leak. |
|
|
|
|
|
if (callbacks.length === 0) { |
|
delete this._callbacks['$' + event]; |
|
} |
|
|
|
return this; |
|
}; |
|
/**
|
|
* Emit `event` with the given args.
|
|
*
|
|
* @param {String} event
|
|
* @param {Mixed} ...
|
|
* @return {Emitter}
|
|
*/ |
|
|
|
|
|
Emitter.prototype.emit = function (event) { |
|
this._callbacks = this._callbacks || {}; |
|
var args = new Array(arguments.length - 1), |
|
callbacks = this._callbacks['$' + event]; |
|
|
|
for (var i = 1; i < arguments.length; i++) { |
|
args[i - 1] = arguments[i]; |
|
} |
|
|
|
if (callbacks) { |
|
callbacks = callbacks.slice(0); |
|
|
|
for (var i = 0, len = callbacks.length; i < len; ++i) { |
|
callbacks[i].apply(this, args); |
|
} |
|
} |
|
|
|
return this; |
|
}; |
|
/**
|
|
* Return array of callbacks for `event`.
|
|
*
|
|
* @param {String} event
|
|
* @return {Array}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.listeners = function (event) { |
|
this._callbacks = this._callbacks || {}; |
|
return this._callbacks['$' + event] || []; |
|
}; |
|
/**
|
|
* Check if this emitter has `event` handlers.
|
|
*
|
|
* @param {String} event
|
|
* @return {Boolean}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.hasListeners = function (event) { |
|
return !!this.listeners(event).length; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/base/node_modules/define-property/index.js": |
|
/*!*****************************************************************!*\ |
|
!*** ./node_modules/base/node_modules/define-property/index.js ***! |
|
\*****************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* define-property <https://github.com/jonschlinkert/define-property> |
|
* |
|
* Copyright (c) 2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isDescriptor = __webpack_require__(/*! is-descriptor */ "./node_modules/is-descriptor/index.js"); |
|
|
|
module.exports = function defineProperty(obj, prop, val) { |
|
if (_typeof(obj) !== 'object' && typeof obj !== 'function') { |
|
throw new TypeError('expected an object or function.'); |
|
} |
|
|
|
if (typeof prop !== 'string') { |
|
throw new TypeError('expected `prop` to be a string.'); |
|
} |
|
|
|
if (isDescriptor(val) && ('set' in val || 'get' in val)) { |
|
return Object.defineProperty(obj, prop, val); |
|
} |
|
|
|
return Object.defineProperty(obj, prop, { |
|
configurable: true, |
|
enumerable: false, |
|
writable: true, |
|
value: val |
|
}); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/braces/index.js": |
|
/*!**************************************!*\ |
|
!*** ./node_modules/braces/index.js ***! |
|
\**************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
var toRegex = __webpack_require__(/*! to-regex */ "./node_modules/to-regex/index.js"); |
|
|
|
var unique = __webpack_require__(/*! array-unique */ "./node_modules/array-unique/index.js"); |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
/** |
|
* Local dependencies |
|
*/ |
|
|
|
|
|
var compilers = __webpack_require__(/*! ./lib/compilers */ "./node_modules/braces/lib/compilers.js"); |
|
|
|
var parsers = __webpack_require__(/*! ./lib/parsers */ "./node_modules/braces/lib/parsers.js"); |
|
|
|
var Braces = __webpack_require__(/*! ./lib/braces */ "./node_modules/braces/lib/braces.js"); |
|
|
|
var utils = __webpack_require__(/*! ./lib/utils */ "./node_modules/braces/lib/utils.js"); |
|
|
|
var MAX_LENGTH = 1024 * 64; |
|
var cache = {}; |
|
/** |
|
* Convert the given `braces` pattern into a regex-compatible string. By default, only one string is generated for every input string. Set `options.expand` to true to return an array of patterns (similar to Bash or minimatch. Before using `options.expand`, it's recommended that you read the [performance notes](#performance)). |
|
* |
|
* ```js |
|
* var braces = require('braces'); |
|
* console.log(braces('{a,b,c}')); |
|
* //=> ['(a|b|c)'] |
|
* |
|
* console.log(braces('{a,b,c}', {expand: true})); |
|
* //=> ['a', 'b', 'c'] |
|
* ``` |
|
* @param {String} `str` |
|
* @param {Object} `options` |
|
* @return {String} |
|
* @api public |
|
*/ |
|
|
|
function braces(pattern, options) { |
|
var key = utils.createKey(String(pattern), options); |
|
var arr = []; |
|
var disabled = options && options.cache === false; |
|
|
|
if (!disabled && cache.hasOwnProperty(key)) { |
|
return cache[key]; |
|
} |
|
|
|
if (Array.isArray(pattern)) { |
|
for (var i = 0; i < pattern.length; i++) { |
|
arr.push.apply(arr, braces.create(pattern[i], options)); |
|
} |
|
} else { |
|
arr = braces.create(pattern, options); |
|
} |
|
|
|
if (options && options.nodupes === true) { |
|
arr = unique(arr); |
|
} |
|
|
|
if (!disabled) { |
|
cache[key] = arr; |
|
} |
|
|
|
return arr; |
|
} |
|
/** |
|
* Expands a brace pattern into an array. This method is called by the main [braces](#braces) function when `options.expand` is true. Before using this method it's recommended that you read the [performance notes](#performance)) and advantages of using [.optimize](#optimize) instead. |
|
* |
|
* ```js |
|
* var braces = require('braces'); |
|
* console.log(braces.expand('a/{b,c}/d')); |
|
* //=> ['a/b/d', 'a/c/d']; |
|
* ``` |
|
* @param {String} `pattern` Brace pattern |
|
* @param {Object} `options` |
|
* @return {Array} Returns an array of expanded values. |
|
* @api public |
|
*/ |
|
|
|
|
|
braces.expand = function (pattern, options) { |
|
return braces.create(pattern, extend({}, options, { |
|
expand: true |
|
})); |
|
}; |
|
/** |
|
* Expands a brace pattern into a regex-compatible, optimized string. This method is called by the main [braces](#braces) function by default. |
|
* |
|
* ```js |
|
* var braces = require('braces'); |
|
* console.log(braces.expand('a/{b,c}/d')); |
|
* //=> ['a/(b|c)/d'] |
|
* ``` |
|
* @param {String} `pattern` Brace pattern |
|
* @param {Object} `options` |
|
* @return {Array} Returns an array of expanded values. |
|
* @api public |
|
*/ |
|
|
|
|
|
braces.optimize = function (pattern, options) { |
|
return braces.create(pattern, options); |
|
}; |
|
/** |
|
* Processes a brace pattern and returns either an expanded array (if `options.expand` is true), a highly optimized regex-compatible string. This method is called by the main [braces](#braces) function. |
|
* |
|
* ```js |
|
* var braces = require('braces'); |
|
* console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) |
|
* //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' |
|
* ``` |
|
* @param {String} `pattern` Brace pattern |
|
* @param {Object} `options` |
|
* @return {Array} Returns an array of expanded values. |
|
* @api public |
|
*/ |
|
|
|
|
|
braces.create = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
var maxLength = options && options.maxLength || MAX_LENGTH; |
|
|
|
if (pattern.length >= maxLength) { |
|
throw new Error('expected pattern to be less than ' + maxLength + ' characters'); |
|
} |
|
|
|
function create() { |
|
if (pattern === '' || pattern.length < 3) { |
|
return [pattern]; |
|
} |
|
|
|
if (utils.isEmptySets(pattern)) { |
|
return []; |
|
} |
|
|
|
if (utils.isQuotedString(pattern)) { |
|
return [pattern.slice(1, -1)]; |
|
} |
|
|
|
var proto = new Braces(options); |
|
var result = !options || options.expand !== true ? proto.optimize(pattern, options) : proto.expand(pattern, options); // get the generated pattern(s) |
|
|
|
var arr = result.output; // filter out empty strings if specified |
|
|
|
if (options && options.noempty === true) { |
|
arr = arr.filter(Boolean); |
|
} // filter out duplicates if specified |
|
|
|
|
|
if (options && options.nodupes === true) { |
|
arr = unique(arr); |
|
} |
|
|
|
Object.defineProperty(arr, 'result', { |
|
enumerable: false, |
|
value: result |
|
}); |
|
return arr; |
|
} |
|
|
|
return memoize('create', pattern, options, create); |
|
}; |
|
/** |
|
* Create a regular expression from the given string `pattern`. |
|
* |
|
* ```js |
|
* var braces = require('braces'); |
|
* |
|
* console.log(braces.makeRe('id-{200..300}')); |
|
* //=> /^(?:id-(20[0-9]|2[1-9][0-9]|300))$/ |
|
* ``` |
|
* @param {String} `pattern` The pattern to convert to regex. |
|
* @param {Object} `options` |
|
* @return {RegExp} |
|
* @api public |
|
*/ |
|
|
|
|
|
braces.makeRe = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
var maxLength = options && options.maxLength || MAX_LENGTH; |
|
|
|
if (pattern.length >= maxLength) { |
|
throw new Error('expected pattern to be less than ' + maxLength + ' characters'); |
|
} |
|
|
|
function makeRe() { |
|
var arr = braces(pattern, options); |
|
var opts = extend({ |
|
strictErrors: false |
|
}, options); |
|
return toRegex(arr, opts); |
|
} |
|
|
|
return memoize('makeRe', pattern, options, makeRe); |
|
}; |
|
/** |
|
* Parse the given `str` with the given `options`. |
|
* |
|
* ```js |
|
* var braces = require('braces'); |
|
* var ast = braces.parse('a/{b,c}/d'); |
|
* console.log(ast); |
|
* // { type: 'root', |
|
* // errors: [], |
|
* // input: 'a/{b,c}/d', |
|
* // nodes: |
|
* // [ { type: 'bos', val: '' }, |
|
* // { type: 'text', val: 'a/' }, |
|
* // { type: 'brace', |
|
* // nodes: |
|
* // [ { type: 'brace.open', val: '{' }, |
|
* // { type: 'text', val: 'b,c' }, |
|
* // { type: 'brace.close', val: '}' } ] }, |
|
* // { type: 'text', val: '/d' }, |
|
* // { type: 'eos', val: '' } ] } |
|
* ``` |
|
* @param {String} `pattern` Brace pattern to parse |
|
* @param {Object} `options` |
|
* @return {Object} Returns an AST |
|
* @api public |
|
*/ |
|
|
|
|
|
braces.parse = function (pattern, options) { |
|
var proto = new Braces(options); |
|
return proto.parse(pattern, options); |
|
}; |
|
/** |
|
* Compile the given `ast` or string with the given `options`. |
|
* |
|
* ```js |
|
* var braces = require('braces'); |
|
* var ast = braces.parse('a/{b,c}/d'); |
|
* console.log(braces.compile(ast)); |
|
* // { options: { source: 'string' }, |
|
* // state: {}, |
|
* // compilers: |
|
* // { eos: [Function], |
|
* // noop: [Function], |
|
* // bos: [Function], |
|
* // brace: [Function], |
|
* // 'brace.open': [Function], |
|
* // text: [Function], |
|
* // 'brace.close': [Function] }, |
|
* // output: [ 'a/(b|c)/d' ], |
|
* // ast: |
|
* // { ... }, |
|
* // parsingErrors: [] } |
|
* ``` |
|
* @param {Object|String} `ast` AST from [.parse](#parse). If a string is passed it will be parsed first. |
|
* @param {Object} `options` |
|
* @return {Object} Returns an object that has an `output` property with the compiled string. |
|
* @api public |
|
*/ |
|
|
|
|
|
braces.compile = function (ast, options) { |
|
var proto = new Braces(options); |
|
return proto.compile(ast, options); |
|
}; |
|
/** |
|
* Clear the regex cache. |
|
* |
|
* ```js |
|
* braces.clearCache(); |
|
* ``` |
|
* @api public |
|
*/ |
|
|
|
|
|
braces.clearCache = function () { |
|
cache = braces.cache = {}; |
|
}; |
|
/** |
|
* Memoize a generated regex or function. A unique key is generated |
|
* from the method name, pattern, and user-defined options. Set |
|
* options.memoize to false to disable. |
|
*/ |
|
|
|
|
|
function memoize(type, pattern, options, fn) { |
|
var key = utils.createKey(type + ':' + pattern, options); |
|
var disabled = options && options.cache === false; |
|
|
|
if (disabled) { |
|
braces.clearCache(); |
|
return fn(pattern, options); |
|
} |
|
|
|
if (cache.hasOwnProperty(key)) { |
|
return cache[key]; |
|
} |
|
|
|
var res = fn(pattern, options); |
|
cache[key] = res; |
|
return res; |
|
} |
|
/** |
|
* Expose `Braces` constructor and methods |
|
* @type {Function} |
|
*/ |
|
|
|
|
|
braces.Braces = Braces; |
|
braces.compilers = compilers; |
|
braces.parsers = parsers; |
|
braces.cache = cache; |
|
/** |
|
* Expose `braces` |
|
* @type {Function} |
|
*/ |
|
|
|
module.exports = braces; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/braces/lib/braces.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/braces/lib/braces.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
|
|
var Snapdragon = __webpack_require__(/*! snapdragon */ "./node_modules/snapdragon/index.js"); |
|
|
|
var compilers = __webpack_require__(/*! ./compilers */ "./node_modules/braces/lib/compilers.js"); |
|
|
|
var parsers = __webpack_require__(/*! ./parsers */ "./node_modules/braces/lib/parsers.js"); |
|
|
|
var utils = __webpack_require__(/*! ./utils */ "./node_modules/braces/lib/utils.js"); |
|
/** |
|
* Customize Snapdragon parser and renderer |
|
*/ |
|
|
|
|
|
function Braces(options) { |
|
this.options = extend({}, options); |
|
} |
|
/** |
|
* Initialize braces |
|
*/ |
|
|
|
|
|
Braces.prototype.init = function (options) { |
|
if (this.isInitialized) return; |
|
this.isInitialized = true; |
|
var opts = utils.createOptions({}, this.options, options); |
|
this.snapdragon = this.options.snapdragon || new Snapdragon(opts); |
|
this.compiler = this.snapdragon.compiler; |
|
this.parser = this.snapdragon.parser; |
|
compilers(this.snapdragon, opts); |
|
parsers(this.snapdragon, opts); |
|
/** |
|
* Call Snapdragon `.parse` method. When AST is returned, we check to |
|
* see if any unclosed braces are left on the stack and, if so, we iterate |
|
* over the stack and correct the AST so that compilers are called in the correct |
|
* order and unbalance braces are properly escaped. |
|
*/ |
|
|
|
utils.define(this.snapdragon, 'parse', function (pattern, options) { |
|
var parsed = Snapdragon.prototype.parse.apply(this, arguments); |
|
this.parser.ast.input = pattern; |
|
var stack = this.parser.stack; |
|
|
|
while (stack.length) { |
|
addParent({ |
|
type: 'brace.close', |
|
val: '' |
|
}, stack.pop()); |
|
} |
|
|
|
function addParent(node, parent) { |
|
utils.define(node, 'parent', parent); |
|
parent.nodes.push(node); |
|
} // add non-enumerable parser reference |
|
|
|
|
|
utils.define(parsed, 'parser', this.parser); |
|
return parsed; |
|
}); |
|
}; |
|
/** |
|
* Decorate `.parse` method |
|
*/ |
|
|
|
|
|
Braces.prototype.parse = function (ast, options) { |
|
if (ast && _typeof(ast) === 'object' && ast.nodes) return ast; |
|
this.init(options); |
|
return this.snapdragon.parse(ast, options); |
|
}; |
|
/** |
|
* Decorate `.compile` method |
|
*/ |
|
|
|
|
|
Braces.prototype.compile = function (ast, options) { |
|
if (typeof ast === 'string') { |
|
ast = this.parse(ast, options); |
|
} else { |
|
this.init(options); |
|
} |
|
|
|
return this.snapdragon.compile(ast, options); |
|
}; |
|
/** |
|
* Expand |
|
*/ |
|
|
|
|
|
Braces.prototype.expand = function (pattern) { |
|
var ast = this.parse(pattern, { |
|
expand: true |
|
}); |
|
return this.compile(ast, { |
|
expand: true |
|
}); |
|
}; |
|
/** |
|
* Optimize |
|
*/ |
|
|
|
|
|
Braces.prototype.optimize = function (pattern) { |
|
var ast = this.parse(pattern, { |
|
optimize: true |
|
}); |
|
return this.compile(ast, { |
|
optimize: true |
|
}); |
|
}; |
|
/** |
|
* Expose `Braces` |
|
*/ |
|
|
|
|
|
module.exports = Braces; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/braces/lib/compilers.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/braces/lib/compilers.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var utils = __webpack_require__(/*! ./utils */ "./node_modules/braces/lib/utils.js"); |
|
|
|
module.exports = function (braces, options) { |
|
braces.compiler |
|
/** |
|
* bos |
|
*/ |
|
.set('bos', function () { |
|
if (this.output) return; |
|
this.ast.queue = isEscaped(this.ast) ? [this.ast.val] : []; |
|
this.ast.count = 1; |
|
}) |
|
/** |
|
* Square brackets |
|
*/ |
|
.set('bracket', function (node) { |
|
var close = node.close; |
|
var open = !node.escaped ? '[' : '\\['; |
|
var negated = node.negated; |
|
var inner = node.inner; |
|
inner = inner.replace(/\\(?=[\\\w]|$)/g, '\\\\'); |
|
|
|
if (inner === ']-') { |
|
inner = '\\]\\-'; |
|
} |
|
|
|
if (negated && inner.indexOf('.') === -1) { |
|
inner += '.'; |
|
} |
|
|
|
if (negated && inner.indexOf('/') === -1) { |
|
inner += '/'; |
|
} |
|
|
|
var val = open + negated + inner + close; |
|
var queue = node.parent.queue; |
|
var last = utils.arrayify(queue.pop()); |
|
queue.push(utils.join(last, val)); |
|
queue.push.apply(queue, []); |
|
}) |
|
/** |
|
* Brace |
|
*/ |
|
.set('brace', function (node) { |
|
node.queue = isEscaped(node) ? [node.val] : []; |
|
node.count = 1; |
|
return this.mapVisit(node.nodes); |
|
}) |
|
/** |
|
* Open |
|
*/ |
|
.set('brace.open', function (node) { |
|
node.parent.open = node.val; |
|
}) |
|
/** |
|
* Inner |
|
*/ |
|
.set('text', function (node) { |
|
var queue = node.parent.queue; |
|
var escaped = node.escaped; |
|
var segs = [node.val]; |
|
|
|
if (node.optimize === false) { |
|
options = utils.extend({}, options, { |
|
optimize: false |
|
}); |
|
} |
|
|
|
if (node.multiplier > 1) { |
|
node.parent.count *= node.multiplier; |
|
} |
|
|
|
if (options.quantifiers === true && utils.isQuantifier(node.val)) { |
|
escaped = true; |
|
} else if (node.val.length > 1) { |
|
if (isType(node.parent, 'brace') && !isEscaped(node)) { |
|
var expanded = utils.expand(node.val, options); |
|
segs = expanded.segs; |
|
|
|
if (expanded.isOptimized) { |
|
node.parent.isOptimized = true; |
|
} // if nothing was expanded, we probably have a literal brace |
|
|
|
|
|
if (!segs.length) { |
|
var val = expanded.val || node.val; |
|
|
|
if (options.unescape !== false) { |
|
// unescape unexpanded brace sequence/set separators |
|
val = val.replace(/\\([,.])/g, '$1'); // strip quotes |
|
|
|
val = val.replace(/["'`]/g, ''); |
|
} |
|
|
|
segs = [val]; |
|
escaped = true; |
|
} |
|
} |
|
} else if (node.val === ',') { |
|
if (options.expand) { |
|
node.parent.queue.push(['']); |
|
segs = ['']; |
|
} else { |
|
segs = ['|']; |
|
} |
|
} else { |
|
escaped = true; |
|
} |
|
|
|
if (escaped && isType(node.parent, 'brace')) { |
|
if (node.parent.nodes.length <= 4 && node.parent.count === 1) { |
|
node.parent.escaped = true; |
|
} else if (node.parent.length <= 3) { |
|
node.parent.escaped = true; |
|
} |
|
} |
|
|
|
if (!hasQueue(node.parent)) { |
|
node.parent.queue = segs; |
|
return; |
|
} |
|
|
|
var last = utils.arrayify(queue.pop()); |
|
|
|
if (node.parent.count > 1 && options.expand) { |
|
last = multiply(last, node.parent.count); |
|
node.parent.count = 1; |
|
} |
|
|
|
queue.push(utils.join(utils.flatten(last), segs.shift())); |
|
queue.push.apply(queue, segs); |
|
}) |
|
/** |
|
* Close |
|
*/ |
|
.set('brace.close', function (node) { |
|
var queue = node.parent.queue; |
|
var prev = node.parent.parent; |
|
var last = prev.queue.pop(); |
|
var open = node.parent.open; |
|
var close = node.val; |
|
|
|
if (open && close && isOptimized(node, options)) { |
|
open = '('; |
|
close = ')'; |
|
} // if a close brace exists, and the previous segment is one character |
|
// don't wrap the result in braces or parens |
|
|
|
|
|
var ele = utils.last(queue); |
|
|
|
if (node.parent.count > 1 && options.expand) { |
|
ele = multiply(queue.pop(), node.parent.count); |
|
node.parent.count = 1; |
|
queue.push(ele); |
|
} |
|
|
|
if (close && typeof ele === 'string' && ele.length === 1) { |
|
open = ''; |
|
close = ''; |
|
} |
|
|
|
if ((isLiteralBrace(node, options) || noInner(node)) && !node.parent.hasEmpty) { |
|
queue.push(utils.join(open, queue.pop() || '')); |
|
queue = utils.flatten(utils.join(queue, close)); |
|
} |
|
|
|
if (typeof last === 'undefined') { |
|
prev.queue = [queue]; |
|
} else { |
|
prev.queue.push(utils.flatten(utils.join(last, queue))); |
|
} |
|
}) |
|
/** |
|
* eos |
|
*/ |
|
.set('eos', function (node) { |
|
if (this.input) return; |
|
|
|
if (options.optimize !== false) { |
|
this.output = utils.last(utils.flatten(this.ast.queue)); |
|
} else if (Array.isArray(utils.last(this.ast.queue))) { |
|
this.output = utils.flatten(this.ast.queue.pop()); |
|
} else { |
|
this.output = utils.flatten(this.ast.queue); |
|
} |
|
|
|
if (node.parent.count > 1 && options.expand) { |
|
this.output = multiply(this.output, node.parent.count); |
|
} |
|
|
|
this.output = utils.arrayify(this.output); |
|
this.ast.queue = []; |
|
}); |
|
}; |
|
/** |
|
* Multiply the segments in the current brace level |
|
*/ |
|
|
|
|
|
function multiply(queue, n, options) { |
|
return utils.flatten(utils.repeat(utils.arrayify(queue), n)); |
|
} |
|
/** |
|
* Return true if `node` is escaped |
|
*/ |
|
|
|
|
|
function isEscaped(node) { |
|
return node.escaped === true; |
|
} |
|
/** |
|
* Returns true if regex parens should be used for sets. If the parent `type` |
|
* is not `brace`, then we're on a root node, which means we should never |
|
* expand segments and open/close braces should be `{}` (since this indicates |
|
* a brace is missing from the set) |
|
*/ |
|
|
|
|
|
function isOptimized(node, options) { |
|
if (node.parent.isOptimized) return true; |
|
return isType(node.parent, 'brace') && !isEscaped(node.parent) && options.expand !== true; |
|
} |
|
/** |
|
* Returns true if the value in `node` should be wrapped in a literal brace. |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
function isLiteralBrace(node, options) { |
|
return isEscaped(node.parent) || options.optimize !== false; |
|
} |
|
/** |
|
* Returns true if the given `node` does not have an inner value. |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
function noInner(node, type) { |
|
if (node.parent.queue.length === 1) { |
|
return true; |
|
} |
|
|
|
var nodes = node.parent.nodes; |
|
return nodes.length === 3 && isType(nodes[0], 'brace.open') && !isType(nodes[1], 'text') && isType(nodes[2], 'brace.close'); |
|
} |
|
/** |
|
* Returns true if the given `node` is the given `type` |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
function isType(node, type) { |
|
return typeof node !== 'undefined' && node.type === type; |
|
} |
|
/** |
|
* Returns true if the given `node` has a non-empty queue. |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
function hasQueue(node) { |
|
return Array.isArray(node.queue) && node.queue.length; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/braces/lib/parsers.js": |
|
/*!********************************************!*\ |
|
!*** ./node_modules/braces/lib/parsers.js ***! |
|
\********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var Node = __webpack_require__(/*! snapdragon-node */ "./node_modules/snapdragon-node/index.js"); |
|
|
|
var utils = __webpack_require__(/*! ./utils */ "./node_modules/braces/lib/utils.js"); |
|
/** |
|
* Braces parsers |
|
*/ |
|
|
|
|
|
module.exports = function (braces, options) { |
|
braces.parser.set('bos', function () { |
|
if (!this.parsed) { |
|
this.ast = this.nodes[0] = new Node(this.ast); |
|
} |
|
}) |
|
/** |
|
* Character parsers |
|
*/ |
|
.set('escape', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^(?:\\(.)|\$\{)/); |
|
if (!m) return; |
|
var prev = this.prev(); |
|
var last = utils.last(prev.nodes); |
|
var node = pos(new Node({ |
|
type: 'text', |
|
multiplier: 1, |
|
val: m[0] |
|
})); |
|
|
|
if (node.val === '\\\\') { |
|
return node; |
|
} |
|
|
|
if (node.val === '${') { |
|
var str = this.input; |
|
var idx = -1; |
|
var ch; |
|
|
|
while (ch = str[++idx]) { |
|
this.consume(1); |
|
node.val += ch; |
|
|
|
if (ch === '\\') { |
|
node.val += str[++idx]; |
|
continue; |
|
} |
|
|
|
if (ch === '}') { |
|
break; |
|
} |
|
} |
|
} |
|
|
|
if (this.options.unescape !== false) { |
|
node.val = node.val.replace(/\\([{}])/g, '$1'); |
|
} |
|
|
|
if (last.val === '"' && this.input.charAt(0) === '"') { |
|
last.val = node.val; |
|
this.consume(1); |
|
return; |
|
} |
|
|
|
return concatNodes.call(this, pos, node, prev, options); |
|
}) |
|
/** |
|
* Brackets: "[...]" (basic, this is overridden by |
|
* other parsers in more advanced implementations) |
|
*/ |
|
.set('bracket', function () { |
|
var isInside = this.isInside('brace'); |
|
var pos = this.position(); |
|
var m = this.match(/^(?:\[([!^]?)([^\]]{2,}|\]-)(\]|[^*+?]+)|\[)/); |
|
if (!m) return; |
|
var prev = this.prev(); |
|
var val = m[0]; |
|
var negated = m[1] ? '^' : ''; |
|
var inner = m[2] || ''; |
|
var close = m[3] || ''; |
|
|
|
if (isInside && prev.type === 'brace') { |
|
prev.text = prev.text || ''; |
|
prev.text += val; |
|
} |
|
|
|
var esc = this.input.slice(0, 2); |
|
|
|
if (inner === '' && esc === '\\]') { |
|
inner += esc; |
|
this.consume(2); |
|
var str = this.input; |
|
var idx = -1; |
|
var ch; |
|
|
|
while (ch = str[++idx]) { |
|
this.consume(1); |
|
|
|
if (ch === ']') { |
|
close = ch; |
|
break; |
|
} |
|
|
|
inner += ch; |
|
} |
|
} |
|
|
|
return pos(new Node({ |
|
type: 'bracket', |
|
val: val, |
|
escaped: close !== ']', |
|
negated: negated, |
|
inner: inner, |
|
close: close |
|
})); |
|
}) |
|
/** |
|
* Empty braces (we capture these early to |
|
* speed up processing in the compiler) |
|
*/ |
|
.set('multiplier', function () { |
|
var isInside = this.isInside('brace'); |
|
var pos = this.position(); |
|
var m = this.match(/^\{((?:,|\{,+\})+)\}/); |
|
if (!m) return; |
|
this.multiplier = true; |
|
var prev = this.prev(); |
|
var val = m[0]; |
|
|
|
if (isInside && prev.type === 'brace') { |
|
prev.text = prev.text || ''; |
|
prev.text += val; |
|
} |
|
|
|
var node = pos(new Node({ |
|
type: 'text', |
|
multiplier: 1, |
|
match: m, |
|
val: val |
|
})); |
|
return concatNodes.call(this, pos, node, prev, options); |
|
}) |
|
/** |
|
* Open |
|
*/ |
|
.set('brace.open', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^\{(?!(?:[^\\}]?|,+)\})/); |
|
if (!m) return; |
|
var prev = this.prev(); |
|
var last = utils.last(prev.nodes); // if the last parsed character was an extglob character |
|
// we need to _not optimize_ the brace pattern because |
|
// it might be mistaken for an extglob by a downstream parser |
|
|
|
if (last && last.val && isExtglobChar(last.val.slice(-1))) { |
|
last.optimize = false; |
|
} |
|
|
|
var open = pos(new Node({ |
|
type: 'brace.open', |
|
val: m[0] |
|
})); |
|
var node = pos(new Node({ |
|
type: 'brace', |
|
nodes: [] |
|
})); |
|
node.push(open); |
|
prev.push(node); |
|
this.push('brace', node); |
|
}) |
|
/** |
|
* Close |
|
*/ |
|
.set('brace.close', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^\}/); |
|
if (!m || !m[0]) return; |
|
var brace = this.pop('brace'); |
|
var node = pos(new Node({ |
|
type: 'brace.close', |
|
val: m[0] |
|
})); |
|
|
|
if (!this.isType(brace, 'brace')) { |
|
if (this.options.strict) { |
|
throw new Error('missing opening "{"'); |
|
} |
|
|
|
node.type = 'text'; |
|
node.multiplier = 0; |
|
node.escaped = true; |
|
return node; |
|
} |
|
|
|
var prev = this.prev(); |
|
var last = utils.last(prev.nodes); |
|
|
|
if (last.text) { |
|
var lastNode = utils.last(last.nodes); |
|
|
|
if (lastNode.val === ')' && /[!@*?+]\(/.test(last.text)) { |
|
var open = last.nodes[0]; |
|
var text = last.nodes[1]; |
|
|
|
if (open.type === 'brace.open' && text && text.type === 'text') { |
|
text.optimize = false; |
|
} |
|
} |
|
} |
|
|
|
if (brace.nodes.length > 2) { |
|
var first = brace.nodes[1]; |
|
|
|
if (first.type === 'text' && first.val === ',') { |
|
brace.nodes.splice(1, 1); |
|
brace.nodes.push(first); |
|
} |
|
} |
|
|
|
brace.push(node); |
|
}) |
|
/** |
|
* Capture boundary characters |
|
*/ |
|
.set('boundary', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^[$^](?!\{)/); |
|
if (!m) return; |
|
return pos(new Node({ |
|
type: 'text', |
|
val: m[0] |
|
})); |
|
}) |
|
/** |
|
* One or zero, non-comma characters wrapped in braces |
|
*/ |
|
.set('nobrace', function () { |
|
var isInside = this.isInside('brace'); |
|
var pos = this.position(); |
|
var m = this.match(/^\{[^,]?\}/); |
|
if (!m) return; |
|
var prev = this.prev(); |
|
var val = m[0]; |
|
|
|
if (isInside && prev.type === 'brace') { |
|
prev.text = prev.text || ''; |
|
prev.text += val; |
|
} |
|
|
|
return pos(new Node({ |
|
type: 'text', |
|
multiplier: 0, |
|
val: val |
|
})); |
|
}) |
|
/** |
|
* Text |
|
*/ |
|
.set('text', function () { |
|
var isInside = this.isInside('brace'); |
|
var pos = this.position(); |
|
var m = this.match(/^((?!\\)[^${}[\]])+/); |
|
if (!m) return; |
|
var prev = this.prev(); |
|
var val = m[0]; |
|
|
|
if (isInside && prev.type === 'brace') { |
|
prev.text = prev.text || ''; |
|
prev.text += val; |
|
} |
|
|
|
var node = pos(new Node({ |
|
type: 'text', |
|
multiplier: 1, |
|
val: val |
|
})); |
|
return concatNodes.call(this, pos, node, prev, options); |
|
}); |
|
}; |
|
/** |
|
* Returns true if the character is an extglob character. |
|
*/ |
|
|
|
|
|
function isExtglobChar(ch) { |
|
return ch === '!' || ch === '@' || ch === '*' || ch === '?' || ch === '+'; |
|
} |
|
/** |
|
* Combine text nodes, and calculate empty sets (`{,,}`) |
|
* @param {Function} `pos` Function to calculate node position |
|
* @param {Object} `node` AST node |
|
* @return {Object} |
|
*/ |
|
|
|
|
|
function concatNodes(pos, node, parent, options) { |
|
node.orig = node.val; |
|
var prev = this.prev(); |
|
var last = utils.last(prev.nodes); |
|
var isEscaped = false; |
|
|
|
if (node.val.length > 1) { |
|
var a = node.val.charAt(0); |
|
var b = node.val.slice(-1); |
|
isEscaped = a === '"' && b === '"' || a === "'" && b === "'" || a === '`' && b === '`'; |
|
} |
|
|
|
if (isEscaped && options.unescape !== false) { |
|
node.val = node.val.slice(1, node.val.length - 1); |
|
node.escaped = true; |
|
} |
|
|
|
if (node.match) { |
|
var match = node.match[1]; |
|
|
|
if (!match || match.indexOf('}') === -1) { |
|
match = node.match[0]; |
|
} // replace each set with a single "," |
|
|
|
|
|
var val = match.replace(/\{/g, ',').replace(/\}/g, ''); |
|
node.multiplier *= val.length; |
|
node.val = ''; |
|
} |
|
|
|
var simpleText = last.type === 'text' && last.multiplier === 1 && node.multiplier === 1 && node.val; |
|
|
|
if (simpleText) { |
|
last.val += node.val; |
|
return; |
|
} |
|
|
|
prev.push(node); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/braces/lib/utils.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/braces/lib/utils.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var splitString = __webpack_require__(/*! split-string */ "./node_modules/split-string/index.js"); |
|
|
|
var utils = module.exports; |
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
utils.extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
utils.flatten = __webpack_require__(/*! arr-flatten */ "./node_modules/arr-flatten/index.js"); |
|
utils.isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
utils.fillRange = __webpack_require__(/*! fill-range */ "./node_modules/fill-range/index.js"); |
|
utils.repeat = __webpack_require__(/*! repeat-element */ "./node_modules/repeat-element/index.js"); |
|
utils.unique = __webpack_require__(/*! array-unique */ "./node_modules/array-unique/index.js"); |
|
|
|
utils.define = function (obj, key, val) { |
|
Object.defineProperty(obj, key, { |
|
writable: true, |
|
configurable: true, |
|
enumerable: false, |
|
value: val |
|
}); |
|
}; |
|
/** |
|
* Returns true if the given string contains only empty brace sets. |
|
*/ |
|
|
|
|
|
utils.isEmptySets = function (str) { |
|
return /^(?:\{,\})+$/.test(str); |
|
}; |
|
/** |
|
* Returns true if the given string contains only empty brace sets. |
|
*/ |
|
|
|
|
|
utils.isQuotedString = function (str) { |
|
var open = str.charAt(0); |
|
|
|
if (open === '\'' || open === '"' || open === '`') { |
|
return str.slice(-1) === open; |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Create the key to use for memoization. The unique key is generated |
|
* by iterating over the options and concatenating key-value pairs |
|
* to the pattern string. |
|
*/ |
|
|
|
|
|
utils.createKey = function (pattern, options) { |
|
var id = pattern; |
|
|
|
if (typeof options === 'undefined') { |
|
return id; |
|
} |
|
|
|
var keys = Object.keys(options); |
|
|
|
for (var i = 0; i < keys.length; i++) { |
|
var key = keys[i]; |
|
id += ';' + key + '=' + String(options[key]); |
|
} |
|
|
|
return id; |
|
}; |
|
/** |
|
* Normalize options |
|
*/ |
|
|
|
|
|
utils.createOptions = function (options) { |
|
var opts = utils.extend.apply(null, arguments); |
|
|
|
if (typeof opts.expand === 'boolean') { |
|
opts.optimize = !opts.expand; |
|
} |
|
|
|
if (typeof opts.optimize === 'boolean') { |
|
opts.expand = !opts.optimize; |
|
} |
|
|
|
if (opts.optimize === true) { |
|
opts.makeRe = true; |
|
} |
|
|
|
return opts; |
|
}; |
|
/** |
|
* Join patterns in `a` to patterns in `b` |
|
*/ |
|
|
|
|
|
utils.join = function (a, b, options) { |
|
options = options || {}; |
|
a = utils.arrayify(a); |
|
b = utils.arrayify(b); |
|
if (!a.length) return b; |
|
if (!b.length) return a; |
|
var len = a.length; |
|
var idx = -1; |
|
var arr = []; |
|
|
|
while (++idx < len) { |
|
var val = a[idx]; |
|
|
|
if (Array.isArray(val)) { |
|
for (var i = 0; i < val.length; i++) { |
|
val[i] = utils.join(val[i], b, options); |
|
} |
|
|
|
arr.push(val); |
|
continue; |
|
} |
|
|
|
for (var j = 0; j < b.length; j++) { |
|
var bval = b[j]; |
|
|
|
if (Array.isArray(bval)) { |
|
arr.push(utils.join(val, bval, options)); |
|
} else { |
|
arr.push(val + bval); |
|
} |
|
} |
|
} |
|
|
|
return arr; |
|
}; |
|
/** |
|
* Split the given string on `,` if not escaped. |
|
*/ |
|
|
|
|
|
utils.split = function (str, options) { |
|
var opts = utils.extend({ |
|
sep: ',' |
|
}, options); |
|
|
|
if (typeof opts.keepQuotes !== 'boolean') { |
|
opts.keepQuotes = true; |
|
} |
|
|
|
if (opts.unescape === false) { |
|
opts.keepEscaping = true; |
|
} |
|
|
|
return splitString(str, opts, utils.escapeBrackets(opts)); |
|
}; |
|
/** |
|
* Expand ranges or sets in the given `pattern`. |
|
* |
|
* @param {String} `str` |
|
* @param {Object} `options` |
|
* @return {Object} |
|
*/ |
|
|
|
|
|
utils.expand = function (str, options) { |
|
var opts = utils.extend({ |
|
rangeLimit: 10000 |
|
}, options); |
|
var segs = utils.split(str, opts); |
|
var tok = { |
|
segs: segs |
|
}; |
|
|
|
if (utils.isQuotedString(str)) { |
|
return tok; |
|
} |
|
|
|
if (opts.rangeLimit === true) { |
|
opts.rangeLimit = 10000; |
|
} |
|
|
|
if (segs.length > 1) { |
|
if (opts.optimize === false) { |
|
tok.val = segs[0]; |
|
return tok; |
|
} |
|
|
|
tok.segs = utils.stringifyArray(tok.segs); |
|
} else if (segs.length === 1) { |
|
var arr = str.split('..'); |
|
|
|
if (arr.length === 1) { |
|
tok.val = tok.segs[tok.segs.length - 1] || tok.val || str; |
|
tok.segs = []; |
|
return tok; |
|
} |
|
|
|
if (arr.length === 2 && arr[0] === arr[1]) { |
|
tok.escaped = true; |
|
tok.val = arr[0]; |
|
tok.segs = []; |
|
return tok; |
|
} |
|
|
|
if (arr.length > 1) { |
|
if (opts.optimize !== false) { |
|
opts.optimize = true; |
|
delete opts.expand; |
|
} |
|
|
|
if (opts.optimize !== true) { |
|
var min = Math.min(arr[0], arr[1]); |
|
var max = Math.max(arr[0], arr[1]); |
|
var step = arr[2] || 1; |
|
|
|
if (opts.rangeLimit !== false && (max - min) / step >= opts.rangeLimit) { |
|
throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); |
|
} |
|
} |
|
|
|
arr.push(opts); |
|
tok.segs = utils.fillRange.apply(null, arr); |
|
|
|
if (!tok.segs.length) { |
|
tok.escaped = true; |
|
tok.val = str; |
|
return tok; |
|
} |
|
|
|
if (opts.optimize === true) { |
|
tok.segs = utils.stringifyArray(tok.segs); |
|
} |
|
|
|
if (tok.segs === '') { |
|
tok.val = str; |
|
} else { |
|
tok.val = tok.segs[0]; |
|
} |
|
|
|
return tok; |
|
} |
|
} else { |
|
tok.val = str; |
|
} |
|
|
|
return tok; |
|
}; |
|
/** |
|
* Ensure commas inside brackets and parens are not split. |
|
* @param {Object} `tok` Token from the `split-string` module |
|
* @return {undefined} |
|
*/ |
|
|
|
|
|
utils.escapeBrackets = function (options) { |
|
return function (tok) { |
|
if (tok.escaped && tok.val === 'b') { |
|
tok.val = '\\b'; |
|
return; |
|
} |
|
|
|
if (tok.val !== '(' && tok.val !== '[') return; |
|
var opts = utils.extend({}, options); |
|
var brackets = []; |
|
var parens = []; |
|
var stack = []; |
|
var val = tok.val; |
|
var str = tok.str; |
|
var i = tok.idx - 1; |
|
|
|
while (++i < str.length) { |
|
var ch = str[i]; |
|
|
|
if (ch === '\\') { |
|
val += (opts.keepEscaping === false ? '' : ch) + str[++i]; |
|
continue; |
|
} |
|
|
|
if (ch === '(') { |
|
parens.push(ch); |
|
stack.push(ch); |
|
} |
|
|
|
if (ch === '[') { |
|
brackets.push(ch); |
|
stack.push(ch); |
|
} |
|
|
|
if (ch === ')') { |
|
parens.pop(); |
|
stack.pop(); |
|
|
|
if (!stack.length) { |
|
val += ch; |
|
break; |
|
} |
|
} |
|
|
|
if (ch === ']') { |
|
brackets.pop(); |
|
stack.pop(); |
|
|
|
if (!stack.length) { |
|
val += ch; |
|
break; |
|
} |
|
} |
|
|
|
val += ch; |
|
} |
|
|
|
tok.split = false; |
|
tok.val = val.slice(1); |
|
tok.idx = i; |
|
}; |
|
}; |
|
/** |
|
* Returns true if the given string looks like a regex quantifier |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
utils.isQuantifier = function (str) { |
|
return /^(?:[0-9]?,[0-9]|[0-9],)$/.test(str); |
|
}; |
|
/** |
|
* Cast `val` to an array. |
|
* @param {*} `val` |
|
*/ |
|
|
|
|
|
utils.stringifyArray = function (arr) { |
|
return [utils.arrayify(arr).join('|')]; |
|
}; |
|
/** |
|
* Cast `val` to an array. |
|
* @param {*} `val` |
|
*/ |
|
|
|
|
|
utils.arrayify = function (arr) { |
|
if (typeof arr === 'undefined') { |
|
return []; |
|
} |
|
|
|
if (typeof arr === 'string') { |
|
return [arr]; |
|
} |
|
|
|
return arr; |
|
}; |
|
/** |
|
* Returns true if the given `str` is a non-empty string |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
utils.isString = function (str) { |
|
return str != null && typeof str === 'string'; |
|
}; |
|
/** |
|
* Get the last element from `array` |
|
* @param {Array} `array` |
|
* @return {*} |
|
*/ |
|
|
|
|
|
utils.last = function (arr, n) { |
|
return arr[arr.length - (n || 1)]; |
|
}; |
|
|
|
utils.escapeRegex = function (str) { |
|
return str.replace(/\\?([!^*?()[\]{}+?/])/g, '\\$1'); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/cache-base/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/cache-base/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/cache-base/node_modules/component-emitter/index.js"); |
|
|
|
var visit = __webpack_require__(/*! collection-visit */ "./node_modules/collection-visit/index.js"); |
|
|
|
var toPath = __webpack_require__(/*! to-object-path */ "./node_modules/to-object-path/index.js"); |
|
|
|
var union = __webpack_require__(/*! union-value */ "./node_modules/union-value/index.js"); |
|
|
|
var del = __webpack_require__(/*! unset-value */ "./node_modules/unset-value/index.js"); |
|
|
|
var get = __webpack_require__(/*! get-value */ "./node_modules/get-value/index.js"); |
|
|
|
var has = __webpack_require__(/*! has-value */ "./node_modules/has-value/index.js"); |
|
|
|
var set = __webpack_require__(/*! set-value */ "./node_modules/set-value/index.js"); |
|
/** |
|
* Create a `Cache` constructor that when instantiated will |
|
* store values on the given `prop`. |
|
* |
|
* ```js |
|
* var Cache = require('cache-base').namespace('data'); |
|
* var cache = new Cache(); |
|
* |
|
* cache.set('foo', 'bar'); |
|
* //=> {data: {foo: 'bar'}} |
|
* ``` |
|
* @param {String} `prop` The property name to use for storing values. |
|
* @return {Function} Returns a custom `Cache` constructor |
|
* @api public |
|
*/ |
|
|
|
|
|
function namespace(prop) { |
|
/** |
|
* Create a new `Cache`. Internally the `Cache` constructor is created using |
|
* the `namespace` function, with `cache` defined as the storage object. |
|
* |
|
* ```js |
|
* var app = new Cache(); |
|
* ``` |
|
* @param {Object} `cache` Optionally pass an object to initialize with. |
|
* @constructor |
|
* @api public |
|
*/ |
|
function Cache(cache) { |
|
if (prop) { |
|
this[prop] = {}; |
|
} |
|
|
|
if (cache) { |
|
this.set(cache); |
|
} |
|
} |
|
/** |
|
* Inherit Emitter |
|
*/ |
|
|
|
|
|
Emitter(Cache.prototype); |
|
/** |
|
* Assign `value` to `key`. Also emits `set` with |
|
* the key and value. |
|
* |
|
* ```js |
|
* app.on('set', function(key, val) { |
|
* // do something when `set` is emitted |
|
* }); |
|
* |
|
* app.set(key, value); |
|
* |
|
* // also takes an object or array |
|
* app.set({name: 'Halle'}); |
|
* app.set([{foo: 'bar'}, {baz: 'quux'}]); |
|
* console.log(app); |
|
* //=> {name: 'Halle', foo: 'bar', baz: 'quux'} |
|
* ``` |
|
* |
|
* @name .set |
|
* @emits `set` with `key` and `value` as arguments. |
|
* @param {String} `key` |
|
* @param {any} `value` |
|
* @return {Object} Returns the instance for chaining. |
|
* @api public |
|
*/ |
|
|
|
Cache.prototype.set = function (key, val) { |
|
if (Array.isArray(key) && arguments.length === 2) { |
|
key = toPath(key); |
|
} |
|
|
|
if (isObject(key) || Array.isArray(key)) { |
|
this.visit('set', key); |
|
} else { |
|
set(prop ? this[prop] : this, key, val); |
|
this.emit('set', key, val); |
|
} |
|
|
|
return this; |
|
}; |
|
/** |
|
* Union `array` to `key`. Also emits `set` with |
|
* the key and value. |
|
* |
|
* ```js |
|
* app.union('a.b', ['foo']); |
|
* app.union('a.b', ['bar']); |
|
* console.log(app.get('a')); |
|
* //=> {b: ['foo', 'bar']} |
|
* ``` |
|
* @name .union |
|
* @param {String} `key` |
|
* @param {any} `value` |
|
* @return {Object} Returns the instance for chaining. |
|
* @api public |
|
*/ |
|
|
|
|
|
Cache.prototype.union = function (key, val) { |
|
if (Array.isArray(key) && arguments.length === 2) { |
|
key = toPath(key); |
|
} |
|
|
|
var ctx = prop ? this[prop] : this; |
|
union(ctx, key, arrayify(val)); |
|
this.emit('union', val); |
|
return this; |
|
}; |
|
/** |
|
* Return the value of `key`. Dot notation may be used |
|
* to get [nested property values][get-value]. |
|
* |
|
* ```js |
|
* app.set('a.b.c', 'd'); |
|
* app.get('a.b'); |
|
* //=> {c: 'd'} |
|
* |
|
* app.get(['a', 'b']); |
|
* //=> {c: 'd'} |
|
* ``` |
|
* |
|
* @name .get |
|
* @emits `get` with `key` and `value` as arguments. |
|
* @param {String} `key` The name of the property to get. Dot-notation may be used. |
|
* @return {any} Returns the value of `key` |
|
* @api public |
|
*/ |
|
|
|
|
|
Cache.prototype.get = function (key) { |
|
key = toPath(arguments); |
|
var ctx = prop ? this[prop] : this; |
|
var val = get(ctx, key); |
|
this.emit('get', key, val); |
|
return val; |
|
}; |
|
/** |
|
* Return true if app has a stored value for `key`, |
|
* false only if value is `undefined`. |
|
* |
|
* ```js |
|
* app.set('foo', 'bar'); |
|
* app.has('foo'); |
|
* //=> true |
|
* ``` |
|
* |
|
* @name .has |
|
* @emits `has` with `key` and true or false as arguments. |
|
* @param {String} `key` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
Cache.prototype.has = function (key) { |
|
key = toPath(arguments); |
|
var ctx = prop ? this[prop] : this; |
|
var val = get(ctx, key); |
|
var has = typeof val !== 'undefined'; |
|
this.emit('has', key, has); |
|
return has; |
|
}; |
|
/** |
|
* Delete one or more properties from the instance. |
|
* |
|
* ```js |
|
* app.del(); // delete all |
|
* // or |
|
* app.del('foo'); |
|
* // or |
|
* app.del(['foo', 'bar']); |
|
* ``` |
|
* @name .del |
|
* @emits `del` with the `key` as the only argument. |
|
* @param {String|Array} `key` Property name or array of property names. |
|
* @return {Object} Returns the instance for chaining. |
|
* @api public |
|
*/ |
|
|
|
|
|
Cache.prototype.del = function (key) { |
|
if (Array.isArray(key)) { |
|
this.visit('del', key); |
|
} else { |
|
del(prop ? this[prop] : this, key); |
|
this.emit('del', key); |
|
} |
|
|
|
return this; |
|
}; |
|
/** |
|
* Reset the entire cache to an empty object. |
|
* |
|
* ```js |
|
* app.clear(); |
|
* ``` |
|
* @api public |
|
*/ |
|
|
|
|
|
Cache.prototype.clear = function () { |
|
if (prop) { |
|
this[prop] = {}; |
|
} |
|
}; |
|
/** |
|
* Visit `method` over the properties in the given object, or map |
|
* visit over the object-elements in an array. |
|
* |
|
* @name .visit |
|
* @param {String} `method` The name of the `base` method to call. |
|
* @param {Object|Array} `val` The object or array to iterate over. |
|
* @return {Object} Returns the instance for chaining. |
|
* @api public |
|
*/ |
|
|
|
|
|
Cache.prototype.visit = function (method, val) { |
|
visit(this, method, val); |
|
return this; |
|
}; |
|
|
|
return Cache; |
|
} |
|
/** |
|
* Cast val to an array |
|
*/ |
|
|
|
|
|
function arrayify(val) { |
|
return val ? Array.isArray(val) ? val : [val] : []; |
|
} |
|
/** |
|
* Expose `Cache` |
|
*/ |
|
|
|
|
|
module.exports = namespace(); |
|
/** |
|
* Expose `Cache.namespace` |
|
*/ |
|
|
|
module.exports.namespace = namespace; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/cache-base/node_modules/component-emitter/index.js": |
|
/*!*************************************************************************!*\ |
|
!*** ./node_modules/cache-base/node_modules/component-emitter/index.js ***! |
|
\*************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/**
|
|
* Expose `Emitter`.
|
|
*/ |
|
if (true) { |
|
module.exports = Emitter; |
|
} |
|
/**
|
|
* Initialize a new `Emitter`.
|
|
*
|
|
* @api public
|
|
*/ |
|
|
|
|
|
function Emitter(obj) { |
|
if (obj) return mixin(obj); |
|
} |
|
|
|
; |
|
/**
|
|
* Mixin the emitter properties.
|
|
*
|
|
* @param {Object} obj
|
|
* @return {Object}
|
|
* @api private
|
|
*/ |
|
|
|
function mixin(obj) { |
|
for (var key in Emitter.prototype) { |
|
obj[key] = Emitter.prototype[key]; |
|
} |
|
|
|
return obj; |
|
} |
|
/**
|
|
* Listen on the given `event` with `fn`.
|
|
*
|
|
* @param {String} event
|
|
* @param {Function} fn
|
|
* @return {Emitter}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) { |
|
this._callbacks = this._callbacks || {}; |
|
(this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); |
|
return this; |
|
}; |
|
/**
|
|
* Adds an `event` listener that will be invoked a single
|
|
* time then automatically removed.
|
|
*
|
|
* @param {String} event
|
|
* @param {Function} fn
|
|
* @return {Emitter}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.once = function (event, fn) { |
|
function on() { |
|
this.off(event, on); |
|
fn.apply(this, arguments); |
|
} |
|
|
|
on.fn = fn; |
|
this.on(event, on); |
|
return this; |
|
}; |
|
/**
|
|
* Remove the given callback for `event` or all
|
|
* registered callbacks.
|
|
*
|
|
* @param {String} event
|
|
* @param {Function} fn
|
|
* @return {Emitter}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) { |
|
this._callbacks = this._callbacks || {}; // all |
|
|
|
if (0 == arguments.length) { |
|
this._callbacks = {}; |
|
return this; |
|
} // specific event |
|
|
|
|
|
var callbacks = this._callbacks['$' + event]; |
|
if (!callbacks) return this; // remove all handlers |
|
|
|
if (1 == arguments.length) { |
|
delete this._callbacks['$' + event]; |
|
return this; |
|
} // remove specific handler |
|
|
|
|
|
var cb; |
|
|
|
for (var i = 0; i < callbacks.length; i++) { |
|
cb = callbacks[i]; |
|
|
|
if (cb === fn || cb.fn === fn) { |
|
callbacks.splice(i, 1); |
|
break; |
|
} |
|
} // Remove event specific arrays for event types that no |
|
// one is subscribed for to avoid memory leak. |
|
|
|
|
|
if (callbacks.length === 0) { |
|
delete this._callbacks['$' + event]; |
|
} |
|
|
|
return this; |
|
}; |
|
/**
|
|
* Emit `event` with the given args.
|
|
*
|
|
* @param {String} event
|
|
* @param {Mixed} ...
|
|
* @return {Emitter}
|
|
*/ |
|
|
|
|
|
Emitter.prototype.emit = function (event) { |
|
this._callbacks = this._callbacks || {}; |
|
var args = new Array(arguments.length - 1), |
|
callbacks = this._callbacks['$' + event]; |
|
|
|
for (var i = 1; i < arguments.length; i++) { |
|
args[i - 1] = arguments[i]; |
|
} |
|
|
|
if (callbacks) { |
|
callbacks = callbacks.slice(0); |
|
|
|
for (var i = 0, len = callbacks.length; i < len; ++i) { |
|
callbacks[i].apply(this, args); |
|
} |
|
} |
|
|
|
return this; |
|
}; |
|
/**
|
|
* Return array of callbacks for `event`.
|
|
*
|
|
* @param {String} event
|
|
* @return {Array}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.listeners = function (event) { |
|
this._callbacks = this._callbacks || {}; |
|
return this._callbacks['$' + event] || []; |
|
}; |
|
/**
|
|
* Check if this emitter has `event` handlers.
|
|
*
|
|
* @param {String} event
|
|
* @return {Boolean}
|
|
* @api public
|
|
*/ |
|
|
|
|
|
Emitter.prototype.hasListeners = function (event) { |
|
return !!this.listeners(event).length; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/class-utils/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/class-utils/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var util = __webpack_require__(/*! util */ "./node_modules/util/util.js"); |
|
|
|
var union = __webpack_require__(/*! arr-union */ "./node_modules/arr-union/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
|
|
var staticExtend = __webpack_require__(/*! static-extend */ "./node_modules/static-extend/index.js"); |
|
|
|
var isObj = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
/** |
|
* Expose class utils |
|
*/ |
|
|
|
|
|
var cu = module.exports; |
|
/** |
|
* Expose class utils: `cu` |
|
*/ |
|
|
|
cu.isObject = function isObject(val) { |
|
return isObj(val) || typeof val === 'function'; |
|
}; |
|
/** |
|
* Returns true if an array has any of the given elements, or an |
|
* object has any of the give keys. |
|
* |
|
* ```js |
|
* cu.has(['a', 'b', 'c'], 'c'); |
|
* //=> true |
|
* |
|
* cu.has(['a', 'b', 'c'], ['c', 'z']); |
|
* //=> true |
|
* |
|
* cu.has({a: 'b', c: 'd'}, ['c', 'z']); |
|
* //=> true |
|
* ``` |
|
* @param {Object} `obj` |
|
* @param {String|Array} `val` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.has = function has(obj, val) { |
|
val = cu.arrayify(val); |
|
var len = val.length; |
|
|
|
if (cu.isObject(obj)) { |
|
for (var key in obj) { |
|
if (val.indexOf(key) > -1) { |
|
return true; |
|
} |
|
} |
|
|
|
var keys = cu.nativeKeys(obj); |
|
return cu.has(keys, val); |
|
} |
|
|
|
if (Array.isArray(obj)) { |
|
var arr = obj; |
|
|
|
while (len--) { |
|
if (arr.indexOf(val[len]) > -1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
|
|
throw new TypeError('expected an array or object.'); |
|
}; |
|
/** |
|
* Returns true if an array or object has all of the given values. |
|
* |
|
* ```js |
|
* cu.hasAll(['a', 'b', 'c'], 'c'); |
|
* //=> true |
|
* |
|
* cu.hasAll(['a', 'b', 'c'], ['c', 'z']); |
|
* //=> false |
|
* |
|
* cu.hasAll({a: 'b', c: 'd'}, ['c', 'z']); |
|
* //=> false |
|
* ``` |
|
* @param {Object|Array} `val` |
|
* @param {String|Array} `values` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.hasAll = function hasAll(val, values) { |
|
values = cu.arrayify(values); |
|
var len = values.length; |
|
|
|
while (len--) { |
|
if (!cu.has(val, values[len])) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
}; |
|
/** |
|
* Cast the given value to an array. |
|
* |
|
* ```js |
|
* cu.arrayify('foo'); |
|
* //=> ['foo'] |
|
* |
|
* cu.arrayify(['foo']); |
|
* //=> ['foo'] |
|
* ``` |
|
* |
|
* @param {String|Array} `val` |
|
* @return {Array} |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.arrayify = function arrayify(val) { |
|
return val ? Array.isArray(val) ? val : [val] : []; |
|
}; |
|
/** |
|
* Noop |
|
*/ |
|
|
|
|
|
cu.noop = function noop() { |
|
return; |
|
}; |
|
/** |
|
* Returns the first argument passed to the function. |
|
*/ |
|
|
|
|
|
cu.identity = function identity(val) { |
|
return val; |
|
}; |
|
/** |
|
* Returns true if a value has a `contructor` |
|
* |
|
* ```js |
|
* cu.hasConstructor({}); |
|
* //=> true |
|
* |
|
* cu.hasConstructor(Object.create(null)); |
|
* //=> false |
|
* ``` |
|
* @param {Object} `value` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.hasConstructor = function hasConstructor(val) { |
|
return cu.isObject(val) && typeof val.constructor !== 'undefined'; |
|
}; |
|
/** |
|
* Get the native `ownPropertyNames` from the constructor of the |
|
* given `object`. An empty array is returned if the object does |
|
* not have a constructor. |
|
* |
|
* ```js |
|
* cu.nativeKeys({a: 'b', b: 'c', c: 'd'}) |
|
* //=> ['a', 'b', 'c'] |
|
* |
|
* cu.nativeKeys(function(){}) |
|
* //=> ['length', 'caller'] |
|
* ``` |
|
* |
|
* @param {Object} `obj` Object that has a `constructor`. |
|
* @return {Array} Array of keys. |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.nativeKeys = function nativeKeys(val) { |
|
if (!cu.hasConstructor(val)) return []; |
|
var keys = Object.getOwnPropertyNames(val); |
|
if ('caller' in val) keys.push('caller'); |
|
return keys; |
|
}; |
|
/** |
|
* Returns property descriptor `key` if it's an "own" property |
|
* of the given object. |
|
* |
|
* ```js |
|
* function App() {} |
|
* Object.defineProperty(App.prototype, 'count', { |
|
* get: function() { |
|
* return Object.keys(this).length; |
|
* } |
|
* }); |
|
* cu.getDescriptor(App.prototype, 'count'); |
|
* // returns: |
|
* // { |
|
* // get: [Function], |
|
* // set: undefined, |
|
* // enumerable: false, |
|
* // configurable: false |
|
* // } |
|
* ``` |
|
* |
|
* @param {Object} `obj` |
|
* @param {String} `key` |
|
* @return {Object} Returns descriptor `key` |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.getDescriptor = function getDescriptor(obj, key) { |
|
if (!cu.isObject(obj)) { |
|
throw new TypeError('expected an object.'); |
|
} |
|
|
|
if (typeof key !== 'string') { |
|
throw new TypeError('expected key to be a string.'); |
|
} |
|
|
|
return Object.getOwnPropertyDescriptor(obj, key); |
|
}; |
|
/** |
|
* Copy a descriptor from one object to another. |
|
* |
|
* ```js |
|
* function App() {} |
|
* Object.defineProperty(App.prototype, 'count', { |
|
* get: function() { |
|
* return Object.keys(this).length; |
|
* } |
|
* }); |
|
* var obj = {}; |
|
* cu.copyDescriptor(obj, App.prototype, 'count'); |
|
* ``` |
|
* @param {Object} `receiver` |
|
* @param {Object} `provider` |
|
* @param {String} `name` |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.copyDescriptor = function copyDescriptor(receiver, provider, name) { |
|
if (!cu.isObject(receiver)) { |
|
throw new TypeError('expected receiving object to be an object.'); |
|
} |
|
|
|
if (!cu.isObject(provider)) { |
|
throw new TypeError('expected providing object to be an object.'); |
|
} |
|
|
|
if (typeof name !== 'string') { |
|
throw new TypeError('expected name to be a string.'); |
|
} |
|
|
|
var val = cu.getDescriptor(provider, name); |
|
if (val) Object.defineProperty(receiver, name, val); |
|
}; |
|
/** |
|
* Copy static properties, prototype properties, and descriptors |
|
* from one object to another. |
|
* |
|
* @param {Object} `receiver` |
|
* @param {Object} `provider` |
|
* @param {String|Array} `omit` One or more properties to omit |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.copy = function copy(receiver, provider, omit) { |
|
if (!cu.isObject(receiver)) { |
|
throw new TypeError('expected receiving object to be an object.'); |
|
} |
|
|
|
if (!cu.isObject(provider)) { |
|
throw new TypeError('expected providing object to be an object.'); |
|
} |
|
|
|
var props = Object.getOwnPropertyNames(provider); |
|
var keys = Object.keys(provider); |
|
var len = props.length, |
|
key; |
|
omit = cu.arrayify(omit); |
|
|
|
while (len--) { |
|
key = props[len]; |
|
|
|
if (cu.has(keys, key)) { |
|
define(receiver, key, provider[key]); |
|
} else if (!(key in receiver) && !cu.has(omit, key)) { |
|
cu.copyDescriptor(receiver, provider, key); |
|
} |
|
} |
|
}; |
|
/** |
|
* Inherit the static properties, prototype properties, and descriptors |
|
* from of an object. |
|
* |
|
* @param {Object} `receiver` |
|
* @param {Object} `provider` |
|
* @param {String|Array} `omit` One or more properties to omit |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.inherit = function inherit(receiver, provider, omit) { |
|
if (!cu.isObject(receiver)) { |
|
throw new TypeError('expected receiving object to be an object.'); |
|
} |
|
|
|
if (!cu.isObject(provider)) { |
|
throw new TypeError('expected providing object to be an object.'); |
|
} |
|
|
|
var keys = []; |
|
|
|
for (var key in provider) { |
|
keys.push(key); |
|
receiver[key] = provider[key]; |
|
} |
|
|
|
keys = keys.concat(cu.arrayify(omit)); |
|
var a = provider.prototype || provider; |
|
var b = receiver.prototype || receiver; |
|
cu.copy(b, a, keys); |
|
}; |
|
/** |
|
* Returns a function for extending the static properties, |
|
* prototype properties, and descriptors from the `Parent` |
|
* constructor onto `Child` constructors. |
|
* |
|
* ```js |
|
* var extend = cu.extend(Parent); |
|
* Parent.extend(Child); |
|
* |
|
* // optional methods |
|
* Parent.extend(Child, { |
|
* foo: function() {}, |
|
* bar: function() {} |
|
* }); |
|
* ``` |
|
* @param {Function} `Parent` Parent ctor |
|
* @param {Function} `extend` Optional extend function to handle custom extensions. Useful when updating methods that require a specific prototype. |
|
* @param {Function} `Child` Child ctor |
|
* @param {Object} `proto` Optionally pass additional prototype properties to inherit. |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.extend = function () { |
|
// keep it lazy, instead of assigning to `cu.extend` |
|
return staticExtend.apply(null, arguments); |
|
}; |
|
/** |
|
* Bubble up events emitted from static methods on the Parent ctor. |
|
* |
|
* @param {Object} `Parent` |
|
* @param {Array} `events` Event names to bubble up |
|
* @api public |
|
*/ |
|
|
|
|
|
cu.bubble = function (Parent, events) { |
|
events = events || []; |
|
|
|
Parent.bubble = function (Child, arr) { |
|
if (Array.isArray(arr)) { |
|
events = union([], events, arr); |
|
} |
|
|
|
var len = events.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
var name = events[idx]; |
|
Parent.on(name, Child.emit.bind(Child, name)); |
|
} |
|
|
|
cu.bubble(Child, events); |
|
}; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/collection-visit/index.js": |
|
/*!************************************************!*\ |
|
!*** ./node_modules/collection-visit/index.js ***! |
|
\************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* collection-visit <https://github.com/jonschlinkert/collection-visit> |
|
* |
|
* Copyright (c) 2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var visit = __webpack_require__(/*! object-visit */ "./node_modules/object-visit/index.js"); |
|
|
|
var mapVisit = __webpack_require__(/*! map-visit */ "./node_modules/map-visit/index.js"); |
|
|
|
module.exports = function (collection, method, val) { |
|
var result; |
|
|
|
if (typeof val === 'string' && method in collection) { |
|
var args = [].slice.call(arguments, 2); |
|
result = collection[method].apply(collection, args); |
|
} else if (Array.isArray(val)) { |
|
result = mapVisit.apply(null, arguments); |
|
} else { |
|
result = visit.apply(null, arguments); |
|
} |
|
|
|
if (typeof result !== 'undefined') { |
|
return result; |
|
} |
|
|
|
return collection; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/color-convert/conversions.js": |
|
/*!***************************************************!*\ |
|
!*** ./node_modules/color-convert/conversions.js ***! |
|
\***************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* MIT license */ |
|
var cssKeywords = __webpack_require__(/*! color-name */ "./node_modules/color-name/index.js"); // NOTE: conversions should only return primitive values (i.e. arrays, or |
|
// values that give correct `typeof` results). |
|
// do not use box values types (i.e. Number(), String(), etc.) |
|
|
|
|
|
var reverseKeywords = {}; |
|
|
|
for (var key in cssKeywords) { |
|
if (cssKeywords.hasOwnProperty(key)) { |
|
reverseKeywords[cssKeywords[key]] = key; |
|
} |
|
} |
|
|
|
var convert = module.exports = { |
|
rgb: { |
|
channels: 3, |
|
labels: 'rgb' |
|
}, |
|
hsl: { |
|
channels: 3, |
|
labels: 'hsl' |
|
}, |
|
hsv: { |
|
channels: 3, |
|
labels: 'hsv' |
|
}, |
|
hwb: { |
|
channels: 3, |
|
labels: 'hwb' |
|
}, |
|
cmyk: { |
|
channels: 4, |
|
labels: 'cmyk' |
|
}, |
|
xyz: { |
|
channels: 3, |
|
labels: 'xyz' |
|
}, |
|
lab: { |
|
channels: 3, |
|
labels: 'lab' |
|
}, |
|
lch: { |
|
channels: 3, |
|
labels: 'lch' |
|
}, |
|
hex: { |
|
channels: 1, |
|
labels: ['hex'] |
|
}, |
|
keyword: { |
|
channels: 1, |
|
labels: ['keyword'] |
|
}, |
|
ansi16: { |
|
channels: 1, |
|
labels: ['ansi16'] |
|
}, |
|
ansi256: { |
|
channels: 1, |
|
labels: ['ansi256'] |
|
}, |
|
hcg: { |
|
channels: 3, |
|
labels: ['h', 'c', 'g'] |
|
}, |
|
apple: { |
|
channels: 3, |
|
labels: ['r16', 'g16', 'b16'] |
|
}, |
|
gray: { |
|
channels: 1, |
|
labels: ['gray'] |
|
} |
|
}; // hide .channels and .labels properties |
|
|
|
for (var model in convert) { |
|
if (convert.hasOwnProperty(model)) { |
|
if (!('channels' in convert[model])) { |
|
throw new Error('missing channels property: ' + model); |
|
} |
|
|
|
if (!('labels' in convert[model])) { |
|
throw new Error('missing channel labels property: ' + model); |
|
} |
|
|
|
if (convert[model].labels.length !== convert[model].channels) { |
|
throw new Error('channel and label counts mismatch: ' + model); |
|
} |
|
|
|
var channels = convert[model].channels; |
|
var labels = convert[model].labels; |
|
delete convert[model].channels; |
|
delete convert[model].labels; |
|
Object.defineProperty(convert[model], 'channels', { |
|
value: channels |
|
}); |
|
Object.defineProperty(convert[model], 'labels', { |
|
value: labels |
|
}); |
|
} |
|
} |
|
|
|
convert.rgb.hsl = function (rgb) { |
|
var r = rgb[0] / 255; |
|
var g = rgb[1] / 255; |
|
var b = rgb[2] / 255; |
|
var min = Math.min(r, g, b); |
|
var max = Math.max(r, g, b); |
|
var delta = max - min; |
|
var h; |
|
var s; |
|
var l; |
|
|
|
if (max === min) { |
|
h = 0; |
|
} else if (r === max) { |
|
h = (g - b) / delta; |
|
} else if (g === max) { |
|
h = 2 + (b - r) / delta; |
|
} else if (b === max) { |
|
h = 4 + (r - g) / delta; |
|
} |
|
|
|
h = Math.min(h * 60, 360); |
|
|
|
if (h < 0) { |
|
h += 360; |
|
} |
|
|
|
l = (min + max) / 2; |
|
|
|
if (max === min) { |
|
s = 0; |
|
} else if (l <= 0.5) { |
|
s = delta / (max + min); |
|
} else { |
|
s = delta / (2 - max - min); |
|
} |
|
|
|
return [h, s * 100, l * 100]; |
|
}; |
|
|
|
convert.rgb.hsv = function (rgb) { |
|
var rdif; |
|
var gdif; |
|
var bdif; |
|
var h; |
|
var s; |
|
var r = rgb[0] / 255; |
|
var g = rgb[1] / 255; |
|
var b = rgb[2] / 255; |
|
var v = Math.max(r, g, b); |
|
var diff = v - Math.min(r, g, b); |
|
|
|
var diffc = function diffc(c) { |
|
return (v - c) / 6 / diff + 1 / 2; |
|
}; |
|
|
|
if (diff === 0) { |
|
h = s = 0; |
|
} else { |
|
s = diff / v; |
|
rdif = diffc(r); |
|
gdif = diffc(g); |
|
bdif = diffc(b); |
|
|
|
if (r === v) { |
|
h = bdif - gdif; |
|
} else if (g === v) { |
|
h = 1 / 3 + rdif - bdif; |
|
} else if (b === v) { |
|
h = 2 / 3 + gdif - rdif; |
|
} |
|
|
|
if (h < 0) { |
|
h += 1; |
|
} else if (h > 1) { |
|
h -= 1; |
|
} |
|
} |
|
|
|
return [h * 360, s * 100, v * 100]; |
|
}; |
|
|
|
convert.rgb.hwb = function (rgb) { |
|
var r = rgb[0]; |
|
var g = rgb[1]; |
|
var b = rgb[2]; |
|
var h = convert.rgb.hsl(rgb)[0]; |
|
var w = 1 / 255 * Math.min(r, Math.min(g, b)); |
|
b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); |
|
return [h, w * 100, b * 100]; |
|
}; |
|
|
|
convert.rgb.cmyk = function (rgb) { |
|
var r = rgb[0] / 255; |
|
var g = rgb[1] / 255; |
|
var b = rgb[2] / 255; |
|
var c; |
|
var m; |
|
var y; |
|
var k; |
|
k = Math.min(1 - r, 1 - g, 1 - b); |
|
c = (1 - r - k) / (1 - k) || 0; |
|
m = (1 - g - k) / (1 - k) || 0; |
|
y = (1 - b - k) / (1 - k) || 0; |
|
return [c * 100, m * 100, y * 100, k * 100]; |
|
}; |
|
/** |
|
* See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance |
|
* */ |
|
|
|
|
|
function comparativeDistance(x, y) { |
|
return Math.pow(x[0] - y[0], 2) + Math.pow(x[1] - y[1], 2) + Math.pow(x[2] - y[2], 2); |
|
} |
|
|
|
convert.rgb.keyword = function (rgb) { |
|
var reversed = reverseKeywords[rgb]; |
|
|
|
if (reversed) { |
|
return reversed; |
|
} |
|
|
|
var currentClosestDistance = Infinity; |
|
var currentClosestKeyword; |
|
|
|
for (var keyword in cssKeywords) { |
|
if (cssKeywords.hasOwnProperty(keyword)) { |
|
var value = cssKeywords[keyword]; // Compute comparative distance |
|
|
|
var distance = comparativeDistance(rgb, value); // Check if its less, if so set as closest |
|
|
|
if (distance < currentClosestDistance) { |
|
currentClosestDistance = distance; |
|
currentClosestKeyword = keyword; |
|
} |
|
} |
|
} |
|
|
|
return currentClosestKeyword; |
|
}; |
|
|
|
convert.keyword.rgb = function (keyword) { |
|
return cssKeywords[keyword]; |
|
}; |
|
|
|
convert.rgb.xyz = function (rgb) { |
|
var r = rgb[0] / 255; |
|
var g = rgb[1] / 255; |
|
var b = rgb[2] / 255; // assume sRGB |
|
|
|
r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92; |
|
g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92; |
|
b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92; |
|
var x = r * 0.4124 + g * 0.3576 + b * 0.1805; |
|
var y = r * 0.2126 + g * 0.7152 + b * 0.0722; |
|
var z = r * 0.0193 + g * 0.1192 + b * 0.9505; |
|
return [x * 100, y * 100, z * 100]; |
|
}; |
|
|
|
convert.rgb.lab = function (rgb) { |
|
var xyz = convert.rgb.xyz(rgb); |
|
var x = xyz[0]; |
|
var y = xyz[1]; |
|
var z = xyz[2]; |
|
var l; |
|
var a; |
|
var b; |
|
x /= 95.047; |
|
y /= 100; |
|
z /= 108.883; |
|
x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116; |
|
y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116; |
|
z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116; |
|
l = 116 * y - 16; |
|
a = 500 * (x - y); |
|
b = 200 * (y - z); |
|
return [l, a, b]; |
|
}; |
|
|
|
convert.hsl.rgb = function (hsl) { |
|
var h = hsl[0] / 360; |
|
var s = hsl[1] / 100; |
|
var l = hsl[2] / 100; |
|
var t1; |
|
var t2; |
|
var t3; |
|
var rgb; |
|
var val; |
|
|
|
if (s === 0) { |
|
val = l * 255; |
|
return [val, val, val]; |
|
} |
|
|
|
if (l < 0.5) { |
|
t2 = l * (1 + s); |
|
} else { |
|
t2 = l + s - l * s; |
|
} |
|
|
|
t1 = 2 * l - t2; |
|
rgb = [0, 0, 0]; |
|
|
|
for (var i = 0; i < 3; i++) { |
|
t3 = h + 1 / 3 * -(i - 1); |
|
|
|
if (t3 < 0) { |
|
t3++; |
|
} |
|
|
|
if (t3 > 1) { |
|
t3--; |
|
} |
|
|
|
if (6 * t3 < 1) { |
|
val = t1 + (t2 - t1) * 6 * t3; |
|
} else if (2 * t3 < 1) { |
|
val = t2; |
|
} else if (3 * t3 < 2) { |
|
val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; |
|
} else { |
|
val = t1; |
|
} |
|
|
|
rgb[i] = val * 255; |
|
} |
|
|
|
return rgb; |
|
}; |
|
|
|
convert.hsl.hsv = function (hsl) { |
|
var h = hsl[0]; |
|
var s = hsl[1] / 100; |
|
var l = hsl[2] / 100; |
|
var smin = s; |
|
var lmin = Math.max(l, 0.01); |
|
var sv; |
|
var v; |
|
l *= 2; |
|
s *= l <= 1 ? l : 2 - l; |
|
smin *= lmin <= 1 ? lmin : 2 - lmin; |
|
v = (l + s) / 2; |
|
sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s / (l + s); |
|
return [h, sv * 100, v * 100]; |
|
}; |
|
|
|
convert.hsv.rgb = function (hsv) { |
|
var h = hsv[0] / 60; |
|
var s = hsv[1] / 100; |
|
var v = hsv[2] / 100; |
|
var hi = Math.floor(h) % 6; |
|
var f = h - Math.floor(h); |
|
var p = 255 * v * (1 - s); |
|
var q = 255 * v * (1 - s * f); |
|
var t = 255 * v * (1 - s * (1 - f)); |
|
v *= 255; |
|
|
|
switch (hi) { |
|
case 0: |
|
return [v, t, p]; |
|
|
|
case 1: |
|
return [q, v, p]; |
|
|
|
case 2: |
|
return [p, v, t]; |
|
|
|
case 3: |
|
return [p, q, v]; |
|
|
|
case 4: |
|
return [t, p, v]; |
|
|
|
case 5: |
|
return [v, p, q]; |
|
} |
|
}; |
|
|
|
convert.hsv.hsl = function (hsv) { |
|
var h = hsv[0]; |
|
var s = hsv[1] / 100; |
|
var v = hsv[2] / 100; |
|
var vmin = Math.max(v, 0.01); |
|
var lmin; |
|
var sl; |
|
var l; |
|
l = (2 - s) * v; |
|
lmin = (2 - s) * vmin; |
|
sl = s * vmin; |
|
sl /= lmin <= 1 ? lmin : 2 - lmin; |
|
sl = sl || 0; |
|
l /= 2; |
|
return [h, sl * 100, l * 100]; |
|
}; // http://dev.w3.org/csswg/css-color/#hwb-to-rgb |
|
|
|
|
|
convert.hwb.rgb = function (hwb) { |
|
var h = hwb[0] / 360; |
|
var wh = hwb[1] / 100; |
|
var bl = hwb[2] / 100; |
|
var ratio = wh + bl; |
|
var i; |
|
var v; |
|
var f; |
|
var n; // wh + bl cant be > 1 |
|
|
|
if (ratio > 1) { |
|
wh /= ratio; |
|
bl /= ratio; |
|
} |
|
|
|
i = Math.floor(6 * h); |
|
v = 1 - bl; |
|
f = 6 * h - i; |
|
|
|
if ((i & 0x01) !== 0) { |
|
f = 1 - f; |
|
} |
|
|
|
n = wh + f * (v - wh); // linear interpolation |
|
|
|
var r; |
|
var g; |
|
var b; |
|
|
|
switch (i) { |
|
default: |
|
case 6: |
|
case 0: |
|
r = v; |
|
g = n; |
|
b = wh; |
|
break; |
|
|
|
case 1: |
|
r = n; |
|
g = v; |
|
b = wh; |
|
break; |
|
|
|
case 2: |
|
r = wh; |
|
g = v; |
|
b = n; |
|
break; |
|
|
|
case 3: |
|
r = wh; |
|
g = n; |
|
b = v; |
|
break; |
|
|
|
case 4: |
|
r = n; |
|
g = wh; |
|
b = v; |
|
break; |
|
|
|
case 5: |
|
r = v; |
|
g = wh; |
|
b = n; |
|
break; |
|
} |
|
|
|
return [r * 255, g * 255, b * 255]; |
|
}; |
|
|
|
convert.cmyk.rgb = function (cmyk) { |
|
var c = cmyk[0] / 100; |
|
var m = cmyk[1] / 100; |
|
var y = cmyk[2] / 100; |
|
var k = cmyk[3] / 100; |
|
var r; |
|
var g; |
|
var b; |
|
r = 1 - Math.min(1, c * (1 - k) + k); |
|
g = 1 - Math.min(1, m * (1 - k) + k); |
|
b = 1 - Math.min(1, y * (1 - k) + k); |
|
return [r * 255, g * 255, b * 255]; |
|
}; |
|
|
|
convert.xyz.rgb = function (xyz) { |
|
var x = xyz[0] / 100; |
|
var y = xyz[1] / 100; |
|
var z = xyz[2] / 100; |
|
var r; |
|
var g; |
|
var b; |
|
r = x * 3.2406 + y * -1.5372 + z * -0.4986; |
|
g = x * -0.9689 + y * 1.8758 + z * 0.0415; |
|
b = x * 0.0557 + y * -0.2040 + z * 1.0570; // assume sRGB |
|
|
|
r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r * 12.92; |
|
g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g * 12.92; |
|
b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b * 12.92; |
|
r = Math.min(Math.max(0, r), 1); |
|
g = Math.min(Math.max(0, g), 1); |
|
b = Math.min(Math.max(0, b), 1); |
|
return [r * 255, g * 255, b * 255]; |
|
}; |
|
|
|
convert.xyz.lab = function (xyz) { |
|
var x = xyz[0]; |
|
var y = xyz[1]; |
|
var z = xyz[2]; |
|
var l; |
|
var a; |
|
var b; |
|
x /= 95.047; |
|
y /= 100; |
|
z /= 108.883; |
|
x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116; |
|
y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116; |
|
z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116; |
|
l = 116 * y - 16; |
|
a = 500 * (x - y); |
|
b = 200 * (y - z); |
|
return [l, a, b]; |
|
}; |
|
|
|
convert.lab.xyz = function (lab) { |
|
var l = lab[0]; |
|
var a = lab[1]; |
|
var b = lab[2]; |
|
var x; |
|
var y; |
|
var z; |
|
y = (l + 16) / 116; |
|
x = a / 500 + y; |
|
z = y - b / 200; |
|
var y2 = Math.pow(y, 3); |
|
var x2 = Math.pow(x, 3); |
|
var z2 = Math.pow(z, 3); |
|
y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; |
|
x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; |
|
z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; |
|
x *= 95.047; |
|
y *= 100; |
|
z *= 108.883; |
|
return [x, y, z]; |
|
}; |
|
|
|
convert.lab.lch = function (lab) { |
|
var l = lab[0]; |
|
var a = lab[1]; |
|
var b = lab[2]; |
|
var hr; |
|
var h; |
|
var c; |
|
hr = Math.atan2(b, a); |
|
h = hr * 360 / 2 / Math.PI; |
|
|
|
if (h < 0) { |
|
h += 360; |
|
} |
|
|
|
c = Math.sqrt(a * a + b * b); |
|
return [l, c, h]; |
|
}; |
|
|
|
convert.lch.lab = function (lch) { |
|
var l = lch[0]; |
|
var c = lch[1]; |
|
var h = lch[2]; |
|
var a; |
|
var b; |
|
var hr; |
|
hr = h / 360 * 2 * Math.PI; |
|
a = c * Math.cos(hr); |
|
b = c * Math.sin(hr); |
|
return [l, a, b]; |
|
}; |
|
|
|
convert.rgb.ansi16 = function (args) { |
|
var r = args[0]; |
|
var g = args[1]; |
|
var b = args[2]; |
|
var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization |
|
|
|
value = Math.round(value / 50); |
|
|
|
if (value === 0) { |
|
return 30; |
|
} |
|
|
|
var ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255)); |
|
|
|
if (value === 2) { |
|
ansi += 60; |
|
} |
|
|
|
return ansi; |
|
}; |
|
|
|
convert.hsv.ansi16 = function (args) { |
|
// optimization here; we already know the value and don't need to get |
|
// it converted for us. |
|
return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); |
|
}; |
|
|
|
convert.rgb.ansi256 = function (args) { |
|
var r = args[0]; |
|
var g = args[1]; |
|
var b = args[2]; // we use the extended greyscale palette here, with the exception of |
|
// black and white. normal palette only has 4 greyscale shades. |
|
|
|
if (r === g && g === b) { |
|
if (r < 8) { |
|
return 16; |
|
} |
|
|
|
if (r > 248) { |
|
return 231; |
|
} |
|
|
|
return Math.round((r - 8) / 247 * 24) + 232; |
|
} |
|
|
|
var ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5); |
|
return ansi; |
|
}; |
|
|
|
convert.ansi16.rgb = function (args) { |
|
var color = args % 10; // handle greyscale |
|
|
|
if (color === 0 || color === 7) { |
|
if (args > 50) { |
|
color += 3.5; |
|
} |
|
|
|
color = color / 10.5 * 255; |
|
return [color, color, color]; |
|
} |
|
|
|
var mult = (~~(args > 50) + 1) * 0.5; |
|
var r = (color & 1) * mult * 255; |
|
var g = (color >> 1 & 1) * mult * 255; |
|
var b = (color >> 2 & 1) * mult * 255; |
|
return [r, g, b]; |
|
}; |
|
|
|
convert.ansi256.rgb = function (args) { |
|
// handle greyscale |
|
if (args >= 232) { |
|
var c = (args - 232) * 10 + 8; |
|
return [c, c, c]; |
|
} |
|
|
|
args -= 16; |
|
var rem; |
|
var r = Math.floor(args / 36) / 5 * 255; |
|
var g = Math.floor((rem = args % 36) / 6) / 5 * 255; |
|
var b = rem % 6 / 5 * 255; |
|
return [r, g, b]; |
|
}; |
|
|
|
convert.rgb.hex = function (args) { |
|
var integer = ((Math.round(args[0]) & 0xFF) << 16) + ((Math.round(args[1]) & 0xFF) << 8) + (Math.round(args[2]) & 0xFF); |
|
var string = integer.toString(16).toUpperCase(); |
|
return '000000'.substring(string.length) + string; |
|
}; |
|
|
|
convert.hex.rgb = function (args) { |
|
var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); |
|
|
|
if (!match) { |
|
return [0, 0, 0]; |
|
} |
|
|
|
var colorString = match[0]; |
|
|
|
if (match[0].length === 3) { |
|
colorString = colorString.split('').map(function (char) { |
|
return char + char; |
|
}).join(''); |
|
} |
|
|
|
var integer = parseInt(colorString, 16); |
|
var r = integer >> 16 & 0xFF; |
|
var g = integer >> 8 & 0xFF; |
|
var b = integer & 0xFF; |
|
return [r, g, b]; |
|
}; |
|
|
|
convert.rgb.hcg = function (rgb) { |
|
var r = rgb[0] / 255; |
|
var g = rgb[1] / 255; |
|
var b = rgb[2] / 255; |
|
var max = Math.max(Math.max(r, g), b); |
|
var min = Math.min(Math.min(r, g), b); |
|
var chroma = max - min; |
|
var grayscale; |
|
var hue; |
|
|
|
if (chroma < 1) { |
|
grayscale = min / (1 - chroma); |
|
} else { |
|
grayscale = 0; |
|
} |
|
|
|
if (chroma <= 0) { |
|
hue = 0; |
|
} else if (max === r) { |
|
hue = (g - b) / chroma % 6; |
|
} else if (max === g) { |
|
hue = 2 + (b - r) / chroma; |
|
} else { |
|
hue = 4 + (r - g) / chroma + 4; |
|
} |
|
|
|
hue /= 6; |
|
hue %= 1; |
|
return [hue * 360, chroma * 100, grayscale * 100]; |
|
}; |
|
|
|
convert.hsl.hcg = function (hsl) { |
|
var s = hsl[1] / 100; |
|
var l = hsl[2] / 100; |
|
var c = 1; |
|
var f = 0; |
|
|
|
if (l < 0.5) { |
|
c = 2.0 * s * l; |
|
} else { |
|
c = 2.0 * s * (1.0 - l); |
|
} |
|
|
|
if (c < 1.0) { |
|
f = (l - 0.5 * c) / (1.0 - c); |
|
} |
|
|
|
return [hsl[0], c * 100, f * 100]; |
|
}; |
|
|
|
convert.hsv.hcg = function (hsv) { |
|
var s = hsv[1] / 100; |
|
var v = hsv[2] / 100; |
|
var c = s * v; |
|
var f = 0; |
|
|
|
if (c < 1.0) { |
|
f = (v - c) / (1 - c); |
|
} |
|
|
|
return [hsv[0], c * 100, f * 100]; |
|
}; |
|
|
|
convert.hcg.rgb = function (hcg) { |
|
var h = hcg[0] / 360; |
|
var c = hcg[1] / 100; |
|
var g = hcg[2] / 100; |
|
|
|
if (c === 0.0) { |
|
return [g * 255, g * 255, g * 255]; |
|
} |
|
|
|
var pure = [0, 0, 0]; |
|
var hi = h % 1 * 6; |
|
var v = hi % 1; |
|
var w = 1 - v; |
|
var mg = 0; |
|
|
|
switch (Math.floor(hi)) { |
|
case 0: |
|
pure[0] = 1; |
|
pure[1] = v; |
|
pure[2] = 0; |
|
break; |
|
|
|
case 1: |
|
pure[0] = w; |
|
pure[1] = 1; |
|
pure[2] = 0; |
|
break; |
|
|
|
case 2: |
|
pure[0] = 0; |
|
pure[1] = 1; |
|
pure[2] = v; |
|
break; |
|
|
|
case 3: |
|
pure[0] = 0; |
|
pure[1] = w; |
|
pure[2] = 1; |
|
break; |
|
|
|
case 4: |
|
pure[0] = v; |
|
pure[1] = 0; |
|
pure[2] = 1; |
|
break; |
|
|
|
default: |
|
pure[0] = 1; |
|
pure[1] = 0; |
|
pure[2] = w; |
|
} |
|
|
|
mg = (1.0 - c) * g; |
|
return [(c * pure[0] + mg) * 255, (c * pure[1] + mg) * 255, (c * pure[2] + mg) * 255]; |
|
}; |
|
|
|
convert.hcg.hsv = function (hcg) { |
|
var c = hcg[1] / 100; |
|
var g = hcg[2] / 100; |
|
var v = c + g * (1.0 - c); |
|
var f = 0; |
|
|
|
if (v > 0.0) { |
|
f = c / v; |
|
} |
|
|
|
return [hcg[0], f * 100, v * 100]; |
|
}; |
|
|
|
convert.hcg.hsl = function (hcg) { |
|
var c = hcg[1] / 100; |
|
var g = hcg[2] / 100; |
|
var l = g * (1.0 - c) + 0.5 * c; |
|
var s = 0; |
|
|
|
if (l > 0.0 && l < 0.5) { |
|
s = c / (2 * l); |
|
} else if (l >= 0.5 && l < 1.0) { |
|
s = c / (2 * (1 - l)); |
|
} |
|
|
|
return [hcg[0], s * 100, l * 100]; |
|
}; |
|
|
|
convert.hcg.hwb = function (hcg) { |
|
var c = hcg[1] / 100; |
|
var g = hcg[2] / 100; |
|
var v = c + g * (1.0 - c); |
|
return [hcg[0], (v - c) * 100, (1 - v) * 100]; |
|
}; |
|
|
|
convert.hwb.hcg = function (hwb) { |
|
var w = hwb[1] / 100; |
|
var b = hwb[2] / 100; |
|
var v = 1 - b; |
|
var c = v - w; |
|
var g = 0; |
|
|
|
if (c < 1) { |
|
g = (v - c) / (1 - c); |
|
} |
|
|
|
return [hwb[0], c * 100, g * 100]; |
|
}; |
|
|
|
convert.apple.rgb = function (apple) { |
|
return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255]; |
|
}; |
|
|
|
convert.rgb.apple = function (rgb) { |
|
return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535]; |
|
}; |
|
|
|
convert.gray.rgb = function (args) { |
|
return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; |
|
}; |
|
|
|
convert.gray.hsl = convert.gray.hsv = function (args) { |
|
return [0, 0, args[0]]; |
|
}; |
|
|
|
convert.gray.hwb = function (gray) { |
|
return [0, 100, gray[0]]; |
|
}; |
|
|
|
convert.gray.cmyk = function (gray) { |
|
return [0, 0, 0, gray[0]]; |
|
}; |
|
|
|
convert.gray.lab = function (gray) { |
|
return [gray[0], 0, 0]; |
|
}; |
|
|
|
convert.gray.hex = function (gray) { |
|
var val = Math.round(gray[0] / 100 * 255) & 0xFF; |
|
var integer = (val << 16) + (val << 8) + val; |
|
var string = integer.toString(16).toUpperCase(); |
|
return '000000'.substring(string.length) + string; |
|
}; |
|
|
|
convert.rgb.gray = function (rgb) { |
|
var val = (rgb[0] + rgb[1] + rgb[2]) / 3; |
|
return [val / 255 * 100]; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/color-convert/index.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/color-convert/index.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var conversions = __webpack_require__(/*! ./conversions */ "./node_modules/color-convert/conversions.js"); |
|
|
|
var route = __webpack_require__(/*! ./route */ "./node_modules/color-convert/route.js"); |
|
|
|
var convert = {}; |
|
var models = Object.keys(conversions); |
|
|
|
function wrapRaw(fn) { |
|
var wrappedFn = function wrappedFn(args) { |
|
if (args === undefined || args === null) { |
|
return args; |
|
} |
|
|
|
if (arguments.length > 1) { |
|
args = Array.prototype.slice.call(arguments); |
|
} |
|
|
|
return fn(args); |
|
}; // preserve .conversion property if there is one |
|
|
|
|
|
if ('conversion' in fn) { |
|
wrappedFn.conversion = fn.conversion; |
|
} |
|
|
|
return wrappedFn; |
|
} |
|
|
|
function wrapRounded(fn) { |
|
var wrappedFn = function wrappedFn(args) { |
|
if (args === undefined || args === null) { |
|
return args; |
|
} |
|
|
|
if (arguments.length > 1) { |
|
args = Array.prototype.slice.call(arguments); |
|
} |
|
|
|
var result = fn(args); // we're assuming the result is an array here. |
|
// see notice in conversions.js; don't use box types |
|
// in conversion functions. |
|
|
|
if (_typeof(result) === 'object') { |
|
for (var len = result.length, i = 0; i < len; i++) { |
|
result[i] = Math.round(result[i]); |
|
} |
|
} |
|
|
|
return result; |
|
}; // preserve .conversion property if there is one |
|
|
|
|
|
if ('conversion' in fn) { |
|
wrappedFn.conversion = fn.conversion; |
|
} |
|
|
|
return wrappedFn; |
|
} |
|
|
|
models.forEach(function (fromModel) { |
|
convert[fromModel] = {}; |
|
Object.defineProperty(convert[fromModel], 'channels', { |
|
value: conversions[fromModel].channels |
|
}); |
|
Object.defineProperty(convert[fromModel], 'labels', { |
|
value: conversions[fromModel].labels |
|
}); |
|
var routes = route(fromModel); |
|
var routeModels = Object.keys(routes); |
|
routeModels.forEach(function (toModel) { |
|
var fn = routes[toModel]; |
|
convert[fromModel][toModel] = wrapRounded(fn); |
|
convert[fromModel][toModel].raw = wrapRaw(fn); |
|
}); |
|
}); |
|
module.exports = convert; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/color-convert/route.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/color-convert/route.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var conversions = __webpack_require__(/*! ./conversions */ "./node_modules/color-convert/conversions.js"); |
|
/* |
|
this function routes a model to all other models. |
|
|
|
all functions that are routed have a property `.conversion` attached |
|
to the returned synthetic function. This property is an array |
|
of strings, each with the steps in between the 'from' and 'to' |
|
color models (inclusive). |
|
|
|
conversions that are not possible simply are not included. |
|
*/ |
|
|
|
|
|
function buildGraph() { |
|
var graph = {}; // https://jsperf.com/object-keys-vs-for-in-with-closure/3 |
|
|
|
var models = Object.keys(conversions); |
|
|
|
for (var len = models.length, i = 0; i < len; i++) { |
|
graph[models[i]] = { |
|
// http://jsperf.com/1-vs-infinity |
|
// micro-opt, but this is simple. |
|
distance: -1, |
|
parent: null |
|
}; |
|
} |
|
|
|
return graph; |
|
} // https://en.wikipedia.org/wiki/Breadth-first_search |
|
|
|
|
|
function deriveBFS(fromModel) { |
|
var graph = buildGraph(); |
|
var queue = [fromModel]; // unshift -> queue -> pop |
|
|
|
graph[fromModel].distance = 0; |
|
|
|
while (queue.length) { |
|
var current = queue.pop(); |
|
var adjacents = Object.keys(conversions[current]); |
|
|
|
for (var len = adjacents.length, i = 0; i < len; i++) { |
|
var adjacent = adjacents[i]; |
|
var node = graph[adjacent]; |
|
|
|
if (node.distance === -1) { |
|
node.distance = graph[current].distance + 1; |
|
node.parent = current; |
|
queue.unshift(adjacent); |
|
} |
|
} |
|
} |
|
|
|
return graph; |
|
} |
|
|
|
function link(from, to) { |
|
return function (args) { |
|
return to(from(args)); |
|
}; |
|
} |
|
|
|
function wrapConversion(toModel, graph) { |
|
var path = [graph[toModel].parent, toModel]; |
|
var fn = conversions[graph[toModel].parent][toModel]; |
|
var cur = graph[toModel].parent; |
|
|
|
while (graph[cur].parent) { |
|
path.unshift(graph[cur].parent); |
|
fn = link(conversions[graph[cur].parent][cur], fn); |
|
cur = graph[cur].parent; |
|
} |
|
|
|
fn.conversion = path; |
|
return fn; |
|
} |
|
|
|
module.exports = function (fromModel) { |
|
var graph = deriveBFS(fromModel); |
|
var conversion = {}; |
|
var models = Object.keys(graph); |
|
|
|
for (var len = models.length, i = 0; i < len; i++) { |
|
var toModel = models[i]; |
|
var node = graph[toModel]; |
|
|
|
if (node.parent === null) { |
|
// no possible conversion, or this node is the source model. |
|
continue; |
|
} |
|
|
|
conversion[toModel] = wrapConversion(toModel, graph); |
|
} |
|
|
|
return conversion; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/color-name/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/color-name/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
module.exports = { |
|
"aliceblue": [240, 248, 255], |
|
"antiquewhite": [250, 235, 215], |
|
"aqua": [0, 255, 255], |
|
"aquamarine": [127, 255, 212], |
|
"azure": [240, 255, 255], |
|
"beige": [245, 245, 220], |
|
"bisque": [255, 228, 196], |
|
"black": [0, 0, 0], |
|
"blanchedalmond": [255, 235, 205], |
|
"blue": [0, 0, 255], |
|
"blueviolet": [138, 43, 226], |
|
"brown": [165, 42, 42], |
|
"burlywood": [222, 184, 135], |
|
"cadetblue": [95, 158, 160], |
|
"chartreuse": [127, 255, 0], |
|
"chocolate": [210, 105, 30], |
|
"coral": [255, 127, 80], |
|
"cornflowerblue": [100, 149, 237], |
|
"cornsilk": [255, 248, 220], |
|
"crimson": [220, 20, 60], |
|
"cyan": [0, 255, 255], |
|
"darkblue": [0, 0, 139], |
|
"darkcyan": [0, 139, 139], |
|
"darkgoldenrod": [184, 134, 11], |
|
"darkgray": [169, 169, 169], |
|
"darkgreen": [0, 100, 0], |
|
"darkgrey": [169, 169, 169], |
|
"darkkhaki": [189, 183, 107], |
|
"darkmagenta": [139, 0, 139], |
|
"darkolivegreen": [85, 107, 47], |
|
"darkorange": [255, 140, 0], |
|
"darkorchid": [153, 50, 204], |
|
"darkred": [139, 0, 0], |
|
"darksalmon": [233, 150, 122], |
|
"darkseagreen": [143, 188, 143], |
|
"darkslateblue": [72, 61, 139], |
|
"darkslategray": [47, 79, 79], |
|
"darkslategrey": [47, 79, 79], |
|
"darkturquoise": [0, 206, 209], |
|
"darkviolet": [148, 0, 211], |
|
"deeppink": [255, 20, 147], |
|
"deepskyblue": [0, 191, 255], |
|
"dimgray": [105, 105, 105], |
|
"dimgrey": [105, 105, 105], |
|
"dodgerblue": [30, 144, 255], |
|
"firebrick": [178, 34, 34], |
|
"floralwhite": [255, 250, 240], |
|
"forestgreen": [34, 139, 34], |
|
"fuchsia": [255, 0, 255], |
|
"gainsboro": [220, 220, 220], |
|
"ghostwhite": [248, 248, 255], |
|
"gold": [255, 215, 0], |
|
"goldenrod": [218, 165, 32], |
|
"gray": [128, 128, 128], |
|
"green": [0, 128, 0], |
|
"greenyellow": [173, 255, 47], |
|
"grey": [128, 128, 128], |
|
"honeydew": [240, 255, 240], |
|
"hotpink": [255, 105, 180], |
|
"indianred": [205, 92, 92], |
|
"indigo": [75, 0, 130], |
|
"ivory": [255, 255, 240], |
|
"khaki": [240, 230, 140], |
|
"lavender": [230, 230, 250], |
|
"lavenderblush": [255, 240, 245], |
|
"lawngreen": [124, 252, 0], |
|
"lemonchiffon": [255, 250, 205], |
|
"lightblue": [173, 216, 230], |
|
"lightcoral": [240, 128, 128], |
|
"lightcyan": [224, 255, 255], |
|
"lightgoldenrodyellow": [250, 250, 210], |
|
"lightgray": [211, 211, 211], |
|
"lightgreen": [144, 238, 144], |
|
"lightgrey": [211, 211, 211], |
|
"lightpink": [255, 182, 193], |
|
"lightsalmon": [255, 160, 122], |
|
"lightseagreen": [32, 178, 170], |
|
"lightskyblue": [135, 206, 250], |
|
"lightslategray": [119, 136, 153], |
|
"lightslategrey": [119, 136, 153], |
|
"lightsteelblue": [176, 196, 222], |
|
"lightyellow": [255, 255, 224], |
|
"lime": [0, 255, 0], |
|
"limegreen": [50, 205, 50], |
|
"linen": [250, 240, 230], |
|
"magenta": [255, 0, 255], |
|
"maroon": [128, 0, 0], |
|
"mediumaquamarine": [102, 205, 170], |
|
"mediumblue": [0, 0, 205], |
|
"mediumorchid": [186, 85, 211], |
|
"mediumpurple": [147, 112, 219], |
|
"mediumseagreen": [60, 179, 113], |
|
"mediumslateblue": [123, 104, 238], |
|
"mediumspringgreen": [0, 250, 154], |
|
"mediumturquoise": [72, 209, 204], |
|
"mediumvioletred": [199, 21, 133], |
|
"midnightblue": [25, 25, 112], |
|
"mintcream": [245, 255, 250], |
|
"mistyrose": [255, 228, 225], |
|
"moccasin": [255, 228, 181], |
|
"navajowhite": [255, 222, 173], |
|
"navy": [0, 0, 128], |
|
"oldlace": [253, 245, 230], |
|
"olive": [128, 128, 0], |
|
"olivedrab": [107, 142, 35], |
|
"orange": [255, 165, 0], |
|
"orangered": [255, 69, 0], |
|
"orchid": [218, 112, 214], |
|
"palegoldenrod": [238, 232, 170], |
|
"palegreen": [152, 251, 152], |
|
"paleturquoise": [175, 238, 238], |
|
"palevioletred": [219, 112, 147], |
|
"papayawhip": [255, 239, 213], |
|
"peachpuff": [255, 218, 185], |
|
"peru": [205, 133, 63], |
|
"pink": [255, 192, 203], |
|
"plum": [221, 160, 221], |
|
"powderblue": [176, 224, 230], |
|
"purple": [128, 0, 128], |
|
"rebeccapurple": [102, 51, 153], |
|
"red": [255, 0, 0], |
|
"rosybrown": [188, 143, 143], |
|
"royalblue": [65, 105, 225], |
|
"saddlebrown": [139, 69, 19], |
|
"salmon": [250, 128, 114], |
|
"sandybrown": [244, 164, 96], |
|
"seagreen": [46, 139, 87], |
|
"seashell": [255, 245, 238], |
|
"sienna": [160, 82, 45], |
|
"silver": [192, 192, 192], |
|
"skyblue": [135, 206, 235], |
|
"slateblue": [106, 90, 205], |
|
"slategray": [112, 128, 144], |
|
"slategrey": [112, 128, 144], |
|
"snow": [255, 250, 250], |
|
"springgreen": [0, 255, 127], |
|
"steelblue": [70, 130, 180], |
|
"tan": [210, 180, 140], |
|
"teal": [0, 128, 128], |
|
"thistle": [216, 191, 216], |
|
"tomato": [255, 99, 71], |
|
"turquoise": [64, 224, 208], |
|
"violet": [238, 130, 238], |
|
"wheat": [245, 222, 179], |
|
"white": [255, 255, 255], |
|
"whitesmoke": [245, 245, 245], |
|
"yellow": [255, 255, 0], |
|
"yellowgreen": [154, 205, 50] |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/copy-descriptor/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/copy-descriptor/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* copy-descriptor <https://github.com/jonschlinkert/copy-descriptor> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
/** |
|
* Copy a descriptor from one object to another. |
|
* |
|
* ```js |
|
* function App() { |
|
* this.cache = {}; |
|
* } |
|
* App.prototype.set = function(key, val) { |
|
* this.cache[key] = val; |
|
* return this; |
|
* }; |
|
* Object.defineProperty(App.prototype, 'count', { |
|
* get: function() { |
|
* return Object.keys(this.cache).length; |
|
* } |
|
* }); |
|
* |
|
* copy(App.prototype, 'count', 'len'); |
|
* |
|
* // create an instance |
|
* var app = new App(); |
|
* |
|
* app.set('a', true); |
|
* app.set('b', true); |
|
* app.set('c', true); |
|
* |
|
* console.log(app.count); |
|
* //=> 3 |
|
* console.log(app.len); |
|
* //=> 3 |
|
* ``` |
|
* @name copy |
|
* @param {Object} `receiver` The target object |
|
* @param {Object} `provider` The provider object |
|
* @param {String} `from` The key to copy on provider. |
|
* @param {String} `to` Optionally specify a new key name to use. |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
module.exports = function copyDescriptor(receiver, provider, from, to) { |
|
if (!isObject(provider) && typeof provider !== 'function') { |
|
to = from; |
|
from = provider; |
|
provider = receiver; |
|
} |
|
|
|
if (!isObject(receiver) && typeof receiver !== 'function') { |
|
throw new TypeError('expected the first argument to be an object'); |
|
} |
|
|
|
if (!isObject(provider) && typeof provider !== 'function') { |
|
throw new TypeError('expected provider to be an object'); |
|
} |
|
|
|
if (typeof to !== 'string') { |
|
to = from; |
|
} |
|
|
|
if (typeof from !== 'string') { |
|
throw new TypeError('expected key to be a string'); |
|
} |
|
|
|
if (!(from in provider)) { |
|
throw new Error('property "' + from + '" does not exist'); |
|
} |
|
|
|
var val = Object.getOwnPropertyDescriptor(provider, from); |
|
if (val) Object.defineProperty(receiver, to, val); |
|
}; |
|
|
|
function isObject(val) { |
|
return {}.toString.call(val) === '[object Object]'; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/define-property/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/define-property/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* define-property <https://github.com/jonschlinkert/define-property> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isDescriptor = __webpack_require__(/*! is-descriptor */ "./node_modules/define-property/node_modules/is-descriptor/index.js"); |
|
|
|
module.exports = function defineProperty(obj, prop, val) { |
|
if (_typeof(obj) !== 'object' && typeof obj !== 'function') { |
|
throw new TypeError('expected an object or function.'); |
|
} |
|
|
|
if (typeof prop !== 'string') { |
|
throw new TypeError('expected `prop` to be a string.'); |
|
} |
|
|
|
if (isDescriptor(val) && ('set' in val || 'get' in val)) { |
|
return Object.defineProperty(obj, prop, val); |
|
} |
|
|
|
return Object.defineProperty(obj, prop, { |
|
configurable: true, |
|
enumerable: false, |
|
writable: true, |
|
value: val |
|
}); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/define-property/node_modules/is-accessor-descriptor/index.js": |
|
/*!***********************************************************************************!*\ |
|
!*** ./node_modules/define-property/node_modules/is-accessor-descriptor/index.js ***! |
|
\***********************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-accessor-descriptor <https://github.com/jonschlinkert/is-accessor-descriptor> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/define-property/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js"); // accessor descriptor properties |
|
|
|
|
|
var accessor = { |
|
get: 'function', |
|
set: 'function', |
|
configurable: 'boolean', |
|
enumerable: 'boolean' |
|
}; |
|
|
|
function isAccessorDescriptor(obj, prop) { |
|
if (typeof prop === 'string') { |
|
var val = Object.getOwnPropertyDescriptor(obj, prop); |
|
return typeof val !== 'undefined'; |
|
} |
|
|
|
if (typeOf(obj) !== 'object') { |
|
return false; |
|
} |
|
|
|
if (has(obj, 'value') || has(obj, 'writable')) { |
|
return false; |
|
} |
|
|
|
if (!has(obj, 'get') || typeof obj.get !== 'function') { |
|
return false; |
|
} // tldr: it's valid to have "set" be undefined |
|
// "set" might be undefined if `Object.getOwnPropertyDescriptor` |
|
// was used to get the value, and only `get` was defined by the user |
|
|
|
|
|
if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') { |
|
return false; |
|
} |
|
|
|
for (var key in obj) { |
|
if (!accessor.hasOwnProperty(key)) { |
|
continue; |
|
} |
|
|
|
if (typeOf(obj[key]) === accessor[key]) { |
|
continue; |
|
} |
|
|
|
if (typeof obj[key] !== 'undefined') { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
|
|
function has(obj, key) { |
|
return {}.hasOwnProperty.call(obj, key); |
|
} |
|
/** |
|
* Expose `isAccessorDescriptor` |
|
*/ |
|
|
|
|
|
module.exports = isAccessorDescriptor; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/define-property/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js": |
|
/*!********************************************************************************************************!*\ |
|
!*** ./node_modules/define-property/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js ***! |
|
\********************************************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isBuffer = __webpack_require__(/*! is-buffer */ "./node_modules/is-buffer/index.js"); |
|
|
|
var toString = Object.prototype.toString; |
|
/** |
|
* Get the native `typeof` a value. |
|
* |
|
* @param {*} `val` |
|
* @return {*} Native javascript type |
|
*/ |
|
|
|
module.exports = function kindOf(val) { |
|
// primitivies |
|
if (typeof val === 'undefined') { |
|
return 'undefined'; |
|
} |
|
|
|
if (val === null) { |
|
return 'null'; |
|
} |
|
|
|
if (val === true || val === false || val instanceof Boolean) { |
|
return 'boolean'; |
|
} |
|
|
|
if (typeof val === 'string' || val instanceof String) { |
|
return 'string'; |
|
} |
|
|
|
if (typeof val === 'number' || val instanceof Number) { |
|
return 'number'; |
|
} // functions |
|
|
|
|
|
if (typeof val === 'function' || val instanceof Function) { |
|
return 'function'; |
|
} // array |
|
|
|
|
|
if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { |
|
return 'array'; |
|
} // check for instances of RegExp and Date before calling `toString` |
|
|
|
|
|
if (val instanceof RegExp) { |
|
return 'regexp'; |
|
} |
|
|
|
if (val instanceof Date) { |
|
return 'date'; |
|
} // other objects |
|
|
|
|
|
var type = toString.call(val); |
|
|
|
if (type === '[object RegExp]') { |
|
return 'regexp'; |
|
} |
|
|
|
if (type === '[object Date]') { |
|
return 'date'; |
|
} |
|
|
|
if (type === '[object Arguments]') { |
|
return 'arguments'; |
|
} |
|
|
|
if (type === '[object Error]') { |
|
return 'error'; |
|
} // buffer |
|
|
|
|
|
if (isBuffer(val)) { |
|
return 'buffer'; |
|
} // es6: Map, WeakMap, Set, WeakSet |
|
|
|
|
|
if (type === '[object Set]') { |
|
return 'set'; |
|
} |
|
|
|
if (type === '[object WeakSet]') { |
|
return 'weakset'; |
|
} |
|
|
|
if (type === '[object Map]') { |
|
return 'map'; |
|
} |
|
|
|
if (type === '[object WeakMap]') { |
|
return 'weakmap'; |
|
} |
|
|
|
if (type === '[object Symbol]') { |
|
return 'symbol'; |
|
} // typed arrays |
|
|
|
|
|
if (type === '[object Int8Array]') { |
|
return 'int8array'; |
|
} |
|
|
|
if (type === '[object Uint8Array]') { |
|
return 'uint8array'; |
|
} |
|
|
|
if (type === '[object Uint8ClampedArray]') { |
|
return 'uint8clampedarray'; |
|
} |
|
|
|
if (type === '[object Int16Array]') { |
|
return 'int16array'; |
|
} |
|
|
|
if (type === '[object Uint16Array]') { |
|
return 'uint16array'; |
|
} |
|
|
|
if (type === '[object Int32Array]') { |
|
return 'int32array'; |
|
} |
|
|
|
if (type === '[object Uint32Array]') { |
|
return 'uint32array'; |
|
} |
|
|
|
if (type === '[object Float32Array]') { |
|
return 'float32array'; |
|
} |
|
|
|
if (type === '[object Float64Array]') { |
|
return 'float64array'; |
|
} // must be a plain object |
|
|
|
|
|
return 'object'; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/define-property/node_modules/is-data-descriptor/index.js": |
|
/*!*******************************************************************************!*\ |
|
!*** ./node_modules/define-property/node_modules/is-data-descriptor/index.js ***! |
|
\*******************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-data-descriptor <https://github.com/jonschlinkert/is-data-descriptor> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/define-property/node_modules/is-data-descriptor/node_modules/kind-of/index.js"); // data descriptor properties |
|
|
|
|
|
var data = { |
|
configurable: 'boolean', |
|
enumerable: 'boolean', |
|
writable: 'boolean' |
|
}; |
|
|
|
function isDataDescriptor(obj, prop) { |
|
if (typeOf(obj) !== 'object') { |
|
return false; |
|
} |
|
|
|
if (typeof prop === 'string') { |
|
var val = Object.getOwnPropertyDescriptor(obj, prop); |
|
return typeof val !== 'undefined'; |
|
} |
|
|
|
if (!('value' in obj) && !('writable' in obj)) { |
|
return false; |
|
} |
|
|
|
for (var key in obj) { |
|
if (key === 'value') continue; |
|
|
|
if (!data.hasOwnProperty(key)) { |
|
continue; |
|
} |
|
|
|
if (typeOf(obj[key]) === data[key]) { |
|
continue; |
|
} |
|
|
|
if (typeof obj[key] !== 'undefined') { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
/** |
|
* Expose `isDataDescriptor` |
|
*/ |
|
|
|
|
|
module.exports = isDataDescriptor; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/define-property/node_modules/is-data-descriptor/node_modules/kind-of/index.js": |
|
/*!****************************************************************************************************!*\ |
|
!*** ./node_modules/define-property/node_modules/is-data-descriptor/node_modules/kind-of/index.js ***! |
|
\****************************************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isBuffer = __webpack_require__(/*! is-buffer */ "./node_modules/is-buffer/index.js"); |
|
|
|
var toString = Object.prototype.toString; |
|
/** |
|
* Get the native `typeof` a value. |
|
* |
|
* @param {*} `val` |
|
* @return {*} Native javascript type |
|
*/ |
|
|
|
module.exports = function kindOf(val) { |
|
// primitivies |
|
if (typeof val === 'undefined') { |
|
return 'undefined'; |
|
} |
|
|
|
if (val === null) { |
|
return 'null'; |
|
} |
|
|
|
if (val === true || val === false || val instanceof Boolean) { |
|
return 'boolean'; |
|
} |
|
|
|
if (typeof val === 'string' || val instanceof String) { |
|
return 'string'; |
|
} |
|
|
|
if (typeof val === 'number' || val instanceof Number) { |
|
return 'number'; |
|
} // functions |
|
|
|
|
|
if (typeof val === 'function' || val instanceof Function) { |
|
return 'function'; |
|
} // array |
|
|
|
|
|
if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { |
|
return 'array'; |
|
} // check for instances of RegExp and Date before calling `toString` |
|
|
|
|
|
if (val instanceof RegExp) { |
|
return 'regexp'; |
|
} |
|
|
|
if (val instanceof Date) { |
|
return 'date'; |
|
} // other objects |
|
|
|
|
|
var type = toString.call(val); |
|
|
|
if (type === '[object RegExp]') { |
|
return 'regexp'; |
|
} |
|
|
|
if (type === '[object Date]') { |
|
return 'date'; |
|
} |
|
|
|
if (type === '[object Arguments]') { |
|
return 'arguments'; |
|
} |
|
|
|
if (type === '[object Error]') { |
|
return 'error'; |
|
} // buffer |
|
|
|
|
|
if (isBuffer(val)) { |
|
return 'buffer'; |
|
} // es6: Map, WeakMap, Set, WeakSet |
|
|
|
|
|
if (type === '[object Set]') { |
|
return 'set'; |
|
} |
|
|
|
if (type === '[object WeakSet]') { |
|
return 'weakset'; |
|
} |
|
|
|
if (type === '[object Map]') { |
|
return 'map'; |
|
} |
|
|
|
if (type === '[object WeakMap]') { |
|
return 'weakmap'; |
|
} |
|
|
|
if (type === '[object Symbol]') { |
|
return 'symbol'; |
|
} // typed arrays |
|
|
|
|
|
if (type === '[object Int8Array]') { |
|
return 'int8array'; |
|
} |
|
|
|
if (type === '[object Uint8Array]') { |
|
return 'uint8array'; |
|
} |
|
|
|
if (type === '[object Uint8ClampedArray]') { |
|
return 'uint8clampedarray'; |
|
} |
|
|
|
if (type === '[object Int16Array]') { |
|
return 'int16array'; |
|
} |
|
|
|
if (type === '[object Uint16Array]') { |
|
return 'uint16array'; |
|
} |
|
|
|
if (type === '[object Int32Array]') { |
|
return 'int32array'; |
|
} |
|
|
|
if (type === '[object Uint32Array]') { |
|
return 'uint32array'; |
|
} |
|
|
|
if (type === '[object Float32Array]') { |
|
return 'float32array'; |
|
} |
|
|
|
if (type === '[object Float64Array]') { |
|
return 'float64array'; |
|
} // must be a plain object |
|
|
|
|
|
return 'object'; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/define-property/node_modules/is-descriptor/index.js": |
|
/*!**************************************************************************!*\ |
|
!*** ./node_modules/define-property/node_modules/is-descriptor/index.js ***! |
|
\**************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-descriptor <https://github.com/jonschlinkert/is-descriptor> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/define-property/node_modules/kind-of/index.js"); |
|
|
|
var isAccessor = __webpack_require__(/*! is-accessor-descriptor */ "./node_modules/define-property/node_modules/is-accessor-descriptor/index.js"); |
|
|
|
var isData = __webpack_require__(/*! is-data-descriptor */ "./node_modules/define-property/node_modules/is-data-descriptor/index.js"); |
|
|
|
module.exports = function isDescriptor(obj, key) { |
|
if (typeOf(obj) !== 'object') { |
|
return false; |
|
} |
|
|
|
if ('get' in obj) { |
|
return isAccessor(obj, key); |
|
} |
|
|
|
return isData(obj, key); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/define-property/node_modules/kind-of/index.js": |
|
/*!********************************************************************!*\ |
|
!*** ./node_modules/define-property/node_modules/kind-of/index.js ***! |
|
\********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var toString = Object.prototype.toString; |
|
/** |
|
* Get the native `typeof` a value. |
|
* |
|
* @param {*} `val` |
|
* @return {*} Native javascript type |
|
*/ |
|
|
|
module.exports = function kindOf(val) { |
|
var type = _typeof(val); // primitivies |
|
|
|
|
|
if (type === 'undefined') { |
|
return 'undefined'; |
|
} |
|
|
|
if (val === null) { |
|
return 'null'; |
|
} |
|
|
|
if (val === true || val === false || val instanceof Boolean) { |
|
return 'boolean'; |
|
} |
|
|
|
if (type === 'string' || val instanceof String) { |
|
return 'string'; |
|
} |
|
|
|
if (type === 'number' || val instanceof Number) { |
|
return 'number'; |
|
} // functions |
|
|
|
|
|
if (type === 'function' || val instanceof Function) { |
|
if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') { |
|
return 'generatorfunction'; |
|
} |
|
|
|
return 'function'; |
|
} // array |
|
|
|
|
|
if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { |
|
return 'array'; |
|
} // check for instances of RegExp and Date before calling `toString` |
|
|
|
|
|
if (val instanceof RegExp) { |
|
return 'regexp'; |
|
} |
|
|
|
if (val instanceof Date) { |
|
return 'date'; |
|
} // other objects |
|
|
|
|
|
type = toString.call(val); |
|
|
|
if (type === '[object RegExp]') { |
|
return 'regexp'; |
|
} |
|
|
|
if (type === '[object Date]') { |
|
return 'date'; |
|
} |
|
|
|
if (type === '[object Arguments]') { |
|
return 'arguments'; |
|
} |
|
|
|
if (type === '[object Error]') { |
|
return 'error'; |
|
} |
|
|
|
if (type === '[object Promise]') { |
|
return 'promise'; |
|
} // buffer |
|
|
|
|
|
if (isBuffer(val)) { |
|
return 'buffer'; |
|
} // es6: Map, WeakMap, Set, WeakSet |
|
|
|
|
|
if (type === '[object Set]') { |
|
return 'set'; |
|
} |
|
|
|
if (type === '[object WeakSet]') { |
|
return 'weakset'; |
|
} |
|
|
|
if (type === '[object Map]') { |
|
return 'map'; |
|
} |
|
|
|
if (type === '[object WeakMap]') { |
|
return 'weakmap'; |
|
} |
|
|
|
if (type === '[object Symbol]') { |
|
return 'symbol'; |
|
} |
|
|
|
if (type === '[object Map Iterator]') { |
|
return 'mapiterator'; |
|
} |
|
|
|
if (type === '[object Set Iterator]') { |
|
return 'setiterator'; |
|
} |
|
|
|
if (type === '[object String Iterator]') { |
|
return 'stringiterator'; |
|
} |
|
|
|
if (type === '[object Array Iterator]') { |
|
return 'arrayiterator'; |
|
} // typed arrays |
|
|
|
|
|
if (type === '[object Int8Array]') { |
|
return 'int8array'; |
|
} |
|
|
|
if (type === '[object Uint8Array]') { |
|
return 'uint8array'; |
|
} |
|
|
|
if (type === '[object Uint8ClampedArray]') { |
|
return 'uint8clampedarray'; |
|
} |
|
|
|
if (type === '[object Int16Array]') { |
|
return 'int16array'; |
|
} |
|
|
|
if (type === '[object Uint16Array]') { |
|
return 'uint16array'; |
|
} |
|
|
|
if (type === '[object Int32Array]') { |
|
return 'int32array'; |
|
} |
|
|
|
if (type === '[object Uint32Array]') { |
|
return 'uint32array'; |
|
} |
|
|
|
if (type === '[object Float32Array]') { |
|
return 'float32array'; |
|
} |
|
|
|
if (type === '[object Float64Array]') { |
|
return 'float64array'; |
|
} // must be a plain object |
|
|
|
|
|
return 'object'; |
|
}; |
|
/** |
|
* If you need to support Safari 5-7 (8-10 yr-old browser), |
|
* take a look at https://github.com/feross/is-buffer |
|
*/ |
|
|
|
|
|
function isBuffer(val) { |
|
return val.constructor && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/esutils/lib/ast.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/esutils/lib/ast.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* |
|
Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com> |
|
|
|
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. |
|
|
|
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 <COPYRIGHT HOLDER> 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. |
|
*/ |
|
(function () { |
|
'use strict'; |
|
|
|
function isExpression(node) { |
|
if (node == null) { |
|
return false; |
|
} |
|
|
|
switch (node.type) { |
|
case 'ArrayExpression': |
|
case 'AssignmentExpression': |
|
case 'BinaryExpression': |
|
case 'CallExpression': |
|
case 'ConditionalExpression': |
|
case 'FunctionExpression': |
|
case 'Identifier': |
|
case 'Literal': |
|
case 'LogicalExpression': |
|
case 'MemberExpression': |
|
case 'NewExpression': |
|
case 'ObjectExpression': |
|
case 'SequenceExpression': |
|
case 'ThisExpression': |
|
case 'UnaryExpression': |
|
case 'UpdateExpression': |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
function isIterationStatement(node) { |
|
if (node == null) { |
|
return false; |
|
} |
|
|
|
switch (node.type) { |
|
case 'DoWhileStatement': |
|
case 'ForInStatement': |
|
case 'ForStatement': |
|
case 'WhileStatement': |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
function isStatement(node) { |
|
if (node == null) { |
|
return false; |
|
} |
|
|
|
switch (node.type) { |
|
case 'BlockStatement': |
|
case 'BreakStatement': |
|
case 'ContinueStatement': |
|
case 'DebuggerStatement': |
|
case 'DoWhileStatement': |
|
case 'EmptyStatement': |
|
case 'ExpressionStatement': |
|
case 'ForInStatement': |
|
case 'ForStatement': |
|
case 'IfStatement': |
|
case 'LabeledStatement': |
|
case 'ReturnStatement': |
|
case 'SwitchStatement': |
|
case 'ThrowStatement': |
|
case 'TryStatement': |
|
case 'VariableDeclaration': |
|
case 'WhileStatement': |
|
case 'WithStatement': |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
function isSourceElement(node) { |
|
return isStatement(node) || node != null && node.type === 'FunctionDeclaration'; |
|
} |
|
|
|
function trailingStatement(node) { |
|
switch (node.type) { |
|
case 'IfStatement': |
|
if (node.alternate != null) { |
|
return node.alternate; |
|
} |
|
|
|
return node.consequent; |
|
|
|
case 'LabeledStatement': |
|
case 'ForStatement': |
|
case 'ForInStatement': |
|
case 'WhileStatement': |
|
case 'WithStatement': |
|
return node.body; |
|
} |
|
|
|
return null; |
|
} |
|
|
|
function isProblematicIfStatement(node) { |
|
var current; |
|
|
|
if (node.type !== 'IfStatement') { |
|
return false; |
|
} |
|
|
|
if (node.alternate == null) { |
|
return false; |
|
} |
|
|
|
current = node.consequent; |
|
|
|
do { |
|
if (current.type === 'IfStatement') { |
|
if (current.alternate == null) { |
|
return true; |
|
} |
|
} |
|
|
|
current = trailingStatement(current); |
|
} while (current); |
|
|
|
return false; |
|
} |
|
|
|
module.exports = { |
|
isExpression: isExpression, |
|
isStatement: isStatement, |
|
isIterationStatement: isIterationStatement, |
|
isSourceElement: isSourceElement, |
|
isProblematicIfStatement: isProblematicIfStatement, |
|
trailingStatement: trailingStatement |
|
}; |
|
})(); |
|
/* vim: set sw=4 ts=4 et tw=80 : */ |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/esutils/lib/code.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/esutils/lib/code.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* |
|
Copyright (C) 2013-2014 Yusuke Suzuki <utatane.tea@gmail.com> |
|
Copyright (C) 2014 Ivan Nikulin <ifaaan@gmail.com> |
|
|
|
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. |
|
|
|
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 <COPYRIGHT HOLDER> 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. |
|
*/ |
|
(function () { |
|
'use strict'; |
|
|
|
var ES6Regex, ES5Regex, NON_ASCII_WHITESPACES, IDENTIFIER_START, IDENTIFIER_PART, ch; // See `tools/generate-identifier-regex.js`. |
|
|
|
ES5Regex = { |
|
// ECMAScript 5.1/Unicode v7.0.0 NonAsciiIdentifierStart: |
|
NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/, |
|
// ECMAScript 5.1/Unicode v7.0.0 NonAsciiIdentifierPart: |
|
NonAsciiIdentifierPart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ |
|
}; |
|
ES6Regex = { |
|
// ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart: |
|
NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/, |
|
// ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart: |
|
NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDD0-\uDDDA\uDE00-\uDE11\uDE13-\uDE37\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF01-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ |
|
}; |
|
|
|
function isDecimalDigit(ch) { |
|
return 0x30 <= ch && ch <= 0x39; // 0..9 |
|
} |
|
|
|
function isHexDigit(ch) { |
|
return 0x30 <= ch && ch <= 0x39 || // 0..9 |
|
0x61 <= ch && ch <= 0x66 || // a..f |
|
0x41 <= ch && ch <= 0x46; // A..F |
|
} |
|
|
|
function isOctalDigit(ch) { |
|
return ch >= 0x30 && ch <= 0x37; // 0..7 |
|
} // 7.2 White Space |
|
|
|
|
|
NON_ASCII_WHITESPACES = [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF]; |
|
|
|
function isWhiteSpace(ch) { |
|
return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && NON_ASCII_WHITESPACES.indexOf(ch) >= 0; |
|
} // 7.3 Line Terminators |
|
|
|
|
|
function isLineTerminator(ch) { |
|
return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029; |
|
} // 7.6 Identifier Names and Identifiers |
|
|
|
|
|
function fromCodePoint(cp) { |
|
if (cp <= 0xFFFF) { |
|
return String.fromCharCode(cp); |
|
} |
|
|
|
var cu1 = String.fromCharCode(Math.floor((cp - 0x10000) / 0x400) + 0xD800); |
|
var cu2 = String.fromCharCode((cp - 0x10000) % 0x400 + 0xDC00); |
|
return cu1 + cu2; |
|
} |
|
|
|
IDENTIFIER_START = new Array(0x80); |
|
|
|
for (ch = 0; ch < 0x80; ++ch) { |
|
IDENTIFIER_START[ch] = ch >= 0x61 && ch <= 0x7A || // a..z |
|
ch >= 0x41 && ch <= 0x5A || // A..Z |
|
ch === 0x24 || ch === 0x5F; // $ (dollar) and _ (underscore) |
|
} |
|
|
|
IDENTIFIER_PART = new Array(0x80); |
|
|
|
for (ch = 0; ch < 0x80; ++ch) { |
|
IDENTIFIER_PART[ch] = ch >= 0x61 && ch <= 0x7A || // a..z |
|
ch >= 0x41 && ch <= 0x5A || // A..Z |
|
ch >= 0x30 && ch <= 0x39 || // 0..9 |
|
ch === 0x24 || ch === 0x5F; // $ (dollar) and _ (underscore) |
|
} |
|
|
|
function isIdentifierStartES5(ch) { |
|
return ch < 0x80 ? IDENTIFIER_START[ch] : ES5Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)); |
|
} |
|
|
|
function isIdentifierPartES5(ch) { |
|
return ch < 0x80 ? IDENTIFIER_PART[ch] : ES5Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)); |
|
} |
|
|
|
function isIdentifierStartES6(ch) { |
|
return ch < 0x80 ? IDENTIFIER_START[ch] : ES6Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)); |
|
} |
|
|
|
function isIdentifierPartES6(ch) { |
|
return ch < 0x80 ? IDENTIFIER_PART[ch] : ES6Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)); |
|
} |
|
|
|
module.exports = { |
|
isDecimalDigit: isDecimalDigit, |
|
isHexDigit: isHexDigit, |
|
isOctalDigit: isOctalDigit, |
|
isWhiteSpace: isWhiteSpace, |
|
isLineTerminator: isLineTerminator, |
|
isIdentifierStartES5: isIdentifierStartES5, |
|
isIdentifierPartES5: isIdentifierPartES5, |
|
isIdentifierStartES6: isIdentifierStartES6, |
|
isIdentifierPartES6: isIdentifierPartES6 |
|
}; |
|
})(); |
|
/* vim: set sw=4 ts=4 et tw=80 : */ |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/esutils/lib/keyword.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/esutils/lib/keyword.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* |
|
Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com> |
|
|
|
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. |
|
|
|
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 <COPYRIGHT HOLDER> 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. |
|
*/ |
|
(function () { |
|
'use strict'; |
|
|
|
var code = __webpack_require__(/*! ./code */ "./node_modules/esutils/lib/code.js"); |
|
|
|
function isStrictModeReservedWordES6(id) { |
|
switch (id) { |
|
case 'implements': |
|
case 'interface': |
|
case 'package': |
|
case 'private': |
|
case 'protected': |
|
case 'public': |
|
case 'static': |
|
case 'let': |
|
return true; |
|
|
|
default: |
|
return false; |
|
} |
|
} |
|
|
|
function isKeywordES5(id, strict) { |
|
// yield should not be treated as keyword under non-strict mode. |
|
if (!strict && id === 'yield') { |
|
return false; |
|
} |
|
|
|
return isKeywordES6(id, strict); |
|
} |
|
|
|
function isKeywordES6(id, strict) { |
|
if (strict && isStrictModeReservedWordES6(id)) { |
|
return true; |
|
} |
|
|
|
switch (id.length) { |
|
case 2: |
|
return id === 'if' || id === 'in' || id === 'do'; |
|
|
|
case 3: |
|
return id === 'var' || id === 'for' || id === 'new' || id === 'try'; |
|
|
|
case 4: |
|
return id === 'this' || id === 'else' || id === 'case' || id === 'void' || id === 'with' || id === 'enum'; |
|
|
|
case 5: |
|
return id === 'while' || id === 'break' || id === 'catch' || id === 'throw' || id === 'const' || id === 'yield' || id === 'class' || id === 'super'; |
|
|
|
case 6: |
|
return id === 'return' || id === 'typeof' || id === 'delete' || id === 'switch' || id === 'export' || id === 'import'; |
|
|
|
case 7: |
|
return id === 'default' || id === 'finally' || id === 'extends'; |
|
|
|
case 8: |
|
return id === 'function' || id === 'continue' || id === 'debugger'; |
|
|
|
case 10: |
|
return id === 'instanceof'; |
|
|
|
default: |
|
return false; |
|
} |
|
} |
|
|
|
function isReservedWordES5(id, strict) { |
|
return id === 'null' || id === 'true' || id === 'false' || isKeywordES5(id, strict); |
|
} |
|
|
|
function isReservedWordES6(id, strict) { |
|
return id === 'null' || id === 'true' || id === 'false' || isKeywordES6(id, strict); |
|
} |
|
|
|
function isRestrictedWord(id) { |
|
return id === 'eval' || id === 'arguments'; |
|
} |
|
|
|
function isIdentifierNameES5(id) { |
|
var i, iz, ch; |
|
|
|
if (id.length === 0) { |
|
return false; |
|
} |
|
|
|
ch = id.charCodeAt(0); |
|
|
|
if (!code.isIdentifierStartES5(ch)) { |
|
return false; |
|
} |
|
|
|
for (i = 1, iz = id.length; i < iz; ++i) { |
|
ch = id.charCodeAt(i); |
|
|
|
if (!code.isIdentifierPartES5(ch)) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
|
|
function decodeUtf16(lead, trail) { |
|
return (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; |
|
} |
|
|
|
function isIdentifierNameES6(id) { |
|
var i, iz, ch, lowCh, check; |
|
|
|
if (id.length === 0) { |
|
return false; |
|
} |
|
|
|
check = code.isIdentifierStartES6; |
|
|
|
for (i = 0, iz = id.length; i < iz; ++i) { |
|
ch = id.charCodeAt(i); |
|
|
|
if (0xD800 <= ch && ch <= 0xDBFF) { |
|
++i; |
|
|
|
if (i >= iz) { |
|
return false; |
|
} |
|
|
|
lowCh = id.charCodeAt(i); |
|
|
|
if (!(0xDC00 <= lowCh && lowCh <= 0xDFFF)) { |
|
return false; |
|
} |
|
|
|
ch = decodeUtf16(ch, lowCh); |
|
} |
|
|
|
if (!check(ch)) { |
|
return false; |
|
} |
|
|
|
check = code.isIdentifierPartES6; |
|
} |
|
|
|
return true; |
|
} |
|
|
|
function isIdentifierES5(id, strict) { |
|
return isIdentifierNameES5(id) && !isReservedWordES5(id, strict); |
|
} |
|
|
|
function isIdentifierES6(id, strict) { |
|
return isIdentifierNameES6(id) && !isReservedWordES6(id, strict); |
|
} |
|
|
|
module.exports = { |
|
isKeywordES5: isKeywordES5, |
|
isKeywordES6: isKeywordES6, |
|
isReservedWordES5: isReservedWordES5, |
|
isReservedWordES6: isReservedWordES6, |
|
isRestrictedWord: isRestrictedWord, |
|
isIdentifierNameES5: isIdentifierNameES5, |
|
isIdentifierNameES6: isIdentifierNameES6, |
|
isIdentifierES5: isIdentifierES5, |
|
isIdentifierES6: isIdentifierES6 |
|
}; |
|
})(); |
|
/* vim: set sw=4 ts=4 et tw=80 : */ |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/esutils/lib/utils.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/esutils/lib/utils.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* |
|
Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com> |
|
|
|
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. |
|
|
|
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 <COPYRIGHT HOLDER> 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. |
|
*/ |
|
(function () { |
|
'use strict'; |
|
|
|
exports.ast = __webpack_require__(/*! ./ast */ "./node_modules/esutils/lib/ast.js"); |
|
exports.code = __webpack_require__(/*! ./code */ "./node_modules/esutils/lib/code.js"); |
|
exports.keyword = __webpack_require__(/*! ./keyword */ "./node_modules/esutils/lib/keyword.js"); |
|
})(); |
|
/* vim: set sw=4 ts=4 et tw=80 : */ |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/expand-brackets/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/expand-brackets/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(__filename) { |
|
/** |
|
* Local dependencies |
|
*/ |
|
|
|
var compilers = __webpack_require__(/*! ./lib/compilers */ "./node_modules/expand-brackets/lib/compilers.js"); |
|
|
|
var parsers = __webpack_require__(/*! ./lib/parsers */ "./node_modules/expand-brackets/lib/parsers.js"); |
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
|
|
var debug = __webpack_require__(/*! debug */ "./node_modules/expand-brackets/node_modules/debug/src/browser.js")('expand-brackets'); |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
|
|
var Snapdragon = __webpack_require__(/*! snapdragon */ "./node_modules/snapdragon/index.js"); |
|
|
|
var toRegex = __webpack_require__(/*! to-regex */ "./node_modules/to-regex/index.js"); |
|
/** |
|
* Parses the given POSIX character class `pattern` and returns a |
|
* string that can be used for creating regular expressions for matching. |
|
* |
|
* @param {String} `pattern` |
|
* @param {Object} `options` |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
|
|
function brackets(pattern, options) { |
|
debug('initializing from <%s>', __filename); |
|
var res = brackets.create(pattern, options); |
|
return res.output; |
|
} |
|
/** |
|
* Takes an array of strings and a POSIX character class pattern, and returns a new |
|
* array with only the strings that matched the pattern. |
|
* |
|
* ```js |
|
* var brackets = require('expand-brackets'); |
|
* console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]')); |
|
* //=> ['a'] |
|
* |
|
* console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]+')); |
|
* //=> ['a', 'ab'] |
|
* ``` |
|
* @param {Array} `arr` Array of strings to match |
|
* @param {String} `pattern` POSIX character class pattern(s) |
|
* @param {Object} `options` |
|
* @return {Array} |
|
* @api public |
|
*/ |
|
|
|
|
|
brackets.match = function (arr, pattern, options) { |
|
arr = [].concat(arr); |
|
var opts = extend({}, options); |
|
var isMatch = brackets.matcher(pattern, opts); |
|
var len = arr.length; |
|
var idx = -1; |
|
var res = []; |
|
|
|
while (++idx < len) { |
|
var ele = arr[idx]; |
|
|
|
if (isMatch(ele)) { |
|
res.push(ele); |
|
} |
|
} |
|
|
|
if (res.length === 0) { |
|
if (opts.failglob === true) { |
|
throw new Error('no matches found for "' + pattern + '"'); |
|
} |
|
|
|
if (opts.nonull === true || opts.nullglob === true) { |
|
return [pattern.split('\\').join('')]; |
|
} |
|
} |
|
|
|
return res; |
|
}; |
|
/** |
|
* Returns true if the specified `string` matches the given |
|
* brackets `pattern`. |
|
* |
|
* ```js |
|
* var brackets = require('expand-brackets'); |
|
* |
|
* console.log(brackets.isMatch('a.a', '[[:alpha:]].[[:alpha:]]')); |
|
* //=> true |
|
* console.log(brackets.isMatch('1.2', '[[:alpha:]].[[:alpha:]]')); |
|
* //=> false |
|
* ``` |
|
* @param {String} `string` String to match |
|
* @param {String} `pattern` Poxis pattern |
|
* @param {String} `options` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
brackets.isMatch = function (str, pattern, options) { |
|
return brackets.matcher(pattern, options)(str); |
|
}; |
|
/** |
|
* Takes a POSIX character class pattern and returns a matcher function. The returned |
|
* function takes the string to match as its only argument. |
|
* |
|
* ```js |
|
* var brackets = require('expand-brackets'); |
|
* var isMatch = brackets.matcher('[[:lower:]].[[:upper:]]'); |
|
* |
|
* console.log(isMatch('a.a')); |
|
* //=> false |
|
* console.log(isMatch('a.A')); |
|
* //=> true |
|
* ``` |
|
* @param {String} `pattern` Poxis pattern |
|
* @param {String} `options` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
brackets.matcher = function (pattern, options) { |
|
var re = brackets.makeRe(pattern, options); |
|
return function (str) { |
|
return re.test(str); |
|
}; |
|
}; |
|
/** |
|
* Create a regular expression from the given `pattern`. |
|
* |
|
* ```js |
|
* var brackets = require('expand-brackets'); |
|
* var re = brackets.makeRe('[[:alpha:]]'); |
|
* console.log(re); |
|
* //=> /^(?:[a-zA-Z])$/ |
|
* ``` |
|
* @param {String} `pattern` The pattern to convert to regex. |
|
* @param {Object} `options` |
|
* @return {RegExp} |
|
* @api public |
|
*/ |
|
|
|
|
|
brackets.makeRe = function (pattern, options) { |
|
var res = brackets.create(pattern, options); |
|
var opts = extend({ |
|
strictErrors: false |
|
}, options); |
|
return toRegex(res.output, opts); |
|
}; |
|
/** |
|
* Parses the given POSIX character class `pattern` and returns an object |
|
* with the compiled `output` and optional source `map`. |
|
* |
|
* ```js |
|
* var brackets = require('expand-brackets'); |
|
* console.log(brackets('[[:alpha:]]')); |
|
* // { options: { source: 'string' }, |
|
* // input: '[[:alpha:]]', |
|
* // state: {}, |
|
* // compilers: |
|
* // { eos: [Function], |
|
* // noop: [Function], |
|
* // bos: [Function], |
|
* // not: [Function], |
|
* // escape: [Function], |
|
* // text: [Function], |
|
* // posix: [Function], |
|
* // bracket: [Function], |
|
* // 'bracket.open': [Function], |
|
* // 'bracket.inner': [Function], |
|
* // 'bracket.literal': [Function], |
|
* // 'bracket.close': [Function] }, |
|
* // output: '[a-zA-Z]', |
|
* // ast: |
|
* // { type: 'root', |
|
* // errors: [], |
|
* // nodes: [ [Object], [Object], [Object] ] }, |
|
* // parsingErrors: [] } |
|
* ``` |
|
* @param {String} `pattern` |
|
* @param {Object} `options` |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
|
|
brackets.create = function (pattern, options) { |
|
var snapdragon = options && options.snapdragon || new Snapdragon(options); |
|
compilers(snapdragon); |
|
parsers(snapdragon); |
|
var ast = snapdragon.parse(pattern, options); |
|
ast.input = pattern; |
|
var res = snapdragon.compile(ast, options); |
|
res.input = pattern; |
|
return res; |
|
}; |
|
/** |
|
* Expose `brackets` constructor, parsers and compilers |
|
*/ |
|
|
|
|
|
brackets.compilers = compilers; |
|
brackets.parsers = parsers; |
|
/** |
|
* Expose `brackets` |
|
* @type {Function} |
|
*/ |
|
|
|
module.exports = brackets; |
|
/* WEBPACK VAR INJECTION */}.call(this, "/index.js")) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/expand-brackets/lib/compilers.js": |
|
/*!*******************************************************!*\ |
|
!*** ./node_modules/expand-brackets/lib/compilers.js ***! |
|
\*******************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var posix = __webpack_require__(/*! posix-character-classes */ "./node_modules/posix-character-classes/index.js"); |
|
|
|
module.exports = function (brackets) { |
|
brackets.compiler |
|
/** |
|
* Escaped characters |
|
*/ |
|
.set('escape', function (node) { |
|
return this.emit('\\' + node.val.replace(/^\\/, ''), node); |
|
}) |
|
/** |
|
* Text |
|
*/ |
|
.set('text', function (node) { |
|
return this.emit(node.val.replace(/([{}])/g, '\\$1'), node); |
|
}) |
|
/** |
|
* POSIX character classes |
|
*/ |
|
.set('posix', function (node) { |
|
if (node.val === '[::]') { |
|
return this.emit('\\[::\\]', node); |
|
} |
|
|
|
var val = posix[node.inner]; |
|
|
|
if (typeof val === 'undefined') { |
|
val = '[' + node.inner + ']'; |
|
} |
|
|
|
return this.emit(val, node); |
|
}) |
|
/** |
|
* Non-posix brackets |
|
*/ |
|
.set('bracket', function (node) { |
|
return this.mapVisit(node.nodes); |
|
}).set('bracket.open', function (node) { |
|
return this.emit(node.val, node); |
|
}).set('bracket.inner', function (node) { |
|
var inner = node.val; |
|
|
|
if (inner === '[' || inner === ']') { |
|
return this.emit('\\' + node.val, node); |
|
} |
|
|
|
if (inner === '^]') { |
|
return this.emit('^\\]', node); |
|
} |
|
|
|
if (inner === '^') { |
|
return this.emit('^', node); |
|
} |
|
|
|
if (/-/.test(inner) && !/(\d-\d|\w-\w)/.test(inner)) { |
|
inner = inner.split('-').join('\\-'); |
|
} |
|
|
|
var isNegated = inner.charAt(0) === '^'; // add slashes to negated brackets, per spec |
|
|
|
if (isNegated && inner.indexOf('/') === -1) { |
|
inner += '/'; |
|
} |
|
|
|
if (isNegated && inner.indexOf('.') === -1) { |
|
inner += '.'; |
|
} // don't unescape `0` (octal literal) |
|
|
|
|
|
inner = inner.replace(/\\([1-9])/g, '$1'); |
|
return this.emit(inner, node); |
|
}).set('bracket.close', function (node) { |
|
var val = node.val.replace(/^\\/, ''); |
|
|
|
if (node.parent.escaped === true) { |
|
return this.emit('\\' + val, node); |
|
} |
|
|
|
return this.emit(val, node); |
|
}); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/expand-brackets/lib/parsers.js": |
|
/*!*****************************************************!*\ |
|
!*** ./node_modules/expand-brackets/lib/parsers.js ***! |
|
\*****************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var utils = __webpack_require__(/*! ./utils */ "./node_modules/expand-brackets/lib/utils.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
/** |
|
* Text regex |
|
*/ |
|
|
|
|
|
var TEXT_REGEX = '(\\[(?=.*\\])|\\])+'; |
|
var not = utils.createRegex(TEXT_REGEX); |
|
/** |
|
* Brackets parsers |
|
*/ |
|
|
|
function parsers(brackets) { |
|
brackets.state = brackets.state || {}; |
|
brackets.parser.sets.bracket = brackets.parser.sets.bracket || []; |
|
brackets.parser.capture('escape', function () { |
|
if (this.isInside('bracket')) return; |
|
var pos = this.position(); |
|
var m = this.match(/^\\(.)/); |
|
if (!m) return; |
|
return pos({ |
|
type: 'escape', |
|
val: m[0] |
|
}); |
|
}) |
|
/** |
|
* Text parser |
|
*/ |
|
.capture('text', function () { |
|
if (this.isInside('bracket')) return; |
|
var pos = this.position(); |
|
var m = this.match(not); |
|
if (!m || !m[0]) return; |
|
return pos({ |
|
type: 'text', |
|
val: m[0] |
|
}); |
|
}) |
|
/** |
|
* POSIX character classes: "[[:alpha:][:digits:]]" |
|
*/ |
|
.capture('posix', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^\[:(.*?):\](?=.*\])/); |
|
if (!m) return; |
|
var inside = this.isInside('bracket'); |
|
|
|
if (inside) { |
|
brackets.posix++; |
|
} |
|
|
|
return pos({ |
|
type: 'posix', |
|
insideBracket: inside, |
|
inner: m[1], |
|
val: m[0] |
|
}); |
|
}) |
|
/** |
|
* Bracket (noop) |
|
*/ |
|
.capture('bracket', function () {}) |
|
/** |
|
* Open: '[' |
|
*/ |
|
.capture('bracket.open', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(/^\[(?=.*\])/); |
|
if (!m) return; |
|
var prev = this.prev(); |
|
var last = utils.last(prev.nodes); |
|
|
|
if (parsed.slice(-1) === '\\' && !this.isInside('bracket')) { |
|
last.val = last.val.slice(0, last.val.length - 1); |
|
return pos({ |
|
type: 'escape', |
|
val: m[0] |
|
}); |
|
} |
|
|
|
var open = pos({ |
|
type: 'bracket.open', |
|
val: m[0] |
|
}); |
|
|
|
if (last.type === 'bracket.open' || this.isInside('bracket')) { |
|
open.val = '\\' + open.val; |
|
open.type = 'bracket.inner'; |
|
open.escaped = true; |
|
return open; |
|
} |
|
|
|
var node = pos({ |
|
type: 'bracket', |
|
nodes: [open] |
|
}); |
|
define(node, 'parent', prev); |
|
define(open, 'parent', node); |
|
this.push('bracket', node); |
|
prev.nodes.push(node); |
|
}) |
|
/** |
|
* Bracket text |
|
*/ |
|
.capture('bracket.inner', function () { |
|
if (!this.isInside('bracket')) return; |
|
var pos = this.position(); |
|
var m = this.match(not); |
|
if (!m || !m[0]) return; |
|
var next = this.input.charAt(0); |
|
var val = m[0]; |
|
var node = pos({ |
|
type: 'bracket.inner', |
|
val: val |
|
}); |
|
|
|
if (val === '\\\\') { |
|
return node; |
|
} |
|
|
|
var first = val.charAt(0); |
|
var last = val.slice(-1); |
|
|
|
if (first === '!') { |
|
val = '^' + val.slice(1); |
|
} |
|
|
|
if (last === '\\' || val === '^' && next === ']') { |
|
val += this.input[0]; |
|
this.consume(1); |
|
} |
|
|
|
node.val = val; |
|
return node; |
|
}) |
|
/** |
|
* Close: ']' |
|
*/ |
|
.capture('bracket.close', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(/^\]/); |
|
if (!m) return; |
|
var prev = this.prev(); |
|
var last = utils.last(prev.nodes); |
|
|
|
if (parsed.slice(-1) === '\\' && !this.isInside('bracket')) { |
|
last.val = last.val.slice(0, last.val.length - 1); |
|
return pos({ |
|
type: 'escape', |
|
val: m[0] |
|
}); |
|
} |
|
|
|
var node = pos({ |
|
type: 'bracket.close', |
|
rest: this.input, |
|
val: m[0] |
|
}); |
|
|
|
if (last.type === 'bracket.open') { |
|
node.type = 'bracket.inner'; |
|
node.escaped = true; |
|
return node; |
|
} |
|
|
|
var bracket = this.pop('bracket'); |
|
|
|
if (!this.isType(bracket, 'bracket')) { |
|
if (this.options.strict) { |
|
throw new Error('missing opening "["'); |
|
} |
|
|
|
node.type = 'bracket.inner'; |
|
node.escaped = true; |
|
return node; |
|
} |
|
|
|
bracket.nodes.push(node); |
|
define(node, 'parent', bracket); |
|
}); |
|
} |
|
/** |
|
* Brackets parsers |
|
*/ |
|
|
|
|
|
module.exports = parsers; |
|
/** |
|
* Expose text regex |
|
*/ |
|
|
|
module.exports.TEXT_REGEX = TEXT_REGEX; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/expand-brackets/lib/utils.js": |
|
/*!***************************************************!*\ |
|
!*** ./node_modules/expand-brackets/lib/utils.js ***! |
|
\***************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var toRegex = __webpack_require__(/*! to-regex */ "./node_modules/to-regex/index.js"); |
|
|
|
var regexNot = __webpack_require__(/*! regex-not */ "./node_modules/regex-not/index.js"); |
|
|
|
var cached; |
|
/** |
|
* Get the last element from `array` |
|
* @param {Array} `array` |
|
* @return {*} |
|
*/ |
|
|
|
exports.last = function (arr) { |
|
return arr[arr.length - 1]; |
|
}; |
|
/** |
|
* Create and cache regex to use for text nodes |
|
*/ |
|
|
|
|
|
exports.createRegex = function (pattern, include) { |
|
if (cached) return cached; |
|
var opts = { |
|
contains: true, |
|
strictClose: false |
|
}; |
|
var not = regexNot.create(pattern, opts); |
|
var re; |
|
|
|
if (typeof include === 'string') { |
|
re = toRegex('^(?:' + include + '|' + not + ')', opts); |
|
} else { |
|
re = toRegex(not, opts); |
|
} |
|
|
|
return cached = re; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/expand-brackets/node_modules/debug/src/browser.js": |
|
/*!************************************************************************!*\ |
|
!*** ./node_modules/expand-brackets/node_modules/debug/src/browser.js ***! |
|
\************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) { |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
/** |
|
* This is the web browser implementation of `debug()`. |
|
* |
|
* Expose `debug()` as the module. |
|
*/ |
|
exports = module.exports = __webpack_require__(/*! ./debug */ "./node_modules/expand-brackets/node_modules/debug/src/debug.js"); |
|
exports.log = log; |
|
exports.formatArgs = formatArgs; |
|
exports.save = save; |
|
exports.load = load; |
|
exports.useColors = useColors; |
|
exports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage(); |
|
/** |
|
* Colors. |
|
*/ |
|
|
|
exports.colors = ['lightseagreen', 'forestgreen', 'goldenrod', 'dodgerblue', 'darkorchid', 'crimson']; |
|
/** |
|
* Currently only WebKit-based Web Inspectors, Firefox >= v31, |
|
* and the Firebug extension (any Firefox version) are known |
|
* to support "%c" CSS customizations. |
|
* |
|
* TODO: add a `localStorage` variable to explicitly enable/disable colors |
|
*/ |
|
|
|
function useColors() { |
|
// NB: In an Electron preload script, document will be defined but not fully |
|
// initialized. Since we know we're in Chrome, we'll just detect this case |
|
// explicitly |
|
if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { |
|
return true; |
|
} // is webkit? http://stackoverflow.com/a/16459606/376773 |
|
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 |
|
|
|
|
|
return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // is firebug? http://stackoverflow.com/a/398120/376773 |
|
typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // is firefox >= v31? |
|
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages |
|
typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // double check webkit in userAgent just in case we are in a worker |
|
typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); |
|
} |
|
/** |
|
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. |
|
*/ |
|
|
|
|
|
exports.formatters.j = function (v) { |
|
try { |
|
return JSON.stringify(v); |
|
} catch (err) { |
|
return '[UnexpectedJSONParseError]: ' + err.message; |
|
} |
|
}; |
|
/** |
|
* Colorize log arguments if enabled. |
|
* |
|
* @api public |
|
*/ |
|
|
|
|
|
function formatArgs(args) { |
|
var useColors = this.useColors; |
|
args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff); |
|
if (!useColors) return; |
|
var c = 'color: ' + this.color; |
|
args.splice(1, 0, c, 'color: inherit'); // the final "%c" is somewhat tricky, because there could be other |
|
// arguments passed either before or after the %c, so we need to |
|
// figure out the correct index to insert the CSS into |
|
|
|
var index = 0; |
|
var lastC = 0; |
|
args[0].replace(/%[a-zA-Z%]/g, function (match) { |
|
if ('%%' === match) return; |
|
index++; |
|
|
|
if ('%c' === match) { |
|
// we only are interested in the *last* %c |
|
// (the user may have provided their own) |
|
lastC = index; |
|
} |
|
}); |
|
args.splice(lastC, 0, c); |
|
} |
|
/** |
|
* Invokes `console.log()` when available. |
|
* No-op when `console.log` is not a "function". |
|
* |
|
* @api public |
|
*/ |
|
|
|
|
|
function log() { |
|
// this hackery is required for IE8/9, where |
|
// the `console.log` function doesn't have 'apply' |
|
return 'object' === (typeof console === "undefined" ? "undefined" : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments); |
|
} |
|
/** |
|
* Save `namespaces`. |
|
* |
|
* @param {String} namespaces |
|
* @api private |
|
*/ |
|
|
|
|
|
function save(namespaces) { |
|
try { |
|
if (null == namespaces) { |
|
exports.storage.removeItem('debug'); |
|
} else { |
|
exports.storage.debug = namespaces; |
|
} |
|
} catch (e) {} |
|
} |
|
/** |
|
* Load `namespaces`. |
|
* |
|
* @return {String} returns the previously persisted debug modes |
|
* @api private |
|
*/ |
|
|
|
|
|
function load() { |
|
var r; |
|
|
|
try { |
|
r = exports.storage.debug; |
|
} catch (e) {} // If debug isn't set in LS, and we're in Electron, try to load $DEBUG |
|
|
|
|
|
if (!r && typeof process !== 'undefined' && 'env' in process) { |
|
r = process.env.DEBUG; |
|
} |
|
|
|
return r; |
|
} |
|
/** |
|
* Enable namespaces listed in `localStorage.debug` initially. |
|
*/ |
|
|
|
|
|
exports.enable(load()); |
|
/** |
|
* Localstorage attempts to return the localstorage. |
|
* |
|
* This is necessary because safari throws |
|
* when a user disables cookies/localstorage |
|
* and you attempt to access it. |
|
* |
|
* @return {LocalStorage} |
|
* @api private |
|
*/ |
|
|
|
function localstorage() { |
|
try { |
|
return window.localStorage; |
|
} catch (e) {} |
|
} |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/expand-brackets/node_modules/debug/src/debug.js": |
|
/*!**********************************************************************!*\ |
|
!*** ./node_modules/expand-brackets/node_modules/debug/src/debug.js ***! |
|
\**********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/** |
|
* This is the common logic for both the Node.js and web browser |
|
* implementations of `debug()`. |
|
* |
|
* Expose `debug()` as the module. |
|
*/ |
|
exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; |
|
exports.coerce = coerce; |
|
exports.disable = disable; |
|
exports.enable = enable; |
|
exports.enabled = enabled; |
|
exports.humanize = __webpack_require__(/*! ms */ "./node_modules/expand-brackets/node_modules/ms/index.js"); |
|
/** |
|
* The currently active debug mode names, and names to skip. |
|
*/ |
|
|
|
exports.names = []; |
|
exports.skips = []; |
|
/** |
|
* Map of special "%n" handling functions, for the debug "format" argument. |
|
* |
|
* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". |
|
*/ |
|
|
|
exports.formatters = {}; |
|
/** |
|
* Previous log timestamp. |
|
*/ |
|
|
|
var prevTime; |
|
/** |
|
* Select a color. |
|
* @param {String} namespace |
|
* @return {Number} |
|
* @api private |
|
*/ |
|
|
|
function selectColor(namespace) { |
|
var hash = 0, |
|
i; |
|
|
|
for (i in namespace) { |
|
hash = (hash << 5) - hash + namespace.charCodeAt(i); |
|
hash |= 0; // Convert to 32bit integer |
|
} |
|
|
|
return exports.colors[Math.abs(hash) % exports.colors.length]; |
|
} |
|
/** |
|
* Create a debugger with the given `namespace`. |
|
* |
|
* @param {String} namespace |
|
* @return {Function} |
|
* @api public |
|
*/ |
|
|
|
|
|
function createDebug(namespace) { |
|
function debug() { |
|
// disabled? |
|
if (!debug.enabled) return; |
|
var self = debug; // set `diff` timestamp |
|
|
|
var curr = +new Date(); |
|
var ms = curr - (prevTime || curr); |
|
self.diff = ms; |
|
self.prev = prevTime; |
|
self.curr = curr; |
|
prevTime = curr; // turn the `arguments` into a proper Array |
|
|
|
var args = new Array(arguments.length); |
|
|
|
for (var i = 0; i < args.length; i++) { |
|
args[i] = arguments[i]; |
|
} |
|
|
|
args[0] = exports.coerce(args[0]); |
|
|
|
if ('string' !== typeof args[0]) { |
|
// anything else let's inspect with %O |
|
args.unshift('%O'); |
|
} // apply any `formatters` transformations |
|
|
|
|
|
var index = 0; |
|
args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { |
|
// if we encounter an escaped % then don't increase the array index |
|
if (match === '%%') return match; |
|
index++; |
|
var formatter = exports.formatters[format]; |
|
|
|
if ('function' === typeof formatter) { |
|
var val = args[index]; |
|
match = formatter.call(self, val); // now we need to remove `args[index]` since it's inlined in the `format` |
|
|
|
args.splice(index, 1); |
|
index--; |
|
} |
|
|
|
return match; |
|
}); // apply env-specific formatting (colors, etc.) |
|
|
|
exports.formatArgs.call(self, args); |
|
var logFn = debug.log || exports.log || console.log.bind(console); |
|
logFn.apply(self, args); |
|
} |
|
|
|
debug.namespace = namespace; |
|
debug.enabled = exports.enabled(namespace); |
|
debug.useColors = exports.useColors(); |
|
debug.color = selectColor(namespace); // env-specific initialization logic for debug instances |
|
|
|
if ('function' === typeof exports.init) { |
|
exports.init(debug); |
|
} |
|
|
|
return debug; |
|
} |
|
/** |
|
* Enables a debug mode by namespaces. This can include modes |
|
* separated by a colon and wildcards. |
|
* |
|
* @param {String} namespaces |
|
* @api public |
|
*/ |
|
|
|
|
|
function enable(namespaces) { |
|
exports.save(namespaces); |
|
exports.names = []; |
|
exports.skips = []; |
|
var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); |
|
var len = split.length; |
|
|
|
for (var i = 0; i < len; i++) { |
|
if (!split[i]) continue; // ignore empty strings |
|
|
|
namespaces = split[i].replace(/\*/g, '.*?'); |
|
|
|
if (namespaces[0] === '-') { |
|
exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); |
|
} else { |
|
exports.names.push(new RegExp('^' + namespaces + '$')); |
|
} |
|
} |
|
} |
|
/** |
|
* Disable debug output. |
|
* |
|
* @api public |
|
*/ |
|
|
|
|
|
function disable() { |
|
exports.enable(''); |
|
} |
|
/** |
|
* Returns true if the given mode name is enabled, false otherwise. |
|
* |
|
* @param {String} name |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
function enabled(name) { |
|
var i, len; |
|
|
|
for (i = 0, len = exports.skips.length; i < len; i++) { |
|
if (exports.skips[i].test(name)) { |
|
return false; |
|
} |
|
} |
|
|
|
for (i = 0, len = exports.names.length; i < len; i++) { |
|
if (exports.names[i].test(name)) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
/** |
|
* Coerce `val`. |
|
* |
|
* @param {Mixed} val |
|
* @return {Mixed} |
|
* @api private |
|
*/ |
|
|
|
|
|
function coerce(val) { |
|
if (val instanceof Error) return val.stack || val.message; |
|
return val; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/expand-brackets/node_modules/ms/index.js": |
|
/*!***************************************************************!*\ |
|
!*** ./node_modules/expand-brackets/node_modules/ms/index.js ***! |
|
\***************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
/** |
|
* Helpers. |
|
*/ |
|
var s = 1000; |
|
var m = s * 60; |
|
var h = m * 60; |
|
var d = h * 24; |
|
var y = d * 365.25; |
|
/** |
|
* Parse or format the given `val`. |
|
* |
|
* Options: |
|
* |
|
* - `long` verbose formatting [false] |
|
* |
|
* @param {String|Number} val |
|
* @param {Object} [options] |
|
* @throws {Error} throw an error if val is not a non-empty string or a number |
|
* @return {String|Number} |
|
* @api public |
|
*/ |
|
|
|
module.exports = function (val, options) { |
|
options = options || {}; |
|
|
|
var type = _typeof(val); |
|
|
|
if (type === 'string' && val.length > 0) { |
|
return parse(val); |
|
} else if (type === 'number' && isNaN(val) === false) { |
|
return options.long ? fmtLong(val) : fmtShort(val); |
|
} |
|
|
|
throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)); |
|
}; |
|
/** |
|
* Parse the given `str` and return milliseconds. |
|
* |
|
* @param {String} str |
|
* @return {Number} |
|
* @api private |
|
*/ |
|
|
|
|
|
function parse(str) { |
|
str = String(str); |
|
|
|
if (str.length > 100) { |
|
return; |
|
} |
|
|
|
var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str); |
|
|
|
if (!match) { |
|
return; |
|
} |
|
|
|
var n = parseFloat(match[1]); |
|
var type = (match[2] || 'ms').toLowerCase(); |
|
|
|
switch (type) { |
|
case 'years': |
|
case 'year': |
|
case 'yrs': |
|
case 'yr': |
|
case 'y': |
|
return n * y; |
|
|
|
case 'days': |
|
case 'day': |
|
case 'd': |
|
return n * d; |
|
|
|
case 'hours': |
|
case 'hour': |
|
case 'hrs': |
|
case 'hr': |
|
case 'h': |
|
return n * h; |
|
|
|
case 'minutes': |
|
case 'minute': |
|
case 'mins': |
|
case 'min': |
|
case 'm': |
|
return n * m; |
|
|
|
case 'seconds': |
|
case 'second': |
|
case 'secs': |
|
case 'sec': |
|
case 's': |
|
return n * s; |
|
|
|
case 'milliseconds': |
|
case 'millisecond': |
|
case 'msecs': |
|
case 'msec': |
|
case 'ms': |
|
return n; |
|
|
|
default: |
|
return undefined; |
|
} |
|
} |
|
/** |
|
* Short format for `ms`. |
|
* |
|
* @param {Number} ms |
|
* @return {String} |
|
* @api private |
|
*/ |
|
|
|
|
|
function fmtShort(ms) { |
|
if (ms >= d) { |
|
return Math.round(ms / d) + 'd'; |
|
} |
|
|
|
if (ms >= h) { |
|
return Math.round(ms / h) + 'h'; |
|
} |
|
|
|
if (ms >= m) { |
|
return Math.round(ms / m) + 'm'; |
|
} |
|
|
|
if (ms >= s) { |
|
return Math.round(ms / s) + 's'; |
|
} |
|
|
|
return ms + 'ms'; |
|
} |
|
/** |
|
* Long format for `ms`. |
|
* |
|
* @param {Number} ms |
|
* @return {String} |
|
* @api private |
|
*/ |
|
|
|
|
|
function fmtLong(ms) { |
|
return plural(ms, d, 'day') || plural(ms, h, 'hour') || plural(ms, m, 'minute') || plural(ms, s, 'second') || ms + ' ms'; |
|
} |
|
/** |
|
* Pluralization helper. |
|
*/ |
|
|
|
|
|
function plural(ms, n, name) { |
|
if (ms < n) { |
|
return; |
|
} |
|
|
|
if (ms < n * 1.5) { |
|
return Math.floor(ms / n) + ' ' + name; |
|
} |
|
|
|
return Math.ceil(ms / n) + ' ' + name + 's'; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/extend-shallow/index.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/extend-shallow/index.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isObject = __webpack_require__(/*! is-extendable */ "./node_modules/is-extendable/index.js"); |
|
|
|
module.exports = function extend(o |
|
/*, objects*/ |
|
) { |
|
if (!isObject(o)) { |
|
o = {}; |
|
} |
|
|
|
var len = arguments.length; |
|
|
|
for (var i = 1; i < len; i++) { |
|
var obj = arguments[i]; |
|
|
|
if (isObject(obj)) { |
|
assign(o, obj); |
|
} |
|
} |
|
|
|
return o; |
|
}; |
|
|
|
function assign(a, b) { |
|
for (var key in b) { |
|
if (hasOwn(b, key)) { |
|
a[key] = b[key]; |
|
} |
|
} |
|
} |
|
/** |
|
* Returns true if the given `key` is an own property of `obj`. |
|
*/ |
|
|
|
|
|
function hasOwn(obj, key) { |
|
return Object.prototype.hasOwnProperty.call(obj, key); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/extglob/index.js": |
|
/*!***************************************!*\ |
|
!*** ./node_modules/extglob/index.js ***! |
|
\***************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
|
|
var unique = __webpack_require__(/*! array-unique */ "./node_modules/array-unique/index.js"); |
|
|
|
var toRegex = __webpack_require__(/*! to-regex */ "./node_modules/to-regex/index.js"); |
|
/** |
|
* Local dependencies |
|
*/ |
|
|
|
|
|
var compilers = __webpack_require__(/*! ./lib/compilers */ "./node_modules/extglob/lib/compilers.js"); |
|
|
|
var parsers = __webpack_require__(/*! ./lib/parsers */ "./node_modules/extglob/lib/parsers.js"); |
|
|
|
var Extglob = __webpack_require__(/*! ./lib/extglob */ "./node_modules/extglob/lib/extglob.js"); |
|
|
|
var utils = __webpack_require__(/*! ./lib/utils */ "./node_modules/extglob/lib/utils.js"); |
|
|
|
var MAX_LENGTH = 1024 * 64; |
|
/** |
|
* Convert the given `extglob` pattern into a regex-compatible string. Returns |
|
* an object with the compiled result and the parsed AST. |
|
* |
|
* ```js |
|
* var extglob = require('extglob'); |
|
* console.log(extglob('*.!(*a)')); |
|
* //=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?' |
|
* ``` |
|
* @param {String} `pattern` |
|
* @param {Object} `options` |
|
* @return {String} |
|
* @api public |
|
*/ |
|
|
|
function extglob(pattern, options) { |
|
return extglob.create(pattern, options).output; |
|
} |
|
/** |
|
* Takes an array of strings and an extglob pattern and returns a new |
|
* array that contains only the strings that match the pattern. |
|
* |
|
* ```js |
|
* var extglob = require('extglob'); |
|
* console.log(extglob.match(['a.a', 'a.b', 'a.c'], '*.!(*a)')); |
|
* //=> ['a.b', 'a.c'] |
|
* ``` |
|
* @param {Array} `list` Array of strings to match |
|
* @param {String} `pattern` Extglob pattern |
|
* @param {Object} `options` |
|
* @return {Array} Returns an array of matches |
|
* @api public |
|
*/ |
|
|
|
|
|
extglob.match = function (list, pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
list = utils.arrayify(list); |
|
var isMatch = extglob.matcher(pattern, options); |
|
var len = list.length; |
|
var idx = -1; |
|
var matches = []; |
|
|
|
while (++idx < len) { |
|
var ele = list[idx]; |
|
|
|
if (isMatch(ele)) { |
|
matches.push(ele); |
|
} |
|
} // if no options were passed, uniquify results and return |
|
|
|
|
|
if (typeof options === 'undefined') { |
|
return unique(matches); |
|
} |
|
|
|
if (matches.length === 0) { |
|
if (options.failglob === true) { |
|
throw new Error('no matches found for "' + pattern + '"'); |
|
} |
|
|
|
if (options.nonull === true || options.nullglob === true) { |
|
return [pattern.split('\\').join('')]; |
|
} |
|
} |
|
|
|
return options.nodupes !== false ? unique(matches) : matches; |
|
}; |
|
/** |
|
* Returns true if the specified `string` matches the given |
|
* extglob `pattern`. |
|
* |
|
* ```js |
|
* var extglob = require('extglob'); |
|
* |
|
* console.log(extglob.isMatch('a.a', '*.!(*a)')); |
|
* //=> false |
|
* console.log(extglob.isMatch('a.b', '*.!(*a)')); |
|
* //=> true |
|
* ``` |
|
* @param {String} `string` String to match |
|
* @param {String} `pattern` Extglob pattern |
|
* @param {String} `options` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
extglob.isMatch = function (str, pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
if (pattern === str) { |
|
return true; |
|
} |
|
|
|
if (pattern === '' || pattern === ' ' || pattern === '.') { |
|
return pattern === str; |
|
} |
|
|
|
var isMatch = utils.memoize('isMatch', pattern, options, extglob.matcher); |
|
return isMatch(str); |
|
}; |
|
/** |
|
* Returns true if the given `string` contains the given pattern. Similar to `.isMatch` but |
|
* the pattern can match any part of the string. |
|
* |
|
* ```js |
|
* var extglob = require('extglob'); |
|
* console.log(extglob.contains('aa/bb/cc', '*b')); |
|
* //=> true |
|
* console.log(extglob.contains('aa/bb/cc', '*d')); |
|
* //=> false |
|
* ``` |
|
* @param {String} `str` The string to match. |
|
* @param {String} `pattern` Glob pattern to use for matching. |
|
* @param {Object} `options` |
|
* @return {Boolean} Returns true if the patter matches any part of `str`. |
|
* @api public |
|
*/ |
|
|
|
|
|
extglob.contains = function (str, pattern, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
if (pattern === '' || pattern === ' ' || pattern === '.') { |
|
return pattern === str; |
|
} |
|
|
|
var opts = extend({}, options, { |
|
contains: true |
|
}); |
|
opts.strictClose = false; |
|
opts.strictOpen = false; |
|
return extglob.isMatch(str, pattern, opts); |
|
}; |
|
/** |
|
* Takes an extglob pattern and returns a matcher function. The returned |
|
* function takes the string to match as its only argument. |
|
* |
|
* ```js |
|
* var extglob = require('extglob'); |
|
* var isMatch = extglob.matcher('*.!(*a)'); |
|
* |
|
* console.log(isMatch('a.a')); |
|
* //=> false |
|
* console.log(isMatch('a.b')); |
|
* //=> true |
|
* ``` |
|
* @param {String} `pattern` Extglob pattern |
|
* @param {String} `options` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
extglob.matcher = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
function matcher() { |
|
var re = extglob.makeRe(pattern, options); |
|
return function (str) { |
|
return re.test(str); |
|
}; |
|
} |
|
|
|
return utils.memoize('matcher', pattern, options, matcher); |
|
}; |
|
/** |
|
* Convert the given `extglob` pattern into a regex-compatible string. Returns |
|
* an object with the compiled result and the parsed AST. |
|
* |
|
* ```js |
|
* var extglob = require('extglob'); |
|
* console.log(extglob.create('*.!(*a)').output); |
|
* //=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?' |
|
* ``` |
|
* @param {String} `str` |
|
* @param {Object} `options` |
|
* @return {String} |
|
* @api public |
|
*/ |
|
|
|
|
|
extglob.create = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
function create() { |
|
var ext = new Extglob(options); |
|
var ast = ext.parse(pattern, options); |
|
return ext.compile(ast, options); |
|
} |
|
|
|
return utils.memoize('create', pattern, options, create); |
|
}; |
|
/** |
|
* Returns an array of matches captured by `pattern` in `string`, or `null` |
|
* if the pattern did not match. |
|
* |
|
* ```js |
|
* var extglob = require('extglob'); |
|
* extglob.capture(pattern, string[, options]); |
|
* |
|
* console.log(extglob.capture('test/*.js', 'test/foo.js')); |
|
* //=> ['foo'] |
|
* console.log(extglob.capture('test/*.js', 'foo/bar.css')); |
|
* //=> null |
|
* ``` |
|
* @param {String} `pattern` Glob pattern to use for matching. |
|
* @param {String} `string` String to match |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`. |
|
* @api public |
|
*/ |
|
|
|
|
|
extglob.capture = function (pattern, str, options) { |
|
var re = extglob.makeRe(pattern, extend({ |
|
capture: true |
|
}, options)); |
|
|
|
function match() { |
|
return function (string) { |
|
var match = re.exec(string); |
|
|
|
if (!match) { |
|
return null; |
|
} |
|
|
|
return match.slice(1); |
|
}; |
|
} |
|
|
|
var capture = utils.memoize('capture', pattern, options, match); |
|
return capture(str); |
|
}; |
|
/** |
|
* Create a regular expression from the given `pattern` and `options`. |
|
* |
|
* ```js |
|
* var extglob = require('extglob'); |
|
* var re = extglob.makeRe('*.!(*a)'); |
|
* console.log(re); |
|
* //=> /^[^\/]*?\.(?![^\/]*?a)[^\/]*?$/ |
|
* ``` |
|
* @param {String} `pattern` The pattern to convert to regex. |
|
* @param {Object} `options` |
|
* @return {RegExp} |
|
* @api public |
|
*/ |
|
|
|
|
|
extglob.makeRe = function (pattern, options) { |
|
if (pattern instanceof RegExp) { |
|
return pattern; |
|
} |
|
|
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
if (pattern.length > MAX_LENGTH) { |
|
throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); |
|
} |
|
|
|
function makeRe() { |
|
var opts = extend({ |
|
strictErrors: false |
|
}, options); |
|
if (opts.strictErrors === true) opts.strict = true; |
|
var res = extglob.create(pattern, opts); |
|
return toRegex(res.output, opts); |
|
} |
|
|
|
var regex = utils.memoize('makeRe', pattern, options, makeRe); |
|
|
|
if (regex.source.length > MAX_LENGTH) { |
|
throw new SyntaxError('potentially malicious regex detected'); |
|
} |
|
|
|
return regex; |
|
}; |
|
/** |
|
* Cache |
|
*/ |
|
|
|
|
|
extglob.cache = utils.cache; |
|
|
|
extglob.clearCache = function () { |
|
extglob.cache.__data__ = {}; |
|
}; |
|
/** |
|
* Expose `Extglob` constructor, parsers and compilers |
|
*/ |
|
|
|
|
|
extglob.Extglob = Extglob; |
|
extglob.compilers = compilers; |
|
extglob.parsers = parsers; |
|
/** |
|
* Expose `extglob` |
|
* @type {Function} |
|
*/ |
|
|
|
module.exports = extglob; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/extglob/lib/compilers.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/extglob/lib/compilers.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var brackets = __webpack_require__(/*! expand-brackets */ "./node_modules/expand-brackets/index.js"); |
|
/** |
|
* Extglob compilers |
|
*/ |
|
|
|
|
|
module.exports = function (extglob) { |
|
function star() { |
|
if (typeof extglob.options.star === 'function') { |
|
return extglob.options.star.apply(this, arguments); |
|
} |
|
|
|
if (typeof extglob.options.star === 'string') { |
|
return extglob.options.star; |
|
} |
|
|
|
return '.*?'; |
|
} |
|
/** |
|
* Use `expand-brackets` compilers |
|
*/ |
|
|
|
|
|
extglob.use(brackets.compilers); |
|
extglob.compiler |
|
/** |
|
* Escaped: "\\*" |
|
*/ |
|
.set('escape', function (node) { |
|
return this.emit(node.val, node); |
|
}) |
|
/** |
|
* Dot: "." |
|
*/ |
|
.set('dot', function (node) { |
|
return this.emit('\\' + node.val, node); |
|
}) |
|
/** |
|
* Question mark: "?" |
|
*/ |
|
.set('qmark', function (node) { |
|
var val = '[^\\\\/.]'; |
|
var prev = this.prev(); |
|
|
|
if (node.parsed.slice(-1) === '(') { |
|
var ch = node.rest.charAt(0); |
|
|
|
if (ch !== '!' && ch !== '=' && ch !== ':') { |
|
return this.emit(val, node); |
|
} |
|
|
|
return this.emit(node.val, node); |
|
} |
|
|
|
if (prev.type === 'text' && prev.val) { |
|
return this.emit(val, node); |
|
} |
|
|
|
if (node.val.length > 1) { |
|
val += '{' + node.val.length + '}'; |
|
} |
|
|
|
return this.emit(val, node); |
|
}) |
|
/** |
|
* Plus: "+" |
|
*/ |
|
.set('plus', function (node) { |
|
var prev = node.parsed.slice(-1); |
|
|
|
if (prev === ']' || prev === ')') { |
|
return this.emit(node.val, node); |
|
} |
|
|
|
var ch = this.output.slice(-1); |
|
|
|
if (!this.output || /[?*+]/.test(ch) && node.parent.type !== 'bracket') { |
|
return this.emit('\\+', node); |
|
} |
|
|
|
if (/\w/.test(ch) && !node.inside) { |
|
return this.emit('+\\+?', node); |
|
} |
|
|
|
return this.emit('+', node); |
|
}) |
|
/** |
|
* Star: "*" |
|
*/ |
|
.set('star', function (node) { |
|
var prev = this.prev(); |
|
var prefix = prev.type !== 'text' && prev.type !== 'escape' ? '(?!\\.)' : ''; |
|
return this.emit(prefix + star.call(this, node), node); |
|
}) |
|
/** |
|
* Parens |
|
*/ |
|
.set('paren', function (node) { |
|
return this.mapVisit(node.nodes); |
|
}).set('paren.open', function (node) { |
|
var capture = this.options.capture ? '(' : ''; |
|
|
|
switch (node.parent.prefix) { |
|
case '!': |
|
case '^': |
|
return this.emit(capture + '(?:(?!(?:', node); |
|
|
|
case '*': |
|
case '+': |
|
case '?': |
|
case '@': |
|
return this.emit(capture + '(?:', node); |
|
|
|
default: |
|
{ |
|
var val = node.val; |
|
|
|
if (this.options.bash === true) { |
|
val = '\\' + val; |
|
} else if (!this.options.capture && val === '(' && node.parent.rest[0] !== '?') { |
|
val += '?:'; |
|
} |
|
|
|
return this.emit(val, node); |
|
} |
|
} |
|
}).set('paren.close', function (node) { |
|
var capture = this.options.capture ? ')' : ''; |
|
|
|
switch (node.prefix) { |
|
case '!': |
|
case '^': |
|
var prefix = /^(\)|$)/.test(node.rest) ? '$' : ''; |
|
var str = star.call(this, node); // if the extglob has a slash explicitly defined, we know the user wants |
|
// to match slashes, so we need to ensure the "star" regex allows for it |
|
|
|
if (node.parent.hasSlash && !this.options.star && this.options.slash !== false) { |
|
str = '.*?'; |
|
} |
|
|
|
return this.emit(prefix + ('))' + str + ')') + capture, node); |
|
|
|
case '*': |
|
case '+': |
|
case '?': |
|
return this.emit(')' + node.prefix + capture, node); |
|
|
|
case '@': |
|
return this.emit(')' + capture, node); |
|
|
|
default: |
|
{ |
|
var val = (this.options.bash === true ? '\\' : '') + ')'; |
|
return this.emit(val, node); |
|
} |
|
} |
|
}) |
|
/** |
|
* Text |
|
*/ |
|
.set('text', function (node) { |
|
var val = node.val.replace(/[\[\]]/g, '\\$&'); |
|
return this.emit(val, node); |
|
}); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/extglob/lib/extglob.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/extglob/lib/extglob.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
var Snapdragon = __webpack_require__(/*! snapdragon */ "./node_modules/snapdragon/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/extglob/node_modules/define-property/index.js"); |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
/** |
|
* Local dependencies |
|
*/ |
|
|
|
|
|
var compilers = __webpack_require__(/*! ./compilers */ "./node_modules/extglob/lib/compilers.js"); |
|
|
|
var parsers = __webpack_require__(/*! ./parsers */ "./node_modules/extglob/lib/parsers.js"); |
|
/** |
|
* Customize Snapdragon parser and renderer |
|
*/ |
|
|
|
|
|
function Extglob(options) { |
|
this.options = extend({ |
|
source: 'extglob' |
|
}, options); |
|
this.snapdragon = this.options.snapdragon || new Snapdragon(this.options); |
|
this.snapdragon.patterns = this.snapdragon.patterns || {}; |
|
this.compiler = this.snapdragon.compiler; |
|
this.parser = this.snapdragon.parser; |
|
compilers(this.snapdragon); |
|
parsers(this.snapdragon); |
|
/** |
|
* Override Snapdragon `.parse` method |
|
*/ |
|
|
|
define(this.snapdragon, 'parse', function (str, options) { |
|
var parsed = Snapdragon.prototype.parse.apply(this, arguments); |
|
parsed.input = str; // escape unmatched brace/bracket/parens |
|
|
|
var last = this.parser.stack.pop(); |
|
|
|
if (last && this.options.strict !== true) { |
|
var node = last.nodes[0]; |
|
node.val = '\\' + node.val; |
|
var sibling = node.parent.nodes[1]; |
|
|
|
if (sibling.type === 'star') { |
|
sibling.loose = true; |
|
} |
|
} // add non-enumerable parser reference |
|
|
|
|
|
define(parsed, 'parser', this.parser); |
|
return parsed; |
|
}); |
|
/** |
|
* Decorate `.parse` method |
|
*/ |
|
|
|
define(this, 'parse', function (ast, options) { |
|
return this.snapdragon.parse.apply(this.snapdragon, arguments); |
|
}); |
|
/** |
|
* Decorate `.compile` method |
|
*/ |
|
|
|
define(this, 'compile', function (ast, options) { |
|
return this.snapdragon.compile.apply(this.snapdragon, arguments); |
|
}); |
|
} |
|
/** |
|
* Expose `Extglob` |
|
*/ |
|
|
|
|
|
module.exports = Extglob; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/extglob/lib/parsers.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/extglob/lib/parsers.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var brackets = __webpack_require__(/*! expand-brackets */ "./node_modules/expand-brackets/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/extglob/node_modules/define-property/index.js"); |
|
|
|
var utils = __webpack_require__(/*! ./utils */ "./node_modules/extglob/lib/utils.js"); |
|
/** |
|
* Characters to use in text regex (we want to "not" match |
|
* characters that are matched by other parsers) |
|
*/ |
|
|
|
|
|
var TEXT_REGEX = '([!@*?+]?\\(|\\)|[*?.+\\\\]|\\[:?(?=.*\\])|:?\\])+'; |
|
var not = utils.createRegex(TEXT_REGEX); |
|
/** |
|
* Extglob parsers |
|
*/ |
|
|
|
function parsers(extglob) { |
|
extglob.state = extglob.state || {}; |
|
/** |
|
* Use `expand-brackets` parsers |
|
*/ |
|
|
|
extglob.use(brackets.parsers); |
|
extglob.parser.sets.paren = extglob.parser.sets.paren || []; |
|
extglob.parser |
|
/** |
|
* Extglob open: "*(" |
|
*/ |
|
.capture('paren.open', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(/^([!@*?+])?\(/); |
|
if (!m) return; |
|
var prev = this.prev(); |
|
var prefix = m[1]; |
|
var val = m[0]; |
|
var open = pos({ |
|
type: 'paren.open', |
|
parsed: parsed, |
|
val: val |
|
}); |
|
var node = pos({ |
|
type: 'paren', |
|
prefix: prefix, |
|
nodes: [open] |
|
}); // if nested negation extglobs, just cancel them out to simplify |
|
|
|
if (prefix === '!' && prev.type === 'paren' && prev.prefix === '!') { |
|
prev.prefix = '@'; |
|
node.prefix = '@'; |
|
} |
|
|
|
define(node, 'rest', this.input); |
|
define(node, 'parsed', parsed); |
|
define(node, 'parent', prev); |
|
define(open, 'parent', node); |
|
this.push('paren', node); |
|
prev.nodes.push(node); |
|
}) |
|
/** |
|
* Extglob close: ")" |
|
*/ |
|
.capture('paren.close', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(/^\)/); |
|
if (!m) return; |
|
var parent = this.pop('paren'); |
|
var node = pos({ |
|
type: 'paren.close', |
|
rest: this.input, |
|
parsed: parsed, |
|
val: m[0] |
|
}); |
|
|
|
if (!this.isType(parent, 'paren')) { |
|
if (this.options.strict) { |
|
throw new Error('missing opening paren: "("'); |
|
} |
|
|
|
node.escaped = true; |
|
return node; |
|
} |
|
|
|
node.prefix = parent.prefix; |
|
parent.nodes.push(node); |
|
define(node, 'parent', parent); |
|
}) |
|
/** |
|
* Escape: "\\." |
|
*/ |
|
.capture('escape', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^\\(.)/); |
|
if (!m) return; |
|
return pos({ |
|
type: 'escape', |
|
val: m[0], |
|
ch: m[1] |
|
}); |
|
}) |
|
/** |
|
* Question marks: "?" |
|
*/ |
|
.capture('qmark', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(/^\?+(?!\()/); |
|
if (!m) return; |
|
extglob.state.metachar = true; |
|
return pos({ |
|
type: 'qmark', |
|
rest: this.input, |
|
parsed: parsed, |
|
val: m[0] |
|
}); |
|
}) |
|
/** |
|
* Character parsers |
|
*/ |
|
.capture('star', /^\*(?!\()/).capture('plus', /^\+(?!\()/).capture('dot', /^\./).capture('text', not); |
|
} |
|
|
|
; |
|
/** |
|
* Expose text regex string |
|
*/ |
|
|
|
module.exports.TEXT_REGEX = TEXT_REGEX; |
|
/** |
|
* Extglob parsers |
|
*/ |
|
|
|
module.exports = parsers; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/extglob/lib/utils.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/extglob/lib/utils.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var regex = __webpack_require__(/*! regex-not */ "./node_modules/regex-not/index.js"); |
|
|
|
var Cache = __webpack_require__(/*! fragment-cache */ "./node_modules/fragment-cache/index.js"); |
|
/** |
|
* Utils |
|
*/ |
|
|
|
|
|
var utils = module.exports; |
|
var cache = utils.cache = new Cache(); |
|
/** |
|
* Cast `val` to an array |
|
* @return {Array} |
|
*/ |
|
|
|
utils.arrayify = function (val) { |
|
if (!Array.isArray(val)) { |
|
return [val]; |
|
} |
|
|
|
return val; |
|
}; |
|
/** |
|
* Memoize a generated regex or function |
|
*/ |
|
|
|
|
|
utils.memoize = function (type, pattern, options, fn) { |
|
var key = utils.createKey(type + pattern, options); |
|
|
|
if (cache.has(type, key)) { |
|
return cache.get(type, key); |
|
} |
|
|
|
var val = fn(pattern, options); |
|
|
|
if (options && options.cache === false) { |
|
return val; |
|
} |
|
|
|
cache.set(type, key, val); |
|
return val; |
|
}; |
|
/** |
|
* Create the key to use for memoization. The key is generated |
|
* by iterating over the options and concatenating key-value pairs |
|
* to the pattern string. |
|
*/ |
|
|
|
|
|
utils.createKey = function (pattern, options) { |
|
var key = pattern; |
|
|
|
if (typeof options === 'undefined') { |
|
return key; |
|
} |
|
|
|
for (var prop in options) { |
|
key += ';' + prop + '=' + String(options[prop]); |
|
} |
|
|
|
return key; |
|
}; |
|
/** |
|
* Create the regex to use for matching text |
|
*/ |
|
|
|
|
|
utils.createRegex = function (str) { |
|
var opts = { |
|
contains: true, |
|
strictClose: false |
|
}; |
|
return regex(str, opts); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/extglob/node_modules/define-property/index.js": |
|
/*!********************************************************************!*\ |
|
!*** ./node_modules/extglob/node_modules/define-property/index.js ***! |
|
\********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* define-property <https://github.com/jonschlinkert/define-property> |
|
* |
|
* Copyright (c) 2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isDescriptor = __webpack_require__(/*! is-descriptor */ "./node_modules/is-descriptor/index.js"); |
|
|
|
module.exports = function defineProperty(obj, prop, val) { |
|
if (_typeof(obj) !== 'object' && typeof obj !== 'function') { |
|
throw new TypeError('expected an object or function.'); |
|
} |
|
|
|
if (typeof prop !== 'string') { |
|
throw new TypeError('expected `prop` to be a string.'); |
|
} |
|
|
|
if (isDescriptor(val) && ('set' in val || 'get' in val)) { |
|
return Object.defineProperty(obj, prop, val); |
|
} |
|
|
|
return Object.defineProperty(obj, prop, { |
|
configurable: true, |
|
enumerable: false, |
|
writable: true, |
|
value: val |
|
}); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/fill-range/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/fill-range/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* fill-range <https://github.com/jonschlinkert/fill-range> |
|
* |
|
* Copyright (c) 2014-2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var util = __webpack_require__(/*! util */ "./node_modules/util/util.js"); |
|
|
|
var isNumber = __webpack_require__(/*! is-number */ "./node_modules/is-number/index.js"); |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
|
|
var repeat = __webpack_require__(/*! repeat-string */ "./node_modules/repeat-string/index.js"); |
|
|
|
var toRegex = __webpack_require__(/*! to-regex-range */ "./node_modules/to-regex-range/index.js"); |
|
/** |
|
* Return a range of numbers or letters. |
|
* |
|
* @param {String} `start` Start of the range |
|
* @param {String} `stop` End of the range |
|
* @param {String} `step` Increment or decrement to use. |
|
* @param {Function} `fn` Custom function to modify each element in the range. |
|
* @return {Array} |
|
*/ |
|
|
|
|
|
function fillRange(start, stop, step, options) { |
|
if (typeof start === 'undefined') { |
|
return []; |
|
} |
|
|
|
if (typeof stop === 'undefined' || start === stop) { |
|
// special case, for handling negative zero |
|
var isString = typeof start === 'string'; |
|
|
|
if (isNumber(start) && !toNumber(start)) { |
|
return [isString ? '0' : 0]; |
|
} |
|
|
|
return [start]; |
|
} |
|
|
|
if (typeof step !== 'number' && typeof step !== 'string') { |
|
options = step; |
|
step = undefined; |
|
} |
|
|
|
if (typeof options === 'function') { |
|
options = { |
|
transform: options |
|
}; |
|
} |
|
|
|
var opts = extend({ |
|
step: step |
|
}, options); |
|
|
|
if (opts.step && !isValidNumber(opts.step)) { |
|
if (opts.strictRanges === true) { |
|
throw new TypeError('expected options.step to be a number'); |
|
} |
|
|
|
return []; |
|
} |
|
|
|
opts.isNumber = isValidNumber(start) && isValidNumber(stop); |
|
|
|
if (!opts.isNumber && !isValid(start, stop)) { |
|
if (opts.strictRanges === true) { |
|
throw new RangeError('invalid range arguments: ' + util.inspect([start, stop])); |
|
} |
|
|
|
return []; |
|
} |
|
|
|
opts.isPadded = isPadded(start) || isPadded(stop); |
|
opts.toString = opts.stringify || typeof opts.step === 'string' || typeof start === 'string' || typeof stop === 'string' || !opts.isNumber; |
|
|
|
if (opts.isPadded) { |
|
opts.maxLength = Math.max(String(start).length, String(stop).length); |
|
} // support legacy minimatch/fill-range options |
|
|
|
|
|
if (typeof opts.optimize === 'boolean') opts.toRegex = opts.optimize; |
|
if (typeof opts.makeRe === 'boolean') opts.toRegex = opts.makeRe; |
|
return expand(start, stop, opts); |
|
} |
|
|
|
function expand(start, stop, options) { |
|
var a = options.isNumber ? toNumber(start) : start.charCodeAt(0); |
|
var b = options.isNumber ? toNumber(stop) : stop.charCodeAt(0); |
|
var step = Math.abs(toNumber(options.step)) || 1; |
|
|
|
if (options.toRegex && step === 1) { |
|
return toRange(a, b, start, stop, options); |
|
} |
|
|
|
var zero = { |
|
greater: [], |
|
lesser: [] |
|
}; |
|
var asc = a < b; |
|
var arr = new Array(Math.round((asc ? b - a : a - b) / step)); |
|
var idx = 0; |
|
|
|
while (asc ? a <= b : a >= b) { |
|
var val = options.isNumber ? a : String.fromCharCode(a); |
|
|
|
if (options.toRegex && (val >= 0 || !options.isNumber)) { |
|
zero.greater.push(val); |
|
} else { |
|
zero.lesser.push(Math.abs(val)); |
|
} |
|
|
|
if (options.isPadded) { |
|
val = zeros(val, options); |
|
} |
|
|
|
if (options.toString) { |
|
val = String(val); |
|
} |
|
|
|
if (typeof options.transform === 'function') { |
|
arr[idx++] = options.transform(val, a, b, step, idx, arr, options); |
|
} else { |
|
arr[idx++] = val; |
|
} |
|
|
|
if (asc) { |
|
a += step; |
|
} else { |
|
a -= step; |
|
} |
|
} |
|
|
|
if (options.toRegex === true) { |
|
return toSequence(arr, zero, options); |
|
} |
|
|
|
return arr; |
|
} |
|
|
|
function toRange(a, b, start, stop, options) { |
|
if (options.isPadded) { |
|
return toRegex(start, stop, options); |
|
} |
|
|
|
if (options.isNumber) { |
|
return toRegex(Math.min(a, b), Math.max(a, b), options); |
|
} |
|
|
|
var start = String.fromCharCode(Math.min(a, b)); |
|
var stop = String.fromCharCode(Math.max(a, b)); |
|
return '[' + start + '-' + stop + ']'; |
|
} |
|
|
|
function toSequence(arr, zeros, options) { |
|
var greater = '', |
|
lesser = ''; |
|
|
|
if (zeros.greater.length) { |
|
greater = zeros.greater.join('|'); |
|
} |
|
|
|
if (zeros.lesser.length) { |
|
lesser = '-(' + zeros.lesser.join('|') + ')'; |
|
} |
|
|
|
var res = greater && lesser ? greater + '|' + lesser : greater || lesser; |
|
|
|
if (options.capture) { |
|
return '(' + res + ')'; |
|
} |
|
|
|
return res; |
|
} |
|
|
|
function zeros(val, options) { |
|
if (options.isPadded) { |
|
var str = String(val); |
|
var len = str.length; |
|
var dash = ''; |
|
|
|
if (str.charAt(0) === '-') { |
|
dash = '-'; |
|
str = str.slice(1); |
|
} |
|
|
|
var diff = options.maxLength - len; |
|
var pad = repeat('0', diff); |
|
val = dash + pad + str; |
|
} |
|
|
|
if (options.stringify) { |
|
return String(val); |
|
} |
|
|
|
return val; |
|
} |
|
|
|
function toNumber(val) { |
|
return Number(val) || 0; |
|
} |
|
|
|
function isPadded(str) { |
|
return /^-?0\d/.test(str); |
|
} |
|
|
|
function isValid(min, max) { |
|
return (isValidNumber(min) || isValidLetter(min)) && (isValidNumber(max) || isValidLetter(max)); |
|
} |
|
|
|
function isValidLetter(ch) { |
|
return typeof ch === 'string' && ch.length === 1 && /^\w+$/.test(ch); |
|
} |
|
|
|
function isValidNumber(n) { |
|
return isNumber(n) && !/\./.test(n); |
|
} |
|
/** |
|
* Expose `fillRange` |
|
* @type {Function} |
|
*/ |
|
|
|
|
|
module.exports = fillRange; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/for-in/index.js": |
|
/*!**************************************!*\ |
|
!*** ./node_modules/for-in/index.js ***! |
|
\**************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* for-in <https://github.com/jonschlinkert/for-in> |
|
* |
|
* Copyright (c) 2014-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
module.exports = function forIn(obj, fn, thisArg) { |
|
for (var key in obj) { |
|
if (fn.call(thisArg, obj[key], key, obj) === false) { |
|
break; |
|
} |
|
} |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/fragment-cache/index.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/fragment-cache/index.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* fragment-cache <https://github.com/jonschlinkert/fragment-cache> |
|
* |
|
* Copyright (c) 2016-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var MapCache = __webpack_require__(/*! map-cache */ "./node_modules/map-cache/index.js"); |
|
/** |
|
* Create a new `FragmentCache` with an optional object to use for `caches`. |
|
* |
|
* ```js |
|
* var fragment = new FragmentCache(); |
|
* ``` |
|
* @name FragmentCache |
|
* @param {String} `cacheName` |
|
* @return {Object} Returns the [map-cache][] instance. |
|
* @api public |
|
*/ |
|
|
|
|
|
function FragmentCache(caches) { |
|
this.caches = caches || {}; |
|
} |
|
/** |
|
* Prototype |
|
*/ |
|
|
|
|
|
FragmentCache.prototype = { |
|
/** |
|
* Get cache `name` from the `fragment.caches` object. Creates a new |
|
* `MapCache` if it doesn't already exist. |
|
* |
|
* ```js |
|
* var cache = fragment.cache('files'); |
|
* console.log(fragment.caches.hasOwnProperty('files')); |
|
* //=> true |
|
* ``` |
|
* @name .cache |
|
* @param {String} `cacheName` |
|
* @return {Object} Returns the [map-cache][] instance. |
|
* @api public |
|
*/ |
|
cache: function cache(cacheName) { |
|
return this.caches[cacheName] || (this.caches[cacheName] = new MapCache()); |
|
}, |
|
|
|
/** |
|
* Set a value for property `key` on cache `name` |
|
* |
|
* ```js |
|
* fragment.set('files', 'somefile.js', new File({path: 'somefile.js'})); |
|
* ``` |
|
* @name .set |
|
* @param {String} `name` |
|
* @param {String} `key` Property name to set |
|
* @param {any} `val` The value of `key` |
|
* @return {Object} The cache instance for chaining |
|
* @api public |
|
*/ |
|
set: function set(cacheName, key, val) { |
|
var cache = this.cache(cacheName); |
|
cache.set(key, val); |
|
return cache; |
|
}, |
|
|
|
/** |
|
* Returns true if a non-undefined value is set for `key` on fragment cache `name`. |
|
* |
|
* ```js |
|
* var cache = fragment.cache('files'); |
|
* cache.set('somefile.js'); |
|
* |
|
* console.log(cache.has('somefile.js')); |
|
* //=> true |
|
* |
|
* console.log(cache.has('some-other-file.js')); |
|
* //=> false |
|
* ``` |
|
* @name .has |
|
* @param {String} `name` Cache name |
|
* @param {String} `key` Optionally specify a property to check for on cache `name` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
has: function has(cacheName, key) { |
|
return typeof this.get(cacheName, key) !== 'undefined'; |
|
}, |
|
|
|
/** |
|
* Get `name`, or if specified, the value of `key`. Invokes the [cache]() method, |
|
* so that cache `name` will be created it doesn't already exist. If `key` is not passed, |
|
* the entire cache (`name`) is returned. |
|
* |
|
* ```js |
|
* var Vinyl = require('vinyl'); |
|
* var cache = fragment.cache('files'); |
|
* cache.set('somefile.js', new Vinyl({path: 'somefile.js'})); |
|
* console.log(cache.get('somefile.js')); |
|
* //=> <File "somefile.js"> |
|
* ``` |
|
* @name .get |
|
* @param {String} `name` |
|
* @return {Object} Returns cache `name`, or the value of `key` if specified |
|
* @api public |
|
*/ |
|
get: function get(name, key) { |
|
var cache = this.cache(name); |
|
|
|
if (typeof key === 'string') { |
|
return cache.get(key); |
|
} |
|
|
|
return cache; |
|
} |
|
}; |
|
/** |
|
* Expose `FragmentCache` |
|
*/ |
|
|
|
exports = module.exports = FragmentCache; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/get-value/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/get-value/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
/*! |
|
* get-value <https://github.com/jonschlinkert/get-value> |
|
* |
|
* Copyright (c) 2014-2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
module.exports = function (obj, prop, a, b, c) { |
|
if (!isObject(obj) || !prop) { |
|
return obj; |
|
} |
|
|
|
prop = toString(prop); // allowing for multiple properties to be passed as |
|
// a string or array, but much faster (3-4x) than doing |
|
// `[].slice.call(arguments)` |
|
|
|
if (a) prop += '.' + toString(a); |
|
if (b) prop += '.' + toString(b); |
|
if (c) prop += '.' + toString(c); |
|
|
|
if (prop in obj) { |
|
return obj[prop]; |
|
} |
|
|
|
var segs = prop.split('.'); |
|
var len = segs.length; |
|
var i = -1; |
|
|
|
while (obj && ++i < len) { |
|
var key = segs[i]; |
|
|
|
while (key[key.length - 1] === '\\') { |
|
key = key.slice(0, -1) + '.' + segs[++i]; |
|
} |
|
|
|
obj = obj[key]; |
|
} |
|
|
|
return obj; |
|
}; |
|
|
|
function isObject(val) { |
|
return val !== null && (_typeof(val) === 'object' || typeof val === 'function'); |
|
} |
|
|
|
function toString(val) { |
|
if (!val) return ''; |
|
|
|
if (Array.isArray(val)) { |
|
return val.join('.'); |
|
} |
|
|
|
return val; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/has-value/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/has-value/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* has-value <https://github.com/jonschlinkert/has-value> |
|
* |
|
* Copyright (c) 2014-2017, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
var hasValues = __webpack_require__(/*! has-values */ "./node_modules/has-values/index.js"); |
|
|
|
var get = __webpack_require__(/*! get-value */ "./node_modules/get-value/index.js"); |
|
|
|
module.exports = function (val, prop) { |
|
return hasValues(isObject(val) && prop ? get(val, prop) : val); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/has-values/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/has-values/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* has-values <https://github.com/jonschlinkert/has-values> |
|
* |
|
* Copyright (c) 2014-2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/has-values/node_modules/kind-of/index.js"); |
|
|
|
var isNumber = __webpack_require__(/*! is-number */ "./node_modules/is-number/index.js"); |
|
|
|
module.exports = function hasValue(val) { |
|
// is-number checks for NaN and other edge cases |
|
if (isNumber(val)) { |
|
return true; |
|
} |
|
|
|
switch (typeOf(val)) { |
|
case 'null': |
|
case 'boolean': |
|
case 'function': |
|
return true; |
|
|
|
case 'string': |
|
case 'arguments': |
|
return val.length !== 0; |
|
|
|
case 'error': |
|
return val.message !== ''; |
|
|
|
case 'array': |
|
var len = val.length; |
|
|
|
if (len === 0) { |
|
return false; |
|
} |
|
|
|
for (var i = 0; i < len; i++) { |
|
if (hasValue(val[i])) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
|
|
case 'file': |
|
case 'map': |
|
case 'set': |
|
return val.size !== 0; |
|
|
|
case 'object': |
|
var keys = Object.keys(val); |
|
|
|
if (keys.length === 0) { |
|
return false; |
|
} |
|
|
|
for (var i = 0; i < keys.length; i++) { |
|
var key = keys[i]; |
|
|
|
if (hasValue(val[key])) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
|
|
default: |
|
{ |
|
return false; |
|
} |
|
} |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/has-values/node_modules/kind-of/index.js": |
|
/*!***************************************************************!*\ |
|
!*** ./node_modules/has-values/node_modules/kind-of/index.js ***! |
|
\***************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isBuffer = __webpack_require__(/*! is-buffer */ "./node_modules/is-buffer/index.js"); |
|
|
|
var toString = Object.prototype.toString; |
|
/** |
|
* Get the native `typeof` a value. |
|
* |
|
* @param {*} `val` |
|
* @return {*} Native javascript type |
|
*/ |
|
|
|
module.exports = function kindOf(val) { |
|
// primitivies |
|
if (typeof val === 'undefined') { |
|
return 'undefined'; |
|
} |
|
|
|
if (val === null) { |
|
return 'null'; |
|
} |
|
|
|
if (val === true || val === false || val instanceof Boolean) { |
|
return 'boolean'; |
|
} |
|
|
|
if (typeof val === 'string' || val instanceof String) { |
|
return 'string'; |
|
} |
|
|
|
if (typeof val === 'number' || val instanceof Number) { |
|
return 'number'; |
|
} // functions |
|
|
|
|
|
if (typeof val === 'function' || val instanceof Function) { |
|
return 'function'; |
|
} // array |
|
|
|
|
|
if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { |
|
return 'array'; |
|
} // check for instances of RegExp and Date before calling `toString` |
|
|
|
|
|
if (val instanceof RegExp) { |
|
return 'regexp'; |
|
} |
|
|
|
if (val instanceof Date) { |
|
return 'date'; |
|
} // other objects |
|
|
|
|
|
var type = toString.call(val); |
|
|
|
if (type === '[object RegExp]') { |
|
return 'regexp'; |
|
} |
|
|
|
if (type === '[object Date]') { |
|
return 'date'; |
|
} |
|
|
|
if (type === '[object Arguments]') { |
|
return 'arguments'; |
|
} |
|
|
|
if (type === '[object Error]') { |
|
return 'error'; |
|
} |
|
|
|
if (type === '[object Promise]') { |
|
return 'promise'; |
|
} // buffer |
|
|
|
|
|
if (isBuffer(val)) { |
|
return 'buffer'; |
|
} // es6: Map, WeakMap, Set, WeakSet |
|
|
|
|
|
if (type === '[object Set]') { |
|
return 'set'; |
|
} |
|
|
|
if (type === '[object WeakSet]') { |
|
return 'weakset'; |
|
} |
|
|
|
if (type === '[object Map]') { |
|
return 'map'; |
|
} |
|
|
|
if (type === '[object WeakMap]') { |
|
return 'weakmap'; |
|
} |
|
|
|
if (type === '[object Symbol]') { |
|
return 'symbol'; |
|
} // typed arrays |
|
|
|
|
|
if (type === '[object Int8Array]') { |
|
return 'int8array'; |
|
} |
|
|
|
if (type === '[object Uint8Array]') { |
|
return 'uint8array'; |
|
} |
|
|
|
if (type === '[object Uint8ClampedArray]') { |
|
return 'uint8clampedarray'; |
|
} |
|
|
|
if (type === '[object Int16Array]') { |
|
return 'int16array'; |
|
} |
|
|
|
if (type === '[object Uint16Array]') { |
|
return 'uint16array'; |
|
} |
|
|
|
if (type === '[object Int32Array]') { |
|
return 'int32array'; |
|
} |
|
|
|
if (type === '[object Uint32Array]') { |
|
return 'uint32array'; |
|
} |
|
|
|
if (type === '[object Float32Array]') { |
|
return 'float32array'; |
|
} |
|
|
|
if (type === '[object Float64Array]') { |
|
return 'float64array'; |
|
} // must be a plain object |
|
|
|
|
|
return 'object'; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-accessor-descriptor/index.js": |
|
/*!******************************************************!*\ |
|
!*** ./node_modules/is-accessor-descriptor/index.js ***! |
|
\******************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-accessor-descriptor <https://github.com/jonschlinkert/is-accessor-descriptor> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/is-accessor-descriptor/node_modules/kind-of/index.js"); // accessor descriptor properties |
|
|
|
|
|
var accessor = { |
|
get: 'function', |
|
set: 'function', |
|
configurable: 'boolean', |
|
enumerable: 'boolean' |
|
}; |
|
|
|
function isAccessorDescriptor(obj, prop) { |
|
if (typeof prop === 'string') { |
|
var val = Object.getOwnPropertyDescriptor(obj, prop); |
|
return typeof val !== 'undefined'; |
|
} |
|
|
|
if (typeOf(obj) !== 'object') { |
|
return false; |
|
} |
|
|
|
if (has(obj, 'value') || has(obj, 'writable')) { |
|
return false; |
|
} |
|
|
|
if (!has(obj, 'get') || typeof obj.get !== 'function') { |
|
return false; |
|
} // tldr: it's valid to have "set" be undefined |
|
// "set" might be undefined if `Object.getOwnPropertyDescriptor` |
|
// was used to get the value, and only `get` was defined by the user |
|
|
|
|
|
if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') { |
|
return false; |
|
} |
|
|
|
for (var key in obj) { |
|
if (!accessor.hasOwnProperty(key)) { |
|
continue; |
|
} |
|
|
|
if (typeOf(obj[key]) === accessor[key]) { |
|
continue; |
|
} |
|
|
|
if (typeof obj[key] !== 'undefined') { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
|
|
function has(obj, key) { |
|
return {}.hasOwnProperty.call(obj, key); |
|
} |
|
/** |
|
* Expose `isAccessorDescriptor` |
|
*/ |
|
|
|
|
|
module.exports = isAccessorDescriptor; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-accessor-descriptor/node_modules/kind-of/index.js": |
|
/*!***************************************************************************!*\ |
|
!*** ./node_modules/is-accessor-descriptor/node_modules/kind-of/index.js ***! |
|
\***************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var toString = Object.prototype.toString; |
|
|
|
module.exports = function kindOf(val) { |
|
if (val === void 0) return 'undefined'; |
|
if (val === null) return 'null'; |
|
|
|
var type = _typeof(val); |
|
|
|
if (type === 'boolean') return 'boolean'; |
|
if (type === 'string') return 'string'; |
|
if (type === 'number') return 'number'; |
|
if (type === 'symbol') return 'symbol'; |
|
|
|
if (type === 'function') { |
|
return isGeneratorFn(val) ? 'generatorfunction' : 'function'; |
|
} |
|
|
|
if (isArray(val)) return 'array'; |
|
if (isBuffer(val)) return 'buffer'; |
|
if (isArguments(val)) return 'arguments'; |
|
if (isDate(val)) return 'date'; |
|
if (isError(val)) return 'error'; |
|
if (isRegexp(val)) return 'regexp'; |
|
|
|
switch (ctorName(val)) { |
|
case 'Symbol': |
|
return 'symbol'; |
|
|
|
case 'Promise': |
|
return 'promise'; |
|
// Set, Map, WeakSet, WeakMap |
|
|
|
case 'WeakMap': |
|
return 'weakmap'; |
|
|
|
case 'WeakSet': |
|
return 'weakset'; |
|
|
|
case 'Map': |
|
return 'map'; |
|
|
|
case 'Set': |
|
return 'set'; |
|
// 8-bit typed arrays |
|
|
|
case 'Int8Array': |
|
return 'int8array'; |
|
|
|
case 'Uint8Array': |
|
return 'uint8array'; |
|
|
|
case 'Uint8ClampedArray': |
|
return 'uint8clampedarray'; |
|
// 16-bit typed arrays |
|
|
|
case 'Int16Array': |
|
return 'int16array'; |
|
|
|
case 'Uint16Array': |
|
return 'uint16array'; |
|
// 32-bit typed arrays |
|
|
|
case 'Int32Array': |
|
return 'int32array'; |
|
|
|
case 'Uint32Array': |
|
return 'uint32array'; |
|
|
|
case 'Float32Array': |
|
return 'float32array'; |
|
|
|
case 'Float64Array': |
|
return 'float64array'; |
|
} |
|
|
|
if (isGeneratorObj(val)) { |
|
return 'generator'; |
|
} // Non-plain objects |
|
|
|
|
|
type = toString.call(val); |
|
|
|
switch (type) { |
|
case '[object Object]': |
|
return 'object'; |
|
// iterators |
|
|
|
case '[object Map Iterator]': |
|
return 'mapiterator'; |
|
|
|
case '[object Set Iterator]': |
|
return 'setiterator'; |
|
|
|
case '[object String Iterator]': |
|
return 'stringiterator'; |
|
|
|
case '[object Array Iterator]': |
|
return 'arrayiterator'; |
|
} // other |
|
|
|
|
|
return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); |
|
}; |
|
|
|
function ctorName(val) { |
|
return val.constructor ? val.constructor.name : null; |
|
} |
|
|
|
function isArray(val) { |
|
if (Array.isArray) return Array.isArray(val); |
|
return val instanceof Array; |
|
} |
|
|
|
function isError(val) { |
|
return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'; |
|
} |
|
|
|
function isDate(val) { |
|
if (val instanceof Date) return true; |
|
return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function'; |
|
} |
|
|
|
function isRegexp(val) { |
|
if (val instanceof RegExp) return true; |
|
return typeof val.flags === 'string' && typeof val.ignoreCase === 'boolean' && typeof val.multiline === 'boolean' && typeof val.global === 'boolean'; |
|
} |
|
|
|
function isGeneratorFn(name, val) { |
|
return ctorName(name) === 'GeneratorFunction'; |
|
} |
|
|
|
function isGeneratorObj(val) { |
|
return typeof val.throw === 'function' && typeof val.return === 'function' && typeof val.next === 'function'; |
|
} |
|
|
|
function isArguments(val) { |
|
try { |
|
if (typeof val.length === 'number' && typeof val.callee === 'function') { |
|
return true; |
|
} |
|
} catch (err) { |
|
if (err.message.indexOf('callee') !== -1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
/** |
|
* If you need to support Safari 5-7 (8-10 yr-old browser), |
|
* take a look at https://github.com/feross/is-buffer |
|
*/ |
|
|
|
|
|
function isBuffer(val) { |
|
if (val.constructor && typeof val.constructor.isBuffer === 'function') { |
|
return val.constructor.isBuffer(val); |
|
} |
|
|
|
return false; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-buffer/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/is-buffer/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/*! |
|
* Determine if an object is a Buffer |
|
* |
|
* @author Feross Aboukhadijeh <https://feross.org> |
|
* @license MIT |
|
*/ |
|
// The _isBuffer check is for Safari 5-7 support, because it's missing |
|
// Object.prototype.constructor. Remove this eventually |
|
module.exports = function (obj) { |
|
return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer); |
|
}; |
|
|
|
function isBuffer(obj) { |
|
return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj); |
|
} // For Node v0.10 support. Remove this eventually. |
|
|
|
|
|
function isSlowBuffer(obj) { |
|
return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-data-descriptor/index.js": |
|
/*!**************************************************!*\ |
|
!*** ./node_modules/is-data-descriptor/index.js ***! |
|
\**************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-data-descriptor <https://github.com/jonschlinkert/is-data-descriptor> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/is-data-descriptor/node_modules/kind-of/index.js"); |
|
|
|
module.exports = function isDataDescriptor(obj, prop) { |
|
// data descriptor properties |
|
var data = { |
|
configurable: 'boolean', |
|
enumerable: 'boolean', |
|
writable: 'boolean' |
|
}; |
|
|
|
if (typeOf(obj) !== 'object') { |
|
return false; |
|
} |
|
|
|
if (typeof prop === 'string') { |
|
var val = Object.getOwnPropertyDescriptor(obj, prop); |
|
return typeof val !== 'undefined'; |
|
} |
|
|
|
if (!('value' in obj) && !('writable' in obj)) { |
|
return false; |
|
} |
|
|
|
for (var key in obj) { |
|
if (key === 'value') continue; |
|
|
|
if (!data.hasOwnProperty(key)) { |
|
continue; |
|
} |
|
|
|
if (typeOf(obj[key]) === data[key]) { |
|
continue; |
|
} |
|
|
|
if (typeof obj[key] !== 'undefined') { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-data-descriptor/node_modules/kind-of/index.js": |
|
/*!***********************************************************************!*\ |
|
!*** ./node_modules/is-data-descriptor/node_modules/kind-of/index.js ***! |
|
\***********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var toString = Object.prototype.toString; |
|
|
|
module.exports = function kindOf(val) { |
|
if (val === void 0) return 'undefined'; |
|
if (val === null) return 'null'; |
|
|
|
var type = _typeof(val); |
|
|
|
if (type === 'boolean') return 'boolean'; |
|
if (type === 'string') return 'string'; |
|
if (type === 'number') return 'number'; |
|
if (type === 'symbol') return 'symbol'; |
|
|
|
if (type === 'function') { |
|
return isGeneratorFn(val) ? 'generatorfunction' : 'function'; |
|
} |
|
|
|
if (isArray(val)) return 'array'; |
|
if (isBuffer(val)) return 'buffer'; |
|
if (isArguments(val)) return 'arguments'; |
|
if (isDate(val)) return 'date'; |
|
if (isError(val)) return 'error'; |
|
if (isRegexp(val)) return 'regexp'; |
|
|
|
switch (ctorName(val)) { |
|
case 'Symbol': |
|
return 'symbol'; |
|
|
|
case 'Promise': |
|
return 'promise'; |
|
// Set, Map, WeakSet, WeakMap |
|
|
|
case 'WeakMap': |
|
return 'weakmap'; |
|
|
|
case 'WeakSet': |
|
return 'weakset'; |
|
|
|
case 'Map': |
|
return 'map'; |
|
|
|
case 'Set': |
|
return 'set'; |
|
// 8-bit typed arrays |
|
|
|
case 'Int8Array': |
|
return 'int8array'; |
|
|
|
case 'Uint8Array': |
|
return 'uint8array'; |
|
|
|
case 'Uint8ClampedArray': |
|
return 'uint8clampedarray'; |
|
// 16-bit typed arrays |
|
|
|
case 'Int16Array': |
|
return 'int16array'; |
|
|
|
case 'Uint16Array': |
|
return 'uint16array'; |
|
// 32-bit typed arrays |
|
|
|
case 'Int32Array': |
|
return 'int32array'; |
|
|
|
case 'Uint32Array': |
|
return 'uint32array'; |
|
|
|
case 'Float32Array': |
|
return 'float32array'; |
|
|
|
case 'Float64Array': |
|
return 'float64array'; |
|
} |
|
|
|
if (isGeneratorObj(val)) { |
|
return 'generator'; |
|
} // Non-plain objects |
|
|
|
|
|
type = toString.call(val); |
|
|
|
switch (type) { |
|
case '[object Object]': |
|
return 'object'; |
|
// iterators |
|
|
|
case '[object Map Iterator]': |
|
return 'mapiterator'; |
|
|
|
case '[object Set Iterator]': |
|
return 'setiterator'; |
|
|
|
case '[object String Iterator]': |
|
return 'stringiterator'; |
|
|
|
case '[object Array Iterator]': |
|
return 'arrayiterator'; |
|
} // other |
|
|
|
|
|
return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); |
|
}; |
|
|
|
function ctorName(val) { |
|
return val.constructor ? val.constructor.name : null; |
|
} |
|
|
|
function isArray(val) { |
|
if (Array.isArray) return Array.isArray(val); |
|
return val instanceof Array; |
|
} |
|
|
|
function isError(val) { |
|
return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'; |
|
} |
|
|
|
function isDate(val) { |
|
if (val instanceof Date) return true; |
|
return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function'; |
|
} |
|
|
|
function isRegexp(val) { |
|
if (val instanceof RegExp) return true; |
|
return typeof val.flags === 'string' && typeof val.ignoreCase === 'boolean' && typeof val.multiline === 'boolean' && typeof val.global === 'boolean'; |
|
} |
|
|
|
function isGeneratorFn(name, val) { |
|
return ctorName(name) === 'GeneratorFunction'; |
|
} |
|
|
|
function isGeneratorObj(val) { |
|
return typeof val.throw === 'function' && typeof val.return === 'function' && typeof val.next === 'function'; |
|
} |
|
|
|
function isArguments(val) { |
|
try { |
|
if (typeof val.length === 'number' && typeof val.callee === 'function') { |
|
return true; |
|
} |
|
} catch (err) { |
|
if (err.message.indexOf('callee') !== -1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
/** |
|
* If you need to support Safari 5-7 (8-10 yr-old browser), |
|
* take a look at https://github.com/feross/is-buffer |
|
*/ |
|
|
|
|
|
function isBuffer(val) { |
|
if (val.constructor && typeof val.constructor.isBuffer === 'function') { |
|
return val.constructor.isBuffer(val); |
|
} |
|
|
|
return false; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-descriptor/index.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/is-descriptor/index.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-descriptor <https://github.com/jonschlinkert/is-descriptor> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/is-descriptor/node_modules/kind-of/index.js"); |
|
|
|
var isAccessor = __webpack_require__(/*! is-accessor-descriptor */ "./node_modules/is-accessor-descriptor/index.js"); |
|
|
|
var isData = __webpack_require__(/*! is-data-descriptor */ "./node_modules/is-data-descriptor/index.js"); |
|
|
|
module.exports = function isDescriptor(obj, key) { |
|
if (typeOf(obj) !== 'object') { |
|
return false; |
|
} |
|
|
|
if ('get' in obj) { |
|
return isAccessor(obj, key); |
|
} |
|
|
|
return isData(obj, key); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-descriptor/node_modules/kind-of/index.js": |
|
/*!******************************************************************!*\ |
|
!*** ./node_modules/is-descriptor/node_modules/kind-of/index.js ***! |
|
\******************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var toString = Object.prototype.toString; |
|
|
|
module.exports = function kindOf(val) { |
|
if (val === void 0) return 'undefined'; |
|
if (val === null) return 'null'; |
|
|
|
var type = _typeof(val); |
|
|
|
if (type === 'boolean') return 'boolean'; |
|
if (type === 'string') return 'string'; |
|
if (type === 'number') return 'number'; |
|
if (type === 'symbol') return 'symbol'; |
|
|
|
if (type === 'function') { |
|
return isGeneratorFn(val) ? 'generatorfunction' : 'function'; |
|
} |
|
|
|
if (isArray(val)) return 'array'; |
|
if (isBuffer(val)) return 'buffer'; |
|
if (isArguments(val)) return 'arguments'; |
|
if (isDate(val)) return 'date'; |
|
if (isError(val)) return 'error'; |
|
if (isRegexp(val)) return 'regexp'; |
|
|
|
switch (ctorName(val)) { |
|
case 'Symbol': |
|
return 'symbol'; |
|
|
|
case 'Promise': |
|
return 'promise'; |
|
// Set, Map, WeakSet, WeakMap |
|
|
|
case 'WeakMap': |
|
return 'weakmap'; |
|
|
|
case 'WeakSet': |
|
return 'weakset'; |
|
|
|
case 'Map': |
|
return 'map'; |
|
|
|
case 'Set': |
|
return 'set'; |
|
// 8-bit typed arrays |
|
|
|
case 'Int8Array': |
|
return 'int8array'; |
|
|
|
case 'Uint8Array': |
|
return 'uint8array'; |
|
|
|
case 'Uint8ClampedArray': |
|
return 'uint8clampedarray'; |
|
// 16-bit typed arrays |
|
|
|
case 'Int16Array': |
|
return 'int16array'; |
|
|
|
case 'Uint16Array': |
|
return 'uint16array'; |
|
// 32-bit typed arrays |
|
|
|
case 'Int32Array': |
|
return 'int32array'; |
|
|
|
case 'Uint32Array': |
|
return 'uint32array'; |
|
|
|
case 'Float32Array': |
|
return 'float32array'; |
|
|
|
case 'Float64Array': |
|
return 'float64array'; |
|
} |
|
|
|
if (isGeneratorObj(val)) { |
|
return 'generator'; |
|
} // Non-plain objects |
|
|
|
|
|
type = toString.call(val); |
|
|
|
switch (type) { |
|
case '[object Object]': |
|
return 'object'; |
|
// iterators |
|
|
|
case '[object Map Iterator]': |
|
return 'mapiterator'; |
|
|
|
case '[object Set Iterator]': |
|
return 'setiterator'; |
|
|
|
case '[object String Iterator]': |
|
return 'stringiterator'; |
|
|
|
case '[object Array Iterator]': |
|
return 'arrayiterator'; |
|
} // other |
|
|
|
|
|
return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); |
|
}; |
|
|
|
function ctorName(val) { |
|
return val.constructor ? val.constructor.name : null; |
|
} |
|
|
|
function isArray(val) { |
|
if (Array.isArray) return Array.isArray(val); |
|
return val instanceof Array; |
|
} |
|
|
|
function isError(val) { |
|
return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'; |
|
} |
|
|
|
function isDate(val) { |
|
if (val instanceof Date) return true; |
|
return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function'; |
|
} |
|
|
|
function isRegexp(val) { |
|
if (val instanceof RegExp) return true; |
|
return typeof val.flags === 'string' && typeof val.ignoreCase === 'boolean' && typeof val.multiline === 'boolean' && typeof val.global === 'boolean'; |
|
} |
|
|
|
function isGeneratorFn(name, val) { |
|
return ctorName(name) === 'GeneratorFunction'; |
|
} |
|
|
|
function isGeneratorObj(val) { |
|
return typeof val.throw === 'function' && typeof val.return === 'function' && typeof val.next === 'function'; |
|
} |
|
|
|
function isArguments(val) { |
|
try { |
|
if (typeof val.length === 'number' && typeof val.callee === 'function') { |
|
return true; |
|
} |
|
} catch (err) { |
|
if (err.message.indexOf('callee') !== -1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
/** |
|
* If you need to support Safari 5-7 (8-10 yr-old browser), |
|
* take a look at https://github.com/feross/is-buffer |
|
*/ |
|
|
|
|
|
function isBuffer(val) { |
|
if (val.constructor && typeof val.constructor.isBuffer === 'function') { |
|
return val.constructor.isBuffer(val); |
|
} |
|
|
|
return false; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-extendable/index.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/is-extendable/index.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-extendable <https://github.com/jonschlinkert/is-extendable> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
module.exports = function isExtendable(val) { |
|
return typeof val !== 'undefined' && val !== null && (_typeof(val) === 'object' || typeof val === 'function'); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-number/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/is-number/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-number <https://github.com/jonschlinkert/is-number> |
|
* |
|
* Copyright (c) 2014-2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/kind-of/index.js"); |
|
|
|
module.exports = function isNumber(num) { |
|
var type = typeOf(num); |
|
|
|
if (type === 'string') { |
|
if (!num.trim()) return false; |
|
} else if (type !== 'number') { |
|
return false; |
|
} |
|
|
|
return num - num + 1 >= 0; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-plain-object/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/is-plain-object/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-plain-object <https://github.com/jonschlinkert/is-plain-object> |
|
* |
|
* Copyright (c) 2014-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
function isObjectObject(o) { |
|
return isObject(o) === true && Object.prototype.toString.call(o) === '[object Object]'; |
|
} |
|
|
|
module.exports = function isPlainObject(o) { |
|
var ctor, prot; |
|
if (isObjectObject(o) === false) return false; // If has modified constructor |
|
|
|
ctor = o.constructor; |
|
if (typeof ctor !== 'function') return false; // If has modified prototype |
|
|
|
prot = ctor.prototype; |
|
if (isObjectObject(prot) === false) return false; // If constructor does not have an Object-specific method |
|
|
|
if (prot.hasOwnProperty('isPrototypeOf') === false) { |
|
return false; |
|
} // Most likely a plain Object |
|
|
|
|
|
return true; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/is-windows/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/is-windows/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
/*! |
|
* is-windows <https://github.com/jonschlinkert/is-windows> |
|
* |
|
* Copyright © 2015-2018, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
(function (factory) { |
|
if (exports && ( false ? undefined : _typeof(exports)) === 'object' && typeof module !== 'undefined') { |
|
module.exports = factory(); |
|
} else if (true) { |
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), |
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? |
|
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), |
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); |
|
} else {} |
|
})(function () { |
|
'use strict'; |
|
|
|
return function isWindows() { |
|
return process && (process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE)); |
|
}; |
|
}); |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/isarray/index.js": |
|
/*!***************************************!*\ |
|
!*** ./node_modules/isarray/index.js ***! |
|
\***************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var toString = {}.toString; |
|
|
|
module.exports = Array.isArray || function (arr) { |
|
return toString.call(arr) == '[object Array]'; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/isobject/index.js": |
|
/*!****************************************!*\ |
|
!*** ./node_modules/isobject/index.js ***! |
|
\****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* isobject <https://github.com/jonschlinkert/isobject> |
|
* |
|
* Copyright (c) 2014-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
module.exports = function isObject(val) { |
|
return val != null && _typeof(val) === 'object' && Array.isArray(val) === false; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/js-tokens/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/js-tokens/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell |
|
// License: MIT. (See LICENSE.) |
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); // This regex comes from regex.coffee, and is inserted here by generate-index.js |
|
// (run `npm run build`). |
|
|
|
exports.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g; |
|
|
|
exports.matchToToken = function (match) { |
|
var token = { |
|
type: "invalid", |
|
value: match[0], |
|
closed: undefined |
|
}; |
|
if (match[1]) token.type = "string", token.closed = !!(match[3] || match[4]);else if (match[5]) token.type = "comment";else if (match[6]) token.type = "comment", token.closed = !!match[7];else if (match[8]) token.type = "regex";else if (match[9]) token.type = "number";else if (match[10]) token.type = "name";else if (match[11]) token.type = "punctuator";else if (match[12]) token.type = "whitespace"; |
|
return token; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/kind-of/index.js": |
|
/*!***************************************!*\ |
|
!*** ./node_modules/kind-of/index.js ***! |
|
\***************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isBuffer = __webpack_require__(/*! is-buffer */ "./node_modules/is-buffer/index.js"); |
|
|
|
var toString = Object.prototype.toString; |
|
/** |
|
* Get the native `typeof` a value. |
|
* |
|
* @param {*} `val` |
|
* @return {*} Native javascript type |
|
*/ |
|
|
|
module.exports = function kindOf(val) { |
|
// primitivies |
|
if (typeof val === 'undefined') { |
|
return 'undefined'; |
|
} |
|
|
|
if (val === null) { |
|
return 'null'; |
|
} |
|
|
|
if (val === true || val === false || val instanceof Boolean) { |
|
return 'boolean'; |
|
} |
|
|
|
if (typeof val === 'string' || val instanceof String) { |
|
return 'string'; |
|
} |
|
|
|
if (typeof val === 'number' || val instanceof Number) { |
|
return 'number'; |
|
} // functions |
|
|
|
|
|
if (typeof val === 'function' || val instanceof Function) { |
|
return 'function'; |
|
} // array |
|
|
|
|
|
if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { |
|
return 'array'; |
|
} // check for instances of RegExp and Date before calling `toString` |
|
|
|
|
|
if (val instanceof RegExp) { |
|
return 'regexp'; |
|
} |
|
|
|
if (val instanceof Date) { |
|
return 'date'; |
|
} // other objects |
|
|
|
|
|
var type = toString.call(val); |
|
|
|
if (type === '[object RegExp]') { |
|
return 'regexp'; |
|
} |
|
|
|
if (type === '[object Date]') { |
|
return 'date'; |
|
} |
|
|
|
if (type === '[object Arguments]') { |
|
return 'arguments'; |
|
} |
|
|
|
if (type === '[object Error]') { |
|
return 'error'; |
|
} // buffer |
|
|
|
|
|
if (isBuffer(val)) { |
|
return 'buffer'; |
|
} // es6: Map, WeakMap, Set, WeakSet |
|
|
|
|
|
if (type === '[object Set]') { |
|
return 'set'; |
|
} |
|
|
|
if (type === '[object WeakSet]') { |
|
return 'weakset'; |
|
} |
|
|
|
if (type === '[object Map]') { |
|
return 'map'; |
|
} |
|
|
|
if (type === '[object WeakMap]') { |
|
return 'weakmap'; |
|
} |
|
|
|
if (type === '[object Symbol]') { |
|
return 'symbol'; |
|
} // typed arrays |
|
|
|
|
|
if (type === '[object Int8Array]') { |
|
return 'int8array'; |
|
} |
|
|
|
if (type === '[object Uint8Array]') { |
|
return 'uint8array'; |
|
} |
|
|
|
if (type === '[object Uint8ClampedArray]') { |
|
return 'uint8clampedarray'; |
|
} |
|
|
|
if (type === '[object Int16Array]') { |
|
return 'int16array'; |
|
} |
|
|
|
if (type === '[object Uint16Array]') { |
|
return 'uint16array'; |
|
} |
|
|
|
if (type === '[object Int32Array]') { |
|
return 'int32array'; |
|
} |
|
|
|
if (type === '[object Uint32Array]') { |
|
return 'uint32array'; |
|
} |
|
|
|
if (type === '[object Float32Array]') { |
|
return 'float32array'; |
|
} |
|
|
|
if (type === '[object Float64Array]') { |
|
return 'float64array'; |
|
} // must be a plain object |
|
|
|
|
|
return 'object'; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/map-cache/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/map-cache/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* map-cache <https://github.com/jonschlinkert/map-cache> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
var hasOwn = Object.prototype.hasOwnProperty; |
|
/** |
|
* Expose `MapCache` |
|
*/ |
|
|
|
module.exports = MapCache; |
|
/** |
|
* Creates a cache object to store key/value pairs. |
|
* |
|
* ```js |
|
* var cache = new MapCache(); |
|
* ``` |
|
* |
|
* @api public |
|
*/ |
|
|
|
function MapCache(data) { |
|
this.__data__ = data || {}; |
|
} |
|
/** |
|
* Adds `value` to `key` on the cache. |
|
* |
|
* ```js |
|
* cache.set('foo', 'bar'); |
|
* ``` |
|
* |
|
* @param {String} `key` The key of the value to cache. |
|
* @param {*} `value` The value to cache. |
|
* @returns {Object} Returns the `Cache` object for chaining. |
|
* @api public |
|
*/ |
|
|
|
|
|
MapCache.prototype.set = function mapSet(key, value) { |
|
if (key !== '__proto__') { |
|
this.__data__[key] = value; |
|
} |
|
|
|
return this; |
|
}; |
|
/** |
|
* Gets the cached value for `key`. |
|
* |
|
* ```js |
|
* cache.get('foo'); |
|
* //=> 'bar' |
|
* ``` |
|
* |
|
* @param {String} `key` The key of the value to get. |
|
* @returns {*} Returns the cached value. |
|
* @api public |
|
*/ |
|
|
|
|
|
MapCache.prototype.get = function mapGet(key) { |
|
return key === '__proto__' ? undefined : this.__data__[key]; |
|
}; |
|
/** |
|
* Checks if a cached value for `key` exists. |
|
* |
|
* ```js |
|
* cache.has('foo'); |
|
* //=> true |
|
* ``` |
|
* |
|
* @param {String} `key` The key of the entry to check. |
|
* @returns {Boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
* @api public |
|
*/ |
|
|
|
|
|
MapCache.prototype.has = function mapHas(key) { |
|
return key !== '__proto__' && hasOwn.call(this.__data__, key); |
|
}; |
|
/** |
|
* Removes `key` and its value from the cache. |
|
* |
|
* ```js |
|
* cache.del('foo'); |
|
* ``` |
|
* @title .del |
|
* @param {String} `key` The key of the value to remove. |
|
* @returns {Boolean} Returns `true` if the entry was removed successfully, else `false`. |
|
* @api public |
|
*/ |
|
|
|
|
|
MapCache.prototype.del = function mapDelete(key) { |
|
return this.has(key) && delete this.__data__[key]; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/map-visit/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/map-visit/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var util = __webpack_require__(/*! util */ "./node_modules/util/util.js"); |
|
|
|
var visit = __webpack_require__(/*! object-visit */ "./node_modules/object-visit/index.js"); |
|
/** |
|
* Map `visit` over an array of objects. |
|
* |
|
* @param {Object} `collection` The context in which to invoke `method` |
|
* @param {String} `method` Name of the method to call on `collection` |
|
* @param {Object} `arr` Array of objects. |
|
*/ |
|
|
|
|
|
module.exports = function mapVisit(collection, method, val) { |
|
if (isObject(val)) { |
|
return visit.apply(null, arguments); |
|
} |
|
|
|
if (!Array.isArray(val)) { |
|
throw new TypeError('expected an array: ' + util.inspect(val)); |
|
} |
|
|
|
var args = [].slice.call(arguments, 3); |
|
|
|
for (var i = 0; i < val.length; i++) { |
|
var ele = val[i]; |
|
|
|
if (isObject(ele)) { |
|
visit.apply(null, [collection, method, ele].concat(args)); |
|
} else { |
|
collection[method].apply(collection, [ele].concat(args)); |
|
} |
|
} |
|
}; |
|
|
|
function isObject(val) { |
|
return val && (typeof val === 'function' || !Array.isArray(val) && _typeof(val) === 'object'); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/micromatch/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
var util = __webpack_require__(/*! util */ "./node_modules/util/util.js"); |
|
|
|
var braces = __webpack_require__(/*! braces */ "./node_modules/braces/index.js"); |
|
|
|
var toRegex = __webpack_require__(/*! to-regex */ "./node_modules/to-regex/index.js"); |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/micromatch/node_modules/extend-shallow/index.js"); |
|
/** |
|
* Local dependencies |
|
*/ |
|
|
|
|
|
var compilers = __webpack_require__(/*! ./lib/compilers */ "./node_modules/micromatch/lib/compilers.js"); |
|
|
|
var parsers = __webpack_require__(/*! ./lib/parsers */ "./node_modules/micromatch/lib/parsers.js"); |
|
|
|
var cache = __webpack_require__(/*! ./lib/cache */ "./node_modules/micromatch/lib/cache.js"); |
|
|
|
var utils = __webpack_require__(/*! ./lib/utils */ "./node_modules/micromatch/lib/utils.js"); |
|
|
|
var MAX_LENGTH = 1024 * 64; |
|
/** |
|
* The main function takes a list of strings and one or more |
|
* glob patterns to use for matching. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm(list, patterns[, options]); |
|
* |
|
* console.log(mm(['a.js', 'a.txt'], ['*.js'])); |
|
* //=> [ 'a.js' ] |
|
* ``` |
|
* @param {Array} `list` A list of strings to match |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Array} Returns an array of matches |
|
* @summary false |
|
* @api public |
|
*/ |
|
|
|
function micromatch(list, patterns, options) { |
|
patterns = utils.arrayify(patterns); |
|
list = utils.arrayify(list); |
|
var len = patterns.length; |
|
|
|
if (list.length === 0 || len === 0) { |
|
return []; |
|
} |
|
|
|
if (len === 1) { |
|
return micromatch.match(list, patterns[0], options); |
|
} |
|
|
|
var omit = []; |
|
var keep = []; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
var pattern = patterns[idx]; |
|
|
|
if (typeof pattern === 'string' && pattern.charCodeAt(0) === 33 |
|
/* ! */ |
|
) { |
|
omit.push.apply(omit, micromatch.match(list, pattern.slice(1), options)); |
|
} else { |
|
keep.push.apply(keep, micromatch.match(list, pattern, options)); |
|
} |
|
} |
|
|
|
var matches = utils.diff(keep, omit); |
|
|
|
if (!options || options.nodupes !== false) { |
|
return utils.unique(matches); |
|
} |
|
|
|
return matches; |
|
} |
|
/** |
|
* Similar to the main function, but `pattern` must be a string. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.match(list, pattern[, options]); |
|
* |
|
* console.log(mm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a')); |
|
* //=> ['a.a', 'a.aa'] |
|
* ``` |
|
* @param {Array} `list` Array of strings to match |
|
* @param {String} `pattern` Glob pattern to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Array} Returns an array of matches |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.match = function (list, pattern, options) { |
|
if (Array.isArray(pattern)) { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
var unixify = utils.unixify(options); |
|
var isMatch = memoize('match', pattern, options, micromatch.matcher); |
|
var matches = []; |
|
list = utils.arrayify(list); |
|
var len = list.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
var ele = list[idx]; |
|
|
|
if (ele === pattern || isMatch(ele)) { |
|
matches.push(utils.value(ele, unixify, options)); |
|
} |
|
} // if no options were passed, uniquify results and return |
|
|
|
|
|
if (typeof options === 'undefined') { |
|
return utils.unique(matches); |
|
} |
|
|
|
if (matches.length === 0) { |
|
if (options.failglob === true) { |
|
throw new Error('no matches found for "' + pattern + '"'); |
|
} |
|
|
|
if (options.nonull === true || options.nullglob === true) { |
|
return [options.unescape ? utils.unescape(pattern) : pattern]; |
|
} |
|
} // if `opts.ignore` was defined, diff ignored list |
|
|
|
|
|
if (options.ignore) { |
|
matches = micromatch.not(matches, options.ignore, options); |
|
} |
|
|
|
return options.nodupes !== false ? utils.unique(matches) : matches; |
|
}; |
|
/** |
|
* Returns true if the specified `string` matches the given glob `pattern`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.isMatch(string, pattern[, options]); |
|
* |
|
* console.log(mm.isMatch('a.a', '*.a')); |
|
* //=> true |
|
* console.log(mm.isMatch('a.b', '*.a')); |
|
* //=> false |
|
* ``` |
|
* @param {String} `string` String to match |
|
* @param {String} `pattern` Glob pattern to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if the string matches the glob pattern. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.isMatch = function (str, pattern, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string: "' + util.inspect(str) + '"'); |
|
} |
|
|
|
if (isEmptyString(str) || isEmptyString(pattern)) { |
|
return false; |
|
} |
|
|
|
var equals = utils.equalsPattern(options); |
|
|
|
if (equals(str)) { |
|
return true; |
|
} |
|
|
|
var isMatch = memoize('isMatch', pattern, options, micromatch.matcher); |
|
return isMatch(str); |
|
}; |
|
/** |
|
* Returns true if some of the strings in the given `list` match any of the |
|
* given glob `patterns`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.some(list, patterns[, options]); |
|
* |
|
* console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); |
|
* // true |
|
* console.log(mm.some(['foo.js'], ['*.js', '!foo.js'])); |
|
* // false |
|
* ``` |
|
* @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if any patterns match `str` |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.some = function (list, patterns, options) { |
|
if (typeof list === 'string') { |
|
list = [list]; |
|
} |
|
|
|
for (var i = 0; i < list.length; i++) { |
|
if (micromatch(list[i], patterns, options).length === 1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Returns true if every string in the given `list` matches |
|
* any of the given glob `patterns`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.every(list, patterns[, options]); |
|
* |
|
* console.log(mm.every('foo.js', ['foo.js'])); |
|
* // true |
|
* console.log(mm.every(['foo.js', 'bar.js'], ['*.js'])); |
|
* // true |
|
* console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); |
|
* // false |
|
* console.log(mm.every(['foo.js'], ['*.js', '!foo.js'])); |
|
* // false |
|
* ``` |
|
* @param {String|Array} `list` The string or array of strings to test. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if any patterns match `str` |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.every = function (list, patterns, options) { |
|
if (typeof list === 'string') { |
|
list = [list]; |
|
} |
|
|
|
for (var i = 0; i < list.length; i++) { |
|
if (micromatch(list[i], patterns, options).length !== 1) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
}; |
|
/** |
|
* Returns true if **any** of the given glob `patterns` |
|
* match the specified `string`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.any(string, patterns[, options]); |
|
* |
|
* console.log(mm.any('a.a', ['b.*', '*.a'])); |
|
* //=> true |
|
* console.log(mm.any('a.a', 'b.*')); |
|
* //=> false |
|
* ``` |
|
* @param {String|Array} `str` The string to test. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if any patterns match `str` |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.any = function (str, patterns, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string: "' + util.inspect(str) + '"'); |
|
} |
|
|
|
if (isEmptyString(str) || isEmptyString(patterns)) { |
|
return false; |
|
} |
|
|
|
if (typeof patterns === 'string') { |
|
patterns = [patterns]; |
|
} |
|
|
|
for (var i = 0; i < patterns.length; i++) { |
|
if (micromatch.isMatch(str, patterns[i], options)) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Returns true if **all** of the given `patterns` match |
|
* the specified string. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.all(string, patterns[, options]); |
|
* |
|
* console.log(mm.all('foo.js', ['foo.js'])); |
|
* // true |
|
* |
|
* console.log(mm.all('foo.js', ['*.js', '!foo.js'])); |
|
* // false |
|
* |
|
* console.log(mm.all('foo.js', ['*.js', 'foo.js'])); |
|
* // true |
|
* |
|
* console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js'])); |
|
* // true |
|
* ``` |
|
* @param {String|Array} `str` The string to test. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if any patterns match `str` |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.all = function (str, patterns, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string: "' + util.inspect(str) + '"'); |
|
} |
|
|
|
if (typeof patterns === 'string') { |
|
patterns = [patterns]; |
|
} |
|
|
|
for (var i = 0; i < patterns.length; i++) { |
|
if (!micromatch.isMatch(str, patterns[i], options)) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
}; |
|
/** |
|
* Returns a list of strings that _**do not match any**_ of the given `patterns`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.not(list, patterns[, options]); |
|
* |
|
* console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a')); |
|
* //=> ['b.b', 'c.c'] |
|
* ``` |
|
* @param {Array} `list` Array of strings to match. |
|
* @param {String|Array} `patterns` One or more glob pattern to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Array} Returns an array of strings that **do not match** the given patterns. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.not = function (list, patterns, options) { |
|
var opts = extend({}, options); |
|
var ignore = opts.ignore; |
|
delete opts.ignore; |
|
var unixify = utils.unixify(opts); |
|
list = utils.arrayify(list).map(unixify); |
|
var matches = utils.diff(list, micromatch(list, patterns, opts)); |
|
|
|
if (ignore) { |
|
matches = utils.diff(matches, micromatch(list, ignore)); |
|
} |
|
|
|
return opts.nodupes !== false ? utils.unique(matches) : matches; |
|
}; |
|
/** |
|
* Returns true if the given `string` contains the given pattern. Similar |
|
* to [.isMatch](#isMatch) but the pattern can match any part of the string. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.contains(string, pattern[, options]); |
|
* |
|
* console.log(mm.contains('aa/bb/cc', '*b')); |
|
* //=> true |
|
* console.log(mm.contains('aa/bb/cc', '*d')); |
|
* //=> false |
|
* ``` |
|
* @param {String} `str` The string to match. |
|
* @param {String|Array} `patterns` Glob pattern to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if the patter matches any part of `str`. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.contains = function (str, patterns, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string: "' + util.inspect(str) + '"'); |
|
} |
|
|
|
if (typeof patterns === 'string') { |
|
if (isEmptyString(str) || isEmptyString(patterns)) { |
|
return false; |
|
} |
|
|
|
var equals = utils.equalsPattern(patterns, options); |
|
|
|
if (equals(str)) { |
|
return true; |
|
} |
|
|
|
var contains = utils.containsPattern(patterns, options); |
|
|
|
if (contains(str)) { |
|
return true; |
|
} |
|
} |
|
|
|
var opts = extend({}, options, { |
|
contains: true |
|
}); |
|
return micromatch.any(str, patterns, opts); |
|
}; |
|
/** |
|
* Returns true if the given pattern and options should enable |
|
* the `matchBase` option. |
|
* @return {Boolean} |
|
* @api private |
|
*/ |
|
|
|
|
|
micromatch.matchBase = function (pattern, options) { |
|
if (pattern && pattern.indexOf('/') !== -1 || !options) return false; |
|
return options.basename === true || options.matchBase === true; |
|
}; |
|
/** |
|
* Filter the keys of the given object with the given `glob` pattern |
|
* and `options`. Does not attempt to match nested keys. If you need this feature, |
|
* use [glob-object][] instead. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.matchKeys(object, patterns[, options]); |
|
* |
|
* var obj = { aa: 'a', ab: 'b', ac: 'c' }; |
|
* console.log(mm.matchKeys(obj, '*b')); |
|
* //=> { ab: 'b' } |
|
* ``` |
|
* @param {Object} `object` The object with keys to filter. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Object} Returns an object with only keys that match the given patterns. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.matchKeys = function (obj, patterns, options) { |
|
if (!utils.isObject(obj)) { |
|
throw new TypeError('expected the first argument to be an object'); |
|
} |
|
|
|
var keys = micromatch(Object.keys(obj), patterns, options); |
|
return utils.pick(obj, keys); |
|
}; |
|
/** |
|
* Returns a memoized matcher function from the given glob `pattern` and `options`. |
|
* The returned function takes a string to match as its only argument and returns |
|
* true if the string is a match. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.matcher(pattern[, options]); |
|
* |
|
* var isMatch = mm.matcher('*.!(*a)'); |
|
* console.log(isMatch('a.a')); |
|
* //=> false |
|
* console.log(isMatch('a.b')); |
|
* //=> true |
|
* ``` |
|
* @param {String} `pattern` Glob pattern |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed. |
|
* @return {Function} Returns a matcher function. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.matcher = function matcher(pattern, options) { |
|
if (Array.isArray(pattern)) { |
|
return compose(pattern, options, matcher); |
|
} // if pattern is a regex |
|
|
|
|
|
if (pattern instanceof RegExp) { |
|
return test(pattern); |
|
} // if pattern is invalid |
|
|
|
|
|
if (!utils.isString(pattern)) { |
|
throw new TypeError('expected pattern to be an array, string or regex'); |
|
} // if pattern is a non-glob string |
|
|
|
|
|
if (!utils.hasSpecialChars(pattern)) { |
|
if (options && options.nocase === true) { |
|
pattern = pattern.toLowerCase(); |
|
} |
|
|
|
return utils.matchPath(pattern, options); |
|
} // if pattern is a glob string |
|
|
|
|
|
var re = micromatch.makeRe(pattern, options); // if `options.matchBase` or `options.basename` is defined |
|
|
|
if (micromatch.matchBase(pattern, options)) { |
|
return utils.matchBasename(re, options); |
|
} |
|
|
|
function test(regex) { |
|
var equals = utils.equalsPattern(options); |
|
var unixify = utils.unixify(options); |
|
return function (str) { |
|
if (equals(str)) { |
|
return true; |
|
} |
|
|
|
if (regex.test(unixify(str))) { |
|
return true; |
|
} |
|
|
|
return false; |
|
}; |
|
} |
|
|
|
var fn = test(re); |
|
Object.defineProperty(fn, 'result', { |
|
configurable: true, |
|
enumerable: false, |
|
value: re.result |
|
}); |
|
return fn; |
|
}; |
|
/** |
|
* Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.capture(pattern, string[, options]); |
|
* |
|
* console.log(mm.capture('test/*.js', 'test/foo.js')); |
|
* //=> ['foo'] |
|
* console.log(mm.capture('test/*.js', 'foo/bar.css')); |
|
* //=> null |
|
* ``` |
|
* @param {String} `pattern` Glob pattern to use for matching. |
|
* @param {String} `string` String to match |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.capture = function (pattern, str, options) { |
|
var re = micromatch.makeRe(pattern, extend({ |
|
capture: true |
|
}, options)); |
|
var unixify = utils.unixify(options); |
|
|
|
function match() { |
|
return function (string) { |
|
var match = re.exec(unixify(string)); |
|
|
|
if (!match) { |
|
return null; |
|
} |
|
|
|
return match.slice(1); |
|
}; |
|
} |
|
|
|
var capture = memoize('capture', pattern, options, match); |
|
return capture(str); |
|
}; |
|
/** |
|
* Create a regular expression from the given glob `pattern`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.makeRe(pattern[, options]); |
|
* |
|
* console.log(mm.makeRe('*.js')); |
|
* //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ |
|
* ``` |
|
* @param {String} `pattern` A glob pattern to convert to regex. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed. |
|
* @return {RegExp} Returns a regex created from the given pattern. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.makeRe = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
if (pattern.length > MAX_LENGTH) { |
|
throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); |
|
} |
|
|
|
function makeRe() { |
|
var result = micromatch.create(pattern, options); |
|
var ast_array = []; |
|
var output = result.map(function (obj) { |
|
obj.ast.state = obj.state; |
|
ast_array.push(obj.ast); |
|
return obj.output; |
|
}); |
|
var regex = toRegex(output.join('|'), options); |
|
Object.defineProperty(regex, 'result', { |
|
configurable: true, |
|
enumerable: false, |
|
value: ast_array |
|
}); |
|
return regex; |
|
} |
|
|
|
return memoize('makeRe', pattern, options, makeRe); |
|
}; |
|
/** |
|
* Expand the given brace `pattern`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* console.log(mm.braces('foo/{a,b}/bar')); |
|
* //=> ['foo/(a|b)/bar'] |
|
* |
|
* console.log(mm.braces('foo/{a,b}/bar', {expand: true})); |
|
* //=> ['foo/(a|b)/bar'] |
|
* ``` |
|
* @param {String} `pattern` String with brace pattern to expand. |
|
* @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options. |
|
* @return {Array} |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.braces = function (pattern, options) { |
|
if (typeof pattern !== 'string' && !Array.isArray(pattern)) { |
|
throw new TypeError('expected pattern to be an array or string'); |
|
} |
|
|
|
function expand() { |
|
if (options && options.nobrace === true || !/\{.*\}/.test(pattern)) { |
|
return utils.arrayify(pattern); |
|
} |
|
|
|
return braces(pattern, options); |
|
} |
|
|
|
return memoize('braces', pattern, options, expand); |
|
}; |
|
/** |
|
* Proxy to the [micromatch.braces](#method), for parity with |
|
* minimatch. |
|
*/ |
|
|
|
|
|
micromatch.braceExpand = function (pattern, options) { |
|
var opts = extend({}, options, { |
|
expand: true |
|
}); |
|
return micromatch.braces(pattern, opts); |
|
}; |
|
/** |
|
* Parses the given glob `pattern` and returns an array of abstract syntax |
|
* trees (ASTs), with the compiled `output` and optional source `map` on |
|
* each AST. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.create(pattern[, options]); |
|
* |
|
* console.log(mm.create('abc/*.js')); |
|
* // [{ options: { source: 'string', sourcemap: true }, |
|
* // state: {}, |
|
* // compilers: |
|
* // { ... }, |
|
* // output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js', |
|
* // ast: |
|
* // { type: 'root', |
|
* // errors: [], |
|
* // nodes: |
|
* // [ ... ], |
|
* // dot: false, |
|
* // input: 'abc/*.js' }, |
|
* // parsingErrors: [], |
|
* // map: |
|
* // { version: 3, |
|
* // sources: [ 'string' ], |
|
* // names: [], |
|
* // mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE', |
|
* // sourcesContent: [ 'abc/*.js' ] }, |
|
* // position: { line: 1, column: 28 }, |
|
* // content: {}, |
|
* // files: {}, |
|
* // idx: 6 }] |
|
* ``` |
|
* @param {String} `pattern` Glob pattern to parse and compile. |
|
* @param {Object} `options` Any [options](#options) to change how parsing and compiling is performed. |
|
* @return {Object} Returns an object with the parsed AST, compiled string and optional source map. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.create = function (pattern, options) { |
|
return memoize('create', pattern, options, function () { |
|
function create(str, opts) { |
|
return micromatch.compile(micromatch.parse(str, opts), opts); |
|
} |
|
|
|
pattern = micromatch.braces(pattern, options); |
|
var len = pattern.length; |
|
var idx = -1; |
|
var res = []; |
|
|
|
while (++idx < len) { |
|
res.push(create(pattern[idx], options)); |
|
} |
|
|
|
return res; |
|
}); |
|
}; |
|
/** |
|
* Parse the given `str` with the given `options`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.parse(pattern[, options]); |
|
* |
|
* var ast = mm.parse('a/{b,c}/d'); |
|
* console.log(ast); |
|
* // { type: 'root', |
|
* // errors: [], |
|
* // input: 'a/{b,c}/d', |
|
* // nodes: |
|
* // [ { type: 'bos', val: '' }, |
|
* // { type: 'text', val: 'a/' }, |
|
* // { type: 'brace', |
|
* // nodes: |
|
* // [ { type: 'brace.open', val: '{' }, |
|
* // { type: 'text', val: 'b,c' }, |
|
* // { type: 'brace.close', val: '}' } ] }, |
|
* // { type: 'text', val: '/d' }, |
|
* // { type: 'eos', val: '' } ] } |
|
* ``` |
|
* @param {String} `str` |
|
* @param {Object} `options` |
|
* @return {Object} Returns an AST |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.parse = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
function parse() { |
|
var snapdragon = utils.instantiate(null, options); |
|
parsers(snapdragon, options); |
|
var ast = snapdragon.parse(pattern, options); |
|
utils.define(ast, 'snapdragon', snapdragon); |
|
ast.input = pattern; |
|
return ast; |
|
} |
|
|
|
return memoize('parse', pattern, options, parse); |
|
}; |
|
/** |
|
* Compile the given `ast` or string with the given `options`. |
|
* |
|
* ```js |
|
* var mm = require('micromatch'); |
|
* mm.compile(ast[, options]); |
|
* |
|
* var ast = mm.parse('a/{b,c}/d'); |
|
* console.log(mm.compile(ast)); |
|
* // { options: { source: 'string' }, |
|
* // state: {}, |
|
* // compilers: |
|
* // { eos: [Function], |
|
* // noop: [Function], |
|
* // bos: [Function], |
|
* // brace: [Function], |
|
* // 'brace.open': [Function], |
|
* // text: [Function], |
|
* // 'brace.close': [Function] }, |
|
* // output: [ 'a/(b|c)/d' ], |
|
* // ast: |
|
* // { ... }, |
|
* // parsingErrors: [] } |
|
* ``` |
|
* @param {Object|String} `ast` |
|
* @param {Object} `options` |
|
* @return {Object} Returns an object that has an `output` property with the compiled string. |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.compile = function (ast, options) { |
|
if (typeof ast === 'string') { |
|
ast = micromatch.parse(ast, options); |
|
} |
|
|
|
return memoize('compile', ast.input, options, function () { |
|
var snapdragon = utils.instantiate(ast, options); |
|
compilers(snapdragon, options); |
|
return snapdragon.compile(ast, options); |
|
}); |
|
}; |
|
/** |
|
* Clear the regex cache. |
|
* |
|
* ```js |
|
* mm.clearCache(); |
|
* ``` |
|
* @api public |
|
*/ |
|
|
|
|
|
micromatch.clearCache = function () { |
|
micromatch.cache.caches = {}; |
|
}; |
|
/** |
|
* Returns true if the given value is effectively an empty string |
|
*/ |
|
|
|
|
|
function isEmptyString(val) { |
|
return String(val) === '' || String(val) === './'; |
|
} |
|
/** |
|
* Compose a matcher function with the given patterns. |
|
* This allows matcher functions to be compiled once and |
|
* called multiple times. |
|
*/ |
|
|
|
|
|
function compose(patterns, options, matcher) { |
|
var matchers; |
|
return memoize('compose', String(patterns), options, function () { |
|
return function (file) { |
|
// delay composition until it's invoked the first time, |
|
// after that it won't be called again |
|
if (!matchers) { |
|
matchers = []; |
|
|
|
for (var i = 0; i < patterns.length; i++) { |
|
matchers.push(matcher(patterns[i], options)); |
|
} |
|
} |
|
|
|
var len = matchers.length; |
|
|
|
while (len--) { |
|
if (matchers[len](file) === true) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
}); |
|
} |
|
/** |
|
* Memoize a generated regex or function. A unique key is generated |
|
* from the `type` (usually method name), the `pattern`, and |
|
* user-defined options. |
|
*/ |
|
|
|
|
|
function memoize(type, pattern, options, fn) { |
|
var key = utils.createKey(type + '=' + pattern, options); |
|
|
|
if (options && options.cache === false) { |
|
return fn(pattern, options); |
|
} |
|
|
|
if (cache.has(type, key)) { |
|
return cache.get(type, key); |
|
} |
|
|
|
var val = fn(pattern, options); |
|
cache.set(type, key, val); |
|
return val; |
|
} |
|
/** |
|
* Expose compiler, parser and cache on `micromatch` |
|
*/ |
|
|
|
|
|
micromatch.compilers = compilers; |
|
micromatch.parsers = parsers; |
|
micromatch.caches = cache.caches; |
|
/** |
|
* Expose `micromatch` |
|
* @type {Function} |
|
*/ |
|
|
|
module.exports = micromatch; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/lib/cache.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/micromatch/lib/cache.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
module.exports = new (__webpack_require__(/*! fragment-cache */ "./node_modules/fragment-cache/index.js"))(); |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/lib/compilers.js": |
|
/*!**************************************************!*\ |
|
!*** ./node_modules/micromatch/lib/compilers.js ***! |
|
\**************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var nanomatch = __webpack_require__(/*! nanomatch */ "./node_modules/nanomatch/index.js"); |
|
|
|
var extglob = __webpack_require__(/*! extglob */ "./node_modules/extglob/index.js"); |
|
|
|
module.exports = function (snapdragon) { |
|
var compilers = snapdragon.compiler.compilers; |
|
var opts = snapdragon.options; // register nanomatch compilers |
|
|
|
snapdragon.use(nanomatch.compilers); // get references to some specific nanomatch compilers before they |
|
// are overridden by the extglob and/or custom compilers |
|
|
|
var escape = compilers.escape; |
|
var qmark = compilers.qmark; |
|
var slash = compilers.slash; |
|
var star = compilers.star; |
|
var text = compilers.text; |
|
var plus = compilers.plus; |
|
var dot = compilers.dot; // register extglob compilers or escape exglobs if disabled |
|
|
|
if (opts.extglob === false || opts.noext === true) { |
|
snapdragon.compiler.use(escapeExtglobs); |
|
} else { |
|
snapdragon.use(extglob.compilers); |
|
} |
|
|
|
snapdragon.use(function () { |
|
this.options.star = this.options.star || function () |
|
/*node*/ |
|
{ |
|
return '[^\\\\/]*?'; |
|
}; |
|
}); // custom micromatch compilers |
|
|
|
snapdragon.compiler // reset referenced compiler |
|
.set('dot', dot).set('escape', escape).set('plus', plus).set('slash', slash).set('qmark', qmark).set('star', star).set('text', text); |
|
}; |
|
|
|
function escapeExtglobs(compiler) { |
|
compiler.set('paren', function (node) { |
|
var val = ''; |
|
visit(node, function (tok) { |
|
if (tok.val) val += (/^\W/.test(tok.val) ? '\\' : '') + tok.val; |
|
}); |
|
return this.emit(val, node); |
|
}); |
|
/** |
|
* Visit `node` with the given `fn` |
|
*/ |
|
|
|
function visit(node, fn) { |
|
return node.nodes ? mapVisit(node.nodes, fn) : fn(node); |
|
} |
|
/** |
|
* Map visit over array of `nodes`. |
|
*/ |
|
|
|
|
|
function mapVisit(nodes, fn) { |
|
var len = nodes.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
visit(nodes[idx], fn); |
|
} |
|
} |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/lib/parsers.js": |
|
/*!************************************************!*\ |
|
!*** ./node_modules/micromatch/lib/parsers.js ***! |
|
\************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var extglob = __webpack_require__(/*! extglob */ "./node_modules/extglob/index.js"); |
|
|
|
var nanomatch = __webpack_require__(/*! nanomatch */ "./node_modules/nanomatch/index.js"); |
|
|
|
var regexNot = __webpack_require__(/*! regex-not */ "./node_modules/regex-not/index.js"); |
|
|
|
var toRegex = __webpack_require__(/*! to-regex */ "./node_modules/to-regex/index.js"); |
|
|
|
var not; |
|
/** |
|
* Characters to use in negation regex (we want to "not" match |
|
* characters that are matched by other parsers) |
|
*/ |
|
|
|
var TEXT = '([!@*?+]?\\(|\\)|\\[:?(?=.*?:?\\])|:?\\]|[*+?!^$.\\\\/])+'; |
|
|
|
var createNotRegex = function createNotRegex(opts) { |
|
return not || (not = textRegex(TEXT)); |
|
}; |
|
/** |
|
* Parsers |
|
*/ |
|
|
|
|
|
module.exports = function (snapdragon) { |
|
var parsers = snapdragon.parser.parsers; // register nanomatch parsers |
|
|
|
snapdragon.use(nanomatch.parsers); // get references to some specific nanomatch parsers before they |
|
// are overridden by the extglob and/or parsers |
|
|
|
var escape = parsers.escape; |
|
var slash = parsers.slash; |
|
var qmark = parsers.qmark; |
|
var plus = parsers.plus; |
|
var star = parsers.star; |
|
var dot = parsers.dot; // register extglob parsers |
|
|
|
snapdragon.use(extglob.parsers); // custom micromatch parsers |
|
|
|
snapdragon.parser.use(function () { |
|
// override "notRegex" created in nanomatch parser |
|
this.notRegex = /^\!+(?!\()/; |
|
}) // reset the referenced parsers |
|
.capture('escape', escape).capture('slash', slash).capture('qmark', qmark).capture('star', star).capture('plus', plus).capture('dot', dot) |
|
/** |
|
* Override `text` parser |
|
*/ |
|
.capture('text', function () { |
|
if (this.isInside('bracket')) return; |
|
var pos = this.position(); |
|
var m = this.match(createNotRegex(this.options)); |
|
if (!m || !m[0]) return; // escape regex boundary characters and simple brackets |
|
|
|
var val = m[0].replace(/([[\]^$])/g, '\\$1'); |
|
return pos({ |
|
type: 'text', |
|
val: val |
|
}); |
|
}); |
|
}; |
|
/** |
|
* Create text regex |
|
*/ |
|
|
|
|
|
function textRegex(pattern) { |
|
var notStr = regexNot.create(pattern, { |
|
contains: true, |
|
strictClose: false |
|
}); |
|
var prefix = '(?:[\\^]|\\\\|'; |
|
return toRegex(prefix + notStr + ')', { |
|
strictClose: false |
|
}); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/lib/utils.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/micromatch/lib/utils.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) { |
|
|
|
var utils = module.exports; |
|
|
|
var path = __webpack_require__(/*! path */ "./node_modules/path-browserify/index.js"); |
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
|
|
var Snapdragon = __webpack_require__(/*! snapdragon */ "./node_modules/snapdragon/index.js"); |
|
|
|
utils.define = __webpack_require__(/*! define-property */ "./node_modules/micromatch/node_modules/define-property/index.js"); |
|
utils.diff = __webpack_require__(/*! arr-diff */ "./node_modules/arr-diff/index.js"); |
|
utils.extend = __webpack_require__(/*! extend-shallow */ "./node_modules/micromatch/node_modules/extend-shallow/index.js"); |
|
utils.pick = __webpack_require__(/*! object.pick */ "./node_modules/object.pick/index.js"); |
|
utils.typeOf = __webpack_require__(/*! kind-of */ "./node_modules/micromatch/node_modules/kind-of/index.js"); |
|
utils.unique = __webpack_require__(/*! array-unique */ "./node_modules/array-unique/index.js"); |
|
/** |
|
* Returns true if the platform is windows, or `path.sep` is `\\`. |
|
* This is defined as a function to allow `path.sep` to be set in unit tests, |
|
* or by the user, if there is a reason to do so. |
|
* @return {Boolean} |
|
*/ |
|
|
|
utils.isWindows = function () { |
|
return path.sep === '\\' || process.platform === 'win32'; |
|
}; |
|
/** |
|
* Get the `Snapdragon` instance to use |
|
*/ |
|
|
|
|
|
utils.instantiate = function (ast, options) { |
|
var snapdragon; // if an instance was created by `.parse`, use that instance |
|
|
|
if (utils.typeOf(ast) === 'object' && ast.snapdragon) { |
|
snapdragon = ast.snapdragon; // if the user supplies an instance on options, use that instance |
|
} else if (utils.typeOf(options) === 'object' && options.snapdragon) { |
|
snapdragon = options.snapdragon; // create a new instance |
|
} else { |
|
snapdragon = new Snapdragon(options); |
|
} |
|
|
|
utils.define(snapdragon, 'parse', function (str, options) { |
|
var parsed = Snapdragon.prototype.parse.apply(this, arguments); |
|
parsed.input = str; // escape unmatched brace/bracket/parens |
|
|
|
var last = this.parser.stack.pop(); |
|
|
|
if (last && this.options.strictErrors !== true) { |
|
var open = last.nodes[0]; |
|
var inner = last.nodes[1]; |
|
|
|
if (last.type === 'bracket') { |
|
if (inner.val.charAt(0) === '[') { |
|
inner.val = '\\' + inner.val; |
|
} |
|
} else { |
|
open.val = '\\' + open.val; |
|
var sibling = open.parent.nodes[1]; |
|
|
|
if (sibling.type === 'star') { |
|
sibling.loose = true; |
|
} |
|
} |
|
} // add non-enumerable parser reference |
|
|
|
|
|
utils.define(parsed, 'parser', this.parser); |
|
return parsed; |
|
}); |
|
return snapdragon; |
|
}; |
|
/** |
|
* Create the key to use for memoization. The key is generated |
|
* by iterating over the options and concatenating key-value pairs |
|
* to the pattern string. |
|
*/ |
|
|
|
|
|
utils.createKey = function (pattern, options) { |
|
if (utils.typeOf(options) !== 'object') { |
|
return pattern; |
|
} |
|
|
|
var val = pattern; |
|
var keys = Object.keys(options); |
|
|
|
for (var i = 0; i < keys.length; i++) { |
|
var key = keys[i]; |
|
val += ';' + key + '=' + String(options[key]); |
|
} |
|
|
|
return val; |
|
}; |
|
/** |
|
* Cast `val` to an array |
|
* @return {Array} |
|
*/ |
|
|
|
|
|
utils.arrayify = function (val) { |
|
if (typeof val === 'string') return [val]; |
|
return val ? Array.isArray(val) ? val : [val] : []; |
|
}; |
|
/** |
|
* Return true if `val` is a non-empty string |
|
*/ |
|
|
|
|
|
utils.isString = function (val) { |
|
return typeof val === 'string'; |
|
}; |
|
/** |
|
* Return true if `val` is a non-empty string |
|
*/ |
|
|
|
|
|
utils.isObject = function (val) { |
|
return utils.typeOf(val) === 'object'; |
|
}; |
|
/** |
|
* Returns true if the given `str` has special characters |
|
*/ |
|
|
|
|
|
utils.hasSpecialChars = function (str) { |
|
return /(?:(?:(^|\/)[!.])|[*?+()|\[\]{}]|[+@]\()/.test(str); |
|
}; |
|
/** |
|
* Escape regex characters in the given string |
|
*/ |
|
|
|
|
|
utils.escapeRegex = function (str) { |
|
return str.replace(/[-[\]{}()^$|*+?.\\\/\s]/g, '\\$&'); |
|
}; |
|
/** |
|
* Normalize slashes in the given filepath. |
|
* |
|
* @param {String} `filepath` |
|
* @return {String} |
|
*/ |
|
|
|
|
|
utils.toPosixPath = function (str) { |
|
return str.replace(/\\+/g, '/'); |
|
}; |
|
/** |
|
* Strip backslashes before special characters in a string. |
|
* |
|
* @param {String} `str` |
|
* @return {String} |
|
*/ |
|
|
|
|
|
utils.unescape = function (str) { |
|
return utils.toPosixPath(str.replace(/\\(?=[*+?!.])/g, '')); |
|
}; |
|
/** |
|
* Strip the prefix from a filepath |
|
* @param {String} `fp` |
|
* @return {String} |
|
*/ |
|
|
|
|
|
utils.stripPrefix = function (str) { |
|
if (str.charAt(0) !== '.') { |
|
return str; |
|
} |
|
|
|
var ch = str.charAt(1); |
|
|
|
if (utils.isSlash(ch)) { |
|
return str.slice(2); |
|
} |
|
|
|
return str; |
|
}; |
|
/** |
|
* Returns true if the given str is an escaped or |
|
* unescaped path character |
|
*/ |
|
|
|
|
|
utils.isSlash = function (str) { |
|
return str === '/' || str === '\\/' || str === '\\' || str === '\\\\'; |
|
}; |
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern matches or contains a `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.matchPath = function (pattern, options) { |
|
return options && options.contains ? utils.containsPattern(pattern, options) : utils.equalsPattern(pattern, options); |
|
}; |
|
/** |
|
* Returns true if the given (original) filepath or unixified path are equal |
|
* to the given pattern. |
|
*/ |
|
|
|
|
|
utils._equals = function (filepath, unixPath, pattern) { |
|
return pattern === filepath || pattern === unixPath; |
|
}; |
|
/** |
|
* Returns true if the given (original) filepath or unixified path contain |
|
* the given pattern. |
|
*/ |
|
|
|
|
|
utils._contains = function (filepath, unixPath, pattern) { |
|
return filepath.indexOf(pattern) !== -1 || unixPath.indexOf(pattern) !== -1; |
|
}; |
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern is the same as a given `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.equalsPattern = function (pattern, options) { |
|
var unixify = utils.unixify(options); |
|
options = options || {}; |
|
return function fn(filepath) { |
|
var equal = utils._equals(filepath, unixify(filepath), pattern); |
|
|
|
if (equal === true || options.nocase !== true) { |
|
return equal; |
|
} |
|
|
|
var lower = filepath.toLowerCase(); |
|
return utils._equals(lower, unixify(lower), pattern); |
|
}; |
|
}; |
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern contains a `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.containsPattern = function (pattern, options) { |
|
var unixify = utils.unixify(options); |
|
options = options || {}; |
|
return function (filepath) { |
|
var contains = utils._contains(filepath, unixify(filepath), pattern); |
|
|
|
if (contains === true || options.nocase !== true) { |
|
return contains; |
|
} |
|
|
|
var lower = filepath.toLowerCase(); |
|
return utils._contains(lower, unixify(lower), pattern); |
|
}; |
|
}; |
|
/** |
|
* Returns a function that returns true if the given |
|
* regex matches the `filename` of a file path. |
|
* |
|
* @param {RegExp} `re` Matching regex |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.matchBasename = function (re) { |
|
return function (filepath) { |
|
return re.test(path.basename(filepath)); |
|
}; |
|
}; |
|
/** |
|
* Determines the filepath to return based on the provided options. |
|
* @return {any} |
|
*/ |
|
|
|
|
|
utils.value = function (str, unixify, options) { |
|
if (options && options.unixify === false) { |
|
return str; |
|
} |
|
|
|
return unixify(str); |
|
}; |
|
/** |
|
* Returns a function that normalizes slashes in a string to forward |
|
* slashes, strips `./` from beginning of paths, and optionally unescapes |
|
* special characters. |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.unixify = function (options) { |
|
options = options || {}; |
|
return function (filepath) { |
|
if (utils.isWindows() || options.unixify === true) { |
|
filepath = utils.toPosixPath(filepath); |
|
} |
|
|
|
if (options.stripPrefix !== false) { |
|
filepath = utils.stripPrefix(filepath); |
|
} |
|
|
|
if (options.unescape === true) { |
|
filepath = utils.unescape(filepath); |
|
} |
|
|
|
return filepath; |
|
}; |
|
}; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/node_modules/define-property/index.js": |
|
/*!***********************************************************************!*\ |
|
!*** ./node_modules/micromatch/node_modules/define-property/index.js ***! |
|
\***********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* define-property <https://github.com/jonschlinkert/define-property> |
|
* |
|
* Copyright (c) 2015-2018, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isobject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
var isDescriptor = __webpack_require__(/*! is-descriptor */ "./node_modules/is-descriptor/index.js"); |
|
|
|
var define = typeof Reflect !== 'undefined' && Reflect.defineProperty ? Reflect.defineProperty : Object.defineProperty; |
|
|
|
module.exports = function defineProperty(obj, key, val) { |
|
if (!isobject(obj) && typeof obj !== 'function' && !Array.isArray(obj)) { |
|
throw new TypeError('expected an object, function, or array'); |
|
} |
|
|
|
if (typeof key !== 'string') { |
|
throw new TypeError('expected "key" to be a string'); |
|
} |
|
|
|
if (isDescriptor(val)) { |
|
define(obj, key, val); |
|
return obj; |
|
} |
|
|
|
define(obj, key, { |
|
configurable: true, |
|
enumerable: false, |
|
writable: true, |
|
value: val |
|
}); |
|
return obj; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/node_modules/extend-shallow/index.js": |
|
/*!**********************************************************************!*\ |
|
!*** ./node_modules/micromatch/node_modules/extend-shallow/index.js ***! |
|
\**********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isExtendable = __webpack_require__(/*! is-extendable */ "./node_modules/micromatch/node_modules/is-extendable/index.js"); |
|
|
|
var assignSymbols = __webpack_require__(/*! assign-symbols */ "./node_modules/assign-symbols/index.js"); |
|
|
|
module.exports = Object.assign || function (obj |
|
/*, objects*/ |
|
) { |
|
if (obj === null || typeof obj === 'undefined') { |
|
throw new TypeError('Cannot convert undefined or null to object'); |
|
} |
|
|
|
if (!isObject(obj)) { |
|
obj = {}; |
|
} |
|
|
|
for (var i = 1; i < arguments.length; i++) { |
|
var val = arguments[i]; |
|
|
|
if (isString(val)) { |
|
val = toObject(val); |
|
} |
|
|
|
if (isObject(val)) { |
|
assign(obj, val); |
|
assignSymbols(obj, val); |
|
} |
|
} |
|
|
|
return obj; |
|
}; |
|
|
|
function assign(a, b) { |
|
for (var key in b) { |
|
if (hasOwn(b, key)) { |
|
a[key] = b[key]; |
|
} |
|
} |
|
} |
|
|
|
function isString(val) { |
|
return val && typeof val === 'string'; |
|
} |
|
|
|
function toObject(str) { |
|
var obj = {}; |
|
|
|
for (var i in str) { |
|
obj[i] = str[i]; |
|
} |
|
|
|
return obj; |
|
} |
|
|
|
function isObject(val) { |
|
return val && _typeof(val) === 'object' || isExtendable(val); |
|
} |
|
/** |
|
* Returns true if the given `key` is an own property of `obj`. |
|
*/ |
|
|
|
|
|
function hasOwn(obj, key) { |
|
return Object.prototype.hasOwnProperty.call(obj, key); |
|
} |
|
|
|
function isEnum(obj, key) { |
|
return Object.prototype.propertyIsEnumerable.call(obj, key); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/node_modules/is-extendable/index.js": |
|
/*!*********************************************************************!*\ |
|
!*** ./node_modules/micromatch/node_modules/is-extendable/index.js ***! |
|
\*********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-extendable <https://github.com/jonschlinkert/is-extendable> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isPlainObject = __webpack_require__(/*! is-plain-object */ "./node_modules/is-plain-object/index.js"); |
|
|
|
module.exports = function isExtendable(val) { |
|
return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/micromatch/node_modules/kind-of/index.js": |
|
/*!***************************************************************!*\ |
|
!*** ./node_modules/micromatch/node_modules/kind-of/index.js ***! |
|
\***************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var toString = Object.prototype.toString; |
|
|
|
module.exports = function kindOf(val) { |
|
if (val === void 0) return 'undefined'; |
|
if (val === null) return 'null'; |
|
|
|
var type = _typeof(val); |
|
|
|
if (type === 'boolean') return 'boolean'; |
|
if (type === 'string') return 'string'; |
|
if (type === 'number') return 'number'; |
|
if (type === 'symbol') return 'symbol'; |
|
|
|
if (type === 'function') { |
|
return isGeneratorFn(val) ? 'generatorfunction' : 'function'; |
|
} |
|
|
|
if (isArray(val)) return 'array'; |
|
if (isBuffer(val)) return 'buffer'; |
|
if (isArguments(val)) return 'arguments'; |
|
if (isDate(val)) return 'date'; |
|
if (isError(val)) return 'error'; |
|
if (isRegexp(val)) return 'regexp'; |
|
|
|
switch (ctorName(val)) { |
|
case 'Symbol': |
|
return 'symbol'; |
|
|
|
case 'Promise': |
|
return 'promise'; |
|
// Set, Map, WeakSet, WeakMap |
|
|
|
case 'WeakMap': |
|
return 'weakmap'; |
|
|
|
case 'WeakSet': |
|
return 'weakset'; |
|
|
|
case 'Map': |
|
return 'map'; |
|
|
|
case 'Set': |
|
return 'set'; |
|
// 8-bit typed arrays |
|
|
|
case 'Int8Array': |
|
return 'int8array'; |
|
|
|
case 'Uint8Array': |
|
return 'uint8array'; |
|
|
|
case 'Uint8ClampedArray': |
|
return 'uint8clampedarray'; |
|
// 16-bit typed arrays |
|
|
|
case 'Int16Array': |
|
return 'int16array'; |
|
|
|
case 'Uint16Array': |
|
return 'uint16array'; |
|
// 32-bit typed arrays |
|
|
|
case 'Int32Array': |
|
return 'int32array'; |
|
|
|
case 'Uint32Array': |
|
return 'uint32array'; |
|
|
|
case 'Float32Array': |
|
return 'float32array'; |
|
|
|
case 'Float64Array': |
|
return 'float64array'; |
|
} |
|
|
|
if (isGeneratorObj(val)) { |
|
return 'generator'; |
|
} // Non-plain objects |
|
|
|
|
|
type = toString.call(val); |
|
|
|
switch (type) { |
|
case '[object Object]': |
|
return 'object'; |
|
// iterators |
|
|
|
case '[object Map Iterator]': |
|
return 'mapiterator'; |
|
|
|
case '[object Set Iterator]': |
|
return 'setiterator'; |
|
|
|
case '[object String Iterator]': |
|
return 'stringiterator'; |
|
|
|
case '[object Array Iterator]': |
|
return 'arrayiterator'; |
|
} // other |
|
|
|
|
|
return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); |
|
}; |
|
|
|
function ctorName(val) { |
|
return val.constructor ? val.constructor.name : null; |
|
} |
|
|
|
function isArray(val) { |
|
if (Array.isArray) return Array.isArray(val); |
|
return val instanceof Array; |
|
} |
|
|
|
function isError(val) { |
|
return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'; |
|
} |
|
|
|
function isDate(val) { |
|
if (val instanceof Date) return true; |
|
return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function'; |
|
} |
|
|
|
function isRegexp(val) { |
|
if (val instanceof RegExp) return true; |
|
return typeof val.flags === 'string' && typeof val.ignoreCase === 'boolean' && typeof val.multiline === 'boolean' && typeof val.global === 'boolean'; |
|
} |
|
|
|
function isGeneratorFn(name, val) { |
|
return ctorName(name) === 'GeneratorFunction'; |
|
} |
|
|
|
function isGeneratorObj(val) { |
|
return typeof val.throw === 'function' && typeof val.return === 'function' && typeof val.next === 'function'; |
|
} |
|
|
|
function isArguments(val) { |
|
try { |
|
if (typeof val.length === 'number' && typeof val.callee === 'function') { |
|
return true; |
|
} |
|
} catch (err) { |
|
if (err.message.indexOf('callee') !== -1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
/** |
|
* If you need to support Safari 5-7 (8-10 yr-old browser), |
|
* take a look at https://github.com/feross/is-buffer |
|
*/ |
|
|
|
|
|
function isBuffer(val) { |
|
if (val.constructor && typeof val.constructor.isBuffer === 'function') { |
|
return val.constructor.isBuffer(val); |
|
} |
|
|
|
return false; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/mixin-deep/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/mixin-deep/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isExtendable = __webpack_require__(/*! is-extendable */ "./node_modules/mixin-deep/node_modules/is-extendable/index.js"); |
|
|
|
var forIn = __webpack_require__(/*! for-in */ "./node_modules/for-in/index.js"); |
|
|
|
function mixinDeep(target, objects) { |
|
var len = arguments.length, |
|
i = 0; |
|
|
|
while (++i < len) { |
|
var obj = arguments[i]; |
|
|
|
if (isObject(obj)) { |
|
forIn(obj, copy, target); |
|
} |
|
} |
|
|
|
return target; |
|
} |
|
/** |
|
* Copy properties from the source object to the |
|
* target object. |
|
* |
|
* @param {*} `val` |
|
* @param {String} `key` |
|
*/ |
|
|
|
|
|
function copy(val, key) { |
|
if (!isValidKey(key)) { |
|
return; |
|
} |
|
|
|
var obj = this[key]; |
|
|
|
if (isObject(val) && isObject(obj)) { |
|
mixinDeep(obj, val); |
|
} else { |
|
this[key] = val; |
|
} |
|
} |
|
/** |
|
* Returns true if `val` is an object or function. |
|
* |
|
* @param {any} val |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
function isObject(val) { |
|
return isExtendable(val) && !Array.isArray(val); |
|
} |
|
/** |
|
* Returns true if `key` is a valid key to use when extending objects. |
|
* |
|
* @param {String} `key` |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
function isValidKey(key) { |
|
return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; |
|
} |
|
|
|
; |
|
/** |
|
* Expose `mixinDeep` |
|
*/ |
|
|
|
module.exports = mixinDeep; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/mixin-deep/node_modules/is-extendable/index.js": |
|
/*!*********************************************************************!*\ |
|
!*** ./node_modules/mixin-deep/node_modules/is-extendable/index.js ***! |
|
\*********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-extendable <https://github.com/jonschlinkert/is-extendable> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isPlainObject = __webpack_require__(/*! is-plain-object */ "./node_modules/is-plain-object/index.js"); |
|
|
|
module.exports = function isExtendable(val) { |
|
return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/nanomatch/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
var util = __webpack_require__(/*! util */ "./node_modules/util/util.js"); |
|
|
|
var toRegex = __webpack_require__(/*! to-regex */ "./node_modules/to-regex/index.js"); |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/nanomatch/node_modules/extend-shallow/index.js"); |
|
/** |
|
* Local dependencies |
|
*/ |
|
|
|
|
|
var compilers = __webpack_require__(/*! ./lib/compilers */ "./node_modules/nanomatch/lib/compilers.js"); |
|
|
|
var parsers = __webpack_require__(/*! ./lib/parsers */ "./node_modules/nanomatch/lib/parsers.js"); |
|
|
|
var cache = __webpack_require__(/*! ./lib/cache */ "./node_modules/nanomatch/lib/cache.js"); |
|
|
|
var utils = __webpack_require__(/*! ./lib/utils */ "./node_modules/nanomatch/lib/utils.js"); |
|
|
|
var MAX_LENGTH = 1024 * 64; |
|
/** |
|
* The main function takes a list of strings and one or more |
|
* glob patterns to use for matching. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm(list, patterns[, options]); |
|
* |
|
* console.log(nm(['a.js', 'a.txt'], ['*.js'])); |
|
* //=> [ 'a.js' ] |
|
* ``` |
|
* @param {Array} `list` A list of strings to match |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Array} Returns an array of matches |
|
* @summary false |
|
* @api public |
|
*/ |
|
|
|
function nanomatch(list, patterns, options) { |
|
patterns = utils.arrayify(patterns); |
|
list = utils.arrayify(list); |
|
var len = patterns.length; |
|
|
|
if (list.length === 0 || len === 0) { |
|
return []; |
|
} |
|
|
|
if (len === 1) { |
|
return nanomatch.match(list, patterns[0], options); |
|
} |
|
|
|
var negated = false; |
|
var omit = []; |
|
var keep = []; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
var pattern = patterns[idx]; |
|
|
|
if (typeof pattern === 'string' && pattern.charCodeAt(0) === 33 |
|
/* ! */ |
|
) { |
|
omit.push.apply(omit, nanomatch.match(list, pattern.slice(1), options)); |
|
negated = true; |
|
} else { |
|
keep.push.apply(keep, nanomatch.match(list, pattern, options)); |
|
} |
|
} // minimatch.match parity |
|
|
|
|
|
if (negated && keep.length === 0) { |
|
if (options && options.unixify === false) { |
|
keep = list.slice(); |
|
} else { |
|
var unixify = utils.unixify(options); |
|
|
|
for (var i = 0; i < list.length; i++) { |
|
keep.push(unixify(list[i])); |
|
} |
|
} |
|
} |
|
|
|
var matches = utils.diff(keep, omit); |
|
|
|
if (!options || options.nodupes !== false) { |
|
return utils.unique(matches); |
|
} |
|
|
|
return matches; |
|
} |
|
/** |
|
* Similar to the main function, but `pattern` must be a string. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.match(list, pattern[, options]); |
|
* |
|
* console.log(nm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a')); |
|
* //=> ['a.a', 'a.aa'] |
|
* ``` |
|
* @param {Array} `list` Array of strings to match |
|
* @param {String} `pattern` Glob pattern to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Array} Returns an array of matches |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.match = function (list, pattern, options) { |
|
if (Array.isArray(pattern)) { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
var unixify = utils.unixify(options); |
|
var isMatch = memoize('match', pattern, options, nanomatch.matcher); |
|
var matches = []; |
|
list = utils.arrayify(list); |
|
var len = list.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
var ele = list[idx]; |
|
|
|
if (ele === pattern || isMatch(ele)) { |
|
matches.push(utils.value(ele, unixify, options)); |
|
} |
|
} // if no options were passed, uniquify results and return |
|
|
|
|
|
if (typeof options === 'undefined') { |
|
return utils.unique(matches); |
|
} |
|
|
|
if (matches.length === 0) { |
|
if (options.failglob === true) { |
|
throw new Error('no matches found for "' + pattern + '"'); |
|
} |
|
|
|
if (options.nonull === true || options.nullglob === true) { |
|
return [options.unescape ? utils.unescape(pattern) : pattern]; |
|
} |
|
} // if `opts.ignore` was defined, diff ignored list |
|
|
|
|
|
if (options.ignore) { |
|
matches = nanomatch.not(matches, options.ignore, options); |
|
} |
|
|
|
return options.nodupes !== false ? utils.unique(matches) : matches; |
|
}; |
|
/** |
|
* Returns true if the specified `string` matches the given glob `pattern`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.isMatch(string, pattern[, options]); |
|
* |
|
* console.log(nm.isMatch('a.a', '*.a')); |
|
* //=> true |
|
* console.log(nm.isMatch('a.b', '*.a')); |
|
* //=> false |
|
* ``` |
|
* @param {String} `string` String to match |
|
* @param {String} `pattern` Glob pattern to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if the string matches the glob pattern. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.isMatch = function (str, pattern, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string: "' + util.inspect(str) + '"'); |
|
} |
|
|
|
if (utils.isEmptyString(str) || utils.isEmptyString(pattern)) { |
|
return false; |
|
} |
|
|
|
var equals = utils.equalsPattern(options); |
|
|
|
if (equals(str)) { |
|
return true; |
|
} |
|
|
|
var isMatch = memoize('isMatch', pattern, options, nanomatch.matcher); |
|
return isMatch(str); |
|
}; |
|
/** |
|
* Returns true if some of the elements in the given `list` match any of the |
|
* given glob `patterns`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.some(list, patterns[, options]); |
|
* |
|
* console.log(nm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); |
|
* // true |
|
* console.log(nm.some(['foo.js'], ['*.js', '!foo.js'])); |
|
* // false |
|
* ``` |
|
* @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if any patterns match `str` |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.some = function (list, patterns, options) { |
|
if (typeof list === 'string') { |
|
list = [list]; |
|
} |
|
|
|
for (var i = 0; i < list.length; i++) { |
|
if (nanomatch(list[i], patterns, options).length === 1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Returns true if every element in the given `list` matches |
|
* at least one of the given glob `patterns`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.every(list, patterns[, options]); |
|
* |
|
* console.log(nm.every('foo.js', ['foo.js'])); |
|
* // true |
|
* console.log(nm.every(['foo.js', 'bar.js'], ['*.js'])); |
|
* // true |
|
* console.log(nm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); |
|
* // false |
|
* console.log(nm.every(['foo.js'], ['*.js', '!foo.js'])); |
|
* // false |
|
* ``` |
|
* @param {String|Array} `list` The string or array of strings to test. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if any patterns match `str` |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.every = function (list, patterns, options) { |
|
if (typeof list === 'string') { |
|
list = [list]; |
|
} |
|
|
|
for (var i = 0; i < list.length; i++) { |
|
if (nanomatch(list[i], patterns, options).length !== 1) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
}; |
|
/** |
|
* Returns true if **any** of the given glob `patterns` |
|
* match the specified `string`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.any(string, patterns[, options]); |
|
* |
|
* console.log(nm.any('a.a', ['b.*', '*.a'])); |
|
* //=> true |
|
* console.log(nm.any('a.a', 'b.*')); |
|
* //=> false |
|
* ``` |
|
* @param {String|Array} `str` The string to test. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if any patterns match `str` |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.any = function (str, patterns, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string: "' + util.inspect(str) + '"'); |
|
} |
|
|
|
if (utils.isEmptyString(str) || utils.isEmptyString(patterns)) { |
|
return false; |
|
} |
|
|
|
if (typeof patterns === 'string') { |
|
patterns = [patterns]; |
|
} |
|
|
|
for (var i = 0; i < patterns.length; i++) { |
|
if (nanomatch.isMatch(str, patterns[i], options)) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Returns true if **all** of the given `patterns` |
|
* match the specified string. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.all(string, patterns[, options]); |
|
* |
|
* console.log(nm.all('foo.js', ['foo.js'])); |
|
* // true |
|
* |
|
* console.log(nm.all('foo.js', ['*.js', '!foo.js'])); |
|
* // false |
|
* |
|
* console.log(nm.all('foo.js', ['*.js', 'foo.js'])); |
|
* // true |
|
* |
|
* console.log(nm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js'])); |
|
* // true |
|
* ``` |
|
* @param {String|Array} `str` The string to test. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if any patterns match `str` |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.all = function (str, patterns, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string: "' + util.inspect(str) + '"'); |
|
} |
|
|
|
if (typeof patterns === 'string') { |
|
patterns = [patterns]; |
|
} |
|
|
|
for (var i = 0; i < patterns.length; i++) { |
|
if (!nanomatch.isMatch(str, patterns[i], options)) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
}; |
|
/** |
|
* Returns a list of strings that _**do not match any**_ of the given `patterns`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.not(list, patterns[, options]); |
|
* |
|
* console.log(nm.not(['a.a', 'b.b', 'c.c'], '*.a')); |
|
* //=> ['b.b', 'c.c'] |
|
* ``` |
|
* @param {Array} `list` Array of strings to match. |
|
* @param {String|Array} `patterns` One or more glob pattern to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Array} Returns an array of strings that **do not match** the given patterns. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.not = function (list, patterns, options) { |
|
var opts = extend({}, options); |
|
var ignore = opts.ignore; |
|
delete opts.ignore; |
|
list = utils.arrayify(list); |
|
var matches = utils.diff(list, nanomatch(list, patterns, opts)); |
|
|
|
if (ignore) { |
|
matches = utils.diff(matches, nanomatch(list, ignore)); |
|
} |
|
|
|
return opts.nodupes !== false ? utils.unique(matches) : matches; |
|
}; |
|
/** |
|
* Returns true if the given `string` contains the given pattern. Similar |
|
* to [.isMatch](#isMatch) but the pattern can match any part of the string. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.contains(string, pattern[, options]); |
|
* |
|
* console.log(nm.contains('aa/bb/cc', '*b')); |
|
* //=> true |
|
* console.log(nm.contains('aa/bb/cc', '*d')); |
|
* //=> false |
|
* ``` |
|
* @param {String} `str` The string to match. |
|
* @param {String|Array} `patterns` Glob pattern to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns true if the patter matches any part of `str`. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.contains = function (str, patterns, options) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string: "' + util.inspect(str) + '"'); |
|
} |
|
|
|
if (typeof patterns === 'string') { |
|
if (utils.isEmptyString(str) || utils.isEmptyString(patterns)) { |
|
return false; |
|
} |
|
|
|
var equals = utils.equalsPattern(patterns, options); |
|
|
|
if (equals(str)) { |
|
return true; |
|
} |
|
|
|
var contains = utils.containsPattern(patterns, options); |
|
|
|
if (contains(str)) { |
|
return true; |
|
} |
|
} |
|
|
|
var opts = extend({}, options, { |
|
contains: true |
|
}); |
|
return nanomatch.any(str, patterns, opts); |
|
}; |
|
/** |
|
* Returns true if the given pattern and options should enable |
|
* the `matchBase` option. |
|
* @return {Boolean} |
|
* @api private |
|
*/ |
|
|
|
|
|
nanomatch.matchBase = function (pattern, options) { |
|
if (pattern && pattern.indexOf('/') !== -1 || !options) return false; |
|
return options.basename === true || options.matchBase === true; |
|
}; |
|
/** |
|
* Filter the keys of the given object with the given `glob` pattern |
|
* and `options`. Does not attempt to match nested keys. If you need this feature, |
|
* use [glob-object][] instead. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.matchKeys(object, patterns[, options]); |
|
* |
|
* var obj = { aa: 'a', ab: 'b', ac: 'c' }; |
|
* console.log(nm.matchKeys(obj, '*b')); |
|
* //=> { ab: 'b' } |
|
* ``` |
|
* @param {Object} `object` The object with keys to filter. |
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Object} Returns an object with only keys that match the given patterns. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.matchKeys = function (obj, patterns, options) { |
|
if (!utils.isObject(obj)) { |
|
throw new TypeError('expected the first argument to be an object'); |
|
} |
|
|
|
var keys = nanomatch(Object.keys(obj), patterns, options); |
|
return utils.pick(obj, keys); |
|
}; |
|
/** |
|
* Returns a memoized matcher function from the given glob `pattern` and `options`. |
|
* The returned function takes a string to match as its only argument and returns |
|
* true if the string is a match. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.matcher(pattern[, options]); |
|
* |
|
* var isMatch = nm.matcher('*.!(*a)'); |
|
* console.log(isMatch('a.a')); |
|
* //=> false |
|
* console.log(isMatch('a.b')); |
|
* //=> true |
|
* ``` |
|
* @param {String} `pattern` Glob pattern |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed. |
|
* @return {Function} Returns a matcher function. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.matcher = function matcher(pattern, options) { |
|
if (utils.isEmptyString(pattern)) { |
|
return function () { |
|
return false; |
|
}; |
|
} |
|
|
|
if (Array.isArray(pattern)) { |
|
return compose(pattern, options, matcher); |
|
} // if pattern is a regex |
|
|
|
|
|
if (pattern instanceof RegExp) { |
|
return test(pattern); |
|
} // if pattern is invalid |
|
|
|
|
|
if (!utils.isString(pattern)) { |
|
throw new TypeError('expected pattern to be an array, string or regex'); |
|
} // if pattern is a non-glob string |
|
|
|
|
|
if (!utils.hasSpecialChars(pattern)) { |
|
if (options && options.nocase === true) { |
|
pattern = pattern.toLowerCase(); |
|
} |
|
|
|
return utils.matchPath(pattern, options); |
|
} // if pattern is a glob string |
|
|
|
|
|
var re = nanomatch.makeRe(pattern, options); // if `options.matchBase` or `options.basename` is defined |
|
|
|
if (nanomatch.matchBase(pattern, options)) { |
|
return utils.matchBasename(re, options); |
|
} |
|
|
|
function test(regex) { |
|
var equals = utils.equalsPattern(options); |
|
var unixify = utils.unixify(options); |
|
return function (str) { |
|
if (equals(str)) { |
|
return true; |
|
} |
|
|
|
if (regex.test(unixify(str))) { |
|
return true; |
|
} |
|
|
|
return false; |
|
}; |
|
} // create matcher function |
|
|
|
|
|
var matcherFn = test(re); // set result object from compiler on matcher function, |
|
// as a non-enumerable property. useful for debugging |
|
|
|
utils.define(matcherFn, 'result', re.result); |
|
return matcherFn; |
|
}; |
|
/** |
|
* Returns an array of matches captured by `pattern` in `string, or |
|
* `null` if the pattern did not match. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.capture(pattern, string[, options]); |
|
* |
|
* console.log(nm.capture('test/*.js', 'test/foo.js')); |
|
* //=> ['foo'] |
|
* console.log(nm.capture('test/*.js', 'foo/bar.css')); |
|
* //=> null |
|
* ``` |
|
* @param {String} `pattern` Glob pattern to use for matching. |
|
* @param {String} `string` String to match |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed |
|
* @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.capture = function (pattern, str, options) { |
|
var re = nanomatch.makeRe(pattern, extend({ |
|
capture: true |
|
}, options)); |
|
var unixify = utils.unixify(options); |
|
|
|
function match() { |
|
return function (string) { |
|
var match = re.exec(unixify(string)); |
|
|
|
if (!match) { |
|
return null; |
|
} |
|
|
|
return match.slice(1); |
|
}; |
|
} |
|
|
|
var capture = memoize('capture', pattern, options, match); |
|
return capture(str); |
|
}; |
|
/** |
|
* Create a regular expression from the given glob `pattern`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.makeRe(pattern[, options]); |
|
* |
|
* console.log(nm.makeRe('*.js')); |
|
* //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ |
|
* ``` |
|
* @param {String} `pattern` A glob pattern to convert to regex. |
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed. |
|
* @return {RegExp} Returns a regex created from the given pattern. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.makeRe = function (pattern, options) { |
|
if (pattern instanceof RegExp) { |
|
return pattern; |
|
} |
|
|
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected pattern to be a string'); |
|
} |
|
|
|
if (pattern.length > MAX_LENGTH) { |
|
throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); |
|
} |
|
|
|
function makeRe() { |
|
var opts = utils.extend({ |
|
wrap: false |
|
}, options); |
|
var result = nanomatch.create(pattern, opts); |
|
var regex = toRegex(result.output, opts); |
|
utils.define(regex, 'result', result); |
|
return regex; |
|
} |
|
|
|
return memoize('makeRe', pattern, options, makeRe); |
|
}; |
|
/** |
|
* Parses the given glob `pattern` and returns an object with the compiled `output` |
|
* and optional source `map`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.create(pattern[, options]); |
|
* |
|
* console.log(nm.create('abc/*.js')); |
|
* // { options: { source: 'string', sourcemap: true }, |
|
* // state: {}, |
|
* // compilers: |
|
* // { ... }, |
|
* // output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js', |
|
* // ast: |
|
* // { type: 'root', |
|
* // errors: [], |
|
* // nodes: |
|
* // [ ... ], |
|
* // dot: false, |
|
* // input: 'abc/*.js' }, |
|
* // parsingErrors: [], |
|
* // map: |
|
* // { version: 3, |
|
* // sources: [ 'string' ], |
|
* // names: [], |
|
* // mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE', |
|
* // sourcesContent: [ 'abc/*.js' ] }, |
|
* // position: { line: 1, column: 28 }, |
|
* // content: {}, |
|
* // files: {}, |
|
* // idx: 6 } |
|
* ``` |
|
* @param {String} `pattern` Glob pattern to parse and compile. |
|
* @param {Object} `options` Any [options](#options) to change how parsing and compiling is performed. |
|
* @return {Object} Returns an object with the parsed AST, compiled string and optional source map. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.create = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
function create() { |
|
return nanomatch.compile(nanomatch.parse(pattern, options), options); |
|
} |
|
|
|
return memoize('create', pattern, options, create); |
|
}; |
|
/** |
|
* Parse the given `str` with the given `options`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.parse(pattern[, options]); |
|
* |
|
* var ast = nm.parse('a/{b,c}/d'); |
|
* console.log(ast); |
|
* // { type: 'root', |
|
* // errors: [], |
|
* // input: 'a/{b,c}/d', |
|
* // nodes: |
|
* // [ { type: 'bos', val: '' }, |
|
* // { type: 'text', val: 'a/' }, |
|
* // { type: 'brace', |
|
* // nodes: |
|
* // [ { type: 'brace.open', val: '{' }, |
|
* // { type: 'text', val: 'b,c' }, |
|
* // { type: 'brace.close', val: '}' } ] }, |
|
* // { type: 'text', val: '/d' }, |
|
* // { type: 'eos', val: '' } ] } |
|
* ``` |
|
* @param {String} `str` |
|
* @param {Object} `options` |
|
* @return {Object} Returns an AST |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.parse = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
function parse() { |
|
var snapdragon = utils.instantiate(null, options); |
|
parsers(snapdragon, options); |
|
var ast = snapdragon.parse(pattern, options); |
|
utils.define(ast, 'snapdragon', snapdragon); |
|
ast.input = pattern; |
|
return ast; |
|
} |
|
|
|
return memoize('parse', pattern, options, parse); |
|
}; |
|
/** |
|
* Compile the given `ast` or string with the given `options`. |
|
* |
|
* ```js |
|
* var nm = require('nanomatch'); |
|
* nm.compile(ast[, options]); |
|
* |
|
* var ast = nm.parse('a/{b,c}/d'); |
|
* console.log(nm.compile(ast)); |
|
* // { options: { source: 'string' }, |
|
* // state: {}, |
|
* // compilers: |
|
* // { eos: [Function], |
|
* // noop: [Function], |
|
* // bos: [Function], |
|
* // brace: [Function], |
|
* // 'brace.open': [Function], |
|
* // text: [Function], |
|
* // 'brace.close': [Function] }, |
|
* // output: [ 'a/(b|c)/d' ], |
|
* // ast: |
|
* // { ... }, |
|
* // parsingErrors: [] } |
|
* ``` |
|
* @param {Object|String} `ast` |
|
* @param {Object} `options` |
|
* @return {Object} Returns an object that has an `output` property with the compiled string. |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.compile = function (ast, options) { |
|
if (typeof ast === 'string') { |
|
ast = nanomatch.parse(ast, options); |
|
} |
|
|
|
function compile() { |
|
var snapdragon = utils.instantiate(ast, options); |
|
compilers(snapdragon, options); |
|
return snapdragon.compile(ast, options); |
|
} |
|
|
|
return memoize('compile', ast.input, options, compile); |
|
}; |
|
/** |
|
* Clear the regex cache. |
|
* |
|
* ```js |
|
* nm.clearCache(); |
|
* ``` |
|
* @api public |
|
*/ |
|
|
|
|
|
nanomatch.clearCache = function () { |
|
nanomatch.cache.__data__ = {}; |
|
}; |
|
/** |
|
* Compose a matcher function with the given patterns. |
|
* This allows matcher functions to be compiled once and |
|
* called multiple times. |
|
*/ |
|
|
|
|
|
function compose(patterns, options, matcher) { |
|
var matchers; |
|
return memoize('compose', String(patterns), options, function () { |
|
return function (file) { |
|
// delay composition until it's invoked the first time, |
|
// after that it won't be called again |
|
if (!matchers) { |
|
matchers = []; |
|
|
|
for (var i = 0; i < patterns.length; i++) { |
|
matchers.push(matcher(patterns[i], options)); |
|
} |
|
} |
|
|
|
var len = matchers.length; |
|
|
|
while (len--) { |
|
if (matchers[len](file) === true) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
}); |
|
} |
|
/** |
|
* Memoize a generated regex or function. A unique key is generated |
|
* from the `type` (usually method name), the `pattern`, and |
|
* user-defined options. |
|
*/ |
|
|
|
|
|
function memoize(type, pattern, options, fn) { |
|
var key = utils.createKey(type + '=' + pattern, options); |
|
|
|
if (options && options.cache === false) { |
|
return fn(pattern, options); |
|
} |
|
|
|
if (cache.has(type, key)) { |
|
return cache.get(type, key); |
|
} |
|
|
|
var val = fn(pattern, options); |
|
cache.set(type, key, val); |
|
return val; |
|
} |
|
/** |
|
* Expose compiler, parser and cache on `nanomatch` |
|
*/ |
|
|
|
|
|
nanomatch.compilers = compilers; |
|
nanomatch.parsers = parsers; |
|
nanomatch.cache = cache; |
|
/** |
|
* Expose `nanomatch` |
|
* @type {Function} |
|
*/ |
|
|
|
module.exports = nanomatch; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/lib/cache.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/nanomatch/lib/cache.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
module.exports = new (__webpack_require__(/*! fragment-cache */ "./node_modules/fragment-cache/index.js"))(); |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/lib/compilers.js": |
|
/*!*************************************************!*\ |
|
!*** ./node_modules/nanomatch/lib/compilers.js ***! |
|
\*************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* Nanomatch compilers |
|
*/ |
|
|
|
module.exports = function (nanomatch, options) { |
|
function slash() { |
|
if (options && typeof options.slash === 'string') { |
|
return options.slash; |
|
} |
|
|
|
if (options && typeof options.slash === 'function') { |
|
return options.slash.call(nanomatch); |
|
} |
|
|
|
return '\\\\/'; |
|
} |
|
|
|
function star() { |
|
if (options && typeof options.star === 'string') { |
|
return options.star; |
|
} |
|
|
|
if (options && typeof options.star === 'function') { |
|
return options.star.call(nanomatch); |
|
} |
|
|
|
return '[^' + slash() + ']*?'; |
|
} |
|
|
|
var ast = nanomatch.ast = nanomatch.parser.ast; |
|
ast.state = nanomatch.parser.state; |
|
nanomatch.compiler.state = ast.state; |
|
nanomatch.compiler |
|
/** |
|
* Negation / escaping |
|
*/ |
|
.set('not', function (node) { |
|
var prev = this.prev(); |
|
|
|
if (this.options.nonegate === true || prev.type !== 'bos') { |
|
return this.emit('\\' + node.val, node); |
|
} |
|
|
|
return this.emit(node.val, node); |
|
}).set('escape', function (node) { |
|
if (this.options.unescape && /^[-\w_.]/.test(node.val)) { |
|
return this.emit(node.val, node); |
|
} |
|
|
|
return this.emit('\\' + node.val, node); |
|
}).set('quoted', function (node) { |
|
return this.emit(node.val, node); |
|
}) |
|
/** |
|
* Regex |
|
*/ |
|
.set('dollar', function (node) { |
|
if (node.parent.type === 'bracket') { |
|
return this.emit(node.val, node); |
|
} |
|
|
|
return this.emit('\\' + node.val, node); |
|
}) |
|
/** |
|
* Dot: "." |
|
*/ |
|
.set('dot', function (node) { |
|
if (node.dotfiles === true) this.dotfiles = true; |
|
return this.emit('\\' + node.val, node); |
|
}) |
|
/** |
|
* Slashes: "/" and "\" |
|
*/ |
|
.set('backslash', function (node) { |
|
return this.emit(node.val, node); |
|
}).set('slash', function (node, nodes, i) { |
|
var val = '[' + slash() + ']'; |
|
var parent = node.parent; |
|
var prev = this.prev(); // set "node.hasSlash" to true on all ancestor parens nodes |
|
|
|
while (parent.type === 'paren' && !parent.hasSlash) { |
|
parent.hasSlash = true; |
|
parent = parent.parent; |
|
} |
|
|
|
if (prev.addQmark) { |
|
val += '?'; |
|
} // word boundary |
|
|
|
|
|
if (node.rest.slice(0, 2) === '\\b') { |
|
return this.emit(val, node); |
|
} // globstars |
|
|
|
|
|
if (node.parsed === '**' || node.parsed === './**') { |
|
this.output = '(?:' + this.output; |
|
return this.emit(val + ')?', node); |
|
} // negation |
|
|
|
|
|
if (node.parsed === '!**' && this.options.nonegate !== true) { |
|
return this.emit(val + '?\\b', node); |
|
} |
|
|
|
return this.emit(val, node); |
|
}) |
|
/** |
|
* Square brackets |
|
*/ |
|
.set('bracket', function (node) { |
|
var close = node.close; |
|
var open = !node.escaped ? '[' : '\\['; |
|
var negated = node.negated; |
|
var inner = node.inner; |
|
var val = node.val; |
|
|
|
if (node.escaped === true) { |
|
inner = inner.replace(/\\?(\W)/g, '\\$1'); |
|
negated = ''; |
|
} |
|
|
|
if (inner === ']-') { |
|
inner = '\\]\\-'; |
|
} |
|
|
|
if (negated && inner.indexOf('.') === -1) { |
|
inner += '.'; |
|
} |
|
|
|
if (negated && inner.indexOf('/') === -1) { |
|
inner += '/'; |
|
} |
|
|
|
val = open + negated + inner + close; |
|
return this.emit(val, node); |
|
}) |
|
/** |
|
* Square: "[.]" (only matches a single character in brackets) |
|
*/ |
|
.set('square', function (node) { |
|
var val = (/^\W/.test(node.val) ? '\\' : '') + node.val; |
|
return this.emit(val, node); |
|
}) |
|
/** |
|
* Question mark: "?" |
|
*/ |
|
.set('qmark', function (node) { |
|
var prev = this.prev(); // don't use "slash" variable so that we always avoid |
|
// matching backslashes and slashes with a qmark |
|
|
|
var val = '[^.\\\\/]'; |
|
|
|
if (this.options.dot || prev.type !== 'bos' && prev.type !== 'slash') { |
|
val = '[^\\\\/]'; |
|
} |
|
|
|
if (node.parsed.slice(-1) === '(') { |
|
var ch = node.rest.charAt(0); |
|
|
|
if (ch === '!' || ch === '=' || ch === ':') { |
|
return this.emit(node.val, node); |
|
} |
|
} |
|
|
|
if (node.val.length > 1) { |
|
val += '{' + node.val.length + '}'; |
|
} |
|
|
|
return this.emit(val, node); |
|
}) |
|
/** |
|
* Plus |
|
*/ |
|
.set('plus', function (node) { |
|
var prev = node.parsed.slice(-1); |
|
|
|
if (prev === ']' || prev === ')') { |
|
return this.emit(node.val, node); |
|
} |
|
|
|
if (!this.output || /[?*+]/.test(ch) && node.parent.type !== 'bracket') { |
|
return this.emit('\\+', node); |
|
} |
|
|
|
var ch = this.output.slice(-1); |
|
|
|
if (/\w/.test(ch) && !node.inside) { |
|
return this.emit('+\\+?', node); |
|
} |
|
|
|
return this.emit('+', node); |
|
}) |
|
/** |
|
* globstar: '**' |
|
*/ |
|
.set('globstar', function (node, nodes, i) { |
|
if (!this.output) { |
|
this.state.leadingGlobstar = true; |
|
} |
|
|
|
var prev = this.prev(); |
|
var before = this.prev(2); |
|
var next = this.next(); |
|
var after = this.next(2); |
|
var type = prev.type; |
|
var val = node.val; |
|
|
|
if (prev.type === 'slash' && next.type === 'slash') { |
|
if (before.type === 'text') { |
|
this.output += '?'; |
|
|
|
if (after.type !== 'text') { |
|
this.output += '\\b'; |
|
} |
|
} |
|
} |
|
|
|
var parsed = node.parsed; |
|
|
|
if (parsed.charAt(0) === '!') { |
|
parsed = parsed.slice(1); |
|
} |
|
|
|
var isInside = node.isInside.paren || node.isInside.brace; |
|
|
|
if (parsed && type !== 'slash' && type !== 'bos' && !isInside) { |
|
val = star(); |
|
} else { |
|
val = this.options.dot !== true ? '(?:(?!(?:[' + slash() + ']|^)\\.).)*?' : '(?:(?!(?:[' + slash() + ']|^)(?:\\.{1,2})($|[' + slash() + ']))(?!\\.{2}).)*?'; |
|
} |
|
|
|
if ((type === 'slash' || type === 'bos') && this.options.dot !== true) { |
|
val = '(?!\\.)' + val; |
|
} |
|
|
|
if (prev.type === 'slash' && next.type === 'slash' && before.type !== 'text') { |
|
if (after.type === 'text' || after.type === 'star') { |
|
node.addQmark = true; |
|
} |
|
} |
|
|
|
if (this.options.capture) { |
|
val = '(' + val + ')'; |
|
} |
|
|
|
return this.emit(val, node); |
|
}) |
|
/** |
|
* Star: "*" |
|
*/ |
|
.set('star', function (node, nodes, i) { |
|
var prior = nodes[i - 2] || {}; |
|
var prev = this.prev(); |
|
var next = this.next(); |
|
var type = prev.type; |
|
|
|
function isStart(n) { |
|
return n.type === 'bos' || n.type === 'slash'; |
|
} |
|
|
|
if (this.output === '' && this.options.contains !== true) { |
|
this.output = '(?![' + slash() + '])'; |
|
} |
|
|
|
if (type === 'bracket' && this.options.bash === false) { |
|
var str = next && next.type === 'bracket' ? star() : '*?'; |
|
|
|
if (!prev.nodes || prev.nodes[1].type !== 'posix') { |
|
return this.emit(str, node); |
|
} |
|
} |
|
|
|
var prefix = !this.dotfiles && type !== 'text' && type !== 'escape' ? this.options.dot ? '(?!(?:^|[' + slash() + '])\\.{1,2}(?:$|[' + slash() + ']))' : '(?!\\.)' : ''; |
|
|
|
if (isStart(prev) || isStart(prior) && type === 'not') { |
|
if (prefix !== '(?!\\.)') { |
|
prefix += '(?!(\\.{2}|\\.[' + slash() + ']))(?=.)'; |
|
} else { |
|
prefix += '(?=.)'; |
|
} |
|
} else if (prefix === '(?!\\.)') { |
|
prefix = ''; |
|
} |
|
|
|
if (prev.type === 'not' && prior.type === 'bos' && this.options.dot === true) { |
|
this.output = '(?!\\.)' + this.output; |
|
} |
|
|
|
var output = prefix + star(); |
|
|
|
if (this.options.capture) { |
|
output = '(' + output + ')'; |
|
} |
|
|
|
return this.emit(output, node); |
|
}) |
|
/** |
|
* Text |
|
*/ |
|
.set('text', function (node) { |
|
return this.emit(node.val, node); |
|
}) |
|
/** |
|
* End-of-string |
|
*/ |
|
.set('eos', function (node) { |
|
var prev = this.prev(); |
|
var val = node.val; |
|
this.output = '(?:\\.[' + slash() + '](?=.))?' + this.output; |
|
|
|
if (this.state.metachar && prev.type !== 'qmark' && prev.type !== 'slash') { |
|
val += this.options.contains ? '[' + slash() + ']?' : '(?:[' + slash() + ']|$)'; |
|
} |
|
|
|
return this.emit(val, node); |
|
}); |
|
/** |
|
* Allow custom compilers to be passed on options |
|
*/ |
|
|
|
if (options && typeof options.compilers === 'function') { |
|
options.compilers(nanomatch.compiler); |
|
} |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/lib/parsers.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/nanomatch/lib/parsers.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var regexNot = __webpack_require__(/*! regex-not */ "./node_modules/regex-not/index.js"); |
|
|
|
var toRegex = __webpack_require__(/*! to-regex */ "./node_modules/to-regex/index.js"); |
|
/** |
|
* Characters to use in negation regex (we want to "not" match |
|
* characters that are matched by other parsers) |
|
*/ |
|
|
|
|
|
var cached; |
|
var NOT_REGEX = '[\\[!*+?$^"\'.\\\\/]+'; |
|
var not = createTextRegex(NOT_REGEX); |
|
/** |
|
* Nanomatch parsers |
|
*/ |
|
|
|
module.exports = function (nanomatch, options) { |
|
var parser = nanomatch.parser; |
|
var opts = parser.options; |
|
parser.state = { |
|
slashes: 0, |
|
paths: [] |
|
}; |
|
parser.ast.state = parser.state; |
|
parser |
|
/** |
|
* Beginning-of-string |
|
*/ |
|
.capture('prefix', function () { |
|
if (this.parsed) return; |
|
var m = this.match(/^\.[\\/]/); |
|
if (!m) return; |
|
this.state.strictOpen = !!this.options.strictOpen; |
|
this.state.addPrefix = true; |
|
}) |
|
/** |
|
* Escape: "\\." |
|
*/ |
|
.capture('escape', function () { |
|
if (this.isInside('bracket')) return; |
|
var pos = this.position(); |
|
var m = this.match(/^(?:\\(.)|([$^]))/); |
|
if (!m) return; |
|
return pos({ |
|
type: 'escape', |
|
val: m[2] || m[1] |
|
}); |
|
}) |
|
/** |
|
* Quoted strings |
|
*/ |
|
.capture('quoted', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^["']/); |
|
if (!m) return; |
|
var quote = m[0]; |
|
|
|
if (this.input.indexOf(quote) === -1) { |
|
return pos({ |
|
type: 'escape', |
|
val: quote |
|
}); |
|
} |
|
|
|
var tok = advanceTo(this.input, quote); |
|
this.consume(tok.len); |
|
return pos({ |
|
type: 'quoted', |
|
val: tok.esc |
|
}); |
|
}) |
|
/** |
|
* Negations: "!" |
|
*/ |
|
.capture('not', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(this.notRegex || /^!+/); |
|
if (!m) return; |
|
var val = m[0]; |
|
var isNegated = val.length % 2 === 1; |
|
|
|
if (parsed === '' && !isNegated) { |
|
val = ''; |
|
} // if nothing has been parsed, we know `!` is at the start, |
|
// so we need to wrap the result in a negation regex |
|
|
|
|
|
if (parsed === '' && isNegated && this.options.nonegate !== true) { |
|
this.bos.val = '(?!^(?:'; |
|
this.append = ')$).*'; |
|
val = ''; |
|
} |
|
|
|
return pos({ |
|
type: 'not', |
|
val: val |
|
}); |
|
}) |
|
/** |
|
* Dot: "." |
|
*/ |
|
.capture('dot', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(/^\.+/); |
|
if (!m) return; |
|
var val = m[0]; |
|
this.state.dot = val === '.' && (parsed === '' || parsed.slice(-1) === '/'); |
|
return pos({ |
|
type: 'dot', |
|
dotfiles: this.state.dot, |
|
val: val |
|
}); |
|
}) |
|
/** |
|
* Plus: "+" |
|
*/ |
|
.capture('plus', /^\+(?!\()/) |
|
/** |
|
* Question mark: "?" |
|
*/ |
|
.capture('qmark', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(/^\?+(?!\()/); |
|
if (!m) return; |
|
this.state.metachar = true; |
|
this.state.qmark = true; |
|
return pos({ |
|
type: 'qmark', |
|
parsed: parsed, |
|
val: m[0] |
|
}); |
|
}) |
|
/** |
|
* Globstar: "**" |
|
*/ |
|
.capture('globstar', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(/^\*{2}(?![*(])(?=[,)/]|$)/); |
|
if (!m) return; |
|
var type = opts.noglobstar !== true ? 'globstar' : 'star'; |
|
var node = pos({ |
|
type: type, |
|
parsed: parsed |
|
}); |
|
this.state.metachar = true; |
|
|
|
while (this.input.slice(0, 4) === '/**/') { |
|
this.input = this.input.slice(3); |
|
} |
|
|
|
node.isInside = { |
|
brace: this.isInside('brace'), |
|
paren: this.isInside('paren') |
|
}; |
|
|
|
if (type === 'globstar') { |
|
this.state.globstar = true; |
|
node.val = '**'; |
|
} else { |
|
this.state.star = true; |
|
node.val = '*'; |
|
} |
|
|
|
return node; |
|
}) |
|
/** |
|
* Star: "*" |
|
*/ |
|
.capture('star', function () { |
|
var pos = this.position(); |
|
var starRe = /^(?:\*(?![*(])|[*]{3,}(?!\()|[*]{2}(?![(/]|$)|\*(?=\*\())/; |
|
var m = this.match(starRe); |
|
if (!m) return; |
|
this.state.metachar = true; |
|
this.state.star = true; |
|
return pos({ |
|
type: 'star', |
|
val: m[0] |
|
}); |
|
}) |
|
/** |
|
* Slash: "/" |
|
*/ |
|
.capture('slash', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^\//); |
|
if (!m) return; |
|
this.state.slashes++; |
|
return pos({ |
|
type: 'slash', |
|
val: m[0] |
|
}); |
|
}) |
|
/** |
|
* Backslash: "\\" |
|
*/ |
|
.capture('backslash', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^\\(?![*+?(){}[\]'"])/); |
|
if (!m) return; |
|
var val = m[0]; |
|
|
|
if (this.isInside('bracket')) { |
|
val = '\\'; |
|
} else if (val.length > 1) { |
|
val = '\\\\'; |
|
} |
|
|
|
return pos({ |
|
type: 'backslash', |
|
val: val |
|
}); |
|
}) |
|
/** |
|
* Square: "[.]" |
|
*/ |
|
.capture('square', function () { |
|
if (this.isInside('bracket')) return; |
|
var pos = this.position(); |
|
var m = this.match(/^\[([^!^\\])\]/); |
|
if (!m) return; |
|
return pos({ |
|
type: 'square', |
|
val: m[1] |
|
}); |
|
}) |
|
/** |
|
* Brackets: "[...]" (basic, this can be overridden by other parsers) |
|
*/ |
|
.capture('bracket', function () { |
|
var pos = this.position(); |
|
var m = this.match(/^(?:\[([!^]?)([^\]]+|\]-)(\]|[^*+?]+)|\[)/); |
|
if (!m) return; |
|
var val = m[0]; |
|
var negated = m[1] ? '^' : ''; |
|
var inner = (m[2] || '').replace(/\\\\+/, '\\\\'); |
|
var close = m[3] || ''; |
|
|
|
if (m[2] && inner.length < m[2].length) { |
|
val = val.replace(/\\\\+/, '\\\\'); |
|
} |
|
|
|
var esc = this.input.slice(0, 2); |
|
|
|
if (inner === '' && esc === '\\]') { |
|
inner += esc; |
|
this.consume(2); |
|
var str = this.input; |
|
var idx = -1; |
|
var ch; |
|
|
|
while (ch = str[++idx]) { |
|
this.consume(1); |
|
|
|
if (ch === ']') { |
|
close = ch; |
|
break; |
|
} |
|
|
|
inner += ch; |
|
} |
|
} |
|
|
|
return pos({ |
|
type: 'bracket', |
|
val: val, |
|
escaped: close !== ']', |
|
negated: negated, |
|
inner: inner, |
|
close: close |
|
}); |
|
}) |
|
/** |
|
* Text |
|
*/ |
|
.capture('text', function () { |
|
if (this.isInside('bracket')) return; |
|
var pos = this.position(); |
|
var m = this.match(not); |
|
if (!m || !m[0]) return; |
|
return pos({ |
|
type: 'text', |
|
val: m[0] |
|
}); |
|
}); |
|
/** |
|
* Allow custom parsers to be passed on options |
|
*/ |
|
|
|
if (options && typeof options.parsers === 'function') { |
|
options.parsers(nanomatch.parser); |
|
} |
|
}; |
|
/** |
|
* Advance to the next non-escaped character |
|
*/ |
|
|
|
|
|
function advanceTo(input, endChar) { |
|
var ch = input.charAt(0); |
|
var tok = { |
|
len: 1, |
|
val: '', |
|
esc: '' |
|
}; |
|
var idx = 0; |
|
|
|
function advance() { |
|
if (ch !== '\\') { |
|
tok.esc += '\\' + ch; |
|
tok.val += ch; |
|
} |
|
|
|
ch = input.charAt(++idx); |
|
tok.len++; |
|
|
|
if (ch === '\\') { |
|
advance(); |
|
advance(); |
|
} |
|
} |
|
|
|
while (ch && ch !== endChar) { |
|
advance(); |
|
} |
|
|
|
return tok; |
|
} |
|
/** |
|
* Create text regex |
|
*/ |
|
|
|
|
|
function createTextRegex(pattern) { |
|
if (cached) return cached; |
|
var opts = { |
|
contains: true, |
|
strictClose: false |
|
}; |
|
var not = regexNot.create(pattern, opts); |
|
var re = toRegex('^(?:[*]\\((?=.)|' + not + ')', opts); |
|
return cached = re; |
|
} |
|
/** |
|
* Expose negation string |
|
*/ |
|
|
|
|
|
module.exports.not = NOT_REGEX; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/lib/utils.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/nanomatch/lib/utils.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var utils = module.exports; |
|
|
|
var path = __webpack_require__(/*! path */ "./node_modules/path-browserify/index.js"); |
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
|
|
var isWindows = __webpack_require__(/*! is-windows */ "./node_modules/is-windows/index.js")(); |
|
|
|
var Snapdragon = __webpack_require__(/*! snapdragon */ "./node_modules/snapdragon/index.js"); |
|
|
|
utils.define = __webpack_require__(/*! define-property */ "./node_modules/nanomatch/node_modules/define-property/index.js"); |
|
utils.diff = __webpack_require__(/*! arr-diff */ "./node_modules/arr-diff/index.js"); |
|
utils.extend = __webpack_require__(/*! extend-shallow */ "./node_modules/nanomatch/node_modules/extend-shallow/index.js"); |
|
utils.pick = __webpack_require__(/*! object.pick */ "./node_modules/object.pick/index.js"); |
|
utils.typeOf = __webpack_require__(/*! kind-of */ "./node_modules/nanomatch/node_modules/kind-of/index.js"); |
|
utils.unique = __webpack_require__(/*! array-unique */ "./node_modules/array-unique/index.js"); |
|
/** |
|
* Returns true if the given value is effectively an empty string |
|
*/ |
|
|
|
utils.isEmptyString = function (val) { |
|
return String(val) === '' || String(val) === './'; |
|
}; |
|
/** |
|
* Returns true if the platform is windows, or `path.sep` is `\\`. |
|
* This is defined as a function to allow `path.sep` to be set in unit tests, |
|
* or by the user, if there is a reason to do so. |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
utils.isWindows = function () { |
|
return path.sep === '\\' || isWindows === true; |
|
}; |
|
/** |
|
* Return the last element from an array |
|
*/ |
|
|
|
|
|
utils.last = function (arr, n) { |
|
return arr[arr.length - (n || 1)]; |
|
}; |
|
/** |
|
* Get the `Snapdragon` instance to use |
|
*/ |
|
|
|
|
|
utils.instantiate = function (ast, options) { |
|
var snapdragon; // if an instance was created by `.parse`, use that instance |
|
|
|
if (utils.typeOf(ast) === 'object' && ast.snapdragon) { |
|
snapdragon = ast.snapdragon; // if the user supplies an instance on options, use that instance |
|
} else if (utils.typeOf(options) === 'object' && options.snapdragon) { |
|
snapdragon = options.snapdragon; // create a new instance |
|
} else { |
|
snapdragon = new Snapdragon(options); |
|
} |
|
|
|
utils.define(snapdragon, 'parse', function (str, options) { |
|
var parsed = Snapdragon.prototype.parse.call(this, str, options); |
|
parsed.input = str; // escape unmatched brace/bracket/parens |
|
|
|
var last = this.parser.stack.pop(); |
|
|
|
if (last && this.options.strictErrors !== true) { |
|
var open = last.nodes[0]; |
|
var inner = last.nodes[1]; |
|
|
|
if (last.type === 'bracket') { |
|
if (inner.val.charAt(0) === '[') { |
|
inner.val = '\\' + inner.val; |
|
} |
|
} else { |
|
open.val = '\\' + open.val; |
|
var sibling = open.parent.nodes[1]; |
|
|
|
if (sibling.type === 'star') { |
|
sibling.loose = true; |
|
} |
|
} |
|
} // add non-enumerable parser reference |
|
|
|
|
|
utils.define(parsed, 'parser', this.parser); |
|
return parsed; |
|
}); |
|
return snapdragon; |
|
}; |
|
/** |
|
* Create the key to use for memoization. The key is generated |
|
* by iterating over the options and concatenating key-value pairs |
|
* to the pattern string. |
|
*/ |
|
|
|
|
|
utils.createKey = function (pattern, options) { |
|
if (typeof options === 'undefined') { |
|
return pattern; |
|
} |
|
|
|
var key = pattern; |
|
|
|
for (var prop in options) { |
|
if (options.hasOwnProperty(prop)) { |
|
key += ';' + prop + '=' + String(options[prop]); |
|
} |
|
} |
|
|
|
return key; |
|
}; |
|
/** |
|
* Cast `val` to an array |
|
* @return {Array} |
|
*/ |
|
|
|
|
|
utils.arrayify = function (val) { |
|
if (typeof val === 'string') return [val]; |
|
return val ? Array.isArray(val) ? val : [val] : []; |
|
}; |
|
/** |
|
* Return true if `val` is a non-empty string |
|
*/ |
|
|
|
|
|
utils.isString = function (val) { |
|
return typeof val === 'string'; |
|
}; |
|
/** |
|
* Return true if `val` is a non-empty string |
|
*/ |
|
|
|
|
|
utils.isRegex = function (val) { |
|
return utils.typeOf(val) === 'regexp'; |
|
}; |
|
/** |
|
* Return true if `val` is a non-empty string |
|
*/ |
|
|
|
|
|
utils.isObject = function (val) { |
|
return utils.typeOf(val) === 'object'; |
|
}; |
|
/** |
|
* Escape regex characters in the given string |
|
*/ |
|
|
|
|
|
utils.escapeRegex = function (str) { |
|
return str.replace(/[-[\]{}()^$|*+?.\\/\s]/g, '\\$&'); |
|
}; |
|
/** |
|
* Combines duplicate characters in the provided `input` string. |
|
* @param {String} `input` |
|
* @returns {String} |
|
*/ |
|
|
|
|
|
utils.combineDupes = function (input, patterns) { |
|
patterns = utils.arrayify(patterns).join('|').split('|'); |
|
patterns = patterns.map(function (s) { |
|
return s.replace(/\\?([+*\\/])/g, '\\$1'); |
|
}); |
|
var substr = patterns.join('|'); |
|
var regex = new RegExp('(' + substr + ')(?=\\1)', 'g'); |
|
return input.replace(regex, ''); |
|
}; |
|
/** |
|
* Returns true if the given `str` has special characters |
|
*/ |
|
|
|
|
|
utils.hasSpecialChars = function (str) { |
|
return /(?:(?:(^|\/)[!.])|[*?+()|[\]{}]|[+@]\()/.test(str); |
|
}; |
|
/** |
|
* Normalize slashes in the given filepath. |
|
* |
|
* @param {String} `filepath` |
|
* @return {String} |
|
*/ |
|
|
|
|
|
utils.toPosixPath = function (str) { |
|
return str.replace(/\\+/g, '/'); |
|
}; |
|
/** |
|
* Strip backslashes before special characters in a string. |
|
* |
|
* @param {String} `str` |
|
* @return {String} |
|
*/ |
|
|
|
|
|
utils.unescape = function (str) { |
|
return utils.toPosixPath(str.replace(/\\(?=[*+?!.])/g, '')); |
|
}; |
|
/** |
|
* Strip the drive letter from a windows filepath |
|
* @param {String} `fp` |
|
* @return {String} |
|
*/ |
|
|
|
|
|
utils.stripDrive = function (fp) { |
|
return utils.isWindows() ? fp.replace(/^[a-z]:[\\/]+?/i, '/') : fp; |
|
}; |
|
/** |
|
* Strip the prefix from a filepath |
|
* @param {String} `fp` |
|
* @return {String} |
|
*/ |
|
|
|
|
|
utils.stripPrefix = function (str) { |
|
if (str.charAt(0) === '.' && (str.charAt(1) === '/' || str.charAt(1) === '\\')) { |
|
return str.slice(2); |
|
} |
|
|
|
return str; |
|
}; |
|
/** |
|
* Returns true if `str` is a common character that doesn't need |
|
* to be processed to be used for matching. |
|
* @param {String} `str` |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
utils.isSimpleChar = function (str) { |
|
return str.trim() === '' || str === '.'; |
|
}; |
|
/** |
|
* Returns true if the given str is an escaped or |
|
* unescaped path character |
|
*/ |
|
|
|
|
|
utils.isSlash = function (str) { |
|
return str === '/' || str === '\\/' || str === '\\' || str === '\\\\'; |
|
}; |
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern matches or contains a `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.matchPath = function (pattern, options) { |
|
return options && options.contains ? utils.containsPattern(pattern, options) : utils.equalsPattern(pattern, options); |
|
}; |
|
/** |
|
* Returns true if the given (original) filepath or unixified path are equal |
|
* to the given pattern. |
|
*/ |
|
|
|
|
|
utils._equals = function (filepath, unixPath, pattern) { |
|
return pattern === filepath || pattern === unixPath; |
|
}; |
|
/** |
|
* Returns true if the given (original) filepath or unixified path contain |
|
* the given pattern. |
|
*/ |
|
|
|
|
|
utils._contains = function (filepath, unixPath, pattern) { |
|
return filepath.indexOf(pattern) !== -1 || unixPath.indexOf(pattern) !== -1; |
|
}; |
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern is the same as a given `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.equalsPattern = function (pattern, options) { |
|
var unixify = utils.unixify(options); |
|
options = options || {}; |
|
return function fn(filepath) { |
|
var equal = utils._equals(filepath, unixify(filepath), pattern); |
|
|
|
if (equal === true || options.nocase !== true) { |
|
return equal; |
|
} |
|
|
|
var lower = filepath.toLowerCase(); |
|
return utils._equals(lower, unixify(lower), pattern); |
|
}; |
|
}; |
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern contains a `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.containsPattern = function (pattern, options) { |
|
var unixify = utils.unixify(options); |
|
options = options || {}; |
|
return function (filepath) { |
|
var contains = utils._contains(filepath, unixify(filepath), pattern); |
|
|
|
if (contains === true || options.nocase !== true) { |
|
return contains; |
|
} |
|
|
|
var lower = filepath.toLowerCase(); |
|
return utils._contains(lower, unixify(lower), pattern); |
|
}; |
|
}; |
|
/** |
|
* Returns a function that returns true if the given |
|
* regex matches the `filename` of a file path. |
|
* |
|
* @param {RegExp} `re` Matching regex |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.matchBasename = function (re) { |
|
return function (filepath) { |
|
return re.test(filepath) || re.test(path.basename(filepath)); |
|
}; |
|
}; |
|
/** |
|
* Returns the given value unchanced. |
|
* @return {any} |
|
*/ |
|
|
|
|
|
utils.identity = function (val) { |
|
return val; |
|
}; |
|
/** |
|
* Determines the filepath to return based on the provided options. |
|
* @return {any} |
|
*/ |
|
|
|
|
|
utils.value = function (str, unixify, options) { |
|
if (options && options.unixify === false) { |
|
return str; |
|
} |
|
|
|
if (options && typeof options.unixify === 'function') { |
|
return options.unixify(str); |
|
} |
|
|
|
return unixify(str); |
|
}; |
|
/** |
|
* Returns a function that normalizes slashes in a string to forward |
|
* slashes, strips `./` from beginning of paths, and optionally unescapes |
|
* special characters. |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
utils.unixify = function (options) { |
|
var opts = options || {}; |
|
return function (filepath) { |
|
if (opts.stripPrefix !== false) { |
|
filepath = utils.stripPrefix(filepath); |
|
} |
|
|
|
if (opts.unescape === true) { |
|
filepath = utils.unescape(filepath); |
|
} |
|
|
|
if (opts.unixify === true || utils.isWindows()) { |
|
filepath = utils.toPosixPath(filepath); |
|
} |
|
|
|
return filepath; |
|
}; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/node_modules/define-property/index.js": |
|
/*!**********************************************************************!*\ |
|
!*** ./node_modules/nanomatch/node_modules/define-property/index.js ***! |
|
\**********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* define-property <https://github.com/jonschlinkert/define-property> |
|
* |
|
* Copyright (c) 2015-2018, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isobject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
var isDescriptor = __webpack_require__(/*! is-descriptor */ "./node_modules/is-descriptor/index.js"); |
|
|
|
var define = typeof Reflect !== 'undefined' && Reflect.defineProperty ? Reflect.defineProperty : Object.defineProperty; |
|
|
|
module.exports = function defineProperty(obj, key, val) { |
|
if (!isobject(obj) && typeof obj !== 'function' && !Array.isArray(obj)) { |
|
throw new TypeError('expected an object, function, or array'); |
|
} |
|
|
|
if (typeof key !== 'string') { |
|
throw new TypeError('expected "key" to be a string'); |
|
} |
|
|
|
if (isDescriptor(val)) { |
|
define(obj, key, val); |
|
return obj; |
|
} |
|
|
|
define(obj, key, { |
|
configurable: true, |
|
enumerable: false, |
|
writable: true, |
|
value: val |
|
}); |
|
return obj; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/node_modules/extend-shallow/index.js": |
|
/*!*********************************************************************!*\ |
|
!*** ./node_modules/nanomatch/node_modules/extend-shallow/index.js ***! |
|
\*********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isExtendable = __webpack_require__(/*! is-extendable */ "./node_modules/nanomatch/node_modules/is-extendable/index.js"); |
|
|
|
var assignSymbols = __webpack_require__(/*! assign-symbols */ "./node_modules/assign-symbols/index.js"); |
|
|
|
module.exports = Object.assign || function (obj |
|
/*, objects*/ |
|
) { |
|
if (obj === null || typeof obj === 'undefined') { |
|
throw new TypeError('Cannot convert undefined or null to object'); |
|
} |
|
|
|
if (!isObject(obj)) { |
|
obj = {}; |
|
} |
|
|
|
for (var i = 1; i < arguments.length; i++) { |
|
var val = arguments[i]; |
|
|
|
if (isString(val)) { |
|
val = toObject(val); |
|
} |
|
|
|
if (isObject(val)) { |
|
assign(obj, val); |
|
assignSymbols(obj, val); |
|
} |
|
} |
|
|
|
return obj; |
|
}; |
|
|
|
function assign(a, b) { |
|
for (var key in b) { |
|
if (hasOwn(b, key)) { |
|
a[key] = b[key]; |
|
} |
|
} |
|
} |
|
|
|
function isString(val) { |
|
return val && typeof val === 'string'; |
|
} |
|
|
|
function toObject(str) { |
|
var obj = {}; |
|
|
|
for (var i in str) { |
|
obj[i] = str[i]; |
|
} |
|
|
|
return obj; |
|
} |
|
|
|
function isObject(val) { |
|
return val && _typeof(val) === 'object' || isExtendable(val); |
|
} |
|
/** |
|
* Returns true if the given `key` is an own property of `obj`. |
|
*/ |
|
|
|
|
|
function hasOwn(obj, key) { |
|
return Object.prototype.hasOwnProperty.call(obj, key); |
|
} |
|
|
|
function isEnum(obj, key) { |
|
return Object.prototype.propertyIsEnumerable.call(obj, key); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/node_modules/is-extendable/index.js": |
|
/*!********************************************************************!*\ |
|
!*** ./node_modules/nanomatch/node_modules/is-extendable/index.js ***! |
|
\********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-extendable <https://github.com/jonschlinkert/is-extendable> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isPlainObject = __webpack_require__(/*! is-plain-object */ "./node_modules/is-plain-object/index.js"); |
|
|
|
module.exports = function isExtendable(val) { |
|
return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/nanomatch/node_modules/kind-of/index.js": |
|
/*!**************************************************************!*\ |
|
!*** ./node_modules/nanomatch/node_modules/kind-of/index.js ***! |
|
\**************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var toString = Object.prototype.toString; |
|
|
|
module.exports = function kindOf(val) { |
|
if (val === void 0) return 'undefined'; |
|
if (val === null) return 'null'; |
|
|
|
var type = _typeof(val); |
|
|
|
if (type === 'boolean') return 'boolean'; |
|
if (type === 'string') return 'string'; |
|
if (type === 'number') return 'number'; |
|
if (type === 'symbol') return 'symbol'; |
|
|
|
if (type === 'function') { |
|
return isGeneratorFn(val) ? 'generatorfunction' : 'function'; |
|
} |
|
|
|
if (isArray(val)) return 'array'; |
|
if (isBuffer(val)) return 'buffer'; |
|
if (isArguments(val)) return 'arguments'; |
|
if (isDate(val)) return 'date'; |
|
if (isError(val)) return 'error'; |
|
if (isRegexp(val)) return 'regexp'; |
|
|
|
switch (ctorName(val)) { |
|
case 'Symbol': |
|
return 'symbol'; |
|
|
|
case 'Promise': |
|
return 'promise'; |
|
// Set, Map, WeakSet, WeakMap |
|
|
|
case 'WeakMap': |
|
return 'weakmap'; |
|
|
|
case 'WeakSet': |
|
return 'weakset'; |
|
|
|
case 'Map': |
|
return 'map'; |
|
|
|
case 'Set': |
|
return 'set'; |
|
// 8-bit typed arrays |
|
|
|
case 'Int8Array': |
|
return 'int8array'; |
|
|
|
case 'Uint8Array': |
|
return 'uint8array'; |
|
|
|
case 'Uint8ClampedArray': |
|
return 'uint8clampedarray'; |
|
// 16-bit typed arrays |
|
|
|
case 'Int16Array': |
|
return 'int16array'; |
|
|
|
case 'Uint16Array': |
|
return 'uint16array'; |
|
// 32-bit typed arrays |
|
|
|
case 'Int32Array': |
|
return 'int32array'; |
|
|
|
case 'Uint32Array': |
|
return 'uint32array'; |
|
|
|
case 'Float32Array': |
|
return 'float32array'; |
|
|
|
case 'Float64Array': |
|
return 'float64array'; |
|
} |
|
|
|
if (isGeneratorObj(val)) { |
|
return 'generator'; |
|
} // Non-plain objects |
|
|
|
|
|
type = toString.call(val); |
|
|
|
switch (type) { |
|
case '[object Object]': |
|
return 'object'; |
|
// iterators |
|
|
|
case '[object Map Iterator]': |
|
return 'mapiterator'; |
|
|
|
case '[object Set Iterator]': |
|
return 'setiterator'; |
|
|
|
case '[object String Iterator]': |
|
return 'stringiterator'; |
|
|
|
case '[object Array Iterator]': |
|
return 'arrayiterator'; |
|
} // other |
|
|
|
|
|
return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); |
|
}; |
|
|
|
function ctorName(val) { |
|
return val.constructor ? val.constructor.name : null; |
|
} |
|
|
|
function isArray(val) { |
|
if (Array.isArray) return Array.isArray(val); |
|
return val instanceof Array; |
|
} |
|
|
|
function isError(val) { |
|
return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'; |
|
} |
|
|
|
function isDate(val) { |
|
if (val instanceof Date) return true; |
|
return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function'; |
|
} |
|
|
|
function isRegexp(val) { |
|
if (val instanceof RegExp) return true; |
|
return typeof val.flags === 'string' && typeof val.ignoreCase === 'boolean' && typeof val.multiline === 'boolean' && typeof val.global === 'boolean'; |
|
} |
|
|
|
function isGeneratorFn(name, val) { |
|
return ctorName(name) === 'GeneratorFunction'; |
|
} |
|
|
|
function isGeneratorObj(val) { |
|
return typeof val.throw === 'function' && typeof val.return === 'function' && typeof val.next === 'function'; |
|
} |
|
|
|
function isArguments(val) { |
|
try { |
|
if (typeof val.length === 'number' && typeof val.callee === 'function') { |
|
return true; |
|
} |
|
} catch (err) { |
|
if (err.message.indexOf('callee') !== -1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
/** |
|
* If you need to support Safari 5-7 (8-10 yr-old browser), |
|
* take a look at https://github.com/feross/is-buffer |
|
*/ |
|
|
|
|
|
function isBuffer(val) { |
|
if (val.constructor && typeof val.constructor.isBuffer === 'function') { |
|
return val.constructor.isBuffer(val); |
|
} |
|
|
|
return false; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/node-libs-browser/mock/empty.js": |
|
/*!******************************************************!*\ |
|
!*** ./node_modules/node-libs-browser/mock/empty.js ***! |
|
\******************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/object-copy/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/object-copy/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/kind-of/index.js"); |
|
|
|
var copyDescriptor = __webpack_require__(/*! copy-descriptor */ "./node_modules/copy-descriptor/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
/** |
|
* Copy static properties, prototype properties, and descriptors from one object to another. |
|
* |
|
* ```js |
|
* function App() {} |
|
* var proto = App.prototype; |
|
* App.prototype.set = function() {}; |
|
* App.prototype.get = function() {}; |
|
* |
|
* var obj = {}; |
|
* copy(obj, proto); |
|
* ``` |
|
* @param {Object} `receiver` |
|
* @param {Object} `provider` |
|
* @param {String|Array} `omit` One or more properties to omit |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
|
|
function copy(receiver, provider, omit) { |
|
if (!isObject(receiver)) { |
|
throw new TypeError('expected receiving object to be an object.'); |
|
} |
|
|
|
if (!isObject(provider)) { |
|
throw new TypeError('expected providing object to be an object.'); |
|
} |
|
|
|
var props = nativeKeys(provider); |
|
var keys = Object.keys(provider); |
|
var len = props.length; |
|
omit = arrayify(omit); |
|
|
|
while (len--) { |
|
var key = props[len]; |
|
|
|
if (has(keys, key)) { |
|
define(receiver, key, provider[key]); |
|
} else if (!(key in receiver) && !has(omit, key)) { |
|
copyDescriptor(receiver, provider, key); |
|
} |
|
} |
|
} |
|
|
|
; |
|
/** |
|
* Return true if the given value is an object or function |
|
*/ |
|
|
|
function isObject(val) { |
|
return typeOf(val) === 'object' || typeof val === 'function'; |
|
} |
|
/** |
|
* Returns true if an array has any of the given elements, or an |
|
* object has any of the give keys. |
|
* |
|
* ```js |
|
* has(['a', 'b', 'c'], 'c'); |
|
* //=> true |
|
* |
|
* has(['a', 'b', 'c'], ['c', 'z']); |
|
* //=> true |
|
* |
|
* has({a: 'b', c: 'd'}, ['c', 'z']); |
|
* //=> true |
|
* ``` |
|
* @param {Object} `obj` |
|
* @param {String|Array} `val` |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
function has(obj, val) { |
|
val = arrayify(val); |
|
var len = val.length; |
|
|
|
if (isObject(obj)) { |
|
for (var key in obj) { |
|
if (val.indexOf(key) > -1) { |
|
return true; |
|
} |
|
} |
|
|
|
var keys = nativeKeys(obj); |
|
return has(keys, val); |
|
} |
|
|
|
if (Array.isArray(obj)) { |
|
var arr = obj; |
|
|
|
while (len--) { |
|
if (arr.indexOf(val[len]) > -1) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
|
|
throw new TypeError('expected an array or object.'); |
|
} |
|
/** |
|
* Cast the given value to an array. |
|
* |
|
* ```js |
|
* arrayify('foo'); |
|
* //=> ['foo'] |
|
* |
|
* arrayify(['foo']); |
|
* //=> ['foo'] |
|
* ``` |
|
* |
|
* @param {String|Array} `val` |
|
* @return {Array} |
|
*/ |
|
|
|
|
|
function arrayify(val) { |
|
return val ? Array.isArray(val) ? val : [val] : []; |
|
} |
|
/** |
|
* Returns true if a value has a `contructor` |
|
* |
|
* ```js |
|
* hasConstructor({}); |
|
* //=> true |
|
* |
|
* hasConstructor(Object.create(null)); |
|
* //=> false |
|
* ``` |
|
* @param {Object} `value` |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
function hasConstructor(val) { |
|
return isObject(val) && typeof val.constructor !== 'undefined'; |
|
} |
|
/** |
|
* Get the native `ownPropertyNames` from the constructor of the |
|
* given `object`. An empty array is returned if the object does |
|
* not have a constructor. |
|
* |
|
* ```js |
|
* nativeKeys({a: 'b', b: 'c', c: 'd'}) |
|
* //=> ['a', 'b', 'c'] |
|
* |
|
* nativeKeys(function(){}) |
|
* //=> ['length', 'caller'] |
|
* ``` |
|
* |
|
* @param {Object} `obj` Object that has a `constructor`. |
|
* @return {Array} Array of keys. |
|
*/ |
|
|
|
|
|
function nativeKeys(val) { |
|
if (!hasConstructor(val)) return []; |
|
return Object.getOwnPropertyNames(val); |
|
} |
|
/** |
|
* Expose `copy` |
|
*/ |
|
|
|
|
|
module.exports = copy; |
|
/** |
|
* Expose `copy.has` for tests |
|
*/ |
|
|
|
module.exports.has = has; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/object-visit/index.js": |
|
/*!********************************************!*\ |
|
!*** ./node_modules/object-visit/index.js ***! |
|
\********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* object-visit <https://github.com/jonschlinkert/object-visit> |
|
* |
|
* Copyright (c) 2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
module.exports = function visit(thisArg, method, target, val) { |
|
if (!isObject(thisArg) && typeof thisArg !== 'function') { |
|
throw new Error('object-visit expects `thisArg` to be an object.'); |
|
} |
|
|
|
if (typeof method !== 'string') { |
|
throw new Error('object-visit expects `method` name to be a string'); |
|
} |
|
|
|
if (typeof thisArg[method] !== 'function') { |
|
return thisArg; |
|
} |
|
|
|
var args = [].slice.call(arguments, 3); |
|
target = target || {}; |
|
|
|
for (var key in target) { |
|
var arr = [key, target[key]].concat(args); |
|
thisArg[method].apply(thisArg, arr); |
|
} |
|
|
|
return thisArg; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/object.pick/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/object.pick/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* object.pick <https://github.com/jonschlinkert/object.pick> |
|
* |
|
* Copyright (c) 2014-2015 Jon Schlinkert, contributors. |
|
* Licensed under the MIT License |
|
*/ |
|
|
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
module.exports = function pick(obj, keys) { |
|
if (!isObject(obj) && typeof obj !== 'function') { |
|
return {}; |
|
} |
|
|
|
var res = {}; |
|
|
|
if (typeof keys === 'string') { |
|
if (keys in obj) { |
|
res[keys] = obj[keys]; |
|
} |
|
|
|
return res; |
|
} |
|
|
|
var len = keys.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
var key = keys[idx]; |
|
|
|
if (key in obj) { |
|
res[key] = obj[key]; |
|
} |
|
} |
|
|
|
return res; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/pascalcase/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/pascalcase/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/*! |
|
* pascalcase <https://github.com/jonschlinkert/pascalcase> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
function pascalcase(str) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string.'); |
|
} |
|
|
|
str = str.replace(/([A-Z])/g, ' $1'); |
|
|
|
if (str.length === 1) { |
|
return str.toUpperCase(); |
|
} |
|
|
|
str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); |
|
str = str.charAt(0).toUpperCase() + str.slice(1); |
|
return str.replace(/[\W_]+(\w|$)/g, function (_, ch) { |
|
return ch.toUpperCase(); |
|
}); |
|
} |
|
|
|
module.exports = pascalcase; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/path-browserify/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/path-browserify/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) { |
|
|
|
// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, |
|
// backported and transplited with Babel, with backwards-compat fixes |
|
// Copyright Joyent, Inc. and other Node contributors. |
|
// |
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
// copy of this software and associated documentation files (the |
|
// "Software"), to deal in the Software without restriction, including |
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
// persons to whom the Software is furnished to do so, subject to the |
|
// following conditions: |
|
// |
|
// The above copyright notice and this permission notice shall be included |
|
// in all copies or substantial portions of the Software. |
|
// |
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
// resolves . and .. elements in a path array with directory names there |
|
// must be no slashes, empty elements, or device names (c:\) in the array |
|
// (so also no leading and trailing slashes - it does not distinguish |
|
// relative and absolute paths) |
|
function normalizeArray(parts, allowAboveRoot) { |
|
// if the path tries to go above the root, `up` ends up > 0 |
|
var up = 0; |
|
|
|
for (var i = parts.length - 1; i >= 0; i--) { |
|
var last = parts[i]; |
|
|
|
if (last === '.') { |
|
parts.splice(i, 1); |
|
} else if (last === '..') { |
|
parts.splice(i, 1); |
|
up++; |
|
} else if (up) { |
|
parts.splice(i, 1); |
|
up--; |
|
} |
|
} // if the path is allowed to go above the root, restore leading ..s |
|
|
|
|
|
if (allowAboveRoot) { |
|
for (; up--; up) { |
|
parts.unshift('..'); |
|
} |
|
} |
|
|
|
return parts; |
|
} // path.resolve([from ...], to) |
|
// posix version |
|
|
|
|
|
exports.resolve = function () { |
|
var resolvedPath = '', |
|
resolvedAbsolute = false; |
|
|
|
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { |
|
var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries |
|
|
|
if (typeof path !== 'string') { |
|
throw new TypeError('Arguments to path.resolve must be strings'); |
|
} else if (!path) { |
|
continue; |
|
} |
|
|
|
resolvedPath = path + '/' + resolvedPath; |
|
resolvedAbsolute = path.charAt(0) === '/'; |
|
} // At this point the path should be resolved to a full absolute path, but |
|
// handle relative paths to be safe (might happen when process.cwd() fails) |
|
// Normalize the path |
|
|
|
|
|
resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) { |
|
return !!p; |
|
}), !resolvedAbsolute).join('/'); |
|
return (resolvedAbsolute ? '/' : '') + resolvedPath || '.'; |
|
}; // path.normalize(path) |
|
// posix version |
|
|
|
|
|
exports.normalize = function (path) { |
|
var isAbsolute = exports.isAbsolute(path), |
|
trailingSlash = substr(path, -1) === '/'; // Normalize the path |
|
|
|
path = normalizeArray(filter(path.split('/'), function (p) { |
|
return !!p; |
|
}), !isAbsolute).join('/'); |
|
|
|
if (!path && !isAbsolute) { |
|
path = '.'; |
|
} |
|
|
|
if (path && trailingSlash) { |
|
path += '/'; |
|
} |
|
|
|
return (isAbsolute ? '/' : '') + path; |
|
}; // posix version |
|
|
|
|
|
exports.isAbsolute = function (path) { |
|
return path.charAt(0) === '/'; |
|
}; // posix version |
|
|
|
|
|
exports.join = function () { |
|
var paths = Array.prototype.slice.call(arguments, 0); |
|
return exports.normalize(filter(paths, function (p, index) { |
|
if (typeof p !== 'string') { |
|
throw new TypeError('Arguments to path.join must be strings'); |
|
} |
|
|
|
return p; |
|
}).join('/')); |
|
}; // path.relative(from, to) |
|
// posix version |
|
|
|
|
|
exports.relative = function (from, to) { |
|
from = exports.resolve(from).substr(1); |
|
to = exports.resolve(to).substr(1); |
|
|
|
function trim(arr) { |
|
var start = 0; |
|
|
|
for (; start < arr.length; start++) { |
|
if (arr[start] !== '') break; |
|
} |
|
|
|
var end = arr.length - 1; |
|
|
|
for (; end >= 0; end--) { |
|
if (arr[end] !== '') break; |
|
} |
|
|
|
if (start > end) return []; |
|
return arr.slice(start, end - start + 1); |
|
} |
|
|
|
var fromParts = trim(from.split('/')); |
|
var toParts = trim(to.split('/')); |
|
var length = Math.min(fromParts.length, toParts.length); |
|
var samePartsLength = length; |
|
|
|
for (var i = 0; i < length; i++) { |
|
if (fromParts[i] !== toParts[i]) { |
|
samePartsLength = i; |
|
break; |
|
} |
|
} |
|
|
|
var outputParts = []; |
|
|
|
for (var i = samePartsLength; i < fromParts.length; i++) { |
|
outputParts.push('..'); |
|
} |
|
|
|
outputParts = outputParts.concat(toParts.slice(samePartsLength)); |
|
return outputParts.join('/'); |
|
}; |
|
|
|
exports.sep = '/'; |
|
exports.delimiter = ':'; |
|
|
|
exports.dirname = function (path) { |
|
if (typeof path !== 'string') path = path + ''; |
|
if (path.length === 0) return '.'; |
|
var code = path.charCodeAt(0); |
|
var hasRoot = code === 47 |
|
/*/*/ |
|
; |
|
var end = -1; |
|
var matchedSlash = true; |
|
|
|
for (var i = path.length - 1; i >= 1; --i) { |
|
code = path.charCodeAt(i); |
|
|
|
if (code === 47 |
|
/*/*/ |
|
) { |
|
if (!matchedSlash) { |
|
end = i; |
|
break; |
|
} |
|
} else { |
|
// We saw the first non-path separator |
|
matchedSlash = false; |
|
} |
|
} |
|
|
|
if (end === -1) return hasRoot ? '/' : '.'; |
|
|
|
if (hasRoot && end === 1) { |
|
// return '//'; |
|
// Backwards-compat fix: |
|
return '/'; |
|
} |
|
|
|
return path.slice(0, end); |
|
}; |
|
|
|
function basename(path) { |
|
if (typeof path !== 'string') path = path + ''; |
|
var start = 0; |
|
var end = -1; |
|
var matchedSlash = true; |
|
var i; |
|
|
|
for (i = path.length - 1; i >= 0; --i) { |
|
if (path.charCodeAt(i) === 47 |
|
/*/*/ |
|
) { |
|
// If we reached a path separator that was not part of a set of path |
|
// separators at the end of the string, stop now |
|
if (!matchedSlash) { |
|
start = i + 1; |
|
break; |
|
} |
|
} else if (end === -1) { |
|
// We saw the first non-path separator, mark this as the end of our |
|
// path component |
|
matchedSlash = false; |
|
end = i + 1; |
|
} |
|
} |
|
|
|
if (end === -1) return ''; |
|
return path.slice(start, end); |
|
} // Uses a mixed approach for backwards-compatibility, as ext behavior changed |
|
// in new Node.js versions, so only basename() above is backported here |
|
|
|
|
|
exports.basename = function (path, ext) { |
|
var f = basename(path); |
|
|
|
if (ext && f.substr(-1 * ext.length) === ext) { |
|
f = f.substr(0, f.length - ext.length); |
|
} |
|
|
|
return f; |
|
}; |
|
|
|
exports.extname = function (path) { |
|
if (typeof path !== 'string') path = path + ''; |
|
var startDot = -1; |
|
var startPart = 0; |
|
var end = -1; |
|
var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and |
|
// after any path separator we find |
|
|
|
var preDotState = 0; |
|
|
|
for (var i = path.length - 1; i >= 0; --i) { |
|
var code = path.charCodeAt(i); |
|
|
|
if (code === 47 |
|
/*/*/ |
|
) { |
|
// If we reached a path separator that was not part of a set of path |
|
// separators at the end of the string, stop now |
|
if (!matchedSlash) { |
|
startPart = i + 1; |
|
break; |
|
} |
|
|
|
continue; |
|
} |
|
|
|
if (end === -1) { |
|
// We saw the first non-path separator, mark this as the end of our |
|
// extension |
|
matchedSlash = false; |
|
end = i + 1; |
|
} |
|
|
|
if (code === 46 |
|
/*.*/ |
|
) { |
|
// If this is our first dot, mark it as the start of our extension |
|
if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1; |
|
} else if (startDot !== -1) { |
|
// We saw a non-dot and non-path separator before our dot, so we should |
|
// have a good chance at having a non-empty extension |
|
preDotState = -1; |
|
} |
|
} |
|
|
|
if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot |
|
preDotState === 0 || // The (right-most) trimmed path component is exactly '..' |
|
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { |
|
return ''; |
|
} |
|
|
|
return path.slice(startDot, end); |
|
}; |
|
|
|
function filter(xs, f) { |
|
if (xs.filter) return xs.filter(f); |
|
var res = []; |
|
|
|
for (var i = 0; i < xs.length; i++) { |
|
if (f(xs[i], i, xs)) res.push(xs[i]); |
|
} |
|
|
|
return res; |
|
} // String.prototype.substr - negative index don't work in IE8 |
|
|
|
|
|
var substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) { |
|
return str.substr(start, len); |
|
} : function (str, start, len) { |
|
if (start < 0) start = str.length + start; |
|
return str.substr(start, len); |
|
}; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/posix-character-classes/index.js": |
|
/*!*******************************************************!*\ |
|
!*** ./node_modules/posix-character-classes/index.js ***! |
|
\*******************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* POSIX character classes |
|
*/ |
|
|
|
module.exports = { |
|
alnum: 'a-zA-Z0-9', |
|
alpha: 'a-zA-Z', |
|
ascii: '\\x00-\\x7F', |
|
blank: ' \\t', |
|
cntrl: '\\x00-\\x1F\\x7F', |
|
digit: '0-9', |
|
graph: '\\x21-\\x7E', |
|
lower: 'a-z', |
|
print: '\\x20-\\x7E ', |
|
punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', |
|
space: ' \\t\\r\\n\\v\\f', |
|
upper: 'A-Z', |
|
word: 'A-Za-z0-9_', |
|
xdigit: 'A-Fa-f0-9' |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/process/browser.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/process/browser.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
// shim for using process in browser |
|
var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it |
|
// don't break things. But we need to wrap it in a try catch in case it is |
|
// wrapped in strict mode code which doesn't define any globals. It's inside a |
|
// function because try/catches deoptimize in certain engines. |
|
|
|
var cachedSetTimeout; |
|
var cachedClearTimeout; |
|
|
|
function defaultSetTimout() { |
|
throw new Error('setTimeout has not been defined'); |
|
} |
|
|
|
function defaultClearTimeout() { |
|
throw new Error('clearTimeout has not been defined'); |
|
} |
|
|
|
(function () { |
|
try { |
|
if (typeof setTimeout === 'function') { |
|
cachedSetTimeout = setTimeout; |
|
} else { |
|
cachedSetTimeout = defaultSetTimout; |
|
} |
|
} catch (e) { |
|
cachedSetTimeout = defaultSetTimout; |
|
} |
|
|
|
try { |
|
if (typeof clearTimeout === 'function') { |
|
cachedClearTimeout = clearTimeout; |
|
} else { |
|
cachedClearTimeout = defaultClearTimeout; |
|
} |
|
} catch (e) { |
|
cachedClearTimeout = defaultClearTimeout; |
|
} |
|
})(); |
|
|
|
function runTimeout(fun) { |
|
if (cachedSetTimeout === setTimeout) { |
|
//normal enviroments in sane situations |
|
return setTimeout(fun, 0); |
|
} // if setTimeout wasn't available but was latter defined |
|
|
|
|
|
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { |
|
cachedSetTimeout = setTimeout; |
|
return setTimeout(fun, 0); |
|
} |
|
|
|
try { |
|
// when when somebody has screwed with setTimeout but no I.E. maddness |
|
return cachedSetTimeout(fun, 0); |
|
} catch (e) { |
|
try { |
|
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally |
|
return cachedSetTimeout.call(null, fun, 0); |
|
} catch (e) { |
|
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error |
|
return cachedSetTimeout.call(this, fun, 0); |
|
} |
|
} |
|
} |
|
|
|
function runClearTimeout(marker) { |
|
if (cachedClearTimeout === clearTimeout) { |
|
//normal enviroments in sane situations |
|
return clearTimeout(marker); |
|
} // if clearTimeout wasn't available but was latter defined |
|
|
|
|
|
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { |
|
cachedClearTimeout = clearTimeout; |
|
return clearTimeout(marker); |
|
} |
|
|
|
try { |
|
// when when somebody has screwed with setTimeout but no I.E. maddness |
|
return cachedClearTimeout(marker); |
|
} catch (e) { |
|
try { |
|
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally |
|
return cachedClearTimeout.call(null, marker); |
|
} catch (e) { |
|
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. |
|
// Some versions of I.E. have different rules for clearTimeout vs setTimeout |
|
return cachedClearTimeout.call(this, marker); |
|
} |
|
} |
|
} |
|
|
|
var queue = []; |
|
var draining = false; |
|
var currentQueue; |
|
var queueIndex = -1; |
|
|
|
function cleanUpNextTick() { |
|
if (!draining || !currentQueue) { |
|
return; |
|
} |
|
|
|
draining = false; |
|
|
|
if (currentQueue.length) { |
|
queue = currentQueue.concat(queue); |
|
} else { |
|
queueIndex = -1; |
|
} |
|
|
|
if (queue.length) { |
|
drainQueue(); |
|
} |
|
} |
|
|
|
function drainQueue() { |
|
if (draining) { |
|
return; |
|
} |
|
|
|
var timeout = runTimeout(cleanUpNextTick); |
|
draining = true; |
|
var len = queue.length; |
|
|
|
while (len) { |
|
currentQueue = queue; |
|
queue = []; |
|
|
|
while (++queueIndex < len) { |
|
if (currentQueue) { |
|
currentQueue[queueIndex].run(); |
|
} |
|
} |
|
|
|
queueIndex = -1; |
|
len = queue.length; |
|
} |
|
|
|
currentQueue = null; |
|
draining = false; |
|
runClearTimeout(timeout); |
|
} |
|
|
|
process.nextTick = function (fun) { |
|
var args = new Array(arguments.length - 1); |
|
|
|
if (arguments.length > 1) { |
|
for (var i = 1; i < arguments.length; i++) { |
|
args[i - 1] = arguments[i]; |
|
} |
|
} |
|
|
|
queue.push(new Item(fun, args)); |
|
|
|
if (queue.length === 1 && !draining) { |
|
runTimeout(drainQueue); |
|
} |
|
}; // v8 likes predictible objects |
|
|
|
|
|
function Item(fun, array) { |
|
this.fun = fun; |
|
this.array = array; |
|
} |
|
|
|
Item.prototype.run = function () { |
|
this.fun.apply(null, this.array); |
|
}; |
|
|
|
process.title = 'browser'; |
|
process.browser = true; |
|
process.env = {}; |
|
process.argv = []; |
|
process.version = ''; // empty string to avoid regexp issues |
|
|
|
process.versions = {}; |
|
|
|
function noop() {} |
|
|
|
process.on = noop; |
|
process.addListener = noop; |
|
process.once = noop; |
|
process.off = noop; |
|
process.removeListener = noop; |
|
process.removeAllListeners = noop; |
|
process.emit = noop; |
|
process.prependListener = noop; |
|
process.prependOnceListener = noop; |
|
|
|
process.listeners = function (name) { |
|
return []; |
|
}; |
|
|
|
process.binding = function (name) { |
|
throw new Error('process.binding is not supported'); |
|
}; |
|
|
|
process.cwd = function () { |
|
return '/'; |
|
}; |
|
|
|
process.chdir = function (dir) { |
|
throw new Error('process.chdir is not supported'); |
|
}; |
|
|
|
process.umask = function () { |
|
return 0; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/react-is/cjs/react-is.development.js": |
|
/*!***********************************************************!*\ |
|
!*** ./node_modules/react-is/cjs/react-is.development.js ***! |
|
\***********************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/** @license React v16.8.6 |
|
* react-is.development.js |
|
* |
|
* Copyright (c) Facebook, Inc. and its affiliates. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
if (true) { |
|
(function () { |
|
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); // The Symbol used to tag the ReactElement-like types. If there is no native Symbol |
|
// nor polyfill, then a plain number is used for performance. |
|
|
|
var hasSymbol = typeof Symbol === 'function' && Symbol.for; |
|
var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; |
|
var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; |
|
var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; |
|
var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; |
|
var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; |
|
var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; |
|
var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; |
|
var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; |
|
var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; |
|
var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; |
|
var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; |
|
var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; |
|
var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; |
|
|
|
function isValidElementType(type) { |
|
return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. |
|
type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || _typeof(type) === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE); |
|
} |
|
/** |
|
* Forked from fbjs/warning: |
|
* https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js |
|
* |
|
* Only change is we use console.warn instead of console.error, |
|
* and do nothing when 'console' is not supported. |
|
* This really simplifies the code. |
|
* --- |
|
* Similar to invariant but only logs a warning if the condition is not met. |
|
* This can be used to log issues in development environments in critical |
|
* paths. Removing the logging code for production environments will keep the |
|
* same logic and follow the same code paths. |
|
*/ |
|
|
|
|
|
var lowPriorityWarning = function lowPriorityWarning() {}; |
|
|
|
{ |
|
var printWarning = function printWarning(format) { |
|
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { |
|
args[_key - 1] = arguments[_key]; |
|
} |
|
|
|
var argIndex = 0; |
|
var message = 'Warning: ' + format.replace(/%s/g, function () { |
|
return args[argIndex++]; |
|
}); |
|
|
|
if (typeof console !== 'undefined') { |
|
console.warn(message); |
|
} |
|
|
|
try { |
|
// --- Welcome to debugging React --- |
|
// This error was thrown as a convenience so that you can use this stack |
|
// to find the callsite that caused this warning to fire. |
|
throw new Error(message); |
|
} catch (x) {} |
|
}; |
|
|
|
lowPriorityWarning = function lowPriorityWarning(condition, format) { |
|
if (format === undefined) { |
|
throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument'); |
|
} |
|
|
|
if (!condition) { |
|
for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { |
|
args[_key2 - 2] = arguments[_key2]; |
|
} |
|
|
|
printWarning.apply(undefined, [format].concat(args)); |
|
} |
|
}; |
|
} |
|
var lowPriorityWarning$1 = lowPriorityWarning; |
|
|
|
function typeOf(object) { |
|
if (_typeof(object) === 'object' && object !== null) { |
|
var $$typeof = object.$$typeof; |
|
|
|
switch ($$typeof) { |
|
case REACT_ELEMENT_TYPE: |
|
var type = object.type; |
|
|
|
switch (type) { |
|
case REACT_ASYNC_MODE_TYPE: |
|
case REACT_CONCURRENT_MODE_TYPE: |
|
case REACT_FRAGMENT_TYPE: |
|
case REACT_PROFILER_TYPE: |
|
case REACT_STRICT_MODE_TYPE: |
|
case REACT_SUSPENSE_TYPE: |
|
return type; |
|
|
|
default: |
|
var $$typeofType = type && type.$$typeof; |
|
|
|
switch ($$typeofType) { |
|
case REACT_CONTEXT_TYPE: |
|
case REACT_FORWARD_REF_TYPE: |
|
case REACT_PROVIDER_TYPE: |
|
return $$typeofType; |
|
|
|
default: |
|
return $$typeof; |
|
} |
|
|
|
} |
|
|
|
case REACT_LAZY_TYPE: |
|
case REACT_MEMO_TYPE: |
|
case REACT_PORTAL_TYPE: |
|
return $$typeof; |
|
} |
|
} |
|
|
|
return undefined; |
|
} // AsyncMode is deprecated along with isAsyncMode |
|
|
|
|
|
var AsyncMode = REACT_ASYNC_MODE_TYPE; |
|
var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; |
|
var ContextConsumer = REACT_CONTEXT_TYPE; |
|
var ContextProvider = REACT_PROVIDER_TYPE; |
|
var Element = REACT_ELEMENT_TYPE; |
|
var ForwardRef = REACT_FORWARD_REF_TYPE; |
|
var Fragment = REACT_FRAGMENT_TYPE; |
|
var Lazy = REACT_LAZY_TYPE; |
|
var Memo = REACT_MEMO_TYPE; |
|
var Portal = REACT_PORTAL_TYPE; |
|
var Profiler = REACT_PROFILER_TYPE; |
|
var StrictMode = REACT_STRICT_MODE_TYPE; |
|
var Suspense = REACT_SUSPENSE_TYPE; |
|
var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated |
|
|
|
function isAsyncMode(object) { |
|
{ |
|
if (!hasWarnedAboutDeprecatedIsAsyncMode) { |
|
hasWarnedAboutDeprecatedIsAsyncMode = true; |
|
lowPriorityWarning$1(false, 'The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); |
|
} |
|
} |
|
return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; |
|
} |
|
|
|
function isConcurrentMode(object) { |
|
return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; |
|
} |
|
|
|
function isContextConsumer(object) { |
|
return typeOf(object) === REACT_CONTEXT_TYPE; |
|
} |
|
|
|
function isContextProvider(object) { |
|
return typeOf(object) === REACT_PROVIDER_TYPE; |
|
} |
|
|
|
function isElement(object) { |
|
return _typeof(object) === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; |
|
} |
|
|
|
function isForwardRef(object) { |
|
return typeOf(object) === REACT_FORWARD_REF_TYPE; |
|
} |
|
|
|
function isFragment(object) { |
|
return typeOf(object) === REACT_FRAGMENT_TYPE; |
|
} |
|
|
|
function isLazy(object) { |
|
return typeOf(object) === REACT_LAZY_TYPE; |
|
} |
|
|
|
function isMemo(object) { |
|
return typeOf(object) === REACT_MEMO_TYPE; |
|
} |
|
|
|
function isPortal(object) { |
|
return typeOf(object) === REACT_PORTAL_TYPE; |
|
} |
|
|
|
function isProfiler(object) { |
|
return typeOf(object) === REACT_PROFILER_TYPE; |
|
} |
|
|
|
function isStrictMode(object) { |
|
return typeOf(object) === REACT_STRICT_MODE_TYPE; |
|
} |
|
|
|
function isSuspense(object) { |
|
return typeOf(object) === REACT_SUSPENSE_TYPE; |
|
} |
|
|
|
exports.typeOf = typeOf; |
|
exports.AsyncMode = AsyncMode; |
|
exports.ConcurrentMode = ConcurrentMode; |
|
exports.ContextConsumer = ContextConsumer; |
|
exports.ContextProvider = ContextProvider; |
|
exports.Element = Element; |
|
exports.ForwardRef = ForwardRef; |
|
exports.Fragment = Fragment; |
|
exports.Lazy = Lazy; |
|
exports.Memo = Memo; |
|
exports.Portal = Portal; |
|
exports.Profiler = Profiler; |
|
exports.StrictMode = StrictMode; |
|
exports.Suspense = Suspense; |
|
exports.isValidElementType = isValidElementType; |
|
exports.isAsyncMode = isAsyncMode; |
|
exports.isConcurrentMode = isConcurrentMode; |
|
exports.isContextConsumer = isContextConsumer; |
|
exports.isContextProvider = isContextProvider; |
|
exports.isElement = isElement; |
|
exports.isForwardRef = isForwardRef; |
|
exports.isFragment = isFragment; |
|
exports.isLazy = isLazy; |
|
exports.isMemo = isMemo; |
|
exports.isPortal = isPortal; |
|
exports.isProfiler = isProfiler; |
|
exports.isStrictMode = isStrictMode; |
|
exports.isSuspense = isSuspense; |
|
})(); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/react-is/index.js": |
|
/*!****************************************!*\ |
|
!*** ./node_modules/react-is/index.js ***! |
|
\****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
if (false) {} else { |
|
module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/react-is/cjs/react-is.development.js"); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/regex-not/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/regex-not/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/regex-not/node_modules/extend-shallow/index.js"); |
|
|
|
var safe = __webpack_require__(/*! safe-regex */ "./node_modules/safe-regex/index.js"); |
|
/** |
|
* The main export is a function that takes a `pattern` string and an `options` object. |
|
* |
|
* ```js |
|
& var not = require('regex-not'); |
|
& console.log(not('foo')); |
|
& //=> /^(?:(?!^(?:foo)$).)*$/ |
|
* ``` |
|
* |
|
* @param {String} `pattern` |
|
* @param {Object} `options` |
|
* @return {RegExp} Converts the given `pattern` to a regex using the specified `options`. |
|
* @api public |
|
*/ |
|
|
|
|
|
function toRegex(pattern, options) { |
|
return new RegExp(toRegex.create(pattern, options)); |
|
} |
|
/** |
|
* Create a regex-compatible string from the given `pattern` and `options`. |
|
* |
|
* ```js |
|
& var not = require('regex-not'); |
|
& console.log(not.create('foo')); |
|
& //=> '^(?:(?!^(?:foo)$).)*$' |
|
* ``` |
|
* @param {String} `pattern` |
|
* @param {Object} `options` |
|
* @return {String} |
|
* @api public |
|
*/ |
|
|
|
|
|
toRegex.create = function (pattern, options) { |
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
var opts = extend({}, options); |
|
|
|
if (opts.contains === true) { |
|
opts.strictNegate = false; |
|
} |
|
|
|
var open = opts.strictOpen !== false ? '^' : ''; |
|
var close = opts.strictClose !== false ? '$' : ''; |
|
var endChar = opts.endChar ? opts.endChar : '+'; |
|
var str = pattern; |
|
|
|
if (opts.strictNegate === false) { |
|
str = '(?:(?!(?:' + pattern + ')).)' + endChar; |
|
} else { |
|
str = '(?:(?!^(?:' + pattern + ')$).)' + endChar; |
|
} |
|
|
|
var res = open + str + close; |
|
|
|
if (opts.safe === true && safe(res) === false) { |
|
throw new Error('potentially unsafe regular expression: ' + res); |
|
} |
|
|
|
return res; |
|
}; |
|
/** |
|
* Expose `toRegex` |
|
*/ |
|
|
|
|
|
module.exports = toRegex; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/regex-not/node_modules/extend-shallow/index.js": |
|
/*!*********************************************************************!*\ |
|
!*** ./node_modules/regex-not/node_modules/extend-shallow/index.js ***! |
|
\*********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isExtendable = __webpack_require__(/*! is-extendable */ "./node_modules/regex-not/node_modules/is-extendable/index.js"); |
|
|
|
var assignSymbols = __webpack_require__(/*! assign-symbols */ "./node_modules/assign-symbols/index.js"); |
|
|
|
module.exports = Object.assign || function (obj |
|
/*, objects*/ |
|
) { |
|
if (obj === null || typeof obj === 'undefined') { |
|
throw new TypeError('Cannot convert undefined or null to object'); |
|
} |
|
|
|
if (!isObject(obj)) { |
|
obj = {}; |
|
} |
|
|
|
for (var i = 1; i < arguments.length; i++) { |
|
var val = arguments[i]; |
|
|
|
if (isString(val)) { |
|
val = toObject(val); |
|
} |
|
|
|
if (isObject(val)) { |
|
assign(obj, val); |
|
assignSymbols(obj, val); |
|
} |
|
} |
|
|
|
return obj; |
|
}; |
|
|
|
function assign(a, b) { |
|
for (var key in b) { |
|
if (hasOwn(b, key)) { |
|
a[key] = b[key]; |
|
} |
|
} |
|
} |
|
|
|
function isString(val) { |
|
return val && typeof val === 'string'; |
|
} |
|
|
|
function toObject(str) { |
|
var obj = {}; |
|
|
|
for (var i in str) { |
|
obj[i] = str[i]; |
|
} |
|
|
|
return obj; |
|
} |
|
|
|
function isObject(val) { |
|
return val && _typeof(val) === 'object' || isExtendable(val); |
|
} |
|
/** |
|
* Returns true if the given `key` is an own property of `obj`. |
|
*/ |
|
|
|
|
|
function hasOwn(obj, key) { |
|
return Object.prototype.hasOwnProperty.call(obj, key); |
|
} |
|
|
|
function isEnum(obj, key) { |
|
return Object.prototype.propertyIsEnumerable.call(obj, key); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/regex-not/node_modules/is-extendable/index.js": |
|
/*!********************************************************************!*\ |
|
!*** ./node_modules/regex-not/node_modules/is-extendable/index.js ***! |
|
\********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-extendable <https://github.com/jonschlinkert/is-extendable> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isPlainObject = __webpack_require__(/*! is-plain-object */ "./node_modules/is-plain-object/index.js"); |
|
|
|
module.exports = function isExtendable(val) { |
|
return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/repeat-element/index.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/repeat-element/index.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* repeat-element <https://github.com/jonschlinkert/repeat-element> |
|
* |
|
* Copyright (c) 2015-present, Jon Schlinkert. |
|
* Licensed under the MIT license. |
|
*/ |
|
|
|
|
|
module.exports = function repeat(ele, num) { |
|
var arr = new Array(num); |
|
|
|
for (var i = 0; i < num; i++) { |
|
arr[i] = ele; |
|
} |
|
|
|
return arr; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/repeat-string/index.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/repeat-string/index.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* repeat-string <https://github.com/jonschlinkert/repeat-string> |
|
* |
|
* Copyright (c) 2014-2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
/** |
|
* Results cache |
|
*/ |
|
|
|
var res = ''; |
|
var cache; |
|
/** |
|
* Expose `repeat` |
|
*/ |
|
|
|
module.exports = repeat; |
|
/** |
|
* Repeat the given `string` the specified `number` |
|
* of times. |
|
* |
|
* **Example:** |
|
* |
|
* ```js |
|
* var repeat = require('repeat-string'); |
|
* repeat('A', 5); |
|
* //=> AAAAA |
|
* ``` |
|
* |
|
* @param {String} `string` The string to repeat |
|
* @param {Number} `number` The number of times to repeat the string |
|
* @return {String} Repeated string |
|
* @api public |
|
*/ |
|
|
|
function repeat(str, num) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} // cover common, quick use cases |
|
|
|
|
|
if (num === 1) return str; |
|
if (num === 2) return str + str; |
|
var max = str.length * num; |
|
|
|
if (cache !== str || typeof cache === 'undefined') { |
|
cache = str; |
|
res = ''; |
|
} else if (res.length >= max) { |
|
return res.substr(0, max); |
|
} |
|
|
|
while (max > res.length && num > 1) { |
|
if (num & 1) { |
|
res += str; |
|
} |
|
|
|
num >>= 1; |
|
str += str; |
|
} |
|
|
|
res += str; |
|
res = res.substr(0, max); |
|
return res; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/resolve-url/resolve-url.js": |
|
/*!*************************************************!*\ |
|
!*** ./node_modules/resolve-url/resolve-url.js ***! |
|
\*************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__; |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
// Copyright 2014 Simon Lydell |
|
// X11 (“MIT”) Licensed. (See LICENSE.) |
|
void function (root, factory) { |
|
if (true) { |
|
!(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), |
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? |
|
(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : |
|
__WEBPACK_AMD_DEFINE_FACTORY__), |
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); |
|
} else {} |
|
}(void 0, function () { |
|
function resolveUrl() |
|
/* ...urls */ |
|
{ |
|
var numUrls = arguments.length; |
|
|
|
if (numUrls === 0) { |
|
throw new Error("resolveUrl requires at least one argument; got none."); |
|
} |
|
|
|
var base = document.createElement("base"); |
|
base.href = arguments[0]; |
|
|
|
if (numUrls === 1) { |
|
return base.href; |
|
} |
|
|
|
var head = document.getElementsByTagName("head")[0]; |
|
head.insertBefore(base, head.firstChild); |
|
var a = document.createElement("a"); |
|
var resolved; |
|
|
|
for (var index = 1; index < numUrls; index++) { |
|
a.href = arguments[index]; |
|
resolved = a.href; |
|
base.href = resolved; |
|
} |
|
|
|
head.removeChild(base); |
|
return resolved; |
|
} |
|
|
|
return resolveUrl; |
|
}); |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/ret/lib/index.js": |
|
/*!***************************************!*\ |
|
!*** ./node_modules/ret/lib/index.js ***! |
|
\***************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var util = __webpack_require__(/*! ./util */ "./node_modules/ret/lib/util.js"); |
|
|
|
var types = __webpack_require__(/*! ./types */ "./node_modules/ret/lib/types.js"); |
|
|
|
var sets = __webpack_require__(/*! ./sets */ "./node_modules/ret/lib/sets.js"); |
|
|
|
var positions = __webpack_require__(/*! ./positions */ "./node_modules/ret/lib/positions.js"); |
|
|
|
module.exports = function (regexpStr) { |
|
var i = 0, |
|
l, |
|
c, |
|
start = { |
|
type: types.ROOT, |
|
stack: [] |
|
}, |
|
// Keep track of last clause/group and stack. |
|
lastGroup = start, |
|
last = start.stack, |
|
groupStack = []; |
|
|
|
var repeatErr = function repeatErr(i) { |
|
util.error(regexpStr, 'Nothing to repeat at column ' + (i - 1)); |
|
}; // Decode a few escaped characters. |
|
|
|
|
|
var str = util.strToChars(regexpStr); |
|
l = str.length; // Iterate through each character in string. |
|
|
|
while (i < l) { |
|
c = str[i++]; |
|
|
|
switch (c) { |
|
// Handle escaped characters, inclues a few sets. |
|
case '\\': |
|
c = str[i++]; |
|
|
|
switch (c) { |
|
case 'b': |
|
last.push(positions.wordBoundary()); |
|
break; |
|
|
|
case 'B': |
|
last.push(positions.nonWordBoundary()); |
|
break; |
|
|
|
case 'w': |
|
last.push(sets.words()); |
|
break; |
|
|
|
case 'W': |
|
last.push(sets.notWords()); |
|
break; |
|
|
|
case 'd': |
|
last.push(sets.ints()); |
|
break; |
|
|
|
case 'D': |
|
last.push(sets.notInts()); |
|
break; |
|
|
|
case 's': |
|
last.push(sets.whitespace()); |
|
break; |
|
|
|
case 'S': |
|
last.push(sets.notWhitespace()); |
|
break; |
|
|
|
default: |
|
// Check if c is integer. |
|
// In which case it's a reference. |
|
if (/\d/.test(c)) { |
|
last.push({ |
|
type: types.REFERENCE, |
|
value: parseInt(c, 10) |
|
}); // Escaped character. |
|
} else { |
|
last.push({ |
|
type: types.CHAR, |
|
value: c.charCodeAt(0) |
|
}); |
|
} |
|
|
|
} |
|
|
|
break; |
|
// Positionals. |
|
|
|
case '^': |
|
last.push(positions.begin()); |
|
break; |
|
|
|
case '$': |
|
last.push(positions.end()); |
|
break; |
|
// Handle custom sets. |
|
|
|
case '[': |
|
// Check if this class is 'anti' i.e. [^abc]. |
|
var not; |
|
|
|
if (str[i] === '^') { |
|
not = true; |
|
i++; |
|
} else { |
|
not = false; |
|
} // Get all the characters in class. |
|
|
|
|
|
var classTokens = util.tokenizeClass(str.slice(i), regexpStr); // Increase index by length of class. |
|
|
|
i += classTokens[1]; |
|
last.push({ |
|
type: types.SET, |
|
set: classTokens[0], |
|
not: not |
|
}); |
|
break; |
|
// Class of any character except \n. |
|
|
|
case '.': |
|
last.push(sets.anyChar()); |
|
break; |
|
// Push group onto stack. |
|
|
|
case '(': |
|
// Create group. |
|
var group = { |
|
type: types.GROUP, |
|
stack: [], |
|
remember: true |
|
}; |
|
c = str[i]; // If if this is a special kind of group. |
|
|
|
if (c === '?') { |
|
c = str[i + 1]; |
|
i += 2; // Match if followed by. |
|
|
|
if (c === '=') { |
|
group.followedBy = true; // Match if not followed by. |
|
} else if (c === '!') { |
|
group.notFollowedBy = true; |
|
} else if (c !== ':') { |
|
util.error(regexpStr, 'Invalid group, character \'' + c + '\' after \'?\' at column ' + (i - 1)); |
|
} |
|
|
|
group.remember = false; |
|
} // Insert subgroup into current group stack. |
|
|
|
|
|
last.push(group); // Remember the current group for when the group closes. |
|
|
|
groupStack.push(lastGroup); // Make this new group the current group. |
|
|
|
lastGroup = group; |
|
last = group.stack; |
|
break; |
|
// Pop group out of stack. |
|
|
|
case ')': |
|
if (groupStack.length === 0) { |
|
util.error(regexpStr, 'Unmatched ) at column ' + (i - 1)); |
|
} |
|
|
|
lastGroup = groupStack.pop(); // Check if this group has a PIPE. |
|
// To get back the correct last stack. |
|
|
|
last = lastGroup.options ? lastGroup.options[lastGroup.options.length - 1] : lastGroup.stack; |
|
break; |
|
// Use pipe character to give more choices. |
|
|
|
case '|': |
|
// Create array where options are if this is the first PIPE |
|
// in this clause. |
|
if (!lastGroup.options) { |
|
lastGroup.options = [lastGroup.stack]; |
|
delete lastGroup.stack; |
|
} // Create a new stack and add to options for rest of clause. |
|
|
|
|
|
var stack = []; |
|
lastGroup.options.push(stack); |
|
last = stack; |
|
break; |
|
// Repetition. |
|
// For every repetition, remove last element from last stack |
|
// then insert back a RANGE object. |
|
// This design is chosen because there could be more than |
|
// one repetition symbols in a regex i.e. `a?+{2,3}`. |
|
|
|
case '{': |
|
var rs = /^(\d+)(,(\d+)?)?\}/.exec(str.slice(i)), |
|
min, |
|
max; |
|
|
|
if (rs !== null) { |
|
if (last.length === 0) { |
|
repeatErr(i); |
|
} |
|
|
|
min = parseInt(rs[1], 10); |
|
max = rs[2] ? rs[3] ? parseInt(rs[3], 10) : Infinity : min; |
|
i += rs[0].length; |
|
last.push({ |
|
type: types.REPETITION, |
|
min: min, |
|
max: max, |
|
value: last.pop() |
|
}); |
|
} else { |
|
last.push({ |
|
type: types.CHAR, |
|
value: 123 |
|
}); |
|
} |
|
|
|
break; |
|
|
|
case '?': |
|
if (last.length === 0) { |
|
repeatErr(i); |
|
} |
|
|
|
last.push({ |
|
type: types.REPETITION, |
|
min: 0, |
|
max: 1, |
|
value: last.pop() |
|
}); |
|
break; |
|
|
|
case '+': |
|
if (last.length === 0) { |
|
repeatErr(i); |
|
} |
|
|
|
last.push({ |
|
type: types.REPETITION, |
|
min: 1, |
|
max: Infinity, |
|
value: last.pop() |
|
}); |
|
break; |
|
|
|
case '*': |
|
if (last.length === 0) { |
|
repeatErr(i); |
|
} |
|
|
|
last.push({ |
|
type: types.REPETITION, |
|
min: 0, |
|
max: Infinity, |
|
value: last.pop() |
|
}); |
|
break; |
|
// Default is a character that is not `\[](){}?+*^$`. |
|
|
|
default: |
|
last.push({ |
|
type: types.CHAR, |
|
value: c.charCodeAt(0) |
|
}); |
|
} |
|
} // Check if any groups have not been closed. |
|
|
|
|
|
if (groupStack.length !== 0) { |
|
util.error(regexpStr, 'Unterminated group'); |
|
} |
|
|
|
return start; |
|
}; |
|
|
|
module.exports.types = types; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/ret/lib/positions.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/ret/lib/positions.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var types = __webpack_require__(/*! ./types */ "./node_modules/ret/lib/types.js"); |
|
|
|
exports.wordBoundary = function () { |
|
return { |
|
type: types.POSITION, |
|
value: 'b' |
|
}; |
|
}; |
|
|
|
exports.nonWordBoundary = function () { |
|
return { |
|
type: types.POSITION, |
|
value: 'B' |
|
}; |
|
}; |
|
|
|
exports.begin = function () { |
|
return { |
|
type: types.POSITION, |
|
value: '^' |
|
}; |
|
}; |
|
|
|
exports.end = function () { |
|
return { |
|
type: types.POSITION, |
|
value: '$' |
|
}; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/ret/lib/sets.js": |
|
/*!**************************************!*\ |
|
!*** ./node_modules/ret/lib/sets.js ***! |
|
\**************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var types = __webpack_require__(/*! ./types */ "./node_modules/ret/lib/types.js"); |
|
|
|
var INTS = function INTS() { |
|
return [{ |
|
type: types.RANGE, |
|
from: 48, |
|
to: 57 |
|
}]; |
|
}; |
|
|
|
var WORDS = function WORDS() { |
|
return [{ |
|
type: types.CHAR, |
|
value: 95 |
|
}, { |
|
type: types.RANGE, |
|
from: 97, |
|
to: 122 |
|
}, { |
|
type: types.RANGE, |
|
from: 65, |
|
to: 90 |
|
}].concat(INTS()); |
|
}; |
|
|
|
var WHITESPACE = function WHITESPACE() { |
|
return [{ |
|
type: types.CHAR, |
|
value: 9 |
|
}, { |
|
type: types.CHAR, |
|
value: 10 |
|
}, { |
|
type: types.CHAR, |
|
value: 11 |
|
}, { |
|
type: types.CHAR, |
|
value: 12 |
|
}, { |
|
type: types.CHAR, |
|
value: 13 |
|
}, { |
|
type: types.CHAR, |
|
value: 32 |
|
}, { |
|
type: types.CHAR, |
|
value: 160 |
|
}, { |
|
type: types.CHAR, |
|
value: 5760 |
|
}, { |
|
type: types.CHAR, |
|
value: 6158 |
|
}, { |
|
type: types.CHAR, |
|
value: 8192 |
|
}, { |
|
type: types.CHAR, |
|
value: 8193 |
|
}, { |
|
type: types.CHAR, |
|
value: 8194 |
|
}, { |
|
type: types.CHAR, |
|
value: 8195 |
|
}, { |
|
type: types.CHAR, |
|
value: 8196 |
|
}, { |
|
type: types.CHAR, |
|
value: 8197 |
|
}, { |
|
type: types.CHAR, |
|
value: 8198 |
|
}, { |
|
type: types.CHAR, |
|
value: 8199 |
|
}, { |
|
type: types.CHAR, |
|
value: 8200 |
|
}, { |
|
type: types.CHAR, |
|
value: 8201 |
|
}, { |
|
type: types.CHAR, |
|
value: 8202 |
|
}, { |
|
type: types.CHAR, |
|
value: 8232 |
|
}, { |
|
type: types.CHAR, |
|
value: 8233 |
|
}, { |
|
type: types.CHAR, |
|
value: 8239 |
|
}, { |
|
type: types.CHAR, |
|
value: 8287 |
|
}, { |
|
type: types.CHAR, |
|
value: 12288 |
|
}, { |
|
type: types.CHAR, |
|
value: 65279 |
|
}]; |
|
}; |
|
|
|
var NOTANYCHAR = function NOTANYCHAR() { |
|
return [{ |
|
type: types.CHAR, |
|
value: 10 |
|
}, { |
|
type: types.CHAR, |
|
value: 13 |
|
}, { |
|
type: types.CHAR, |
|
value: 8232 |
|
}, { |
|
type: types.CHAR, |
|
value: 8233 |
|
}]; |
|
}; // Predefined class objects. |
|
|
|
|
|
exports.words = function () { |
|
return { |
|
type: types.SET, |
|
set: WORDS(), |
|
not: false |
|
}; |
|
}; |
|
|
|
exports.notWords = function () { |
|
return { |
|
type: types.SET, |
|
set: WORDS(), |
|
not: true |
|
}; |
|
}; |
|
|
|
exports.ints = function () { |
|
return { |
|
type: types.SET, |
|
set: INTS(), |
|
not: false |
|
}; |
|
}; |
|
|
|
exports.notInts = function () { |
|
return { |
|
type: types.SET, |
|
set: INTS(), |
|
not: true |
|
}; |
|
}; |
|
|
|
exports.whitespace = function () { |
|
return { |
|
type: types.SET, |
|
set: WHITESPACE(), |
|
not: false |
|
}; |
|
}; |
|
|
|
exports.notWhitespace = function () { |
|
return { |
|
type: types.SET, |
|
set: WHITESPACE(), |
|
not: true |
|
}; |
|
}; |
|
|
|
exports.anyChar = function () { |
|
return { |
|
type: types.SET, |
|
set: NOTANYCHAR(), |
|
not: true |
|
}; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/ret/lib/types.js": |
|
/*!***************************************!*\ |
|
!*** ./node_modules/ret/lib/types.js ***! |
|
\***************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
module.exports = { |
|
ROOT: 0, |
|
GROUP: 1, |
|
POSITION: 2, |
|
SET: 3, |
|
RANGE: 4, |
|
REPETITION: 5, |
|
REFERENCE: 6, |
|
CHAR: 7 |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/ret/lib/util.js": |
|
/*!**************************************!*\ |
|
!*** ./node_modules/ret/lib/util.js ***! |
|
\**************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var types = __webpack_require__(/*! ./types */ "./node_modules/ret/lib/types.js"); |
|
|
|
var sets = __webpack_require__(/*! ./sets */ "./node_modules/ret/lib/sets.js"); // All of these are private and only used by randexp. |
|
// It's assumed that they will always be called with the correct input. |
|
|
|
|
|
var CTRL = '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?'; |
|
var SLSH = { |
|
'0': 0, |
|
't': 9, |
|
'n': 10, |
|
'v': 11, |
|
'f': 12, |
|
'r': 13 |
|
}; |
|
/** |
|
* Finds character representations in str and convert all to |
|
* their respective characters |
|
* |
|
* @param {String} str |
|
* @return {String} |
|
*/ |
|
|
|
exports.strToChars = function (str) { |
|
/* jshint maxlen: false */ |
|
var chars_regex = /(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z\[\\\]\^?])|([0tnvfr]))/g; |
|
str = str.replace(chars_regex, function (s, b, lbs, a16, b16, c8, dctrl, eslsh) { |
|
if (lbs) { |
|
return s; |
|
} |
|
|
|
var code = b ? 8 : a16 ? parseInt(a16, 16) : b16 ? parseInt(b16, 16) : c8 ? parseInt(c8, 8) : dctrl ? CTRL.indexOf(dctrl) : SLSH[eslsh]; |
|
var c = String.fromCharCode(code); // Escape special regex characters. |
|
|
|
if (/[\[\]{}\^$.|?*+()]/.test(c)) { |
|
c = '\\' + c; |
|
} |
|
|
|
return c; |
|
}); |
|
return str; |
|
}; |
|
/** |
|
* turns class into tokens |
|
* reads str until it encounters a ] not preceeded by a \ |
|
* |
|
* @param {String} str |
|
* @param {String} regexpStr |
|
* @return {Array.<Array.<Object>, Number>} |
|
*/ |
|
|
|
|
|
exports.tokenizeClass = function (str, regexpStr) { |
|
/* jshint maxlen: false */ |
|
var tokens = []; |
|
var regexp = /\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g; |
|
var rs, c; |
|
|
|
while ((rs = regexp.exec(str)) != null) { |
|
if (rs[1]) { |
|
tokens.push(sets.words()); |
|
} else if (rs[2]) { |
|
tokens.push(sets.ints()); |
|
} else if (rs[3]) { |
|
tokens.push(sets.whitespace()); |
|
} else if (rs[4]) { |
|
tokens.push(sets.notWords()); |
|
} else if (rs[5]) { |
|
tokens.push(sets.notInts()); |
|
} else if (rs[6]) { |
|
tokens.push(sets.notWhitespace()); |
|
} else if (rs[7]) { |
|
tokens.push({ |
|
type: types.RANGE, |
|
from: (rs[8] || rs[9]).charCodeAt(0), |
|
to: rs[10].charCodeAt(0) |
|
}); |
|
} else if (c = rs[12]) { |
|
tokens.push({ |
|
type: types.CHAR, |
|
value: c.charCodeAt(0) |
|
}); |
|
} else { |
|
return [tokens, regexp.lastIndex]; |
|
} |
|
} |
|
|
|
exports.error(regexpStr, 'Unterminated character class'); |
|
}; |
|
/** |
|
* Shortcut to throw errors. |
|
* |
|
* @param {String} regexp |
|
* @param {String} msg |
|
*/ |
|
|
|
|
|
exports.error = function (regexp, msg) { |
|
throw new SyntaxError('Invalid regular expression: /' + regexp + '/: ' + msg); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/safe-regex/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/safe-regex/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var parse = __webpack_require__(/*! ret */ "./node_modules/ret/lib/index.js"); |
|
|
|
var types = parse.types; |
|
|
|
module.exports = function (re, opts) { |
|
if (!opts) opts = {}; |
|
var replimit = opts.limit === undefined ? 25 : opts.limit; |
|
if (isRegExp(re)) re = re.source;else if (typeof re !== 'string') re = String(re); |
|
|
|
try { |
|
re = parse(re); |
|
} catch (err) { |
|
return false; |
|
} |
|
|
|
var reps = 0; |
|
return function walk(node, starHeight) { |
|
if (node.type === types.REPETITION) { |
|
starHeight++; |
|
reps++; |
|
if (starHeight > 1) return false; |
|
if (reps > replimit) return false; |
|
} |
|
|
|
if (node.options) { |
|
for (var i = 0, len = node.options.length; i < len; i++) { |
|
var ok = walk({ |
|
stack: node.options[i] |
|
}, starHeight); |
|
if (!ok) return false; |
|
} |
|
} |
|
|
|
var stack = node.stack || node.value && node.value.stack; |
|
if (!stack) return true; |
|
|
|
for (var i = 0; i < stack.length; i++) { |
|
var ok = walk(stack[i], starHeight); |
|
if (!ok) return false; |
|
} |
|
|
|
return true; |
|
}(re, 0); |
|
}; |
|
|
|
function isRegExp(x) { |
|
return {}.toString.call(x) === '[object RegExp]'; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/set-value/index.js": |
|
/*!*****************************************!*\ |
|
!*** ./node_modules/set-value/index.js ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* set-value <https://github.com/jonschlinkert/set-value> |
|
* |
|
* Copyright (c) 2014-2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var split = __webpack_require__(/*! split-string */ "./node_modules/split-string/index.js"); |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
|
|
var isPlainObject = __webpack_require__(/*! is-plain-object */ "./node_modules/is-plain-object/index.js"); |
|
|
|
var isObject = __webpack_require__(/*! is-extendable */ "./node_modules/is-extendable/index.js"); |
|
|
|
module.exports = function (obj, prop, val) { |
|
if (!isObject(obj)) { |
|
return obj; |
|
} |
|
|
|
if (Array.isArray(prop)) { |
|
prop = [].concat.apply([], prop).join('.'); |
|
} |
|
|
|
if (typeof prop !== 'string') { |
|
return obj; |
|
} |
|
|
|
var keys = split(prop, { |
|
sep: '.', |
|
brackets: true |
|
}).filter(isValidKey); |
|
var len = keys.length; |
|
var idx = -1; |
|
var current = obj; |
|
|
|
while (++idx < len) { |
|
var key = keys[idx]; |
|
|
|
if (idx !== len - 1) { |
|
if (!isObject(current[key])) { |
|
current[key] = {}; |
|
} |
|
|
|
current = current[key]; |
|
continue; |
|
} |
|
|
|
if (isPlainObject(current[key]) && isPlainObject(val)) { |
|
current[key] = extend({}, current[key], val); |
|
} else { |
|
current[key] = val; |
|
} |
|
} |
|
|
|
return obj; |
|
}; |
|
|
|
function isValidKey(key) { |
|
return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/setimmediate/setImmediate.js": |
|
/*!***************************************************!*\ |
|
!*** ./node_modules/setimmediate/setImmediate.js ***! |
|
\***************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(global, process) { |
|
|
|
(function (global, undefined) { |
|
"use strict"; |
|
|
|
if (global.setImmediate) { |
|
return; |
|
} |
|
|
|
var nextHandle = 1; // Spec says greater than zero |
|
|
|
var tasksByHandle = {}; |
|
var currentlyRunningATask = false; |
|
var doc = global.document; |
|
var registerImmediate; |
|
|
|
function setImmediate(callback) { |
|
// Callback can either be a function or a string |
|
if (typeof callback !== "function") { |
|
callback = new Function("" + callback); |
|
} // Copy function arguments |
|
|
|
|
|
var args = new Array(arguments.length - 1); |
|
|
|
for (var i = 0; i < args.length; i++) { |
|
args[i] = arguments[i + 1]; |
|
} // Store and register the task |
|
|
|
|
|
var task = { |
|
callback: callback, |
|
args: args |
|
}; |
|
tasksByHandle[nextHandle] = task; |
|
registerImmediate(nextHandle); |
|
return nextHandle++; |
|
} |
|
|
|
function clearImmediate(handle) { |
|
delete tasksByHandle[handle]; |
|
} |
|
|
|
function run(task) { |
|
var callback = task.callback; |
|
var args = task.args; |
|
|
|
switch (args.length) { |
|
case 0: |
|
callback(); |
|
break; |
|
|
|
case 1: |
|
callback(args[0]); |
|
break; |
|
|
|
case 2: |
|
callback(args[0], args[1]); |
|
break; |
|
|
|
case 3: |
|
callback(args[0], args[1], args[2]); |
|
break; |
|
|
|
default: |
|
callback.apply(undefined, args); |
|
break; |
|
} |
|
} |
|
|
|
function runIfPresent(handle) { |
|
// From the spec: "Wait until any invocations of this algorithm started before this one have completed." |
|
// So if we're currently running a task, we'll need to delay this invocation. |
|
if (currentlyRunningATask) { |
|
// Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a |
|
// "too much recursion" error. |
|
setTimeout(runIfPresent, 0, handle); |
|
} else { |
|
var task = tasksByHandle[handle]; |
|
|
|
if (task) { |
|
currentlyRunningATask = true; |
|
|
|
try { |
|
run(task); |
|
} finally { |
|
clearImmediate(handle); |
|
currentlyRunningATask = false; |
|
} |
|
} |
|
} |
|
} |
|
|
|
function installNextTickImplementation() { |
|
registerImmediate = function registerImmediate(handle) { |
|
process.nextTick(function () { |
|
runIfPresent(handle); |
|
}); |
|
}; |
|
} |
|
|
|
function canUsePostMessage() { |
|
// The test against `importScripts` prevents this implementation from being installed inside a web worker, |
|
// where `global.postMessage` means something completely different and can't be used for this purpose. |
|
if (global.postMessage && !global.importScripts) { |
|
var postMessageIsAsynchronous = true; |
|
var oldOnMessage = global.onmessage; |
|
|
|
global.onmessage = function () { |
|
postMessageIsAsynchronous = false; |
|
}; |
|
|
|
global.postMessage("", "*"); |
|
global.onmessage = oldOnMessage; |
|
return postMessageIsAsynchronous; |
|
} |
|
} |
|
|
|
function installPostMessageImplementation() { |
|
// Installs an event handler on `global` for the `message` event: see |
|
// * https://developer.mozilla.org/en/DOM/window.postMessage |
|
// * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages |
|
var messagePrefix = "setImmediate$" + Math.random() + "$"; |
|
|
|
var onGlobalMessage = function onGlobalMessage(event) { |
|
if (event.source === global && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) { |
|
runIfPresent(+event.data.slice(messagePrefix.length)); |
|
} |
|
}; |
|
|
|
if (global.addEventListener) { |
|
global.addEventListener("message", onGlobalMessage, false); |
|
} else { |
|
global.attachEvent("onmessage", onGlobalMessage); |
|
} |
|
|
|
registerImmediate = function registerImmediate(handle) { |
|
global.postMessage(messagePrefix + handle, "*"); |
|
}; |
|
} |
|
|
|
function installMessageChannelImplementation() { |
|
var channel = new MessageChannel(); |
|
|
|
channel.port1.onmessage = function (event) { |
|
var handle = event.data; |
|
runIfPresent(handle); |
|
}; |
|
|
|
registerImmediate = function registerImmediate(handle) { |
|
channel.port2.postMessage(handle); |
|
}; |
|
} |
|
|
|
function installReadyStateChangeImplementation() { |
|
var html = doc.documentElement; |
|
|
|
registerImmediate = function registerImmediate(handle) { |
|
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted |
|
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. |
|
var script = doc.createElement("script"); |
|
|
|
script.onreadystatechange = function () { |
|
runIfPresent(handle); |
|
script.onreadystatechange = null; |
|
html.removeChild(script); |
|
script = null; |
|
}; |
|
|
|
html.appendChild(script); |
|
}; |
|
} |
|
|
|
function installSetTimeoutImplementation() { |
|
registerImmediate = function registerImmediate(handle) { |
|
setTimeout(runIfPresent, 0, handle); |
|
}; |
|
} // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live. |
|
|
|
|
|
var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global); |
|
attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments. |
|
|
|
if ({}.toString.call(global.process) === "[object process]") { |
|
// For Node.js before 0.9 |
|
installNextTickImplementation(); |
|
} else if (canUsePostMessage()) { |
|
// For non-IE10 modern browsers |
|
installPostMessageImplementation(); |
|
} else if (global.MessageChannel) { |
|
// For web workers, where supported |
|
installMessageChannelImplementation(); |
|
} else if (doc && "onreadystatechange" in doc.createElement("script")) { |
|
// For IE 6–8 |
|
installReadyStateChangeImplementation(); |
|
} else { |
|
// For older browsers |
|
installSetTimeoutImplementation(); |
|
} |
|
|
|
attachTo.setImmediate = setImmediate; |
|
attachTo.clearImmediate = clearImmediate; |
|
})(typeof self === "undefined" ? typeof global === "undefined" ? void 0 : global : self); |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/slash/index.js": |
|
/*!*************************************!*\ |
|
!*** ./node_modules/slash/index.js ***! |
|
\*************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
module.exports = function (input) { |
|
var isExtendedLengthPath = /^\\\\\?\\/.test(input); |
|
var hasNonAscii = /[^\u0000-\u0080]+/.test(input); // eslint-disable-line no-control-regex |
|
|
|
if (isExtendedLengthPath || hasNonAscii) { |
|
return input; |
|
} |
|
|
|
return input.replace(/\\/g, '/'); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon-node/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/snapdragon-node/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/snapdragon-node/node_modules/define-property/index.js"); |
|
|
|
var utils = __webpack_require__(/*! snapdragon-util */ "./node_modules/snapdragon-util/index.js"); |
|
|
|
var ownNames; |
|
/** |
|
* Create a new AST `Node` with the given `val` and `type`. |
|
* |
|
* ```js |
|
* var node = new Node('*', 'Star'); |
|
* var node = new Node({type: 'star', val: '*'}); |
|
* ``` |
|
* @name Node |
|
* @param {String|Object} `val` Pass a matched substring, or an object to merge onto the node. |
|
* @param {String} `type` The node type to use when `val` is a string. |
|
* @return {Object} node instance |
|
* @api public |
|
*/ |
|
|
|
function Node(val, type, parent) { |
|
if (typeof type !== 'string') { |
|
parent = type; |
|
type = null; |
|
} |
|
|
|
define(this, 'parent', parent); |
|
define(this, 'isNode', true); |
|
define(this, 'expect', null); |
|
|
|
if (typeof type !== 'string' && isObject(val)) { |
|
lazyKeys(); |
|
var keys = Object.keys(val); |
|
|
|
for (var i = 0; i < keys.length; i++) { |
|
var key = keys[i]; |
|
|
|
if (ownNames.indexOf(key) === -1) { |
|
this[key] = val[key]; |
|
} |
|
} |
|
} else { |
|
this.type = type; |
|
this.val = val; |
|
} |
|
} |
|
/** |
|
* Returns true if the given value is a node. |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var node = new Node({type: 'foo'}); |
|
* console.log(Node.isNode(node)); //=> true |
|
* console.log(Node.isNode({})); //=> false |
|
* ``` |
|
* @param {Object} `node` |
|
* @returns {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.isNode = function (node) { |
|
return utils.isNode(node); |
|
}; |
|
/** |
|
* Define a non-enumberable property on the node instance. |
|
* Useful for adding properties that shouldn't be extended |
|
* or visible during debugging. |
|
* |
|
* ```js |
|
* var node = new Node(); |
|
* node.define('foo', 'something non-enumerable'); |
|
* ``` |
|
* @param {String} `name` |
|
* @param {any} `val` |
|
* @return {Object} returns the node instance |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.define = function (name, val) { |
|
define(this, name, val); |
|
return this; |
|
}; |
|
/** |
|
* Returns true if `node.val` is an empty string, or `node.nodes` does |
|
* not contain any non-empty text nodes. |
|
* |
|
* ```js |
|
* var node = new Node({type: 'text'}); |
|
* node.isEmpty(); //=> true |
|
* node.val = 'foo'; |
|
* node.isEmpty(); //=> false |
|
* ``` |
|
* @param {Function} `fn` (optional) Filter function that is called on `node` and/or child nodes. `isEmpty` will return false immediately when the filter function returns false on any nodes. |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.isEmpty = function (fn) { |
|
return utils.isEmpty(this, fn); |
|
}; |
|
/** |
|
* Given node `foo` and node `bar`, push node `bar` onto `foo.nodes`, and |
|
* set `foo` as `bar.parent`. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* foo.push(bar); |
|
* ``` |
|
* @param {Object} `node` |
|
* @return {Number} Returns the length of `node.nodes` |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.push = function (node) { |
|
assert(Node.isNode(node), 'expected node to be an instance of Node'); |
|
define(node, 'parent', this); |
|
this.nodes = this.nodes || []; |
|
return this.nodes.push(node); |
|
}; |
|
/** |
|
* Given node `foo` and node `bar`, unshift node `bar` onto `foo.nodes`, and |
|
* set `foo` as `bar.parent`. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* foo.unshift(bar); |
|
* ``` |
|
* @param {Object} `node` |
|
* @return {Number} Returns the length of `node.nodes` |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.unshift = function (node) { |
|
assert(Node.isNode(node), 'expected node to be an instance of Node'); |
|
define(node, 'parent', this); |
|
this.nodes = this.nodes || []; |
|
return this.nodes.unshift(node); |
|
}; |
|
/** |
|
* Pop a node from `node.nodes`. |
|
* |
|
* ```js |
|
* var node = new Node({type: 'foo'}); |
|
* node.push(new Node({type: 'a'})); |
|
* node.push(new Node({type: 'b'})); |
|
* node.push(new Node({type: 'c'})); |
|
* node.push(new Node({type: 'd'})); |
|
* console.log(node.nodes.length); |
|
* //=> 4 |
|
* node.pop(); |
|
* console.log(node.nodes.length); |
|
* //=> 3 |
|
* ``` |
|
* @return {Number} Returns the popped `node` |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.pop = function () { |
|
return this.nodes && this.nodes.pop(); |
|
}; |
|
/** |
|
* Shift a node from `node.nodes`. |
|
* |
|
* ```js |
|
* var node = new Node({type: 'foo'}); |
|
* node.push(new Node({type: 'a'})); |
|
* node.push(new Node({type: 'b'})); |
|
* node.push(new Node({type: 'c'})); |
|
* node.push(new Node({type: 'd'})); |
|
* console.log(node.nodes.length); |
|
* //=> 4 |
|
* node.shift(); |
|
* console.log(node.nodes.length); |
|
* //=> 3 |
|
* ``` |
|
* @return {Object} Returns the shifted `node` |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.shift = function () { |
|
return this.nodes && this.nodes.shift(); |
|
}; |
|
/** |
|
* Remove `node` from `node.nodes`. |
|
* |
|
* ```js |
|
* node.remove(childNode); |
|
* ``` |
|
* @param {Object} `node` |
|
* @return {Object} Returns the removed node. |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.remove = function (node) { |
|
assert(Node.isNode(node), 'expected node to be an instance of Node'); |
|
this.nodes = this.nodes || []; |
|
var idx = node.index; |
|
|
|
if (idx !== -1) { |
|
node.index = -1; |
|
return this.nodes.splice(idx, 1); |
|
} |
|
|
|
return null; |
|
}; |
|
/** |
|
* Get the first child node from `node.nodes` that matches the given `type`. |
|
* If `type` is a number, the child node at that index is returned. |
|
* |
|
* ```js |
|
* var child = node.find(1); //<= index of the node to get |
|
* var child = node.find('foo'); //<= node.type of a child node |
|
* var child = node.find(/^(foo|bar)$/); //<= regex to match node.type |
|
* var child = node.find(['foo', 'bar']); //<= array of node.type(s) |
|
* ``` |
|
* @param {String} `type` |
|
* @return {Object} Returns a child node or undefined. |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.find = function (type) { |
|
return utils.findNode(this.nodes, type); |
|
}; |
|
/** |
|
* Return true if the node is the given `type`. |
|
* |
|
* ```js |
|
* var node = new Node({type: 'bar'}); |
|
* cosole.log(node.isType('foo')); // false |
|
* cosole.log(node.isType(/^(foo|bar)$/)); // true |
|
* cosole.log(node.isType(['foo', 'bar'])); // true |
|
* ``` |
|
* @param {String} `type` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.isType = function (type) { |
|
return utils.isType(this, type); |
|
}; |
|
/** |
|
* Return true if the `node.nodes` has the given `type`. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* foo.push(bar); |
|
* |
|
* cosole.log(foo.hasType('qux')); // false |
|
* cosole.log(foo.hasType(/^(qux|bar)$/)); // true |
|
* cosole.log(foo.hasType(['qux', 'bar'])); // true |
|
* ``` |
|
* @param {String} `type` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
Node.prototype.hasType = function (type) { |
|
return utils.hasType(this, type); |
|
}; |
|
/** |
|
* Get the siblings array, or `null` if it doesn't exist. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* var baz = new Node({type: 'baz'}); |
|
* foo.push(bar); |
|
* foo.push(baz); |
|
* |
|
* console.log(bar.siblings.length) // 2 |
|
* console.log(baz.siblings.length) // 2 |
|
* ``` |
|
* @return {Array} |
|
* @api public |
|
*/ |
|
|
|
|
|
Object.defineProperty(Node.prototype, 'siblings', { |
|
set: function set() { |
|
throw new Error('node.siblings is a getter and cannot be defined'); |
|
}, |
|
get: function get() { |
|
return this.parent ? this.parent.nodes : null; |
|
} |
|
}); |
|
/** |
|
* Get the node's current index from `node.parent.nodes`. |
|
* This should always be correct, even when the parent adds nodes. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* var baz = new Node({type: 'baz'}); |
|
* var qux = new Node({type: 'qux'}); |
|
* foo.push(bar); |
|
* foo.push(baz); |
|
* foo.unshift(qux); |
|
* |
|
* console.log(bar.index) // 1 |
|
* console.log(baz.index) // 2 |
|
* console.log(qux.index) // 0 |
|
* ``` |
|
* @return {Number} |
|
* @api public |
|
*/ |
|
|
|
Object.defineProperty(Node.prototype, 'index', { |
|
set: function set(index) { |
|
define(this, 'idx', index); |
|
}, |
|
get: function get() { |
|
if (!Array.isArray(this.siblings)) { |
|
return -1; |
|
} |
|
|
|
var tok = this.idx !== -1 ? this.siblings[this.idx] : null; |
|
|
|
if (tok !== this) { |
|
this.idx = this.siblings.indexOf(this); |
|
} |
|
|
|
return this.idx; |
|
} |
|
}); |
|
/** |
|
* Get the previous node from the siblings array or `null`. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* var baz = new Node({type: 'baz'}); |
|
* foo.push(bar); |
|
* foo.push(baz); |
|
* |
|
* console.log(baz.prev.type) // 'bar' |
|
* ``` |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
Object.defineProperty(Node.prototype, 'prev', { |
|
set: function set() { |
|
throw new Error('node.prev is a getter and cannot be defined'); |
|
}, |
|
get: function get() { |
|
if (Array.isArray(this.siblings)) { |
|
return this.siblings[this.index - 1] || this.parent.prev; |
|
} |
|
|
|
return null; |
|
} |
|
}); |
|
/** |
|
* Get the siblings array, or `null` if it doesn't exist. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* var baz = new Node({type: 'baz'}); |
|
* foo.push(bar); |
|
* foo.push(baz); |
|
* |
|
* console.log(bar.siblings.length) // 2 |
|
* console.log(baz.siblings.length) // 2 |
|
* ``` |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
Object.defineProperty(Node.prototype, 'next', { |
|
set: function set() { |
|
throw new Error('node.next is a getter and cannot be defined'); |
|
}, |
|
get: function get() { |
|
if (Array.isArray(this.siblings)) { |
|
return this.siblings[this.index + 1] || this.parent.next; |
|
} |
|
|
|
return null; |
|
} |
|
}); |
|
/** |
|
* Get the first node from `node.nodes`. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* var baz = new Node({type: 'baz'}); |
|
* var qux = new Node({type: 'qux'}); |
|
* foo.push(bar); |
|
* foo.push(baz); |
|
* foo.push(qux); |
|
* |
|
* console.log(foo.first.type) // 'bar' |
|
* ``` |
|
* @return {Object} The first node, or undefiend |
|
* @api public |
|
*/ |
|
|
|
Object.defineProperty(Node.prototype, 'first', { |
|
get: function get() { |
|
return this.nodes ? this.nodes[0] : null; |
|
} |
|
}); |
|
/** |
|
* Get the last node from `node.nodes`. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* var baz = new Node({type: 'baz'}); |
|
* var qux = new Node({type: 'qux'}); |
|
* foo.push(bar); |
|
* foo.push(baz); |
|
* foo.push(qux); |
|
* |
|
* console.log(foo.last.type) // 'qux' |
|
* ``` |
|
* @return {Object} The last node, or undefiend |
|
* @api public |
|
*/ |
|
|
|
Object.defineProperty(Node.prototype, 'last', { |
|
get: function get() { |
|
return this.nodes ? utils.last(this.nodes) : null; |
|
} |
|
}); |
|
/** |
|
* Get the last node from `node.nodes`. |
|
* |
|
* ```js |
|
* var foo = new Node({type: 'foo'}); |
|
* var bar = new Node({type: 'bar'}); |
|
* var baz = new Node({type: 'baz'}); |
|
* var qux = new Node({type: 'qux'}); |
|
* foo.push(bar); |
|
* foo.push(baz); |
|
* foo.push(qux); |
|
* |
|
* console.log(foo.last.type) // 'qux' |
|
* ``` |
|
* @return {Object} The last node, or undefiend |
|
* @api public |
|
*/ |
|
|
|
Object.defineProperty(Node.prototype, 'scope', { |
|
get: function get() { |
|
if (this.isScope !== true) { |
|
return this.parent ? this.parent.scope : this; |
|
} |
|
|
|
return this; |
|
} |
|
}); |
|
/** |
|
* Get own property names from Node prototype, but only the |
|
* first time `Node` is instantiated |
|
*/ |
|
|
|
function lazyKeys() { |
|
if (!ownNames) { |
|
ownNames = Object.getOwnPropertyNames(Node.prototype); |
|
} |
|
} |
|
/** |
|
* Simplified assertion. Throws an error is `val` is falsey. |
|
*/ |
|
|
|
|
|
function assert(val, message) { |
|
if (!val) throw new Error(message); |
|
} |
|
/** |
|
* Expose `Node` |
|
*/ |
|
|
|
|
|
exports = module.exports = Node; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon-node/node_modules/define-property/index.js": |
|
/*!****************************************************************************!*\ |
|
!*** ./node_modules/snapdragon-node/node_modules/define-property/index.js ***! |
|
\****************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* define-property <https://github.com/jonschlinkert/define-property> |
|
* |
|
* Copyright (c) 2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isDescriptor = __webpack_require__(/*! is-descriptor */ "./node_modules/is-descriptor/index.js"); |
|
|
|
module.exports = function defineProperty(obj, prop, val) { |
|
if (_typeof(obj) !== 'object' && typeof obj !== 'function') { |
|
throw new TypeError('expected an object or function.'); |
|
} |
|
|
|
if (typeof prop !== 'string') { |
|
throw new TypeError('expected `prop` to be a string.'); |
|
} |
|
|
|
if (isDescriptor(val) && ('set' in val || 'get' in val)) { |
|
return Object.defineProperty(obj, prop, val); |
|
} |
|
|
|
return Object.defineProperty(obj, prop, { |
|
configurable: true, |
|
enumerable: false, |
|
writable: true, |
|
value: val |
|
}); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon-util/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/snapdragon-util/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/kind-of/index.js"); |
|
|
|
var utils = module.exports; |
|
/** |
|
* Returns true if the given value is a node. |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var node = new Node({type: 'foo'}); |
|
* console.log(utils.isNode(node)); //=> true |
|
* console.log(utils.isNode({})); //=> false |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @returns {Boolean} |
|
* @api public |
|
*/ |
|
|
|
utils.isNode = function (node) { |
|
return typeOf(node) === 'object' && node.isNode === true; |
|
}; |
|
/** |
|
* Emit an empty string for the given `node`. |
|
* |
|
* ```js |
|
* // do nothing for beginning-of-string |
|
* snapdragon.compiler.set('bos', utils.noop); |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @returns {undefined} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.noop = function (node) { |
|
append(this, '', node); |
|
}; |
|
/** |
|
* Appdend `node.val` to `compiler.output`, exactly as it was created |
|
* by the parser. |
|
* |
|
* ```js |
|
* snapdragon.compiler.set('text', utils.identity); |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @returns {undefined} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.identity = function (node) { |
|
append(this, node.val, node); |
|
}; |
|
/** |
|
* Previously named `.emit`, this method appends the given `val` |
|
* to `compiler.output` for the given node. Useful when you know |
|
* what value should be appended advance, regardless of the actual |
|
* value of `node.val`. |
|
* |
|
* ```js |
|
* snapdragon.compiler |
|
* .set('i', function(node) { |
|
* this.mapVisit(node); |
|
* }) |
|
* .set('i.open', utils.append('<i>')) |
|
* .set('i.close', utils.append('</i>')) |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @returns {Function} Returns a compiler middleware function. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.append = function (val) { |
|
return function (node) { |
|
append(this, val, node); |
|
}; |
|
}; |
|
/** |
|
* Used in compiler middleware, this onverts an AST node into |
|
* an empty `text` node and deletes `node.nodes` if it exists. |
|
* The advantage of this method is that, as opposed to completely |
|
* removing the node, indices will not need to be re-calculated |
|
* in sibling nodes, and nothing is appended to the output. |
|
* |
|
* ```js |
|
* utils.toNoop(node); |
|
* // convert `node.nodes` to the given value instead of deleting it |
|
* utils.toNoop(node, []); |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {Array} `nodes` Optionally pass a new `nodes` value, to replace the existing `node.nodes` array. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.toNoop = function (node, nodes) { |
|
if (nodes) { |
|
node.nodes = nodes; |
|
} else { |
|
delete node.nodes; |
|
node.type = 'text'; |
|
node.val = ''; |
|
} |
|
}; |
|
/** |
|
* Visit `node` with the given `fn`. The built-in `.visit` method in snapdragon |
|
* automatically calls registered compilers, this allows you to pass a visitor |
|
* function. |
|
* |
|
* ```js |
|
* snapdragon.compiler.set('i', function(node) { |
|
* utils.visit(node, function(childNode) { |
|
* // do stuff with "childNode" |
|
* return childNode; |
|
* }); |
|
* }); |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {Function} `fn` |
|
* @return {Object} returns the node after recursively visiting all child nodes. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.visit = function (node, fn) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
assert(isFunction(fn), 'expected a visitor function'); |
|
fn(node); |
|
return node.nodes ? utils.mapVisit(node, fn) : node; |
|
}; |
|
/** |
|
* Map [visit](#visit) the given `fn` over `node.nodes`. This is called by |
|
* [visit](#visit), use this method if you do not want `fn` to be called on |
|
* the first node. |
|
* |
|
* ```js |
|
* snapdragon.compiler.set('i', function(node) { |
|
* utils.mapVisit(node, function(childNode) { |
|
* // do stuff with "childNode" |
|
* return childNode; |
|
* }); |
|
* }); |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {Object} `options` |
|
* @param {Function} `fn` |
|
* @return {Object} returns the node |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.mapVisit = function (node, fn) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
assert(isArray(node.nodes), 'expected node.nodes to be an array'); |
|
assert(isFunction(fn), 'expected a visitor function'); |
|
|
|
for (var i = 0; i < node.nodes.length; i++) { |
|
utils.visit(node.nodes[i], fn); |
|
} |
|
|
|
return node; |
|
}; |
|
/** |
|
* Unshift an `*.open` node onto `node.nodes`. |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* snapdragon.parser.set('brace', function(node) { |
|
* var match = this.match(/^{/); |
|
* if (match) { |
|
* var parent = new Node({type: 'brace'}); |
|
* utils.addOpen(parent, Node); |
|
* console.log(parent.nodes[0]): |
|
* // { type: 'brace.open', val: '' }; |
|
* |
|
* // push the parent "brace" node onto the stack |
|
* this.push(parent); |
|
* |
|
* // return the parent node, so it's also added to the AST |
|
* return brace; |
|
* } |
|
* }); |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. |
|
* @param {Function} `filter` Optionaly specify a filter function to exclude the node. |
|
* @return {Object} Returns the created opening node. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.addOpen = function (node, Node, val, filter) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
assert(isFunction(Node), 'expected Node to be a constructor function'); |
|
|
|
if (typeof val === 'function') { |
|
filter = val; |
|
val = ''; |
|
} |
|
|
|
if (typeof filter === 'function' && !filter(node)) return; |
|
var open = new Node({ |
|
type: node.type + '.open', |
|
val: val |
|
}); |
|
var unshift = node.unshift || node.unshiftNode; |
|
|
|
if (typeof unshift === 'function') { |
|
unshift.call(node, open); |
|
} else { |
|
utils.unshiftNode(node, open); |
|
} |
|
|
|
return open; |
|
}; |
|
/** |
|
* Push a `*.close` node onto `node.nodes`. |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* snapdragon.parser.set('brace', function(node) { |
|
* var match = this.match(/^}/); |
|
* if (match) { |
|
* var parent = this.parent(); |
|
* if (parent.type !== 'brace') { |
|
* throw new Error('missing opening: ' + '}'); |
|
* } |
|
* |
|
* utils.addClose(parent, Node); |
|
* console.log(parent.nodes[parent.nodes.length - 1]): |
|
* // { type: 'brace.close', val: '' }; |
|
* |
|
* // no need to return a node, since the parent |
|
* // was already added to the AST |
|
* return; |
|
* } |
|
* }); |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. |
|
* @param {Function} `filter` Optionaly specify a filter function to exclude the node. |
|
* @return {Object} Returns the created closing node. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.addClose = function (node, Node, val, filter) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
assert(isFunction(Node), 'expected Node to be a constructor function'); |
|
|
|
if (typeof val === 'function') { |
|
filter = val; |
|
val = ''; |
|
} |
|
|
|
if (typeof filter === 'function' && !filter(node)) return; |
|
var close = new Node({ |
|
type: node.type + '.close', |
|
val: val |
|
}); |
|
var push = node.push || node.pushNode; |
|
|
|
if (typeof push === 'function') { |
|
push.call(node, close); |
|
} else { |
|
utils.pushNode(node, close); |
|
} |
|
|
|
return close; |
|
}; |
|
/** |
|
* Wraps the given `node` with `*.open` and `*.close` nodes. |
|
* |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. |
|
* @param {Function} `filter` Optionaly specify a filter function to exclude the node. |
|
* @return {Object} Returns the node |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.wrapNodes = function (node, Node, filter) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
assert(isFunction(Node), 'expected Node to be a constructor function'); |
|
utils.addOpen(node, Node, filter); |
|
utils.addClose(node, Node, filter); |
|
return node; |
|
}; |
|
/** |
|
* Push the given `node` onto `parent.nodes`, and set `parent` as `node.parent. |
|
* |
|
* ```js |
|
* var parent = new Node({type: 'foo'}); |
|
* var node = new Node({type: 'bar'}); |
|
* utils.pushNode(parent, node); |
|
* console.log(parent.nodes[0].type) // 'bar' |
|
* console.log(node.parent.type) // 'foo' |
|
* ``` |
|
* @param {Object} `parent` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Object} Returns the child node |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.pushNode = function (parent, node) { |
|
assert(utils.isNode(parent), 'expected parent node to be an instance of Node'); |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
node.define('parent', parent); |
|
parent.nodes = parent.nodes || []; |
|
parent.nodes.push(node); |
|
return node; |
|
}; |
|
/** |
|
* Unshift `node` onto `parent.nodes`, and set `parent` as `node.parent. |
|
* |
|
* ```js |
|
* var parent = new Node({type: 'foo'}); |
|
* var node = new Node({type: 'bar'}); |
|
* utils.unshiftNode(parent, node); |
|
* console.log(parent.nodes[0].type) // 'bar' |
|
* console.log(node.parent.type) // 'foo' |
|
* ``` |
|
* @param {Object} `parent` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {undefined} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.unshiftNode = function (parent, node) { |
|
assert(utils.isNode(parent), 'expected parent node to be an instance of Node'); |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
node.define('parent', parent); |
|
parent.nodes = parent.nodes || []; |
|
parent.nodes.unshift(node); |
|
}; |
|
/** |
|
* Pop the last `node` off of `parent.nodes`. The advantage of |
|
* using this method is that it checks for `node.nodes` and works |
|
* with any version of `snapdragon-node`. |
|
* |
|
* ```js |
|
* var parent = new Node({type: 'foo'}); |
|
* utils.pushNode(parent, new Node({type: 'foo'})); |
|
* utils.pushNode(parent, new Node({type: 'bar'})); |
|
* utils.pushNode(parent, new Node({type: 'baz'})); |
|
* console.log(parent.nodes.length); //=> 3 |
|
* utils.popNode(parent); |
|
* console.log(parent.nodes.length); //=> 2 |
|
* ``` |
|
* @param {Object} `parent` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Number|Undefined} Returns the length of `node.nodes` or undefined. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.popNode = function (node) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
|
|
if (typeof node.pop === 'function') { |
|
return node.pop(); |
|
} |
|
|
|
return node.nodes && node.nodes.pop(); |
|
}; |
|
/** |
|
* Shift the first `node` off of `parent.nodes`. The advantage of |
|
* using this method is that it checks for `node.nodes` and works |
|
* with any version of `snapdragon-node`. |
|
* |
|
* ```js |
|
* var parent = new Node({type: 'foo'}); |
|
* utils.pushNode(parent, new Node({type: 'foo'})); |
|
* utils.pushNode(parent, new Node({type: 'bar'})); |
|
* utils.pushNode(parent, new Node({type: 'baz'})); |
|
* console.log(parent.nodes.length); //=> 3 |
|
* utils.shiftNode(parent); |
|
* console.log(parent.nodes.length); //=> 2 |
|
* ``` |
|
* @param {Object} `parent` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Number|Undefined} Returns the length of `node.nodes` or undefined. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.shiftNode = function (node) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
|
|
if (typeof node.shift === 'function') { |
|
return node.shift(); |
|
} |
|
|
|
return node.nodes && node.nodes.shift(); |
|
}; |
|
/** |
|
* Remove the specified `node` from `parent.nodes`. |
|
* |
|
* ```js |
|
* var parent = new Node({type: 'abc'}); |
|
* var foo = new Node({type: 'foo'}); |
|
* utils.pushNode(parent, foo); |
|
* utils.pushNode(parent, new Node({type: 'bar'})); |
|
* utils.pushNode(parent, new Node({type: 'baz'})); |
|
* console.log(parent.nodes.length); //=> 3 |
|
* utils.removeNode(parent, foo); |
|
* console.log(parent.nodes.length); //=> 2 |
|
* ``` |
|
* @param {Object} `parent` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Object|undefined} Returns the removed node, if successful, or undefined if it does not exist on `parent.nodes`. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.removeNode = function (parent, node) { |
|
assert(utils.isNode(parent), 'expected parent.node to be an instance of Node'); |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
|
|
if (!parent.nodes) { |
|
return null; |
|
} |
|
|
|
if (typeof parent.remove === 'function') { |
|
return parent.remove(node); |
|
} |
|
|
|
var idx = parent.nodes.indexOf(node); |
|
|
|
if (idx !== -1) { |
|
return parent.nodes.splice(idx, 1); |
|
} |
|
}; |
|
/** |
|
* Returns true if `node.type` matches the given `type`. Throws a |
|
* `TypeError` if `node` is not an instance of `Node`. |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var node = new Node({type: 'foo'}); |
|
* console.log(utils.isType(node, 'foo')); // false |
|
* console.log(utils.isType(node, 'bar')); // true |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {String} `type` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.isType = function (node, type) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
|
|
switch (typeOf(type)) { |
|
case 'array': |
|
var types = type.slice(); |
|
|
|
for (var i = 0; i < types.length; i++) { |
|
if (utils.isType(node, types[i])) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
|
|
case 'string': |
|
return node.type === type; |
|
|
|
case 'regexp': |
|
return type.test(node.type); |
|
|
|
default: |
|
{ |
|
throw new TypeError('expected "type" to be an array, string or regexp'); |
|
} |
|
} |
|
}; |
|
/** |
|
* Returns true if the given `node` has the given `type` in `node.nodes`. |
|
* Throws a `TypeError` if `node` is not an instance of `Node`. |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var node = new Node({ |
|
* type: 'foo', |
|
* nodes: [ |
|
* new Node({type: 'bar'}), |
|
* new Node({type: 'baz'}) |
|
* ] |
|
* }); |
|
* console.log(utils.hasType(node, 'xyz')); // false |
|
* console.log(utils.hasType(node, 'baz')); // true |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {String} `type` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.hasType = function (node, type) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
if (!Array.isArray(node.nodes)) return false; |
|
|
|
for (var i = 0; i < node.nodes.length; i++) { |
|
if (utils.isType(node.nodes[i], type)) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Returns the first node from `node.nodes` of the given `type` |
|
* |
|
* ```js |
|
* var node = new Node({ |
|
* type: 'foo', |
|
* nodes: [ |
|
* new Node({type: 'text', val: 'abc'}), |
|
* new Node({type: 'text', val: 'xyz'}) |
|
* ] |
|
* }); |
|
* |
|
* var textNode = utils.firstOfType(node.nodes, 'text'); |
|
* console.log(textNode.val); |
|
* //=> 'abc' |
|
* ``` |
|
* @param {Array} `nodes` |
|
* @param {String} `type` |
|
* @return {Object|undefined} Returns the first matching node or undefined. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.firstOfType = function (nodes, type) { |
|
for (var i = 0; i < nodes.length; i++) { |
|
var node = nodes[i]; |
|
|
|
if (utils.isType(node, type)) { |
|
return node; |
|
} |
|
} |
|
}; |
|
/** |
|
* Returns the node at the specified index, or the first node of the |
|
* given `type` from `node.nodes`. |
|
* |
|
* ```js |
|
* var node = new Node({ |
|
* type: 'foo', |
|
* nodes: [ |
|
* new Node({type: 'text', val: 'abc'}), |
|
* new Node({type: 'text', val: 'xyz'}) |
|
* ] |
|
* }); |
|
* |
|
* var nodeOne = utils.findNode(node.nodes, 'text'); |
|
* console.log(nodeOne.val); |
|
* //=> 'abc' |
|
* |
|
* var nodeTwo = utils.findNode(node.nodes, 1); |
|
* console.log(nodeTwo.val); |
|
* //=> 'xyz' |
|
* ``` |
|
* |
|
* @param {Array} `nodes` |
|
* @param {String|Number} `type` Node type or index. |
|
* @return {Object} Returns a node or undefined. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.findNode = function (nodes, type) { |
|
if (!Array.isArray(nodes)) { |
|
return null; |
|
} |
|
|
|
if (typeof type === 'number') { |
|
return nodes[type]; |
|
} |
|
|
|
return utils.firstOfType(nodes, type); |
|
}; |
|
/** |
|
* Returns true if the given node is an "*.open" node. |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var brace = new Node({type: 'brace'}); |
|
* var open = new Node({type: 'brace.open'}); |
|
* var close = new Node({type: 'brace.close'}); |
|
* |
|
* console.log(utils.isOpen(brace)); // false |
|
* console.log(utils.isOpen(open)); // true |
|
* console.log(utils.isOpen(close)); // false |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.isOpen = function (node) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
return node.type.slice(-5) === '.open'; |
|
}; |
|
/** |
|
* Returns true if the given node is a "*.close" node. |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var brace = new Node({type: 'brace'}); |
|
* var open = new Node({type: 'brace.open'}); |
|
* var close = new Node({type: 'brace.close'}); |
|
* |
|
* console.log(utils.isClose(brace)); // false |
|
* console.log(utils.isClose(open)); // false |
|
* console.log(utils.isClose(close)); // true |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.isClose = function (node) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
return node.type.slice(-6) === '.close'; |
|
}; |
|
/** |
|
* Returns true if `node.nodes` **has** an `.open` node |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var brace = new Node({ |
|
* type: 'brace', |
|
* nodes: [] |
|
* }); |
|
* |
|
* var open = new Node({type: 'brace.open'}); |
|
* console.log(utils.hasOpen(brace)); // false |
|
* |
|
* brace.pushNode(open); |
|
* console.log(utils.hasOpen(brace)); // true |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.hasOpen = function (node) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
var first = node.first || node.nodes ? node.nodes[0] : null; |
|
|
|
if (utils.isNode(first)) { |
|
return first.type === node.type + '.open'; |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Returns true if `node.nodes` **has** a `.close` node |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var brace = new Node({ |
|
* type: 'brace', |
|
* nodes: [] |
|
* }); |
|
* |
|
* var close = new Node({type: 'brace.close'}); |
|
* console.log(utils.hasClose(brace)); // false |
|
* |
|
* brace.pushNode(close); |
|
* console.log(utils.hasClose(brace)); // true |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.hasClose = function (node) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
var last = node.last || node.nodes ? node.nodes[node.nodes.length - 1] : null; |
|
|
|
if (utils.isNode(last)) { |
|
return last.type === node.type + '.close'; |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Returns true if `node.nodes` has both `.open` and `.close` nodes |
|
* |
|
* ```js |
|
* var Node = require('snapdragon-node'); |
|
* var brace = new Node({ |
|
* type: 'brace', |
|
* nodes: [] |
|
* }); |
|
* |
|
* var open = new Node({type: 'brace.open'}); |
|
* var close = new Node({type: 'brace.close'}); |
|
* console.log(utils.hasOpen(brace)); // false |
|
* console.log(utils.hasClose(brace)); // false |
|
* |
|
* brace.pushNode(open); |
|
* brace.pushNode(close); |
|
* console.log(utils.hasOpen(brace)); // true |
|
* console.log(utils.hasClose(brace)); // true |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.hasOpenAndClose = function (node) { |
|
return utils.hasOpen(node) && utils.hasClose(node); |
|
}; |
|
/** |
|
* Push the given `node` onto the `state.inside` array for the |
|
* given type. This array is used as a specialized "stack" for |
|
* only the given `node.type`. |
|
* |
|
* ```js |
|
* var state = { inside: {}}; |
|
* var node = new Node({type: 'brace'}); |
|
* utils.addType(state, node); |
|
* console.log(state.inside); |
|
* //=> { brace: [{type: 'brace'}] } |
|
* ``` |
|
* @param {Object} `state` The `compiler.state` object or custom state object. |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Array} Returns the `state.inside` stack for the given type. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.addType = function (state, node) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
assert(isObject(state), 'expected state to be an object'); |
|
var type = node.parent ? node.parent.type : node.type.replace(/\.open$/, ''); |
|
|
|
if (!state.hasOwnProperty('inside')) { |
|
state.inside = {}; |
|
} |
|
|
|
if (!state.inside.hasOwnProperty(type)) { |
|
state.inside[type] = []; |
|
} |
|
|
|
var arr = state.inside[type]; |
|
arr.push(node); |
|
return arr; |
|
}; |
|
/** |
|
* Remove the given `node` from the `state.inside` array for the |
|
* given type. This array is used as a specialized "stack" for |
|
* only the given `node.type`. |
|
* |
|
* ```js |
|
* var state = { inside: {}}; |
|
* var node = new Node({type: 'brace'}); |
|
* utils.addType(state, node); |
|
* console.log(state.inside); |
|
* //=> { brace: [{type: 'brace'}] } |
|
* utils.removeType(state, node); |
|
* //=> { brace: [] } |
|
* ``` |
|
* @param {Object} `state` The `compiler.state` object or custom state object. |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @return {Array} Returns the `state.inside` stack for the given type. |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.removeType = function (state, node) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
assert(isObject(state), 'expected state to be an object'); |
|
var type = node.parent ? node.parent.type : node.type.replace(/\.close$/, ''); |
|
|
|
if (state.inside.hasOwnProperty(type)) { |
|
return state.inside[type].pop(); |
|
} |
|
}; |
|
/** |
|
* Returns true if `node.val` is an empty string, or `node.nodes` does |
|
* not contain any non-empty text nodes. |
|
* |
|
* ```js |
|
* var node = new Node({type: 'text'}); |
|
* utils.isEmpty(node); //=> true |
|
* node.val = 'foo'; |
|
* utils.isEmpty(node); //=> false |
|
* ``` |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {Function} `fn` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.isEmpty = function (node, fn) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
|
|
if (!Array.isArray(node.nodes)) { |
|
if (node.type !== 'text') { |
|
return true; |
|
} |
|
|
|
if (typeof fn === 'function') { |
|
return fn(node, node.parent); |
|
} |
|
|
|
return !utils.trim(node.val); |
|
} |
|
|
|
for (var i = 0; i < node.nodes.length; i++) { |
|
var child = node.nodes[i]; |
|
|
|
if (utils.isOpen(child) || utils.isClose(child)) { |
|
continue; |
|
} |
|
|
|
if (!utils.isEmpty(child, fn)) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
}; |
|
/** |
|
* Returns true if the `state.inside` stack for the given type exists |
|
* and has one or more nodes on it. |
|
* |
|
* ```js |
|
* var state = { inside: {}}; |
|
* var node = new Node({type: 'brace'}); |
|
* console.log(utils.isInsideType(state, 'brace')); //=> false |
|
* utils.addType(state, node); |
|
* console.log(utils.isInsideType(state, 'brace')); //=> true |
|
* utils.removeType(state, node); |
|
* console.log(utils.isInsideType(state, 'brace')); //=> false |
|
* ``` |
|
* @param {Object} `state` |
|
* @param {String} `type` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.isInsideType = function (state, type) { |
|
assert(isObject(state), 'expected state to be an object'); |
|
assert(isString(type), 'expected type to be a string'); |
|
|
|
if (!state.hasOwnProperty('inside')) { |
|
return false; |
|
} |
|
|
|
if (!state.inside.hasOwnProperty(type)) { |
|
return false; |
|
} |
|
|
|
return state.inside[type].length > 0; |
|
}; |
|
/** |
|
* Returns true if `node` is either a child or grand-child of the given `type`, |
|
* or `state.inside[type]` is a non-empty array. |
|
* |
|
* ```js |
|
* var state = { inside: {}}; |
|
* var node = new Node({type: 'brace'}); |
|
* var open = new Node({type: 'brace.open'}); |
|
* console.log(utils.isInside(state, open, 'brace')); //=> false |
|
* utils.pushNode(node, open); |
|
* console.log(utils.isInside(state, open, 'brace')); //=> true |
|
* ``` |
|
* @param {Object} `state` Either the `compiler.state` object, if it exists, or a user-supplied state object. |
|
* @param {Object} `node` Instance of [snapdragon-node][] |
|
* @param {String} `type` The `node.type` to check for. |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.isInside = function (state, node, type) { |
|
assert(utils.isNode(node), 'expected node to be an instance of Node'); |
|
assert(isObject(state), 'expected state to be an object'); |
|
|
|
if (Array.isArray(type)) { |
|
for (var i = 0; i < type.length; i++) { |
|
if (utils.isInside(state, node, type[i])) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
|
|
var parent = node.parent; |
|
|
|
if (typeof type === 'string') { |
|
return parent && parent.type === type || utils.isInsideType(state, type); |
|
} |
|
|
|
if (typeOf(type) === 'regexp') { |
|
if (parent && parent.type && type.test(parent.type)) { |
|
return true; |
|
} |
|
|
|
var keys = Object.keys(state.inside); |
|
var len = keys.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
var key = keys[idx]; |
|
var val = state.inside[key]; |
|
|
|
if (Array.isArray(val) && val.length !== 0 && type.test(key)) { |
|
return true; |
|
} |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
/** |
|
* Get the last `n` element from the given `array`. Used for getting |
|
* a node from `node.nodes.` |
|
* |
|
* @param {Array} `array` |
|
* @param {Number} `n` |
|
* @return {undefined} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.last = function (arr, n) { |
|
return arr[arr.length - (n || 1)]; |
|
}; |
|
/** |
|
* Cast the given `val` to an array. |
|
* |
|
* ```js |
|
* console.log(utils.arrayify('')); |
|
* //=> [] |
|
* console.log(utils.arrayify('foo')); |
|
* //=> ['foo'] |
|
* console.log(utils.arrayify(['foo'])); |
|
* //=> ['foo'] |
|
* ``` |
|
* @param {any} `val` |
|
* @return {Array} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.arrayify = function (val) { |
|
if (typeof val === 'string' && val !== '') { |
|
return [val]; |
|
} |
|
|
|
if (!Array.isArray(val)) { |
|
return []; |
|
} |
|
|
|
return val; |
|
}; |
|
/** |
|
* Convert the given `val` to a string by joining with `,`. Useful |
|
* for creating a cheerio/CSS/DOM-style selector from a list of strings. |
|
* |
|
* @param {any} `val` |
|
* @return {Array} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.stringify = function (val) { |
|
return utils.arrayify(val).join(','); |
|
}; |
|
/** |
|
* Ensure that the given value is a string and call `.trim()` on it, |
|
* or return an empty string. |
|
* |
|
* @param {String} `str` |
|
* @return {String} |
|
* @api public |
|
*/ |
|
|
|
|
|
utils.trim = function (str) { |
|
return typeof str === 'string' ? str.trim() : ''; |
|
}; |
|
/** |
|
* Return true if val is an object |
|
*/ |
|
|
|
|
|
function isObject(val) { |
|
return typeOf(val) === 'object'; |
|
} |
|
/** |
|
* Return true if val is a string |
|
*/ |
|
|
|
|
|
function isString(val) { |
|
return typeof val === 'string'; |
|
} |
|
/** |
|
* Return true if val is a function |
|
*/ |
|
|
|
|
|
function isFunction(val) { |
|
return typeof val === 'function'; |
|
} |
|
/** |
|
* Return true if val is an array |
|
*/ |
|
|
|
|
|
function isArray(val) { |
|
return Array.isArray(val); |
|
} |
|
/** |
|
* Shim to ensure the `.append` methods work with any version of snapdragon |
|
*/ |
|
|
|
|
|
function append(compiler, val, node) { |
|
if (typeof compiler.append !== 'function') { |
|
return compiler.emit(val, node); |
|
} |
|
|
|
return compiler.append(val, node); |
|
} |
|
/** |
|
* Simplified assertion. Throws an error is `val` is falsey. |
|
*/ |
|
|
|
|
|
function assert(val, message) { |
|
if (!val) throw new Error(message); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/index.js": |
|
/*!******************************************!*\ |
|
!*** ./node_modules/snapdragon/index.js ***! |
|
\******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var Base = __webpack_require__(/*! base */ "./node_modules/base/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
|
|
var Compiler = __webpack_require__(/*! ./lib/compiler */ "./node_modules/snapdragon/lib/compiler.js"); |
|
|
|
var Parser = __webpack_require__(/*! ./lib/parser */ "./node_modules/snapdragon/lib/parser.js"); |
|
|
|
var utils = __webpack_require__(/*! ./lib/utils */ "./node_modules/snapdragon/lib/utils.js"); |
|
|
|
var regexCache = {}; |
|
var cache = {}; |
|
/** |
|
* Create a new instance of `Snapdragon` with the given `options`. |
|
* |
|
* ```js |
|
* var snapdragon = new Snapdragon(); |
|
* ``` |
|
* |
|
* @param {Object} `options` |
|
* @api public |
|
*/ |
|
|
|
function Snapdragon(options) { |
|
Base.call(this, null, options); |
|
this.options = utils.extend({ |
|
source: 'string' |
|
}, this.options); |
|
this.compiler = new Compiler(this.options); |
|
this.parser = new Parser(this.options); |
|
Object.defineProperty(this, 'compilers', { |
|
get: function get() { |
|
return this.compiler.compilers; |
|
} |
|
}); |
|
Object.defineProperty(this, 'parsers', { |
|
get: function get() { |
|
return this.parser.parsers; |
|
} |
|
}); |
|
Object.defineProperty(this, 'regex', { |
|
get: function get() { |
|
return this.parser.regex; |
|
} |
|
}); |
|
} |
|
/** |
|
* Inherit Base |
|
*/ |
|
|
|
|
|
Base.extend(Snapdragon); |
|
/** |
|
* Add a parser to `snapdragon.parsers` for capturing the given `type` using |
|
* the specified regex or parser function. A function is useful if you need |
|
* to customize how the token is created and/or have access to the parser |
|
* instance to check options, etc. |
|
* |
|
* ```js |
|
* snapdragon |
|
* .capture('slash', /^\//) |
|
* .capture('dot', function() { |
|
* var pos = this.position(); |
|
* var m = this.match(/^\./); |
|
* if (!m) return; |
|
* return pos({ |
|
* type: 'dot', |
|
* val: m[0] |
|
* }); |
|
* }); |
|
* ``` |
|
* @param {String} `type` |
|
* @param {RegExp|Function} `regex` |
|
* @return {Object} Returns the parser instance for chaining |
|
* @api public |
|
*/ |
|
|
|
Snapdragon.prototype.capture = function () { |
|
return this.parser.capture.apply(this.parser, arguments); |
|
}; |
|
/** |
|
* Register a plugin `fn`. |
|
* |
|
* ```js |
|
* var snapdragon = new Snapdgragon([options]); |
|
* snapdragon.use(function() { |
|
* console.log(this); //<= snapdragon instance |
|
* console.log(this.parser); //<= parser instance |
|
* console.log(this.compiler); //<= compiler instance |
|
* }); |
|
* ``` |
|
* @param {Object} `fn` |
|
* @api public |
|
*/ |
|
|
|
|
|
Snapdragon.prototype.use = function (fn) { |
|
fn.call(this, this); |
|
return this; |
|
}; |
|
/** |
|
* Parse the given `str`. |
|
* |
|
* ```js |
|
* var snapdragon = new Snapdgragon([options]); |
|
* // register parsers |
|
* snapdragon.parser.use(function() {}); |
|
* |
|
* // parse |
|
* var ast = snapdragon.parse('foo/bar'); |
|
* console.log(ast); |
|
* ``` |
|
* @param {String} `str` |
|
* @param {Object} `options` Set `options.sourcemap` to true to enable source maps. |
|
* @return {Object} Returns an AST. |
|
* @api public |
|
*/ |
|
|
|
|
|
Snapdragon.prototype.parse = function (str, options) { |
|
this.options = utils.extend({}, this.options, options); |
|
var parsed = this.parser.parse(str, this.options); // add non-enumerable parser reference |
|
|
|
define(parsed, 'parser', this.parser); |
|
return parsed; |
|
}; |
|
/** |
|
* Compile the given `AST`. |
|
* |
|
* ```js |
|
* var snapdragon = new Snapdgragon([options]); |
|
* // register plugins |
|
* snapdragon.use(function() {}); |
|
* // register parser plugins |
|
* snapdragon.parser.use(function() {}); |
|
* // register compiler plugins |
|
* snapdragon.compiler.use(function() {}); |
|
* |
|
* // parse |
|
* var ast = snapdragon.parse('foo/bar'); |
|
* |
|
* // compile |
|
* var res = snapdragon.compile(ast); |
|
* console.log(res.output); |
|
* ``` |
|
* @param {Object} `ast` |
|
* @param {Object} `options` |
|
* @return {Object} Returns an object with an `output` property with the rendered string. |
|
* @api public |
|
*/ |
|
|
|
|
|
Snapdragon.prototype.compile = function (ast, options) { |
|
this.options = utils.extend({}, this.options, options); |
|
var compiled = this.compiler.compile(ast, this.options); // add non-enumerable compiler reference |
|
|
|
define(compiled, 'compiler', this.compiler); |
|
return compiled; |
|
}; |
|
/** |
|
* Expose `Snapdragon` |
|
*/ |
|
|
|
|
|
module.exports = Snapdragon; |
|
/** |
|
* Expose `Parser` and `Compiler` |
|
*/ |
|
|
|
module.exports.Compiler = Compiler; |
|
module.exports.Parser = Parser; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/lib/compiler.js": |
|
/*!*************************************************!*\ |
|
!*** ./node_modules/snapdragon/lib/compiler.js ***! |
|
\*************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(__filename) { |
|
|
|
var use = __webpack_require__(/*! use */ "./node_modules/use/index.js"); |
|
|
|
var _define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
|
|
var debug = __webpack_require__(/*! debug */ "./node_modules/snapdragon/node_modules/debug/src/browser.js")('snapdragon:compiler'); |
|
|
|
var utils = __webpack_require__(/*! ./utils */ "./node_modules/snapdragon/lib/utils.js"); |
|
/** |
|
* Create a new `Compiler` with the given `options`. |
|
* @param {Object} `options` |
|
*/ |
|
|
|
|
|
function Compiler(options, state) { |
|
debug('initializing', __filename); |
|
this.options = utils.extend({ |
|
source: 'string' |
|
}, options); |
|
this.state = state || {}; |
|
this.compilers = {}; |
|
this.output = ''; |
|
this.set('eos', function (node) { |
|
return this.emit(node.val, node); |
|
}); |
|
this.set('noop', function (node) { |
|
return this.emit(node.val, node); |
|
}); |
|
this.set('bos', function (node) { |
|
return this.emit(node.val, node); |
|
}); |
|
use(this); |
|
} |
|
/** |
|
* Prototype methods |
|
*/ |
|
|
|
|
|
Compiler.prototype = { |
|
/** |
|
* Throw an error message with details including the cursor position. |
|
* @param {String} `msg` Message to use in the Error. |
|
*/ |
|
error: function error(msg, node) { |
|
var pos = node.position || { |
|
start: { |
|
column: 0 |
|
} |
|
}; |
|
var message = this.options.source + ' column:' + pos.start.column + ': ' + msg; |
|
var err = new Error(message); |
|
err.reason = msg; |
|
err.column = pos.start.column; |
|
err.source = this.pattern; |
|
|
|
if (this.options.silent) { |
|
this.errors.push(err); |
|
} else { |
|
throw err; |
|
} |
|
}, |
|
|
|
/** |
|
* Define a non-enumberable property on the `Compiler` instance. |
|
* |
|
* ```js |
|
* compiler.define('foo', 'bar'); |
|
* ``` |
|
* @name .define |
|
* @param {String} `key` propery name |
|
* @param {any} `val` property value |
|
* @return {Object} Returns the Compiler instance for chaining. |
|
* @api public |
|
*/ |
|
define: function define(key, val) { |
|
_define(this, key, val); |
|
|
|
return this; |
|
}, |
|
|
|
/** |
|
* Emit `node.val` |
|
*/ |
|
emit: function emit(str, node) { |
|
this.output += str; |
|
return str; |
|
}, |
|
|
|
/** |
|
* Add a compiler `fn` with the given `name` |
|
*/ |
|
set: function set(name, fn) { |
|
this.compilers[name] = fn; |
|
return this; |
|
}, |
|
|
|
/** |
|
* Get compiler `name`. |
|
*/ |
|
get: function get(name) { |
|
return this.compilers[name]; |
|
}, |
|
|
|
/** |
|
* Get the previous AST node. |
|
*/ |
|
prev: function prev(n) { |
|
return this.ast.nodes[this.idx - (n || 1)] || { |
|
type: 'bos', |
|
val: '' |
|
}; |
|
}, |
|
|
|
/** |
|
* Get the next AST node. |
|
*/ |
|
next: function next(n) { |
|
return this.ast.nodes[this.idx + (n || 1)] || { |
|
type: 'eos', |
|
val: '' |
|
}; |
|
}, |
|
|
|
/** |
|
* Visit `node`. |
|
*/ |
|
visit: function visit(node, nodes, i) { |
|
var fn = this.compilers[node.type]; |
|
this.idx = i; |
|
|
|
if (typeof fn !== 'function') { |
|
throw this.error('compiler "' + node.type + '" is not registered', node); |
|
} |
|
|
|
return fn.call(this, node, nodes, i); |
|
}, |
|
|
|
/** |
|
* Map visit over array of `nodes`. |
|
*/ |
|
mapVisit: function mapVisit(nodes) { |
|
if (!Array.isArray(nodes)) { |
|
throw new TypeError('expected an array'); |
|
} |
|
|
|
var len = nodes.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
this.visit(nodes[idx], nodes, idx); |
|
} |
|
|
|
return this; |
|
}, |
|
|
|
/** |
|
* Compile `ast`. |
|
*/ |
|
compile: function compile(ast, options) { |
|
var opts = utils.extend({}, this.options, options); |
|
this.ast = ast; |
|
this.parsingErrors = this.ast.errors; |
|
this.output = ''; // source map support |
|
|
|
if (opts.sourcemap) { |
|
var sourcemaps = __webpack_require__(/*! ./source-maps */ "./node_modules/snapdragon/lib/source-maps.js"); |
|
|
|
sourcemaps(this); |
|
this.mapVisit(this.ast.nodes); |
|
this.applySourceMaps(); |
|
this.map = opts.sourcemap === 'generator' ? this.map : this.map.toJSON(); |
|
return this; |
|
} |
|
|
|
this.mapVisit(this.ast.nodes); |
|
return this; |
|
} |
|
}; |
|
/** |
|
* Expose `Compiler` |
|
*/ |
|
|
|
module.exports = Compiler; |
|
/* WEBPACK VAR INJECTION */}.call(this, "/index.js")) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/lib/parser.js": |
|
/*!***********************************************!*\ |
|
!*** ./node_modules/snapdragon/lib/parser.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(__filename) { |
|
|
|
var use = __webpack_require__(/*! use */ "./node_modules/use/index.js"); |
|
|
|
var util = __webpack_require__(/*! util */ "./node_modules/util/util.js"); |
|
|
|
var Cache = __webpack_require__(/*! map-cache */ "./node_modules/map-cache/index.js"); |
|
|
|
var _define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
|
|
var debug = __webpack_require__(/*! debug */ "./node_modules/snapdragon/node_modules/debug/src/browser.js")('snapdragon:parser'); |
|
|
|
var Position = __webpack_require__(/*! ./position */ "./node_modules/snapdragon/lib/position.js"); |
|
|
|
var utils = __webpack_require__(/*! ./utils */ "./node_modules/snapdragon/lib/utils.js"); |
|
/** |
|
* Create a new `Parser` with the given `input` and `options`. |
|
* @param {String} `input` |
|
* @param {Object} `options` |
|
* @api public |
|
*/ |
|
|
|
|
|
function Parser(options) { |
|
debug('initializing', __filename); |
|
this.options = utils.extend({ |
|
source: 'string' |
|
}, options); |
|
this.init(this.options); |
|
use(this); |
|
} |
|
/** |
|
* Prototype methods |
|
*/ |
|
|
|
|
|
Parser.prototype = { |
|
constructor: Parser, |
|
init: function init(options) { |
|
this.orig = ''; |
|
this.input = ''; |
|
this.parsed = ''; |
|
this.column = 1; |
|
this.line = 1; |
|
this.regex = new Cache(); |
|
this.errors = this.errors || []; |
|
this.parsers = this.parsers || {}; |
|
this.types = this.types || []; |
|
this.sets = this.sets || {}; |
|
this.fns = this.fns || []; |
|
this.currentType = 'root'; |
|
var pos = this.position(); |
|
this.bos = pos({ |
|
type: 'bos', |
|
val: '' |
|
}); |
|
this.ast = { |
|
type: 'root', |
|
errors: this.errors, |
|
nodes: [this.bos] |
|
}; |
|
|
|
_define(this.bos, 'parent', this.ast); |
|
|
|
this.nodes = [this.ast]; |
|
this.count = 0; |
|
this.setCount = 0; |
|
this.stack = []; |
|
}, |
|
|
|
/** |
|
* Throw a formatted error with the cursor column and `msg`. |
|
* @param {String} `msg` Message to use in the Error. |
|
*/ |
|
error: function error(msg, node) { |
|
var pos = node.position || { |
|
start: { |
|
column: 0, |
|
line: 0 |
|
} |
|
}; |
|
var line = pos.start.line; |
|
var column = pos.start.column; |
|
var source = this.options.source; |
|
var message = source + ' <line:' + line + ' column:' + column + '>: ' + msg; |
|
var err = new Error(message); |
|
err.source = source; |
|
err.reason = msg; |
|
err.pos = pos; |
|
|
|
if (this.options.silent) { |
|
this.errors.push(err); |
|
} else { |
|
throw err; |
|
} |
|
}, |
|
|
|
/** |
|
* Define a non-enumberable property on the `Parser` instance. |
|
* |
|
* ```js |
|
* parser.define('foo', 'bar'); |
|
* ``` |
|
* @name .define |
|
* @param {String} `key` propery name |
|
* @param {any} `val` property value |
|
* @return {Object} Returns the Parser instance for chaining. |
|
* @api public |
|
*/ |
|
define: function define(key, val) { |
|
_define(this, key, val); |
|
|
|
return this; |
|
}, |
|
|
|
/** |
|
* Mark position and patch `node.position`. |
|
*/ |
|
position: function position() { |
|
var start = { |
|
line: this.line, |
|
column: this.column |
|
}; |
|
var self = this; |
|
return function (node) { |
|
_define(node, 'position', new Position(start, self)); |
|
|
|
return node; |
|
}; |
|
}, |
|
|
|
/** |
|
* Set parser `name` with the given `fn` |
|
* @param {String} `name` |
|
* @param {Function} `fn` |
|
* @api public |
|
*/ |
|
set: function set(type, fn) { |
|
if (this.types.indexOf(type) === -1) { |
|
this.types.push(type); |
|
} |
|
|
|
this.parsers[type] = fn.bind(this); |
|
return this; |
|
}, |
|
|
|
/** |
|
* Get parser `name` |
|
* @param {String} `name` |
|
* @api public |
|
*/ |
|
get: function get(name) { |
|
return this.parsers[name]; |
|
}, |
|
|
|
/** |
|
* Push a `token` onto the `type` stack. |
|
* |
|
* @param {String} `type` |
|
* @return {Object} `token` |
|
* @api public |
|
*/ |
|
push: function push(type, token) { |
|
this.sets[type] = this.sets[type] || []; |
|
this.count++; |
|
this.stack.push(token); |
|
return this.sets[type].push(token); |
|
}, |
|
|
|
/** |
|
* Pop a token off of the `type` stack |
|
* @param {String} `type` |
|
* @returns {Object} Returns a token |
|
* @api public |
|
*/ |
|
pop: function pop(type) { |
|
this.sets[type] = this.sets[type] || []; |
|
this.count--; |
|
this.stack.pop(); |
|
return this.sets[type].pop(); |
|
}, |
|
|
|
/** |
|
* Return true if inside a `stack` node. Types are `braces`, `parens` or `brackets`. |
|
* |
|
* @param {String} `type` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
isInside: function isInside(type) { |
|
this.sets[type] = this.sets[type] || []; |
|
return this.sets[type].length > 0; |
|
}, |
|
|
|
/** |
|
* Return true if `node` is the given `type`. |
|
* |
|
* ```js |
|
* parser.isType(node, 'brace'); |
|
* ``` |
|
* @param {Object} `node` |
|
* @param {String} `type` |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
isType: function isType(node, type) { |
|
return node && node.type === type; |
|
}, |
|
|
|
/** |
|
* Get the previous AST node |
|
* @return {Object} |
|
*/ |
|
prev: function prev(n) { |
|
return this.stack.length > 0 ? utils.last(this.stack, n) : utils.last(this.nodes, n); |
|
}, |
|
|
|
/** |
|
* Update line and column based on `str`. |
|
*/ |
|
consume: function consume(len) { |
|
this.input = this.input.substr(len); |
|
}, |
|
|
|
/** |
|
* Update column based on `str`. |
|
*/ |
|
updatePosition: function updatePosition(str, len) { |
|
var lines = str.match(/\n/g); |
|
if (lines) this.line += lines.length; |
|
var i = str.lastIndexOf('\n'); |
|
this.column = ~i ? len - i : this.column + len; |
|
this.parsed += str; |
|
this.consume(len); |
|
}, |
|
|
|
/** |
|
* Match `regex`, return captures, and update the cursor position by `match[0]` length. |
|
* @param {RegExp} `regex` |
|
* @return {Object} |
|
*/ |
|
match: function match(regex) { |
|
var m = regex.exec(this.input); |
|
|
|
if (m) { |
|
this.updatePosition(m[0], m[0].length); |
|
return m; |
|
} |
|
}, |
|
|
|
/** |
|
* Capture `type` with the given regex. |
|
* @param {String} `type` |
|
* @param {RegExp} `regex` |
|
* @return {Function} |
|
*/ |
|
capture: function capture(type, regex) { |
|
if (typeof regex === 'function') { |
|
return this.set.apply(this, arguments); |
|
} |
|
|
|
this.regex.set(type, regex); |
|
this.set(type, function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(regex); |
|
if (!m || !m[0]) return; |
|
var prev = this.prev(); |
|
var node = pos({ |
|
type: type, |
|
val: m[0], |
|
parsed: parsed, |
|
rest: this.input |
|
}); |
|
|
|
if (m[1]) { |
|
node.inner = m[1]; |
|
} |
|
|
|
_define(node, 'inside', this.stack.length > 0); |
|
|
|
_define(node, 'parent', prev); |
|
|
|
prev.nodes.push(node); |
|
}.bind(this)); |
|
return this; |
|
}, |
|
|
|
/** |
|
* Create a parser with open and close for parens, |
|
* brackets or braces |
|
*/ |
|
capturePair: function capturePair(type, openRegex, closeRegex, fn) { |
|
this.sets[type] = this.sets[type] || []; |
|
/** |
|
* Open |
|
*/ |
|
|
|
this.set(type + '.open', function () { |
|
var parsed = this.parsed; |
|
var pos = this.position(); |
|
var m = this.match(openRegex); |
|
if (!m || !m[0]) return; |
|
var val = m[0]; |
|
this.setCount++; |
|
this.specialChars = true; |
|
var open = pos({ |
|
type: type + '.open', |
|
val: val, |
|
rest: this.input |
|
}); |
|
|
|
if (typeof m[1] !== 'undefined') { |
|
open.inner = m[1]; |
|
} |
|
|
|
var prev = this.prev(); |
|
var node = pos({ |
|
type: type, |
|
nodes: [open] |
|
}); |
|
|
|
_define(node, 'rest', this.input); |
|
|
|
_define(node, 'parsed', parsed); |
|
|
|
_define(node, 'prefix', m[1]); |
|
|
|
_define(node, 'parent', prev); |
|
|
|
_define(open, 'parent', node); |
|
|
|
if (typeof fn === 'function') { |
|
fn.call(this, open, node); |
|
} |
|
|
|
this.push(type, node); |
|
prev.nodes.push(node); |
|
}); |
|
/** |
|
* Close |
|
*/ |
|
|
|
this.set(type + '.close', function () { |
|
var pos = this.position(); |
|
var m = this.match(closeRegex); |
|
if (!m || !m[0]) return; |
|
var parent = this.pop(type); |
|
var node = pos({ |
|
type: type + '.close', |
|
rest: this.input, |
|
suffix: m[1], |
|
val: m[0] |
|
}); |
|
|
|
if (!this.isType(parent, type)) { |
|
if (this.options.strict) { |
|
throw new Error('missing opening "' + type + '"'); |
|
} |
|
|
|
this.setCount--; |
|
node.escaped = true; |
|
return node; |
|
} |
|
|
|
if (node.suffix === '\\') { |
|
parent.escaped = true; |
|
node.escaped = true; |
|
} |
|
|
|
parent.nodes.push(node); |
|
|
|
_define(node, 'parent', parent); |
|
}); |
|
return this; |
|
}, |
|
|
|
/** |
|
* Capture end-of-string |
|
*/ |
|
eos: function eos() { |
|
var pos = this.position(); |
|
if (this.input) return; |
|
var prev = this.prev(); |
|
|
|
while (prev.type !== 'root' && !prev.visited) { |
|
if (this.options.strict === true) { |
|
throw new SyntaxError('invalid syntax:' + util.inspect(prev, null, 2)); |
|
} |
|
|
|
if (!hasDelims(prev)) { |
|
prev.parent.escaped = true; |
|
prev.escaped = true; |
|
} |
|
|
|
visit(prev, function (node) { |
|
if (!hasDelims(node.parent)) { |
|
node.parent.escaped = true; |
|
node.escaped = true; |
|
} |
|
}); |
|
prev = prev.parent; |
|
} |
|
|
|
var tok = pos({ |
|
type: 'eos', |
|
val: this.append || '' |
|
}); |
|
|
|
_define(tok, 'parent', this.ast); |
|
|
|
return tok; |
|
}, |
|
|
|
/** |
|
* Run parsers to advance the cursor position |
|
*/ |
|
next: function next() { |
|
var parsed = this.parsed; |
|
var len = this.types.length; |
|
var idx = -1; |
|
var tok; |
|
|
|
while (++idx < len) { |
|
if (tok = this.parsers[this.types[idx]].call(this)) { |
|
_define(tok, 'rest', this.input); |
|
|
|
_define(tok, 'parsed', parsed); |
|
|
|
this.last = tok; |
|
return tok; |
|
} |
|
} |
|
}, |
|
|
|
/** |
|
* Parse the given string. |
|
* @return {Array} |
|
*/ |
|
parse: function parse(input) { |
|
if (typeof input !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
this.init(this.options); |
|
this.orig = input; |
|
this.input = input; |
|
var self = this; |
|
|
|
function parse() { |
|
// check input before calling `.next()` |
|
input = self.input; // get the next AST ndoe |
|
|
|
var node = self.next(); |
|
|
|
if (node) { |
|
var prev = self.prev(); |
|
|
|
if (prev) { |
|
_define(node, 'parent', prev); |
|
|
|
if (prev.nodes) { |
|
prev.nodes.push(node); |
|
} |
|
} |
|
|
|
if (self.sets.hasOwnProperty(prev.type)) { |
|
self.currentType = prev.type; |
|
} |
|
} // if we got here but input is not changed, throw an error |
|
|
|
|
|
if (self.input && input === self.input) { |
|
throw new Error('no parsers registered for: "' + self.input.slice(0, 5) + '"'); |
|
} |
|
} |
|
|
|
while (this.input) { |
|
parse(); |
|
} |
|
|
|
if (this.stack.length && this.options.strict) { |
|
var node = this.stack.pop(); |
|
throw this.error('missing opening ' + node.type + ': "' + this.orig + '"'); |
|
} |
|
|
|
var eos = this.eos(); |
|
var tok = this.prev(); |
|
|
|
if (tok.type !== 'eos') { |
|
this.ast.nodes.push(eos); |
|
} |
|
|
|
return this.ast; |
|
} |
|
}; |
|
/** |
|
* Visit `node` with the given `fn` |
|
*/ |
|
|
|
function visit(node, fn) { |
|
if (!node.visited) { |
|
_define(node, 'visited', true); |
|
|
|
return node.nodes ? mapVisit(node.nodes, fn) : fn(node); |
|
} |
|
|
|
return node; |
|
} |
|
/** |
|
* Map visit over array of `nodes`. |
|
*/ |
|
|
|
|
|
function mapVisit(nodes, fn) { |
|
var len = nodes.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
visit(nodes[idx], fn); |
|
} |
|
} |
|
|
|
function hasOpen(node) { |
|
return node.nodes && node.nodes[0].type === node.type + '.open'; |
|
} |
|
|
|
function hasClose(node) { |
|
return node.nodes && utils.last(node.nodes).type === node.type + '.close'; |
|
} |
|
|
|
function hasDelims(node) { |
|
return hasOpen(node) && hasClose(node); |
|
} |
|
/** |
|
* Expose `Parser` |
|
*/ |
|
|
|
|
|
module.exports = Parser; |
|
/* WEBPACK VAR INJECTION */}.call(this, "/index.js")) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/lib/position.js": |
|
/*!*************************************************!*\ |
|
!*** ./node_modules/snapdragon/lib/position.js ***! |
|
\*************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
/** |
|
* Store position for a node |
|
*/ |
|
|
|
|
|
module.exports = function Position(start, parser) { |
|
this.start = start; |
|
this.end = { |
|
line: parser.line, |
|
column: parser.column |
|
}; |
|
define(this, 'content', parser.orig); |
|
define(this, 'source', parser.options.source); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/lib/source-maps.js": |
|
/*!****************************************************!*\ |
|
!*** ./node_modules/snapdragon/lib/source-maps.js ***! |
|
\****************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var fs = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js"); |
|
|
|
var path = __webpack_require__(/*! path */ "./node_modules/path-browserify/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
|
|
var utils = __webpack_require__(/*! ./utils */ "./node_modules/snapdragon/lib/utils.js"); |
|
/** |
|
* Expose `mixin()`. |
|
* This code is based on `source-maps-support.js` in reworkcss/css |
|
* https://github.com/reworkcss/css/blob/master/lib/stringify/source-map-support.js |
|
* Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> |
|
*/ |
|
|
|
|
|
module.exports = mixin; |
|
/** |
|
* Mixin source map support into `compiler`. |
|
* |
|
* @param {Object} `compiler` |
|
* @api public |
|
*/ |
|
|
|
function mixin(compiler) { |
|
define(compiler, '_comment', compiler.comment); |
|
compiler.map = new utils.SourceMap.SourceMapGenerator(); |
|
compiler.position = { |
|
line: 1, |
|
column: 1 |
|
}; |
|
compiler.content = {}; |
|
compiler.files = {}; |
|
|
|
for (var key in exports) { |
|
define(compiler, key, exports[key]); |
|
} |
|
} |
|
/** |
|
* Update position. |
|
* |
|
* @param {String} str |
|
*/ |
|
|
|
|
|
exports.updatePosition = function (str) { |
|
var lines = str.match(/\n/g); |
|
if (lines) this.position.line += lines.length; |
|
var i = str.lastIndexOf('\n'); |
|
this.position.column = ~i ? str.length - i : this.position.column + str.length; |
|
}; |
|
/** |
|
* Emit `str` with `position`. |
|
* |
|
* @param {String} str |
|
* @param {Object} [pos] |
|
* @return {String} |
|
*/ |
|
|
|
|
|
exports.emit = function (str, node) { |
|
var position = node.position || {}; |
|
var source = position.source; |
|
|
|
if (source) { |
|
if (position.filepath) { |
|
source = utils.unixify(position.filepath); |
|
} |
|
|
|
this.map.addMapping({ |
|
source: source, |
|
generated: { |
|
line: this.position.line, |
|
column: Math.max(this.position.column - 1, 0) |
|
}, |
|
original: { |
|
line: position.start.line, |
|
column: position.start.column - 1 |
|
} |
|
}); |
|
|
|
if (position.content) { |
|
this.addContent(source, position); |
|
} |
|
|
|
if (position.filepath) { |
|
this.addFile(source, position); |
|
} |
|
|
|
this.updatePosition(str); |
|
this.output += str; |
|
} |
|
|
|
return str; |
|
}; |
|
/** |
|
* Adds a file to the source map output if it has not already been added |
|
* @param {String} `file` |
|
* @param {Object} `pos` |
|
*/ |
|
|
|
|
|
exports.addFile = function (file, position) { |
|
if (typeof position.content !== 'string') return; |
|
if (Object.prototype.hasOwnProperty.call(this.files, file)) return; |
|
this.files[file] = position.content; |
|
}; |
|
/** |
|
* Adds a content source to the source map output if it has not already been added |
|
* @param {String} `source` |
|
* @param {Object} `position` |
|
*/ |
|
|
|
|
|
exports.addContent = function (source, position) { |
|
if (typeof position.content !== 'string') return; |
|
if (Object.prototype.hasOwnProperty.call(this.content, source)) return; |
|
this.map.setSourceContent(source, position.content); |
|
}; |
|
/** |
|
* Applies any original source maps to the output and embeds the source file |
|
* contents in the source map. |
|
*/ |
|
|
|
|
|
exports.applySourceMaps = function () { |
|
Object.keys(this.files).forEach(function (file) { |
|
var content = this.files[file]; |
|
this.map.setSourceContent(file, content); |
|
|
|
if (this.options.inputSourcemaps === true) { |
|
var originalMap = utils.sourceMapResolve.resolveSync(content, file, fs.readFileSync); |
|
|
|
if (originalMap) { |
|
var map = new utils.SourceMap.SourceMapConsumer(originalMap.map); |
|
var relativeTo = originalMap.sourcesRelativeTo; |
|
this.map.applySourceMap(map, file, utils.unixify(path.dirname(relativeTo))); |
|
} |
|
} |
|
}, this); |
|
}; |
|
/** |
|
* Process comments, drops sourceMap comments. |
|
* @param {Object} node |
|
*/ |
|
|
|
|
|
exports.comment = function (node) { |
|
if (/^# sourceMappingURL=/.test(node.comment)) { |
|
return this.emit('', node.position); |
|
} |
|
|
|
return this._comment(node); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/lib/utils.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/snapdragon/lib/utils.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
exports.extend = __webpack_require__(/*! extend-shallow */ "./node_modules/extend-shallow/index.js"); |
|
exports.SourceMap = __webpack_require__(/*! source-map */ "./node_modules/snapdragon/node_modules/source-map/source-map.js"); |
|
exports.sourceMapResolve = __webpack_require__(/*! source-map-resolve */ "./node_modules/source-map-resolve/source-map-resolve.js"); |
|
/** |
|
* Convert backslash in the given string to forward slashes |
|
*/ |
|
|
|
exports.unixify = function (fp) { |
|
return fp.split(/\\+/).join('/'); |
|
}; |
|
/** |
|
* Return true if `val` is a non-empty string |
|
* |
|
* @param {String} `str` |
|
* @return {Boolean} |
|
*/ |
|
|
|
|
|
exports.isString = function (str) { |
|
return str && typeof str === 'string'; |
|
}; |
|
/** |
|
* Cast `val` to an array |
|
* @return {Array} |
|
*/ |
|
|
|
|
|
exports.arrayify = function (val) { |
|
if (typeof val === 'string') return [val]; |
|
return val ? Array.isArray(val) ? val : [val] : []; |
|
}; |
|
/** |
|
* Get the last `n` element from the given `array` |
|
* @param {Array} `array` |
|
* @return {*} |
|
*/ |
|
|
|
|
|
exports.last = function (arr, n) { |
|
return arr[arr.length - (n || 1)]; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/debug/src/browser.js": |
|
/*!*******************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/debug/src/browser.js ***! |
|
\*******************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) { |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
/** |
|
* This is the web browser implementation of `debug()`. |
|
* |
|
* Expose `debug()` as the module. |
|
*/ |
|
exports = module.exports = __webpack_require__(/*! ./debug */ "./node_modules/snapdragon/node_modules/debug/src/debug.js"); |
|
exports.log = log; |
|
exports.formatArgs = formatArgs; |
|
exports.save = save; |
|
exports.load = load; |
|
exports.useColors = useColors; |
|
exports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage(); |
|
/** |
|
* Colors. |
|
*/ |
|
|
|
exports.colors = ['lightseagreen', 'forestgreen', 'goldenrod', 'dodgerblue', 'darkorchid', 'crimson']; |
|
/** |
|
* Currently only WebKit-based Web Inspectors, Firefox >= v31, |
|
* and the Firebug extension (any Firefox version) are known |
|
* to support "%c" CSS customizations. |
|
* |
|
* TODO: add a `localStorage` variable to explicitly enable/disable colors |
|
*/ |
|
|
|
function useColors() { |
|
// NB: In an Electron preload script, document will be defined but not fully |
|
// initialized. Since we know we're in Chrome, we'll just detect this case |
|
// explicitly |
|
if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { |
|
return true; |
|
} // is webkit? http://stackoverflow.com/a/16459606/376773 |
|
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 |
|
|
|
|
|
return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // is firebug? http://stackoverflow.com/a/398120/376773 |
|
typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // is firefox >= v31? |
|
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages |
|
typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // double check webkit in userAgent just in case we are in a worker |
|
typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); |
|
} |
|
/** |
|
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. |
|
*/ |
|
|
|
|
|
exports.formatters.j = function (v) { |
|
try { |
|
return JSON.stringify(v); |
|
} catch (err) { |
|
return '[UnexpectedJSONParseError]: ' + err.message; |
|
} |
|
}; |
|
/** |
|
* Colorize log arguments if enabled. |
|
* |
|
* @api public |
|
*/ |
|
|
|
|
|
function formatArgs(args) { |
|
var useColors = this.useColors; |
|
args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff); |
|
if (!useColors) return; |
|
var c = 'color: ' + this.color; |
|
args.splice(1, 0, c, 'color: inherit'); // the final "%c" is somewhat tricky, because there could be other |
|
// arguments passed either before or after the %c, so we need to |
|
// figure out the correct index to insert the CSS into |
|
|
|
var index = 0; |
|
var lastC = 0; |
|
args[0].replace(/%[a-zA-Z%]/g, function (match) { |
|
if ('%%' === match) return; |
|
index++; |
|
|
|
if ('%c' === match) { |
|
// we only are interested in the *last* %c |
|
// (the user may have provided their own) |
|
lastC = index; |
|
} |
|
}); |
|
args.splice(lastC, 0, c); |
|
} |
|
/** |
|
* Invokes `console.log()` when available. |
|
* No-op when `console.log` is not a "function". |
|
* |
|
* @api public |
|
*/ |
|
|
|
|
|
function log() { |
|
// this hackery is required for IE8/9, where |
|
// the `console.log` function doesn't have 'apply' |
|
return 'object' === (typeof console === "undefined" ? "undefined" : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments); |
|
} |
|
/** |
|
* Save `namespaces`. |
|
* |
|
* @param {String} namespaces |
|
* @api private |
|
*/ |
|
|
|
|
|
function save(namespaces) { |
|
try { |
|
if (null == namespaces) { |
|
exports.storage.removeItem('debug'); |
|
} else { |
|
exports.storage.debug = namespaces; |
|
} |
|
} catch (e) {} |
|
} |
|
/** |
|
* Load `namespaces`. |
|
* |
|
* @return {String} returns the previously persisted debug modes |
|
* @api private |
|
*/ |
|
|
|
|
|
function load() { |
|
var r; |
|
|
|
try { |
|
r = exports.storage.debug; |
|
} catch (e) {} // If debug isn't set in LS, and we're in Electron, try to load $DEBUG |
|
|
|
|
|
if (!r && typeof process !== 'undefined' && 'env' in process) { |
|
r = process.env.DEBUG; |
|
} |
|
|
|
return r; |
|
} |
|
/** |
|
* Enable namespaces listed in `localStorage.debug` initially. |
|
*/ |
|
|
|
|
|
exports.enable(load()); |
|
/** |
|
* Localstorage attempts to return the localstorage. |
|
* |
|
* This is necessary because safari throws |
|
* when a user disables cookies/localstorage |
|
* and you attempt to access it. |
|
* |
|
* @return {LocalStorage} |
|
* @api private |
|
*/ |
|
|
|
function localstorage() { |
|
try { |
|
return window.localStorage; |
|
} catch (e) {} |
|
} |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/debug/src/debug.js": |
|
/*!*****************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/debug/src/debug.js ***! |
|
\*****************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/** |
|
* This is the common logic for both the Node.js and web browser |
|
* implementations of `debug()`. |
|
* |
|
* Expose `debug()` as the module. |
|
*/ |
|
exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; |
|
exports.coerce = coerce; |
|
exports.disable = disable; |
|
exports.enable = enable; |
|
exports.enabled = enabled; |
|
exports.humanize = __webpack_require__(/*! ms */ "./node_modules/snapdragon/node_modules/ms/index.js"); |
|
/** |
|
* The currently active debug mode names, and names to skip. |
|
*/ |
|
|
|
exports.names = []; |
|
exports.skips = []; |
|
/** |
|
* Map of special "%n" handling functions, for the debug "format" argument. |
|
* |
|
* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". |
|
*/ |
|
|
|
exports.formatters = {}; |
|
/** |
|
* Previous log timestamp. |
|
*/ |
|
|
|
var prevTime; |
|
/** |
|
* Select a color. |
|
* @param {String} namespace |
|
* @return {Number} |
|
* @api private |
|
*/ |
|
|
|
function selectColor(namespace) { |
|
var hash = 0, |
|
i; |
|
|
|
for (i in namespace) { |
|
hash = (hash << 5) - hash + namespace.charCodeAt(i); |
|
hash |= 0; // Convert to 32bit integer |
|
} |
|
|
|
return exports.colors[Math.abs(hash) % exports.colors.length]; |
|
} |
|
/** |
|
* Create a debugger with the given `namespace`. |
|
* |
|
* @param {String} namespace |
|
* @return {Function} |
|
* @api public |
|
*/ |
|
|
|
|
|
function createDebug(namespace) { |
|
function debug() { |
|
// disabled? |
|
if (!debug.enabled) return; |
|
var self = debug; // set `diff` timestamp |
|
|
|
var curr = +new Date(); |
|
var ms = curr - (prevTime || curr); |
|
self.diff = ms; |
|
self.prev = prevTime; |
|
self.curr = curr; |
|
prevTime = curr; // turn the `arguments` into a proper Array |
|
|
|
var args = new Array(arguments.length); |
|
|
|
for (var i = 0; i < args.length; i++) { |
|
args[i] = arguments[i]; |
|
} |
|
|
|
args[0] = exports.coerce(args[0]); |
|
|
|
if ('string' !== typeof args[0]) { |
|
// anything else let's inspect with %O |
|
args.unshift('%O'); |
|
} // apply any `formatters` transformations |
|
|
|
|
|
var index = 0; |
|
args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { |
|
// if we encounter an escaped % then don't increase the array index |
|
if (match === '%%') return match; |
|
index++; |
|
var formatter = exports.formatters[format]; |
|
|
|
if ('function' === typeof formatter) { |
|
var val = args[index]; |
|
match = formatter.call(self, val); // now we need to remove `args[index]` since it's inlined in the `format` |
|
|
|
args.splice(index, 1); |
|
index--; |
|
} |
|
|
|
return match; |
|
}); // apply env-specific formatting (colors, etc.) |
|
|
|
exports.formatArgs.call(self, args); |
|
var logFn = debug.log || exports.log || console.log.bind(console); |
|
logFn.apply(self, args); |
|
} |
|
|
|
debug.namespace = namespace; |
|
debug.enabled = exports.enabled(namespace); |
|
debug.useColors = exports.useColors(); |
|
debug.color = selectColor(namespace); // env-specific initialization logic for debug instances |
|
|
|
if ('function' === typeof exports.init) { |
|
exports.init(debug); |
|
} |
|
|
|
return debug; |
|
} |
|
/** |
|
* Enables a debug mode by namespaces. This can include modes |
|
* separated by a colon and wildcards. |
|
* |
|
* @param {String} namespaces |
|
* @api public |
|
*/ |
|
|
|
|
|
function enable(namespaces) { |
|
exports.save(namespaces); |
|
exports.names = []; |
|
exports.skips = []; |
|
var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); |
|
var len = split.length; |
|
|
|
for (var i = 0; i < len; i++) { |
|
if (!split[i]) continue; // ignore empty strings |
|
|
|
namespaces = split[i].replace(/\*/g, '.*?'); |
|
|
|
if (namespaces[0] === '-') { |
|
exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); |
|
} else { |
|
exports.names.push(new RegExp('^' + namespaces + '$')); |
|
} |
|
} |
|
} |
|
/** |
|
* Disable debug output. |
|
* |
|
* @api public |
|
*/ |
|
|
|
|
|
function disable() { |
|
exports.enable(''); |
|
} |
|
/** |
|
* Returns true if the given mode name is enabled, false otherwise. |
|
* |
|
* @param {String} name |
|
* @return {Boolean} |
|
* @api public |
|
*/ |
|
|
|
|
|
function enabled(name) { |
|
var i, len; |
|
|
|
for (i = 0, len = exports.skips.length; i < len; i++) { |
|
if (exports.skips[i].test(name)) { |
|
return false; |
|
} |
|
} |
|
|
|
for (i = 0, len = exports.names.length; i < len; i++) { |
|
if (exports.names[i].test(name)) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
/** |
|
* Coerce `val`. |
|
* |
|
* @param {Mixed} val |
|
* @return {Mixed} |
|
* @api private |
|
*/ |
|
|
|
|
|
function coerce(val) { |
|
if (val instanceof Error) return val.stack || val.message; |
|
return val; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/ms/index.js": |
|
/*!**********************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/ms/index.js ***! |
|
\**********************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
/** |
|
* Helpers. |
|
*/ |
|
var s = 1000; |
|
var m = s * 60; |
|
var h = m * 60; |
|
var d = h * 24; |
|
var y = d * 365.25; |
|
/** |
|
* Parse or format the given `val`. |
|
* |
|
* Options: |
|
* |
|
* - `long` verbose formatting [false] |
|
* |
|
* @param {String|Number} val |
|
* @param {Object} [options] |
|
* @throws {Error} throw an error if val is not a non-empty string or a number |
|
* @return {String|Number} |
|
* @api public |
|
*/ |
|
|
|
module.exports = function (val, options) { |
|
options = options || {}; |
|
|
|
var type = _typeof(val); |
|
|
|
if (type === 'string' && val.length > 0) { |
|
return parse(val); |
|
} else if (type === 'number' && isNaN(val) === false) { |
|
return options.long ? fmtLong(val) : fmtShort(val); |
|
} |
|
|
|
throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)); |
|
}; |
|
/** |
|
* Parse the given `str` and return milliseconds. |
|
* |
|
* @param {String} str |
|
* @return {Number} |
|
* @api private |
|
*/ |
|
|
|
|
|
function parse(str) { |
|
str = String(str); |
|
|
|
if (str.length > 100) { |
|
return; |
|
} |
|
|
|
var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str); |
|
|
|
if (!match) { |
|
return; |
|
} |
|
|
|
var n = parseFloat(match[1]); |
|
var type = (match[2] || 'ms').toLowerCase(); |
|
|
|
switch (type) { |
|
case 'years': |
|
case 'year': |
|
case 'yrs': |
|
case 'yr': |
|
case 'y': |
|
return n * y; |
|
|
|
case 'days': |
|
case 'day': |
|
case 'd': |
|
return n * d; |
|
|
|
case 'hours': |
|
case 'hour': |
|
case 'hrs': |
|
case 'hr': |
|
case 'h': |
|
return n * h; |
|
|
|
case 'minutes': |
|
case 'minute': |
|
case 'mins': |
|
case 'min': |
|
case 'm': |
|
return n * m; |
|
|
|
case 'seconds': |
|
case 'second': |
|
case 'secs': |
|
case 'sec': |
|
case 's': |
|
return n * s; |
|
|
|
case 'milliseconds': |
|
case 'millisecond': |
|
case 'msecs': |
|
case 'msec': |
|
case 'ms': |
|
return n; |
|
|
|
default: |
|
return undefined; |
|
} |
|
} |
|
/** |
|
* Short format for `ms`. |
|
* |
|
* @param {Number} ms |
|
* @return {String} |
|
* @api private |
|
*/ |
|
|
|
|
|
function fmtShort(ms) { |
|
if (ms >= d) { |
|
return Math.round(ms / d) + 'd'; |
|
} |
|
|
|
if (ms >= h) { |
|
return Math.round(ms / h) + 'h'; |
|
} |
|
|
|
if (ms >= m) { |
|
return Math.round(ms / m) + 'm'; |
|
} |
|
|
|
if (ms >= s) { |
|
return Math.round(ms / s) + 's'; |
|
} |
|
|
|
return ms + 'ms'; |
|
} |
|
/** |
|
* Long format for `ms`. |
|
* |
|
* @param {Number} ms |
|
* @return {String} |
|
* @api private |
|
*/ |
|
|
|
|
|
function fmtLong(ms) { |
|
return plural(ms, d, 'day') || plural(ms, h, 'hour') || plural(ms, m, 'minute') || plural(ms, s, 'second') || ms + ' ms'; |
|
} |
|
/** |
|
* Pluralization helper. |
|
*/ |
|
|
|
|
|
function plural(ms, n, name) { |
|
if (ms < n) { |
|
return; |
|
} |
|
|
|
if (ms < n * 1.5) { |
|
return Math.floor(ms / n) + ' ' + name; |
|
} |
|
|
|
return Math.ceil(ms / n) + ' ' + name + 's'; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/array-set.js": |
|
/*!**************************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/array-set.js ***! |
|
\**************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
var util = __webpack_require__(/*! ./util */ "./node_modules/snapdragon/node_modules/source-map/lib/util.js"); |
|
|
|
var has = Object.prototype.hasOwnProperty; |
|
var hasNativeMap = typeof Map !== "undefined"; |
|
/** |
|
* 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 = hasNativeMap ? new Map() : Object.create(null); |
|
} |
|
/** |
|
* Static method for creating ArraySet instances from an existing array. |
|
*/ |
|
|
|
|
|
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { |
|
var set = new ArraySet(); |
|
|
|
for (var i = 0, len = aArray.length; i < len; i++) { |
|
set.add(aArray[i], aAllowDuplicates); |
|
} |
|
|
|
return set; |
|
}; |
|
/** |
|
* Return how many unique items are in this ArraySet. If duplicates have been |
|
* added, than those do not count towards the size. |
|
* |
|
* @returns Number |
|
*/ |
|
|
|
|
|
ArraySet.prototype.size = function ArraySet_size() { |
|
return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; |
|
}; |
|
/** |
|
* Add the given string to this set. |
|
* |
|
* @param String aStr |
|
*/ |
|
|
|
|
|
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { |
|
var sStr = hasNativeMap ? aStr : util.toSetString(aStr); |
|
var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); |
|
var idx = this._array.length; |
|
|
|
if (!isDuplicate || aAllowDuplicates) { |
|
this._array.push(aStr); |
|
} |
|
|
|
if (!isDuplicate) { |
|
if (hasNativeMap) { |
|
this._set.set(aStr, idx); |
|
} else { |
|
this._set[sStr] = idx; |
|
} |
|
} |
|
}; |
|
/** |
|
* Is the given string a member of this set? |
|
* |
|
* @param String aStr |
|
*/ |
|
|
|
|
|
ArraySet.prototype.has = function ArraySet_has(aStr) { |
|
if (hasNativeMap) { |
|
return this._set.has(aStr); |
|
} else { |
|
var sStr = util.toSetString(aStr); |
|
return has.call(this._set, sStr); |
|
} |
|
}; |
|
/** |
|
* What is the index of the given string in the array? |
|
* |
|
* @param String aStr |
|
*/ |
|
|
|
|
|
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { |
|
if (hasNativeMap) { |
|
var idx = this._set.get(aStr); |
|
|
|
if (idx >= 0) { |
|
return idx; |
|
} |
|
} else { |
|
var sStr = util.toSetString(aStr); |
|
|
|
if (has.call(this._set, sStr)) { |
|
return this._set[sStr]; |
|
} |
|
} |
|
|
|
throw new Error('"' + aStr + '" is not in the set.'); |
|
}; |
|
/** |
|
* What is the element at the given index? |
|
* |
|
* @param Number aIdx |
|
*/ |
|
|
|
|
|
ArraySet.prototype.at = function ArraySet_at(aIdx) { |
|
if (aIdx >= 0 && aIdx < this._array.length) { |
|
return this._array[aIdx]; |
|
} |
|
|
|
throw new Error('No element indexed by ' + aIdx); |
|
}; |
|
/** |
|
* Returns the array representation of this set (which has the proper indices |
|
* indicated by indexOf). Note that this is a copy of the internal array used |
|
* for storing the members so that no one can mess with internal state. |
|
*/ |
|
|
|
|
|
ArraySet.prototype.toArray = function ArraySet_toArray() { |
|
return this._array.slice(); |
|
}; |
|
|
|
exports.ArraySet = ArraySet; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/base64-vlq.js": |
|
/*!***************************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/base64-vlq.js ***! |
|
\***************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
* |
|
* Based on the Base 64 VLQ implementation in Closure Compiler: |
|
* https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java |
|
* |
|
* Copyright 2011 The Closure Compiler Authors. All rights reserved. |
|
* Redistribution and use in source and binary forms, with or without |
|
* modification, are permitted provided that the following conditions are |
|
* met: |
|
* |
|
* * Redistributions of source code must retain the above copyright |
|
* notice, this list of conditions and the following disclaimer. |
|
* * Redistributions in binary form must reproduce the above |
|
* copyright notice, this list of conditions and the following |
|
* disclaimer in the documentation and/or other materials provided |
|
* with the distribution. |
|
* * Neither the name of Google Inc. nor the names of its |
|
* contributors may be used to endorse or promote products derived |
|
* from this software without specific prior written permission. |
|
* |
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
*/ |
|
var base64 = __webpack_require__(/*! ./base64 */ "./node_modules/snapdragon/node_modules/source-map/lib/base64.js"); // 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; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/base64.js": |
|
/*!***********************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/base64.js ***! |
|
\***********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); |
|
/** |
|
* Encode an integer in the range of 0 to 63 to a single base 64 digit. |
|
*/ |
|
|
|
exports.encode = function (number) { |
|
if (0 <= number && number < intToCharMap.length) { |
|
return intToCharMap[number]; |
|
} |
|
|
|
throw new TypeError("Must be between 0 and 63: " + number); |
|
}; |
|
/** |
|
* Decode a single base 64 character code digit to an integer. Returns -1 on |
|
* failure. |
|
*/ |
|
|
|
|
|
exports.decode = function (charCode) { |
|
var bigA = 65; // 'A' |
|
|
|
var bigZ = 90; // 'Z' |
|
|
|
var littleA = 97; // 'a' |
|
|
|
var littleZ = 122; // 'z' |
|
|
|
var zero = 48; // '0' |
|
|
|
var nine = 57; // '9' |
|
|
|
var plus = 43; // '+' |
|
|
|
var slash = 47; // '/' |
|
|
|
var littleOffset = 26; |
|
var numberOffset = 52; // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ |
|
|
|
if (bigA <= charCode && charCode <= bigZ) { |
|
return charCode - bigA; |
|
} // 26 - 51: abcdefghijklmnopqrstuvwxyz |
|
|
|
|
|
if (littleA <= charCode && charCode <= littleZ) { |
|
return charCode - littleA + littleOffset; |
|
} // 52 - 61: 0123456789 |
|
|
|
|
|
if (zero <= charCode && charCode <= nine) { |
|
return charCode - zero + numberOffset; |
|
} // 62: + |
|
|
|
|
|
if (charCode == plus) { |
|
return 62; |
|
} // 63: / |
|
|
|
|
|
if (charCode == slash) { |
|
return 63; |
|
} // Invalid base64 digit. |
|
|
|
|
|
return -1; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/binary-search.js": |
|
/*!******************************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/binary-search.js ***! |
|
\******************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
exports.GREATEST_LOWER_BOUND = 1; |
|
exports.LEAST_UPPER_BOUND = 2; |
|
/** |
|
* Recursive implementation of binary search. |
|
* |
|
* @param aLow Indices here and lower do not contain the needle. |
|
* @param aHigh Indices here and higher do not contain the needle. |
|
* @param aNeedle The element being searched for. |
|
* @param aHaystack The non-empty array being searched. |
|
* @param aCompare Function which takes two elements and returns -1, 0, or 1. |
|
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or |
|
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the |
|
* closest element that is smaller than or greater than the one we are |
|
* searching for, respectively, if the exact element cannot be found. |
|
*/ |
|
|
|
function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { |
|
// This function terminates when one of the following is true: |
|
// |
|
// 1. We find the exact element we are looking for. |
|
// |
|
// 2. We did not find the exact element, but we can return the index of |
|
// the next-closest element. |
|
// |
|
// 3. We did not find the exact element, and there is no next-closest |
|
// element than the one we are searching for, so we return -1. |
|
var mid = Math.floor((aHigh - aLow) / 2) + aLow; |
|
var cmp = aCompare(aNeedle, aHaystack[mid], true); |
|
|
|
if (cmp === 0) { |
|
// Found the element we are looking for. |
|
return mid; |
|
} else if (cmp > 0) { |
|
// Our needle is greater than aHaystack[mid]. |
|
if (aHigh - mid > 1) { |
|
// The element is in the upper half. |
|
return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); |
|
} // The exact needle element was not found in this haystack. Determine if |
|
// we are in termination case (3) or (2) and return the appropriate thing. |
|
|
|
|
|
if (aBias == exports.LEAST_UPPER_BOUND) { |
|
return aHigh < aHaystack.length ? aHigh : -1; |
|
} else { |
|
return mid; |
|
} |
|
} else { |
|
// Our needle is less than aHaystack[mid]. |
|
if (mid - aLow > 1) { |
|
// The element is in the lower half. |
|
return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); |
|
} // we are in termination case (3) or (2) and return the appropriate thing. |
|
|
|
|
|
if (aBias == exports.LEAST_UPPER_BOUND) { |
|
return mid; |
|
} else { |
|
return aLow < 0 ? -1 : aLow; |
|
} |
|
} |
|
} |
|
/** |
|
* This is an implementation of binary search which will always try and return |
|
* the index of the closest element if there is no exact hit. This is because |
|
* mappings between original and generated line/col pairs are single points, |
|
* and there is an implicit region between each of them, so a miss just means |
|
* that you aren't on the very start of a region. |
|
* |
|
* @param aNeedle The element you are looking for. |
|
* @param aHaystack The array that is being searched. |
|
* @param aCompare A function which takes the needle and an element in the |
|
* array and returns -1, 0, or 1 depending on whether the needle is less |
|
* than, equal to, or greater than the element, respectively. |
|
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or |
|
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the |
|
* closest element that is smaller than or greater than the one we are |
|
* searching for, respectively, if the exact element cannot be found. |
|
* Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. |
|
*/ |
|
|
|
|
|
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { |
|
if (aHaystack.length === 0) { |
|
return -1; |
|
} |
|
|
|
var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND); |
|
|
|
if (index < 0) { |
|
return -1; |
|
} // We have found either the exact element, or the next-closest element than |
|
// the one we are searching for. However, there may be more than one such |
|
// element. Make sure we always return the smallest of these. |
|
|
|
|
|
while (index - 1 >= 0) { |
|
if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { |
|
break; |
|
} |
|
|
|
--index; |
|
} |
|
|
|
return index; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/mapping-list.js": |
|
/*!*****************************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/mapping-list.js ***! |
|
\*****************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2014 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
var util = __webpack_require__(/*! ./util */ "./node_modules/snapdragon/node_modules/source-map/lib/util.js"); |
|
/** |
|
* Determine whether mappingB is after mappingA with respect to generated |
|
* position. |
|
*/ |
|
|
|
|
|
function generatedPositionAfter(mappingA, mappingB) { |
|
// Optimized for most common case |
|
var lineA = mappingA.generatedLine; |
|
var lineB = mappingB.generatedLine; |
|
var columnA = mappingA.generatedColumn; |
|
var columnB = mappingB.generatedColumn; |
|
return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; |
|
} |
|
/** |
|
* A data structure to provide a sorted view of accumulated mappings in a |
|
* performance conscious manner. It trades a neglibable overhead in general |
|
* case for a large speedup in case of mappings being added in order. |
|
*/ |
|
|
|
|
|
function MappingList() { |
|
this._array = []; |
|
this._sorted = true; // Serves as infimum |
|
|
|
this._last = { |
|
generatedLine: -1, |
|
generatedColumn: 0 |
|
}; |
|
} |
|
/** |
|
* Iterate through internal items. This method takes the same arguments that |
|
* `Array.prototype.forEach` takes. |
|
* |
|
* NOTE: The order of the mappings is NOT guaranteed. |
|
*/ |
|
|
|
|
|
MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) { |
|
this._array.forEach(aCallback, aThisArg); |
|
}; |
|
/** |
|
* Add the given source mapping. |
|
* |
|
* @param Object aMapping |
|
*/ |
|
|
|
|
|
MappingList.prototype.add = function MappingList_add(aMapping) { |
|
if (generatedPositionAfter(this._last, aMapping)) { |
|
this._last = aMapping; |
|
|
|
this._array.push(aMapping); |
|
} else { |
|
this._sorted = false; |
|
|
|
this._array.push(aMapping); |
|
} |
|
}; |
|
/** |
|
* Returns the flat, sorted array of mappings. The mappings are sorted by |
|
* generated position. |
|
* |
|
* WARNING: This method returns internal data without copying, for |
|
* performance. The return value must NOT be mutated, and should be treated as |
|
* an immutable borrow. If you want to take ownership, you must make your own |
|
* copy. |
|
*/ |
|
|
|
|
|
MappingList.prototype.toArray = function MappingList_toArray() { |
|
if (!this._sorted) { |
|
this._array.sort(util.compareByGeneratedPositionsInflated); |
|
|
|
this._sorted = true; |
|
} |
|
|
|
return this._array; |
|
}; |
|
|
|
exports.MappingList = MappingList; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/quick-sort.js": |
|
/*!***************************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/quick-sort.js ***! |
|
\***************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
// It turns out that some (most?) JavaScript engines don't self-host |
|
// `Array.prototype.sort`. This makes sense because C++ will likely remain |
|
// faster than JS when doing raw CPU-intensive sorting. However, when using a |
|
// custom comparator function, calling back and forth between the VM's C++ and |
|
// JIT'd JS is rather slow *and* loses JIT type information, resulting in |
|
// worse generated code for the comparator function than would be optimal. In |
|
// fact, when sorting with a comparator, these costs outweigh the benefits of |
|
// sorting in C++. By using our own JS-implemented Quick Sort (below), we get |
|
// a ~3500ms mean speed-up in `bench/bench.html`. |
|
|
|
/** |
|
* Swap the elements indexed by `x` and `y` in the array `ary`. |
|
* |
|
* @param {Array} ary |
|
* The array. |
|
* @param {Number} x |
|
* The index of the first item. |
|
* @param {Number} y |
|
* The index of the second item. |
|
*/ |
|
function swap(ary, x, y) { |
|
var temp = ary[x]; |
|
ary[x] = ary[y]; |
|
ary[y] = temp; |
|
} |
|
/** |
|
* Returns a random integer within the range `low .. high` inclusive. |
|
* |
|
* @param {Number} low |
|
* The lower bound on the range. |
|
* @param {Number} high |
|
* The upper bound on the range. |
|
*/ |
|
|
|
|
|
function randomIntInRange(low, high) { |
|
return Math.round(low + Math.random() * (high - low)); |
|
} |
|
/** |
|
* The Quick Sort algorithm. |
|
* |
|
* @param {Array} ary |
|
* An array to sort. |
|
* @param {function} comparator |
|
* Function to use to compare two items. |
|
* @param {Number} p |
|
* Start index of the array |
|
* @param {Number} r |
|
* End index of the array |
|
*/ |
|
|
|
|
|
function doQuickSort(ary, comparator, p, r) { |
|
// If our lower bound is less than our upper bound, we (1) partition the |
|
// array into two pieces and (2) recurse on each half. If it is not, this is |
|
// the empty array and our base case. |
|
if (p < r) { |
|
// (1) Partitioning. |
|
// |
|
// The partitioning chooses a pivot between `p` and `r` and moves all |
|
// elements that are less than or equal to the pivot to the before it, and |
|
// all the elements that are greater than it after it. The effect is that |
|
// once partition is done, the pivot is in the exact place it will be when |
|
// the array is put in sorted order, and it will not need to be moved |
|
// again. This runs in O(n) time. |
|
// Always choose a random pivot so that an input array which is reverse |
|
// sorted does not cause O(n^2) running time. |
|
var pivotIndex = randomIntInRange(p, r); |
|
var i = p - 1; |
|
swap(ary, pivotIndex, r); |
|
var pivot = ary[r]; // Immediately after `j` is incremented in this loop, the following hold |
|
// true: |
|
// |
|
// * Every element in `ary[p .. i]` is less than or equal to the pivot. |
|
// |
|
// * Every element in `ary[i+1 .. j-1]` is greater than the pivot. |
|
|
|
for (var j = p; j < r; j++) { |
|
if (comparator(ary[j], pivot) <= 0) { |
|
i += 1; |
|
swap(ary, i, j); |
|
} |
|
} |
|
|
|
swap(ary, i + 1, j); |
|
var q = i + 1; // (2) Recurse on each half. |
|
|
|
doQuickSort(ary, comparator, p, q - 1); |
|
doQuickSort(ary, comparator, q + 1, r); |
|
} |
|
} |
|
/** |
|
* Sort the given array in-place with the given comparator function. |
|
* |
|
* @param {Array} ary |
|
* An array to sort. |
|
* @param {function} comparator |
|
* Function to use to compare two items. |
|
*/ |
|
|
|
|
|
exports.quickSort = function (ary, comparator) { |
|
doQuickSort(ary, comparator, 0, ary.length - 1); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/source-map-consumer.js": |
|
/*!************************************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/source-map-consumer.js ***! |
|
\************************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
var util = __webpack_require__(/*! ./util */ "./node_modules/snapdragon/node_modules/source-map/lib/util.js"); |
|
|
|
var binarySearch = __webpack_require__(/*! ./binary-search */ "./node_modules/snapdragon/node_modules/source-map/lib/binary-search.js"); |
|
|
|
var ArraySet = __webpack_require__(/*! ./array-set */ "./node_modules/snapdragon/node_modules/source-map/lib/array-set.js").ArraySet; |
|
|
|
var base64VLQ = __webpack_require__(/*! ./base64-vlq */ "./node_modules/snapdragon/node_modules/source-map/lib/base64-vlq.js"); |
|
|
|
var quickSort = __webpack_require__(/*! ./quick-sort */ "./node_modules/snapdragon/node_modules/source-map/lib/quick-sort.js").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 get() { |
|
if (!this.__generatedMappings) { |
|
this._parseMappings(this._mappings, this.sourceRoot); |
|
} |
|
|
|
return this.__generatedMappings; |
|
} |
|
}); |
|
SourceMapConsumer.prototype.__originalMappings = null; |
|
Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { |
|
get: function get() { |
|
if (!this.__originalMappings) { |
|
this._parseMappings(this._mappings, this.sourceRoot); |
|
} |
|
|
|
return this.__originalMappings; |
|
} |
|
}); |
|
|
|
SourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) { |
|
var c = aStr.charAt(index); |
|
return c === ";" || c === ","; |
|
}; |
|
/** |
|
* Parse the mappings in a string in to a data structure which we can easily |
|
* query (the ordered arrays in the `this.__generatedMappings` and |
|
* `this.__originalMappings` properties). |
|
*/ |
|
|
|
|
|
SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { |
|
throw new Error("Subclasses must implement _parseMappings"); |
|
}; |
|
|
|
SourceMapConsumer.GENERATED_ORDER = 1; |
|
SourceMapConsumer.ORIGINAL_ORDER = 2; |
|
SourceMapConsumer.GREATEST_LOWER_BOUND = 1; |
|
SourceMapConsumer.LEAST_UPPER_BOUND = 2; |
|
/** |
|
* Iterate over each mapping between an original source/line/column and a |
|
* generated line/column in this source map. |
|
* |
|
* @param Function aCallback |
|
* The function that is called with each mapping. |
|
* @param Object aContext |
|
* Optional. If specified, this object will be the value of `this` every |
|
* time that `aCallback` is called. |
|
* @param aOrder |
|
* Either `SourceMapConsumer.GENERATED_ORDER` or |
|
* `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to |
|
* iterate over the mappings sorted by the generated file's line/column |
|
* order or the original's source/line/column order, respectively. Defaults to |
|
* `SourceMapConsumer.GENERATED_ORDER`. |
|
*/ |
|
|
|
SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { |
|
var context = aContext || null; |
|
var order = aOrder || SourceMapConsumer.GENERATED_ORDER; |
|
var mappings; |
|
|
|
switch (order) { |
|
case SourceMapConsumer.GENERATED_ORDER: |
|
mappings = this._generatedMappings; |
|
break; |
|
|
|
case SourceMapConsumer.ORIGINAL_ORDER: |
|
mappings = this._originalMappings; |
|
break; |
|
|
|
default: |
|
throw new Error("Unknown order of iteration."); |
|
} |
|
|
|
var sourceRoot = this.sourceRoot; |
|
mappings.map(function (mapping) { |
|
var source = mapping.source === null ? null : this._sources.at(mapping.source); |
|
|
|
if (source != null && sourceRoot != null) { |
|
source = util.join(sourceRoot, source); |
|
} |
|
|
|
return { |
|
source: source, |
|
generatedLine: mapping.generatedLine, |
|
generatedColumn: mapping.generatedColumn, |
|
originalLine: mapping.originalLine, |
|
originalColumn: mapping.originalColumn, |
|
name: mapping.name === null ? null : this._names.at(mapping.name) |
|
}; |
|
}, this).forEach(aCallback, context); |
|
}; |
|
/** |
|
* Returns all generated line and column information for the original source, |
|
* line, and column provided. If no column is provided, returns all mappings |
|
* corresponding to a either the line we are searching for or the next |
|
* closest line that has any mappings. Otherwise, returns all mappings |
|
* corresponding to the given line and either the column we are searching for |
|
* or the next closest column that has any offsets. |
|
* |
|
* The only argument is an object with the following properties: |
|
* |
|
* - source: The filename of the original source. |
|
* - line: The line number in the original source. |
|
* - column: Optional. the column number in the original source. |
|
* |
|
* and an array of objects is returned, each with the following properties: |
|
* |
|
* - line: The line number in the generated source, or null. |
|
* - column: The column number in the generated source, or null. |
|
*/ |
|
|
|
|
|
SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { |
|
var line = util.getArg(aArgs, 'line'); // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping |
|
// returns the index of the closest mapping less than the needle. By |
|
// setting needle.originalColumn to 0, we thus find the last mapping for |
|
// the given line, provided such a mapping exists. |
|
|
|
var needle = { |
|
source: util.getArg(aArgs, 'source'), |
|
originalLine: line, |
|
originalColumn: util.getArg(aArgs, 'column', 0) |
|
}; |
|
|
|
if (this.sourceRoot != null) { |
|
needle.source = util.relative(this.sourceRoot, needle.source); |
|
} |
|
|
|
if (!this._sources.has(needle.source)) { |
|
return []; |
|
} |
|
|
|
needle.source = this._sources.indexOf(needle.source); |
|
var mappings = []; |
|
|
|
var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND); |
|
|
|
if (index >= 0) { |
|
var mapping = this._originalMappings[index]; |
|
|
|
if (aArgs.column === undefined) { |
|
var originalLine = mapping.originalLine; // Iterate until either we run out of mappings, or we run into |
|
// a mapping for a different line than the one we found. Since |
|
// mappings are sorted, this is guaranteed to find all mappings for |
|
// the line we found. |
|
|
|
while (mapping && mapping.originalLine === originalLine) { |
|
mappings.push({ |
|
line: util.getArg(mapping, 'generatedLine', null), |
|
column: util.getArg(mapping, 'generatedColumn', null), |
|
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) |
|
}); |
|
mapping = this._originalMappings[++index]; |
|
} |
|
} else { |
|
var originalColumn = mapping.originalColumn; // Iterate until either we run out of mappings, or we run into |
|
// a mapping for a different line than the one we were searching for. |
|
// Since mappings are sorted, this is guaranteed to find all mappings for |
|
// the line we are searching for. |
|
|
|
while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) { |
|
mappings.push({ |
|
line: util.getArg(mapping, 'generatedLine', null), |
|
column: util.getArg(mapping, 'generatedColumn', null), |
|
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) |
|
}); |
|
mapping = this._originalMappings[++index]; |
|
} |
|
} |
|
} |
|
|
|
return mappings; |
|
}; |
|
|
|
exports.SourceMapConsumer = SourceMapConsumer; |
|
/** |
|
* A BasicSourceMapConsumer instance represents a parsed source map which we can |
|
* query for information about the original file positions by giving it a file |
|
* position in the generated source. |
|
* |
|
* The only parameter is the raw source map (either as a JSON string, or |
|
* already parsed to an object). According to the spec, source maps have the |
|
* following attributes: |
|
* |
|
* - version: Which version of the source map spec this map is following. |
|
* - sources: An array of URLs to the original source files. |
|
* - names: An array of identifiers which can be referrenced by individual mappings. |
|
* - sourceRoot: Optional. The URL root from which all sources are relative. |
|
* - sourcesContent: Optional. An array of contents of the original source files. |
|
* - mappings: A string of base64 VLQs which contain the actual mappings. |
|
* - file: Optional. The generated file this source map is associated with. |
|
* |
|
* Here is an example source map, taken from the source map spec[0]: |
|
* |
|
* { |
|
* version : 3, |
|
* file: "out.js", |
|
* sourceRoot : "", |
|
* sources: ["foo.js", "bar.js"], |
|
* names: ["src", "maps", "are", "fun"], |
|
* mappings: "AA,AB;;ABCDE;" |
|
* } |
|
* |
|
* [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# |
|
*/ |
|
|
|
function BasicSourceMapConsumer(aSourceMap) { |
|
var sourceMap = aSourceMap; |
|
|
|
if (typeof aSourceMap === 'string') { |
|
sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); |
|
} |
|
|
|
var version = util.getArg(sourceMap, 'version'); |
|
var sources = util.getArg(sourceMap, 'sources'); // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which |
|
// requires the array) to play nice here. |
|
|
|
var names = util.getArg(sourceMap, 'names', []); |
|
var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); |
|
var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); |
|
var mappings = util.getArg(sourceMap, 'mappings'); |
|
var file = util.getArg(sourceMap, 'file', null); // Once again, Sass deviates from the spec and supplies the version as a |
|
// string rather than a number, so we use loose equality checking here. |
|
|
|
if (version != this._version) { |
|
throw new Error('Unsupported version: ' + version); |
|
} |
|
|
|
sources = sources.map(String) // Some source maps produce relative source paths like "./foo.js" instead of |
|
// "foo.js". Normalize these first so that future comparisons will succeed. |
|
// See bugzil.la/1090768. |
|
.map(util.normalize) // Always ensure that absolute sources are internally stored relative to |
|
// the source root, if the source root is absolute. Not doing this would |
|
// be particularly problematic when the source root is a prefix of the |
|
// source (valid, but why??). See github issue #199 and bugzil.la/1188982. |
|
.map(function (source) { |
|
return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source; |
|
}); // Pass `true` below to allow duplicate names and sources. While source maps |
|
// are intended to be compressed and deduplicated, the TypeScript compiler |
|
// sometimes generates source maps with duplicates in them. See Github issue |
|
// #72 and bugzil.la/889492. |
|
|
|
this._names = ArraySet.fromArray(names.map(String), true); |
|
this._sources = ArraySet.fromArray(sources, true); |
|
this.sourceRoot = sourceRoot; |
|
this.sourcesContent = sourcesContent; |
|
this._mappings = mappings; |
|
this.file = file; |
|
} |
|
|
|
BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); |
|
BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; |
|
/** |
|
* Create a BasicSourceMapConsumer from a SourceMapGenerator. |
|
* |
|
* @param SourceMapGenerator aSourceMap |
|
* The source map that will be consumed. |
|
* @returns BasicSourceMapConsumer |
|
*/ |
|
|
|
BasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) { |
|
var smc = Object.create(BasicSourceMapConsumer.prototype); |
|
var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); |
|
var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); |
|
smc.sourceRoot = aSourceMap._sourceRoot; |
|
smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot); |
|
smc.file = aSourceMap._file; // Because we are modifying the entries (by converting string sources and |
|
// names to indices into the sources and names ArraySets), we have to make |
|
// a copy of the entry or else bad things happen. Shared mutable state |
|
// strikes again! See github issue #191. |
|
|
|
var generatedMappings = aSourceMap._mappings.toArray().slice(); |
|
|
|
var destGeneratedMappings = smc.__generatedMappings = []; |
|
var destOriginalMappings = smc.__originalMappings = []; |
|
|
|
for (var i = 0, length = generatedMappings.length; i < length; i++) { |
|
var srcMapping = generatedMappings[i]; |
|
var destMapping = new Mapping(); |
|
destMapping.generatedLine = srcMapping.generatedLine; |
|
destMapping.generatedColumn = srcMapping.generatedColumn; |
|
|
|
if (srcMapping.source) { |
|
destMapping.source = sources.indexOf(srcMapping.source); |
|
destMapping.originalLine = srcMapping.originalLine; |
|
destMapping.originalColumn = srcMapping.originalColumn; |
|
|
|
if (srcMapping.name) { |
|
destMapping.name = names.indexOf(srcMapping.name); |
|
} |
|
|
|
destOriginalMappings.push(destMapping); |
|
} |
|
|
|
destGeneratedMappings.push(destMapping); |
|
} |
|
|
|
quickSort(smc.__originalMappings, util.compareByOriginalPositions); |
|
return smc; |
|
}; |
|
/** |
|
* The version of the source mapping spec that we are consuming. |
|
*/ |
|
|
|
|
|
BasicSourceMapConsumer.prototype._version = 3; |
|
/** |
|
* The list of original sources. |
|
*/ |
|
|
|
Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { |
|
get: function get() { |
|
return this._sources.toArray().map(function (s) { |
|
return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; |
|
}, this); |
|
} |
|
}); |
|
/** |
|
* Provide the JIT with a nice shape / hidden class. |
|
*/ |
|
|
|
function Mapping() { |
|
this.generatedLine = 0; |
|
this.generatedColumn = 0; |
|
this.source = null; |
|
this.originalLine = null; |
|
this.originalColumn = null; |
|
this.name = null; |
|
} |
|
/** |
|
* Parse the mappings in a string in to a data structure which we can easily |
|
* query (the ordered arrays in the `this.__generatedMappings` and |
|
* `this.__originalMappings` properties). |
|
*/ |
|
|
|
|
|
BasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { |
|
var generatedLine = 1; |
|
var previousGeneratedColumn = 0; |
|
var previousOriginalLine = 0; |
|
var previousOriginalColumn = 0; |
|
var previousSource = 0; |
|
var previousName = 0; |
|
var length = aStr.length; |
|
var index = 0; |
|
var cachedSegments = {}; |
|
var temp = {}; |
|
var originalMappings = []; |
|
var generatedMappings = []; |
|
var mapping, str, segment, end, value; |
|
|
|
while (index < length) { |
|
if (aStr.charAt(index) === ';') { |
|
generatedLine++; |
|
index++; |
|
previousGeneratedColumn = 0; |
|
} else if (aStr.charAt(index) === ',') { |
|
index++; |
|
} else { |
|
mapping = new Mapping(); |
|
mapping.generatedLine = generatedLine; // Because each offset is encoded relative to the previous one, |
|
// many segments often have the same encoding. We can exploit this |
|
// fact by caching the parsed variable length fields of each segment, |
|
// allowing us to avoid a second parse if we encounter the same |
|
// segment again. |
|
|
|
for (end = index; end < length; end++) { |
|
if (this._charIsMappingSeparator(aStr, end)) { |
|
break; |
|
} |
|
} |
|
|
|
str = aStr.slice(index, end); |
|
segment = cachedSegments[str]; |
|
|
|
if (segment) { |
|
index += str.length; |
|
} else { |
|
segment = []; |
|
|
|
while (index < end) { |
|
base64VLQ.decode(aStr, index, temp); |
|
value = temp.value; |
|
index = temp.rest; |
|
segment.push(value); |
|
} |
|
|
|
if (segment.length === 2) { |
|
throw new Error('Found a source, but no line and column'); |
|
} |
|
|
|
if (segment.length === 3) { |
|
throw new Error('Found a source and line, but no column'); |
|
} |
|
|
|
cachedSegments[str] = segment; |
|
} // Generated column. |
|
|
|
|
|
mapping.generatedColumn = previousGeneratedColumn + segment[0]; |
|
previousGeneratedColumn = mapping.generatedColumn; |
|
|
|
if (segment.length > 1) { |
|
// Original source. |
|
mapping.source = previousSource + segment[1]; |
|
previousSource += segment[1]; // Original line. |
|
|
|
mapping.originalLine = previousOriginalLine + segment[2]; |
|
previousOriginalLine = mapping.originalLine; // Lines are stored 0-based |
|
|
|
mapping.originalLine += 1; // Original column. |
|
|
|
mapping.originalColumn = previousOriginalColumn + segment[3]; |
|
previousOriginalColumn = mapping.originalColumn; |
|
|
|
if (segment.length > 4) { |
|
// Original name. |
|
mapping.name = previousName + segment[4]; |
|
previousName += segment[4]; |
|
} |
|
} |
|
|
|
generatedMappings.push(mapping); |
|
|
|
if (typeof mapping.originalLine === 'number') { |
|
originalMappings.push(mapping); |
|
} |
|
} |
|
} |
|
|
|
quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); |
|
this.__generatedMappings = generatedMappings; |
|
quickSort(originalMappings, util.compareByOriginalPositions); |
|
this.__originalMappings = originalMappings; |
|
}; |
|
/** |
|
* Find the mapping that best matches the hypothetical "needle" mapping that |
|
* we are searching for in the given "haystack" of mappings. |
|
*/ |
|
|
|
|
|
BasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) { |
|
// To return the position we are searching for, we must first find the |
|
// mapping for the given position and then return the opposite position it |
|
// points to. Because the mappings are sorted, we can use binary search to |
|
// find the best mapping. |
|
if (aNeedle[aLineName] <= 0) { |
|
throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]); |
|
} |
|
|
|
if (aNeedle[aColumnName] < 0) { |
|
throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]); |
|
} |
|
|
|
return binarySearch.search(aNeedle, aMappings, aComparator, aBias); |
|
}; |
|
/** |
|
* Compute the last column for each generated mapping. The last column is |
|
* inclusive. |
|
*/ |
|
|
|
|
|
BasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() { |
|
for (var index = 0; index < this._generatedMappings.length; ++index) { |
|
var mapping = this._generatedMappings[index]; // Mappings do not contain a field for the last generated columnt. We |
|
// can come up with an optimistic estimate, however, by assuming that |
|
// mappings are contiguous (i.e. given two consecutive mappings, the |
|
// first mapping ends where the second one starts). |
|
|
|
if (index + 1 < this._generatedMappings.length) { |
|
var nextMapping = this._generatedMappings[index + 1]; |
|
|
|
if (mapping.generatedLine === nextMapping.generatedLine) { |
|
mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; |
|
continue; |
|
} |
|
} // The last mapping for each line spans the entire line. |
|
|
|
|
|
mapping.lastGeneratedColumn = Infinity; |
|
} |
|
}; |
|
/** |
|
* Returns the original source, line, and column information for the generated |
|
* source's line and column positions provided. The only argument is an object |
|
* with the following properties: |
|
* |
|
* - line: The line number in the generated source. |
|
* - column: The column number in the generated source. |
|
* - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or |
|
* 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the |
|
* closest element that is smaller than or greater than the one we are |
|
* searching for, respectively, if the exact element cannot be found. |
|
* Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. |
|
* |
|
* and an object is returned with the following properties: |
|
* |
|
* - source: The original source file, or null. |
|
* - line: The line number in the original source, or null. |
|
* - column: The column number in the original source, or null. |
|
* - name: The original identifier, or null. |
|
*/ |
|
|
|
|
|
BasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) { |
|
var needle = { |
|
generatedLine: util.getArg(aArgs, 'line'), |
|
generatedColumn: util.getArg(aArgs, 'column') |
|
}; |
|
|
|
var index = this._findMapping(needle, this._generatedMappings, "generatedLine", "generatedColumn", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)); |
|
|
|
if (index >= 0) { |
|
var mapping = this._generatedMappings[index]; |
|
|
|
if (mapping.generatedLine === needle.generatedLine) { |
|
var source = util.getArg(mapping, 'source', null); |
|
|
|
if (source !== null) { |
|
source = this._sources.at(source); |
|
|
|
if (this.sourceRoot != null) { |
|
source = util.join(this.sourceRoot, source); |
|
} |
|
} |
|
|
|
var name = util.getArg(mapping, 'name', null); |
|
|
|
if (name !== null) { |
|
name = this._names.at(name); |
|
} |
|
|
|
return { |
|
source: source, |
|
line: util.getArg(mapping, 'originalLine', null), |
|
column: util.getArg(mapping, 'originalColumn', null), |
|
name: name |
|
}; |
|
} |
|
} |
|
|
|
return { |
|
source: null, |
|
line: null, |
|
column: null, |
|
name: null |
|
}; |
|
}; |
|
/** |
|
* Return true if we have the source content for every source in the source |
|
* map, false otherwise. |
|
*/ |
|
|
|
|
|
BasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() { |
|
if (!this.sourcesContent) { |
|
return false; |
|
} |
|
|
|
return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function (sc) { |
|
return sc == null; |
|
}); |
|
}; |
|
/** |
|
* Returns the original source content. The only argument is the url of the |
|
* original source file. Returns null if no original source content is |
|
* available. |
|
*/ |
|
|
|
|
|
BasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { |
|
if (!this.sourcesContent) { |
|
return null; |
|
} |
|
|
|
if (this.sourceRoot != null) { |
|
aSource = util.relative(this.sourceRoot, aSource); |
|
} |
|
|
|
if (this._sources.has(aSource)) { |
|
return this.sourcesContent[this._sources.indexOf(aSource)]; |
|
} |
|
|
|
var url; |
|
|
|
if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) { |
|
// XXX: file:// URIs and absolute paths lead to unexpected behavior for |
|
// many users. We can help them out when they expect file:// URIs to |
|
// behave like it would if they were running a local HTTP server. See |
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=885597. |
|
var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); |
|
|
|
if (url.scheme == "file" && this._sources.has(fileUriAbsPath)) { |
|
return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]; |
|
} |
|
|
|
if ((!url.path || url.path == "/") && this._sources.has("/" + aSource)) { |
|
return this.sourcesContent[this._sources.indexOf("/" + aSource)]; |
|
} |
|
} // This function is used recursively from |
|
// IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we |
|
// don't want to throw if we can't find the source - we just want to |
|
// return null, so we provide a flag to exit gracefully. |
|
|
|
|
|
if (nullOnMissing) { |
|
return null; |
|
} else { |
|
throw new Error('"' + aSource + '" is not in the SourceMap.'); |
|
} |
|
}; |
|
/** |
|
* Returns the generated line and column information for the original source, |
|
* line, and column positions provided. The only argument is an object with |
|
* the following properties: |
|
* |
|
* - source: The filename of the original source. |
|
* - line: The line number in the original source. |
|
* - column: The column number in the original source. |
|
* - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or |
|
* 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the |
|
* closest element that is smaller than or greater than the one we are |
|
* searching for, respectively, if the exact element cannot be found. |
|
* Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. |
|
* |
|
* and an object is returned with the following properties: |
|
* |
|
* - line: The line number in the generated source, or null. |
|
* - column: The column number in the generated source, or null. |
|
*/ |
|
|
|
|
|
BasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) { |
|
var source = util.getArg(aArgs, 'source'); |
|
|
|
if (this.sourceRoot != null) { |
|
source = util.relative(this.sourceRoot, source); |
|
} |
|
|
|
if (!this._sources.has(source)) { |
|
return { |
|
line: null, |
|
column: null, |
|
lastColumn: null |
|
}; |
|
} |
|
|
|
source = this._sources.indexOf(source); |
|
var needle = { |
|
source: source, |
|
originalLine: util.getArg(aArgs, 'line'), |
|
originalColumn: util.getArg(aArgs, 'column') |
|
}; |
|
|
|
var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)); |
|
|
|
if (index >= 0) { |
|
var mapping = this._originalMappings[index]; |
|
|
|
if (mapping.source === needle.source) { |
|
return { |
|
line: util.getArg(mapping, 'generatedLine', null), |
|
column: util.getArg(mapping, 'generatedColumn', null), |
|
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) |
|
}; |
|
} |
|
} |
|
|
|
return { |
|
line: null, |
|
column: null, |
|
lastColumn: null |
|
}; |
|
}; |
|
|
|
exports.BasicSourceMapConsumer = BasicSourceMapConsumer; |
|
/** |
|
* An IndexedSourceMapConsumer instance represents a parsed source map which |
|
* we can query for information. It differs from BasicSourceMapConsumer in |
|
* that it takes "indexed" source maps (i.e. ones with a "sections" field) as |
|
* input. |
|
* |
|
* The only parameter is a raw source map (either as a JSON string, or already |
|
* parsed to an object). According to the spec for indexed source maps, they |
|
* have the following attributes: |
|
* |
|
* - version: Which version of the source map spec this map is following. |
|
* - file: Optional. The generated file this source map is associated with. |
|
* - sections: A list of section definitions. |
|
* |
|
* Each value under the "sections" field has two fields: |
|
* - offset: The offset into the original specified at which this section |
|
* begins to apply, defined as an object with a "line" and "column" |
|
* field. |
|
* - map: A source map definition. This source map could also be indexed, |
|
* but doesn't have to be. |
|
* |
|
* Instead of the "map" field, it's also possible to have a "url" field |
|
* specifying a URL to retrieve a source map from, but that's currently |
|
* unsupported. |
|
* |
|
* Here's an example source map, taken from the source map spec[0], but |
|
* modified to omit a section which uses the "url" field. |
|
* |
|
* { |
|
* version : 3, |
|
* file: "app.js", |
|
* sections: [{ |
|
* offset: {line:100, column:10}, |
|
* map: { |
|
* version : 3, |
|
* file: "section.js", |
|
* sources: ["foo.js", "bar.js"], |
|
* names: ["src", "maps", "are", "fun"], |
|
* mappings: "AAAA,E;;ABCDE;" |
|
* } |
|
* }], |
|
* } |
|
* |
|
* [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt |
|
*/ |
|
|
|
function IndexedSourceMapConsumer(aSourceMap) { |
|
var sourceMap = aSourceMap; |
|
|
|
if (typeof aSourceMap === 'string') { |
|
sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); |
|
} |
|
|
|
var version = util.getArg(sourceMap, 'version'); |
|
var sections = util.getArg(sourceMap, 'sections'); |
|
|
|
if (version != this._version) { |
|
throw new Error('Unsupported version: ' + version); |
|
} |
|
|
|
this._sources = new ArraySet(); |
|
this._names = new ArraySet(); |
|
var lastOffset = { |
|
line: -1, |
|
column: 0 |
|
}; |
|
this._sections = sections.map(function (s) { |
|
if (s.url) { |
|
// The url field will require support for asynchronicity. |
|
// See https://github.com/mozilla/source-map/issues/16 |
|
throw new Error('Support for url field in sections not implemented.'); |
|
} |
|
|
|
var offset = util.getArg(s, 'offset'); |
|
var offsetLine = util.getArg(offset, 'line'); |
|
var offsetColumn = util.getArg(offset, 'column'); |
|
|
|
if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) { |
|
throw new Error('Section offsets must be ordered and non-overlapping.'); |
|
} |
|
|
|
lastOffset = offset; |
|
return { |
|
generatedOffset: { |
|
// The offset fields are 0-based, but we use 1-based indices when |
|
// encoding/decoding from VLQ. |
|
generatedLine: offsetLine + 1, |
|
generatedColumn: offsetColumn + 1 |
|
}, |
|
consumer: new SourceMapConsumer(util.getArg(s, 'map')) |
|
}; |
|
}); |
|
} |
|
|
|
IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); |
|
IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; |
|
/** |
|
* The version of the source mapping spec that we are consuming. |
|
*/ |
|
|
|
IndexedSourceMapConsumer.prototype._version = 3; |
|
/** |
|
* The list of original sources. |
|
*/ |
|
|
|
Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { |
|
get: function get() { |
|
var sources = []; |
|
|
|
for (var i = 0; i < this._sections.length; i++) { |
|
for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { |
|
sources.push(this._sections[i].consumer.sources[j]); |
|
} |
|
} |
|
|
|
return sources; |
|
} |
|
}); |
|
/** |
|
* Returns the original source, line, and column information for the generated |
|
* source's line and column positions provided. The only argument is an object |
|
* with the following properties: |
|
* |
|
* - line: The line number in the generated source. |
|
* - column: The column number in the generated source. |
|
* |
|
* and an object is returned with the following properties: |
|
* |
|
* - source: The original source file, or null. |
|
* - line: The line number in the original source, or null. |
|
* - column: The column number in the original source, or null. |
|
* - name: The original identifier, or null. |
|
*/ |
|
|
|
IndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) { |
|
var needle = { |
|
generatedLine: util.getArg(aArgs, 'line'), |
|
generatedColumn: util.getArg(aArgs, 'column') |
|
}; // Find the section containing the generated position we're trying to map |
|
// to an original position. |
|
|
|
var sectionIndex = binarySearch.search(needle, this._sections, function (needle, section) { |
|
var cmp = needle.generatedLine - section.generatedOffset.generatedLine; |
|
|
|
if (cmp) { |
|
return cmp; |
|
} |
|
|
|
return needle.generatedColumn - section.generatedOffset.generatedColumn; |
|
}); |
|
var section = this._sections[sectionIndex]; |
|
|
|
if (!section) { |
|
return { |
|
source: null, |
|
line: null, |
|
column: null, |
|
name: null |
|
}; |
|
} |
|
|
|
return section.consumer.originalPositionFor({ |
|
line: needle.generatedLine - (section.generatedOffset.generatedLine - 1), |
|
column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0), |
|
bias: aArgs.bias |
|
}); |
|
}; |
|
/** |
|
* Return true if we have the source content for every source in the source |
|
* map, false otherwise. |
|
*/ |
|
|
|
|
|
IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() { |
|
return this._sections.every(function (s) { |
|
return s.consumer.hasContentsOfAllSources(); |
|
}); |
|
}; |
|
/** |
|
* Returns the original source content. The only argument is the url of the |
|
* original source file. Returns null if no original source content is |
|
* available. |
|
*/ |
|
|
|
|
|
IndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { |
|
for (var i = 0; i < this._sections.length; i++) { |
|
var section = this._sections[i]; |
|
var content = section.consumer.sourceContentFor(aSource, true); |
|
|
|
if (content) { |
|
return content; |
|
} |
|
} |
|
|
|
if (nullOnMissing) { |
|
return null; |
|
} else { |
|
throw new Error('"' + aSource + '" is not in the SourceMap.'); |
|
} |
|
}; |
|
/** |
|
* Returns the generated line and column information for the original source, |
|
* line, and column positions provided. The only argument is an object with |
|
* the following properties: |
|
* |
|
* - source: The filename of the original source. |
|
* - line: The line number in the original source. |
|
* - column: The column number in the original source. |
|
* |
|
* and an object is returned with the following properties: |
|
* |
|
* - line: The line number in the generated source, or null. |
|
* - column: The column number in the generated source, or null. |
|
*/ |
|
|
|
|
|
IndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { |
|
for (var i = 0; i < this._sections.length; i++) { |
|
var section = this._sections[i]; // Only consider this section if the requested source is in the list of |
|
// sources of the consumer. |
|
|
|
if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { |
|
continue; |
|
} |
|
|
|
var generatedPosition = section.consumer.generatedPositionFor(aArgs); |
|
|
|
if (generatedPosition) { |
|
var ret = { |
|
line: generatedPosition.line + (section.generatedOffset.generatedLine - 1), |
|
column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0) |
|
}; |
|
return ret; |
|
} |
|
} |
|
|
|
return { |
|
line: null, |
|
column: null |
|
}; |
|
}; |
|
/** |
|
* Parse the mappings in a string in to a data structure which we can easily |
|
* query (the ordered arrays in the `this.__generatedMappings` and |
|
* `this.__originalMappings` properties). |
|
*/ |
|
|
|
|
|
IndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { |
|
this.__generatedMappings = []; |
|
this.__originalMappings = []; |
|
|
|
for (var i = 0; i < this._sections.length; i++) { |
|
var section = this._sections[i]; |
|
var sectionMappings = section.consumer._generatedMappings; |
|
|
|
for (var j = 0; j < sectionMappings.length; j++) { |
|
var mapping = sectionMappings[j]; |
|
|
|
var source = section.consumer._sources.at(mapping.source); |
|
|
|
if (section.consumer.sourceRoot !== null) { |
|
source = util.join(section.consumer.sourceRoot, source); |
|
} |
|
|
|
this._sources.add(source); |
|
|
|
source = this._sources.indexOf(source); |
|
|
|
var name = section.consumer._names.at(mapping.name); |
|
|
|
this._names.add(name); |
|
|
|
name = this._names.indexOf(name); // The mappings coming from the consumer for the section have |
|
// generated positions relative to the start of the section, so we |
|
// need to offset them to be relative to the start of the concatenated |
|
// generated file. |
|
|
|
var adjustedMapping = { |
|
source: source, |
|
generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1), |
|
generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0), |
|
originalLine: mapping.originalLine, |
|
originalColumn: mapping.originalColumn, |
|
name: name |
|
}; |
|
|
|
this.__generatedMappings.push(adjustedMapping); |
|
|
|
if (typeof adjustedMapping.originalLine === 'number') { |
|
this.__originalMappings.push(adjustedMapping); |
|
} |
|
} |
|
} |
|
|
|
quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); |
|
quickSort(this.__originalMappings, util.compareByOriginalPositions); |
|
}; |
|
|
|
exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/source-map-generator.js": |
|
/*!*************************************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/source-map-generator.js ***! |
|
\*************************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
var base64VLQ = __webpack_require__(/*! ./base64-vlq */ "./node_modules/snapdragon/node_modules/source-map/lib/base64-vlq.js"); |
|
|
|
var util = __webpack_require__(/*! ./util */ "./node_modules/snapdragon/node_modules/source-map/lib/util.js"); |
|
|
|
var ArraySet = __webpack_require__(/*! ./array-set */ "./node_modules/snapdragon/node_modules/source-map/lib/array-set.js").ArraySet; |
|
|
|
var MappingList = __webpack_require__(/*! ./mapping-list */ "./node_modules/snapdragon/node_modules/source-map/lib/mapping-list.js").MappingList; |
|
/** |
|
* An instance of the SourceMapGenerator represents a source map which is |
|
* being built incrementally. You may pass an object with the following |
|
* properties: |
|
* |
|
* - file: The filename of the generated source. |
|
* - sourceRoot: A root for all relative URLs in this source map. |
|
*/ |
|
|
|
|
|
function SourceMapGenerator(aArgs) { |
|
if (!aArgs) { |
|
aArgs = {}; |
|
} |
|
|
|
this._file = util.getArg(aArgs, 'file', null); |
|
this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); |
|
this._skipValidation = util.getArg(aArgs, 'skipValidation', false); |
|
this._sources = new ArraySet(); |
|
this._names = new ArraySet(); |
|
this._mappings = new MappingList(); |
|
this._sourcesContents = null; |
|
} |
|
|
|
SourceMapGenerator.prototype._version = 3; |
|
/** |
|
* Creates a new SourceMapGenerator based on a SourceMapConsumer |
|
* |
|
* @param aSourceMapConsumer The SourceMap. |
|
*/ |
|
|
|
SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { |
|
var sourceRoot = aSourceMapConsumer.sourceRoot; |
|
var generator = new SourceMapGenerator({ |
|
file: aSourceMapConsumer.file, |
|
sourceRoot: sourceRoot |
|
}); |
|
aSourceMapConsumer.eachMapping(function (mapping) { |
|
var newMapping = { |
|
generated: { |
|
line: mapping.generatedLine, |
|
column: mapping.generatedColumn |
|
} |
|
}; |
|
|
|
if (mapping.source != null) { |
|
newMapping.source = mapping.source; |
|
|
|
if (sourceRoot != null) { |
|
newMapping.source = util.relative(sourceRoot, newMapping.source); |
|
} |
|
|
|
newMapping.original = { |
|
line: mapping.originalLine, |
|
column: mapping.originalColumn |
|
}; |
|
|
|
if (mapping.name != null) { |
|
newMapping.name = mapping.name; |
|
} |
|
} |
|
|
|
generator.addMapping(newMapping); |
|
}); |
|
aSourceMapConsumer.sources.forEach(function (sourceFile) { |
|
var content = aSourceMapConsumer.sourceContentFor(sourceFile); |
|
|
|
if (content != null) { |
|
generator.setSourceContent(sourceFile, content); |
|
} |
|
}); |
|
return generator; |
|
}; |
|
/** |
|
* Add a single mapping from original source line and column to the generated |
|
* source's line and column for this source map being created. The mapping |
|
* object should have the following properties: |
|
* |
|
* - generated: An object with the generated line and column positions. |
|
* - original: An object with the original line and column positions. |
|
* - source: The original source file (relative to the sourceRoot). |
|
* - name: An optional original token name for this mapping. |
|
*/ |
|
|
|
|
|
SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) { |
|
var generated = util.getArg(aArgs, 'generated'); |
|
var original = util.getArg(aArgs, 'original', null); |
|
var source = util.getArg(aArgs, 'source', null); |
|
var name = util.getArg(aArgs, 'name', null); |
|
|
|
if (!this._skipValidation) { |
|
this._validateMapping(generated, original, source, name); |
|
} |
|
|
|
if (source != null) { |
|
source = String(source); |
|
|
|
if (!this._sources.has(source)) { |
|
this._sources.add(source); |
|
} |
|
} |
|
|
|
if (name != null) { |
|
name = String(name); |
|
|
|
if (!this._names.has(name)) { |
|
this._names.add(name); |
|
} |
|
} |
|
|
|
this._mappings.add({ |
|
generatedLine: generated.line, |
|
generatedColumn: generated.column, |
|
originalLine: original != null && original.line, |
|
originalColumn: original != null && original.column, |
|
source: source, |
|
name: name |
|
}); |
|
}; |
|
/** |
|
* Set the source content for a source file. |
|
*/ |
|
|
|
|
|
SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { |
|
var source = aSourceFile; |
|
|
|
if (this._sourceRoot != null) { |
|
source = util.relative(this._sourceRoot, source); |
|
} |
|
|
|
if (aSourceContent != null) { |
|
// Add the source content to the _sourcesContents map. |
|
// Create a new _sourcesContents map if the property is null. |
|
if (!this._sourcesContents) { |
|
this._sourcesContents = Object.create(null); |
|
} |
|
|
|
this._sourcesContents[util.toSetString(source)] = aSourceContent; |
|
} else if (this._sourcesContents) { |
|
// Remove the source file from the _sourcesContents map. |
|
// If the _sourcesContents map is empty, set the property to null. |
|
delete this._sourcesContents[util.toSetString(source)]; |
|
|
|
if (Object.keys(this._sourcesContents).length === 0) { |
|
this._sourcesContents = null; |
|
} |
|
} |
|
}; |
|
/** |
|
* Applies the mappings of a sub-source-map for a specific source file to the |
|
* source map being generated. Each mapping to the supplied source file is |
|
* rewritten using the supplied source map. Note: The resolution for the |
|
* resulting mappings is the minimium of this map and the supplied map. |
|
* |
|
* @param aSourceMapConsumer The source map to be applied. |
|
* @param aSourceFile Optional. The filename of the source file. |
|
* If omitted, SourceMapConsumer's file property will be used. |
|
* @param aSourceMapPath Optional. The dirname of the path to the source map |
|
* to be applied. If relative, it is relative to the SourceMapConsumer. |
|
* This parameter is needed when the two source maps aren't in the same |
|
* directory, and the source map to be applied contains relative source |
|
* paths. If so, those relative source paths need to be rewritten |
|
* relative to the SourceMapGenerator. |
|
*/ |
|
|
|
|
|
SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { |
|
var sourceFile = aSourceFile; // If aSourceFile is omitted, we will use the file property of the SourceMap |
|
|
|
if (aSourceFile == null) { |
|
if (aSourceMapConsumer.file == null) { |
|
throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\'s "file" property. Both were omitted.'); |
|
} |
|
|
|
sourceFile = aSourceMapConsumer.file; |
|
} |
|
|
|
var sourceRoot = this._sourceRoot; // Make "sourceFile" relative if an absolute Url is passed. |
|
|
|
if (sourceRoot != null) { |
|
sourceFile = util.relative(sourceRoot, sourceFile); |
|
} // Applying the SourceMap can add and remove items from the sources and |
|
// the names array. |
|
|
|
|
|
var newSources = new ArraySet(); |
|
var newNames = new ArraySet(); // Find mappings for the "sourceFile" |
|
|
|
this._mappings.unsortedForEach(function (mapping) { |
|
if (mapping.source === sourceFile && mapping.originalLine != null) { |
|
// Check if it can be mapped by the source map, then update the mapping. |
|
var original = aSourceMapConsumer.originalPositionFor({ |
|
line: mapping.originalLine, |
|
column: mapping.originalColumn |
|
}); |
|
|
|
if (original.source != null) { |
|
// Copy mapping |
|
mapping.source = original.source; |
|
|
|
if (aSourceMapPath != null) { |
|
mapping.source = util.join(aSourceMapPath, mapping.source); |
|
} |
|
|
|
if (sourceRoot != null) { |
|
mapping.source = util.relative(sourceRoot, mapping.source); |
|
} |
|
|
|
mapping.originalLine = original.line; |
|
mapping.originalColumn = original.column; |
|
|
|
if (original.name != null) { |
|
mapping.name = original.name; |
|
} |
|
} |
|
} |
|
|
|
var source = mapping.source; |
|
|
|
if (source != null && !newSources.has(source)) { |
|
newSources.add(source); |
|
} |
|
|
|
var name = mapping.name; |
|
|
|
if (name != null && !newNames.has(name)) { |
|
newNames.add(name); |
|
} |
|
}, this); |
|
|
|
this._sources = newSources; |
|
this._names = newNames; // Copy sourcesContents of applied map. |
|
|
|
aSourceMapConsumer.sources.forEach(function (sourceFile) { |
|
var content = aSourceMapConsumer.sourceContentFor(sourceFile); |
|
|
|
if (content != null) { |
|
if (aSourceMapPath != null) { |
|
sourceFile = util.join(aSourceMapPath, sourceFile); |
|
} |
|
|
|
if (sourceRoot != null) { |
|
sourceFile = util.relative(sourceRoot, sourceFile); |
|
} |
|
|
|
this.setSourceContent(sourceFile, content); |
|
} |
|
}, this); |
|
}; |
|
/** |
|
* A mapping can have one of the three levels of data: |
|
* |
|
* 1. Just the generated position. |
|
* 2. The Generated position, original position, and original source. |
|
* 3. Generated and original position, original source, as well as a name |
|
* token. |
|
* |
|
* To maintain consistency, we validate that any new mapping being added falls |
|
* in to one of these categories. |
|
*/ |
|
|
|
|
|
SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) { |
|
// When aOriginal is truthy but has empty values for .line and .column, |
|
// it is most likely a programmer error. In this case we throw a very |
|
// specific error message to try to guide them the right way. |
|
// For example: https://github.com/Polymer/polymer-bundler/pull/519 |
|
if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { |
|
throw new Error('original.line and original.column are not numbers -- you probably meant to omit ' + 'the original mapping entirely and only map the generated position. If so, pass ' + 'null for the original mapping instead of an object with empty or null values.'); |
|
} |
|
|
|
if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) { |
|
// Case 1. |
|
return; |
|
} else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) { |
|
// Cases 2 and 3. |
|
return; |
|
} else { |
|
throw new Error('Invalid mapping: ' + JSON.stringify({ |
|
generated: aGenerated, |
|
source: aSource, |
|
original: aOriginal, |
|
name: aName |
|
})); |
|
} |
|
}; |
|
/** |
|
* Serialize the accumulated mappings in to the stream of base 64 VLQs |
|
* specified by the source map format. |
|
*/ |
|
|
|
|
|
SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() { |
|
var previousGeneratedColumn = 0; |
|
var previousGeneratedLine = 1; |
|
var previousOriginalColumn = 0; |
|
var previousOriginalLine = 0; |
|
var previousName = 0; |
|
var previousSource = 0; |
|
var result = ''; |
|
var next; |
|
var mapping; |
|
var nameIdx; |
|
var sourceIdx; |
|
|
|
var mappings = this._mappings.toArray(); |
|
|
|
for (var i = 0, len = mappings.length; i < len; i++) { |
|
mapping = mappings[i]; |
|
next = ''; |
|
|
|
if (mapping.generatedLine !== previousGeneratedLine) { |
|
previousGeneratedColumn = 0; |
|
|
|
while (mapping.generatedLine !== previousGeneratedLine) { |
|
next += ';'; |
|
previousGeneratedLine++; |
|
} |
|
} else { |
|
if (i > 0) { |
|
if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { |
|
continue; |
|
} |
|
|
|
next += ','; |
|
} |
|
} |
|
|
|
next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn); |
|
previousGeneratedColumn = mapping.generatedColumn; |
|
|
|
if (mapping.source != null) { |
|
sourceIdx = this._sources.indexOf(mapping.source); |
|
next += base64VLQ.encode(sourceIdx - previousSource); |
|
previousSource = sourceIdx; // lines are stored 0-based in SourceMap spec version 3 |
|
|
|
next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine); |
|
previousOriginalLine = mapping.originalLine - 1; |
|
next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn); |
|
previousOriginalColumn = mapping.originalColumn; |
|
|
|
if (mapping.name != null) { |
|
nameIdx = this._names.indexOf(mapping.name); |
|
next += base64VLQ.encode(nameIdx - previousName); |
|
previousName = nameIdx; |
|
} |
|
} |
|
|
|
result += next; |
|
} |
|
|
|
return result; |
|
}; |
|
|
|
SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { |
|
return aSources.map(function (source) { |
|
if (!this._sourcesContents) { |
|
return null; |
|
} |
|
|
|
if (aSourceRoot != null) { |
|
source = util.relative(aSourceRoot, source); |
|
} |
|
|
|
var key = util.toSetString(source); |
|
return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null; |
|
}, this); |
|
}; |
|
/** |
|
* Externalize the source map. |
|
*/ |
|
|
|
|
|
SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() { |
|
var map = { |
|
version: this._version, |
|
sources: this._sources.toArray(), |
|
names: this._names.toArray(), |
|
mappings: this._serializeMappings() |
|
}; |
|
|
|
if (this._file != null) { |
|
map.file = this._file; |
|
} |
|
|
|
if (this._sourceRoot != null) { |
|
map.sourceRoot = this._sourceRoot; |
|
} |
|
|
|
if (this._sourcesContents) { |
|
map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); |
|
} |
|
|
|
return map; |
|
}; |
|
/** |
|
* Render the source map being generated to a string. |
|
*/ |
|
|
|
|
|
SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() { |
|
return JSON.stringify(this.toJSON()); |
|
}; |
|
|
|
exports.SourceMapGenerator = SourceMapGenerator; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/source-node.js": |
|
/*!****************************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/source-node.js ***! |
|
\****************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
var SourceMapGenerator = __webpack_require__(/*! ./source-map-generator */ "./node_modules/snapdragon/node_modules/source-map/lib/source-map-generator.js").SourceMapGenerator; |
|
|
|
var util = __webpack_require__(/*! ./util */ "./node_modules/snapdragon/node_modules/source-map/lib/util.js"); // 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 accessed by calling `shiftNextLine`. |
|
|
|
var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); |
|
var remainingLinesIndex = 0; |
|
|
|
var shiftNextLine = function shiftNextLine() { |
|
var lineContents = getNextLine(); // The last line of a file might not have a newline. |
|
|
|
var newLine = getNextLine() || ""; |
|
return lineContents + newLine; |
|
|
|
function getNextLine() { |
|
return remainingLinesIndex < remainingLines.length ? remainingLines[remainingLinesIndex++] : undefined; |
|
} |
|
}; // We need to remember the position of "remainingLines" |
|
|
|
|
|
var lastGeneratedLine = 1, |
|
lastGeneratedColumn = 0; // The generate SourceNodes we need a code range. |
|
// To extract it current and last mapping is used. |
|
// Here we store the last mapping. |
|
|
|
var lastMapping = null; |
|
aSourceMapConsumer.eachMapping(function (mapping) { |
|
if (lastMapping !== null) { |
|
// We add the code from "lastMapping" to "mapping": |
|
// First check if there is a new line in between. |
|
if (lastGeneratedLine < mapping.generatedLine) { |
|
// Associate first line with "lastMapping" |
|
addMappingWithCode(lastMapping, shiftNextLine()); |
|
lastGeneratedLine++; |
|
lastGeneratedColumn = 0; // The remaining code is added without mapping |
|
} else { |
|
// There is no new line in between. |
|
// Associate the code between "lastGeneratedColumn" and |
|
// "mapping.generatedColumn" with "lastMapping" |
|
var nextLine = remainingLines[remainingLinesIndex]; |
|
var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn); |
|
remainingLines[remainingLinesIndex] = 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[remainingLinesIndex]; |
|
node.add(nextLine.substr(0, mapping.generatedColumn)); |
|
remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); |
|
lastGeneratedColumn = mapping.generatedColumn; |
|
} |
|
|
|
lastMapping = mapping; |
|
}, this); // We have processed all mappings. |
|
|
|
if (remainingLinesIndex < remainingLines.length) { |
|
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.splice(remainingLinesIndex).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; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/lib/util.js": |
|
/*!*********************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/lib/util.js ***! |
|
\*********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */ |
|
|
|
/* |
|
* Copyright 2011 Mozilla Foundation and contributors |
|
* Licensed under the New BSD license. See LICENSE or: |
|
* http://opensource.org/licenses/BSD-3-Clause |
|
*/ |
|
|
|
/** |
|
* This is a helper function for getting values from parameter/options |
|
* objects. |
|
* |
|
* @param args The object we are extracting values from |
|
* @param name The name of the property we are getting. |
|
* @param defaultValue An optional value to return if the property is missing |
|
* from the object. If this is not specified and the property is missing, an |
|
* error will be thrown. |
|
*/ |
|
function getArg(aArgs, aName, aDefaultValue) { |
|
if (aName in aArgs) { |
|
return aArgs[aName]; |
|
} else if (arguments.length === 3) { |
|
return aDefaultValue; |
|
} else { |
|
throw new Error('"' + aName + '" is a required argument.'); |
|
} |
|
} |
|
|
|
exports.getArg = getArg; |
|
var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; |
|
var dataUrlRegexp = /^data:.+\,.+$/; |
|
|
|
function urlParse(aUrl) { |
|
var match = aUrl.match(urlRegexp); |
|
|
|
if (!match) { |
|
return null; |
|
} |
|
|
|
return { |
|
scheme: match[1], |
|
auth: match[2], |
|
host: match[3], |
|
port: match[4], |
|
path: match[5] |
|
}; |
|
} |
|
|
|
exports.urlParse = urlParse; |
|
|
|
function urlGenerate(aParsedUrl) { |
|
var url = ''; |
|
|
|
if (aParsedUrl.scheme) { |
|
url += aParsedUrl.scheme + ':'; |
|
} |
|
|
|
url += '//'; |
|
|
|
if (aParsedUrl.auth) { |
|
url += aParsedUrl.auth + '@'; |
|
} |
|
|
|
if (aParsedUrl.host) { |
|
url += aParsedUrl.host; |
|
} |
|
|
|
if (aParsedUrl.port) { |
|
url += ":" + aParsedUrl.port; |
|
} |
|
|
|
if (aParsedUrl.path) { |
|
url += aParsedUrl.path; |
|
} |
|
|
|
return url; |
|
} |
|
|
|
exports.urlGenerate = urlGenerate; |
|
/** |
|
* Normalizes a path, or the path portion of a URL: |
|
* |
|
* - Replaces consecutive slashes with one slash. |
|
* - Removes unnecessary '.' parts. |
|
* - Removes unnecessary '<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 = exports.isAbsolute(path); |
|
var parts = path.split(/\/+/); |
|
|
|
for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { |
|
part = parts[i]; |
|
|
|
if (part === '.') { |
|
parts.splice(i, 1); |
|
} else if (part === '..') { |
|
up++; |
|
} else if (up > 0) { |
|
if (part === '') { |
|
// The first part is blank if the path is absolute. Trying to go |
|
// above the root is a no-op. Therefore we can remove all '..' parts |
|
// directly after the root. |
|
parts.splice(i + 1, up); |
|
up = 0; |
|
} else { |
|
parts.splice(i, 2); |
|
up--; |
|
} |
|
} |
|
} |
|
|
|
path = parts.join('/'); |
|
|
|
if (path === '') { |
|
path = isAbsolute ? '/' : '.'; |
|
} |
|
|
|
if (url) { |
|
url.path = path; |
|
return urlGenerate(url); |
|
} |
|
|
|
return path; |
|
} |
|
|
|
exports.normalize = normalize; |
|
/** |
|
* Joins two paths/URLs. |
|
* |
|
* @param aRoot The root path or URL. |
|
* @param aPath The path or URL to be joined with the root. |
|
* |
|
* - If aPath is a URL or a data URI, aPath is returned, unless aPath is a |
|
* scheme-relative URL: Then the scheme of aRoot, if any, is prepended |
|
* first. |
|
* - Otherwise aPath is a path. If aRoot is a URL, then its path portion |
|
* is updated with the result and aRoot is returned. Otherwise the result |
|
* is returned. |
|
* - If aPath is absolute, the result is aPath. |
|
* - Otherwise the two paths are joined with a slash. |
|
* - Joining for example 'http://' and 'www.example.com' is also supported. |
|
*/ |
|
|
|
function join(aRoot, aPath) { |
|
if (aRoot === "") { |
|
aRoot = "."; |
|
} |
|
|
|
if (aPath === "") { |
|
aPath = "."; |
|
} |
|
|
|
var aPathUrl = urlParse(aPath); |
|
var aRootUrl = urlParse(aRoot); |
|
|
|
if (aRootUrl) { |
|
aRoot = aRootUrl.path || '/'; |
|
} // `join(foo, '//www.example.org')` |
|
|
|
|
|
if (aPathUrl && !aPathUrl.scheme) { |
|
if (aRootUrl) { |
|
aPathUrl.scheme = aRootUrl.scheme; |
|
} |
|
|
|
return urlGenerate(aPathUrl); |
|
} |
|
|
|
if (aPathUrl || aPath.match(dataUrlRegexp)) { |
|
return aPath; |
|
} // `join('http://', 'www.example.com')` |
|
|
|
|
|
if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { |
|
aRootUrl.host = aPath; |
|
return urlGenerate(aRootUrl); |
|
} |
|
|
|
var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); |
|
|
|
if (aRootUrl) { |
|
aRootUrl.path = joined; |
|
return urlGenerate(aRootUrl); |
|
} |
|
|
|
return joined; |
|
} |
|
|
|
exports.join = join; |
|
|
|
exports.isAbsolute = function (aPath) { |
|
return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); |
|
}; |
|
/** |
|
* Make a path relative to a URL or another path. |
|
* |
|
* @param aRoot The root path or URL. |
|
* @param aPath The path or URL to be made relative to aRoot. |
|
*/ |
|
|
|
|
|
function relative(aRoot, aPath) { |
|
if (aRoot === "") { |
|
aRoot = "."; |
|
} |
|
|
|
aRoot = aRoot.replace(/\/$/, ''); // It is possible for the path to be above the root. In this case, simply |
|
// checking whether the root is a prefix of the path won't work. Instead, we |
|
// need to remove components from the root one by one, until either we find |
|
// a prefix that fits, or we run out of components to remove. |
|
|
|
var level = 0; |
|
|
|
while (aPath.indexOf(aRoot + '/') !== 0) { |
|
var index = aRoot.lastIndexOf("/"); |
|
|
|
if (index < 0) { |
|
return aPath; |
|
} // If the only part of the root that is left is the scheme (i.e. http://, |
|
// file:///, etc.), one or more slashes (/), or simply nothing at all, we |
|
// have exhausted all components, so the path is not relative to the root. |
|
|
|
|
|
aRoot = aRoot.slice(0, index); |
|
|
|
if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { |
|
return aPath; |
|
} |
|
|
|
++level; |
|
} // Make sure we add a "../" for each component we removed from the root. |
|
|
|
|
|
return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); |
|
} |
|
|
|
exports.relative = relative; |
|
|
|
var supportsNullProto = function () { |
|
var obj = Object.create(null); |
|
return !('__proto__' in obj); |
|
}(); |
|
|
|
function identity(s) { |
|
return s; |
|
} |
|
/** |
|
* Because behavior goes wacky when you set `__proto__` on objects, we |
|
* have to prefix all the strings in our set with an arbitrary character. |
|
* |
|
* See https://github.com/mozilla/source-map/pull/31 and |
|
* https://github.com/mozilla/source-map/issues/30 |
|
* |
|
* @param String aStr |
|
*/ |
|
|
|
|
|
function toSetString(aStr) { |
|
if (isProtoString(aStr)) { |
|
return '$' + aStr; |
|
} |
|
|
|
return aStr; |
|
} |
|
|
|
exports.toSetString = supportsNullProto ? identity : toSetString; |
|
|
|
function fromSetString(aStr) { |
|
if (isProtoString(aStr)) { |
|
return aStr.slice(1); |
|
} |
|
|
|
return aStr; |
|
} |
|
|
|
exports.fromSetString = supportsNullProto ? identity : fromSetString; |
|
|
|
function isProtoString(s) { |
|
if (!s) { |
|
return false; |
|
} |
|
|
|
var length = s.length; |
|
|
|
if (length < 9 |
|
/* "__proto__".length */ |
|
) { |
|
return false; |
|
} |
|
|
|
if (s.charCodeAt(length - 1) !== 95 |
|
/* '_' */ |
|
|| s.charCodeAt(length - 2) !== 95 |
|
/* '_' */ |
|
|| s.charCodeAt(length - 3) !== 111 |
|
/* 'o' */ |
|
|| s.charCodeAt(length - 4) !== 116 |
|
/* 't' */ |
|
|| s.charCodeAt(length - 5) !== 111 |
|
/* 'o' */ |
|
|| s.charCodeAt(length - 6) !== 114 |
|
/* 'r' */ |
|
|| s.charCodeAt(length - 7) !== 112 |
|
/* 'p' */ |
|
|| s.charCodeAt(length - 8) !== 95 |
|
/* '_' */ |
|
|| s.charCodeAt(length - 9) !== 95 |
|
/* '_' */ |
|
) { |
|
return false; |
|
} |
|
|
|
for (var i = length - 10; i >= 0; i--) { |
|
if (s.charCodeAt(i) !== 36 |
|
/* '$' */ |
|
) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
/** |
|
* Comparator between two mappings where the original positions are compared. |
|
* |
|
* Optionally pass in `true` as `onlyCompareGenerated` to consider two |
|
* mappings with the same original source/line/column, but different generated |
|
* line and column the same. Useful when searching for a mapping with a |
|
* stubbed out mapping. |
|
*/ |
|
|
|
|
|
function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { |
|
var cmp = mappingA.source - mappingB.source; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.originalLine - mappingB.originalLine; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn; |
|
|
|
if (cmp !== 0 || onlyCompareOriginal) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.generatedLine - mappingB.generatedLine; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
return mappingA.name - mappingB.name; |
|
} |
|
|
|
exports.compareByOriginalPositions = compareByOriginalPositions; |
|
/** |
|
* Comparator between two mappings with deflated source and name indices where |
|
* the generated positions are compared. |
|
* |
|
* Optionally pass in `true` as `onlyCompareGenerated` to consider two |
|
* mappings with the same generated line and column, but different |
|
* source/name/original line and column the same. Useful when searching for a |
|
* mapping with a stubbed out mapping. |
|
*/ |
|
|
|
function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { |
|
var cmp = mappingA.generatedLine - mappingB.generatedLine; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn; |
|
|
|
if (cmp !== 0 || onlyCompareGenerated) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.source - mappingB.source; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.originalLine - mappingB.originalLine; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
return mappingA.name - mappingB.name; |
|
} |
|
|
|
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; |
|
|
|
function strcmp(aStr1, aStr2) { |
|
if (aStr1 === aStr2) { |
|
return 0; |
|
} |
|
|
|
if (aStr1 > aStr2) { |
|
return 1; |
|
} |
|
|
|
return -1; |
|
} |
|
/** |
|
* Comparator between two mappings with inflated source and name strings where |
|
* the generated positions are compared. |
|
*/ |
|
|
|
|
|
function compareByGeneratedPositionsInflated(mappingA, mappingB) { |
|
var cmp = mappingA.generatedLine - mappingB.generatedLine; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = strcmp(mappingA.source, mappingB.source); |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.originalLine - mappingB.originalLine; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn; |
|
|
|
if (cmp !== 0) { |
|
return cmp; |
|
} |
|
|
|
return strcmp(mappingA.name, mappingB.name); |
|
} |
|
|
|
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/snapdragon/node_modules/source-map/source-map.js": |
|
/*!***********************************************************************!*\ |
|
!*** ./node_modules/snapdragon/node_modules/source-map/source-map.js ***! |
|
\***********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/* |
|
* 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 = __webpack_require__(/*! ./lib/source-map-generator */ "./node_modules/snapdragon/node_modules/source-map/lib/source-map-generator.js").SourceMapGenerator; |
|
exports.SourceMapConsumer = __webpack_require__(/*! ./lib/source-map-consumer */ "./node_modules/snapdragon/node_modules/source-map/lib/source-map-consumer.js").SourceMapConsumer; |
|
exports.SourceNode = __webpack_require__(/*! ./lib/source-node */ "./node_modules/snapdragon/node_modules/source-map/lib/source-node.js").SourceNode; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/source-map-resolve/source-map-resolve.js": |
|
/*!***************************************************************!*\ |
|
!*** ./node_modules/source-map-resolve/source-map-resolve.js ***! |
|
\***************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(setImmediate) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
// Copyright 2014, 2015, 2016, 2017 Simon Lydell |
|
// X11 (“MIT”) Licensed. (See LICENSE.) |
|
// Note: source-map-resolve.js is generated from source-map-resolve-node.js and |
|
// source-map-resolve-template.js. Only edit the two latter files, _not_ |
|
// source-map-resolve.js! |
|
void function (root, factory) { |
|
if (true) { |
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! source-map-url */ "./node_modules/source-map-url/source-map-url.js"), __webpack_require__(/*! resolve-url */ "./node_modules/resolve-url/resolve-url.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), |
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? |
|
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), |
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); |
|
} else { var resolveUrl, sourceMappingURL; } |
|
}(void 0, function (sourceMappingURL, resolveUrl) { |
|
function callbackAsync(callback, error, result) { |
|
setImmediate(function () { |
|
callback(error, result); |
|
}); |
|
} |
|
|
|
function parseMapToJSON(string, data) { |
|
try { |
|
return JSON.parse(string.replace(/^\)\]\}'/, "")); |
|
} catch (error) { |
|
error.sourceMapData = data; |
|
throw error; |
|
} |
|
} |
|
|
|
function readSync(read, url, data) { |
|
var readUrl = url; |
|
|
|
try { |
|
return String(read(readUrl)); |
|
} catch (error) { |
|
error.sourceMapData = data; |
|
throw error; |
|
} |
|
} |
|
|
|
function resolveSourceMap(code, codeUrl, read, callback) { |
|
var mapData; |
|
|
|
try { |
|
mapData = resolveSourceMapHelper(code, codeUrl); |
|
} catch (error) { |
|
return callbackAsync(callback, error); |
|
} |
|
|
|
if (!mapData || mapData.map) { |
|
return callbackAsync(callback, null, mapData); |
|
} |
|
|
|
var readUrl = mapData.url; |
|
read(readUrl, function (error, result) { |
|
if (error) { |
|
error.sourceMapData = mapData; |
|
return callback(error); |
|
} |
|
|
|
mapData.map = String(result); |
|
|
|
try { |
|
mapData.map = parseMapToJSON(mapData.map, mapData); |
|
} catch (error) { |
|
return callback(error); |
|
} |
|
|
|
callback(null, mapData); |
|
}); |
|
} |
|
|
|
function resolveSourceMapSync(code, codeUrl, read) { |
|
var mapData = resolveSourceMapHelper(code, codeUrl); |
|
|
|
if (!mapData || mapData.map) { |
|
return mapData; |
|
} |
|
|
|
mapData.map = readSync(read, mapData.url, mapData); |
|
mapData.map = parseMapToJSON(mapData.map, mapData); |
|
return mapData; |
|
} |
|
|
|
var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/; |
|
var jsonMimeTypeRegex = /^(?:application|text)\/json$/; |
|
|
|
function resolveSourceMapHelper(code, codeUrl) { |
|
var url = sourceMappingURL.getFrom(code); |
|
|
|
if (!url) { |
|
return null; |
|
} |
|
|
|
var dataUri = url.match(dataUriRegex); |
|
|
|
if (dataUri) { |
|
var mimeType = dataUri[1]; |
|
var lastParameter = dataUri[2] || ""; |
|
var encoded = dataUri[3] || ""; |
|
var data = { |
|
sourceMappingURL: url, |
|
url: null, |
|
sourcesRelativeTo: codeUrl, |
|
map: encoded |
|
}; |
|
|
|
if (!jsonMimeTypeRegex.test(mimeType)) { |
|
var error = new Error("Unuseful data uri mime type: " + (mimeType || "text/plain")); |
|
error.sourceMapData = data; |
|
throw error; |
|
} |
|
|
|
data.map = parseMapToJSON(lastParameter === ";base64" ? atob(encoded) : decodeURIComponent(encoded), data); |
|
return data; |
|
} |
|
|
|
var mapUrl = resolveUrl(codeUrl, url); |
|
return { |
|
sourceMappingURL: url, |
|
url: mapUrl, |
|
sourcesRelativeTo: mapUrl, |
|
map: null |
|
}; |
|
} |
|
|
|
function resolveSources(map, mapUrl, read, options, callback) { |
|
if (typeof options === "function") { |
|
callback = options; |
|
options = {}; |
|
} |
|
|
|
var pending = map.sources ? map.sources.length : 0; |
|
var result = { |
|
sourcesResolved: [], |
|
sourcesContent: [] |
|
}; |
|
|
|
if (pending === 0) { |
|
callbackAsync(callback, null, result); |
|
return; |
|
} |
|
|
|
var done = function done() { |
|
pending--; |
|
|
|
if (pending === 0) { |
|
callback(null, result); |
|
} |
|
}; |
|
|
|
resolveSourcesHelper(map, mapUrl, options, function (fullUrl, sourceContent, index) { |
|
result.sourcesResolved[index] = fullUrl; |
|
|
|
if (typeof sourceContent === "string") { |
|
result.sourcesContent[index] = sourceContent; |
|
callbackAsync(done, null); |
|
} else { |
|
var readUrl = fullUrl; |
|
read(readUrl, function (error, source) { |
|
result.sourcesContent[index] = error ? error : String(source); |
|
done(); |
|
}); |
|
} |
|
}); |
|
} |
|
|
|
function resolveSourcesSync(map, mapUrl, read, options) { |
|
var result = { |
|
sourcesResolved: [], |
|
sourcesContent: [] |
|
}; |
|
|
|
if (!map.sources || map.sources.length === 0) { |
|
return result; |
|
} |
|
|
|
resolveSourcesHelper(map, mapUrl, options, function (fullUrl, sourceContent, index) { |
|
result.sourcesResolved[index] = fullUrl; |
|
|
|
if (read !== null) { |
|
if (typeof sourceContent === "string") { |
|
result.sourcesContent[index] = sourceContent; |
|
} else { |
|
var readUrl = fullUrl; |
|
|
|
try { |
|
result.sourcesContent[index] = String(read(readUrl)); |
|
} catch (error) { |
|
result.sourcesContent[index] = error; |
|
} |
|
} |
|
} |
|
}); |
|
return result; |
|
} |
|
|
|
var endingSlash = /\/?$/; |
|
|
|
function resolveSourcesHelper(map, mapUrl, options, fn) { |
|
options = options || {}; |
|
var fullUrl; |
|
var sourceContent; |
|
var sourceRoot; |
|
|
|
for (var index = 0, len = map.sources.length; index < len; index++) { |
|
sourceRoot = null; |
|
|
|
if (typeof options.sourceRoot === "string") { |
|
sourceRoot = options.sourceRoot; |
|
} else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) { |
|
sourceRoot = map.sourceRoot; |
|
} // If the sourceRoot is the empty string, it is equivalent to not setting |
|
// the property at all. |
|
|
|
|
|
if (sourceRoot === null || sourceRoot === '') { |
|
fullUrl = resolveUrl(mapUrl, map.sources[index]); |
|
} else { |
|
// Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes |
|
// `/scripts/subdir/<source>`, not `/scripts/<source>`. Pointing to a file as source root |
|
// does not make sense. |
|
fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index]); |
|
} |
|
|
|
sourceContent = (map.sourcesContent || [])[index]; |
|
fn(fullUrl, sourceContent, index); |
|
} |
|
} |
|
|
|
function resolve(code, codeUrl, read, options, callback) { |
|
if (typeof options === "function") { |
|
callback = options; |
|
options = {}; |
|
} |
|
|
|
if (code === null) { |
|
var mapUrl = codeUrl; |
|
var data = { |
|
sourceMappingURL: null, |
|
url: mapUrl, |
|
sourcesRelativeTo: mapUrl, |
|
map: null |
|
}; |
|
var readUrl = mapUrl; |
|
read(readUrl, function (error, result) { |
|
if (error) { |
|
error.sourceMapData = data; |
|
return callback(error); |
|
} |
|
|
|
data.map = String(result); |
|
|
|
try { |
|
data.map = parseMapToJSON(data.map, data); |
|
} catch (error) { |
|
return callback(error); |
|
} |
|
|
|
_resolveSources(data); |
|
}); |
|
} else { |
|
resolveSourceMap(code, codeUrl, read, function (error, mapData) { |
|
if (error) { |
|
return callback(error); |
|
} |
|
|
|
if (!mapData) { |
|
return callback(null, null); |
|
} |
|
|
|
_resolveSources(mapData); |
|
}); |
|
} |
|
|
|
function _resolveSources(mapData) { |
|
resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function (error, result) { |
|
if (error) { |
|
return callback(error); |
|
} |
|
|
|
mapData.sourcesResolved = result.sourcesResolved; |
|
mapData.sourcesContent = result.sourcesContent; |
|
callback(null, mapData); |
|
}); |
|
} |
|
} |
|
|
|
function resolveSync(code, codeUrl, read, options) { |
|
var mapData; |
|
|
|
if (code === null) { |
|
var mapUrl = codeUrl; |
|
mapData = { |
|
sourceMappingURL: null, |
|
url: mapUrl, |
|
sourcesRelativeTo: mapUrl, |
|
map: null |
|
}; |
|
mapData.map = readSync(read, mapUrl, mapData); |
|
mapData.map = parseMapToJSON(mapData.map, mapData); |
|
} else { |
|
mapData = resolveSourceMapSync(code, codeUrl, read); |
|
|
|
if (!mapData) { |
|
return null; |
|
} |
|
} |
|
|
|
var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options); |
|
mapData.sourcesResolved = result.sourcesResolved; |
|
mapData.sourcesContent = result.sourcesContent; |
|
return mapData; |
|
} |
|
|
|
return { |
|
resolveSourceMap: resolveSourceMap, |
|
resolveSourceMapSync: resolveSourceMapSync, |
|
resolveSources: resolveSources, |
|
resolveSourcesSync: resolveSourcesSync, |
|
resolve: resolve, |
|
resolveSync: resolveSync, |
|
parseMapToJSON: parseMapToJSON |
|
}; |
|
}); |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../timers-browserify/main.js */ "./node_modules/timers-browserify/main.js").setImmediate)) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/source-map-url/source-map-url.js": |
|
/*!*******************************************************!*\ |
|
!*** ./node_modules/source-map-url/source-map-url.js ***! |
|
\*******************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__; |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
// Copyright 2014 Simon Lydell |
|
// X11 (“MIT”) Licensed. (See LICENSE.) |
|
void function (root, factory) { |
|
if (true) { |
|
!(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), |
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? |
|
(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : |
|
__WEBPACK_AMD_DEFINE_FACTORY__), |
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); |
|
} else {} |
|
}(void 0, function () { |
|
var innerRegex = /[#@] sourceMappingURL=([^\s'"]*)/; |
|
var regex = RegExp("(?:" + "/\\*" + "(?:\\s*\r?\n(?://)?)?" + "(?:" + innerRegex.source + ")" + "\\s*" + "\\*/" + "|" + "//(?:" + innerRegex.source + ")" + ")" + "\\s*"); |
|
return { |
|
regex: regex, |
|
_innerRegex: innerRegex, |
|
getFrom: function getFrom(code) { |
|
var match = code.match(regex); |
|
return match ? match[1] || match[2] || "" : null; |
|
}, |
|
existsIn: function existsIn(code) { |
|
return regex.test(code); |
|
}, |
|
removeFrom: function removeFrom(code) { |
|
return code.replace(regex, ""); |
|
}, |
|
insertBefore: function insertBefore(code, string) { |
|
var match = code.match(regex); |
|
|
|
if (match) { |
|
return code.slice(0, match.index) + string + code.slice(match.index); |
|
} else { |
|
return code + string; |
|
} |
|
} |
|
}; |
|
}); |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/split-string/index.js": |
|
/*!********************************************!*\ |
|
!*** ./node_modules/split-string/index.js ***! |
|
\********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* split-string <https://github.com/jonschlinkert/split-string> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/split-string/node_modules/extend-shallow/index.js"); |
|
|
|
module.exports = function (str, options, fn) { |
|
if (typeof str !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
if (typeof options === 'function') { |
|
fn = options; |
|
options = null; |
|
} // allow separator to be defined as a string |
|
|
|
|
|
if (typeof options === 'string') { |
|
options = { |
|
sep: options |
|
}; |
|
} |
|
|
|
var opts = extend({ |
|
sep: '.' |
|
}, options); |
|
var quotes = opts.quotes || ['"', "'", '`']; |
|
var brackets; |
|
|
|
if (opts.brackets === true) { |
|
brackets = { |
|
'<': '>', |
|
'(': ')', |
|
'[': ']', |
|
'{': '}' |
|
}; |
|
} else if (opts.brackets) { |
|
brackets = opts.brackets; |
|
} |
|
|
|
var tokens = []; |
|
var stack = []; |
|
var arr = ['']; |
|
var sep = opts.sep; |
|
var len = str.length; |
|
var idx = -1; |
|
var closeIdx; |
|
|
|
function expected() { |
|
if (brackets && stack.length) { |
|
return brackets[stack[stack.length - 1]]; |
|
} |
|
} |
|
|
|
while (++idx < len) { |
|
var ch = str[idx]; |
|
var next = str[idx + 1]; |
|
var tok = { |
|
val: ch, |
|
idx: idx, |
|
arr: arr, |
|
str: str |
|
}; |
|
tokens.push(tok); |
|
|
|
if (ch === '\\') { |
|
tok.val = keepEscaping(opts, str, idx) === true ? ch + next : next; |
|
tok.escaped = true; |
|
|
|
if (typeof fn === 'function') { |
|
fn(tok); |
|
} |
|
|
|
arr[arr.length - 1] += tok.val; |
|
idx++; |
|
continue; |
|
} |
|
|
|
if (brackets && brackets[ch]) { |
|
stack.push(ch); |
|
var e = expected(); |
|
var i = idx + 1; |
|
|
|
if (str.indexOf(e, i + 1) !== -1) { |
|
while (stack.length && i < len) { |
|
var s = str[++i]; |
|
|
|
if (s === '\\') { |
|
s++; |
|
continue; |
|
} |
|
|
|
if (quotes.indexOf(s) !== -1) { |
|
i = getClosingQuote(str, s, i + 1); |
|
continue; |
|
} |
|
|
|
e = expected(); |
|
|
|
if (stack.length && str.indexOf(e, i + 1) === -1) { |
|
break; |
|
} |
|
|
|
if (brackets[s]) { |
|
stack.push(s); |
|
continue; |
|
} |
|
|
|
if (e === s) { |
|
stack.pop(); |
|
} |
|
} |
|
} |
|
|
|
closeIdx = i; |
|
|
|
if (closeIdx === -1) { |
|
arr[arr.length - 1] += ch; |
|
continue; |
|
} |
|
|
|
ch = str.slice(idx, closeIdx + 1); |
|
tok.val = ch; |
|
tok.idx = idx = closeIdx; |
|
} |
|
|
|
if (quotes.indexOf(ch) !== -1) { |
|
closeIdx = getClosingQuote(str, ch, idx + 1); |
|
|
|
if (closeIdx === -1) { |
|
arr[arr.length - 1] += ch; |
|
continue; |
|
} |
|
|
|
if (keepQuotes(ch, opts) === true) { |
|
ch = str.slice(idx, closeIdx + 1); |
|
} else { |
|
ch = str.slice(idx + 1, closeIdx); |
|
} |
|
|
|
tok.val = ch; |
|
tok.idx = idx = closeIdx; |
|
} |
|
|
|
if (typeof fn === 'function') { |
|
fn(tok, tokens); |
|
ch = tok.val; |
|
idx = tok.idx; |
|
} |
|
|
|
if (tok.val === sep && tok.split !== false) { |
|
arr.push(''); |
|
continue; |
|
} |
|
|
|
arr[arr.length - 1] += tok.val; |
|
} |
|
|
|
return arr; |
|
}; |
|
|
|
function getClosingQuote(str, ch, i, brackets) { |
|
var idx = str.indexOf(ch, i); |
|
|
|
if (str.charAt(idx - 1) === '\\') { |
|
return getClosingQuote(str, ch, idx + 1); |
|
} |
|
|
|
return idx; |
|
} |
|
|
|
function keepQuotes(ch, opts) { |
|
if (opts.keepDoubleQuotes === true && ch === '"') return true; |
|
if (opts.keepSingleQuotes === true && ch === "'") return true; |
|
return opts.keepQuotes; |
|
} |
|
|
|
function keepEscaping(opts, str, idx) { |
|
if (typeof opts.keepEscaping === 'function') { |
|
return opts.keepEscaping(str, idx); |
|
} |
|
|
|
return opts.keepEscaping === true || str[idx + 1] === '\\'; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/split-string/node_modules/extend-shallow/index.js": |
|
/*!************************************************************************!*\ |
|
!*** ./node_modules/split-string/node_modules/extend-shallow/index.js ***! |
|
\************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isExtendable = __webpack_require__(/*! is-extendable */ "./node_modules/split-string/node_modules/is-extendable/index.js"); |
|
|
|
var assignSymbols = __webpack_require__(/*! assign-symbols */ "./node_modules/assign-symbols/index.js"); |
|
|
|
module.exports = Object.assign || function (obj |
|
/*, objects*/ |
|
) { |
|
if (obj === null || typeof obj === 'undefined') { |
|
throw new TypeError('Cannot convert undefined or null to object'); |
|
} |
|
|
|
if (!isObject(obj)) { |
|
obj = {}; |
|
} |
|
|
|
for (var i = 1; i < arguments.length; i++) { |
|
var val = arguments[i]; |
|
|
|
if (isString(val)) { |
|
val = toObject(val); |
|
} |
|
|
|
if (isObject(val)) { |
|
assign(obj, val); |
|
assignSymbols(obj, val); |
|
} |
|
} |
|
|
|
return obj; |
|
}; |
|
|
|
function assign(a, b) { |
|
for (var key in b) { |
|
if (hasOwn(b, key)) { |
|
a[key] = b[key]; |
|
} |
|
} |
|
} |
|
|
|
function isString(val) { |
|
return val && typeof val === 'string'; |
|
} |
|
|
|
function toObject(str) { |
|
var obj = {}; |
|
|
|
for (var i in str) { |
|
obj[i] = str[i]; |
|
} |
|
|
|
return obj; |
|
} |
|
|
|
function isObject(val) { |
|
return val && _typeof(val) === 'object' || isExtendable(val); |
|
} |
|
/** |
|
* Returns true if the given `key` is an own property of `obj`. |
|
*/ |
|
|
|
|
|
function hasOwn(obj, key) { |
|
return Object.prototype.hasOwnProperty.call(obj, key); |
|
} |
|
|
|
function isEnum(obj, key) { |
|
return Object.prototype.propertyIsEnumerable.call(obj, key); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/split-string/node_modules/is-extendable/index.js": |
|
/*!***********************************************************************!*\ |
|
!*** ./node_modules/split-string/node_modules/is-extendable/index.js ***! |
|
\***********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-extendable <https://github.com/jonschlinkert/is-extendable> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isPlainObject = __webpack_require__(/*! is-plain-object */ "./node_modules/is-plain-object/index.js"); |
|
|
|
module.exports = function isExtendable(val) { |
|
return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/stack-utils/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/stack-utils/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) { |
|
|
|
module.exports = StackUtils; |
|
|
|
function StackUtils(opts) { |
|
if (!(this instanceof StackUtils)) { |
|
throw new Error('StackUtils constructor must be called with new'); |
|
} |
|
|
|
opts = opts || {}; |
|
this._cwd = (opts.cwd || process.cwd()).replace(/\\/g, '/'); |
|
this._internals = opts.internals || []; |
|
this._wrapCallSite = opts.wrapCallSite || false; |
|
} |
|
|
|
module.exports.nodeInternals = nodeInternals; |
|
|
|
function nodeInternals() { |
|
if (!module.exports.natives) { |
|
module.exports.natives = Object.keys(process.binding('natives')); |
|
module.exports.natives.push('bootstrap_node', 'node', 'internal/bootstrap/node'); |
|
} |
|
|
|
return module.exports.natives.map(function (n) { |
|
return new RegExp('\\(' + n + '\\.js:\\d+:\\d+\\)$'); |
|
}).concat([/\s*at (bootstrap_)?node\.js:\d+:\d+?$/, /\(internal\/[^:]+:\d+:\d+\)$/, /\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/]); |
|
} |
|
|
|
StackUtils.prototype.clean = function (stack) { |
|
if (!Array.isArray(stack)) { |
|
stack = stack.split('\n'); |
|
} |
|
|
|
if (!/^\s*at /.test(stack[0]) && /^\s*at /.test(stack[1])) { |
|
stack = stack.slice(1); |
|
} |
|
|
|
var outdent = false; |
|
var lastNonAtLine = null; |
|
var result = []; |
|
stack.forEach(function (st) { |
|
st = st.replace(/\\/g, '/'); |
|
|
|
var isInternal = this._internals.some(function (internal) { |
|
return internal.test(st); |
|
}); |
|
|
|
if (isInternal) { |
|
return null; |
|
} |
|
|
|
var isAtLine = /^\s*at /.test(st); |
|
|
|
if (outdent) { |
|
st = st.replace(/\s+$/, '').replace(/^(\s+)at /, '$1'); |
|
} else { |
|
st = st.trim(); |
|
|
|
if (isAtLine) { |
|
st = st.substring(3); |
|
} |
|
} |
|
|
|
st = st.replace(this._cwd + '/', ''); |
|
|
|
if (st) { |
|
if (isAtLine) { |
|
if (lastNonAtLine) { |
|
result.push(lastNonAtLine); |
|
lastNonAtLine = null; |
|
} |
|
|
|
result.push(st); |
|
} else { |
|
outdent = true; |
|
lastNonAtLine = st; |
|
} |
|
} |
|
}, this); |
|
stack = result.join('\n').trim(); |
|
|
|
if (stack) { |
|
return stack + '\n'; |
|
} |
|
|
|
return ''; |
|
}; |
|
|
|
StackUtils.prototype.captureString = function (limit, fn) { |
|
if (typeof limit === 'function') { |
|
fn = limit; |
|
limit = Infinity; |
|
} |
|
|
|
if (!fn) { |
|
fn = this.captureString; |
|
} |
|
|
|
var limitBefore = Error.stackTraceLimit; |
|
|
|
if (limit) { |
|
Error.stackTraceLimit = limit; |
|
} |
|
|
|
var obj = {}; |
|
Error.captureStackTrace(obj, fn); |
|
var stack = obj.stack; |
|
Error.stackTraceLimit = limitBefore; |
|
return this.clean(stack); |
|
}; |
|
|
|
StackUtils.prototype.capture = function (limit, fn) { |
|
if (typeof limit === 'function') { |
|
fn = limit; |
|
limit = Infinity; |
|
} |
|
|
|
if (!fn) { |
|
fn = this.capture; |
|
} |
|
|
|
var prepBefore = Error.prepareStackTrace; |
|
var limitBefore = Error.stackTraceLimit; |
|
var wrapCallSite = this._wrapCallSite; |
|
|
|
Error.prepareStackTrace = function (obj, site) { |
|
if (wrapCallSite) { |
|
return site.map(wrapCallSite); |
|
} |
|
|
|
return site; |
|
}; |
|
|
|
if (limit) { |
|
Error.stackTraceLimit = limit; |
|
} |
|
|
|
var obj = {}; |
|
Error.captureStackTrace(obj, fn); |
|
var stack = obj.stack; |
|
Error.prepareStackTrace = prepBefore; |
|
Error.stackTraceLimit = limitBefore; |
|
return stack; |
|
}; |
|
|
|
StackUtils.prototype.at = function at(fn) { |
|
if (!fn) { |
|
fn = at; |
|
} |
|
|
|
var site = this.capture(1, fn)[0]; |
|
|
|
if (!site) { |
|
return {}; |
|
} |
|
|
|
var res = { |
|
line: site.getLineNumber(), |
|
column: site.getColumnNumber() |
|
}; |
|
|
|
this._setFile(res, site.getFileName()); |
|
|
|
if (site.isConstructor()) { |
|
res.constructor = true; |
|
} |
|
|
|
if (site.isEval()) { |
|
res.evalOrigin = site.getEvalOrigin(); |
|
} // Node v10 stopped with the isNative() on callsites, apparently |
|
|
|
/* istanbul ignore next */ |
|
|
|
|
|
if (site.isNative()) { |
|
res.native = true; |
|
} |
|
|
|
var typename = null; |
|
|
|
try { |
|
typename = site.getTypeName(); |
|
} catch (er) {} |
|
|
|
if (typename && typename !== 'Object' && typename !== '[object Object]') { |
|
res.type = typename; |
|
} |
|
|
|
var fname = site.getFunctionName(); |
|
|
|
if (fname) { |
|
res.function = fname; |
|
} |
|
|
|
var meth = site.getMethodName(); |
|
|
|
if (meth && fname !== meth) { |
|
res.method = meth; |
|
} |
|
|
|
return res; |
|
}; |
|
|
|
StackUtils.prototype._setFile = function (result, filename) { |
|
if (filename) { |
|
filename = filename.replace(/\\/g, '/'); |
|
|
|
if (filename.indexOf(this._cwd + '/') === 0) { |
|
filename = filename.substr(this._cwd.length + 1); |
|
} |
|
|
|
result.file = filename; |
|
} |
|
}; |
|
|
|
var re = new RegExp('^' + // Sometimes we strip out the ' at' because it's noisy |
|
'(?:\\s*at )?' + // $1 = ctor if 'new' |
|
'(?:(new) )?' + // $2 = function name (can be literally anything) |
|
// May contain method at the end as [as xyz] |
|
'(?:(.*?) \\()?' + // (eval at <anonymous> (file.js:1:1), |
|
// $3 = eval origin |
|
// $4:$5:$6 are eval file/line/col, but not normally reported |
|
'(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?' + // file:line:col |
|
// $7:$8:$9 |
|
// $10 = 'native' if native |
|
'(?:(.+?):(\\d+):(\\d+)|(native))' + // maybe close the paren, then end |
|
// if $11 is ), then we only allow balanced parens in the filename |
|
// any imbalance is placed on the fname. This is a heuristic, and |
|
// bound to be incorrect in some edge cases. The bet is that |
|
// having weird characters in method names is more common than |
|
// having weird characters in filenames, which seems reasonable. |
|
'(\\)?)$'); |
|
var methodRe = /^(.*?) \[as (.*?)\]$/; |
|
|
|
StackUtils.prototype.parseLine = function parseLine(line) { |
|
var match = line && line.match(re); |
|
|
|
if (!match) { |
|
return null; |
|
} |
|
|
|
var ctor = match[1] === 'new'; |
|
var fname = match[2]; |
|
var evalOrigin = match[3]; |
|
var evalFile = match[4]; |
|
var evalLine = Number(match[5]); |
|
var evalCol = Number(match[6]); |
|
var file = match[7]; |
|
var lnum = match[8]; |
|
var col = match[9]; |
|
var native = match[10] === 'native'; |
|
var closeParen = match[11] === ')'; |
|
var res = {}; |
|
|
|
if (lnum) { |
|
res.line = Number(lnum); |
|
} |
|
|
|
if (col) { |
|
res.column = Number(col); |
|
} |
|
|
|
if (closeParen && file) { |
|
// make sure parens are balanced |
|
// if we have a file like "asdf) [as foo] (xyz.js", then odds are |
|
// that the fname should be += " (asdf) [as foo]" and the file |
|
// should be just "xyz.js" |
|
// walk backwards from the end to find the last unbalanced ( |
|
var closes = 0; |
|
|
|
for (var i = file.length - 1; i > 0; i--) { |
|
if (file.charAt(i) === ')') { |
|
closes++; |
|
} else if (file.charAt(i) === '(' && file.charAt(i - 1) === ' ') { |
|
closes--; |
|
|
|
if (closes === -1 && file.charAt(i - 1) === ' ') { |
|
var before = file.substr(0, i - 1); |
|
var after = file.substr(i + 1); |
|
file = after; |
|
fname += ' (' + before; |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
|
|
if (fname) { |
|
var methodMatch = fname.match(methodRe); |
|
|
|
if (methodMatch) { |
|
fname = methodMatch[1]; |
|
var meth = methodMatch[2]; |
|
} |
|
} |
|
|
|
this._setFile(res, file); |
|
|
|
if (ctor) { |
|
res.constructor = true; |
|
} |
|
|
|
if (evalOrigin) { |
|
res.evalOrigin = evalOrigin; |
|
res.evalLine = evalLine; |
|
res.evalColumn = evalCol; |
|
res.evalFile = evalFile && evalFile.replace(/\\/g, '/'); |
|
} |
|
|
|
if (native) { |
|
res.native = true; |
|
} |
|
|
|
if (fname) { |
|
res.function = fname; |
|
} |
|
|
|
if (meth && fname !== meth) { |
|
res.method = meth; |
|
} |
|
|
|
return res; |
|
}; |
|
|
|
var bound = new StackUtils(); |
|
Object.keys(StackUtils.prototype).forEach(function (key) { |
|
StackUtils[key] = bound[key].bind(bound); |
|
}); |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/static-extend/index.js": |
|
/*!*********************************************!*\ |
|
!*** ./node_modules/static-extend/index.js ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* static-extend <https://github.com/jonschlinkert/static-extend> |
|
* |
|
* Copyright (c) 2016, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var copy = __webpack_require__(/*! object-copy */ "./node_modules/object-copy/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/define-property/index.js"); |
|
|
|
var util = __webpack_require__(/*! util */ "./node_modules/util/util.js"); |
|
/** |
|
* Returns a function for extending the static properties, |
|
* prototype properties, and descriptors from the `Parent` |
|
* constructor onto `Child` constructors. |
|
* |
|
* ```js |
|
* var extend = require('static-extend'); |
|
* Parent.extend = extend(Parent); |
|
* |
|
* // optionally pass a custom merge function as the second arg |
|
* Parent.extend = extend(Parent, function(Child) { |
|
* Child.prototype.mixin = function(key, val) { |
|
* Child.prototype[key] = val; |
|
* }; |
|
* }); |
|
* |
|
* // extend "child" constructors |
|
* Parent.extend(Child); |
|
* |
|
* // optionally define prototype methods as the second arg |
|
* Parent.extend(Child, { |
|
* foo: function() {}, |
|
* bar: function() {} |
|
* }); |
|
* ``` |
|
* @param {Function} `Parent` Parent ctor |
|
* @param {Function} `extendFn` Optional extend function for handling any necessary custom merging. Useful when updating methods that require a specific prototype. |
|
* @param {Function} `Child` Child ctor |
|
* @param {Object} `proto` Optionally pass additional prototype properties to inherit. |
|
* @return {Object} |
|
* @api public |
|
*/ |
|
|
|
|
|
function extend(Parent, extendFn) { |
|
if (typeof Parent !== 'function') { |
|
throw new TypeError('expected Parent to be a function.'); |
|
} |
|
|
|
return function (Ctor, proto) { |
|
if (typeof Ctor !== 'function') { |
|
throw new TypeError('expected Ctor to be a function.'); |
|
} |
|
|
|
util.inherits(Ctor, Parent); |
|
copy(Ctor, Parent); // proto can be null or a plain object |
|
|
|
if (_typeof(proto) === 'object') { |
|
var obj = Object.create(proto); |
|
|
|
for (var k in obj) { |
|
Ctor.prototype[k] = obj[k]; |
|
} |
|
} // keep a reference to the parent prototype |
|
|
|
|
|
define(Ctor.prototype, '_parent_', { |
|
configurable: true, |
|
set: function set() {}, |
|
get: function get() { |
|
return Parent.prototype; |
|
} |
|
}); |
|
|
|
if (typeof extendFn === 'function') { |
|
extendFn(Ctor, Parent); |
|
} |
|
|
|
Ctor.extend = extend(Ctor, extendFn); |
|
}; |
|
} |
|
|
|
; |
|
/** |
|
* Expose `extend` |
|
*/ |
|
|
|
module.exports = extend; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/timers-browserify/main.js": |
|
/*!************************************************!*\ |
|
!*** ./node_modules/timers-browserify/main.js ***! |
|
\************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(global) { |
|
|
|
var scope = typeof global !== "undefined" && global || typeof self !== "undefined" && self || window; |
|
var apply = Function.prototype.apply; // DOM APIs, for completeness |
|
|
|
exports.setTimeout = function () { |
|
return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout); |
|
}; |
|
|
|
exports.setInterval = function () { |
|
return new Timeout(apply.call(setInterval, scope, arguments), clearInterval); |
|
}; |
|
|
|
exports.clearTimeout = exports.clearInterval = function (timeout) { |
|
if (timeout) { |
|
timeout.close(); |
|
} |
|
}; |
|
|
|
function Timeout(id, clearFn) { |
|
this._id = id; |
|
this._clearFn = clearFn; |
|
} |
|
|
|
Timeout.prototype.unref = Timeout.prototype.ref = function () {}; |
|
|
|
Timeout.prototype.close = function () { |
|
this._clearFn.call(scope, this._id); |
|
}; // Does not start the time, just sets up the members needed. |
|
|
|
|
|
exports.enroll = function (item, msecs) { |
|
clearTimeout(item._idleTimeoutId); |
|
item._idleTimeout = msecs; |
|
}; |
|
|
|
exports.unenroll = function (item) { |
|
clearTimeout(item._idleTimeoutId); |
|
item._idleTimeout = -1; |
|
}; |
|
|
|
exports._unrefActive = exports.active = function (item) { |
|
clearTimeout(item._idleTimeoutId); |
|
var msecs = item._idleTimeout; |
|
|
|
if (msecs >= 0) { |
|
item._idleTimeoutId = setTimeout(function onTimeout() { |
|
if (item._onTimeout) item._onTimeout(); |
|
}, msecs); |
|
} |
|
}; // setimmediate attaches itself to the global object |
|
|
|
|
|
__webpack_require__(/*! setimmediate */ "./node_modules/setimmediate/setImmediate.js"); // On some exotic environments, it's not clear which object `setimmediate` was |
|
// able to install onto. Search each possibility in the same order as the |
|
// `setimmediate` library. |
|
|
|
|
|
exports.setImmediate = typeof self !== "undefined" && self.setImmediate || typeof global !== "undefined" && global.setImmediate || void 0 && (void 0).setImmediate; |
|
exports.clearImmediate = typeof self !== "undefined" && self.clearImmediate || typeof global !== "undefined" && global.clearImmediate || void 0 && (void 0).clearImmediate; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/to-object-path/index.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/to-object-path/index.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* to-object-path <https://github.com/jonschlinkert/to-object-path> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
var typeOf = __webpack_require__(/*! kind-of */ "./node_modules/kind-of/index.js"); |
|
|
|
module.exports = function toPath(args) { |
|
if (typeOf(args) !== 'arguments') { |
|
args = arguments; |
|
} |
|
|
|
return filter(args).join('.'); |
|
}; |
|
|
|
function filter(arr) { |
|
var len = arr.length; |
|
var idx = -1; |
|
var res = []; |
|
|
|
while (++idx < len) { |
|
var ele = arr[idx]; |
|
|
|
if (typeOf(ele) === 'arguments' || Array.isArray(ele)) { |
|
res.push.apply(res, filter(ele)); |
|
} else if (typeof ele === 'string') { |
|
res.push(ele); |
|
} |
|
} |
|
|
|
return res; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/to-regex-range/index.js": |
|
/*!**********************************************!*\ |
|
!*** ./node_modules/to-regex-range/index.js ***! |
|
\**********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* to-regex-range <https://github.com/jonschlinkert/to-regex-range> |
|
* |
|
* Copyright (c) 2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var repeat = __webpack_require__(/*! repeat-string */ "./node_modules/repeat-string/index.js"); |
|
|
|
var isNumber = __webpack_require__(/*! is-number */ "./node_modules/is-number/index.js"); |
|
|
|
var cache = {}; |
|
|
|
function toRegexRange(min, max, options) { |
|
if (isNumber(min) === false) { |
|
throw new RangeError('toRegexRange: first argument is invalid.'); |
|
} |
|
|
|
if (typeof max === 'undefined' || min === max) { |
|
return String(min); |
|
} |
|
|
|
if (isNumber(max) === false) { |
|
throw new RangeError('toRegexRange: second argument is invalid.'); |
|
} |
|
|
|
options = options || {}; |
|
var relax = String(options.relaxZeros); |
|
var shorthand = String(options.shorthand); |
|
var capture = String(options.capture); |
|
var key = min + ':' + max + '=' + relax + shorthand + capture; |
|
|
|
if (cache.hasOwnProperty(key)) { |
|
return cache[key].result; |
|
} |
|
|
|
var a = Math.min(min, max); |
|
var b = Math.max(min, max); |
|
|
|
if (Math.abs(a - b) === 1) { |
|
var result = min + '|' + max; |
|
|
|
if (options.capture) { |
|
return '(' + result + ')'; |
|
} |
|
|
|
return result; |
|
} |
|
|
|
var isPadded = padding(min) || padding(max); |
|
var positives = []; |
|
var negatives = []; |
|
var tok = { |
|
min: min, |
|
max: max, |
|
a: a, |
|
b: b |
|
}; |
|
|
|
if (isPadded) { |
|
tok.isPadded = isPadded; |
|
tok.maxLen = String(tok.max).length; |
|
} |
|
|
|
if (a < 0) { |
|
var newMin = b < 0 ? Math.abs(b) : 1; |
|
var newMax = Math.abs(a); |
|
negatives = splitToPatterns(newMin, newMax, tok, options); |
|
a = tok.a = 0; |
|
} |
|
|
|
if (b >= 0) { |
|
positives = splitToPatterns(a, b, tok, options); |
|
} |
|
|
|
tok.negatives = negatives; |
|
tok.positives = positives; |
|
tok.result = siftPatterns(negatives, positives, options); |
|
|
|
if (options.capture && positives.length + negatives.length > 1) { |
|
tok.result = '(' + tok.result + ')'; |
|
} |
|
|
|
cache[key] = tok; |
|
return tok.result; |
|
} |
|
|
|
function siftPatterns(neg, pos, options) { |
|
var onlyNegative = filterPatterns(neg, pos, '-', false, options) || []; |
|
var onlyPositive = filterPatterns(pos, neg, '', false, options) || []; |
|
var intersected = filterPatterns(neg, pos, '-?', true, options) || []; |
|
var subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); |
|
return subpatterns.join('|'); |
|
} |
|
|
|
function splitToRanges(min, max) { |
|
min = Number(min); |
|
max = Number(max); |
|
var nines = 1; |
|
var stops = [max]; |
|
var stop = +countNines(min, nines); |
|
|
|
while (min <= stop && stop <= max) { |
|
stops = push(stops, stop); |
|
nines += 1; |
|
stop = +countNines(min, nines); |
|
} |
|
|
|
var zeros = 1; |
|
stop = countZeros(max + 1, zeros) - 1; |
|
|
|
while (min < stop && stop <= max) { |
|
stops = push(stops, stop); |
|
zeros += 1; |
|
stop = countZeros(max + 1, zeros) - 1; |
|
} |
|
|
|
stops.sort(compare); |
|
return stops; |
|
} |
|
/** |
|
* Convert a range to a regex pattern |
|
* @param {Number} `start` |
|
* @param {Number} `stop` |
|
* @return {String} |
|
*/ |
|
|
|
|
|
function rangeToPattern(start, stop, options) { |
|
if (start === stop) { |
|
return { |
|
pattern: String(start), |
|
digits: [] |
|
}; |
|
} |
|
|
|
var zipped = zip(String(start), String(stop)); |
|
var len = zipped.length, |
|
i = -1; |
|
var pattern = ''; |
|
var digits = 0; |
|
|
|
while (++i < len) { |
|
var numbers = zipped[i]; |
|
var startDigit = numbers[0]; |
|
var stopDigit = numbers[1]; |
|
|
|
if (startDigit === stopDigit) { |
|
pattern += startDigit; |
|
} else if (startDigit !== '0' || stopDigit !== '9') { |
|
pattern += toCharacterClass(startDigit, stopDigit); |
|
} else { |
|
digits += 1; |
|
} |
|
} |
|
|
|
if (digits) { |
|
pattern += options.shorthand ? '\\d' : '[0-9]'; |
|
} |
|
|
|
return { |
|
pattern: pattern, |
|
digits: [digits] |
|
}; |
|
} |
|
|
|
function splitToPatterns(min, max, tok, options) { |
|
var ranges = splitToRanges(min, max); |
|
var len = ranges.length; |
|
var idx = -1; |
|
var tokens = []; |
|
var start = min; |
|
var prev; |
|
|
|
while (++idx < len) { |
|
var range = ranges[idx]; |
|
var obj = rangeToPattern(start, range, options); |
|
var zeros = ''; |
|
|
|
if (!tok.isPadded && prev && prev.pattern === obj.pattern) { |
|
if (prev.digits.length > 1) { |
|
prev.digits.pop(); |
|
} |
|
|
|
prev.digits.push(obj.digits[0]); |
|
prev.string = prev.pattern + toQuantifier(prev.digits); |
|
start = range + 1; |
|
continue; |
|
} |
|
|
|
if (tok.isPadded) { |
|
zeros = padZeros(range, tok); |
|
} |
|
|
|
obj.string = zeros + obj.pattern + toQuantifier(obj.digits); |
|
tokens.push(obj); |
|
start = range + 1; |
|
prev = obj; |
|
} |
|
|
|
return tokens; |
|
} |
|
|
|
function filterPatterns(arr, comparison, prefix, intersection, options) { |
|
var res = []; |
|
|
|
for (var i = 0; i < arr.length; i++) { |
|
var tok = arr[i]; |
|
var ele = tok.string; |
|
|
|
if (options.relaxZeros !== false) { |
|
if (prefix === '-' && ele.charAt(0) === '0') { |
|
if (ele.charAt(1) === '{') { |
|
ele = '0*' + ele.replace(/^0\{\d+\}/, ''); |
|
} else { |
|
ele = '0*' + ele.slice(1); |
|
} |
|
} |
|
} |
|
|
|
if (!intersection && !contains(comparison, 'string', ele)) { |
|
res.push(prefix + ele); |
|
} |
|
|
|
if (intersection && contains(comparison, 'string', ele)) { |
|
res.push(prefix + ele); |
|
} |
|
} |
|
|
|
return res; |
|
} |
|
/** |
|
* Zip strings (`for in` can be used on string characters) |
|
*/ |
|
|
|
|
|
function zip(a, b) { |
|
var arr = []; |
|
|
|
for (var ch in a) { |
|
arr.push([a[ch], b[ch]]); |
|
} |
|
|
|
return arr; |
|
} |
|
|
|
function compare(a, b) { |
|
return a > b ? 1 : b > a ? -1 : 0; |
|
} |
|
|
|
function push(arr, ele) { |
|
if (arr.indexOf(ele) === -1) arr.push(ele); |
|
return arr; |
|
} |
|
|
|
function contains(arr, key, val) { |
|
for (var i = 0; i < arr.length; i++) { |
|
if (arr[i][key] === val) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
|
|
function countNines(min, len) { |
|
return String(min).slice(0, -len) + repeat('9', len); |
|
} |
|
|
|
function countZeros(integer, zeros) { |
|
return integer - integer % Math.pow(10, zeros); |
|
} |
|
|
|
function toQuantifier(digits) { |
|
var start = digits[0]; |
|
var stop = digits[1] ? ',' + digits[1] : ''; |
|
|
|
if (!stop && (!start || start === 1)) { |
|
return ''; |
|
} |
|
|
|
return '{' + start + stop + '}'; |
|
} |
|
|
|
function toCharacterClass(a, b) { |
|
return '[' + a + (b - a === 1 ? '' : '-') + b + ']'; |
|
} |
|
|
|
function padding(str) { |
|
return /^-?(0+)\d/.exec(str); |
|
} |
|
|
|
function padZeros(val, tok) { |
|
if (tok.isPadded) { |
|
var diff = Math.abs(tok.maxLen - String(val).length); |
|
|
|
switch (diff) { |
|
case 0: |
|
return ''; |
|
|
|
case 1: |
|
return '0'; |
|
|
|
default: |
|
{ |
|
return '0{' + diff + '}'; |
|
} |
|
} |
|
} |
|
|
|
return val; |
|
} |
|
/** |
|
* Expose `toRegexRange` |
|
*/ |
|
|
|
|
|
module.exports = toRegexRange; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/to-regex/index.js": |
|
/*!****************************************!*\ |
|
!*** ./node_modules/to-regex/index.js ***! |
|
\****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var safe = __webpack_require__(/*! safe-regex */ "./node_modules/safe-regex/index.js"); |
|
|
|
var define = __webpack_require__(/*! define-property */ "./node_modules/to-regex/node_modules/define-property/index.js"); |
|
|
|
var extend = __webpack_require__(/*! extend-shallow */ "./node_modules/to-regex/node_modules/extend-shallow/index.js"); |
|
|
|
var not = __webpack_require__(/*! regex-not */ "./node_modules/regex-not/index.js"); |
|
|
|
var MAX_LENGTH = 1024 * 64; |
|
/** |
|
* Session cache |
|
*/ |
|
|
|
var cache = {}; |
|
/** |
|
* Create a regular expression from the given `pattern` string. |
|
* |
|
* @param {String|RegExp} `pattern` Pattern can be a string or regular expression. |
|
* @param {Object} `options` |
|
* @return {RegExp} |
|
* @api public |
|
*/ |
|
|
|
module.exports = function (patterns, options) { |
|
if (!Array.isArray(patterns)) { |
|
return makeRe(patterns, options); |
|
} |
|
|
|
return makeRe(patterns.join('|'), options); |
|
}; |
|
/** |
|
* Create a regular expression from the given `pattern` string. |
|
* |
|
* @param {String|RegExp} `pattern` Pattern can be a string or regular expression. |
|
* @param {Object} `options` |
|
* @return {RegExp} |
|
* @api public |
|
*/ |
|
|
|
|
|
function makeRe(pattern, options) { |
|
if (pattern instanceof RegExp) { |
|
return pattern; |
|
} |
|
|
|
if (typeof pattern !== 'string') { |
|
throw new TypeError('expected a string'); |
|
} |
|
|
|
if (pattern.length > MAX_LENGTH) { |
|
throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); |
|
} |
|
|
|
var key = pattern; // do this before shallow cloning options, it's a lot faster |
|
|
|
if (!options || options && options.cache !== false) { |
|
key = createKey(pattern, options); |
|
|
|
if (cache.hasOwnProperty(key)) { |
|
return cache[key]; |
|
} |
|
} |
|
|
|
var opts = extend({}, options); |
|
|
|
if (opts.contains === true) { |
|
if (opts.negate === true) { |
|
opts.strictNegate = false; |
|
} else { |
|
opts.strict = false; |
|
} |
|
} |
|
|
|
if (opts.strict === false) { |
|
opts.strictOpen = false; |
|
opts.strictClose = false; |
|
} |
|
|
|
var open = opts.strictOpen !== false ? '^' : ''; |
|
var close = opts.strictClose !== false ? '$' : ''; |
|
var flags = opts.flags || ''; |
|
var regex; |
|
|
|
if (opts.nocase === true && !/i/.test(flags)) { |
|
flags += 'i'; |
|
} |
|
|
|
try { |
|
if (opts.negate || typeof opts.strictNegate === 'boolean') { |
|
pattern = not.create(pattern, opts); |
|
} |
|
|
|
var str = open + '(?:' + pattern + ')' + close; |
|
regex = new RegExp(str, flags); |
|
|
|
if (opts.safe === true && safe(regex) === false) { |
|
throw new Error('potentially unsafe regular expression: ' + regex.source); |
|
} |
|
} catch (err) { |
|
if (opts.strictErrors === true || opts.safe === true) { |
|
err.key = key; |
|
err.pattern = pattern; |
|
err.originalOptions = options; |
|
err.createdOptions = opts; |
|
throw err; |
|
} |
|
|
|
try { |
|
regex = new RegExp('^' + pattern.replace(/(\W)/g, '\\$1') + '$'); |
|
} catch (err) { |
|
regex = /.^/; //<= match nothing |
|
} |
|
} |
|
|
|
if (opts.cache !== false) { |
|
memoize(regex, key, pattern, opts); |
|
} |
|
|
|
return regex; |
|
} |
|
/** |
|
* Memoize generated regex. This can result in dramatic speed improvements |
|
* and simplify debugging by adding options and pattern to the regex. It can be |
|
* disabled by passing setting `options.cache` to false. |
|
*/ |
|
|
|
|
|
function memoize(regex, key, pattern, options) { |
|
define(regex, 'cached', true); |
|
define(regex, 'pattern', pattern); |
|
define(regex, 'options', options); |
|
define(regex, 'key', key); |
|
cache[key] = regex; |
|
} |
|
/** |
|
* Create the key to use for memoization. The key is generated |
|
* by iterating over the options and concatenating key-value pairs |
|
* to the pattern string. |
|
*/ |
|
|
|
|
|
function createKey(pattern, options) { |
|
if (!options) return pattern; |
|
var key = pattern; |
|
|
|
for (var prop in options) { |
|
if (options.hasOwnProperty(prop)) { |
|
key += ';' + prop + '=' + String(options[prop]); |
|
} |
|
} |
|
|
|
return key; |
|
} |
|
/** |
|
* Expose `makeRe` |
|
*/ |
|
|
|
|
|
module.exports.makeRe = makeRe; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/to-regex/node_modules/define-property/index.js": |
|
/*!*********************************************************************!*\ |
|
!*** ./node_modules/to-regex/node_modules/define-property/index.js ***! |
|
\*********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* define-property <https://github.com/jonschlinkert/define-property> |
|
* |
|
* Copyright (c) 2015-2018, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isobject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
var isDescriptor = __webpack_require__(/*! is-descriptor */ "./node_modules/is-descriptor/index.js"); |
|
|
|
var define = typeof Reflect !== 'undefined' && Reflect.defineProperty ? Reflect.defineProperty : Object.defineProperty; |
|
|
|
module.exports = function defineProperty(obj, key, val) { |
|
if (!isobject(obj) && typeof obj !== 'function' && !Array.isArray(obj)) { |
|
throw new TypeError('expected an object, function, or array'); |
|
} |
|
|
|
if (typeof key !== 'string') { |
|
throw new TypeError('expected "key" to be a string'); |
|
} |
|
|
|
if (isDescriptor(val)) { |
|
define(obj, key, val); |
|
return obj; |
|
} |
|
|
|
define(obj, key, { |
|
configurable: true, |
|
enumerable: false, |
|
writable: true, |
|
value: val |
|
}); |
|
return obj; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/to-regex/node_modules/extend-shallow/index.js": |
|
/*!********************************************************************!*\ |
|
!*** ./node_modules/to-regex/node_modules/extend-shallow/index.js ***! |
|
\********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isExtendable = __webpack_require__(/*! is-extendable */ "./node_modules/to-regex/node_modules/is-extendable/index.js"); |
|
|
|
var assignSymbols = __webpack_require__(/*! assign-symbols */ "./node_modules/assign-symbols/index.js"); |
|
|
|
module.exports = Object.assign || function (obj |
|
/*, objects*/ |
|
) { |
|
if (obj === null || typeof obj === 'undefined') { |
|
throw new TypeError('Cannot convert undefined or null to object'); |
|
} |
|
|
|
if (!isObject(obj)) { |
|
obj = {}; |
|
} |
|
|
|
for (var i = 1; i < arguments.length; i++) { |
|
var val = arguments[i]; |
|
|
|
if (isString(val)) { |
|
val = toObject(val); |
|
} |
|
|
|
if (isObject(val)) { |
|
assign(obj, val); |
|
assignSymbols(obj, val); |
|
} |
|
} |
|
|
|
return obj; |
|
}; |
|
|
|
function assign(a, b) { |
|
for (var key in b) { |
|
if (hasOwn(b, key)) { |
|
a[key] = b[key]; |
|
} |
|
} |
|
} |
|
|
|
function isString(val) { |
|
return val && typeof val === 'string'; |
|
} |
|
|
|
function toObject(str) { |
|
var obj = {}; |
|
|
|
for (var i in str) { |
|
obj[i] = str[i]; |
|
} |
|
|
|
return obj; |
|
} |
|
|
|
function isObject(val) { |
|
return val && _typeof(val) === 'object' || isExtendable(val); |
|
} |
|
/** |
|
* Returns true if the given `key` is an own property of `obj`. |
|
*/ |
|
|
|
|
|
function hasOwn(obj, key) { |
|
return Object.prototype.hasOwnProperty.call(obj, key); |
|
} |
|
|
|
function isEnum(obj, key) { |
|
return Object.prototype.propertyIsEnumerable.call(obj, key); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/to-regex/node_modules/is-extendable/index.js": |
|
/*!*******************************************************************!*\ |
|
!*** ./node_modules/to-regex/node_modules/is-extendable/index.js ***! |
|
\*******************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* is-extendable <https://github.com/jonschlinkert/is-extendable> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isPlainObject = __webpack_require__(/*! is-plain-object */ "./node_modules/is-plain-object/index.js"); |
|
|
|
module.exports = function isExtendable(val) { |
|
return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/union-value/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/union-value/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var isObject = __webpack_require__(/*! is-extendable */ "./node_modules/is-extendable/index.js"); |
|
|
|
var union = __webpack_require__(/*! arr-union */ "./node_modules/arr-union/index.js"); |
|
|
|
var get = __webpack_require__(/*! get-value */ "./node_modules/get-value/index.js"); |
|
|
|
var set = __webpack_require__(/*! set-value */ "./node_modules/set-value/index.js"); |
|
|
|
module.exports = function unionValue(obj, prop, value) { |
|
if (!isObject(obj)) { |
|
throw new TypeError('union-value expects the first argument to be an object.'); |
|
} |
|
|
|
if (typeof prop !== 'string') { |
|
throw new TypeError('union-value expects `prop` to be a string.'); |
|
} |
|
|
|
var arr = arrayify(get(obj, prop)); |
|
set(obj, prop, union(arr, arrayify(value))); |
|
return obj; |
|
}; |
|
|
|
function arrayify(val) { |
|
if (val === null || typeof val === 'undefined') { |
|
return []; |
|
} |
|
|
|
if (Array.isArray(val)) { |
|
return val; |
|
} |
|
|
|
return [val]; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/unset-value/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./node_modules/unset-value/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* unset-value <https://github.com/jonschlinkert/unset-value> |
|
* |
|
* Copyright (c) 2015, 2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js"); |
|
|
|
var has = __webpack_require__(/*! has-value */ "./node_modules/unset-value/node_modules/has-value/index.js"); |
|
|
|
module.exports = function unset(obj, prop) { |
|
if (!isObject(obj)) { |
|
throw new TypeError('expected an object.'); |
|
} |
|
|
|
if (obj.hasOwnProperty(prop)) { |
|
delete obj[prop]; |
|
return true; |
|
} |
|
|
|
if (has(obj, prop)) { |
|
var segs = prop.split('.'); |
|
var last = segs.pop(); |
|
|
|
while (segs.length && segs[segs.length - 1].slice(-1) === '\\') { |
|
last = segs.pop().slice(0, -1) + '.' + last; |
|
} |
|
|
|
while (segs.length) { |
|
obj = obj[prop = segs.shift()]; |
|
} |
|
|
|
return delete obj[last]; |
|
} |
|
|
|
return true; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/unset-value/node_modules/has-value/index.js": |
|
/*!******************************************************************!*\ |
|
!*** ./node_modules/unset-value/node_modules/has-value/index.js ***! |
|
\******************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* has-value <https://github.com/jonschlinkert/has-value> |
|
* |
|
* Copyright (c) 2014-2016, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
var isObject = __webpack_require__(/*! isobject */ "./node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js"); |
|
|
|
var hasValues = __webpack_require__(/*! has-values */ "./node_modules/unset-value/node_modules/has-values/index.js"); |
|
|
|
var get = __webpack_require__(/*! get-value */ "./node_modules/get-value/index.js"); |
|
|
|
module.exports = function (obj, prop, noZero) { |
|
if (isObject(obj)) { |
|
return hasValues(get(obj, prop), noZero); |
|
} |
|
|
|
return hasValues(obj, prop); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js": |
|
/*!****************************************************************************************!*\ |
|
!*** ./node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js ***! |
|
\****************************************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* isobject <https://github.com/jonschlinkert/isobject> |
|
* |
|
* Copyright (c) 2014-2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var isArray = __webpack_require__(/*! isarray */ "./node_modules/isarray/index.js"); |
|
|
|
module.exports = function isObject(val) { |
|
return val != null && _typeof(val) === 'object' && isArray(val) === false; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/unset-value/node_modules/has-values/index.js": |
|
/*!*******************************************************************!*\ |
|
!*** ./node_modules/unset-value/node_modules/has-values/index.js ***! |
|
\*******************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* has-values <https://github.com/jonschlinkert/has-values> |
|
* |
|
* Copyright (c) 2014-2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
|
|
module.exports = function hasValue(o, noZero) { |
|
if (o === null || o === undefined) { |
|
return false; |
|
} |
|
|
|
if (typeof o === 'boolean') { |
|
return true; |
|
} |
|
|
|
if (typeof o === 'number') { |
|
if (o === 0 && noZero === true) { |
|
return false; |
|
} |
|
|
|
return true; |
|
} |
|
|
|
if (o.length !== undefined) { |
|
return o.length !== 0; |
|
} |
|
|
|
for (var key in o) { |
|
if (o.hasOwnProperty(key)) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/use/index.js": |
|
/*!***********************************!*\ |
|
!*** ./node_modules/use/index.js ***! |
|
\***********************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/*! |
|
* use <https://github.com/jonschlinkert/use> |
|
* |
|
* Copyright (c) 2015-2017, Jon Schlinkert. |
|
* Released under the MIT License. |
|
*/ |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
module.exports = function base(app, options) { |
|
if (!isObject(app) && typeof app !== 'function') { |
|
throw new TypeError('expected an object or function'); |
|
} |
|
|
|
var opts = isObject(options) ? options : {}; |
|
var prop = typeof opts.prop === 'string' ? opts.prop : 'fns'; |
|
|
|
if (!Array.isArray(app[prop])) { |
|
define(app, prop, []); |
|
} |
|
/** |
|
* Define a plugin function to be passed to use. The only |
|
* parameter exposed to the plugin is `app`, the object or function. |
|
* passed to `use(app)`. `app` is also exposed as `this` in plugins. |
|
* |
|
* Additionally, **if a plugin returns a function, the function will |
|
* be pushed onto the `fns` array**, allowing the plugin to be |
|
* called at a later point by the `run` method. |
|
* |
|
* ```js |
|
* var use = require('use'); |
|
* |
|
* // define a plugin |
|
* function foo(app) { |
|
* // do stuff |
|
* } |
|
* |
|
* var app = function(){}; |
|
* use(app); |
|
* |
|
* // register plugins |
|
* app.use(foo); |
|
* app.use(bar); |
|
* app.use(baz); |
|
* ``` |
|
* @name .use |
|
* @param {Function} `fn` plugin function to call |
|
* @api public |
|
*/ |
|
|
|
|
|
define(app, 'use', use); |
|
/** |
|
* Run all plugins on `fns`. Any plugin that returns a function |
|
* when called by `use` is pushed onto the `fns` array. |
|
* |
|
* ```js |
|
* var config = {}; |
|
* app.run(config); |
|
* ``` |
|
* @name .run |
|
* @param {Object} `value` Object to be modified by plugins. |
|
* @return {Object} Returns the object passed to `run` |
|
* @api public |
|
*/ |
|
|
|
define(app, 'run', function (val) { |
|
if (!isObject(val)) return; |
|
|
|
if (!val.use || !val.run) { |
|
define(val, prop, val[prop] || []); |
|
define(val, 'use', use); |
|
} |
|
|
|
if (!val[prop] || val[prop].indexOf(base) === -1) { |
|
val.use(base); |
|
} |
|
|
|
var self = this || app; |
|
var fns = self[prop]; |
|
var len = fns.length; |
|
var idx = -1; |
|
|
|
while (++idx < len) { |
|
val.use(fns[idx]); |
|
} |
|
|
|
return val; |
|
}); |
|
/** |
|
* Call plugin `fn`. If a function is returned push it into the |
|
* `fns` array to be called by the `run` method. |
|
*/ |
|
|
|
function use(type, fn, options) { |
|
var offset = 1; |
|
|
|
if (typeof type === 'string' || Array.isArray(type)) { |
|
fn = wrap(type, fn); |
|
offset++; |
|
} else { |
|
options = fn; |
|
fn = type; |
|
} |
|
|
|
if (typeof fn !== 'function') { |
|
throw new TypeError('expected a function'); |
|
} |
|
|
|
var self = this || app; |
|
var fns = self[prop]; |
|
var args = [].slice.call(arguments, offset); |
|
args.unshift(self); |
|
|
|
if (typeof opts.hook === 'function') { |
|
opts.hook.apply(self, args); |
|
} |
|
|
|
var val = fn.apply(self, args); |
|
|
|
if (typeof val === 'function' && fns.indexOf(val) === -1) { |
|
fns.push(val); |
|
} |
|
|
|
return self; |
|
} |
|
/** |
|
* Wrap a named plugin function so that it's only called on objects of the |
|
* given `type` |
|
* |
|
* @param {String} `type` |
|
* @param {Function} `fn` Plugin function |
|
* @return {Function} |
|
*/ |
|
|
|
|
|
function wrap(type, fn) { |
|
return function plugin() { |
|
return this.type === type ? fn.apply(this, arguments) : plugin; |
|
}; |
|
} |
|
|
|
return app; |
|
}; |
|
|
|
function isObject(val) { |
|
return val && _typeof(val) === 'object' && !Array.isArray(val); |
|
} |
|
|
|
function define(obj, key, val) { |
|
Object.defineProperty(obj, key, { |
|
configurable: true, |
|
writable: true, |
|
value: val |
|
}); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/util/node_modules/inherits/inherits_browser.js": |
|
/*!*********************************************************************!*\ |
|
!*** ./node_modules/util/node_modules/inherits/inherits_browser.js ***! |
|
\*********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
if (typeof Object.create === 'function') { |
|
// implementation from standard node.js 'util' module |
|
module.exports = function inherits(ctor, superCtor) { |
|
ctor.super_ = superCtor; |
|
ctor.prototype = Object.create(superCtor.prototype, { |
|
constructor: { |
|
value: ctor, |
|
enumerable: false, |
|
writable: true, |
|
configurable: true |
|
} |
|
}); |
|
}; |
|
} else { |
|
// old school shim for old browsers |
|
module.exports = function inherits(ctor, superCtor) { |
|
ctor.super_ = superCtor; |
|
|
|
var TempCtor = function TempCtor() {}; |
|
|
|
TempCtor.prototype = superCtor.prototype; |
|
ctor.prototype = new TempCtor(); |
|
ctor.prototype.constructor = ctor; |
|
}; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/util/support/isBufferBrowser.js": |
|
/*!******************************************************!*\ |
|
!*** ./node_modules/util/support/isBufferBrowser.js ***! |
|
\******************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
module.exports = function isBuffer(arg) { |
|
return arg && _typeof(arg) === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/util/util.js": |
|
/*!***********************************!*\ |
|
!*** ./node_modules/util/util.js ***! |
|
\***********************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) { |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
// Copyright Joyent, Inc. and other Node contributors. |
|
// |
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
// copy of this software and associated documentation files (the |
|
// "Software"), to deal in the Software without restriction, including |
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
// persons to whom the Software is furnished to do so, subject to the |
|
// following conditions: |
|
// |
|
// The above copyright notice and this permission notice shall be included |
|
// in all copies or substantial portions of the Software. |
|
// |
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors(obj) { |
|
var keys = Object.keys(obj); |
|
var descriptors = {}; |
|
|
|
for (var i = 0; i < keys.length; i++) { |
|
descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]); |
|
} |
|
|
|
return descriptors; |
|
}; |
|
|
|
var formatRegExp = /%[sdj%]/g; |
|
|
|
exports.format = function (f) { |
|
if (!isString(f)) { |
|
var objects = []; |
|
|
|
for (var i = 0; i < arguments.length; i++) { |
|
objects.push(inspect(arguments[i])); |
|
} |
|
|
|
return objects.join(' '); |
|
} |
|
|
|
var i = 1; |
|
var args = arguments; |
|
var len = args.length; |
|
var str = String(f).replace(formatRegExp, function (x) { |
|
if (x === '%%') return '%'; |
|
if (i >= len) return x; |
|
|
|
switch (x) { |
|
case '%s': |
|
return String(args[i++]); |
|
|
|
case '%d': |
|
return Number(args[i++]); |
|
|
|
case '%j': |
|
try { |
|
return JSON.stringify(args[i++]); |
|
} catch (_) { |
|
return '[Circular]'; |
|
} |
|
|
|
default: |
|
return x; |
|
} |
|
}); |
|
|
|
for (var x = args[i]; i < len; x = args[++i]) { |
|
if (isNull(x) || !isObject(x)) { |
|
str += ' ' + x; |
|
} else { |
|
str += ' ' + inspect(x); |
|
} |
|
} |
|
|
|
return str; |
|
}; // Mark that a method should not be used. |
|
// Returns a modified function which warns once by default. |
|
// If --no-deprecation is set, then it is a no-op. |
|
|
|
|
|
exports.deprecate = function (fn, msg) { |
|
if (typeof process !== 'undefined' && process.noDeprecation === true) { |
|
return fn; |
|
} // Allow for deprecating things in the process of starting up. |
|
|
|
|
|
if (typeof process === 'undefined') { |
|
return function () { |
|
return exports.deprecate(fn, msg).apply(this, arguments); |
|
}; |
|
} |
|
|
|
var warned = false; |
|
|
|
function deprecated() { |
|
if (!warned) { |
|
if (process.throwDeprecation) { |
|
throw new Error(msg); |
|
} else if (process.traceDeprecation) { |
|
console.trace(msg); |
|
} else { |
|
console.error(msg); |
|
} |
|
|
|
warned = true; |
|
} |
|
|
|
return fn.apply(this, arguments); |
|
} |
|
|
|
return deprecated; |
|
}; |
|
|
|
var debugs = {}; |
|
var debugEnviron; |
|
|
|
exports.debuglog = function (set) { |
|
if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || ''; |
|
set = set.toUpperCase(); |
|
|
|
if (!debugs[set]) { |
|
if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { |
|
var pid = process.pid; |
|
|
|
debugs[set] = function () { |
|
var msg = exports.format.apply(exports, arguments); |
|
console.error('%s %d: %s', set, pid, msg); |
|
}; |
|
} else { |
|
debugs[set] = function () {}; |
|
} |
|
} |
|
|
|
return debugs[set]; |
|
}; |
|
/** |
|
* Echos the value of a value. Trys to print the value out |
|
* in the best way possible given the different types. |
|
* |
|
* @param {Object} obj The object to print out. |
|
* @param {Object} opts Optional options object that alters the output. |
|
*/ |
|
|
|
/* legacy: obj, showHidden, depth, colors*/ |
|
|
|
|
|
function inspect(obj, opts) { |
|
// default options |
|
var ctx = { |
|
seen: [], |
|
stylize: stylizeNoColor |
|
}; // legacy... |
|
|
|
if (arguments.length >= 3) ctx.depth = arguments[2]; |
|
if (arguments.length >= 4) ctx.colors = arguments[3]; |
|
|
|
if (isBoolean(opts)) { |
|
// legacy... |
|
ctx.showHidden = opts; |
|
} else if (opts) { |
|
// got an "options" object |
|
exports._extend(ctx, opts); |
|
} // set default options |
|
|
|
|
|
if (isUndefined(ctx.showHidden)) ctx.showHidden = false; |
|
if (isUndefined(ctx.depth)) ctx.depth = 2; |
|
if (isUndefined(ctx.colors)) ctx.colors = false; |
|
if (isUndefined(ctx.customInspect)) ctx.customInspect = true; |
|
if (ctx.colors) ctx.stylize = stylizeWithColor; |
|
return formatValue(ctx, obj, ctx.depth); |
|
} |
|
|
|
exports.inspect = inspect; // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics |
|
|
|
inspect.colors = { |
|
'bold': [1, 22], |
|
'italic': [3, 23], |
|
'underline': [4, 24], |
|
'inverse': [7, 27], |
|
'white': [37, 39], |
|
'grey': [90, 39], |
|
'black': [30, 39], |
|
'blue': [34, 39], |
|
'cyan': [36, 39], |
|
'green': [32, 39], |
|
'magenta': [35, 39], |
|
'red': [31, 39], |
|
'yellow': [33, 39] |
|
}; // Don't use 'blue' not visible on cmd.exe |
|
|
|
inspect.styles = { |
|
'special': 'cyan', |
|
'number': 'yellow', |
|
'boolean': 'yellow', |
|
'undefined': 'grey', |
|
'null': 'bold', |
|
'string': 'green', |
|
'date': 'magenta', |
|
// "name": intentionally not styling |
|
'regexp': 'red' |
|
}; |
|
|
|
function stylizeWithColor(str, styleType) { |
|
var style = inspect.styles[styleType]; |
|
|
|
if (style) { |
|
return "\x1B[" + inspect.colors[style][0] + 'm' + str + "\x1B[" + inspect.colors[style][1] + 'm'; |
|
} else { |
|
return str; |
|
} |
|
} |
|
|
|
function stylizeNoColor(str, styleType) { |
|
return str; |
|
} |
|
|
|
function arrayToHash(array) { |
|
var hash = {}; |
|
array.forEach(function (val, idx) { |
|
hash[val] = true; |
|
}); |
|
return hash; |
|
} |
|
|
|
function formatValue(ctx, value, recurseTimes) { |
|
// Provide a hook for user-specified inspect functions. |
|
// Check that value is an object with an inspect function on it |
|
if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special |
|
value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check. |
|
!(value.constructor && value.constructor.prototype === value)) { |
|
var ret = value.inspect(recurseTimes, ctx); |
|
|
|
if (!isString(ret)) { |
|
ret = formatValue(ctx, ret, recurseTimes); |
|
} |
|
|
|
return ret; |
|
} // Primitive types cannot have properties |
|
|
|
|
|
var primitive = formatPrimitive(ctx, value); |
|
|
|
if (primitive) { |
|
return primitive; |
|
} // Look up the keys of the object. |
|
|
|
|
|
var keys = Object.keys(value); |
|
var visibleKeys = arrayToHash(keys); |
|
|
|
if (ctx.showHidden) { |
|
keys = Object.getOwnPropertyNames(value); |
|
} // IE doesn't make error fields non-enumerable |
|
// http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx |
|
|
|
|
|
if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { |
|
return formatError(value); |
|
} // Some type of object without properties can be shortcutted. |
|
|
|
|
|
if (keys.length === 0) { |
|
if (isFunction(value)) { |
|
var name = value.name ? ': ' + value.name : ''; |
|
return ctx.stylize('[Function' + name + ']', 'special'); |
|
} |
|
|
|
if (isRegExp(value)) { |
|
return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); |
|
} |
|
|
|
if (isDate(value)) { |
|
return ctx.stylize(Date.prototype.toString.call(value), 'date'); |
|
} |
|
|
|
if (isError(value)) { |
|
return formatError(value); |
|
} |
|
} |
|
|
|
var base = '', |
|
array = false, |
|
braces = ['{', '}']; // Make Array say that they are Array |
|
|
|
if (isArray(value)) { |
|
array = true; |
|
braces = ['[', ']']; |
|
} // Make functions say that they are functions |
|
|
|
|
|
if (isFunction(value)) { |
|
var n = value.name ? ': ' + value.name : ''; |
|
base = ' [Function' + n + ']'; |
|
} // Make RegExps say that they are RegExps |
|
|
|
|
|
if (isRegExp(value)) { |
|
base = ' ' + RegExp.prototype.toString.call(value); |
|
} // Make dates with properties first say the date |
|
|
|
|
|
if (isDate(value)) { |
|
base = ' ' + Date.prototype.toUTCString.call(value); |
|
} // Make error with message first say the error |
|
|
|
|
|
if (isError(value)) { |
|
base = ' ' + formatError(value); |
|
} |
|
|
|
if (keys.length === 0 && (!array || value.length == 0)) { |
|
return braces[0] + base + braces[1]; |
|
} |
|
|
|
if (recurseTimes < 0) { |
|
if (isRegExp(value)) { |
|
return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); |
|
} else { |
|
return ctx.stylize('[Object]', 'special'); |
|
} |
|
} |
|
|
|
ctx.seen.push(value); |
|
var output; |
|
|
|
if (array) { |
|
output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); |
|
} else { |
|
output = keys.map(function (key) { |
|
return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); |
|
}); |
|
} |
|
|
|
ctx.seen.pop(); |
|
return reduceToSingleString(output, base, braces); |
|
} |
|
|
|
function formatPrimitive(ctx, value) { |
|
if (isUndefined(value)) return ctx.stylize('undefined', 'undefined'); |
|
|
|
if (isString(value)) { |
|
var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\''; |
|
return ctx.stylize(simple, 'string'); |
|
} |
|
|
|
if (isNumber(value)) return ctx.stylize('' + value, 'number'); |
|
if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); // For some reason typeof null is "object", so special case here. |
|
|
|
if (isNull(value)) return ctx.stylize('null', 'null'); |
|
} |
|
|
|
function formatError(value) { |
|
return '[' + Error.prototype.toString.call(value) + ']'; |
|
} |
|
|
|
function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { |
|
var output = []; |
|
|
|
for (var i = 0, l = value.length; i < l; ++i) { |
|
if (hasOwnProperty(value, String(i))) { |
|
output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); |
|
} else { |
|
output.push(''); |
|
} |
|
} |
|
|
|
keys.forEach(function (key) { |
|
if (!key.match(/^\d+$/)) { |
|
output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); |
|
} |
|
}); |
|
return output; |
|
} |
|
|
|
function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { |
|
var name, str, desc; |
|
desc = Object.getOwnPropertyDescriptor(value, key) || { |
|
value: value[key] |
|
}; |
|
|
|
if (desc.get) { |
|
if (desc.set) { |
|
str = ctx.stylize('[Getter/Setter]', 'special'); |
|
} else { |
|
str = ctx.stylize('[Getter]', 'special'); |
|
} |
|
} else { |
|
if (desc.set) { |
|
str = ctx.stylize('[Setter]', 'special'); |
|
} |
|
} |
|
|
|
if (!hasOwnProperty(visibleKeys, key)) { |
|
name = '[' + key + ']'; |
|
} |
|
|
|
if (!str) { |
|
if (ctx.seen.indexOf(desc.value) < 0) { |
|
if (isNull(recurseTimes)) { |
|
str = formatValue(ctx, desc.value, null); |
|
} else { |
|
str = formatValue(ctx, desc.value, recurseTimes - 1); |
|
} |
|
|
|
if (str.indexOf('\n') > -1) { |
|
if (array) { |
|
str = str.split('\n').map(function (line) { |
|
return ' ' + line; |
|
}).join('\n').substr(2); |
|
} else { |
|
str = '\n' + str.split('\n').map(function (line) { |
|
return ' ' + line; |
|
}).join('\n'); |
|
} |
|
} |
|
} else { |
|
str = ctx.stylize('[Circular]', 'special'); |
|
} |
|
} |
|
|
|
if (isUndefined(name)) { |
|
if (array && key.match(/^\d+$/)) { |
|
return str; |
|
} |
|
|
|
name = JSON.stringify('' + key); |
|
|
|
if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { |
|
name = name.substr(1, name.length - 2); |
|
name = ctx.stylize(name, 'name'); |
|
} else { |
|
name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); |
|
name = ctx.stylize(name, 'string'); |
|
} |
|
} |
|
|
|
return name + ': ' + str; |
|
} |
|
|
|
function reduceToSingleString(output, base, braces) { |
|
var numLinesEst = 0; |
|
var length = output.reduce(function (prev, cur) { |
|
numLinesEst++; |
|
if (cur.indexOf('\n') >= 0) numLinesEst++; |
|
return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; |
|
}, 0); |
|
|
|
if (length > 60) { |
|
return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; |
|
} |
|
|
|
return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; |
|
} // NOTE: These type checking functions intentionally don't use `instanceof` |
|
// because it is fragile and can be easily faked with `Object.create()`. |
|
|
|
|
|
function isArray(ar) { |
|
return Array.isArray(ar); |
|
} |
|
|
|
exports.isArray = isArray; |
|
|
|
function isBoolean(arg) { |
|
return typeof arg === 'boolean'; |
|
} |
|
|
|
exports.isBoolean = isBoolean; |
|
|
|
function isNull(arg) { |
|
return arg === null; |
|
} |
|
|
|
exports.isNull = isNull; |
|
|
|
function isNullOrUndefined(arg) { |
|
return arg == null; |
|
} |
|
|
|
exports.isNullOrUndefined = isNullOrUndefined; |
|
|
|
function isNumber(arg) { |
|
return typeof arg === 'number'; |
|
} |
|
|
|
exports.isNumber = isNumber; |
|
|
|
function isString(arg) { |
|
return typeof arg === 'string'; |
|
} |
|
|
|
exports.isString = isString; |
|
|
|
function isSymbol(arg) { |
|
return _typeof(arg) === 'symbol'; |
|
} |
|
|
|
exports.isSymbol = isSymbol; |
|
|
|
function isUndefined(arg) { |
|
return arg === void 0; |
|
} |
|
|
|
exports.isUndefined = isUndefined; |
|
|
|
function isRegExp(re) { |
|
return isObject(re) && objectToString(re) === '[object RegExp]'; |
|
} |
|
|
|
exports.isRegExp = isRegExp; |
|
|
|
function isObject(arg) { |
|
return _typeof(arg) === 'object' && arg !== null; |
|
} |
|
|
|
exports.isObject = isObject; |
|
|
|
function isDate(d) { |
|
return isObject(d) && objectToString(d) === '[object Date]'; |
|
} |
|
|
|
exports.isDate = isDate; |
|
|
|
function isError(e) { |
|
return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error); |
|
} |
|
|
|
exports.isError = isError; |
|
|
|
function isFunction(arg) { |
|
return typeof arg === 'function'; |
|
} |
|
|
|
exports.isFunction = isFunction; |
|
|
|
function isPrimitive(arg) { |
|
return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol |
|
typeof arg === 'undefined'; |
|
} |
|
|
|
exports.isPrimitive = isPrimitive; |
|
exports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ "./node_modules/util/support/isBufferBrowser.js"); |
|
|
|
function objectToString(o) { |
|
return Object.prototype.toString.call(o); |
|
} |
|
|
|
function pad(n) { |
|
return n < 10 ? '0' + n.toString(10) : n.toString(10); |
|
} |
|
|
|
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 26 Feb 16:19:34 |
|
|
|
function timestamp() { |
|
var d = new Date(); |
|
var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':'); |
|
return [d.getDate(), months[d.getMonth()], time].join(' '); |
|
} // log is just a thin wrapper to console.log that prepends a timestamp |
|
|
|
|
|
exports.log = function () { |
|
console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); |
|
}; |
|
/** |
|
* Inherit the prototype methods from one constructor into another. |
|
* |
|
* The Function.prototype.inherits from lang.js rewritten as a standalone |
|
* function (not on Function.prototype). NOTE: If this file is to be loaded |
|
* during bootstrapping this function needs to be rewritten using some native |
|
* functions as prototype setup using normal JavaScript does not work as |
|
* expected during bootstrapping (see mirror.js in r114903). |
|
* |
|
* @param {function} ctor Constructor function which needs to inherit the |
|
* prototype. |
|
* @param {function} superCtor Constructor function to inherit prototype from. |
|
*/ |
|
|
|
|
|
exports.inherits = __webpack_require__(/*! inherits */ "./node_modules/util/node_modules/inherits/inherits_browser.js"); |
|
|
|
exports._extend = function (origin, add) { |
|
// Don't do anything if add isn't an object |
|
if (!add || !isObject(add)) return origin; |
|
var keys = Object.keys(add); |
|
var i = keys.length; |
|
|
|
while (i--) { |
|
origin[keys[i]] = add[keys[i]]; |
|
} |
|
|
|
return origin; |
|
}; |
|
|
|
function hasOwnProperty(obj, prop) { |
|
return Object.prototype.hasOwnProperty.call(obj, prop); |
|
} |
|
|
|
var kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined; |
|
|
|
exports.promisify = function promisify(original) { |
|
if (typeof original !== 'function') throw new TypeError('The "original" argument must be of type Function'); |
|
|
|
if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) { |
|
var fn = original[kCustomPromisifiedSymbol]; |
|
|
|
if (typeof fn !== 'function') { |
|
throw new TypeError('The "util.promisify.custom" argument must be of type Function'); |
|
} |
|
|
|
Object.defineProperty(fn, kCustomPromisifiedSymbol, { |
|
value: fn, |
|
enumerable: false, |
|
writable: false, |
|
configurable: true |
|
}); |
|
return fn; |
|
} |
|
|
|
function fn() { |
|
var promiseResolve, promiseReject; |
|
var promise = new Promise(function (resolve, reject) { |
|
promiseResolve = resolve; |
|
promiseReject = reject; |
|
}); |
|
var args = []; |
|
|
|
for (var i = 0; i < arguments.length; i++) { |
|
args.push(arguments[i]); |
|
} |
|
|
|
args.push(function (err, value) { |
|
if (err) { |
|
promiseReject(err); |
|
} else { |
|
promiseResolve(value); |
|
} |
|
}); |
|
|
|
try { |
|
original.apply(this, args); |
|
} catch (err) { |
|
promiseReject(err); |
|
} |
|
|
|
return promise; |
|
} |
|
|
|
Object.setPrototypeOf(fn, Object.getPrototypeOf(original)); |
|
if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, { |
|
value: fn, |
|
enumerable: false, |
|
writable: false, |
|
configurable: true |
|
}); |
|
return Object.defineProperties(fn, getOwnPropertyDescriptors(original)); |
|
}; |
|
|
|
exports.promisify.custom = kCustomPromisifiedSymbol; |
|
|
|
function callbackifyOnRejected(reason, cb) { |
|
// `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M). |
|
// Because `null` is a special error value in callbacks which means "no error |
|
// occurred", we error-wrap so the callback consumer can distinguish between |
|
// "the promise rejected with null" or "the promise fulfilled with undefined". |
|
if (!reason) { |
|
var newReason = new Error('Promise was rejected with a falsy value'); |
|
newReason.reason = reason; |
|
reason = newReason; |
|
} |
|
|
|
return cb(reason); |
|
} |
|
|
|
function callbackify(original) { |
|
if (typeof original !== 'function') { |
|
throw new TypeError('The "original" argument must be of type Function'); |
|
} // We DO NOT return the promise as it gives the user a false sense that |
|
// the promise is actually somehow related to the callback's execution |
|
// and that the callback throwing will reject the promise. |
|
|
|
|
|
function callbackified() { |
|
var args = []; |
|
|
|
for (var i = 0; i < arguments.length; i++) { |
|
args.push(arguments[i]); |
|
} |
|
|
|
var maybeCb = args.pop(); |
|
|
|
if (typeof maybeCb !== 'function') { |
|
throw new TypeError('The last argument must be of type Function'); |
|
} |
|
|
|
var self = this; |
|
|
|
var cb = function cb() { |
|
return maybeCb.apply(self, arguments); |
|
}; // In true node style we process the callback on `nextTick` with all the |
|
// implications (stack, `uncaughtException`, `async_hooks`) |
|
|
|
|
|
original.apply(this, args).then(function (ret) { |
|
process.nextTick(cb, null, ret); |
|
}, function (rej) { |
|
process.nextTick(callbackifyOnRejected, rej, cb); |
|
}); |
|
} |
|
|
|
Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original)); |
|
Object.defineProperties(callbackified, getOwnPropertyDescriptors(original)); |
|
return callbackified; |
|
} |
|
|
|
exports.callbackify = callbackify; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/webpack/buildin/global.js": |
|
/*!***********************************!*\ |
|
!*** (webpack)/buildin/global.js ***! |
|
\***********************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var g; // This works in non-strict mode |
|
|
|
g = function () { |
|
return this; |
|
}(); |
|
|
|
try { |
|
// This works if eval is allowed (see CSP) |
|
g = g || new Function("return this")(); |
|
} catch (e) { |
|
// This works if the window reference is available |
|
if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === "object") g = window; |
|
} // g can still be undefined, but nothing to do about it... |
|
// We return undefined, instead of nothing here, so it's |
|
// easier to handle this case. if(!global) { ...} |
|
|
|
|
|
module.exports = g; |
|
|
|
/***/ }), |
|
|
|
/***/ "./node_modules/webpack/buildin/module.js": |
|
/*!***********************************!*\ |
|
!*** (webpack)/buildin/module.js ***! |
|
\***********************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
module.exports = function (module) { |
|
if (!module.webpackPolyfill) { |
|
module.deprecate = function () {}; |
|
|
|
module.paths = []; // module.parent = undefined by default |
|
|
|
if (!module.children) module.children = []; |
|
Object.defineProperty(module, "loaded", { |
|
enumerable: true, |
|
get: function get() { |
|
return module.l; |
|
} |
|
}); |
|
Object.defineProperty(module, "id", { |
|
enumerable: true, |
|
get: function get() { |
|
return module.i; |
|
} |
|
}); |
|
module.webpackPolyfill = 1; |
|
} |
|
|
|
return module; |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/diff-sequences/build/index.js": |
|
/*!************************************************!*\ |
|
!*** ./packages/diff-sequences/build/index.js ***! |
|
\************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
*/ |
|
// This diff-sequences package implements the linear space variation in |
|
// An O(ND) Difference Algorithm and Its Variations by Eugene W. Myers |
|
// Relationship in notation between Myers paper and this package: |
|
// A is a |
|
// N is aLength, aEnd - aStart, and so on |
|
// x is aIndex, aFirst, aLast, and so on |
|
// B is b |
|
// M is bLength, bEnd - bStart, and so on |
|
// y is bIndex, bFirst, bLast, and so on |
|
// Δ = N - M is negative of baDeltaLength = bLength - aLength |
|
// D is d |
|
// k is kF |
|
// k + Δ is kF = kR - baDeltaLength |
|
// V is aIndexesF or aIndexesR (see comment below about Indexes type) |
|
// index intervals [1, N] and [1, M] are [0, aLength) and [0, bLength) |
|
// starting point in forward direction (0, 0) is (-1, -1) |
|
// starting point in reverse direction (N + 1, M + 1) is (aLength, bLength) |
|
// The “edit graph” for sequences a and b corresponds to items: |
|
// in a on the horizontal axis |
|
// in b on the vertical axis |
|
// |
|
// Given a-coordinate of a point in a diagonal, you can compute b-coordinate. |
|
// |
|
// Forward diagonals kF: |
|
// zero diagonal intersects top left corner |
|
// positive diagonals intersect top edge |
|
// negative diagonals insersect left edge |
|
// |
|
// Reverse diagonals kR: |
|
// zero diagonal intersects bottom right corner |
|
// positive diagonals intersect right edge |
|
// negative diagonals intersect bottom edge |
|
// The graph contains a directed acyclic graph of edges: |
|
// horizontal: delete an item from a |
|
// vertical: insert an item from b |
|
// diagonal: common item in a and b |
|
// |
|
// The algorithm solves dual problems in the graph analogy: |
|
// Find longest common subsequence: path with maximum number of diagonal edges |
|
// Find shortest edit script: path with minimum number of non-diagonal edges |
|
// Input callback function compares items at indexes in the sequences. |
|
// Output callback function receives the number of adjacent items |
|
// and starting indexes of each common subsequence. |
|
// Either original functions or wrapped to swap indexes if graph is transposed. |
|
// Indexes in sequence a of last point of forward or reverse paths in graph. |
|
// Myers algorithm indexes by diagonal k which for negative is bad deopt in V8. |
|
// This package indexes by iF and iR which are greater than or equal to zero. |
|
// and also updates the index arrays in place to cut memory in half. |
|
// kF = 2 * iF - d |
|
// kR = d - 2 * iR |
|
// Division of index intervals in sequences a and b at the middle change. |
|
// Invariant: intervals do not have common items at the start or end. |
|
|
|
var pkg = 'diff-sequences'; // for error messages |
|
|
|
var NOT_YET_SET = 0; // small int instead of undefined to avoid deopt in V8 |
|
// Return the number of common items that follow in forward direction. |
|
// The length of what Myers paper calls a “snake” in a forward path. |
|
|
|
var countCommonItemsF = function countCommonItemsF(aIndex, aEnd, bIndex, bEnd, isCommon) { |
|
var nCommon = 0; |
|
|
|
while (aIndex < aEnd && bIndex < bEnd && isCommon(aIndex, bIndex)) { |
|
aIndex += 1; |
|
bIndex += 1; |
|
nCommon += 1; |
|
} |
|
|
|
return nCommon; |
|
}; // Return the number of common items that precede in reverse direction. |
|
// The length of what Myers paper calls a “snake” in a reverse path. |
|
|
|
|
|
var countCommonItemsR = function countCommonItemsR(aStart, aIndex, bStart, bIndex, isCommon) { |
|
var nCommon = 0; |
|
|
|
while (aStart <= aIndex && bStart <= bIndex && isCommon(aIndex, bIndex)) { |
|
aIndex -= 1; |
|
bIndex -= 1; |
|
nCommon += 1; |
|
} |
|
|
|
return nCommon; |
|
}; // A simple function to extend forward paths from (d - 1) to d changes |
|
// when forward and reverse paths cannot yet overlap. |
|
|
|
|
|
var extendPathsF = function extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF) { |
|
// Unroll the first iteration. |
|
var iF = 0; |
|
var kF = -d; // kF = 2 * iF - d |
|
|
|
var aFirst = aIndexesF[iF]; // in first iteration always insert |
|
|
|
var aIndexPrev1 = aFirst; // prev value of [iF - 1] in next iteration |
|
|
|
aIndexesF[iF] += countCommonItemsF(aFirst + 1, aEnd, bF + aFirst - kF + 1, bEnd, isCommon); // Optimization: skip diagonals in which paths cannot ever overlap. |
|
|
|
var nF = d < iMaxF ? d : iMaxF; // The diagonals kF are odd when d is odd and even when d is even. |
|
|
|
for (iF += 1, kF += 2; iF <= nF; iF += 1, kF += 2) { |
|
// To get first point of path segment, move one change in forward direction |
|
// from last point of previous path segment in an adjacent diagonal. |
|
// In last possible iteration when iF === d and kF === d always delete. |
|
if (iF !== d && aIndexPrev1 < aIndexesF[iF]) { |
|
aFirst = aIndexesF[iF]; // vertical to insert from b |
|
} else { |
|
aFirst = aIndexPrev1 + 1; // horizontal to delete from a |
|
|
|
if (aEnd <= aFirst) { |
|
// Optimization: delete moved past right of graph. |
|
return iF - 1; |
|
} |
|
} // To get last point of path segment, move along diagonal of common items. |
|
|
|
|
|
aIndexPrev1 = aIndexesF[iF]; |
|
aIndexesF[iF] = aFirst + countCommonItemsF(aFirst + 1, aEnd, bF + aFirst - kF + 1, bEnd, isCommon); |
|
} |
|
|
|
return iMaxF; |
|
}; // A simple function to extend reverse paths from (d - 1) to d changes |
|
// when reverse and forward paths cannot yet overlap. |
|
|
|
|
|
var extendPathsR = function extendPathsR(d, aStart, bStart, bR, isCommon, aIndexesR, iMaxR) { |
|
// Unroll the first iteration. |
|
var iR = 0; |
|
var kR = d; // kR = d - 2 * iR |
|
|
|
var aFirst = aIndexesR[iR]; // in first iteration always insert |
|
|
|
var aIndexPrev1 = aFirst; // prev value of [iR - 1] in next iteration |
|
|
|
aIndexesR[iR] -= countCommonItemsR(aStart, aFirst - 1, bStart, bR + aFirst - kR - 1, isCommon); // Optimization: skip diagonals in which paths cannot ever overlap. |
|
|
|
var nR = d < iMaxR ? d : iMaxR; // The diagonals kR are odd when d is odd and even when d is even. |
|
|
|
for (iR += 1, kR -= 2; iR <= nR; iR += 1, kR -= 2) { |
|
// To get first point of path segment, move one change in reverse direction |
|
// from last point of previous path segment in an adjacent diagonal. |
|
// In last possible iteration when iR === d and kR === -d always delete. |
|
if (iR !== d && aIndexesR[iR] < aIndexPrev1) { |
|
aFirst = aIndexesR[iR]; // vertical to insert from b |
|
} else { |
|
aFirst = aIndexPrev1 - 1; // horizontal to delete from a |
|
|
|
if (aFirst < aStart) { |
|
// Optimization: delete moved past left of graph. |
|
return iR - 1; |
|
} |
|
} // To get last point of path segment, move along diagonal of common items. |
|
|
|
|
|
aIndexPrev1 = aIndexesR[iR]; |
|
aIndexesR[iR] = aFirst - countCommonItemsR(aStart, aFirst - 1, bStart, bR + aFirst - kR - 1, isCommon); |
|
} |
|
|
|
return iMaxR; |
|
}; // A complete function to extend forward paths from (d - 1) to d changes. |
|
// Return true if a path overlaps reverse path of (d - 1) changes in its diagonal. |
|
|
|
|
|
var extendOverlappablePathsF = function extendOverlappablePathsF(d, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, iMaxF, aIndexesR, iMaxR, division) { |
|
var bF = bStart - aStart; // bIndex = bF + aIndex - kF |
|
|
|
var aLength = aEnd - aStart; |
|
var bLength = bEnd - bStart; |
|
var baDeltaLength = bLength - aLength; // kF = kR - baDeltaLength |
|
// Range of diagonals in which forward and reverse paths might overlap. |
|
|
|
var kMinOverlapF = -baDeltaLength - (d - 1); // -(d - 1) <= kR |
|
|
|
var kMaxOverlapF = -baDeltaLength + (d - 1); // kR <= (d - 1) |
|
|
|
var aIndexPrev1 = NOT_YET_SET; // prev value of [iF - 1] in next iteration |
|
// Optimization: skip diagonals in which paths cannot ever overlap. |
|
|
|
var nF = d < iMaxF ? d : iMaxF; // The diagonals kF = 2 * iF - d are odd when d is odd and even when d is even. |
|
|
|
for (var iF = 0, kF = -d; iF <= nF; iF += 1, kF += 2) { |
|
// To get first point of path segment, move one change in forward direction |
|
// from last point of previous path segment in an adjacent diagonal. |
|
// In first iteration when iF === 0 and kF === -d always insert. |
|
// In last possible iteration when iF === d and kF === d always delete. |
|
var insert = iF === 0 || iF !== d && aIndexPrev1 < aIndexesF[iF]; |
|
var aLastPrev = insert ? aIndexesF[iF] : aIndexPrev1; |
|
var aFirst = insert ? aLastPrev // vertical to insert from b |
|
: aLastPrev + 1; // horizontal to delete from a |
|
// To get last point of path segment, move along diagonal of common items. |
|
|
|
var bFirst = bF + aFirst - kF; |
|
var nCommonF = countCommonItemsF(aFirst + 1, aEnd, bFirst + 1, bEnd, isCommon); |
|
var aLast = aFirst + nCommonF; |
|
aIndexPrev1 = aIndexesF[iF]; |
|
aIndexesF[iF] = aLast; |
|
|
|
if (kMinOverlapF <= kF && kF <= kMaxOverlapF) { |
|
// Solve for iR of reverse path with (d - 1) changes in diagonal kF: |
|
// kR = kF + baDeltaLength |
|
// kR = (d - 1) - 2 * iR |
|
var iR = (d - 1 - (kF + baDeltaLength)) / 2; // If this forward path overlaps the reverse path in this diagonal, |
|
// then this is the middle change of the index intervals. |
|
|
|
if (iR <= iMaxR && aIndexesR[iR] - 1 <= aLast) { |
|
// Unlike the Myers algorithm which finds only the middle “snake” |
|
// this package can find two common subsequences per division. |
|
// Last point of previous path segment is on an adjacent diagonal. |
|
var bLastPrev = bF + aLastPrev - (insert ? kF + 1 : kF - 1); // Because of invariant that intervals preceding the middle change |
|
// cannot have common items at the end, |
|
// move in reverse direction along a diagonal of common items. |
|
|
|
var nCommonR = countCommonItemsR(aStart, aLastPrev, bStart, bLastPrev, isCommon); |
|
var aIndexPrevFirst = aLastPrev - nCommonR; |
|
var bIndexPrevFirst = bLastPrev - nCommonR; |
|
var aEndPreceding = aIndexPrevFirst + 1; |
|
var bEndPreceding = bIndexPrevFirst + 1; |
|
division.nChangePreceding = d - 1; |
|
|
|
if (d - 1 === aEndPreceding + bEndPreceding - aStart - bStart) { |
|
// Optimization: number of preceding changes in forward direction |
|
// is equal to number of items in preceding interval, |
|
// therefore it cannot contain any common items. |
|
division.aEndPreceding = aStart; |
|
division.bEndPreceding = bStart; |
|
} else { |
|
division.aEndPreceding = aEndPreceding; |
|
division.bEndPreceding = bEndPreceding; |
|
} |
|
|
|
division.nCommonPreceding = nCommonR; |
|
|
|
if (nCommonR !== 0) { |
|
division.aCommonPreceding = aEndPreceding; |
|
division.bCommonPreceding = bEndPreceding; |
|
} |
|
|
|
division.nCommonFollowing = nCommonF; |
|
|
|
if (nCommonF !== 0) { |
|
division.aCommonFollowing = aFirst + 1; |
|
division.bCommonFollowing = bFirst + 1; |
|
} |
|
|
|
var aStartFollowing = aLast + 1; |
|
var bStartFollowing = bFirst + nCommonF + 1; |
|
division.nChangeFollowing = d - 1; |
|
|
|
if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) { |
|
// Optimization: number of changes in reverse direction |
|
// is equal to number of items in following interval, |
|
// therefore it cannot contain any common items. |
|
division.aStartFollowing = aEnd; |
|
division.bStartFollowing = bEnd; |
|
} else { |
|
division.aStartFollowing = aStartFollowing; |
|
division.bStartFollowing = bStartFollowing; |
|
} |
|
|
|
return true; |
|
} |
|
} |
|
} |
|
|
|
return false; |
|
}; // A complete function to extend reverse paths from (d - 1) to d changes. |
|
// Return true if a path overlaps forward path of d changes in its diagonal. |
|
|
|
|
|
var extendOverlappablePathsR = function extendOverlappablePathsR(d, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, iMaxF, aIndexesR, iMaxR, division) { |
|
var bR = bEnd - aEnd; // bIndex = bR + aIndex - kR |
|
|
|
var aLength = aEnd - aStart; |
|
var bLength = bEnd - bStart; |
|
var baDeltaLength = bLength - aLength; // kR = kF + baDeltaLength |
|
// Range of diagonals in which forward and reverse paths might overlap. |
|
|
|
var kMinOverlapR = baDeltaLength - d; // -d <= kF |
|
|
|
var kMaxOverlapR = baDeltaLength + d; // kF <= d |
|
|
|
var aIndexPrev1 = NOT_YET_SET; // prev value of [iR - 1] in next iteration |
|
// Optimization: skip diagonals in which paths cannot ever overlap. |
|
|
|
var nR = d < iMaxR ? d : iMaxR; // The diagonals kR = d - 2 * iR are odd when d is odd and even when d is even. |
|
|
|
for (var iR = 0, kR = d; iR <= nR; iR += 1, kR -= 2) { |
|
// To get first point of path segment, move one change in reverse direction |
|
// from last point of previous path segment in an adjacent diagonal. |
|
// In first iteration when iR === 0 and kR === d always insert. |
|
// In last possible iteration when iR === d and kR === -d always delete. |
|
var insert = iR === 0 || iR !== d && aIndexesR[iR] < aIndexPrev1; |
|
var aLastPrev = insert ? aIndexesR[iR] : aIndexPrev1; |
|
var aFirst = insert ? aLastPrev // vertical to insert from b |
|
: aLastPrev - 1; // horizontal to delete from a |
|
// To get last point of path segment, move along diagonal of common items. |
|
|
|
var bFirst = bR + aFirst - kR; |
|
var nCommonR = countCommonItemsR(aStart, aFirst - 1, bStart, bFirst - 1, isCommon); |
|
var aLast = aFirst - nCommonR; |
|
aIndexPrev1 = aIndexesR[iR]; |
|
aIndexesR[iR] = aLast; |
|
|
|
if (kMinOverlapR <= kR && kR <= kMaxOverlapR) { |
|
// Solve for iF of forward path with d changes in diagonal kR: |
|
// kF = kR - baDeltaLength |
|
// kF = 2 * iF - d |
|
var iF = (d + (kR - baDeltaLength)) / 2; // If this reverse path overlaps the forward path in this diagonal, |
|
// then this is a middle change of the index intervals. |
|
|
|
if (iF <= iMaxF && aLast - 1 <= aIndexesF[iF]) { |
|
var bLast = bFirst - nCommonR; |
|
division.nChangePreceding = d; |
|
|
|
if (d === aLast + bLast - aStart - bStart) { |
|
// Optimization: number of changes in reverse direction |
|
// is equal to number of items in preceding interval, |
|
// therefore it cannot contain any common items. |
|
division.aEndPreceding = aStart; |
|
division.bEndPreceding = bStart; |
|
} else { |
|
division.aEndPreceding = aLast; |
|
division.bEndPreceding = bLast; |
|
} |
|
|
|
division.nCommonPreceding = nCommonR; |
|
|
|
if (nCommonR !== 0) { |
|
// The last point of reverse path segment is start of common subsequence. |
|
division.aCommonPreceding = aLast; |
|
division.bCommonPreceding = bLast; |
|
} |
|
|
|
division.nChangeFollowing = d - 1; |
|
|
|
if (d === 1) { |
|
// There is no previous path segment. |
|
division.nCommonFollowing = 0; |
|
division.aStartFollowing = aEnd; |
|
division.bStartFollowing = bEnd; |
|
} else { |
|
// Unlike the Myers algorithm which finds only the middle “snake” |
|
// this package can find two common subsequences per division. |
|
// Last point of previous path segment is on an adjacent diagonal. |
|
var bLastPrev = bR + aLastPrev - (insert ? kR - 1 : kR + 1); // Because of invariant that intervals following the middle change |
|
// cannot have common items at the start, |
|
// move in forward direction along a diagonal of common items. |
|
|
|
var nCommonF = countCommonItemsF(aLastPrev, aEnd, bLastPrev, bEnd, isCommon); |
|
division.nCommonFollowing = nCommonF; |
|
|
|
if (nCommonF !== 0) { |
|
// The last point of reverse path segment is start of common subsequence. |
|
division.aCommonFollowing = aLastPrev; |
|
division.bCommonFollowing = bLastPrev; |
|
} |
|
|
|
var aStartFollowing = aLastPrev + nCommonF; // aFirstPrev |
|
|
|
var bStartFollowing = bLastPrev + nCommonF; // bFirstPrev |
|
|
|
if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) { |
|
// Optimization: number of changes in forward direction |
|
// is equal to number of items in following interval, |
|
// therefore it cannot contain any common items. |
|
division.aStartFollowing = aEnd; |
|
division.bStartFollowing = bEnd; |
|
} else { |
|
division.aStartFollowing = aStartFollowing; |
|
division.bStartFollowing = bStartFollowing; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
} |
|
} |
|
|
|
return false; |
|
}; // Given index intervals and input function to compare items at indexes, |
|
// divide at the middle change. |
|
// |
|
// DO NOT CALL if start === end, because interval cannot contain common items |
|
// and because this function will throw the “no overlap” error. |
|
|
|
|
|
var divide = function divide(nChange, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, aIndexesR, division // output |
|
) { |
|
var bF = bStart - aStart; // bIndex = bF + aIndex - kF |
|
|
|
var bR = bEnd - aEnd; // bIndex = bR + aIndex - kR |
|
|
|
var aLength = aEnd - aStart; |
|
var bLength = bEnd - bStart; // Because graph has square or portrait orientation, |
|
// length difference is minimum number of items to insert from b. |
|
// Corresponding forward and reverse diagonals in graph |
|
// depend on length difference of the sequences: |
|
// kF = kR - baDeltaLength |
|
// kR = kF + baDeltaLength |
|
|
|
var baDeltaLength = bLength - aLength; // Optimization: max diagonal in graph intersects corner of shorter side. |
|
|
|
var iMaxF = aLength; |
|
var iMaxR = aLength; // Initialize no changes yet in forward or reverse direction: |
|
|
|
aIndexesF[0] = aStart - 1; // at open start of interval, outside closed start |
|
|
|
aIndexesR[0] = aEnd; // at open end of interval |
|
|
|
if (baDeltaLength % 2 === 0) { |
|
// The number of changes in paths is 2 * d if length difference is even. |
|
var dMin = (nChange || baDeltaLength) / 2; |
|
var dMax = (aLength + bLength) / 2; |
|
|
|
for (var d = 1; d <= dMax; d += 1) { |
|
iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF); |
|
|
|
if (d < dMin) { |
|
iMaxR = extendPathsR(d, aStart, bStart, bR, isCommon, aIndexesR, iMaxR); |
|
} else if ( // If a reverse path overlaps a forward path in the same diagonal, |
|
// return a division of the index intervals at the middle change. |
|
extendOverlappablePathsR(d, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, iMaxF, aIndexesR, iMaxR, division)) { |
|
return; |
|
} |
|
} |
|
} else { |
|
// The number of changes in paths is 2 * d - 1 if length difference is odd. |
|
var _dMin = ((nChange || baDeltaLength) + 1) / 2; |
|
|
|
var _dMax = (aLength + bLength + 1) / 2; // Unroll first half iteration so loop extends the relevant pairs of paths. |
|
// Because of invariant that intervals have no common items at start or end, |
|
// and limitation not to call divide with empty intervals, |
|
// therefore it cannot be called if a forward path with one change |
|
// would overlap a reverse path with no changes, even if dMin === 1. |
|
|
|
|
|
var _d = 1; |
|
iMaxF = extendPathsF(_d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF); |
|
|
|
for (_d += 1; _d <= _dMax; _d += 1) { |
|
iMaxR = extendPathsR(_d - 1, aStart, bStart, bR, isCommon, aIndexesR, iMaxR); |
|
|
|
if (_d < _dMin) { |
|
iMaxF = extendPathsF(_d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF); |
|
} else if ( // If a forward path overlaps a reverse path in the same diagonal, |
|
// return a division of the index intervals at the middle change. |
|
extendOverlappablePathsF(_d, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, iMaxF, aIndexesR, iMaxR, division)) { |
|
return; |
|
} |
|
} |
|
} |
|
/* istanbul ignore next */ |
|
|
|
|
|
throw new Error("".concat(pkg, ": no overlap aStart=").concat(aStart, " aEnd=").concat(aEnd, " bStart=").concat(bStart, " bEnd=").concat(bEnd)); |
|
}; // Given index intervals and input function to compare items at indexes, |
|
// return by output function the number of adjacent items and starting indexes |
|
// of each common subsequence. Divide and conquer with only linear space. |
|
// |
|
// The index intervals are half open [start, end) like array slice method. |
|
// DO NOT CALL if start === end, because interval cannot contain common items |
|
// and because divide function will throw the “no overlap” error. |
|
|
|
|
|
var findSubsequences = function findSubsequences(nChange, aStart, aEnd, bStart, bEnd, transposed, callbacks, aIndexesF, aIndexesR, division // temporary memory, not input nor output |
|
) { |
|
if (bEnd - bStart < aEnd - aStart) { |
|
// Transpose graph so it has portrait instead of landscape orientation. |
|
// Always compare shorter to longer sequence for consistency and optimization. |
|
transposed = !transposed; |
|
|
|
if (transposed && callbacks.length === 1) { |
|
// Lazily wrap callback functions to swap args if graph is transposed. |
|
var _callbacks$ = callbacks[0], |
|
_foundSubsequence2 = _callbacks$.foundSubsequence, |
|
_isCommon2 = _callbacks$.isCommon; |
|
callbacks[1] = { |
|
foundSubsequence: function (_foundSubsequence) { |
|
function foundSubsequence(_x, _x2, _x3) { |
|
return _foundSubsequence.apply(this, arguments); |
|
} |
|
|
|
foundSubsequence.toString = function () { |
|
return _foundSubsequence.toString(); |
|
}; |
|
|
|
return foundSubsequence; |
|
}(function (nCommon, bCommon, aCommon) { |
|
_foundSubsequence2(nCommon, aCommon, bCommon); |
|
}), |
|
isCommon: function (_isCommon) { |
|
function isCommon(_x4, _x5) { |
|
return _isCommon.apply(this, arguments); |
|
} |
|
|
|
isCommon.toString = function () { |
|
return _isCommon.toString(); |
|
}; |
|
|
|
return isCommon; |
|
}(function (bIndex, aIndex) { |
|
return _isCommon2(aIndex, bIndex); |
|
}) |
|
}; |
|
} |
|
|
|
var tStart = aStart; |
|
var tEnd = aEnd; |
|
aStart = bStart; |
|
aEnd = bEnd; |
|
bStart = tStart; |
|
bEnd = tEnd; |
|
} |
|
|
|
var _callbacks = callbacks[transposed ? 1 : 0], |
|
foundSubsequence = _callbacks.foundSubsequence, |
|
isCommon = _callbacks.isCommon; // Divide the index intervals at the middle change. |
|
|
|
divide(nChange, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, aIndexesR, division); |
|
var nChangePreceding = division.nChangePreceding, |
|
aEndPreceding = division.aEndPreceding, |
|
bEndPreceding = division.bEndPreceding, |
|
nCommonPreceding = division.nCommonPreceding, |
|
aCommonPreceding = division.aCommonPreceding, |
|
bCommonPreceding = division.bCommonPreceding, |
|
nCommonFollowing = division.nCommonFollowing, |
|
aCommonFollowing = division.aCommonFollowing, |
|
bCommonFollowing = division.bCommonFollowing, |
|
nChangeFollowing = division.nChangeFollowing, |
|
aStartFollowing = division.aStartFollowing, |
|
bStartFollowing = division.bStartFollowing; // Unless either index interval is empty, they might contain common items. |
|
|
|
if (aStart < aEndPreceding && bStart < bEndPreceding) { |
|
// Recursely find and return common subsequences preceding the division. |
|
findSubsequences(nChangePreceding, aStart, aEndPreceding, bStart, bEndPreceding, transposed, callbacks, aIndexesF, aIndexesR, division); |
|
} // Return common subsequences that are adjacent to the middle change. |
|
|
|
|
|
if (nCommonPreceding !== 0) { |
|
foundSubsequence(nCommonPreceding, aCommonPreceding, bCommonPreceding); |
|
} |
|
|
|
if (nCommonFollowing !== 0) { |
|
foundSubsequence(nCommonFollowing, aCommonFollowing, bCommonFollowing); |
|
} // Unless either index interval is empty, they might contain common items. |
|
|
|
|
|
if (aStartFollowing < aEnd && bStartFollowing < bEnd) { |
|
// Recursely find and return common subsequences following the division. |
|
findSubsequences(nChangeFollowing, aStartFollowing, aEnd, bStartFollowing, bEnd, transposed, callbacks, aIndexesF, aIndexesR, division); |
|
} |
|
}; |
|
|
|
var validateLength = function validateLength(name, arg) { |
|
var type = _typeof(arg); |
|
|
|
if (type !== 'number') { |
|
throw new TypeError("".concat(pkg, ": ").concat(name, " typeof ").concat(type, " is not a number")); |
|
} |
|
|
|
if (!Number.isSafeInteger(arg)) { |
|
throw new RangeError("".concat(pkg, ": ").concat(name, " value ").concat(arg, " is not a safe integer")); |
|
} |
|
|
|
if (arg < 0) { |
|
throw new RangeError("".concat(pkg, ": ").concat(name, " value ").concat(arg, " is a negative integer")); |
|
} |
|
}; |
|
|
|
var validateCallback = function validateCallback(name, arg) { |
|
var type = _typeof(arg); |
|
|
|
if (type !== 'function') { |
|
throw new TypeError("".concat(pkg, ": ").concat(name, " typeof ").concat(type, " is not a function")); |
|
} |
|
}; // Compare items in two sequences to find a longest common subsequence. |
|
// Given lengths of sequences and input function to compare items at indexes, |
|
// return by output function the number of adjacent items and starting indexes |
|
// of each common subsequence. |
|
|
|
|
|
var _default = function _default(aLength, bLength, isCommon, foundSubsequence) { |
|
validateLength('aLength', aLength); |
|
validateLength('bLength', bLength); |
|
validateCallback('isCommon', isCommon); |
|
validateCallback('foundSubsequence', foundSubsequence); // Count common items from the start in the forward direction. |
|
|
|
var nCommonF = countCommonItemsF(0, aLength, 0, bLength, isCommon); |
|
|
|
if (nCommonF !== 0) { |
|
foundSubsequence(nCommonF, 0, 0); |
|
} // Unless both sequences consist of common items only, |
|
// find common items in the half-trimmed index intervals. |
|
|
|
|
|
if (aLength !== nCommonF || bLength !== nCommonF) { |
|
// Invariant: intervals do not have common items at the start. |
|
// The start of an index interval is closed like array slice method. |
|
var aStart = nCommonF; |
|
var bStart = nCommonF; // Count common items from the end in the reverse direction. |
|
|
|
var nCommonR = countCommonItemsR(aStart, aLength - 1, bStart, bLength - 1, isCommon); // Invariant: intervals do not have common items at the end. |
|
// The end of an index interval is open like array slice method. |
|
|
|
var aEnd = aLength - nCommonR; |
|
var bEnd = bLength - nCommonR; // Unless one sequence consists of common items only, |
|
// therefore the other trimmed index interval consists of changes only, |
|
// find common items in the trimmed index intervals. |
|
|
|
var nCommonFR = nCommonF + nCommonR; |
|
|
|
if (aLength !== nCommonFR && bLength !== nCommonFR) { |
|
var nChange = 0; // number of change items is not yet known |
|
|
|
var transposed = false; // call the original unwrapped functions |
|
|
|
var callbacks = [{ |
|
foundSubsequence: foundSubsequence, |
|
isCommon: isCommon |
|
}]; // Indexes in sequence a of last points in furthest reaching paths |
|
// from outside the start at top left in the forward direction: |
|
|
|
var aIndexesF = [NOT_YET_SET]; // from the end at bottom right in the reverse direction: |
|
|
|
var aIndexesR = [NOT_YET_SET]; // Initialize one object as output of all calls to divide function. |
|
|
|
var division = { |
|
aCommonFollowing: NOT_YET_SET, |
|
aCommonPreceding: NOT_YET_SET, |
|
aEndPreceding: NOT_YET_SET, |
|
aStartFollowing: NOT_YET_SET, |
|
bCommonFollowing: NOT_YET_SET, |
|
bCommonPreceding: NOT_YET_SET, |
|
bEndPreceding: NOT_YET_SET, |
|
bStartFollowing: NOT_YET_SET, |
|
nChangeFollowing: NOT_YET_SET, |
|
nChangePreceding: NOT_YET_SET, |
|
nCommonFollowing: NOT_YET_SET, |
|
nCommonPreceding: NOT_YET_SET |
|
}; // Find and return common subsequences in the trimmed index intervals. |
|
|
|
findSubsequences(nChange, aStart, aEnd, bStart, bEnd, transposed, callbacks, aIndexesF, aIndexesR, division); |
|
} |
|
|
|
if (nCommonR !== 0) { |
|
foundSubsequence(nCommonR, aEnd, bEnd); |
|
} |
|
} |
|
}; |
|
|
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/build/fakeChalk.js": |
|
/*!********************************************!*\ |
|
!*** ./packages/expect/build/fakeChalk.js ***! |
|
\********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } |
|
|
|
var _ansiStyles = _interopRequireDefault(__webpack_require__(/*! ansi-styles */ "./node_modules/ansi-styles/index.js")); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var returnInput = function returnInput(str) { |
|
return str; |
|
}; |
|
|
|
var allColorsAsFunc = Object.keys(_ansiStyles.default).map(function (style) { |
|
return _defineProperty({}, style, returnInput); |
|
}).reduce(function (acc, cur) { |
|
return Object.assign(acc, cur); |
|
}); |
|
Object.keys(allColorsAsFunc).map(function (color) { |
|
return allColorsAsFunc[color]; |
|
}).forEach(function (style) { |
|
Object.assign(style, allColorsAsFunc); |
|
Object.assign(returnInput, style); |
|
}); |
|
module.exports = allColorsAsFunc; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/asymmetricMatchers.ts": |
|
/*!***************************************************!*\ |
|
!*** ./packages/expect/src/asymmetricMatchers.ts ***! |
|
\***************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.stringNotMatching = exports.stringMatching = exports.stringNotContaining = exports.stringContaining = exports.objectNotContaining = exports.objectContaining = exports.arrayNotContaining = exports.arrayContaining = exports.anything = exports.any = exports.AsymmetricMatcher = void 0; |
|
|
|
var _jasmineUtils = __webpack_require__(/*! ./jasmineUtils */ "./packages/expect/src/jasmineUtils.ts"); |
|
|
|
var _utils = __webpack_require__(/*! ./utils */ "./packages/expect/src/utils.ts"); |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } |
|
|
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } |
|
|
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } |
|
|
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } |
|
|
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } |
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } |
|
|
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } |
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
|
|
|
var AsymmetricMatcher = function AsymmetricMatcher(sample) { |
|
_classCallCheck(this, AsymmetricMatcher); |
|
|
|
this.$$typeof = Symbol.for('jest.asymmetricMatcher'); |
|
this.sample = sample; |
|
}; |
|
|
|
exports.AsymmetricMatcher = AsymmetricMatcher; |
|
|
|
var Any = |
|
/*#__PURE__*/ |
|
function (_AsymmetricMatcher) { |
|
_inherits(Any, _AsymmetricMatcher); |
|
|
|
function Any(sample) { |
|
_classCallCheck(this, Any); |
|
|
|
if (typeof sample === 'undefined') { |
|
throw new TypeError('any() expects to be passed a constructor function. ' + 'Please pass one or use anything() to match any object.'); |
|
} |
|
|
|
return _possibleConstructorReturn(this, _getPrototypeOf(Any).call(this, sample)); |
|
} |
|
|
|
_createClass(Any, [{ |
|
key: "asymmetricMatch", |
|
value: function asymmetricMatch(other) { |
|
if (this.sample == String) { |
|
return typeof other == 'string' || other instanceof String; |
|
} |
|
|
|
if (this.sample == Number) { |
|
return typeof other == 'number' || other instanceof Number; |
|
} |
|
|
|
if (this.sample == Function) { |
|
return typeof other == 'function' || other instanceof Function; |
|
} |
|
|
|
if (this.sample == Object) { |
|
return _typeof(other) == 'object'; |
|
} |
|
|
|
if (this.sample == Boolean) { |
|
return typeof other == 'boolean'; |
|
} |
|
|
|
return other instanceof this.sample; |
|
} |
|
}, { |
|
key: "toString", |
|
value: function toString() { |
|
return 'Any'; |
|
} |
|
}, { |
|
key: "getExpectedType", |
|
value: function getExpectedType() { |
|
if (this.sample == String) { |
|
return 'string'; |
|
} |
|
|
|
if (this.sample == Number) { |
|
return 'number'; |
|
} |
|
|
|
if (this.sample == Function) { |
|
return 'function'; |
|
} |
|
|
|
if (this.sample == Object) { |
|
return 'object'; |
|
} |
|
|
|
if (this.sample == Boolean) { |
|
return 'boolean'; |
|
} |
|
|
|
return (0, _jasmineUtils.fnNameFor)(this.sample); |
|
} |
|
}, { |
|
key: "toAsymmetricMatcher", |
|
value: function toAsymmetricMatcher() { |
|
return 'Any<' + (0, _jasmineUtils.fnNameFor)(this.sample) + '>'; |
|
} |
|
}]); |
|
|
|
return Any; |
|
}(AsymmetricMatcher); |
|
|
|
var Anything = |
|
/*#__PURE__*/ |
|
function (_AsymmetricMatcher2) { |
|
_inherits(Anything, _AsymmetricMatcher2); |
|
|
|
function Anything() { |
|
_classCallCheck(this, Anything); |
|
|
|
return _possibleConstructorReturn(this, _getPrototypeOf(Anything).apply(this, arguments)); |
|
} |
|
|
|
_createClass(Anything, [{ |
|
key: "asymmetricMatch", |
|
value: function asymmetricMatch(other) { |
|
return !(0, _jasmineUtils.isUndefined)(other) && other !== null; |
|
} |
|
}, { |
|
key: "toString", |
|
value: function toString() { |
|
return 'Anything'; |
|
} // No getExpectedType method, because it matches either null or undefined. |
|
|
|
}, { |
|
key: "toAsymmetricMatcher", |
|
value: function toAsymmetricMatcher() { |
|
return 'Anything'; |
|
} |
|
}]); |
|
|
|
return Anything; |
|
}(AsymmetricMatcher); |
|
|
|
var ArrayContaining = |
|
/*#__PURE__*/ |
|
function (_AsymmetricMatcher3) { |
|
_inherits(ArrayContaining, _AsymmetricMatcher3); |
|
|
|
function ArrayContaining(sample) { |
|
var _this; |
|
|
|
var inverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; |
|
|
|
_classCallCheck(this, ArrayContaining); |
|
|
|
_this = _possibleConstructorReturn(this, _getPrototypeOf(ArrayContaining).call(this, sample)); |
|
_this.inverse = inverse; |
|
return _this; |
|
} |
|
|
|
_createClass(ArrayContaining, [{ |
|
key: "asymmetricMatch", |
|
value: function asymmetricMatch(other) { |
|
if (!Array.isArray(this.sample)) { |
|
throw new Error("You must provide an array to ".concat(this.toString(), ", not '") + _typeof(this.sample) + "'."); |
|
} |
|
|
|
var result = this.sample.length === 0 || Array.isArray(other) && this.sample.every(function (item) { |
|
return other.some(function (another) { |
|
return (0, _jasmineUtils.equals)(item, another); |
|
}); |
|
}); |
|
return this.inverse ? !result : result; |
|
} |
|
}, { |
|
key: "toString", |
|
value: function toString() { |
|
return "Array".concat(this.inverse ? 'Not' : '', "Containing"); |
|
} |
|
}, { |
|
key: "getExpectedType", |
|
value: function getExpectedType() { |
|
return 'array'; |
|
} |
|
}]); |
|
|
|
return ArrayContaining; |
|
}(AsymmetricMatcher); |
|
|
|
var ObjectContaining = |
|
/*#__PURE__*/ |
|
function (_AsymmetricMatcher4) { |
|
_inherits(ObjectContaining, _AsymmetricMatcher4); |
|
|
|
function ObjectContaining(sample) { |
|
var _this2; |
|
|
|
var inverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; |
|
|
|
_classCallCheck(this, ObjectContaining); |
|
|
|
_this2 = _possibleConstructorReturn(this, _getPrototypeOf(ObjectContaining).call(this, sample)); |
|
_this2.inverse = inverse; |
|
return _this2; |
|
} |
|
|
|
_createClass(ObjectContaining, [{ |
|
key: "asymmetricMatch", |
|
value: function asymmetricMatch(other) { |
|
if (_typeof(this.sample) !== 'object') { |
|
throw new Error("You must provide an object to ".concat(this.toString(), ", not '") + _typeof(this.sample) + "'."); |
|
} |
|
|
|
if (this.inverse) { |
|
for (var property in this.sample) { |
|
if ((0, _jasmineUtils.hasProperty)(other, property) && (0, _jasmineUtils.equals)(this.sample[property], other[property]) && !(0, _utils.emptyObject)(this.sample[property]) && !(0, _utils.emptyObject)(other[property])) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} else { |
|
for (var _property in this.sample) { |
|
if (!(0, _jasmineUtils.hasProperty)(other, _property) || !(0, _jasmineUtils.equals)(this.sample[_property], other[_property])) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
} |
|
}, { |
|
key: "toString", |
|
value: function toString() { |
|
return "Object".concat(this.inverse ? 'Not' : '', "Containing"); |
|
} |
|
}, { |
|
key: "getExpectedType", |
|
value: function getExpectedType() { |
|
return 'object'; |
|
} |
|
}]); |
|
|
|
return ObjectContaining; |
|
}(AsymmetricMatcher); |
|
|
|
var StringContaining = |
|
/*#__PURE__*/ |
|
function (_AsymmetricMatcher5) { |
|
_inherits(StringContaining, _AsymmetricMatcher5); |
|
|
|
function StringContaining(sample) { |
|
var _this3; |
|
|
|
var inverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; |
|
|
|
_classCallCheck(this, StringContaining); |
|
|
|
if (!(0, _jasmineUtils.isA)('String', sample)) { |
|
throw new Error('Expected is not a string'); |
|
} |
|
|
|
_this3 = _possibleConstructorReturn(this, _getPrototypeOf(StringContaining).call(this, sample)); |
|
_this3.inverse = inverse; |
|
return _this3; |
|
} |
|
|
|
_createClass(StringContaining, [{ |
|
key: "asymmetricMatch", |
|
value: function asymmetricMatch(other) { |
|
var result = (0, _jasmineUtils.isA)('String', other) && other.includes(this.sample); |
|
return this.inverse ? !result : result; |
|
} |
|
}, { |
|
key: "toString", |
|
value: function toString() { |
|
return "String".concat(this.inverse ? 'Not' : '', "Containing"); |
|
} |
|
}, { |
|
key: "getExpectedType", |
|
value: function getExpectedType() { |
|
return 'string'; |
|
} |
|
}]); |
|
|
|
return StringContaining; |
|
}(AsymmetricMatcher); |
|
|
|
var StringMatching = |
|
/*#__PURE__*/ |
|
function (_AsymmetricMatcher6) { |
|
_inherits(StringMatching, _AsymmetricMatcher6); |
|
|
|
function StringMatching(sample) { |
|
var _this4; |
|
|
|
var inverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; |
|
|
|
_classCallCheck(this, StringMatching); |
|
|
|
if (!(0, _jasmineUtils.isA)('String', sample) && !(0, _jasmineUtils.isA)('RegExp', sample)) { |
|
throw new Error('Expected is not a String or a RegExp'); |
|
} |
|
|
|
_this4 = _possibleConstructorReturn(this, _getPrototypeOf(StringMatching).call(this, new RegExp(sample))); |
|
_this4.inverse = inverse; |
|
return _this4; |
|
} |
|
|
|
_createClass(StringMatching, [{ |
|
key: "asymmetricMatch", |
|
value: function asymmetricMatch(other) { |
|
var result = (0, _jasmineUtils.isA)('String', other) && this.sample.test(other); |
|
return this.inverse ? !result : result; |
|
} |
|
}, { |
|
key: "toString", |
|
value: function toString() { |
|
return "String".concat(this.inverse ? 'Not' : '', "Matching"); |
|
} |
|
}, { |
|
key: "getExpectedType", |
|
value: function getExpectedType() { |
|
return 'string'; |
|
} |
|
}]); |
|
|
|
return StringMatching; |
|
}(AsymmetricMatcher); |
|
|
|
var any = function any(expectedObject) { |
|
return new Any(expectedObject); |
|
}; |
|
|
|
exports.any = any; |
|
|
|
var anything = function anything() { |
|
return new Anything(); |
|
}; |
|
|
|
exports.anything = anything; |
|
|
|
var arrayContaining = function arrayContaining(sample) { |
|
return new ArrayContaining(sample); |
|
}; |
|
|
|
exports.arrayContaining = arrayContaining; |
|
|
|
var arrayNotContaining = function arrayNotContaining(sample) { |
|
return new ArrayContaining(sample, true); |
|
}; |
|
|
|
exports.arrayNotContaining = arrayNotContaining; |
|
|
|
var objectContaining = function objectContaining(sample) { |
|
return new ObjectContaining(sample); |
|
}; |
|
|
|
exports.objectContaining = objectContaining; |
|
|
|
var objectNotContaining = function objectNotContaining(sample) { |
|
return new ObjectContaining(sample, true); |
|
}; |
|
|
|
exports.objectNotContaining = objectNotContaining; |
|
|
|
var stringContaining = function stringContaining(expected) { |
|
return new StringContaining(expected); |
|
}; |
|
|
|
exports.stringContaining = stringContaining; |
|
|
|
var stringNotContaining = function stringNotContaining(expected) { |
|
return new StringContaining(expected, true); |
|
}; |
|
|
|
exports.stringNotContaining = stringNotContaining; |
|
|
|
var stringMatching = function stringMatching(expected) { |
|
return new StringMatching(expected); |
|
}; |
|
|
|
exports.stringMatching = stringMatching; |
|
|
|
var stringNotMatching = function stringNotMatching(expected) { |
|
return new StringMatching(expected, true); |
|
}; |
|
|
|
exports.stringNotMatching = stringNotMatching; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/extractExpectedAssertionsErrors.ts": |
|
/*!****************************************************************!*\ |
|
!*** ./packages/expect/src/extractExpectedAssertionsErrors.ts ***! |
|
\****************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
|
|
var _jestMatcherUtils = __webpack_require__(/*! jest-matcher-utils */ "./packages/jest-matcher-utils/build/index.js"); |
|
|
|
var _jestMatchersObject = __webpack_require__(/*! ./jestMatchersObject */ "./packages/expect/src/jestMatchersObject.ts"); |
|
|
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
*/ |
|
var resetAssertionsLocalState = function resetAssertionsLocalState() { |
|
(0, _jestMatchersObject.setState)({ |
|
assertionCalls: 0, |
|
expectedAssertionsNumber: null, |
|
isExpectingAssertions: false |
|
}); |
|
}; // Create and format all errors related to the mismatched number of `expect` |
|
// calls and reset the matcher's state. |
|
|
|
|
|
var extractExpectedAssertionsErrors = function extractExpectedAssertionsErrors() { |
|
var result = []; |
|
|
|
var _getState = (0, _jestMatchersObject.getState)(), |
|
assertionCalls = _getState.assertionCalls, |
|
expectedAssertionsNumber = _getState.expectedAssertionsNumber, |
|
expectedAssertionsNumberError = _getState.expectedAssertionsNumberError, |
|
isExpectingAssertions = _getState.isExpectingAssertions, |
|
isExpectingAssertionsError = _getState.isExpectingAssertionsError; |
|
|
|
resetAssertionsLocalState(); |
|
|
|
if (typeof expectedAssertionsNumber === 'number' && assertionCalls !== expectedAssertionsNumber) { |
|
var numOfAssertionsExpected = (0, _jestMatcherUtils.EXPECTED_COLOR)((0, _jestMatcherUtils.pluralize)('assertion', expectedAssertionsNumber)); |
|
expectedAssertionsNumberError.message = (0, _jestMatcherUtils.matcherHint)('.assertions', '', String(expectedAssertionsNumber), { |
|
isDirectExpectCall: true |
|
}) + '\n\n' + "Expected ".concat(numOfAssertionsExpected, " to be called but received ") + (0, _jestMatcherUtils.RECEIVED_COLOR)((0, _jestMatcherUtils.pluralize)('assertion call', assertionCalls || 0)) + '.'; |
|
result.push({ |
|
actual: assertionCalls, |
|
error: expectedAssertionsNumberError, |
|
expected: expectedAssertionsNumber |
|
}); |
|
} |
|
|
|
if (isExpectingAssertions && assertionCalls === 0) { |
|
var expected = (0, _jestMatcherUtils.EXPECTED_COLOR)('at least one assertion'); |
|
var received = (0, _jestMatcherUtils.RECEIVED_COLOR)('received none'); |
|
isExpectingAssertionsError.message = (0, _jestMatcherUtils.matcherHint)('.hasAssertions', '', '', { |
|
isDirectExpectCall: true |
|
}) + '\n\n' + "Expected ".concat(expected, " to be called but ").concat(received, "."); |
|
result.push({ |
|
actual: 'none', |
|
error: isExpectingAssertionsError, |
|
expected: 'at least one' |
|
}); |
|
} |
|
|
|
return result; |
|
}; |
|
|
|
var _default = extractExpectedAssertionsErrors; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/index.ts": |
|
/*!**************************************!*\ |
|
!*** ./packages/expect/src/index.ts ***! |
|
\**************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var matcherUtils = _interopRequireWildcard(__webpack_require__(/*! jest-matcher-utils */ "./packages/jest-matcher-utils/build/index.js")); |
|
|
|
var _utils = __webpack_require__(/*! ./utils */ "./packages/expect/src/utils.ts"); |
|
|
|
var _matchers = _interopRequireDefault(__webpack_require__(/*! ./matchers */ "./packages/expect/src/matchers.ts")); |
|
|
|
var _spyMatchers = _interopRequireDefault(__webpack_require__(/*! ./spyMatchers */ "./packages/expect/src/spyMatchers.ts")); |
|
|
|
var _toThrowMatchers = _interopRequireWildcard(__webpack_require__(/*! ./toThrowMatchers */ "./packages/expect/src/toThrowMatchers.ts")); |
|
|
|
var _jasmineUtils = __webpack_require__(/*! ./jasmineUtils */ "./packages/expect/src/jasmineUtils.ts"); |
|
|
|
var _asymmetricMatchers = __webpack_require__(/*! ./asymmetricMatchers */ "./packages/expect/src/asymmetricMatchers.ts"); |
|
|
|
var _jestMatchersObject = __webpack_require__(/*! ./jestMatchersObject */ "./packages/expect/src/jestMatchersObject.ts"); |
|
|
|
var _extractExpectedAssertionsErrors = _interopRequireDefault(__webpack_require__(/*! ./extractExpectedAssertionsErrors */ "./packages/expect/src/extractExpectedAssertionsErrors.ts")); |
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } |
|
|
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } |
|
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
|
|
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } |
|
|
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } |
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } |
|
|
|
function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } |
|
|
|
function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } |
|
|
|
function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } |
|
|
|
function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } |
|
|
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } |
|
|
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } |
|
|
|
var JestAssertionError = |
|
/*#__PURE__*/ |
|
function (_Error) { |
|
_inherits(JestAssertionError, _Error); |
|
|
|
function JestAssertionError() { |
|
_classCallCheck(this, JestAssertionError); |
|
|
|
return _possibleConstructorReturn(this, _getPrototypeOf(JestAssertionError).apply(this, arguments)); |
|
} |
|
|
|
return JestAssertionError; |
|
}(_wrapNativeSuper(Error)); |
|
|
|
var isPromise = function isPromise(obj) { |
|
return !!obj && (_typeof(obj) === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; |
|
}; |
|
|
|
var createToThrowErrorMatchingSnapshotMatcher = function createToThrowErrorMatchingSnapshotMatcher(matcher) { |
|
return function (received, testNameOrInlineSnapshot) { |
|
return matcher.apply(this, [received, testNameOrInlineSnapshot, true]); |
|
}; |
|
}; |
|
|
|
var getPromiseMatcher = function getPromiseMatcher(name, matcher) { |
|
if (name === 'toThrow' || name === 'toThrowError') { |
|
return (0, _toThrowMatchers.createMatcher)(name, true); |
|
} else if (name === 'toThrowErrorMatchingSnapshot' || name === 'toThrowErrorMatchingInlineSnapshot') { |
|
return createToThrowErrorMatchingSnapshotMatcher(matcher); |
|
} |
|
|
|
return null; |
|
}; |
|
|
|
var expect = function expect(actual) { |
|
if ((arguments.length <= 1 ? 0 : arguments.length - 1) !== 0) { |
|
throw new Error('Expect takes at most one argument.'); |
|
} |
|
|
|
var allMatchers = (0, _jestMatchersObject.getMatchers)(); |
|
var expectation = { |
|
not: {}, |
|
rejects: { |
|
not: {} |
|
}, |
|
resolves: { |
|
not: {} |
|
} |
|
}; |
|
var err = new JestAssertionError(); |
|
Object.keys(allMatchers).forEach(function (name) { |
|
var matcher = allMatchers[name]; |
|
var promiseMatcher = getPromiseMatcher(name, matcher) || matcher; |
|
expectation[name] = makeThrowingMatcher(matcher, false, '', actual); |
|
expectation.not[name] = makeThrowingMatcher(matcher, true, '', actual); |
|
expectation.resolves[name] = makeResolveMatcher(name, promiseMatcher, false, actual, err); |
|
expectation.resolves.not[name] = makeResolveMatcher(name, promiseMatcher, true, actual, err); |
|
expectation.rejects[name] = makeRejectMatcher(name, promiseMatcher, false, actual, err); |
|
expectation.rejects.not[name] = makeRejectMatcher(name, promiseMatcher, true, actual, err); |
|
}); |
|
return expectation; |
|
}; |
|
|
|
var getMessage = function getMessage(message) { |
|
return message && message() || matcherUtils.RECEIVED_COLOR('No message was specified for this matcher.'); |
|
}; |
|
|
|
var makeResolveMatcher = function makeResolveMatcher(matcherName, matcher, isNot, actual, outerErr) { |
|
return function () { |
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
|
args[_key] = arguments[_key]; |
|
} |
|
|
|
var options = { |
|
isNot: isNot, |
|
promise: 'resolves' |
|
}; |
|
|
|
if (!isPromise(actual)) { |
|
throw new JestAssertionError(matcherUtils.matcherErrorMessage(matcherUtils.matcherHint(matcherName, undefined, '', options), "".concat(matcherUtils.RECEIVED_COLOR('received'), " value must be a promise"), matcherUtils.printWithType('Received', actual, matcherUtils.printReceived))); |
|
} |
|
|
|
var innerErr = new JestAssertionError(); |
|
return actual.then(function (result) { |
|
return makeThrowingMatcher(matcher, isNot, 'resolves', result, innerErr).apply(null, args); |
|
}, function (reason) { |
|
outerErr.message = matcherUtils.matcherHint(matcherName, undefined, '', options) + '\n\n' + "Received promise rejected instead of resolved\n" + "Rejected to value: ".concat(matcherUtils.printReceived(reason)); |
|
return Promise.reject(outerErr); |
|
}); |
|
}; |
|
}; |
|
|
|
var makeRejectMatcher = function makeRejectMatcher(matcherName, matcher, isNot, actual, outerErr) { |
|
return function () { |
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { |
|
args[_key2] = arguments[_key2]; |
|
} |
|
|
|
var options = { |
|
isNot: isNot, |
|
promise: 'rejects' |
|
}; |
|
|
|
if (!isPromise(actual)) { |
|
throw new JestAssertionError(matcherUtils.matcherErrorMessage(matcherUtils.matcherHint(matcherName, undefined, '', options), "".concat(matcherUtils.RECEIVED_COLOR('received'), " value must be a promise"), matcherUtils.printWithType('Received', actual, matcherUtils.printReceived))); |
|
} |
|
|
|
var innerErr = new JestAssertionError(); |
|
return actual.then(function (result) { |
|
outerErr.message = matcherUtils.matcherHint(matcherName, undefined, '', options) + '\n\n' + "Received promise resolved instead of rejected\n" + "Resolved to value: ".concat(matcherUtils.printReceived(result)); |
|
return Promise.reject(outerErr); |
|
}, function (reason) { |
|
return makeThrowingMatcher(matcher, isNot, 'rejects', reason, innerErr).apply(null, args); |
|
}); |
|
}; |
|
}; |
|
|
|
var makeThrowingMatcher = function makeThrowingMatcher(matcher, isNot, promise, actual, err) { |
|
return function throwingMatcher() { |
|
var throws = true; |
|
|
|
var utils = _objectSpread({}, matcherUtils, { |
|
iterableEquality: _utils.iterableEquality, |
|
subsetEquality: _utils.subsetEquality |
|
}); |
|
|
|
var matcherContext = _objectSpread({ |
|
// When throws is disabled, the matcher will not throw errors during test |
|
// execution but instead add them to the global matcher state. If a |
|
// matcher throws, test execution is normally stopped immediately. The |
|
// snapshot matcher uses it because we want to log all snapshot |
|
// failures in a test. |
|
dontThrow: function dontThrow() { |
|
return throws = false; |
|
} |
|
}, (0, _jestMatchersObject.getState)(), { |
|
equals: _jasmineUtils.equals, |
|
error: err, |
|
isNot: isNot, |
|
promise: promise, |
|
utils: utils |
|
}); |
|
|
|
var processResult = function processResult(result, asyncError) { |
|
_validateResult(result); |
|
|
|
(0, _jestMatchersObject.getState)().assertionCalls++; |
|
|
|
if (result.pass && isNot || !result.pass && !isNot) { |
|
// XOR |
|
var message = getMessage(result.message); |
|
var error; |
|
|
|
if (err) { |
|
error = err; |
|
error.message = message; |
|
} else if (asyncError) { |
|
error = asyncError; |
|
error.message = message; |
|
} else { |
|
error = new JestAssertionError(message); // Try to remove this function from the stack trace frame. |
|
// Guard for some environments (browsers) that do not support this feature. |
|
|
|
if (Error.captureStackTrace) { |
|
Error.captureStackTrace(error, throwingMatcher); |
|
} |
|
} // Passing the result of the matcher with the error so that a custom |
|
// reporter could access the actual and expected objects of the result |
|
// for example in order to display a custom visual diff |
|
|
|
|
|
error.matcherResult = result; |
|
|
|
if (throws) { |
|
throw error; |
|
} else { |
|
(0, _jestMatchersObject.getState)().suppressedErrors.push(error); |
|
} |
|
} |
|
}; |
|
|
|
var handlError = function handlError(error) { |
|
if (matcher[_jestMatchersObject.INTERNAL_MATCHER_FLAG] === true && !(error instanceof JestAssertionError) && error.name !== 'PrettyFormatPluginError' && // Guard for some environments (browsers) that do not support this feature. |
|
Error.captureStackTrace) { |
|
// Try to remove this and deeper functions from the stack trace frame. |
|
Error.captureStackTrace(error, throwingMatcher); |
|
} |
|
|
|
throw error; |
|
}; |
|
|
|
var potentialResult; |
|
|
|
try { |
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { |
|
args[_key3] = arguments[_key3]; |
|
} |
|
|
|
potentialResult = matcher.call.apply(matcher, [matcherContext, actual].concat(args)); |
|
|
|
if (isPromise(potentialResult)) { |
|
var asyncResult = potentialResult; |
|
var asyncError = new JestAssertionError(); |
|
|
|
if (Error.captureStackTrace) { |
|
Error.captureStackTrace(asyncError, throwingMatcher); |
|
} |
|
|
|
return asyncResult.then(function (aResult) { |
|
return processResult(aResult, asyncError); |
|
}).catch(function (error) { |
|
return handlError(error); |
|
}); |
|
} else { |
|
var syncResult = potentialResult; |
|
return processResult(syncResult); |
|
} |
|
} catch (error) { |
|
return handlError(error); |
|
} |
|
}; |
|
}; |
|
|
|
expect.extend = function (matchers) { |
|
return (0, _jestMatchersObject.setMatchers)(matchers, false, expect); |
|
}; |
|
|
|
expect.anything = _asymmetricMatchers.anything; |
|
expect.any = _asymmetricMatchers.any; |
|
expect.not = { |
|
arrayContaining: _asymmetricMatchers.arrayNotContaining, |
|
objectContaining: _asymmetricMatchers.objectNotContaining, |
|
stringContaining: _asymmetricMatchers.stringNotContaining, |
|
stringMatching: _asymmetricMatchers.stringNotMatching |
|
}; |
|
expect.objectContaining = _asymmetricMatchers.objectContaining; |
|
expect.arrayContaining = _asymmetricMatchers.arrayContaining; |
|
expect.stringContaining = _asymmetricMatchers.stringContaining; |
|
expect.stringMatching = _asymmetricMatchers.stringMatching; |
|
|
|
var _validateResult = function _validateResult(result) { |
|
if (_typeof(result) !== 'object' || typeof result.pass !== 'boolean' || result.message && typeof result.message !== 'string' && typeof result.message !== 'function') { |
|
throw new Error('Unexpected return from a matcher function.\n' + 'Matcher functions should ' + 'return an object in the following format:\n' + ' {message?: string | function, pass: boolean}\n' + "'".concat(matcherUtils.stringify(result), "' was returned")); |
|
} |
|
}; |
|
|
|
function assertions(expected) { |
|
var error = new Error(); |
|
|
|
if (Error.captureStackTrace) { |
|
Error.captureStackTrace(error, assertions); |
|
} |
|
|
|
(0, _jestMatchersObject.getState)().expectedAssertionsNumber = expected; |
|
(0, _jestMatchersObject.getState)().expectedAssertionsNumberError = error; |
|
} |
|
|
|
function hasAssertions() { |
|
var error = new Error(); |
|
|
|
if (Error.captureStackTrace) { |
|
Error.captureStackTrace(error, hasAssertions); |
|
} |
|
|
|
matcherUtils.ensureNoExpected(arguments.length <= 0 ? undefined : arguments[0], '.hasAssertions'); |
|
(0, _jestMatchersObject.getState)().isExpectingAssertions = true; |
|
(0, _jestMatchersObject.getState)().isExpectingAssertionsError = error; |
|
} // add default jest matchers |
|
|
|
|
|
(0, _jestMatchersObject.setMatchers)(_matchers.default, true, expect); |
|
(0, _jestMatchersObject.setMatchers)(_spyMatchers.default, true, expect); |
|
(0, _jestMatchersObject.setMatchers)(_toThrowMatchers.default, true, expect); |
|
|
|
expect.addSnapshotSerializer = function () { |
|
return void 0; |
|
}; |
|
|
|
expect.assertions = assertions; |
|
expect.hasAssertions = hasAssertions; |
|
expect.getState = _jestMatchersObject.getState; |
|
expect.setState = _jestMatchersObject.setState; |
|
expect.extractExpectedAssertionsErrors = _extractExpectedAssertionsErrors.default; |
|
var expectExport = expect; // eslint-disable-next-line no-redeclare |
|
|
|
module.exports = expectExport; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/jasmineUtils.ts": |
|
/*!*********************************************!*\ |
|
!*** ./packages/expect/src/jasmineUtils.ts ***! |
|
\*********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.equals = equals; |
|
exports.isA = isA; |
|
exports.fnNameFor = fnNameFor; |
|
exports.isUndefined = isUndefined; |
|
exports.hasProperty = hasProperty; |
|
exports.isImmutableUnorderedKeyed = isImmutableUnorderedKeyed; |
|
exports.isImmutableUnorderedSet = isImmutableUnorderedSet; |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
/* |
|
Copyright (c) 2008-2016 Pivotal Labs |
|
|
|
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. |
|
|
|
*/ |
|
|
|
/* eslint-disable */ |
|
// Extracted out of jasmine 2.5.2 |
|
function equals(a, b, customTesters, strictCheck) { |
|
customTesters = customTesters || []; |
|
return eq(a, b, [], [], customTesters, strictCheck ? hasKey : hasDefinedKey); |
|
} |
|
|
|
var functionToString = Function.prototype.toString; |
|
|
|
function isAsymmetric(obj) { |
|
return !!obj && isA('Function', obj.asymmetricMatch); |
|
} |
|
|
|
function asymmetricMatch(a, b) { |
|
var asymmetricA = isAsymmetric(a), |
|
asymmetricB = isAsymmetric(b); |
|
|
|
if (asymmetricA && asymmetricB) { |
|
return undefined; |
|
} |
|
|
|
if (asymmetricA) { |
|
return a.asymmetricMatch(b); |
|
} |
|
|
|
if (asymmetricB) { |
|
return b.asymmetricMatch(a); |
|
} |
|
} // Equality function lovingly adapted from isEqual in |
|
// [Underscore](http://underscorejs.org) |
|
|
|
|
|
function eq(a, b, aStack, bStack, customTesters, hasKey) { |
|
var result = true; |
|
var asymmetricResult = asymmetricMatch(a, b); |
|
|
|
if (asymmetricResult !== undefined) { |
|
return asymmetricResult; |
|
} |
|
|
|
for (var i = 0; i < customTesters.length; i++) { |
|
var customTesterResult = customTesters[i](a, b); |
|
|
|
if (customTesterResult !== undefined) { |
|
return customTesterResult; |
|
} |
|
} |
|
|
|
if (a instanceof Error && b instanceof Error) { |
|
return a.message == b.message; |
|
} |
|
|
|
if (Object.is(a, b)) { |
|
return true; |
|
} // A strict comparison is necessary because `null == undefined`. |
|
|
|
|
|
if (a === null || b === null) { |
|
return a === b; |
|
} |
|
|
|
var className = Object.prototype.toString.call(a); |
|
|
|
if (className != Object.prototype.toString.call(b)) { |
|
return false; |
|
} |
|
|
|
switch (className) { |
|
// Strings, numbers, dates, and booleans are compared by value. |
|
case '[object String]': |
|
// Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is |
|
// equivalent to `new String("5")`. |
|
return a == String(b); |
|
|
|
case '[object Number]': |
|
return Object.is(Number(a), Number(b)); |
|
|
|
case '[object Date]': |
|
case '[object Boolean]': |
|
// Coerce dates and booleans to numeric primitive values. Dates are compared by their |
|
// millisecond representations. Note that invalid dates with millisecond representations |
|
// of `NaN` are not equivalent. |
|
return +a == +b; |
|
// RegExps are compared by their source patterns and flags. |
|
|
|
case '[object RegExp]': |
|
return a.source == b.source && a.global == b.global && a.multiline == b.multiline && a.ignoreCase == b.ignoreCase; |
|
} |
|
|
|
if (_typeof(a) != 'object' || _typeof(b) != 'object') { |
|
return false; |
|
} // Use DOM3 method isEqualNode (IE>=9) |
|
|
|
|
|
if (isDomNode(a) && isDomNode(b)) { |
|
return a.isEqualNode(b); |
|
} // Used to detect circular references. |
|
|
|
|
|
var length = aStack.length; |
|
|
|
while (length--) { |
|
// Linear search. Performance is inversely proportional to the number of |
|
// unique nested structures. |
|
// circular references at same depth are equal |
|
// circular reference is not equal to non-circular one |
|
if (aStack[length] === a) { |
|
return bStack[length] === b; |
|
} else if (bStack[length] === b) { |
|
return false; |
|
} |
|
} // Add the first object to the stack of traversed objects. |
|
|
|
|
|
aStack.push(a); |
|
bStack.push(b); |
|
var size = 0; // Recursively compare objects and arrays. |
|
// Compare array lengths to determine if a deep comparison is necessary. |
|
|
|
if (className == '[object Array]') { |
|
size = a.length; |
|
|
|
if (size !== b.length) { |
|
return false; |
|
} |
|
|
|
while (size--) { |
|
result = eq(a[size], b[size], aStack, bStack, customTesters, hasKey); |
|
|
|
if (!result) { |
|
return false; |
|
} |
|
} |
|
} // Deep compare objects. |
|
|
|
|
|
var aKeys = keys(a, className == '[object Array]', hasKey), |
|
key; |
|
size = aKeys.length; // Ensure that both objects contain the same number of properties before comparing deep equality. |
|
|
|
if (keys(b, className == '[object Array]', hasKey).length !== size) { |
|
return false; |
|
} |
|
|
|
while (size--) { |
|
key = aKeys[size]; // Deep compare each member |
|
|
|
result = hasKey(b, key) && eq(a[key], b[key], aStack, bStack, customTesters, hasKey); |
|
|
|
if (!result) { |
|
return false; |
|
} |
|
} // Remove the first object from the stack of traversed objects. |
|
|
|
|
|
aStack.pop(); |
|
bStack.pop(); |
|
return result; |
|
} |
|
|
|
function keys(obj, isArray, hasKey) { |
|
var allKeys = function (o) { |
|
var keys = []; |
|
|
|
for (var key in o) { |
|
if (hasKey(o, key)) { |
|
keys.push(key); |
|
} |
|
} |
|
|
|
return keys.concat(Object.getOwnPropertySymbols(o).filter(function (symbol) { |
|
return Object.getOwnPropertyDescriptor(o, symbol).enumerable; |
|
})); |
|
}(obj); |
|
|
|
if (!isArray) { |
|
return allKeys; |
|
} |
|
|
|
var extraKeys = []; |
|
|
|
if (allKeys.length === 0) { |
|
return allKeys; |
|
} |
|
|
|
for (var x = 0; x < allKeys.length; x++) { |
|
if (_typeof(allKeys[x]) === 'symbol' || !allKeys[x].match(/^[0-9]+$/)) { |
|
extraKeys.push(allKeys[x]); |
|
} |
|
} |
|
|
|
return extraKeys; |
|
} |
|
|
|
function hasDefinedKey(obj, key) { |
|
return hasKey(obj, key) && obj[key] !== undefined; |
|
} |
|
|
|
function hasKey(obj, key) { |
|
return Object.prototype.hasOwnProperty.call(obj, key); |
|
} |
|
|
|
function isA(typeName, value) { |
|
return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; |
|
} |
|
|
|
function isDomNode(obj) { |
|
return obj !== null && _typeof(obj) === 'object' && typeof obj.nodeType === 'number' && typeof obj.nodeName === 'string' && typeof obj.isEqualNode === 'function'; |
|
} |
|
|
|
function fnNameFor(func) { |
|
if (func.name) { |
|
return func.name; |
|
} |
|
|
|
var matches = functionToString.call(func).match(/^(?:async)?\s*function\s*\*?\s*([\w$]+)\s*\(/); |
|
return matches ? matches[1] : '<anonymous>'; |
|
} |
|
|
|
function isUndefined(obj) { |
|
return obj === void 0; |
|
} |
|
|
|
function getPrototype(obj) { |
|
if (Object.getPrototypeOf) { |
|
return Object.getPrototypeOf(obj); |
|
} |
|
|
|
if (obj.constructor.prototype == obj) { |
|
return null; |
|
} |
|
|
|
return obj.constructor.prototype; |
|
} |
|
|
|
function hasProperty(obj, property) { |
|
if (!obj) { |
|
return false; |
|
} |
|
|
|
if (Object.prototype.hasOwnProperty.call(obj, property)) { |
|
return true; |
|
} |
|
|
|
return hasProperty(getPrototype(obj), property); |
|
} // SENTINEL constants are from https://github.com/facebook/immutable-js |
|
|
|
|
|
var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@'; |
|
var IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@'; |
|
var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@'; |
|
|
|
function isImmutableUnorderedKeyed(maybeKeyed) { |
|
return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL] && !maybeKeyed[IS_ORDERED_SENTINEL]); |
|
} |
|
|
|
function isImmutableUnorderedSet(maybeSet) { |
|
return !!(maybeSet && maybeSet[IS_SET_SENTINEL] && !maybeSet[IS_ORDERED_SENTINEL]); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/jestMatchersObject.ts": |
|
/*!***************************************************!*\ |
|
!*** ./packages/expect/src/jestMatchersObject.ts ***! |
|
\***************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(global) { |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.setMatchers = exports.getMatchers = exports.setState = exports.getState = exports.INTERNAL_MATCHER_FLAG = void 0; |
|
|
|
var _asymmetricMatchers = __webpack_require__(/*! ./asymmetricMatchers */ "./packages/expect/src/asymmetricMatchers.ts"); |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } |
|
|
|
function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } |
|
|
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } |
|
|
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } |
|
|
|
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } |
|
|
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } |
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
|
|
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } |
|
|
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } |
|
|
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } |
|
|
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } |
|
|
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } |
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } |
|
|
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } |
|
|
|
// Global matchers object holds the list of available matchers and |
|
// the state, that can hold matcher specific values that change over time. |
|
var JEST_MATCHERS_OBJECT = Symbol.for('$$jest-matchers-object'); // Notes a built-in/internal Jest matcher. |
|
// Jest may override the stack trace of Errors thrown by internal matchers. |
|
|
|
var INTERNAL_MATCHER_FLAG = Symbol.for('$$jest-internal-matcher'); |
|
exports.INTERNAL_MATCHER_FLAG = INTERNAL_MATCHER_FLAG; |
|
|
|
if (!global.hasOwnProperty(JEST_MATCHERS_OBJECT)) { |
|
Object.defineProperty(global, JEST_MATCHERS_OBJECT, { |
|
value: { |
|
matchers: Object.create(null), |
|
state: { |
|
assertionCalls: 0, |
|
expectedAssertionsNumber: null, |
|
isExpectingAssertions: false, |
|
suppressedErrors: [] // errors that are not thrown immediately. |
|
|
|
} |
|
} |
|
}); |
|
} |
|
|
|
var getState = function getState() { |
|
return global[JEST_MATCHERS_OBJECT].state; |
|
}; |
|
|
|
exports.getState = getState; |
|
|
|
var setState = function setState(state) { |
|
Object.assign(global[JEST_MATCHERS_OBJECT].state, state); |
|
}; |
|
|
|
exports.setState = setState; |
|
|
|
var getMatchers = function getMatchers() { |
|
return global[JEST_MATCHERS_OBJECT].matchers; |
|
}; |
|
|
|
exports.getMatchers = getMatchers; |
|
|
|
var setMatchers = function setMatchers(matchers, isInternal, expect) { |
|
Object.keys(matchers).forEach(function (key) { |
|
var matcher = matchers[key]; |
|
Object.defineProperty(matcher, INTERNAL_MATCHER_FLAG, { |
|
value: isInternal |
|
}); |
|
|
|
if (!isInternal) { |
|
// expect is defined |
|
var CustomMatcher = |
|
/*#__PURE__*/ |
|
function (_AsymmetricMatcher) { |
|
_inherits(CustomMatcher, _AsymmetricMatcher); |
|
|
|
function CustomMatcher() { |
|
var _this; |
|
|
|
var inverse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; |
|
|
|
_classCallCheck(this, CustomMatcher); |
|
|
|
for (var _len = arguments.length, sample = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { |
|
sample[_key - 1] = arguments[_key]; |
|
} |
|
|
|
_this = _possibleConstructorReturn(this, _getPrototypeOf(CustomMatcher).call(this, sample)); |
|
_this.inverse = inverse; |
|
return _this; |
|
} |
|
|
|
_createClass(CustomMatcher, [{ |
|
key: "asymmetricMatch", |
|
value: function asymmetricMatch(other) { |
|
var _ref = matcher.apply(void 0, [other].concat(_toConsumableArray(this.sample))), |
|
pass = _ref.pass; |
|
|
|
return this.inverse ? !pass : pass; |
|
} |
|
}, { |
|
key: "toString", |
|
value: function toString() { |
|
return "".concat(this.inverse ? 'not.' : '').concat(key); |
|
} |
|
}, { |
|
key: "getExpectedType", |
|
value: function getExpectedType() { |
|
return 'any'; |
|
} |
|
}, { |
|
key: "toAsymmetricMatcher", |
|
value: function toAsymmetricMatcher() { |
|
return "".concat(this.toString(), "<").concat(this.sample.join(', '), ">"); |
|
} |
|
}]); |
|
|
|
return CustomMatcher; |
|
}(_asymmetricMatchers.AsymmetricMatcher); |
|
|
|
expect[key] = function () { |
|
for (var _len2 = arguments.length, sample = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { |
|
sample[_key2] = arguments[_key2]; |
|
} |
|
|
|
return _construct(CustomMatcher, [false].concat(sample)); |
|
}; |
|
|
|
if (!expect.not) { |
|
expect.not = {}; |
|
} |
|
|
|
expect.not[key] = function () { |
|
for (var _len3 = arguments.length, sample = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { |
|
sample[_key3] = arguments[_key3]; |
|
} |
|
|
|
return _construct(CustomMatcher, [true].concat(sample)); |
|
}; |
|
} |
|
}); |
|
Object.assign(global[JEST_MATCHERS_OBJECT].matchers, matchers); |
|
}; |
|
|
|
exports.setMatchers = setMatchers; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/matchers.ts": |
|
/*!*****************************************!*\ |
|
!*** ./packages/expect/src/matchers.ts ***! |
|
\*****************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
|
|
var _jestGetType = _interopRequireWildcard(__webpack_require__(/*! jest-get-type */ "./packages/jest-get-type/build/index.js")); |
|
|
|
var _jestMatcherUtils = __webpack_require__(/*! jest-matcher-utils */ "./packages/jest-matcher-utils/build/index.js"); |
|
|
|
var _print = __webpack_require__(/*! ./print */ "./packages/expect/src/print.ts"); |
|
|
|
var _utils = __webpack_require__(/*! ./utils */ "./packages/expect/src/utils.ts"); |
|
|
|
var _jasmineUtils = __webpack_require__(/*! ./jasmineUtils */ "./packages/expect/src/jasmineUtils.ts"); |
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
// Omit colon and one or more spaces, so can call getLabelPrinter. |
|
var EXPECTED_LABEL = 'Expected'; |
|
var RECEIVED_LABEL = 'Received'; |
|
var EXPECTED_VALUE_LABEL = 'Expected value'; |
|
var RECEIVED_VALUE_LABEL = 'Received value'; // The optional property of matcher context is true if undefined. |
|
|
|
var isExpand = function isExpand(expand) { |
|
return expand !== false; |
|
}; |
|
|
|
var toStrictEqualTesters = [_utils.iterableEquality, _utils.typeEquality, _utils.sparseArrayEquality]; |
|
var matchers = { |
|
toBe: function toBe(received, expected) { |
|
var _this = this; |
|
|
|
var matcherName = 'toBe'; |
|
var options = { |
|
comment: 'Object.is equality', |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
var pass = Object.is(received, expected); |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected: not ".concat((0, _jestMatcherUtils.printExpected)(expected)); |
|
} : function () { |
|
var expectedType = (0, _jestGetType.default)(expected); |
|
var deepEqualityName = null; |
|
|
|
if (expectedType !== 'map' && expectedType !== 'set') { |
|
// If deep equality passes when referential identity fails, |
|
// but exclude map and set until review of their equality logic. |
|
if ((0, _jasmineUtils.equals)(received, expected, toStrictEqualTesters, true)) { |
|
deepEqualityName = 'toStrictEqual'; |
|
} else if ((0, _jasmineUtils.equals)(received, expected, [_utils.iterableEquality])) { |
|
deepEqualityName = 'toEqual'; |
|
} |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (deepEqualityName !== null ? (0, _jestMatcherUtils.DIM_COLOR)("If it should pass with deep equality, replace \"".concat(matcherName, "\" with \"").concat(deepEqualityName, "\"")) + '\n\n' : '') + (0, _jestMatcherUtils.printDiffOrStringify)(expected, received, EXPECTED_LABEL, RECEIVED_LABEL, isExpand(_this.expand)); |
|
}; // Passing the actual and expected objects so that a custom reporter |
|
// could access them, for example in order to display a custom visual diff, |
|
// or create a different error message |
|
|
|
return { |
|
actual: received, |
|
expected: expected, |
|
message: message, |
|
name: matcherName, |
|
pass: pass |
|
}; |
|
}, |
|
toBeCloseTo: function toBeCloseTo(received, expected) { |
|
var precision = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2; |
|
var matcherName = 'toBeCloseTo'; |
|
var secondArgument = arguments.length === 3 ? 'precision' : undefined; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise, |
|
secondArgument: secondArgument, |
|
secondArgumentColor: function secondArgumentColor(arg) { |
|
return arg; |
|
} |
|
}; |
|
(0, _jestMatcherUtils.ensureNumbers)(received, expected, matcherName, options); |
|
var pass = false; |
|
var expectedDiff = 0; |
|
var receivedDiff = 0; |
|
|
|
if (received === Infinity && expected === Infinity) { |
|
pass = true; // Infinity - Infinity is NaN |
|
} else if (received === -Infinity && expected === -Infinity) { |
|
pass = true; // -Infinity - -Infinity is NaN |
|
} else { |
|
expectedDiff = Math.pow(10, -precision) / 2; |
|
receivedDiff = Math.abs(expected - received); |
|
pass = receivedDiff < expectedDiff; |
|
} |
|
|
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected: not ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + (receivedDiff === 0 ? '' : "Received: ".concat((0, _jestMatcherUtils.printReceived)(received), "\n") + '\n' + "Expected precision: ".concat((0, _jestMatcherUtils.stringify)(precision), "\n") + "Expected difference: not < ".concat((0, _jestMatcherUtils.printExpected)(expectedDiff), "\n") + "Received difference: ".concat((0, _jestMatcherUtils.printReceived)(receivedDiff))); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected: ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received: ".concat((0, _jestMatcherUtils.printReceived)(received), "\n") + '\n' + "Expected precision: ".concat((0, _jestMatcherUtils.stringify)(precision), "\n") + "Expected difference: < ".concat((0, _jestMatcherUtils.printExpected)(expectedDiff), "\n") + "Received difference: ".concat((0, _jestMatcherUtils.printReceived)(receivedDiff)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeDefined: function toBeDefined(received, expected) { |
|
var matcherName = 'toBeDefined'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNoExpected)(expected, matcherName, options); |
|
var pass = received !== void 0; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, '', options) + '\n\n' + "Received: ".concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeFalsy: function toBeFalsy(received, expected) { |
|
var matcherName = 'toBeFalsy'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNoExpected)(expected, matcherName, options); |
|
var pass = !received; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, '', options) + '\n\n' + "Received: ".concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeGreaterThan: function toBeGreaterThan(received, expected) { |
|
var matcherName = 'toBeGreaterThan'; |
|
var isNot = this.isNot; |
|
var options = { |
|
isNot: isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNumbers)(received, expected, matcherName, options); |
|
var pass = received > expected; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected:".concat(isNot ? ' not' : '', " > ").concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received:".concat(isNot ? ' ' : '', " ").concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeGreaterThanOrEqual: function toBeGreaterThanOrEqual(received, expected) { |
|
var matcherName = 'toBeGreaterThanOrEqual'; |
|
var isNot = this.isNot; |
|
var options = { |
|
isNot: isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNumbers)(received, expected, matcherName, options); |
|
var pass = received >= expected; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected:".concat(isNot ? ' not' : '', " >= ").concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received:".concat(isNot ? ' ' : '', " ").concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeInstanceOf: function toBeInstanceOf(received, expected) { |
|
var matcherName = 'toBeInstanceOf'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
|
|
if (typeof expected !== 'function') { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.EXPECTED_COLOR)('expected'), " value must be a function"), (0, _jestMatcherUtils.printWithType)('Expected', expected, _jestMatcherUtils.printExpected))); |
|
} |
|
|
|
var pass = received instanceof expected; |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (0, _print.printExpectedConstructorNameNot)('Expected constructor', expected) + (typeof received.constructor === 'function' && received.constructor !== expected ? (0, _print.printReceivedConstructorNameNot)('Received constructor', received.constructor, expected) : ''); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (0, _print.printExpectedConstructorName)('Expected constructor', expected) + ((0, _jestGetType.isPrimitive)(received) || Object.getPrototypeOf(received) === null ? "\nReceived value has no prototype\nReceived value: ".concat((0, _jestMatcherUtils.printReceived)(received)) : typeof received.constructor !== 'function' ? "\nReceived value: ".concat((0, _jestMatcherUtils.printReceived)(received)) : (0, _print.printReceivedConstructorName)('Received constructor', received.constructor)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeLessThan: function toBeLessThan(received, expected) { |
|
var matcherName = 'toBeLessThan'; |
|
var isNot = this.isNot; |
|
var options = { |
|
isNot: isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNumbers)(received, expected, matcherName, options); |
|
var pass = received < expected; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected:".concat(isNot ? ' not' : '', " < ").concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received:".concat(isNot ? ' ' : '', " ").concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeLessThanOrEqual: function toBeLessThanOrEqual(received, expected) { |
|
var matcherName = 'toBeLessThanOrEqual'; |
|
var isNot = this.isNot; |
|
var options = { |
|
isNot: isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNumbers)(received, expected, matcherName, options); |
|
var pass = received <= expected; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected:".concat(isNot ? ' not' : '', " <= ").concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received:".concat(isNot ? ' ' : '', " ").concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeNaN: function toBeNaN(received, expected) { |
|
var matcherName = 'toBeNaN'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNoExpected)(expected, matcherName, options); |
|
var pass = Number.isNaN(received); |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, '', options) + '\n\n' + "Received: ".concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeNull: function toBeNull(received, expected) { |
|
var matcherName = 'toBeNull'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNoExpected)(expected, matcherName, options); |
|
var pass = received === null; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, '', options) + '\n\n' + "Received: ".concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeTruthy: function toBeTruthy(received, expected) { |
|
var matcherName = 'toBeTruthy'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNoExpected)(expected, matcherName, options); |
|
var pass = !!received; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, '', options) + '\n\n' + "Received: ".concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toBeUndefined: function toBeUndefined(received, expected) { |
|
var matcherName = 'toBeUndefined'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNoExpected)(expected, matcherName, options); |
|
var pass = received === void 0; |
|
|
|
var message = function message() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, '', options) + '\n\n' + "Received: ".concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toContain: function toContain(received, expected) { |
|
var matcherName = 'toContain'; |
|
var isNot = this.isNot; |
|
var options = { |
|
comment: 'indexOf', |
|
isNot: isNot, |
|
promise: this.promise |
|
}; |
|
|
|
if (received == null) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must not be null nor undefined"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
|
|
if (typeof received === 'string') { |
|
var _index = received.indexOf(String(expected)); |
|
|
|
var _pass = _index !== -1; |
|
|
|
var _message = function _message() { |
|
var labelExpected = "Expected ".concat(typeof expected === 'string' ? 'substring' : 'value'); |
|
var labelReceived = 'Received string'; |
|
var printLabel = (0, _jestMatcherUtils.getLabelPrinter)(labelExpected, labelReceived); |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "".concat(printLabel(labelExpected)).concat(isNot ? 'not ' : '').concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "".concat(printLabel(labelReceived)).concat(isNot ? ' ' : '').concat(isNot ? (0, _print.printReceivedStringContainExpectedSubstring)(received, _index, String(expected).length) : (0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: _message, |
|
pass: _pass |
|
}; |
|
} |
|
|
|
var indexable = Array.from(received); |
|
var index = indexable.indexOf(expected); |
|
var pass = index !== -1; |
|
|
|
var message = function message() { |
|
var labelExpected = 'Expected value'; |
|
var labelReceived = "Received ".concat((0, _jestGetType.default)(received)); |
|
var printLabel = (0, _jestMatcherUtils.getLabelPrinter)(labelExpected, labelReceived); |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "".concat(printLabel(labelExpected)).concat(isNot ? 'not ' : '').concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "".concat(printLabel(labelReceived)).concat(isNot ? ' ' : '').concat(isNot && Array.isArray(received) ? (0, _print.printReceivedArrayContainExpectedItem)(received, index) : (0, _jestMatcherUtils.printReceived)(received)) + (!isNot && indexable.findIndex(function (item) { |
|
return (0, _jasmineUtils.equals)(item, expected, [_utils.iterableEquality]); |
|
}) !== -1 ? "\n\n".concat(_jestMatcherUtils.SUGGEST_TO_CONTAIN_EQUAL) : ''); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toContainEqual: function toContainEqual(received, expected) { |
|
var matcherName = 'toContainEqual'; |
|
var isNot = this.isNot; |
|
var options = { |
|
comment: 'deep equality', |
|
isNot: isNot, |
|
promise: this.promise |
|
}; |
|
|
|
if (received == null) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must not be null nor undefined"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
|
|
var index = Array.from(received).findIndex(function (item) { |
|
return (0, _jasmineUtils.equals)(item, expected, [_utils.iterableEquality]); |
|
}); |
|
var pass = index !== -1; |
|
|
|
var message = function message() { |
|
var labelExpected = 'Expected value'; |
|
var labelReceived = "Received ".concat((0, _jestGetType.default)(received)); |
|
var printLabel = (0, _jestMatcherUtils.getLabelPrinter)(labelExpected, labelReceived); |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "".concat(printLabel(labelExpected)).concat(isNot ? 'not ' : '').concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "".concat(printLabel(labelReceived)).concat(isNot ? ' ' : '').concat(isNot && Array.isArray(received) ? (0, _print.printReceivedArrayContainExpectedItem)(received, index) : (0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toEqual: function toEqual(received, expected) { |
|
var _this2 = this; |
|
|
|
var matcherName = 'toEqual'; |
|
var options = { |
|
comment: 'deep equality', |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
var pass = (0, _jasmineUtils.equals)(received, expected, [_utils.iterableEquality]); |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected: not ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + ((0, _jestMatcherUtils.stringify)(expected) !== (0, _jestMatcherUtils.stringify)(received) ? "Received: ".concat((0, _jestMatcherUtils.printReceived)(received)) : ''); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (0, _jestMatcherUtils.printDiffOrStringify)(expected, received, EXPECTED_LABEL, RECEIVED_LABEL, isExpand(_this2.expand)); |
|
}; // Passing the actual and expected objects so that a custom reporter |
|
// could access them, for example in order to display a custom visual diff, |
|
// or create a different error message |
|
|
|
return { |
|
actual: received, |
|
expected: expected, |
|
message: message, |
|
name: matcherName, |
|
pass: pass |
|
}; |
|
}, |
|
toHaveLength: function toHaveLength(received, expected) { |
|
var matcherName = 'toHaveLength'; |
|
var isNot = this.isNot; |
|
var options = { |
|
isNot: isNot, |
|
promise: this.promise |
|
}; |
|
|
|
if (typeof received !== 'string' && (!received || typeof received.length !== 'number')) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must have a length property whose value must be a number"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
|
|
(0, _jestMatcherUtils.ensureExpectedIsNonNegativeInteger)(expected, matcherName, options); |
|
var pass = received.length === expected; |
|
|
|
var message = function message() { |
|
var labelExpected = 'Expected length'; |
|
var labelReceivedLength = 'Received length'; |
|
var labelReceivedValue = "Received ".concat((0, _jestGetType.default)(received)); |
|
var printLabel = (0, _jestMatcherUtils.getLabelPrinter)(labelExpected, labelReceivedLength, labelReceivedValue); |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "".concat(printLabel(labelExpected)).concat(isNot ? 'not ' : '').concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + (isNot ? '' : "".concat(printLabel(labelReceivedLength)).concat((0, _jestMatcherUtils.printReceived)(received.length), "\n")) + "".concat(printLabel(labelReceivedValue)).concat(isNot ? ' ' : '').concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
|
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toHaveProperty: function toHaveProperty(received, expectedPath, expectedValue) { |
|
var _this3 = this; |
|
|
|
var matcherName = 'toHaveProperty'; |
|
var expectedArgument = 'path'; |
|
var hasValue = arguments.length === 3; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise, |
|
secondArgument: hasValue ? 'value' : '' |
|
}; |
|
|
|
if (received === null || received === undefined) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must not be null nor undefined"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
|
|
var expectedPathType = (0, _jestGetType.default)(expectedPath); |
|
|
|
if (expectedPathType !== 'string' && expectedPathType !== 'array') { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options), "".concat((0, _jestMatcherUtils.EXPECTED_COLOR)('expected'), " path must be a string or array"), (0, _jestMatcherUtils.printWithType)('Expected', expectedPath, _jestMatcherUtils.printExpected))); |
|
} |
|
|
|
var expectedPathLength = typeof expectedPath === 'string' ? expectedPath.split('.').length : expectedPath.length; |
|
|
|
if (expectedPathType === 'array' && expectedPathLength === 0) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options), "".concat((0, _jestMatcherUtils.EXPECTED_COLOR)('expected'), " path must not be an empty array"), (0, _jestMatcherUtils.printWithType)('Expected', expectedPath, _jestMatcherUtils.printExpected))); |
|
} |
|
|
|
var result = (0, _utils.getPath)(received, expectedPath); |
|
var lastTraversedObject = result.lastTraversedObject, |
|
hasEndProp = result.hasEndProp; |
|
var receivedPath = result.traversedPath; |
|
var hasCompletePath = receivedPath.length === expectedPathLength; |
|
var receivedValue = hasCompletePath ? result.value : lastTraversedObject; |
|
var pass = hasValue ? (0, _jasmineUtils.equals)(result.value, expectedValue, [_utils.iterableEquality]) : Boolean(hasEndProp); // theoretically undefined if empty path |
|
// Remove type cast if we rewrite getPath as iterative algorithm. |
|
// Delete this unique report if future breaking change |
|
// removes the edge case that expected value undefined |
|
// also matches absence of a property with the key path. |
|
|
|
if (pass && !hasCompletePath) { |
|
var _message2 = function _message2() { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options) + '\n\n' + "Expected path: ".concat((0, _jestMatcherUtils.printExpected)(expectedPath), "\n") + "Received path: ".concat((0, _jestMatcherUtils.printReceived)(expectedPathType === 'array' || receivedPath.length === 0 ? receivedPath : receivedPath.join('.')), "\n\n") + "Expected value: not ".concat((0, _jestMatcherUtils.printExpected)(expectedValue), "\n") + "Received value: ".concat((0, _jestMatcherUtils.printReceived)(receivedValue), "\n\n") + (0, _jestMatcherUtils.DIM_COLOR)('Because a positive assertion passes for expected value undefined if the property does not exist, this negative assertion fails unless the property does exist and has a defined value'); |
|
}; |
|
|
|
return { |
|
message: _message2, |
|
pass: pass |
|
}; |
|
} |
|
|
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options) + '\n\n' + (hasValue ? "Expected path: ".concat((0, _jestMatcherUtils.printExpected)(expectedPath), "\n\n") + "Expected value: not ".concat((0, _jestMatcherUtils.printExpected)(expectedValue)) + ((0, _jestMatcherUtils.stringify)(expectedValue) !== (0, _jestMatcherUtils.stringify)(receivedValue) ? "\nReceived value: ".concat((0, _jestMatcherUtils.printReceived)(receivedValue)) : '') : "Expected path: not ".concat((0, _jestMatcherUtils.printExpected)(expectedPath), "\n\n") + "Received value: ".concat((0, _jestMatcherUtils.printReceived)(receivedValue))); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options) + '\n\n' + "Expected path: ".concat((0, _jestMatcherUtils.printExpected)(expectedPath), "\n") + (hasCompletePath ? '\n' + (0, _jestMatcherUtils.printDiffOrStringify)(expectedValue, receivedValue, EXPECTED_VALUE_LABEL, RECEIVED_VALUE_LABEL, isExpand(_this3.expand)) : "Received path: ".concat((0, _jestMatcherUtils.printReceived)(expectedPathType === 'array' || receivedPath.length === 0 ? receivedPath : receivedPath.join('.')), "\n\n") + (hasValue ? "Expected value: ".concat((0, _jestMatcherUtils.printExpected)(expectedValue), "\n") : '') + "Received value: ".concat((0, _jestMatcherUtils.printReceived)(receivedValue))); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toMatch: function toMatch(received, expected) { |
|
var matcherName = 'toMatch'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
|
|
if (typeof received !== 'string') { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must be a string"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
|
|
if (!(typeof expected === 'string') && !(expected && typeof expected.test === 'function')) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.EXPECTED_COLOR)('expected'), " value must be a string or regular expression"), (0, _jestMatcherUtils.printWithType)('Expected', expected, _jestMatcherUtils.printExpected))); |
|
} |
|
|
|
var pass = typeof expected === 'string' ? received.includes(expected) : expected.test(received); |
|
var message = pass ? function () { |
|
return typeof expected === 'string' ? (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected substring: not ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received string: ".concat((0, _print.printReceivedStringContainExpectedSubstring)(received, received.indexOf(expected), expected.length)) : (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected pattern: not ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received string: ".concat((0, _print.printReceivedStringContainExpectedResult)(received, typeof expected.exec === 'function' ? expected.exec(received) : null)); |
|
} : function () { |
|
var labelExpected = "Expected ".concat(typeof expected === 'string' ? 'substring' : 'pattern'); |
|
var labelReceived = 'Received string'; |
|
var printLabel = (0, _jestMatcherUtils.getLabelPrinter)(labelExpected, labelReceived); |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "".concat(printLabel(labelExpected)).concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "".concat(printLabel(labelReceived)).concat((0, _jestMatcherUtils.printReceived)(received)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toMatchObject: function toMatchObject(received, expected) { |
|
var _this4 = this; |
|
|
|
var matcherName = 'toMatchObject'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
|
|
if (_typeof(received) !== 'object' || received === null) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must be a non-null object"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
|
|
if (_typeof(expected) !== 'object' || expected === null) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.EXPECTED_COLOR)('expected'), " value must be a non-null object"), (0, _jestMatcherUtils.printWithType)('Expected', expected, _jestMatcherUtils.printExpected))); |
|
} |
|
|
|
var pass = (0, _jasmineUtils.equals)(received, expected, [_utils.iterableEquality, _utils.subsetEquality]); |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected: not ".concat((0, _jestMatcherUtils.printExpected)(expected)) + ((0, _jestMatcherUtils.stringify)(expected) !== (0, _jestMatcherUtils.stringify)(received) ? "\nReceived: ".concat((0, _jestMatcherUtils.printReceived)(received)) : ''); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (0, _jestMatcherUtils.printDiffOrStringify)(expected, (0, _utils.getObjectSubset)(received, expected), EXPECTED_LABEL, RECEIVED_LABEL, isExpand(_this4.expand)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}, |
|
toStrictEqual: function toStrictEqual(received, expected) { |
|
var _this5 = this; |
|
|
|
var matcherName = 'toStrictEqual'; |
|
var options = { |
|
comment: 'deep equality', |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
var pass = (0, _jasmineUtils.equals)(received, expected, toStrictEqualTesters, true); |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + "Expected: not ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + ((0, _jestMatcherUtils.stringify)(expected) !== (0, _jestMatcherUtils.stringify)(received) ? "Received: ".concat((0, _jestMatcherUtils.printReceived)(received)) : ''); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (0, _jestMatcherUtils.printDiffOrStringify)(expected, received, EXPECTED_LABEL, RECEIVED_LABEL, isExpand(_this5.expand)); |
|
}; // Passing the actual and expected objects so that a custom reporter |
|
// could access them, for example in order to display a custom visual diff, |
|
// or create a different error message |
|
|
|
return { |
|
actual: received, |
|
expected: expected, |
|
message: message, |
|
name: matcherName, |
|
pass: pass |
|
}; |
|
} |
|
}; |
|
var _default = matchers; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/print.ts": |
|
/*!**************************************!*\ |
|
!*** ./packages/expect/src/print.ts ***! |
|
\**************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.printReceivedConstructorNameNot = exports.printReceivedConstructorName = exports.printExpectedConstructorNameNot = exports.printExpectedConstructorName = exports.printReceivedArrayContainExpectedItem = exports.printReceivedStringContainExpectedResult = exports.printReceivedStringContainExpectedSubstring = void 0; |
|
|
|
var _jestMatcherUtils = __webpack_require__(/*! jest-matcher-utils */ "./packages/jest-matcher-utils/build/index.js"); |
|
|
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
*/ |
|
// Format substring but do not enclose in double quote marks. |
|
// The replacement is compatible with pretty-format package. |
|
var printSubstring = function printSubstring(val) { |
|
return val.replace(/"|\\/g, '\\$&'); |
|
}; |
|
|
|
var printReceivedStringContainExpectedSubstring = function printReceivedStringContainExpectedSubstring(received, start, length) { |
|
return (0, _jestMatcherUtils.RECEIVED_COLOR)('"' + printSubstring(received.slice(0, start)) + (0, _jestMatcherUtils.INVERTED_COLOR)(printSubstring(received.slice(start, start + length))) + printSubstring(received.slice(start + length)) + '"'); |
|
}; |
|
|
|
exports.printReceivedStringContainExpectedSubstring = printReceivedStringContainExpectedSubstring; |
|
|
|
var printReceivedStringContainExpectedResult = function printReceivedStringContainExpectedResult(received, result) { |
|
return result === null ? (0, _jestMatcherUtils.printReceived)(received) : printReceivedStringContainExpectedSubstring(received, result.index, result[0].length); |
|
}; // The serialized array is compatible with pretty-format package min option. |
|
// However, items have default stringify depth (instead of depth - 1) |
|
// so expected item looks consistent by itself and enclosed in the array. |
|
|
|
|
|
exports.printReceivedStringContainExpectedResult = printReceivedStringContainExpectedResult; |
|
|
|
var printReceivedArrayContainExpectedItem = function printReceivedArrayContainExpectedItem(received, index) { |
|
return (0, _jestMatcherUtils.RECEIVED_COLOR)('[' + received.map(function (item, i) { |
|
var stringified = (0, _jestMatcherUtils.stringify)(item); |
|
return i === index ? (0, _jestMatcherUtils.INVERTED_COLOR)(stringified) : stringified; |
|
}).join(', ') + ']'); |
|
}; |
|
|
|
exports.printReceivedArrayContainExpectedItem = printReceivedArrayContainExpectedItem; |
|
|
|
var printExpectedConstructorName = function printExpectedConstructorName(label, expected) { |
|
return printConstructorName(label, expected, false, true) + '\n'; |
|
}; |
|
|
|
exports.printExpectedConstructorName = printExpectedConstructorName; |
|
|
|
var printExpectedConstructorNameNot = function printExpectedConstructorNameNot(label, expected) { |
|
return printConstructorName(label, expected, true, true) + '\n'; |
|
}; |
|
|
|
exports.printExpectedConstructorNameNot = printExpectedConstructorNameNot; |
|
|
|
var printReceivedConstructorName = function printReceivedConstructorName(label, received) { |
|
return printConstructorName(label, received, false, false) + '\n'; |
|
}; // Do not call function if received is equal to expected. |
|
|
|
|
|
exports.printReceivedConstructorName = printReceivedConstructorName; |
|
|
|
var printReceivedConstructorNameNot = function printReceivedConstructorNameNot(label, received, expected) { |
|
return typeof expected.name === 'string' && expected.name.length !== 0 && typeof received.name === 'string' && received.name.length !== 0 ? printConstructorName(label, received, true, false) + " ".concat(Object.getPrototypeOf(received) === expected ? 'extends' : 'extends … extends', " ").concat((0, _jestMatcherUtils.EXPECTED_COLOR)(expected.name)) + '\n' : printConstructorName(label, received, false, false) + '\n'; |
|
}; |
|
|
|
exports.printReceivedConstructorNameNot = printReceivedConstructorNameNot; |
|
|
|
var printConstructorName = function printConstructorName(label, constructor, isNot, isExpected) { |
|
return typeof constructor.name !== 'string' ? "".concat(label, " name is not a string") : constructor.name.length === 0 ? "".concat(label, " name is an empty string") : "".concat(label, ": ").concat(!isNot ? '' : isExpected ? 'not ' : ' ').concat(isExpected ? (0, _jestMatcherUtils.EXPECTED_COLOR)(constructor.name) : (0, _jestMatcherUtils.RECEIVED_COLOR)(constructor.name)); |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/spyMatchers.ts": |
|
/*!********************************************!*\ |
|
!*** ./packages/expect/src/spyMatchers.ts ***! |
|
\********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
|
|
var _jestGetType = _interopRequireWildcard(__webpack_require__(/*! jest-get-type */ "./packages/jest-get-type/build/index.js")); |
|
|
|
var _jestMatcherUtils = __webpack_require__(/*! jest-matcher-utils */ "./packages/jest-matcher-utils/build/index.js"); |
|
|
|
var _jasmineUtils = __webpack_require__(/*! ./jasmineUtils */ "./packages/expect/src/jasmineUtils.ts"); |
|
|
|
var _utils = __webpack_require__(/*! ./utils */ "./packages/expect/src/utils.ts"); |
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } |
|
|
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } |
|
|
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } |
|
|
|
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } |
|
|
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } |
|
|
|
// The optional property of matcher context is true if undefined. |
|
var isExpand = function isExpand(expand) { |
|
return expand !== false; |
|
}; |
|
|
|
var PRINT_LIMIT = 3; |
|
var NO_ARGUMENTS = 'called with 0 arguments'; |
|
|
|
var printExpectedArgs = function printExpectedArgs(expected) { |
|
return expected.length === 0 ? NO_ARGUMENTS : expected.map(function (arg) { |
|
return (0, _jestMatcherUtils.printExpected)(arg); |
|
}).join(', '); |
|
}; |
|
|
|
var printReceivedArgs = function printReceivedArgs(received, expected) { |
|
return received.length === 0 ? NO_ARGUMENTS : received.map(function (arg, i) { |
|
return Array.isArray(expected) && i < expected.length && isEqualValue(expected[i], arg) ? printCommon(arg) : (0, _jestMatcherUtils.printReceived)(arg); |
|
}).join(', '); |
|
}; |
|
|
|
var printCommon = function printCommon(val) { |
|
return (0, _jestMatcherUtils.DIM_COLOR)((0, _jestMatcherUtils.stringify)(val)); |
|
}; |
|
|
|
var isEqualValue = function isEqualValue(expected, received) { |
|
return (0, _jasmineUtils.equals)(expected, received, [_utils.iterableEquality]); |
|
}; |
|
|
|
var isEqualCall = function isEqualCall(expected, received) { |
|
return isEqualValue(expected, received); |
|
}; |
|
|
|
var isEqualReturn = function isEqualReturn(expected, result) { |
|
return result.type === 'return' && isEqualValue(expected, result.value); |
|
}; |
|
|
|
var countReturns = function countReturns(results) { |
|
return results.reduce(function (n, result) { |
|
return result.type === 'return' ? n + 1 : n; |
|
}, 0); |
|
}; |
|
|
|
var printNumberOfReturns = function printNumberOfReturns(countReturns, countCalls) { |
|
return "\nNumber of returns: ".concat((0, _jestMatcherUtils.printReceived)(countReturns)) + (countCalls !== countReturns ? "\nNumber of calls: ".concat((0, _jestMatcherUtils.printReceived)(countCalls)) : ''); |
|
}; |
|
|
|
// Given a label, return a function which given a string, |
|
// right-aligns it preceding the colon in the label. |
|
var getRightAlignedPrinter = function getRightAlignedPrinter(label) { |
|
// Assume that the label contains a colon. |
|
var index = label.indexOf(':'); |
|
var suffix = label.slice(index); |
|
return function (string, isExpectedCall) { |
|
return (isExpectedCall ? '->' + ' '.repeat(Math.max(0, index - 2 - string.length)) : ' '.repeat(Math.max(index - string.length))) + string + suffix; |
|
}; |
|
}; |
|
|
|
var printReceivedCallsNegative = function printReceivedCallsNegative(expected, indexedCalls, isOnlyCall, iExpectedCall) { |
|
if (indexedCalls.length === 0) { |
|
return ''; |
|
} |
|
|
|
var label = 'Received: '; |
|
|
|
if (isOnlyCall) { |
|
return label + printReceivedArgs(indexedCalls[0], expected) + '\n'; |
|
} |
|
|
|
var printAligned = getRightAlignedPrinter(label); |
|
return 'Received\n' + indexedCalls.reduce(function (printed, _ref) { |
|
var _ref2 = _slicedToArray(_ref, 2), |
|
i = _ref2[0], |
|
args = _ref2[1]; |
|
|
|
return printed + printAligned(String(i + 1), i === iExpectedCall) + printReceivedArgs(args, expected) + '\n'; |
|
}, ''); |
|
}; |
|
|
|
var printExpectedReceivedCallsPositive = function printExpectedReceivedCallsPositive(expected, indexedCalls, expand, isOnlyCall, iExpectedCall) { |
|
var expectedLine = "Expected: ".concat(printExpectedArgs(expected), "\n"); |
|
|
|
if (indexedCalls.length === 0) { |
|
return expectedLine; |
|
} |
|
|
|
var label = 'Received: '; |
|
|
|
if (isOnlyCall && (iExpectedCall === 0 || iExpectedCall === undefined)) { |
|
var received = indexedCalls[0][1]; |
|
|
|
if (isLineDiffableCall(expected, received)) { |
|
// Display diff without indentation. |
|
var lines = [(0, _jestMatcherUtils.EXPECTED_COLOR)('- Expected'), (0, _jestMatcherUtils.RECEIVED_COLOR)('+ Received'), '']; |
|
var length = Math.max(expected.length, received.length); |
|
|
|
for (var i = 0; i < length; i += 1) { |
|
if (i < expected.length && i < received.length) { |
|
if (isEqualValue(expected[i], received[i])) { |
|
lines.push(" ".concat(printCommon(received[i]), ",")); |
|
continue; |
|
} |
|
|
|
if (isLineDiffableArg(expected[i], received[i])) { |
|
var difference = (0, _jestMatcherUtils.diff)(expected[i], received[i], { |
|
expand: expand |
|
}); |
|
|
|
if (typeof difference === 'string' && difference.includes('- Expected') && difference.includes('+ Received')) { |
|
// Omit annotation in case multiple args have diff. |
|
lines.push(difference.split('\n').slice(3).join('\n') + ','); |
|
continue; |
|
} |
|
} |
|
} |
|
|
|
if (i < expected.length) { |
|
lines.push((0, _jestMatcherUtils.EXPECTED_COLOR)('- ' + (0, _jestMatcherUtils.stringify)(expected[i])) + ','); |
|
} |
|
|
|
if (i < received.length) { |
|
lines.push((0, _jestMatcherUtils.RECEIVED_COLOR)('+ ' + (0, _jestMatcherUtils.stringify)(received[i])) + ','); |
|
} |
|
} |
|
|
|
return lines.join('\n') + '\n'; |
|
} |
|
|
|
return expectedLine + label + printReceivedArgs(received, expected) + '\n'; |
|
} |
|
|
|
var printAligned = getRightAlignedPrinter(label); |
|
return expectedLine + 'Received\n' + indexedCalls.reduce(function (printed, _ref3) { |
|
var _ref4 = _slicedToArray(_ref3, 2), |
|
i = _ref4[0], |
|
received = _ref4[1]; |
|
|
|
var aligned = printAligned(String(i + 1), i === iExpectedCall); |
|
return printed + ((i === iExpectedCall || iExpectedCall === undefined) && isLineDiffableCall(expected, received) ? aligned.replace(': ', '\n') + printDiffCall(expected, received, expand) : aligned + printReceivedArgs(received, expected)) + '\n'; |
|
}, ''); |
|
}; |
|
|
|
var indentation = 'Received'.replace(/\w/g, ' '); |
|
|
|
var printDiffCall = function printDiffCall(expected, received, expand) { |
|
return received.map(function (arg, i) { |
|
if (i < expected.length) { |
|
if (isEqualValue(expected[i], arg)) { |
|
return indentation + ' ' + printCommon(arg) + ','; |
|
} |
|
|
|
if (isLineDiffableArg(expected[i], arg)) { |
|
var difference = (0, _jestMatcherUtils.diff)(expected[i], arg, { |
|
expand: expand |
|
}); |
|
|
|
if (typeof difference === 'string' && difference.includes('- Expected') && difference.includes('+ Received')) { |
|
// Display diff with indentation. |
|
return difference.split('\n').slice(3).map(function (line) { |
|
return indentation + line; |
|
}).join('\n') + ','; |
|
} |
|
} |
|
} // Display + only if received arg has no corresponding expected arg. |
|
|
|
|
|
return indentation + (i < expected.length ? ' ' + (0, _jestMatcherUtils.printReceived)(arg) : (0, _jestMatcherUtils.RECEIVED_COLOR)('+ ' + (0, _jestMatcherUtils.stringify)(arg))) + ','; |
|
}).join('\n'); |
|
}; |
|
|
|
var isLineDiffableCall = function isLineDiffableCall(expected, received) { |
|
return expected.some(function (arg, i) { |
|
return i < received.length && isLineDiffableArg(arg, received[i]); |
|
}); |
|
}; // Almost redundant with function in jest-matcher-utils, |
|
// except no line diff for any strings. |
|
|
|
|
|
var isLineDiffableArg = function isLineDiffableArg(expected, received) { |
|
var expectedType = (0, _jestGetType.default)(expected); |
|
var receivedType = (0, _jestGetType.default)(received); |
|
|
|
if (expectedType !== receivedType) { |
|
return false; |
|
} |
|
|
|
if ((0, _jestGetType.isPrimitive)(expected)) { |
|
return false; |
|
} |
|
|
|
if (expectedType === 'date' || expectedType === 'function' || expectedType === 'regexp') { |
|
return false; |
|
} |
|
|
|
if (expected instanceof Error && received instanceof Error) { |
|
return false; |
|
} |
|
|
|
if (expectedType === 'object' && typeof expected.asymmetricMatch === 'function') { |
|
return false; |
|
} |
|
|
|
if (receivedType === 'object' && typeof received.asymmetricMatch === 'function') { |
|
return false; |
|
} |
|
|
|
return true; |
|
}; |
|
|
|
var printResult = function printResult(result, expected) { |
|
return result.type === 'throw' ? 'function call threw an error' : result.type === 'incomplete' ? 'function call has not returned yet' : isEqualValue(expected, result.value) ? printCommon(result.value) : (0, _jestMatcherUtils.printReceived)(result.value); |
|
}; |
|
|
|
// Return either empty string or one line per indexed result, |
|
// so additional empty line can separate from `Number of returns` which follows. |
|
var printReceivedResults = function printReceivedResults(label, expected, indexedResults, isOnlyCall, iExpectedCall) { |
|
if (indexedResults.length === 0) { |
|
return ''; |
|
} |
|
|
|
if (isOnlyCall && (iExpectedCall === 0 || iExpectedCall === undefined)) { |
|
return label + printResult(indexedResults[0][1], expected) + '\n'; |
|
} |
|
|
|
var printAligned = getRightAlignedPrinter(label); |
|
return label.replace(':', '').trim() + '\n' + indexedResults.reduce(function (printed, _ref5) { |
|
var _ref6 = _slicedToArray(_ref5, 2), |
|
i = _ref6[0], |
|
result = _ref6[1]; |
|
|
|
return printed + printAligned(String(i + 1), i === iExpectedCall) + printResult(result, expected) + '\n'; |
|
}, ''); |
|
}; |
|
|
|
var createToBeCalledMatcher = function createToBeCalledMatcher(matcherName) { |
|
return function (received, expected) { |
|
var expectedArgument = ''; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNoExpected)(expected, matcherName, options); |
|
ensureMockOrSpy(received, matcherName, expectedArgument, options); |
|
var receivedIsSpy = isSpy(received); |
|
var receivedName = receivedIsSpy ? 'spy' : received.getMockName(); |
|
var count = receivedIsSpy ? received.calls.count() : received.mock.calls.length; |
|
var calls = receivedIsSpy ? received.calls.all().map(function (x) { |
|
return x.args; |
|
}) : received.mock.calls; |
|
var pass = count > 0; |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected number of calls: ".concat((0, _jestMatcherUtils.printExpected)(0), "\n") + "Received number of calls: ".concat((0, _jestMatcherUtils.printReceived)(count), "\n\n") + calls.reduce(function (lines, args, i) { |
|
if (lines.length < PRINT_LIMIT) { |
|
lines.push("".concat(i + 1, ": ").concat(printReceivedArgs(args))); |
|
} |
|
|
|
return lines; |
|
}, []).join('\n'); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected number of calls: >= ".concat((0, _jestMatcherUtils.printExpected)(1), "\n") + "Received number of calls: ".concat((0, _jestMatcherUtils.printReceived)(count)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createToReturnMatcher = function createToReturnMatcher(matcherName) { |
|
return function (received, expected) { |
|
var expectedArgument = ''; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureNoExpected)(expected, matcherName, options); |
|
ensureMock(received, matcherName, expectedArgument, options); |
|
var receivedName = received.getMockName(); // Count return values that correspond only to calls that returned |
|
|
|
var count = received.mock.results.reduce(function (n, result) { |
|
return result.type === 'return' ? n + 1 : n; |
|
}, 0); |
|
var pass = count > 0; |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected number of returns: ".concat((0, _jestMatcherUtils.printExpected)(0), "\n") + "Received number of returns: ".concat((0, _jestMatcherUtils.printReceived)(count), "\n\n") + received.mock.results.reduce(function (lines, result, i) { |
|
if (result.type === 'return' && lines.length < PRINT_LIMIT) { |
|
lines.push("".concat(i + 1, ": ").concat((0, _jestMatcherUtils.printReceived)(result.value))); |
|
} |
|
|
|
return lines; |
|
}, []).join('\n') + (received.mock.calls.length !== count ? "\n\nReceived number of calls: ".concat((0, _jestMatcherUtils.printReceived)(received.mock.calls.length)) : ''); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected number of returns: >= ".concat((0, _jestMatcherUtils.printExpected)(1), "\n") + "Received number of returns: ".concat((0, _jestMatcherUtils.printReceived)(count)) + (received.mock.calls.length !== count ? "\nReceived number of calls: ".concat((0, _jestMatcherUtils.printReceived)(received.mock.calls.length)) : ''); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createToBeCalledTimesMatcher = function createToBeCalledTimesMatcher(matcherName) { |
|
return function (received, expected) { |
|
var expectedArgument = 'expected'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureExpectedIsNumber)(expected, matcherName, options); |
|
ensureMockOrSpy(received, matcherName, expectedArgument, options); |
|
var receivedIsSpy = isSpy(received); |
|
var receivedName = receivedIsSpy ? 'spy' : received.getMockName(); |
|
var count = receivedIsSpy ? received.calls.count() : received.mock.calls.length; |
|
var pass = count === expected; |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + "\n\n" + "Expected number of calls: not ".concat((0, _jestMatcherUtils.printExpected)(expected)); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected number of calls: ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received number of calls: ".concat((0, _jestMatcherUtils.printReceived)(count)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createToReturnTimesMatcher = function createToReturnTimesMatcher(matcherName) { |
|
return function (received, expected) { |
|
var expectedArgument = 'expected'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
(0, _jestMatcherUtils.ensureExpectedIsNumber)(expected, matcherName, options); |
|
ensureMock(received, matcherName, expectedArgument, options); |
|
var receivedName = received.getMockName(); // Count return values that correspond only to calls that returned |
|
|
|
var count = received.mock.results.reduce(function (n, result) { |
|
return result.type === 'return' ? n + 1 : n; |
|
}, 0); |
|
var pass = count === expected; |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + "\n\n" + "Expected number of returns: not ".concat((0, _jestMatcherUtils.printExpected)(expected)) + (received.mock.calls.length !== count ? "\n\nReceived number of calls: ".concat((0, _jestMatcherUtils.printReceived)(received.mock.calls.length)) : ''); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected number of returns: ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + "Received number of returns: ".concat((0, _jestMatcherUtils.printReceived)(count)) + (received.mock.calls.length !== count ? "\nReceived number of calls: ".concat((0, _jestMatcherUtils.printReceived)(received.mock.calls.length)) : ''); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createToBeCalledWithMatcher = function createToBeCalledWithMatcher(matcherName) { |
|
return function (received) { |
|
var _this = this; |
|
|
|
for (var _len = arguments.length, expected = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { |
|
expected[_key - 1] = arguments[_key]; |
|
} |
|
|
|
var expectedArgument = '...expected'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
ensureMockOrSpy(received, matcherName, expectedArgument, options); |
|
var receivedIsSpy = isSpy(received); |
|
var receivedName = receivedIsSpy ? 'spy' : received.getMockName(); |
|
var calls = receivedIsSpy ? received.calls.all().map(function (x) { |
|
return x.args; |
|
}) : received.mock.calls; |
|
var pass = calls.some(function (call) { |
|
return isEqualCall(expected, call); |
|
}); |
|
var message = pass ? function () { |
|
// Some examples of calls that are equal to expected value. |
|
var indexedCalls = []; |
|
var i = 0; |
|
|
|
while (i < calls.length && indexedCalls.length < PRINT_LIMIT) { |
|
if (isEqualCall(expected, calls[i])) { |
|
indexedCalls.push([i, calls[i]]); |
|
} |
|
|
|
i += 1; |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected: not ".concat(printExpectedArgs(expected), "\n") + (calls.length === 1 && (0, _jestMatcherUtils.stringify)(calls[0]) === (0, _jestMatcherUtils.stringify)(expected) ? '' : printReceivedCallsNegative(expected, indexedCalls, calls.length === 1)) + "\nNumber of calls: ".concat((0, _jestMatcherUtils.printReceived)(calls.length)); |
|
} : function () { |
|
// Some examples of calls that are not equal to expected value. |
|
var indexedCalls = []; |
|
var i = 0; |
|
|
|
while (i < calls.length && indexedCalls.length < PRINT_LIMIT) { |
|
indexedCalls.push([i, calls[i]]); |
|
i += 1; |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + printExpectedReceivedCallsPositive(expected, indexedCalls, isExpand(_this.expand), calls.length === 1) + "\nNumber of calls: ".concat((0, _jestMatcherUtils.printReceived)(calls.length)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createToReturnWithMatcher = function createToReturnWithMatcher(matcherName) { |
|
return function (received, expected) { |
|
var expectedArgument = 'expected'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
ensureMock(received, matcherName, expectedArgument, options); |
|
var receivedName = received.getMockName(); |
|
var _received$mock = received.mock, |
|
calls = _received$mock.calls, |
|
results = _received$mock.results; |
|
var pass = results.some(function (result) { |
|
return isEqualReturn(expected, result); |
|
}); |
|
var message = pass ? function () { |
|
// Some examples of results that are equal to expected value. |
|
var indexedResults = []; |
|
var i = 0; |
|
|
|
while (i < results.length && indexedResults.length < PRINT_LIMIT) { |
|
if (isEqualReturn(expected, results[i])) { |
|
indexedResults.push([i, results[i]]); |
|
} |
|
|
|
i += 1; |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected: not ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + (results.length === 1 && results[0].type === 'return' && (0, _jestMatcherUtils.stringify)(results[0].value) === (0, _jestMatcherUtils.stringify)(expected) ? '' : printReceivedResults('Received: ', expected, indexedResults, results.length === 1)) + printNumberOfReturns(countReturns(results), calls.length); |
|
} : function () { |
|
// Some examples of results that are not equal to expected value. |
|
var indexedResults = []; |
|
var i = 0; |
|
|
|
while (i < results.length && indexedResults.length < PRINT_LIMIT) { |
|
indexedResults.push([i, results[i]]); |
|
i += 1; |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected: ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + printReceivedResults('Received: ', expected, indexedResults, results.length === 1) + printNumberOfReturns(countReturns(results), calls.length); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createLastCalledWithMatcher = function createLastCalledWithMatcher(matcherName) { |
|
return function (received) { |
|
var _this2 = this; |
|
|
|
for (var _len2 = arguments.length, expected = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { |
|
expected[_key2 - 1] = arguments[_key2]; |
|
} |
|
|
|
var expectedArgument = '...expected'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
ensureMockOrSpy(received, matcherName, expectedArgument, options); |
|
var receivedIsSpy = isSpy(received); |
|
var receivedName = receivedIsSpy ? 'spy' : received.getMockName(); |
|
var calls = receivedIsSpy ? received.calls.all().map(function (x) { |
|
return x.args; |
|
}) : received.mock.calls; |
|
var iLast = calls.length - 1; |
|
var pass = iLast >= 0 && isEqualCall(expected, calls[iLast]); |
|
var message = pass ? function () { |
|
var indexedCalls = []; |
|
|
|
if (iLast > 0) { |
|
// Display preceding call as context. |
|
indexedCalls.push([iLast - 1, calls[iLast - 1]]); |
|
} |
|
|
|
indexedCalls.push([iLast, calls[iLast]]); |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected: not ".concat(printExpectedArgs(expected), "\n") + (calls.length === 1 && (0, _jestMatcherUtils.stringify)(calls[0]) === (0, _jestMatcherUtils.stringify)(expected) ? '' : printReceivedCallsNegative(expected, indexedCalls, calls.length === 1, iLast)) + "\nNumber of calls: ".concat((0, _jestMatcherUtils.printReceived)(calls.length)); |
|
} : function () { |
|
var indexedCalls = []; |
|
|
|
if (iLast >= 0) { |
|
if (iLast > 0) { |
|
var i = iLast - 1; // Is there a preceding call that is equal to expected args? |
|
|
|
while (i >= 0 && !isEqualCall(expected, calls[i])) { |
|
i -= 1; |
|
} |
|
|
|
if (i < 0) { |
|
i = iLast - 1; // otherwise, preceding call |
|
} |
|
|
|
indexedCalls.push([i, calls[i]]); |
|
} |
|
|
|
indexedCalls.push([iLast, calls[iLast]]); |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + printExpectedReceivedCallsPositive(expected, indexedCalls, isExpand(_this2.expand), calls.length === 1, iLast) + "\nNumber of calls: ".concat((0, _jestMatcherUtils.printReceived)(calls.length)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createLastReturnedMatcher = function createLastReturnedMatcher(matcherName) { |
|
return function (received, expected) { |
|
var expectedArgument = 'expected'; |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
ensureMock(received, matcherName, expectedArgument, options); |
|
var receivedName = received.getMockName(); |
|
var _received$mock2 = received.mock, |
|
calls = _received$mock2.calls, |
|
results = _received$mock2.results; |
|
var iLast = results.length - 1; |
|
var pass = iLast >= 0 && isEqualReturn(expected, results[iLast]); |
|
var message = pass ? function () { |
|
var indexedResults = []; |
|
|
|
if (iLast > 0) { |
|
// Display preceding result as context. |
|
indexedResults.push([iLast - 1, results[iLast - 1]]); |
|
} |
|
|
|
indexedResults.push([iLast, results[iLast]]); |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected: not ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + (results.length === 1 && results[0].type === 'return' && (0, _jestMatcherUtils.stringify)(results[0].value) === (0, _jestMatcherUtils.stringify)(expected) ? '' : printReceivedResults('Received: ', expected, indexedResults, results.length === 1, iLast)) + printNumberOfReturns(countReturns(results), calls.length); |
|
} : function () { |
|
var indexedResults = []; |
|
|
|
if (iLast >= 0) { |
|
if (iLast > 0) { |
|
var i = iLast - 1; // Is there a preceding result that is equal to expected value? |
|
|
|
while (i >= 0 && !isEqualReturn(expected, results[i])) { |
|
i -= 1; |
|
} |
|
|
|
if (i < 0) { |
|
i = iLast - 1; // otherwise, preceding result |
|
} |
|
|
|
indexedResults.push([i, results[i]]); |
|
} |
|
|
|
indexedResults.push([iLast, results[iLast]]); |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "Expected: ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + printReceivedResults('Received: ', expected, indexedResults, results.length === 1, iLast) + printNumberOfReturns(countReturns(results), calls.length); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createNthCalledWithMatcher = function createNthCalledWithMatcher(matcherName) { |
|
return function (received, nth) { |
|
var _this3 = this; |
|
|
|
for (var _len3 = arguments.length, expected = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) { |
|
expected[_key3 - 2] = arguments[_key3]; |
|
} |
|
|
|
var expectedArgument = 'n'; |
|
var options = { |
|
expectedColor: function expectedColor(arg) { |
|
return arg; |
|
}, |
|
isNot: this.isNot, |
|
promise: this.promise, |
|
secondArgument: '...expected' |
|
}; |
|
ensureMockOrSpy(received, matcherName, expectedArgument, options); |
|
|
|
if (!Number.isSafeInteger(nth) || nth < 1) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options), "".concat(expectedArgument, " must be a positive integer"), (0, _jestMatcherUtils.printWithType)(expectedArgument, nth, _jestMatcherUtils.stringify))); |
|
} |
|
|
|
var receivedIsSpy = isSpy(received); |
|
var receivedName = receivedIsSpy ? 'spy' : received.getMockName(); |
|
var calls = receivedIsSpy ? received.calls.all().map(function (x) { |
|
return x.args; |
|
}) : received.mock.calls; |
|
var length = calls.length; |
|
var iNth = nth - 1; |
|
var pass = iNth < length && isEqualCall(expected, calls[iNth]); |
|
var message = pass ? function () { |
|
// Display preceding and following calls, |
|
var indexedCalls = []; |
|
|
|
if (iNth - 1 >= 0) { |
|
indexedCalls.push([iNth - 1, calls[iNth - 1]]); |
|
} |
|
|
|
indexedCalls.push([iNth, calls[iNth]]); |
|
|
|
if (iNth + 1 < length) { |
|
indexedCalls.push([iNth + 1, calls[iNth + 1]]); |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "n: ".concat(nth, "\n") + "Expected: not ".concat(printExpectedArgs(expected), "\n") + (calls.length === 1 && (0, _jestMatcherUtils.stringify)(calls[0]) === (0, _jestMatcherUtils.stringify)(expected) ? '' : printReceivedCallsNegative(expected, indexedCalls, calls.length === 1, iNth)) + "\nNumber of calls: ".concat((0, _jestMatcherUtils.printReceived)(calls.length)); |
|
} : function () { |
|
// Display preceding and following calls: |
|
// * nearest call that is equal to expected args |
|
// * otherwise, adjacent call |
|
var indexedCalls = []; |
|
|
|
if (iNth < length) { |
|
if (iNth - 1 >= 0) { |
|
var i = iNth - 1; // Is there a preceding call that is equal to expected args? |
|
|
|
while (i >= 0 && !isEqualCall(expected, calls[i])) { |
|
i -= 1; |
|
} |
|
|
|
if (i < 0) { |
|
i = iNth - 1; // otherwise, adjacent call |
|
} |
|
|
|
indexedCalls.push([i, calls[i]]); |
|
} |
|
|
|
indexedCalls.push([iNth, calls[iNth]]); |
|
|
|
if (iNth + 1 < length) { |
|
var _i2 = iNth + 1; // Is there a following call that is equal to expected args? |
|
|
|
|
|
while (_i2 < length && !isEqualCall(expected, calls[_i2])) { |
|
_i2 += 1; |
|
} |
|
|
|
if (_i2 >= length) { |
|
_i2 = iNth + 1; // otherwise, adjacent call |
|
} |
|
|
|
indexedCalls.push([_i2, calls[_i2]]); |
|
} |
|
} else if (length > 0) { |
|
// The number of received calls is fewer than the expected number. |
|
var _i3 = length - 1; // Is there a call that is equal to expected args? |
|
|
|
|
|
while (_i3 >= 0 && !isEqualCall(expected, calls[_i3])) { |
|
_i3 -= 1; |
|
} |
|
|
|
if (_i3 < 0) { |
|
_i3 = length - 1; // otherwise, last call |
|
} |
|
|
|
indexedCalls.push([_i3, calls[_i3]]); |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "n: ".concat(nth, "\n") + printExpectedReceivedCallsPositive(expected, indexedCalls, isExpand(_this3.expand), calls.length === 1, iNth) + "\nNumber of calls: ".concat((0, _jestMatcherUtils.printReceived)(calls.length)); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var createNthReturnedWithMatcher = function createNthReturnedWithMatcher(matcherName) { |
|
return function (received, nth, expected) { |
|
var expectedArgument = 'n'; |
|
var options = { |
|
expectedColor: function expectedColor(arg) { |
|
return arg; |
|
}, |
|
isNot: this.isNot, |
|
promise: this.promise, |
|
secondArgument: 'expected' |
|
}; |
|
ensureMock(received, matcherName, expectedArgument, options); |
|
|
|
if (!Number.isSafeInteger(nth) || nth < 1) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options), "".concat(expectedArgument, " must be a positive integer"), (0, _jestMatcherUtils.printWithType)(expectedArgument, nth, _jestMatcherUtils.stringify))); |
|
} |
|
|
|
var receivedName = received.getMockName(); |
|
var _received$mock3 = received.mock, |
|
calls = _received$mock3.calls, |
|
results = _received$mock3.results; |
|
var length = results.length; |
|
var iNth = nth - 1; |
|
var pass = iNth < length && isEqualReturn(expected, results[iNth]); |
|
var message = pass ? function () { |
|
// Display preceding and following results, |
|
var indexedResults = []; |
|
|
|
if (iNth - 1 >= 0) { |
|
indexedResults.push([iNth - 1, results[iNth - 1]]); |
|
} |
|
|
|
indexedResults.push([iNth, results[iNth]]); |
|
|
|
if (iNth + 1 < length) { |
|
indexedResults.push([iNth + 1, results[iNth + 1]]); |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "n: ".concat(nth, "\n") + "Expected: not ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + (results.length === 1 && results[0].type === 'return' && (0, _jestMatcherUtils.stringify)(results[0].value) === (0, _jestMatcherUtils.stringify)(expected) ? '' : printReceivedResults('Received: ', expected, indexedResults, results.length === 1, iNth)) + printNumberOfReturns(countReturns(results), calls.length); |
|
} : function () { |
|
// Display preceding and following results: |
|
// * nearest result that is equal to expected value |
|
// * otherwise, adjacent result |
|
var indexedResults = []; |
|
|
|
if (iNth < length) { |
|
if (iNth - 1 >= 0) { |
|
var i = iNth - 1; // Is there a preceding result that is equal to expected value? |
|
|
|
while (i >= 0 && !isEqualReturn(expected, results[i])) { |
|
i -= 1; |
|
} |
|
|
|
if (i < 0) { |
|
i = iNth - 1; // otherwise, adjacent result |
|
} |
|
|
|
indexedResults.push([i, results[i]]); |
|
} |
|
|
|
indexedResults.push([iNth, results[iNth]]); |
|
|
|
if (iNth + 1 < length) { |
|
var _i4 = iNth + 1; // Is there a following result that is equal to expected value? |
|
|
|
|
|
while (_i4 < length && !isEqualReturn(expected, results[_i4])) { |
|
_i4 += 1; |
|
} |
|
|
|
if (_i4 >= length) { |
|
_i4 = iNth + 1; // otherwise, adjacent result |
|
} |
|
|
|
indexedResults.push([_i4, results[_i4]]); |
|
} |
|
} else if (length > 0) { |
|
// The number of received calls is fewer than the expected number. |
|
var _i5 = length - 1; // Is there a result that is equal to expected value? |
|
|
|
|
|
while (_i5 >= 0 && !isEqualReturn(expected, results[_i5])) { |
|
_i5 -= 1; |
|
} |
|
|
|
if (_i5 < 0) { |
|
_i5 = length - 1; // otherwise, last result |
|
} |
|
|
|
indexedResults.push([_i5, results[_i5]]); |
|
} |
|
|
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, receivedName, expectedArgument, options) + '\n\n' + "n: ".concat(nth, "\n") + "Expected: ".concat((0, _jestMatcherUtils.printExpected)(expected), "\n") + printReceivedResults('Received: ', expected, indexedResults, results.length === 1, iNth) + printNumberOfReturns(countReturns(results), calls.length); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
}; |
|
|
|
var spyMatchers = { |
|
lastCalledWith: createLastCalledWithMatcher('lastCalledWith'), |
|
lastReturnedWith: createLastReturnedMatcher('lastReturnedWith'), |
|
nthCalledWith: createNthCalledWithMatcher('nthCalledWith'), |
|
nthReturnedWith: createNthReturnedWithMatcher('nthReturnedWith'), |
|
toBeCalled: createToBeCalledMatcher('toBeCalled'), |
|
toBeCalledTimes: createToBeCalledTimesMatcher('toBeCalledTimes'), |
|
toBeCalledWith: createToBeCalledWithMatcher('toBeCalledWith'), |
|
toHaveBeenCalled: createToBeCalledMatcher('toHaveBeenCalled'), |
|
toHaveBeenCalledTimes: createToBeCalledTimesMatcher('toHaveBeenCalledTimes'), |
|
toHaveBeenCalledWith: createToBeCalledWithMatcher('toHaveBeenCalledWith'), |
|
toHaveBeenLastCalledWith: createLastCalledWithMatcher('toHaveBeenLastCalledWith'), |
|
toHaveBeenNthCalledWith: createNthCalledWithMatcher('toHaveBeenNthCalledWith'), |
|
toHaveLastReturnedWith: createLastReturnedMatcher('toHaveLastReturnedWith'), |
|
toHaveNthReturnedWith: createNthReturnedWithMatcher('toHaveNthReturnedWith'), |
|
toHaveReturned: createToReturnMatcher('toHaveReturned'), |
|
toHaveReturnedTimes: createToReturnTimesMatcher('toHaveReturnedTimes'), |
|
toHaveReturnedWith: createToReturnWithMatcher('toHaveReturnedWith'), |
|
toReturn: createToReturnMatcher('toReturn'), |
|
toReturnTimes: createToReturnTimesMatcher('toReturnTimes'), |
|
toReturnWith: createToReturnWithMatcher('toReturnWith') |
|
}; |
|
|
|
var isMock = function isMock(received) { |
|
return received != null && received._isMockFunction === true; |
|
}; |
|
|
|
var isSpy = function isSpy(received) { |
|
return received != null && received.calls != null && typeof received.calls.all === 'function' && typeof received.calls.count === 'function'; |
|
}; |
|
|
|
var ensureMockOrSpy = function ensureMockOrSpy(received, matcherName, expectedArgument, options) { |
|
if (!isMock(received) && !isSpy(received)) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must be a mock or spy function"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
}; |
|
|
|
var ensureMock = function ensureMock(received, matcherName, expectedArgument, options) { |
|
if (!isMock(received)) { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, expectedArgument, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must be a mock function"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
}; |
|
|
|
var _default = spyMatchers; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/toThrowMatchers.ts": |
|
/*!************************************************!*\ |
|
!*** ./packages/expect/src/toThrowMatchers.ts ***! |
|
\************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(process) { |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = exports.createMatcher = void 0; |
|
|
|
var _jestMessageUtil = __webpack_require__(/*! jest-message-util */ "./packages/jest-message-util/build/index.js"); |
|
|
|
var _jestMatcherUtils = __webpack_require__(/*! jest-matcher-utils */ "./packages/jest-matcher-utils/build/index.js"); |
|
|
|
var _print = __webpack_require__(/*! ./print */ "./packages/expect/src/print.ts"); |
|
|
|
var _utils = __webpack_require__(/*! ./utils */ "./packages/expect/src/utils.ts"); |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
var DID_NOT_THROW = 'Received function did not throw'; |
|
|
|
var getThrown = function getThrown(e) { |
|
var hasMessage = e !== null && e !== undefined && typeof e.message === 'string'; |
|
|
|
if (hasMessage && typeof e.name === 'string' && typeof e.stack === 'string') { |
|
return { |
|
hasMessage: hasMessage, |
|
isError: true, |
|
message: e.message, |
|
value: e |
|
}; |
|
} |
|
|
|
return { |
|
hasMessage: hasMessage, |
|
isError: false, |
|
message: hasMessage ? e.message : String(e), |
|
value: e |
|
}; |
|
}; |
|
|
|
var createMatcher = function createMatcher(matcherName, fromPromise) { |
|
return function (received, expected) { |
|
var options = { |
|
isNot: this.isNot, |
|
promise: this.promise |
|
}; |
|
var thrown = null; |
|
|
|
if (fromPromise && (0, _utils.isError)(received)) { |
|
thrown = getThrown(received); |
|
} else { |
|
if (typeof received !== 'function') { |
|
if (!fromPromise) { |
|
var placeholder = expected === undefined ? '' : 'expected'; |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, placeholder, options), "".concat((0, _jestMatcherUtils.RECEIVED_COLOR)('received'), " value must be a function"), (0, _jestMatcherUtils.printWithType)('Received', received, _jestMatcherUtils.printReceived))); |
|
} |
|
} else { |
|
try { |
|
received(); |
|
} catch (e) { |
|
thrown = getThrown(e); |
|
} |
|
} |
|
} |
|
|
|
if (expected === undefined) { |
|
return toThrow(matcherName, options, thrown); |
|
} else if (typeof expected === 'function') { |
|
return toThrowExpectedClass(matcherName, options, thrown, expected); |
|
} else if (typeof expected === 'string') { |
|
return toThrowExpectedString(matcherName, options, thrown, expected); |
|
} else if (expected !== null && typeof expected.test === 'function') { |
|
return toThrowExpectedRegExp(matcherName, options, thrown, expected); |
|
} else if (expected !== null && typeof expected.asymmetricMatch === 'function') { |
|
return toThrowExpectedAsymmetric(matcherName, options, thrown, expected); |
|
} else if (expected !== null && _typeof(expected) === 'object') { |
|
return toThrowExpectedObject(matcherName, options, thrown, expected); |
|
} else { |
|
throw new Error((0, _jestMatcherUtils.matcherErrorMessage)((0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options), "".concat((0, _jestMatcherUtils.EXPECTED_COLOR)('expected'), " value must be a string or regular expression or class or error"), (0, _jestMatcherUtils.printWithType)('Expected', expected, _jestMatcherUtils.printExpected))); |
|
} |
|
}; |
|
}; |
|
|
|
exports.createMatcher = createMatcher; |
|
var matchers = { |
|
toThrow: createMatcher('toThrow'), |
|
toThrowError: createMatcher('toThrowError') |
|
}; |
|
|
|
var toThrowExpectedRegExp = function toThrowExpectedRegExp(matcherName, options, thrown, expected) { |
|
var pass = thrown !== null && expected.test(thrown.message); |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + formatExpected('Expected pattern: not ', expected) + (thrown !== null && thrown.hasMessage ? formatReceived('Received message: ', thrown, 'message', expected) + formatStack(thrown) : formatReceived('Received value: ', thrown, 'value')); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + formatExpected('Expected pattern: ', expected) + (thrown === null ? '\n' + DID_NOT_THROW : thrown.hasMessage ? formatReceived('Received message: ', thrown, 'message') + formatStack(thrown) : formatReceived('Received value: ', thrown, 'value')); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
|
|
var toThrowExpectedAsymmetric = function toThrowExpectedAsymmetric(matcherName, options, thrown, expected) { |
|
var pass = thrown !== null && expected.asymmetricMatch(thrown.value); |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + formatExpected('Expected asymmetric matcher: not ', expected) + '\n' + (thrown !== null && thrown.hasMessage ? formatReceived('Received name: ', thrown, 'name') + formatReceived('Received message: ', thrown, 'message') + formatStack(thrown) : formatReceived('Thrown value: ', thrown, 'value')); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + formatExpected('Expected asymmetric matcher: ', expected) + '\n' + (thrown === null ? DID_NOT_THROW : thrown.hasMessage ? formatReceived('Received name: ', thrown, 'name') + formatReceived('Received message: ', thrown, 'message') + formatStack(thrown) : formatReceived('Thrown value: ', thrown, 'value')); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
|
|
var toThrowExpectedObject = function toThrowExpectedObject(matcherName, options, thrown, expected) { |
|
var pass = thrown !== null && thrown.message === expected.message; |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + formatExpected('Expected message: not ', expected.message) + (thrown !== null && thrown.hasMessage ? formatStack(thrown) : formatReceived('Received value: ', thrown, 'value')); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (thrown === null ? formatExpected('Expected message: ', expected.message) + '\n' + DID_NOT_THROW : thrown.hasMessage ? (0, _jestMatcherUtils.printDiffOrStringify)(expected.message, thrown.message, 'Expected message', 'Received message', true) + '\n' + formatStack(thrown) : formatExpected('Expected message: ', expected.message) + formatReceived('Received value: ', thrown, 'value')); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
|
|
var toThrowExpectedClass = function toThrowExpectedClass(matcherName, options, thrown, expected) { |
|
var pass = thrown !== null && thrown.value instanceof expected; |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (0, _print.printExpectedConstructorNameNot)('Expected constructor', expected) + (thrown !== null && thrown.value != null && typeof thrown.value.constructor === 'function' && thrown.value.constructor !== expected ? (0, _print.printReceivedConstructorNameNot)('Received constructor', thrown.value.constructor, expected) : '') + '\n' + (thrown !== null && thrown.hasMessage ? formatReceived('Received message: ', thrown, 'message') + formatStack(thrown) : formatReceived('Received value: ', thrown, 'value')); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + (0, _print.printExpectedConstructorName)('Expected constructor', expected) + (thrown === null ? '\n' + DID_NOT_THROW : (thrown.value != null && typeof thrown.value.constructor === 'function' ? (0, _print.printReceivedConstructorName)('Received constructor', thrown.value.constructor) : '') + '\n' + (thrown.hasMessage ? formatReceived('Received message: ', thrown, 'message') + formatStack(thrown) : formatReceived('Received value: ', thrown, 'value'))); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
|
|
var toThrowExpectedString = function toThrowExpectedString(matcherName, options, thrown, expected) { |
|
var pass = thrown !== null && thrown.message.includes(expected); |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + formatExpected('Expected substring: not ', expected) + (thrown !== null && thrown.hasMessage ? formatReceived('Received message: ', thrown, 'message', expected) + formatStack(thrown) : formatReceived('Received value: ', thrown, 'value')); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, undefined, options) + '\n\n' + formatExpected('Expected substring: ', expected) + (thrown === null ? '\n' + DID_NOT_THROW : thrown.hasMessage ? formatReceived('Received message: ', thrown, 'message') + formatStack(thrown) : formatReceived('Received value: ', thrown, 'value')); |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
|
|
var toThrow = function toThrow(matcherName, options, thrown) { |
|
var pass = thrown !== null; |
|
var message = pass ? function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, '', options) + '\n\n' + (thrown !== null && thrown.hasMessage ? formatReceived('Error name: ', thrown, 'name') + formatReceived('Error message: ', thrown, 'message') + formatStack(thrown) : formatReceived('Thrown value: ', thrown, 'value')); |
|
} : function () { |
|
return (0, _jestMatcherUtils.matcherHint)(matcherName, undefined, '', options) + '\n\n' + DID_NOT_THROW; |
|
}; |
|
return { |
|
message: message, |
|
pass: pass |
|
}; |
|
}; |
|
|
|
var formatExpected = function formatExpected(label, expected) { |
|
return label + (0, _jestMatcherUtils.printExpected)(expected) + '\n'; |
|
}; |
|
|
|
var formatReceived = function formatReceived(label, thrown, key, expected) { |
|
if (thrown === null) { |
|
return ''; |
|
} |
|
|
|
if (key === 'message') { |
|
var _message = thrown.message; |
|
|
|
if (typeof expected === 'string') { |
|
var index = _message.indexOf(expected); |
|
|
|
if (index !== -1) { |
|
return label + (0, _print.printReceivedStringContainExpectedSubstring)(_message, index, expected.length) + '\n'; |
|
} |
|
} else if (expected instanceof RegExp) { |
|
return label + (0, _print.printReceivedStringContainExpectedResult)(_message, typeof expected.exec === 'function' ? expected.exec(_message) : null) + '\n'; |
|
} |
|
|
|
return label + (0, _jestMatcherUtils.printReceived)(_message) + '\n'; |
|
} |
|
|
|
if (key === 'name') { |
|
return thrown.isError ? label + (0, _jestMatcherUtils.printReceived)(thrown.value.name) + '\n' : ''; |
|
} |
|
|
|
if (key === 'value') { |
|
return thrown.isError ? '' : label + (0, _jestMatcherUtils.printReceived)(thrown.value) + '\n'; |
|
} |
|
|
|
return ''; |
|
}; |
|
|
|
var formatStack = function formatStack(thrown) { |
|
return thrown === null || !thrown.isError ? '' : (0, _jestMessageUtil.formatStackTrace)((0, _jestMessageUtil.separateMessageFromStack)(thrown.value.stack).stack, { |
|
rootDir: process.cwd(), |
|
testMatch: [] |
|
}, { |
|
noStackTrace: false |
|
}); |
|
}; |
|
|
|
var _default = matchers; |
|
exports.default = _default; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/expect/src/utils.ts": |
|
/*!**************************************!*\ |
|
!*** ./packages/expect/src/utils.ts ***! |
|
\**************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.emptyObject = emptyObject; |
|
exports.isOneline = exports.isError = exports.partition = exports.sparseArrayEquality = exports.typeEquality = exports.subsetEquality = exports.iterableEquality = exports.getObjectSubset = exports.getPath = exports.hasOwnProperty = void 0; |
|
|
|
var _jestGetType = __webpack_require__(/*! jest-get-type */ "./packages/jest-get-type/build/index.js"); |
|
|
|
var _jasmineUtils = __webpack_require__(/*! ./jasmineUtils */ "./packages/expect/src/jasmineUtils.ts"); |
|
|
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } |
|
|
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } |
|
|
|
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } |
|
|
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
// Return whether object instance inherits getter from its class. |
|
var hasGetterFromConstructor = function hasGetterFromConstructor(object, key) { |
|
var constructor = object.constructor; |
|
|
|
if (constructor === Object) { |
|
// A literal object has Object as constructor. |
|
// Therefore, it cannot inherit application-specific getters. |
|
// Furthermore, Object has __proto__ getter which is not relevant. |
|
// Array, Boolean, Number, String constructors don’t have any getters. |
|
return false; |
|
} |
|
|
|
if (typeof constructor !== 'function') { |
|
// Object.create(null) constructs object with no constructor nor prototype. |
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Custom_and_Null_objects |
|
return false; |
|
} |
|
|
|
var descriptor = Object.getOwnPropertyDescriptor(constructor.prototype, key); |
|
return descriptor !== undefined && typeof descriptor.get === 'function'; |
|
}; |
|
|
|
var hasOwnProperty = function hasOwnProperty(object, key) { |
|
return Object.prototype.hasOwnProperty.call(object, key) || hasGetterFromConstructor(object, key); |
|
}; |
|
|
|
exports.hasOwnProperty = hasOwnProperty; |
|
|
|
var getPath = function getPath(object, propertyPath) { |
|
if (!Array.isArray(propertyPath)) { |
|
propertyPath = propertyPath.split('.'); |
|
} |
|
|
|
if (propertyPath.length) { |
|
var lastProp = propertyPath.length === 1; |
|
var prop = propertyPath[0]; |
|
var newObject = object[prop]; |
|
|
|
if (!lastProp && (newObject === null || newObject === undefined)) { |
|
// This is not the last prop in the chain. If we keep recursing it will |
|
// hit a `can't access property X of undefined | null`. At this point we |
|
// know that the chain has broken and we can return right away. |
|
return { |
|
hasEndProp: false, |
|
lastTraversedObject: object, |
|
traversedPath: [] |
|
}; |
|
} |
|
|
|
var result = getPath(newObject, propertyPath.slice(1)); |
|
|
|
if (result.lastTraversedObject === null) { |
|
result.lastTraversedObject = object; |
|
} |
|
|
|
result.traversedPath.unshift(prop); |
|
|
|
if (lastProp) { |
|
// Does object have the property with an undefined value? |
|
// Although primitive values support bracket notation (above) |
|
// they would throw TypeError for in operator (below). |
|
result.hasEndProp = newObject !== undefined || !(0, _jestGetType.isPrimitive)(object) && prop in object; |
|
|
|
if (!result.hasEndProp) { |
|
result.traversedPath.shift(); |
|
} |
|
} |
|
|
|
return result; |
|
} |
|
|
|
return { |
|
lastTraversedObject: null, |
|
traversedPath: [], |
|
value: object |
|
}; |
|
}; // Strip properties from object that are not present in the subset. Useful for |
|
// printing the diff for toMatchObject() without adding unrelated noise. |
|
|
|
|
|
exports.getPath = getPath; |
|
|
|
var getObjectSubset = function getObjectSubset(object, subset) { |
|
var seenReferences = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new WeakMap(); |
|
|
|
if (Array.isArray(object)) { |
|
if (Array.isArray(subset) && subset.length === object.length) { |
|
return subset.map(function (sub, i) { |
|
return getObjectSubset(object[i], sub); |
|
}); |
|
} |
|
} else if (object instanceof Date) { |
|
return object; |
|
} else if (isObject(object) && isObject(subset)) { |
|
var trimmed = {}; |
|
seenReferences.set(object, trimmed); |
|
Object.keys(object).filter(function (key) { |
|
return hasOwnProperty(subset, key); |
|
}).forEach(function (key) { |
|
trimmed[key] = seenReferences.has(object[key]) ? seenReferences.get(object[key]) : getObjectSubset(object[key], subset[key], seenReferences); |
|
}); |
|
|
|
if (Object.keys(trimmed).length > 0) { |
|
return trimmed; |
|
} |
|
} |
|
|
|
return object; |
|
}; |
|
|
|
exports.getObjectSubset = getObjectSubset; |
|
var IteratorSymbol = Symbol.iterator; |
|
|
|
var hasIterator = function hasIterator(object) { |
|
return !!(object != null && object[IteratorSymbol]); |
|
}; |
|
|
|
var iterableEquality = function iterableEquality(a, b) { |
|
var aStack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; |
|
var bStack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; |
|
|
|
if (_typeof(a) !== 'object' || _typeof(b) !== 'object' || Array.isArray(a) || Array.isArray(b) || !hasIterator(a) || !hasIterator(b)) { |
|
return undefined; |
|
} |
|
|
|
if (a.constructor !== b.constructor) { |
|
return false; |
|
} |
|
|
|
var length = aStack.length; |
|
|
|
while (length--) { |
|
// Linear search. Performance is inversely proportional to the number of |
|
// unique nested structures. |
|
// circular references at same depth are equal |
|
// circular reference is not equal to non-circular one |
|
if (aStack[length] === a) { |
|
return bStack[length] === b; |
|
} |
|
} |
|
|
|
aStack.push(a); |
|
bStack.push(b); |
|
|
|
var iterableEqualityWithStack = function iterableEqualityWithStack(a, b) { |
|
return iterableEquality(a, b, _toConsumableArray(aStack), _toConsumableArray(bStack)); |
|
}; |
|
|
|
if (a.size !== undefined) { |
|
if (a.size !== b.size) { |
|
return false; |
|
} else if ((0, _jasmineUtils.isA)('Set', a) || (0, _jasmineUtils.isImmutableUnorderedSet)(a)) { |
|
var allFound = true; |
|
var _iteratorNormalCompletion = true; |
|
var _didIteratorError = false; |
|
var _iteratorError = undefined; |
|
|
|
try { |
|
for (var _iterator = a[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { |
|
var aValue = _step.value; |
|
|
|
if (!b.has(aValue)) { |
|
var has = false; |
|
var _iteratorNormalCompletion2 = true; |
|
var _didIteratorError2 = false; |
|
var _iteratorError2 = undefined; |
|
|
|
try { |
|
for (var _iterator2 = b[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { |
|
var bValue = _step2.value; |
|
var isEqual = (0, _jasmineUtils.equals)(aValue, bValue, [iterableEqualityWithStack]); |
|
|
|
if (isEqual === true) { |
|
has = true; |
|
} |
|
} |
|
} catch (err) { |
|
_didIteratorError2 = true; |
|
_iteratorError2 = err; |
|
} finally { |
|
try { |
|
if (!_iteratorNormalCompletion2 && _iterator2.return != null) { |
|
_iterator2.return(); |
|
} |
|
} finally { |
|
if (_didIteratorError2) { |
|
throw _iteratorError2; |
|
} |
|
} |
|
} |
|
|
|
if (has === false) { |
|
allFound = false; |
|
break; |
|
} |
|
} |
|
} // Remove the first value from the stack of traversed values. |
|
|
|
} catch (err) { |
|
_didIteratorError = true; |
|
_iteratorError = err; |
|
} finally { |
|
try { |
|
if (!_iteratorNormalCompletion && _iterator.return != null) { |
|
_iterator.return(); |
|
} |
|
} finally { |
|
if (_didIteratorError) { |
|
throw _iteratorError; |
|
} |
|
} |
|
} |
|
|
|
aStack.pop(); |
|
bStack.pop(); |
|
return allFound; |
|
} else if ((0, _jasmineUtils.isA)('Map', a) || (0, _jasmineUtils.isImmutableUnorderedKeyed)(a)) { |
|
var _allFound = true; |
|
var _iteratorNormalCompletion3 = true; |
|
var _didIteratorError3 = false; |
|
var _iteratorError3 = undefined; |
|
|
|
try { |
|
for (var _iterator3 = a[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { |
|
var aEntry = _step3.value; |
|
|
|
if (!b.has(aEntry[0]) || !(0, _jasmineUtils.equals)(aEntry[1], b.get(aEntry[0]), [iterableEqualityWithStack])) { |
|
var _has = false; |
|
var _iteratorNormalCompletion4 = true; |
|
var _didIteratorError4 = false; |
|
var _iteratorError4 = undefined; |
|
|
|
try { |
|
for (var _iterator4 = b[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { |
|
var bEntry = _step4.value; |
|
var matchedKey = (0, _jasmineUtils.equals)(aEntry[0], bEntry[0], [iterableEqualityWithStack]); |
|
var matchedValue = false; |
|
|
|
if (matchedKey === true) { |
|
matchedValue = (0, _jasmineUtils.equals)(aEntry[1], bEntry[1], [iterableEqualityWithStack]); |
|
} |
|
|
|
if (matchedValue === true) { |
|
_has = true; |
|
} |
|
} |
|
} catch (err) { |
|
_didIteratorError4 = true; |
|
_iteratorError4 = err; |
|
} finally { |
|
try { |
|
if (!_iteratorNormalCompletion4 && _iterator4.return != null) { |
|
_iterator4.return(); |
|
} |
|
} finally { |
|
if (_didIteratorError4) { |
|
throw _iteratorError4; |
|
} |
|
} |
|
} |
|
|
|
if (_has === false) { |
|
_allFound = false; |
|
break; |
|
} |
|
} |
|
} // Remove the first value from the stack of traversed values. |
|
|
|
} catch (err) { |
|
_didIteratorError3 = true; |
|
_iteratorError3 = err; |
|
} finally { |
|
try { |
|
if (!_iteratorNormalCompletion3 && _iterator3.return != null) { |
|
_iterator3.return(); |
|
} |
|
} finally { |
|
if (_didIteratorError3) { |
|
throw _iteratorError3; |
|
} |
|
} |
|
} |
|
|
|
aStack.pop(); |
|
bStack.pop(); |
|
return _allFound; |
|
} |
|
} |
|
|
|
var bIterator = b[IteratorSymbol](); |
|
var _iteratorNormalCompletion5 = true; |
|
var _didIteratorError5 = false; |
|
var _iteratorError5 = undefined; |
|
|
|
try { |
|
for (var _iterator5 = a[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { |
|
var _aValue = _step5.value; |
|
var nextB = bIterator.next(); |
|
|
|
if (nextB.done || !(0, _jasmineUtils.equals)(_aValue, nextB.value, [iterableEqualityWithStack])) { |
|
return false; |
|
} |
|
} |
|
} catch (err) { |
|
_didIteratorError5 = true; |
|
_iteratorError5 = err; |
|
} finally { |
|
try { |
|
if (!_iteratorNormalCompletion5 && _iterator5.return != null) { |
|
_iterator5.return(); |
|
} |
|
} finally { |
|
if (_didIteratorError5) { |
|
throw _iteratorError5; |
|
} |
|
} |
|
} |
|
|
|
if (!bIterator.next().done) { |
|
return false; |
|
} // Remove the first value from the stack of traversed values. |
|
|
|
|
|
aStack.pop(); |
|
bStack.pop(); |
|
return true; |
|
}; |
|
|
|
exports.iterableEquality = iterableEquality; |
|
|
|
var isObject = function isObject(a) { |
|
return a !== null && _typeof(a) === 'object'; |
|
}; |
|
|
|
var isObjectWithKeys = function isObjectWithKeys(a) { |
|
return isObject(a) && !(a instanceof Error) && !(a instanceof Array) && !(a instanceof Date); |
|
}; |
|
|
|
var subsetEquality = function subsetEquality(object, subset) { |
|
// subsetEquality needs to keep track of the references |
|
// it has already visited to avoid infinite loops in case |
|
// there are circular references in the subset passed to it. |
|
var subsetEqualityWithContext = function subsetEqualityWithContext() { |
|
var seenReferences = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new WeakMap(); |
|
return function (object, subset) { |
|
if (!isObjectWithKeys(subset)) { |
|
return undefined; |
|
} |
|
|
|
return Object.keys(subset).every(function (key) { |
|
if (isObjectWithKeys(subset[key])) { |
|
if (seenReferences.get(subset[key])) { |
|
return (0, _jasmineUtils.equals)(object[key], subset[key], [iterableEquality]); |
|
} |
|
|
|
seenReferences.set(subset[key], true); |
|
} |
|
|
|
return object != null && hasOwnProperty(object, key) && (0, _jasmineUtils.equals)(object[key], subset[key], [iterableEquality, subsetEqualityWithContext(seenReferences)]); |
|
}); |
|
}; |
|
}; |
|
|
|
return subsetEqualityWithContext()(object, subset); |
|
}; |
|
|
|
exports.subsetEquality = subsetEquality; |
|
|
|
var typeEquality = function typeEquality(a, b) { |
|
if (a == null || b == null || a.constructor === b.constructor) { |
|
return undefined; |
|
} |
|
|
|
return false; |
|
}; |
|
|
|
exports.typeEquality = typeEquality; |
|
|
|
var sparseArrayEquality = function sparseArrayEquality(a, b) { |
|
if (!Array.isArray(a) || !Array.isArray(b)) { |
|
return undefined; |
|
} // A sparse array [, , 1] will have keys ["2"] whereas [undefined, undefined, 1] will have keys ["0", "1", "2"] |
|
|
|
|
|
var aKeys = Object.keys(a); |
|
var bKeys = Object.keys(b); |
|
return (0, _jasmineUtils.equals)(a, b, [iterableEquality, typeEquality], true) && (0, _jasmineUtils.equals)(aKeys, bKeys); |
|
}; |
|
|
|
exports.sparseArrayEquality = sparseArrayEquality; |
|
|
|
var partition = function partition(items, predicate) { |
|
var result = [[], []]; |
|
items.forEach(function (item) { |
|
return result[predicate(item) ? 0 : 1].push(item); |
|
}); |
|
return result; |
|
}; // Copied from https://github.com/graingert/angular.js/blob/a43574052e9775cbc1d7dd8a086752c979b0f020/src/Angular.js#L685-L693 |
|
|
|
|
|
exports.partition = partition; |
|
|
|
var isError = function isError(value) { |
|
switch (Object.prototype.toString.call(value)) { |
|
case '[object Error]': |
|
return true; |
|
|
|
case '[object Exception]': |
|
return true; |
|
|
|
case '[object DOMException]': |
|
return true; |
|
|
|
default: |
|
return value instanceof Error; |
|
} |
|
}; |
|
|
|
exports.isError = isError; |
|
|
|
function emptyObject(obj) { |
|
return obj && _typeof(obj) === 'object' ? !Object.keys(obj).length : false; |
|
} |
|
|
|
var MULTILINE_REGEXP = /[\r\n]/; |
|
|
|
var isOneline = function isOneline(expected, received) { |
|
return typeof expected === 'string' && typeof received === 'string' && (!MULTILINE_REGEXP.test(expected) || !MULTILINE_REGEXP.test(received)); |
|
}; |
|
|
|
exports.isOneline = isOneline; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-diff/build/cleanupSemantic.js": |
|
/*!*****************************************************!*\ |
|
!*** ./packages/jest-diff/build/cleanupSemantic.js ***! |
|
\*****************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.cleanupSemantic = exports.DIFF_INSERT = exports.DIFF_DELETE = exports.DIFF_EQUAL = exports.Diff = void 0; |
|
|
|
function _defineProperty(obj, key, value) { |
|
if (key in obj) { |
|
Object.defineProperty(obj, key, { |
|
value: value, |
|
enumerable: true, |
|
configurable: true, |
|
writable: true |
|
}); |
|
} else { |
|
obj[key] = value; |
|
} |
|
|
|
return obj; |
|
} |
|
/** |
|
* Diff Match and Patch |
|
* Copyright 2018 The diff-match-patch Authors. |
|
* https://github.com/google/diff-match-patch |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
/** |
|
* @fileoverview Computes the difference between two texts to create a patch. |
|
* Applies the patch onto another text, allowing for errors. |
|
* @author fraser@google.com (Neil Fraser) |
|
*/ |
|
|
|
/** |
|
* CHANGES by pedrottimark to diff_match_patch_uncompressed.ts file: |
|
* |
|
* 1. Delete anything not needed to use diff_cleanupSemantic method |
|
* 2. Convert from prototype properties to var declarations |
|
* 3. Convert Diff to class from constructor and prototype |
|
* 4. Add type annotations for arguments and return values |
|
* 5. Add exports |
|
*/ |
|
|
|
/** |
|
* The data structure representing a diff is an array of tuples: |
|
* [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']] |
|
* which means: delete 'Hello', add 'Goodbye' and keep ' world.' |
|
*/ |
|
|
|
|
|
var DIFF_DELETE = -1; |
|
exports.DIFF_DELETE = DIFF_DELETE; |
|
var DIFF_INSERT = 1; |
|
exports.DIFF_INSERT = DIFF_INSERT; |
|
var DIFF_EQUAL = 0; |
|
/** |
|
* Class representing one diff tuple. |
|
* Attempts to look like a two-element array (which is what this used to be). |
|
* @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL. |
|
* @param {string} text Text to be deleted, inserted, or retained. |
|
* @constructor |
|
*/ |
|
|
|
exports.DIFF_EQUAL = DIFF_EQUAL; |
|
|
|
var Diff = function Diff(op, text) { |
|
_classCallCheck(this, Diff); |
|
|
|
_defineProperty(this, 0, void 0); |
|
|
|
_defineProperty(this, 1, void 0); |
|
|
|
this[0] = op; |
|
this[1] = text; |
|
}; |
|
/** |
|
* Determine the common prefix of two strings. |
|
* @param {string} text1 First string. |
|
* @param {string} text2 Second string. |
|
* @return {number} The number of characters common to the start of each |
|
* string. |
|
*/ |
|
|
|
|
|
exports.Diff = Diff; |
|
|
|
var diff_commonPrefix = function diff_commonPrefix(text1, text2) { |
|
// Quick check for common null cases. |
|
if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) { |
|
return 0; |
|
} // Binary search. |
|
// Performance analysis: https://neil.fraser.name/news/2007/10/09/ |
|
|
|
|
|
var pointermin = 0; |
|
var pointermax = Math.min(text1.length, text2.length); |
|
var pointermid = pointermax; |
|
var pointerstart = 0; |
|
|
|
while (pointermin < pointermid) { |
|
if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) { |
|
pointermin = pointermid; |
|
pointerstart = pointermin; |
|
} else { |
|
pointermax = pointermid; |
|
} |
|
|
|
pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); |
|
} |
|
|
|
return pointermid; |
|
}; |
|
/** |
|
* Determine the common suffix of two strings. |
|
* @param {string} text1 First string. |
|
* @param {string} text2 Second string. |
|
* @return {number} The number of characters common to the end of each string. |
|
*/ |
|
|
|
|
|
var diff_commonSuffix = function diff_commonSuffix(text1, text2) { |
|
// Quick check for common null cases. |
|
if (!text1 || !text2 || text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) { |
|
return 0; |
|
} // Binary search. |
|
// Performance analysis: https://neil.fraser.name/news/2007/10/09/ |
|
|
|
|
|
var pointermin = 0; |
|
var pointermax = Math.min(text1.length, text2.length); |
|
var pointermid = pointermax; |
|
var pointerend = 0; |
|
|
|
while (pointermin < pointermid) { |
|
if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) { |
|
pointermin = pointermid; |
|
pointerend = pointermin; |
|
} else { |
|
pointermax = pointermid; |
|
} |
|
|
|
pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); |
|
} |
|
|
|
return pointermid; |
|
}; |
|
/** |
|
* Determine if the suffix of one string is the prefix of another. |
|
* @param {string} text1 First string. |
|
* @param {string} text2 Second string. |
|
* @return {number} The number of characters common to the end of the first |
|
* string and the start of the second string. |
|
* @private |
|
*/ |
|
|
|
|
|
var diff_commonOverlap_ = function diff_commonOverlap_(text1, text2) { |
|
// Cache the text lengths to prevent multiple calls. |
|
var text1_length = text1.length; |
|
var text2_length = text2.length; // Eliminate the null case. |
|
|
|
if (text1_length == 0 || text2_length == 0) { |
|
return 0; |
|
} // Truncate the longer string. |
|
|
|
|
|
if (text1_length > text2_length) { |
|
text1 = text1.substring(text1_length - text2_length); |
|
} else if (text1_length < text2_length) { |
|
text2 = text2.substring(0, text1_length); |
|
} |
|
|
|
var text_length = Math.min(text1_length, text2_length); // Quick check for the worst case. |
|
|
|
if (text1 == text2) { |
|
return text_length; |
|
} // Start by looking for a single character match |
|
// and increase length until no match is found. |
|
// Performance analysis: https://neil.fraser.name/news/2010/11/04/ |
|
|
|
|
|
var best = 0; |
|
var length = 1; |
|
|
|
while (true) { |
|
var pattern = text1.substring(text_length - length); |
|
var found = text2.indexOf(pattern); |
|
|
|
if (found == -1) { |
|
return best; |
|
} |
|
|
|
length += found; |
|
|
|
if (found == 0 || text1.substring(text_length - length) == text2.substring(0, length)) { |
|
best = length; |
|
length++; |
|
} |
|
} |
|
}; |
|
/** |
|
* Reduce the number of edits by eliminating semantically trivial equalities. |
|
* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples. |
|
*/ |
|
|
|
|
|
var diff_cleanupSemantic = function diff_cleanupSemantic(diffs) { |
|
var changes = false; |
|
var equalities = []; // Stack of indices where equalities are found. |
|
|
|
var equalitiesLength = 0; // Keeping our own length var is faster in JS. |
|
|
|
/** @type {?string} */ |
|
|
|
var lastEquality = null; // Always equal to diffs[equalities[equalitiesLength - 1]][1] |
|
|
|
var pointer = 0; // Index of current position. |
|
// Number of characters that changed prior to the equality. |
|
|
|
var length_insertions1 = 0; |
|
var length_deletions1 = 0; // Number of characters that changed after the equality. |
|
|
|
var length_insertions2 = 0; |
|
var length_deletions2 = 0; |
|
|
|
while (pointer < diffs.length) { |
|
if (diffs[pointer][0] == DIFF_EQUAL) { |
|
// Equality found. |
|
equalities[equalitiesLength++] = pointer; |
|
length_insertions1 = length_insertions2; |
|
length_deletions1 = length_deletions2; |
|
length_insertions2 = 0; |
|
length_deletions2 = 0; |
|
lastEquality = diffs[pointer][1]; |
|
} else { |
|
// An insertion or deletion. |
|
if (diffs[pointer][0] == DIFF_INSERT) { |
|
length_insertions2 += diffs[pointer][1].length; |
|
} else { |
|
length_deletions2 += diffs[pointer][1].length; |
|
} // Eliminate an equality that is smaller or equal to the edits on both |
|
// sides of it. |
|
|
|
|
|
if (lastEquality && lastEquality.length <= Math.max(length_insertions1, length_deletions1) && lastEquality.length <= Math.max(length_insertions2, length_deletions2)) { |
|
// Duplicate record. |
|
diffs.splice(equalities[equalitiesLength - 1], 0, new Diff(DIFF_DELETE, lastEquality)); // Change second copy to insert. |
|
|
|
diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; // Throw away the equality we just deleted. |
|
|
|
equalitiesLength--; // Throw away the previous equality (it needs to be reevaluated). |
|
|
|
equalitiesLength--; |
|
pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; |
|
length_insertions1 = 0; // Reset the counters. |
|
|
|
length_deletions1 = 0; |
|
length_insertions2 = 0; |
|
length_deletions2 = 0; |
|
lastEquality = null; |
|
changes = true; |
|
} |
|
} |
|
|
|
pointer++; |
|
} // Normalize the diff. |
|
|
|
|
|
if (changes) { |
|
diff_cleanupMerge(diffs); |
|
} |
|
|
|
diff_cleanupSemanticLossless(diffs); // Find any overlaps between deletions and insertions. |
|
// e.g: <del>abcxxx</del><ins>xxxdef</ins> |
|
// -> <del>abc</del>xxx<ins>def</ins> |
|
// e.g: <del>xxxabc</del><ins>defxxx</ins> |
|
// -> <ins>def</ins>xxx<del>abc</del> |
|
// Only extract an overlap if it is as big as the edit ahead or behind it. |
|
|
|
pointer = 1; |
|
|
|
while (pointer < diffs.length) { |
|
if (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) { |
|
var deletion = diffs[pointer - 1][1]; |
|
var insertion = diffs[pointer][1]; |
|
var overlap_length1 = diff_commonOverlap_(deletion, insertion); |
|
var overlap_length2 = diff_commonOverlap_(insertion, deletion); |
|
|
|
if (overlap_length1 >= overlap_length2) { |
|
if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) { |
|
// Overlap found. Insert an equality and trim the surrounding edits. |
|
diffs.splice(pointer, 0, new Diff(DIFF_EQUAL, insertion.substring(0, overlap_length1))); |
|
diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1); |
|
diffs[pointer + 1][1] = insertion.substring(overlap_length1); |
|
pointer++; |
|
} |
|
} else { |
|
if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) { |
|
// Reverse overlap found. |
|
// Insert an equality and swap and trim the surrounding edits. |
|
diffs.splice(pointer, 0, new Diff(DIFF_EQUAL, deletion.substring(0, overlap_length2))); |
|
diffs[pointer - 1][0] = DIFF_INSERT; |
|
diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2); |
|
diffs[pointer + 1][0] = DIFF_DELETE; |
|
diffs[pointer + 1][1] = deletion.substring(overlap_length2); |
|
pointer++; |
|
} |
|
} |
|
|
|
pointer++; |
|
} |
|
|
|
pointer++; |
|
} |
|
}; |
|
/** |
|
* Look for single edits surrounded on both sides by equalities |
|
* which can be shifted sideways to align the edit to a word boundary. |
|
* e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came. |
|
* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples. |
|
*/ |
|
|
|
|
|
exports.cleanupSemantic = diff_cleanupSemantic; |
|
|
|
var diff_cleanupSemanticLossless = function diff_cleanupSemanticLossless(diffs) { |
|
/** |
|
* Given two strings, compute a score representing whether the internal |
|
* boundary falls on logical boundaries. |
|
* Scores range from 6 (best) to 0 (worst). |
|
* Closure, but does not reference any external variables. |
|
* @param {string} one First string. |
|
* @param {string} two Second string. |
|
* @return {number} The score. |
|
* @private |
|
*/ |
|
function diff_cleanupSemanticScore_(one, two) { |
|
if (!one || !two) { |
|
// Edges are the best. |
|
return 6; |
|
} // Each port of this function behaves slightly differently due to |
|
// subtle differences in each language's definition of things like |
|
// 'whitespace'. Since this function's purpose is largely cosmetic, |
|
// the choice has been made to use each language's native features |
|
// rather than force total conformity. |
|
|
|
|
|
var char1 = one.charAt(one.length - 1); |
|
var char2 = two.charAt(0); |
|
var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_); |
|
var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_); |
|
var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_); |
|
var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_); |
|
var lineBreak1 = whitespace1 && char1.match(linebreakRegex_); |
|
var lineBreak2 = whitespace2 && char2.match(linebreakRegex_); |
|
var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_); |
|
var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_); |
|
|
|
if (blankLine1 || blankLine2) { |
|
// Five points for blank lines. |
|
return 5; |
|
} else if (lineBreak1 || lineBreak2) { |
|
// Four points for line breaks. |
|
return 4; |
|
} else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { |
|
// Three points for end of sentences. |
|
return 3; |
|
} else if (whitespace1 || whitespace2) { |
|
// Two points for whitespace. |
|
return 2; |
|
} else if (nonAlphaNumeric1 || nonAlphaNumeric2) { |
|
// One point for non-alphanumeric. |
|
return 1; |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
var pointer = 1; // Intentionally ignore the first and last element (don't need checking). |
|
|
|
while (pointer < diffs.length - 1) { |
|
if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) { |
|
// This is a single edit surrounded by equalities. |
|
var equality1 = diffs[pointer - 1][1]; |
|
var edit = diffs[pointer][1]; |
|
var equality2 = diffs[pointer + 1][1]; // First, shift the edit as far left as possible. |
|
|
|
var commonOffset = diff_commonSuffix(equality1, edit); |
|
|
|
if (commonOffset) { |
|
var commonString = edit.substring(edit.length - commonOffset); |
|
equality1 = equality1.substring(0, equality1.length - commonOffset); |
|
edit = commonString + edit.substring(0, edit.length - commonOffset); |
|
equality2 = commonString + equality2; |
|
} // Second, step character by character right, looking for the best fit. |
|
|
|
|
|
var bestEquality1 = equality1; |
|
var bestEdit = edit; |
|
var bestEquality2 = equality2; |
|
var bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); |
|
|
|
while (edit.charAt(0) === equality2.charAt(0)) { |
|
equality1 += edit.charAt(0); |
|
edit = edit.substring(1) + equality2.charAt(0); |
|
equality2 = equality2.substring(1); |
|
var score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); // The >= encourages trailing rather than leading whitespace on edits. |
|
|
|
if (score >= bestScore) { |
|
bestScore = score; |
|
bestEquality1 = equality1; |
|
bestEdit = edit; |
|
bestEquality2 = equality2; |
|
} |
|
} |
|
|
|
if (diffs[pointer - 1][1] != bestEquality1) { |
|
// We have an improvement, save it back to the diff. |
|
if (bestEquality1) { |
|
diffs[pointer - 1][1] = bestEquality1; |
|
} else { |
|
diffs.splice(pointer - 1, 1); |
|
pointer--; |
|
} |
|
|
|
diffs[pointer][1] = bestEdit; |
|
|
|
if (bestEquality2) { |
|
diffs[pointer + 1][1] = bestEquality2; |
|
} else { |
|
diffs.splice(pointer + 1, 1); |
|
pointer--; |
|
} |
|
} |
|
} |
|
|
|
pointer++; |
|
} |
|
}; // Define some regex patterns for matching boundaries. |
|
|
|
|
|
var nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/; |
|
var whitespaceRegex_ = /\s/; |
|
var linebreakRegex_ = /[\r\n]/; |
|
var blanklineEndRegex_ = /\n\r?\n$/; |
|
var blanklineStartRegex_ = /^\r?\n\r?\n/; |
|
/** |
|
* Reorder and merge like edit sections. Merge equalities. |
|
* Any edit section can move as long as it doesn't cross an equality. |
|
* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples. |
|
*/ |
|
|
|
var diff_cleanupMerge = function diff_cleanupMerge(diffs) { |
|
// Add a dummy entry at the end. |
|
diffs.push(new Diff(DIFF_EQUAL, '')); |
|
var pointer = 0; |
|
var count_delete = 0; |
|
var count_insert = 0; |
|
var text_delete = ''; |
|
var text_insert = ''; |
|
var commonlength; |
|
|
|
while (pointer < diffs.length) { |
|
switch (diffs[pointer][0]) { |
|
case DIFF_INSERT: |
|
count_insert++; |
|
text_insert += diffs[pointer][1]; |
|
pointer++; |
|
break; |
|
|
|
case DIFF_DELETE: |
|
count_delete++; |
|
text_delete += diffs[pointer][1]; |
|
pointer++; |
|
break; |
|
|
|
case DIFF_EQUAL: |
|
// Upon reaching an equality, check for prior redundancies. |
|
if (count_delete + count_insert > 1) { |
|
if (count_delete !== 0 && count_insert !== 0) { |
|
// Factor out any common prefixies. |
|
commonlength = diff_commonPrefix(text_insert, text_delete); |
|
|
|
if (commonlength !== 0) { |
|
if (pointer - count_delete - count_insert > 0 && diffs[pointer - count_delete - count_insert - 1][0] == DIFF_EQUAL) { |
|
diffs[pointer - count_delete - count_insert - 1][1] += text_insert.substring(0, commonlength); |
|
} else { |
|
diffs.splice(0, 0, new Diff(DIFF_EQUAL, text_insert.substring(0, commonlength))); |
|
pointer++; |
|
} |
|
|
|
text_insert = text_insert.substring(commonlength); |
|
text_delete = text_delete.substring(commonlength); |
|
} // Factor out any common suffixies. |
|
|
|
|
|
commonlength = diff_commonSuffix(text_insert, text_delete); |
|
|
|
if (commonlength !== 0) { |
|
diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1]; |
|
text_insert = text_insert.substring(0, text_insert.length - commonlength); |
|
text_delete = text_delete.substring(0, text_delete.length - commonlength); |
|
} |
|
} // Delete the offending records and add the merged ones. |
|
|
|
|
|
pointer -= count_delete + count_insert; |
|
diffs.splice(pointer, count_delete + count_insert); |
|
|
|
if (text_delete.length) { |
|
diffs.splice(pointer, 0, new Diff(DIFF_DELETE, text_delete)); |
|
pointer++; |
|
} |
|
|
|
if (text_insert.length) { |
|
diffs.splice(pointer, 0, new Diff(DIFF_INSERT, text_insert)); |
|
pointer++; |
|
} |
|
|
|
pointer++; |
|
} else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) { |
|
// Merge this equality with the previous one. |
|
diffs[pointer - 1][1] += diffs[pointer][1]; |
|
diffs.splice(pointer, 1); |
|
} else { |
|
pointer++; |
|
} |
|
|
|
count_insert = 0; |
|
count_delete = 0; |
|
text_delete = ''; |
|
text_insert = ''; |
|
break; |
|
} |
|
} |
|
|
|
if (diffs[diffs.length - 1][1] === '') { |
|
diffs.pop(); // Remove the dummy entry at the end. |
|
} // Second pass: look for single edits surrounded on both sides by equalities |
|
// which can be shifted sideways to eliminate an equality. |
|
// e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC |
|
|
|
|
|
var changes = false; |
|
pointer = 1; // Intentionally ignore the first and last element (don't need checking). |
|
|
|
while (pointer < diffs.length - 1) { |
|
if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) { |
|
// This is a single edit surrounded by equalities. |
|
if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) { |
|
// Shift the edit over the previous equality. |
|
diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length); |
|
diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; |
|
diffs.splice(pointer - 1, 1); |
|
changes = true; |
|
} else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) { |
|
// Shift the edit over the next equality. |
|
diffs[pointer - 1][1] += diffs[pointer + 1][1]; |
|
diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1]; |
|
diffs.splice(pointer + 1, 1); |
|
changes = true; |
|
} |
|
} |
|
|
|
pointer++; |
|
} // If shifts were made, the diff needs reordering and another shift sweep. |
|
|
|
|
|
if (changes) { |
|
diff_cleanupMerge(diffs); |
|
} |
|
}; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-diff/build/constants.js": |
|
/*!***********************************************!*\ |
|
!*** ./packages/jest-diff/build/constants.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.SIMILAR_MESSAGE = exports.NO_DIFF_MESSAGE = void 0; |
|
|
|
var _chalk = _interopRequireDefault(__webpack_require__(/*! chalk */ "./packages/expect/build/fakeChalk.js")); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var NO_DIFF_MESSAGE = _chalk.default.dim('Compared values have no visual difference.'); |
|
|
|
exports.NO_DIFF_MESSAGE = NO_DIFF_MESSAGE; |
|
|
|
var SIMILAR_MESSAGE = _chalk.default.dim('Compared values serialize to the same structure.\n' + 'Printing internal object structure without calling `toJSON` instead.'); |
|
|
|
exports.SIMILAR_MESSAGE = SIMILAR_MESSAGE; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-diff/build/diffLines.js": |
|
/*!***********************************************!*\ |
|
!*** ./packages/jest-diff/build/diffLines.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
|
|
var _chalk = _interopRequireDefault(__webpack_require__(/*! chalk */ "./packages/expect/build/fakeChalk.js")); |
|
|
|
var _diffSequences = _interopRequireDefault(__webpack_require__(/*! diff-sequences */ "./packages/diff-sequences/build/index.js")); |
|
|
|
var _constants = __webpack_require__(/*! ./constants */ "./packages/jest-diff/build/constants.js"); |
|
|
|
var _printDiffs = __webpack_require__(/*! ./printDiffs */ "./packages/jest-diff/build/printDiffs.js"); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var DIFF_CONTEXT_DEFAULT = 5; |
|
var fgDelete = _chalk.default.green; |
|
var fgInsert = _chalk.default.red; |
|
var fgCommon = _chalk.default.dim; // common lines (even indentation same) |
|
|
|
var fgIndent = _chalk.default.cyan; // common lines (only indentation different) |
|
|
|
var bgCommon = _chalk.default.bgYellow; // edge spaces in common line (even indentation same) |
|
|
|
var bgInverse = _chalk.default.inverse; // edge spaces in any other lines |
|
// ONLY trailing if expected value is snapshot or multiline string. |
|
|
|
var highlightTrailingSpaces = function highlightTrailingSpaces(line, bgColor) { |
|
return line.replace(/\s+$/, bgColor('$&')); |
|
}; // BOTH leading AND trailing if expected value is data structure. |
|
|
|
|
|
var highlightLeadingTrailingSpaces = function highlightLeadingTrailingSpaces(line, bgColor // If line consists of ALL spaces: highlight all of them. |
|
) { |
|
return highlightTrailingSpaces(line, bgColor).replace( // If line has an ODD length of leading spaces: highlight only the LAST. |
|
/^(\s\s)*(\s)(?=[^\s])/, '$1' + bgColor('$2')); |
|
}; |
|
|
|
var getHighlightSpaces = function getHighlightSpaces(bothEdges) { |
|
return bothEdges ? highlightLeadingTrailingSpaces : highlightTrailingSpaces; |
|
}; // Given index interval in expected lines, put formatted delete lines. |
|
|
|
|
|
var formatDelete = function formatDelete(aStart, aEnd, aLinesUn, aLinesIn, put) { |
|
var highlightSpaces = getHighlightSpaces(aLinesUn !== aLinesIn); |
|
|
|
for (var aIndex = aStart; aIndex !== aEnd; aIndex += 1) { |
|
var aLineUn = aLinesUn[aIndex]; |
|
var aLineIn = aLinesIn[aIndex]; |
|
var indentation = aLineIn.slice(0, aLineIn.length - aLineUn.length); |
|
put(fgDelete('- ' + indentation + highlightSpaces(aLineUn, bgInverse))); |
|
} |
|
}; // Given index interval in received lines, put formatted insert lines. |
|
|
|
|
|
var formatInsert = function formatInsert(bStart, bEnd, bLinesUn, bLinesIn, put) { |
|
var highlightSpaces = getHighlightSpaces(bLinesUn !== bLinesIn); |
|
|
|
for (var bIndex = bStart; bIndex !== bEnd; bIndex += 1) { |
|
var bLineUn = bLinesUn[bIndex]; |
|
var bLineIn = bLinesIn[bIndex]; |
|
var indentation = bLineIn.slice(0, bLineIn.length - bLineUn.length); |
|
put(fgInsert('+ ' + indentation + highlightSpaces(bLineUn, bgInverse))); |
|
} |
|
}; // Given the number of items and starting indexes of a common subsequence, |
|
// put formatted common lines. |
|
|
|
|
|
var formatCommon = function formatCommon(nCommon, aCommon, bCommon, aLinesIn, bLinesUn, bLinesIn, put) { |
|
var highlightSpaces = getHighlightSpaces(bLinesUn !== bLinesIn); |
|
|
|
for (; nCommon !== 0; nCommon -= 1, aCommon += 1, bCommon += 1) { |
|
var bLineUn = bLinesUn[bCommon]; |
|
var bLineIn = bLinesIn[bCommon]; |
|
var bLineInLength = bLineIn.length; // For common lines, received indentation seems more intuitive. |
|
|
|
var indentation = bLineIn.slice(0, bLineInLength - bLineUn.length); // Color shows whether expected and received line has same indentation. |
|
|
|
var hasSameIndentation = aLinesIn[aCommon].length === bLineInLength; |
|
var fg = hasSameIndentation ? fgCommon : fgIndent; |
|
var bg = hasSameIndentation ? bgCommon : bgInverse; |
|
put(fg(' ' + indentation + highlightSpaces(bLineUn, bg))); |
|
} |
|
}; // jest --expand |
|
// Return formatted diff as joined string of all lines. |
|
|
|
|
|
var diffExpand = function diffExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn) { |
|
var isCommon = function isCommon(aIndex, bIndex) { |
|
return aLinesUn[aIndex] === bLinesUn[bIndex]; |
|
}; |
|
|
|
var array = []; |
|
|
|
var put = function put(line) { |
|
array.push(line); |
|
}; |
|
|
|
var aStart = 0; |
|
var bStart = 0; |
|
|
|
var foundSubsequence = function foundSubsequence(nCommon, aCommon, bCommon) { |
|
formatDelete(aStart, aCommon, aLinesUn, aLinesIn, put); |
|
formatInsert(bStart, bCommon, bLinesUn, bLinesIn, put); |
|
formatCommon(nCommon, aCommon, bCommon, aLinesIn, bLinesUn, bLinesIn, put); |
|
aStart = aCommon + nCommon; |
|
bStart = bCommon + nCommon; |
|
}; |
|
|
|
var aLength = aLinesUn.length; |
|
var bLength = bLinesUn.length; |
|
(0, _diffSequences.default)(aLength, bLength, isCommon, foundSubsequence); // After the last common subsequence, format remaining change lines. |
|
|
|
formatDelete(aStart, aLength, aLinesUn, aLinesIn, put); |
|
formatInsert(bStart, bLength, bLinesUn, bLinesIn, put); |
|
return array.join('\n'); |
|
}; |
|
|
|
var getContextLines = function getContextLines(options) { |
|
return options && typeof options.contextLines === 'number' && options.contextLines >= 0 ? options.contextLines : DIFF_CONTEXT_DEFAULT; |
|
}; // jest --no-expand |
|
// Return joined string of formatted diff for all change lines, |
|
// but if some common lines are omitted because there are more than the context, |
|
// then a “patch mark” precedes each set of adjacent changed and common lines. |
|
|
|
|
|
var diffNoExpand = function diffNoExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, nContextLines) { |
|
var isCommon = function isCommon(aIndex, bIndex) { |
|
return aLinesUn[aIndex] === bLinesUn[bIndex]; |
|
}; |
|
|
|
var iPatchMark = 0; // index of placeholder line for patch mark |
|
|
|
var array = ['']; |
|
|
|
var put = function put(line) { |
|
array.push(line); |
|
}; |
|
|
|
var isAtEnd = false; |
|
var aLength = aLinesUn.length; |
|
var bLength = bLinesUn.length; |
|
var nContextLines2 = nContextLines + nContextLines; // Initialize the first patch for changes at the start, |
|
// especially for edge case in which there is no common subsequence. |
|
|
|
var aStart = 0; |
|
var aEnd = 0; |
|
var bStart = 0; |
|
var bEnd = 0; // Given the number of items and starting indexes of each common subsequence, |
|
// format any preceding change lines, and then common context lines. |
|
|
|
var foundSubsequence = function foundSubsequence(nCommon, aStartCommon, bStartCommon) { |
|
var aEndCommon = aStartCommon + nCommon; |
|
var bEndCommon = bStartCommon + nCommon; |
|
isAtEnd = aEndCommon === aLength && bEndCommon === bLength; // If common subsequence is at start, re-initialize the first patch. |
|
|
|
if (aStartCommon === 0 && bStartCommon === 0) { |
|
var nLines = nContextLines < nCommon ? nContextLines : nCommon; |
|
aStart = aEndCommon - nLines; |
|
bStart = bEndCommon - nLines; |
|
formatCommon(nLines, aStart, bStart, aLinesIn, bLinesUn, bLinesIn, put); |
|
aEnd = aEndCommon; |
|
bEnd = bEndCommon; |
|
return; |
|
} // Format preceding change lines. |
|
|
|
|
|
formatDelete(aEnd, aStartCommon, aLinesUn, aLinesIn, put); |
|
formatInsert(bEnd, bStartCommon, bLinesUn, bLinesIn, put); |
|
aEnd = aStartCommon; |
|
bEnd = bStartCommon; // If common subsequence is at end, then context follows preceding changes; |
|
// else context follows preceding changes AND precedes following changes. |
|
|
|
var maxContextLines = isAtEnd ? nContextLines : nContextLines2; |
|
|
|
if (nCommon <= maxContextLines) { |
|
// The patch includes all lines in the common subsequence. |
|
formatCommon(nCommon, aEnd, bEnd, aLinesIn, bLinesUn, bLinesIn, put); |
|
aEnd += nCommon; |
|
bEnd += nCommon; |
|
return; |
|
} // The patch ends because context is less than number of common lines. |
|
|
|
|
|
formatCommon(nContextLines, aEnd, bEnd, aLinesIn, bLinesUn, bLinesIn, put); |
|
aEnd += nContextLines; |
|
bEnd += nContextLines; |
|
array[iPatchMark] = (0, _printDiffs.createPatchMark)(aStart, aEnd, bStart, bEnd); // If common subsequence is not at end, another patch follows it. |
|
|
|
if (!isAtEnd) { |
|
iPatchMark = array.length; // index of placeholder line |
|
|
|
array[iPatchMark] = ''; |
|
|
|
var _nLines = nContextLines < nCommon ? nContextLines : nCommon; |
|
|
|
aStart = aEndCommon - _nLines; |
|
bStart = bEndCommon - _nLines; |
|
formatCommon(_nLines, aStart, bStart, aLinesIn, bLinesUn, bLinesIn, put); |
|
aEnd = aEndCommon; |
|
bEnd = bEndCommon; |
|
} |
|
}; |
|
|
|
(0, _diffSequences.default)(aLength, bLength, isCommon, foundSubsequence); // If no common subsequence or last was not at end, format remaining change lines. |
|
|
|
if (!isAtEnd) { |
|
formatDelete(aEnd, aLength, aLinesUn, aLinesIn, put); |
|
formatInsert(bEnd, bLength, bLinesUn, bLinesIn, put); |
|
aEnd = aLength; |
|
bEnd = bLength; |
|
} |
|
|
|
if (aStart === 0 && aEnd === aLength && bStart === 0 && bEnd === bLength) { |
|
array.splice(0, 1); // delete placeholder line for patch mark |
|
} else { |
|
array[iPatchMark] = (0, _printDiffs.createPatchMark)(aStart, aEnd, bStart, bEnd); |
|
} |
|
|
|
return array.join('\n'); |
|
}; |
|
|
|
var _default = function _default(a, b, options, original) { |
|
if (a === b) { |
|
return _constants.NO_DIFF_MESSAGE; |
|
} |
|
|
|
var aLinesUn = a.split('\n'); |
|
var bLinesUn = b.split('\n'); // Indentation is unknown if expected value is snapshot or multiline string. |
|
|
|
var aLinesIn = aLinesUn; |
|
var bLinesIn = bLinesUn; |
|
|
|
if (original) { |
|
// Indentation is known if expected value is data structure: |
|
// Compare lines without indentation and format lines with indentation. |
|
aLinesIn = original.a.split('\n'); |
|
bLinesIn = original.b.split('\n'); |
|
|
|
if (aLinesUn.length !== aLinesIn.length || bLinesUn.length !== bLinesIn.length) { |
|
// Fall back if unindented and indented lines are inconsistent. |
|
aLinesUn = aLinesIn; |
|
bLinesUn = bLinesIn; |
|
} |
|
} |
|
|
|
return (0, _printDiffs.printAnnotation)(options) + (options && options.expand === false ? diffNoExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, getContextLines(options)) : diffExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn)); |
|
}; |
|
|
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-diff/build/diffStrings.js": |
|
/*!*************************************************!*\ |
|
!*** ./packages/jest-diff/build/diffStrings.js ***! |
|
\*************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
|
|
var _diffSequences = _interopRequireDefault(__webpack_require__(/*! diff-sequences */ "./packages/diff-sequences/build/index.js")); |
|
|
|
var _cleanupSemantic = __webpack_require__(/*! ./cleanupSemantic */ "./packages/jest-diff/build/cleanupSemantic.js"); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var diffStrings = function diffStrings(a, b) { |
|
var isCommon = function isCommon(aIndex, bIndex) { |
|
return a[aIndex] === b[bIndex]; |
|
}; |
|
|
|
var aIndex = 0; |
|
var bIndex = 0; |
|
var diffs = []; |
|
|
|
var foundSubsequence = function foundSubsequence(nCommon, aCommon, bCommon) { |
|
if (aIndex !== aCommon) { |
|
diffs.push(new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, a.slice(aIndex, aCommon))); |
|
} |
|
|
|
if (bIndex !== bCommon) { |
|
diffs.push(new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, b.slice(bIndex, bCommon))); |
|
} |
|
|
|
aIndex = aCommon + nCommon; // number of characters compared in a |
|
|
|
bIndex = bCommon + nCommon; // number of characters compared in b |
|
|
|
diffs.push(new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_EQUAL, b.slice(bCommon, bIndex))); |
|
}; |
|
|
|
(0, _diffSequences.default)(a.length, b.length, isCommon, foundSubsequence); // After the last common subsequence, push remaining change items. |
|
|
|
if (aIndex !== a.length) { |
|
diffs.push(new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, a.slice(aIndex))); |
|
} |
|
|
|
if (bIndex !== b.length) { |
|
diffs.push(new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, b.slice(bIndex))); |
|
} |
|
|
|
return diffs; |
|
}; |
|
|
|
var _default = diffStrings; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-diff/build/getAlignedDiffs.js": |
|
/*!*****************************************************!*\ |
|
!*** ./packages/jest-diff/build/getAlignedDiffs.js ***! |
|
\*****************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } |
|
|
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } |
|
|
|
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } |
|
|
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } |
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
|
|
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } |
|
|
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
|
|
var _cleanupSemantic = __webpack_require__(/*! ./cleanupSemantic */ "./packages/jest-diff/build/cleanupSemantic.js"); |
|
|
|
var _printDiffs = __webpack_require__(/*! ./printDiffs */ "./packages/jest-diff/build/printDiffs.js"); |
|
|
|
function _defineProperty(obj, key, value) { |
|
if (key in obj) { |
|
Object.defineProperty(obj, key, { |
|
value: value, |
|
enumerable: true, |
|
configurable: true, |
|
writable: true |
|
}); |
|
} else { |
|
obj[key] = value; |
|
} |
|
|
|
return obj; |
|
} // Encapsulate change lines until either a common newline or the end. |
|
|
|
|
|
var ChangeBuffer = |
|
/*#__PURE__*/ |
|
function () { |
|
// incomplete line |
|
// complete lines |
|
function ChangeBuffer(op) { |
|
_classCallCheck(this, ChangeBuffer); |
|
|
|
_defineProperty(this, 'op', void 0); |
|
|
|
_defineProperty(this, 'line', void 0); |
|
|
|
_defineProperty(this, 'lines', void 0); |
|
|
|
this.op = op; |
|
this.line = []; |
|
this.lines = []; |
|
} |
|
|
|
_createClass(ChangeBuffer, [{ |
|
key: "pushSubstring", |
|
value: function pushSubstring(substring) { |
|
this.pushDiff(new _cleanupSemantic.Diff(this.op, substring)); |
|
} |
|
}, { |
|
key: "pushLine", |
|
value: function pushLine() { |
|
// Assume call only if line has at least one diff, |
|
// therefore an empty line must have a diff which has an empty string. |
|
this.lines.push(new _cleanupSemantic.Diff(this.op, (0, _printDiffs.getHighlightedString)(this.op, this.line))); |
|
this.line.length = 0; |
|
} |
|
}, { |
|
key: "isLineEmpty", |
|
value: function isLineEmpty() { |
|
return this.line.length === 0; |
|
} // Minor input to buffer. |
|
|
|
}, { |
|
key: "pushDiff", |
|
value: function pushDiff(diff) { |
|
this.line.push(diff); |
|
} // Main input to buffer. |
|
|
|
}, { |
|
key: "align", |
|
value: function align(diff) { |
|
var _this = this; |
|
|
|
var string = diff[1]; |
|
|
|
if (_printDiffs.MULTILINE_REGEXP.test(string)) { |
|
var substrings = string.split('\n'); |
|
var iLast = substrings.length - 1; |
|
substrings.forEach(function (substring, i) { |
|
if (i < iLast) { |
|
// The first substring completes the current change line. |
|
// A middle substring is a change line. |
|
_this.pushSubstring(substring); |
|
|
|
_this.pushLine(); |
|
} else if (substring.length !== 0) { |
|
// The last substring starts a change line, if it is not empty. |
|
// Important: This non-empty condition also automatically omits |
|
// the newline appended to the end of expected and received strings. |
|
_this.pushSubstring(substring); |
|
} |
|
}); |
|
} else { |
|
// Append non-multiline string to current change line. |
|
this.pushDiff(diff); |
|
} |
|
} // Output from buffer. |
|
|
|
}, { |
|
key: "moveLinesTo", |
|
value: function moveLinesTo(lines) { |
|
if (!this.isLineEmpty()) { |
|
this.pushLine(); |
|
} |
|
|
|
lines.push.apply(lines, _toConsumableArray(this.lines)); |
|
this.lines.length = 0; |
|
} |
|
}]); |
|
|
|
return ChangeBuffer; |
|
}(); // Encapsulate common and change lines. |
|
|
|
|
|
var CommonBuffer = |
|
/*#__PURE__*/ |
|
function () { |
|
function CommonBuffer(deleteBuffer, insertBuffer) { |
|
_classCallCheck(this, CommonBuffer); |
|
|
|
_defineProperty(this, 'deleteBuffer', void 0); |
|
|
|
_defineProperty(this, 'insertBuffer', void 0); |
|
|
|
_defineProperty(this, 'lines', void 0); |
|
|
|
this.deleteBuffer = deleteBuffer; |
|
this.insertBuffer = insertBuffer; |
|
this.lines = []; |
|
} |
|
|
|
_createClass(CommonBuffer, [{ |
|
key: "pushDiffCommonLine", |
|
value: function pushDiffCommonLine(diff) { |
|
this.lines.push(diff); |
|
} |
|
}, { |
|
key: "pushDiffChangeLines", |
|
value: function pushDiffChangeLines(diff) { |
|
var isDiffEmpty = diff[1].length === 0; // An empty diff string is redundant, unless a change line is empty. |
|
|
|
if (!isDiffEmpty || this.deleteBuffer.isLineEmpty()) { |
|
this.deleteBuffer.pushDiff(diff); |
|
} |
|
|
|
if (!isDiffEmpty || this.insertBuffer.isLineEmpty()) { |
|
this.insertBuffer.pushDiff(diff); |
|
} |
|
} |
|
}, { |
|
key: "flushChangeLines", |
|
value: function flushChangeLines() { |
|
this.deleteBuffer.moveLinesTo(this.lines); |
|
this.insertBuffer.moveLinesTo(this.lines); |
|
} // Input to buffer. |
|
|
|
}, { |
|
key: "align", |
|
value: function align(diff) { |
|
var _this2 = this; |
|
|
|
var op = diff[0]; |
|
var string = diff[1]; |
|
|
|
if (_printDiffs.MULTILINE_REGEXP.test(string)) { |
|
var substrings = string.split('\n'); |
|
var iLast = substrings.length - 1; |
|
substrings.forEach(function (substring, i) { |
|
if (i === 0) { |
|
var subdiff = new _cleanupSemantic.Diff(op, substring); |
|
|
|
if (_this2.deleteBuffer.isLineEmpty() && _this2.insertBuffer.isLineEmpty()) { |
|
// If both current change lines are empty, |
|
// then the first substring is a common line. |
|
_this2.flushChangeLines(); |
|
|
|
_this2.pushDiffCommonLine(subdiff); |
|
} else { |
|
// If either current change line is non-empty, |
|
// then the first substring completes the change lines. |
|
_this2.pushDiffChangeLines(subdiff); |
|
|
|
_this2.flushChangeLines(); |
|
} |
|
} else if (i < iLast) { |
|
// A middle substring is a common line. |
|
_this2.pushDiffCommonLine(new _cleanupSemantic.Diff(op, substring)); |
|
} else if (substring.length !== 0) { |
|
// The last substring starts a change line, if it is not empty. |
|
// Important: This non-empty condition also automatically omits |
|
// the newline appended to the end of expected and received strings. |
|
_this2.pushDiffChangeLines(new _cleanupSemantic.Diff(op, substring)); |
|
} |
|
}); |
|
} else { |
|
// Append non-multiline string to current change lines. |
|
// Important: It cannot be at the end following empty change lines, |
|
// because newline appended to the end of expected and received strings. |
|
this.pushDiffChangeLines(diff); |
|
} |
|
} // Output from buffer. |
|
|
|
}, { |
|
key: "getLines", |
|
value: function getLines() { |
|
this.flushChangeLines(); |
|
return this.lines; |
|
} |
|
}]); |
|
|
|
return CommonBuffer; |
|
}(); // Given diffs from expected and received strings, |
|
// return new array of diffs split or joined into lines. |
|
// |
|
// To correctly align a change line at the end, the algorithm: |
|
// * assumes that a newline was appended to the strings |
|
// * omits the last newline from the output array |
|
// |
|
// Assume the function is not called: |
|
// * if either expected or received is empty string |
|
// * if neither expected nor received is multiline string |
|
|
|
|
|
var getAlignedDiffs = function getAlignedDiffs(diffs) { |
|
var deleteBuffer = new ChangeBuffer(_cleanupSemantic.DIFF_DELETE); |
|
var insertBuffer = new ChangeBuffer(_cleanupSemantic.DIFF_INSERT); |
|
var commonBuffer = new CommonBuffer(deleteBuffer, insertBuffer); |
|
diffs.forEach(function (diff) { |
|
switch (diff[0]) { |
|
case _cleanupSemantic.DIFF_DELETE: |
|
deleteBuffer.align(diff); |
|
break; |
|
|
|
case _cleanupSemantic.DIFF_INSERT: |
|
insertBuffer.align(diff); |
|
break; |
|
|
|
default: |
|
commonBuffer.align(diff); |
|
} |
|
}); |
|
return commonBuffer.getLines(); |
|
}; |
|
|
|
var _default = getAlignedDiffs; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-diff/build/index.js": |
|
/*!*******************************************!*\ |
|
!*** ./packages/jest-diff/build/index.js ***! |
|
\*******************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(global) { |
|
|
|
var _prettyFormat = _interopRequireDefault(__webpack_require__(/*! pretty-format */ "./packages/pretty-format/build/index.js")); |
|
|
|
var _chalk = _interopRequireDefault(__webpack_require__(/*! chalk */ "./packages/expect/build/fakeChalk.js")); |
|
|
|
var _jestGetType = _interopRequireDefault(__webpack_require__(/*! jest-get-type */ "./packages/jest-get-type/build/index.js")); |
|
|
|
var _diffLines = _interopRequireDefault(__webpack_require__(/*! ./diffLines */ "./packages/jest-diff/build/diffLines.js")); |
|
|
|
var _printDiffs = __webpack_require__(/*! ./printDiffs */ "./packages/jest-diff/build/printDiffs.js"); |
|
|
|
var _constants = __webpack_require__(/*! ./constants */ "./packages/jest-diff/build/constants.js"); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
|
|
var _Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; |
|
|
|
function _objectSpread(target) { |
|
for (var i = 1; i < arguments.length; i++) { |
|
var source = arguments[i] != null ? arguments[i] : {}; |
|
var ownKeys = Object.keys(source); |
|
|
|
if (typeof Object.getOwnPropertySymbols === 'function') { |
|
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { |
|
return Object.getOwnPropertyDescriptor(source, sym).enumerable; |
|
})); |
|
} |
|
|
|
ownKeys.forEach(function (key) { |
|
_defineProperty(target, key, source[key]); |
|
}); |
|
} |
|
|
|
return target; |
|
} |
|
|
|
function _defineProperty(obj, key, value) { |
|
if (key in obj) { |
|
Object.defineProperty(obj, key, { |
|
value: value, |
|
enumerable: true, |
|
configurable: true, |
|
writable: true |
|
}); |
|
} else { |
|
obj[key] = value; |
|
} |
|
|
|
return obj; |
|
} |
|
|
|
var _prettyFormat$plugins = _prettyFormat.default.plugins, |
|
AsymmetricMatcher = _prettyFormat$plugins.AsymmetricMatcher, |
|
DOMCollection = _prettyFormat$plugins.DOMCollection, |
|
DOMElement = _prettyFormat$plugins.DOMElement, |
|
Immutable = _prettyFormat$plugins.Immutable, |
|
ReactElement = _prettyFormat$plugins.ReactElement, |
|
ReactTestComponent = _prettyFormat$plugins.ReactTestComponent; |
|
var PLUGINS = [ReactTestComponent, ReactElement, DOMElement, DOMCollection, Immutable, AsymmetricMatcher]; |
|
var FORMAT_OPTIONS = { |
|
plugins: PLUGINS |
|
}; |
|
|
|
var FORMAT_OPTIONS_0 = _objectSpread({}, FORMAT_OPTIONS, { |
|
indent: 0 |
|
}); |
|
|
|
var FALLBACK_FORMAT_OPTIONS = { |
|
callToJSON: false, |
|
maxDepth: 10, |
|
plugins: PLUGINS |
|
}; |
|
|
|
var FALLBACK_FORMAT_OPTIONS_0 = _objectSpread({}, FALLBACK_FORMAT_OPTIONS, { |
|
indent: 0 |
|
}); // Generate a string that will highlight the difference between two values |
|
// with green and red. (similar to how github does code diffing) |
|
|
|
|
|
function diff(a, b, options) { |
|
if (Object.is(a, b)) { |
|
return _constants.NO_DIFF_MESSAGE; |
|
} |
|
|
|
var aType = (0, _jestGetType.default)(a); |
|
var expectedType = aType; |
|
var omitDifference = false; |
|
|
|
if (aType === 'object' && typeof a.asymmetricMatch === 'function') { |
|
if (a.$$typeof !== _Symbol.for('jest.asymmetricMatcher')) { |
|
// Do not know expected type of user-defined asymmetric matcher. |
|
return null; |
|
} |
|
|
|
if (typeof a.getExpectedType !== 'function') { |
|
// For example, expect.anything() matches either null or undefined |
|
return null; |
|
} |
|
|
|
expectedType = a.getExpectedType(); // Primitive types boolean and number omit difference below. |
|
// For example, omit difference for expect.stringMatching(regexp) |
|
|
|
omitDifference = expectedType === 'string'; |
|
} |
|
|
|
if (expectedType !== (0, _jestGetType.default)(b)) { |
|
return ' Comparing two different types of values.' + " Expected ".concat(_chalk.default.green(expectedType), " but ") + "received ".concat(_chalk.default.red((0, _jestGetType.default)(b)), "."); |
|
} |
|
|
|
if (omitDifference) { |
|
return null; |
|
} |
|
|
|
switch (aType) { |
|
case 'string': |
|
return (0, _diffLines.default)(a, b, options); |
|
|
|
case 'boolean': |
|
case 'number': |
|
return comparePrimitive(a, b, options); |
|
|
|
case 'map': |
|
return compareObjects(sortMap(a), sortMap(b), options); |
|
|
|
case 'set': |
|
return compareObjects(sortSet(a), sortSet(b), options); |
|
|
|
default: |
|
return compareObjects(a, b, options); |
|
} |
|
} |
|
|
|
function comparePrimitive(a, b, options) { |
|
return (0, _diffLines.default)((0, _prettyFormat.default)(a, FORMAT_OPTIONS), (0, _prettyFormat.default)(b, FORMAT_OPTIONS), options); |
|
} |
|
|
|
function sortMap(map) { |
|
return new Map(Array.from(map.entries()).sort()); |
|
} |
|
|
|
function sortSet(set) { |
|
return new Set(Array.from(set.values()).sort()); |
|
} |
|
|
|
function compareObjects(a, b, options) { |
|
var diffMessage; |
|
var hasThrown = false; |
|
|
|
try { |
|
diffMessage = (0, _diffLines.default)((0, _prettyFormat.default)(a, FORMAT_OPTIONS_0), (0, _prettyFormat.default)(b, FORMAT_OPTIONS_0), options, { |
|
a: (0, _prettyFormat.default)(a, FORMAT_OPTIONS), |
|
b: (0, _prettyFormat.default)(b, FORMAT_OPTIONS) |
|
}); |
|
} catch (e) { |
|
hasThrown = true; |
|
} // If the comparison yields no results, compare again but this time |
|
// without calling `toJSON`. It's also possible that toJSON might throw. |
|
|
|
|
|
if (!diffMessage || diffMessage === _constants.NO_DIFF_MESSAGE) { |
|
diffMessage = (0, _diffLines.default)((0, _prettyFormat.default)(a, FALLBACK_FORMAT_OPTIONS_0), (0, _prettyFormat.default)(b, FALLBACK_FORMAT_OPTIONS_0), options, { |
|
a: (0, _prettyFormat.default)(a, FALLBACK_FORMAT_OPTIONS), |
|
b: (0, _prettyFormat.default)(b, FALLBACK_FORMAT_OPTIONS) |
|
}); |
|
|
|
if (diffMessage !== _constants.NO_DIFF_MESSAGE && !hasThrown) { |
|
diffMessage = _constants.SIMILAR_MESSAGE + '\n\n' + diffMessage; |
|
} |
|
} |
|
|
|
return diffMessage; |
|
} // eslint-disable-next-line no-redeclare |
|
|
|
|
|
diff.getStringDiff = _printDiffs.getStringDiff; |
|
module.exports = diff; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-diff/build/joinAlignedDiffs.js": |
|
/*!******************************************************!*\ |
|
!*** ./packages/jest-diff/build/joinAlignedDiffs.js ***! |
|
\******************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.joinAlignedDiffsExpand = exports.joinAlignedDiffsNoExpand = void 0; |
|
|
|
var _cleanupSemantic = __webpack_require__(/*! ./cleanupSemantic */ "./packages/jest-diff/build/cleanupSemantic.js"); |
|
|
|
var _printDiffs = __webpack_require__(/*! ./printDiffs */ "./packages/jest-diff/build/printDiffs.js"); |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var DIFF_CONTEXT_DEFAULT = 5; // same as diffLines |
|
// jest --no-expand |
|
// |
|
// Given array of aligned strings with inverse highlight formatting, |
|
// return joined lines with diff formatting (and patch marks, if needed). |
|
|
|
var joinAlignedDiffsNoExpand = function joinAlignedDiffsNoExpand(diffs) { |
|
var nContextLines = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIFF_CONTEXT_DEFAULT; |
|
var iLength = diffs.length; |
|
var nContextLines2 = nContextLines + nContextLines; // First pass: count output lines and see if it has patches. |
|
|
|
var jLength = iLength; |
|
var hasExcessAtStartOrEnd = false; |
|
var nExcessesBetweenChanges = 0; |
|
var i = 0; |
|
|
|
while (i !== iLength) { |
|
var iStart = i; |
|
|
|
while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_EQUAL) { |
|
i += 1; |
|
} |
|
|
|
if (iStart !== i) { |
|
if (iStart === 0) { |
|
// at start |
|
if (i > nContextLines) { |
|
jLength -= i - nContextLines; // subtract excess common lines |
|
|
|
hasExcessAtStartOrEnd = true; |
|
} |
|
} else if (i === iLength) { |
|
// at end |
|
var n = i - iStart; |
|
|
|
if (n > nContextLines) { |
|
jLength -= n - nContextLines; // subtract excess common lines |
|
|
|
hasExcessAtStartOrEnd = true; |
|
} |
|
} else { |
|
// between changes |
|
var _n = i - iStart; |
|
|
|
if (_n > nContextLines2) { |
|
jLength -= _n - nContextLines2; // subtract excess common lines |
|
|
|
nExcessesBetweenChanges += 1; |
|
} |
|
} |
|
} |
|
|
|
while (i !== iLength && diffs[i][0] !== _cleanupSemantic.DIFF_EQUAL) { |
|
i += 1; |
|
} |
|
} |
|
|
|
var hasPatch = nExcessesBetweenChanges !== 0 || hasExcessAtStartOrEnd; |
|
|
|
if (nExcessesBetweenChanges !== 0) { |
|
jLength += nExcessesBetweenChanges + 1; // add patch lines |
|
} else if (hasExcessAtStartOrEnd) { |
|
jLength += 1; // add patch line |
|
} |
|
|
|
var jLast = jLength - 1; |
|
var lines = []; |
|
var jPatchMark = 0; // index of placeholder line for current patch mark |
|
|
|
if (hasPatch) { |
|
lines.push(''); // placeholder line for first patch mark |
|
} // Indexes of expected or received lines in current patch: |
|
|
|
|
|
var aStart = 0; |
|
var bStart = 0; |
|
var aEnd = 0; |
|
var bEnd = 0; |
|
|
|
var pushCommonLine = function pushCommonLine(line) { |
|
var j = lines.length; |
|
lines.push((0, _printDiffs.printCommonLine)(line, j === 0 || j === jLast)); |
|
aEnd += 1; |
|
bEnd += 1; |
|
}; |
|
|
|
var pushDeleteLine = function pushDeleteLine(line) { |
|
lines.push((0, _printDiffs.printDeleteLine)(line)); |
|
aEnd += 1; |
|
}; |
|
|
|
var pushInsertLine = function pushInsertLine(line) { |
|
lines.push((0, _printDiffs.printInsertLine)(line)); |
|
bEnd += 1; |
|
}; // Second pass: push lines with diff formatting (and patch marks, if needed). |
|
|
|
|
|
i = 0; |
|
|
|
while (i !== iLength) { |
|
var _iStart = i; |
|
|
|
while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_EQUAL) { |
|
i += 1; |
|
} |
|
|
|
if (_iStart !== i) { |
|
if (_iStart === 0) { |
|
// at beginning |
|
if (i > nContextLines) { |
|
_iStart = i - nContextLines; |
|
aStart = _iStart; |
|
bStart = _iStart; |
|
aEnd = aStart; |
|
bEnd = bStart; |
|
} |
|
|
|
for (var iCommon = _iStart; iCommon !== i; iCommon += 1) { |
|
pushCommonLine(diffs[iCommon][1]); |
|
} |
|
} else if (i === iLength) { |
|
// at end |
|
var iEnd = i - _iStart > nContextLines ? _iStart + nContextLines : i; |
|
|
|
for (var _iCommon = _iStart; _iCommon !== iEnd; _iCommon += 1) { |
|
pushCommonLine(diffs[_iCommon][1]); |
|
} |
|
} else { |
|
// between changes |
|
var nCommon = i - _iStart; |
|
|
|
if (nCommon > nContextLines2) { |
|
var _iEnd = _iStart + nContextLines; |
|
|
|
for (var _iCommon2 = _iStart; _iCommon2 !== _iEnd; _iCommon2 += 1) { |
|
pushCommonLine(diffs[_iCommon2][1]); |
|
} |
|
|
|
lines[jPatchMark] = (0, _printDiffs.createPatchMark)(aStart, aEnd, bStart, bEnd); |
|
jPatchMark = lines.length; |
|
lines.push(''); // placeholder line for next patch mark |
|
|
|
var nOmit = nCommon - nContextLines2; |
|
aStart = aEnd + nOmit; |
|
bStart = bEnd + nOmit; |
|
aEnd = aStart; |
|
bEnd = bStart; |
|
|
|
for (var _iCommon3 = i - nContextLines; _iCommon3 !== i; _iCommon3 += 1) { |
|
pushCommonLine(diffs[_iCommon3][1]); |
|
} |
|
} else { |
|
for (var _iCommon4 = _iStart; _iCommon4 !== i; _iCommon4 += 1) { |
|
pushCommonLine(diffs[_iCommon4][1]); |
|
} |
|
} |
|
} |
|
} |
|
|
|
while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_DELETE) { |
|
pushDeleteLine(diffs[i][1]); |
|
i += 1; |
|
} |
|
|
|
while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_INSERT) { |
|
pushInsertLine(diffs[i][1]); |
|
i += 1; |
|
} |
|
} |
|
|
|
if (hasPatch) { |
|
lines[jPatchMark] = (0, _printDiffs.createPatchMark)(aStart, aEnd, bStart, bEnd); |
|
} |
|
|
|
return lines.join('\n'); |
|
}; // jest --expand |
|
// |
|
// Given array of aligned strings with inverse highlight formatting, |
|
// return joined lines with diff formatting. |
|
|
|
|
|
exports.joinAlignedDiffsNoExpand = joinAlignedDiffsNoExpand; |
|
|
|
var joinAlignedDiffsExpand = function joinAlignedDiffsExpand(diffs) { |
|
return diffs.map(function (diff, i, diffs) { |
|
var line = diff[1]; |
|
|
|
switch (diff[0]) { |
|
case _cleanupSemantic.DIFF_DELETE: |
|
return (0, _printDiffs.printDeleteLine)(line); |
|
|
|
case _cleanupSemantic.DIFF_INSERT: |
|
return (0, _printDiffs.printInsertLine)(line); |
|
|
|
default: |
|
return (0, _printDiffs.printCommonLine)(line, i === 0 || i === diffs.length - 1); |
|
} |
|
}).join('\n'); |
|
}; |
|
|
|
exports.joinAlignedDiffsExpand = joinAlignedDiffsExpand; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-diff/build/printDiffs.js": |
|
/*!************************************************!*\ |
|
!*** ./packages/jest-diff/build/printDiffs.js ***! |
|
\************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.getStringDiff = exports.printMultilineStringDiffs = exports.createPatchMark = exports.printAnnotation = exports.hasCommonDiff = exports.computeStringDiffs = exports.printCommonLine = exports.printInsertLine = exports.printDeleteLine = exports.MULTILINE_REGEXP = exports.getReceivedString = exports.getExpectedString = exports.getHighlightedString = exports.RECEIVED_COLOR = exports.INVERTED_COLOR = exports.EXPECTED_COLOR = exports.DIM_COLOR = void 0; |
|
|
|
var _chalk = _interopRequireDefault(__webpack_require__(/*! chalk */ "./packages/expect/build/fakeChalk.js")); |
|
|
|
var _cleanupSemantic = __webpack_require__(/*! ./cleanupSemantic */ "./packages/jest-diff/build/cleanupSemantic.js"); |
|
|
|
var _diffStrings = _interopRequireDefault(__webpack_require__(/*! ./diffStrings */ "./packages/jest-diff/build/diffStrings.js")); |
|
|
|
var _getAlignedDiffs = _interopRequireDefault(__webpack_require__(/*! ./getAlignedDiffs */ "./packages/jest-diff/build/getAlignedDiffs.js")); |
|
|
|
var _joinAlignedDiffs = __webpack_require__(/*! ./joinAlignedDiffs */ "./packages/jest-diff/build/joinAlignedDiffs.js"); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var DIM_COLOR = _chalk.default.dim; |
|
exports.DIM_COLOR = DIM_COLOR; |
|
var EXPECTED_COLOR = _chalk.default.green; |
|
exports.EXPECTED_COLOR = EXPECTED_COLOR; |
|
var INVERTED_COLOR = _chalk.default.inverse; |
|
exports.INVERTED_COLOR = INVERTED_COLOR; |
|
var RECEIVED_COLOR = _chalk.default.red; |
|
exports.RECEIVED_COLOR = RECEIVED_COLOR; |
|
var PATCH_COLOR = _chalk.default.yellow; // Given change op and array of diffs, return concatenated string: |
|
// * include common strings |
|
// * include change strings which have argument op (inverse highlight) |
|
// * exclude change strings which have opposite op |
|
|
|
var getHighlightedString = function getHighlightedString(op, diffs) { |
|
return diffs.reduce(function (reduced, diff) { |
|
return reduced + (diff[0] === _cleanupSemantic.DIFF_EQUAL ? diff[1] : diff[0] === op ? INVERTED_COLOR(diff[1]) : ''); |
|
}, ''); |
|
}; |
|
|
|
exports.getHighlightedString = getHighlightedString; |
|
|
|
var getExpectedString = function getExpectedString(diffs) { |
|
return getHighlightedString(_cleanupSemantic.DIFF_DELETE, diffs); |
|
}; |
|
|
|
exports.getExpectedString = getExpectedString; |
|
|
|
var getReceivedString = function getReceivedString(diffs) { |
|
return getHighlightedString(_cleanupSemantic.DIFF_INSERT, diffs); |
|
}; |
|
|
|
exports.getReceivedString = getReceivedString; |
|
var MULTILINE_REGEXP = /\n/; |
|
exports.MULTILINE_REGEXP = MULTILINE_REGEXP; |
|
var NEWLINE_SYMBOL = "\u21B5"; // downwards arrow with corner leftwards |
|
|
|
var SPACE_SYMBOL = "\xB7"; // middle dot |
|
// Instead of inverse highlight which now implies a change, |
|
// replace common spaces with middle dot at the end of the line. |
|
|
|
var replaceSpacesAtEnd = function replaceSpacesAtEnd(line) { |
|
return line.replace(/\s+$/, function (spaces) { |
|
return SPACE_SYMBOL.repeat(spaces.length); |
|
}); |
|
}; |
|
|
|
var printDeleteLine = function printDeleteLine(line) { |
|
return EXPECTED_COLOR(line.length !== 0 ? '- ' + replaceSpacesAtEnd(line) : '-'); |
|
}; |
|
|
|
exports.printDeleteLine = printDeleteLine; |
|
|
|
var printInsertLine = function printInsertLine(line) { |
|
return RECEIVED_COLOR(line.length !== 0 ? '+ ' + replaceSpacesAtEnd(line) : '+'); |
|
}; // Prevent visually ambiguous empty line as the first or the last. |
|
|
|
|
|
exports.printInsertLine = printInsertLine; |
|
|
|
var printCommonLine = function printCommonLine(line) { |
|
var isFirstOrLast = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; |
|
return line.length !== 0 ? DIM_COLOR(' ' + replaceSpacesAtEnd(line)) : isFirstOrLast ? DIM_COLOR(' ' + NEWLINE_SYMBOL) : ''; |
|
}; |
|
|
|
exports.printCommonLine = printCommonLine; |
|
|
|
var computeStringDiffs = function computeStringDiffs(expected, received) { |
|
var isMultiline = MULTILINE_REGEXP.test(expected) || MULTILINE_REGEXP.test(received); // getAlignedDiffs assumes that a newline was appended to the strings. |
|
|
|
if (isMultiline) { |
|
expected += '\n'; |
|
received += '\n'; |
|
} |
|
|
|
var diffs = (0, _diffStrings.default)(expected, received); |
|
(0, _cleanupSemantic.cleanupSemantic)(diffs); // impure function |
|
|
|
return { |
|
diffs: diffs, |
|
isMultiline: isMultiline |
|
}; |
|
}; |
|
|
|
exports.computeStringDiffs = computeStringDiffs; |
|
|
|
var hasCommonDiff = function hasCommonDiff(diffs, isMultiline) { |
|
if (isMultiline) { |
|
// Important: Ignore common newline that was appended to multiline strings! |
|
var iLast = diffs.length - 1; |
|
return diffs.some(function (diff, i) { |
|
return diff[0] === _cleanupSemantic.DIFF_EQUAL && (i !== iLast || diff[1] !== '\n'); |
|
}); |
|
} |
|
|
|
return diffs.some(function (diff) { |
|
return diff[0] === _cleanupSemantic.DIFF_EQUAL; |
|
}); |
|
}; |
|
|
|
exports.hasCommonDiff = hasCommonDiff; |
|
|
|
var printAnnotation = function printAnnotation(options) { |
|
return EXPECTED_COLOR('- ' + (options && options.aAnnotation || 'Expected')) + '\n' + RECEIVED_COLOR('+ ' + (options && options.bAnnotation || 'Received')) + '\n\n'; |
|
}; // In GNU diff format, indexes are one-based instead of zero-based. |
|
|
|
|
|
exports.printAnnotation = printAnnotation; |
|
|
|
var createPatchMark = function createPatchMark(aStart, aEnd, bStart, bEnd) { |
|
return PATCH_COLOR("@@ -".concat(aStart + 1, ",").concat(aEnd - aStart, " +").concat(bStart + 1, ",").concat(bEnd - bStart, " @@")); |
|
}; // Return formatted diff lines without labels. |
|
|
|
|
|
exports.createPatchMark = createPatchMark; |
|
|
|
var printMultilineStringDiffs = function printMultilineStringDiffs(diffs, expand) { |
|
var lines = (0, _getAlignedDiffs.default)(diffs); |
|
return expand ? (0, _joinAlignedDiffs.joinAlignedDiffsExpand)(lines) : (0, _joinAlignedDiffs.joinAlignedDiffsNoExpand)(lines); |
|
}; |
|
|
|
exports.printMultilineStringDiffs = printMultilineStringDiffs; |
|
var MAX_DIFF_STRING_LENGTH = 20000; // Print specific substring diff for strings only: |
|
// * if strings are not equal |
|
// * if neither string is empty |
|
// * if neither string is too long |
|
// * if there is a common string after semantic cleanup |
|
|
|
var getStringDiff = function getStringDiff(expected, received, options) { |
|
if (expected === received || expected.length === 0 || received.length === 0 || expected.length > MAX_DIFF_STRING_LENGTH || received.length > MAX_DIFF_STRING_LENGTH) { |
|
return null; |
|
} |
|
|
|
var _computeStringDiffs = computeStringDiffs(expected, received), |
|
diffs = _computeStringDiffs.diffs, |
|
isMultiline = _computeStringDiffs.isMultiline; |
|
|
|
if (!hasCommonDiff(diffs, isMultiline)) { |
|
return null; |
|
} |
|
|
|
return isMultiline ? { |
|
annotatedDiff: printAnnotation(options) + printMultilineStringDiffs(diffs, options === undefined || options.expand !== false), |
|
isMultiline: isMultiline |
|
} : { |
|
a: getExpectedString(diffs), |
|
b: getReceivedString(diffs), |
|
isMultiline: isMultiline |
|
}; |
|
}; |
|
|
|
exports.getStringDiff = getStringDiff; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-get-type/build/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./packages/jest-get-type/build/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
// get the type of a value with handling the edge cases like `typeof []` |
|
// and `typeof null` |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
function getType(value) { |
|
if (value === undefined) { |
|
return 'undefined'; |
|
} else if (value === null) { |
|
return 'null'; |
|
} else if (Array.isArray(value)) { |
|
return 'array'; |
|
} else if (typeof value === 'boolean') { |
|
return 'boolean'; |
|
} else if (typeof value === 'function') { |
|
return 'function'; |
|
} else if (typeof value === 'number') { |
|
return 'number'; |
|
} else if (typeof value === 'string') { |
|
return 'string'; |
|
} else if (_typeof(value) === 'object') { |
|
if (value != null) { |
|
if (value.constructor === RegExp) { |
|
return 'regexp'; |
|
} else if (value.constructor === Map) { |
|
return 'map'; |
|
} else if (value.constructor === Set) { |
|
return 'set'; |
|
} else if (value.constructor === Date) { |
|
return 'date'; |
|
} |
|
} |
|
|
|
return 'object'; |
|
} else if (_typeof(value) === 'symbol') { |
|
return 'symbol'; |
|
} |
|
|
|
throw new Error("value of unknown type: ".concat(value)); |
|
} |
|
|
|
getType.isPrimitive = function (value) { |
|
return Object(value) !== value; |
|
}; |
|
|
|
module.exports = getType; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-matcher-utils/build/index.js": |
|
/*!****************************************************!*\ |
|
!*** ./packages/jest-matcher-utils/build/index.js ***! |
|
\****************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
Object.defineProperty(exports, 'DiffOptions', { |
|
enumerable: true, |
|
get: function get() { |
|
return _jestDiff.DiffOptions; |
|
} |
|
}); |
|
exports.matcherHint = exports.matcherErrorMessage = exports.getLabelPrinter = exports.pluralize = exports.diff = exports.printDiffOrStringify = exports.ensureExpectedIsNonNegativeInteger = exports.ensureNumbers = exports.ensureExpectedIsNumber = exports.ensureActualIsNumber = exports.ensureNoExpected = exports.printWithType = exports.printExpected = exports.printReceived = exports.highlightTrailingWhitespace = exports.stringify = exports.SUGGEST_TO_CONTAIN_EQUAL = exports.DIM_COLOR = exports.BOLD_WEIGHT = exports.INVERTED_COLOR = exports.RECEIVED_COLOR = exports.EXPECTED_COLOR = void 0; |
|
|
|
var _chalk = _interopRequireDefault(__webpack_require__(/*! chalk */ "./packages/expect/build/fakeChalk.js")); |
|
|
|
var _jestDiff = _interopRequireWildcard(__webpack_require__(/*! jest-diff */ "./packages/jest-diff/build/index.js")); |
|
|
|
var _jestGetType = _interopRequireWildcard(__webpack_require__(/*! jest-get-type */ "./packages/jest-get-type/build/index.js")); |
|
|
|
var _prettyFormat = _interopRequireDefault(__webpack_require__(/*! pretty-format */ "./packages/pretty-format/build/index.js")); |
|
|
|
function _interopRequireWildcard(obj) { |
|
if (obj && obj.__esModule) { |
|
return obj; |
|
} else { |
|
var newObj = {}; |
|
|
|
if (obj != null) { |
|
for (var key in obj) { |
|
if (Object.prototype.hasOwnProperty.call(obj, key)) { |
|
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; |
|
|
|
if (desc.get || desc.set) { |
|
Object.defineProperty(newObj, key, desc); |
|
} else { |
|
newObj[key] = obj[key]; |
|
} |
|
} |
|
} |
|
} |
|
|
|
newObj.default = obj; |
|
return newObj; |
|
} |
|
} |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var _prettyFormat$plugins = _prettyFormat.default.plugins, |
|
AsymmetricMatcher = _prettyFormat$plugins.AsymmetricMatcher, |
|
DOMCollection = _prettyFormat$plugins.DOMCollection, |
|
DOMElement = _prettyFormat$plugins.DOMElement, |
|
Immutable = _prettyFormat$plugins.Immutable, |
|
ReactElement = _prettyFormat$plugins.ReactElement, |
|
ReactTestComponent = _prettyFormat$plugins.ReactTestComponent; |
|
var PLUGINS = [ReactTestComponent, ReactElement, DOMElement, DOMCollection, Immutable, AsymmetricMatcher]; |
|
var EXPECTED_COLOR = _chalk.default.green; |
|
exports.EXPECTED_COLOR = EXPECTED_COLOR; |
|
var RECEIVED_COLOR = _chalk.default.red; |
|
exports.RECEIVED_COLOR = RECEIVED_COLOR; |
|
var INVERTED_COLOR = _chalk.default.inverse; |
|
exports.INVERTED_COLOR = INVERTED_COLOR; |
|
var BOLD_WEIGHT = _chalk.default.bold; |
|
exports.BOLD_WEIGHT = BOLD_WEIGHT; |
|
var DIM_COLOR = _chalk.default.dim; |
|
exports.DIM_COLOR = DIM_COLOR; |
|
var MULTILINE_REGEXP = /\n/; |
|
var SPACE_SYMBOL = "\xB7"; // middle dot |
|
|
|
var NUMBERS = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen']; |
|
|
|
var SUGGEST_TO_CONTAIN_EQUAL = _chalk.default.dim('Looks like you wanted to test for object/array equality with the stricter `toContain` matcher. You probably need to use `toContainEqual` instead.'); |
|
|
|
exports.SUGGEST_TO_CONTAIN_EQUAL = SUGGEST_TO_CONTAIN_EQUAL; |
|
|
|
var stringify = function stringify(object) { |
|
var maxDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10; |
|
var MAX_LENGTH = 10000; |
|
var result; |
|
|
|
try { |
|
result = (0, _prettyFormat.default)(object, { |
|
maxDepth: maxDepth, |
|
min: true, |
|
plugins: PLUGINS |
|
}); |
|
} catch (e) { |
|
result = (0, _prettyFormat.default)(object, { |
|
callToJSON: false, |
|
maxDepth: maxDepth, |
|
min: true, |
|
plugins: PLUGINS |
|
}); |
|
} |
|
|
|
return result.length >= MAX_LENGTH && maxDepth > 1 ? stringify(object, Math.floor(maxDepth / 2)) : result; |
|
}; |
|
|
|
exports.stringify = stringify; |
|
|
|
var highlightTrailingWhitespace = function highlightTrailingWhitespace(text) { |
|
return text.replace(/\s+$/gm, _chalk.default.inverse('$&')); |
|
}; // Instead of inverse highlight which now implies a change, |
|
// replace common spaces with middle dot at the end of any line. |
|
|
|
|
|
exports.highlightTrailingWhitespace = highlightTrailingWhitespace; |
|
|
|
var replaceTrailingSpaces = function replaceTrailingSpaces(text) { |
|
return text.replace(/\s+$/gm, function (spaces) { |
|
return SPACE_SYMBOL.repeat(spaces.length); |
|
}); |
|
}; |
|
|
|
var printReceived = function printReceived(object) { |
|
return RECEIVED_COLOR(replaceTrailingSpaces(stringify(object))); |
|
}; |
|
|
|
exports.printReceived = printReceived; |
|
|
|
var printExpected = function printExpected(value) { |
|
return EXPECTED_COLOR(replaceTrailingSpaces(stringify(value))); |
|
}; |
|
|
|
exports.printExpected = printExpected; |
|
|
|
var printWithType = function printWithType(name, value, print // printExpected or printReceived |
|
) { |
|
var type = (0, _jestGetType.default)(value); |
|
var hasType = type !== 'null' && type !== 'undefined' ? "".concat(name, " has type: ").concat(type, "\n") : ''; |
|
var hasValue = "".concat(name, " has value: ").concat(print(value)); |
|
return hasType + hasValue; |
|
}; |
|
|
|
exports.printWithType = printWithType; |
|
|
|
var ensureNoExpected = function ensureNoExpected(expected, matcherName, options) { |
|
if (typeof expected !== 'undefined') { |
|
// Prepend maybe not only for backward compatibility. |
|
var matcherString = (options ? '' : '[.not]') + matcherName; |
|
throw new Error(matcherErrorMessage(matcherHint(matcherString, undefined, '', options), // Because expected is omitted in hint above, |
|
'this matcher must not have an expected argument', printWithType('Expected', expected, printExpected))); |
|
} |
|
}; |
|
|
|
exports.ensureNoExpected = ensureNoExpected; |
|
|
|
var ensureActualIsNumber = function ensureActualIsNumber(actual, matcherName, options) { |
|
if (typeof actual !== 'number') { |
|
// Prepend maybe not only for backward compatibility. |
|
var matcherString = (options ? '' : '[.not]') + matcherName; |
|
throw new Error(matcherErrorMessage(matcherHint(matcherString, undefined, undefined, options), "".concat(RECEIVED_COLOR('received'), " value must be a number"), printWithType('Received', actual, printReceived))); |
|
} |
|
}; |
|
|
|
exports.ensureActualIsNumber = ensureActualIsNumber; |
|
|
|
var ensureExpectedIsNumber = function ensureExpectedIsNumber(expected, matcherName, options) { |
|
if (typeof expected !== 'number') { |
|
// Prepend maybe not only for backward compatibility. |
|
var matcherString = (options ? '' : '[.not]') + matcherName; |
|
throw new Error(matcherErrorMessage(matcherHint(matcherString, undefined, undefined, options), "".concat(EXPECTED_COLOR('expected'), " value must be a number"), printWithType('Expected', expected, printExpected))); |
|
} |
|
}; |
|
|
|
exports.ensureExpectedIsNumber = ensureExpectedIsNumber; |
|
|
|
var ensureNumbers = function ensureNumbers(actual, expected, matcherName, options) { |
|
ensureActualIsNumber(actual, matcherName, options); |
|
ensureExpectedIsNumber(expected, matcherName, options); |
|
}; |
|
|
|
exports.ensureNumbers = ensureNumbers; |
|
|
|
var ensureExpectedIsNonNegativeInteger = function ensureExpectedIsNonNegativeInteger(expected, matcherName, options) { |
|
if (typeof expected !== 'number' || !Number.isSafeInteger(expected) || expected < 0) { |
|
// Prepend maybe not only for backward compatibility. |
|
var matcherString = (options ? '' : '[.not]') + matcherName; |
|
throw new Error(matcherErrorMessage(matcherHint(matcherString, undefined, undefined, options), "".concat(EXPECTED_COLOR('expected'), " value must be a non-negative integer"), printWithType('Expected', expected, printExpected))); |
|
} |
|
}; |
|
|
|
exports.ensureExpectedIsNonNegativeInteger = ensureExpectedIsNonNegativeInteger; |
|
|
|
var isLineDiffable = function isLineDiffable(expected, received) { |
|
var expectedType = (0, _jestGetType.default)(expected); |
|
var receivedType = (0, _jestGetType.default)(received); |
|
|
|
if (expectedType !== receivedType) { |
|
return false; |
|
} |
|
|
|
if ((0, _jestGetType.isPrimitive)(expected)) { |
|
// Print generic line diff for strings only: |
|
// * if neither string is empty |
|
return typeof expected === 'string' && typeof received === 'string' && expected.length !== 0 && received.length !== 0 && (MULTILINE_REGEXP.test(expected) || MULTILINE_REGEXP.test(received)); |
|
} |
|
|
|
if (expectedType === 'date' || expectedType === 'function' || expectedType === 'regexp') { |
|
return false; |
|
} |
|
|
|
if (expected instanceof Error && received instanceof Error) { |
|
return false; |
|
} |
|
|
|
if (expectedType === 'object' && typeof expected.asymmetricMatch === 'function') { |
|
return false; |
|
} |
|
|
|
if (receivedType === 'object' && typeof received.asymmetricMatch === 'function') { |
|
return false; |
|
} |
|
|
|
return true; |
|
}; |
|
|
|
var printDiffOrStringify = function printDiffOrStringify(expected, received, expectedLabel, receivedLabel, expand) { |
|
if (typeof expected === 'string' && typeof received === 'string') { |
|
var result = (0, _jestDiff.getStringDiff)(expected, received, { |
|
aAnnotation: expectedLabel, |
|
bAnnotation: receivedLabel, |
|
expand: expand |
|
}); |
|
|
|
if (result !== null) { |
|
if (result.isMultiline) { |
|
return result.annotatedDiff; |
|
} |
|
|
|
var _printLabel = getLabelPrinter(expectedLabel, receivedLabel); |
|
|
|
var _expectedLine = _printLabel(expectedLabel) + printExpected(result.a); |
|
|
|
var _receivedLine = _printLabel(receivedLabel) + printReceived(result.b); |
|
|
|
return _expectedLine + '\n' + _receivedLine; |
|
} |
|
} |
|
|
|
if (isLineDiffable(expected, received)) { |
|
var difference = (0, _jestDiff.default)(expected, received, { |
|
aAnnotation: expectedLabel, |
|
bAnnotation: receivedLabel, |
|
expand: expand |
|
}); |
|
|
|
if (typeof difference === 'string' && difference.includes('- ' + expectedLabel) && difference.includes('+ ' + receivedLabel)) { |
|
return difference; |
|
} |
|
} |
|
|
|
var printLabel = getLabelPrinter(expectedLabel, receivedLabel); |
|
var expectedLine = printLabel(expectedLabel) + printExpected(expected); |
|
var receivedLine = printLabel(receivedLabel) + (stringify(expected) === stringify(received) ? 'serializes to the same string' : printReceived(received)); |
|
return expectedLine + '\n' + receivedLine; |
|
}; // Sometimes, e.g. when comparing two numbers, the output from jest-diff |
|
// does not contain more information than the `Expected:` / `Received:` already gives. |
|
// In those cases, we do not print a diff to make the output shorter and not redundant. |
|
|
|
|
|
exports.printDiffOrStringify = printDiffOrStringify; |
|
|
|
var shouldPrintDiff = function shouldPrintDiff(actual, expected) { |
|
if (typeof actual === 'number' && typeof expected === 'number') { |
|
return false; |
|
} |
|
|
|
if (typeof actual === 'boolean' && typeof expected === 'boolean') { |
|
return false; |
|
} |
|
|
|
return true; |
|
}; |
|
|
|
var diff = function diff(a, b, options) { |
|
return shouldPrintDiff(a, b) ? (0, _jestDiff.default)(a, b, options) : null; |
|
}; |
|
|
|
exports.diff = diff; |
|
|
|
var pluralize = function pluralize(word, count) { |
|
return (NUMBERS[count] || count) + ' ' + word + (count === 1 ? '' : 's'); |
|
}; // To display lines of labeled values as two columns with monospace alignment: |
|
// given the strings which will describe the values, |
|
// return function which given each string, returns the label: |
|
// string, colon, space, and enough padding spaces to align the value. |
|
|
|
|
|
exports.pluralize = pluralize; |
|
|
|
var getLabelPrinter = function getLabelPrinter() { |
|
for (var _len = arguments.length, strings = new Array(_len), _key = 0; _key < _len; _key++) { |
|
strings[_key] = arguments[_key]; |
|
} |
|
|
|
var maxLength = strings.reduce(function (max, string) { |
|
return string.length > max ? string.length : max; |
|
}, 0); |
|
return function (string) { |
|
return "".concat(string, ": ").concat(' '.repeat(maxLength - string.length)); |
|
}; |
|
}; |
|
|
|
exports.getLabelPrinter = getLabelPrinter; |
|
|
|
var matcherErrorMessage = function matcherErrorMessage(hint, generic, specific // incorrect value returned from call to printWithType |
|
) { |
|
return "".concat(hint, "\n\n").concat(_chalk.default.bold('Matcher error'), ": ").concat(generic, "\n\n").concat(specific); |
|
}; // Display assertion for the report when a test fails. |
|
// New format: rejects/resolves, not, and matcher name have black color |
|
// Old format: matcher name has dim color |
|
|
|
|
|
exports.matcherErrorMessage = matcherErrorMessage; |
|
|
|
var matcherHint = function matcherHint(matcherName) { |
|
var received = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'received'; |
|
var expected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'expected'; |
|
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; |
|
var _options$comment = options.comment, |
|
comment = _options$comment === void 0 ? '' : _options$comment, |
|
_options$expectedColo = options.expectedColor, |
|
expectedColor = _options$expectedColo === void 0 ? EXPECTED_COLOR : _options$expectedColo, |
|
_options$isDirectExpe = options.isDirectExpectCall, |
|
isDirectExpectCall = _options$isDirectExpe === void 0 ? false : _options$isDirectExpe, |
|
_options$isNot = options.isNot, |
|
isNot = _options$isNot === void 0 ? false : _options$isNot, |
|
_options$promise = options.promise, |
|
promise = _options$promise === void 0 ? '' : _options$promise, |
|
_options$receivedColo = options.receivedColor, |
|
receivedColor = _options$receivedColo === void 0 ? RECEIVED_COLOR : _options$receivedColo, |
|
_options$secondArgume = options.secondArgument, |
|
secondArgument = _options$secondArgume === void 0 ? '' : _options$secondArgume, |
|
_options$secondArgume2 = options.secondArgumentColor, |
|
secondArgumentColor = _options$secondArgume2 === void 0 ? EXPECTED_COLOR : _options$secondArgume2; |
|
var hint = ''; |
|
var dimString = 'expect'; // concatenate adjacent dim substrings |
|
|
|
if (!isDirectExpectCall && received !== '') { |
|
hint += DIM_COLOR(dimString + '(') + receivedColor(received); |
|
dimString = ')'; |
|
} |
|
|
|
if (promise !== '') { |
|
hint += DIM_COLOR(dimString + '.') + promise; |
|
dimString = ''; |
|
} |
|
|
|
if (isNot) { |
|
hint += DIM_COLOR(dimString + '.') + 'not'; |
|
dimString = ''; |
|
} |
|
|
|
if (matcherName.includes('.')) { |
|
// Old format: for backward compatibility, |
|
// especially without promise or isNot options |
|
dimString += matcherName; |
|
} else { |
|
// New format: omit period from matcherName arg |
|
hint += DIM_COLOR(dimString + '.') + matcherName; |
|
dimString = ''; |
|
} |
|
|
|
if (expected === '') { |
|
dimString += '()'; |
|
} else { |
|
hint += DIM_COLOR(dimString + '(') + expectedColor(expected); |
|
|
|
if (secondArgument) { |
|
hint += DIM_COLOR(', ') + secondArgumentColor(secondArgument); |
|
} |
|
|
|
dimString = ')'; |
|
} |
|
|
|
if (comment !== '') { |
|
dimString += ' // ' + comment; |
|
} |
|
|
|
if (dimString !== '') { |
|
hint += DIM_COLOR(dimString); |
|
} |
|
|
|
return hint; |
|
}; |
|
|
|
exports.matcherHint = matcherHint; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-message-util/build/index.js": |
|
/*!***************************************************!*\ |
|
!*** ./packages/jest-message-util/build/index.js ***! |
|
\***************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(global) { |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
Object.defineProperty(exports, 'Frame', { |
|
enumerable: true, |
|
get: function get() { |
|
return _types.Frame; |
|
} |
|
}); |
|
exports.separateMessageFromStack = exports.formatResultsErrors = exports.formatStackTrace = exports.getTopFrame = exports.getStackTraceLines = exports.formatExecError = void 0; |
|
|
|
var _fs = _interopRequireDefault(__webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js")); |
|
|
|
var _path = _interopRequireDefault(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js")); |
|
|
|
var _chalk = _interopRequireDefault(__webpack_require__(/*! chalk */ "./packages/expect/build/fakeChalk.js")); |
|
|
|
var _micromatch = _interopRequireDefault(__webpack_require__(/*! micromatch */ "./node_modules/micromatch/index.js")); |
|
|
|
var _slash = _interopRequireDefault(__webpack_require__(/*! slash */ "./node_modules/slash/index.js")); |
|
|
|
var _codeFrame = __webpack_require__(/*! @babel/code-frame */ "./node_modules/@babel/code-frame/lib/index.js"); |
|
|
|
var _stackUtils = _interopRequireDefault(__webpack_require__(/*! stack-utils */ "./node_modules/stack-utils/index.js")); |
|
|
|
var _types = __webpack_require__(/*! ./types */ "./packages/jest-message-util/build/types.js"); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
|
|
var _Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; |
|
|
|
var jestReadFile = global[_Symbol.for('jest-native-read-file')] || _fs.default.readFileSync; |
|
|
|
var _Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; // stack utils tries to create pretty stack by making paths relative. |
|
|
|
|
|
var stackUtils = new _stackUtils.default({ |
|
cwd: 'something which does not exist' |
|
}); |
|
var nodeInternals = []; |
|
|
|
try { |
|
nodeInternals = _stackUtils.default.nodeInternals(); |
|
} catch (e) {// `StackUtils.nodeInternals()` fails in browsers. We don't need to remove |
|
// node internals in the browser though, so no issue. |
|
} |
|
|
|
var PATH_NODE_MODULES = "".concat(_path.default.sep, "node_modules").concat(_path.default.sep); |
|
var PATH_JEST_PACKAGES = "".concat(_path.default.sep, "jest").concat(_path.default.sep, "packages").concat(_path.default.sep); // filter for noisy stack trace lines |
|
|
|
var JASMINE_IGNORE = /^\s+at(?:(?:.jasmine\-)|\s+jasmine\.buildExpectationResult)/; |
|
var JEST_INTERNALS_IGNORE = /^\s+at.*?jest(-.*?)?(\/|\\)(build|node_modules|packages)(\/|\\)/; |
|
var ANONYMOUS_FN_IGNORE = /^\s+at <anonymous>.*$/; |
|
var ANONYMOUS_PROMISE_IGNORE = /^\s+at (new )?Promise \(<anonymous>\).*$/; |
|
var ANONYMOUS_GENERATOR_IGNORE = /^\s+at Generator.next \(<anonymous>\).*$/; |
|
var NATIVE_NEXT_IGNORE = /^\s+at next \(native\).*$/; |
|
var TITLE_INDENT = ' '; |
|
var MESSAGE_INDENT = ' '; |
|
var STACK_INDENT = ' '; |
|
var ANCESTRY_SEPARATOR = " \u203A "; |
|
|
|
var TITLE_BULLET = _chalk.default.bold("\u25CF "); |
|
|
|
var STACK_TRACE_COLOR = _chalk.default.dim; |
|
var STACK_PATH_REGEXP = /\s*at.*\(?(\:\d*\:\d*|native)\)?/; |
|
var EXEC_ERROR_MESSAGE = 'Test suite failed to run'; |
|
var NOT_EMPTY_LINE_REGEXP = /^(?!$)/gm; |
|
|
|
var indentAllLines = function indentAllLines(lines, indent) { |
|
return lines.replace(NOT_EMPTY_LINE_REGEXP, indent); |
|
}; |
|
|
|
var trim = function trim(string) { |
|
return (string || '').trim(); |
|
}; // Some errors contain not only line numbers in stack traces |
|
// e.g. SyntaxErrors can contain snippets of code, and we don't |
|
// want to trim those, because they may have pointers to the column/character |
|
// which will get misaligned. |
|
|
|
|
|
var trimPaths = function trimPaths(string) { |
|
return string.match(STACK_PATH_REGEXP) ? trim(string) : string; |
|
}; |
|
|
|
var getRenderedCallsite = function getRenderedCallsite(fileContent, line, column) { |
|
var renderedCallsite = (0, _codeFrame.codeFrameColumns)(fileContent, { |
|
start: { |
|
column: column, |
|
line: line |
|
} |
|
}, { |
|
highlightCode: true |
|
}); |
|
renderedCallsite = indentAllLines(renderedCallsite, MESSAGE_INDENT); |
|
renderedCallsite = "\n".concat(renderedCallsite, "\n"); |
|
return renderedCallsite; |
|
}; |
|
|
|
var blankStringRegexp = /^\s*$/; // ExecError is an error thrown outside of the test suite (not inside an `it` or |
|
// `before/after each` hooks). If it's thrown, none of the tests in the file |
|
// are executed. |
|
|
|
var formatExecError = function formatExecError(error, config, options, testPath, reuseMessage) { |
|
if (!error || typeof error === 'number') { |
|
error = new Error("Expected an Error, but \"".concat(String(error), "\" was thrown")); |
|
error.stack = ''; |
|
} |
|
|
|
var message, stack; |
|
|
|
if (typeof error === 'string' || !error) { |
|
error || (error = 'EMPTY ERROR'); |
|
message = ''; |
|
stack = error; |
|
} else { |
|
message = error.message; |
|
stack = error.stack; |
|
} |
|
|
|
var separated = separateMessageFromStack(stack || ''); |
|
stack = separated.stack; |
|
|
|
if (separated.message.includes(trim(message))) { |
|
// Often stack trace already contains the duplicate of the message |
|
message = separated.message; |
|
} |
|
|
|
message = indentAllLines(message, MESSAGE_INDENT); |
|
stack = stack && !options.noStackTrace ? '\n' + formatStackTrace(stack, config, options, testPath) : ''; |
|
|
|
if (blankStringRegexp.test(message) && blankStringRegexp.test(stack)) { |
|
// this can happen if an empty object is thrown. |
|
message = MESSAGE_INDENT + 'Error: No message was provided'; |
|
} |
|
|
|
var messageToUse; |
|
|
|
if (reuseMessage) { |
|
messageToUse = " ".concat(message.trim()); |
|
} else { |
|
messageToUse = "".concat(EXEC_ERROR_MESSAGE, "\n\n").concat(message); |
|
} |
|
|
|
return TITLE_INDENT + TITLE_BULLET + messageToUse + stack + '\n'; |
|
}; |
|
|
|
exports.formatExecError = formatExecError; |
|
|
|
var removeInternalStackEntries = function removeInternalStackEntries(lines, options) { |
|
var pathCounter = 0; |
|
return lines.filter(function (line) { |
|
if (ANONYMOUS_FN_IGNORE.test(line)) { |
|
return false; |
|
} |
|
|
|
if (ANONYMOUS_PROMISE_IGNORE.test(line)) { |
|
return false; |
|
} |
|
|
|
if (ANONYMOUS_GENERATOR_IGNORE.test(line)) { |
|
return false; |
|
} |
|
|
|
if (NATIVE_NEXT_IGNORE.test(line)) { |
|
return false; |
|
} |
|
|
|
if (nodeInternals.some(function (internal) { |
|
return internal.test(line); |
|
})) { |
|
return false; |
|
} |
|
|
|
if (!STACK_PATH_REGEXP.test(line)) { |
|
return true; |
|
} |
|
|
|
if (JASMINE_IGNORE.test(line)) { |
|
return false; |
|
} |
|
|
|
if (++pathCounter === 1) { |
|
return true; // always keep the first line even if it's from Jest |
|
} |
|
|
|
if (options.noStackTrace) { |
|
return false; |
|
} |
|
|
|
if (JEST_INTERNALS_IGNORE.test(line)) { |
|
return false; |
|
} |
|
|
|
return true; |
|
}); |
|
}; |
|
|
|
var formatPaths = function formatPaths(config, relativeTestPath, line) { |
|
// Extract the file path from the trace line. |
|
var match = line.match(/(^\s*at .*?\(?)([^()]+)(:[0-9]+:[0-9]+\)?.*$)/); |
|
|
|
if (!match) { |
|
return line; |
|
} |
|
|
|
var filePath = (0, _slash.default)(_path.default.relative(config.rootDir, match[2])); // highlight paths from the current test file |
|
|
|
if (config.testMatch && config.testMatch.length && _micromatch.default.some(filePath, config.testMatch) || filePath === relativeTestPath) { |
|
filePath = _chalk.default.reset.cyan(filePath); |
|
} |
|
|
|
return STACK_TRACE_COLOR(match[1]) + filePath + STACK_TRACE_COLOR(match[3]); |
|
}; |
|
|
|
var getStackTraceLines = function getStackTraceLines(stack) { |
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { |
|
noStackTrace: false |
|
}; |
|
return removeInternalStackEntries(stack.split(/\n/), options); |
|
}; |
|
|
|
exports.getStackTraceLines = getStackTraceLines; |
|
|
|
var getTopFrame = function getTopFrame(lines) { |
|
var _iteratorNormalCompletion = true; |
|
var _didIteratorError = false; |
|
var _iteratorError = undefined; |
|
|
|
try { |
|
for (var _iterator = lines[_Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { |
|
var line = _step.value; |
|
|
|
if (line.includes(PATH_NODE_MODULES) || line.includes(PATH_JEST_PACKAGES)) { |
|
continue; |
|
} |
|
|
|
var parsedFrame = stackUtils.parseLine(line.trim()); |
|
|
|
if (parsedFrame && parsedFrame.file) { |
|
return parsedFrame; |
|
} |
|
} |
|
} catch (err) { |
|
_didIteratorError = true; |
|
_iteratorError = err; |
|
} finally { |
|
try { |
|
if (!_iteratorNormalCompletion && _iterator.return != null) { |
|
_iterator.return(); |
|
} |
|
} finally { |
|
if (_didIteratorError) { |
|
throw _iteratorError; |
|
} |
|
} |
|
} |
|
|
|
return null; |
|
}; |
|
|
|
exports.getTopFrame = getTopFrame; |
|
|
|
var formatStackTrace = function formatStackTrace(stack, config, options, testPath) { |
|
var lines = getStackTraceLines(stack, options); |
|
var topFrame = getTopFrame(lines); |
|
var renderedCallsite = ''; |
|
var relativeTestPath = testPath ? (0, _slash.default)(_path.default.relative(config.rootDir, testPath)) : null; |
|
|
|
if (topFrame) { |
|
var column = topFrame.column, |
|
filename = topFrame.file, |
|
line = topFrame.line; |
|
|
|
if (line && filename && _path.default.isAbsolute(filename)) { |
|
var fileContent; |
|
|
|
try { |
|
// TODO: check & read HasteFS instead of reading the filesystem: |
|
// see: https://github.com/facebook/jest/pull/5405#discussion_r164281696 |
|
fileContent = jestReadFile(filename, 'utf8'); |
|
renderedCallsite = getRenderedCallsite(fileContent, line, column); |
|
} catch (e) {// the file does not exist or is inaccessible, we ignore |
|
} |
|
} |
|
} |
|
|
|
var stacktrace = lines.filter(Boolean).map(function (line) { |
|
return STACK_INDENT + formatPaths(config, relativeTestPath, trimPaths(line)); |
|
}).join('\n'); |
|
return "".concat(renderedCallsite, "\n").concat(stacktrace); |
|
}; |
|
|
|
exports.formatStackTrace = formatStackTrace; |
|
|
|
var formatResultsErrors = function formatResultsErrors(testResults, config, options, testPath) { |
|
var failedResults = testResults.reduce(function (errors, result) { |
|
result.failureMessages.forEach(function (content) { |
|
return errors.push({ |
|
content: content, |
|
result: result |
|
}); |
|
}); |
|
return errors; |
|
}, []); |
|
|
|
if (!failedResults.length) { |
|
return null; |
|
} |
|
|
|
return failedResults.map(function (_ref) { |
|
var result = _ref.result, |
|
content = _ref.content; |
|
|
|
var _separateMessageFromS = separateMessageFromStack(content), |
|
message = _separateMessageFromS.message, |
|
stack = _separateMessageFromS.stack; |
|
|
|
stack = options.noStackTrace ? '' : STACK_TRACE_COLOR(formatStackTrace(stack, config, options, testPath)) + '\n'; |
|
message = indentAllLines(message, MESSAGE_INDENT); |
|
var title = _chalk.default.bold.red(TITLE_INDENT + TITLE_BULLET + result.ancestorTitles.join(ANCESTRY_SEPARATOR) + (result.ancestorTitles.length ? ANCESTRY_SEPARATOR : '') + result.title) + '\n'; |
|
return title + '\n' + message + '\n' + stack; |
|
}).join('\n'); |
|
}; |
|
|
|
exports.formatResultsErrors = formatResultsErrors; |
|
var errorRegexp = /^Error:?\s*$/; |
|
|
|
var removeBlankErrorLine = function removeBlankErrorLine(str) { |
|
return str.split('\n') // Lines saying just `Error:` are useless |
|
.filter(function (line) { |
|
return !errorRegexp.test(line); |
|
}).join('\n').trimRight(); |
|
}; // jasmine and worker farm sometimes don't give us access to the actual |
|
// Error object, so we have to regexp out the message from the stack string |
|
// to format it. |
|
|
|
|
|
var separateMessageFromStack = function separateMessageFromStack(content) { |
|
if (!content) { |
|
return { |
|
message: '', |
|
stack: '' |
|
}; |
|
} // All lines up to what looks like a stack -- or if nothing looks like a stack |
|
// (maybe it's a code frame instead), just the first non-empty line. |
|
// If the error is a plain "Error:" instead of a SyntaxError or TypeError we |
|
// remove the prefix from the message because it is generally not useful. |
|
|
|
|
|
var messageMatch = content.match(/^(?:Error: )?([\s\S]*?(?=\n\s*at\s.*:\d*:\d*)|\s*.*)([\s\S]*)$/); |
|
|
|
if (!messageMatch) { |
|
// For typescript |
|
throw new Error('If you hit this error, the regex above is buggy.'); |
|
} |
|
|
|
var message = removeBlankErrorLine(messageMatch[1]); |
|
var stack = removeBlankErrorLine(messageMatch[2]); |
|
return { |
|
message: message, |
|
stack: stack |
|
}; |
|
}; |
|
|
|
exports.separateMessageFromStack = separateMessageFromStack; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/jest-message-util/build/types.js": |
|
/*!***************************************************!*\ |
|
!*** ./packages/jest-message-util/build/types.js ***! |
|
\***************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/collections.js": |
|
/*!*****************************************************!*\ |
|
!*** ./packages/pretty-format/build/collections.js ***! |
|
\*****************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.printIteratorEntries = printIteratorEntries; |
|
exports.printIteratorValues = printIteratorValues; |
|
exports.printListItems = printListItems; |
|
exports.printObjectProperties = printObjectProperties; |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
*/ |
|
|
|
var getKeysOfEnumerableProperties = function getKeysOfEnumerableProperties(object) { |
|
var keys = Object.keys(object).sort(); |
|
|
|
if (Object.getOwnPropertySymbols) { |
|
Object.getOwnPropertySymbols(object).forEach(function (symbol) { |
|
if (Object.getOwnPropertyDescriptor(object, symbol).enumerable) { |
|
keys.push(symbol); |
|
} |
|
}); |
|
} |
|
|
|
return keys; |
|
}; |
|
/** |
|
* Return entries (for example, of a map) |
|
* with spacing, indentation, and comma |
|
* without surrounding punctuation (for example, braces) |
|
*/ |
|
|
|
|
|
function printIteratorEntries( // Flow 0.51.0: property `@@iterator` of $Iterator not found in Object |
|
// To allow simplistic getRecordIterator in immutable.js |
|
iterator, config, indentation, depth, refs, printer) { |
|
var separator = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : ': '; |
|
var result = ''; |
|
var current = iterator.next(); |
|
|
|
if (!current.done) { |
|
result += config.spacingOuter; |
|
var indentationNext = indentation + config.indent; |
|
|
|
while (!current.done) { |
|
var name = printer(current.value[0], config, indentationNext, depth, refs); |
|
var value = printer(current.value[1], config, indentationNext, depth, refs); |
|
result += indentationNext + name + separator + value; |
|
current = iterator.next(); |
|
|
|
if (!current.done) { |
|
result += ',' + config.spacingInner; |
|
} else if (!config.min) { |
|
result += ','; |
|
} |
|
} |
|
|
|
result += config.spacingOuter + indentation; |
|
} |
|
|
|
return result; |
|
} |
|
/** |
|
* Return values (for example, of a set) |
|
* with spacing, indentation, and comma |
|
* without surrounding punctuation (braces or brackets) |
|
*/ |
|
|
|
|
|
function printIteratorValues(iterator, config, indentation, depth, refs, printer) { |
|
var result = ''; |
|
var current = iterator.next(); |
|
|
|
if (!current.done) { |
|
result += config.spacingOuter; |
|
var indentationNext = indentation + config.indent; |
|
|
|
while (!current.done) { |
|
result += indentationNext + printer(current.value, config, indentationNext, depth, refs); |
|
current = iterator.next(); |
|
|
|
if (!current.done) { |
|
result += ',' + config.spacingInner; |
|
} else if (!config.min) { |
|
result += ','; |
|
} |
|
} |
|
|
|
result += config.spacingOuter + indentation; |
|
} |
|
|
|
return result; |
|
} |
|
/** |
|
* Return items (for example, of an array) |
|
* with spacing, indentation, and comma |
|
* without surrounding punctuation (for example, brackets) |
|
**/ |
|
|
|
|
|
function printListItems(list, config, indentation, depth, refs, printer) { |
|
var result = ''; |
|
|
|
if (list.length) { |
|
result += config.spacingOuter; |
|
var indentationNext = indentation + config.indent; |
|
|
|
for (var i = 0; i < list.length; i++) { |
|
result += indentationNext + printer(list[i], config, indentationNext, depth, refs); |
|
|
|
if (i < list.length - 1) { |
|
result += ',' + config.spacingInner; |
|
} else if (!config.min) { |
|
result += ','; |
|
} |
|
} |
|
|
|
result += config.spacingOuter + indentation; |
|
} |
|
|
|
return result; |
|
} |
|
/** |
|
* Return properties of an object |
|
* with spacing, indentation, and comma |
|
* without surrounding punctuation (for example, braces) |
|
*/ |
|
|
|
|
|
function printObjectProperties(val, config, indentation, depth, refs, printer) { |
|
var result = ''; |
|
var keys = getKeysOfEnumerableProperties(val); |
|
|
|
if (keys.length) { |
|
result += config.spacingOuter; |
|
var indentationNext = indentation + config.indent; |
|
|
|
for (var i = 0; i < keys.length; i++) { |
|
var key = keys[i]; |
|
var name = printer(key, config, indentationNext, depth, refs); |
|
var value = printer(val[key], config, indentationNext, depth, refs); |
|
result += indentationNext + name + ': ' + value; |
|
|
|
if (i < keys.length - 1) { |
|
result += ',' + config.spacingInner; |
|
} else if (!config.min) { |
|
result += ','; |
|
} |
|
} |
|
|
|
result += config.spacingOuter + indentation; |
|
} |
|
|
|
return result; |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/index.js": |
|
/*!***********************************************!*\ |
|
!*** ./packages/pretty-format/build/index.js ***! |
|
\***********************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(global) { |
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
|
|
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } |
|
|
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } |
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } |
|
|
|
function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } |
|
|
|
function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } |
|
|
|
function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } |
|
|
|
function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } |
|
|
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } |
|
|
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } |
|
|
|
var _ansiStyles = _interopRequireDefault(__webpack_require__(/*! ansi-styles */ "./node_modules/ansi-styles/index.js")); |
|
|
|
var _collections = __webpack_require__(/*! ./collections */ "./packages/pretty-format/build/collections.js"); |
|
|
|
var _AsymmetricMatcher = _interopRequireDefault(__webpack_require__(/*! ./plugins/AsymmetricMatcher */ "./packages/pretty-format/build/plugins/AsymmetricMatcher.js")); |
|
|
|
var _ConvertAnsi = _interopRequireDefault(__webpack_require__(/*! ./plugins/ConvertAnsi */ "./packages/pretty-format/build/plugins/ConvertAnsi.js")); |
|
|
|
var _DOMCollection = _interopRequireDefault(__webpack_require__(/*! ./plugins/DOMCollection */ "./packages/pretty-format/build/plugins/DOMCollection.js")); |
|
|
|
var _DOMElement = _interopRequireDefault(__webpack_require__(/*! ./plugins/DOMElement */ "./packages/pretty-format/build/plugins/DOMElement.js")); |
|
|
|
var _Immutable = _interopRequireDefault(__webpack_require__(/*! ./plugins/Immutable */ "./packages/pretty-format/build/plugins/Immutable.js")); |
|
|
|
var _ReactElement = _interopRequireDefault(__webpack_require__(/*! ./plugins/ReactElement */ "./packages/pretty-format/build/plugins/ReactElement.js")); |
|
|
|
var _ReactTestComponent = _interopRequireDefault(__webpack_require__(/*! ./plugins/ReactTestComponent */ "./packages/pretty-format/build/plugins/ReactTestComponent.js")); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
|
|
var _Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; |
|
|
|
var toString = Object.prototype.toString; |
|
var toISOString = Date.prototype.toISOString; |
|
var errorToString = Error.prototype.toString; |
|
var regExpToString = RegExp.prototype.toString; |
|
var symbolToString = _Symbol.prototype.toString; |
|
/** |
|
* Explicitly comparing typeof constructor to function avoids undefined as name |
|
* when mock identity-obj-proxy returns the key as the value for any key. |
|
*/ |
|
|
|
var getConstructorName = function getConstructorName(val) { |
|
return typeof val.constructor === 'function' && val.constructor.name || 'Object'; |
|
}; |
|
/* global window */ |
|
|
|
/** Is val is equal to global window object? Works even if it does not exist :) */ |
|
|
|
|
|
var isWindow = function isWindow(val) { |
|
return typeof window !== 'undefined' && val === window; |
|
}; |
|
|
|
var SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/; |
|
var NEWLINE_REGEXP = /\n/gi; |
|
|
|
var PrettyFormatPluginError = |
|
/*#__PURE__*/ |
|
function (_Error) { |
|
_inherits(PrettyFormatPluginError, _Error); |
|
|
|
function PrettyFormatPluginError(message, stack) { |
|
var _this; |
|
|
|
_classCallCheck(this, PrettyFormatPluginError); |
|
|
|
_this = _possibleConstructorReturn(this, _getPrototypeOf(PrettyFormatPluginError).call(this, message)); |
|
_this.stack = stack; |
|
_this.name = _this.constructor.name; |
|
return _this; |
|
} |
|
|
|
return PrettyFormatPluginError; |
|
}(_wrapNativeSuper(Error)); |
|
|
|
function isToStringedArrayType(toStringed) { |
|
return toStringed === '[object Array]' || toStringed === '[object ArrayBuffer]' || toStringed === '[object DataView]' || toStringed === '[object Float32Array]' || toStringed === '[object Float64Array]' || toStringed === '[object Int8Array]' || toStringed === '[object Int16Array]' || toStringed === '[object Int32Array]' || toStringed === '[object Uint8Array]' || toStringed === '[object Uint8ClampedArray]' || toStringed === '[object Uint16Array]' || toStringed === '[object Uint32Array]'; |
|
} |
|
|
|
function printNumber(val) { |
|
return Object.is(val, -0) ? '-0' : String(val); |
|
} |
|
|
|
function printBigInt(val) { |
|
return String("".concat(val, "n")); |
|
} |
|
|
|
function printFunction(val, printFunctionName) { |
|
if (!printFunctionName) { |
|
return '[Function]'; |
|
} |
|
|
|
return '[Function ' + (val.name || 'anonymous') + ']'; |
|
} |
|
|
|
function printSymbol(val) { |
|
return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)'); |
|
} |
|
|
|
function printError(val) { |
|
return '[' + errorToString.call(val) + ']'; |
|
} |
|
/** |
|
* The first port of call for printing an object, handles most of the |
|
* data-types in JS. |
|
*/ |
|
|
|
|
|
function printBasicValue(val, printFunctionName, escapeRegex, escapeString) { |
|
if (val === true || val === false) { |
|
return '' + val; |
|
} |
|
|
|
if (val === undefined) { |
|
return 'undefined'; |
|
} |
|
|
|
if (val === null) { |
|
return 'null'; |
|
} |
|
|
|
var typeOf = _typeof(val); |
|
|
|
if (typeOf === 'number') { |
|
return printNumber(val); |
|
} |
|
|
|
if (typeOf === 'bigint') { |
|
return printBigInt(val); |
|
} |
|
|
|
if (typeOf === 'string') { |
|
if (escapeString) { |
|
return '"' + val.replace(/"|\\/g, '\\$&') + '"'; |
|
} |
|
|
|
return '"' + val + '"'; |
|
} |
|
|
|
if (typeOf === 'function') { |
|
return printFunction(val, printFunctionName); |
|
} |
|
|
|
if (typeOf === 'symbol') { |
|
return printSymbol(val); |
|
} |
|
|
|
var toStringed = toString.call(val); |
|
|
|
if (toStringed === '[object WeakMap]') { |
|
return 'WeakMap {}'; |
|
} |
|
|
|
if (toStringed === '[object WeakSet]') { |
|
return 'WeakSet {}'; |
|
} |
|
|
|
if (toStringed === '[object Function]' || toStringed === '[object GeneratorFunction]') { |
|
return printFunction(val, printFunctionName); |
|
} |
|
|
|
if (toStringed === '[object Symbol]') { |
|
return printSymbol(val); |
|
} |
|
|
|
if (toStringed === '[object Date]') { |
|
return isNaN(+val) ? 'Date { NaN }' : toISOString.call(val); |
|
} |
|
|
|
if (toStringed === '[object Error]') { |
|
return printError(val); |
|
} |
|
|
|
if (toStringed === '[object RegExp]') { |
|
if (escapeRegex) { |
|
// https://github.com/benjamingr/RegExp.escape/blob/master/polyfill.js |
|
return regExpToString.call(val).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'); |
|
} |
|
|
|
return regExpToString.call(val); |
|
} |
|
|
|
if (val instanceof Error) { |
|
return printError(val); |
|
} |
|
|
|
return null; |
|
} |
|
/** |
|
* Handles more complex objects ( such as objects with circular references. |
|
* maps and sets etc ) |
|
*/ |
|
|
|
|
|
function printComplexValue(val, config, indentation, depth, refs, hasCalledToJSON) { |
|
if (refs.indexOf(val) !== -1) { |
|
return '[Circular]'; |
|
} |
|
|
|
refs = refs.slice(); |
|
refs.push(val); |
|
var hitMaxDepth = ++depth > config.maxDepth; |
|
var min = config.min; |
|
|
|
if (config.callToJSON && !hitMaxDepth && val.toJSON && typeof val.toJSON === 'function' && !hasCalledToJSON) { |
|
return printer(val.toJSON(), config, indentation, depth, refs, true); |
|
} |
|
|
|
var toStringed = toString.call(val); |
|
|
|
if (toStringed === '[object Arguments]') { |
|
return hitMaxDepth ? '[Arguments]' : (min ? '' : 'Arguments ') + '[' + (0, _collections.printListItems)(val, config, indentation, depth, refs, printer) + ']'; |
|
} |
|
|
|
if (isToStringedArrayType(toStringed)) { |
|
return hitMaxDepth ? '[' + val.constructor.name + ']' : (min ? '' : val.constructor.name + ' ') + '[' + (0, _collections.printListItems)(val, config, indentation, depth, refs, printer) + ']'; |
|
} |
|
|
|
if (toStringed === '[object Map]') { |
|
return hitMaxDepth ? '[Map]' : 'Map {' + (0, _collections.printIteratorEntries)(val.entries(), config, indentation, depth, refs, printer, ' => ') + '}'; |
|
} |
|
|
|
if (toStringed === '[object Set]') { |
|
return hitMaxDepth ? '[Set]' : 'Set {' + (0, _collections.printIteratorValues)(val.values(), config, indentation, depth, refs, printer) + '}'; |
|
} // Avoid failure to serialize global window object in jsdom test environment. |
|
// For example, not even relevant if window is prop of React element. |
|
|
|
|
|
return hitMaxDepth || isWindow(val) ? '[' + getConstructorName(val) + ']' : (min ? '' : getConstructorName(val) + ' ') + '{' + (0, _collections.printObjectProperties)(val, config, indentation, depth, refs, printer) + '}'; |
|
} |
|
|
|
function isNewPlugin(plugin) { |
|
return plugin.serialize != null; |
|
} |
|
|
|
function printPlugin(plugin, val, config, indentation, depth, refs) { |
|
var printed; |
|
|
|
try { |
|
printed = isNewPlugin(plugin) ? plugin.serialize(val, config, indentation, depth, refs, printer) : plugin.print(val, function (valChild) { |
|
return printer(valChild, config, indentation, depth, refs); |
|
}, function (str) { |
|
var indentationNext = indentation + config.indent; |
|
return indentationNext + str.replace(NEWLINE_REGEXP, '\n' + indentationNext); |
|
}, { |
|
edgeSpacing: config.spacingOuter, |
|
min: config.min, |
|
spacing: config.spacingInner |
|
}, config.colors); |
|
} catch (error) { |
|
throw new PrettyFormatPluginError(error.message, error.stack); |
|
} |
|
|
|
if (typeof printed !== 'string') { |
|
throw new Error("pretty-format: Plugin must return type \"string\" but instead returned \"".concat(_typeof(printed), "\".")); |
|
} |
|
|
|
return printed; |
|
} |
|
|
|
function findPlugin(plugins, val) { |
|
for (var p = 0; p < plugins.length; p++) { |
|
try { |
|
if (plugins[p].test(val)) { |
|
return plugins[p]; |
|
} |
|
} catch (error) { |
|
throw new PrettyFormatPluginError(error.message, error.stack); |
|
} |
|
} |
|
|
|
return null; |
|
} |
|
|
|
function printer(val, config, indentation, depth, refs, hasCalledToJSON) { |
|
var plugin = findPlugin(config.plugins, val); |
|
|
|
if (plugin !== null) { |
|
return printPlugin(plugin, val, config, indentation, depth, refs); |
|
} |
|
|
|
var basicResult = printBasicValue(val, config.printFunctionName, config.escapeRegex, config.escapeString); |
|
|
|
if (basicResult !== null) { |
|
return basicResult; |
|
} |
|
|
|
return printComplexValue(val, config, indentation, depth, refs, hasCalledToJSON); |
|
} |
|
|
|
var DEFAULT_THEME = { |
|
comment: 'gray', |
|
content: 'reset', |
|
prop: 'yellow', |
|
tag: 'cyan', |
|
value: 'green' |
|
}; |
|
var DEFAULT_THEME_KEYS = Object.keys(DEFAULT_THEME); |
|
var DEFAULT_OPTIONS = { |
|
callToJSON: true, |
|
escapeRegex: false, |
|
escapeString: true, |
|
highlight: false, |
|
indent: 2, |
|
maxDepth: Infinity, |
|
min: false, |
|
plugins: [], |
|
printFunctionName: true, |
|
theme: DEFAULT_THEME |
|
}; |
|
|
|
function validateOptions(options) { |
|
Object.keys(options).forEach(function (key) { |
|
if (!DEFAULT_OPTIONS.hasOwnProperty(key)) { |
|
throw new Error("pretty-format: Unknown option \"".concat(key, "\".")); |
|
} |
|
}); |
|
|
|
if (options.min && options.indent !== undefined && options.indent !== 0) { |
|
throw new Error('pretty-format: Options "min" and "indent" cannot be used together.'); |
|
} |
|
|
|
if (options.theme !== undefined) { |
|
if (options.theme === null) { |
|
throw new Error("pretty-format: Option \"theme\" must not be null."); |
|
} |
|
|
|
if (_typeof(options.theme) !== 'object') { |
|
throw new Error("pretty-format: Option \"theme\" must be of type \"object\" but instead received \"".concat(_typeof(options.theme), "\".")); |
|
} |
|
} |
|
} |
|
|
|
var getColorsHighlight = function getColorsHighlight(options) { |
|
return DEFAULT_THEME_KEYS.reduce(function (colors, key) { |
|
var value = options.theme && options.theme[key] !== undefined ? options.theme[key] : DEFAULT_THEME[key]; |
|
var color = value && _ansiStyles.default[value]; |
|
|
|
if (color && typeof color.close === 'string' && typeof color.open === 'string') { |
|
colors[key] = color; |
|
} else { |
|
throw new Error("pretty-format: Option \"theme\" has a key \"".concat(key, "\" whose value \"").concat(value, "\" is undefined in ansi-styles.")); |
|
} |
|
|
|
return colors; |
|
}, Object.create(null)); |
|
}; |
|
|
|
var getColorsEmpty = function getColorsEmpty() { |
|
return DEFAULT_THEME_KEYS.reduce(function (colors, key) { |
|
colors[key] = { |
|
close: '', |
|
open: '' |
|
}; |
|
return colors; |
|
}, Object.create(null)); |
|
}; |
|
|
|
var getPrintFunctionName = function getPrintFunctionName(options) { |
|
return options && options.printFunctionName !== undefined ? options.printFunctionName : DEFAULT_OPTIONS.printFunctionName; |
|
}; |
|
|
|
var getEscapeRegex = function getEscapeRegex(options) { |
|
return options && options.escapeRegex !== undefined ? options.escapeRegex : DEFAULT_OPTIONS.escapeRegex; |
|
}; |
|
|
|
var getEscapeString = function getEscapeString(options) { |
|
return options && options.escapeString !== undefined ? options.escapeString : DEFAULT_OPTIONS.escapeString; |
|
}; |
|
|
|
var getConfig = function getConfig(options) { |
|
return { |
|
callToJSON: options && options.callToJSON !== undefined ? options.callToJSON : DEFAULT_OPTIONS.callToJSON, |
|
colors: options && options.highlight ? getColorsHighlight(options) : getColorsEmpty(), |
|
escapeRegex: getEscapeRegex(options), |
|
escapeString: getEscapeString(options), |
|
indent: options && options.min ? '' : createIndent(options && options.indent !== undefined ? options.indent : DEFAULT_OPTIONS.indent), |
|
maxDepth: options && options.maxDepth !== undefined ? options.maxDepth : DEFAULT_OPTIONS.maxDepth, |
|
min: options && options.min !== undefined ? options.min : DEFAULT_OPTIONS.min, |
|
plugins: options && options.plugins !== undefined ? options.plugins : DEFAULT_OPTIONS.plugins, |
|
printFunctionName: getPrintFunctionName(options), |
|
spacingInner: options && options.min ? ' ' : '\n', |
|
spacingOuter: options && options.min ? '' : '\n' |
|
}; |
|
}; |
|
|
|
function createIndent(indent) { |
|
return new Array(indent + 1).join(' '); |
|
} |
|
/** |
|
* Returns a presentation string of your `val` object |
|
* @param val any potential JavaScript object |
|
* @param options Custom settings |
|
*/ |
|
|
|
|
|
function prettyFormat(val, options) { |
|
if (options) { |
|
validateOptions(options); |
|
|
|
if (options.plugins) { |
|
var plugin = findPlugin(options.plugins, val); |
|
|
|
if (plugin !== null) { |
|
return printPlugin(plugin, val, getConfig(options), '', 0, []); |
|
} |
|
} |
|
} |
|
|
|
var basicResult = printBasicValue(val, getPrintFunctionName(options), getEscapeRegex(options), getEscapeString(options)); |
|
|
|
if (basicResult !== null) { |
|
return basicResult; |
|
} |
|
|
|
return printComplexValue(val, getConfig(options), '', 0, []); |
|
} |
|
|
|
prettyFormat.plugins = { |
|
AsymmetricMatcher: _AsymmetricMatcher.default, |
|
ConvertAnsi: _ConvertAnsi.default, |
|
DOMCollection: _DOMCollection.default, |
|
DOMElement: _DOMElement.default, |
|
Immutable: _Immutable.default, |
|
ReactElement: _ReactElement.default, |
|
ReactTestComponent: _ReactTestComponent.default |
|
}; |
|
/* eslint-disable-next-line no-redeclare */ |
|
|
|
module.exports = prettyFormat; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/AsymmetricMatcher.js": |
|
/*!*******************************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/AsymmetricMatcher.js ***! |
|
\*******************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(global) { |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = exports.test = exports.serialize = void 0; |
|
|
|
var _collections = __webpack_require__(/*! ../collections */ "./packages/pretty-format/build/collections.js"); |
|
|
|
var _Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; |
|
|
|
var asymmetricMatcher = _Symbol.for('jest.asymmetricMatcher'); |
|
|
|
var SPACE = ' '; |
|
|
|
var serialize = function serialize(val, config, indentation, depth, refs, printer) { |
|
var stringedValue = val.toString(); |
|
|
|
if (stringedValue === 'ArrayContaining' || stringedValue === 'ArrayNotContaining') { |
|
if (++depth > config.maxDepth) { |
|
return '[' + stringedValue + ']'; |
|
} |
|
|
|
return stringedValue + SPACE + '[' + (0, _collections.printListItems)(val.sample, config, indentation, depth, refs, printer) + ']'; |
|
} |
|
|
|
if (stringedValue === 'ObjectContaining' || stringedValue === 'ObjectNotContaining') { |
|
if (++depth > config.maxDepth) { |
|
return '[' + stringedValue + ']'; |
|
} |
|
|
|
return stringedValue + SPACE + '{' + (0, _collections.printObjectProperties)(val.sample, config, indentation, depth, refs, printer) + '}'; |
|
} |
|
|
|
if (stringedValue === 'StringMatching' || stringedValue === 'StringNotMatching') { |
|
return stringedValue + SPACE + printer(val.sample, config, indentation, depth, refs); |
|
} |
|
|
|
if (stringedValue === 'StringContaining' || stringedValue === 'StringNotContaining') { |
|
return stringedValue + SPACE + printer(val.sample, config, indentation, depth, refs); |
|
} |
|
|
|
return val.toAsymmetricMatcher(); |
|
}; |
|
|
|
exports.serialize = serialize; |
|
|
|
var test = function test(val) { |
|
return val && val.$$typeof === asymmetricMatcher; |
|
}; |
|
|
|
exports.test = test; |
|
var plugin = { |
|
serialize: serialize, |
|
test: test |
|
}; |
|
var _default = plugin; |
|
exports.default = _default; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/ConvertAnsi.js": |
|
/*!*************************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/ConvertAnsi.js ***! |
|
\*************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = exports.serialize = exports.test = void 0; |
|
|
|
var _ansiRegex = _interopRequireDefault(__webpack_require__(/*! ansi-regex */ "./node_modules/ansi-regex/index.js")); |
|
|
|
var _ansiStyles = _interopRequireDefault(__webpack_require__(/*! ansi-styles */ "./node_modules/ansi-styles/index.js")); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var toHumanReadableAnsi = function toHumanReadableAnsi(text) { |
|
return text.replace((0, _ansiRegex.default)(), function (match) { |
|
switch (match) { |
|
case _ansiStyles.default.red.close: |
|
case _ansiStyles.default.green.close: |
|
case _ansiStyles.default.cyan.close: |
|
case _ansiStyles.default.gray.close: |
|
case _ansiStyles.default.white.close: |
|
case _ansiStyles.default.yellow.close: |
|
case _ansiStyles.default.bgRed.close: |
|
case _ansiStyles.default.bgGreen.close: |
|
case _ansiStyles.default.bgYellow.close: |
|
case _ansiStyles.default.inverse.close: |
|
case _ansiStyles.default.dim.close: |
|
case _ansiStyles.default.bold.close: |
|
case _ansiStyles.default.reset.open: |
|
case _ansiStyles.default.reset.close: |
|
return '</>'; |
|
|
|
case _ansiStyles.default.red.open: |
|
return '<red>'; |
|
|
|
case _ansiStyles.default.green.open: |
|
return '<green>'; |
|
|
|
case _ansiStyles.default.cyan.open: |
|
return '<cyan>'; |
|
|
|
case _ansiStyles.default.gray.open: |
|
return '<gray>'; |
|
|
|
case _ansiStyles.default.white.open: |
|
return '<white>'; |
|
|
|
case _ansiStyles.default.yellow.open: |
|
return '<yellow>'; |
|
|
|
case _ansiStyles.default.bgRed.open: |
|
return '<bgRed>'; |
|
|
|
case _ansiStyles.default.bgGreen.open: |
|
return '<bgGreen>'; |
|
|
|
case _ansiStyles.default.bgYellow.open: |
|
return '<bgYellow>'; |
|
|
|
case _ansiStyles.default.inverse.open: |
|
return '<inverse>'; |
|
|
|
case _ansiStyles.default.dim.open: |
|
return '<dim>'; |
|
|
|
case _ansiStyles.default.bold.open: |
|
return '<bold>'; |
|
|
|
default: |
|
return ''; |
|
} |
|
}); |
|
}; |
|
|
|
var test = function test(val) { |
|
return typeof val === 'string' && !!val.match((0, _ansiRegex.default)()); |
|
}; |
|
|
|
exports.test = test; |
|
|
|
var serialize = function serialize(val, config, indentation, depth, refs, printer) { |
|
return printer(toHumanReadableAnsi(val), config, indentation, depth, refs); |
|
}; |
|
|
|
exports.serialize = serialize; |
|
var plugin = { |
|
serialize: serialize, |
|
test: test |
|
}; |
|
var _default = plugin; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/DOMCollection.js": |
|
/*!***************************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/DOMCollection.js ***! |
|
\***************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = exports.serialize = exports.test = void 0; |
|
|
|
var _collections = __webpack_require__(/*! ../collections */ "./packages/pretty-format/build/collections.js"); |
|
|
|
function _objectSpread(target) { |
|
for (var i = 1; i < arguments.length; i++) { |
|
var source = arguments[i] != null ? arguments[i] : {}; |
|
var ownKeys = Object.keys(source); |
|
|
|
if (typeof Object.getOwnPropertySymbols === 'function') { |
|
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { |
|
return Object.getOwnPropertyDescriptor(source, sym).enumerable; |
|
})); |
|
} |
|
|
|
ownKeys.forEach(function (key) { |
|
_defineProperty(target, key, source[key]); |
|
}); |
|
} |
|
|
|
return target; |
|
} |
|
|
|
function _defineProperty(obj, key, value) { |
|
if (key in obj) { |
|
Object.defineProperty(obj, key, { |
|
value: value, |
|
enumerable: true, |
|
configurable: true, |
|
writable: true |
|
}); |
|
} else { |
|
obj[key] = value; |
|
} |
|
|
|
return obj; |
|
} |
|
|
|
var SPACE = ' '; |
|
var OBJECT_NAMES = ['DOMStringMap', 'NamedNodeMap']; |
|
var ARRAY_REGEXP = /^(HTML\w*Collection|NodeList)$/; |
|
|
|
var testName = function testName(name) { |
|
return OBJECT_NAMES.indexOf(name) !== -1 || ARRAY_REGEXP.test(name); |
|
}; |
|
|
|
var test = function test(val) { |
|
return val && val.constructor && val.constructor.name && testName(val.constructor.name); |
|
}; // Convert array of attribute objects to props object. |
|
|
|
|
|
exports.test = test; |
|
|
|
var propsReducer = function propsReducer(props, attribute) { |
|
props[attribute.name] = attribute.value; |
|
return props; |
|
}; |
|
|
|
var serialize = function serialize(collection, config, indentation, depth, refs, printer) { |
|
var name = collection.constructor.name; |
|
|
|
if (++depth > config.maxDepth) { |
|
return '[' + name + ']'; |
|
} |
|
|
|
return (config.min ? '' : name + SPACE) + (OBJECT_NAMES.indexOf(name) !== -1 ? '{' + (0, _collections.printObjectProperties)(name === 'NamedNodeMap' ? Array.prototype.reduce.call(collection, propsReducer, {}) : _objectSpread({}, collection), config, indentation, depth, refs, printer) + '}' : '[' + (0, _collections.printListItems)(Array.from(collection), config, indentation, depth, refs, printer) + ']'); |
|
}; |
|
|
|
exports.serialize = serialize; |
|
var plugin = { |
|
serialize: serialize, |
|
test: test |
|
}; |
|
var _default = plugin; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/DOMElement.js": |
|
/*!************************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/DOMElement.js ***! |
|
\************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = exports.serialize = exports.test = void 0; |
|
|
|
var _markup = __webpack_require__(/*! ./lib/markup */ "./packages/pretty-format/build/plugins/lib/markup.js"); |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
|
|
var ELEMENT_NODE = 1; |
|
var TEXT_NODE = 3; |
|
var COMMENT_NODE = 8; |
|
var FRAGMENT_NODE = 11; |
|
var ELEMENT_REGEXP = /^((HTML|SVG)\w*)?Element$/; |
|
|
|
var testNode = function testNode(nodeType, name) { |
|
return nodeType === ELEMENT_NODE && ELEMENT_REGEXP.test(name) || nodeType === TEXT_NODE && name === 'Text' || nodeType === COMMENT_NODE && name === 'Comment' || nodeType === FRAGMENT_NODE && name === 'DocumentFragment'; |
|
}; |
|
|
|
var test = function test(val) { |
|
return val && val.constructor && val.constructor.name && testNode(val.nodeType, val.constructor.name); |
|
}; |
|
|
|
exports.test = test; |
|
|
|
function nodeIsText(node) { |
|
return node.nodeType === TEXT_NODE; |
|
} |
|
|
|
function nodeIsComment(node) { |
|
return node.nodeType === COMMENT_NODE; |
|
} |
|
|
|
function nodeIsFragment(node) { |
|
return node.nodeType === FRAGMENT_NODE; |
|
} |
|
|
|
var serialize = function serialize(node, config, indentation, depth, refs, printer) { |
|
if (nodeIsText(node)) { |
|
return (0, _markup.printText)(node.data, config); |
|
} |
|
|
|
if (nodeIsComment(node)) { |
|
return (0, _markup.printComment)(node.data, config); |
|
} |
|
|
|
var type = nodeIsFragment(node) ? "DocumentFragment" : node.tagName.toLowerCase(); |
|
|
|
if (++depth > config.maxDepth) { |
|
return (0, _markup.printElementAsLeaf)(type, config); |
|
} |
|
|
|
return (0, _markup.printElement)(type, (0, _markup.printProps)(nodeIsFragment(node) ? [] : Array.from(node.attributes).map(function (attr) { |
|
return attr.name; |
|
}).sort(), nodeIsFragment(node) ? [] : Array.from(node.attributes).reduce(function (props, attribute) { |
|
props[attribute.name] = attribute.value; |
|
return props; |
|
}, {}), config, indentation + config.indent, depth, refs, printer), (0, _markup.printChildren)(Array.prototype.slice.call(node.childNodes || node.children), config, indentation + config.indent, depth, refs, printer), config, indentation); |
|
}; |
|
|
|
exports.serialize = serialize; |
|
var plugin = { |
|
serialize: serialize, |
|
test: test |
|
}; |
|
var _default = plugin; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/Immutable.js": |
|
/*!***********************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/Immutable.js ***! |
|
\***********************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = exports.test = exports.serialize = void 0; |
|
|
|
var _collections = __webpack_require__(/*! ../collections */ "./packages/pretty-format/build/collections.js"); |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
// SENTINEL constants are from https://github.com/facebook/immutable-js |
|
|
|
|
|
var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@'; |
|
var IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@'; |
|
var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@'; |
|
var IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@'; |
|
var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@'; |
|
var IS_RECORD_SENTINEL = '@@__IMMUTABLE_RECORD__@@'; // immutable v4 |
|
|
|
var IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@'; |
|
var IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@'; |
|
var IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@'; |
|
|
|
var getImmutableName = function getImmutableName(name) { |
|
return 'Immutable.' + name; |
|
}; |
|
|
|
var printAsLeaf = function printAsLeaf(name) { |
|
return '[' + name + ']'; |
|
}; |
|
|
|
var SPACE = ' '; |
|
var LAZY = '…'; // Seq is lazy if it calls a method like filter |
|
|
|
var printImmutableEntries = function printImmutableEntries(val, config, indentation, depth, refs, printer, type) { |
|
return ++depth > config.maxDepth ? printAsLeaf(getImmutableName(type)) : getImmutableName(type) + SPACE + '{' + (0, _collections.printIteratorEntries)(val.entries(), config, indentation, depth, refs, printer) + '}'; |
|
}; // Record has an entries method because it is a collection in immutable v3. |
|
// Return an iterator for Immutable Record from version v3 or v4. |
|
|
|
|
|
var getRecordEntries = function getRecordEntries(val) { |
|
var i = 0; |
|
return { |
|
next: function next() { |
|
if (i < val._keys.length) { |
|
var key = val._keys[i++]; |
|
return { |
|
done: false, |
|
value: [key, val.get(key)] |
|
}; |
|
} |
|
|
|
return { |
|
done: true |
|
}; |
|
} |
|
}; |
|
}; |
|
|
|
var printImmutableRecord = function printImmutableRecord(val, config, indentation, depth, refs, printer) { |
|
// _name property is defined only for an Immutable Record instance |
|
// which was constructed with a second optional descriptive name arg |
|
var name = getImmutableName(val._name || 'Record'); |
|
return ++depth > config.maxDepth ? printAsLeaf(name) : name + SPACE + '{' + (0, _collections.printIteratorEntries)(getRecordEntries(val), config, indentation, depth, refs, printer) + '}'; |
|
}; |
|
|
|
var printImmutableSeq = function printImmutableSeq(val, config, indentation, depth, refs, printer) { |
|
var name = getImmutableName('Seq'); |
|
|
|
if (++depth > config.maxDepth) { |
|
return printAsLeaf(name); |
|
} |
|
|
|
if (val[IS_KEYED_SENTINEL]) { |
|
return name + SPACE + '{' + ( // from Immutable collection of entries or from ECMAScript object |
|
val._iter || val._object ? (0, _collections.printIteratorEntries)(val.entries(), config, indentation, depth, refs, printer) : LAZY) + '}'; |
|
} |
|
|
|
return name + SPACE + '[' + (val._iter || // from Immutable collection of values |
|
val._array || // from ECMAScript array |
|
val._collection || // from ECMAScript collection in immutable v4 |
|
val._iterable // from ECMAScript collection in immutable v3 |
|
? (0, _collections.printIteratorValues)(val.values(), config, indentation, depth, refs, printer) : LAZY) + ']'; |
|
}; |
|
|
|
var printImmutableValues = function printImmutableValues(val, config, indentation, depth, refs, printer, type) { |
|
return ++depth > config.maxDepth ? printAsLeaf(getImmutableName(type)) : getImmutableName(type) + SPACE + '[' + (0, _collections.printIteratorValues)(val.values(), config, indentation, depth, refs, printer) + ']'; |
|
}; |
|
|
|
var serialize = function serialize(val, config, indentation, depth, refs, printer) { |
|
if (val[IS_MAP_SENTINEL]) { |
|
return printImmutableEntries(val, config, indentation, depth, refs, printer, val[IS_ORDERED_SENTINEL] ? 'OrderedMap' : 'Map'); |
|
} |
|
|
|
if (val[IS_LIST_SENTINEL]) { |
|
return printImmutableValues(val, config, indentation, depth, refs, printer, 'List'); |
|
} |
|
|
|
if (val[IS_SET_SENTINEL]) { |
|
return printImmutableValues(val, config, indentation, depth, refs, printer, val[IS_ORDERED_SENTINEL] ? 'OrderedSet' : 'Set'); |
|
} |
|
|
|
if (val[IS_STACK_SENTINEL]) { |
|
return printImmutableValues(val, config, indentation, depth, refs, printer, 'Stack'); |
|
} |
|
|
|
if (val[IS_SEQ_SENTINEL]) { |
|
return printImmutableSeq(val, config, indentation, depth, refs, printer); |
|
} // For compatibility with immutable v3 and v4, let record be the default. |
|
|
|
|
|
return printImmutableRecord(val, config, indentation, depth, refs, printer); |
|
}; // Explicitly comparing sentinel properties to true avoids false positive |
|
// when mock identity-obj-proxy returns the key as the value for any key. |
|
|
|
|
|
exports.serialize = serialize; |
|
|
|
var test = function test(val) { |
|
return val && (val[IS_ITERABLE_SENTINEL] === true || val[IS_RECORD_SENTINEL] === true); |
|
}; |
|
|
|
exports.test = test; |
|
var plugin = { |
|
serialize: serialize, |
|
test: test |
|
}; |
|
var _default = plugin; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/ReactElement.js": |
|
/*!**************************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/ReactElement.js ***! |
|
\**************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = exports.test = exports.serialize = void 0; |
|
|
|
var ReactIs = _interopRequireWildcard(__webpack_require__(/*! react-is */ "./node_modules/react-is/index.js")); |
|
|
|
var _markup = __webpack_require__(/*! ./lib/markup */ "./packages/pretty-format/build/plugins/lib/markup.js"); |
|
|
|
function _interopRequireWildcard(obj) { |
|
if (obj && obj.__esModule) { |
|
return obj; |
|
} else { |
|
var newObj = {}; |
|
|
|
if (obj != null) { |
|
for (var key in obj) { |
|
if (Object.prototype.hasOwnProperty.call(obj, key)) { |
|
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; |
|
|
|
if (desc.get || desc.set) { |
|
Object.defineProperty(newObj, key, desc); |
|
} else { |
|
newObj[key] = obj[key]; |
|
} |
|
} |
|
} |
|
} |
|
|
|
newObj.default = obj; |
|
return newObj; |
|
} |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
// Given element.props.children, or subtree during recursive traversal, |
|
// return flattened array of children. |
|
|
|
|
|
var getChildren = function getChildren(arg) { |
|
var children = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; |
|
|
|
if (Array.isArray(arg)) { |
|
arg.forEach(function (item) { |
|
getChildren(item, children); |
|
}); |
|
} else if (arg != null && arg !== false) { |
|
children.push(arg); |
|
} |
|
|
|
return children; |
|
}; |
|
|
|
var getType = function getType(element) { |
|
var type = element.type; |
|
|
|
if (typeof type === 'string') { |
|
return type; |
|
} |
|
|
|
if (typeof type === 'function') { |
|
return type.displayName || type.name || 'Unknown'; |
|
} |
|
|
|
if (ReactIs.isFragment(element)) { |
|
return 'React.Fragment'; |
|
} |
|
|
|
if (ReactIs.isSuspense(element)) { |
|
return 'React.Suspense'; |
|
} |
|
|
|
if (_typeof(type) === 'object' && type !== null) { |
|
if (ReactIs.isContextProvider(element)) { |
|
return 'Context.Provider'; |
|
} |
|
|
|
if (ReactIs.isContextConsumer(element)) { |
|
return 'Context.Consumer'; |
|
} |
|
|
|
if (ReactIs.isForwardRef(element)) { |
|
var functionName = type.render.displayName || type.render.name || ''; |
|
return functionName !== '' ? 'ForwardRef(' + functionName + ')' : 'ForwardRef'; |
|
} |
|
|
|
if (ReactIs.isMemo(type)) { |
|
var _functionName = type.displayName || type.type.displayName || type.type.name || ''; |
|
|
|
return _functionName !== '' ? 'Memo(' + _functionName + ')' : 'Memo'; |
|
} |
|
} |
|
|
|
return 'UNDEFINED'; |
|
}; |
|
|
|
var getPropKeys = function getPropKeys(element) { |
|
var props = element.props; |
|
return Object.keys(props).filter(function (key) { |
|
return key !== 'children' && props[key] !== undefined; |
|
}).sort(); |
|
}; |
|
|
|
var serialize = function serialize(element, config, indentation, depth, refs, printer) { |
|
return ++depth > config.maxDepth ? (0, _markup.printElementAsLeaf)(getType(element), config) : (0, _markup.printElement)(getType(element), (0, _markup.printProps)(getPropKeys(element), element.props, config, indentation + config.indent, depth, refs, printer), (0, _markup.printChildren)(getChildren(element.props.children), config, indentation + config.indent, depth, refs, printer), config, indentation); |
|
}; |
|
|
|
exports.serialize = serialize; |
|
|
|
var test = function test(val) { |
|
return val && ReactIs.isElement(val); |
|
}; |
|
|
|
exports.test = test; |
|
var plugin = { |
|
serialize: serialize, |
|
test: test |
|
}; |
|
var _default = plugin; |
|
exports.default = _default; |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/ReactTestComponent.js": |
|
/*!********************************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/ReactTestComponent.js ***! |
|
\********************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
/* WEBPACK VAR INJECTION */(function(global) { |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = exports.test = exports.serialize = void 0; |
|
|
|
var _markup = __webpack_require__(/*! ./lib/markup */ "./packages/pretty-format/build/plugins/lib/markup.js"); |
|
|
|
var _Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; |
|
|
|
var testSymbol = _Symbol.for('react.test.json'); |
|
|
|
var getPropKeys = function getPropKeys(object) { |
|
var props = object.props; |
|
return props ? Object.keys(props).filter(function (key) { |
|
return props[key] !== undefined; |
|
}).sort() : []; |
|
}; |
|
|
|
var serialize = function serialize(object, config, indentation, depth, refs, printer) { |
|
return ++depth > config.maxDepth ? (0, _markup.printElementAsLeaf)(object.type, config) : (0, _markup.printElement)(object.type, object.props ? (0, _markup.printProps)(getPropKeys(object), object.props, config, indentation + config.indent, depth, refs, printer) : '', object.children ? (0, _markup.printChildren)(object.children, config, indentation + config.indent, depth, refs, printer) : '', config, indentation); |
|
}; |
|
|
|
exports.serialize = serialize; |
|
|
|
var test = function test(val) { |
|
return val && val.$$typeof === testSymbol; |
|
}; |
|
|
|
exports.test = test; |
|
var plugin = { |
|
serialize: serialize, |
|
test: test |
|
}; |
|
var _default = plugin; |
|
exports.default = _default; |
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/lib/escapeHTML.js": |
|
/*!****************************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/lib/escapeHTML.js ***! |
|
\****************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = escapeHTML; |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
function escapeHTML(str) { |
|
return str.replace(/</g, '<').replace(/>/g, '>'); |
|
} |
|
|
|
/***/ }), |
|
|
|
/***/ "./packages/pretty-format/build/plugins/lib/markup.js": |
|
/*!************************************************************!*\ |
|
!*** ./packages/pretty-format/build/plugins/lib/markup.js ***! |
|
\************************************************************/ |
|
/*! no static exports found */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.printElementAsLeaf = exports.printElement = exports.printComment = exports.printText = exports.printChildren = exports.printProps = void 0; |
|
|
|
var _escapeHTML = _interopRequireDefault(__webpack_require__(/*! ./escapeHTML */ "./packages/pretty-format/build/plugins/lib/escapeHTML.js")); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
// Return empty string if keys is empty. |
|
|
|
|
|
var printProps = function printProps(keys, props, config, indentation, depth, refs, printer) { |
|
var indentationNext = indentation + config.indent; |
|
var colors = config.colors; |
|
return keys.map(function (key) { |
|
var value = props[key]; |
|
var printed = printer(value, config, indentationNext, depth, refs); |
|
|
|
if (typeof value !== 'string') { |
|
if (printed.indexOf('\n') !== -1) { |
|
printed = config.spacingOuter + indentationNext + printed + config.spacingOuter + indentation; |
|
} |
|
|
|
printed = '{' + printed + '}'; |
|
} |
|
|
|
return config.spacingInner + indentation + colors.prop.open + key + colors.prop.close + '=' + colors.value.open + printed + colors.value.close; |
|
}).join(''); |
|
}; // Return empty string if children is empty. |
|
|
|
|
|
exports.printProps = printProps; |
|
|
|
var printChildren = function printChildren(children, config, indentation, depth, refs, printer) { |
|
return children.map(function (child) { |
|
return config.spacingOuter + indentation + (typeof child === 'string' ? printText(child, config) : printer(child, config, indentation, depth, refs)); |
|
}).join(''); |
|
}; |
|
|
|
exports.printChildren = printChildren; |
|
|
|
var printText = function printText(text, config) { |
|
var contentColor = config.colors.content; |
|
return contentColor.open + (0, _escapeHTML.default)(text) + contentColor.close; |
|
}; |
|
|
|
exports.printText = printText; |
|
|
|
var printComment = function printComment(comment, config) { |
|
var commentColor = config.colors.comment; |
|
return commentColor.open + '<!--' + (0, _escapeHTML.default)(comment) + '-->' + commentColor.close; |
|
}; // Separate the functions to format props, children, and element, |
|
// so a plugin could override a particular function, if needed. |
|
// Too bad, so sad: the traditional (but unnecessary) space |
|
// in a self-closing tagColor requires a second test of printedProps. |
|
|
|
|
|
exports.printComment = printComment; |
|
|
|
var printElement = function printElement(type, printedProps, printedChildren, config, indentation) { |
|
var tagColor = config.colors.tag; |
|
return tagColor.open + '<' + type + (printedProps && tagColor.close + printedProps + config.spacingOuter + indentation + tagColor.open) + (printedChildren ? '>' + tagColor.close + printedChildren + config.spacingOuter + indentation + tagColor.open + '</' + type : (printedProps && !config.min ? '' : ' ') + '/') + '>' + tagColor.close; |
|
}; |
|
|
|
exports.printElement = printElement; |
|
|
|
var printElementAsLeaf = function printElementAsLeaf(type, config) { |
|
var tagColor = config.colors.tag; |
|
return tagColor.open + '<' + type + tagColor.close + ' …' + tagColor.open + ' />' + tagColor.close; |
|
}; |
|
|
|
exports.printElementAsLeaf = printElementAsLeaf; |
|
|
|
/***/ }) |
|
|
|
/******/ }); |
|
}); |
|
//# sourceMappingURL=index.js.map |