From bee114ce2fd2b0d7cbcc4e490862361b0f73d8b0 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Tue, 12 Jul 2022 23:03:25 +0300 Subject: [PATCH 01/24] npm support (CommonJS and ES6) --- README.md | 12 + lib/chessboard.cjs | 16 + lib/chessboard.js | 3430 +++++++++++++------------ lib/chessboard.mjs | 12 + lib/chessboardbrowser.js | 25 + package-lock.json | 4777 +++++++++++++++++++++++++++++++++++ package.json | 26 +- scripts/build.js | 75 +- scripts/test.cjs | 3 + scripts/test.mjs | 3 + templates/download.mustache | 14 +- yarn.lock | 2703 +++++++++++--------- 12 files changed, 8132 insertions(+), 2964 deletions(-) create mode 100644 lib/chessboard.cjs create mode 100644 lib/chessboard.mjs create mode 100644 lib/chessboardbrowser.js create mode 100644 package-lock.json create mode 100644 scripts/test.cjs create mode 100644 scripts/test.mjs diff --git a/README.md b/README.md index 70df69f5..d84bbe30 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,18 @@ chessboard.js is a JavaScript chessboard component. It depends on [jQuery] v3.4. Please see [chessboardjs.com] for documentation and examples. +## Usage + +Installation: `npm i @discape/chessboardjs` + +```js +import { Chessboard, fenToObj, objToFen } from "@discape/chessboardjs"; +``` + +```js +const { Chessboard, fenToObj, objToFen } = require("@discape/chessboardjs"); +``` + ## What is chessboard.js? chessboard.js is a standalone JavaScript Chess Board. It is designed to be "just diff --git a/lib/chessboard.cjs b/lib/chessboard.cjs new file mode 100644 index 00000000..11f3cf2a --- /dev/null +++ b/lib/chessboard.cjs @@ -0,0 +1,16 @@ +// chessboard.js v@VERSION +// https://github.com/oakmac/chessboardjs/ +// +// Portion Copyright (c) 2019, Chris Oakman +// Portion Copyright (c) 2022, Miika Tuominen +// Released under the MIT license +// https://github.com/oakmac/chessboardjs/blob/master/LICENSE.md + +const $ = require('jquery') +module.exports = { + Chessboard: constructor, + fenToObj, + objToFen +} + +INSERTSOURCE diff --git a/lib/chessboard.js b/lib/chessboard.js index ed27db18..bdb26394 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -1,1823 +1,1887 @@ // chessboard.js v@VERSION // https://github.com/oakmac/chessboardjs/ // -// Copyright (c) 2019, Chris Oakman +// Portion Copyright (c) 2019, Chris Oakman +// Portion Copyright (c) 2022, Miika Tuominen // Released under the MIT license // https://github.com/oakmac/chessboardjs/blob/master/LICENSE.md - -// start anonymous scope -;(function () { - 'use strict' - - var $ = window['jQuery'] - - // --------------------------------------------------------------------------- - // Constants - // --------------------------------------------------------------------------- - - var COLUMNS = 'abcdefgh'.split('') - var DEFAULT_DRAG_THROTTLE_RATE = 20 - var ELLIPSIS = '…' - var MINIMUM_JQUERY_VERSION = '1.8.3' - var RUN_ASSERTS = true - var START_FEN = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR' - var START_POSITION = fenToObj(START_FEN) - - // default animation speeds - var DEFAULT_APPEAR_SPEED = 200 - var DEFAULT_MOVE_SPEED = 200 - var DEFAULT_SNAPBACK_SPEED = 60 - var DEFAULT_SNAP_SPEED = 30 - var DEFAULT_TRASH_SPEED = 100 - - // use unique class names to prevent clashing with anything else on the page - // and simplify selectors - // NOTE: these should never change - var CSS = {} - CSS['alpha'] = 'alpha-d2270' - CSS['black'] = 'black-3c85d' - CSS['board'] = 'board-b72b1' - CSS['chessboard'] = 'chessboard-63f37' - CSS['clearfix'] = 'clearfix-7da63' - CSS['highlight1'] = 'highlight1-32417' - CSS['highlight2'] = 'highlight2-9c5d2' - CSS['notation'] = 'notation-322f9' - CSS['numeric'] = 'numeric-fc462' - CSS['piece'] = 'piece-417db' - CSS['row'] = 'row-5277c' - CSS['sparePieces'] = 'spare-pieces-7492f' - CSS['sparePiecesBottom'] = 'spare-pieces-bottom-ae20f' - CSS['sparePiecesTop'] = 'spare-pieces-top-4028b' - CSS['square'] = 'square-55d63' - CSS['white'] = 'white-1e1d7' - - // --------------------------------------------------------------------------- - // Misc Util Functions - // --------------------------------------------------------------------------- - - function throttle (f, interval, scope) { - var timeout = 0 - var shouldFire = false - var args = [] - - var handleTimeout = function () { - timeout = 0 - if (shouldFire) { - shouldFire = false - fire() - } - } - var fire = function () { - timeout = window.setTimeout(handleTimeout, interval) - f.apply(scope, args) +// start anonymous scope + +// --------------------------------------------------------------------------- +// Constants +// --------------------------------------------------------------------------- + +const COLUMNS = 'abcdefgh'.split('') +const DEFAULT_DRAG_THROTTLE_RATE = 20 +const ELLIPSIS = '…' +const MINIMUM_JQUERY_VERSION = '1.8.3' +const RUN_ASSERTS = true +const START_FEN = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR' +var START_POSITION = fenToObj(START_FEN) + +// default animation speeds +const DEFAULT_APPEAR_SPEED = 200 +const DEFAULT_MOVE_SPEED = 200 +const DEFAULT_SNAPBACK_SPEED = 60 +const DEFAULT_SNAP_SPEED = 30 +const DEFAULT_TRASH_SPEED = 100 + +// use unique class names to prevent clashing with anything else on the page +// and simplify selectors +// NOTE: these should never change +let CSS = {} +CSS['alpha'] = 'alpha-d2270' +CSS['black'] = 'black-3c85d' +CSS['board'] = 'board-b72b1' +CSS['chessboard'] = 'chessboard-63f37' +CSS['clearfix'] = 'clearfix-7da63' +CSS['highlight1'] = 'highlight1-32417' +CSS['highlight2'] = 'highlight2-9c5d2' +CSS['notation'] = 'notation-322f9' +CSS['numeric'] = 'numeric-fc462' +CSS['piece'] = 'piece-417db' +CSS['row'] = 'row-5277c' +CSS['sparePieces'] = 'spare-pieces-7492f' +CSS['sparePiecesBottom'] = 'spare-pieces-bottom-ae20f' +CSS['sparePiecesTop'] = 'spare-pieces-top-4028b' +CSS['square'] = 'square-55d63' +CSS['white'] = 'white-1e1d7' + +// --------------------------------------------------------------------------- +// Misc Util Functions +// --------------------------------------------------------------------------- + +function throttle (f, interval, scope) { + var timeout = 0 + var shouldFire = false + var args = [] + + var handleTimeout = function () { + timeout = 0 + if (shouldFire) { + shouldFire = false + fire() } + } - return function (_args) { - args = arguments - if (!timeout) { - fire() - } else { - shouldFire = true - } + var fire = function () { + timeout = window.setTimeout(handleTimeout, interval) + f.apply(scope, args) + } + + return function (_args) { + args = arguments + if (!timeout) { + fire() + } else { + shouldFire = true } } +} - // function debounce (f, interval, scope) { - // var timeout = 0 - // return function (_args) { - // window.clearTimeout(timeout) - // var args = arguments - // timeout = window.setTimeout(function () { - // f.apply(scope, args) - // }, interval) - // } - // } +// function debounce (f, interval, scope) { +// var timeout = 0 +// return function (_args) { +// window.clearTimeout(timeout) +// var args = arguments +// timeout = window.setTimeout(function () { +// f.apply(scope, args) +// }, interval) +// } +// } + +function uuid () { + return 'xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx'.replace(/x/g, function (c) { + var r = (Math.random() * 16) | 0 + return r.toString(16) + }) +} - function uuid () { - return 'xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx'.replace(/x/g, function (c) { - var r = (Math.random() * 16) | 0 - return r.toString(16) - }) +function deepCopy (thing) { + return JSON.parse(JSON.stringify(thing)) +} + +function parseSemVer (version) { + var tmp = version.split('.') + return { + major: parseInt(tmp[0], 10), + minor: parseInt(tmp[1], 10), + patch: parseInt(tmp[2], 10) } +} + +// returns true if version is >= minimum +function validSemanticVersion (version, minimum) { + version = parseSemVer(version) + minimum = parseSemVer(minimum) - function deepCopy (thing) { - return JSON.parse(JSON.stringify(thing)) + var versionNum = + version.major * 100000 * 100000 + version.minor * 100000 + version.patch + var minimumNum = + minimum.major * 100000 * 100000 + minimum.minor * 100000 + minimum.patch + + return versionNum >= minimumNum +} + +function interpolateTemplate (str, obj) { + for (var key in obj) { + if (!obj.hasOwnProperty(key)) continue + var keyTemplateStr = '{' + key + '}' + var value = obj[key] + while (str.indexOf(keyTemplateStr) !== -1) { + str = str.replace(keyTemplateStr, value) + } } + return str +} + +if (RUN_ASSERTS) { + console.assert(interpolateTemplate('abc', { a: 'x' }) === 'abc') + console.assert(interpolateTemplate('{a}bc', {}) === '{a}bc') + console.assert(interpolateTemplate('{a}bc', { p: 'q' }) === '{a}bc') + console.assert(interpolateTemplate('{a}bc', { a: 'x' }) === 'xbc') + console.assert(interpolateTemplate('{a}bc{a}bc', { a: 'x' }) === 'xbcxbc') + console.assert(interpolateTemplate('{a}{a}{b}', { a: 'x', b: 'y' }) === 'xxy') +} + +// --------------------------------------------------------------------------- +// Predicates +// --------------------------------------------------------------------------- + +function isString (s) { + return typeof s === 'string' +} + +function isFunction (f) { + return typeof f === 'function' +} + +function isInteger (n) { + return typeof n === 'number' && isFinite(n) && Math.floor(n) === n +} - function parseSemVer (version) { - var tmp = version.split('.') - return { - major: parseInt(tmp[0], 10), - minor: parseInt(tmp[1], 10), - patch: parseInt(tmp[2], 10) +function validAnimationSpeed (speed) { + if (speed === 'fast' || speed === 'slow') return true + if (!isInteger(speed)) return false + return speed >= 0 +} + +function validThrottleRate (rate) { + return isInteger(rate) && rate >= 1 +} + +function validMove (move) { + // move should be a string + if (!isString(move)) return false + + // move should be in the form of "e2-e4", "f6-d5" + var squares = move.split('-') + if (squares.length !== 2) return false + + return validSquare(squares[0]) && validSquare(squares[1]) +} + +function validSquare (square) { + return isString(square) && square.search(/^[a-h][1-8]$/) !== -1 +} + +if (RUN_ASSERTS) { + console.assert(validSquare('a1')) + console.assert(validSquare('e2')) + console.assert(!validSquare('D2')) + console.assert(!validSquare('g9')) + console.assert(!validSquare('a')) + console.assert(!validSquare(true)) + console.assert(!validSquare(null)) + console.assert(!validSquare({})) +} + +function validPieceCode (code) { + return isString(code) && code.search(/^[bw][KQRNBP]$/) !== -1 +} + +if (RUN_ASSERTS) { + console.assert(validPieceCode('bP')) + console.assert(validPieceCode('bK')) + console.assert(validPieceCode('wK')) + console.assert(validPieceCode('wR')) + console.assert(!validPieceCode('WR')) + console.assert(!validPieceCode('Wr')) + console.assert(!validPieceCode('a')) + console.assert(!validPieceCode(true)) + console.assert(!validPieceCode(null)) + console.assert(!validPieceCode({})) +} + +function validFen (fen) { + if (!isString(fen)) return false + + // cut off any move, castling, etc info from the end + // we're only interested in position information + fen = fen.replace(/ .+$/, '') + + // expand the empty square numbers to just 1s + fen = expandFenEmptySquares(fen) + + // FEN should be 8 sections separated by slashes + var chunks = fen.split('/') + if (chunks.length !== 8) return false + + // check each section + for (var i = 0; i < 8; i++) { + if (chunks[i].length !== 8 || chunks[i].search(/[^kqrnbpKQRNBP1]/) !== -1) { + return false } } - // returns true if version is >= minimum - function validSemanticVersion (version, minimum) { - version = parseSemVer(version) - minimum = parseSemVer(minimum) + return true +} + +if (RUN_ASSERTS) { + console.assert(validFen(START_FEN)) + console.assert(validFen('8/8/8/8/8/8/8/8')) + console.assert( + validFen('r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R') + ) + console.assert( + validFen('3r3r/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1') + ) + console.assert( + !validFen('3r3z/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1') + ) + console.assert(!validFen('anbqkbnr/8/8/8/8/8/PPPPPPPP/8')) + console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/')) + console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBN')) + console.assert(!validFen('888888/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR')) + console.assert(!validFen('888888/pppppppp/74/8/8/8/PPPPPPPP/RNBQKBNR')) + console.assert(!validFen({})) +} + +function validPositionObject (pos) { + if (!$.isPlainObject(pos)) return false - var versionNum = (version.major * 100000 * 100000) + - (version.minor * 100000) + - version.patch - var minimumNum = (minimum.major * 100000 * 100000) + - (minimum.minor * 100000) + - minimum.patch + for (var i in pos) { + if (!pos.hasOwnProperty(i)) continue - return versionNum >= minimumNum + if (!validSquare(i) || !validPieceCode(pos[i])) { + return false + } } - function interpolateTemplate (str, obj) { - for (var key in obj) { - if (!obj.hasOwnProperty(key)) continue - var keyTemplateStr = '{' + key + '}' - var value = obj[key] - while (str.indexOf(keyTemplateStr) !== -1) { - str = str.replace(keyTemplateStr, value) + return true +} + +if (RUN_ASSERTS) { + console.assert(validPositionObject(START_POSITION)) + console.assert(validPositionObject({})) + console.assert(validPositionObject({ e2: 'wP' })) + console.assert(validPositionObject({ e2: 'wP', d2: 'wP' })) + console.assert(!validPositionObject({ e2: 'BP' })) + console.assert(!validPositionObject({ y2: 'wP' })) + console.assert(!validPositionObject(null)) + console.assert(!validPositionObject('start')) + console.assert(!validPositionObject(START_FEN)) +} + +function isTouchDevice () { + return 'ontouchstart' in document.documentElement +} + +function validJQueryVersion () { + return ( + typeof $ && + $.fn && + $.fn.jquery && + validSemanticVersion($.fn.jquery, MINIMUM_JQUERY_VERSION) + ) +} + +// --------------------------------------------------------------------------- +// Chess Util Functions +// --------------------------------------------------------------------------- + +// convert FEN piece code to bP, wK, etc +function fenToPieceCode (piece) { + // black piece + if (piece.toLowerCase() === piece) { + return 'b' + piece.toUpperCase() + } + + // white piece + return 'w' + piece.toUpperCase() +} + +// convert bP, wK, etc code to FEN structure +function pieceCodeToFen (piece) { + var pieceCodeLetters = piece.split('') + + // white piece + if (pieceCodeLetters[0] === 'w') { + return pieceCodeLetters[1].toUpperCase() + } + + // black piece + return pieceCodeLetters[1].toLowerCase() +} + +// convert FEN string to position object +// returns false if the FEN string is invalid +function fenToObj (fen) { + if (!validFen(fen)) return false + + // cut off any move, castling, etc info from the end + // we're only interested in position information + fen = fen.replace(/ .+$/, '') + + var rows = fen.split('/') + var position = {} + + var currentRow = 8 + for (var i = 0; i < 8; i++) { + var row = rows[i].split('') + var colIdx = 0 + + // loop through each character in the FEN section + for (var j = 0; j < row.length; j++) { + // number / empty squares + if (row[j].search(/[1-8]/) !== -1) { + var numEmptySquares = parseInt(row[j], 10) + colIdx = colIdx + numEmptySquares + } else { + // piece + var square = COLUMNS[colIdx] + currentRow + position[square] = fenToPieceCode(row[j]) + colIdx = colIdx + 1 } } - return str + + currentRow = currentRow - 1 + } + + return position +} + +// position object to FEN string +// returns false if the obj is not a valid position object +function objToFen (obj) { + if (!validPositionObject(obj)) return false + + var fen = '' + + var currentRow = 8 + for (var i = 0; i < 8; i++) { + for (var j = 0; j < 8; j++) { + var square = COLUMNS[j] + currentRow + + // piece exists + if (obj.hasOwnProperty(square)) { + fen = fen + pieceCodeToFen(obj[square]) + } else { + // empty space + fen = fen + '1' + } + } + + if (i !== 7) { + fen = fen + '/' + } + + currentRow = currentRow - 1 + } + + // squeeze the empty numbers together + fen = squeezeFenEmptySquares(fen) + + return fen +} + +if (RUN_ASSERTS) { + console.assert(objToFen(START_POSITION) === START_FEN) + console.assert(objToFen({}) === '8/8/8/8/8/8/8/8') + console.assert(objToFen({ a2: 'wP', b2: 'bP' }) === '8/8/8/8/8/8/Pp6/8') +} + +function squeezeFenEmptySquares (fen) { + return fen + .replace(/11111111/g, '8') + .replace(/1111111/g, '7') + .replace(/111111/g, '6') + .replace(/11111/g, '5') + .replace(/1111/g, '4') + .replace(/111/g, '3') + .replace(/11/g, '2') +} + +function expandFenEmptySquares (fen) { + return fen + .replace(/8/g, '11111111') + .replace(/7/g, '1111111') + .replace(/6/g, '111111') + .replace(/5/g, '11111') + .replace(/4/g, '1111') + .replace(/3/g, '111') + .replace(/2/g, '11') +} + +// returns the distance between two squares +function squareDistance (squareA, squareB) { + var squareAArray = squareA.split('') + var squareAx = COLUMNS.indexOf(squareAArray[0]) + 1 + var squareAy = parseInt(squareAArray[1], 10) + + var squareBArray = squareB.split('') + var squareBx = COLUMNS.indexOf(squareBArray[0]) + 1 + var squareBy = parseInt(squareBArray[1], 10) + + var xDelta = Math.abs(squareAx - squareBx) + var yDelta = Math.abs(squareAy - squareBy) + + if (xDelta >= yDelta) return xDelta + return yDelta +} + +// returns the square of the closest instance of piece +// returns false if no instance of piece is found in position +function findClosestPiece (position, piece, square) { + // create array of closest squares from square + var closestSquares = createRadius(square) + + // search through the position in order of distance for the piece + for (var i = 0; i < closestSquares.length; i++) { + var s = closestSquares[i] + + if (position.hasOwnProperty(s) && position[s] === piece) { + return s + } + } + + return false +} + +// returns an array of closest squares from square +function createRadius (square) { + var squares = [] + + // calculate distance of all squares + for (var i = 0; i < 8; i++) { + for (var j = 0; j < 8; j++) { + var s = COLUMNS[i] + (j + 1) + + // skip the square we're starting from + if (square === s) continue + + squares.push({ + square: s, + distance: squareDistance(square, s) + }) + } } - if (RUN_ASSERTS) { - console.assert(interpolateTemplate('abc', {a: 'x'}) === 'abc') - console.assert(interpolateTemplate('{a}bc', {}) === '{a}bc') - console.assert(interpolateTemplate('{a}bc', {p: 'q'}) === '{a}bc') - console.assert(interpolateTemplate('{a}bc', {a: 'x'}) === 'xbc') - console.assert(interpolateTemplate('{a}bc{a}bc', {a: 'x'}) === 'xbcxbc') - console.assert(interpolateTemplate('{a}{a}{b}', {a: 'x', b: 'y'}) === 'xxy') + // sort by distance + squares.sort(function (a, b) { + return a.distance - b.distance + }) + + // just return the square code + var surroundingSquares = [] + for (i = 0; i < squares.length; i++) { + surroundingSquares.push(squares[i].square) } - // --------------------------------------------------------------------------- - // Predicates - // --------------------------------------------------------------------------- + return surroundingSquares +} + +// given a position and a set of moves, return a new position +// with the moves executed +function calculatePositionFromMoves (position, moves) { + var newPosition = deepCopy(position) - function isString (s) { - return typeof s === 'string' + for (var i in moves) { + if (!moves.hasOwnProperty(i)) continue + + // skip the move if the position doesn't have a piece on the source square + if (!newPosition.hasOwnProperty(i)) continue + + var piece = newPosition[i] + delete newPosition[i] + newPosition[moves[i]] = piece } - function isFunction (f) { - return typeof f === 'function' + return newPosition +} + +// TODO: add some asserts here for calculatePositionFromMoves + +// --------------------------------------------------------------------------- +// HTML +// --------------------------------------------------------------------------- + +function buildContainerHTML (hasSparePieces) { + var html = '
' + + if (hasSparePieces) { + html += '
' } - function isInteger (n) { - return typeof n === 'number' && - isFinite(n) && - Math.floor(n) === n + html += '
' + + if (hasSparePieces) { + html += '
' } - function validAnimationSpeed (speed) { - if (speed === 'fast' || speed === 'slow') return true - if (!isInteger(speed)) return false - return speed >= 0 + html += '
' + + return interpolateTemplate(html, CSS) +} + +// --------------------------------------------------------------------------- +// Config +// --------------------------------------------------------------------------- + +function expandConfigArgumentShorthand (config) { + if (config === 'start') { + config = { position: deepCopy(START_POSITION) } + } else if (validFen(config)) { + config = { position: fenToObj(config) } + } else if (validPositionObject(config)) { + config = { position: deepCopy(config) } } - function validThrottleRate (rate) { - return isInteger(rate) && - rate >= 1 + // config must be an object + if (!$.isPlainObject(config)) config = {} + + return config +} + +// validate config / set default options +function expandConfig (config) { + // default for orientation is white + if (config.orientation !== 'black') config.orientation = 'white' + + // default for showNotation is true + if (config.showNotation !== false) config.showNotation = true + + // default for draggable is false + if (config.draggable !== true) config.draggable = false + + // default for dropOffBoard is 'snapback' + if (config.dropOffBoard !== 'trash') config.dropOffBoard = 'snapback' + + // default for sparePieces is false + if (config.sparePieces !== true) config.sparePieces = false + + // draggable must be true if sparePieces is enabled + if (config.sparePieces) config.draggable = true + + // default piece theme is wikipedia + if ( + !config.hasOwnProperty('pieceTheme') || + (!isString(config.pieceTheme) && !isFunction(config.pieceTheme)) + ) { + config.pieceTheme = 'https://chessboardjs.com/img/chesspieces/wikipedia/{piece}.png' } - function validMove (move) { - // move should be a string - if (!isString(move)) return false - - // move should be in the form of "e2-e4", "f6-d5" - var squares = move.split('-') - if (squares.length !== 2) return false - - return validSquare(squares[0]) && validSquare(squares[1]) - } - - function validSquare (square) { - return isString(square) && square.search(/^[a-h][1-8]$/) !== -1 - } + // animation speeds + if (!validAnimationSpeed(config.appearSpeed)) { config.appearSpeed = DEFAULT_APPEAR_SPEED } + if (!validAnimationSpeed(config.moveSpeed)) { config.moveSpeed = DEFAULT_MOVE_SPEED } + if (!validAnimationSpeed(config.snapbackSpeed)) { config.snapbackSpeed = DEFAULT_SNAPBACK_SPEED } + if (!validAnimationSpeed(config.snapSpeed)) { config.snapSpeed = DEFAULT_SNAP_SPEED } + if (!validAnimationSpeed(config.trashSpeed)) { config.trashSpeed = DEFAULT_TRASH_SPEED } + + // throttle rate + if (!validThrottleRate(config.dragThrottleRate)) { config.dragThrottleRate = DEFAULT_DRAG_THROTTLE_RATE } - if (RUN_ASSERTS) { - console.assert(validSquare('a1')) - console.assert(validSquare('e2')) - console.assert(!validSquare('D2')) - console.assert(!validSquare('g9')) - console.assert(!validSquare('a')) - console.assert(!validSquare(true)) - console.assert(!validSquare(null)) - console.assert(!validSquare({})) + return config +} + +// --------------------------------------------------------------------------- +// Dependencies +// --------------------------------------------------------------------------- + +// check for a compatible version of jQuery +function checkJQuery () { + if (!validJQueryVersion()) { + var errorMsg = + 'Chessboard Error 1005: Unable to find a valid version of jQuery. ' + + 'Please include jQuery ' + + MINIMUM_JQUERY_VERSION + + ' or higher on the page' + + '\n\n' + + 'Exiting' + + ELLIPSIS + window.alert(errorMsg) + return false } - function validPieceCode (code) { - return isString(code) && code.search(/^[bw][KQRNBP]$/) !== -1 - } + return true +} + +// return either boolean false or the $container element +function checkContainerArg (containerElOrString) { + if (containerElOrString === '') { + var errorMsg1 = + 'Chessboard Error 1001: ' + + 'The first argument to Chessboard() cannot be an empty string.' + + '\n\n' + + 'Exiting' + + ELLIPSIS + window.alert(errorMsg1) + return false + } - if (RUN_ASSERTS) { - console.assert(validPieceCode('bP')) - console.assert(validPieceCode('bK')) - console.assert(validPieceCode('wK')) - console.assert(validPieceCode('wR')) - console.assert(!validPieceCode('WR')) - console.assert(!validPieceCode('Wr')) - console.assert(!validPieceCode('a')) - console.assert(!validPieceCode(true)) - console.assert(!validPieceCode(null)) - console.assert(!validPieceCode({})) + // convert containerEl to query selector if it is a string + if (isString(containerElOrString) && containerElOrString.charAt(0) !== '#') { + containerElOrString = '#' + containerElOrString } - function validFen (fen) { - if (!isString(fen)) return false - - // cut off any move, castling, etc info from the end - // we're only interested in position information - fen = fen.replace(/ .+$/, '') + // containerEl must be something that becomes a jQuery collection of size 1 + var $container = $(containerElOrString) + if ($container.length !== 1) { + var errorMsg2 = + 'Chessboard Error 1003: ' + + 'The first argument to Chessboard() must be the ID of a DOM node, ' + + 'an ID query selector, or a single DOM node.' + + '\n\n' + + 'Exiting' + + ELLIPSIS + window.alert(errorMsg2) + return false + } - // expand the empty square numbers to just 1s - fen = expandFenEmptySquares(fen) + return $container +} - // FEN should be 8 sections separated by slashes - var chunks = fen.split('/') - if (chunks.length !== 8) return false +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- + +function constructor (containerElOrString, config) { + // first things first: check basic dependencies + if (!checkJQuery()) return null + var $container = checkContainerArg(containerElOrString) + if (!$container) return null + + // ensure the config object is what we expect + config = expandConfigArgumentShorthand(config) + config = expandConfig(config) + + // DOM elements + var $board = null + var $draggedPiece = null + var $sparePiecesTop = null + var $sparePiecesBottom = null + + // constructor return object + var widget = {} + + // ------------------------------------------------------------------------- + // Stateful + // ------------------------------------------------------------------------- + + var boardBorderSize = 2 + var currentOrientation = 'white' + var currentPosition = {} + var draggedPiece = null + var draggedPieceLocation = null + var draggedPieceSource = null + var isDragging = false + var sparePiecesElsIds = {} + var squareElsIds = {} + var squareElsOffsets = {} + var squareSize = 16 + + // ------------------------------------------------------------------------- + // Validation / Errors + // ------------------------------------------------------------------------- + + function error (code, msg, obj) { + // do nothing if showErrors is not set + if ( + config.hasOwnProperty('showErrors') !== true || + config.showErrors === false + ) { + return + } - // check each section - for (var i = 0; i < 8; i++) { - if (chunks[i].length !== 8 || - chunks[i].search(/[^kqrnbpKQRNBP1]/) !== -1) { - return false - } - } - - return true - } - - if (RUN_ASSERTS) { - console.assert(validFen(START_FEN)) - console.assert(validFen('8/8/8/8/8/8/8/8')) - console.assert(validFen('r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R')) - console.assert(validFen('3r3r/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1')) - console.assert(!validFen('3r3z/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1')) - console.assert(!validFen('anbqkbnr/8/8/8/8/8/PPPPPPPP/8')) - console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/')) - console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBN')) - console.assert(!validFen('888888/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR')) - console.assert(!validFen('888888/pppppppp/74/8/8/8/PPPPPPPP/RNBQKBNR')) - console.assert(!validFen({})) - } - - function validPositionObject (pos) { - if (!$.isPlainObject(pos)) return false - - for (var i in pos) { - if (!pos.hasOwnProperty(i)) continue - - if (!validSquare(i) || !validPieceCode(pos[i])) { - return false - } - } - - return true - } - - if (RUN_ASSERTS) { - console.assert(validPositionObject(START_POSITION)) - console.assert(validPositionObject({})) - console.assert(validPositionObject({e2: 'wP'})) - console.assert(validPositionObject({e2: 'wP', d2: 'wP'})) - console.assert(!validPositionObject({e2: 'BP'})) - console.assert(!validPositionObject({y2: 'wP'})) - console.assert(!validPositionObject(null)) - console.assert(!validPositionObject('start')) - console.assert(!validPositionObject(START_FEN)) - } - - function isTouchDevice () { - return 'ontouchstart' in document.documentElement - } - - function validJQueryVersion () { - return typeof window.$ && - $.fn && - $.fn.jquery && - validSemanticVersion($.fn.jquery, MINIMUM_JQUERY_VERSION) - } - - // --------------------------------------------------------------------------- - // Chess Util Functions - // --------------------------------------------------------------------------- - - // convert FEN piece code to bP, wK, etc - function fenToPieceCode (piece) { - // black piece - if (piece.toLowerCase() === piece) { - return 'b' + piece.toUpperCase() - } - - // white piece - return 'w' + piece.toUpperCase() - } - - // convert bP, wK, etc code to FEN structure - function pieceCodeToFen (piece) { - var pieceCodeLetters = piece.split('') - - // white piece - if (pieceCodeLetters[0] === 'w') { - return pieceCodeLetters[1].toUpperCase() - } - - // black piece - return pieceCodeLetters[1].toLowerCase() - } - - // convert FEN string to position object - // returns false if the FEN string is invalid - function fenToObj (fen) { - if (!validFen(fen)) return false - - // cut off any move, castling, etc info from the end - // we're only interested in position information - fen = fen.replace(/ .+$/, '') - - var rows = fen.split('/') - var position = {} - - var currentRow = 8 - for (var i = 0; i < 8; i++) { - var row = rows[i].split('') - var colIdx = 0 - - // loop through each character in the FEN section - for (var j = 0; j < row.length; j++) { - // number / empty squares - if (row[j].search(/[1-8]/) !== -1) { - var numEmptySquares = parseInt(row[j], 10) - colIdx = colIdx + numEmptySquares - } else { - // piece - var square = COLUMNS[colIdx] + currentRow - position[square] = fenToPieceCode(row[j]) - colIdx = colIdx + 1 - } - } - - currentRow = currentRow - 1 - } - - return position - } - - // position object to FEN string - // returns false if the obj is not a valid position object - function objToFen (obj) { - if (!validPositionObject(obj)) return false - - var fen = '' - - var currentRow = 8 - for (var i = 0; i < 8; i++) { - for (var j = 0; j < 8; j++) { - var square = COLUMNS[j] + currentRow - - // piece exists - if (obj.hasOwnProperty(square)) { - fen = fen + pieceCodeToFen(obj[square]) - } else { - // empty space - fen = fen + '1' - } - } - - if (i !== 7) { - fen = fen + '/' + var errorText = 'Chessboard Error ' + code + ': ' + msg + + // print to console + if ( + config.showErrors === 'console' && + typeof console === 'object' && + typeof console.log === 'function' + ) { + console.log(errorText) + if (arguments.length >= 2) { + console.log(obj) } - - currentRow = currentRow - 1 - } - - // squeeze the empty numbers together - fen = squeezeFenEmptySquares(fen) - - return fen - } - - if (RUN_ASSERTS) { - console.assert(objToFen(START_POSITION) === START_FEN) - console.assert(objToFen({}) === '8/8/8/8/8/8/8/8') - console.assert(objToFen({a2: 'wP', 'b2': 'bP'}) === '8/8/8/8/8/8/Pp6/8') - } - - function squeezeFenEmptySquares (fen) { - return fen.replace(/11111111/g, '8') - .replace(/1111111/g, '7') - .replace(/111111/g, '6') - .replace(/11111/g, '5') - .replace(/1111/g, '4') - .replace(/111/g, '3') - .replace(/11/g, '2') - } - - function expandFenEmptySquares (fen) { - return fen.replace(/8/g, '11111111') - .replace(/7/g, '1111111') - .replace(/6/g, '111111') - .replace(/5/g, '11111') - .replace(/4/g, '1111') - .replace(/3/g, '111') - .replace(/2/g, '11') - } - - // returns the distance between two squares - function squareDistance (squareA, squareB) { - var squareAArray = squareA.split('') - var squareAx = COLUMNS.indexOf(squareAArray[0]) + 1 - var squareAy = parseInt(squareAArray[1], 10) - - var squareBArray = squareB.split('') - var squareBx = COLUMNS.indexOf(squareBArray[0]) + 1 - var squareBy = parseInt(squareBArray[1], 10) - - var xDelta = Math.abs(squareAx - squareBx) - var yDelta = Math.abs(squareAy - squareBy) - - if (xDelta >= yDelta) return xDelta - return yDelta - } - - // returns the square of the closest instance of piece - // returns false if no instance of piece is found in position - function findClosestPiece (position, piece, square) { - // create array of closest squares from square - var closestSquares = createRadius(square) - - // search through the position in order of distance for the piece - for (var i = 0; i < closestSquares.length; i++) { - var s = closestSquares[i] - - if (position.hasOwnProperty(s) && position[s] === piece) { - return s + return + } + + // alert errors + if (config.showErrors === 'alert') { + if (obj) { + errorText += '\n\n' + JSON.stringify(obj) } + window.alert(errorText) + return } - return false + // custom function + if (isFunction(config.showErrors)) { + config.showErrors(code, msg, obj) + } + } + + function setInitialState () { + currentOrientation = config.orientation + + // make sure position is valid + if (config.hasOwnProperty('position')) { + if (config.position === 'start') { + currentPosition = deepCopy(START_POSITION) + } else if (validFen(config.position)) { + currentPosition = fenToObj(config.position) + } else if (validPositionObject(config.position)) { + currentPosition = deepCopy(config.position) + } else { + error(7263, 'Invalid value passed to config.position.', config.position) + } + } } - // returns an array of closest squares from square - function createRadius (square) { - var squares = [] + // ------------------------------------------------------------------------- + // DOM Misc + // ------------------------------------------------------------------------- + + // calculates square size based on the width of the container + // got a little CSS black magic here, so let me explain: + // get the width of the container element (could be anything), reduce by 1 for + // fudge factor, and then keep reducing until we find an exact mod 8 for + // our square size + function calculateSquareSize () { + var containerWidth = parseInt($container.width(), 10) + + // defensive, prevent infinite loop + if (!containerWidth || containerWidth <= 0) { + return 0 + } + + // pad one pixel + var boardWidth = containerWidth - 1 + + while (boardWidth % 8 !== 0 && boardWidth > 0) { + boardWidth = boardWidth - 1 + } - // calculate distance of all squares + return boardWidth / 8 + } + + // create random IDs for elements + function createElIds () { + // squares on the board + for (var i = 0; i < COLUMNS.length; i++) { + for (var j = 1; j <= 8; j++) { + var square = COLUMNS[i] + j + squareElsIds[square] = square + '-' + uuid() + } + } + + // spare pieces + var pieces = 'KQRNBP'.split('') + for (i = 0; i < pieces.length; i++) { + var whitePiece = 'w' + pieces[i] + var blackPiece = 'b' + pieces[i] + sparePiecesElsIds[whitePiece] = whitePiece + '-' + uuid() + sparePiecesElsIds[blackPiece] = blackPiece + '-' + uuid() + } + } + + // ------------------------------------------------------------------------- + // Markup Building + // ------------------------------------------------------------------------- + + function buildBoardHTML (orientation) { + if (orientation !== 'black') { + orientation = 'white' + } + + var html = '' + + // algebraic notation / orientation + var alpha = deepCopy(COLUMNS) + var row = 8 + if (orientation === 'black') { + alpha.reverse() + row = 1 + } + + var squareColor = 'white' for (var i = 0; i < 8; i++) { + html += '
' for (var j = 0; j < 8; j++) { - var s = COLUMNS[i] + (j + 1) + var square = alpha[j] + row + + html += + '
' + + if (config.showNotation) { + // alpha notation + if ( + (orientation === 'white' && row === 1) || + (orientation === 'black' && row === 8) + ) { + html += '
' + alpha[j] + '
' + } + + // numeric notation + if (j === 0) { + html += '
' + row + '
' + } + } - // skip the square we're starting from - if (square === s) continue + html += '
' // end .square - squares.push({ - square: s, - distance: squareDistance(square, s) - }) + squareColor = squareColor === 'white' ? 'black' : 'white' + } + html += '
' + + squareColor = squareColor === 'white' ? 'black' : 'white' + + if (orientation === 'white') { + row = row - 1 + } else { + row = row + 1 } } - // sort by distance - squares.sort(function (a, b) { - return a.distance - b.distance - }) + return interpolateTemplate(html, CSS) + } + + function buildPieceImgSrc (piece) { + if (isFunction(config.pieceTheme)) { + return config.pieceTheme(piece) + } - // just return the square code - var surroundingSquares = [] - for (i = 0; i < squares.length; i++) { - surroundingSquares.push(squares[i].square) + if (isString(config.pieceTheme)) { + return interpolateTemplate(config.pieceTheme, { piece: piece }) } - return surroundingSquares + // NOTE: this should never happen + error(8272, 'Unable to build image source for config.pieceTheme.') + return '' } - // given a position and a set of moves, return a new position - // with the moves executed - function calculatePositionFromMoves (position, moves) { - var newPosition = deepCopy(position) + function buildPieceHTML (piece, hidden, id) { + var html = '' - // skip the move if the position doesn't have a piece on the source square - if (!newPosition.hasOwnProperty(i)) continue + return interpolateTemplate(html, CSS) + } + + function buildSparePiecesHTML (color) { + var pieces = ['wK', 'wQ', 'wR', 'wB', 'wN', 'wP'] + if (color === 'black') { + pieces = ['bK', 'bQ', 'bR', 'bB', 'bN', 'bP'] + } - var piece = newPosition[i] - delete newPosition[i] - newPosition[moves[i]] = piece + var html = '' + for (var i = 0; i < pieces.length; i++) { + html += buildPieceHTML(pieces[i], false, sparePiecesElsIds[pieces[i]]) } - return newPosition + return html } - // TODO: add some asserts here for calculatePositionFromMoves + // ------------------------------------------------------------------------- + // Animations + // ------------------------------------------------------------------------- + + function animateSquareToSquare (src, dest, piece, completeFn) { + // get information about the source and destination squares + var $srcSquare = $('#' + squareElsIds[src]) + var srcSquarePosition = $srcSquare.offset() + var $destSquare = $('#' + squareElsIds[dest]) + var destSquarePosition = $destSquare.offset() + + // create the animated piece and absolutely position it + // over the source square + var animatedPieceId = uuid() + $('body').append(buildPieceHTML(piece, true, animatedPieceId)) + var $animatedPiece = $('#' + animatedPieceId) + $animatedPiece.css({ + display: '', + position: 'absolute', + top: srcSquarePosition.top, + left: srcSquarePosition.left + }) - // --------------------------------------------------------------------------- - // HTML - // --------------------------------------------------------------------------- + // remove original piece from source square + $srcSquare.find('.' + CSS.piece).remove() - function buildContainerHTML (hasSparePieces) { - var html = '
' + function onFinishAnimation1 () { + // add the "real" piece to the destination square + $destSquare.append(buildPieceHTML(piece)) + + // remove the animated piece + $animatedPiece.remove() + + // run complete function + if (isFunction(completeFn)) { + completeFn() + } + } - if (hasSparePieces) { - html += '
' + // animate the piece to the destination square + var opts = { + duration: config.moveSpeed, + complete: onFinishAnimation1 } + $animatedPiece.animate(destSquarePosition, opts) + } + + function animateSparePieceToSquare (piece, dest, completeFn) { + var srcOffset = $('#' + sparePiecesElsIds[piece]).offset() + var $destSquare = $('#' + squareElsIds[dest]) + var destOffset = $destSquare.offset() + + // create the animate piece + var pieceId = uuid() + $('body').append(buildPieceHTML(piece, true, pieceId)) + var $animatedPiece = $('#' + pieceId) + $animatedPiece.css({ + display: '', + position: 'absolute', + left: srcOffset.left, + top: srcOffset.top + }) - html += '
' + // on complete + function onFinishAnimation2 () { + // add the "real" piece to the destination square + $destSquare.find('.' + CSS.piece).remove() + $destSquare.append(buildPieceHTML(piece)) - if (hasSparePieces) { - html += '
' + // remove the animated piece + $animatedPiece.remove() + + // run complete function + if (isFunction(completeFn)) { + completeFn() + } } - html += '
' + // animate the piece to the destination square + var opts = { + duration: config.moveSpeed, + complete: onFinishAnimation2 + } + $animatedPiece.animate(destOffset, opts) + } - return interpolateTemplate(html, CSS) + // execute an array of animations + function doAnimations (animations, oldPos, newPos) { + if (animations.length === 0) return + + var numFinished = 0 + function onFinishAnimation3 () { + // exit if all the animations aren't finished + numFinished = numFinished + 1 + if (numFinished !== animations.length) return + + drawPositionInstant() + + // run their onMoveEnd function + if (isFunction(config.onMoveEnd)) { + config.onMoveEnd(deepCopy(oldPos), deepCopy(newPos)) + } + } + + for (var i = 0; i < animations.length; i++) { + var animation = animations[i] + + // clear a piece + if (animation.type === 'clear') { + $('#' + squareElsIds[animation.square] + ' .' + CSS.piece).fadeOut( + config.trashSpeed, + onFinishAnimation3 + ) + + // add a piece with no spare pieces - fade the piece onto the square + } else if (animation.type === 'add' && !config.sparePieces) { + $('#' + squareElsIds[animation.square]) + .append(buildPieceHTML(animation.piece, true)) + .find('.' + CSS.piece) + .fadeIn(config.appearSpeed, onFinishAnimation3) + + // add a piece with spare pieces - animate from the spares + } else if (animation.type === 'add' && config.sparePieces) { + animateSparePieceToSquare( + animation.piece, + animation.square, + onFinishAnimation3 + ) + + // move a piece from squareA to squareB + } else if (animation.type === 'move') { + animateSquareToSquare( + animation.source, + animation.destination, + animation.piece, + onFinishAnimation3 + ) + } + } } - // --------------------------------------------------------------------------- - // Config - // --------------------------------------------------------------------------- + // calculate an array of animations that need to happen in order to get + // from pos1 to pos2 + function calculateAnimations (pos1, pos2) { + // make copies of both + pos1 = deepCopy(pos1) + pos2 = deepCopy(pos2) + + var animations = [] + var squaresMovedTo = {} + + // remove pieces that are the same in both positions + for (var i in pos2) { + if (!pos2.hasOwnProperty(i)) continue + + if (pos1.hasOwnProperty(i) && pos1[i] === pos2[i]) { + delete pos1[i] + delete pos2[i] + } + } + + // find all the "move" animations + for (i in pos2) { + if (!pos2.hasOwnProperty(i)) continue + + var closestPiece = findClosestPiece(pos1, pos2[i], i) + if (closestPiece) { + animations.push({ + type: 'move', + source: closestPiece, + destination: i, + piece: pos2[i] + }) + + delete pos1[closestPiece] + delete pos2[i] + squaresMovedTo[i] = true + } + } + + // "add" animations + for (i in pos2) { + if (!pos2.hasOwnProperty(i)) continue - function expandConfigArgumentShorthand (config) { - if (config === 'start') { - config = {position: deepCopy(START_POSITION)} - } else if (validFen(config)) { - config = {position: fenToObj(config)} - } else if (validPositionObject(config)) { - config = {position: deepCopy(config)} + animations.push({ + type: 'add', + square: i, + piece: pos2[i] + }) + + delete pos2[i] } - // config must be an object - if (!$.isPlainObject(config)) config = {} + // "clear" animations + for (i in pos1) { + if (!pos1.hasOwnProperty(i)) continue + + // do not clear a piece if it is on a square that is the result + // of a "move", ie: a piece capture + if (squaresMovedTo.hasOwnProperty(i)) continue + + animations.push({ + type: 'clear', + square: i, + piece: pos1[i] + }) + + delete pos1[i] + } - return config + return animations } - // validate config / set default options - function expandConfig (config) { - // default for orientation is white - if (config.orientation !== 'black') config.orientation = 'white' + // ------------------------------------------------------------------------- + // Control Flow + // ------------------------------------------------------------------------- - // default for showNotation is true - if (config.showNotation !== false) config.showNotation = true + function drawPositionInstant () { + // clear the board + $board.find('.' + CSS.piece).remove() + + // add the pieces + for (var i in currentPosition) { + if (!currentPosition.hasOwnProperty(i)) continue - // default for draggable is false - if (config.draggable !== true) config.draggable = false + $('#' + squareElsIds[i]).append(buildPieceHTML(currentPosition[i])) + } + } - // default for dropOffBoard is 'snapback' - if (config.dropOffBoard !== 'trash') config.dropOffBoard = 'snapback' + function drawBoard () { + $board.html( + buildBoardHTML(currentOrientation, squareSize, config.showNotation) + ) + drawPositionInstant() + + if (config.sparePieces) { + if (currentOrientation === 'white') { + $sparePiecesTop.html(buildSparePiecesHTML('black')) + $sparePiecesBottom.html(buildSparePiecesHTML('white')) + } else { + $sparePiecesTop.html(buildSparePiecesHTML('white')) + $sparePiecesBottom.html(buildSparePiecesHTML('black')) + } + } + } - // default for sparePieces is false - if (config.sparePieces !== true) config.sparePieces = false + function setCurrentPosition (position) { + var oldPos = deepCopy(currentPosition) + var newPos = deepCopy(position) + var oldFen = objToFen(oldPos) + var newFen = objToFen(newPos) - // draggable must be true if sparePieces is enabled - if (config.sparePieces) config.draggable = true + // do nothing if no change in position + if (oldFen === newFen) return - // default piece theme is wikipedia - if (!config.hasOwnProperty('pieceTheme') || - (!isString(config.pieceTheme) && !isFunction(config.pieceTheme))) { - config.pieceTheme = 'img/chesspieces/wikipedia/{piece}.png' + // run their onChange function + if (isFunction(config.onChange)) { + config.onChange(oldPos, newPos) } - // animation speeds - if (!validAnimationSpeed(config.appearSpeed)) config.appearSpeed = DEFAULT_APPEAR_SPEED - if (!validAnimationSpeed(config.moveSpeed)) config.moveSpeed = DEFAULT_MOVE_SPEED - if (!validAnimationSpeed(config.snapbackSpeed)) config.snapbackSpeed = DEFAULT_SNAPBACK_SPEED - if (!validAnimationSpeed(config.snapSpeed)) config.snapSpeed = DEFAULT_SNAP_SPEED - if (!validAnimationSpeed(config.trashSpeed)) config.trashSpeed = DEFAULT_TRASH_SPEED + // update state + currentPosition = position + } - // throttle rate - if (!validThrottleRate(config.dragThrottleRate)) config.dragThrottleRate = DEFAULT_DRAG_THROTTLE_RATE + function isXYOnSquare (x, y) { + for (var i in squareElsOffsets) { + if (!squareElsOffsets.hasOwnProperty(i)) continue + + var s = squareElsOffsets[i] + if ( + x >= s.left && + x < s.left + squareSize && + y >= s.top && + y < s.top + squareSize + ) { + return i + } + } - return config + return 'offboard' } - // --------------------------------------------------------------------------- - // Dependencies - // --------------------------------------------------------------------------- + // records the XY coords of every square into memory + function captureSquareOffsets () { + squareElsOffsets = {} - // check for a compatible version of jQuery - function checkJQuery () { - if (!validJQueryVersion()) { - var errorMsg = 'Chessboard Error 1005: Unable to find a valid version of jQuery. ' + - 'Please include jQuery ' + MINIMUM_JQUERY_VERSION + ' or higher on the page' + - '\n\n' + - 'Exiting' + ELLIPSIS - window.alert(errorMsg) - return false + for (var i in squareElsIds) { + if (!squareElsIds.hasOwnProperty(i)) continue + + squareElsOffsets[i] = $('#' + squareElsIds[i]).offset() } + } - return true + function removeSquareHighlights () { + $board + .find('.' + CSS.square) + .removeClass(CSS.highlight1 + ' ' + CSS.highlight2) } - // return either boolean false or the $container element - function checkContainerArg (containerElOrString) { - if (containerElOrString === '') { - var errorMsg1 = 'Chessboard Error 1001: ' + - 'The first argument to Chessboard() cannot be an empty string.' + - '\n\n' + - 'Exiting' + ELLIPSIS - window.alert(errorMsg1) - return false + function snapbackDraggedPiece () { + // there is no "snapback" for spare pieces + if (draggedPieceSource === 'spare') { + trashDraggedPiece() + return } - // convert containerEl to query selector if it is a string - if (isString(containerElOrString) && - containerElOrString.charAt(0) !== '#') { - containerElOrString = '#' + containerElOrString + removeSquareHighlights() + + // animation complete + function complete () { + drawPositionInstant() + $draggedPiece.css('display', 'none') + + // run their onSnapbackEnd function + if (isFunction(config.onSnapbackEnd)) { + config.onSnapbackEnd( + draggedPiece, + draggedPieceSource, + deepCopy(currentPosition), + currentOrientation + ) + } } - // containerEl must be something that becomes a jQuery collection of size 1 - var $container = $(containerElOrString) - if ($container.length !== 1) { - var errorMsg2 = 'Chessboard Error 1003: ' + - 'The first argument to Chessboard() must be the ID of a DOM node, ' + - 'an ID query selector, or a single DOM node.' + - '\n\n' + - 'Exiting' + ELLIPSIS - window.alert(errorMsg2) - return false + // get source square position + var sourceSquarePosition = $( + '#' + squareElsIds[draggedPieceSource] + ).offset() + + // animate the piece to the target square + var opts = { + duration: config.snapbackSpeed, + complete: complete } + $draggedPiece.animate(sourceSquarePosition, opts) - return $container - } - - // --------------------------------------------------------------------------- - // Constructor - // --------------------------------------------------------------------------- - - function constructor (containerElOrString, config) { - // first things first: check basic dependencies - if (!checkJQuery()) return null - var $container = checkContainerArg(containerElOrString) - if (!$container) return null - - // ensure the config object is what we expect - config = expandConfigArgumentShorthand(config) - config = expandConfig(config) - - // DOM elements - var $board = null - var $draggedPiece = null - var $sparePiecesTop = null - var $sparePiecesBottom = null - - // constructor return object - var widget = {} - - // ------------------------------------------------------------------------- - // Stateful - // ------------------------------------------------------------------------- - - var boardBorderSize = 2 - var currentOrientation = 'white' - var currentPosition = {} - var draggedPiece = null - var draggedPieceLocation = null - var draggedPieceSource = null - var isDragging = false - var sparePiecesElsIds = {} - var squareElsIds = {} - var squareElsOffsets = {} - var squareSize = 16 - - // ------------------------------------------------------------------------- - // Validation / Errors - // ------------------------------------------------------------------------- - - function error (code, msg, obj) { - // do nothing if showErrors is not set - if ( - config.hasOwnProperty('showErrors') !== true || - config.showErrors === false - ) { - return - } - - var errorText = 'Chessboard Error ' + code + ': ' + msg - - // print to console - if ( - config.showErrors === 'console' && - typeof console === 'object' && - typeof console.log === 'function' - ) { - console.log(errorText) - if (arguments.length >= 2) { - console.log(obj) - } - return - } - - // alert errors - if (config.showErrors === 'alert') { - if (obj) { - errorText += '\n\n' + JSON.stringify(obj) - } - window.alert(errorText) - return - } - - // custom function - if (isFunction(config.showErrors)) { - config.showErrors(code, msg, obj) - } - } - - function setInitialState () { - currentOrientation = config.orientation - - // make sure position is valid - if (config.hasOwnProperty('position')) { - if (config.position === 'start') { - currentPosition = deepCopy(START_POSITION) - } else if (validFen(config.position)) { - currentPosition = fenToObj(config.position) - } else if (validPositionObject(config.position)) { - currentPosition = deepCopy(config.position) - } else { - error( - 7263, - 'Invalid value passed to config.position.', - config.position - ) - } + // set state + isDragging = false + } + + function trashDraggedPiece () { + removeSquareHighlights() + + // remove the source piece + var newPosition = deepCopy(currentPosition) + delete newPosition[draggedPieceSource] + setCurrentPosition(newPosition) + + // redraw the position + drawPositionInstant() + + // hide the dragged piece + $draggedPiece.fadeOut(config.trashSpeed) + + // set state + isDragging = false + } + + function dropDraggedPieceOnSquare (square) { + removeSquareHighlights() + + // update position + var newPosition = deepCopy(currentPosition) + delete newPosition[draggedPieceSource] + newPosition[square] = draggedPiece + setCurrentPosition(newPosition) + + // get target square information + var targetSquarePosition = $('#' + squareElsIds[square]).offset() + + // animation complete + function onAnimationComplete () { + drawPositionInstant() + $draggedPiece.css('display', 'none') + + // execute their onSnapEnd function + if (isFunction(config.onSnapEnd)) { + config.onSnapEnd(draggedPieceSource, square, draggedPiece) } } - // ------------------------------------------------------------------------- - // DOM Misc - // ------------------------------------------------------------------------- - - // calculates square size based on the width of the container - // got a little CSS black magic here, so let me explain: - // get the width of the container element (could be anything), reduce by 1 for - // fudge factor, and then keep reducing until we find an exact mod 8 for - // our square size - function calculateSquareSize () { - var containerWidth = parseInt($container.width(), 10) - - // defensive, prevent infinite loop - if (!containerWidth || containerWidth <= 0) { - return 0 - } - - // pad one pixel - var boardWidth = containerWidth - 1 - - while (boardWidth % 8 !== 0 && boardWidth > 0) { - boardWidth = boardWidth - 1 - } - - return boardWidth / 8 - } - - // create random IDs for elements - function createElIds () { - // squares on the board - for (var i = 0; i < COLUMNS.length; i++) { - for (var j = 1; j <= 8; j++) { - var square = COLUMNS[i] + j - squareElsIds[square] = square + '-' + uuid() - } - } - - // spare pieces - var pieces = 'KQRNBP'.split('') - for (i = 0; i < pieces.length; i++) { - var whitePiece = 'w' + pieces[i] - var blackPiece = 'b' + pieces[i] - sparePiecesElsIds[whitePiece] = whitePiece + '-' + uuid() - sparePiecesElsIds[blackPiece] = blackPiece + '-' + uuid() - } - } - - // ------------------------------------------------------------------------- - // Markup Building - // ------------------------------------------------------------------------- - - function buildBoardHTML (orientation) { - if (orientation !== 'black') { - orientation = 'white' + // snap the piece to the target square + var opts = { + duration: config.snapSpeed, + complete: onAnimationComplete + } + $draggedPiece.animate(targetSquarePosition, opts) + + // set state + isDragging = false + } + + function beginDraggingPiece (source, piece, x, y) { + // run their custom onDragStart function + // their custom onDragStart function can cancel drag start + if ( + isFunction(config.onDragStart) && + config.onDragStart( + source, + piece, + deepCopy(currentPosition), + currentOrientation + ) === false + ) { + return + } + + // set state + isDragging = true + draggedPiece = piece + draggedPieceSource = source + + // if the piece came from spare pieces, location is offboard + if (source === 'spare') { + draggedPieceLocation = 'offboard' + } else { + draggedPieceLocation = source + } + + // capture the x, y coords of all squares in memory + captureSquareOffsets() + + // create the dragged piece + $draggedPiece.attr('src', buildPieceImgSrc(piece)).css({ + display: '', + position: 'absolute', + left: x - squareSize / 2, + top: y - squareSize / 2 + }) + + if (source !== 'spare') { + // highlight the source square and hide the piece + $('#' + squareElsIds[source]) + .addClass(CSS.highlight1) + .find('.' + CSS.piece) + .css('display', 'none') + } + } + + function updateDraggedPiece (x, y) { + // put the dragged piece over the mouse cursor + $draggedPiece.css({ + left: x - squareSize / 2, + top: y - squareSize / 2 + }) + + // get location + var location = isXYOnSquare(x, y) + + // do nothing if the location has not changed + if (location === draggedPieceLocation) return + + // remove highlight from previous square + if (validSquare(draggedPieceLocation)) { + $('#' + squareElsIds[draggedPieceLocation]).removeClass(CSS.highlight2) + } + + // add highlight to new square + if (validSquare(location)) { + $('#' + squareElsIds[location]).addClass(CSS.highlight2) + } + + // run onDragMove + if (isFunction(config.onDragMove)) { + config.onDragMove( + location, + draggedPieceLocation, + draggedPieceSource, + draggedPiece, + deepCopy(currentPosition), + currentOrientation + ) + } + + // update state + draggedPieceLocation = location + } + + function stopDraggedPiece (location) { + // determine what the action should be + var action = 'drop' + if (location === 'offboard' && config.dropOffBoard === 'snapback') { + action = 'snapback' + } + if (location === 'offboard' && config.dropOffBoard === 'trash') { + action = 'trash' + } + + // run their onDrop function, which can potentially change the drop action + if (isFunction(config.onDrop)) { + var newPosition = deepCopy(currentPosition) + + // source piece is a spare piece and position is off the board + // if (draggedPieceSource === 'spare' && location === 'offboard') {...} + // position has not changed; do nothing + + // source piece is a spare piece and position is on the board + if (draggedPieceSource === 'spare' && validSquare(location)) { + // add the piece to the board + newPosition[location] = draggedPiece } - var html = '' + // source piece was on the board and position is off the board + if (validSquare(draggedPieceSource) && location === 'offboard') { + // remove the piece from the board + delete newPosition[draggedPieceSource] + } - // algebraic notation / orientation - var alpha = deepCopy(COLUMNS) - var row = 8 - if (orientation === 'black') { - alpha.reverse() - row = 1 + // source piece was on the board and position is on the board + if (validSquare(draggedPieceSource) && validSquare(location)) { + // move the piece + delete newPosition[draggedPieceSource] + newPosition[location] = draggedPiece } - var squareColor = 'white' - for (var i = 0; i < 8; i++) { - html += '
' - for (var j = 0; j < 8; j++) { - var square = alpha[j] + row - - html += '
' - - if (config.showNotation) { - // alpha notation - if ((orientation === 'white' && row === 1) || - (orientation === 'black' && row === 8)) { - html += '
' + alpha[j] + '
' - } - - // numeric notation - if (j === 0) { - html += '
' + row + '
' - } - } + var oldPosition = deepCopy(currentPosition) + + var result = config.onDrop( + draggedPieceSource, + location, + draggedPiece, + newPosition, + oldPosition, + currentOrientation + ) + if (result === 'snapback' || result === 'trash') { + action = result + } + } - html += '
' // end .square + // do it! + if (action === 'snapback') { + snapbackDraggedPiece() + } else if (action === 'trash') { + trashDraggedPiece() + } else if (action === 'drop') { + dropDraggedPieceOnSquare(location) + } + } - squareColor = (squareColor === 'white') ? 'black' : 'white' - } - html += '
' + // ------------------------------------------------------------------------- + // Public Methods + // ------------------------------------------------------------------------- + + // clear the board + widget.clear = function (useAnimation) { + widget.position({}, useAnimation) + } - squareColor = (squareColor === 'white') ? 'black' : 'white' + // remove the widget from the page + widget.destroy = function () { + // remove markup + $container.html('') + $draggedPiece.remove() - if (orientation === 'white') { - row = row - 1 - } else { - row = row + 1 - } + // remove event handlers + $container.unbind() + } + + // shorthand method to get the current FEN + widget.fen = function () { + return widget.position('fen') + } + + // flip orientation + widget.flip = function () { + return widget.orientation('flip') + } + + // move pieces + // TODO: this method should be variadic as well as accept an array of moves + widget.move = function () { + // no need to throw an error here; just do nothing + // TODO: this should return the current position + if (arguments.length === 0) return + + var useAnimation = true + + // collect the moves into an object + var moves = {} + for (var i = 0; i < arguments.length; i++) { + // any "false" to this function means no animations + if (arguments[i] === false) { + useAnimation = false + continue } - return interpolateTemplate(html, CSS) - } - - function buildPieceImgSrc (piece) { - if (isFunction(config.pieceTheme)) { - return config.pieceTheme(piece) - } - - if (isString(config.pieceTheme)) { - return interpolateTemplate(config.pieceTheme, {piece: piece}) - } - - // NOTE: this should never happen - error(8272, 'Unable to build image source for config.pieceTheme.') - return '' - } - - function buildPieceHTML (piece, hidden, id) { - var html = '' - - return interpolateTemplate(html, CSS) - } - - function buildSparePiecesHTML (color) { - var pieces = ['wK', 'wQ', 'wR', 'wB', 'wN', 'wP'] - if (color === 'black') { - pieces = ['bK', 'bQ', 'bR', 'bB', 'bN', 'bP'] - } - - var html = '' - for (var i = 0; i < pieces.length; i++) { - html += buildPieceHTML(pieces[i], false, sparePiecesElsIds[pieces[i]]) - } - - return html - } - - // ------------------------------------------------------------------------- - // Animations - // ------------------------------------------------------------------------- - - function animateSquareToSquare (src, dest, piece, completeFn) { - // get information about the source and destination squares - var $srcSquare = $('#' + squareElsIds[src]) - var srcSquarePosition = $srcSquare.offset() - var $destSquare = $('#' + squareElsIds[dest]) - var destSquarePosition = $destSquare.offset() - - // create the animated piece and absolutely position it - // over the source square - var animatedPieceId = uuid() - $('body').append(buildPieceHTML(piece, true, animatedPieceId)) - var $animatedPiece = $('#' + animatedPieceId) - $animatedPiece.css({ - display: '', - position: 'absolute', - top: srcSquarePosition.top, - left: srcSquarePosition.left - }) - - // remove original piece from source square - $srcSquare.find('.' + CSS.piece).remove() - - function onFinishAnimation1 () { - // add the "real" piece to the destination square - $destSquare.append(buildPieceHTML(piece)) - - // remove the animated piece - $animatedPiece.remove() - - // run complete function - if (isFunction(completeFn)) { - completeFn() - } - } - - // animate the piece to the destination square - var opts = { - duration: config.moveSpeed, - complete: onFinishAnimation1 - } - $animatedPiece.animate(destSquarePosition, opts) - } - - function animateSparePieceToSquare (piece, dest, completeFn) { - var srcOffset = $('#' + sparePiecesElsIds[piece]).offset() - var $destSquare = $('#' + squareElsIds[dest]) - var destOffset = $destSquare.offset() - - // create the animate piece - var pieceId = uuid() - $('body').append(buildPieceHTML(piece, true, pieceId)) - var $animatedPiece = $('#' + pieceId) - $animatedPiece.css({ - display: '', - position: 'absolute', - left: srcOffset.left, - top: srcOffset.top - }) - - // on complete - function onFinishAnimation2 () { - // add the "real" piece to the destination square - $destSquare.find('.' + CSS.piece).remove() - $destSquare.append(buildPieceHTML(piece)) - - // remove the animated piece - $animatedPiece.remove() - - // run complete function - if (isFunction(completeFn)) { - completeFn() - } - } - - // animate the piece to the destination square - var opts = { - duration: config.moveSpeed, - complete: onFinishAnimation2 - } - $animatedPiece.animate(destOffset, opts) - } - - // execute an array of animations - function doAnimations (animations, oldPos, newPos) { - if (animations.length === 0) return - - var numFinished = 0 - function onFinishAnimation3 () { - // exit if all the animations aren't finished - numFinished = numFinished + 1 - if (numFinished !== animations.length) return - - drawPositionInstant() - - // run their onMoveEnd function - if (isFunction(config.onMoveEnd)) { - config.onMoveEnd(deepCopy(oldPos), deepCopy(newPos)) - } - } - - for (var i = 0; i < animations.length; i++) { - var animation = animations[i] - - // clear a piece - if (animation.type === 'clear') { - $('#' + squareElsIds[animation.square] + ' .' + CSS.piece) - .fadeOut(config.trashSpeed, onFinishAnimation3) + var tmp = arguments[i].split('-') + moves[tmp[0]] = tmp[1] + } - // add a piece with no spare pieces - fade the piece onto the square - } else if (animation.type === 'add' && !config.sparePieces) { - $('#' + squareElsIds[animation.square]) - .append(buildPieceHTML(animation.piece, true)) - .find('.' + CSS.piece) - .fadeIn(config.appearSpeed, onFinishAnimation3) + // calculate position from moves + var newPos = calculatePositionFromMoves(currentPosition, moves) - // add a piece with spare pieces - animate from the spares - } else if (animation.type === 'add' && config.sparePieces) { - animateSparePieceToSquare(animation.piece, animation.square, onFinishAnimation3) + // update the board + widget.position(newPos, useAnimation) - // move a piece from squareA to squareB - } else if (animation.type === 'move') { - animateSquareToSquare(animation.source, animation.destination, animation.piece, onFinishAnimation3) - } - } - } - - // calculate an array of animations that need to happen in order to get - // from pos1 to pos2 - function calculateAnimations (pos1, pos2) { - // make copies of both - pos1 = deepCopy(pos1) - pos2 = deepCopy(pos2) - - var animations = [] - var squaresMovedTo = {} - - // remove pieces that are the same in both positions - for (var i in pos2) { - if (!pos2.hasOwnProperty(i)) continue - - if (pos1.hasOwnProperty(i) && pos1[i] === pos2[i]) { - delete pos1[i] - delete pos2[i] - } - } - - // find all the "move" animations - for (i in pos2) { - if (!pos2.hasOwnProperty(i)) continue - - var closestPiece = findClosestPiece(pos1, pos2[i], i) - if (closestPiece) { - animations.push({ - type: 'move', - source: closestPiece, - destination: i, - piece: pos2[i] - }) - - delete pos1[closestPiece] - delete pos2[i] - squaresMovedTo[i] = true - } - } + // return the new position object + return newPos + } + + widget.orientation = function (arg) { + // no arguments, return the current orientation + if (arguments.length === 0) { + return currentOrientation + } + + // set to white or black + if (arg === 'white' || arg === 'black') { + currentOrientation = arg + drawBoard() + return currentOrientation + } - // "add" animations - for (i in pos2) { - if (!pos2.hasOwnProperty(i)) continue - - animations.push({ - type: 'add', - square: i, - piece: pos2[i] - }) - - delete pos2[i] - } - - // "clear" animations - for (i in pos1) { - if (!pos1.hasOwnProperty(i)) continue - - // do not clear a piece if it is on a square that is the result - // of a "move", ie: a piece capture - if (squaresMovedTo.hasOwnProperty(i)) continue - - animations.push({ - type: 'clear', - square: i, - piece: pos1[i] - }) - - delete pos1[i] - } - - return animations - } - - // ------------------------------------------------------------------------- - // Control Flow - // ------------------------------------------------------------------------- - - function drawPositionInstant () { - // clear the board - $board.find('.' + CSS.piece).remove() - - // add the pieces - for (var i in currentPosition) { - if (!currentPosition.hasOwnProperty(i)) continue - - $('#' + squareElsIds[i]).append(buildPieceHTML(currentPosition[i])) - } - } - - function drawBoard () { - $board.html(buildBoardHTML(currentOrientation, squareSize, config.showNotation)) - drawPositionInstant() - - if (config.sparePieces) { - if (currentOrientation === 'white') { - $sparePiecesTop.html(buildSparePiecesHTML('black')) - $sparePiecesBottom.html(buildSparePiecesHTML('white')) - } else { - $sparePiecesTop.html(buildSparePiecesHTML('white')) - $sparePiecesBottom.html(buildSparePiecesHTML('black')) - } - } - } - - function setCurrentPosition (position) { - var oldPos = deepCopy(currentPosition) - var newPos = deepCopy(position) - var oldFen = objToFen(oldPos) - var newFen = objToFen(newPos) - - // do nothing if no change in position - if (oldFen === newFen) return - - // run their onChange function - if (isFunction(config.onChange)) { - config.onChange(oldPos, newPos) - } - - // update state - currentPosition = position - } - - function isXYOnSquare (x, y) { - for (var i in squareElsOffsets) { - if (!squareElsOffsets.hasOwnProperty(i)) continue - - var s = squareElsOffsets[i] - if (x >= s.left && - x < s.left + squareSize && - y >= s.top && - y < s.top + squareSize) { - return i - } - } - - return 'offboard' - } - - // records the XY coords of every square into memory - function captureSquareOffsets () { - squareElsOffsets = {} - - for (var i in squareElsIds) { - if (!squareElsIds.hasOwnProperty(i)) continue - - squareElsOffsets[i] = $('#' + squareElsIds[i]).offset() - } - } - - function removeSquareHighlights () { - $board - .find('.' + CSS.square) - .removeClass(CSS.highlight1 + ' ' + CSS.highlight2) - } - - function snapbackDraggedPiece () { - // there is no "snapback" for spare pieces - if (draggedPieceSource === 'spare') { - trashDraggedPiece() - return - } - - removeSquareHighlights() - - // animation complete - function complete () { - drawPositionInstant() - $draggedPiece.css('display', 'none') - - // run their onSnapbackEnd function - if (isFunction(config.onSnapbackEnd)) { - config.onSnapbackEnd( - draggedPiece, - draggedPieceSource, - deepCopy(currentPosition), - currentOrientation - ) - } - } - - // get source square position - var sourceSquarePosition = $('#' + squareElsIds[draggedPieceSource]).offset() - - // animate the piece to the target square - var opts = { - duration: config.snapbackSpeed, - complete: complete - } - $draggedPiece.animate(sourceSquarePosition, opts) - - // set state - isDragging = false - } - - function trashDraggedPiece () { - removeSquareHighlights() - - // remove the source piece - var newPosition = deepCopy(currentPosition) - delete newPosition[draggedPieceSource] - setCurrentPosition(newPosition) - - // redraw the position - drawPositionInstant() - - // hide the dragged piece - $draggedPiece.fadeOut(config.trashSpeed) - - // set state - isDragging = false - } - - function dropDraggedPieceOnSquare (square) { - removeSquareHighlights() - - // update position - var newPosition = deepCopy(currentPosition) - delete newPosition[draggedPieceSource] - newPosition[square] = draggedPiece - setCurrentPosition(newPosition) - - // get target square information - var targetSquarePosition = $('#' + squareElsIds[square]).offset() - - // animation complete - function onAnimationComplete () { - drawPositionInstant() - $draggedPiece.css('display', 'none') - - // execute their onSnapEnd function - if (isFunction(config.onSnapEnd)) { - config.onSnapEnd(draggedPieceSource, square, draggedPiece) - } - } - - // snap the piece to the target square - var opts = { - duration: config.snapSpeed, - complete: onAnimationComplete - } - $draggedPiece.animate(targetSquarePosition, opts) - - // set state - isDragging = false - } - - function beginDraggingPiece (source, piece, x, y) { - // run their custom onDragStart function - // their custom onDragStart function can cancel drag start - if (isFunction(config.onDragStart) && - config.onDragStart(source, piece, deepCopy(currentPosition), currentOrientation) === false) { - return - } - - // set state - isDragging = true - draggedPiece = piece - draggedPieceSource = source - - // if the piece came from spare pieces, location is offboard - if (source === 'spare') { - draggedPieceLocation = 'offboard' - } else { - draggedPieceLocation = source - } - - // capture the x, y coords of all squares in memory - captureSquareOffsets() - - // create the dragged piece - $draggedPiece.attr('src', buildPieceImgSrc(piece)).css({ - display: '', - position: 'absolute', - left: x - squareSize / 2, - top: y - squareSize / 2 - }) - - if (source !== 'spare') { - // highlight the source square and hide the piece - $('#' + squareElsIds[source]) - .addClass(CSS.highlight1) - .find('.' + CSS.piece) - .css('display', 'none') - } - } - - function updateDraggedPiece (x, y) { - // put the dragged piece over the mouse cursor - $draggedPiece.css({ - left: x - squareSize / 2, - top: y - squareSize / 2 - }) - - // get location - var location = isXYOnSquare(x, y) - - // do nothing if the location has not changed - if (location === draggedPieceLocation) return - - // remove highlight from previous square - if (validSquare(draggedPieceLocation)) { - $('#' + squareElsIds[draggedPieceLocation]).removeClass(CSS.highlight2) - } - - // add highlight to new square - if (validSquare(location)) { - $('#' + squareElsIds[location]).addClass(CSS.highlight2) - } - - // run onDragMove - if (isFunction(config.onDragMove)) { - config.onDragMove( - location, - draggedPieceLocation, - draggedPieceSource, - draggedPiece, - deepCopy(currentPosition), - currentOrientation - ) - } - - // update state - draggedPieceLocation = location - } - - function stopDraggedPiece (location) { - // determine what the action should be - var action = 'drop' - if (location === 'offboard' && config.dropOffBoard === 'snapback') { - action = 'snapback' - } - if (location === 'offboard' && config.dropOffBoard === 'trash') { - action = 'trash' - } - - // run their onDrop function, which can potentially change the drop action - if (isFunction(config.onDrop)) { - var newPosition = deepCopy(currentPosition) - - // source piece is a spare piece and position is off the board - // if (draggedPieceSource === 'spare' && location === 'offboard') {...} - // position has not changed; do nothing - - // source piece is a spare piece and position is on the board - if (draggedPieceSource === 'spare' && validSquare(location)) { - // add the piece to the board - newPosition[location] = draggedPiece - } - - // source piece was on the board and position is off the board - if (validSquare(draggedPieceSource) && location === 'offboard') { - // remove the piece from the board - delete newPosition[draggedPieceSource] - } - - // source piece was on the board and position is on the board - if (validSquare(draggedPieceSource) && validSquare(location)) { - // move the piece - delete newPosition[draggedPieceSource] - newPosition[location] = draggedPiece - } - - var oldPosition = deepCopy(currentPosition) - - var result = config.onDrop( - draggedPieceSource, - location, - draggedPiece, - newPosition, - oldPosition, - currentOrientation - ) - if (result === 'snapback' || result === 'trash') { - action = result - } - } - - // do it! - if (action === 'snapback') { - snapbackDraggedPiece() - } else if (action === 'trash') { - trashDraggedPiece() - } else if (action === 'drop') { - dropDraggedPieceOnSquare(location) - } - } - - // ------------------------------------------------------------------------- - // Public Methods - // ------------------------------------------------------------------------- - - // clear the board - widget.clear = function (useAnimation) { - widget.position({}, useAnimation) - } - - // remove the widget from the page - widget.destroy = function () { - // remove markup - $container.html('') - $draggedPiece.remove() - - // remove event handlers - $container.unbind() - } - - // shorthand method to get the current FEN - widget.fen = function () { - return widget.position('fen') - } - // flip orientation - widget.flip = function () { - return widget.orientation('flip') - } - - // move pieces - // TODO: this method should be variadic as well as accept an array of moves - widget.move = function () { - // no need to throw an error here; just do nothing - // TODO: this should return the current position - if (arguments.length === 0) return - - var useAnimation = true - - // collect the moves into an object - var moves = {} - for (var i = 0; i < arguments.length; i++) { - // any "false" to this function means no animations - if (arguments[i] === false) { - useAnimation = false - continue - } - - // skip invalid arguments - if (!validMove(arguments[i])) { - error(2826, 'Invalid move passed to the move method.', arguments[i]) - continue - } - - var tmp = arguments[i].split('-') - moves[tmp[0]] = tmp[1] - } - - // calculate position from moves - var newPos = calculatePositionFromMoves(currentPosition, moves) - - // update the board - widget.position(newPos, useAnimation) - - // return the new position object - return newPos - } - - widget.orientation = function (arg) { - // no arguments, return the current orientation - if (arguments.length === 0) { - return currentOrientation - } - - // set to white or black - if (arg === 'white' || arg === 'black') { - currentOrientation = arg - drawBoard() - return currentOrientation - } - - // flip orientation - if (arg === 'flip') { - currentOrientation = currentOrientation === 'white' ? 'black' : 'white' - drawBoard() - return currentOrientation - } - - error(5482, 'Invalid value passed to the orientation method.', arg) - } - - widget.position = function (position, useAnimation) { - // no arguments, return the current position - if (arguments.length === 0) { - return deepCopy(currentPosition) - } - - // get position as FEN - if (isString(position) && position.toLowerCase() === 'fen') { - return objToFen(currentPosition) - } + if (arg === 'flip') { + currentOrientation = currentOrientation === 'white' ? 'black' : 'white' + drawBoard() + return currentOrientation + } - // start position - if (isString(position) && position.toLowerCase() === 'start') { - position = deepCopy(START_POSITION) - } - - // convert FEN to position object - if (validFen(position)) { - position = fenToObj(position) - } - - // validate position object - if (!validPositionObject(position)) { - error(6482, 'Invalid value passed to the position method.', position) - return - } - - // default for useAnimations is true - if (useAnimation !== false) useAnimation = true - - if (useAnimation) { - // start the animations - var animations = calculateAnimations(currentPosition, position) - doAnimations(animations, currentPosition, position) - - // set the new position - setCurrentPosition(position) - } else { - // instant update - setCurrentPosition(position) - drawPositionInstant() - } - } - - widget.resize = function () { - // calulate the new square size - squareSize = calculateSquareSize() - - // set board width - $board.css('width', squareSize * 8 + 'px') - - // set drag piece size - $draggedPiece.css({ - height: squareSize, - width: squareSize - }) - - // spare pieces - if (config.sparePieces) { - $container - .find('.' + CSS.sparePieces) - .css('paddingLeft', squareSize + boardBorderSize + 'px') - } - - // redraw the board - drawBoard() - } - - // set the starting position - widget.start = function (useAnimation) { - widget.position('start', useAnimation) - } - - // ------------------------------------------------------------------------- - // Browser Events - // ------------------------------------------------------------------------- - - function stopDefault (evt) { - evt.preventDefault() - } - - function mousedownSquare (evt) { - // do nothing if we're not draggable - if (!config.draggable) return - - // do nothing if there is no piece on this square - var square = $(this).attr('data-square') - if (!validSquare(square)) return - if (!currentPosition.hasOwnProperty(square)) return - - beginDraggingPiece(square, currentPosition[square], evt.pageX, evt.pageY) - } - - function touchstartSquare (e) { - // do nothing if we're not draggable - if (!config.draggable) return - - // do nothing if there is no piece on this square - var square = $(this).attr('data-square') - if (!validSquare(square)) return - if (!currentPosition.hasOwnProperty(square)) return - - e = e.originalEvent - beginDraggingPiece( - square, - currentPosition[square], - e.changedTouches[0].pageX, - e.changedTouches[0].pageY - ) - } - - function mousedownSparePiece (evt) { - // do nothing if sparePieces is not enabled - if (!config.sparePieces) return - - var piece = $(this).attr('data-piece') - - beginDraggingPiece('spare', piece, evt.pageX, evt.pageY) - } - - function touchstartSparePiece (e) { - // do nothing if sparePieces is not enabled - if (!config.sparePieces) return - - var piece = $(this).attr('data-piece') - - e = e.originalEvent - beginDraggingPiece( - 'spare', - piece, - e.changedTouches[0].pageX, - e.changedTouches[0].pageY - ) - } - - function mousemoveWindow (evt) { - if (isDragging) { - updateDraggedPiece(evt.pageX, evt.pageY) - } + error(5482, 'Invalid value passed to the orientation method.', arg) + } + + widget.position = function (position, useAnimation) { + // no arguments, return the current position + if (arguments.length === 0) { + return deepCopy(currentPosition) + } + + // get position as FEN + if (isString(position) && position.toLowerCase() === 'fen') { + return objToFen(currentPosition) + } + + // start position + if (isString(position) && position.toLowerCase() === 'start') { + position = deepCopy(START_POSITION) + } + + // convert FEN to position object + if (validFen(position)) { + position = fenToObj(position) + } + + // validate position object + if (!validPositionObject(position)) { + error(6482, 'Invalid value passed to the position method.', position) + return + } + + // default for useAnimations is true + if (useAnimation !== false) useAnimation = true + + if (useAnimation) { + // start the animations + var animations = calculateAnimations(currentPosition, position) + doAnimations(animations, currentPosition, position) + + // set the new position + setCurrentPosition(position) + } else { + // instant update + setCurrentPosition(position) + drawPositionInstant() + } + } + + widget.resize = function () { + // calulate the new square size + squareSize = calculateSquareSize() + + // set board width + $board.css('width', squareSize * 8 + 'px') + + // set drag piece size + $draggedPiece.css({ + height: squareSize, + width: squareSize + }) + + // spare pieces + if (config.sparePieces) { + $container + .find('.' + CSS.sparePieces) + .css('paddingLeft', squareSize + boardBorderSize + 'px') } - var throttledMousemoveWindow = throttle(mousemoveWindow, config.dragThrottleRate) - - function touchmoveWindow (evt) { - // do nothing if we are not dragging a piece - if (!isDragging) return - - // prevent screen from scrolling - evt.preventDefault() - - updateDraggedPiece(evt.originalEvent.changedTouches[0].pageX, - evt.originalEvent.changedTouches[0].pageY) - } - - var throttledTouchmoveWindow = throttle(touchmoveWindow, config.dragThrottleRate) - - function mouseupWindow (evt) { - // do nothing if we are not dragging a piece - if (!isDragging) return - - // get the location - var location = isXYOnSquare(evt.pageX, evt.pageY) - - stopDraggedPiece(location) - } - - function touchendWindow (evt) { - // do nothing if we are not dragging a piece - if (!isDragging) return - - // get the location - var location = isXYOnSquare(evt.originalEvent.changedTouches[0].pageX, - evt.originalEvent.changedTouches[0].pageY) - - stopDraggedPiece(location) - } - - function mouseenterSquare (evt) { - // do not fire this event if we are dragging a piece - // NOTE: this should never happen, but it's a safeguard - if (isDragging) return - - // exit if they did not provide a onMouseoverSquare function - if (!isFunction(config.onMouseoverSquare)) return - - // get the square - var square = $(evt.currentTarget).attr('data-square') - - // NOTE: this should never happen; defensive - if (!validSquare(square)) return - - // get the piece on this square - var piece = false - if (currentPosition.hasOwnProperty(square)) { - piece = currentPosition[square] - } - - // execute their function - config.onMouseoverSquare(square, piece, deepCopy(currentPosition), currentOrientation) - } - - function mouseleaveSquare (evt) { - // do not fire this event if we are dragging a piece - // NOTE: this should never happen, but it's a safeguard - if (isDragging) return - - // exit if they did not provide an onMouseoutSquare function - if (!isFunction(config.onMouseoutSquare)) return - - // get the square - var square = $(evt.currentTarget).attr('data-square') - - // NOTE: this should never happen; defensive - if (!validSquare(square)) return - - // get the piece on this square - var piece = false - if (currentPosition.hasOwnProperty(square)) { - piece = currentPosition[square] - } - - // execute their function - config.onMouseoutSquare(square, piece, deepCopy(currentPosition), currentOrientation) - } - - // ------------------------------------------------------------------------- - // Initialization - // ------------------------------------------------------------------------- - - function addEvents () { - // prevent "image drag" - $('body').on('mousedown mousemove', '.' + CSS.piece, stopDefault) - - // mouse drag pieces - $board.on('mousedown', '.' + CSS.square, mousedownSquare) - $container.on('mousedown', '.' + CSS.sparePieces + ' .' + CSS.piece, mousedownSparePiece) - - // mouse enter / leave square - $board - .on('mouseenter', '.' + CSS.square, mouseenterSquare) - .on('mouseleave', '.' + CSS.square, mouseleaveSquare) - - // piece drag - var $window = $(window) + // redraw the board + drawBoard() + } + + // set the starting position + widget.start = function (useAnimation) { + widget.position('start', useAnimation) + } + + // ------------------------------------------------------------------------- + // Browser Events + // ------------------------------------------------------------------------- + + function stopDefault (evt) { + evt.preventDefault() + } + + function mousedownSquare (evt) { + // do nothing if we're not draggable + if (!config.draggable) return + + // do nothing if there is no piece on this square + var square = $(this).attr('data-square') + if (!validSquare(square)) return + if (!currentPosition.hasOwnProperty(square)) return + + beginDraggingPiece(square, currentPosition[square], evt.pageX, evt.pageY) + } + + function touchstartSquare (e) { + // do nothing if we're not draggable + if (!config.draggable) return + + // do nothing if there is no piece on this square + var square = $(this).attr('data-square') + if (!validSquare(square)) return + if (!currentPosition.hasOwnProperty(square)) return + + e = e.originalEvent + beginDraggingPiece( + square, + currentPosition[square], + e.changedTouches[0].pageX, + e.changedTouches[0].pageY + ) + } + + function mousedownSparePiece (evt) { + // do nothing if sparePieces is not enabled + if (!config.sparePieces) return + + var piece = $(this).attr('data-piece') + + beginDraggingPiece('spare', piece, evt.pageX, evt.pageY) + } + + function touchstartSparePiece (e) { + // do nothing if sparePieces is not enabled + if (!config.sparePieces) return + + var piece = $(this).attr('data-piece') + + e = e.originalEvent + beginDraggingPiece( + 'spare', + piece, + e.changedTouches[0].pageX, + e.changedTouches[0].pageY + ) + } + + function mousemoveWindow (evt) { + if (isDragging) { + updateDraggedPiece(evt.pageX, evt.pageY) + } + } + + var throttledMousemoveWindow = throttle( + mousemoveWindow, + config.dragThrottleRate + ) + + function touchmoveWindow (evt) { + // do nothing if we are not dragging a piece + if (!isDragging) return + + // prevent screen from scrolling + evt.preventDefault() + + updateDraggedPiece( + evt.originalEvent.changedTouches[0].pageX, + evt.originalEvent.changedTouches[0].pageY + ) + } + + var throttledTouchmoveWindow = throttle( + touchmoveWindow, + config.dragThrottleRate + ) + + function mouseupWindow (evt) { + // do nothing if we are not dragging a piece + if (!isDragging) return + + // get the location + var location = isXYOnSquare(evt.pageX, evt.pageY) + + stopDraggedPiece(location) + } + + function touchendWindow (evt) { + // do nothing if we are not dragging a piece + if (!isDragging) return + + // get the location + var location = isXYOnSquare( + evt.originalEvent.changedTouches[0].pageX, + evt.originalEvent.changedTouches[0].pageY + ) + + stopDraggedPiece(location) + } + + function mouseenterSquare (evt) { + // do not fire this event if we are dragging a piece + // NOTE: this should never happen, but it's a safeguard + if (isDragging) return + + // exit if they did not provide a onMouseoverSquare function + if (!isFunction(config.onMouseoverSquare)) return + + // get the square + var square = $(evt.currentTarget).attr('data-square') + + // NOTE: this should never happen; defensive + if (!validSquare(square)) return + + // get the piece on this square + var piece = false + if (currentPosition.hasOwnProperty(square)) { + piece = currentPosition[square] + } + + // execute their function + config.onMouseoverSquare( + square, + piece, + deepCopy(currentPosition), + currentOrientation + ) + } + + function mouseleaveSquare (evt) { + // do not fire this event if we are dragging a piece + // NOTE: this should never happen, but it's a safeguard + if (isDragging) return + + // exit if they did not provide an onMouseoutSquare function + if (!isFunction(config.onMouseoutSquare)) return + + // get the square + var square = $(evt.currentTarget).attr('data-square') + + // NOTE: this should never happen; defensive + if (!validSquare(square)) return + + // get the piece on this square + var piece = false + if (currentPosition.hasOwnProperty(square)) { + piece = currentPosition[square] + } + + // execute their function + config.onMouseoutSquare( + square, + piece, + deepCopy(currentPosition), + currentOrientation + ) + } + + // ------------------------------------------------------------------------- + // Initialization + // ------------------------------------------------------------------------- + + function addEvents () { + // prevent "image drag" + $('body').on('mousedown mousemove', '.' + CSS.piece, stopDefault) + + // mouse drag pieces + $board.on('mousedown', '.' + CSS.square, mousedownSquare) + $container.on( + 'mousedown', + '.' + CSS.sparePieces + ' .' + CSS.piece, + mousedownSparePiece + ) + + // mouse enter / leave square + $board + .on('mouseenter', '.' + CSS.square, mouseenterSquare) + .on('mouseleave', '.' + CSS.square, mouseleaveSquare) + + // piece drag + var $window = $(window) + $window + .on('mousemove', throttledMousemoveWindow) + .on('mouseup', mouseupWindow) + + // touch drag pieces + if (isTouchDevice()) { + $board.on('touchstart', '.' + CSS.square, touchstartSquare) + $container.on( + 'touchstart', + '.' + CSS.sparePieces + ' .' + CSS.piece, + touchstartSparePiece + ) $window - .on('mousemove', throttledMousemoveWindow) - .on('mouseup', mouseupWindow) - - // touch drag pieces - if (isTouchDevice()) { - $board.on('touchstart', '.' + CSS.square, touchstartSquare) - $container.on('touchstart', '.' + CSS.sparePieces + ' .' + CSS.piece, touchstartSparePiece) - $window - .on('touchmove', throttledTouchmoveWindow) - .on('touchend', touchendWindow) - } - } - - function initDOM () { - // create unique IDs for all the elements we will create - createElIds() - - // build board and save it in memory - $container.html(buildContainerHTML(config.sparePieces)) - $board = $container.find('.' + CSS.board) - - if (config.sparePieces) { - $sparePiecesTop = $container.find('.' + CSS.sparePiecesTop) - $sparePiecesBottom = $container.find('.' + CSS.sparePiecesBottom) - } - - // create the drag piece - var draggedPieceId = uuid() - $('body').append(buildPieceHTML('wP', true, draggedPieceId)) - $draggedPiece = $('#' + draggedPieceId) - - // TODO: need to remove this dragged piece element if the board is no - // longer in the DOM - - // get the border size - boardBorderSize = parseInt($board.css('borderLeftWidth'), 10) - - // set the size and draw the board - widget.resize() - } - - // ------------------------------------------------------------------------- - // Initialization - // ------------------------------------------------------------------------- - - setInitialState() - initDOM() - addEvents() - - // return the widget object - return widget - } // end constructor - - // TODO: do module exports here - window['Chessboard'] = constructor - - // support legacy ChessBoard name - window['ChessBoard'] = window['Chessboard'] - - // expose util functions - window['Chessboard']['fenToObj'] = fenToObj - window['Chessboard']['objToFen'] = objToFen -})() // end anonymous wrapper - -/* export Chessboard object if using node or any other CommonJS compatible - * environment */ -if (typeof exports !== 'undefined') { - exports.Chessboard = window.Chessboard -} + .on('touchmove', throttledTouchmoveWindow) + .on('touchend', touchendWindow) + } + } + + function initDOM () { + // create unique IDs for all the elements we will create + createElIds() + + // build board and save it in memory + $container.html(buildContainerHTML(config.sparePieces)) + $board = $container.find('.' + CSS.board) + + if (config.sparePieces) { + $sparePiecesTop = $container.find('.' + CSS.sparePiecesTop) + $sparePiecesBottom = $container.find('.' + CSS.sparePiecesBottom) + } + + // create the drag piece + var draggedPieceId = uuid() + $('body').append(buildPieceHTML('wP', true, draggedPieceId)) + $draggedPiece = $('#' + draggedPieceId) + + // TODO: need to remove this dragged piece element if the board is no + // longer in the DOM + + // get the border size + boardBorderSize = parseInt($board.css('borderLeftWidth'), 10) + + // set the size and draw the board + widget.resize() + } + + // ------------------------------------------------------------------------- + // Initialization + // ------------------------------------------------------------------------- + + setInitialState() + initDOM() + addEvents() + + // return the widget object + return widget +} // end constructor diff --git a/lib/chessboard.mjs b/lib/chessboard.mjs new file mode 100644 index 00000000..d12b1f35 --- /dev/null +++ b/lib/chessboard.mjs @@ -0,0 +1,12 @@ +// chessboard.js v@VERSION +// https://github.com/oakmac/chessboardjs/ +// +// Portion Copyright (c) 2019, Chris Oakman +// Portion Copyright (c) 2022, Miika Tuominen +// Released under the MIT license +// https://github.com/oakmac/chessboardjs/blob/master/LICENSE.md + +import $ from 'jquery' +export { constructor as Chessboard, objToFen, fenToObj } + +INSERTSOURCE diff --git a/lib/chessboardbrowser.js b/lib/chessboardbrowser.js new file mode 100644 index 00000000..490e2bfd --- /dev/null +++ b/lib/chessboardbrowser.js @@ -0,0 +1,25 @@ +// chessboard.js v@VERSION +// https://github.com/oakmac/chessboardjs/ +// +// Portion Copyright (c) 2019, Chris Oakman +// Portion Copyright (c) 2022, Miika Tuominen +// Released under the MIT license +// https://github.com/oakmac/chessboardjs/blob/master/LICENSE.md + +;(function () { + 'use strict' + + const $ = window['jQuery'] + + INSERTSOURCE + + // TODO: do module exports here + window['Chessboard'] = constructor + + // support legacy ChessBoard name + window['ChessBoard'] = window['Chessboard'] + + // expose util functions + window['Chessboard']['fenToObj'] = fenToObj + window['Chessboard']['objToFen'] = objToFen +})() // end anonymous wrapper diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..75731295 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4777 @@ +{ + "name": "@discape/chessboardjs", + "version": "1.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@discape/chessboardjs", + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "jquery": ">=3.4.1" + }, + "devDependencies": { + "csso": "3.5.1", + "fs-plus": "3.1.1", + "kidif": "1.1.0", + "mustache": "2.3.0", + "standard": "10.0.2", + "uglify-js": "^3.6.0" + } + }, + "node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", + "dev": true, + "dependencies": { + "acorn": "^3.0.4" + } + }, + "node_modules/acorn-jsx/node_modules/acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", + "dev": true, + "dependencies": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "node_modules/ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==", + "dev": true, + "peerDependencies": { + "ajv": ">=4.10.0" + } + }, + "node_modules/ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array.prototype.find": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.0.tgz", + "integrity": "sha512-sn40qmUiLYAcRb/1HsIQjTTZ1kCy8II8VtZJpMn2Aoen9twULhbWXisfh3HimGqMlHGUul0/TfKCnXg42LuPpQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.4", + "es-shim-unscopables": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", + "dev": true, + "dependencies": { + "callsites": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", + "dev": true, + "dependencies": { + "restore-cursor": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, + "dependencies": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dev": true, + "dependencies": { + "css-tree": "1.0.0-alpha.29" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", + "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", + "dev": true, + "dependencies": { + "find-root": "^1.0.0", + "glob": "^7.0.5", + "ignore": "^3.0.9", + "pkg-config": "^1.1.0", + "run-parallel": "^1.1.2", + "uniq": "^1.0.1" + } + }, + "node_modules/deglob/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha512-7S8YXIcUfPMOr3rqJBVMePAbRsD1nWeSMQ86K/lDI76S3WKXz+KWILvTIPbTroubOkZTGh+b+7/xIIphZXNYbA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set/node_modules/es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha512-exfuQY8UGtn/N+gL1iKkH8fpNd5sJ760nJq6mmZAHldfxMD5kX07lbQuYlspoXsuknXNv9Fb7y2GsPOnQIbxHg==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", + "dev": true, + "dependencies": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha512-x6LJGXWCGB/4YOBhL48yeppZTo+YQUNC37N5qqCpC1b1kkNzydlQHQAtPuUSFoZSxgIadrysQoW2Hq602P+uEA==", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha512-UkFojTV1o0GOe1edOEiuI5ccYLJSuNngtqSeClNzhsmG8KPJ+7mRxgtp2oYhqZAK/brlXMoCd+VgXViE0AfyKw==", + "dev": true, + "peerDependencies": { + "eslint": ">=3.19.0", + "eslint-plugin-import": ">=2.2.0", + "eslint-plugin-node": ">=4.2.2", + "eslint-plugin-promise": ">=3.5.0", + "eslint-plugin-standard": ">=3.0.0" + } + }, + "node_modules/eslint-config-standard-jsx": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz", + "integrity": "sha512-6XxcwOm22JWEVrDTxhkh/M9Qv5FCNPHKDGh4LPmWnFj4MDuNs7iXZatahYghIcMw5mkVMadLl7KFAWH/EOIeAA==", + "dev": true, + "peerDependencies": { + "eslint": ">=3.19.0", + "eslint-plugin-react": ">=6.10.3" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", + "integrity": "sha512-HI8ShtDIy7gON76Nr3bu4zl0DuCLPo1Fud9P2lltOQKeiAS2r5/o/l3y+V8HJ1cDLFSz+tHu7/V9fI5jirwlbw==", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "object-assign": "^4.0.1", + "resolve": "^1.1.6" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", + "integrity": "sha512-8HLeIYzOH4eltevxf+iC9Dtz/91yaeOqtlba5srcpQWLrv57F5NNG1RNLqAbpWJWDD4BxKuKjUveJY9W6Tbswg==", + "dev": true, + "dependencies": { + "builtin-modules": "^1.1.1", + "contains-path": "^0.1.0", + "debug": "^2.2.0", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.2.0", + "eslint-module-utils": "^2.0.0", + "has": "^1.0.1", + "lodash.cond": "^4.3.0", + "minimatch": "^3.0.3", + "pkg-up": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "2.x - 3.x" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-node": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz", + "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==", + "dev": true, + "dependencies": { + "ignore": "^3.0.11", + "minimatch": "^3.0.2", + "object-assign": "^4.0.1", + "resolve": "^1.1.7", + "semver": "5.3.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": ">=3.1.0" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", + "integrity": "sha512-kqXN7i1wfx5j7XuFVzuX4W3XDCEyNDsbd+O5NXWIl+zTSP510rKn2Xk8OO6JhM1ivXbkse0tQf6jjSTLS58Prg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-react": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", + "integrity": "sha512-vFfMSxJynKlgOhIVjhlZyibVUg442Aiv3482XPkgdYV90T8nD2QvxGXILZGwZHYMQ/l+A/De14O9D0qjDelSrg==", + "dev": true, + "dependencies": { + "array.prototype.find": "^2.0.1", + "doctrine": "^1.2.2", + "has": "^1.0.1", + "jsx-ast-utils": "^1.3.4", + "object.assign": "^4.0.4" + }, + "engines": { + "node": ">=0.10" + }, + "peerDependencies": { + "eslint": "^2.0.0 || ^3.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha512-JyT7wqVYlaHxnljWMT7CKa0R1QDQqArTi6g8kYnexTHHuK7x3Vg//kCepnoTgdT9x/kDbSluXMhJgjBvgVRLlQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=3.19.0" + } + }, + "node_modules/eslint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "dependencies": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", + "dev": true, + "dependencies": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "dependencies": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/fs-plus": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fs-plus/-/fs-plus-3.1.1.tgz", + "integrity": "sha512-Se2PJdOWXqos1qVTkvqqjb0CSnfBnwwD+pq+z4ksT+e97mEShod/hrNg0TRCCsXPbJzcIq+NuzQhigunMWMJUA==", + "dev": true, + "dependencies": { + "async": "^1.5.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2", + "underscore-plus": "1.x" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", + "dev": true, + "dependencies": { + "is-property": "^1.0.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.0.tgz", + "integrity": "sha512-Fa+aQV0FFMU4/Jg5mquHjv5DikTujeAWOpbGa9lsG2Qa+ehYxbGN3cCY/T+C+jAS8gKBnYN2MbrdNm0UCAcp7w==", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-my-ip-valid": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", + "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", + "dev": true + }, + "node_modules/is-my-json-valid": { + "version": "2.20.6", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", + "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "dev": true, + "dependencies": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^5.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", + "dev": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", + "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha512-0LwSmMlQjjUdXsdlyYhEfBJCn2Chm0zgUBmfmf1++KUULh+JOdlzrZfiwe2zmlVJx44UF+KX/B/odBoeK9hxmw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kidif": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kidif/-/kidif-1.1.0.tgz", + "integrity": "sha512-QmAHSkWEYssexdqWQshtfEd/AGeJAXHuV1pu607ePgNwwSf2X6fuIzUJsLtKbUQ/ak0pokdwDr8ocZ9sygKhTg==", + "dev": true, + "dependencies": { + "glob": "7.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", + "dev": true + }, + "node_modules/mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/mustache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz", + "integrity": "sha512-IgZ/cCHtDG1ft0vdDV9wrlNz20SvbUu2ECoDF6dhk2ZtedLNy1Kehy4oFlzmHPxcUQmVZuXYS2j+d0NkaEjTXQ==", + "dev": true, + "bin": { + "mustache": "bin/mustache" + }, + "engines": { + "npm": ">=1.4.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-config": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", + "integrity": "sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==", + "dev": true, + "dependencies": { + "debug-log": "^1.0.0", + "find-root": "^1.0.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pkg-up": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "integrity": "sha512-L+d849d9lz20hnRpUnWBRXOh+mAvygQpK7UuXiw+6QbPwL55RVgl+G+V936wCzs/6J7fj0pvgLY9OknZ+FqaNA==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", + "dev": true, + "dependencies": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==", + "dev": true, + "dependencies": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==", + "dev": true, + "dependencies": { + "once": "^1.3.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha512-/YF5Uk8hcwi7ima04ppkbA4RaRMdPMBfwAvAf8sufYOxsJRtbdoBsT8vGvlb+799BrlGdYrd+oczIA2eN2JdWA==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "iojs": "*", + "node": ">=0.11.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/standard": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.2.tgz", + "integrity": "sha512-NiEPy0kaa7yufaPsMT63a7MvTzfRyFrSItcTKYS4I9oFskgpQy0hXL0oOxbr836O7kTKgaxLZiv5lZmBWZRffg==", + "dev": true, + "dependencies": { + "eslint": "~3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-config-standard-jsx": "4.0.1", + "eslint-plugin-import": "~2.2.0", + "eslint-plugin-node": "~4.2.2", + "eslint-plugin-promise": "~3.5.0", + "eslint-plugin-react": "~6.10.0", + "eslint-plugin-standard": "~3.0.1", + "standard-engine": "~7.0.0" + }, + "bin": { + "standard": "bin/cmd.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-engine": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz", + "integrity": "sha512-d/NYzmZxQRxbcoCqlbI9gEMPYq7TLsU6Ywpki54xhedEd0GC4G02j1B7mlexb7HovqRtAtcUPTLQx2MnCO/uyA==", + "dev": true, + "dependencies": { + "deglob": "^2.1.0", + "get-stdin": "^5.0.1", + "minimist": "^1.1.0", + "pkg-conf": "^2.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g==", + "dev": true, + "dependencies": { + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", + "slice-ansi": "0.0.4", + "string-width": "^2.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz", + "integrity": "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", + "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==", + "dev": true + }, + "node_modules/underscore-plus": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore-plus/-/underscore-plus-1.7.0.tgz", + "integrity": "sha512-A3BEzkeicFLnr+U/Q3EyWwJAQPbA19mtZZ4h+lLq3ttm9kn8WC4R3YpuJZEXmWdLjYP47Zc8aLZm9kwdv+zzvA==", + "dev": true, + "dependencies": { + "underscore": "^1.9.1" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "node_modules/user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + } + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==", + "dev": true, + "requires": {} + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array.prototype.find": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.0.tgz", + "integrity": "sha512-sn40qmUiLYAcRb/1HsIQjTTZ1kCy8II8VtZJpMn2Aoen9twULhbWXisfh3HimGqMlHGUul0/TfKCnXg42LuPpQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.29" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "deglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", + "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", + "dev": true, + "requires": { + "find-root": "^1.0.0", + "glob": "^7.0.5", + "ignore": "^3.0.9", + "pkg-config": "^1.1.0", + "run-parallel": "^1.1.2", + "uniq": "^1.0.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha512-7S8YXIcUfPMOr3rqJBVMePAbRsD1nWeSMQ86K/lDI76S3WKXz+KWILvTIPbTroubOkZTGh+b+7/xIIphZXNYbA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha512-exfuQY8UGtn/N+gL1iKkH8fpNd5sJ760nJq6mmZAHldfxMD5kX07lbQuYlspoXsuknXNv9Fb7y2GsPOnQIbxHg==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha512-x6LJGXWCGB/4YOBhL48yeppZTo+YQUNC37N5qqCpC1b1kkNzydlQHQAtPuUSFoZSxgIadrysQoW2Hq602P+uEA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha512-UkFojTV1o0GOe1edOEiuI5ccYLJSuNngtqSeClNzhsmG8KPJ+7mRxgtp2oYhqZAK/brlXMoCd+VgXViE0AfyKw==", + "dev": true, + "requires": {} + }, + "eslint-config-standard-jsx": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz", + "integrity": "sha512-6XxcwOm22JWEVrDTxhkh/M9Qv5FCNPHKDGh4LPmWnFj4MDuNs7iXZatahYghIcMw5mkVMadLl7KFAWH/EOIeAA==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", + "integrity": "sha512-HI8ShtDIy7gON76Nr3bu4zl0DuCLPo1Fud9P2lltOQKeiAS2r5/o/l3y+V8HJ1cDLFSz+tHu7/V9fI5jirwlbw==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "object-assign": "^4.0.1", + "resolve": "^1.1.6" + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", + "integrity": "sha512-8HLeIYzOH4eltevxf+iC9Dtz/91yaeOqtlba5srcpQWLrv57F5NNG1RNLqAbpWJWDD4BxKuKjUveJY9W6Tbswg==", + "dev": true, + "requires": { + "builtin-modules": "^1.1.1", + "contains-path": "^0.1.0", + "debug": "^2.2.0", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.2.0", + "eslint-module-utils": "^2.0.0", + "has": "^1.0.1", + "lodash.cond": "^4.3.0", + "minimatch": "^3.0.3", + "pkg-up": "^1.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz", + "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==", + "dev": true, + "requires": { + "ignore": "^3.0.11", + "minimatch": "^3.0.2", + "object-assign": "^4.0.1", + "resolve": "^1.1.7", + "semver": "5.3.0" + } + }, + "eslint-plugin-promise": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", + "integrity": "sha512-kqXN7i1wfx5j7XuFVzuX4W3XDCEyNDsbd+O5NXWIl+zTSP510rKn2Xk8OO6JhM1ivXbkse0tQf6jjSTLS58Prg==", + "dev": true + }, + "eslint-plugin-react": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", + "integrity": "sha512-vFfMSxJynKlgOhIVjhlZyibVUg442Aiv3482XPkgdYV90T8nD2QvxGXILZGwZHYMQ/l+A/De14O9D0qjDelSrg==", + "dev": true, + "requires": { + "array.prototype.find": "^2.0.1", + "doctrine": "^1.2.2", + "has": "^1.0.1", + "jsx-ast-utils": "^1.3.4", + "object.assign": "^4.0.4" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha512-JyT7wqVYlaHxnljWMT7CKa0R1QDQqArTi6g8kYnexTHHuK7x3Vg//kCepnoTgdT9x/kDbSluXMhJgjBvgVRLlQ==", + "dev": true, + "requires": {} + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==", + "dev": true + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", + "dev": true + } + } + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "fs-plus": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fs-plus/-/fs-plus-3.1.1.tgz", + "integrity": "sha512-Se2PJdOWXqos1qVTkvqqjb0CSnfBnwwD+pq+z4ksT+e97mEShod/hrNg0TRCCsXPbJzcIq+NuzQhigunMWMJUA==", + "dev": true, + "requires": { + "async": "^1.5.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2", + "underscore-plus": "1.x" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "requires": { + "is-property": "^1.0.2" + } + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", + "dev": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.0.tgz", + "integrity": "sha512-Fa+aQV0FFMU4/Jg5mquHjv5DikTujeAWOpbGa9lsG2Qa+ehYxbGN3cCY/T+C+jAS8gKBnYN2MbrdNm0UCAcp7w==", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ==", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-my-ip-valid": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", + "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.20.6", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", + "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "dev": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^5.0.0", + "xtend": "^4.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", + "dev": true + }, + "jsonpointer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", + "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", + "dev": true + }, + "jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha512-0LwSmMlQjjUdXsdlyYhEfBJCn2Chm0zgUBmfmf1++KUULh+JOdlzrZfiwe2zmlVJx44UF+KX/B/odBoeK9hxmw==", + "dev": true + }, + "kidif": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kidif/-/kidif-1.1.0.tgz", + "integrity": "sha512-QmAHSkWEYssexdqWQshtfEd/AGeJAXHuV1pu607ePgNwwSf2X6fuIzUJsLtKbUQ/ak0pokdwDr8ocZ9sygKhTg==", + "dev": true, + "requires": { + "glob": "7.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", + "dev": true + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "mustache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz", + "integrity": "sha512-IgZ/cCHtDG1ft0vdDV9wrlNz20SvbUu2ECoDF6dhk2ZtedLNy1Kehy4oFlzmHPxcUQmVZuXYS2j+d0NkaEjTXQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==", + "dev": true + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } + }, + "pkg-config": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", + "integrity": "sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==", + "dev": true, + "requires": { + "debug-log": "^1.0.0", + "find-root": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "pkg-up": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "integrity": "sha512-L+d849d9lz20hnRpUnWBRXOh+mAvygQpK7UuXiw+6QbPwL55RVgl+G+V936wCzs/6J7fj0pvgLY9OknZ+FqaNA==", + "dev": true, + "requires": { + "find-up": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==", + "dev": true, + "requires": { + "once": "^1.3.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha512-/YF5Uk8hcwi7ima04ppkbA4RaRMdPMBfwAvAf8sufYOxsJRtbdoBsT8vGvlb+799BrlGdYrd+oczIA2eN2JdWA==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "standard": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.2.tgz", + "integrity": "sha512-NiEPy0kaa7yufaPsMT63a7MvTzfRyFrSItcTKYS4I9oFskgpQy0hXL0oOxbr836O7kTKgaxLZiv5lZmBWZRffg==", + "dev": true, + "requires": { + "eslint": "~3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-config-standard-jsx": "4.0.1", + "eslint-plugin-import": "~2.2.0", + "eslint-plugin-node": "~4.2.2", + "eslint-plugin-promise": "~3.5.0", + "eslint-plugin-react": "~6.10.0", + "eslint-plugin-standard": "~3.0.1", + "standard-engine": "~7.0.0" + } + }, + "standard-engine": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz", + "integrity": "sha512-d/NYzmZxQRxbcoCqlbI9gEMPYq7TLsU6Ywpki54xhedEd0GC4G02j1B7mlexb7HovqRtAtcUPTLQx2MnCO/uyA==", + "dev": true, + "requires": { + "deglob": "^2.1.0", + "get-stdin": "^5.0.1", + "minimist": "^1.1.0", + "pkg-conf": "^2.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g==", + "dev": true, + "requires": { + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", + "slice-ansi": "0.0.4", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "uglify-js": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz", + "integrity": "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "underscore": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", + "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==", + "dev": true + }, + "underscore-plus": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore-plus/-/underscore-plus-1.7.0.tgz", + "integrity": "sha512-A3BEzkeicFLnr+U/Q3EyWwJAQPbA19mtZZ4h+lLq3ttm9kn8WC4R3YpuJZEXmWdLjYP47Zc8aLZm9kwdv+zzvA==", + "dev": true, + "requires": { + "underscore": "^1.9.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } +} diff --git a/package.json b/package.json index bf071a30..f3a1806e 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,24 @@ { "author": "Chris Oakman (http://chrisoakman.com/)", - "name": "@chrisoakman/chessboardjs", + "contributors": [ + "Miika Tuominen (https://miikat.dev)" + ], + "name": "@discape/chessboardjs", "description": "JavaScript chessboard widget", "homepage": "https://chessboardjs.com", "license": "MIT", - "version": "1.0.0", + "version": "1.0.1", + "exports": { + "import": "./dist/chessboard-1.0.0.min.mjs", + "require": "./dist/chessboard-1.0.0.min.cjs" + }, "repository": { "type": "git", - "url": "git://github.com/oakmac/chessboardjs.git" + "url": "https://github.com/discapes/chessboardjs-npm.git" }, - "files": ["dist/"], + "files": [ + "dist/" + ], "dependencies": { "jquery": ">=3.4.1" }, @@ -19,11 +28,12 @@ "kidif": "1.1.0", "mustache": "2.3.0", "standard": "10.0.2", - "uglify-js": "3.6.0" + "uglify-js": "^3.16.2" }, "scripts": { - "build": "standard lib/chessboard.js && node scripts/build.js", - "standard": "standard --fix lib/*.js website/js/*.js", - "website": "node scripts/website.js" + "build": "node scripts/build.js", + "standard": "standard --fix lib/chessboard.js website/js/*.js", + "website": "node scripts/website.js", + "test": "node scripts/test.cjs && node scripts/test.mjs" } } diff --git a/scripts/build.js b/scripts/build.js index 798bec10..768dbd12 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -7,29 +7,46 @@ const fs = require('fs-plus') const csso = require('csso') const uglify = require('uglify-js') -const encoding = {encoding: 'utf8'} +const encoding = { encoding: 'utf8' } const package = JSON.parse(fs.readFileSync('package.json', encoding)) const version = package.version const year = new Date().getFullYear() -const cssSrc = fs.readFileSync('lib/chessboard.css', encoding) - .replace('@VERSION', version) -const jsSrc = fs.readFileSync('lib/chessboard.js', encoding) - .replace('@VERSION', version) - .replace('RUN_ASSERTS = true', 'RUN_ASSERTS = false') +const cssSrc = fs + .readFileSync('lib/chessboard.css', encoding) + .replace('@VERSION', version) +const rawSrc = fs + .readFileSync('lib/chessboard.js', encoding) + .replace('@VERSION', version) + .replace('RUN_ASSERTS = true', 'RUN_ASSERTS = false') +const uglifyResult = uglify.minify(rawSrc) +const minSrc = uglifyResult.code +console.assert(!uglifyResult.error, 'error minifying JS: ' + uglifyResult.error) // TODO: need to remove the RUN_ASSERTS calls from the non-minified file +const mjs = fs + .readFileSync('lib/chessboard.mjs', encoding) + .replace('INSERTSOURCE', () => minSrc) + .replace('@VERSION', version) +const cjs = fs + .readFileSync('lib/chessboard.cjs', encoding) + .replace('INSERTSOURCE', () => minSrc) + .replace('@VERSION', version) +const browserjs = fs + .readFileSync('lib/chessboardbrowser.js', encoding) + .replace('INSERTSOURCE', () => minSrc) + .replace('@VERSION', version) + + const minifiedCSS = csso.minify(cssSrc).css -const uglifyResult = uglify.minify(jsSrc) -const minifiedJS = uglifyResult.code // quick sanity checks -console.assert(!uglifyResult.error, 'error minifying JS!') -console.assert(typeof minifiedCSS === 'string' && minifiedCSS !== '', 'error minifying CSS!') -// add license to the top of minified files -const minifiedJSWithBanner = banner() + minifiedJS +console.assert( + typeof minifiedCSS === 'string' && minifiedCSS !== '', + 'error minifying CSS!', +) // create a fresh dist/ folder fs.removeSync('dist') @@ -37,10 +54,34 @@ fs.makeTreeSync('dist') // copy lib files to dist/ fs.writeFileSync('dist/chessboard-' + version + '.css', cssSrc, encoding) -fs.writeFileSync('dist/chessboard-' + version + '.min.css', minifiedCSS, encoding) -fs.writeFileSync('dist/chessboard-' + version + '.js', jsSrc, encoding) -fs.writeFileSync('dist/chessboard-' + version + '.min.js', minifiedJSWithBanner, encoding) +fs.writeFileSync( + 'dist/chessboard-' + version + '.min.css', + minifiedCSS, + encoding, +) + +fs.writeFileSync( + 'dist/chessboard-' + version + '.min.mjs', + mjs, + encoding, +) +fs.writeFileSync( + 'dist/chessboard-' + version + '.min.cjs', + cjs, + encoding, +) +fs.writeFileSync( + 'dist/chessboard-' + version + '.min.js', + banner() + browserjs, + encoding, +) -function banner () { - return '/*! chessboard.js v' + version + ' | (c) ' + year + ' Chris Oakman | MIT License chessboardjs.com/license */\n' +function banner() { + return ( + '/*! chessboard.js v' + + version + + ' | (c) ' + + year + + ' Chris Oakman and Miika Tuominen | MIT License chessboardjs.com/license */\n' + ) } diff --git a/scripts/test.cjs b/scripts/test.cjs new file mode 100644 index 00000000..aa515dcf --- /dev/null +++ b/scripts/test.cjs @@ -0,0 +1,3 @@ +const chessboardjs = require("../dist/chessboard-1.0.0.min.cjs"); + +console.log(chessboardjs); \ No newline at end of file diff --git a/scripts/test.mjs b/scripts/test.mjs new file mode 100644 index 00000000..eaea963a --- /dev/null +++ b/scripts/test.mjs @@ -0,0 +1,3 @@ +import * as chessboardjs from "../dist/chessboard-1.0.0.min.mjs"; + +console.log(chessboardjs); \ No newline at end of file diff --git a/templates/download.mustache b/templates/download.mustache index 2a984e11..9ec7b327 100644 --- a/templates/download.mustache +++ b/templates/download.mustache @@ -18,12 +18,20 @@

NPM / Yarn Package

-

chessboardjs is on npm under the name @chrisoakman/chessboardjs

+

chessboardjs is on npm under the name @discape/chessboardjs

# using npm
-npm install @chrisoakman/chessboardjs
+npm install @discape/chessboardjs
# using yarn
-yarn add @chrisoakman/chessboardjs
+yarn add @discape/chessboardjs + +
# using in code with require()
+const { Chessboard, objToFen, fenToObj } = require("@discape/chessboardjs");
+
+ +
# using in code with ES6 import
+import { Chessboard, objToFen, fenToObj } from "@discape/chessboardjs";
+
diff --git a/yarn.lock b/yarn.lock index 0705201e..d76f51cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,1256 +2,1453 @@ # yarn lockfile v1 -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" - -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" - -ajv@^4.7.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array.prototype.find@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -babel-code-frame@^6.16.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -brace-expansion@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -circular-json@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" - -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -commander@~2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -css-tree@1.0.0-alpha.29: - version "1.0.0-alpha.29" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" - integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -csso@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" - integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== - dependencies: - css-tree "1.0.0-alpha.29" - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -debug-log@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" - -debug@2.2.0, debug@^2.1.1, debug@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -deglob@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.0.tgz#4d44abe16ef32c779b4972bd141a80325029a14a" - dependencies: - find-root "^1.0.0" - glob "^7.0.5" - ignore "^3.0.9" - pkg-config "^1.1.0" - run-parallel "^1.1.2" - uniq "^1.0.1" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -doctrine@1.5.0, doctrine@^1.2.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.0" - is-callable "^1.1.3" - is-regex "^1.0.3" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.22" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.22.tgz#1876c51f990769c112c781ea3ebe89f84fd39071" - dependencies: - es6-iterator "2" - es6-symbol "~3.1" - -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-symbol "^3.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-string-regexp@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-config-standard-jsx@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz#cd4e463d0268e2d9e707f61f42f73f5b3333c642" - -eslint-config-standard@10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591" - -eslint-import-resolver-node@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" - dependencies: - debug "^2.2.0" - object-assign "^4.0.1" - resolve "^1.1.6" - -eslint-module-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" - dependencies: - debug "2.2.0" - pkg-dir "^1.0.0" - -eslint-plugin-import@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" - dependencies: - builtin-modules "^1.1.1" - contains-path "^0.1.0" - debug "^2.2.0" - doctrine "1.5.0" - eslint-import-resolver-node "^0.2.0" - eslint-module-utils "^2.0.0" - has "^1.0.1" - lodash.cond "^4.3.0" - minimatch "^3.0.3" - pkg-up "^1.0.0" - -eslint-plugin-node@~4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz#82959ca9aed79fcbd28bb1b188d05cac04fb3363" - dependencies: - ignore "^3.0.11" - minimatch "^3.0.2" - object-assign "^4.0.1" - resolve "^1.1.7" - semver "5.3.0" - -eslint-plugin-promise@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" - -eslint-plugin-react@~6.10.0: - version "6.10.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" - dependencies: - array.prototype.find "^2.0.1" - doctrine "^1.2.2" - has "^1.0.1" - jsx-ast-utils "^1.3.4" - object.assign "^4.0.4" - -eslint-plugin-standard@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2" - -eslint@~3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" - dependencies: - babel-code-frame "^6.16.0" - chalk "^1.1.3" - concat-stream "^1.5.2" - debug "^2.1.1" - doctrine "^2.0.0" - escope "^3.6.0" - espree "^3.4.0" - esquery "^1.0.0" - estraverse "^4.2.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" - imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" - levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.7.5" - strip-bom "^3.0.0" - strip-json-comments "~2.0.1" - table "^3.7.8" - text-table "~0.2.0" - user-home "^2.0.0" - -espree@^3.4.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" - dependencies: - acorn "^5.0.1" - acorn-jsx "^3.0.0" - -esprima@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" - dependencies: - estraverse "~4.1.0" - object-assign "^4.0.1" - -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -find-root@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.0.0.tgz#962ff211aab25c6520feeeb8d6287f8f6e95807a" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -fs-plus@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fs-plus/-/fs-plus-3.1.1.tgz#02c085ba0a013084cff2f3e89b17c60c1d9b4ab5" - integrity sha512-Se2PJdOWXqos1qVTkvqqjb0CSnfBnwwD+pq+z4ksT+e97mEShod/hrNg0TRCCsXPbJzcIq+NuzQhigunMWMJUA== - dependencies: - async "^1.5.2" - mkdirp "^0.5.1" - rimraf "^2.5.2" - underscore-plus "1.x" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -function-bind@^1.0.2, function-bind@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-stdin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" - -glob@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.0.tgz#3b20a357fffcf46bb384aed6f8ae9a647fdb6ac4" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.14.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -ignore@^3.0.11, ignore@^3.0.9, ignore@^3.2.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -inherits@^2.0.3, inherits@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - -interpret@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-my-json-valid@^2.10.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" - dependencies: - path-is-inside "^1.0.1" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-regex@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -jquery@>=3.4.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.0.tgz#9980b97d9e4194611c36530e7dc46a58d7340fc9" - integrity sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ== - -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" - -js-yaml@^3.5.1: - version "3.8.4" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" - dependencies: - argparse "^1.0.7" - esprima "^3.1.1" - -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsx-ast-utils@^1.3.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" - -kidif@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/kidif/-/kidif-1.1.0.tgz#3c5d4ef82a8c7cb9f0365de2ef1a01b21b980587" - dependencies: - glob "7.0.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash.cond@^4.3.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" - -lodash@^4.0.0, lodash@^4.3.0: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== - -mdn-data@~1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" - integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== - -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -mustache@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0" - -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-keys@^1.0.10, object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -p-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-conf@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279" - dependencies: - find-up "^2.0.0" - load-json-file "^2.0.0" - -pkg-config@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" - dependencies: - debug-log "^1.0.0" - find-root "^1.0.0" - xtend "^4.0.1" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - -pkg-up@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" - dependencies: - find-up "^1.0.0" - -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - -readable-stream@^2.2.2: - version "2.2.10" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.10.tgz#effe72bb7c884c0dd335e2379d526196d9d011ee" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "^5.0.1" - string_decoder "~1.0.0" - util-deprecate "~1.0.1" - -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - -require-uncached@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve@^1.1.6, resolve@^1.1.7: - version "1.3.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -rimraf@^2.2.8: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" - dependencies: - glob "^7.0.5" - -rimraf@^2.5.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - dependencies: - once "^1.3.0" - -run-parallel@^1.1.2: - version "1.1.6" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039" - -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - -safe-buffer@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223" - -semver@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -shelljs@^0.7.5: - version "0.7.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -source-map@^0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -standard-engine@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.0.0.tgz#ebb77b9c8fc2c8165ffa353bd91ba0dff41af690" - dependencies: - deglob "^2.1.0" - get-stdin "^5.0.1" - minimist "^1.1.0" - pkg-conf "^2.0.0" - -standard@10.0.2: - version "10.0.2" - resolved "https://registry.yarnpkg.com/standard/-/standard-10.0.2.tgz#974c1c53cc865b075a4b576e78441e1695daaf7b" - dependencies: - eslint "~3.19.0" - eslint-config-standard "10.2.1" - eslint-config-standard-jsx "4.0.1" - eslint-plugin-import "~2.2.0" - eslint-plugin-node "~4.2.2" - eslint-plugin-promise "~3.5.0" - eslint-plugin-react "~6.10.0" - eslint-plugin-standard "~3.0.1" - standard-engine "~7.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" - -string_decoder@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" - dependencies: - safe-buffer "^5.0.1" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" - dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" - -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uglify-js@3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== - dependencies: - commander "~2.20.0" - source-map "~0.6.1" - -underscore-plus@1.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore-plus/-/underscore-plus-1.7.0.tgz#107f1900c520ac1fefe4edec6580a7ff08a99d0f" - integrity sha512-A3BEzkeicFLnr+U/Q3EyWwJAQPbA19mtZZ4h+lLq3ttm9kn8WC4R3YpuJZEXmWdLjYP47Zc8aLZm9kwdv+zzvA== - dependencies: - underscore "^1.9.1" - -underscore@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" - integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - dependencies: - os-homedir "^1.0.0" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -xtend@^4.0.0, xtend@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +"acorn-jsx@^3.0.0": + "integrity" "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "acorn" "^3.0.4" + +"acorn@^3.0.4": + "integrity" "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz" + "version" "3.3.0" + +"acorn@^5.0.1": + "integrity" "sha512-Bg8ZrM3YfY12mPZkONS5uKZsTj9ctIduab+rkfIibEdWeVaZt37HeqsXPf+7ekOECE7NxOOa4VxuZKSkTGo8Tw==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz" + "version" "5.0.3" + +"ajv-keywords@^1.0.0": + "integrity" "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz" + "version" "1.5.1" + +"ajv@^4.7.0", "ajv@>=4.10.0": + "integrity" "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz" + "version" "4.11.8" + dependencies: + "co" "^4.6.0" + "json-stable-stringify" "^1.0.1" + +"ansi-escapes@^1.1.0": + "integrity" "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz" + "version" "1.4.0" + +"ansi-regex@^2.0.0": + "integrity" "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "version" "2.1.1" + +"ansi-styles@^2.2.1": + "integrity" "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + "version" "2.2.1" + +"argparse@^1.0.7": + "integrity" "sha512-iK7YPKV+GsvihPUTKcM3hh2gq47zSFCpVDv/Ay2O9mzuD7dfvLV4vhms4XcjZvv4VRgXuGLMEts51IlTjS11/A==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "sprintf-js" "~1.0.2" + +"array-union@^1.0.1": + "integrity" "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-uniq" "^1.0.1" + +"array-uniq@^1.0.1": + "integrity" "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "version" "1.0.3" + +"array.prototype.find@^2.0.1": + "integrity" "sha512-bTk9+sjVFDEHXGn7UU9UlfD1FqdvE/oFNXCMxnsRQg+yS7rSltM9Wro9+EJQMYGljl6Bc4kOpBgLQaXbzTTCsw==" + "resolved" "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "define-properties" "^1.1.2" + "es-abstract" "^1.7.0" + +"arrify@^1.0.0": + "integrity" "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + "version" "1.0.1" + +"async@^1.5.2": + "integrity" "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + "version" "1.5.2" + +"babel-code-frame@^6.16.0": + "integrity" "sha512-Dmx3yJCO/UHWgFTKUlBPHUm7h5hCjI5Lfc07gmSv7H4AbUwxS7NHyorp8HN1YEd4xSDCf7P4zqnS63I3aaJTwg==" + "resolved" "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz" + "version" "6.22.0" + dependencies: + "chalk" "^1.1.0" + "esutils" "^2.0.2" + "js-tokens" "^3.0.0" + +"balanced-match@^0.4.1": + "integrity" "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz" + "version" "0.4.2" + +"brace-expansion@^1.1.7": + "integrity" "sha512-ebXXDR1wKKxJNfTM872trAU5hpKduCkTN37ipoxsh5yibWq8FfxiobiHuVlPFkspSSNhrxbPHbM4kGyDGdJ5mg==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "balanced-match" "^0.4.1" + "concat-map" "0.0.1" + +"builtin-modules@^1.1.1": + "integrity" "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==" + "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + "version" "1.1.1" + +"caller-path@^0.1.0": + "integrity" "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==" + "resolved" "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "callsites" "^0.2.0" + +"callsites@^0.2.0": + "integrity" "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz" + "version" "0.2.0" + +"chalk@^1.0.0", "chalk@^1.1.0", "chalk@^1.1.1", "chalk@^1.1.3": + "integrity" "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "ansi-styles" "^2.2.1" + "escape-string-regexp" "^1.0.2" + "has-ansi" "^2.0.0" + "strip-ansi" "^3.0.0" + "supports-color" "^2.0.0" + +"circular-json@^0.3.1": + "integrity" "sha512-MTc6ffiOuzmPfRWVHjRscjzTQSYq16oouOebk6iHn/Tvp1mKBwQ/x33Trh7oZwI0e7wZyMV9KzDBWalzxjoIGQ==" + "resolved" "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz" + "version" "0.3.1" + +"cli-cursor@^1.0.1": + "integrity" "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "restore-cursor" "^1.0.1" + +"cli-width@^2.0.0": + "integrity" "sha512-w9+InVqlfC6hq5odRMsdb85XIIaCusCmCg21AsMEqGYKGHEWxr1CBYW4CCTSWC0FpsFGkY6FrOvjnnxGlY52Bg==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz" + "version" "2.1.0" + +"co@^4.6.0": + "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"code-point-at@^1.0.0": + "integrity" "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "version" "1.1.0" + +"commander@~2.20.0": + "integrity" "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz" + "version" "2.20.0" + +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"concat-stream@^1.5.2": + "integrity" "sha512-afaQKFIg+fob6EzbytOlXZZTYrdZWaegQx2b6AWg9MoALXgctIcbRQrjcu6Wsh5801lVXaQYVwBw6vlATW0qPA==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "inherits" "^2.0.3" + "readable-stream" "^2.2.2" + "typedarray" "^0.0.6" + +"contains-path@^0.1.0": + "integrity" "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==" + "resolved" "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz" + "version" "0.1.0" + +"core-util-is@~1.0.0": + "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"css-tree@1.0.0-alpha.29": + "integrity" "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==" + "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz" + "version" "1.0.0-alpha.29" + dependencies: + "mdn-data" "~1.1.0" + "source-map" "^0.5.3" + +"csso@3.5.1": + "integrity" "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==" + "resolved" "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz" + "version" "3.5.1" + dependencies: + "css-tree" "1.0.0-alpha.29" + +"d@1": + "integrity" "sha512-9x1NruMD5YQ7xccKbGEy/bjitRfn5LEIhJIXIOAXC8I1laA5gfezUMVES1/vjLxfGzZjirLLBzEqxMO2/LzGxQ==" + "resolved" "https://registry.npmjs.org/d/-/d-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "es5-ext" "^0.10.9" + +"debug-log@^1.0.0": + "integrity" "sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==" + "resolved" "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz" + "version" "1.0.1" + +"debug@^2.1.1", "debug@^2.2.0", "debug@2.2.0": + "integrity" "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "ms" "0.7.1" + +"deep-is@~0.1.3": + "integrity" "sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" + +"define-properties@^1.1.2": + "integrity" "sha512-hpr5VSFXGamODSCN6P2zdSBY6zJT7DlcBAHiPIa2PWDvfBqJQntSK0ehUoHoS6HGeSS19dgj7E+1xOjfG3zEtQ==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "foreach" "^2.0.5" + "object-keys" "^1.0.8" + +"deglob@^2.1.0": + "integrity" "sha512-T9hCYYI03ubPtxviA1sHVbamCYKZBbRjpONb/SwMolUZvOriX992lFd/uStESsbSZR63R+ytKI3uOFgkf/5BuQ==" + "resolved" "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "find-root" "^1.0.0" + "glob" "^7.0.5" + "ignore" "^3.0.9" + "pkg-config" "^1.1.0" + "run-parallel" "^1.1.2" + "uniq" "^1.0.1" + +"del@^2.0.2": + "integrity" "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==" + "resolved" "https://registry.npmjs.org/del/-/del-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "globby" "^5.0.0" + "is-path-cwd" "^1.0.0" + "is-path-in-cwd" "^1.0.0" + "object-assign" "^4.0.1" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + "rimraf" "^2.2.8" + +"doctrine@^1.2.2": + "integrity" "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "esutils" "^2.0.2" + "isarray" "^1.0.0" + +"doctrine@^2.0.0": + "integrity" "sha512-i5aQLQvEyAhw7XI4mbKxyrVdkqIc4OsCh9Z0XQof9X/ANftd0ZN1M4qz+TSU2VSokVwl23kXDvhnC4F4W+ip/g==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "esutils" "^2.0.2" + "isarray" "^1.0.0" + +"doctrine@1.5.0": + "integrity" "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "esutils" "^2.0.2" + "isarray" "^1.0.0" + +"error-ex@^1.2.0": + "integrity" "sha512-FfmVxYsm1QOFoPI2xQmNnEH10Af42mCxtGrKvS1JfDTXlPLYiAz2T+QpjHPxf+OGniMfWZah9ULAhPoKQ3SEqg==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "is-arrayish" "^0.2.1" + +"es-abstract@^1.7.0": + "integrity" "sha512-i6XNnPIsGv+/kQTyYVLOwwG3XYx29Ivzz6rE3tC8OSzt6Ic/h2IeHKR0RfoI2heIB61Yiv+qZFLuh1JiyZ9neg==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "es-to-primitive" "^1.1.1" + "function-bind" "^1.1.0" + "is-callable" "^1.1.3" + "is-regex" "^1.0.3" + +"es-to-primitive@^1.1.1": + "integrity" "sha512-wXsac552n5sYhgVjyFvhXLunXZFPOiT/WgP7hFhUPU5gtaUQpm9OryPwlWQUS3Qptk8iZzY/2T3J62GtC/toSw==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "is-callable" "^1.1.1" + "is-date-object" "^1.0.1" + "is-symbol" "^1.0.1" + +"es5-ext@^0.10.14", "es5-ext@^0.10.9", "es5-ext@~0.10.14": + "integrity" "sha512-YXTXSlZkJsVwMEVljp1Bh5P9+Raa3524OMl9kywGMp1aazKTCnAqORRL/8dkuqNHk+LRYe0LezuS8PlUt3+mOw==" + "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz" + "version" "0.10.22" + dependencies: + "es6-iterator" "2" + "es6-symbol" "~3.1" + +"es6-iterator@^2.0.1", "es6-iterator@~2.0.1", "es6-iterator@2": + "integrity" "sha512-6QdxKjEfkAutL86ORbUgbZjfmssn3hfrFZDz5utw2BH9EJWYCVVqn9dN/WvsWSzsZ7Ox/fMrHXexX96fF5vEsw==" + "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "d" "1" + "es5-ext" "^0.10.14" + "es6-symbol" "^3.1" + +"es6-map@^0.1.3": + "integrity" "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==" + "resolved" "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + "es6-iterator" "~2.0.1" + "es6-set" "~0.1.5" + "es6-symbol" "~3.1.1" + "event-emitter" "~0.3.5" + +"es6-set@~0.1.5": + "integrity" "sha512-7S8YXIcUfPMOr3rqJBVMePAbRsD1nWeSMQ86K/lDI76S3WKXz+KWILvTIPbTroubOkZTGh+b+7/xIIphZXNYbA==" + "resolved" "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + "es6-iterator" "~2.0.1" + "es6-symbol" "3.1.1" + "event-emitter" "~0.3.5" + +"es6-symbol@^3.1", "es6-symbol@^3.1.1", "es6-symbol@~3.1", "es6-symbol@~3.1.1", "es6-symbol@3.1.1": + "integrity" "sha512-exfuQY8UGtn/N+gL1iKkH8fpNd5sJ760nJq6mmZAHldfxMD5kX07lbQuYlspoXsuknXNv9Fb7y2GsPOnQIbxHg==" + "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + +"es6-weak-map@^2.0.1": + "integrity" "sha512-rx4zGKCKP7e3n3BtHemBtuJ9DCFw5jfjtdSM132RsGxlBgJvudmL/ogowl2Je/dJDbGws+od3J3PHOTAleo27w==" + "resolved" "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "d" "1" + "es5-ext" "^0.10.14" + "es6-iterator" "^2.0.1" + "es6-symbol" "^3.1.1" + +"escape-string-regexp@^1.0.2", "escape-string-regexp@^1.0.5": + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escope@^3.6.0": + "integrity" "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==" + "resolved" "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "es6-map" "^0.1.3" + "es6-weak-map" "^2.0.1" + "esrecurse" "^4.1.0" + "estraverse" "^4.1.1" + +"eslint-config-standard-jsx@4.0.1": + "integrity" "sha512-6XxcwOm22JWEVrDTxhkh/M9Qv5FCNPHKDGh4LPmWnFj4MDuNs7iXZatahYghIcMw5mkVMadLl7KFAWH/EOIeAA==" + "resolved" "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz" + "version" "4.0.1" + +"eslint-config-standard@10.2.1": + "integrity" "sha512-UkFojTV1o0GOe1edOEiuI5ccYLJSuNngtqSeClNzhsmG8KPJ+7mRxgtp2oYhqZAK/brlXMoCd+VgXViE0AfyKw==" + "resolved" "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz" + "version" "10.2.1" + +"eslint-import-resolver-node@^0.2.0": + "integrity" "sha512-HI8ShtDIy7gON76Nr3bu4zl0DuCLPo1Fud9P2lltOQKeiAS2r5/o/l3y+V8HJ1cDLFSz+tHu7/V9fI5jirwlbw==" + "resolved" "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz" + "version" "0.2.3" + dependencies: + "debug" "^2.2.0" + "object-assign" "^4.0.1" + "resolve" "^1.1.6" + +"eslint-module-utils@^2.0.0": + "integrity" "sha512-dbCxecY4K8DzOl71Pe1j6dV/nNw0Pmcve/p+sE7Xmn5+94N1McShGEEXiF3HvIVNB2KgBnzsfdXwWmUGg85IGw==" + "resolved" "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "debug" "2.2.0" + "pkg-dir" "^1.0.0" + +"eslint-plugin-import@>=2.2.0", "eslint-plugin-import@~2.2.0": + "integrity" "sha512-8HLeIYzOH4eltevxf+iC9Dtz/91yaeOqtlba5srcpQWLrv57F5NNG1RNLqAbpWJWDD4BxKuKjUveJY9W6Tbswg==" + "resolved" "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "builtin-modules" "^1.1.1" + "contains-path" "^0.1.0" + "debug" "^2.2.0" + "doctrine" "1.5.0" + "eslint-import-resolver-node" "^0.2.0" + "eslint-module-utils" "^2.0.0" + "has" "^1.0.1" + "lodash.cond" "^4.3.0" + "minimatch" "^3.0.3" + "pkg-up" "^1.0.0" + +"eslint-plugin-node@>=4.2.2", "eslint-plugin-node@~4.2.2": + "integrity" "sha512-iEmMJQgmsKnZKLPIjSU4+H44tsR1HmTBNC/+XbBbRbq4Sxu4CijLscPSxpYqLZsMslRMyvovZuyoATzM3DSELw==" + "resolved" "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "ignore" "^3.0.11" + "minimatch" "^3.0.2" + "object-assign" "^4.0.1" + "resolve" "^1.1.7" + "semver" "5.3.0" + +"eslint-plugin-promise@>=3.5.0", "eslint-plugin-promise@~3.5.0": + "integrity" "sha512-kqXN7i1wfx5j7XuFVzuX4W3XDCEyNDsbd+O5NXWIl+zTSP510rKn2Xk8OO6JhM1ivXbkse0tQf6jjSTLS58Prg==" + "resolved" "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz" + "version" "3.5.0" + +"eslint-plugin-react@>=6.10.3", "eslint-plugin-react@~6.10.0": + "integrity" "sha512-vFfMSxJynKlgOhIVjhlZyibVUg442Aiv3482XPkgdYV90T8nD2QvxGXILZGwZHYMQ/l+A/De14O9D0qjDelSrg==" + "resolved" "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz" + "version" "6.10.3" + dependencies: + "array.prototype.find" "^2.0.1" + "doctrine" "^1.2.2" + "has" "^1.0.1" + "jsx-ast-utils" "^1.3.4" + "object.assign" "^4.0.4" + +"eslint-plugin-standard@>=3.0.0", "eslint-plugin-standard@~3.0.1": + "integrity" "sha512-JyT7wqVYlaHxnljWMT7CKa0R1QDQqArTi6g8kYnexTHHuK7x3Vg//kCepnoTgdT9x/kDbSluXMhJgjBvgVRLlQ==" + "resolved" "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz" + "version" "3.0.1" + +"eslint@^2.0.0 || ^3.0.0", "eslint@>=3.1.0", "eslint@>=3.19.0", "eslint@~3.19.0", "eslint@2.x - 3.x": + "integrity" "sha512-x6LJGXWCGB/4YOBhL48yeppZTo+YQUNC37N5qqCpC1b1kkNzydlQHQAtPuUSFoZSxgIadrysQoW2Hq602P+uEA==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz" + "version" "3.19.0" + dependencies: + "babel-code-frame" "^6.16.0" + "chalk" "^1.1.3" + "concat-stream" "^1.5.2" + "debug" "^2.1.1" + "doctrine" "^2.0.0" + "escope" "^3.6.0" + "espree" "^3.4.0" + "esquery" "^1.0.0" + "estraverse" "^4.2.0" + "esutils" "^2.0.2" + "file-entry-cache" "^2.0.0" + "glob" "^7.0.3" + "globals" "^9.14.0" + "ignore" "^3.2.0" + "imurmurhash" "^0.1.4" + "inquirer" "^0.12.0" + "is-my-json-valid" "^2.10.0" + "is-resolvable" "^1.0.0" + "js-yaml" "^3.5.1" + "json-stable-stringify" "^1.0.0" + "levn" "^0.3.0" + "lodash" "^4.0.0" + "mkdirp" "^0.5.0" + "natural-compare" "^1.4.0" + "optionator" "^0.8.2" + "path-is-inside" "^1.0.1" + "pluralize" "^1.2.1" + "progress" "^1.1.8" + "require-uncached" "^1.0.2" + "shelljs" "^0.7.5" + "strip-bom" "^3.0.0" + "strip-json-comments" "~2.0.1" + "table" "^3.7.8" + "text-table" "~0.2.0" + "user-home" "^2.0.0" + +"espree@^3.4.0": + "integrity" "sha512-Xqn0i9fqQLP/vV+/kw/kg94qSqoQME0xuoroSuTieHOC3SoYVumn/zq+aoqc0EkK0IqiFhsfN+R+ACt6RExJgg==" + "resolved" "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz" + "version" "3.4.3" + dependencies: + "acorn" "^5.0.1" + "acorn-jsx" "^3.0.0" + +"esprima@^3.1.1": + "integrity" "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz" + "version" "3.1.3" + +"esquery@^1.0.0": + "integrity" "sha512-81Hhof+z1FE3KIrTFOXjaRl7vphcZyUEwRY+pbVv2tdVxM3uxJzd3xvdtiFSUxQdq7zoH+U5Qy9UAKyHqv8LfA==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "estraverse" "^4.0.0" + +"esrecurse@^4.1.0": + "integrity" "sha512-4pWjwT+t5yO1v2/nV29A6IUpV7I78jR6mmZhhM/65pPV3ZZZQ5f1j354Mt5XzhDH0bqB3oDfF0BA2RPOY/NxBg==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "estraverse" "~4.1.0" + "object-assign" "^4.0.1" + +"estraverse@^4.0.0", "estraverse@^4.1.1", "estraverse@^4.2.0": + "integrity" "sha512-VHvyaGnJy+FuGfcfaM7W7OZw4mQiKW73jPHwQXx2VnMSUBajYmytOT5sKEfsBvNPtGX6YDwcrGDz2eocoHg0JA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + "version" "4.2.0" + +"estraverse@~4.1.0": + "integrity" "sha512-r3gEa6vc6lGQdrXfo834EaaqnOzYmik8JPg8VB95acIMZRjqaHI0/WMZFoMBGPtS+HCgylwTLoc4Y5yl0owOHQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz" + "version" "4.1.1" + +"esutils@^2.0.2": + "integrity" "sha512-UUPPULqkyAV+M3Shodis7l8D+IyX6V8SbaBnTb449jf3fMTd8+UOZI1Q70NbZVOQkcR91yYgdHsJiMMMVmYshg==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" + "version" "2.0.2" + +"event-emitter@~0.3.5": + "integrity" "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==" + "resolved" "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + "version" "0.3.5" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + +"exit-hook@^1.0.0": + "integrity" "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==" + "resolved" "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz" + "version" "1.1.1" + +"fast-levenshtein@~2.0.4": + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"figures@^1.3.5": + "integrity" "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==" + "resolved" "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "escape-string-regexp" "^1.0.5" + "object-assign" "^4.1.0" + +"file-entry-cache@^2.0.0": + "integrity" "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "flat-cache" "^1.2.1" + "object-assign" "^4.0.1" + +"find-root@^1.0.0": + "integrity" "sha512-6fkVew54iP/VjbdCZXcyYJJrlqs/TNxSCoqK4Nj+ogFbSORcVJHGLXVkhjzZanGujOylky+WgVEBpq6n/jSIrw==" + "resolved" "https://registry.npmjs.org/find-root/-/find-root-1.0.0.tgz" + "version" "1.0.0" + +"find-up@^1.0.0": + "integrity" "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "path-exists" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"find-up@^2.0.0": + "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "locate-path" "^2.0.0" + +"flat-cache@^1.2.1": + "integrity" "sha512-JzMp5lzDuF/1qgd3g+awLvXlVxAcWxL4L2NfZe9r19bwjKqGjXg5waNXG8wuP9skmVmiKhAo/lN+FDJxVKNDgQ==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "circular-json" "^0.3.1" + "del" "^2.0.2" + "graceful-fs" "^4.1.2" + "write" "^0.2.1" + +"foreach@^2.0.5": + "integrity" "sha512-ZBbtRiapkZYLsqoPyZOR+uPfto0GRMNQN1GwzZtZt7iZvPPbDDQV0JF5Hx4o/QFQ5c0vyuoZ98T8RSBbopzWtA==" + "resolved" "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" + "version" "2.0.5" + +"fs-plus@3.1.1": + "integrity" "sha512-Se2PJdOWXqos1qVTkvqqjb0CSnfBnwwD+pq+z4ksT+e97mEShod/hrNg0TRCCsXPbJzcIq+NuzQhigunMWMJUA==" + "resolved" "https://registry.npmjs.org/fs-plus/-/fs-plus-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "async" "^1.5.2" + "mkdirp" "^0.5.1" + "rimraf" "^2.5.2" + "underscore-plus" "1.x" + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"function-bind@^1.0.2", "function-bind@^1.1.0": + "integrity" "sha512-rdjNZR1BePD6g5bTgalqkSN9eMuHgB2KHOBupLM8f5TblXwiV8nSY31dygkdwLNFn1m2KAkjFsREUuLNcU1rdg==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz" + "version" "1.1.0" + +"generate-function@^2.0.0": + "integrity" "sha512-X46lB9wLCsgkyagCmX2Dev5od5j6niCr3UeMbXVDBVO4tlpXp3o4OFh+0gPTlkD3ZMixU8PCKxf0IMGQvPo8HQ==" + "resolved" "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" + "version" "2.0.0" + +"generate-object-property@^1.1.0": + "integrity" "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==" + "resolved" "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "is-property" "^1.0.0" + +"get-stdin@^5.0.1": + "integrity" "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==" + "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz" + "version" "5.0.1" + +"glob@^7.0.0", "glob@7.0.0": + "integrity" "sha512-Fa+aQV0FFMU4/Jg5mquHjv5DikTujeAWOpbGa9lsG2Qa+ehYxbGN3cCY/T+C+jAS8gKBnYN2MbrdNm0UCAcp7w==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "2 || 3" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.0.3": + "integrity" "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + "version" "7.1.2" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.0.5": + "integrity" "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + "version" "7.1.2" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.3": + "integrity" "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + "version" "7.1.4" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"globals@^9.14.0": + "integrity" "sha512-oZir3ZZbSYGRu+KeFbR9nWoB8wqAciMthMMSeoy2eFcRZf3uzZOsbCOFKtW/QdnK+cz7nn7eL3q6JCAfgsb/2Q==" + "resolved" "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz" + "version" "9.17.0" + +"globby@^5.0.0": + "integrity" "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==" + "resolved" "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "array-union" "^1.0.1" + "arrify" "^1.0.0" + "glob" "^7.0.3" + "object-assign" "^4.0.1" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"graceful-fs@^4.1.2": + "integrity" "sha512-9x6DLUuW+ROFdMTII9ec9t/FK8va6kYcC8/LggumssLM8kNv7IdFl3VrNUqgir2tJuBVxBga1QBoRziZacO5Zg==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + "version" "4.1.11" + +"has-ansi@^2.0.0": + "integrity" "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==" + "resolved" "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ansi-regex" "^2.0.0" + +"has@^1.0.1": + "integrity" "sha512-8wpov6mGFPJ/SYWGQIFo6t0yuNWoO9MkSq3flX8LhiGmbIUhDETp9knPMcIm0Xig1ybWsw6gq2w0gCz1JHD+Qw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "function-bind" "^1.0.2" + +"ignore@^3.0.11", "ignore@^3.0.9", "ignore@^3.2.0": + "integrity" "sha512-EreSWopcoOuUkFfoYLwnaiDVfyyI4vmaYJN2k9XtwUH0GBRjXcJ6WC9yLrx7+5V1IL9VW+AltFnFG+N9Dp467Q==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz" + "version" "3.3.3" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@~2.0.1", "inherits@2": + "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "version" "2.0.3" + +"inquirer@^0.12.0": + "integrity" "sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz" + "version" "0.12.0" + dependencies: + "ansi-escapes" "^1.1.0" + "ansi-regex" "^2.0.0" + "chalk" "^1.0.0" + "cli-cursor" "^1.0.1" + "cli-width" "^2.0.0" + "figures" "^1.3.5" + "lodash" "^4.3.0" + "readline2" "^1.0.1" + "run-async" "^0.1.0" + "rx-lite" "^3.1.2" + "string-width" "^1.0.1" + "strip-ansi" "^3.0.0" + "through" "^2.3.6" + +"interpret@^1.0.0": + "integrity" "sha512-QZeLkTbMF2lgHs0JhQF8cCiJO8RSgBJ7b5ey6LIzAeiKWBZTD1LpsAXfqlONI3uw8VQS9YkQP647Fy0HRO54bA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz" + "version" "1.0.3" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-callable@^1.1.1", "is-callable@^1.1.3": + "integrity" "sha512-gcmUh1kFielP0yJSKD+A1aOPNlI8ZzruhHum+Geq6M3Ibx5JnwcsTJCktWj+reKIjjtefToy/u8YNRUZq4FHuQ==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz" + "version" "1.1.3" + +"is-date-object@^1.0.1": + "integrity" "sha512-P5rExV1phPi42ppoMWy7V63N3i173RY921l4JJ7zonMSxK+OWGPj76GD+cUKUb68l4vQXcJp2SsG+r/A4ABVzg==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz" + "version" "1.0.1" + +"is-fullwidth-code-point@^1.0.0": + "integrity" "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "number-is-nan" "^1.0.0" + +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" + +"is-my-json-valid@^2.10.0": + "integrity" "sha512-6AFGaggK+pZhYW+jXVPxaDgMuZvq0HbinaSrA9ecxKwg1WVKpchZRs0nRkvMiv+hIOFYeyLQ75RVs6Qs+KFk8Q==" + "resolved" "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz" + "version" "2.16.0" + dependencies: + "generate-function" "^2.0.0" + "generate-object-property" "^1.1.0" + "jsonpointer" "^4.0.0" + "xtend" "^4.0.0" + +"is-path-cwd@^1.0.0": + "integrity" "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + "version" "1.0.0" + +"is-path-in-cwd@^1.0.0": + "integrity" "sha512-XSig+5QTx0ReXCURjvzGsLUFT8V36AjyVkc6axI1r5QT3BMVR0MptnXBNU7iyfn2aQIgm8/vP4h58RVIsL7rEw==" + "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-path-inside" "^1.0.0" + +"is-path-inside@^1.0.0": + "integrity" "sha512-WdiHWLVPHbn+QOQdJXqJS7TtArj7yXvKb8ZyFZ7AaIuW7KOfLLyR5glFAR+b1Q6PhSOTL8lpQvIoV2klU0nE9g==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "path-is-inside" "^1.0.1" + +"is-property@^1.0.0": + "integrity" "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + "resolved" "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + "version" "1.0.2" + +"is-regex@^1.0.3": + "integrity" "sha512-WQgPrEkb1mPCWLSlLFuN1VziADSixANugwSkJfPRR73FNWIQQN+tR/t1zWfyES/Y9oag/XBtVsahFdfBku3Kyw==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has" "^1.0.1" + +"is-resolvable@^1.0.0": + "integrity" "sha512-9FcOmO8DNEuvfwr4zahMkx1NNWBG+r8MUz+1t608iNqHEjflcvwl368niaBjuIUug3njonc6loJ6r8ReIfwYbQ==" + "resolved" "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "tryit" "^1.0.1" + +"is-symbol@^1.0.1": + "integrity" "sha512-Z1cLAG7dXM1vJv8mAGjA+XteO0YzYPwD473+qPAWKycNZxwCH/I56QIohKGYCZSB7j6tajrxi/FvOpAfqGhhRQ==" + "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz" + "version" "1.0.1" + +"isarray@^1.0.0", "isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"jquery@>=3.4.1": + "integrity" "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ==" + "resolved" "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz" + "version" "3.5.0" + +"js-tokens@^3.0.0": + "integrity" "sha512-uGx5mrUJTDuSk2T4NendihsPTPR4Pgu06OYD5bEvFSXX4MZfGSy7tL6nlYWyJUAqQYo/3xkKLyIQzIqDx4UCDg==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz" + "version" "3.0.1" + +"js-yaml@^3.5.1": + "integrity" "sha512-bgjcVwQFrFX7lpj97N1cLRCEUrXKdRqLWwvoKVFep3Qg5RAuYw78NeThxDekWvmuE1tg+0Ke49RshU1ZcXCHmA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz" + "version" "3.8.4" + dependencies: + "argparse" "^1.0.7" + "esprima" "^3.1.1" + +"json-stable-stringify@^1.0.0", "json-stable-stringify@^1.0.1": + "integrity" "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==" + "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "jsonify" "~0.0.0" + +"jsonify@~0.0.0": + "integrity" "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" + "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + "version" "0.0.0" + +"jsonpointer@^4.0.0": + "integrity" "sha512-K7vR/jmvXsP04hvItAziqPeWmGceLWye9tkqbI+zFCvD4aDnL94BbGHggtQTfqRxbsgGWb4ospGQU8Rd7CEzPg==" + "resolved" "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz" + "version" "4.0.1" + +"jsx-ast-utils@^1.3.4": + "integrity" "sha512-0LwSmMlQjjUdXsdlyYhEfBJCn2Chm0zgUBmfmf1++KUULh+JOdlzrZfiwe2zmlVJx44UF+KX/B/odBoeK9hxmw==" + "resolved" "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz" + "version" "1.4.1" + +"kidif@1.1.0": + "integrity" "sha512-QmAHSkWEYssexdqWQshtfEd/AGeJAXHuV1pu607ePgNwwSf2X6fuIzUJsLtKbUQ/ak0pokdwDr8ocZ9sygKhTg==" + "resolved" "https://registry.npmjs.org/kidif/-/kidif-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "glob" "7.0.0" + +"levn@^0.3.0", "levn@~0.3.0": + "integrity" "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + +"load-json-file@^2.0.0": + "integrity" "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "graceful-fs" "^4.1.2" + "parse-json" "^2.2.0" + "pify" "^2.0.0" + "strip-bom" "^3.0.0" + +"locate-path@^2.0.0": + "integrity" "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-locate" "^2.0.0" + "path-exists" "^3.0.0" + +"lodash.cond@^4.3.0": + "integrity" "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==" + "resolved" "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz" + "version" "4.5.2" + +"lodash@^4.0.0", "lodash@^4.3.0": + "integrity" "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz" + "version" "4.17.19" + +"mdn-data@~1.1.0": + "integrity" "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz" + "version" "1.1.4" + +"minimatch@^3.0.2", "minimatch@^3.0.3", "minimatch@^3.0.4", "minimatch@2 || 3": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"minimist@^1.1.0": + "integrity" "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + "version" "1.2.0" + +"minimist@0.0.8": + "integrity" "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "version" "0.0.8" + +"mkdirp@^0.5.0", "mkdirp@^0.5.1": + "integrity" "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + "version" "0.5.1" + dependencies: + "minimist" "0.0.8" + +"ms@0.7.1": + "integrity" "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==" + "resolved" "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + "version" "0.7.1" + +"mustache@2.3.0": + "integrity" "sha512-IgZ/cCHtDG1ft0vdDV9wrlNz20SvbUu2ECoDF6dhk2ZtedLNy1Kehy4oFlzmHPxcUQmVZuXYS2j+d0NkaEjTXQ==" + "resolved" "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz" + "version" "2.3.0" + +"mute-stream@0.0.5": + "integrity" "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz" + "version" "0.0.5" + +"natural-compare@^1.4.0": + "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"number-is-nan@^1.0.0": + "integrity" "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "version" "1.0.1" + +"object-assign@^4.0.1", "object-assign@^4.1.0": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-keys@^1.0.10", "object-keys@^1.0.8": + "integrity" "sha512-I0jUsqFqmQFOIhQQFlW8QDuX3pVqUWkiiavYj8+TBiS7m+pM9hPCxSnYWqL1hHMBb7BbQ2HidT+6CZ8/BT/ilw==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz" + "version" "1.0.11" + +"object.assign@^4.0.4": + "integrity" "sha512-RUMl4JcrbyFSPF2x7BQWr3nbHLqmy4732SWc2brBe89YLHZoZW/AFWKndkt0LFumLJPbsX3xb0PukBFBwCcmSw==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "define-properties" "^1.1.2" + "function-bind" "^1.1.0" + "object-keys" "^1.0.10" + +"once@^1.3.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^1.0.0": + "integrity" "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" + "version" "1.1.0" + +"optionator@^0.8.2": + "integrity" "sha512-oCOQ8AIC2ciLy/sE2ehafRBleBgDLvzGhBRRev87sP7ovnbvQfqpc3XFI0DhHey2OfVoNV91W+GPC6B3540/5Q==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz" + "version" "0.8.2" + dependencies: + "deep-is" "~0.1.3" + "fast-levenshtein" "~2.0.4" + "levn" "~0.3.0" + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + "wordwrap" "~1.0.0" + +"os-homedir@^1.0.0": + "integrity" "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" + "resolved" "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + "version" "1.0.2" + +"p-limit@^1.1.0": + "integrity" "sha512-sFSFmsGcVho1dNzsPGyiL1xs4KxZlM2QlznVxCDg0loLefThSsVkZPyBZEehQSci0nLwkgPZziJYpMGa59Vzqw==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz" + "version" "1.1.0" + +"p-locate@^2.0.0": + "integrity" "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-limit" "^1.1.0" + +"parse-json@^2.2.0": + "integrity" "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "error-ex" "^1.2.0" + +"path-exists@^2.0.0": + "integrity" "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "pinkie-promise" "^2.0.0" + +"path-exists@^3.0.0": + "integrity" "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-is-inside@^1.0.1": + "integrity" "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + "version" "1.0.2" + +"path-parse@^1.0.5": + "integrity" "sha512-u4e4H/UUeMbJ1UnBnePf6r4cm4fFZs57BMocUSFeea807JTYk2HJnE9GjUpWHaDZk1OQGoArnWW1yEo9nd57ww==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + "version" "1.0.5" + +"pify@^2.0.0": + "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pinkie-promise@^2.0.0": + "integrity" "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "pinkie" "^2.0.0" + +"pinkie@^2.0.0": + "integrity" "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "version" "2.0.4" + +"pkg-conf@^2.0.0": + "integrity" "sha512-DePmt9Edldi1xs12AWWjEAg+cRS9ps3oDRSrTmDpXF6pjncDGgt5OEU5WXGfmM0+NRs/6mhFIxVyI9fATPX1Uw==" + "resolved" "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "find-up" "^2.0.0" + "load-json-file" "^2.0.0" + +"pkg-config@^1.1.0": + "integrity" "sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==" + "resolved" "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "debug-log" "^1.0.0" + "find-root" "^1.0.0" + "xtend" "^4.0.1" + +"pkg-dir@^1.0.0": + "integrity" "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "find-up" "^1.0.0" + +"pkg-up@^1.0.0": + "integrity" "sha512-L+d849d9lz20hnRpUnWBRXOh+mAvygQpK7UuXiw+6QbPwL55RVgl+G+V936wCzs/6J7fj0pvgLY9OknZ+FqaNA==" + "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "find-up" "^1.0.0" + +"pluralize@^1.2.1": + "integrity" "sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ==" + "resolved" "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz" + "version" "1.2.1" + +"prelude-ls@~1.1.2": + "integrity" "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + "version" "1.1.2" + +"process-nextick-args@~1.0.6": + "integrity" "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" + "version" "1.0.7" + +"progress@^1.1.8": + "integrity" "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==" + "resolved" "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz" + "version" "1.1.8" + +"readable-stream@^2.2.2": + "integrity" "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz" + "version" "2.2.10" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "~1.0.0" + "process-nextick-args" "~1.0.6" + "safe-buffer" "^5.0.1" + "string_decoder" "~1.0.0" + "util-deprecate" "~1.0.1" + +"readline2@^1.0.1": + "integrity" "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==" + "resolved" "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "mute-stream" "0.0.5" + +"rechoir@^0.6.2": + "integrity" "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + "version" "0.6.2" + dependencies: + "resolve" "^1.1.6" + +"require-uncached@^1.0.2": + "integrity" "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==" + "resolved" "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "caller-path" "^0.1.0" + "resolve-from" "^1.0.0" + +"resolve-from@^1.0.0": + "integrity" "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz" + "version" "1.0.1" + +"resolve@^1.1.6", "resolve@^1.1.7": + "integrity" "sha512-1p/C+O7k1Gt16zZRRp8wWxNr8N/7hBP25g3OcUxgYB18hUx0k1vHaIvI9wtVfCNYogxKAYLdpLF8MMB5eh4IGA==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz" + "version" "1.3.3" + dependencies: + "path-parse" "^1.0.5" + +"restore-cursor@^1.0.1": + "integrity" "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "exit-hook" "^1.0.0" + "onetime" "^1.0.0" + +"rimraf@^2.2.8", "rimraf@^2.5.2": + "integrity" "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" + "version" "2.6.3" + dependencies: + "glob" "^7.1.3" + +"run-async@^0.1.0": + "integrity" "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "once" "^1.3.0" + +"run-parallel@^1.1.2": + "integrity" "sha512-XmkpA2hWubG33ZcSAtFujmcsg4dPy9u1nwB0AtuHNEVF6SoDpZO2ldD24PS0Z5l8/C/sdaztIqPpeLzMugG7/A==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.6.tgz" + "version" "1.1.6" + +"rx-lite@^3.1.2": + "integrity" "sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==" + "resolved" "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz" + "version" "3.1.2" + +"safe-buffer@^5.0.1": + "integrity" "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz" + "version" "5.1.0" + +"semver@5.3.0": + "integrity" "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz" + "version" "5.3.0" + +"shelljs@^0.7.5": + "integrity" "sha512-5ZXTlakejjdxXAnFl23pgPDzCcyPoshqMVWYqMH8HiP1R+i4auEKHabljL6XQlhQV58jkSRTR33Fq7OlxyLLTg==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz" + "version" "0.7.7" + dependencies: + "glob" "^7.0.0" + "interpret" "^1.0.0" + "rechoir" "^0.6.2" + +"slice-ansi@0.0.4": + "integrity" "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz" + "version" "0.0.4" + +"source-map@^0.5.3": + "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" + +"source-map@~0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"standard-engine@~7.0.0": + "integrity" "sha512-d/NYzmZxQRxbcoCqlbI9gEMPYq7TLsU6Ywpki54xhedEd0GC4G02j1B7mlexb7HovqRtAtcUPTLQx2MnCO/uyA==" + "resolved" "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "deglob" "^2.1.0" + "get-stdin" "^5.0.1" + "minimist" "^1.1.0" + "pkg-conf" "^2.0.0" + +"standard@10.0.2": + "integrity" "sha512-NiEPy0kaa7yufaPsMT63a7MvTzfRyFrSItcTKYS4I9oFskgpQy0hXL0oOxbr836O7kTKgaxLZiv5lZmBWZRffg==" + "resolved" "https://registry.npmjs.org/standard/-/standard-10.0.2.tgz" + "version" "10.0.2" + dependencies: + "eslint" "~3.19.0" + "eslint-config-standard" "10.2.1" + "eslint-config-standard-jsx" "4.0.1" + "eslint-plugin-import" "~2.2.0" + "eslint-plugin-node" "~4.2.2" + "eslint-plugin-promise" "~3.5.0" + "eslint-plugin-react" "~6.10.0" + "eslint-plugin-standard" "~3.0.1" + "standard-engine" "~7.0.0" + +"string_decoder@~1.0.0": + "integrity" "sha512-Ma/XSGC8lfDvw75eLjgg/a1nWDButtedmpbbNxH5Ruyr0IhqNXOKbG468VtPosrjhRgNOvgonmY54ZnGMdgJjw==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "safe-buffer" "^5.0.1" + +"string-width@^1.0.1": + "integrity" "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "strip-ansi" "^3.0.0" + +"string-width@^2.0.0": + "integrity" "sha512-w+YQpeOppRYnIHRftgHpjGYUj9m0XKeam1C4ahbh+vErWcY8JJCcrHi/YhUFhHoVeWADkhplCWYdYwX5Nmhiyw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^3.0.0" + +"strip-ansi@^3.0.0": + "integrity" "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-bom@^3.0.0": + "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" + +"strip-json-comments@~2.0.1": + "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"supports-color@^2.0.0": + "integrity" "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + "version" "2.0.0" + +"table@^3.7.8": + "integrity" "sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g==" + "resolved" "https://registry.npmjs.org/table/-/table-3.8.3.tgz" + "version" "3.8.3" + dependencies: + "ajv" "^4.7.0" + "ajv-keywords" "^1.0.0" + "chalk" "^1.1.1" + "lodash" "^4.0.0" + "slice-ansi" "0.0.4" + "string-width" "^2.0.0" + +"text-table@~0.2.0": + "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"through@^2.3.6": + "integrity" "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"tryit@^1.0.1": + "integrity" "sha512-6C5h3CE+0qjGp+YKYTs74xR0k/Nw/ePtl/Lp6CCf44hqBQ66qnH1sDFR5mV/Gc48EsrHLB53lCFSffQCkka3kg==" + "resolved" "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz" + "version" "1.0.3" + +"type-check@~0.3.2": + "integrity" "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "prelude-ls" "~1.1.2" + +"typedarray@^0.0.6": + "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "version" "0.0.6" + +"uglify-js@^3.6.0": + "integrity" "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "commander" "~2.20.0" + "source-map" "~0.6.1" + +"underscore-plus@1.x": + "integrity" "sha512-A3BEzkeicFLnr+U/Q3EyWwJAQPbA19mtZZ4h+lLq3ttm9kn8WC4R3YpuJZEXmWdLjYP47Zc8aLZm9kwdv+zzvA==" + "resolved" "https://registry.npmjs.org/underscore-plus/-/underscore-plus-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "underscore" "^1.9.1" + +"underscore@^1.9.1": + "integrity" "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + "resolved" "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz" + "version" "1.9.1" + +"uniq@^1.0.1": + "integrity" "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" + "resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + "version" "1.0.1" + +"user-home@^2.0.0": + "integrity" "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==" + "resolved" "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "os-homedir" "^1.0.0" + +"util-deprecate@~1.0.1": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"wordwrap@~1.0.0": + "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + "version" "1.0.0" + +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write@^0.2.1": + "integrity" "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==" + "resolved" "https://registry.npmjs.org/write/-/write-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "mkdirp" "^0.5.1" + +"xtend@^4.0.0", "xtend@^4.0.1": + "integrity" "sha512-iTwvhNBRetXWe81+VcIw5YeadVSWyze7uA7nVnpP13ulrpnJ3UfQm5ApGnrkmxDJFdrblRdZs0EvaTCIfei5oQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "version" "4.0.1" From e5f6f07b25cf25f8b02e6a56084643bfdf4e210e Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 00:37:10 +0300 Subject: [PATCH 02/24] Shorted squeeze/expand algorithm. --- lib/chessboard.js | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/lib/chessboard.js b/lib/chessboard.js index bdb26394..501081a2 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -403,25 +403,11 @@ if (RUN_ASSERTS) { } function squeezeFenEmptySquares (fen) { - return fen - .replace(/11111111/g, '8') - .replace(/1111111/g, '7') - .replace(/111111/g, '6') - .replace(/11111/g, '5') - .replace(/1111/g, '4') - .replace(/111/g, '3') - .replace(/11/g, '2') + return fen.replace(/1{2,8}/g, ({ length }) => length) } function expandFenEmptySquares (fen) { - return fen - .replace(/8/g, '11111111') - .replace(/7/g, '1111111') - .replace(/6/g, '111111') - .replace(/5/g, '11111') - .replace(/4/g, '1111') - .replace(/3/g, '111') - .replace(/2/g, '11') + return fen.replace(/[2-8]/g, (length) => '1'.repeat(Number(length))) } // returns the distance between two squares From 28b963f4ac86c34ae07c448c0c783062a6893a80 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 01:45:06 +0300 Subject: [PATCH 03/24] Disable scrolling when move a chess piece --- lib/chessboard.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/chessboard.js b/lib/chessboard.js index 501081a2..57659cdb 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -1649,6 +1649,8 @@ function constructor (containerElOrString, config) { if (!currentPosition.hasOwnProperty(square)) return e = e.originalEvent + e.preventDefault() + beginDraggingPiece( square, currentPosition[square], From 9c3e126017baeb2ebb845f61932d196a98a96f95 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 02:00:44 +0300 Subject: [PATCH 04/24] Fix mixed line endings. --- data/releases.json | 104 ++++++++++----------- examples/1000-empty-board.example | 8 +- examples/1001-start-position.example | 10 +- examples/1002-fen.example | 10 +- examples/1003-position-object.example | 20 ++-- examples/1004-multiple-boards.example | 18 ++-- examples/2000-config-position.example | 26 +++--- examples/2001-config-orientation.example | 28 +++--- examples/2002-config-notation.example | 28 +++--- examples/2003-draggable-snapback.example | 30 +++--- examples/3000-get-position.example | 20 ++-- examples/3001-set-position.example | 20 ++-- examples/3002-set-position-instant.example | 20 ++-- examples/3003-clear.example | 20 ++-- examples/3004-move-pieces.example | 18 ++-- examples/3005-orientation.example | 18 ++-- examples/4000-onchange.example | 14 +-- examples/5004-piece-highlight1.example | 24 ++--- lib/chessboard.css | 76 +++++++-------- 19 files changed, 256 insertions(+), 256 deletions(-) diff --git a/data/releases.json b/data/releases.json index dbcec679..1b9f5933 100644 --- a/data/releases.json +++ b/data/releases.json @@ -1,53 +1,53 @@ -[ -"-----------------------------------------------------------------", -{ - "released":false, - "version":"0.3.1", - "date":"10 Aug 2013", - "changes":[ - "Orientation methods now return current orientation (GitHub Issue #64)" - ], - "files":[ - { "name":"chessboardjs-0.3.1.zip", "size":"44.6 KB" } - ] -}, -"-----------------------------------------------------------------", -{ - "version":"0.3.0", - "date":"10 Aug 2013", - "changes":[ - "Added appearSpeed animation config", - "Added onSnapbackEnd event", - "Added onMoveEnd event" - ], - "files":[ - { "name":"chessboardjs-0.3.0.zip", "size":"44.6 KB" } - ] -}, -"-----------------------------------------------------------------", -{ - "version":"0.2.0", - "date":"05 Aug 2013", - "changes":[ - "Added onMouseoverSquare and onMouseoutSquare events", - "Added onSnapEnd event", - "Added square code as CSS class on the squares", - "chess.js integration examples" - ], - "files":[ - { "name":"chessboardjs-0.2.0.zip", "size":"44.6 KB" } - ] -}, -"-----------------------------------------------------------------", -{ - "version":"0.1.0", - "date":"21 Jul 2013", - "changes":[ - "Initial release" - ], - "files":[ - { "name":"chessboard-0.1.0.zip", "size":"44.0 KB" } - ] -}, -"-----------------------------------------------------------------" +[ +"-----------------------------------------------------------------", +{ + "released":false, + "version":"0.3.1", + "date":"10 Aug 2013", + "changes":[ + "Orientation methods now return current orientation (GitHub Issue #64)" + ], + "files":[ + { "name":"chessboardjs-0.3.1.zip", "size":"44.6 KB" } + ] +}, +"-----------------------------------------------------------------", +{ + "version":"0.3.0", + "date":"10 Aug 2013", + "changes":[ + "Added appearSpeed animation config", + "Added onSnapbackEnd event", + "Added onMoveEnd event" + ], + "files":[ + { "name":"chessboardjs-0.3.0.zip", "size":"44.6 KB" } + ] +}, +"-----------------------------------------------------------------", +{ + "version":"0.2.0", + "date":"05 Aug 2013", + "changes":[ + "Added onMouseoverSquare and onMouseoutSquare events", + "Added onSnapEnd event", + "Added square code as CSS class on the squares", + "chess.js integration examples" + ], + "files":[ + { "name":"chessboardjs-0.2.0.zip", "size":"44.6 KB" } + ] +}, +"-----------------------------------------------------------------", +{ + "version":"0.1.0", + "date":"21 Jul 2013", + "changes":[ + "Initial release" + ], + "files":[ + { "name":"chessboard-0.1.0.zip", "size":"44.0 KB" } + ] +}, +"-----------------------------------------------------------------" ] \ No newline at end of file diff --git a/examples/1000-empty-board.example b/examples/1000-empty-board.example index b065604c..19c7f32c 100644 --- a/examples/1000-empty-board.example +++ b/examples/1000-empty-board.example @@ -2,13 +2,13 @@ 1000 ===== Name -Empty Board - +Empty Board + ===== Description Chessboard.js initializes to an empty board with no second argument. - + ===== HTML
- + ===== JS var board = Chessboard('myBoard') diff --git a/examples/1001-start-position.example b/examples/1001-start-position.example index d95b132b..d1ac9cee 100644 --- a/examples/1001-start-position.example +++ b/examples/1001-start-position.example @@ -1,15 +1,15 @@ ===== id 1001 -===== Name -Start Position - +===== Name +Start Position + ===== Description Pass 'start' as the second argument to initialize the board to the start position. - + ===== HTML
- + ===== JS var board = Chessboard('myBoard', 'start') diff --git a/examples/1002-fen.example b/examples/1002-fen.example index fa7718a2..a3776e05 100644 --- a/examples/1002-fen.example +++ b/examples/1002-fen.example @@ -1,16 +1,16 @@ ===== id 1002 -===== Name -FEN String - +===== Name +FEN String + ===== Description Pass a FEN String as the second argument to initialize the board to a specific position. - + ===== HTML
- + ===== JS var ruyLopez = 'r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R' var board = Chessboard('myBoard', ruyLopez) diff --git a/examples/1003-position-object.example b/examples/1003-position-object.example index 6bfa237e..f5926f03 100644 --- a/examples/1003-position-object.example +++ b/examples/1003-position-object.example @@ -1,16 +1,16 @@ ===== id 1003 -===== Name -Position Object - -===== Description -Pass a Position Object as the second argument to initialize the board to a specific position. - -===== HTML -
- -===== JS +===== Name +Position Object + +===== Description +Pass a Position Object as the second argument to initialize the board to a specific position. + +===== HTML +
+ +===== JS var position = { d6: 'bK', d4: 'wP', diff --git a/examples/1004-multiple-boards.example b/examples/1004-multiple-boards.example index 54c45e6d..88e7ddd3 100644 --- a/examples/1004-multiple-boards.example +++ b/examples/1004-multiple-boards.example @@ -1,25 +1,25 @@ ===== id 1004 -===== Name -Multiple Boards - -===== Description -You can have multiple boards on the same page. - +===== Name +Multiple Boards + +===== Description +You can have multiple boards on the same page. + ===== CSS .small-board { display: inline-block; margin-right: 5px; width: 200px; } - + ===== HTML
- -===== JS + +===== JS var board1 = Chessboard('board1', { position: 'start', showNotation: false diff --git a/examples/2000-config-position.example b/examples/2000-config-position.example index ed5ba568..81e0d661 100644 --- a/examples/2000-config-position.example +++ b/examples/2000-config-position.example @@ -1,17 +1,17 @@ ===== id 2000 -===== Name -Start Position - -===== Description -Set the position property to 'start' to initialize the board to the start position. - -===== HTML -
- -===== JS -var config = { - position: 'start' +===== Name +Start Position + +===== Description +Set the position property to 'start' to initialize the board to the start position. + +===== HTML +
+ +===== JS +var config = { + position: 'start' } -var board = Chessboard('myBoard', config) +var board = Chessboard('myBoard', config) diff --git a/examples/2001-config-orientation.example b/examples/2001-config-orientation.example index 1ce4048b..e8ec9cdc 100644 --- a/examples/2001-config-orientation.example +++ b/examples/2001-config-orientation.example @@ -1,18 +1,18 @@ ===== id 2001 -===== Name -Orientation - -===== Description -Use the orientation property to set board orientation. - -===== HTML -
- -===== JS -var config = { - orientation: 'black', - position: 'start' +===== Name +Orientation + +===== Description +Use the orientation property to set board orientation. + +===== HTML +
+ +===== JS +var config = { + orientation: 'black', + position: 'start' } -var board = Chessboard('myBoard', config) +var board = Chessboard('myBoard', config) diff --git a/examples/2002-config-notation.example b/examples/2002-config-notation.example index a4585bed..c188ce44 100644 --- a/examples/2002-config-notation.example +++ b/examples/2002-config-notation.example @@ -1,18 +1,18 @@ ===== id 2002 -===== Name -Notation - -===== Description -Use the showNotation property to turn board notation on or off. - -===== HTML -
- -===== JS -var config = { - showNotation: false, - position: 'start' +===== Name +Notation + +===== Description +Use the showNotation property to turn board notation on or off. + +===== HTML +
+ +===== JS +var config = { + showNotation: false, + position: 'start' } -var board = Chessboard('myBoard', config) +var board = Chessboard('myBoard', config) diff --git a/examples/2003-draggable-snapback.example b/examples/2003-draggable-snapback.example index 194e8580..71ffedb9 100644 --- a/examples/2003-draggable-snapback.example +++ b/examples/2003-draggable-snapback.example @@ -1,19 +1,19 @@ ===== id 2003 -===== Name -Draggable Snapback - -===== Description -Set draggable to true to allow drag and drop of pieces. Pieces will return to their original square when dropped off the board (ie: the default for dropOffBoard is 'snapback'). - -===== HTML -
- -===== JS -var config = { - draggable: true, - dropOffBoard: 'snapback', // this is the default - position: 'start' +===== Name +Draggable Snapback + +===== Description +Set draggable to true to allow drag and drop of pieces. Pieces will return to their original square when dropped off the board (ie: the default for dropOffBoard is 'snapback'). + +===== HTML +
+ +===== JS +var config = { + draggable: true, + dropOffBoard: 'snapback', // this is the default + position: 'start' } -var board = Chessboard('myBoard', config) +var board = Chessboard('myBoard', config) diff --git a/examples/3000-get-position.example b/examples/3000-get-position.example index 6aadc63d..eecf76fe 100644 --- a/examples/3000-get-position.example +++ b/examples/3000-get-position.example @@ -1,17 +1,17 @@ ===== id 3000 -===== Name -Get Position - -===== Description -Use the position and fen methods to retrieve the current position of the board. - -===== HTML -
+===== Name +Get Position + +===== Description +Use the position and fen methods to retrieve the current position of the board. + +===== HTML +
- -===== JS + +===== JS var config = { draggable: true, position: 'start' diff --git a/examples/3001-set-position.example b/examples/3001-set-position.example index e999f107..3194466b 100644 --- a/examples/3001-set-position.example +++ b/examples/3001-set-position.example @@ -1,19 +1,19 @@ ===== id 3001 -===== Name -Set Position - -===== Description -Use the start and position methods to set the board position. - -===== HTML -
+===== Name +Set Position + +===== Description +Use the start and position methods to set the board position. + +===== HTML +
- -===== JS + +===== JS var board = Chessboard('myBoard') $('#setRuyLopezBtn').on('click', function () { diff --git a/examples/3002-set-position-instant.example b/examples/3002-set-position-instant.example index 08e5ad15..283e4d44 100644 --- a/examples/3002-set-position-instant.example +++ b/examples/3002-set-position-instant.example @@ -1,19 +1,19 @@ ===== id 3002 -===== Name -Set Position Instantly - -===== Description -Pass false as the second argument to the start and position methods to set the board position instantly. - -===== HTML -
+===== Name +Set Position Instantly + +===== Description +Pass false as the second argument to the start and position methods to set the board position instantly. + +===== HTML +
- -===== JS + +===== JS var board = Chessboard('myBoard') $('#setRuyLopezBtn').on('click', function () { diff --git a/examples/3003-clear.example b/examples/3003-clear.example index d1243b68..2effbb08 100644 --- a/examples/3003-clear.example +++ b/examples/3003-clear.example @@ -1,19 +1,19 @@ ===== id 3003 -===== Name -Clear Board - -===== Description -Use the clear method to remove all the pieces from the board. - -===== HTML -
+===== Name +Clear Board + +===== Description +Use the clear method to remove all the pieces from the board. + +===== HTML +
- -===== JS + +===== JS var board = Chessboard('myBoard', 'start') $('#clearBoardBtn').on('click', board.clear) diff --git a/examples/3004-move-pieces.example b/examples/3004-move-pieces.example index c380527d..89956e59 100644 --- a/examples/3004-move-pieces.example +++ b/examples/3004-move-pieces.example @@ -1,19 +1,19 @@ ===== id 3004 -===== Name -Move Pieces - -===== Description -Use the move method to make one or more moves on the board. - -===== HTML -
+===== Name +Move Pieces + +===== Description +Use the move method to make one or more moves on the board. + +===== HTML +
-===== JS +===== JS var board = Chessboard('myBoard', 'start') $('#move1Btn').on('click', function () { diff --git a/examples/3005-orientation.example b/examples/3005-orientation.example index b3221564..a64101f2 100644 --- a/examples/3005-orientation.example +++ b/examples/3005-orientation.example @@ -1,21 +1,21 @@ ===== id 3005 -===== Name -Orientation - -===== Description -Use the orientation method to retrieve and set the orientation. Use the flip method to flip orientation. - -===== HTML -
+===== Name +Orientation + +===== Description +Use the orientation method to retrieve and set the orientation. Use the flip method to flip orientation. + +===== HTML +

-===== JS +===== JS var ruyLopez = 'r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R' var board = Chessboard('myBoard', ruyLopez) diff --git a/examples/4000-onchange.example b/examples/4000-onchange.example index bc8c60da..ca06e63e 100644 --- a/examples/4000-onchange.example +++ b/examples/4000-onchange.example @@ -1,18 +1,18 @@ ===== id 4000 -===== Name -onChange - -===== Description +===== Name +onChange + +===== Description The onChange event fires when the board position changes. - -===== HTML + +===== HTML
-===== JS +===== JS function onChange (oldPos, newPos) { console.log('Position changed:') console.log('Old position: ' + Chessboard.objToFen(oldPos)) diff --git a/examples/5004-piece-highlight1.example b/examples/5004-piece-highlight1.example index 5195335f..2536f59f 100644 --- a/examples/5004-piece-highlight1.example +++ b/examples/5004-piece-highlight1.example @@ -1,23 +1,23 @@ ===== id 5004 -===== Name -Piece Highlighting 1 - -===== Description -Use CSS to show piece highlighting. - -===== HTML - -
- +
+ ===== JS // NOTE: this example uses the chess.js library: // https://github.com/jhlywa/chess.js diff --git a/lib/chessboard.css b/lib/chessboard.css index 27ffdccb..2add196e 100644 --- a/lib/chessboard.css +++ b/lib/chessboard.css @@ -1,54 +1,54 @@ /*! chessboard.js v@VERSION | (c) 2019 Chris Oakman | MIT License chessboardjs.com/license */ - + .clearfix-7da63 { - clear: both; -} - + clear: both; +} + .board-b72b1 { border: 2px solid #404040; box-sizing: content-box; -} - +} + .square-55d63 { - float: left; - position: relative; - - /* disable any native browser highlighting */ - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - + float: left; + position: relative; + + /* disable any native browser highlighting */ + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + .white-1e1d7 { - background-color: #f0d9b5; - color: #b58863; -} - + background-color: #f0d9b5; + color: #b58863; +} + .black-3c85d { - background-color: #b58863; - color: #f0d9b5; -} + background-color: #b58863; + color: #f0d9b5; +} .highlight1-32417, .highlight2-9c5d2 { - box-shadow: inset 0 0 3px 3px yellow; -} + box-shadow: inset 0 0 3px 3px yellow; +} -.notation-322f9 { - cursor: default; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - position: absolute; +.notation-322f9 { + cursor: default; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + position: absolute; } -.alpha-d2270 { - bottom: 1px; - right: 3px; +.alpha-d2270 { + bottom: 1px; + right: 3px; } -.numeric-fc462 { - top: 2px; - left: 2px; +.numeric-fc462 { + top: 2px; + left: 2px; } From a30609ca3ca6e05f7d67b9042b62ada467528ed0 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 02:15:01 +0300 Subject: [PATCH 05/24] Prevent scrolling when moving spare piece --- lib/chessboard.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/chessboard.js b/lib/chessboard.js index 57659cdb..fe544a94 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -1675,6 +1675,8 @@ function constructor (containerElOrString, config) { var piece = $(this).attr('data-piece') e = e.originalEvent + e.preventDefault() + beginDraggingPiece( 'spare', piece, From 7afe40178b006bf42437ac127b83757ae116973c Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 02:58:25 +0300 Subject: [PATCH 06/24] Spare pieces count --- lib/chessboard.css | 22 +++ lib/chessboard.js | 370 ++++++++++++++++++++++++++++----------------- 2 files changed, 256 insertions(+), 136 deletions(-) diff --git a/lib/chessboard.css b/lib/chessboard.css index 2add196e..431e765b 100644 --- a/lib/chessboard.css +++ b/lib/chessboard.css @@ -52,3 +52,25 @@ top: 2px; left: 2px; } + +.piece-wrapper { + position: relative; + display: inline-block; +} + +.spare-count { + border: 1px solid #ccc; + padding: 0 4px; + border-radius: 37%; + font-size: 12px; + position: absolute; + z-index: 1; + background: #fff; + right: 0; + bottom: 1px; +} + +.spare-pieces-7492f { + display: flex; + justify-content: center; +} \ No newline at end of file diff --git a/lib/chessboard.js b/lib/chessboard.js index fe544a94..3b7455ae 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -52,7 +52,7 @@ CSS['white'] = 'white-1e1d7' // Misc Util Functions // --------------------------------------------------------------------------- -function throttle (f, interval, scope) { +function throttle(f, interval, scope) { var timeout = 0 var shouldFire = false var args = [] @@ -91,28 +91,28 @@ function throttle (f, interval, scope) { // } // } -function uuid () { +function uuid() { return 'xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx'.replace(/x/g, function (c) { var r = (Math.random() * 16) | 0 return r.toString(16) }) } -function deepCopy (thing) { +function deepCopy(thing) { return JSON.parse(JSON.stringify(thing)) } -function parseSemVer (version) { +function parseSemVer(version) { var tmp = version.split('.') return { major: parseInt(tmp[0], 10), minor: parseInt(tmp[1], 10), - patch: parseInt(tmp[2], 10) + patch: parseInt(tmp[2], 10), } } // returns true if version is >= minimum -function validSemanticVersion (version, minimum) { +function validSemanticVersion(version, minimum) { version = parseSemVer(version) minimum = parseSemVer(minimum) @@ -124,7 +124,7 @@ function validSemanticVersion (version, minimum) { return versionNum >= minimumNum } -function interpolateTemplate (str, obj) { +function interpolateTemplate(str, obj) { for (var key in obj) { if (!obj.hasOwnProperty(key)) continue var keyTemplateStr = '{' + key + '}' @@ -149,29 +149,29 @@ if (RUN_ASSERTS) { // Predicates // --------------------------------------------------------------------------- -function isString (s) { +function isString(s) { return typeof s === 'string' } -function isFunction (f) { +function isFunction(f) { return typeof f === 'function' } -function isInteger (n) { +function isInteger(n) { return typeof n === 'number' && isFinite(n) && Math.floor(n) === n } -function validAnimationSpeed (speed) { +function validAnimationSpeed(speed) { if (speed === 'fast' || speed === 'slow') return true if (!isInteger(speed)) return false return speed >= 0 } -function validThrottleRate (rate) { +function validThrottleRate(rate) { return isInteger(rate) && rate >= 1 } -function validMove (move) { +function validMove(move) { // move should be a string if (!isString(move)) return false @@ -182,7 +182,7 @@ function validMove (move) { return validSquare(squares[0]) && validSquare(squares[1]) } -function validSquare (square) { +function validSquare(square) { return isString(square) && square.search(/^[a-h][1-8]$/) !== -1 } @@ -197,7 +197,7 @@ if (RUN_ASSERTS) { console.assert(!validSquare({})) } -function validPieceCode (code) { +function validPieceCode(code) { return isString(code) && code.search(/^[bw][KQRNBP]$/) !== -1 } @@ -214,7 +214,7 @@ if (RUN_ASSERTS) { console.assert(!validPieceCode({})) } -function validFen (fen) { +function validFen(fen) { if (!isString(fen)) return false // cut off any move, castling, etc info from the end @@ -242,13 +242,13 @@ if (RUN_ASSERTS) { console.assert(validFen(START_FEN)) console.assert(validFen('8/8/8/8/8/8/8/8')) console.assert( - validFen('r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R') + validFen('r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R'), ) console.assert( - validFen('3r3r/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1') + validFen('3r3r/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1'), ) console.assert( - !validFen('3r3z/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1') + !validFen('3r3z/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1'), ) console.assert(!validFen('anbqkbnr/8/8/8/8/8/PPPPPPPP/8')) console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/')) @@ -258,7 +258,7 @@ if (RUN_ASSERTS) { console.assert(!validFen({})) } -function validPositionObject (pos) { +function validPositionObject(pos) { if (!$.isPlainObject(pos)) return false for (var i in pos) { @@ -284,11 +284,11 @@ if (RUN_ASSERTS) { console.assert(!validPositionObject(START_FEN)) } -function isTouchDevice () { +function isTouchDevice() { return 'ontouchstart' in document.documentElement } -function validJQueryVersion () { +function validJQueryVersion() { return ( typeof $ && $.fn && @@ -302,7 +302,7 @@ function validJQueryVersion () { // --------------------------------------------------------------------------- // convert FEN piece code to bP, wK, etc -function fenToPieceCode (piece) { +function fenToPieceCode(piece) { // black piece if (piece.toLowerCase() === piece) { return 'b' + piece.toUpperCase() @@ -313,7 +313,7 @@ function fenToPieceCode (piece) { } // convert bP, wK, etc code to FEN structure -function pieceCodeToFen (piece) { +function pieceCodeToFen(piece) { var pieceCodeLetters = piece.split('') // white piece @@ -327,7 +327,7 @@ function pieceCodeToFen (piece) { // convert FEN string to position object // returns false if the FEN string is invalid -function fenToObj (fen) { +function fenToObj(fen) { if (!validFen(fen)) return false // cut off any move, castling, etc info from the end @@ -364,7 +364,7 @@ function fenToObj (fen) { // position object to FEN string // returns false if the obj is not a valid position object -function objToFen (obj) { +function objToFen(obj) { if (!validPositionObject(obj)) return false var fen = '' @@ -402,16 +402,16 @@ if (RUN_ASSERTS) { console.assert(objToFen({ a2: 'wP', b2: 'bP' }) === '8/8/8/8/8/8/Pp6/8') } -function squeezeFenEmptySquares (fen) { +function squeezeFenEmptySquares(fen) { return fen.replace(/1{2,8}/g, ({ length }) => length) } -function expandFenEmptySquares (fen) { +function expandFenEmptySquares(fen) { return fen.replace(/[2-8]/g, (length) => '1'.repeat(Number(length))) } // returns the distance between two squares -function squareDistance (squareA, squareB) { +function squareDistance(squareA, squareB) { var squareAArray = squareA.split('') var squareAx = COLUMNS.indexOf(squareAArray[0]) + 1 var squareAy = parseInt(squareAArray[1], 10) @@ -429,7 +429,7 @@ function squareDistance (squareA, squareB) { // returns the square of the closest instance of piece // returns false if no instance of piece is found in position -function findClosestPiece (position, piece, square) { +function findClosestPiece(position, piece, square) { // create array of closest squares from square var closestSquares = createRadius(square) @@ -446,7 +446,7 @@ function findClosestPiece (position, piece, square) { } // returns an array of closest squares from square -function createRadius (square) { +function createRadius(square) { var squares = [] // calculate distance of all squares @@ -459,7 +459,7 @@ function createRadius (square) { squares.push({ square: s, - distance: squareDistance(square, s) + distance: squareDistance(square, s), }) } } @@ -480,7 +480,7 @@ function createRadius (square) { // given a position and a set of moves, return a new position // with the moves executed -function calculatePositionFromMoves (position, moves) { +function calculatePositionFromMoves(position, moves) { var newPosition = deepCopy(position) for (var i in moves) { @@ -503,17 +503,19 @@ function calculatePositionFromMoves (position, moves) { // HTML // --------------------------------------------------------------------------- -function buildContainerHTML (hasSparePieces) { +function buildContainerHTML(hasSparePieces) { var html = '
' if (hasSparePieces) { - html += '
' + html += + '
' } html += '
' if (hasSparePieces) { - html += '
' + html += + '
' } html += '
' @@ -525,7 +527,7 @@ function buildContainerHTML (hasSparePieces) { // Config // --------------------------------------------------------------------------- -function expandConfigArgumentShorthand (config) { +function expandConfigArgumentShorthand(config) { if (config === 'start') { config = { position: deepCopy(START_POSITION) } } else if (validFen(config)) { @@ -541,7 +543,7 @@ function expandConfigArgumentShorthand (config) { } // validate config / set default options -function expandConfig (config) { +function expandConfig(config) { // default for orientation is white if (config.orientation !== 'black') config.orientation = 'white' @@ -565,18 +567,31 @@ function expandConfig (config) { !config.hasOwnProperty('pieceTheme') || (!isString(config.pieceTheme) && !isFunction(config.pieceTheme)) ) { - config.pieceTheme = 'https://chessboardjs.com/img/chesspieces/wikipedia/{piece}.png' + config.pieceTheme = + 'https://chessboardjs.com/img/chesspieces/wikipedia/{piece}.png' } // animation speeds - if (!validAnimationSpeed(config.appearSpeed)) { config.appearSpeed = DEFAULT_APPEAR_SPEED } - if (!validAnimationSpeed(config.moveSpeed)) { config.moveSpeed = DEFAULT_MOVE_SPEED } - if (!validAnimationSpeed(config.snapbackSpeed)) { config.snapbackSpeed = DEFAULT_SNAPBACK_SPEED } - if (!validAnimationSpeed(config.snapSpeed)) { config.snapSpeed = DEFAULT_SNAP_SPEED } - if (!validAnimationSpeed(config.trashSpeed)) { config.trashSpeed = DEFAULT_TRASH_SPEED } + if (!validAnimationSpeed(config.appearSpeed)) { + config.appearSpeed = DEFAULT_APPEAR_SPEED + } + if (!validAnimationSpeed(config.moveSpeed)) { + config.moveSpeed = DEFAULT_MOVE_SPEED + } + if (!validAnimationSpeed(config.snapbackSpeed)) { + config.snapbackSpeed = DEFAULT_SNAPBACK_SPEED + } + if (!validAnimationSpeed(config.snapSpeed)) { + config.snapSpeed = DEFAULT_SNAP_SPEED + } + if (!validAnimationSpeed(config.trashSpeed)) { + config.trashSpeed = DEFAULT_TRASH_SPEED + } // throttle rate - if (!validThrottleRate(config.dragThrottleRate)) { config.dragThrottleRate = DEFAULT_DRAG_THROTTLE_RATE } + if (!validThrottleRate(config.dragThrottleRate)) { + config.dragThrottleRate = DEFAULT_DRAG_THROTTLE_RATE + } return config } @@ -586,7 +601,7 @@ function expandConfig (config) { // --------------------------------------------------------------------------- // check for a compatible version of jQuery -function checkJQuery () { +function checkJQuery() { if (!validJQueryVersion()) { var errorMsg = 'Chessboard Error 1005: Unable to find a valid version of jQuery. ' + @@ -604,7 +619,7 @@ function checkJQuery () { } // return either boolean false or the $container element -function checkContainerArg (containerElOrString) { +function checkContainerArg(containerElOrString) { if (containerElOrString === '') { var errorMsg1 = 'Chessboard Error 1001: ' + @@ -642,7 +657,7 @@ function checkContainerArg (containerElOrString) { // Constructor // --------------------------------------------------------------------------- -function constructor (containerElOrString, config) { +function constructor(containerElOrString, config) { // first things first: check basic dependencies if (!checkJQuery()) return null var $container = checkContainerArg(containerElOrString) @@ -673,6 +688,7 @@ function constructor (containerElOrString, config) { var draggedPieceSource = null var isDragging = false var sparePiecesElsIds = {} + var sparePiecesCountElsIds = {} var squareElsIds = {} var squareElsOffsets = {} var squareSize = 16 @@ -681,7 +697,30 @@ function constructor (containerElOrString, config) { // Validation / Errors // ------------------------------------------------------------------------- - function error (code, msg, obj) { + function validSpareCounts(counts) { + if ( + typeof counts !== 'object' || + Object.getOwnPropertyNames(counts).length === 0 + ) { + return false + } + + for (var i in counts) { + if (isNaN(counts[i])) { + return false + } + } + ;['w', 'b'].forEach(function (color) { + ;['K', 'Q', 'R', 'B', 'N', 'P'].forEach(function (kind) { + if (!counts.hasOwnProperty(color + kind)) { + counts[color + kind] = 0 + } + }) + }) + return true + } + + function error(code, msg, obj) { // do nothing if showErrors is not set if ( config.hasOwnProperty('showErrors') !== true || @@ -720,7 +759,7 @@ function constructor (containerElOrString, config) { } } - function setInitialState () { + function setInitialState() { currentOrientation = config.orientation // make sure position is valid @@ -735,6 +774,30 @@ function constructor (containerElOrString, config) { error(7263, 'Invalid value passed to config.position.', config.position) } } + + //spare piece counts + if (config.hasOwnProperty('spareCounts') === true) { + if (config.spareCounts === 'default') { + config.spareCounts = { + wK: 0, + wQ: 0, + wR: 0, + wB: 0, + wN: 0, + wP: 0, + bK: 0, + bQ: 0, + bR: 0, + bB: 0, + bN: 0, + bP: 0, + } + } else if (!validSpareCounts(config.spareCounts)) { + config.spareCounts = false + } + } else { + config.spareCounts = false + } } // ------------------------------------------------------------------------- @@ -746,7 +809,7 @@ function constructor (containerElOrString, config) { // get the width of the container element (could be anything), reduce by 1 for // fudge factor, and then keep reducing until we find an exact mod 8 for // our square size - function calculateSquareSize () { + function calculateSquareSize() { var containerWidth = parseInt($container.width(), 10) // defensive, prevent infinite loop @@ -765,7 +828,7 @@ function constructor (containerElOrString, config) { } // create random IDs for elements - function createElIds () { + function createElIds() { // squares on the board for (var i = 0; i < COLUMNS.length; i++) { for (var j = 1; j <= 8; j++) { @@ -781,6 +844,8 @@ function constructor (containerElOrString, config) { var blackPiece = 'b' + pieces[i] sparePiecesElsIds[whitePiece] = whitePiece + '-' + uuid() sparePiecesElsIds[blackPiece] = blackPiece + '-' + uuid() + sparePiecesCountElsIds[whitePiece] = 'count' + whitePiece + ' - ' + uuid() + sparePiecesCountElsIds[blackPiece] = 'count' + blackPiece + ' - ' + uuid() } } @@ -788,7 +853,7 @@ function constructor (containerElOrString, config) { // Markup Building // ------------------------------------------------------------------------- - function buildBoardHTML (orientation) { + function buildBoardHTML(orientation) { if (orientation !== 'black') { orientation = 'white' } @@ -861,7 +926,7 @@ function constructor (containerElOrString, config) { return interpolateTemplate(html, CSS) } - function buildPieceImgSrc (piece) { + function buildPieceImgSrc(piece) { if (isFunction(config.pieceTheme)) { return config.pieceTheme(piece) } @@ -875,8 +940,21 @@ function constructor (containerElOrString, config) { return '' } - function buildPieceHTML (piece, hidden, id) { - var html = '' + config.spareCounts[piece] + '' + } + + function buildPieceHTML(piece, hidden, id, is_spare) { + var html = + '
', CSS) } - function buildSparePiecesHTML (color) { + function buildSparePiecesHTML(color) { var pieces = ['wK', 'wQ', 'wR', 'wB', 'wN', 'wP'] if (color === 'black') { pieces = ['bK', 'bQ', 'bR', 'bB', 'bN', 'bP'] @@ -910,7 +992,12 @@ function constructor (containerElOrString, config) { var html = '' for (var i = 0; i < pieces.length; i++) { - html += buildPieceHTML(pieces[i], false, sparePiecesElsIds[pieces[i]]) + html += buildPieceHTML( + pieces[i], + false, + sparePiecesElsIds[pieces[i]], + true, + ) } return html @@ -920,7 +1007,7 @@ function constructor (containerElOrString, config) { // Animations // ------------------------------------------------------------------------- - function animateSquareToSquare (src, dest, piece, completeFn) { + function animateSquareToSquare(src, dest, piece, completeFn) { // get information about the source and destination squares var $srcSquare = $('#' + squareElsIds[src]) var srcSquarePosition = $srcSquare.offset() @@ -936,13 +1023,13 @@ function constructor (containerElOrString, config) { display: '', position: 'absolute', top: srcSquarePosition.top, - left: srcSquarePosition.left + left: srcSquarePosition.left, }) // remove original piece from source square $srcSquare.find('.' + CSS.piece).remove() - function onFinishAnimation1 () { + function onFinishAnimation1() { // add the "real" piece to the destination square $destSquare.append(buildPieceHTML(piece)) @@ -958,12 +1045,12 @@ function constructor (containerElOrString, config) { // animate the piece to the destination square var opts = { duration: config.moveSpeed, - complete: onFinishAnimation1 + complete: onFinishAnimation1, } $animatedPiece.animate(destSquarePosition, opts) } - function animateSparePieceToSquare (piece, dest, completeFn) { + function animateSparePieceToSquare(piece, dest, completeFn) { var srcOffset = $('#' + sparePiecesElsIds[piece]).offset() var $destSquare = $('#' + squareElsIds[dest]) var destOffset = $destSquare.offset() @@ -976,11 +1063,11 @@ function constructor (containerElOrString, config) { display: '', position: 'absolute', left: srcOffset.left, - top: srcOffset.top + top: srcOffset.top, }) // on complete - function onFinishAnimation2 () { + function onFinishAnimation2() { // add the "real" piece to the destination square $destSquare.find('.' + CSS.piece).remove() $destSquare.append(buildPieceHTML(piece)) @@ -997,17 +1084,17 @@ function constructor (containerElOrString, config) { // animate the piece to the destination square var opts = { duration: config.moveSpeed, - complete: onFinishAnimation2 + complete: onFinishAnimation2, } $animatedPiece.animate(destOffset, opts) } // execute an array of animations - function doAnimations (animations, oldPos, newPos) { + function doAnimations(animations, oldPos, newPos) { if (animations.length === 0) return var numFinished = 0 - function onFinishAnimation3 () { + function onFinishAnimation3() { // exit if all the animations aren't finished numFinished = numFinished + 1 if (numFinished !== animations.length) return @@ -1027,7 +1114,7 @@ function constructor (containerElOrString, config) { if (animation.type === 'clear') { $('#' + squareElsIds[animation.square] + ' .' + CSS.piece).fadeOut( config.trashSpeed, - onFinishAnimation3 + onFinishAnimation3, ) // add a piece with no spare pieces - fade the piece onto the square @@ -1042,7 +1129,7 @@ function constructor (containerElOrString, config) { animateSparePieceToSquare( animation.piece, animation.square, - onFinishAnimation3 + onFinishAnimation3, ) // move a piece from squareA to squareB @@ -1051,7 +1138,7 @@ function constructor (containerElOrString, config) { animation.source, animation.destination, animation.piece, - onFinishAnimation3 + onFinishAnimation3, ) } } @@ -1059,7 +1146,7 @@ function constructor (containerElOrString, config) { // calculate an array of animations that need to happen in order to get // from pos1 to pos2 - function calculateAnimations (pos1, pos2) { + function calculateAnimations(pos1, pos2) { // make copies of both pos1 = deepCopy(pos1) pos2 = deepCopy(pos2) @@ -1087,7 +1174,7 @@ function constructor (containerElOrString, config) { type: 'move', source: closestPiece, destination: i, - piece: pos2[i] + piece: pos2[i], }) delete pos1[closestPiece] @@ -1103,7 +1190,7 @@ function constructor (containerElOrString, config) { animations.push({ type: 'add', square: i, - piece: pos2[i] + piece: pos2[i], }) delete pos2[i] @@ -1120,7 +1207,7 @@ function constructor (containerElOrString, config) { animations.push({ type: 'clear', square: i, - piece: pos1[i] + piece: pos1[i], }) delete pos1[i] @@ -1133,7 +1220,7 @@ function constructor (containerElOrString, config) { // Control Flow // ------------------------------------------------------------------------- - function drawPositionInstant () { + function drawPositionInstant() { // clear the board $board.find('.' + CSS.piece).remove() @@ -1145,9 +1232,9 @@ function constructor (containerElOrString, config) { } } - function drawBoard () { + function drawBoard() { $board.html( - buildBoardHTML(currentOrientation, squareSize, config.showNotation) + buildBoardHTML(currentOrientation, squareSize, config.showNotation), ) drawPositionInstant() @@ -1162,7 +1249,7 @@ function constructor (containerElOrString, config) { } } - function setCurrentPosition (position) { + function setCurrentPosition(position) { var oldPos = deepCopy(currentPosition) var newPos = deepCopy(position) var oldFen = objToFen(oldPos) @@ -1180,7 +1267,7 @@ function constructor (containerElOrString, config) { currentPosition = position } - function isXYOnSquare (x, y) { + function isXYOnSquare(x, y) { for (var i in squareElsOffsets) { if (!squareElsOffsets.hasOwnProperty(i)) continue @@ -1199,7 +1286,7 @@ function constructor (containerElOrString, config) { } // records the XY coords of every square into memory - function captureSquareOffsets () { + function captureSquareOffsets() { squareElsOffsets = {} for (var i in squareElsIds) { @@ -1209,13 +1296,13 @@ function constructor (containerElOrString, config) { } } - function removeSquareHighlights () { + function removeSquareHighlights() { $board .find('.' + CSS.square) .removeClass(CSS.highlight1 + ' ' + CSS.highlight2) } - function snapbackDraggedPiece () { + function snapbackDraggedPiece() { // there is no "snapback" for spare pieces if (draggedPieceSource === 'spare') { trashDraggedPiece() @@ -1225,7 +1312,7 @@ function constructor (containerElOrString, config) { removeSquareHighlights() // animation complete - function complete () { + function complete() { drawPositionInstant() $draggedPiece.css('display', 'none') @@ -1235,20 +1322,20 @@ function constructor (containerElOrString, config) { draggedPiece, draggedPieceSource, deepCopy(currentPosition), - currentOrientation + currentOrientation, ) } } // get source square position var sourceSquarePosition = $( - '#' + squareElsIds[draggedPieceSource] + '#' + squareElsIds[draggedPieceSource], ).offset() // animate the piece to the target square var opts = { duration: config.snapbackSpeed, - complete: complete + complete: complete, } $draggedPiece.animate(sourceSquarePosition, opts) @@ -1256,7 +1343,7 @@ function constructor (containerElOrString, config) { isDragging = false } - function trashDraggedPiece () { + function trashDraggedPiece() { removeSquareHighlights() // remove the source piece @@ -1274,7 +1361,7 @@ function constructor (containerElOrString, config) { isDragging = false } - function dropDraggedPieceOnSquare (square) { + function dropDraggedPieceOnSquare(square) { removeSquareHighlights() // update position @@ -1287,7 +1374,7 @@ function constructor (containerElOrString, config) { var targetSquarePosition = $('#' + squareElsIds[square]).offset() // animation complete - function onAnimationComplete () { + function onAnimationComplete() { drawPositionInstant() $draggedPiece.css('display', 'none') @@ -1300,7 +1387,7 @@ function constructor (containerElOrString, config) { // snap the piece to the target square var opts = { duration: config.snapSpeed, - complete: onAnimationComplete + complete: onAnimationComplete, } $draggedPiece.animate(targetSquarePosition, opts) @@ -1308,17 +1395,20 @@ function constructor (containerElOrString, config) { isDragging = false } - function beginDraggingPiece (source, piece, x, y) { + function beginDraggingPiece(source, piece, x, y) { // run their custom onDragStart function // their custom onDragStart function can cancel drag start if ( - isFunction(config.onDragStart) && - config.onDragStart( - source, - piece, - deepCopy(currentPosition), - currentOrientation - ) === false + (isFunction(config.onDragStart) && + config.onDragStart( + source, + piece, + deepCopy(currentPosition), + currentOrientation, + ) === false) || + (source === 'spare' && + typeof config.spareCounts === 'object' && + config.spareCounts[piece] < 1) ) { return } @@ -1341,9 +1431,9 @@ function constructor (containerElOrString, config) { // create the dragged piece $draggedPiece.attr('src', buildPieceImgSrc(piece)).css({ display: '', - position: 'absolute', + position: 'fixed', left: x - squareSize / 2, - top: y - squareSize / 2 + top: y - squareSize / 2, }) if (source !== 'spare') { @@ -1355,11 +1445,11 @@ function constructor (containerElOrString, config) { } } - function updateDraggedPiece (x, y) { + function updateDraggedPiece(x, y) { // put the dragged piece over the mouse cursor $draggedPiece.css({ left: x - squareSize / 2, - top: y - squareSize / 2 + top: y - squareSize / 2, }) // get location @@ -1386,7 +1476,7 @@ function constructor (containerElOrString, config) { draggedPieceSource, draggedPiece, deepCopy(currentPosition), - currentOrientation + currentOrientation, ) } @@ -1394,7 +1484,7 @@ function constructor (containerElOrString, config) { draggedPieceLocation = location } - function stopDraggedPiece (location) { + function stopDraggedPiece(location) { // determine what the action should be var action = 'drop' if (location === 'offboard' && config.dropOffBoard === 'snapback') { @@ -1439,7 +1529,7 @@ function constructor (containerElOrString, config) { draggedPiece, newPosition, oldPosition, - currentOrientation + currentOrientation, ) if (result === 'snapback' || result === 'trash') { action = result @@ -1454,6 +1544,16 @@ function constructor (containerElOrString, config) { } else if (action === 'drop') { dropDraggedPieceOnSquare(location) } + if ( + config.spareCounts && + draggedPieceSource === 'spare' && + action === 'drop' + ) { + config.spareCounts[draggedPiece] -= 1 + var elem = (document.getElementById( + sparePiecesCountElsIds[draggedPiece], + ).innerText = config.spareCounts[draggedPiece]) + } } // ------------------------------------------------------------------------- @@ -1600,14 +1700,12 @@ function constructor (containerElOrString, config) { // set drag piece size $draggedPiece.css({ height: squareSize, - width: squareSize + width: squareSize, }) // spare pieces if (config.sparePieces) { - $container - .find('.' + CSS.sparePieces) - .css('paddingLeft', squareSize + boardBorderSize + 'px') + $container.css('paddingLeft', ($board.clientWidth - $container.offsetWidth) / 2 + 'px'); } // redraw the board @@ -1623,11 +1721,11 @@ function constructor (containerElOrString, config) { // Browser Events // ------------------------------------------------------------------------- - function stopDefault (evt) { + function stopDefault(evt) { evt.preventDefault() } - function mousedownSquare (evt) { + function mousedownSquare(evt) { // do nothing if we're not draggable if (!config.draggable) return @@ -1639,7 +1737,7 @@ function constructor (containerElOrString, config) { beginDraggingPiece(square, currentPosition[square], evt.pageX, evt.pageY) } - function touchstartSquare (e) { + function touchstartSquare(e) { // do nothing if we're not draggable if (!config.draggable) return @@ -1655,11 +1753,11 @@ function constructor (containerElOrString, config) { square, currentPosition[square], e.changedTouches[0].pageX, - e.changedTouches[0].pageY + e.changedTouches[0].pageY, ) } - function mousedownSparePiece (evt) { + function mousedownSparePiece(evt) { // do nothing if sparePieces is not enabled if (!config.sparePieces) return @@ -1668,7 +1766,7 @@ function constructor (containerElOrString, config) { beginDraggingPiece('spare', piece, evt.pageX, evt.pageY) } - function touchstartSparePiece (e) { + function touchstartSparePiece(e) { // do nothing if sparePieces is not enabled if (!config.sparePieces) return @@ -1676,16 +1774,16 @@ function constructor (containerElOrString, config) { e = e.originalEvent e.preventDefault() - + beginDraggingPiece( 'spare', piece, e.changedTouches[0].pageX, - e.changedTouches[0].pageY + e.changedTouches[0].pageY, ) } - function mousemoveWindow (evt) { + function mousemoveWindow(evt) { if (isDragging) { updateDraggedPiece(evt.pageX, evt.pageY) } @@ -1693,10 +1791,10 @@ function constructor (containerElOrString, config) { var throttledMousemoveWindow = throttle( mousemoveWindow, - config.dragThrottleRate + config.dragThrottleRate, ) - function touchmoveWindow (evt) { + function touchmoveWindow(evt) { // do nothing if we are not dragging a piece if (!isDragging) return @@ -1705,16 +1803,16 @@ function constructor (containerElOrString, config) { updateDraggedPiece( evt.originalEvent.changedTouches[0].pageX, - evt.originalEvent.changedTouches[0].pageY + evt.originalEvent.changedTouches[0].pageY, ) } var throttledTouchmoveWindow = throttle( touchmoveWindow, - config.dragThrottleRate + config.dragThrottleRate, ) - function mouseupWindow (evt) { + function mouseupWindow(evt) { // do nothing if we are not dragging a piece if (!isDragging) return @@ -1724,20 +1822,20 @@ function constructor (containerElOrString, config) { stopDraggedPiece(location) } - function touchendWindow (evt) { + function touchendWindow(evt) { // do nothing if we are not dragging a piece if (!isDragging) return // get the location var location = isXYOnSquare( evt.originalEvent.changedTouches[0].pageX, - evt.originalEvent.changedTouches[0].pageY + evt.originalEvent.changedTouches[0].pageY, ) stopDraggedPiece(location) } - function mouseenterSquare (evt) { + function mouseenterSquare(evt) { // do not fire this event if we are dragging a piece // NOTE: this should never happen, but it's a safeguard if (isDragging) return @@ -1762,11 +1860,11 @@ function constructor (containerElOrString, config) { square, piece, deepCopy(currentPosition), - currentOrientation + currentOrientation, ) } - function mouseleaveSquare (evt) { + function mouseleaveSquare(evt) { // do not fire this event if we are dragging a piece // NOTE: this should never happen, but it's a safeguard if (isDragging) return @@ -1791,7 +1889,7 @@ function constructor (containerElOrString, config) { square, piece, deepCopy(currentPosition), - currentOrientation + currentOrientation, ) } @@ -1799,7 +1897,7 @@ function constructor (containerElOrString, config) { // Initialization // ------------------------------------------------------------------------- - function addEvents () { + function addEvents() { // prevent "image drag" $('body').on('mousedown mousemove', '.' + CSS.piece, stopDefault) @@ -1808,7 +1906,7 @@ function constructor (containerElOrString, config) { $container.on( 'mousedown', '.' + CSS.sparePieces + ' .' + CSS.piece, - mousedownSparePiece + mousedownSparePiece, ) // mouse enter / leave square @@ -1828,7 +1926,7 @@ function constructor (containerElOrString, config) { $container.on( 'touchstart', '.' + CSS.sparePieces + ' .' + CSS.piece, - touchstartSparePiece + touchstartSparePiece, ) $window .on('touchmove', throttledTouchmoveWindow) @@ -1836,7 +1934,7 @@ function constructor (containerElOrString, config) { } } - function initDOM () { + function initDOM() { // create unique IDs for all the elements we will create createElIds() From 2f25ff96cf31e8d68c44fe900f94552730bd2e58 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 03:07:27 +0300 Subject: [PATCH 07/24] rename output files, reminder to add css --- README.md | 8 ++++++++ scripts/build.js | 8 ++++---- templates/download.mustache | 11 +++++++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d84bbe30..3008ca96 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,14 @@ import { Chessboard, fenToObj, objToFen } from "@discape/chessboardjs"; const { Chessboard, fenToObj, objToFen } = require("@discape/chessboardjs"); ``` +Be sure to include the css: + +```html + +``` + ## What is chessboard.js? chessboard.js is a standalone JavaScript Chess Board. It is designed to be "just diff --git a/scripts/build.js b/scripts/build.js index 768dbd12..b1034604 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -55,23 +55,23 @@ fs.makeTreeSync('dist') // copy lib files to dist/ fs.writeFileSync('dist/chessboard-' + version + '.css', cssSrc, encoding) fs.writeFileSync( - 'dist/chessboard-' + version + '.min.css', + 'dist/chessboard.min.css', minifiedCSS, encoding, ) fs.writeFileSync( - 'dist/chessboard-' + version + '.min.mjs', + 'dist/chessboard.min.mjs', mjs, encoding, ) fs.writeFileSync( - 'dist/chessboard-' + version + '.min.cjs', + 'dist/chessboard.min.cjs', cjs, encoding, ) fs.writeFileSync( - 'dist/chessboard-' + version + '.min.js', + 'dist/chessboard.min.js', banner() + browserjs, encoding, ) diff --git a/templates/download.mustache b/templates/download.mustache index 9ec7b327..a181cbdf 100644 --- a/templates/download.mustache +++ b/templates/download.mustache @@ -32,23 +32,26 @@ const { Chessboard, objToFen, fenToObj } = require("@discape/chessboardjs");
# using in code with ES6 import
 import { Chessboard, objToFen, fenToObj } from "@discape/chessboardjs";
 
+

Remember to include the css:

+
<link rel="stylesheet"
+      href="https://unpkg.com/@discape/chessboardjs/dist/chessboard.min.css"
+      crossorigin="anonymous">

Content Delivery Network

You can use chessboardjs via the unpkg CDN with the following links:

<link rel="stylesheet"
-      href="https://unpkg.com/@chrisoakman/chessboardjs@1.0.0/dist/chessboard-1.0.0.min.css"
+      href="https://unpkg.com/@discape/chessboardjs/dist/chessboard.min.css"
       integrity="sha384-q94+BZtLrkL1/ohfjR8c6L+A6qzNH9R2hBLwyoAfu3i/WCvQjzL2RQJ3uNHDISdU"
       crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"
         integrity="sha384-ZvpUoO/+PpLXR1lu4jmpXWu80pZlYUAfxl5NsBMWOEPSjUn/6Z/hRTt8+pR6L4N2"
         crossorigin="anonymous"></script>
 
-<script src="https://unpkg.com/@chrisoakman/chessboardjs@1.0.0/dist/chessboard-1.0.0.min.js"
-        integrity="sha384-8Vi8VHwn3vjQ9eUHUxex3JSN/NFqUg3QbPyX8kWyb93+8AC/pPWTzj+nHtbC5bxD"
+<script src="https://unpkg.com/@discape/chessboardjs/dist/chessboard.min.js"
         crossorigin="anonymous"></script>
-

Please note that jQuery is a required dependency of chessboard.js and must be loaded on your webpage before the chessboard-1.0.0.min.js file.

+

Please note that jQuery is a required dependency of chessboard.js and must be loaded on your webpage before the chessboard.min.js file.

From be20be4b0d72a95f88f683e21afb32d66deb1bf9 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 03:25:19 +0300 Subject: [PATCH 08/24] Config option to scale dragged piece --- lib/chessboard.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/chessboard.js b/lib/chessboard.js index 3b7455ae..86456d9f 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -1434,6 +1434,7 @@ function constructor(containerElOrString, config) { position: 'fixed', left: x - squareSize / 2, top: y - squareSize / 2, + transform: `scale(${typeof config.scaleDrag === "number" ? config.scaleDrag : 1})` }) if (source !== 'spare') { From e3f24fe5f4604cf26f8815aea8a5ece1661ebafe Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 12:18:47 +0300 Subject: [PATCH 09/24] update position before firing onChange --- lib/chessboard.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/chessboard.js b/lib/chessboard.js index 86456d9f..4457e439 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -507,15 +507,13 @@ function buildContainerHTML(hasSparePieces) { var html = '
' if (hasSparePieces) { - html += - '
' + html += '
' } html += '
' if (hasSparePieces) { - html += - '
' + html += '
' } html += '
' @@ -1258,13 +1256,13 @@ function constructor(containerElOrString, config) { // do nothing if no change in position if (oldFen === newFen) return + // update state + currentPosition = position + // run their onChange function if (isFunction(config.onChange)) { config.onChange(oldPos, newPos) } - - // update state - currentPosition = position } function isXYOnSquare(x, y) { @@ -1434,7 +1432,9 @@ function constructor(containerElOrString, config) { position: 'fixed', left: x - squareSize / 2, top: y - squareSize / 2, - transform: `scale(${typeof config.scaleDrag === "number" ? config.scaleDrag : 1})` + transform: `scale(${ + typeof config.scaleDrag === 'number' ? config.scaleDrag : 1 + })`, }) if (source !== 'spare') { @@ -1706,7 +1706,10 @@ function constructor(containerElOrString, config) { // spare pieces if (config.sparePieces) { - $container.css('paddingLeft', ($board.clientWidth - $container.offsetWidth) / 2 + 'px'); + $container.css( + 'paddingLeft', + ($board.clientWidth - $container.offsetWidth) / 2 + 'px', + ) } // redraw the board From 7e206fff87c2b004a8b8247613c108a01157174f Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 12:29:23 +0300 Subject: [PATCH 10/24] Fixed bug with duplicating piece when starting drag instantly after drop. --- lib/chessboard.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/chessboard.js b/lib/chessboard.js index 4457e439..51db5223 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -924,7 +924,31 @@ function constructor(containerElOrString, config) { return interpolateTemplate(html, CSS) } + var imgCache = {} + function cacheImages() { + var pieces = ['wK', 'wQ', 'wR', 'wB', 'wN', 'wP', 'bK', 'bQ', 'bR', 'bB', 'bN', 'bP']; + pieces.forEach(function(piece) { + var img = new Image() + img.onload = function() { + imgCache[piece] = getBase64Image(img) + } + img.src = buildPieceImgSrc(piece) + }) + + function getBase64Image(img) { + var canvas = document.createElement("canvas"); + canvas.width = img.width; + canvas.height = img.height; + var ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0); + var dataURL = canvas.toDataURL("image/png"); + return dataURL; + } + } + function buildPieceImgSrc(piece) { + if(imgCache[piece]) return imgCache[piece]; + if (isFunction(config.pieceTheme)) { return config.pieceTheme(piece) } @@ -1225,6 +1249,7 @@ function constructor(containerElOrString, config) { // add the pieces for (var i in currentPosition) { if (!currentPosition.hasOwnProperty(i)) continue + if (isDragging && draggedPieceSource == i) continue $('#' + squareElsIds[i]).append(buildPieceHTML(currentPosition[i])) } @@ -1970,6 +1995,7 @@ function constructor(containerElOrString, config) { // Initialization // ------------------------------------------------------------------------- + if (config.cacheImages) cacheImages(); setInitialState() initDOM() addEvents() From 31d3d7a0ad4b08f9a291ef049e734ce503bdfb18 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 13:03:01 +0300 Subject: [PATCH 11/24] unminified versions --- lib/chessboard.js | 2 +- scripts/build.js | 52 +++++++++++++++++++++++++---------------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/lib/chessboard.js b/lib/chessboard.js index 51db5223..bfe0693a 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -18,7 +18,7 @@ const ELLIPSIS = '…' const MINIMUM_JQUERY_VERSION = '1.8.3' const RUN_ASSERTS = true const START_FEN = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR' -var START_POSITION = fenToObj(START_FEN) +const START_POSITION = fenToObj(START_FEN) // default animation speeds const DEFAULT_APPEAR_SPEED = 200 diff --git a/scripts/build.js b/scripts/build.js index b1034604..620eb901 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -25,19 +25,35 @@ const minSrc = uglifyResult.code console.assert(!uglifyResult.error, 'error minifying JS: ' + uglifyResult.error) // TODO: need to remove the RUN_ASSERTS calls from the non-minified file -const mjs = fs +const mjsmin = fs .readFileSync('lib/chessboard.mjs', encoding) .replace('INSERTSOURCE', () => minSrc) .replace('@VERSION', version) -const cjs = fs +const cjsmin = fs .readFileSync('lib/chessboard.cjs', encoding) .replace('INSERTSOURCE', () => minSrc) .replace('@VERSION', version) -const browserjs = fs +const browserjsmin = fs .readFileSync('lib/chessboardbrowser.js', encoding) .replace('INSERTSOURCE', () => minSrc) .replace('@VERSION', version) + .replace('const ', 'var ') + .replace('let ', ' var ') +const mjs = fs + .readFileSync('lib/chessboard.mjs', encoding) + .replace('INSERTSOURCE', () => rawSrc) + .replace('@VERSION', version) +const cjs = fs + .readFileSync('lib/chessboard.cjs', encoding) + .replace('INSERTSOURCE', () => rawSrc) + .replace('@VERSION', version) +const browserjs = fs + .readFileSync('lib/chessboardbrowser.js', encoding) + .replace('INSERTSOURCE', () => rawSrc) + .replace('@VERSION', version) + .replace('const ', 'var ') + .replace('let ', ' var ') const minifiedCSS = csso.minify(cssSrc).css @@ -53,28 +69,16 @@ fs.removeSync('dist') fs.makeTreeSync('dist') // copy lib files to dist/ -fs.writeFileSync('dist/chessboard-' + version + '.css', cssSrc, encoding) -fs.writeFileSync( - 'dist/chessboard.min.css', - minifiedCSS, - encoding, -) +fs.writeFileSync('dist/chessboard.css', cssSrc, encoding) +fs.writeFileSync('dist/chessboard.min.css', minifiedCSS, encoding) -fs.writeFileSync( - 'dist/chessboard.min.mjs', - mjs, - encoding, -) -fs.writeFileSync( - 'dist/chessboard.min.cjs', - cjs, - encoding, -) -fs.writeFileSync( - 'dist/chessboard.min.js', - banner() + browserjs, - encoding, -) +fs.writeFileSync('dist/chessboard.min.mjs', mjsmin, encoding) +fs.writeFileSync('dist/chessboard.min.cjs', cjsmin, encoding) +fs.writeFileSync('dist/chessboard.min.js', banner() + browserjsmin, encoding) + +fs.writeFileSync('dist/chessboard.mjs', mjs, encoding) +fs.writeFileSync('dist/chessboard.cjs', cjs, encoding) +fs.writeFileSync('dist/chessboard.js', banner() + browserjs, encoding) function banner() { return ( From a2b84e72c2b78e484d2c8d12f0abc0eb373b63c9 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 13:17:36 +0300 Subject: [PATCH 12/24] add images to dist/, use unpkg cdn --- .gitignore | 2 +- README.md | 2 +- dist/img/chesspieces/alpha/bB.png | Bin 0 -> 2015 bytes dist/img/chesspieces/alpha/bK.png | Bin 0 -> 3327 bytes dist/img/chesspieces/alpha/bN.png | Bin 0 -> 2475 bytes dist/img/chesspieces/alpha/bP.png | Bin 0 -> 1294 bytes dist/img/chesspieces/alpha/bQ.png | Bin 0 -> 2591 bytes dist/img/chesspieces/alpha/bR.png | Bin 0 -> 1311 bytes dist/img/chesspieces/alpha/wB.png | Bin 0 -> 2710 bytes dist/img/chesspieces/alpha/wK.png | Bin 0 -> 2869 bytes dist/img/chesspieces/alpha/wN.png | Bin 0 -> 2636 bytes dist/img/chesspieces/alpha/wP.png | Bin 0 -> 1868 bytes dist/img/chesspieces/alpha/wQ.png | Bin 0 -> 3254 bytes dist/img/chesspieces/alpha/wR.png | Bin 0 -> 1838 bytes dist/img/chesspieces/uscf/bB.png | Bin 0 -> 2788 bytes dist/img/chesspieces/uscf/bK.png | Bin 0 -> 3201 bytes dist/img/chesspieces/uscf/bN.png | Bin 0 -> 2630 bytes dist/img/chesspieces/uscf/bP.png | Bin 0 -> 1280 bytes dist/img/chesspieces/uscf/bQ.png | Bin 0 -> 2812 bytes dist/img/chesspieces/uscf/bR.png | Bin 0 -> 952 bytes dist/img/chesspieces/uscf/wB.png | Bin 0 -> 3472 bytes dist/img/chesspieces/uscf/wK.png | Bin 0 -> 3407 bytes dist/img/chesspieces/uscf/wN.png | Bin 0 -> 3009 bytes dist/img/chesspieces/uscf/wP.png | Bin 0 -> 2045 bytes dist/img/chesspieces/uscf/wQ.png | Bin 0 -> 3934 bytes dist/img/chesspieces/uscf/wR.png | Bin 0 -> 1452 bytes dist/img/chesspieces/wikipedia/bB.png | Bin 0 -> 1405 bytes dist/img/chesspieces/wikipedia/bK.png | Bin 0 -> 3009 bytes dist/img/chesspieces/wikipedia/bK.svg | 12 ++++++++++++ dist/img/chesspieces/wikipedia/bN.png | Bin 0 -> 1875 bytes dist/img/chesspieces/wikipedia/bP.png | Bin 0 -> 777 bytes dist/img/chesspieces/wikipedia/bQ.png | Bin 0 -> 2648 bytes dist/img/chesspieces/wikipedia/bR.png | Bin 0 -> 748 bytes dist/img/chesspieces/wikipedia/wB.png | Bin 0 -> 2374 bytes dist/img/chesspieces/wikipedia/wK.png | Bin 0 -> 2823 bytes dist/img/chesspieces/wikipedia/wN.png | Bin 0 -> 2388 bytes dist/img/chesspieces/wikipedia/wP.png | Bin 0 -> 1571 bytes dist/img/chesspieces/wikipedia/wQ.png | Bin 0 -> 3812 bytes dist/img/chesspieces/wikipedia/wR.png | Bin 0 -> 1097 bytes lib/chessboard.js | 3 +-- scripts/build.js | 27 +++++++++++++------------- templates/download.mustache | 6 +++--- 42 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 dist/img/chesspieces/alpha/bB.png create mode 100644 dist/img/chesspieces/alpha/bK.png create mode 100644 dist/img/chesspieces/alpha/bN.png create mode 100644 dist/img/chesspieces/alpha/bP.png create mode 100644 dist/img/chesspieces/alpha/bQ.png create mode 100644 dist/img/chesspieces/alpha/bR.png create mode 100644 dist/img/chesspieces/alpha/wB.png create mode 100644 dist/img/chesspieces/alpha/wK.png create mode 100644 dist/img/chesspieces/alpha/wN.png create mode 100644 dist/img/chesspieces/alpha/wP.png create mode 100644 dist/img/chesspieces/alpha/wQ.png create mode 100644 dist/img/chesspieces/alpha/wR.png create mode 100644 dist/img/chesspieces/uscf/bB.png create mode 100644 dist/img/chesspieces/uscf/bK.png create mode 100644 dist/img/chesspieces/uscf/bN.png create mode 100644 dist/img/chesspieces/uscf/bP.png create mode 100644 dist/img/chesspieces/uscf/bQ.png create mode 100644 dist/img/chesspieces/uscf/bR.png create mode 100644 dist/img/chesspieces/uscf/wB.png create mode 100644 dist/img/chesspieces/uscf/wK.png create mode 100644 dist/img/chesspieces/uscf/wN.png create mode 100644 dist/img/chesspieces/uscf/wP.png create mode 100644 dist/img/chesspieces/uscf/wQ.png create mode 100644 dist/img/chesspieces/uscf/wR.png create mode 100644 dist/img/chesspieces/wikipedia/bB.png create mode 100644 dist/img/chesspieces/wikipedia/bK.png create mode 100644 dist/img/chesspieces/wikipedia/bK.svg create mode 100644 dist/img/chesspieces/wikipedia/bN.png create mode 100644 dist/img/chesspieces/wikipedia/bP.png create mode 100644 dist/img/chesspieces/wikipedia/bQ.png create mode 100644 dist/img/chesspieces/wikipedia/bR.png create mode 100644 dist/img/chesspieces/wikipedia/wB.png create mode 100644 dist/img/chesspieces/wikipedia/wK.png create mode 100644 dist/img/chesspieces/wikipedia/wN.png create mode 100644 dist/img/chesspieces/wikipedia/wP.png create mode 100644 dist/img/chesspieces/wikipedia/wQ.png create mode 100644 dist/img/chesspieces/wikipedia/wR.png diff --git a/.gitignore b/.gitignore index f31703fb..b3aa7557 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # git diff files *.diff -dist/ +dist/build node_modules/ website/*.html diff --git a/README.md b/README.md index 3008ca96..b2a41923 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Be sure to include the css: ```html ``` diff --git a/dist/img/chesspieces/alpha/bB.png b/dist/img/chesspieces/alpha/bB.png new file mode 100644 index 0000000000000000000000000000000000000000..c5852f4c7c27e43d235b021a91a367f576356dac GIT binary patch literal 2015 zcmV<52O#)~P)1cm6kZ>D_+HA@D&R+;38-qMkVGvF{l$?OPiHoEaO~KzcWq-Y`$YAQgom=u>v&%p#haeGoGFA|9WK@ewA8Cs(f2n#}DyANprf=E=WmF)skQ^0IA zm_m`~D;Bd+n8yJGn)Jot6KE(A81qAAMd?@J5(vwFDKO>-XdrUJC6FS?9Dy-EA#k33hd#*qq5OdjWmR+cfBh4ld=8vL$r%tca4oqi2jC$?Btin94z?f$w0RZ6W zv%C_n1@^9mcB`ct{ni@-zO>M&mET4{-Xu{dWT#$A($HqW;RE$)5{YD(EqOli@!;97 zKR0@Ja(E9dt;Q>Ps;oZxV@SqXD&nSxg3gk%vpA=VL@%0Fg3^JkR))$v&mudSl5rc{qMH zPUKCHs8Gn6-Rqt2)g?EHY4((JaVBqqMCdCXPj2#TmIk&2kR$;pied!i+168(=iHf; zVDAn)kmMjB3; zh&$QZ+5*A_DjRA2Vz?fEbYMr~2h4gceVWZEX=*wcHi6BsESokAI_>F%CU4-*FDQA$ zrgMi5HAg^TGux^BXt?iMLWgZqn2fUNTyb$R*s^&uBefegfZ^d`hAd=AP`<9V7Hr7J(C17+T~g z5$HlXCMYY^U6KzLu{|3l}11D1;w~aPi{BiBYJO%OCNExH-jz&=0f~`A%Qth8#QgDI;xd zC_Osy98B8Ujs>UH!tao(A6)3o{|FUZTzNVC7FU6`y4 z9$abKvAxc=uVLFfBzqgS&PT%JcW#~EdT>Wcip9kG2*6@CUOl|OzI6YtZF5n5`(WKo zySLBwwt?E_vr~H-BNkW9pNWm%6$!dFN~IEjk(>Mv=c8b=pfX z;`tc06|P=Ln7%-i#L{ZdC>XzGZ#L=o$>p;DFpl>*!YQXwt4^s^%2Sd2hHa=wk>uZc zt)_wLYhjfCqX2Y*nbc&||AocwqD+9~Iy0B%W@jvmm+OO4qe0h$`l?nbqC+0K#JBd% zWdx2(N8;$qxoNfPPp=NNMm-SEwkeVr*|2UE5w(jtG8uIuo*h6^GPA&mI)JWh73OC< zg?07rC&_d7l*Ja6~ikf)q0j+xx;(!w|Bk$Fk@=VmO z?-i}>o5o$e6-%oZc+15@Cr{tGK_U_V6c1&g%ktEjna(UayX&_E=<#mdY9@u#+6b4F zv3Tg@={q+V^xBvziLP;_r&>39;^t}fDa^}eQd^37BQ$I=)y>m)ZqR5{fFy9{kUFT4 zVdOo}T3Uk+ey+jvvlO#wIamFlYqcCY=O;XMj<-n$X+MIYlb$29VSf1t#EAya?=0RjXF5FmgZ{s++wn}A25?w0@n002ovPDHLkV1k|7$ie^s literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/bK.png b/dist/img/chesspieces/alpha/bK.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3a674a57fa3b937b2c5863e82c60ea2af55283 GIT binary patch literal 3327 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 JPDHLkV1jz{gGB%U literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/bN.png b/dist/img/chesspieces/alpha/bN.png new file mode 100644 index 0000000000000000000000000000000000000000..0eaf5e14cacd1682c0299696eb0e4eda85abd546 GIT binary patch literal 2475 zcmV;c2~_rpP)Ve{@A8LQ| zCo|P5kx1xdTVlURV*$$cWMC3ChH2Dl8oZnZMwhHBNbt5ciEtv7-DZ8Cg$GNQ!?s_f z5}`~+Ljw;UV>qs)MKWQua)lc!UYqCPgX5bm$tju&BK|2- z3Q*3<45lP-CwGsS6tFyOHh07|9e#v;bLu=Y}SH$5^kLQ|BE`)r+7GXk&KxxHn1!-E0u z8%Mh_k|6GVo6rKy>-Ex5Z};`_vzCd+wlpLe^t$BPM~4sM&6^{1iYvwMsU={nByGzQAowm)lY#muT(^DUg+t62pPij$%A>Eox@d@p z55LHK#>~t#-O$j$U6&w~&Se3ud27ATX=J56A(KhR!;N=GjvNudW6QeQ+C@V=efkv5 zYSX4o3`7_%Wo4wHA9&Z-lxd9y{XisNw70j1o=Z2bUtiLgc<0U??qQ^)xVW&Vw73w@ z@uZ^(52RKNQi)_H5-;1@`V@WU%xSv6{|tTZ+*x{HV1PbR zoj0dQo`@U3B&+2Kxm-4mDm1=TR#tFh;n!b%B}fCW{$+@Y8MIWF13Pu{m{vs+XHjZ( zDX!!{&sT4;SOneJ;c#$ulveXvX>mdH;k7^2j1fv@oeVrRlv)?)1+Y}icMd@i0)X}P z^}IU#Moe0tT16^C&D$vy3fgQoGZqJcvr47%D!e~wmzDPf2 z-ItzTss~gOdt;x!rDl{b6YeUWVqS^vqKJqMh$dU;Z0D_#G{!Ud1Rk3j`b8i}r>R;jB149{hQUU7wZEb<) z{5a~}7yukY0iY$p^a#61n%=t_5~>?i4PGraEuM03bHT&p=cpIf&!R zw`0|9VOf}$eH`9PqSZGK0J>&G=_HQh0)V@BcM3haLOvFCfVfgIhWU2`q`H##u*bC; z_4#On0~ydLxF(Zxfrp0qW53gprjsyEoSvTM0PfhaJ#cw+92|}=K%;>g(`hx}X-Vao z=_%OCEH`#wUn^`4X$yf7X+0P+W@R$zjM=1bV-}{8EZ;=+a@pWQa&axVZ~hqA($Xxb zhYs@bEw%Ef0<5Vh{(0cKhr^zDE&@1A9i`LII<5Mp#)j%WxhpeuRb}fM4UoNyIJDmUuhN~^_;)zy@l2^{}lBsXu+>qcA-n{}brTvxanV?8aDK~G(kE^;!XtgKW3u)MrH z2w<{3QI5qz$B({f2$y^E;x#7O&&&19mnMd8@s%6Oz{C0#2wOf27bu6b_V#uGz*Vbq zg8(L&jj;jfU+)FZL)At4K!)tTpta2Wcle_Gr~7uz`8in`saW%O>u@jzU4{l=UI%0C zx1JXE_P#6t=yW=R09q2vu>;6zmcA{~s8xNTS_tsYug&+~BL99FwTk>W+LN>W@4Y7g zXz;C#2mrd%oUsSUYJb+S-%U-uf-_7E`9oGP`%QZ zWuYtJu`k989&~VgojZFrDBMa(;If>f*@2tFNuXOh)}F)BsjjS8)LA>T1y*13_Lnj2b}L%BH5K7=Q;4 z9t^5K`pf6g`Ary{nnw*Fv{UcC%K*G``BG4wBiVKU33yNM?eL%okG09kN&jAHO87q* z5)=N21VEiuvlC^2jg5`|z0%&my7ArKClSa%?1{Z71N2Sr_tIZ{aWnAveU*w(ppe2{ z!w}xF&)O@m^wM2jU4mnJN~euGK(&gzhB`cq`+00TvuB1k4xUHB11}qZm~VfNVDW!j z%VtspxRktEB1z25h~p1B6HJENIEVw`|F1J_WLmg|0Z$JDhU7I z1k*y`YcMpx&ESlwSyQv6iZP8w?Kk!{Fi>jYG5>4$H{9O?ORZMT?3wYs_LZJ2_iaqn p(zIrEwg^F#C{dzBi4yf7>;D^DF1L_f?f3uy002ovPDHLkV1le6t49C; literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/bP.png b/dist/img/chesspieces/alpha/bP.png new file mode 100644 index 0000000000000000000000000000000000000000..b680532b0720ab6344e69e414890705ddfd38457 GIT binary patch literal 1294 zcmV+p1@ZccP);O9K)<5I|Sn`Eg0o5XkcR&>q<gX3V)Xf$3~ zdi$_7ljiXQ2s5z5Wa0#=NyLnNP{4r&wEn(F#CGTCwo!v#FBM)zBpL+d6Z!7TrnCvq z?X-(+UoN#zj`?4$A)mS4q_`Y$yX@M6cXa+0v2{6YtDs_ELuM0wx}4%Yz>$JRs{PiE zHni%XJTAxWCc>+MXumB8MGDfo2nTzEOZSYx`GN!-Fdn9h_z~JlA7c8sBknV&@JJi+0UOoiJz8{M3P& zJ=k{N@1(9a+AQW(Y@@JM!n1*({9H^cp4~VU^sUOZMvg^7-(m;Q#Bs6}4LFv;D+=8% z$4_!sU%VdIC4IKkl{FWMyPg<9lV;$s zS#N^@r{Fy`q3v4-A-un-oRGIMjctmV%*7iS@5_z>|G#b!f%g~dt%7TZ+ zm*tCJz~veHy;9+oYlsZJf-chLsuMEoMUQ^QOnSD&GCPnFP&rPd-u8bK3#P! zQ*-X_`N4c1knqyPW_ literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/bQ.png b/dist/img/chesspieces/alpha/bQ.png new file mode 100644 index 0000000000000000000000000000000000000000..05d5a63aea66bc71c5515ec4007869a430e0b2b9 GIT binary patch literal 2591 zcmV+)3gGpLP)y_iqD^!~6$~cE(mYXocFwi0aUAOIoH839z1yP;K73j4<0;t@ZiB?Jhp6JhXDYvWqCQcWp4ZpcnKhZ z=RGery+T@%r*CrdaV}ojlA3}J*u;9$G2t&iAB!5R(Kfm zIq4ytjfsf?CWHPvk?K_{WZPn6V*sfyK=+ud*!g%9zDFbkj_aYFalXSDi(_Y6Wt#iJx~KpqCQvGQ z!a4#K@&S6i;^>Y*1fxOMMblRSy}v52bqK8RGe zC@$^+MO1@hKia396?x#X!+VwHc*EzR9JO05-&S%#{3k=Pu|-<^8_?~qehjRlUb0xDE(yV z%7WvNj8wKdl57c^n9Le>wrruDHSBDCrHF~H)MVSsZ0$^+pPX8{!f`x%QN~H+bCbJ9 zH7WASik+2cE(_)P+lJ>lt)~C=*EVSwPrF2-^9-E!NF{ zoF3mjMtYRqIvGK)(@-wA)l`<29Nf2)^>Wb{bZZV!j&@Xq@E9s9!QSFaZ;MxRcTG`>Ws{tf+HDa}!JdzT3pyNm*#pT*i8n(pii&}&v@m74GtXb9^|eiyNF+Ks8Rs$YUh>#v zUV=m{K8kE1vD~>7D=#Zdkx8W?%h(bvpE&Yz{*$#Zt%EGXX3KQ~R=HL@A6x)HGl5Xe z+JoMfR3dpFJ-4FJOQcGryg8ZXHx;5#$ZrPP1POiLm!eJZ0R;l`k%X(nIrVd6$I={= zKoA?YzmUtM_qs243DL6}wGzxUff|j9VC2HNpGuK!;rewnZChEi%rq?v3>vlSI#sig zNhL51$=W~D5R0L>0c{k@_7Z<1$IX>v;4m#djV#dYwn140#lO`J606tV>1SM z6i1<2rJVWAC!J2Smm`A(>%j#QxO+y)J9FY4Y{%9YZP6Nm`}VZV;l$2ck}cuS(MDdf zJ&_xm@2+AerqimIMB(V0RbN}djlEx(gbE}Qanz89zTAQka%uw|zR^QdvuDnL{{DXO z?AbF)!h*>Q#@N^xq2uY(r{MIdlfZ6EWJKcI-`^?2xQHa1^~;b;^Nnl4XP@0BNMlP< z@V($?g8xQ!eER7v(9qBjdco8>=N86Q)Kr$VlZIwyW`geSZZI@7#3;fB1_r>@t5?C1 zBS%0>OAFYrem$tKTSEvsN7vB3YuB!U!NEaBiDs;joJoxW_-oUsH|1XGKt}@n6qWtje+0*{MjO@=2 z9{eE?3WcooRk&P%e-B_$06&3`A3Xy1@82g9UM9}g*4BWLk&y`l0eOx_-?aJj8Lu>> zx*tAx5IqF`_Lrwn6CNTB?(hGvKjH1_I#2yYsaOo|-n~nk2M)uuNTpIy>Oys)IuV{c zc@o%!hyK>{n;6a#=w4GPgiX*thy*%5GCT~@($Z)nXZ7mUVM*M$@g>^w>FMcUbaZ4~ zxq$9rbZtWwcLx!jR)dTq2s9cEeg_U8ewS6hg%%MyJ3Ia5&z<`POpElabR0VLuD`rS zKcyIMJ# zNY_>o(A+ z0>8fE=3>I0_O0W7g1{x9C9go+e7152O$}9;Ua$4<&h6g48*mNn?d{KhA+OWg*14;> z6@m6di~l=jwOS1f1_QuxoESazIvqSWc+a7b*YTjg4e*Hj1eHNLD9hud-~rb{l!tELyu92jJlb~U3i21@Tw00lK)Z4hIGaHKr2`#<&nJjP9Ppf&{y9nb>%rwi z>XVE=x7!jrI1+u?ShOOVZRf#*2M-=Rc<`7c{s*?b71UW7pDq9Z002ovPDHLkV1i1y B_b&hd literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/bR.png b/dist/img/chesspieces/alpha/bR.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb853807442e3714172e27665c64433d4c70ea7 GIT binary patch literal 1311 zcmV+)1>pLLP)Y}T7{|S~^M%HIBl8$28DpD(uO2%sMM+usDw}eI|`^spne1nMQwx> z#37ePl_CVP&gnyMEx?%tY?$W)+M{7^~_V|FFl&c&dkm; zzs&Butz9l5At50lAt50lAt50lAt51X>Wz0hE|X03JW&k#u_3#b=!t388$>(9t9Hvr zJ0q*s^7Njz%1e?S_H#q8Goqy&0gN{T7+JAfzN<65Vl5wc0FW5(`otUkAQ(yT~NDZLJ2qZiK;=NMjU5 zL9G(0i>`S~;P?8wV_l8L;9jw?uz-riqR9%n6$-@OMe{g5kFS%so>nMqhen>Fp5Dk; zH1g4FBu?t^(2WgRH*6`2%xnOmb%Ph{Q5dd%SpPE08sPP-UqrzIoSrx`$r|7*lSe1P z0>pDL<^ZV=FeS^r6RZJZAM#)Ujtpm(SOXkAocSCqz_6w+vj#|gfT#24-XWW;%mES~ zK6-x+W)IXt!8O(ZLu&9Fu#d2&2DdnPgts7XBrpd^eSj(a{<+J+JMb>xQ8>hW8$S{b z!Ceo_zBc9nsSjc&=6|;%^XrdS!@K~bzQEGV)X}rN0HnUa5}v@m!3#j@3pmYk^bVW_ zM{jgEv&IX+k>SBLZ~!A=?V8bm#Y-1axm-pY8ymVA@v`ObU1_E~jeMoXwNhy(uaQ)Vf8xx7bc zwX)4TmUL35)sLZp{#D{5SNdT7O+6e;_XV_&%Kg`=cuIo?)2V>jcjn5D4$rvw{jjp> zhnCsVLo-~!OZ6qbqaRd4fVU0N<8h;8Z_l?J?6~+4AaK?rPsDuCfC|sG^P@v{04I;< z^3VZJ9ea`K!TSVsfRf~TndN$S2|B>14i7Ccf%oBiZ@D_!m1XDv6-8b?f9`EIJuu*J z{~9_#e@FXQ%pPICzkLfjz<|GFi{&743pzk-KQW^h>x$^dhKejBGNC56JMPodjlXxS zO`pUX@uuZvUz2islsB%)cI$6LQQQV5@CMU;{Ql<5p)v!hC#EezLPA19LPA0|^$!X0 VL-IB)8@~Vm002ovPDHLkV1kJYdxHP~ literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/wB.png b/dist/img/chesspieces/alpha/wB.png new file mode 100644 index 0000000000000000000000000000000000000000..4197efe1a59e170c52b293b5340c2cec8f8c8cc1 GIT binary patch literal 2710 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 Qpa1{>07*qoM6N<$f@^9mTmS$7 literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/wK.png b/dist/img/chesspieces/alpha/wK.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf305e52fb454da1197531ff1100cd042cfc9ec GIT binary patch literal 2869 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 Tf)X}J00000NkvXXu0mjfF{);= literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/wN.png b/dist/img/chesspieces/alpha/wN.png new file mode 100644 index 0000000000000000000000000000000000000000..28079d47e4109f03d12e1cb394c721c3ce4a88af GIT binary patch literal 2636 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 literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/alpha/wR.png b/dist/img/chesspieces/alpha/wR.png new file mode 100644 index 0000000000000000000000000000000000000000..33013501a5734be036b5e76784dd2811ea9a2f78 GIT binary patch literal 1838 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 literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/uscf/bN.png b/dist/img/chesspieces/uscf/bN.png new file mode 100644 index 0000000000000000000000000000000000000000..3149309004b9a8658c30339944045a97fabe3cb1 GIT binary patch literal 2630 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 literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/uscf/bP.png b/dist/img/chesspieces/uscf/bP.png new file mode 100644 index 0000000000000000000000000000000000000000..5e36d10b729016f270f5a2a3057061fb8920cd25 GIT binary patch literal 1280 zcmV+b1^@bqP)X>De9V$S58KYZ-$EIT{= z_B-dh%sB`#F)=YQF)=YQF>SK)X1?)y=Ip6R&dfa(jYVs*c&vtx-~aHufGB_ju_RQLBg@xE4@oUZn>$XhUH-2yaw z8sDW`#oofa!{NI&jLkxRj(UK(e0GOh56omT(`*t1Xa(ZG*R~$!WS^gHh$MOK)eI`lb9Z8nH=Xw5x zEdvblw8pD$=;tI!y4})Yu{OvW*X9Mju4&qZ7hgIW@i{=V03P?t1_Jv}m|TdnQhEv} z>gbJyd4Iv{%ywqo1c!|<7}ox2Jb=fc!!w6*_jr{Acx#DwFnAH)U!lh&7oKjU?Zc}i z!LtqE9V6ZYJ2J*RY2aD{%%5<79Knr&?oc2QSS8W>Y}-3JQY9APp~ol7q=K`}F!Zm9 z1(-}FKPMbuT@VSbqa%@sMe^`%F=A7gEAaB03v&~-ue$jyn4_3vc6Rnv~4?FXHD zQL(pp(Dfg!$Xlz)&{yi6atbhS=BHRg&;~fr=K^4k0kqXW(9Zz21#p{lfM&sD0Bxo9 z)N!W(bwfYF$bo8a*2HFV>&Qe&w4Q!;R-ztYBAGbrGWo8@V$pNd15{MSbw$zqF1?Dy zW3RVcmT3u%-no$H`5)S>o$Hb$EmH}vGG2MitL8v?xI94>yxn_t;l{%f^6sJ0(!k&V zT^=Y1!tY)I6h-kGbwk+6Vj}eDCvJ2_DiU)Xx8fB% zNQwTU3SOo&gVO2LB5HrZWgTxkOe7PhsjP<~^_Xkd`wB&Kk=ky|$ll>OyrMgENE`5Wk8TM*Fyw;I*n z7Is6Dq)$(tSxDh~Yu)TalqC7y6Gr&=iCrV8X&P?gwzUvy!*qP^RRw~=bwv2uKtU9) zlh&F-W0f%;4sRlVEUv`!=FOeEck;w+c~Dg4BcH%qg9t(G3nEgJpmVFBlk+9_flF}*2 q^s9a}S(e!xz}f)&ZR<*w&8Q>Co-Wt~=ZM z>ed<2)t$D}TCue=qEi*Ysk64-ib5-lqq{r=!BJ}~i?9kgJ?BVbjLCh3goJGVnKL)x zp8MxN-~G>jzW+b>!eE3XBq0e&NJ0{lZ=ig)?j4`#E&Ntt@PW0yV!fWtX8(%A;ap*{ zSXcRcesgS`CU2&C(=F*@sZ{!jK)~-}GMQJUGHH8sOmsCm7pIF04)9D#ri!qzFaSSV zVFS|*e}+K*-c!A5wW3}?N#ae3U&%ik`Klt?6V7dVw##ZV~ZDb9m)ZV?gUU(?l{ zowq~;J(@_b6?%K?ocBJVNcayj09mZ?uj%TA;QZB<=Q%ga!t__?G=L;tVsATly&p?Q zFANEN6!cnkdfmr!8o=q;N7~-1C@-O@ni7CAxoqE@22dmt{g-qKv++Ve*RwmQOkpmU zyJ}7Y7$J#xA0DQNyaX;H9dvZAU02G`>$TZr;6Yk55fn5AQjO2tFCg^2&*A2@xw|Py zFJu7)a~?doLXMA;NXbrk7;!aVO|0g<_{4bHy2Hc6T~1-hEnAlt?g2S$Kp+(D>Y!YNGT@qa2ecZG+oG4zIl1)2cqqDky?QZ(QR4#tu;*8({ zuV_^fBSsk$L$r{#Y^i)W_iXkOh`MW>=MnL&OL%e~JyDTRQUO4J#6pzmX$tlSzJuxOGCVDef&p|Xq zqfuwQU{``cN%bb6CKL)k_kbEr(=Ewgob}0MvLB;!Nn}g`01yrbG45i(_

+Wwc`p z%t!x5XYgDecg$IbSS;?Mqhq>=K}#~T7BhG}Ubj1)T5Vhvh2&rO3nIfJrI9TjI3b`r zcyWX{$9Az!r+bC2j_E=ztvHyRViFOB1!&ikm(%BmlM&Q03dT{A4V%`(xFyN-Wbhm= z=axN#kw)I~KnJQwZ>0m^qQwh8B+>~}M*u?{k5CDu5@Q7M%1U=?KreWgYW#EIL9anh z_nIfy;uMk1K1avarMX#+Bmi1rEG7mpDoU}NNQqo7J4CY{*yAApRv0@wQ1kQ#OjpAx z$?^icLC7X3y&)SWQ_@nH1gj9=HjO9T84ah?71Sp+jXdR=0AoC=6=`2J-8>y>Qf%9w zPBW*}6V)!$=BK?yWyNIV=jX|ULV-KRZ-wUu&F0hyGF=*trre+4J*6Mg##O6dCrA$y z@DcLe?}y_m>x57crlx38bZ?h1JuveU1qUaU-;VtA*UR5 zH@5hAL%zF>dDN6DW!X#Sw3(-NDz&PS$diO3;YmClj0rR1f4*wlwl}Ds6(eNGDZ+Gm z?IA+X<@3E)(b4L(v1BVIypy9+sRWbE^0(hayJls90wAP9+Yl$kR3#@n95REuWY>tq zBJXauy6;%~p6KE0Bk@pt@lAk-I-O>5Ve*cb-sbq(9=MO*9Z7~b?k1JyK4 z9jh*b9yk~%9tda0uv{T8o{o2$Ilec(>4Rx6l^Al;pvo#4o)NAPb_ zwGZaU-`DANv%i1LdHPh9OQT9kOTej9r@-UKkHKt;<4t(-jFWnl?VR(GE=W{==h65hu&Hv>3jj)`k$e0G;Fa!wa?wteJppg1 zrv=8thYxXFL(}fkrAy%K*|Xs2(WBtt!GmD$-o0S=?pU`gV17 z!D|P==;$aZ$c~@4ZEJXLm+j);FLD@umNPbkh`a#Br|#}<@X^md0-2eaUSCC#PNWb`P$(3DV(EzPqZ*!)WDpe<1)2^up=V~EJ*uJ8 z{?V`Cp@O4WEUNWpaY3uqf}WlpaPQtd9N$nwpV8mq;^MsRrL}T}!oMCk{VIW12E^fT zNLN(U$6K{OnOs)q_bJTh^UdA@5XK}hH8tfHz^SQ8+{cUFUgUQGH*VUXcl{g*6TRp{ zdr33CC&^`nuqw_`1rUz zYe3V@*3frU)j{V_AJi9JgKC7my}dZ*BAwaU*_452GMRr02=EY@777Ig?#OgTMh0j( zc@hi`4tli?NOaA>zyK~|Wh}~Y{}jJS*c>n(2vZ`9EBbKx@@0>JqEfDMr^~rKcDds+ zfFZ`k3q47{3>W~p9In>cKvbq8Dl55?v9U2+Nx6M{2zyaqe;;oB1N~rdXb_)6edu~A zvc-iL=Dk^778n4Qtt)-uB^X;q;RqU91v@%Az_DY;!1f<)2l@H=PxIR_4;B!34Z3#4 zihQgK=|s9+Z5be2T%>UU_cr@;Mqayi4SLI0;Kq#`;HU33;%dljt<31R8XFt&ZzGRI zwmA1OBp56KgW1m%5u?$V%$V!)#+qXL=gnK*iHC8r z0)lylFW{pmy!yCY?ikho@a9-RK(8S{um(9C&Hy}~)9SUyHL;r2jBkQeZ?1CZvFtS^ zt2bulX4RymCf67e4K?wJ@ii}*Q)_aU=hkefTwlxxNk~Exl8}TXSmgiAjyG%a0TA*4 O0000+3}@7oSC$1guo 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 literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/uscf/wN.png b/dist/img/chesspieces/uscf/wN.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0af41b5f34ba0330af66906003327e2871d8c2 GIT binary patch literal 3009 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 DBMr%S literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/uscf/wP.png b/dist/img/chesspieces/uscf/wP.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f73663ead9d2f262553e67b73c6c42e9cbbe9e GIT binary patch literal 2045 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 sdXLd#UmcUkYm+uD!S9<6PA-)<3 zg#*{v5*Qb8=H5&H0E`vUN~yq#)B_S9-p*Tl*0ZYx8-nav^M2CP%+9{|=IzgKJmZ~R z3jzXxKp+qZ#La}!Xk4wTs#+xFB9!Vnk!M8Bcae{Kt<8u;3@4#fgw^dbkX?$!qd`jMr%rKvklT%!g0x|syFw6=UuRs@paAjbcQ zi?LWtjBUn5PrIjZ0^5`XZftCbo12>%Uqqn3zP_%^z`YVx+Ef`>FoD5fQ1X#Zr=`+jv6MG~?8Tl(VDl9Sq<~m;Mc~^t zx1M$Tyi>lO?kQU4>fWg~ciV4j0@VOQSsk~#^;fWG{jq*;kv^$zC=^oos;;i)k3bj} z=Mb1K@XK7*Q)eIG^z>9yw-BFd0(Fsr0|Nt>npN{jMgoBV{~4$zFcOJ~OG`_# zEG{l8N_Bnt_ssFa!h+`T1KfV zon7yL$p$tuGQtgs5Cce0PmhAU#-_%8uI>wZeO+I$i`Pe=JSsVf(D%{Nk=W7Ep;%bg z->L5wctqcWzEL*Np`ju1Fm)&%9_HlW;6N6(ojs>+SKDdoWcx{_QsTj3MrVJ2Uu|;2N%Ndy^PSP5qS#p1V+I(%CXozv zh)t+@r-m=`+V6X$()E_>fCf7`ImykVy$}mCp+Jm6{T)u8bo2VW!cV{aY`9%}J0)bF z!<(3x;O_Zoh$%~A+U0Vlz8eo$dfGjFkXZL_-7Y2X>DN!WebwQ~ldohF$p_BQ#KJBa zwzs#rB@kj0ID1=NLPbRd5_nbE?6$vXKtKHWJ-08~(3qyDr`h!(#4db0{!OVC%f>%x zFf%hVT)(Bn# z*jltjHtFzR+WGU<=ei+Jjh&qxc~&N)DP59D172*=Gw5|>uc`P1!rMVeAQFfKmK}j~ zQYmC|QR|#{%(mzAo3DS`UUCB0*4Ctd=y(x%Ax5GRNuVB$MkRrBROI7mM7ELaA~_q` z7h@+2W5@bb^b?I}+R8T3oXytOR_O^W7eNB`M4;2@d}*`Ul0*`AhdoJt5ATusZnjL? zN$GIdp}uFglhSTWI2?{W>3l}OCINMOMsGK(pCo!2U21E~`pVf#$FhG?+QFAiI+vhv zWql-aHV#@QsPBxe?58*zPr*+ELb)Ok@(TzA0)apj4gUiiS)hNC*<~{T00004 literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/wikipedia/bB.png b/dist/img/chesspieces/wikipedia/bB.png new file mode 100644 index 0000000000000000000000000000000000000000..be3007dd0cdc7662268e103458b30a035da1cebf GIT binary patch literal 1405 zcmV-@1%mpCP);OAg&;29>pXtLFL9VGS_o&_2gy))=`i$DX3vw-9Gh)}RQ7JcwuWkdbRXt|A`xA>c4EW@MX> zj1K`bMy|`TiE&}qk z)5K?tT>s;C;y#C_DqWhf#67pwvT!jB9HSn^b1L&UY}D79cyZ!hpTfBbxfeETrsfTo zDW224pVh+TdWo{)C`Y)3gggu%T4E{j;}FCv7V#rpMSR#zUWI`}!j4;@#o3 zwq!Dyxf++t==OPfWGs*%U_4=RzH(`}WqAcL=rA~|k z8bl;wh$ODZe5|BZM;X(Y;=zPth-6yGt$ruZ0ZgQw$T8d!)h(;@rPja_mvT-ukYl(u zs?GS<5H=0`@|P$NBKsGCfS*QLz?~s(UwK`PycA^t`CY|i6-2asO<*4~(nwcPz*lwH zOyD`#=M@yu_Hk5blorehk!O_$wBqr2etHrF*_N1}&3aa7n1s2Jc$^=wp`pRbX0!Q? zf^xw&*cRJ_c;ARZQo5G7nMF*cQgUo;Oa=wE#Wo>cLTHTVxt7$`)ybx&CfU{1CA+)3 z%OcxgTWk|G@Ht(@yARWfFb5I~K9ahL$MeAh6&Q)t7fM>?%RDUH^ZtS+=Mk>cNx)rI zSjxSui+C~W>_5P$Ysv6ov9F$kz?Yr25HN<*lqbT}EQgl6svu9+Hr%txLo=goZiOOR&&?PZU1ak|MYyb7l^<6GG!O zUsX)rSl|~ve_;JO<3qd|+{5<{VFMxZqVewU3gVr_)x>+TsJ|bZn-3D#ibCe-dTAJ#4RquQl+UL@cWj+ls}qQ@x6~8_nh*F-!cKc!KyX@f7g~ z;u+#k#B;>oh$F-?G&xy9Q+6togUu26I0v6+5W^|NbOJGEvAMyqKU-C93njH_WNeCt*&$TPie{tCooB3#mtf7LOCfFK8;> zLZ3-&4stj7of;6YSj2aO+|}j}oF}i)8Rt-D9IFA9~G_GA#Y&zMRQ2aT?G3jCO<1$YN-Hcm_$1rNmBAD+);Xe%ck8oZgZpVBqMSKWM zVSdJQwJpSL#3qGX(M52%yNJtNVpxVUDcrNQ$ksOa*Z`ku9P1F<4#c_#v44+eu}9=% z=trP|Z1_lNO1_lNO2I1mAaAmM>MWmh600000 LNkvXXu0mjfilMA( literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/wikipedia/bK.png b/dist/img/chesspieces/wikipedia/bK.png new file mode 100644 index 0000000000000000000000000000000000000000..de9880ce6390d6a53464f1b028bff7be0fd0f131 GIT binary patch literal 3009 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 DNo%uI literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/wikipedia/bK.svg b/dist/img/chesspieces/wikipedia/bK.svg new file mode 100644 index 00000000..ba2ac9fb --- /dev/null +++ b/dist/img/chesspieces/wikipedia/bK.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/dist/img/chesspieces/wikipedia/bN.png b/dist/img/chesspieces/wikipedia/bN.png new file mode 100644 index 0000000000000000000000000000000000000000..e31a6d0224819791210e91218fc99b7cd3b848ed GIT binary patch literal 1875 zcmV-Z2dwysP)9wVNxLjD`@*iP6__$6VA8`tL&-X#RW zUP5D_3pg!{fgB^uc5!V9p(tNV|Gp5&;zh}#i3&mRJj2PgnS>Jx@#yvSfh=IOEEuS) zYKSmaaa{!A4~pxQ{4vmn@SiF{sCCuL0>==(p%PfhDZ)^~NW!o{6tLqymZi2z(Zy#! z%lA1-SS~L#j}it2f`CuC5C&X`M>(%N&&tYzef##^$h?u1g{eeo%(*%pyZ{SquvcgUrlKsIIPto}M0{~GzX|xd+VWPeTnQG71|}zqobjzsYw#CySp0~m(fM`;oP82 zZGH9i^^$O+D2*(Lii*-?NRv4b8X6j;u1}sk2@w$yzwz!f78Cxfe2Mkz*MkzBot>J_ zi$Os_*r&8Y@7}!|&wt@nJdE3Qsb2tBLnYGF(?RRS1y|{tH*doH{Jgkk%^Ga`oJRp) zC0tNHd~4?}Qpu;v0H3knLPDTMfpq8zX-;z>M=lnglY`8ICc2#t-6uxHO6 zAgiHI#6#j2ck0wB>5DX*&Di!WX?utl0V`cS{E8JTd}et{CMPGu?c29ucz77%;^MHa zln3!*eJ#vVSXWmkt;&ZE9m4ZIfrFgO7g}uByhWqYh>HnayLL@P=bp6X`BJ~~C=smv@?6opVFtPUR>}+XoJUKZDX=!QL z_9n}8C}!Edak8(JfX7~NQ$BXm?*>+LZc6k$(}ExzT4cYhRPPGX4GiQjkGTO)$&%e&+@8x)lE1V!?_D)&d?pcu*4X z)~#Do`hm1nvvgw`Jbd8K1owWrfWeB(TI_gm7lOb_FRVS3Lv+kw5|&?W)h)RHyN^1- zz2ZxcSyWWy@FcLVMvDOJnI#NYdORYyUnNzhWsnw~X^NdYcVgS$TI`2w2?u3sqz`jP z6?RgFqTCG?y{z8pux3U^hC{%;d-qC}3|d8H(4scW3F-pDUbxfi5PVpenWuQT8-)38?k({PSnyS@n8IqcN|mpqeVyP(DAH=daK^;M zM2CPUPMnb9go6E7Q+|Q%EOH)8Ar>A{U_GH+ep2WU;yo{~cs@;wDg``u?i|(-V*4w+ zi}x_$Fb^qCOlwkLh#!kGNxPYM0lyYFNysbbK%31*1>DcGc&`Z@RWm3BymaXj74U6d z#WQ#q(P1hemLJRY+f}>@xJ}-%a8pY|>ts|GXyH}BPkFLFWJ*fPJ!uJ9z#1OKi;*KT zTnUIp?-ZCHmfe{5c@%IR>->hN(U_K&7V1d9$D@Ex^5Xjms_K1;)2C0k zj|cA9vBM$Y@#DwoUie)e1$>6^55fLVBzWQEu3fukF|m#%9#*S$E-WkzW1I(g6fjn{ z!sj^Rvu3k-^T5DB!QkLvfyH9kLIlLP<|Bd*9XfRA(4j+z4jnq!;y-|v529HMk23%O N002ovPDHLkV1nn}h0*{3 literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/wikipedia/bP.png b/dist/img/chesspieces/wikipedia/bP.png new file mode 100644 index 0000000000000000000000000000000000000000..afa0c9d4459e4d04648ca413ba90690bfdd49a02 GIT binary patch literal 777 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 l`)^ z-n=PRR8&Y=QBY6-yLRn@ZQHiN`t|E!<;sAcp zw%QWGCeI%Jk3K#=;OpxPetv$>x@|x}z;l$ZV;L-qHWmf^#$AssUBz<`-r2+glP6CG z>_T(r&V{(RIEasrhgGXq!P>QJVbi8fuzmY>$jZus-Me?gzJ2>3CnpCEA3h96j~SgBFX6i=n){9A`ir z#HFPO&Xg|-=o{<6x~^WmD%Fi`z_y^^(b3Vi|D)|m85tRE>cCoCTcNtTS_%f25@~5^ zkdl%DD^{$K)@n0n&V)&mCP8Rus6?D)wJ3j&Wzh!LnCJt2q0d8y4oP)jU0A0YnVFgY z5%}M%^~l)wFE;yP_Y&ER2N4kw9-lmLse^4{OB)f}CJerjZ%cfnx1Ga5AJ=dbCQN`S zQ>IA5PM(V}NuxNxC#9lytNSe|u9X$^>eP$cv_ zapFW6GiHo5(Fn$G-M?kKu8Z3v9K5khZP~H~_UzdM`T6;9>eMMHEiHu$7cRi%%a@_9 zt`2V8xPgmpX*-6yjE4^&O1p_CPo7BQSZ{Byw4)dp7?9Z4*C$=a@8ul~?nv(3xdXRu z-GYXO2FWjO>n>ir2xVnuQdcf4EQGy#_d;rFDkLT*!i*U+ASfsZp8#grO1<3N+@D^% zcC8n;R!^Tk1yR)8$w^x<9N^hj52~uF;M}=$P*hYT1)7(a2S<(^k!D<+Z87ld>}=^@ z{6AhtVmZ7qY%M3<7~EyxB-PZ^B#CM?!QhR$efze!dGqFv?4;ia)~!l0yBZrCMHFP` z&Yh5)oGf)Y?5^ytyLH^dbz^vVIK;-r!kRT}aPoi?Cr-fi>(`}>UA}yIt(^`NLcH-L znk~eW9RXcC58P}Q0r4H>Prd9|A72ewX17`RufpI%>V9E(U(Fa!AN|zEPw1(lt$@F; z@GHhYPy@?IR2;DJ?WY!c2HX1rGpm>CXrVf5sSRb+rajbkz2f&{@Gp_Z({Vq(Iu^~i zKp6b}gH?=4!r<>@;qT1gd(Zf)?{3Bqg~7i%!h_FT;$gb>A(hD{n^f|VL_XuGj%cbg zoZ8?kyyUPnW0000+NjA?5IGAHvP4t z54%KWsa~*up#S25g4PyUJ-=B#vU8SfOkVC3u;J1>CCN>xZx>V_Sh(vMyUFU{q&A(T z%a1H=@4r>w>!lpyyYBwP?~T)?JD%6QuQd^xTrI;6v+VaXtCeeiy8Wc6`Rl~%4ZC%_?Pl1m|0#bk z^7R^V?ErQbHRi&f$MXc79yDCv;r+Zw?g6KO{)aj8(mb3yc@;lQyRI|;dChg!RlNKE z2Rz^KOH@NqfTL01M}LIQvs-Etth*oXd|r8f`Q??<_)3?oyAnC+!1AR*FSp!&`>Jlg ze_+iNk^RBzuU~#z^mB@p_ivL;)4i7N+qG`>cNAB`UCr7Rwbo5)mgnY` z%;g)qY$tQOpL?4le&-}t+^m}H?YFCJM3nTCehM|;g7cR zGA+F`RWxmJzeVFD=0;#pu4Yve;?#ZdEzbUm=b{7K&po<#$IEQ?)x!@1Zt*^=Q-AeL z=bfkBqwE`8`967bj@It5w>>Ys`)K2?z~f8Lnb+t}{M^W$ak}{Ubs@{GvO*EfV88O5 ze8_iV_VWU1rp*0s-6soA?ptd4F#E=>dx^Ko-DaPg7dgu!o*9yi7XDzq)Gu?~A%9jq ONWjz8&t;ucLK6U+JX?nV literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/wikipedia/wB.png b/dist/img/chesspieces/wikipedia/wB.png new file mode 100644 index 0000000000000000000000000000000000000000..70e0e14088f6ea09b84b728df6aaae6d4776ab4e GIT binary patch literal 2374 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 Z{12-kJ&=_`^N#=k002ovPDHLkV1l3JS(E?( literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/wikipedia/wN.png b/dist/img/chesspieces/wikipedia/wN.png new file mode 100644 index 0000000000000000000000000000000000000000..237250c164f652f0ea61f5e8f65c9b4cb83489b7 GIT binary patch literal 2388 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 V@B7wJo3#J{002ovPDHLkV1iHz`5piO literal 0 HcmV?d00001 diff --git a/dist/img/chesspieces/wikipedia/wQ.png b/dist/img/chesspieces/wikipedia/wQ.png new file mode 100644 index 0000000000000000000000000000000000000000..c3dfc15e556cbbeb546374aa9ee5e6bf121e929d GIT binary patch literal 3812 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

Remember to include the css:

<link rel="stylesheet"
-      href="https://unpkg.com/@discape/chessboardjs/dist/chessboard.min.css"
+      href="https://unpkg.com/@discape/chessboardjs/dist/build/chessboard.min.css"
       crossorigin="anonymous">
@@ -42,14 +42,14 @@ import { Chessboard, objToFen, fenToObj } from "@discape/chessboardjs";

Content Delivery Network

You can use chessboardjs via the unpkg CDN with the following links:

<link rel="stylesheet"
-      href="https://unpkg.com/@discape/chessboardjs/dist/chessboard.min.css"
+      href="https://unpkg.com/@discape/chessboardjs/dist/build/chessboard.min.css"
       integrity="sha384-q94+BZtLrkL1/ohfjR8c6L+A6qzNH9R2hBLwyoAfu3i/WCvQjzL2RQJ3uNHDISdU"
       crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"
         integrity="sha384-ZvpUoO/+PpLXR1lu4jmpXWu80pZlYUAfxl5NsBMWOEPSjUn/6Z/hRTt8+pR6L4N2"
         crossorigin="anonymous"></script>
 
-<script src="https://unpkg.com/@discape/chessboardjs/dist/chessboard.min.js"
+<script src="https://unpkg.com/@discape/chessboardjs/dist/build/chessboard.min.js"
         crossorigin="anonymous"></script>

Please note that jQuery is a required dependency of chessboard.js and must be loaded on your webpage before the chessboard.min.js file.

From f7baf470e47ffb0acf04244ef9ebc1543279c211 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 13:32:47 +0300 Subject: [PATCH 13/24] 1.1.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75731295..7a91b136 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@discape/chessboardjs", - "version": "1.0.1", + "version": "1.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@discape/chessboardjs", - "version": "1.0.1", + "version": "1.1.0", "license": "MIT", "dependencies": { "jquery": ">=3.4.1" diff --git a/package.json b/package.json index f3a1806e..e4d4d606 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "description": "JavaScript chessboard widget", "homepage": "https://chessboardjs.com", "license": "MIT", - "version": "1.0.1", + "version": "1.1.0", "exports": { "import": "./dist/chessboard-1.0.0.min.mjs", "require": "./dist/chessboard-1.0.0.min.cjs" From d767d2bedd598e2a0dbc61edf310005463439cea Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 14:00:33 +0300 Subject: [PATCH 14/24] fix formatting, remove useless preventDefault() --- .vscode/settings.json | 5 + lib/chessboard.js | 293 ++++++++++++++++++++++-------------------- 2 files changed, 156 insertions(+), 142 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..86077b5a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "editor.defaultFormatter": "standard.vscode-standard", + "standard.enable": true, + "standard.autoFixOnSave": true +} \ No newline at end of file diff --git a/lib/chessboard.js b/lib/chessboard.js index ee55afb7..88e79691 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -52,7 +52,7 @@ CSS['white'] = 'white-1e1d7' // Misc Util Functions // --------------------------------------------------------------------------- -function throttle(f, interval, scope) { +function throttle (f, interval, scope) { var timeout = 0 var shouldFire = false var args = [] @@ -91,28 +91,28 @@ function throttle(f, interval, scope) { // } // } -function uuid() { +function uuid () { return 'xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx'.replace(/x/g, function (c) { var r = (Math.random() * 16) | 0 return r.toString(16) }) } -function deepCopy(thing) { +function deepCopy (thing) { return JSON.parse(JSON.stringify(thing)) } -function parseSemVer(version) { +function parseSemVer (version) { var tmp = version.split('.') return { major: parseInt(tmp[0], 10), minor: parseInt(tmp[1], 10), - patch: parseInt(tmp[2], 10), + patch: parseInt(tmp[2], 10) } } // returns true if version is >= minimum -function validSemanticVersion(version, minimum) { +function validSemanticVersion (version, minimum) { version = parseSemVer(version) minimum = parseSemVer(minimum) @@ -124,7 +124,7 @@ function validSemanticVersion(version, minimum) { return versionNum >= minimumNum } -function interpolateTemplate(str, obj) { +function interpolateTemplate (str, obj) { for (var key in obj) { if (!obj.hasOwnProperty(key)) continue var keyTemplateStr = '{' + key + '}' @@ -149,29 +149,29 @@ if (RUN_ASSERTS) { // Predicates // --------------------------------------------------------------------------- -function isString(s) { +function isString (s) { return typeof s === 'string' } -function isFunction(f) { +function isFunction (f) { return typeof f === 'function' } -function isInteger(n) { +function isInteger (n) { return typeof n === 'number' && isFinite(n) && Math.floor(n) === n } -function validAnimationSpeed(speed) { +function validAnimationSpeed (speed) { if (speed === 'fast' || speed === 'slow') return true if (!isInteger(speed)) return false return speed >= 0 } -function validThrottleRate(rate) { +function validThrottleRate (rate) { return isInteger(rate) && rate >= 1 } -function validMove(move) { +function validMove (move) { // move should be a string if (!isString(move)) return false @@ -182,7 +182,7 @@ function validMove(move) { return validSquare(squares[0]) && validSquare(squares[1]) } -function validSquare(square) { +function validSquare (square) { return isString(square) && square.search(/^[a-h][1-8]$/) !== -1 } @@ -197,7 +197,7 @@ if (RUN_ASSERTS) { console.assert(!validSquare({})) } -function validPieceCode(code) { +function validPieceCode (code) { return isString(code) && code.search(/^[bw][KQRNBP]$/) !== -1 } @@ -214,7 +214,7 @@ if (RUN_ASSERTS) { console.assert(!validPieceCode({})) } -function validFen(fen) { +function validFen (fen) { if (!isString(fen)) return false // cut off any move, castling, etc info from the end @@ -242,13 +242,13 @@ if (RUN_ASSERTS) { console.assert(validFen(START_FEN)) console.assert(validFen('8/8/8/8/8/8/8/8')) console.assert( - validFen('r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R'), + validFen('r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R') ) console.assert( - validFen('3r3r/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1'), + validFen('3r3r/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1') ) console.assert( - !validFen('3r3z/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1'), + !validFen('3r3z/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1') ) console.assert(!validFen('anbqkbnr/8/8/8/8/8/PPPPPPPP/8')) console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/')) @@ -258,7 +258,7 @@ if (RUN_ASSERTS) { console.assert(!validFen({})) } -function validPositionObject(pos) { +function validPositionObject (pos) { if (!$.isPlainObject(pos)) return false for (var i in pos) { @@ -284,11 +284,11 @@ if (RUN_ASSERTS) { console.assert(!validPositionObject(START_FEN)) } -function isTouchDevice() { +function isTouchDevice () { return 'ontouchstart' in document.documentElement } -function validJQueryVersion() { +function validJQueryVersion () { return ( typeof $ && $.fn && @@ -302,7 +302,7 @@ function validJQueryVersion() { // --------------------------------------------------------------------------- // convert FEN piece code to bP, wK, etc -function fenToPieceCode(piece) { +function fenToPieceCode (piece) { // black piece if (piece.toLowerCase() === piece) { return 'b' + piece.toUpperCase() @@ -313,7 +313,7 @@ function fenToPieceCode(piece) { } // convert bP, wK, etc code to FEN structure -function pieceCodeToFen(piece) { +function pieceCodeToFen (piece) { var pieceCodeLetters = piece.split('') // white piece @@ -327,7 +327,7 @@ function pieceCodeToFen(piece) { // convert FEN string to position object // returns false if the FEN string is invalid -function fenToObj(fen) { +function fenToObj (fen) { if (!validFen(fen)) return false // cut off any move, castling, etc info from the end @@ -364,7 +364,7 @@ function fenToObj(fen) { // position object to FEN string // returns false if the obj is not a valid position object -function objToFen(obj) { +function objToFen (obj) { if (!validPositionObject(obj)) return false var fen = '' @@ -402,16 +402,16 @@ if (RUN_ASSERTS) { console.assert(objToFen({ a2: 'wP', b2: 'bP' }) === '8/8/8/8/8/8/Pp6/8') } -function squeezeFenEmptySquares(fen) { +function squeezeFenEmptySquares (fen) { return fen.replace(/1{2,8}/g, ({ length }) => length) } -function expandFenEmptySquares(fen) { +function expandFenEmptySquares (fen) { return fen.replace(/[2-8]/g, (length) => '1'.repeat(Number(length))) } // returns the distance between two squares -function squareDistance(squareA, squareB) { +function squareDistance (squareA, squareB) { var squareAArray = squareA.split('') var squareAx = COLUMNS.indexOf(squareAArray[0]) + 1 var squareAy = parseInt(squareAArray[1], 10) @@ -429,7 +429,7 @@ function squareDistance(squareA, squareB) { // returns the square of the closest instance of piece // returns false if no instance of piece is found in position -function findClosestPiece(position, piece, square) { +function findClosestPiece (position, piece, square) { // create array of closest squares from square var closestSquares = createRadius(square) @@ -446,7 +446,7 @@ function findClosestPiece(position, piece, square) { } // returns an array of closest squares from square -function createRadius(square) { +function createRadius (square) { var squares = [] // calculate distance of all squares @@ -459,7 +459,7 @@ function createRadius(square) { squares.push({ square: s, - distance: squareDistance(square, s), + distance: squareDistance(square, s) }) } } @@ -480,7 +480,7 @@ function createRadius(square) { // given a position and a set of moves, return a new position // with the moves executed -function calculatePositionFromMoves(position, moves) { +function calculatePositionFromMoves (position, moves) { var newPosition = deepCopy(position) for (var i in moves) { @@ -503,7 +503,7 @@ function calculatePositionFromMoves(position, moves) { // HTML // --------------------------------------------------------------------------- -function buildContainerHTML(hasSparePieces) { +function buildContainerHTML (hasSparePieces) { var html = '
' if (hasSparePieces) { @@ -525,7 +525,7 @@ function buildContainerHTML(hasSparePieces) { // Config // --------------------------------------------------------------------------- -function expandConfigArgumentShorthand(config) { +function expandConfigArgumentShorthand (config) { if (config === 'start') { config = { position: deepCopy(START_POSITION) } } else if (validFen(config)) { @@ -541,7 +541,7 @@ function expandConfigArgumentShorthand(config) { } // validate config / set default options -function expandConfig(config) { +function expandConfig (config) { // default for orientation is white if (config.orientation !== 'black') config.orientation = 'white' @@ -565,7 +565,8 @@ function expandConfig(config) { !config.hasOwnProperty('pieceTheme') || (!isString(config.pieceTheme) && !isFunction(config.pieceTheme)) ) { - config.pieceTheme = 'https://unpkg.com/@discape/chessboardjs/dist/img/chesspieces/wikipedia/{piece}.png' + config.pieceTheme = + 'https://unpkg.com/@discape/chessboardjs/dist/img/chesspieces/wikipedia/{piece}.png' } // animation speeds @@ -598,7 +599,7 @@ function expandConfig(config) { // --------------------------------------------------------------------------- // check for a compatible version of jQuery -function checkJQuery() { +function checkJQuery () { if (!validJQueryVersion()) { var errorMsg = 'Chessboard Error 1005: Unable to find a valid version of jQuery. ' + @@ -616,7 +617,7 @@ function checkJQuery() { } // return either boolean false or the $container element -function checkContainerArg(containerElOrString) { +function checkContainerArg (containerElOrString) { if (containerElOrString === '') { var errorMsg1 = 'Chessboard Error 1001: ' + @@ -654,7 +655,7 @@ function checkContainerArg(containerElOrString) { // Constructor // --------------------------------------------------------------------------- -function constructor(containerElOrString, config) { +function constructor (containerElOrString, config) { // first things first: check basic dependencies if (!checkJQuery()) return null var $container = checkContainerArg(containerElOrString) @@ -694,7 +695,7 @@ function constructor(containerElOrString, config) { // Validation / Errors // ------------------------------------------------------------------------- - function validSpareCounts(counts) { + function validSpareCounts (counts) { if ( typeof counts !== 'object' || Object.getOwnPropertyNames(counts).length === 0 @@ -717,7 +718,7 @@ function constructor(containerElOrString, config) { return true } - function error(code, msg, obj) { + function error (code, msg, obj) { // do nothing if showErrors is not set if ( config.hasOwnProperty('showErrors') !== true || @@ -756,7 +757,7 @@ function constructor(containerElOrString, config) { } } - function setInitialState() { + function setInitialState () { currentOrientation = config.orientation // make sure position is valid @@ -772,7 +773,7 @@ function constructor(containerElOrString, config) { } } - //spare piece counts + // spare piece counts if (config.hasOwnProperty('spareCounts') === true) { if (config.spareCounts === 'default') { config.spareCounts = { @@ -787,7 +788,7 @@ function constructor(containerElOrString, config) { bR: 0, bB: 0, bN: 0, - bP: 0, + bP: 0 } } else if (!validSpareCounts(config.spareCounts)) { config.spareCounts = false @@ -806,7 +807,7 @@ function constructor(containerElOrString, config) { // get the width of the container element (could be anything), reduce by 1 for // fudge factor, and then keep reducing until we find an exact mod 8 for // our square size - function calculateSquareSize() { + function calculateSquareSize () { var containerWidth = parseInt($container.width(), 10) // defensive, prevent infinite loop @@ -825,7 +826,7 @@ function constructor(containerElOrString, config) { } // create random IDs for elements - function createElIds() { + function createElIds () { // squares on the board for (var i = 0; i < COLUMNS.length; i++) { for (var j = 1; j <= 8; j++) { @@ -850,7 +851,7 @@ function constructor(containerElOrString, config) { // Markup Building // ------------------------------------------------------------------------- - function buildBoardHTML(orientation) { + function buildBoardHTML (orientation) { if (orientation !== 'black') { orientation = 'white' } @@ -924,29 +925,42 @@ function constructor(containerElOrString, config) { } var imgCache = {} - function cacheImages() { - var pieces = ['wK', 'wQ', 'wR', 'wB', 'wN', 'wP', 'bK', 'bQ', 'bR', 'bB', 'bN', 'bP']; - pieces.forEach(function(piece) { + function cacheImages () { + var pieces = [ + 'wK', + 'wQ', + 'wR', + 'wB', + 'wN', + 'wP', + 'bK', + 'bQ', + 'bR', + 'bB', + 'bN', + 'bP' + ] + pieces.forEach(function (piece) { var img = new Image() - img.onload = function() { + img.onload = function () { imgCache[piece] = getBase64Image(img) } img.src = buildPieceImgSrc(piece) }) - - function getBase64Image(img) { - var canvas = document.createElement("canvas"); - canvas.width = img.width; - canvas.height = img.height; - var ctx = canvas.getContext("2d"); - ctx.drawImage(img, 0, 0); - var dataURL = canvas.toDataURL("image/png"); - return dataURL; + + function getBase64Image (img) { + var canvas = document.createElement('canvas') + canvas.width = img.width + canvas.height = img.height + var ctx = canvas.getContext('2d') + ctx.drawImage(img, 0, 0) + var dataURL = canvas.toDataURL('image/png') + return dataURL } } - function buildPieceImgSrc(piece) { - if(imgCache[piece]) return imgCache[piece]; + function buildPieceImgSrc (piece) { + if (imgCache[piece]) return imgCache[piece] if (isFunction(config.pieceTheme)) { return config.pieceTheme(piece) @@ -961,7 +975,7 @@ function constructor(containerElOrString, config) { return '' } - function spareCountHtml(piece, hidden) { + function spareCountHtml (piece, hidden) { if (typeof config.spareCounts !== 'object') { return '' } @@ -973,7 +987,7 @@ function constructor(containerElOrString, config) { return html + '">' + config.spareCounts[piece] + '' } - function buildPieceHTML(piece, hidden, id, is_spare) { + function buildPieceHTML (piece, hidden, id, is_spare) { var html = '
', CSS) } - function buildSparePiecesHTML(color) { + function buildSparePiecesHTML (color) { var pieces = ['wK', 'wQ', 'wR', 'wB', 'wN', 'wP'] if (color === 'black') { pieces = ['bK', 'bQ', 'bR', 'bB', 'bN', 'bP'] @@ -1017,7 +1031,7 @@ function constructor(containerElOrString, config) { pieces[i], false, sparePiecesElsIds[pieces[i]], - true, + true ) } @@ -1028,7 +1042,7 @@ function constructor(containerElOrString, config) { // Animations // ------------------------------------------------------------------------- - function animateSquareToSquare(src, dest, piece, completeFn) { + function animateSquareToSquare (src, dest, piece, completeFn) { // get information about the source and destination squares var $srcSquare = $('#' + squareElsIds[src]) var srcSquarePosition = $srcSquare.offset() @@ -1044,13 +1058,13 @@ function constructor(containerElOrString, config) { display: '', position: 'absolute', top: srcSquarePosition.top, - left: srcSquarePosition.left, + left: srcSquarePosition.left }) // remove original piece from source square $srcSquare.find('.' + CSS.piece).remove() - function onFinishAnimation1() { + function onFinishAnimation1 () { // add the "real" piece to the destination square $destSquare.append(buildPieceHTML(piece)) @@ -1066,12 +1080,12 @@ function constructor(containerElOrString, config) { // animate the piece to the destination square var opts = { duration: config.moveSpeed, - complete: onFinishAnimation1, + complete: onFinishAnimation1 } $animatedPiece.animate(destSquarePosition, opts) } - function animateSparePieceToSquare(piece, dest, completeFn) { + function animateSparePieceToSquare (piece, dest, completeFn) { var srcOffset = $('#' + sparePiecesElsIds[piece]).offset() var $destSquare = $('#' + squareElsIds[dest]) var destOffset = $destSquare.offset() @@ -1084,11 +1098,11 @@ function constructor(containerElOrString, config) { display: '', position: 'absolute', left: srcOffset.left, - top: srcOffset.top, + top: srcOffset.top }) // on complete - function onFinishAnimation2() { + function onFinishAnimation2 () { // add the "real" piece to the destination square $destSquare.find('.' + CSS.piece).remove() $destSquare.append(buildPieceHTML(piece)) @@ -1105,17 +1119,17 @@ function constructor(containerElOrString, config) { // animate the piece to the destination square var opts = { duration: config.moveSpeed, - complete: onFinishAnimation2, + complete: onFinishAnimation2 } $animatedPiece.animate(destOffset, opts) } // execute an array of animations - function doAnimations(animations, oldPos, newPos) { + function doAnimations (animations, oldPos, newPos) { if (animations.length === 0) return var numFinished = 0 - function onFinishAnimation3() { + function onFinishAnimation3 () { // exit if all the animations aren't finished numFinished = numFinished + 1 if (numFinished !== animations.length) return @@ -1135,7 +1149,7 @@ function constructor(containerElOrString, config) { if (animation.type === 'clear') { $('#' + squareElsIds[animation.square] + ' .' + CSS.piece).fadeOut( config.trashSpeed, - onFinishAnimation3, + onFinishAnimation3 ) // add a piece with no spare pieces - fade the piece onto the square @@ -1150,7 +1164,7 @@ function constructor(containerElOrString, config) { animateSparePieceToSquare( animation.piece, animation.square, - onFinishAnimation3, + onFinishAnimation3 ) // move a piece from squareA to squareB @@ -1159,7 +1173,7 @@ function constructor(containerElOrString, config) { animation.source, animation.destination, animation.piece, - onFinishAnimation3, + onFinishAnimation3 ) } } @@ -1167,7 +1181,7 @@ function constructor(containerElOrString, config) { // calculate an array of animations that need to happen in order to get // from pos1 to pos2 - function calculateAnimations(pos1, pos2) { + function calculateAnimations (pos1, pos2) { // make copies of both pos1 = deepCopy(pos1) pos2 = deepCopy(pos2) @@ -1195,7 +1209,7 @@ function constructor(containerElOrString, config) { type: 'move', source: closestPiece, destination: i, - piece: pos2[i], + piece: pos2[i] }) delete pos1[closestPiece] @@ -1211,7 +1225,7 @@ function constructor(containerElOrString, config) { animations.push({ type: 'add', square: i, - piece: pos2[i], + piece: pos2[i] }) delete pos2[i] @@ -1228,7 +1242,7 @@ function constructor(containerElOrString, config) { animations.push({ type: 'clear', square: i, - piece: pos1[i], + piece: pos1[i] }) delete pos1[i] @@ -1241,7 +1255,7 @@ function constructor(containerElOrString, config) { // Control Flow // ------------------------------------------------------------------------- - function drawPositionInstant() { + function drawPositionInstant () { // clear the board $board.find('.' + CSS.piece).remove() @@ -1254,9 +1268,9 @@ function constructor(containerElOrString, config) { } } - function drawBoard() { + function drawBoard () { $board.html( - buildBoardHTML(currentOrientation, squareSize, config.showNotation), + buildBoardHTML(currentOrientation, squareSize, config.showNotation) ) drawPositionInstant() @@ -1271,7 +1285,7 @@ function constructor(containerElOrString, config) { } } - function setCurrentPosition(position) { + function setCurrentPosition (position) { var oldPos = deepCopy(currentPosition) var newPos = deepCopy(position) var oldFen = objToFen(oldPos) @@ -1289,7 +1303,7 @@ function constructor(containerElOrString, config) { } } - function isXYOnSquare(x, y) { + function isXYOnSquare (x, y) { for (var i in squareElsOffsets) { if (!squareElsOffsets.hasOwnProperty(i)) continue @@ -1308,7 +1322,7 @@ function constructor(containerElOrString, config) { } // records the XY coords of every square into memory - function captureSquareOffsets() { + function captureSquareOffsets () { squareElsOffsets = {} for (var i in squareElsIds) { @@ -1318,13 +1332,13 @@ function constructor(containerElOrString, config) { } } - function removeSquareHighlights() { + function removeSquareHighlights () { $board .find('.' + CSS.square) .removeClass(CSS.highlight1 + ' ' + CSS.highlight2) } - function snapbackDraggedPiece() { + function snapbackDraggedPiece () { // there is no "snapback" for spare pieces if (draggedPieceSource === 'spare') { trashDraggedPiece() @@ -1334,7 +1348,7 @@ function constructor(containerElOrString, config) { removeSquareHighlights() // animation complete - function complete() { + function complete () { drawPositionInstant() $draggedPiece.css('display', 'none') @@ -1344,20 +1358,20 @@ function constructor(containerElOrString, config) { draggedPiece, draggedPieceSource, deepCopy(currentPosition), - currentOrientation, + currentOrientation ) } } // get source square position var sourceSquarePosition = $( - '#' + squareElsIds[draggedPieceSource], + '#' + squareElsIds[draggedPieceSource] ).offset() // animate the piece to the target square var opts = { duration: config.snapbackSpeed, - complete: complete, + complete: complete } $draggedPiece.animate(sourceSquarePosition, opts) @@ -1365,7 +1379,7 @@ function constructor(containerElOrString, config) { isDragging = false } - function trashDraggedPiece() { + function trashDraggedPiece () { removeSquareHighlights() // remove the source piece @@ -1383,7 +1397,7 @@ function constructor(containerElOrString, config) { isDragging = false } - function dropDraggedPieceOnSquare(square) { + function dropDraggedPieceOnSquare (square) { removeSquareHighlights() // update position @@ -1396,7 +1410,7 @@ function constructor(containerElOrString, config) { var targetSquarePosition = $('#' + squareElsIds[square]).offset() // animation complete - function onAnimationComplete() { + function onAnimationComplete () { drawPositionInstant() $draggedPiece.css('display', 'none') @@ -1409,7 +1423,7 @@ function constructor(containerElOrString, config) { // snap the piece to the target square var opts = { duration: config.snapSpeed, - complete: onAnimationComplete, + complete: onAnimationComplete } $draggedPiece.animate(targetSquarePosition, opts) @@ -1417,7 +1431,7 @@ function constructor(containerElOrString, config) { isDragging = false } - function beginDraggingPiece(source, piece, x, y) { + function beginDraggingPiece (source, piece, x, y) { // run their custom onDragStart function // their custom onDragStart function can cancel drag start if ( @@ -1426,7 +1440,7 @@ function constructor(containerElOrString, config) { source, piece, deepCopy(currentPosition), - currentOrientation, + currentOrientation ) === false) || (source === 'spare' && typeof config.spareCounts === 'object' && @@ -1458,7 +1472,7 @@ function constructor(containerElOrString, config) { top: y - squareSize / 2, transform: `scale(${ typeof config.scaleDrag === 'number' ? config.scaleDrag : 1 - })`, + })` }) if (source !== 'spare') { @@ -1470,11 +1484,11 @@ function constructor(containerElOrString, config) { } } - function updateDraggedPiece(x, y) { + function updateDraggedPiece (x, y) { // put the dragged piece over the mouse cursor $draggedPiece.css({ left: x - squareSize / 2, - top: y - squareSize / 2, + top: y - squareSize / 2 }) // get location @@ -1501,7 +1515,7 @@ function constructor(containerElOrString, config) { draggedPieceSource, draggedPiece, deepCopy(currentPosition), - currentOrientation, + currentOrientation ) } @@ -1509,7 +1523,7 @@ function constructor(containerElOrString, config) { draggedPieceLocation = location } - function stopDraggedPiece(location) { + function stopDraggedPiece (location) { // determine what the action should be var action = 'drop' if (location === 'offboard' && config.dropOffBoard === 'snapback') { @@ -1554,7 +1568,7 @@ function constructor(containerElOrString, config) { draggedPiece, newPosition, oldPosition, - currentOrientation, + currentOrientation ) if (result === 'snapback' || result === 'trash') { action = result @@ -1576,7 +1590,7 @@ function constructor(containerElOrString, config) { ) { config.spareCounts[draggedPiece] -= 1 var elem = (document.getElementById( - sparePiecesCountElsIds[draggedPiece], + sparePiecesCountElsIds[draggedPiece] ).innerText = config.spareCounts[draggedPiece]) } } @@ -1725,14 +1739,14 @@ function constructor(containerElOrString, config) { // set drag piece size $draggedPiece.css({ height: squareSize, - width: squareSize, + width: squareSize }) // spare pieces if (config.sparePieces) { $container.css( 'paddingLeft', - ($board.clientWidth - $container.offsetWidth) / 2 + 'px', + ($board.clientWidth - $container.offsetWidth) / 2 + 'px' ) } @@ -1749,11 +1763,7 @@ function constructor(containerElOrString, config) { // Browser Events // ------------------------------------------------------------------------- - function stopDefault(evt) { - evt.preventDefault() - } - - function mousedownSquare(evt) { + function mousedownSquare (evt) { // do nothing if we're not draggable if (!config.draggable) return @@ -1765,7 +1775,7 @@ function constructor(containerElOrString, config) { beginDraggingPiece(square, currentPosition[square], evt.pageX, evt.pageY) } - function touchstartSquare(e) { + function touchstartSquare (e) { // do nothing if we're not draggable if (!config.draggable) return @@ -1781,11 +1791,11 @@ function constructor(containerElOrString, config) { square, currentPosition[square], e.changedTouches[0].pageX, - e.changedTouches[0].pageY, + e.changedTouches[0].pageY ) } - function mousedownSparePiece(evt) { + function mousedownSparePiece (evt) { // do nothing if sparePieces is not enabled if (!config.sparePieces) return @@ -1794,7 +1804,7 @@ function constructor(containerElOrString, config) { beginDraggingPiece('spare', piece, evt.pageX, evt.pageY) } - function touchstartSparePiece(e) { + function touchstartSparePiece (e) { // do nothing if sparePieces is not enabled if (!config.sparePieces) return @@ -1807,11 +1817,11 @@ function constructor(containerElOrString, config) { 'spare', piece, e.changedTouches[0].pageX, - e.changedTouches[0].pageY, + e.changedTouches[0].pageY ) } - function mousemoveWindow(evt) { + function mousemoveWindow (evt) { if (isDragging) { updateDraggedPiece(evt.pageX, evt.pageY) } @@ -1819,28 +1829,25 @@ function constructor(containerElOrString, config) { var throttledMousemoveWindow = throttle( mousemoveWindow, - config.dragThrottleRate, + config.dragThrottleRate ) - function touchmoveWindow(evt) { + function touchmoveWindow (evt) { // do nothing if we are not dragging a piece if (!isDragging) return - // prevent screen from scrolling - evt.preventDefault() - updateDraggedPiece( evt.originalEvent.changedTouches[0].pageX, - evt.originalEvent.changedTouches[0].pageY, + evt.originalEvent.changedTouches[0].pageY ) } var throttledTouchmoveWindow = throttle( touchmoveWindow, - config.dragThrottleRate, + config.dragThrottleRate ) - function mouseupWindow(evt) { + function mouseupWindow (evt) { // do nothing if we are not dragging a piece if (!isDragging) return @@ -1850,20 +1857,20 @@ function constructor(containerElOrString, config) { stopDraggedPiece(location) } - function touchendWindow(evt) { + function touchendWindow (evt) { // do nothing if we are not dragging a piece if (!isDragging) return // get the location var location = isXYOnSquare( evt.originalEvent.changedTouches[0].pageX, - evt.originalEvent.changedTouches[0].pageY, + evt.originalEvent.changedTouches[0].pageY ) stopDraggedPiece(location) } - function mouseenterSquare(evt) { + function mouseenterSquare (evt) { // do not fire this event if we are dragging a piece // NOTE: this should never happen, but it's a safeguard if (isDragging) return @@ -1888,11 +1895,11 @@ function constructor(containerElOrString, config) { square, piece, deepCopy(currentPosition), - currentOrientation, + currentOrientation ) } - function mouseleaveSquare(evt) { + function mouseleaveSquare (evt) { // do not fire this event if we are dragging a piece // NOTE: this should never happen, but it's a safeguard if (isDragging) return @@ -1917,7 +1924,7 @@ function constructor(containerElOrString, config) { square, piece, deepCopy(currentPosition), - currentOrientation, + currentOrientation ) } @@ -1925,16 +1932,18 @@ function constructor(containerElOrString, config) { // Initialization // ------------------------------------------------------------------------- - function addEvents() { + function addEvents () { // prevent "image drag" - $('body').on('mousedown mousemove', '.' + CSS.piece, stopDefault) + $('body').on('mousedown mousemove', '.' + CSS.piece, function (evt) { + evt.preventDefault() + }) // mouse drag pieces $board.on('mousedown', '.' + CSS.square, mousedownSquare) $container.on( 'mousedown', '.' + CSS.sparePieces + ' .' + CSS.piece, - mousedownSparePiece, + mousedownSparePiece ) // mouse enter / leave square @@ -1954,7 +1963,7 @@ function constructor(containerElOrString, config) { $container.on( 'touchstart', '.' + CSS.sparePieces + ' .' + CSS.piece, - touchstartSparePiece, + touchstartSparePiece ) $window .on('touchmove', throttledTouchmoveWindow) @@ -1962,7 +1971,7 @@ function constructor(containerElOrString, config) { } } - function initDOM() { + function initDOM () { // create unique IDs for all the elements we will create createElIds() @@ -1994,7 +2003,7 @@ function constructor(containerElOrString, config) { // Initialization // ------------------------------------------------------------------------- - if (config.cacheImages) cacheImages(); + if (config.cacheImages) cacheImages() setInitialState() initDOM() addEvents() From 3c9b035a8abcf8a3b1b2798abf1f2d60378c3baf Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 14:16:59 +0300 Subject: [PATCH 15/24] add alt attributes to pieces --- lib/chessboard.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/chessboard.js b/lib/chessboard.js index 88e79691..6b94df42 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -987,9 +987,27 @@ function constructor (containerElOrString, config) { return html + '">' + config.spareCounts[piece] + '' } + function getPieceName(piece) { + var dict = { + wK: "white king", + wQ: "white queen", + wR: "white rook", + wB: "white bishopp", + wN: "white knight", + wP: "white pawn", + bK: "black king", + bQ: "black queen", + bR: "black rook", + bB: "black bishop", + bN: "black knight", + bP: "black pawn", + }; + return dict[piece], + } + function buildPieceHTML (piece, hidden, id, is_spare) { var html = - '
' + getPieceName(piece) + ' Date: Wed, 13 Jul 2022 14:38:20 +0300 Subject: [PATCH 16/24] preload images instead of cache --- lib/chessboard.js | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/lib/chessboard.js b/lib/chessboard.js index 6b94df42..8126983d 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -924,8 +924,7 @@ function constructor (containerElOrString, config) { return interpolateTemplate(html, CSS) } - var imgCache = {} - function cacheImages () { + function preloadImages () { var pieces = [ 'wK', 'wQ', @@ -942,26 +941,11 @@ function constructor (containerElOrString, config) { ] pieces.forEach(function (piece) { var img = new Image() - img.onload = function () { - imgCache[piece] = getBase64Image(img) - } img.src = buildPieceImgSrc(piece) }) - - function getBase64Image (img) { - var canvas = document.createElement('canvas') - canvas.width = img.width - canvas.height = img.height - var ctx = canvas.getContext('2d') - ctx.drawImage(img, 0, 0) - var dataURL = canvas.toDataURL('image/png') - return dataURL - } } function buildPieceImgSrc (piece) { - if (imgCache[piece]) return imgCache[piece] - if (isFunction(config.pieceTheme)) { return config.pieceTheme(piece) } @@ -2021,7 +2005,7 @@ function constructor (containerElOrString, config) { // Initialization // ------------------------------------------------------------------------- - if (config.cacheImages) cacheImages() + if (config.preloadImages) preloadImages() setInitialState() initDOM() addEvents() From 466e25e7b1279fed86481d52774e422ecdb8c970 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 14:59:08 +0300 Subject: [PATCH 17/24] fix package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e4d4d606..9a607817 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,8 @@ "license": "MIT", "version": "1.1.0", "exports": { - "import": "./dist/chessboard-1.0.0.min.mjs", - "require": "./dist/chessboard-1.0.0.min.cjs" + "import": "./dist/build/chessboard.min.mjs", + "require": "./dist/build/chessboard.min.cjs" }, "repository": { "type": "git", From 0675b9311f4f96afe92886ada708e8e362aa3ba3 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 15:16:01 +0300 Subject: [PATCH 18/24] fix typo --- lib/chessboard.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/chessboard.js b/lib/chessboard.js index 8126983d..21240cc7 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -971,22 +971,22 @@ function constructor (containerElOrString, config) { return html + '">' + config.spareCounts[piece] + '' } - function getPieceName(piece) { + function getPieceName (piece) { var dict = { - wK: "white king", - wQ: "white queen", - wR: "white rook", - wB: "white bishopp", - wN: "white knight", - wP: "white pawn", - bK: "black king", - bQ: "black queen", - bR: "black rook", - bB: "black bishop", - bN: "black knight", - bP: "black pawn", - }; - return dict[piece], + wK: 'white king', + wQ: 'white queen', + wR: 'white rook', + wB: 'white bishopp', + wN: 'white knight', + wP: 'white pawn', + bK: 'black king', + bQ: 'black queen', + bR: 'black rook', + bB: 'black bishop', + bN: 'black knight', + bP: 'black pawn' + } + return dict[piece] } function buildPieceHTML (piece, hidden, id, is_spare) { From 761ce616c1cfb8ef30c9a3649dbbe3c2fe732dec Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 17:12:47 +0300 Subject: [PATCH 19/24] fix bug where piece shows in wrong location if scrolled down --- lib/chessboard.css | 8 +++----- lib/chessboard.js | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/chessboard.css b/lib/chessboard.css index 431e765b..d477794a 100644 --- a/lib/chessboard.css +++ b/lib/chessboard.css @@ -54,8 +54,7 @@ } .piece-wrapper { - position: relative; - display: inline-block; + z-index: 2; } .spare-count { @@ -63,11 +62,10 @@ padding: 0 4px; border-radius: 37%; font-size: 12px; - position: absolute; + position: relative; z-index: 1; background: #fff; - right: 0; - bottom: 1px; + left: -18px; } .spare-pieces-7492f { diff --git a/lib/chessboard.js b/lib/chessboard.js index 21240cc7..503a3b22 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -1469,7 +1469,7 @@ function constructor (containerElOrString, config) { // create the dragged piece $draggedPiece.attr('src', buildPieceImgSrc(piece)).css({ display: '', - position: 'fixed', + position: 'absolute', left: x - squareSize / 2, top: y - squareSize / 2, transform: `scale(${ From 0b4f76fb56c264dadc797b7737a593bb292cd05c Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 17:20:02 +0300 Subject: [PATCH 20/24] spare layout issue fix --- lib/chessboard.css | 5 +++-- lib/chessboard.js | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/chessboard.css b/lib/chessboard.css index d477794a..f0a70197 100644 --- a/lib/chessboard.css +++ b/lib/chessboard.css @@ -62,10 +62,11 @@ padding: 0 4px; border-radius: 37%; font-size: 12px; - position: relative; + position: absolute; z-index: 1; background: #fff; - left: -18px; + right: 0; + bottom: 1px; } .spare-pieces-7492f { diff --git a/lib/chessboard.js b/lib/chessboard.js index 503a3b22..07e90cbe 100644 --- a/lib/chessboard.js +++ b/lib/chessboard.js @@ -964,11 +964,11 @@ function constructor (containerElOrString, config) { return '' } var html = - '' + config.spareCounts[piece] + '' + return html + '">' + config.spareCounts[piece] + '
' } function getPieceName (piece) { From b8dcb2694462b40270d67882e492b5f5a4abc9fa Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 17:22:57 +0300 Subject: [PATCH 21/24] 1.1.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a91b136..f1b00326 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@discape/chessboardjs", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@discape/chessboardjs", - "version": "1.1.0", + "version": "1.1.1", "license": "MIT", "dependencies": { "jquery": ">=3.4.1" diff --git a/package.json b/package.json index 9a607817..dfb7f9bf 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "description": "JavaScript chessboard widget", "homepage": "https://chessboardjs.com", "license": "MIT", - "version": "1.1.0", + "version": "1.1.1", "exports": { "import": "./dist/build/chessboard.min.mjs", "require": "./dist/build/chessboard.min.cjs" From 0f958adf34e4ddd07415084f1b2370c05580805b Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 17:30:14 +0300 Subject: [PATCH 22/24] update changelog and keywords --- CHANGELOG.md | 11 +++++++++++ package.json | 1 + 2 files changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c6b2fe..167df36e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ All notable changes to this project will be documented in this file. +## [1.1.0] - 2022-07-13 +- Available as an npm module (both ES6 and CommonJS) with instructions +- Specify number of spares available to be placed +- Bug fixes and optimizations +- Works better on mobile +- Default piece images from CDN +- Internal position is updated before firing onChange +- Dragged piece can be magnified +- Accessibility improvements (alt tag) +- Can preload piece images + ## [1.0.0] - 2019-06-11 - Orientation methods now return current orientation. [Issue #64] - Drop support for IE8 diff --git a/package.json b/package.json index dfb7f9bf..d9ec5a0d 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "homepage": "https://chessboardjs.com", "license": "MIT", "version": "1.1.1", + "keywords": ["chess", "javascript", "es6", "commonjs", "jquery"], "exports": { "import": "./dist/build/chessboard.min.mjs", "require": "./dist/build/chessboard.min.cjs" From ab08edba4667fd81dda7e513979bac21ee1710b3 Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 20:16:27 +0300 Subject: [PATCH 23/24] update uglify --- package-lock.json | 2 +- yarn.lock | 1091 +++++++++++++++++++++++++++------------------ 2 files changed, 663 insertions(+), 430 deletions(-) diff --git a/package-lock.json b/package-lock.json index f1b00326..560f1c2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "kidif": "1.1.0", "mustache": "2.3.0", "standard": "10.0.2", - "uglify-js": "^3.6.0" + "uglify-js": "^3.16.2" } }, "node_modules/acorn": { diff --git a/yarn.lock b/yarn.lock index d76f51cc..63fe32ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,10 +14,10 @@ "resolved" "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz" "version" "3.3.0" -"acorn@^5.0.1": - "integrity" "sha512-Bg8ZrM3YfY12mPZkONS5uKZsTj9ctIduab+rkfIibEdWeVaZt37HeqsXPf+7ekOECE7NxOOa4VxuZKSkTGo8Tw==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz" - "version" "5.0.3" +"acorn@^5.5.0": + "integrity" "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz" + "version" "5.7.4" "ajv-keywords@^1.0.0": "integrity" "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==" @@ -42,75 +42,78 @@ "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" "version" "2.1.1" +"ansi-regex@^3.0.0": + "integrity" "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" + "version" "3.0.1" + "ansi-styles@^2.2.1": "integrity" "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" "version" "2.2.1" "argparse@^1.0.7": - "integrity" "sha512-iK7YPKV+GsvihPUTKcM3hh2gq47zSFCpVDv/Ay2O9mzuD7dfvLV4vhms4XcjZvv4VRgXuGLMEts51IlTjS11/A==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz" - "version" "1.0.9" + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" dependencies: "sprintf-js" "~1.0.2" -"array-union@^1.0.1": - "integrity" "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "array-uniq" "^1.0.1" - -"array-uniq@^1.0.1": - "integrity" "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - "version" "1.0.3" - "array.prototype.find@^2.0.1": - "integrity" "sha512-bTk9+sjVFDEHXGn7UU9UlfD1FqdvE/oFNXCMxnsRQg+yS7rSltM9Wro9+EJQMYGljl6Bc4kOpBgLQaXbzTTCsw==" - "resolved" "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz" - "version" "2.0.4" + "integrity" "sha512-sn40qmUiLYAcRb/1HsIQjTTZ1kCy8II8VtZJpMn2Aoen9twULhbWXisfh3HimGqMlHGUul0/TfKCnXg42LuPpQ==" + "resolved" "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.0.tgz" + "version" "2.2.0" dependencies: - "define-properties" "^1.1.2" - "es-abstract" "^1.7.0" - -"arrify@^1.0.0": - "integrity" "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - "version" "1.0.1" + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.4" + "es-shim-unscopables" "^1.0.0" "async@^1.5.2": - "integrity" "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" "version" "1.5.2" "babel-code-frame@^6.16.0": - "integrity" "sha512-Dmx3yJCO/UHWgFTKUlBPHUm7h5hCjI5Lfc07gmSv7H4AbUwxS7NHyorp8HN1YEd4xSDCf7P4zqnS63I3aaJTwg==" - "resolved" "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz" - "version" "6.22.0" + "integrity" "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==" + "resolved" "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz" + "version" "6.26.0" dependencies: - "chalk" "^1.1.0" + "chalk" "^1.1.3" "esutils" "^2.0.2" - "js-tokens" "^3.0.0" + "js-tokens" "^3.0.2" -"balanced-match@^0.4.1": - "integrity" "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz" - "version" "0.4.2" +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" "brace-expansion@^1.1.7": - "integrity" "sha512-ebXXDR1wKKxJNfTM872trAU5hpKduCkTN37ipoxsh5yibWq8FfxiobiHuVlPFkspSSNhrxbPHbM4kGyDGdJ5mg==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz" - "version" "1.1.7" + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" dependencies: - "balanced-match" "^0.4.1" + "balanced-match" "^1.0.0" "concat-map" "0.0.1" +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + "builtin-modules@^1.1.1": "integrity" "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==" "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" "version" "1.1.1" +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + "caller-path@^0.1.0": "integrity" "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==" "resolved" "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz" @@ -123,7 +126,7 @@ "resolved" "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz" "version" "0.2.0" -"chalk@^1.0.0", "chalk@^1.1.0", "chalk@^1.1.1", "chalk@^1.1.3": +"chalk@^1.0.0", "chalk@^1.1.1", "chalk@^1.1.3": "integrity" "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==" "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" "version" "1.1.3" @@ -135,9 +138,9 @@ "supports-color" "^2.0.0" "circular-json@^0.3.1": - "integrity" "sha512-MTc6ffiOuzmPfRWVHjRscjzTQSYq16oouOebk6iHn/Tvp1mKBwQ/x33Trh7oZwI0e7wZyMV9KzDBWalzxjoIGQ==" - "resolved" "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz" - "version" "0.3.1" + "integrity" "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" + "resolved" "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz" + "version" "0.3.3" "cli-cursor@^1.0.1": "integrity" "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==" @@ -147,9 +150,9 @@ "restore-cursor" "^1.0.1" "cli-width@^2.0.0": - "integrity" "sha512-w9+InVqlfC6hq5odRMsdb85XIIaCusCmCg21AsMEqGYKGHEWxr1CBYW4CCTSWC0FpsFGkY6FrOvjnnxGlY52Bg==" - "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz" - "version" "2.1.0" + "integrity" "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz" + "version" "2.2.1" "co@^4.6.0": "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" @@ -161,21 +164,17 @@ "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" "version" "1.1.0" -"commander@~2.20.0": - "integrity" "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz" - "version" "2.20.0" - "concat-map@0.0.1": "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" "version" "0.0.1" "concat-stream@^1.5.2": - "integrity" "sha512-afaQKFIg+fob6EzbytOlXZZTYrdZWaegQx2b6AWg9MoALXgctIcbRQrjcu6Wsh5801lVXaQYVwBw6vlATW0qPA==" - "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz" - "version" "1.6.0" + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + "version" "1.6.2" dependencies: + "buffer-from" "^1.0.0" "inherits" "^2.0.3" "readable-stream" "^2.2.2" "typedarray" "^0.0.6" @@ -186,9 +185,9 @@ "version" "0.1.0" "core-util-is@~1.0.0": - "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + "version" "1.0.3" "css-tree@1.0.0-alpha.29": "integrity" "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==" @@ -205,42 +204,50 @@ dependencies: "css-tree" "1.0.0-alpha.29" -"d@1": - "integrity" "sha512-9x1NruMD5YQ7xccKbGEy/bjitRfn5LEIhJIXIOAXC8I1laA5gfezUMVES1/vjLxfGzZjirLLBzEqxMO2/LzGxQ==" - "resolved" "https://registry.npmjs.org/d/-/d-1.0.0.tgz" - "version" "1.0.0" +"d@^1.0.1", "d@1": + "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" + "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + "version" "1.0.1" dependencies: - "es5-ext" "^0.10.9" + "es5-ext" "^0.10.50" + "type" "^1.0.1" "debug-log@^1.0.0": "integrity" "sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==" "resolved" "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz" "version" "1.0.1" -"debug@^2.1.1", "debug@^2.2.0", "debug@2.2.0": - "integrity" "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz" - "version" "2.2.0" +"debug@^2.1.1", "debug@^2.2.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^3.2.7": + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + "version" "3.2.7" dependencies: - "ms" "0.7.1" + "ms" "^2.1.1" "deep-is@~0.1.3": - "integrity" "sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" -"define-properties@^1.1.2": - "integrity" "sha512-hpr5VSFXGamODSCN6P2zdSBY6zJT7DlcBAHiPIa2PWDvfBqJQntSK0ehUoHoS6HGeSS19dgj7E+1xOjfG3zEtQ==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz" - "version" "1.1.2" +"define-properties@^1.1.3", "define-properties@^1.1.4": + "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + "version" "1.1.4" dependencies: - "foreach" "^2.0.5" - "object-keys" "^1.0.8" + "has-property-descriptors" "^1.0.0" + "object-keys" "^1.1.1" "deglob@^2.1.0": - "integrity" "sha512-T9hCYYI03ubPtxviA1sHVbamCYKZBbRjpONb/SwMolUZvOriX992lFd/uStESsbSZR63R+ytKI3uOFgkf/5BuQ==" - "resolved" "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz" - "version" "2.1.0" + "integrity" "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==" + "resolved" "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz" + "version" "2.1.1" dependencies: "find-root" "^1.0.0" "glob" "^7.0.5" @@ -249,19 +256,6 @@ "run-parallel" "^1.1.2" "uniq" "^1.0.1" -"del@^2.0.2": - "integrity" "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==" - "resolved" "https://registry.npmjs.org/del/-/del-2.2.2.tgz" - "version" "2.2.2" - dependencies: - "globby" "^5.0.0" - "is-path-cwd" "^1.0.0" - "is-path-in-cwd" "^1.0.0" - "object-assign" "^4.0.1" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - "rimraf" "^2.2.8" - "doctrine@^1.2.2": "integrity" "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==" "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz" @@ -271,12 +265,11 @@ "isarray" "^1.0.0" "doctrine@^2.0.0": - "integrity" "sha512-i5aQLQvEyAhw7XI4mbKxyrVdkqIc4OsCh9Z0XQof9X/ANftd0ZN1M4qz+TSU2VSokVwl23kXDvhnC4F4W+ip/g==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz" - "version" "2.0.0" + "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + "version" "2.1.0" dependencies: "esutils" "^2.0.2" - "isarray" "^1.0.0" "doctrine@1.5.0": "integrity" "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==" @@ -286,48 +279,75 @@ "esutils" "^2.0.2" "isarray" "^1.0.0" -"error-ex@^1.2.0": - "integrity" "sha512-FfmVxYsm1QOFoPI2xQmNnEH10Af42mCxtGrKvS1JfDTXlPLYiAz2T+QpjHPxf+OGniMfWZah9ULAhPoKQ3SEqg==" - "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz" - "version" "1.3.1" +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" dependencies: "is-arrayish" "^0.2.1" -"es-abstract@^1.7.0": - "integrity" "sha512-i6XNnPIsGv+/kQTyYVLOwwG3XYx29Ivzz6rE3tC8OSzt6Ic/h2IeHKR0RfoI2heIB61Yiv+qZFLuh1JiyZ9neg==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz" - "version" "1.7.0" +"es-abstract@^1.19.0", "es-abstract@^1.19.4", "es-abstract@^1.19.5": + "integrity" "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" + "version" "1.20.1" + dependencies: + "call-bind" "^1.0.2" + "es-to-primitive" "^1.2.1" + "function-bind" "^1.1.1" + "function.prototype.name" "^1.1.5" + "get-intrinsic" "^1.1.1" + "get-symbol-description" "^1.0.0" + "has" "^1.0.3" + "has-property-descriptors" "^1.0.0" + "has-symbols" "^1.0.3" + "internal-slot" "^1.0.3" + "is-callable" "^1.2.4" + "is-negative-zero" "^2.0.2" + "is-regex" "^1.1.4" + "is-shared-array-buffer" "^1.0.2" + "is-string" "^1.0.7" + "is-weakref" "^1.0.2" + "object-inspect" "^1.12.0" + "object-keys" "^1.1.1" + "object.assign" "^4.1.2" + "regexp.prototype.flags" "^1.4.3" + "string.prototype.trimend" "^1.0.5" + "string.prototype.trimstart" "^1.0.5" + "unbox-primitive" "^1.0.2" + +"es-shim-unscopables@^1.0.0": + "integrity" "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==" + "resolved" "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + "version" "1.0.0" dependencies: - "es-to-primitive" "^1.1.1" - "function-bind" "^1.1.0" - "is-callable" "^1.1.3" - "is-regex" "^1.0.3" + "has" "^1.0.3" -"es-to-primitive@^1.1.1": - "integrity" "sha512-wXsac552n5sYhgVjyFvhXLunXZFPOiT/WgP7hFhUPU5gtaUQpm9OryPwlWQUS3Qptk8iZzY/2T3J62GtC/toSw==" - "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz" - "version" "1.1.1" +"es-to-primitive@^1.2.1": + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + "version" "1.2.1" dependencies: - "is-callable" "^1.1.1" + "is-callable" "^1.1.4" "is-date-object" "^1.0.1" - "is-symbol" "^1.0.1" + "is-symbol" "^1.0.2" -"es5-ext@^0.10.14", "es5-ext@^0.10.9", "es5-ext@~0.10.14": - "integrity" "sha512-YXTXSlZkJsVwMEVljp1Bh5P9+Raa3524OMl9kywGMp1aazKTCnAqORRL/8dkuqNHk+LRYe0LezuS8PlUt3+mOw==" - "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz" - "version" "0.10.22" +"es5-ext@^0.10.35", "es5-ext@^0.10.46", "es5-ext@^0.10.50", "es5-ext@~0.10.14": + "integrity" "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==" + "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz" + "version" "0.10.61" dependencies: - "es6-iterator" "2" - "es6-symbol" "~3.1" + "es6-iterator" "^2.0.3" + "es6-symbol" "^3.1.3" + "next-tick" "^1.1.0" -"es6-iterator@^2.0.1", "es6-iterator@~2.0.1", "es6-iterator@2": - "integrity" "sha512-6QdxKjEfkAutL86ORbUgbZjfmssn3hfrFZDz5utw2BH9EJWYCVVqn9dN/WvsWSzsZ7Ox/fMrHXexX96fF5vEsw==" - "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz" - "version" "2.0.1" +"es6-iterator@^2.0.3", "es6-iterator@~2.0.1": + "integrity" "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==" + "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + "version" "2.0.3" dependencies: "d" "1" - "es5-ext" "^0.10.14" - "es6-symbol" "^3.1" + "es5-ext" "^0.10.35" + "es6-symbol" "^3.1.1" "es6-map@^0.1.3": "integrity" "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==" @@ -352,7 +372,15 @@ "es6-symbol" "3.1.1" "event-emitter" "~0.3.5" -"es6-symbol@^3.1", "es6-symbol@^3.1.1", "es6-symbol@~3.1", "es6-symbol@~3.1.1", "es6-symbol@3.1.1": +"es6-symbol@^3.1.1", "es6-symbol@^3.1.3", "es6-symbol@~3.1.1": + "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" + "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "d" "^1.0.1" + "ext" "^1.1.2" + +"es6-symbol@3.1.1": "integrity" "sha512-exfuQY8UGtn/N+gL1iKkH8fpNd5sJ760nJq6mmZAHldfxMD5kX07lbQuYlspoXsuknXNv9Fb7y2GsPOnQIbxHg==" "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" "version" "3.1.1" @@ -361,13 +389,13 @@ "es5-ext" "~0.10.14" "es6-weak-map@^2.0.1": - "integrity" "sha512-rx4zGKCKP7e3n3BtHemBtuJ9DCFw5jfjtdSM132RsGxlBgJvudmL/ogowl2Je/dJDbGws+od3J3PHOTAleo27w==" - "resolved" "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz" - "version" "2.0.2" + "integrity" "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==" + "resolved" "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" + "version" "2.0.3" dependencies: "d" "1" - "es5-ext" "^0.10.14" - "es6-iterator" "^2.0.1" + "es5-ext" "^0.10.46" + "es6-iterator" "^2.0.3" "es6-symbol" "^3.1.1" "escape-string-regexp@^1.0.2", "escape-string-regexp@^1.0.5": @@ -405,12 +433,12 @@ "resolve" "^1.1.6" "eslint-module-utils@^2.0.0": - "integrity" "sha512-dbCxecY4K8DzOl71Pe1j6dV/nNw0Pmcve/p+sE7Xmn5+94N1McShGEEXiF3HvIVNB2KgBnzsfdXwWmUGg85IGw==" - "resolved" "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz" - "version" "2.0.0" + "integrity" "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==" + "resolved" "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz" + "version" "2.7.3" dependencies: - "debug" "2.2.0" - "pkg-dir" "^1.0.0" + "debug" "^3.2.7" + "find-up" "^2.1.0" "eslint-plugin-import@>=2.2.0", "eslint-plugin-import@~2.2.0": "integrity" "sha512-8HLeIYzOH4eltevxf+iC9Dtz/91yaeOqtlba5srcpQWLrv57F5NNG1RNLqAbpWJWDD4BxKuKjUveJY9W6Tbswg==" @@ -429,9 +457,9 @@ "pkg-up" "^1.0.0" "eslint-plugin-node@>=4.2.2", "eslint-plugin-node@~4.2.2": - "integrity" "sha512-iEmMJQgmsKnZKLPIjSU4+H44tsR1HmTBNC/+XbBbRbq4Sxu4CijLscPSxpYqLZsMslRMyvovZuyoATzM3DSELw==" - "resolved" "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz" - "version" "4.2.2" + "integrity" "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==" + "resolved" "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz" + "version" "4.2.3" dependencies: "ignore" "^3.0.11" "minimatch" "^3.0.2" @@ -502,47 +530,51 @@ "user-home" "^2.0.0" "espree@^3.4.0": - "integrity" "sha512-Xqn0i9fqQLP/vV+/kw/kg94qSqoQME0xuoroSuTieHOC3SoYVumn/zq+aoqc0EkK0IqiFhsfN+R+ACt6RExJgg==" - "resolved" "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz" - "version" "3.4.3" + "integrity" "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==" + "resolved" "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz" + "version" "3.5.4" dependencies: - "acorn" "^5.0.1" + "acorn" "^5.5.0" "acorn-jsx" "^3.0.0" -"esprima@^3.1.1": - "integrity" "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz" - "version" "3.1.3" +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" "esquery@^1.0.0": - "integrity" "sha512-81Hhof+z1FE3KIrTFOXjaRl7vphcZyUEwRY+pbVv2tdVxM3uxJzd3xvdtiFSUxQdq7zoH+U5Qy9UAKyHqv8LfA==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz" - "version" "1.0.0" + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" dependencies: - "estraverse" "^4.0.0" + "estraverse" "^5.1.0" "esrecurse@^4.1.0": - "integrity" "sha512-4pWjwT+t5yO1v2/nV29A6IUpV7I78jR6mmZhhM/65pPV3ZZZQ5f1j354Mt5XzhDH0bqB3oDfF0BA2RPOY/NxBg==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz" - "version" "4.1.0" + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" dependencies: - "estraverse" "~4.1.0" - "object-assign" "^4.0.1" + "estraverse" "^5.2.0" -"estraverse@^4.0.0", "estraverse@^4.1.1", "estraverse@^4.2.0": - "integrity" "sha512-VHvyaGnJy+FuGfcfaM7W7OZw4mQiKW73jPHwQXx2VnMSUBajYmytOT5sKEfsBvNPtGX6YDwcrGDz2eocoHg0JA==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" - "version" "4.2.0" +"estraverse@^4.1.1", "estraverse@^4.2.0": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" -"estraverse@~4.1.0": - "integrity" "sha512-r3gEa6vc6lGQdrXfo834EaaqnOzYmik8JPg8VB95acIMZRjqaHI0/WMZFoMBGPtS+HCgylwTLoc4Y5yl0owOHQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz" - "version" "4.1.1" +"estraverse@^5.1.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" "esutils@^2.0.2": - "integrity" "sha512-UUPPULqkyAV+M3Shodis7l8D+IyX6V8SbaBnTb449jf3fMTd8+UOZI1Q70NbZVOQkcR91yYgdHsJiMMMVmYshg==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" - "version" "2.0.2" + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" "event-emitter@~0.3.5": "integrity" "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==" @@ -557,7 +589,14 @@ "resolved" "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz" "version" "1.1.1" -"fast-levenshtein@~2.0.4": +"ext@^1.1.2": + "integrity" "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==" + "resolved" "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "type" "^2.5.0" + +"fast-levenshtein@~2.0.6": "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" "version" "2.0.6" @@ -579,9 +618,9 @@ "object-assign" "^4.0.1" "find-root@^1.0.0": - "integrity" "sha512-6fkVew54iP/VjbdCZXcyYJJrlqs/TNxSCoqK4Nj+ogFbSORcVJHGLXVkhjzZanGujOylky+WgVEBpq6n/jSIrw==" - "resolved" "https://registry.npmjs.org/find-root/-/find-root-1.0.0.tgz" - "version" "1.0.0" + "integrity" "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "resolved" "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" + "version" "1.1.0" "find-up@^1.0.0": "integrity" "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==" @@ -591,7 +630,7 @@ "path-exists" "^2.0.0" "pinkie-promise" "^2.0.0" -"find-up@^2.0.0": +"find-up@^2.0.0", "find-up@^2.1.0": "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" "version" "2.1.0" @@ -599,20 +638,15 @@ "locate-path" "^2.0.0" "flat-cache@^1.2.1": - "integrity" "sha512-JzMp5lzDuF/1qgd3g+awLvXlVxAcWxL4L2NfZe9r19bwjKqGjXg5waNXG8wuP9skmVmiKhAo/lN+FDJxVKNDgQ==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz" - "version" "1.2.2" + "integrity" "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz" + "version" "1.3.4" dependencies: "circular-json" "^0.3.1" - "del" "^2.0.2" "graceful-fs" "^4.1.2" + "rimraf" "~2.6.2" "write" "^0.2.1" -"foreach@^2.0.5": - "integrity" "sha512-ZBbtRiapkZYLsqoPyZOR+uPfto0GRMNQN1GwzZtZt7iZvPPbDDQV0JF5Hx4o/QFQ5c0vyuoZ98T8RSBbopzWtA==" - "resolved" "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" - "version" "2.0.5" - "fs-plus@3.1.1": "integrity" "sha512-Se2PJdOWXqos1qVTkvqqjb0CSnfBnwwD+pq+z4ksT+e97mEShod/hrNg0TRCCsXPbJzcIq+NuzQhigunMWMJUA==" "resolved" "https://registry.npmjs.org/fs-plus/-/fs-plus-3.1.1.tgz" @@ -628,15 +662,32 @@ "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" "version" "1.0.0" -"function-bind@^1.0.2", "function-bind@^1.1.0": - "integrity" "sha512-rdjNZR1BePD6g5bTgalqkSN9eMuHgB2KHOBupLM8f5TblXwiV8nSY31dygkdwLNFn1m2KAkjFsREUuLNcU1rdg==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz" - "version" "1.1.0" +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"function.prototype.name@^1.1.5": + "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" + "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.0" + "functions-have-names" "^1.2.2" + +"functions-have-names@^1.2.2": + "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + "version" "1.2.3" "generate-function@^2.0.0": - "integrity" "sha512-X46lB9wLCsgkyagCmX2Dev5od5j6niCr3UeMbXVDBVO4tlpXp3o4OFh+0gPTlkD3ZMixU8PCKxf0IMGQvPo8HQ==" - "resolved" "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" - "version" "2.0.0" + "integrity" "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==" + "resolved" "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "is-property" "^1.0.2" "generate-object-property@^1.1.0": "integrity" "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==" @@ -645,11 +696,28 @@ dependencies: "is-property" "^1.0.0" +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1": + "integrity" "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.3" + "get-stdin@^5.0.1": "integrity" "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==" "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz" "version" "5.0.1" +"get-symbol-description@^1.0.0": + "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" + "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.1" + "glob@^7.0.0", "glob@7.0.0": "integrity" "sha512-Fa+aQV0FFMU4/Jg5mquHjv5DikTujeAWOpbGa9lsG2Qa+ehYxbGN3cCY/T+C+jAS8gKBnYN2MbrdNm0UCAcp7w==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.0.0.tgz" @@ -662,62 +730,50 @@ "path-is-absolute" "^1.0.0" "glob@^7.0.3": - "integrity" "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" - "version" "7.1.2" + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" dependencies: "fs.realpath" "^1.0.0" "inflight" "^1.0.4" "inherits" "2" - "minimatch" "^3.0.4" + "minimatch" "^3.1.1" "once" "^1.3.0" "path-is-absolute" "^1.0.0" "glob@^7.0.5": - "integrity" "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" - "version" "7.1.2" + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" dependencies: "fs.realpath" "^1.0.0" "inflight" "^1.0.4" "inherits" "2" - "minimatch" "^3.0.4" + "minimatch" "^3.1.1" "once" "^1.3.0" "path-is-absolute" "^1.0.0" "glob@^7.1.3": - "integrity" "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" - "version" "7.1.4" + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" dependencies: "fs.realpath" "^1.0.0" "inflight" "^1.0.4" "inherits" "2" - "minimatch" "^3.0.4" + "minimatch" "^3.1.1" "once" "^1.3.0" "path-is-absolute" "^1.0.0" "globals@^9.14.0": - "integrity" "sha512-oZir3ZZbSYGRu+KeFbR9nWoB8wqAciMthMMSeoy2eFcRZf3uzZOsbCOFKtW/QdnK+cz7nn7eL3q6JCAfgsb/2Q==" - "resolved" "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz" - "version" "9.17.0" - -"globby@^5.0.0": - "integrity" "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==" - "resolved" "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "array-union" "^1.0.1" - "arrify" "^1.0.0" - "glob" "^7.0.3" - "object-assign" "^4.0.1" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" + "integrity" "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + "resolved" "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz" + "version" "9.18.0" "graceful-fs@^4.1.2": - "integrity" "sha512-9x6DLUuW+ROFdMTII9ec9t/FK8va6kYcC8/LggumssLM8kNv7IdFl3VrNUqgir2tJuBVxBga1QBoRziZacO5Zg==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" - "version" "4.1.11" + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" "has-ansi@^2.0.0": "integrity" "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==" @@ -726,17 +782,41 @@ dependencies: "ansi-regex" "^2.0.0" -"has@^1.0.1": - "integrity" "sha512-8wpov6mGFPJ/SYWGQIFo6t0yuNWoO9MkSq3flX8LhiGmbIUhDETp9knPMcIm0Xig1ybWsw6gq2w0gCz1JHD+Qw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.1.tgz" - "version" "1.0.1" +"has-bigints@^1.0.1", "has-bigints@^1.0.2": + "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + "version" "1.0.2" + +"has-property-descriptors@^1.0.0": + "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" + "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + "version" "1.0.0" dependencies: - "function-bind" "^1.0.2" + "get-intrinsic" "^1.1.1" + +"has-symbols@^1.0.1", "has-symbols@^1.0.2", "has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" + +"has-tostringtag@^1.0.0": + "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" + "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-symbols" "^1.0.2" + +"has@^1.0.1", "has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" "ignore@^3.0.11", "ignore@^3.0.9", "ignore@^3.2.0": - "integrity" "sha512-EreSWopcoOuUkFfoYLwnaiDVfyyI4vmaYJN2k9XtwUH0GBRjXcJ6WC9yLrx7+5V1IL9VW+AltFnFG+N9Dp467Q==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz" - "version" "3.3.3" + "integrity" "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz" + "version" "3.3.10" "imurmurhash@^0.1.4": "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" @@ -751,10 +831,10 @@ "once" "^1.3.0" "wrappy" "1" -"inherits@^2.0.3", "inherits@~2.0.1", "inherits@2": - "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - "version" "2.0.3" +"inherits@^2.0.3", "inherits@~2.0.3", "inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" "inquirer@^0.12.0": "integrity" "sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ==" @@ -775,25 +855,58 @@ "strip-ansi" "^3.0.0" "through" "^2.3.6" -"interpret@^1.0.0": - "integrity" "sha512-QZeLkTbMF2lgHs0JhQF8cCiJO8RSgBJ7b5ey6LIzAeiKWBZTD1LpsAXfqlONI3uw8VQS9YkQP647Fy0HRO54bA==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz" +"internal-slot@^1.0.3": + "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" + "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" "version" "1.0.3" + dependencies: + "get-intrinsic" "^1.1.0" + "has" "^1.0.3" + "side-channel" "^1.0.4" + +"interpret@^1.0.0": + "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + "version" "1.4.0" "is-arrayish@^0.2.1": "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" "version" "0.2.1" -"is-callable@^1.1.1", "is-callable@^1.1.3": - "integrity" "sha512-gcmUh1kFielP0yJSKD+A1aOPNlI8ZzruhHum+Geq6M3Ibx5JnwcsTJCktWj+reKIjjtefToy/u8YNRUZq4FHuQ==" - "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz" - "version" "1.1.3" +"is-bigint@^1.0.1": + "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-bigints" "^1.0.1" + +"is-boolean-object@^1.1.0": + "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-callable@^1.1.4", "is-callable@^1.2.4": + "integrity" "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" + "version" "1.2.4" + +"is-core-module@^2.9.0": + "integrity" "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" + "version" "2.9.0" + dependencies: + "has" "^1.0.3" "is-date-object@^1.0.1": - "integrity" "sha512-P5rExV1phPi42ppoMWy7V63N3i173RY921l4JJ7zonMSxK+OWGPj76GD+cUKUb68l4vQXcJp2SsG+r/A4ABVzg==" - "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz" - "version" "1.0.1" + "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "has-tostringtag" "^1.0.0" "is-fullwidth-code-point@^1.0.0": "integrity" "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==" @@ -807,58 +920,79 @@ "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" "version" "2.0.0" +"is-my-ip-valid@^1.0.0": + "integrity" "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==" + "resolved" "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz" + "version" "1.0.1" + "is-my-json-valid@^2.10.0": - "integrity" "sha512-6AFGaggK+pZhYW+jXVPxaDgMuZvq0HbinaSrA9ecxKwg1WVKpchZRs0nRkvMiv+hIOFYeyLQ75RVs6Qs+KFk8Q==" - "resolved" "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz" - "version" "2.16.0" + "integrity" "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==" + "resolved" "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz" + "version" "2.20.6" dependencies: "generate-function" "^2.0.0" "generate-object-property" "^1.1.0" - "jsonpointer" "^4.0.0" + "is-my-ip-valid" "^1.0.0" + "jsonpointer" "^5.0.0" "xtend" "^4.0.0" -"is-path-cwd@^1.0.0": - "integrity" "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" - "version" "1.0.0" - -"is-path-in-cwd@^1.0.0": - "integrity" "sha512-XSig+5QTx0ReXCURjvzGsLUFT8V36AjyVkc6axI1r5QT3BMVR0MptnXBNU7iyfn2aQIgm8/vP4h58RVIsL7rEw==" - "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-path-inside" "^1.0.0" +"is-negative-zero@^2.0.2": + "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + "version" "2.0.2" -"is-path-inside@^1.0.0": - "integrity" "sha512-WdiHWLVPHbn+QOQdJXqJS7TtArj7yXvKb8ZyFZ7AaIuW7KOfLLyR5glFAR+b1Q6PhSOTL8lpQvIoV2klU0nE9g==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz" - "version" "1.0.0" +"is-number-object@^1.0.4": + "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + "version" "1.0.7" dependencies: - "path-is-inside" "^1.0.1" + "has-tostringtag" "^1.0.0" -"is-property@^1.0.0": +"is-property@^1.0.0", "is-property@^1.0.2": "integrity" "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" "resolved" "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" "version" "1.0.2" -"is-regex@^1.0.3": - "integrity" "sha512-WQgPrEkb1mPCWLSlLFuN1VziADSixANugwSkJfPRR73FNWIQQN+tR/t1zWfyES/Y9oag/XBtVsahFdfBku3Kyw==" - "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz" - "version" "1.0.4" +"is-regex@^1.1.4": + "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + "version" "1.1.4" dependencies: - "has" "^1.0.1" + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" "is-resolvable@^1.0.0": - "integrity" "sha512-9FcOmO8DNEuvfwr4zahMkx1NNWBG+r8MUz+1t608iNqHEjflcvwl368niaBjuIUug3njonc6loJ6r8ReIfwYbQ==" - "resolved" "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz" - "version" "1.0.0" + "integrity" "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + "resolved" "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" + "version" "1.1.0" + +"is-shared-array-buffer@^1.0.2": + "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" + "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + "version" "1.0.2" dependencies: - "tryit" "^1.0.1" + "call-bind" "^1.0.2" -"is-symbol@^1.0.1": - "integrity" "sha512-Z1cLAG7dXM1vJv8mAGjA+XteO0YzYPwD473+qPAWKycNZxwCH/I56QIohKGYCZSB7j6tajrxi/FvOpAfqGhhRQ==" - "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz" - "version" "1.0.1" +"is-string@^1.0.5", "is-string@^1.0.7": + "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-symbol@^1.0.2", "is-symbol@^1.0.3": + "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" + "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-symbols" "^1.0.2" + +"is-weakref@^1.0.2": + "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" + "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" "isarray@^1.0.0", "isarray@~1.0.0": "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" @@ -866,22 +1000,27 @@ "version" "1.0.0" "jquery@>=3.4.1": - "integrity" "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ==" - "resolved" "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz" - "version" "3.5.0" + "integrity" "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + "resolved" "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz" + "version" "3.6.0" -"js-tokens@^3.0.0": - "integrity" "sha512-uGx5mrUJTDuSk2T4NendihsPTPR4Pgu06OYD5bEvFSXX4MZfGSy7tL6nlYWyJUAqQYo/3xkKLyIQzIqDx4UCDg==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz" - "version" "3.0.1" +"js-tokens@^3.0.2": + "integrity" "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" + "version" "3.0.2" "js-yaml@^3.5.1": - "integrity" "sha512-bgjcVwQFrFX7lpj97N1cLRCEUrXKdRqLWwvoKVFep3Qg5RAuYw78NeThxDekWvmuE1tg+0Ke49RshU1ZcXCHmA==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz" - "version" "3.8.4" + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" dependencies: "argparse" "^1.0.7" - "esprima" "^3.1.1" + "esprima" "^4.0.0" + +"json-parse-better-errors@^1.0.1": + "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + "version" "1.0.2" "json-stable-stringify@^1.0.0", "json-stable-stringify@^1.0.1": "integrity" "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==" @@ -895,10 +1034,10 @@ "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" "version" "0.0.0" -"jsonpointer@^4.0.0": - "integrity" "sha512-K7vR/jmvXsP04hvItAziqPeWmGceLWye9tkqbI+zFCvD4aDnL94BbGHggtQTfqRxbsgGWb4ospGQU8Rd7CEzPg==" - "resolved" "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz" - "version" "4.0.1" +"jsonpointer@^5.0.0": + "integrity" "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==" + "resolved" "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz" + "version" "5.0.0" "jsx-ast-utils@^1.3.4": "integrity" "sha512-0LwSmMlQjjUdXsdlyYhEfBJCn2Chm0zgUBmfmf1++KUULh+JOdlzrZfiwe2zmlVJx44UF+KX/B/odBoeK9hxmw==" @@ -920,14 +1059,14 @@ "prelude-ls" "~1.1.2" "type-check" "~0.3.2" -"load-json-file@^2.0.0": - "integrity" "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" - "version" "2.0.0" +"load-json-file@^4.0.0": + "integrity" "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + "version" "4.0.0" dependencies: "graceful-fs" "^4.1.2" - "parse-json" "^2.2.0" - "pify" "^2.0.0" + "parse-json" "^4.0.0" + "pify" "^3.0.0" "strip-bom" "^3.0.0" "locate-path@^2.0.0": @@ -944,43 +1083,43 @@ "version" "4.5.2" "lodash@^4.0.0", "lodash@^4.3.0": - "integrity" "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz" - "version" "4.17.19" + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" "mdn-data@~1.1.0": "integrity" "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz" "version" "1.1.4" -"minimatch@^3.0.2", "minimatch@^3.0.3", "minimatch@^3.0.4", "minimatch@2 || 3": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" +"minimatch@^3.0.2", "minimatch@^3.0.3", "minimatch@^3.1.1", "minimatch@2 || 3": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" dependencies: "brace-expansion" "^1.1.7" -"minimist@^1.1.0": - "integrity" "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" - "version" "1.2.0" - -"minimist@0.0.8": - "integrity" "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" - "version" "0.0.8" +"minimist@^1.1.0", "minimist@^1.2.6": + "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + "version" "1.2.6" "mkdirp@^0.5.0", "mkdirp@^0.5.1": - "integrity" "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" - "version" "0.5.1" + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" dependencies: - "minimist" "0.0.8" + "minimist" "^1.2.6" + +"ms@^2.1.1": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" -"ms@0.7.1": - "integrity" "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==" - "resolved" "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" - "version" "0.7.1" +"ms@2.0.0": + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" "mustache@2.3.0": "integrity" "sha512-IgZ/cCHtDG1ft0vdDV9wrlNz20SvbUu2ECoDF6dhk2ZtedLNy1Kehy4oFlzmHPxcUQmVZuXYS2j+d0NkaEjTXQ==" @@ -997,6 +1136,11 @@ "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" "version" "1.4.0" +"next-tick@^1.1.0": + "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + "version" "1.1.0" + "number-is-nan@^1.0.0": "integrity" "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" @@ -1007,19 +1151,25 @@ "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" "version" "4.1.1" -"object-keys@^1.0.10", "object-keys@^1.0.8": - "integrity" "sha512-I0jUsqFqmQFOIhQQFlW8QDuX3pVqUWkiiavYj8+TBiS7m+pM9hPCxSnYWqL1hHMBb7BbQ2HidT+6CZ8/BT/ilw==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz" - "version" "1.0.11" +"object-inspect@^1.12.0", "object-inspect@^1.9.0": + "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + "version" "1.12.2" + +"object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" -"object.assign@^4.0.4": - "integrity" "sha512-RUMl4JcrbyFSPF2x7BQWr3nbHLqmy4732SWc2brBe89YLHZoZW/AFWKndkt0LFumLJPbsX3xb0PukBFBwCcmSw==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz" - "version" "4.0.4" +"object.assign@^4.0.4", "object.assign@^4.1.2": + "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + "version" "4.1.2" dependencies: - "define-properties" "^1.1.2" - "function-bind" "^1.1.0" - "object-keys" "^1.0.10" + "call-bind" "^1.0.0" + "define-properties" "^1.1.3" + "has-symbols" "^1.0.1" + "object-keys" "^1.1.1" "once@^1.3.0": "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" @@ -1034,16 +1184,16 @@ "version" "1.1.0" "optionator@^0.8.2": - "integrity" "sha512-oCOQ8AIC2ciLy/sE2ehafRBleBgDLvzGhBRRev87sP7ovnbvQfqpc3XFI0DhHey2OfVoNV91W+GPC6B3540/5Q==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz" - "version" "0.8.2" + "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + "version" "0.8.3" dependencies: "deep-is" "~0.1.3" - "fast-levenshtein" "~2.0.4" + "fast-levenshtein" "~2.0.6" "levn" "~0.3.0" "prelude-ls" "~1.1.2" "type-check" "~0.3.2" - "wordwrap" "~1.0.0" + "word-wrap" "~1.2.3" "os-homedir@^1.0.0": "integrity" "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" @@ -1051,9 +1201,11 @@ "version" "1.0.2" "p-limit@^1.1.0": - "integrity" "sha512-sFSFmsGcVho1dNzsPGyiL1xs4KxZlM2QlznVxCDg0loLefThSsVkZPyBZEehQSci0nLwkgPZziJYpMGa59Vzqw==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz" - "version" "1.1.0" + "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "p-try" "^1.0.0" "p-locate@^2.0.0": "integrity" "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==" @@ -1062,12 +1214,18 @@ dependencies: "p-limit" "^1.1.0" -"parse-json@^2.2.0": - "integrity" "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" - "version" "2.2.0" +"p-try@^1.0.0": + "integrity" "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + "version" "1.0.0" + +"parse-json@^4.0.0": + "integrity" "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" dependencies: - "error-ex" "^1.2.0" + "error-ex" "^1.3.1" + "json-parse-better-errors" "^1.0.1" "path-exists@^2.0.0": "integrity" "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==" @@ -1091,15 +1249,15 @@ "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" "version" "1.0.2" -"path-parse@^1.0.5": - "integrity" "sha512-u4e4H/UUeMbJ1UnBnePf6r4cm4fFZs57BMocUSFeea807JTYk2HJnE9GjUpWHaDZk1OQGoArnWW1yEo9nd57ww==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" - "version" "1.0.5" +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" -"pify@^2.0.0": - "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" +"pify@^3.0.0": + "integrity" "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" "pinkie-promise@^2.0.0": "integrity" "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" @@ -1114,12 +1272,12 @@ "version" "2.0.4" "pkg-conf@^2.0.0": - "integrity" "sha512-DePmt9Edldi1xs12AWWjEAg+cRS9ps3oDRSrTmDpXF6pjncDGgt5OEU5WXGfmM0+NRs/6mhFIxVyI9fATPX1Uw==" - "resolved" "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.0.0.tgz" - "version" "2.0.0" + "integrity" "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==" + "resolved" "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz" + "version" "2.1.0" dependencies: "find-up" "^2.0.0" - "load-json-file" "^2.0.0" + "load-json-file" "^4.0.0" "pkg-config@^1.1.0": "integrity" "sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==" @@ -1130,13 +1288,6 @@ "find-root" "^1.0.0" "xtend" "^4.0.1" -"pkg-dir@^1.0.0": - "integrity" "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==" - "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "find-up" "^1.0.0" - "pkg-up@^1.0.0": "integrity" "sha512-L+d849d9lz20hnRpUnWBRXOh+mAvygQpK7UuXiw+6QbPwL55RVgl+G+V936wCzs/6J7fj0pvgLY9OknZ+FqaNA==" "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz" @@ -1154,27 +1305,32 @@ "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" "version" "1.1.2" -"process-nextick-args@~1.0.6": - "integrity" "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" - "version" "1.0.7" +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" "progress@^1.1.8": "integrity" "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==" "resolved" "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz" "version" "1.1.8" +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + "readable-stream@^2.2.2": - "integrity" "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz" - "version" "2.2.10" + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" dependencies: "core-util-is" "~1.0.0" - "inherits" "~2.0.1" + "inherits" "~2.0.3" "isarray" "~1.0.0" - "process-nextick-args" "~1.0.6" - "safe-buffer" "^5.0.1" - "string_decoder" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" "util-deprecate" "~1.0.1" "readline2@^1.0.1": @@ -1193,6 +1349,15 @@ dependencies: "resolve" "^1.1.6" +"regexp.prototype.flags@^1.4.3": + "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" + "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "functions-have-names" "^1.2.2" + "require-uncached@^1.0.2": "integrity" "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==" "resolved" "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz" @@ -1207,11 +1372,13 @@ "version" "1.0.1" "resolve@^1.1.6", "resolve@^1.1.7": - "integrity" "sha512-1p/C+O7k1Gt16zZRRp8wWxNr8N/7hBP25g3OcUxgYB18hUx0k1vHaIvI9wtVfCNYogxKAYLdpLF8MMB5eh4IGA==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz" - "version" "1.3.3" + "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + "version" "1.22.1" dependencies: - "path-parse" "^1.0.5" + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" "restore-cursor@^1.0.1": "integrity" "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==" @@ -1221,7 +1388,14 @@ "exit-hook" "^1.0.0" "onetime" "^1.0.0" -"rimraf@^2.2.8", "rimraf@^2.5.2": +"rimraf@^2.5.2": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"rimraf@~2.6.2": "integrity" "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==" "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" "version" "2.6.3" @@ -1236,19 +1410,21 @@ "once" "^1.3.0" "run-parallel@^1.1.2": - "integrity" "sha512-XmkpA2hWubG33ZcSAtFujmcsg4dPy9u1nwB0AtuHNEVF6SoDpZO2ldD24PS0Z5l8/C/sdaztIqPpeLzMugG7/A==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.6.tgz" - "version" "1.1.6" + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" "rx-lite@^3.1.2": "integrity" "sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==" "resolved" "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz" "version" "3.1.2" -"safe-buffer@^5.0.1": - "integrity" "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz" - "version" "5.1.0" +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" "semver@5.3.0": "integrity" "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==" @@ -1256,29 +1432,33 @@ "version" "5.3.0" "shelljs@^0.7.5": - "integrity" "sha512-5ZXTlakejjdxXAnFl23pgPDzCcyPoshqMVWYqMH8HiP1R+i4auEKHabljL6XQlhQV58jkSRTR33Fq7OlxyLLTg==" - "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz" - "version" "0.7.7" + "integrity" "sha512-/YF5Uk8hcwi7ima04ppkbA4RaRMdPMBfwAvAf8sufYOxsJRtbdoBsT8vGvlb+799BrlGdYrd+oczIA2eN2JdWA==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz" + "version" "0.7.8" dependencies: "glob" "^7.0.0" "interpret" "^1.0.0" "rechoir" "^0.6.2" +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + "slice-ansi@0.0.4": "integrity" "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==" "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz" "version" "0.0.4" "source-map@^0.5.3": - "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "integrity" "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" "version" "0.5.7" -"source-map@~0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - "sprintf-js@~1.0.2": "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" @@ -1309,12 +1489,12 @@ "eslint-plugin-standard" "~3.0.1" "standard-engine" "~7.0.0" -"string_decoder@~1.0.0": - "integrity" "sha512-Ma/XSGC8lfDvw75eLjgg/a1nWDButtedmpbbNxH5Ruyr0IhqNXOKbG468VtPosrjhRgNOvgonmY54ZnGMdgJjw==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz" - "version" "1.0.1" +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" dependencies: - "safe-buffer" "^5.0.1" + "safe-buffer" "~5.1.0" "string-width@^1.0.1": "integrity" "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==" @@ -1326,12 +1506,30 @@ "strip-ansi" "^3.0.0" "string-width@^2.0.0": - "integrity" "sha512-w+YQpeOppRYnIHRftgHpjGYUj9m0XKeam1C4ahbh+vErWcY8JJCcrHi/YhUFhHoVeWADkhplCWYdYwX5Nmhiyw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz" - "version" "2.0.0" + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" dependencies: "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^3.0.0" + "strip-ansi" "^4.0.0" + +"string.prototype.trimend@^1.0.5": + "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +"string.prototype.trimstart@^1.0.5": + "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" "strip-ansi@^3.0.0": "integrity" "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==" @@ -1340,6 +1538,13 @@ dependencies: "ansi-regex" "^2.0.0" +"strip-ansi@^4.0.0": + "integrity" "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-regex" "^3.0.0" + "strip-bom@^3.0.0": "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" @@ -1355,6 +1560,11 @@ "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" "version" "2.0.0" +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + "table@^3.7.8": "integrity" "sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g==" "resolved" "https://registry.npmjs.org/table/-/table-3.8.3.tgz" @@ -1377,11 +1587,6 @@ "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" "version" "2.3.8" -"tryit@^1.0.1": - "integrity" "sha512-6C5h3CE+0qjGp+YKYTs74xR0k/Nw/ePtl/Lp6CCf44hqBQ66qnH1sDFR5mV/Gc48EsrHLB53lCFSffQCkka3kg==" - "resolved" "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz" - "version" "1.0.3" - "type-check@~0.3.2": "integrity" "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==" "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" @@ -1389,18 +1594,35 @@ dependencies: "prelude-ls" "~1.1.2" +"type@^1.0.1": + "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + "version" "1.2.0" + +"type@^2.5.0": + "integrity" "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + "resolved" "https://registry.npmjs.org/type/-/type-2.6.0.tgz" + "version" "2.6.0" + "typedarray@^0.0.6": "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" "version" "0.0.6" -"uglify-js@^3.6.0": - "integrity" "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==" - "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz" - "version" "3.6.0" +"uglify-js@^3.16.2": + "integrity" "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz" + "version" "3.16.2" + +"unbox-primitive@^1.0.2": + "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + "version" "1.0.2" dependencies: - "commander" "~2.20.0" - "source-map" "~0.6.1" + "call-bind" "^1.0.2" + "has-bigints" "^1.0.2" + "has-symbols" "^1.0.3" + "which-boxed-primitive" "^1.0.2" "underscore-plus@1.x": "integrity" "sha512-A3BEzkeicFLnr+U/Q3EyWwJAQPbA19mtZZ4h+lLq3ttm9kn8WC4R3YpuJZEXmWdLjYP47Zc8aLZm9kwdv+zzvA==" @@ -1410,9 +1632,9 @@ "underscore" "^1.9.1" "underscore@^1.9.1": - "integrity" "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - "resolved" "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz" - "version" "1.9.1" + "integrity" "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==" + "resolved" "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz" + "version" "1.13.4" "uniq@^1.0.1": "integrity" "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" @@ -1431,10 +1653,21 @@ "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" "version" "1.0.2" -"wordwrap@~1.0.0": - "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - "version" "1.0.0" +"which-boxed-primitive@^1.0.2": + "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" + "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-bigint" "^1.0.1" + "is-boolean-object" "^1.1.0" + "is-number-object" "^1.0.4" + "is-string" "^1.0.5" + "is-symbol" "^1.0.3" + +"word-wrap@~1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" "wrappy@1": "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" @@ -1449,6 +1682,6 @@ "mkdirp" "^0.5.1" "xtend@^4.0.0", "xtend@^4.0.1": - "integrity" "sha512-iTwvhNBRetXWe81+VcIw5YeadVSWyze7uA7nVnpP13ulrpnJ3UfQm5ApGnrkmxDJFdrblRdZs0EvaTCIfei5oQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - "version" "4.0.1" + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" From 4193305ad64a38d0b5e911f5d398ebcc3b5823da Mon Sep 17 00:00:00 2001 From: Miika Tuominen Date: Wed, 13 Jul 2022 20:16:37 +0300 Subject: [PATCH 24/24] 1.1.2 --- package-lock.json | 4 ++-- package.json | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 560f1c2b..dbdc5157 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@discape/chessboardjs", - "version": "1.1.1", + "version": "1.1.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@discape/chessboardjs", - "version": "1.1.1", + "version": "1.1.2", "license": "MIT", "dependencies": { "jquery": ">=3.4.1" diff --git a/package.json b/package.json index d9ec5a0d..1477c803 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,14 @@ "description": "JavaScript chessboard widget", "homepage": "https://chessboardjs.com", "license": "MIT", - "version": "1.1.1", - "keywords": ["chess", "javascript", "es6", "commonjs", "jquery"], + "version": "1.1.2", + "keywords": [ + "chess", + "javascript", + "es6", + "commonjs", + "jquery" + ], "exports": { "import": "./dist/build/chessboard.min.mjs", "require": "./dist/build/chessboard.min.cjs"