* @copyright Wout Fierens <wout@mick-wout.com>
* @license MIT
*
-* BUILT: Thu Jun 28 2018 23:40:30 GMT+1000 (AEST)
+* BUILT: Thu Jun 28 2018 22:52:04 GMT+0200 (GMT+02:00)
*/;
-
-(function(root, factory) {
- /* istanbul ignore next */
- if (typeof define === 'function' && define.amd) {
- define(function(){
- return factory(root, root.document)
- })
- } else if (typeof exports === 'object') {
- module.exports = root.document ? factory(root, root.document) : function(w){ return factory(w, w.document) }
- } else {
- root.SVG = factory(root, root.document)
- }
-}(typeof window !== "undefined" ? window : this, function(window, document) {
-
-// Check that our browser supports svg
-var supported = !! document.createElementNS &&
- !! document.createElementNS('http://www.w3.org/2000/svg','svg').createSVGRect
-
-// If we don't support svg, just exit without doing anything
-if (!supported)
- return {supported: false}
-
-// Otherwise, the library will be here
-/* global createElement, capitalize */
-/* eslint-disable new-cap */
-
-// The main wrapping element
-var SVG = this.SVG = function (element) {
- if (SVG.supported) {
- element = createElement(element)
- return element
- }
-}
-
-// Svg must be supported if we reached this stage
-SVG.supported = true
-
-// Default namespaces
-SVG.ns = 'http://www.w3.org/2000/svg'
-SVG.xmlns = 'http://www.w3.org/2000/xmlns/'
-SVG.xlink = 'http://www.w3.org/1999/xlink'
-SVG.svgjs = 'http://svgjs.com/svgjs'
-
-// Element id sequence
-SVG.did = 1000
-
-// Get next named element id
-SVG.eid = function (name) {
- return 'Svgjs' + capitalize(name) + (SVG.did++)
-}
-
-// Method for element creation
-SVG.create = function (name) {
- // create element
- return document.createElementNS(this.ns, name)
-}
-
-// Method for extending objects
-SVG.extend = function (modules, methods) {
- var key, i
-
- modules = Array.isArray(modules) ? modules : [modules]
-
- for (i = modules.length - 1; i >= 0; i--) {
- if (modules[i]) {
- for (key in methods) {
- modules[i].prototype[key] = methods[key]
- }
- }
- }
-}
-
-// Invent new element
-SVG.invent = function (config) {
- // Create element initializer
- var initializer = typeof config.create === 'function' ? config.create
- : function (node) {
- config.inherit.call(this, node || SVG.create(config.create))
- }
-
- // Inherit prototype
- if (config.inherit) {
- initializer.prototype = new config.inherit()
- initializer.prototype.constructor = initializer
- }
-
- // Extend with methods
- if (config.extend) {
- SVG.extend(initializer, config.extend)
- }
-
- // Attach construct method to parent
- if (config.construct) { SVG.extend(config.parent || SVG.Container, config.construct) }
-
- return initializer
-}
-
-// Adopt existing svg elements
-SVG.adopt = function (node) {
- // check for presence of node
- if (!node) return null
-
- // make sure a node isn't already adopted
- if (node.instance instanceof SVG.Element) return node.instance
-
- if (!(node instanceof window.SVGElement)) {
- return new SVG.HtmlNode(node)
- }
-
- // initialize variables
- var element
-
- // adopt with element-specific settings
- if (node.nodeName === 'svg') {
- element = new SVG.Doc(node)
- } else if (node.nodeName === 'linearGradient' || node.nodeName === 'radialGradient') {
- element = new SVG.Gradient(node)
- } else if (SVG[capitalize(node.nodeName)]) {
- element = new SVG[capitalize(node.nodeName)](node)
- } else {
- element = new SVG.Parent(node)
- }
-
- return element
-}
-
-// Storage for regular expressions
-SVG.regex = {
- // Parse unit value
- numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,
-
- // Parse hex value
- hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,
-
- // Parse rgb value
- rgb: /rgb\((\d+),(\d+),(\d+)\)/,
-
- // Parse reference id
- reference: /#([a-z0-9\-_]+)/i,
-
- // splits a transformation chain
- transforms: /\)\s*,?\s*/,
-
- // Whitespace
- whitespace: /\s/g,
-
- // Test hex value
- isHex: /^#[a-f0-9]{3,6}$/i,
-
- // Test rgb value
- isRgb: /^rgb\(/,
-
- // Test css declaration
- isCss: /[^:]+:[^;]+;?/,
-
- // Test for blank string
- isBlank: /^(\s+)?$/,
-
- // Test for numeric string
- isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
-
- // Test for percent value
- isPercent: /^-?[\d.]+%$/,
-
- // Test for image url
- isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,
-
- // split at whitespace and comma
- delimiter: /[\s,]+/,
-
- // The following regex are used to parse the d attribute of a path
-
- // Matches all hyphens which are not after an exponent
- hyphen: /([^e])-/gi,
-
- // Replaces and tests for all path letters
- pathLetters: /[MLHVCSQTAZ]/gi,
-
- // yes we need this one, too
- isPathLetter: /[MLHVCSQTAZ]/i,
-
- // matches 0.154.23.45
- numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,
-
- // matches .
- dots: /\./g
-}
-
-
-SVG.utils = {
- // Map function
- map: function (array, block) {
- var i
- var il = array.length
- var result = []
-
- for (i = 0; i < il; i++) {
- result.push(block(array[i]))
- }
-
- return result
- },
-
- // Filter function
- filter: function (array, block) {
- var i
- var il = array.length
- var result = []
-
- for (i = 0; i < il; i++) {
- if (block(array[i])) { result.push(array[i]) }
- }
-
- return result
- },
-
- // Degrees to radians
- radians: function (d) {
- return d % 360 * Math.PI / 180
- },
-
- // Radians to degrees
- degrees: function (r) {
- return r * 180 / Math.PI % 360
- },
-
- filterSVGElements: function (nodes) {
- return this.filter(nodes, function (el) { return el instanceof window.SVGElement })
- }
-
-}
-
-
-SVG.void = function () {}
-
-SVG.defaults = {
-
- // Default animation values
- timeline: {
- duration: 400,
- ease: '>',
- delay: 0
- },
-
- // Default attribute values
- attrs: {
-
- // fill and stroke
- 'fill-opacity': 1,
- 'stroke-opacity': 1,
- 'stroke-width': 0,
- 'stroke-linejoin': 'miter',
- 'stroke-linecap': 'butt',
- fill: '#000000',
- stroke: '#000000',
- opacity: 1,
-
- // position
- x: 0,
- y: 0,
- cx: 0,
- cy: 0,
-
- // size
- width: 0,
- height: 0,
-
- // radius
- r: 0,
- rx: 0,
- ry: 0,
-
- // gradient
- offset: 0,
- 'stop-opacity': 1,
- 'stop-color': '#000000',
-
- // text
- 'font-size': 16,
- 'font-family': 'Helvetica, Arial, sans-serif',
- 'text-anchor': 'start'
- }
-}
-
-SVG.Queue = SVG.invent({
- create: function () {
- this._first = null
- this._last = null
- },
-
- extend: {
- push: function (value) {
- // An item stores an id and the provided value
- var item = value.next ? value : { value: value, next: null, prev: null }
-
- // Deal with the queue being empty or populated
- if (this._last) {
- item.prev = this._last
- this._last.next = item
- this._last = item
- } else {
- this._last = item
- this._first = item
- }
-
- // Update the length and return the current item
- return item
- },
-
- shift: function () {
- // Check if we have a value
- var remove = this._first
- if (!remove) return null
-
- // If we do, remove it and relink things
- this._first = remove.next
- if (this._first) this._first.prev = null
- this._last = this._first ? this._last : null
- return remove.value
- },
-
- // Shows us the first item in the list
- first: function () {
- return this._first && this._first.value
- },
-
- // Shows us the last item in the list
- last: function () {
- return this._last && this._last.value
- },
-
- // Removes the item that was returned from the push
- remove: function (item) {
- // Relink the previous item
- if (item.prev) item.prev.next = item.next
- if (item.next) item.next.prev = item.prev
- if (item === this._last) this._last = item.prev
- if (item === this._first) this._first = item.next
-
- // Invalidate item
- item.prev = null
- item.next = null
- }
- }
-})
-
-/* globals fullHex, compToHex */
-
-/*
-
-Color {
- constructor (a, b, c, space) {
- space: 'hsl'
- a: 30
- b: 20
- c: 10
- },
-
- toRgb () { return new Color in rgb space }
- toHsl () { return new Color in hsl space }
- toLab () { return new Color in lab space }
-
- toArray () { [space, a, b, c] }
- fromArray () { convert it back }
-}
-
-// Conversions aren't always exact because of monitor profiles etc...
-new Color(h, s, l, 'hsl') !== new Color(r, g, b).hsl()
-new Color(100, 100, 100, [space])
-new Color('hsl(30, 20, 10)')
-
-// Sugar
-SVG.rgb(30, 20, 50).lab()
-SVG.hsl()
-SVG.lab('rgb(100, 100, 100)')
-*/
-
-// Module for color convertions
-SVG.Color = function (color, g, b) {
- var match
-
- // initialize defaults
- this.r = 0
- this.g = 0
- this.b = 0
-
- if (!color) return
-
- // parse color
- if (typeof color === 'string') {
- if (SVG.regex.isRgb.test(color)) {
- // get rgb values
- match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, ''))
-
- // parse numeric values
- this.r = parseInt(match[1])
- this.g = parseInt(match[2])
- this.b = parseInt(match[3])
- } else if (SVG.regex.isHex.test(color)) {
- // get hex values
- match = SVG.regex.hex.exec(fullHex(color))
-
- // parse numeric values
- this.r = parseInt(match[1], 16)
- this.g = parseInt(match[2], 16)
- this.b = parseInt(match[3], 16)
- }
- } else if (Array.isArray(color)) {
- this.r = color[0]
- this.g = color[1]
- this.b = color[2]
- } else if (typeof color === 'object') {
- this.r = color.r
- this.g = color.g
- this.b = color.b
- } else if (arguments.length === 3) {
- this.r = color
- this.g = g
- this.b = b
- }
-}
-
-SVG.extend(SVG.Color, {
- // Default to hex conversion
- toString: function () {
- return this.toHex()
- },
- toArray: function () {
- return [this.r, this.g, this.b]
- },
- fromArray: function (a) {
- return new SVG.Color(a)
- },
- // Build hex value
- toHex: function () {
- return '#' +
- compToHex(Math.round(this.r)) +
- compToHex(Math.round(this.g)) +
- compToHex(Math.round(this.b))
- },
- // Build rgb value
- toRgb: function () {
- return 'rgb(' + [this.r, this.g, this.b].join() + ')'
- },
- // Calculate true brightness
- brightness: function () {
- return (this.r / 255 * 0.30) +
- (this.g / 255 * 0.59) +
- (this.b / 255 * 0.11)
- },
- // Make color morphable
- morph: function (color) {
- this.destination = new SVG.Color(color)
-
- return this
- },
- // Get morphed color at given position
- at: function (pos) {
- // make sure a destination is defined
- if (!this.destination) return this
-
- // normalise pos
- pos = pos < 0 ? 0 : pos > 1 ? 1 : pos
-
- // generate morphed color
- return new SVG.Color({
- r: ~~(this.r + (this.destination.r - this.r) * pos),
- g: ~~(this.g + (this.destination.g - this.g) * pos),
- b: ~~(this.b + (this.destination.b - this.b) * pos)
- })
- }
-
-})
-
-// Testers
-
-// Test if given value is a color string
-SVG.Color.test = function (color) {
- color += ''
- return SVG.regex.isHex.test(color) ||
- SVG.regex.isRgb.test(color)
-}
-
-// Test if given value is a rgb object
-SVG.Color.isRgb = function (color) {
- return color && typeof color.r === 'number' &&
- typeof color.g === 'number' &&
- typeof color.b === 'number'
-}
-
-// Test if given value is a color
-SVG.Color.isColor = function (color) {
- return SVG.Color.isRgb(color) || SVG.Color.test(color)
-}
-
-/* global arrayClone */
-
-// Module for array conversion
-SVG.Array = function (array, fallback) {
- array = (array || []).valueOf()
-
- // if array is empty and fallback is provided, use fallback
- if (array.length === 0 && fallback) {
- array = fallback.valueOf()
- }
-
- // parse array
- this.value = this.parse(array)
-}
-
-SVG.extend(SVG.Array, {
- // Make array morphable
- morph: function (array) {
- this.destination = this.parse(array)
-
- // normalize length of arrays
- if (this.value.length !== this.destination.length) {
- var lastValue = this.value[this.value.length - 1]
- var lastDestination = this.destination[this.destination.length - 1]
-
- while (this.value.length > this.destination.length) {
- this.destination.push(lastDestination)
- }
- while (this.value.length < this.destination.length) {
- this.value.push(lastValue)
- }
- }
-
- return this
- },
- // Clean up any duplicate points
- settle: function () {
- // find all unique values
- for (var i = 0, il = this.value.length, seen = []; i < il; i++) {
- if (seen.indexOf(this.value[i]) === -1) {
- seen.push(this.value[i])
- }
- }
-
- // set new value
- this.value = seen
- return seen
- },
- // Get morphed array at given position
- at: function (pos) {
- // make sure a destination is defined
- if (!this.destination) return this
-
- // generate morphed array
- for (var i = 0, il = this.value.length, array = []; i < il; i++) {
- array.push(this.value[i] + (this.destination[i] - this.value[i]) * pos)
- }
-
- return new SVG.Array(array)
- },
- toArray: function () {
- return this.value
- },
- // Convert array to string
- toString: function () {
- return this.value.join(' ')
- },
- // Real value
- valueOf: function () {
- return this.value
- },
- // Parse whitespace separated string
- parse: function (array) {
- array = array.valueOf()
-
- // if already is an array, no need to parse it
- if (Array.isArray(array)) return array
-
- return array.trim().split(SVG.regex.delimiter).map(parseFloat)
- },
- // Reverse array
- reverse: function () {
- this.value.reverse()
-
- return this
- },
- clone: function () {
- var clone = new this.constructor()
- clone.value = arrayClone(this.value)
- return clone
- }
-})
-
-
-// Poly points array
-SVG.PointArray = function (array, fallback) {
- SVG.Array.call(this, array, fallback || [[0, 0]])
-}
-
-// Inherit from SVG.Array
-SVG.PointArray.prototype = new SVG.Array()
-SVG.PointArray.prototype.constructor = SVG.PointArray
-
-SVG.extend(SVG.PointArray, {
- // Convert array to string
- toString: function () {
- // convert to a poly point string
- for (var i = 0, il = this.value.length, array = []; i < il; i++) {
- array.push(this.value[i].join(','))
- }
-
- return array.join(' ')
- },
-
- toArray: function () {
- return this.value.reduce(function (prev, curr) {
- return [].concat.call(prev, curr)
- }, [])
- },
-
- // Convert array to line object
- toLine: function () {
- return {
- x1: this.value[0][0],
- y1: this.value[0][1],
- x2: this.value[1][0],
- y2: this.value[1][1]
- }
- },
-
- // Get morphed array at given position
- at: function (pos) {
- // make sure a destination is defined
- if (!this.destination) return this
-
- // generate morphed point string
- for (var i = 0, il = this.value.length, array = []; i < il; i++) {
- array.push([
- this.value[i][0] + (this.destination[i][0] - this.value[i][0]) * pos,
- this.value[i][1] + (this.destination[i][1] - this.value[i][1]) * pos
- ])
- }
-
- return new SVG.PointArray(array)
- },
-
- // Parse point string and flat array
- parse: function (array) {
- var points = []
-
- array = array.valueOf()
-
- // if it is an array
- if (Array.isArray(array)) {
- // and it is not flat, there is no need to parse it
- if (Array.isArray(array[0])) {
- return array
- }
- } else { // Else, it is considered as a string
- // parse points
- array = array.trim().split(SVG.regex.delimiter).map(parseFloat)
- }
-
- // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints
- // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.
- if (array.length % 2 !== 0) array.pop()
-
- // wrap points in two-tuples and parse points as floats
- for (var i = 0, len = array.length; i < len; i = i + 2) {
- points.push([ array[i], array[i + 1] ])
- }
-
- return points
- },
-
- // Move point string
- move: function (x, y) {
- var box = this.bbox()
-
- // get relative offset
- x -= box.x
- y -= box.y
-
- // move every point
- if (!isNaN(x) && !isNaN(y)) {
- for (var i = this.value.length - 1; i >= 0; i--) {
- this.value[i] = [this.value[i][0] + x, this.value[i][1] + y]
- }
- }
-
- return this
- },
- // Resize poly string
- size: function (width, height) {
- var i
- var box = this.bbox()
-
- // recalculate position of all points according to new size
- for (i = this.value.length - 1; i >= 0; i--) {
- if (box.width) this.value[i][0] = ((this.value[i][0] - box.x) * width) / box.width + box.x
- if (box.height) this.value[i][1] = ((this.value[i][1] - box.y) * height) / box.height + box.y
- }
-
- return this
- },
-
- // Get bounding box of points
- bbox: function () {
- var maxX = -Infinity
- var maxY = -Infinity
- var minX = Infinity
- var minY = Infinity
- this.value.forEach(function (el) {
- maxX = Math.max(el[0], maxX)
- maxY = Math.max(el[1], maxY)
- minX = Math.min(el[0], minX)
- minY = Math.min(el[1], minY)
- })
- return {x: minX, y: minY, width: maxX - minX, height: maxY - minY}
- }
-})
-
-/* globals arrayToString, pathRegReplace */
-
-var pathHandlers = {
- M: function (c, p, p0) {
- p.x = p0.x = c[0]
- p.y = p0.y = c[1]
-
- return ['M', p.x, p.y]
- },
- L: function (c, p) {
- p.x = c[0]
- p.y = c[1]
- return ['L', c[0], c[1]]
- },
- H: function (c, p) {
- p.x = c[0]
- return ['H', c[0]]
- },
- V: function (c, p) {
- p.y = c[0]
- return ['V', c[0]]
- },
- C: function (c, p) {
- p.x = c[4]
- p.y = c[5]
- return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]
- },
- S: function (c, p) {
- p.x = c[2]
- p.y = c[3]
- return ['S', c[0], c[1], c[2], c[3]]
- },
- Q: function (c, p) {
- p.x = c[2]
- p.y = c[3]
- return ['Q', c[0], c[1], c[2], c[3]]
- },
- T: function (c, p) {
- p.x = c[0]
- p.y = c[1]
- return ['T', c[0], c[1]]
- },
- Z: function (c, p, p0) {
- p.x = p0.x
- p.y = p0.y
- return ['Z']
- },
- A: function (c, p) {
- p.x = c[5]
- p.y = c[6]
- return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]]
- }
-}
-
-var mlhvqtcsaz = 'mlhvqtcsaz'.split('')
-
-for (var i = 0, il = mlhvqtcsaz.length; i < il; ++i) {
- pathHandlers[mlhvqtcsaz[i]] = (function (i) {
- return function (c, p, p0) {
- if (i === 'H') c[0] = c[0] + p.x
- else if (i === 'V') c[0] = c[0] + p.y
- else if (i === 'A') {
- c[5] = c[5] + p.x
- c[6] = c[6] + p.y
- } else {
- for (var j = 0, jl = c.length; j < jl; ++j) {
- c[j] = c[j] + (j % 2 ? p.y : p.x)
- }
- }
-
- return pathHandlers[i](c, p, p0)
- }
- })(mlhvqtcsaz[i].toUpperCase())
-}
-
-// Path points array
-SVG.PathArray = function (array, fallback) {
- SVG.Array.call(this, array, fallback || [['M', 0, 0]])
-}
-
-// Inherit from SVG.Array
-SVG.PathArray.prototype = new SVG.Array()
-SVG.PathArray.prototype.constructor = SVG.PathArray
-
-SVG.extend(SVG.PathArray, {
- // Convert array to string
- toString: function () {
- return arrayToString(this.value)
- },
- toArray: function () {
- return this.value.reduce(function (prev, curr) {
- return [].concat.call(prev, curr)
- }, [])
- },
- // Move path string
- move: function (x, y) {
- // get bounding box of current situation
- var box = this.bbox()
-
- // get relative offset
- x -= box.x
- y -= box.y
-
- if (!isNaN(x) && !isNaN(y)) {
- // move every point
- for (var l, i = this.value.length - 1; i >= 0; i--) {
- l = this.value[i][0]
-
- if (l === 'M' || l === 'L' || l === 'T') {
- this.value[i][1] += x
- this.value[i][2] += y
- } else if (l === 'H') {
- this.value[i][1] += x
- } else if (l === 'V') {
- this.value[i][1] += y
- } else if (l === 'C' || l === 'S' || l === 'Q') {
- this.value[i][1] += x
- this.value[i][2] += y
- this.value[i][3] += x
- this.value[i][4] += y
-
- if (l === 'C') {
- this.value[i][5] += x
- this.value[i][6] += y
- }
- } else if (l === 'A') {
- this.value[i][6] += x
- this.value[i][7] += y
- }
- }
- }
-
- return this
- },
- // Resize path string
- size: function (width, height) {
- // get bounding box of current situation
- var box = this.bbox()
- var i, l
-
- // recalculate position of all points according to new size
- for (i = this.value.length - 1; i >= 0; i--) {
- l = this.value[i][0]
-
- if (l === 'M' || l === 'L' || l === 'T') {
- this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x
- this.value[i][2] = ((this.value[i][2] - box.y) * height) / box.height + box.y
- } else if (l === 'H') {
- this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x
- } else if (l === 'V') {
- this.value[i][1] = ((this.value[i][1] - box.y) * height) / box.height + box.y
- } else if (l === 'C' || l === 'S' || l === 'Q') {
- this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x
- this.value[i][2] = ((this.value[i][2] - box.y) * height) / box.height + box.y
- this.value[i][3] = ((this.value[i][3] - box.x) * width) / box.width + box.x
- this.value[i][4] = ((this.value[i][4] - box.y) * height) / box.height + box.y
-
- if (l === 'C') {
- this.value[i][5] = ((this.value[i][5] - box.x) * width) / box.width + box.x
- this.value[i][6] = ((this.value[i][6] - box.y) * height) / box.height + box.y
- }
- } else if (l === 'A') {
- // resize radii
- this.value[i][1] = (this.value[i][1] * width) / box.width
- this.value[i][2] = (this.value[i][2] * height) / box.height
-
- // move position values
- this.value[i][6] = ((this.value[i][6] - box.x) * width) / box.width + box.x
- this.value[i][7] = ((this.value[i][7] - box.y) * height) / box.height + box.y
- }
- }
-
- return this
- },
- // Test if the passed path array use the same path data commands as this path array
- equalCommands: function (pathArray) {
- var i, il, equalCommands
-
- pathArray = new SVG.PathArray(pathArray)
-
- equalCommands = this.value.length === pathArray.value.length
- for (i = 0, il = this.value.length; equalCommands && i < il; i++) {
- equalCommands = this.value[i][0] === pathArray.value[i][0]
- }
-
- return equalCommands
- },
- // Make path array morphable
- morph: function (pathArray) {
- pathArray = new SVG.PathArray(pathArray)
-
- if (this.equalCommands(pathArray)) {
- this.destination = pathArray
- } else {
- this.destination = null
- }
-
- return this
- },
- // Get morphed path array at given position
- at: function (pos) {
- // make sure a destination is defined
- if (!this.destination) return this
-
- var sourceArray = this.value
- var destinationArray = this.destination.value
- var array = []
- var pathArray = new SVG.PathArray()
- var i, il, j, jl
-
- // Animate has specified in the SVG spec
- // See: https://www.w3.org/TR/SVG11/paths.html#PathElement
- for (i = 0, il = sourceArray.length; i < il; i++) {
- array[i] = [sourceArray[i][0]]
- for (j = 1, jl = sourceArray[i].length; j < jl; j++) {
- array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos
- }
- // For the two flags of the elliptical arc command, the SVG spec say:
- // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true
- // Elliptical arc command as an array followed by corresponding indexes:
- // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]
- // 0 1 2 3 4 5 6 7
- if (array[i][0] === 'A') {
- array[i][4] = +(array[i][4] !== 0)
- array[i][5] = +(array[i][5] !== 0)
- }
- }
-
- // Directly modify the value of a path array, this is done this way for performance
- pathArray.value = array
- return pathArray
- },
- // Absolutize and parse path to array
- parse: function (array) {
- // if it's already a patharray, no need to parse it
- if (array instanceof SVG.PathArray) return array.valueOf()
-
- // prepare for parsing
- var s
- var paramCnt = { 'M': 2, 'L': 2, 'H': 1, 'V': 1, 'C': 6, 'S': 4, 'Q': 4, 'T': 2, 'A': 7, 'Z': 0 }
-
- if (typeof array === 'string') {
- array = array
- .replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123
- .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers
- .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen
- .trim() // trim
- .split(SVG.regex.delimiter) // split into array
- } else {
- array = array.reduce(function (prev, curr) {
- return [].concat.call(prev, curr)
- }, [])
- }
-
- // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...]
- var result = []
- var p = new SVG.Point()
- var p0 = new SVG.Point()
- var index = 0
- var len = array.length
-
- do {
- // Test if we have a path letter
- if (SVG.regex.isPathLetter.test(array[index])) {
- s = array[index]
- ++index
- // If last letter was a move command and we got no new, it defaults to [L]ine
- } else if (s === 'M') {
- s = 'L'
- } else if (s === 'm') {
- s = 'l'
- }
-
- result.push(pathHandlers[s].call(null,
- array.slice(index, (index = index + paramCnt[s.toUpperCase()])).map(parseFloat),
- p, p0
- )
- )
- } while (len > index)
-
- return result
- },
- // Get bounding box of path
- bbox: function () {
- SVG.parser().path.setAttribute('d', this.toString())
- return SVG.parser.nodes.path.getBBox()
- }
-
-})
-
-
-// Module for unit convertions
-SVG.Number = SVG.invent({
- // Initialize
- create: function (value, unit) {
- unit = Array.isArray(value) ? value[1] : unit
- value = Array.isArray(value) ? value[0] : value
-
- // initialize defaults
- this.value = 0
- this.unit = unit || ''
-
- // parse value
- if (typeof value === 'number') {
- // ensure a valid numeric value
- this.value = isNaN(value) ? 0 : !isFinite(value) ? (value < 0 ? -3.4e+38 : +3.4e+38) : value
- } else if (typeof value === 'string') {
- unit = value.match(SVG.regex.numberAndUnit)
-
- if (unit) {
- // make value numeric
- this.value = parseFloat(unit[1])
-
- // normalize
- if (unit[5] === '%') { this.value /= 100 } else if (unit[5] === 's') {
- this.value *= 1000
- }
-
- // store unit
- this.unit = unit[5]
- }
- } else {
- if (value instanceof SVG.Number) {
- this.value = value.valueOf()
- this.unit = value.unit
- }
- }
- },
- // Add methods
- extend: {
- // Stringalize
- toString: function () {
- return (this.unit === '%' ? ~~(this.value * 1e8) / 1e6
- : this.unit === 's' ? this.value / 1e3
- : this.value
- ) + this.unit
- },
- toJSON: function () {
- return this.toString()
- }, // Convert to primitive
- toArray: function () {
- return [this.value, this.unit]
- },
- valueOf: function () {
- return this.value
- },
- // Add number
- plus: function (number) {
- number = new SVG.Number(number)
- return new SVG.Number(this + number, this.unit || number.unit)
- },
- // Subtract number
- minus: function (number) {
- number = new SVG.Number(number)
- return new SVG.Number(this - number, this.unit || number.unit)
- },
- // Multiply number
- times: function (number) {
- number = new SVG.Number(number)
- return new SVG.Number(this * number, this.unit || number.unit)
- },
- // Divide number
- divide: function (number) {
- number = new SVG.Number(number)
- return new SVG.Number(this / number, this.unit || number.unit)
- },
- // Convert to different unit
- to: function (unit) {
- var number = new SVG.Number(this)
-
- if (typeof unit === 'string') {
- number.unit = unit
- }
-
- return number
- },
- // Make number morphable
- morph: function (number) {
- this.destination = new SVG.Number(number)
-
- if (number.relative) {
- this.destination.value += this.value
- }
-
- return this
- },
- // Get morphed number at given position
- at: function (pos) {
- // Make sure a destination is defined
- if (!this.destination) return this
-
- // Generate new morphed number
- return new SVG.Number(this.destination)
- .minus(this)
- .times(pos)
- .plus(this)
- }
- }
-})
-
-// Add events to elements
-/*
-;[ 'click',
- 'dblclick',
- 'mousedown',
- 'mouseup',
- 'mouseover',
- 'mouseout',
- 'mousemove',
- 'mouseenter',
- 'mouseleave',
- 'touchstart',
- 'touchmove',
- 'touchleave',
- 'touchend',
- 'touchcancel' ].forEach(function (event) {
- // add event to SVG.Element
- SVG.Element.prototype[event] = function (f) {
- // bind event to element rather than element node
- SVG.on(this, event, f)
- return this
- }
- })
-*/
-
-SVG.listenerId = 0
-
-// Add event binder in the SVG namespace
-SVG.on = function (node, events, listener, binding, options) {
- var l = listener.bind(binding || node)
- var n = node instanceof SVG.EventTarget ? node.getEventTarget() : node
-
- // events can be an array of events or a string of events
- events = Array.isArray(events) ? events : events.split(SVG.regex.delimiter)
-
- // ensure instance object for nodes which are not adopted
- n.instance = n.instance || {events: {}}
-
- // pull event handlers from the element
- var bag = n.instance.events
-
- // add id to listener
- if (!listener._svgjsListenerId) {
- listener._svgjsListenerId = ++SVG.listenerId
- }
-
- events.forEach(function (event) {
- var ev = event.split('.')[0]
- var ns = event.split('.')[1] || '*'
-
- // ensure valid object
- bag[ev] = bag[ev] || {}
- bag[ev][ns] = bag[ev][ns] || {}
-
- // reference listener
- bag[ev][ns][listener._svgjsListenerId] = l
-
- // add listener
- n.addEventListener(ev, l, options || false)
- })
-}
-
-// Add event unbinder in the SVG namespace
-SVG.off = function (node, events, listener, options) {
- var n = node instanceof SVG.EventTarget ? node.getEventTarget() : node
- if (!n.instance) return
-
- // listener can be a function or a number
- if (typeof listener === 'function') {
- listener = listener._svgjsListenerId
- if (!listener) return
- }
-
- // pull event handlers from the element
- var bag = n.instance.events
-
- // events can be an array of events or a string or undefined
- events = Array.isArray(events) ? events : (events || '').split(SVG.regex.delimiter)
-
- events.forEach(function (event) {
- var ev = event && event.split('.')[0]
- var ns = event && event.split('.')[1]
- var namespace, l
-
- if (listener) {
- // remove listener reference
- if (bag[ev] && bag[ev][ns || '*']) {
- // removeListener
- n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false)
-
- delete bag[ev][ns || '*'][listener]
- }
- } else if (ev && ns) {
- // remove all listeners for a namespaced event
- if (bag[ev] && bag[ev][ns]) {
- for (l in bag[ev][ns]) { SVG.off(n, [ev, ns].join('.'), l) }
-
- delete bag[ev][ns]
- }
- } else if (ns) {
- // remove all listeners for a specific namespace
- for (event in bag) {
- for (namespace in bag[event]) {
- if (ns === namespace) { SVG.off(n, [event, ns].join('.')) }
- }
- }
- } else if (ev) {
- // remove all listeners for the event
- if (bag[ev]) {
- for (namespace in bag[ev]) { SVG.off(n, [ev, namespace].join('.')) }
-
- delete bag[ev]
- }
- } else {
- // remove all listeners on a given node
- for (event in bag) { SVG.off(n, event) }
-
- n.instance.events = {}
- }
- })
-}
-
-SVG.dispatch = function (node, event, data) {
- var n = node instanceof SVG.EventTarget ? node.getEventTarget() : node
-
- // Dispatch event
- if (event instanceof window.Event) {
- n.dispatchEvent(event)
- } else {
- event = new window.CustomEvent(event, {detail: data, cancelable: true})
- n.dispatchEvent(event)
- }
- return event
-}
-
-SVG.EventTarget = SVG.invent({
- create: function () {},
- extend: {
- // Bind given event to listener
- on: function (event, listener, binding, options) {
- SVG.on(this, event, listener, binding, options)
- return this
- },
- // Unbind event from listener
- off: function (event, listener) {
- SVG.off(this, event, listener)
- return this
- },
- dispatch: function (event, data) {
- return SVG.dispatch(this, event, data)
- },
- // Fire given event
- fire: function (event, data) {
- this.dispatch(event, data)
- return this
- }
- }
-})
-
-/* global createElement */
-
-SVG.HtmlNode = SVG.invent({
- inherit: SVG.EventTarget,
- create: function (element) {
- this.node = element
- },
-
- extend: {
- add: function (element, i) {
- element = createElement(element)
-
- if (element.node !== this.node.children[i]) {
- this.node.insertBefore(element.node, this.node.children[i] || null)
- }
-
- return this
- },
-
- put: function (element, i) {
- this.add(element, i)
- return element
- },
-
- getEventTarget: function () {
- return this.node
- }
- }
-})
-
-/* global proportionalSize, assignNewId, createElement, matches, is */
-
-SVG.Element = SVG.invent({
- inherit: SVG.EventTarget,
-
- // Initialize node
- create: function (node) {
- // event listener
- this.events = {}
-
- // initialize data object
- this.dom = {}
-
- // create circular reference
- this.node = node
- if (this.node) {
- this.type = node.nodeName
- this.node.instance = this
- this.events = node.events || {}
-
- if (node.hasAttribute('svgjs:data')) {
- // pull svgjs data from the dom (getAttributeNS doesn't work in html5)
- this.setData(JSON.parse(node.getAttribute('svgjs:data')) || {})
- }
- }
- },
-
- // Add class methods
- extend: {
- // Move over x-axis
- x: function (x) {
- return this.attr('x', x)
- },
-
- // Move over y-axis
- y: function (y) {
- return this.attr('y', y)
- },
-
- // Move by center over x-axis
- cx: function (x) {
- return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2)
- },
-
- // Move by center over y-axis
- cy: function (y) {
- return y == null
- ? this.y() + this.height() / 2
- : this.y(y - this.height() / 2)
- },
-
- // Move element to given x and y values
- move: function (x, y) {
- return this.x(x).y(y)
- },
-
- // Move element by its center
- center: function (x, y) {
- return this.cx(x).cy(y)
- },
-
- // Set width of element
- width: function (width) {
- return this.attr('width', width)
- },
-
- // Set height of element
- height: function (height) {
- return this.attr('height', height)
- },
-
- // Set element size to given width and height
- size: function (width, height) {
- var p = proportionalSize(this, width, height)
-
- return this
- .width(new SVG.Number(p.width))
- .height(new SVG.Number(p.height))
- },
-
- // Clone element
- clone: function (parent) {
- // write dom data to the dom so the clone can pickup the data
- this.writeDataToDom()
-
- // clone element and assign new id
- var clone = assignNewId(this.node.cloneNode(true))
-
- // insert the clone in the given parent or after myself
- if (parent) parent.add(clone)
- else this.after(clone)
-
- return clone
- },
-
- // Remove element
- remove: function () {
- if (this.parent()) { this.parent().removeElement(this) }
-
- return this
- },
-
- // Replace element
- replace: function (element) {
- this.after(element).remove()
-
- return element
- },
-
- // Add element to given container and return self
- addTo: function (parent) {
- return createElement(parent).put(this)
- },
-
- // Add element to given container and return container
- putIn: function (parent) {
- return createElement(parent).add(this)
- },
-
- // Get / set id
- id: function (id) {
- // generate new id if no id set
- if (typeof id === 'undefined' && !this.node.id) {
- this.node.id = SVG.eid(this.type)
- }
-
- // dont't set directly width this.node.id to make `null` work correctly
- return this.attr('id', id)
- },
-
- // Checks whether the given point inside the bounding box of the element
- inside: function (x, y) {
- var box = this.bbox()
-
- return x > box.x &&
- y > box.y &&
- x < box.x + box.width &&
- y < box.y + box.height
- },
-
- // Show element
- show: function () {
- return this.css('display', '')
- },
-
- // Hide element
- hide: function () {
- return this.css('display', 'none')
- },
-
- // Is element visible?
- visible: function () {
- return this.css('display') !== 'none'
- },
-
- // Return id on string conversion
- toString: function () {
- return this.id()
- },
-
- // Return array of classes on the node
- classes: function () {
- var attr = this.attr('class')
- return attr == null ? [] : attr.trim().split(SVG.regex.delimiter)
- },
-
- // Return true if class exists on the node, false otherwise
- hasClass: function (name) {
- return this.classes().indexOf(name) !== -1
- },
-
- // Add class to the node
- addClass: function (name) {
- if (!this.hasClass(name)) {
- var array = this.classes()
- array.push(name)
- this.attr('class', array.join(' '))
- }
-
- return this
- },
-
- // Remove class from the node
- removeClass: function (name) {
- if (this.hasClass(name)) {
- this.attr('class', this.classes().filter(function (c) {
- return c !== name
- }).join(' '))
- }
-
- return this
- },
-
- // Toggle the presence of a class on the node
- toggleClass: function (name) {
- return this.hasClass(name) ? this.removeClass(name) : this.addClass(name)
- },
-
- // Get referenced element form attribute value
- reference: function (attr) {
- return SVG.get(this.attr(attr))
- },
-
- // Returns the parent element instance
- parent: function (type) {
- var parent = this
-
- // check for parent
- if (!parent.node.parentNode) return null
-
- // get parent element
- parent = SVG.adopt(parent.node.parentNode)
-
- if (!type) return parent
-
- // loop trough ancestors if type is given
- while (parent && parent.node instanceof window.SVGElement) {
- if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent
- parent = SVG.adopt(parent.node.parentNode)
- }
- },
-
- // Get parent document
- doc: function () {
- var p = this.parent(SVG.Doc)
- return p && p.doc()
- },
-
- // Get defs
- defs: function () {
- return this.doc().defs()
- },
-
- // return array of all ancestors of given type up to the root svg
- parents: function (type) {
- var parents = []
- var parent = this
-
- do {
- parent = parent.parent(type)
- if (!parent || !parent.node) break
-
- parents.push(parent)
- } while (parent.parent)
-
- return parents
- },
-
- // matches the element vs a css selector
- matches: function (selector) {
- return matches(this.node, selector)
- },
-
- // Returns the svg node to call native svg methods on it
- native: function () {
- return this.node
- },
-
- // Import raw svg
- svg: function (svg) {
- var well, len
-
- // act as a setter if svg is given
- if (svg && this instanceof SVG.Parent) {
- // create temporary holder
- well = document.createElementNS(SVG.ns, 'svg')
- // dump raw svg
- well.innerHTML = svg
-
- // transplant nodes
- for (len = well.children.length; len--;) {
- this.node.appendChild(well.firstElementChild)
- }
-
- // otherwise act as a getter
- } else {
- // write svgjs data to the dom
- this.writeDataToDom()
-
- return this.node.outerHTML
- }
-
- return this
- },
-
- // write svgjs data to the dom
- writeDataToDom: function () {
- // dump variables recursively
- if (this.is(SVG.Parent)) {
- this.each(function () {
- this.writeDataToDom()
- })
- }
-
- // remove previously set data
- this.node.removeAttribute('svgjs:data')
-
- if (Object.keys(this.dom).length) {
- this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)) // see #428
- }
- return this
- },
-
- // set given data to the elements data property
- setData: function (o) {
- this.dom = o
- return this
- },
- is: function (obj) {
- return is(this, obj)
- },
- getEventTarget: function () {
- return this.node
- }
- }
-})
-
-/* global abcdef, arrayToMatrix, closeEnough, formatTransforms */
-
-SVG.Matrix = SVG.invent({
- // Initialize
- create: function (source) {
- var base = arrayToMatrix([1, 0, 0, 1, 0, 0])
-
- // ensure source as object
- source = source instanceof SVG.Element ? source.matrixify()
- : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat))
- : Array.isArray(source) ? arrayToMatrix(source)
- : (typeof source === 'object' && (
- source.a != null || source.b != null || source.c != null ||
- source.d != null || source.e != null || source.f != null
- )) ? source
- : (typeof source === 'object') ? new SVG.Matrix().transform(source)
- : arguments.length === 6 ? arrayToMatrix([].slice.call(arguments))
- : base
-
- // Merge the source matrix with the base matrix
- this.a = source.a != null ? source.a : base.a
- this.b = source.b != null ? source.b : base.b
- this.c = source.c != null ? source.c : base.c
- this.d = source.d != null ? source.d : base.d
- this.e = source.e != null ? source.e : base.e
- this.f = source.f != null ? source.f : base.f
- },
-
- // Add methods
- extend: {
-
- // Clones this matrix
- clone: function () {
- return new SVG.Matrix(this)
- },
-
- // Transform a matrix into another matrix by manipulating the space
- transform: function (o) {
- // Check if o is a matrix and then left multiply it directly
- if (o.a != null) {
- var matrix = new SVG.Matrix(o)
- var newMatrix = this.lmultiply(matrix)
- return newMatrix
- }
-
- // Get the proposed transformations and the current transformations
- var t = formatTransforms(o)
- var currentTransform = new SVG.Matrix(this)
-
- // Construct the resulting matrix
- var transformer = new SVG.Matrix()
- .translate(-t.ox, -t.oy)
- .scale(t.scaleX, t.scaleY)
- .skew(t.skewX, t.skewY)
- .shear(t.shear)
- .rotate(t.theta)
- .translate(t.ox, t.oy)
- .translate(t.rx, t.ry)
- .lmultiply(currentTransform)
-
- // If we want the origin at a particular place, we force it there
- if (isFinite(t.px) || isFinite(t.py)) {
- // Figure out where the origin went and the delta to get there
- var current = new SVG.Point(t.ox - t.rx, t.oy - t.ry).transform(transformer)
- var dx = t.px ? t.px - current.x : 0
- var dy = t.py ? t.py - current.y : 0
-
- // Apply another translation
- transformer = transformer.translate(dx, dy)
- }
-
- // We can apply translations after everything else
- transformer = transformer.translate(t.tx, t.ty)
- return transformer
- },
-
- // Applies a matrix defined by its affine parameters
- compose: function (o) {
- if (o.origin) {
- o.originX = o.origin[0]
- o.originY = o.origin[1]
- }
- // Get the parameters
- var ox = o.originX || 0
- var oy = o.originY || 0
- var sx = o.scaleX || 1
- var sy = o.scaleY || 1
- var lam = o.shear || 0
- var theta = o.rotate || 0
- var tx = o.translateX || 0
- var ty = o.translateY || 0
-
- // Apply the standard matrix
- var result = new SVG.Matrix()
- .translate(-ox, -oy)
- .scale(sx, sy)
- .shear(lam)
- .rotate(theta)
- .translate(tx, ty)
- .lmultiply(this)
- .translate(ox, oy)
- return result
- },
-
- // Decomposes this matrix into its affine parameters
- decompose: function (ox=0, oy=0) {
- // Get the parameters from the matrix
- var a = this.a
- var b = this.b
- var c = this.c
- var d = this.d
- var e = this.e - ox
- var f = this.f - oy
-
- // Figure out if the winding direction is clockwise or counterclockwise
- var determinant = a * d - b * c
- var ccw = determinant > 0 ? 1 : -1
-
- // Since we only shear in x, we can use the x basis to get the x scale
- // and the rotation of the resulting matrix
- var sx = ccw * Math.sqrt(a * a + b * b)
- var theta = 180 / Math.PI * Math.atan2(ccw * b, ccw * a)
-
- // We can then solve the y basis vector simultaneously to get the other
- // two affine parameters directly from these parameters
- var lam = (a * c + b * d) / determinant
- var sy = ((c * sx) / (lam * a - b)) || ((d * sx) / (lam * b + a))
-
- // Construct the decomposition and return it
- return {
- // Return the affine parameters
- scaleX: sx,
- scaleY: sy,
- shear: lam,
- rotate: theta,
- translateX: e + ox,
- translateY: f + oy,
- originX: ox,
- originY: oy,
-
- // Return the matrix parameters
- a: this.a,
- b: this.b,
- c: this.c,
- d: this.d,
- e: this.e + ox,
- f: this.f + oy
- }
- },
-
- // Morph one matrix into another
- morph: function (matrix) {
- // Store new destination
- this.destination = new SVG.Matrix(matrix)
- return this
- },
-
- // Get morphed matrix at a given position
- at: function (pos) {
- // Make sure a destination is defined
- if (!this.destination) return this
-
- // Calculate morphed matrix at a given position
- var matrix = new SVG.Matrix({
- a: this.a + (this.destination.a - this.a) * pos,
- b: this.b + (this.destination.b - this.b) * pos,
- c: this.c + (this.destination.c - this.c) * pos,
- d: this.d + (this.destination.d - this.d) * pos,
- e: this.e + (this.destination.e - this.e) * pos,
- f: this.f + (this.destination.f - this.f) * pos
- })
-
- return matrix
- },
-
- // Left multiplies by the given matrix
- multiply: function (matrix) {
- // Get the matrices
- var l = this
- var r = new SVG.Matrix(matrix)
-
- // Work out the product directly
- var a = l.a * r.a + l.c * r.b
- var b = l.b * r.a + l.d * r.b
- var c = l.a * r.c + l.c * r.d
- var d = l.b * r.c + l.d * r.d
- var e = l.e + l.a * r.e + l.c * r.f
- var f = l.f + l.b * r.e + l.d * r.f
-
- // Form the matrix and return it
- var product = new SVG.Matrix(a, b, c, d, e, f)
- return product
- },
-
- lmultiply: function (matrix) {
- var result = new SVG.Matrix(matrix).multiply(this)
- return result
- },
-
- // Inverses matrix
- inverse: function () {
- // Get the current parameters out of the matrix
- var a = this.a
- var b = this.b
- var c = this.c
- var d = this.d
- var e = this.e
- var f = this.f
-
- // Invert the 2x2 matrix in the top left
- var det = a * d - b * c
- if (!det) throw new Error('Cannot invert ' + this)
-
- // Calculate the top 2x2 matrix
- var na = d / det
- var nb = -b / det
- var nc = -c / det
- var nd = a / det
-
- // Apply the inverted matrix to the top right
- var ne = -(na * e + nc * f)
- var nf = -(nb * e + nd * f)
-
- // Construct the inverted matrix
- return new SVG.Matrix(na, nb, nc, nd, ne, nf)
- },
-
- // Translate matrix
- translate: function (x, y) {
- return new SVG.Matrix(this).translateO(x, y)
- },
-
- translateO: function (x, y) {
- this.e += x || 0
- this.f += y || 0
- return this
- },
-
- // Scale matrix
- scale: function (x, y, cx, cy) {
- // Support uniform scaling
- if (arguments.length === 1) {
- y = x
- } else if (arguments.length === 3) {
- cy = cx
- cx = y
- y = x
- }
-
- // Scale the current matrix
- var scale = new SVG.Matrix(x, 0, 0, y, 0, 0)
- var matrix = this.around(cx, cy, scale)
- return matrix
- },
-
- // Rotate matrix
- rotate: function (r, cx, cy) {
- // Convert degrees to radians
- r = SVG.utils.radians(r)
-
- // Construct the rotation matrix
- var rotation = new SVG.Matrix(Math.cos(r), Math.sin(r), -Math.sin(r), Math.cos(r), 0, 0)
- var matrix = this.around(cx, cy, rotation)
- return matrix
- },
-
- // Flip matrix on x or y, at a given offset
- flip: function (axis, around) {
- return axis === 'x' ? this.scale(-1, 1, around, 0)
- : axis === 'y' ? this.scale(1, -1, 0, around)
- : this.scale(-1, -1, axis, around || axis) // Define an x, y flip point
- },
-
- // Shear matrix
- shear: function (a, cx, cy) {
- var shear = new SVG.Matrix(1, 0, a, 1, 0, 0)
- var matrix = this.around(cx, cy, shear)
- return matrix
- },
-
- // Skew Matrix
- skew: function (x, y, cx, cy) {
- // support uniformal skew
- if (arguments.length === 1) {
- y = x
- } else if (arguments.length === 3) {
- cy = cx
- cx = y
- y = x
- }
-
- // Convert degrees to radians
- x = SVG.utils.radians(x)
- y = SVG.utils.radians(y)
-
- // Construct the matrix
- var skew = new SVG.Matrix(1, Math.tan(y), Math.tan(x), 1, 0, 0)
- var matrix = this.around(cx, cy, skew)
- return matrix
- },
-
- // SkewX
- skewX: function (x, cx, cy) {
- return this.skew(x, 0, cx, cy)
- },
-
- // SkewY
- skewY: function (y, cx, cy) {
- return this.skew(0, y, cx, cy)
- },
-
- // Transform around a center point
- around: function (cx, cy, matrix) {
- var dx = cx || 0
- var dy = cy || 0
- return this.translate(-dx, -dy).lmultiply(matrix).translate(dx, dy)
- },
-
- // Convert to native SVGMatrix
- native: function () {
- // create new matrix
- var matrix = SVG.parser.nodes.svg.node.createSVGMatrix()
-
- // update with current values
- for (var i = abcdef.length - 1; i >= 0; i--) {
- matrix[abcdef[i]] = this[abcdef[i]]
- }
-
- return matrix
- },
-
- // Check if two matrices are equal
- equals: function (other) {
- var comp = new SVG.Matrix(other)
- return closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) &&
- closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) &&
- closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f)
- },
-
- // Convert matrix to string
- toString: function () {
- return 'matrix(' + this.a + ',' + this.b + ',' + this.c + ',' + this.d + ',' + this.e + ',' + this.f + ')'
- },
-
- toArray: function () {
- return [this.a, this.b, this.c, this.d, this.e, this.f]
- },
-
- valueOf: function () {
- return {
- a: this.a,
- b: this.b,
- c: this.c,
- d: this.d,
- e: this.e,
- f: this.f
- }
- }
- },
-
- // Define parent
- parent: SVG.Element,
-
- // Add parent method
- construct: {
- // Get current matrix
- ctm: function () {
- return new SVG.Matrix(this.node.getCTM())
- },
- // Get current screen matrix
- screenCTM: function () {
- /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537
- This is needed because FF does not return the transformation matrix
- for the inner coordinate system when getScreenCTM() is called on nested svgs.
- However all other Browsers do that */
- if (this instanceof SVG.Doc && !this.isRoot()) {
- var rect = this.rect(1, 1)
- var m = rect.node.getScreenCTM()
- rect.remove()
- return new SVG.Matrix(m)
- }
- return new SVG.Matrix(this.node.getScreenCTM())
- }
- }
-})
-
-
-SVG.Point = SVG.invent({
- // Initialize
- create: function (x, y, base) {
- var source
- base = base || {x: 0, y: 0}
-
- // ensure source as object
- source = Array.isArray(x) ? {x: x[0], y: x[1]}
- : typeof x === 'object' ? {x: x.x, y: x.y}
- : {x: x, y: y}
-
- // merge source
- this.x = source.x == null ? base.x : source.x
- this.y = source.y == null ? base.y : source.y
- },
-
- // Add methods
- extend: {
- // Clone point
- clone: function () {
- return new SVG.Point(this)
- },
-
- // Morph one point into another
- morph: function (x, y) {
- // store new destination
- this.destination = new SVG.Point(x, y)
- return this
- },
-
- // Get morphed point at a given position
- at: function (pos) {
- // make sure a destination is defined
- if (!this.destination) return this
-
- // calculate morphed matrix at a given position
- var point = new SVG.Point({
- x: this.x + (this.destination.x - this.x) * pos,
- y: this.y + (this.destination.y - this.y) * pos
- })
- return point
- },
-
- // Convert to native SVGPoint
- native: function () {
- // create new point
- var point = SVG.parser.nodes.svg.node.createSVGPoint()
-
- // update with current values
- point.x = this.x
- point.y = this.y
- return point
- },
-
- // transform point with matrix
- transform: function (m) {
- // Perform the matrix multiplication
- var x = m.a * this.x + m.c * this.y + m.e
- var y = m.b * this.x + m.d * this.y + m.f
-
- // Return the required point
- return new SVG.Point(x, y)
- }
- }
-})
-
-SVG.extend(SVG.Element, {
-
- // Get point
- point: function (x, y) {
- return new SVG.Point(x, y).transform(this.screenCTM().inverse())
- }
-})
-
-SVG.extend(SVG.Element, {
- // Set svg element attribute
- attr: function (a, v, n) {
- // act as full getter
- if (a == null) {
- // get an object of attributes
- a = {}
- v = this.node.attributes
- for (n = v.length - 1; n >= 0; n--) {
- a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue)
- ? parseFloat(v[n].nodeValue)
- : v[n].nodeValue
- }
- return a
- } else if (typeof a === 'object') {
- // apply every attribute individually if an object is passed
- for (v in a) this.attr(v, a[v])
- } else if (v === null) {
- // remove value
- this.node.removeAttribute(a)
- } else if (v == null) {
- // act as a getter if the first and only argument is not an object
- v = this.node.getAttribute(a)
- return v == null ? SVG.defaults.attrs[a]
- : SVG.regex.isNumber.test(v) ? parseFloat(v)
- : v
- } else {
- // convert image fill and stroke to patterns
- if (a === 'fill' || a === 'stroke') {
- if (SVG.regex.isImage.test(v)) {
- v = this.doc().defs().image(v)
- }
-
- if (v instanceof SVG.Image) {
- v = this.doc().defs().pattern(0, 0, function () {
- this.add(v)
- })
- }
- }
-
- // ensure correct numeric values (also accepts NaN and Infinity)
- if (typeof v === 'number') {
- v = new SVG.Number(v)
- } else if (SVG.Color.isColor(v)) {
- // ensure full hex color
- v = new SVG.Color(v)
- } else if (Array.isArray(v)) {
- // parse array values
- v = new SVG.Array(v)
- }
-
- // if the passed attribute is leading...
- if (a === 'leading') {
- // ... call the leading method instead
- if (this.leading) {
- this.leading(v)
- }
- } else {
- // set given attribute on node
- typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString())
- : this.node.setAttribute(a, v.toString())
- }
-
- // rebuild if required
- if (this.rebuild && (a === 'font-size' || a === 'x')) {
- this.rebuild(a, v)
- }
- }
-
- return this
- }
-})
-
-/* global arrayToMatrix */
-
-SVG.extend(SVG.Element, {
- // Reset all transformations
- untransform: function () {
- return this.attr('transform', null)
- },
-
- // merge the whole transformation chain into one matrix and returns it
- matrixify: function () {
- var matrix = (this.attr('transform') || '')
- // split transformations
- .split(SVG.regex.transforms).slice(0, -1).map(function (str) {
- // generate key => value pairs
- var kv = str.trim().split('(')
- return [kv[0],
- kv[1].split(SVG.regex.delimiter)
- .map(function (str) { return parseFloat(str) })
- ]
- })
- .reverse()
- // merge every transformation into one matrix
- .reduce(function (matrix, transform) {
- if (transform[0] === 'matrix') {
- return matrix.lmultiply(arrayToMatrix(transform[1]))
- }
- return matrix[transform[0]].apply(matrix, transform[1])
- }, new SVG.Matrix())
-
- return matrix
- },
-
- // add an element to another parent without changing the visual representation on the screen
- toParent: function (parent) {
- if (this === parent) return this
- var ctm = this.screenCTM()
- var pCtm = parent.screenCTM().inverse()
-
- this.addTo(parent).untransform().transform(pCtm.multiply(ctm))
-
- return this
- },
-
- // same as above with parent equals root-svg
- toDoc: function () {
- return this.toParent(this.doc())
- }
-})
-
-SVG.extend(SVG.Element, {
-
- // Add transformations
- transform: function (o, relative) {
- // Act as a getter if no object was passed
- if (o == null || typeof o === 'string') {
- var decomposed = new SVG.Matrix(this).decompose()
- return decomposed[o] || decomposed
- }
-
- // Set the origin according to the defined transform
- o.origin = getOrigin (o, this)
-
- // The user can pass a boolean, an SVG.Element or an SVG.Matrix or nothing
- var cleanRelative = relative === true ? this : (relative || false)
- var result = new SVG.Matrix(cleanRelative).transform(o)
- return this.attr('transform', result)
- }
-})
-
-SVG.extend(SVG.Timeline, {
- transform: function (o, relative, affine) {
-
- // // get target in case of the fx module, otherwise reference this
- // var target = this.target()
- // , matrix, bbox
- //
- // // act as a getter
- // if (typeof o !== 'object') {
- // // get current matrix
- // matrix = new SVG.Matrix(target).extract()
- //
- // return typeof o === 'string' ? matrix[o] : matrix
- // }
- //
- // // ensure relative flag
- // relative = !!relative || !!o.relative
- //
- // // act on matrix
- // if (o.a != null) {
- // matrix = new SVG.Matrix(o)
- //
- // // act on rotation
- // } else if (o.rotation != null) {
- // // ensure centre point
- // ensureCentre(o, target)
- //
- // // apply transformation
- // matrix = new SVG.Rotate(o.rotation, o.cx, o.cy)
- //
- // // act on scale
- // } else if (o.scale != null || o.scaleX != null || o.scaleY != null) {
- // // ensure centre point
- // ensureCentre(o, target)
- //
- // // ensure scale values on both axes
- // o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1
- // o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1
- //
- // matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy)
- //
- // // act on skew
- // } else if (o.skewX != null || o.skewY != null) {
- // // ensure centre point
- // ensureCentre(o, target)
- //
- // // ensure skew values on both axes
- // o.skewX = o.skewX != null ? o.skewX : 0
- // o.skewY = o.skewY != null ? o.skewY : 0
- //
- // matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy)
- //
- // // act on flip
- // } else if (o.flip) {
- // if(o.flip == 'x' || o.flip == 'y') {
- // o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset
- // } else {
- // if(o.offset == null) {
- // bbox = target.bbox()
- // o.flip = bbox.cx
- // o.offset = bbox.cy
- // } else {
- // o.flip = o.offset
- // }
- // }
- //
- // matrix = new SVG.Matrix().flip(o.flip, o.offset)
- //
- // // act on translate
- // } else if (o.x != null || o.y != null) {
- // matrix = new SVG.Translate(o.x, o.y)
- // }
- //
- // if(!matrix) return this
- //
- // matrix.relative = relative
- //
- // this.last().transforms.push(matrix)
- //
- // return this._callStart()
- // }
- // // ensure scale values on both axes
- // o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1
- // o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1
- //
- // matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy)
- //
- // // act on skew
- // } else if (o.skewX != null || o.skewY != null) {
- // // ensure centre point
- // ensureCentre(o, target)
- //
- // // ensure skew values on both axes
- // o.skewX = o.skewX != null ? o.skewX : 0
- // o.skewY = o.skewY != null ? o.skewY : 0
- //
- // matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy)
- //
- // // act on flip
- // } else if (o.flip) {
- // if (o.flip === 'x' || o.flip === 'y') {
- // o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset
- // } else {
- // if (o.offset == null) {
- // bbox = target.bbox()
- // o.flip = bbox.cx
- // o.offset = bbox.cy
- // } else {
- // o.flip = o.offset
- // }
- // }
- //
- // matrix = new SVG.Matrix().flip(o.flip, o.offset)
- //
- // // act on translate
- // } else if (o.x != null || o.y != null) {
- // matrix = new SVG.Translate(o.x, o.y)
- // }
- //
- // if (!matrix) return this
- //
- // matrix.relative = relative
- //
- // this.last().transforms.push(matrix)
- //
- // return this._callStart()
- }
-})
-
-/* global camelCase */
-
-SVG.extend(SVG.Element, {
- // Dynamic style generator
- css: function (s, v) {
- var ret = {}
- var t, i
- if (arguments.length === 0) {
- // get full style as object
- this.node.style.cssText.split(/\s*;\s*/).filter(function (el) { return !!el.length }).forEach(function (el) {
- t = el.split(/\s*:\s*/)
- ret[t[0]] = t[1]
- })
- return ret
- }
-
- if (arguments.length < 2) {
- // get style properties in the array
- if (Array.isArray(s)) {
- for (i = s.length; i--;) {
- ret[camelCase(s[i])] = this.node.style[camelCase(s[i])]
- }
- return ret
- }
-
- // get style for property
- if (typeof s === 'string') {
- return this.node.style[camelCase(s)]
- }
-
- // set styles in object
- if (typeof s === 'object') {
- for (i in s) {
- // set empty string if null/undefined/'' was given
- this.node.style[camelCase(i)] = (s[i] == null || SVG.regex.isBlank.test(s[i])) ? '' : s[i]
- }
- }
- }
-
- // set style for property
- if (arguments.length === 2) {
- this.node.style[camelCase(s)] = (v == null || SVG.regex.isBlank.test(v)) ? '' : v
- }
-
- return this
- }
-})
-
-/* global createElement */
-
-SVG.Parent = SVG.invent({
- // Initialize node
- create: function (node) {
- SVG.Element.call(this, node)
- },
-
- // Inherit from
- inherit: SVG.Element,
-
- // Add class methods
- extend: {
- // Returns all child elements
- children: function () {
- return SVG.utils.map(this.node.children, function (node) {
- return SVG.adopt(node)
- })
- },
- // Add given element at a position
- add: function (element, i) {
- element = createElement(element)
-
- if (element.node !== this.node.children[i]) {
- this.node.insertBefore(element.node, this.node.children[i] || null)
- }
-
- return this
- },
- // Basically does the same as `add()` but returns the added element instead
- put: function (element, i) {
- this.add(element, i)
- return element.instance || element
- },
- // Checks if the given element is a child
- has: function (element) {
- return this.index(element) >= 0
- },
- // Gets index of given element
- index: function (element) {
- return [].slice.call(this.node.children).indexOf(element.node)
- },
- // Get a element at the given index
- get: function (i) {
- return SVG.adopt(this.node.children[i])
- },
- // Get first child
- first: function () {
- return this.get(0)
- },
- // Get the last child
- last: function () {
- return this.get(this.node.children.length - 1)
- },
- // Iterates over all children and invokes a given block
- each: function (block, deep) {
- var children = this.children()
- var i, il
-
- for (i = 0, il = children.length; i < il; i++) {
- if (children[i] instanceof SVG.Element) {
- block.apply(children[i], [i, children])
- }
-
- if (deep && (children[i] instanceof SVG.Parent)) {
- children[i].each(block, deep)
- }
- }
-
- return this
- },
- // Remove a given child
- removeElement: function (element) {
- this.node.removeChild(element.node)
-
- return this
- },
- // Remove all elements in this container
- clear: function () {
- // remove children
- while (this.node.hasChildNodes()) {
- this.node.removeChild(this.node.lastChild)
- }
-
- // remove defs reference
- delete this._defs
-
- return this
- }
- }
-
-})
-
-SVG.extend(SVG.Parent, {
- flatten: function (parent) {
- // flattens is only possible for nested svgs and groups
- if (!(this instanceof SVG.G || this instanceof SVG.Doc)) {
- return this
- }
-
- parent = parent || (this instanceof SVG.Doc && this.isRoot() ? this : this.parent(SVG.Parent))
-
- this.each(function () {
- if (this instanceof SVG.Defs) return this
- if (this instanceof SVG.Parent) return this.flatten(parent)
- return this.toParent(parent)
- })
-
- // we need this so that SVG.Doc does not get removed
- this.node.firstElementChild || this.remove()
-
- return this
- },
- ungroup: function (parent) {
- // ungroup is only possible for nested svgs and groups
- if (!(this instanceof SVG.G || (this instanceof SVG.Doc && !this.isRoot()))) {
- return this
- }
-
- parent = parent || this.parent(SVG.Parent)
-
- this.each(function () {
- return this.toParent(parent)
- })
-
- // we need this so that SVG.Doc does not get removed
- this.remove()
-
- return this
- }
-})
-
-SVG.Container = SVG.invent({
- // Initialize node
- create: function (node) {
- SVG.Element.call(this, node)
- },
-
- // Inherit from
- inherit: SVG.Parent
-})
-
-SVG.Defs = SVG.invent({
- // Initialize node
- create: 'defs',
-
- // Inherit from
- inherit: SVG.Container
-})
-
-SVG.G = SVG.invent({
- // Initialize node
- create: 'g',
-
- // Inherit from
- inherit: SVG.Container,
-
- // Add class methods
- extend: {
- },
-
- // Add parent method
- construct: {
- // Create a group element
- group: function () {
- return this.put(new SVG.G())
- }
- }
-})
-
-// ### This module adds backward / forward functionality to elements.
-
-//
-SVG.extend(SVG.Element, {
- // Get all siblings, including myself
- siblings: function () {
- return this.parent().children()
- },
-
- // Get the curent position siblings
- position: function () {
- return this.parent().index(this)
- },
-
- // Get the next element (will return null if there is none)
- next: function () {
- return this.siblings()[this.position() + 1]
- },
-
- // Get the next element (will return null if there is none)
- prev: function () {
- return this.siblings()[this.position() - 1]
- },
-
- // Send given element one step forward
- forward: function () {
- var i = this.position() + 1
- var p = this.parent()
-
- // move node one step forward
- p.removeElement(this).add(this, i)
-
- // make sure defs node is always at the top
- if (p instanceof SVG.Doc) {
- p.node.appendChild(p.defs().node)
- }
-
- return this
- },
-
- // Send given element one step backward
- backward: function () {
- var i = this.position()
-
- if (i > 0) {
- this.parent().removeElement(this).add(this, i - 1)
- }
-
- return this
- },
-
- // Send given element all the way to the front
- front: function () {
- var p = this.parent()
-
- // Move node forward
- p.node.appendChild(this.node)
-
- // Make sure defs node is always at the top
- if (p instanceof SVG.Doc) {
- p.node.appendChild(p.defs().node)
- }
-
- return this
- },
-
- // Send given element all the way to the back
- back: function () {
- if (this.position() > 0) {
- this.parent().removeElement(this).add(this, 0)
- }
-
- return this
- },
-
- // Inserts a given element before the targeted element
- before: function (element) {
- element.remove()
-
- var i = this.position()
-
- this.parent().add(element, i)
-
- return this
- },
-
- // Insters a given element after the targeted element
- after: function (element) {
- element.remove()
-
- var i = this.position()
-
- this.parent().add(element, i + 1)
-
- return this
- }
-})
-
-SVG.Mask = SVG.invent({
- // Initialize node
- create: 'mask',
-
- // Inherit from
- inherit: SVG.Container,
-
- // Add class methods
- extend: {
- // Unmask all masked elements and remove itself
- remove: function () {
- // unmask all targets
- this.targets().forEach(function (el) {
- el.unmask()
- })
-
- // remove mask from parent
- return SVG.Element.prototype.remove.call(this)
- },
-
- targets: function () {
- return SVG.select('svg [mask*="' + this.id() + '"]')
- }
- },
-
- // Add parent method
- construct: {
- // Create masking element
- mask: function () {
- return this.defs().put(new SVG.Mask())
- }
- }
-})
-
-SVG.extend(SVG.Element, {
- // Distribute mask to svg element
- maskWith: function (element) {
- // use given mask or create a new one
- var masker = element instanceof SVG.Mask ? element : this.parent().mask().add(element)
-
- // apply mask
- return this.attr('mask', 'url("#' + masker.id() + '")')
- },
- // Unmask element
- unmask: function () {
- return this.attr('mask', null)
- },
- masker: function () {
- return this.reference('mask')
- }
-})
-
-SVG.ClipPath = SVG.invent({
- // Initialize node
- create: 'clipPath',
-
- // Inherit from
- inherit: SVG.Container,
-
- // Add class methods
- extend: {
- // Unclip all clipped elements and remove itself
- remove: function () {
- // unclip all targets
- this.targets().forEach(function (el) {
- el.unclip()
- })
-
- // remove clipPath from parent
- return SVG.Element.prototype.remove.call(this)
- },
-
- targets: function () {
- return SVG.select('svg [clip-path*="' + this.id() + '"]')
- }
- },
-
- // Add parent method
- construct: {
- // Create clipping element
- clip: function () {
- return this.defs().put(new SVG.ClipPath())
- }
- }
-})
-
-//
-SVG.extend(SVG.Element, {
- // Distribute clipPath to svg element
- clipWith: function (element) {
- // use given clip or create a new one
- var clipper = element instanceof SVG.ClipPath ? element : this.parent().clip().add(element)
-
- // apply mask
- return this.attr('clip-path', 'url("#' + clipper.id() + '")')
- },
- // Unclip element
- unclip: function () {
- return this.attr('clip-path', null)
- },
- clipper: function () {
- return this.reference('clip-path')
- }
-
-})
-
-SVG.Gradient = SVG.invent({
- // Initialize node
- create: function (type) {
- SVG.Element.call(this, typeof type === 'object' ? type : SVG.create(type + 'Gradient'))
- },
-
- // Inherit from
- inherit: SVG.Container,
-
- // Add class methods
- extend: {
- // Add a color stop
- stop: function (offset, color, opacity) {
- return this.put(new SVG.Stop()).update(offset, color, opacity)
- },
- // Update gradient
- update: function (block) {
- // remove all stops
- this.clear()
-
- // invoke passed block
- if (typeof block === 'function') {
- block.call(this, this)
- }
-
- return this
- },
- // Return the fill id
- url: function () {
- return 'url(#' + this.id() + ')'
- },
- // Alias string convertion to fill
- toString: function () {
- return this.url()
- },
- // custom attr to handle transform
- attr: function (a, b, c) {
- if (a === 'transform') a = 'gradientTransform'
- return SVG.Container.prototype.attr.call(this, a, b, c)
- }
- },
-
- // Add parent method
- construct: {
- // Create gradient element in defs
- gradient: function (type, block) {
- return this.defs().gradient(type, block)
- }
- }
-})
-
-// Add animatable methods to both gradient and fx module
-SVG.extend([SVG.Gradient, SVG.Timeline], {
- // From position
- from: function (x, y) {
- return (this._target || this).type === 'radialGradient'
- ? this.attr({ fx: new SVG.Number(x), fy: new SVG.Number(y) })
- : this.attr({ x1: new SVG.Number(x), y1: new SVG.Number(y) })
- },
- // To position
- to: function (x, y) {
- return (this._target || this).type === 'radialGradient'
- ? this.attr({ cx: new SVG.Number(x), cy: new SVG.Number(y) })
- : this.attr({ x2: new SVG.Number(x), y2: new SVG.Number(y) })
- }
-})
-
-// Base gradient generation
-SVG.extend(SVG.Defs, {
- // define gradient
- gradient: function (type, block) {
- return this.put(new SVG.Gradient(type)).update(block)
- }
-
-})
-
-SVG.Stop = SVG.invent({
- // Initialize node
- create: 'stop',
-
- // Inherit from
- inherit: SVG.Element,
-
- // Add class methods
- extend: {
- // add color stops
- update: function (o) {
- if (typeof o === 'number' || o instanceof SVG.Number) {
- o = {
- offset: arguments[0],
- color: arguments[1],
- opacity: arguments[2]
- }
- }
-
- // set attributes
- if (o.opacity != null) this.attr('stop-opacity', o.opacity)
- if (o.color != null) this.attr('stop-color', o.color)
- if (o.offset != null) this.attr('offset', new SVG.Number(o.offset))
-
- return this
- }
- }
-})
-
-SVG.Pattern = SVG.invent({
- // Initialize node
- create: 'pattern',
-
- // Inherit from
- inherit: SVG.Container,
-
- // Add class methods
- extend: {
- // Return the fill id
- url: function () {
- return 'url(#' + this.id() + ')'
- },
- // Update pattern by rebuilding
- update: function (block) {
- // remove content
- this.clear()
-
- // invoke passed block
- if (typeof block === 'function') {
- block.call(this, this)
- }
-
- return this
- },
- // Alias string convertion to fill
- toString: function () {
- return this.url()
- },
- // custom attr to handle transform
- attr: function (a, b, c) {
- if (a === 'transform') a = 'patternTransform'
- return SVG.Container.prototype.attr.call(this, a, b, c)
- }
-
- },
-
- // Add parent method
- construct: {
- // Create pattern element in defs
- pattern: function (width, height, block) {
- return this.defs().pattern(width, height, block)
- }
- }
-})
-
-SVG.extend(SVG.Defs, {
- // Define gradient
- pattern: function (width, height, block) {
- return this.put(new SVG.Pattern()).update(block).attr({
- x: 0,
- y: 0,
- width: width,
- height: height,
- patternUnits: 'userSpaceOnUse'
- })
- }
-
-})
-
-SVG.Doc = SVG.invent({
- // Initialize node
- create: function (node) {
- SVG.Element.call(this, node || SVG.create('svg'))
-
- // set svg element attributes and ensure defs node
- this.namespace()
- },
-
- // Inherit from
- inherit: SVG.Container,
-
- // Add class methods
- extend: {
- isRoot: function () {
- return !this.node.parentNode || !(this.node.parentNode instanceof window.SVGElement) || this.node.parentNode.nodeName === '#document'
- },
- // Check if this is a root svg. If not, call docs from this element
- doc: function () {
- if (this.isRoot()) return this
- return SVG.Element.prototype.doc.call(this)
- },
- // Add namespaces
- namespace: function () {
- if (!this.isRoot()) return this.doc().namespace()
- return this
- .attr({ xmlns: SVG.ns, version: '1.1' })
- .attr('xmlns:xlink', SVG.xlink, SVG.xmlns)
- .attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns)
- },
- // Creates and returns defs element
- defs: function () {
- if (!this.isRoot()) return this.doc().defs()
- return SVG.adopt(this.node.getElementsByTagName('defs')[0]) || this.put(new SVG.Defs())
- },
- // custom parent method
- parent: function (type) {
- if (this.isRoot()) {
- return this.node.parentNode.nodeName === '#document' ? null : this.node.parentNode
- }
-
- return SVG.Element.prototype.parent.call(this, type)
- },
- // Removes the doc from the DOM
- remove: function () {
- if (!this.isRoot()) {
- return SVG.Element.prototype.remove.call(this)
- }
-
- if (this.parent()) {
- this.parent().removeChild(this.node)
- }
-
- return this
- },
- clear: function () {
- // remove children
- while (this.node.hasChildNodes()) {
- this.node.removeChild(this.node.lastChild)
- }
- return this
- }
- },
- construct: {
- // Create nested svg document
- nested: function () {
- return this.put(new SVG.Doc())
- }
- }
-})
-
-
-SVG.Shape = SVG.invent({
- // Initialize node
- create: function (node) {
- SVG.Element.call(this, node)
- },
-
- // Inherit from
- inherit: SVG.Element
-})
-
-
-SVG.Bare = SVG.invent({
- // Initialize
- create: function (element, inherit) {
- // construct element
- SVG.Element.call(this, SVG.create(element))
-
- // inherit custom methods
- if (inherit) {
- for (var method in inherit.prototype) {
- if (typeof inherit.prototype[method] === 'function') {
- this[method] = inherit.prototype[method]
- }
- }
- }
- },
-
- // Inherit from
- inherit: SVG.Element,
-
- // Add methods
- extend: {
- // Insert some plain text
- words: function (text) {
- // remove contents
- while (this.node.hasChildNodes()) {
- this.node.removeChild(this.node.lastChild)
- }
-
- // create text node
- this.node.appendChild(document.createTextNode(text))
-
- return this
- }
- }
-})
-
-SVG.extend(SVG.Parent, {
- // Create an element that is not described by SVG.js
- element: function (element, inherit) {
- return this.put(new SVG.Bare(element, inherit))
- }
-})
-
-
-SVG.Symbol = SVG.invent({
- // Initialize node
- create: 'symbol',
-
- // Inherit from
- inherit: SVG.Container,
-
- construct: {
- // create symbol
- symbol: function () {
- return this.put(new SVG.Symbol())
- }
- }
-})
-
-
-SVG.Use = SVG.invent({
- // Initialize node
- create: 'use',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add class methods
- extend: {
- // Use element as a reference
- element: function (element, file) {
- // Set lined element
- return this.attr('href', (file || '') + '#' + element, SVG.xlink)
- }
- },
-
- // Add parent method
- construct: {
- // Create a use element
- use: function (element, file) {
- return this.put(new SVG.Use()).element(element, file)
- }
- }
-})
-
-
-SVG.Rect = SVG.invent({
- // Initialize node
- create: 'rect',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add parent method
- construct: {
- // Create a rect element
- rect: function (width, height) {
- return this.put(new SVG.Rect()).size(width, height)
- }
- }
-})
-
-/* global proportionalSize */
-
-SVG.Circle = SVG.invent({
- // Initialize node
- create: 'circle',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add parent method
- construct: {
- // Create circle element, based on ellipse
- circle: function (size) {
- return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0)
- }
- }
-})
-
-SVG.extend([SVG.Circle, SVG.Timeline], {
- // Radius x value
- rx: function (rx) {
- return this.attr('r', rx)
- },
- // Alias radius x value
- ry: function (ry) {
- return this.rx(ry)
- }
-})
-
-SVG.Ellipse = SVG.invent({
- // Initialize node
- create: 'ellipse',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add parent method
- construct: {
- // Create an ellipse
- ellipse: function (width, height) {
- return this.put(new SVG.Ellipse()).size(width, height).move(0, 0)
- }
- }
-})
-
-SVG.extend([SVG.Ellipse, SVG.Rect, SVG.Timeline], {
- // Radius x value
- rx: function (rx) {
- return this.attr('rx', rx)
- },
- // Radius y value
- ry: function (ry) {
- return this.attr('ry', ry)
- }
-})
-
-// Add common method
-SVG.extend([SVG.Circle, SVG.Ellipse], {
- // Move over x-axis
- x: function (x) {
- return x == null ? this.cx() - this.rx() : this.cx(x + this.rx())
- },
- // Move over y-axis
- y: function (y) {
- return y == null ? this.cy() - this.ry() : this.cy(y + this.ry())
- },
- // Move by center over x-axis
- cx: function (x) {
- return x == null ? this.attr('cx') : this.attr('cx', x)
- },
- // Move by center over y-axis
- cy: function (y) {
- return y == null ? this.attr('cy') : this.attr('cy', y)
- },
- // Set width of element
- width: function (width) {
- return width == null ? this.rx() * 2 : this.rx(new SVG.Number(width).divide(2))
- },
- // Set height of element
- height: function (height) {
- return height == null ? this.ry() * 2 : this.ry(new SVG.Number(height).divide(2))
- },
- // Custom size function
- size: function (width, height) {
- var p = proportionalSize(this, width, height)
-
- return this
- .rx(new SVG.Number(p.width).divide(2))
- .ry(new SVG.Number(p.height).divide(2))
- }
-})
-
-/* global proportionalSize */
-
-SVG.Line = SVG.invent({
- // Initialize node
- create: 'line',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add class methods
- extend: {
- // Get array
- array: function () {
- return new SVG.PointArray([
- [ this.attr('x1'), this.attr('y1') ],
- [ this.attr('x2'), this.attr('y2') ]
- ])
- },
-
- // Overwrite native plot() method
- plot: function (x1, y1, x2, y2) {
- if (x1 == null) {
- return this.array()
- } else if (typeof y1 !== 'undefined') {
- x1 = { x1: x1, y1: y1, x2: x2, y2: y2 }
- } else {
- x1 = new SVG.PointArray(x1).toLine()
- }
-
- return this.attr(x1)
- },
-
- // Move by left top corner
- move: function (x, y) {
- return this.attr(this.array().move(x, y).toLine())
- },
-
- // Set element size to given width and height
- size: function (width, height) {
- var p = proportionalSize(this, width, height)
- return this.attr(this.array().size(p.width, p.height).toLine())
- }
- },
-
- // Add parent method
- construct: {
- // Create a line element
- line: function (x1, y1, x2, y2) {
- // make sure plot is called as a setter
- // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray
- return SVG.Line.prototype.plot.apply(
- this.put(new SVG.Line())
- , x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]
- )
- }
- }
-})
-
-/* global proportionalSize */
-
-SVG.Polyline = SVG.invent({
- // Initialize node
- create: 'polyline',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add parent method
- construct: {
- // Create a wrapped polyline element
- polyline: function (p) {
- // make sure plot is called as a setter
- return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray())
- }
- }
-})
-
-SVG.Polygon = SVG.invent({
- // Initialize node
- create: 'polygon',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add parent method
- construct: {
- // Create a wrapped polygon element
- polygon: function (p) {
- // make sure plot is called as a setter
- return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray())
- }
- }
-})
-
-// Add polygon-specific functions
-SVG.extend([SVG.Polyline, SVG.Polygon], {
- // Get array
- array: function () {
- return this._array || (this._array = new SVG.PointArray(this.attr('points')))
- },
-
- // Plot new path
- plot: function (p) {
- return (p == null) ? this.array()
- : this.clear().attr('points', typeof p === 'string' ? p
- : (this._array = new SVG.PointArray(p)))
- },
-
- // Clear array cache
- clear: function () {
- delete this._array
- return this
- },
-
- // Move by left top corner
- move: function (x, y) {
- return this.attr('points', this.array().move(x, y))
- },
-
- // Set element size to given width and height
- size: function (width, height) {
- var p = proportionalSize(this, width, height)
- return this.attr('points', this.array().size(p.width, p.height))
- }
-})
-
-// unify all point to point elements
-SVG.extend([SVG.Line, SVG.Polyline, SVG.Polygon], {
- // Define morphable array
- MorphArray: SVG.PointArray,
- // Move by left top corner over x-axis
- x: function (x) {
- return x == null ? this.bbox().x : this.move(x, this.bbox().y)
- },
- // Move by left top corner over y-axis
- y: function (y) {
- return y == null ? this.bbox().y : this.move(this.bbox().x, y)
- },
- // Set width of element
- width: function (width) {
- var b = this.bbox()
-
- return width == null ? b.width : this.size(width, b.height)
- },
- // Set height of element
- height: function (height) {
- var b = this.bbox()
-
- return height == null ? b.height : this.size(b.width, height)
- }
-})
-
-/* global proportionalSize */
-
-SVG.Path = SVG.invent({
- // Initialize node
- create: 'path',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add class methods
- extend: {
- // Define morphable array
- MorphArray: SVG.PathArray,
- // Get array
- array: function () {
- return this._array || (this._array = new SVG.PathArray(this.attr('d')))
- },
- // Plot new path
- plot: function (d) {
- return (d == null) ? this.array()
- : this.clear().attr('d', typeof d === 'string' ? d : (this._array = new SVG.PathArray(d)))
- },
- // Clear array cache
- clear: function () {
- delete this._array
- return this
- },
- // Move by left top corner
- move: function (x, y) {
- return this.attr('d', this.array().move(x, y))
- },
- // Move by left top corner over x-axis
- x: function (x) {
- return x == null ? this.bbox().x : this.move(x, this.bbox().y)
- },
- // Move by left top corner over y-axis
- y: function (y) {
- return y == null ? this.bbox().y : this.move(this.bbox().x, y)
- },
- // Set element size to given width and height
- size: function (width, height) {
- var p = proportionalSize(this, width, height)
- return this.attr('d', this.array().size(p.width, p.height))
- },
- // Set width of element
- width: function (width) {
- return width == null ? this.bbox().width : this.size(width, this.bbox().height)
- },
- // Set height of element
- height: function (height) {
- return height == null ? this.bbox().height : this.size(this.bbox().width, height)
- }
- },
-
- // Add parent method
- construct: {
- // Create a wrapped path element
- path: function (d) {
- // make sure plot is called as a setter
- return this.put(new SVG.Path()).plot(d || new SVG.PathArray())
- }
- }
-})
-
-SVG.Image = SVG.invent({
- // Initialize node
- create: 'image',
-
- // Inherit from
- inherit: SVG.Shape,
-
- // Add class methods
- extend: {
- // (re)load image
- load: function (url, callback) {
- if (!url) return this
-
- var img = new window.Image()
-
- SVG.on(img, 'load', function (e) {
- var p = this.parent(SVG.Pattern)
-
- // ensure image size
- if (this.width() === 0 && this.height() === 0) {
- this.size(img.width, img.height)
- }
-
- if (p instanceof SVG.Pattern) {
- // ensure pattern size if not set
- if (p.width() === 0 && p.height() === 0) {
- p.size(this.width(), this.height())
- }
- }
-
- if (typeof callback === 'function') {
- callback.call(this, {
- width: img.width,
- height: img.height,
- ratio: img.width / img.height,
- url: url
- })
- }
- }, this)
-
- SVG.on(img, 'load error', function () {
- // dont forget to unbind memory leaking events
- SVG.off(img)
- })
-
- return this.attr('href', (img.src = url), SVG.xlink)
- }
- },
-
- // Add parent method
- construct: {
- // create image element, load image and set its size
- image: function (source, callback) {
- return this.put(new SVG.Image()).size(0, 0).load(source, callback)
- }
- }
-})
-
-SVG.Text = SVG.invent({
- // Initialize node
- create: function (node) {
- SVG.Element.call(this, node || SVG.create('text'))
- this.dom.leading = new SVG.Number(1.3) // store leading value for rebuilding
- this._rebuild = true // enable automatic updating of dy values
- this._build = false // disable build mode for adding multiple lines
-
- // set default font
- this.attr('font-family', SVG.defaults.attrs['font-family'])
- },
-
- // Inherit from
- inherit: SVG.Parent,
-
- // Add class methods
- extend: {
- // Move over x-axis
- x: function (x) {
- // act as getter
- if (x == null) {
- return this.attr('x')
- }
-
- return this.attr('x', x)
- },
- // Move over y-axis
- y: function (y) {
- var oy = this.attr('y')
- var o = typeof oy === 'number' ? oy - this.bbox().y : 0
-
- // act as getter
- if (y == null) {
- return typeof oy === 'number' ? oy - o : oy
- }
-
- return this.attr('y', typeof y === 'number' ? y + o : y)
- },
- // Move center over x-axis
- cx: function (x) {
- return x == null ? this.bbox().cx : this.x(x - this.bbox().width / 2)
- },
- // Move center over y-axis
- cy: function (y) {
- return y == null ? this.bbox().cy : this.y(y - this.bbox().height / 2)
- },
- // Set the text content
- text: function (text) {
- // act as getter
- if (text === undefined) {
- var children = this.node.childNodes
- var firstLine = 0
- text = ''
-
- for (var i = 0, len = children.length; i < len; ++i) {
- // skip textPaths - they are no lines
- if (children[i].nodeName === 'textPath') {
- if (i === 0) firstLine = 1
- continue
- }
-
- // add newline if its not the first child and newLined is set to true
- if (i !== firstLine && children[i].nodeType !== 3 && SVG.adopt(children[i]).dom.newLined === true) {
- text += '\n'
- }
-
- // add content of this node
- text += children[i].textContent
- }
-
- return text
- }
-
- // remove existing content
- this.clear().build(true)
-
- if (typeof text === 'function') {
- // call block
- text.call(this, this)
- } else {
- // store text and make sure text is not blank
- text = text.split('\n')
-
- // build new lines
- for (var j = 0, jl = text.length; j < jl; j++) {
- this.tspan(text[j]).newLine()
- }
- }
-
- // disable build mode and rebuild lines
- return this.build(false).rebuild()
- },
- // Set / get leading
- leading: function (value) {
- // act as getter
- if (value == null) {
- return this.dom.leading
- }
-
- // act as setter
- this.dom.leading = new SVG.Number(value)
-
- return this.rebuild()
- },
- // Rebuild appearance type
- rebuild: function (rebuild) {
- // store new rebuild flag if given
- if (typeof rebuild === 'boolean') {
- this._rebuild = rebuild
- }
-
- // define position of all lines
- if (this._rebuild) {
- var self = this
- var blankLineOffset = 0
- var dy = this.dom.leading * new SVG.Number(this.attr('font-size'))
-
- this.each(function () {
- if (this.dom.newLined) {
- this.attr('x', self.attr('x'))
-
- if (this.text() === '\n') {
- blankLineOffset += dy
- } else {
- this.attr('dy', dy + blankLineOffset)
- blankLineOffset = 0
- }
- }
- })
-
- this.fire('rebuild')
- }
-
- return this
- },
- // Enable / disable build mode
- build: function (build) {
- this._build = !!build
- return this
- },
- // overwrite method from parent to set data properly
- setData: function (o) {
- this.dom = o
- this.dom.leading = new SVG.Number(o.leading || 1.3)
- return this
- }
- },
-
- // Add parent method
- construct: {
- // Create text element
- text: function (text) {
- return this.put(new SVG.Text()).text(text)
- },
- // Create plain text element
- plain: function (text) {
- return this.put(new SVG.Text()).plain(text)
- }
- }
-
-})
-
-SVG.Tspan = SVG.invent({
- // Initialize node
- create: 'tspan',
-
- // Inherit from
- inherit: SVG.Parent,
-
- // Add class methods
- extend: {
- // Set text content
- text: function (text) {
- if (text == null) return this.node.textContent + (this.dom.newLined ? '\n' : '')
-
- typeof text === 'function' ? text.call(this, this) : this.plain(text)
-
- return this
- },
- // Shortcut dx
- dx: function (dx) {
- return this.attr('dx', dx)
- },
- // Shortcut dy
- dy: function (dy) {
- return this.attr('dy', dy)
- },
- // Create new line
- newLine: function () {
- // fetch text parent
- var t = this.parent(SVG.Text)
-
- // mark new line
- this.dom.newLined = true
-
- // apply new position
- return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x())
- }
- }
-})
-
-SVG.extend([SVG.Text, SVG.Tspan], {
- // Create plain text node
- plain: function (text) {
- // clear if build mode is disabled
- if (this._build === false) {
- this.clear()
- }
-
- // create text node
- this.node.appendChild(document.createTextNode(text))
-
- return this
- },
- // Create a tspan
- tspan: function (text) {
- var tspan = new SVG.Tspan()
-
- // clear if build mode is disabled
- if (!this._build) {
- this.clear()
- }
-
- // add new tspan
- this.node.appendChild(tspan.node)
-
- return tspan.text(text)
- },
- // FIXME: Does this also work for textpath?
- // Get length of text element
- length: function () {
- return this.node.getComputedTextLength()
- }
-})
-
-SVG.TextPath = SVG.invent({
- // Initialize node
- create: 'textPath',
-
- // Inherit from
- inherit: SVG.Text,
-
- // Define parent class
- parent: SVG.Parent,
-
- // Add parent method
- extend: {
- MorphArray: SVG.PathArray,
- // return the array of the path track element
- array: function () {
- var track = this.track()
-
- return track ? track.array() : null
- },
- // Plot path if any
- plot: function (d) {
- var track = this.track()
- var pathArray = null
-
- if (track) {
- pathArray = track.plot(d)
- }
-
- return (d == null) ? pathArray : this
- },
- // Get the path element
- track: function () {
- return this.reference('href')
- }
- },
- construct: {
- textPath: function (text, path) {
- return this.defs().path(path).text(text).addTo(this)
- }
- }
-})
-
-SVG.extend([SVG.Text], {
- // Create path for text to run on
- path: function (track) {
- var path = new SVG.TextPath()
-
- // if d is a path, reuse it
- if (!(track instanceof SVG.Path)) {
- // create path element
- track = this.doc().defs().path(track)
- }
-
- // link textPath to path and add content
- path.attr('href', '#' + track, SVG.xlink)
-
- // add textPath element as child node and return textPath
- return this.put(path)
- },
- // Todo: make this plural?
- // Get the textPath children
- textPath: function () {
- return this.select('textPath')
- }
-})
-
-SVG.extend([SVG.Path], {
- // creates a textPath from this path
- text: function (text) {
- if (text instanceof SVG.Text) {
- var txt = text.text()
- return text.clear().path(this).text(txt)
- }
- return this.parent().put(new SVG.Text()).path(this).text(text)
- }
- // TODO: Maybe add `targets` to get all textPaths associated with this path
-})
-
-SVG.A = SVG.invent({
- // Initialize node
- create: 'a',
-
- // Inherit from
- inherit: SVG.Container,
-
- // Add class methods
- extend: {
- // Link url
- to: function (url) {
- return this.attr('href', url, SVG.xlink)
- },
- // Link target attribute
- target: function (target) {
- return this.attr('target', target)
- }
- },
-
- // Add parent method
- construct: {
- // Create a hyperlink element
- link: function (url) {
- return this.put(new SVG.A()).to(url)
- }
- }
-})
-
-SVG.extend(SVG.Element, {
- // Create a hyperlink element
- linkTo: function (url) {
- var link = new SVG.A()
-
- if (typeof url === 'function') { url.call(link, link) } else {
- link.to(url)
- }
-
- return this.parent().put(link).put(this)
- }
-
-})
-
-SVG.Marker = SVG.invent({
- // Initialize node
- create: 'marker',
-
- // Inherit from
- inherit: SVG.Container,
-
- // Add class methods
- extend: {
- // Set width of element
- width: function (width) {
- return this.attr('markerWidth', width)
- },
- // Set height of element
- height: function (height) {
- return this.attr('markerHeight', height)
- },
- // Set marker refX and refY
- ref: function (x, y) {
- return this.attr('refX', x).attr('refY', y)
- },
- // Update marker
- update: function (block) {
- // remove all content
- this.clear()
-
- // invoke passed block
- if (typeof block === 'function') { block.call(this, this) }
-
- return this
- },
- // Return the fill id
- toString: function () {
- return 'url(#' + this.id() + ')'
- }
- },
-
- // Add parent method
- construct: {
- marker: function (width, height, block) {
- // Create marker element in defs
- return this.defs().marker(width, height, block)
- }
- }
-
-})
-
-SVG.extend(SVG.Defs, {
- // Create marker
- marker: function (width, height, block) {
- // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto
- return this.put(new SVG.Marker())
- .size(width, height)
- .ref(width / 2, height / 2)
- .viewbox(0, 0, width, height)
- .attr('orient', 'auto')
- .update(block)
- }
-
-})
-
-SVG.extend([SVG.Line, SVG.Polyline, SVG.Polygon, SVG.Path], {
- // Create and attach markers
- marker: function (marker, width, height, block) {
- var attr = ['marker']
-
- // Build attribute name
- if (marker !== 'all') attr.push(marker)
- attr = attr.join('-')
-
- // Set marker attribute
- marker = arguments[1] instanceof SVG.Marker
- ? arguments[1]
- : this.doc().marker(width, height, block)
-
- return this.attr(attr, marker)
- }
-})
-
-// // Define list of available attributes for stroke and fill
-// var sugar = {
-// stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],
-// fill: ['color', 'opacity', 'rule'],
-// prefix: function (t, a) {
-// return a === 'color' ? t : t + '-' + a
-// }
-// }
-//
-// // Add sugar for fill and stroke
-// ;['fill', 'stroke'].forEach(function (m) {
-// var extension = {}
-// var i
-//
-// extension[m] = function (o) {
-// if (typeof o === 'undefined') {
-// return this
-// }
-// if (typeof o === 'string' || SVG.Color.isRgb(o) || (o && typeof o.fill === 'function')) {
-// this.attr(m, o)
-// } else {
-// // set all attributes from sugar.fill and sugar.stroke list
-// for (i = sugar[m].length - 1; i >= 0; i--) {
-// if (o[sugar[m][i]] != null) {
-// this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]])
-// }
-// }
-// }
-//
-// return this
-// }
-//
-// SVG.extend([SVG.Element, SVG.Timeline], extension)
-// })
-//
-// SVG.extend([SVG.Element, SVG.Timeline], {
-// // Let the user set the matrix directly
-// matrix: function (mat, b, c, d, e, f) {
-// // Act as a getter
-// if (mat == null) {
-// return new SVG.Matrix(this)
-// }
-//
-// // Act as a setter, the user can pass a matrix or a set of numbers
-// return this.attr('transform', new SVG.Matrix(mat, b, c, d, e, f))
-// },
-//
-// // Map rotation to transform
-// rotate: function (angle, cx, cy) {
-// return this.transform({rotate: angle, ox: cx, oy: cy}, true)
-// },
-//
-// // Map skew to transform
-// skew: function (x, y, cx, cy) {
-// return arguments.length === 1 || arguments.length === 3
-// ? this.transform({skew: x, ox: y, oy: cx}, true)
-// : this.transform({skew: [x, y], ox: cx, oy: cy}, true)
-// },
-//
-// shear: function (lam, cx, cy) {
-// return this.transform({shear: lam, ox: cx, oy: cy}, true)
-// },
-//
-// // Map scale to transform
-// scale: function (x, y, cx, cy) {
-// return arguments.length === 1 || arguments.length === 3
-// ? this.transform({ scale: x, ox: y, oy: cx }, true)
-// : this.transform({ scale: [x, y], ox: cx, oy: cy }, true)
-// },
-//
-// // Map translate to transform
-// translate: function (x, y) {
-// return this.transform({ translate: [x, y] }, true)
-// },
-//
-// // Map relative translations to transform
-// relative: function (x, y) {
-// return this.transform({ relative: [x, y] }, true)
-// },
-//
-// // Map flip to transform
-// flip: function (direction, around) {
-// var directionString = typeof direction === 'string' ? direction
-// : isFinite(direction) ? 'both'
-// : 'both'
-// var origin = (direction === 'both' && isFinite(around)) ? [around, around]
-// : (direction === 'x') ? [around, 0]
-// : (direction === 'y') ? [0, around]
-// : isFinite(direction) ? [direction, direction]
-// : [0, 0]
-// this.transform({flip: directionString, origin: origin}, true)
-// },
-//
-// // Opacity
-// opacity: function (value) {
-// return this.attr('opacity', value)
-// },
-//
-// // Relative move over x axis
-// dx: function (x) {
-// return this.x(new SVG.Number(x).plus(this instanceof SVG.Timeline ? 0 : this.x()), true)
-// },
-//
-// // Relative move over y axis
-// dy: function (y) {
-// return this.y(new SVG.Number(y).plus(this instanceof SVG.Timeline ? 0 : this.y()), true)
-// },
-//
-// // Relative move over x and y axes
-// dmove: function (x, y) {
-// return this.dx(x).dy(y)
-// }
-// })
-//
-// SVG.extend([SVG.Rect, SVG.Ellipse, SVG.Circle, SVG.Gradient, SVG.Timeline], {
-// // Add x and y radius
-// radius: function (x, y) {
-// var type = (this._target || this).type
-// return type === 'radialGradient' || type === 'radialGradient'
-// ? this.attr('r', new SVG.Number(x))
-// : this.rx(x).ry(y == null ? x : y)
-// }
-// })
-//
-// SVG.extend(SVG.Path, {
-// // Get path length
-// length: function () {
-// return this.node.getTotalLength()
-// },
-// // Get point at length
-// pointAt: function (length) {
-// return new SVG.Point(this.node.getPointAtLength(length))
-// }
-// })
-//
-// SVG.extend([SVG.Parent, SVG.Text, SVG.Tspan, SVG.Timeline], {
-// // Set font
-// font: function (a, v) {
-// if (typeof a === 'object') {
-// for (v in a) this.font(v, a[v])
-// }
-//
-// return a === 'leading'
-// ? this.leading(v)
-// : a === 'anchor'
-// ? this.attr('text-anchor', v)
-// : a === 'size' || a === 'family' || a === 'weight' || a === 'stretch' || a === 'variant' || a === 'style'
-// ? this.attr('font-' + a, v)
-// : this.attr(a, v)
-// }
-// })
-
-
-SVG.extend(SVG.Element, {
- // Store data values on svg nodes
- data: function (a, v, r) {
- if (typeof a === 'object') {
- for (v in a) {
- this.data(v, a[v])
- }
- } else if (arguments.length < 2) {
- try {
- return JSON.parse(this.attr('data-' + a))
- } catch (e) {
- return this.attr('data-' + a)
- }
- } else {
- this.attr('data-' + a,
- v === null ? null
- : r === true || typeof v === 'string' || typeof v === 'number' ? v
- : JSON.stringify(v)
- )
- }
-
- return this
- }
-})
-
-
-SVG.extend(SVG.Element, {
- // Remember arbitrary data
- remember: function (k, v) {
- // remember every item in an object individually
- if (typeof arguments[0] === 'object') {
- for (var key in k) {
- this.remember(key, k[key])
- }
- } else if (arguments.length === 1) {
- // retrieve memory
- return this.memory()[k]
- } else {
- // store memory
- this.memory()[k] = v
- }
-
- return this
- },
-
- // Erase a given memory
- forget: function () {
- if (arguments.length === 0) {
- this._memory = {}
- } else {
- for (var i = arguments.length - 1; i >= 0; i--) {
- delete this.memory()[arguments[i]]
- }
- }
- return this
- },
-
- // Initialize or return local memory object
- memory: function () {
- return this._memory || (this._memory = {})
- }
-})
-
-/* global idFromReference */
-
-// Method for getting an element by id
-SVG.get = function (id) {
- var node = document.getElementById(idFromReference(id) || id)
- return SVG.adopt(node)
-}
-
-// Select elements by query string
-SVG.select = function (query, parent) {
- return SVG.utils.map((parent || document).querySelectorAll(query), function (node) {
- return SVG.adopt(node)
- })
-}
-
-SVG.$$ = function (query, parent) {
- return SVG.utils.map((parent || document).querySelectorAll(query), function (node) {
- return SVG.adopt(node)
- })
-}
-
-SVG.$ = function (query, parent) {
- return SVG.adopt((parent || document).querySelector(query))
-}
-
-SVG.extend(SVG.Parent, {
- // Scoped select method
- select: function (query) {
- return SVG.select(query, this.node)
- }
-})
-
-/* eslint no-unused-vars: 0 */
-
-function createElement (element, makeNested) {
- if (element instanceof SVG.Element) return element
-
- if (typeof element === 'object') {
- return SVG.adopt(element)
- }
-
- if (element == null) {
- return new SVG.Doc()
- }
-
- if (typeof element === 'string' && element.charAt(0) !== '<') {
- return SVG.adopt(document.querySelector(element))
- }
-
- var node = SVG.create('svg')
- node.innerHTML = element
-
- element = SVG.adopt(node.firstElementChild)
-
- return element
-}
-
-function isNulledBox (box) {
- return !box.w && !box.h && !box.x && !box.y
-}
-
-function domContains (node) {
- return (document.documentElement.contains || function (node) {
- // This is IE - it does not support contains() for top-level SVGs
- while (node.parentNode) {
- node = node.parentNode
- }
- return node === document
- }).call(document.documentElement, node)
-}
-
-function pathRegReplace (a, b, c, d) {
- return c + d.replace(SVG.regex.dots, ' .')
-}
-
-// creates deep clone of array
-function arrayClone (arr) {
- var clone = arr.slice(0)
- for (var i = clone.length; i--;) {
- if (Array.isArray(clone[i])) {
- clone[i] = arrayClone(clone[i])
- }
- }
- return clone
-}
-
-// tests if a given element is instance of an object
-function is (el, obj) {
- return el instanceof obj
-}
-
-// tests if a given selector matches an element
-function matches (el, selector) {
- return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector)
-}
-
-// Convert dash-separated-string to camelCase
-function camelCase (s) {
- return s.toLowerCase().replace(/-(.)/g, function (m, g) {
- return g.toUpperCase()
- })
-}
-
-// Capitalize first letter of a string
-function capitalize (s) {
- return s.charAt(0).toUpperCase() + s.slice(1)
-}
-
-// Ensure to six-based hex
-function fullHex (hex) {
- return hex.length === 4
- ? [ '#',
- hex.substring(1, 2), hex.substring(1, 2),
- hex.substring(2, 3), hex.substring(2, 3),
- hex.substring(3, 4), hex.substring(3, 4)
- ].join('')
- : hex
-}
-
-// Component to hex value
-function compToHex (comp) {
- var hex = comp.toString(16)
- return hex.length === 1 ? '0' + hex : hex
-}
-
-// Calculate proportional width and height values when necessary
-function proportionalSize (element, width, height) {
- if (width == null || height == null) {
- var box = element.bbox()
-
- if (width == null) {
- width = box.width / box.height * height
- } else if (height == null) {
- height = box.height / box.width * width
- }
- }
-
- return {
- width: width,
- height: height
- }
-}
-
-// Map matrix array to object
-function arrayToMatrix (a) {
- return { a: a[0], b: a[1], c: a[2], d: a[3], e: a[4], f: a[5] }
-}
-
-// Add centre point to transform object
-function ensureCentre (o, target) {
- o.cx = o.cx == null ? target.bbox().cx : o.cx
- o.cy = o.cy == null ? target.bbox().cy : o.cy
-}
-
-// PathArray Helpers
-function arrayToString (a) {
- for (var i = 0, il = a.length, s = ''; i < il; i++) {
- s += a[i][0]
-
- if (a[i][1] != null) {
- s += a[i][1]
-
- if (a[i][2] != null) {
- s += ' '
- s += a[i][2]
-
- if (a[i][3] != null) {
- s += ' '
- s += a[i][3]
- s += ' '
- s += a[i][4]
-
- if (a[i][5] != null) {
- s += ' '
- s += a[i][5]
- s += ' '
- s += a[i][6]
-
- if (a[i][7] != null) {
- s += ' '
- s += a[i][7]
- }
- }
- }
- }
- }
- }
-
- return s + ' '
-}
-
-// Deep new id assignment
-function assignNewId (node) {
- // do the same for SVG child nodes as well
- for (var i = node.children.length - 1; i >= 0; i--) {
- assignNewId(node.children[i])
- }
-
- if (node.id) {
- return SVG.adopt(node).id(SVG.eid(node.nodeName))
- }
-
- return SVG.adopt(node)
-}
-
-// Add more bounding box properties
-function fullBox (b) {
- if (b.x == null) {
- b.x = 0
- b.y = 0
- b.width = 0
- b.height = 0
- }
-
- b.w = b.width
- b.h = b.height
- b.x2 = b.x + b.width
- b.y2 = b.y + b.height
- b.cx = b.x + b.width / 2
- b.cy = b.y + b.height / 2
-
- return b
-}
-
-// Get id from reference string
-function idFromReference (url) {
- var m = (url || '').toString().match(SVG.regex.reference)
-
- if (m) return m[1]
-}
-
-// Create matrix array for looping
-var abcdef = 'abcdef'.split('')
-
-function closeEnough (a, b, threshold) {
- return Math.abs(b - a) < (threshold || 1e-6)
-}
-
-// TODO: Refactor this to a static function of matrix.js
-function formatTransforms (o) {
- // Get all of the parameters required to form the matrix
- var flipBoth = o.flip === 'both' || o.flip === true
- var flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1
- var flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1
- var skewX = o.skew && o.skew.length ? o.skew[0]
- : isFinite(o.skew) ? o.skew
- : isFinite(o.skewX) ? o.skewX
- : 0
- var skewY = o.skew && o.skew.length ? o.skew[1]
- : isFinite(o.skew) ? o.skew
- : isFinite(o.skewY) ? o.skewY
- : 0
- var scaleX = o.scale && o.scale.length ? o.scale[0] * flipX
- : isFinite(o.scale) ? o.scale * flipX
- : isFinite(o.scaleX) ? o.scaleX * flipX
- : flipX
- var scaleY = o.scale && o.scale.length ? o.scale[1] * flipY
- : isFinite(o.scale) ? o.scale * flipY
- : isFinite(o.scaleY) ? o.scaleY * flipY
- : flipY
- var shear = o.shear || 0
- var theta = o.rotate || o.theta || 0
- var origin = new SVG.Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY)
- var ox = origin.x
- var oy = origin.y
- var position = new SVG.Point(o.position || o.px || o.positionX, o.py || o.positionY)
- var px = position.x
- var py = position.y
- var translate = new SVG.Point(o.translate || o.tx || o.translateX, o.ty || o.translateY)
- var tx = translate.x
- var ty = translate.y
- var relative = new SVG.Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY)
- var rx = relative.x
- var ry = relative.y
-
- // Populate all of the values
- return {
- scaleX: scaleX,
- scaleY: scaleY,
- skewX: skewX,
- skewY: skewY,
- shear: shear,
- theta: theta,
- rx: rx,
- ry: ry,
- tx: tx,
- ty: ty,
- ox: ox,
- oy: oy,
- px: px,
- py: py
- }
-}
-
-function getOrigin (o, element) {
- // Allow origin or around as the names
- origin = o.around == null ? o.origin : o.around
-
- // Allow the user to pass a string to rotate around a given point
- if ( typeof origin === 'string' || origin == null ) {
- // Get the bounding box of the element with no transformations applied
- const string = (origin || 'center').toLowerCase().trim()
- const { height, width, x, y } = element.bbox()
-
- // Set the bounds eg : "bottom-left", "Top right", "middle" etc...
- const ox = o.ox || string.includes('left') ? x
- : string.includes('right') ? x + width
- : x + width / 2
- const oy = o.oy || string.includes('top') ? y
- : string.includes('bottom') ? y + height
- : y + height / 2
- return [ox, oy]
- }
-
- // Return the origin as it is if it wasn't a string
- return origin
-}
-
-/* globals fullBox, domContains, isNulledBox, Exception */
-
-SVG.Box = SVG.invent({
- create: function (source) {
- var base = [0, 0, 0, 0]
- source = typeof source === 'string' ? source.split(SVG.regex.delimiter).map(parseFloat)
- : Array.isArray(source) ? source
- : typeof source === 'object' ? [source.left != null ? source.left
- : source.x, source.top != null ? source.top : source.y, source.width, source.height]
- : arguments.length === 4 ? [].slice.call(arguments)
- : base
-
- this.x = source[0]
- this.y = source[1]
- this.width = source[2]
- this.height = source[3]
-
- // add center, right, bottom...
- fullBox(this)
- },
- extend: {
- // Merge rect box with another, return a new instance
- merge: function (box) {
- var x = Math.min(this.x, box.x)
- var y = Math.min(this.y, box.y)
-
- return new SVG.Box(
- x, y,
- Math.max(this.x + this.width, box.x + box.width) - x,
- Math.max(this.y + this.height, box.y + box.height) - y
- )
- },
-
- transform: function (m) {
- var xMin = Infinity
- var xMax = -Infinity
- var yMin = Infinity
- var yMax = -Infinity
-
- var pts = [
- new SVG.Point(this.x, this.y),
- new SVG.Point(this.x2, this.y),
- new SVG.Point(this.x, this.y2),
- new SVG.Point(this.x2, this.y2)
- ]
-
- pts.forEach(function (p) {
- p = p.transform(m)
- xMin = Math.min(xMin, p.x)
- xMax = Math.max(xMax, p.x)
- yMin = Math.min(yMin, p.y)
- yMax = Math.max(yMax, p.y)
- })
-
- return new SVG.Box(
- xMin, yMin,
- xMax - xMin,
- yMax - yMin
- )
- },
-
- addOffset: function () {
- // offset by window scroll position, because getBoundingClientRect changes when window is scrolled
- this.x += window.pageXOffset
- this.y += window.pageYOffset
- return this
- },
- toString: function () {
- return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height
- },
- toArray: function () {
- return [this.x, this.y, this.width, this.height]
- },
- morph: function (x, y, width, height) {
- this.destination = new SVG.Box(x, y, width, height)
- return this
- },
-
- at: function (pos) {
- if (!this.destination) return this
-
- return new SVG.Box(
- this.x + (this.destination.x - this.x) * pos
- , this.y + (this.destination.y - this.y) * pos
- , this.width + (this.destination.width - this.width) * pos
- , this.height + (this.destination.height - this.height) * pos
- )
- }
- },
-
- // Define Parent
- parent: SVG.Element,
-
- // Constructor
- construct: {
- // Get bounding box
- bbox: function () {
- var box
-
- try {
- // find native bbox
- box = this.node.getBBox()
-
- if (isNulledBox(box) && !domContains(this.node)) {
- throw new Exception('Element not in the dom')
- }
- } catch (e) {
- try {
- var clone = this.clone(SVG.parser().svg).show()
- box = clone.node.getBBox()
- clone.remove()
- } catch (e) {
- console.warn('Getting a bounding box of this element is not possible')
- }
- }
-
- return new SVG.Box(box)
- },
-
- rbox: function (el) {
- // IE11 throws an error when element not in dom
- try {
- var box = new SVG.Box(this.node.getBoundingClientRect())
- if (el) return box.transform(el.screenCTM().inverse())
- return box.addOffset()
- } catch (e) {
- return new SVG.Box()
- }
- }
- }
-})
-
-SVG.extend([SVG.Doc, SVG.Symbol, SVG.Image, SVG.Pattern, SVG.Marker, SVG.ForeignObject, SVG.View], {
- viewbox: function (x, y, width, height) {
- // act as getter
- if (x == null) return new SVG.Box(this.attr('viewBox'))
-
- // act as setter
- return this.attr('viewBox', new SVG.Box(x, y, width, height))
- }
-})
-
-
-SVG.parser = function () {
- var b
-
- if (!SVG.parser.nodes.svg.node.parentNode) {
- b = document.body || document.documentElement
- SVG.parser.nodes.svg.addTo(b)
- }
-
- return SVG.parser.nodes
-}
-
-SVG.parser.nodes = {
- svg: SVG().size(2, 0).css({
- opacity: 0,
- position: 'absolute',
- left: '-100%',
- top: '-100%',
- overflow: 'hidden'
- })
-}
-
-SVG.parser.nodes.path = SVG.parser.nodes.svg.path().node
+\r
+(function(root, factory) {\r
+ /* istanbul ignore next */\r
+ if (typeof define === 'function' && define.amd) {\r
+ define(function(){\r
+ return factory(root, root.document)\r
+ })\r
+ } else if (typeof exports === 'object') {\r
+ module.exports = root.document ? factory(root, root.document) : function(w){ return factory(w, w.document) }\r
+ } else {\r
+ root.SVG = factory(root, root.document)\r
+ }\r
+}(typeof window !== "undefined" ? window : this, function(window, document) {\r
+\r
+// Check that our browser supports svg\r
+var supported = !! document.createElementNS &&\r
+ !! document.createElementNS('http://www.w3.org/2000/svg','svg').createSVGRect\r
+\r
+// If we don't support svg, just exit without doing anything\r
+if (!supported)\r
+ return {supported: false}\r
+\r
+// Otherwise, the library will be here\r
+/* global createElement, capitalize */\r
+/* eslint-disable new-cap */\r
+\r
+// The main wrapping element\r
+var SVG = this.SVG = function (element) {\r
+ if (SVG.supported) {\r
+ element = createElement(element)\r
+ return element\r
+ }\r
+}\r
+\r
+// Svg must be supported if we reached this stage\r
+SVG.supported = true\r
+\r
+// Default namespaces\r
+SVG.ns = 'http://www.w3.org/2000/svg'\r
+SVG.xmlns = 'http://www.w3.org/2000/xmlns/'\r
+SVG.xlink = 'http://www.w3.org/1999/xlink'\r
+SVG.svgjs = 'http://svgjs.com/svgjs'\r
+\r
+// Element id sequence\r
+SVG.did = 1000\r
+\r
+// Get next named element id\r
+SVG.eid = function (name) {\r
+ return 'Svgjs' + capitalize(name) + (SVG.did++)\r
+}\r
+\r
+// Method for element creation\r
+SVG.create = function (name) {\r
+ // create element\r
+ return document.createElementNS(this.ns, name)\r
+}\r
+\r
+// Method for extending objects\r
+SVG.extend = function (modules, methods) {\r
+ var key, i\r
+\r
+ modules = Array.isArray(modules) ? modules : [modules]\r
+\r
+ for (i = modules.length - 1; i >= 0; i--) {\r
+ if (modules[i]) {\r
+ for (key in methods) {\r
+ modules[i].prototype[key] = methods[key]\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+// Invent new element\r
+SVG.invent = function (config) {\r
+ // Create element initializer\r
+ var initializer = typeof config.create === 'function' ? config.create\r
+ : function (node) {\r
+ config.inherit.call(this, node || SVG.create(config.create))\r
+ }\r
+\r
+ // Inherit prototype\r
+ if (config.inherit) {\r
+ initializer.prototype = new config.inherit()\r
+ initializer.prototype.constructor = initializer\r
+ }\r
+\r
+ // Extend with methods\r
+ if (config.extend) {\r
+ SVG.extend(initializer, config.extend)\r
+ }\r
+\r
+ // Attach construct method to parent\r
+ if (config.construct) { SVG.extend(config.parent || SVG.Container, config.construct) }\r
+\r
+ return initializer\r
+}\r
+\r
+// Adopt existing svg elements\r
+SVG.adopt = function (node) {\r
+ // check for presence of node\r
+ if (!node) return null\r
+\r
+ // make sure a node isn't already adopted\r
+ if (node.instance instanceof SVG.Element) return node.instance\r
+\r
+ if (!(node instanceof window.SVGElement)) {\r
+ return new SVG.HtmlNode(node)\r
+ }\r
+\r
+ // initialize variables\r
+ var element\r
+\r
+ // adopt with element-specific settings\r
+ if (node.nodeName === 'svg') {\r
+ element = new SVG.Doc(node)\r
+ } else if (node.nodeName === 'linearGradient' || node.nodeName === 'radialGradient') {\r
+ element = new SVG.Gradient(node)\r
+ } else if (SVG[capitalize(node.nodeName)]) {\r
+ element = new SVG[capitalize(node.nodeName)](node)\r
+ } else {\r
+ element = new SVG.Parent(node)\r
+ }\r
+\r
+ return element\r
+}\r
+
+// Storage for regular expressions\r
+SVG.regex = {\r
+ // Parse unit value\r
+ numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,\r
+\r
+ // Parse hex value\r
+ hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,\r
+\r
+ // Parse rgb value\r
+ rgb: /rgb\((\d+),(\d+),(\d+)\)/,\r
+\r
+ // Parse reference id\r
+ reference: /#([a-z0-9\-_]+)/i,\r
+\r
+ // splits a transformation chain\r
+ transforms: /\)\s*,?\s*/,\r
+\r
+ // Whitespace\r
+ whitespace: /\s/g,\r
+\r
+ // Test hex value\r
+ isHex: /^#[a-f0-9]{3,6}$/i,\r
+\r
+ // Test rgb value\r
+ isRgb: /^rgb\(/,\r
+\r
+ // Test css declaration\r
+ isCss: /[^:]+:[^;]+;?/,\r
+\r
+ // Test for blank string\r
+ isBlank: /^(\s+)?$/,\r
+\r
+ // Test for numeric string\r
+ isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,\r
+\r
+ // Test for percent value\r
+ isPercent: /^-?[\d.]+%$/,\r
+\r
+ // Test for image url\r
+ isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,\r
+\r
+ // split at whitespace and comma\r
+ delimiter: /[\s,]+/,\r
+\r
+ // The following regex are used to parse the d attribute of a path\r
+\r
+ // Matches all hyphens which are not after an exponent\r
+ hyphen: /([^e])-/gi,\r
+\r
+ // Replaces and tests for all path letters\r
+ pathLetters: /[MLHVCSQTAZ]/gi,\r
+\r
+ // yes we need this one, too\r
+ isPathLetter: /[MLHVCSQTAZ]/i,\r
+\r
+ // matches 0.154.23.45\r
+ numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,\r
+\r
+ // matches .\r
+ dots: /\./g\r
+}\r
+
+\r
+SVG.utils = {\r
+ // Map function\r
+ map: function (array, block) {\r
+ var i\r
+ var il = array.length\r
+ var result = []\r
+\r
+ for (i = 0; i < il; i++) {\r
+ result.push(block(array[i]))\r
+ }\r
+\r
+ return result\r
+ },\r
+\r
+ // Filter function\r
+ filter: function (array, block) {\r
+ var i\r
+ var il = array.length\r
+ var result = []\r
+\r
+ for (i = 0; i < il; i++) {\r
+ if (block(array[i])) { result.push(array[i]) }\r
+ }\r
+\r
+ return result\r
+ },\r
+\r
+ // Degrees to radians\r
+ radians: function (d) {\r
+ return d % 360 * Math.PI / 180\r
+ },\r
+\r
+ // Radians to degrees\r
+ degrees: function (r) {\r
+ return r * 180 / Math.PI % 360\r
+ },\r
+\r
+ filterSVGElements: function (nodes) {\r
+ return this.filter(nodes, function (el) { return el instanceof window.SVGElement })\r
+ }\r
+\r
+}\r
+
+\r
+SVG.void = function () {}\r
+\r
+SVG.defaults = {\r
+\r
+ // Default animation values\r
+ timeline: {\r
+ duration: 400,\r
+ ease: '>',\r
+ delay: 0\r
+ },\r
+\r
+ // Default attribute values\r
+ attrs: {\r
+\r
+ // fill and stroke\r
+ 'fill-opacity': 1,\r
+ 'stroke-opacity': 1,\r
+ 'stroke-width': 0,\r
+ 'stroke-linejoin': 'miter',\r
+ 'stroke-linecap': 'butt',\r
+ fill: '#000000',\r
+ stroke: '#000000',\r
+ opacity: 1,\r
+\r
+ // position\r
+ x: 0,\r
+ y: 0,\r
+ cx: 0,\r
+ cy: 0,\r
+\r
+ // size\r
+ width: 0,\r
+ height: 0,\r
+\r
+ // radius\r
+ r: 0,\r
+ rx: 0,\r
+ ry: 0,\r
+\r
+ // gradient\r
+ offset: 0,\r
+ 'stop-opacity': 1,\r
+ 'stop-color': '#000000',\r
+\r
+ // text\r
+ 'font-size': 16,\r
+ 'font-family': 'Helvetica, Arial, sans-serif',\r
+ 'text-anchor': 'start'\r
+ }\r
+}\r
+
+SVG.Queue = SVG.invent({\r
+ create: function () {\r
+ this._first = null\r
+ this._last = null\r
+ },\r
+\r
+ extend: {\r
+ push: function (value) {\r
+ // An item stores an id and the provided value\r
+ var item = value.next ? value : { value: value, next: null, prev: null }\r
+\r
+ // Deal with the queue being empty or populated\r
+ if (this._last) {\r
+ item.prev = this._last\r
+ this._last.next = item\r
+ this._last = item\r
+ } else {\r
+ this._last = item\r
+ this._first = item\r
+ }\r
+\r
+ // Update the length and return the current item\r
+ return item\r
+ },\r
+\r
+ shift: function () {\r
+ // Check if we have a value\r
+ var remove = this._first\r
+ if (!remove) return null\r
+\r
+ // If we do, remove it and relink things\r
+ this._first = remove.next\r
+ if (this._first) this._first.prev = null\r
+ this._last = this._first ? this._last : null\r
+ return remove.value\r
+ },\r
+\r
+ // Shows us the first item in the list\r
+ first: function () {\r
+ return this._first && this._first.value\r
+ },\r
+\r
+ // Shows us the last item in the list\r
+ last: function () {\r
+ return this._last && this._last.value\r
+ },\r
+\r
+ // Removes the item that was returned from the push\r
+ remove: function (item) {\r
+ // Relink the previous item\r
+ if (item.prev) item.prev.next = item.next\r
+ if (item.next) item.next.prev = item.prev\r
+ if (item === this._last) this._last = item.prev\r
+ if (item === this._first) this._first = item.next\r
+\r
+ // Invalidate item\r
+ item.prev = null\r
+ item.next = null\r
+ }\r
+ }\r
+})\r
+
+/* globals fullHex, compToHex */\r
+\r
+/*\r
+\r
+Color {\r
+ constructor (a, b, c, space) {\r
+ space: 'hsl'\r
+ a: 30\r
+ b: 20\r
+ c: 10\r
+ },\r
+\r
+ toRgb () { return new Color in rgb space }\r
+ toHsl () { return new Color in hsl space }\r
+ toLab () { return new Color in lab space }\r
+\r
+ toArray () { [space, a, b, c] }\r
+ fromArray () { convert it back }\r
+}\r
+\r
+// Conversions aren't always exact because of monitor profiles etc...\r
+new Color(h, s, l, 'hsl') !== new Color(r, g, b).hsl()\r
+new Color(100, 100, 100, [space])\r
+new Color('hsl(30, 20, 10)')\r
+\r
+// Sugar\r
+SVG.rgb(30, 20, 50).lab()\r
+SVG.hsl()\r
+SVG.lab('rgb(100, 100, 100)')\r
+*/\r
+\r
+// Module for color convertions\r
+SVG.Color = function (color, g, b) {\r
+ var match\r
+\r
+ // initialize defaults\r
+ this.r = 0\r
+ this.g = 0\r
+ this.b = 0\r
+\r
+ if (!color) return\r
+\r
+ // parse color\r
+ if (typeof color === 'string') {\r
+ if (SVG.regex.isRgb.test(color)) {\r
+ // get rgb values\r
+ match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, ''))\r
+\r
+ // parse numeric values\r
+ this.r = parseInt(match[1])\r
+ this.g = parseInt(match[2])\r
+ this.b = parseInt(match[3])\r
+ } else if (SVG.regex.isHex.test(color)) {\r
+ // get hex values\r
+ match = SVG.regex.hex.exec(fullHex(color))\r
+\r
+ // parse numeric values\r
+ this.r = parseInt(match[1], 16)\r
+ this.g = parseInt(match[2], 16)\r
+ this.b = parseInt(match[3], 16)\r
+ }\r
+ } else if (Array.isArray(color)) {\r
+ this.r = color[0]\r
+ this.g = color[1]\r
+ this.b = color[2]\r
+ } else if (typeof color === 'object') {\r
+ this.r = color.r\r
+ this.g = color.g\r
+ this.b = color.b\r
+ } else if (arguments.length === 3) {\r
+ this.r = color\r
+ this.g = g\r
+ this.b = b\r
+ }\r
+}\r
+\r
+SVG.extend(SVG.Color, {\r
+ // Default to hex conversion\r
+ toString: function () {\r
+ return this.toHex()\r
+ },\r
+ toArray: function () {\r
+ return [this.r, this.g, this.b]\r
+ },\r
+ fromArray: function (a) {\r
+ return new SVG.Color(a)\r
+ },\r
+ // Build hex value\r
+ toHex: function () {\r
+ return '#' +\r
+ compToHex(Math.round(this.r)) +\r
+ compToHex(Math.round(this.g)) +\r
+ compToHex(Math.round(this.b))\r
+ },\r
+ // Build rgb value\r
+ toRgb: function () {\r
+ return 'rgb(' + [this.r, this.g, this.b].join() + ')'\r
+ },\r
+ // Calculate true brightness\r
+ brightness: function () {\r
+ return (this.r / 255 * 0.30) +\r
+ (this.g / 255 * 0.59) +\r
+ (this.b / 255 * 0.11)\r
+ },\r
+ // Make color morphable\r
+ morph: function (color) {\r
+ this.destination = new SVG.Color(color)\r
+\r
+ return this\r
+ },\r
+ // Get morphed color at given position\r
+ at: function (pos) {\r
+ // make sure a destination is defined\r
+ if (!this.destination) return this\r
+\r
+ // normalise pos\r
+ pos = pos < 0 ? 0 : pos > 1 ? 1 : pos\r
+\r
+ // generate morphed color\r
+ return new SVG.Color({\r
+ r: ~~(this.r + (this.destination.r - this.r) * pos),\r
+ g: ~~(this.g + (this.destination.g - this.g) * pos),\r
+ b: ~~(this.b + (this.destination.b - this.b) * pos)\r
+ })\r
+ }\r
+\r
+})\r
+\r
+// Testers\r
+\r
+// Test if given value is a color string\r
+SVG.Color.test = function (color) {\r
+ color += ''\r
+ return SVG.regex.isHex.test(color) ||\r
+ SVG.regex.isRgb.test(color)\r
+}\r
+\r
+// Test if given value is a rgb object\r
+SVG.Color.isRgb = function (color) {\r
+ return color && typeof color.r === 'number' &&\r
+ typeof color.g === 'number' &&\r
+ typeof color.b === 'number'\r
+}\r
+\r
+// Test if given value is a color\r
+SVG.Color.isColor = function (color) {\r
+ return SVG.Color.isRgb(color) || SVG.Color.test(color)\r
+}\r
+
+/* global arrayClone */\r
+\r
+// Module for array conversion\r
+SVG.Array = function (array, fallback) {\r
+ array = (array || []).valueOf()\r
+\r
+ // if array is empty and fallback is provided, use fallback\r
+ if (array.length === 0 && fallback) {\r
+ array = fallback.valueOf()\r
+ }\r
+\r
+ // parse array\r
+ this.value = this.parse(array)\r
+}\r
+\r
+SVG.extend(SVG.Array, {\r
+ // Make array morphable\r
+ morph: function (array) {\r
+ this.destination = this.parse(array)\r
+\r
+ // normalize length of arrays\r
+ if (this.value.length !== this.destination.length) {\r
+ var lastValue = this.value[this.value.length - 1]\r
+ var lastDestination = this.destination[this.destination.length - 1]\r
+\r
+ while (this.value.length > this.destination.length) {\r
+ this.destination.push(lastDestination)\r
+ }\r
+ while (this.value.length < this.destination.length) {\r
+ this.value.push(lastValue)\r
+ }\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Clean up any duplicate points\r
+ settle: function () {\r
+ // find all unique values\r
+ for (var i = 0, il = this.value.length, seen = []; i < il; i++) {\r
+ if (seen.indexOf(this.value[i]) === -1) {\r
+ seen.push(this.value[i])\r
+ }\r
+ }\r
+\r
+ // set new value\r
+ this.value = seen\r
+ return seen\r
+ },\r
+ // Get morphed array at given position\r
+ at: function (pos) {\r
+ // make sure a destination is defined\r
+ if (!this.destination) return this\r
+\r
+ // generate morphed array\r
+ for (var i = 0, il = this.value.length, array = []; i < il; i++) {\r
+ array.push(this.value[i] + (this.destination[i] - this.value[i]) * pos)\r
+ }\r
+\r
+ return new SVG.Array(array)\r
+ },\r
+ toArray: function () {\r
+ return this.value\r
+ },\r
+ // Convert array to string\r
+ toString: function () {\r
+ return this.value.join(' ')\r
+ },\r
+ // Real value\r
+ valueOf: function () {\r
+ return this.value\r
+ },\r
+ // Parse whitespace separated string\r
+ parse: function (array) {\r
+ array = array.valueOf()\r
+\r
+ // if already is an array, no need to parse it\r
+ if (Array.isArray(array)) return array\r
+\r
+ return array.trim().split(SVG.regex.delimiter).map(parseFloat)\r
+ },\r
+ // Reverse array\r
+ reverse: function () {\r
+ this.value.reverse()\r
+\r
+ return this\r
+ },\r
+ clone: function () {\r
+ var clone = new this.constructor()\r
+ clone.value = arrayClone(this.value)\r
+ return clone\r
+ }\r
+})\r
+
+\r
+// Poly points array\r
+SVG.PointArray = function (array, fallback) {\r
+ SVG.Array.call(this, array, fallback || [[0, 0]])\r
+}\r
+\r
+// Inherit from SVG.Array\r
+SVG.PointArray.prototype = new SVG.Array()\r
+SVG.PointArray.prototype.constructor = SVG.PointArray\r
+\r
+SVG.extend(SVG.PointArray, {\r
+ // Convert array to string\r
+ toString: function () {\r
+ // convert to a poly point string\r
+ for (var i = 0, il = this.value.length, array = []; i < il; i++) {\r
+ array.push(this.value[i].join(','))\r
+ }\r
+\r
+ return array.join(' ')\r
+ },\r
+\r
+ toArray: function () {\r
+ return this.value.reduce(function (prev, curr) {\r
+ return [].concat.call(prev, curr)\r
+ }, [])\r
+ },\r
+\r
+ // Convert array to line object\r
+ toLine: function () {\r
+ return {\r
+ x1: this.value[0][0],\r
+ y1: this.value[0][1],\r
+ x2: this.value[1][0],\r
+ y2: this.value[1][1]\r
+ }\r
+ },\r
+\r
+ // Get morphed array at given position\r
+ at: function (pos) {\r
+ // make sure a destination is defined\r
+ if (!this.destination) return this\r
+\r
+ // generate morphed point string\r
+ for (var i = 0, il = this.value.length, array = []; i < il; i++) {\r
+ array.push([\r
+ this.value[i][0] + (this.destination[i][0] - this.value[i][0]) * pos,\r
+ this.value[i][1] + (this.destination[i][1] - this.value[i][1]) * pos\r
+ ])\r
+ }\r
+\r
+ return new SVG.PointArray(array)\r
+ },\r
+\r
+ // Parse point string and flat array\r
+ parse: function (array) {\r
+ var points = []\r
+\r
+ array = array.valueOf()\r
+\r
+ // if it is an array\r
+ if (Array.isArray(array)) {\r
+ // and it is not flat, there is no need to parse it\r
+ if (Array.isArray(array[0])) {\r
+ return array\r
+ }\r
+ } else { // Else, it is considered as a string\r
+ // parse points\r
+ array = array.trim().split(SVG.regex.delimiter).map(parseFloat)\r
+ }\r
+\r
+ // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\r
+ // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\r
+ if (array.length % 2 !== 0) array.pop()\r
+\r
+ // wrap points in two-tuples and parse points as floats\r
+ for (var i = 0, len = array.length; i < len; i = i + 2) {\r
+ points.push([ array[i], array[i + 1] ])\r
+ }\r
+\r
+ return points\r
+ },\r
+\r
+ // Move point string\r
+ move: function (x, y) {\r
+ var box = this.bbox()\r
+\r
+ // get relative offset\r
+ x -= box.x\r
+ y -= box.y\r
+\r
+ // move every point\r
+ if (!isNaN(x) && !isNaN(y)) {\r
+ for (var i = this.value.length - 1; i >= 0; i--) {\r
+ this.value[i] = [this.value[i][0] + x, this.value[i][1] + y]\r
+ }\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Resize poly string\r
+ size: function (width, height) {\r
+ var i\r
+ var box = this.bbox()\r
+\r
+ // recalculate position of all points according to new size\r
+ for (i = this.value.length - 1; i >= 0; i--) {\r
+ if (box.width) this.value[i][0] = ((this.value[i][0] - box.x) * width) / box.width + box.x\r
+ if (box.height) this.value[i][1] = ((this.value[i][1] - box.y) * height) / box.height + box.y\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // Get bounding box of points\r
+ bbox: function () {\r
+ var maxX = -Infinity\r
+ var maxY = -Infinity\r
+ var minX = Infinity\r
+ var minY = Infinity\r
+ this.value.forEach(function (el) {\r
+ maxX = Math.max(el[0], maxX)\r
+ maxY = Math.max(el[1], maxY)\r
+ minX = Math.min(el[0], minX)\r
+ minY = Math.min(el[1], minY)\r
+ })\r
+ return {x: minX, y: minY, width: maxX - minX, height: maxY - minY}\r
+ }\r
+})\r
+
+/* globals arrayToString, pathRegReplace */\r
+\r
+var pathHandlers = {\r
+ M: function (c, p, p0) {\r
+ p.x = p0.x = c[0]\r
+ p.y = p0.y = c[1]\r
+\r
+ return ['M', p.x, p.y]\r
+ },\r
+ L: function (c, p) {\r
+ p.x = c[0]\r
+ p.y = c[1]\r
+ return ['L', c[0], c[1]]\r
+ },\r
+ H: function (c, p) {\r
+ p.x = c[0]\r
+ return ['H', c[0]]\r
+ },\r
+ V: function (c, p) {\r
+ p.y = c[0]\r
+ return ['V', c[0]]\r
+ },\r
+ C: function (c, p) {\r
+ p.x = c[4]\r
+ p.y = c[5]\r
+ return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]\r
+ },\r
+ S: function (c, p) {\r
+ p.x = c[2]\r
+ p.y = c[3]\r
+ return ['S', c[0], c[1], c[2], c[3]]\r
+ },\r
+ Q: function (c, p) {\r
+ p.x = c[2]\r
+ p.y = c[3]\r
+ return ['Q', c[0], c[1], c[2], c[3]]\r
+ },\r
+ T: function (c, p) {\r
+ p.x = c[0]\r
+ p.y = c[1]\r
+ return ['T', c[0], c[1]]\r
+ },\r
+ Z: function (c, p, p0) {\r
+ p.x = p0.x\r
+ p.y = p0.y\r
+ return ['Z']\r
+ },\r
+ A: function (c, p) {\r
+ p.x = c[5]\r
+ p.y = c[6]\r
+ return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]]\r
+ }\r
+}\r
+\r
+var mlhvqtcsaz = 'mlhvqtcsaz'.split('')\r
+\r
+for (var i = 0, il = mlhvqtcsaz.length; i < il; ++i) {\r
+ pathHandlers[mlhvqtcsaz[i]] = (function (i) {\r
+ return function (c, p, p0) {\r
+ if (i === 'H') c[0] = c[0] + p.x\r
+ else if (i === 'V') c[0] = c[0] + p.y\r
+ else if (i === 'A') {\r
+ c[5] = c[5] + p.x\r
+ c[6] = c[6] + p.y\r
+ } else {\r
+ for (var j = 0, jl = c.length; j < jl; ++j) {\r
+ c[j] = c[j] + (j % 2 ? p.y : p.x)\r
+ }\r
+ }\r
+\r
+ return pathHandlers[i](c, p, p0)\r
+ }\r
+ })(mlhvqtcsaz[i].toUpperCase())\r
+}\r
+\r
+// Path points array\r
+SVG.PathArray = function (array, fallback) {\r
+ SVG.Array.call(this, array, fallback || [['M', 0, 0]])\r
+}\r
+\r
+// Inherit from SVG.Array\r
+SVG.PathArray.prototype = new SVG.Array()\r
+SVG.PathArray.prototype.constructor = SVG.PathArray\r
+\r
+SVG.extend(SVG.PathArray, {\r
+ // Convert array to string\r
+ toString: function () {\r
+ return arrayToString(this.value)\r
+ },\r
+ toArray: function () {\r
+ return this.value.reduce(function (prev, curr) {\r
+ return [].concat.call(prev, curr)\r
+ }, [])\r
+ },\r
+ // Move path string\r
+ move: function (x, y) {\r
+ // get bounding box of current situation\r
+ var box = this.bbox()\r
+\r
+ // get relative offset\r
+ x -= box.x\r
+ y -= box.y\r
+\r
+ if (!isNaN(x) && !isNaN(y)) {\r
+ // move every point\r
+ for (var l, i = this.value.length - 1; i >= 0; i--) {\r
+ l = this.value[i][0]\r
+\r
+ if (l === 'M' || l === 'L' || l === 'T') {\r
+ this.value[i][1] += x\r
+ this.value[i][2] += y\r
+ } else if (l === 'H') {\r
+ this.value[i][1] += x\r
+ } else if (l === 'V') {\r
+ this.value[i][1] += y\r
+ } else if (l === 'C' || l === 'S' || l === 'Q') {\r
+ this.value[i][1] += x\r
+ this.value[i][2] += y\r
+ this.value[i][3] += x\r
+ this.value[i][4] += y\r
+\r
+ if (l === 'C') {\r
+ this.value[i][5] += x\r
+ this.value[i][6] += y\r
+ }\r
+ } else if (l === 'A') {\r
+ this.value[i][6] += x\r
+ this.value[i][7] += y\r
+ }\r
+ }\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Resize path string\r
+ size: function (width, height) {\r
+ // get bounding box of current situation\r
+ var box = this.bbox()\r
+ var i, l\r
+\r
+ // recalculate position of all points according to new size\r
+ for (i = this.value.length - 1; i >= 0; i--) {\r
+ l = this.value[i][0]\r
+\r
+ if (l === 'M' || l === 'L' || l === 'T') {\r
+ this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x\r
+ this.value[i][2] = ((this.value[i][2] - box.y) * height) / box.height + box.y\r
+ } else if (l === 'H') {\r
+ this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x\r
+ } else if (l === 'V') {\r
+ this.value[i][1] = ((this.value[i][1] - box.y) * height) / box.height + box.y\r
+ } else if (l === 'C' || l === 'S' || l === 'Q') {\r
+ this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x\r
+ this.value[i][2] = ((this.value[i][2] - box.y) * height) / box.height + box.y\r
+ this.value[i][3] = ((this.value[i][3] - box.x) * width) / box.width + box.x\r
+ this.value[i][4] = ((this.value[i][4] - box.y) * height) / box.height + box.y\r
+\r
+ if (l === 'C') {\r
+ this.value[i][5] = ((this.value[i][5] - box.x) * width) / box.width + box.x\r
+ this.value[i][6] = ((this.value[i][6] - box.y) * height) / box.height + box.y\r
+ }\r
+ } else if (l === 'A') {\r
+ // resize radii\r
+ this.value[i][1] = (this.value[i][1] * width) / box.width\r
+ this.value[i][2] = (this.value[i][2] * height) / box.height\r
+\r
+ // move position values\r
+ this.value[i][6] = ((this.value[i][6] - box.x) * width) / box.width + box.x\r
+ this.value[i][7] = ((this.value[i][7] - box.y) * height) / box.height + box.y\r
+ }\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Test if the passed path array use the same path data commands as this path array\r
+ equalCommands: function (pathArray) {\r
+ var i, il, equalCommands\r
+\r
+ pathArray = new SVG.PathArray(pathArray)\r
+\r
+ equalCommands = this.value.length === pathArray.value.length\r
+ for (i = 0, il = this.value.length; equalCommands && i < il; i++) {\r
+ equalCommands = this.value[i][0] === pathArray.value[i][0]\r
+ }\r
+\r
+ return equalCommands\r
+ },\r
+ // Make path array morphable\r
+ morph: function (pathArray) {\r
+ pathArray = new SVG.PathArray(pathArray)\r
+\r
+ if (this.equalCommands(pathArray)) {\r
+ this.destination = pathArray\r
+ } else {\r
+ this.destination = null\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Get morphed path array at given position\r
+ at: function (pos) {\r
+ // make sure a destination is defined\r
+ if (!this.destination) return this\r
+\r
+ var sourceArray = this.value\r
+ var destinationArray = this.destination.value\r
+ var array = []\r
+ var pathArray = new SVG.PathArray()\r
+ var i, il, j, jl\r
+\r
+ // Animate has specified in the SVG spec\r
+ // See: https://www.w3.org/TR/SVG11/paths.html#PathElement\r
+ for (i = 0, il = sourceArray.length; i < il; i++) {\r
+ array[i] = [sourceArray[i][0]]\r
+ for (j = 1, jl = sourceArray[i].length; j < jl; j++) {\r
+ array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos\r
+ }\r
+ // For the two flags of the elliptical arc command, the SVG spec say:\r
+ // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true\r
+ // Elliptical arc command as an array followed by corresponding indexes:\r
+ // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\r
+ // 0 1 2 3 4 5 6 7\r
+ if (array[i][0] === 'A') {\r
+ array[i][4] = +(array[i][4] !== 0)\r
+ array[i][5] = +(array[i][5] !== 0)\r
+ }\r
+ }\r
+\r
+ // Directly modify the value of a path array, this is done this way for performance\r
+ pathArray.value = array\r
+ return pathArray\r
+ },\r
+ // Absolutize and parse path to array\r
+ parse: function (array) {\r
+ // if it's already a patharray, no need to parse it\r
+ if (array instanceof SVG.PathArray) return array.valueOf()\r
+\r
+ // prepare for parsing\r
+ var s\r
+ var paramCnt = { 'M': 2, 'L': 2, 'H': 1, 'V': 1, 'C': 6, 'S': 4, 'Q': 4, 'T': 2, 'A': 7, 'Z': 0 }\r
+\r
+ if (typeof array === 'string') {\r
+ array = array\r
+ .replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123\r
+ .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers\r
+ .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen\r
+ .trim() // trim\r
+ .split(SVG.regex.delimiter) // split into array\r
+ } else {\r
+ array = array.reduce(function (prev, curr) {\r
+ return [].concat.call(prev, curr)\r
+ }, [])\r
+ }\r
+\r
+ // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...]\r
+ var result = []\r
+ var p = new SVG.Point()\r
+ var p0 = new SVG.Point()\r
+ var index = 0\r
+ var len = array.length\r
+\r
+ do {\r
+ // Test if we have a path letter\r
+ if (SVG.regex.isPathLetter.test(array[index])) {\r
+ s = array[index]\r
+ ++index\r
+ // If last letter was a move command and we got no new, it defaults to [L]ine\r
+ } else if (s === 'M') {\r
+ s = 'L'\r
+ } else if (s === 'm') {\r
+ s = 'l'\r
+ }\r
+\r
+ result.push(pathHandlers[s].call(null,\r
+ array.slice(index, (index = index + paramCnt[s.toUpperCase()])).map(parseFloat),\r
+ p, p0\r
+ )\r
+ )\r
+ } while (len > index)\r
+\r
+ return result\r
+ },\r
+ // Get bounding box of path\r
+ bbox: function () {\r
+ SVG.parser().path.setAttribute('d', this.toString())\r
+ return SVG.parser.nodes.path.getBBox()\r
+ }\r
+\r
+})\r
+
+\r
+// Module for unit convertions\r
+SVG.Number = SVG.invent({\r
+ // Initialize\r
+ create: function (value, unit) {\r
+ unit = Array.isArray(value) ? value[1] : unit\r
+ value = Array.isArray(value) ? value[0] : value\r
+\r
+ // initialize defaults\r
+ this.value = 0\r
+ this.unit = unit || ''\r
+\r
+ // parse value\r
+ if (typeof value === 'number') {\r
+ // ensure a valid numeric value\r
+ this.value = isNaN(value) ? 0 : !isFinite(value) ? (value < 0 ? -3.4e+38 : +3.4e+38) : value\r
+ } else if (typeof value === 'string') {\r
+ unit = value.match(SVG.regex.numberAndUnit)\r
+\r
+ if (unit) {\r
+ // make value numeric\r
+ this.value = parseFloat(unit[1])\r
+\r
+ // normalize\r
+ if (unit[5] === '%') { this.value /= 100 } else if (unit[5] === 's') {\r
+ this.value *= 1000\r
+ }\r
+\r
+ // store unit\r
+ this.unit = unit[5]\r
+ }\r
+ } else {\r
+ if (value instanceof SVG.Number) {\r
+ this.value = value.valueOf()\r
+ this.unit = value.unit\r
+ }\r
+ }\r
+ },\r
+ // Add methods\r
+ extend: {\r
+ // Stringalize\r
+ toString: function () {\r
+ return (this.unit === '%' ? ~~(this.value * 1e8) / 1e6\r
+ : this.unit === 's' ? this.value / 1e3\r
+ : this.value\r
+ ) + this.unit\r
+ },\r
+ toJSON: function () {\r
+ return this.toString()\r
+ }, // Convert to primitive\r
+ toArray: function () {\r
+ return [this.value, this.unit]\r
+ },\r
+ valueOf: function () {\r
+ return this.value\r
+ },\r
+ // Add number\r
+ plus: function (number) {\r
+ number = new SVG.Number(number)\r
+ return new SVG.Number(this + number, this.unit || number.unit)\r
+ },\r
+ // Subtract number\r
+ minus: function (number) {\r
+ number = new SVG.Number(number)\r
+ return new SVG.Number(this - number, this.unit || number.unit)\r
+ },\r
+ // Multiply number\r
+ times: function (number) {\r
+ number = new SVG.Number(number)\r
+ return new SVG.Number(this * number, this.unit || number.unit)\r
+ },\r
+ // Divide number\r
+ divide: function (number) {\r
+ number = new SVG.Number(number)\r
+ return new SVG.Number(this / number, this.unit || number.unit)\r
+ },\r
+ // Convert to different unit\r
+ to: function (unit) {\r
+ var number = new SVG.Number(this)\r
+\r
+ if (typeof unit === 'string') {\r
+ number.unit = unit\r
+ }\r
+\r
+ return number\r
+ },\r
+ // Make number morphable\r
+ morph: function (number) {\r
+ this.destination = new SVG.Number(number)\r
+\r
+ if (number.relative) {\r
+ this.destination.value += this.value\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Get morphed number at given position\r
+ at: function (pos) {\r
+ // Make sure a destination is defined\r
+ if (!this.destination) return this\r
+\r
+ // Generate new morphed number\r
+ return new SVG.Number(this.destination)\r
+ .minus(this)\r
+ .times(pos)\r
+ .plus(this)\r
+ }\r
+ }\r
+})\r
+
+// Add events to elements\r
+/*\r
+;[ 'click',\r
+ 'dblclick',\r
+ 'mousedown',\r
+ 'mouseup',\r
+ 'mouseover',\r
+ 'mouseout',\r
+ 'mousemove',\r
+ 'mouseenter',\r
+ 'mouseleave',\r
+ 'touchstart',\r
+ 'touchmove',\r
+ 'touchleave',\r
+ 'touchend',\r
+ 'touchcancel' ].forEach(function (event) {\r
+ // add event to SVG.Element\r
+ SVG.Element.prototype[event] = function (f) {\r
+ // bind event to element rather than element node\r
+ SVG.on(this, event, f)\r
+ return this\r
+ }\r
+ })\r
+*/\r
+\r
+SVG.listenerId = 0\r
+\r
+// Add event binder in the SVG namespace\r
+SVG.on = function (node, events, listener, binding, options) {\r
+ var l = listener.bind(binding || node)\r
+ var n = node instanceof SVG.EventTarget ? node.getEventTarget() : node\r
+\r
+ // events can be an array of events or a string of events\r
+ events = Array.isArray(events) ? events : events.split(SVG.regex.delimiter)\r
+\r
+ // ensure instance object for nodes which are not adopted\r
+ n.instance = n.instance || {events: {}}\r
+\r
+ // pull event handlers from the element\r
+ var bag = n.instance.events\r
+\r
+ // add id to listener\r
+ if (!listener._svgjsListenerId) {\r
+ listener._svgjsListenerId = ++SVG.listenerId\r
+ }\r
+\r
+ events.forEach(function (event) {\r
+ var ev = event.split('.')[0]\r
+ var ns = event.split('.')[1] || '*'\r
+\r
+ // ensure valid object\r
+ bag[ev] = bag[ev] || {}\r
+ bag[ev][ns] = bag[ev][ns] || {}\r
+\r
+ // reference listener\r
+ bag[ev][ns][listener._svgjsListenerId] = l\r
+\r
+ // add listener\r
+ n.addEventListener(ev, l, options || false)\r
+ })\r
+}\r
+\r
+// Add event unbinder in the SVG namespace\r
+SVG.off = function (node, events, listener, options) {\r
+ var n = node instanceof SVG.EventTarget ? node.getEventTarget() : node\r
+ if (!n.instance) return\r
+\r
+ // listener can be a function or a number\r
+ if (typeof listener === 'function') {\r
+ listener = listener._svgjsListenerId\r
+ if (!listener) return\r
+ }\r
+\r
+ // pull event handlers from the element\r
+ var bag = n.instance.events\r
+\r
+ // events can be an array of events or a string or undefined\r
+ events = Array.isArray(events) ? events : (events || '').split(SVG.regex.delimiter)\r
+\r
+ events.forEach(function (event) {\r
+ var ev = event && event.split('.')[0]\r
+ var ns = event && event.split('.')[1]\r
+ var namespace, l\r
+\r
+ if (listener) {\r
+ // remove listener reference\r
+ if (bag[ev] && bag[ev][ns || '*']) {\r
+ // removeListener\r
+ n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false)\r
+\r
+ delete bag[ev][ns || '*'][listener]\r
+ }\r
+ } else if (ev && ns) {\r
+ // remove all listeners for a namespaced event\r
+ if (bag[ev] && bag[ev][ns]) {\r
+ for (l in bag[ev][ns]) { SVG.off(n, [ev, ns].join('.'), l) }\r
+\r
+ delete bag[ev][ns]\r
+ }\r
+ } else if (ns) {\r
+ // remove all listeners for a specific namespace\r
+ for (event in bag) {\r
+ for (namespace in bag[event]) {\r
+ if (ns === namespace) { SVG.off(n, [event, ns].join('.')) }\r
+ }\r
+ }\r
+ } else if (ev) {\r
+ // remove all listeners for the event\r
+ if (bag[ev]) {\r
+ for (namespace in bag[ev]) { SVG.off(n, [ev, namespace].join('.')) }\r
+\r
+ delete bag[ev]\r
+ }\r
+ } else {\r
+ // remove all listeners on a given node\r
+ for (event in bag) { SVG.off(n, event) }\r
+\r
+ n.instance.events = {}\r
+ }\r
+ })\r
+}\r
+\r
+SVG.dispatch = function (node, event, data) {\r
+ var n = node instanceof SVG.EventTarget ? node.getEventTarget() : node\r
+\r
+ // Dispatch event\r
+ if (event instanceof window.Event) {\r
+ n.dispatchEvent(event)\r
+ } else {\r
+ event = new window.CustomEvent(event, {detail: data, cancelable: true})\r
+ n.dispatchEvent(event)\r
+ }\r
+ return event\r
+}\r
+\r
+SVG.EventTarget = SVG.invent({\r
+ create: function () {},\r
+ extend: {\r
+ // Bind given event to listener\r
+ on: function (event, listener, binding, options) {\r
+ SVG.on(this, event, listener, binding, options)\r
+ return this\r
+ },\r
+ // Unbind event from listener\r
+ off: function (event, listener) {\r
+ SVG.off(this, event, listener)\r
+ return this\r
+ },\r
+ dispatch: function (event, data) {\r
+ return SVG.dispatch(this, event, data)\r
+ },\r
+ // Fire given event\r
+ fire: function (event, data) {\r
+ this.dispatch(event, data)\r
+ return this\r
+ }\r
+ }\r
+})\r
+
+/* global createElement */\r
+\r
+SVG.HtmlNode = SVG.invent({\r
+ inherit: SVG.EventTarget,\r
+ create: function (element) {\r
+ this.node = element\r
+ },\r
+\r
+ extend: {\r
+ add: function (element, i) {\r
+ element = createElement(element)\r
+\r
+ if (element.node !== this.node.children[i]) {\r
+ this.node.insertBefore(element.node, this.node.children[i] || null)\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ put: function (element, i) {\r
+ this.add(element, i)\r
+ return element\r
+ },\r
+\r
+ getEventTarget: function () {\r
+ return this.node\r
+ }\r
+ }\r
+})\r
+
+/* global proportionalSize, assignNewId, createElement, matches, is */\r
+\r
+SVG.Element = SVG.invent({\r
+ inherit: SVG.EventTarget,\r
+\r
+ // Initialize node\r
+ create: function (node) {\r
+ // event listener\r
+ this.events = {}\r
+\r
+ // initialize data object\r
+ this.dom = {}\r
+\r
+ // create circular reference\r
+ this.node = node\r
+ if (this.node) {\r
+ this.type = node.nodeName\r
+ this.node.instance = this\r
+ this.events = node.events || {}\r
+\r
+ if (node.hasAttribute('svgjs:data')) {\r
+ // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\r
+ this.setData(JSON.parse(node.getAttribute('svgjs:data')) || {})\r
+ }\r
+ }\r
+ },\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Move over x-axis\r
+ x: function (x) {\r
+ return this.attr('x', x)\r
+ },\r
+\r
+ // Move over y-axis\r
+ y: function (y) {\r
+ return this.attr('y', y)\r
+ },\r
+\r
+ // Move by center over x-axis\r
+ cx: function (x) {\r
+ return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2)\r
+ },\r
+\r
+ // Move by center over y-axis\r
+ cy: function (y) {\r
+ return y == null\r
+ ? this.y() + this.height() / 2\r
+ : this.y(y - this.height() / 2)\r
+ },\r
+\r
+ // Move element to given x and y values\r
+ move: function (x, y) {\r
+ return this.x(x).y(y)\r
+ },\r
+\r
+ // Move element by its center\r
+ center: function (x, y) {\r
+ return this.cx(x).cy(y)\r
+ },\r
+\r
+ // Set width of element\r
+ width: function (width) {\r
+ return this.attr('width', width)\r
+ },\r
+\r
+ // Set height of element\r
+ height: function (height) {\r
+ return this.attr('height', height)\r
+ },\r
+\r
+ // Set element size to given width and height\r
+ size: function (width, height) {\r
+ var p = proportionalSize(this, width, height)\r
+\r
+ return this\r
+ .width(new SVG.Number(p.width))\r
+ .height(new SVG.Number(p.height))\r
+ },\r
+\r
+ // Clone element\r
+ clone: function (parent) {\r
+ // write dom data to the dom so the clone can pickup the data\r
+ this.writeDataToDom()\r
+\r
+ // clone element and assign new id\r
+ var clone = assignNewId(this.node.cloneNode(true))\r
+\r
+ // insert the clone in the given parent or after myself\r
+ if (parent) parent.add(clone)\r
+ else this.after(clone)\r
+\r
+ return clone\r
+ },\r
+\r
+ // Remove element\r
+ remove: function () {\r
+ if (this.parent()) { this.parent().removeElement(this) }\r
+\r
+ return this\r
+ },\r
+\r
+ // Replace element\r
+ replace: function (element) {\r
+ this.after(element).remove()\r
+\r
+ return element\r
+ },\r
+\r
+ // Add element to given container and return self\r
+ addTo: function (parent) {\r
+ return createElement(parent).put(this)\r
+ },\r
+\r
+ // Add element to given container and return container\r
+ putIn: function (parent) {\r
+ return createElement(parent).add(this)\r
+ },\r
+\r
+ // Get / set id\r
+ id: function (id) {\r
+ // generate new id if no id set\r
+ if (typeof id === 'undefined' && !this.node.id) {\r
+ this.node.id = SVG.eid(this.type)\r
+ }\r
+\r
+ // dont't set directly width this.node.id to make `null` work correctly\r
+ return this.attr('id', id)\r
+ },\r
+\r
+ // Checks whether the given point inside the bounding box of the element\r
+ inside: function (x, y) {\r
+ var box = this.bbox()\r
+\r
+ return x > box.x &&\r
+ y > box.y &&\r
+ x < box.x + box.width &&\r
+ y < box.y + box.height\r
+ },\r
+\r
+ // Show element\r
+ show: function () {\r
+ return this.css('display', '')\r
+ },\r
+\r
+ // Hide element\r
+ hide: function () {\r
+ return this.css('display', 'none')\r
+ },\r
+\r
+ // Is element visible?\r
+ visible: function () {\r
+ return this.css('display') !== 'none'\r
+ },\r
+\r
+ // Return id on string conversion\r
+ toString: function () {\r
+ return this.id()\r
+ },\r
+\r
+ // Return array of classes on the node\r
+ classes: function () {\r
+ var attr = this.attr('class')\r
+ return attr == null ? [] : attr.trim().split(SVG.regex.delimiter)\r
+ },\r
+\r
+ // Return true if class exists on the node, false otherwise\r
+ hasClass: function (name) {\r
+ return this.classes().indexOf(name) !== -1\r
+ },\r
+\r
+ // Add class to the node\r
+ addClass: function (name) {\r
+ if (!this.hasClass(name)) {\r
+ var array = this.classes()\r
+ array.push(name)\r
+ this.attr('class', array.join(' '))\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // Remove class from the node\r
+ removeClass: function (name) {\r
+ if (this.hasClass(name)) {\r
+ this.attr('class', this.classes().filter(function (c) {\r
+ return c !== name\r
+ }).join(' '))\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // Toggle the presence of a class on the node\r
+ toggleClass: function (name) {\r
+ return this.hasClass(name) ? this.removeClass(name) : this.addClass(name)\r
+ },\r
+\r
+ // Get referenced element form attribute value\r
+ reference: function (attr) {\r
+ return SVG.get(this.attr(attr))\r
+ },\r
+\r
+ // Returns the parent element instance\r
+ parent: function (type) {\r
+ var parent = this\r
+\r
+ // check for parent\r
+ if (!parent.node.parentNode) return null\r
+\r
+ // get parent element\r
+ parent = SVG.adopt(parent.node.parentNode)\r
+\r
+ if (!type) return parent\r
+\r
+ // loop trough ancestors if type is given\r
+ while (parent && parent.node instanceof window.SVGElement) {\r
+ if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent\r
+ parent = SVG.adopt(parent.node.parentNode)\r
+ }\r
+ },\r
+\r
+ // Get parent document\r
+ doc: function () {\r
+ var p = this.parent(SVG.Doc)\r
+ return p && p.doc()\r
+ },\r
+\r
+ // Get defs\r
+ defs: function () {\r
+ return this.doc().defs()\r
+ },\r
+\r
+ // return array of all ancestors of given type up to the root svg\r
+ parents: function (type) {\r
+ var parents = []\r
+ var parent = this\r
+\r
+ do {\r
+ parent = parent.parent(type)\r
+ if (!parent || !parent.node) break\r
+\r
+ parents.push(parent)\r
+ } while (parent.parent)\r
+\r
+ return parents\r
+ },\r
+\r
+ // matches the element vs a css selector\r
+ matches: function (selector) {\r
+ return matches(this.node, selector)\r
+ },\r
+\r
+ // Returns the svg node to call native svg methods on it\r
+ native: function () {\r
+ return this.node\r
+ },\r
+\r
+ // Import raw svg\r
+ svg: function (svg) {\r
+ var well, len\r
+\r
+ // act as a setter if svg is given\r
+ if (svg && this instanceof SVG.Parent) {\r
+ // create temporary holder\r
+ well = document.createElementNS(SVG.ns, 'svg')\r
+ // dump raw svg\r
+ well.innerHTML = svg\r
+\r
+ // transplant nodes\r
+ for (len = well.children.length; len--;) {\r
+ this.node.appendChild(well.firstElementChild)\r
+ }\r
+\r
+ // otherwise act as a getter\r
+ } else {\r
+ // write svgjs data to the dom\r
+ this.writeDataToDom()\r
+\r
+ return this.node.outerHTML\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // write svgjs data to the dom\r
+ writeDataToDom: function () {\r
+ // dump variables recursively\r
+ if (this.is(SVG.Parent)) {\r
+ this.each(function () {\r
+ this.writeDataToDom()\r
+ })\r
+ }\r
+\r
+ // remove previously set data\r
+ this.node.removeAttribute('svgjs:data')\r
+\r
+ if (Object.keys(this.dom).length) {\r
+ this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)) // see #428\r
+ }\r
+ return this\r
+ },\r
+\r
+ // set given data to the elements data property\r
+ setData: function (o) {\r
+ this.dom = o\r
+ return this\r
+ },\r
+ is: function (obj) {\r
+ return is(this, obj)\r
+ },\r
+ getEventTarget: function () {\r
+ return this.node\r
+ }\r
+ }\r
+})\r
+
+/* global abcdef, arrayToMatrix, closeEnough, formatTransforms */\r
+\r
+SVG.Matrix = SVG.invent({\r
+ // Initialize\r
+ create: function (source) {\r
+ var base = arrayToMatrix([1, 0, 0, 1, 0, 0])\r
+\r
+ // ensure source as object\r
+ source = source instanceof SVG.Element ? source.matrixify()\r
+ : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat))\r
+ : Array.isArray(source) ? arrayToMatrix(source)\r
+ : (typeof source === 'object' && (\r
+ source.a != null || source.b != null || source.c != null ||\r
+ source.d != null || source.e != null || source.f != null\r
+ )) ? source\r
+ : (typeof source === 'object') ? new SVG.Matrix().transform(source)\r
+ : arguments.length === 6 ? arrayToMatrix([].slice.call(arguments))\r
+ : base\r
+\r
+ // Merge the source matrix with the base matrix\r
+ this.a = source.a != null ? source.a : base.a\r
+ this.b = source.b != null ? source.b : base.b\r
+ this.c = source.c != null ? source.c : base.c\r
+ this.d = source.d != null ? source.d : base.d\r
+ this.e = source.e != null ? source.e : base.e\r
+ this.f = source.f != null ? source.f : base.f\r
+ },\r
+\r
+ // Add methods\r
+ extend: {\r
+\r
+ // Clones this matrix\r
+ clone: function () {\r
+ return new SVG.Matrix(this)\r
+ },\r
+\r
+ // Transform a matrix into another matrix by manipulating the space\r
+ transform: function (o) {\r
+ // Check if o is a matrix and then left multiply it directly\r
+ if (o.a != null) {\r
+ var matrix = new SVG.Matrix(o)\r
+ var newMatrix = this.lmultiply(matrix)\r
+ return newMatrix\r
+ }\r
+\r
+ // Get the proposed transformations and the current transformations\r
+ var t = formatTransforms(o)\r
+ var currentTransform = new SVG.Matrix(this)\r
+\r
+ // Construct the resulting matrix\r
+ var transformer = new SVG.Matrix()\r
+ .translate(-t.ox, -t.oy)\r
+ .scale(t.scaleX, t.scaleY)\r
+ .skew(t.skewX, t.skewY)\r
+ .shear(t.shear)\r
+ .rotate(t.theta)\r
+ .translate(t.ox, t.oy)\r
+ .translate(t.rx, t.ry)\r
+ .lmultiply(currentTransform)\r
+\r
+ // If we want the origin at a particular place, we force it there\r
+ if (isFinite(t.px) || isFinite(t.py)) {\r
+ // Figure out where the origin went and the delta to get there\r
+ var current = new SVG.Point(t.ox - t.rx, t.oy - t.ry).transform(transformer)\r
+ var dx = t.px ? t.px - current.x : 0\r
+ var dy = t.py ? t.py - current.y : 0\r
+\r
+ // Apply another translation\r
+ transformer = transformer.translate(dx, dy)\r
+ }\r
+\r
+ // We can apply translations after everything else\r
+ transformer = transformer.translate(t.tx, t.ty)\r
+ return transformer\r
+ },\r
+\r
+ // Applies a matrix defined by its affine parameters\r
+ compose: function (o) {\r
+ if (o.origin) {\r
+ o.originX = o.origin[0]\r
+ o.originY = o.origin[1]\r
+ }\r
+ // Get the parameters\r
+ var ox = o.originX || 0\r
+ var oy = o.originY || 0\r
+ var sx = o.scaleX || 1\r
+ var sy = o.scaleY || 1\r
+ var lam = o.shear || 0\r
+ var theta = o.rotate || 0\r
+ var tx = o.translateX || 0\r
+ var ty = o.translateY || 0\r
+\r
+ // Apply the standard matrix\r
+ var result = new SVG.Matrix()\r
+ .translate(-ox, -oy)\r
+ .scale(sx, sy)\r
+ .shear(lam)\r
+ .rotate(theta)\r
+ .translate(tx, ty)\r
+ .lmultiply(this)\r
+ .translate(ox, oy)\r
+ return result\r
+ },\r
+\r
+ // Decomposes this matrix into its affine parameters\r
+ decompose: function (cx=0, cy=0) {\r
+ // Get the parameters from the matrix\r
+ var a = this.a\r
+ var b = this.b\r
+ var c = this.c\r
+ var d = this.d\r
+ var e = this.e\r
+ var f = this.f\r
+\r
+ // Figure out if the winding direction is clockwise or counterclockwise\r
+ var determinant = a * d - b * c\r
+ var ccw = determinant > 0 ? 1 : -1\r
+\r
+ // Since we only shear in x, we can use the x basis to get the x scale\r
+ // and the rotation of the resulting matrix\r
+ var sx = ccw * Math.sqrt(a * a + b * b)\r
+ var thetaRad = Math.atan2(ccw * b, ccw * a)\r
+ var theta = 180 / Math.PI * thetaRad\r
+ var ct = Math.cos(thetaRad)\r
+ var st = Math.sin(thetaRad)\r
+\r
+ // We can then solve the y basis vector simultaneously to get the other\r
+ // two affine parameters directly from these parameters\r
+ var lam = (a * c + b * d) / determinant\r
+ var sy = ((c * sx) / (lam * a - b)) || ((d * sx) / (lam * b + a))\r
+\r
+ let tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy)\r
+ let ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy)\r
+\r
+ // Construct the decomposition and return it\r
+ return {\r
+ // Return the affine parameters\r
+ scaleX: sx,\r
+ scaleY: sy,\r
+ shear: lam,\r
+ rotate: theta,\r
+ translateX: tx,\r
+ translateY: ty,\r
+ originX: cx,\r
+ originY: cy,\r
+\r
+ // Return the matrix parameters\r
+ a: this.a,\r
+ b: this.b,\r
+ c: this.c,\r
+ d: this.d,\r
+ e: this.e,\r
+ f: this.f\r
+ }\r
+ },\r
+\r
+ // Morph one matrix into another\r
+ morph: function (matrix) {\r
+ // Store new destination\r
+ this.destination = new SVG.Matrix(matrix)\r
+ return this\r
+ },\r
+\r
+ // Get morphed matrix at a given position\r
+ at: function (pos) {\r
+ // Make sure a destination is defined\r
+ if (!this.destination) return this\r
+\r
+ // Calculate morphed matrix at a given position\r
+ var matrix = new SVG.Matrix({\r
+ a: this.a + (this.destination.a - this.a) * pos,\r
+ b: this.b + (this.destination.b - this.b) * pos,\r
+ c: this.c + (this.destination.c - this.c) * pos,\r
+ d: this.d + (this.destination.d - this.d) * pos,\r
+ e: this.e + (this.destination.e - this.e) * pos,\r
+ f: this.f + (this.destination.f - this.f) * pos\r
+ })\r
+\r
+ return matrix\r
+ },\r
+\r
+ // Left multiplies by the given matrix\r
+ multiply: function (matrix) {\r
+ // Get the matrices\r
+ var l = this\r
+ var r = new SVG.Matrix(matrix)\r
+\r
+ // Work out the product directly\r
+ var a = l.a * r.a + l.c * r.b\r
+ var b = l.b * r.a + l.d * r.b\r
+ var c = l.a * r.c + l.c * r.d\r
+ var d = l.b * r.c + l.d * r.d\r
+ var e = l.e + l.a * r.e + l.c * r.f\r
+ var f = l.f + l.b * r.e + l.d * r.f\r
+\r
+ // Form the matrix and return it\r
+ var product = new SVG.Matrix(a, b, c, d, e, f)\r
+ return product\r
+ },\r
+\r
+ lmultiply: function (matrix) {\r
+ var result = new SVG.Matrix(matrix).multiply(this)\r
+ return result\r
+ },\r
+\r
+ // Inverses matrix\r
+ inverse: function () {\r
+ // Get the current parameters out of the matrix\r
+ var a = this.a\r
+ var b = this.b\r
+ var c = this.c\r
+ var d = this.d\r
+ var e = this.e\r
+ var f = this.f\r
+\r
+ // Invert the 2x2 matrix in the top left\r
+ var det = a * d - b * c\r
+ if (!det) throw new Error('Cannot invert ' + this)\r
+\r
+ // Calculate the top 2x2 matrix\r
+ var na = d / det\r
+ var nb = -b / det\r
+ var nc = -c / det\r
+ var nd = a / det\r
+\r
+ // Apply the inverted matrix to the top right\r
+ var ne = -(na * e + nc * f)\r
+ var nf = -(nb * e + nd * f)\r
+\r
+ // Construct the inverted matrix\r
+ return new SVG.Matrix(na, nb, nc, nd, ne, nf)\r
+ },\r
+\r
+ // Translate matrix\r
+ translate: function (x, y) {\r
+ return new SVG.Matrix(this).translateO(x, y)\r
+ },\r
+\r
+ translateO: function (x, y) {\r
+ this.e += x || 0\r
+ this.f += y || 0\r
+ return this\r
+ },\r
+\r
+ // Scale matrix\r
+ scale: function (x, y, cx, cy) {\r
+ // Support uniform scaling\r
+ if (arguments.length === 1) {\r
+ y = x\r
+ } else if (arguments.length === 3) {\r
+ cy = cx\r
+ cx = y\r
+ y = x\r
+ }\r
+\r
+ // Scale the current matrix\r
+ var scale = new SVG.Matrix(x, 0, 0, y, 0, 0)\r
+ var matrix = this.around(cx, cy, scale)\r
+ return matrix\r
+ },\r
+\r
+ // Rotate matrix\r
+ rotate: function (r, cx, cy) {\r
+ // Convert degrees to radians\r
+ r = SVG.utils.radians(r)\r
+\r
+ // Construct the rotation matrix\r
+ var rotation = new SVG.Matrix(Math.cos(r), Math.sin(r), -Math.sin(r), Math.cos(r), 0, 0)\r
+ var matrix = this.around(cx, cy, rotation)\r
+ return matrix\r
+ },\r
+\r
+ // Flip matrix on x or y, at a given offset\r
+ flip: function (axis, around) {\r
+ return axis === 'x' ? this.scale(-1, 1, around, 0)\r
+ : axis === 'y' ? this.scale(1, -1, 0, around)\r
+ : this.scale(-1, -1, axis, around || axis) // Define an x, y flip point\r
+ },\r
+\r
+ // Shear matrix\r
+ shear: function (a, cx, cy) {\r
+ var shear = new SVG.Matrix(1, 0, a, 1, 0, 0)\r
+ var matrix = this.around(cx, cy, shear)\r
+ return matrix\r
+ },\r
+\r
+ // Skew Matrix\r
+ skew: function (x, y, cx, cy) {\r
+ // support uniformal skew\r
+ if (arguments.length === 1) {\r
+ y = x\r
+ } else if (arguments.length === 3) {\r
+ cy = cx\r
+ cx = y\r
+ y = x\r
+ }\r
+\r
+ // Convert degrees to radians\r
+ x = SVG.utils.radians(x)\r
+ y = SVG.utils.radians(y)\r
+\r
+ // Construct the matrix\r
+ var skew = new SVG.Matrix(1, Math.tan(y), Math.tan(x), 1, 0, 0)\r
+ var matrix = this.around(cx, cy, skew)\r
+ return matrix\r
+ },\r
+\r
+ // SkewX\r
+ skewX: function (x, cx, cy) {\r
+ return this.skew(x, 0, cx, cy)\r
+ },\r
+\r
+ // SkewY\r
+ skewY: function (y, cx, cy) {\r
+ return this.skew(0, y, cx, cy)\r
+ },\r
+\r
+ // Transform around a center point\r
+ around: function (cx, cy, matrix) {\r
+ var dx = cx || 0\r
+ var dy = cy || 0\r
+ return this.translate(-dx, -dy).lmultiply(matrix).translate(dx, dy)\r
+ },\r
+\r
+ // Convert to native SVGMatrix\r
+ native: function () {\r
+ // create new matrix\r
+ var matrix = SVG.parser.nodes.svg.node.createSVGMatrix()\r
+\r
+ // update with current values\r
+ for (var i = abcdef.length - 1; i >= 0; i--) {\r
+ matrix[abcdef[i]] = this[abcdef[i]]\r
+ }\r
+\r
+ return matrix\r
+ },\r
+\r
+ // Check if two matrices are equal\r
+ equals: function (other) {\r
+ var comp = new SVG.Matrix(other)\r
+ return closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) &&\r
+ closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) &&\r
+ closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f)\r
+ },\r
+\r
+ // Convert matrix to string\r
+ toString: function () {\r
+ return 'matrix(' + this.a + ',' + this.b + ',' + this.c + ',' + this.d + ',' + this.e + ',' + this.f + ')'\r
+ },\r
+\r
+ toArray: function () {\r
+ return [this.a, this.b, this.c, this.d, this.e, this.f]\r
+ },\r
+\r
+ valueOf: function () {\r
+ return {\r
+ a: this.a,\r
+ b: this.b,\r
+ c: this.c,\r
+ d: this.d,\r
+ e: this.e,\r
+ f: this.f\r
+ }\r
+ }\r
+ },\r
+\r
+ // Define parent\r
+ parent: SVG.Element,\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Get current matrix\r
+ ctm: function () {\r
+ return new SVG.Matrix(this.node.getCTM())\r
+ },\r
+ // Get current screen matrix\r
+ screenCTM: function () {\r
+ /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\r
+ This is needed because FF does not return the transformation matrix\r
+ for the inner coordinate system when getScreenCTM() is called on nested svgs.\r
+ However all other Browsers do that */\r
+ if (this instanceof SVG.Doc && !this.isRoot()) {\r
+ var rect = this.rect(1, 1)\r
+ var m = rect.node.getScreenCTM()\r
+ rect.remove()\r
+ return new SVG.Matrix(m)\r
+ }\r
+ return new SVG.Matrix(this.node.getScreenCTM())\r
+ }\r
+ }\r
+})\r
+
+\r
+SVG.Point = SVG.invent({\r
+ // Initialize\r
+ create: function (x, y, base) {\r
+ var source\r
+ base = base || {x: 0, y: 0}\r
+\r
+ // ensure source as object\r
+ source = Array.isArray(x) ? {x: x[0], y: x[1]}\r
+ : typeof x === 'object' ? {x: x.x, y: x.y}\r
+ : {x: x, y: y}\r
+\r
+ // merge source\r
+ this.x = source.x == null ? base.x : source.x\r
+ this.y = source.y == null ? base.y : source.y\r
+ },\r
+\r
+ // Add methods\r
+ extend: {\r
+ // Clone point\r
+ clone: function () {\r
+ return new SVG.Point(this)\r
+ },\r
+\r
+ // Morph one point into another\r
+ morph: function (x, y) {\r
+ // store new destination\r
+ this.destination = new SVG.Point(x, y)\r
+ return this\r
+ },\r
+\r
+ // Get morphed point at a given position\r
+ at: function (pos) {\r
+ // make sure a destination is defined\r
+ if (!this.destination) return this\r
+\r
+ // calculate morphed matrix at a given position\r
+ var point = new SVG.Point({\r
+ x: this.x + (this.destination.x - this.x) * pos,\r
+ y: this.y + (this.destination.y - this.y) * pos\r
+ })\r
+ return point\r
+ },\r
+\r
+ // Convert to native SVGPoint\r
+ native: function () {\r
+ // create new point\r
+ var point = SVG.parser.nodes.svg.node.createSVGPoint()\r
+\r
+ // update with current values\r
+ point.x = this.x\r
+ point.y = this.y\r
+ return point\r
+ },\r
+\r
+ // transform point with matrix\r
+ transform: function (m) {\r
+ // Perform the matrix multiplication\r
+ var x = m.a * this.x + m.c * this.y + m.e\r
+ var y = m.b * this.x + m.d * this.y + m.f\r
+\r
+ // Return the required point\r
+ return new SVG.Point(x, y)\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend(SVG.Element, {\r
+\r
+ // Get point\r
+ point: function (x, y) {\r
+ return new SVG.Point(x, y).transform(this.screenCTM().inverse())\r
+ }\r
+})\r
+
+SVG.extend(SVG.Element, {\r
+ // Set svg element attribute\r
+ attr: function (a, v, n) {\r
+ // act as full getter\r
+ if (a == null) {\r
+ // get an object of attributes\r
+ a = {}\r
+ v = this.node.attributes\r
+ for (n = v.length - 1; n >= 0; n--) {\r
+ a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue)\r
+ ? parseFloat(v[n].nodeValue)\r
+ : v[n].nodeValue\r
+ }\r
+ return a\r
+ } else if (typeof a === 'object') {\r
+ // apply every attribute individually if an object is passed\r
+ for (v in a) this.attr(v, a[v])\r
+ } else if (v === null) {\r
+ // remove value\r
+ this.node.removeAttribute(a)\r
+ } else if (v == null) {\r
+ // act as a getter if the first and only argument is not an object\r
+ v = this.node.getAttribute(a)\r
+ return v == null ? SVG.defaults.attrs[a]\r
+ : SVG.regex.isNumber.test(v) ? parseFloat(v)\r
+ : v\r
+ } else {\r
+ // convert image fill and stroke to patterns\r
+ if (a === 'fill' || a === 'stroke') {\r
+ if (SVG.regex.isImage.test(v)) {\r
+ v = this.doc().defs().image(v)\r
+ }\r
+\r
+ if (v instanceof SVG.Image) {\r
+ v = this.doc().defs().pattern(0, 0, function () {\r
+ this.add(v)\r
+ })\r
+ }\r
+ }\r
+\r
+ // ensure correct numeric values (also accepts NaN and Infinity)\r
+ if (typeof v === 'number') {\r
+ v = new SVG.Number(v)\r
+ } else if (SVG.Color.isColor(v)) {\r
+ // ensure full hex color\r
+ v = new SVG.Color(v)\r
+ } else if (Array.isArray(v)) {\r
+ // parse array values\r
+ v = new SVG.Array(v)\r
+ }\r
+\r
+ // if the passed attribute is leading...\r
+ if (a === 'leading') {\r
+ // ... call the leading method instead\r
+ if (this.leading) {\r
+ this.leading(v)\r
+ }\r
+ } else {\r
+ // set given attribute on node\r
+ typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString())\r
+ : this.node.setAttribute(a, v.toString())\r
+ }\r
+\r
+ // rebuild if required\r
+ if (this.rebuild && (a === 'font-size' || a === 'x')) {\r
+ this.rebuild(a, v)\r
+ }\r
+ }\r
+\r
+ return this\r
+ }\r
+})\r
+
+/* global arrayToMatrix */\r
+\r
+SVG.extend(SVG.Element, {\r
+ // Reset all transformations\r
+ untransform: function () {\r
+ return this.attr('transform', null)\r
+ },\r
+\r
+ // merge the whole transformation chain into one matrix and returns it\r
+ matrixify: function () {\r
+ var matrix = (this.attr('transform') || '')\r
+ // split transformations\r
+ .split(SVG.regex.transforms).slice(0, -1).map(function (str) {\r
+ // generate key => value pairs\r
+ var kv = str.trim().split('(')\r
+ return [kv[0],\r
+ kv[1].split(SVG.regex.delimiter)\r
+ .map(function (str) { return parseFloat(str) })\r
+ ]\r
+ })\r
+ .reverse()\r
+ // merge every transformation into one matrix\r
+ .reduce(function (matrix, transform) {\r
+ if (transform[0] === 'matrix') {\r
+ return matrix.lmultiply(arrayToMatrix(transform[1]))\r
+ }\r
+ return matrix[transform[0]].apply(matrix, transform[1])\r
+ }, new SVG.Matrix())\r
+\r
+ return matrix\r
+ },\r
+\r
+ // add an element to another parent without changing the visual representation on the screen\r
+ toParent: function (parent) {\r
+ if (this === parent) return this\r
+ var ctm = this.screenCTM()\r
+ var pCtm = parent.screenCTM().inverse()\r
+\r
+ this.addTo(parent).untransform().transform(pCtm.multiply(ctm))\r
+\r
+ return this\r
+ },\r
+\r
+ // same as above with parent equals root-svg\r
+ toDoc: function () {\r
+ return this.toParent(this.doc())\r
+ }\r
+})\r
+\r
+SVG.extend(SVG.Element, {\r
+\r
+ // Add transformations\r
+ transform: function (o, relative) {\r
+ // Act as a getter if no object was passed\r
+ if (o == null || typeof o === 'string') {\r
+ var decomposed = new SVG.Matrix(this).decompose()\r
+ return decomposed[o] || decomposed\r
+ }\r
+\r
+ // Set the origin according to the defined transform\r
+ o.origin = getOrigin (o, this)\r
+\r
+ // The user can pass a boolean, an SVG.Element or an SVG.Matrix or nothing\r
+ var cleanRelative = relative === true ? this : (relative || false)\r
+ var result = new SVG.Matrix(cleanRelative).transform(o)\r
+ return this.attr('transform', result)\r
+ }\r
+})\r
+\r
+SVG.extend(SVG.Timeline, {\r
+ transform: function (o, relative, affine) {\r
+\r
+ // // get target in case of the fx module, otherwise reference this\r
+ // var target = this.target()\r
+ // , matrix, bbox\r
+ //\r
+ // // act as a getter\r
+ // if (typeof o !== 'object') {\r
+ // // get current matrix\r
+ // matrix = new SVG.Matrix(target).extract()\r
+ //\r
+ // return typeof o === 'string' ? matrix[o] : matrix\r
+ // }\r
+ //\r
+ // // ensure relative flag\r
+ // relative = !!relative || !!o.relative\r
+ //\r
+ // // act on matrix\r
+ // if (o.a != null) {\r
+ // matrix = new SVG.Matrix(o)\r
+ //\r
+ // // act on rotation\r
+ // } else if (o.rotation != null) {\r
+ // // ensure centre point\r
+ // ensureCentre(o, target)\r
+ //\r
+ // // apply transformation\r
+ // matrix = new SVG.Rotate(o.rotation, o.cx, o.cy)\r
+ //\r
+ // // act on scale\r
+ // } else if (o.scale != null || o.scaleX != null || o.scaleY != null) {\r
+ // // ensure centre point\r
+ // ensureCentre(o, target)\r
+ //\r
+ // // ensure scale values on both axes\r
+ // o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1\r
+ // o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1\r
+ //\r
+ // matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy)\r
+ //\r
+ // // act on skew\r
+ // } else if (o.skewX != null || o.skewY != null) {\r
+ // // ensure centre point\r
+ // ensureCentre(o, target)\r
+ //\r
+ // // ensure skew values on both axes\r
+ // o.skewX = o.skewX != null ? o.skewX : 0\r
+ // o.skewY = o.skewY != null ? o.skewY : 0\r
+ //\r
+ // matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy)\r
+ //\r
+ // // act on flip\r
+ // } else if (o.flip) {\r
+ // if(o.flip == 'x' || o.flip == 'y') {\r
+ // o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset\r
+ // } else {\r
+ // if(o.offset == null) {\r
+ // bbox = target.bbox()\r
+ // o.flip = bbox.cx\r
+ // o.offset = bbox.cy\r
+ // } else {\r
+ // o.flip = o.offset\r
+ // }\r
+ // }\r
+ //\r
+ // matrix = new SVG.Matrix().flip(o.flip, o.offset)\r
+ //\r
+ // // act on translate\r
+ // } else if (o.x != null || o.y != null) {\r
+ // matrix = new SVG.Translate(o.x, o.y)\r
+ // }\r
+ //\r
+ // if(!matrix) return this\r
+ //\r
+ // matrix.relative = relative\r
+ //\r
+ // this.last().transforms.push(matrix)\r
+ //\r
+ // return this._callStart()\r
+ // }\r
+ // // ensure scale values on both axes\r
+ // o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1\r
+ // o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1\r
+ //\r
+ // matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy)\r
+ //\r
+ // // act on skew\r
+ // } else if (o.skewX != null || o.skewY != null) {\r
+ // // ensure centre point\r
+ // ensureCentre(o, target)\r
+ //\r
+ // // ensure skew values on both axes\r
+ // o.skewX = o.skewX != null ? o.skewX : 0\r
+ // o.skewY = o.skewY != null ? o.skewY : 0\r
+ //\r
+ // matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy)\r
+ //\r
+ // // act on flip\r
+ // } else if (o.flip) {\r
+ // if (o.flip === 'x' || o.flip === 'y') {\r
+ // o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset\r
+ // } else {\r
+ // if (o.offset == null) {\r
+ // bbox = target.bbox()\r
+ // o.flip = bbox.cx\r
+ // o.offset = bbox.cy\r
+ // } else {\r
+ // o.flip = o.offset\r
+ // }\r
+ // }\r
+ //\r
+ // matrix = new SVG.Matrix().flip(o.flip, o.offset)\r
+ //\r
+ // // act on translate\r
+ // } else if (o.x != null || o.y != null) {\r
+ // matrix = new SVG.Translate(o.x, o.y)\r
+ // }\r
+ //\r
+ // if (!matrix) return this\r
+ //\r
+ // matrix.relative = relative\r
+ //\r
+ // this.last().transforms.push(matrix)\r
+ //\r
+ // return this._callStart()\r
+ }\r
+})\r
+
+/* global camelCase */\r
+\r
+SVG.extend(SVG.Element, {\r
+ // Dynamic style generator\r
+ css: function (s, v) {\r
+ var ret = {}\r
+ var t, i\r
+ if (arguments.length === 0) {\r
+ // get full style as object\r
+ this.node.style.cssText.split(/\s*;\s*/).filter(function (el) { return !!el.length }).forEach(function (el) {\r
+ t = el.split(/\s*:\s*/)\r
+ ret[t[0]] = t[1]\r
+ })\r
+ return ret\r
+ }\r
+\r
+ if (arguments.length < 2) {\r
+ // get style properties in the array\r
+ if (Array.isArray(s)) {\r
+ for (i = s.length; i--;) {\r
+ ret[camelCase(s[i])] = this.node.style[camelCase(s[i])]\r
+ }\r
+ return ret\r
+ }\r
+\r
+ // get style for property\r
+ if (typeof s === 'string') {\r
+ return this.node.style[camelCase(s)]\r
+ }\r
+\r
+ // set styles in object\r
+ if (typeof s === 'object') {\r
+ for (i in s) {\r
+ // set empty string if null/undefined/'' was given\r
+ this.node.style[camelCase(i)] = (s[i] == null || SVG.regex.isBlank.test(s[i])) ? '' : s[i]\r
+ }\r
+ }\r
+ }\r
+\r
+ // set style for property\r
+ if (arguments.length === 2) {\r
+ this.node.style[camelCase(s)] = (v == null || SVG.regex.isBlank.test(v)) ? '' : v\r
+ }\r
+\r
+ return this\r
+ }\r
+})\r
+
+/* global createElement */\r
+\r
+SVG.Parent = SVG.invent({\r
+ // Initialize node\r
+ create: function (node) {\r
+ SVG.Element.call(this, node)\r
+ },\r
+\r
+ // Inherit from\r
+ inherit: SVG.Element,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Returns all child elements\r
+ children: function () {\r
+ return SVG.utils.map(this.node.children, function (node) {\r
+ return SVG.adopt(node)\r
+ })\r
+ },\r
+ // Add given element at a position\r
+ add: function (element, i) {\r
+ element = createElement(element)\r
+\r
+ if (element.node !== this.node.children[i]) {\r
+ this.node.insertBefore(element.node, this.node.children[i] || null)\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Basically does the same as `add()` but returns the added element instead\r
+ put: function (element, i) {\r
+ this.add(element, i)\r
+ return element.instance || element\r
+ },\r
+ // Checks if the given element is a child\r
+ has: function (element) {\r
+ return this.index(element) >= 0\r
+ },\r
+ // Gets index of given element\r
+ index: function (element) {\r
+ return [].slice.call(this.node.children).indexOf(element.node)\r
+ },\r
+ // Get a element at the given index\r
+ get: function (i) {\r
+ return SVG.adopt(this.node.children[i])\r
+ },\r
+ // Get first child\r
+ first: function () {\r
+ return this.get(0)\r
+ },\r
+ // Get the last child\r
+ last: function () {\r
+ return this.get(this.node.children.length - 1)\r
+ },\r
+ // Iterates over all children and invokes a given block\r
+ each: function (block, deep) {\r
+ var children = this.children()\r
+ var i, il\r
+\r
+ for (i = 0, il = children.length; i < il; i++) {\r
+ if (children[i] instanceof SVG.Element) {\r
+ block.apply(children[i], [i, children])\r
+ }\r
+\r
+ if (deep && (children[i] instanceof SVG.Parent)) {\r
+ children[i].each(block, deep)\r
+ }\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Remove a given child\r
+ removeElement: function (element) {\r
+ this.node.removeChild(element.node)\r
+\r
+ return this\r
+ },\r
+ // Remove all elements in this container\r
+ clear: function () {\r
+ // remove children\r
+ while (this.node.hasChildNodes()) {\r
+ this.node.removeChild(this.node.lastChild)\r
+ }\r
+\r
+ // remove defs reference\r
+ delete this._defs\r
+\r
+ return this\r
+ }\r
+ }\r
+\r
+})\r
+
+SVG.extend(SVG.Parent, {\r
+ flatten: function (parent) {\r
+ // flattens is only possible for nested svgs and groups\r
+ if (!(this instanceof SVG.G || this instanceof SVG.Doc)) {\r
+ return this\r
+ }\r
+\r
+ parent = parent || (this instanceof SVG.Doc && this.isRoot() ? this : this.parent(SVG.Parent))\r
+\r
+ this.each(function () {\r
+ if (this instanceof SVG.Defs) return this\r
+ if (this instanceof SVG.Parent) return this.flatten(parent)\r
+ return this.toParent(parent)\r
+ })\r
+\r
+ // we need this so that SVG.Doc does not get removed\r
+ this.node.firstElementChild || this.remove()\r
+\r
+ return this\r
+ },\r
+ ungroup: function (parent) {\r
+ // ungroup is only possible for nested svgs and groups\r
+ if (!(this instanceof SVG.G || (this instanceof SVG.Doc && !this.isRoot()))) {\r
+ return this\r
+ }\r
+\r
+ parent = parent || this.parent(SVG.Parent)\r
+\r
+ this.each(function () {\r
+ return this.toParent(parent)\r
+ })\r
+\r
+ // we need this so that SVG.Doc does not get removed\r
+ this.remove()\r
+\r
+ return this\r
+ }\r
+})\r
+
+SVG.Container = SVG.invent({\r
+ // Initialize node\r
+ create: function (node) {\r
+ SVG.Element.call(this, node)\r
+ },\r
+\r
+ // Inherit from\r
+ inherit: SVG.Parent\r
+})\r
+
+SVG.Defs = SVG.invent({\r
+ // Initialize node\r
+ create: 'defs',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container\r
+})\r
+
+SVG.G = SVG.invent({\r
+ // Initialize node\r
+ create: 'g',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create a group element\r
+ group: function () {\r
+ return this.put(new SVG.G())\r
+ }\r
+ }\r
+})\r
+
+// ### This module adds backward / forward functionality to elements.\r
+\r
+//\r
+SVG.extend(SVG.Element, {\r
+ // Get all siblings, including myself\r
+ siblings: function () {\r
+ return this.parent().children()\r
+ },\r
+\r
+ // Get the curent position siblings\r
+ position: function () {\r
+ return this.parent().index(this)\r
+ },\r
+\r
+ // Get the next element (will return null if there is none)\r
+ next: function () {\r
+ return this.siblings()[this.position() + 1]\r
+ },\r
+\r
+ // Get the next element (will return null if there is none)\r
+ prev: function () {\r
+ return this.siblings()[this.position() - 1]\r
+ },\r
+\r
+ // Send given element one step forward\r
+ forward: function () {\r
+ var i = this.position() + 1\r
+ var p = this.parent()\r
+\r
+ // move node one step forward\r
+ p.removeElement(this).add(this, i)\r
+\r
+ // make sure defs node is always at the top\r
+ if (p instanceof SVG.Doc) {\r
+ p.node.appendChild(p.defs().node)\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // Send given element one step backward\r
+ backward: function () {\r
+ var i = this.position()\r
+\r
+ if (i > 0) {\r
+ this.parent().removeElement(this).add(this, i - 1)\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // Send given element all the way to the front\r
+ front: function () {\r
+ var p = this.parent()\r
+\r
+ // Move node forward\r
+ p.node.appendChild(this.node)\r
+\r
+ // Make sure defs node is always at the top\r
+ if (p instanceof SVG.Doc) {\r
+ p.node.appendChild(p.defs().node)\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // Send given element all the way to the back\r
+ back: function () {\r
+ if (this.position() > 0) {\r
+ this.parent().removeElement(this).add(this, 0)\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // Inserts a given element before the targeted element\r
+ before: function (element) {\r
+ element.remove()\r
+\r
+ var i = this.position()\r
+\r
+ this.parent().add(element, i)\r
+\r
+ return this\r
+ },\r
+\r
+ // Insters a given element after the targeted element\r
+ after: function (element) {\r
+ element.remove()\r
+\r
+ var i = this.position()\r
+\r
+ this.parent().add(element, i + 1)\r
+\r
+ return this\r
+ }\r
+})\r
+
+SVG.Mask = SVG.invent({\r
+ // Initialize node\r
+ create: 'mask',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Unmask all masked elements and remove itself\r
+ remove: function () {\r
+ // unmask all targets\r
+ this.targets().forEach(function (el) {\r
+ el.unmask()\r
+ })\r
+\r
+ // remove mask from parent\r
+ return SVG.Element.prototype.remove.call(this)\r
+ },\r
+\r
+ targets: function () {\r
+ return SVG.select('svg [mask*="' + this.id() + '"]')\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create masking element\r
+ mask: function () {\r
+ return this.defs().put(new SVG.Mask())\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend(SVG.Element, {\r
+ // Distribute mask to svg element\r
+ maskWith: function (element) {\r
+ // use given mask or create a new one\r
+ var masker = element instanceof SVG.Mask ? element : this.parent().mask().add(element)\r
+\r
+ // apply mask\r
+ return this.attr('mask', 'url("#' + masker.id() + '")')\r
+ },\r
+ // Unmask element\r
+ unmask: function () {\r
+ return this.attr('mask', null)\r
+ },\r
+ masker: function () {\r
+ return this.reference('mask')\r
+ }\r
+})\r
+
+SVG.ClipPath = SVG.invent({\r
+ // Initialize node\r
+ create: 'clipPath',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Unclip all clipped elements and remove itself\r
+ remove: function () {\r
+ // unclip all targets\r
+ this.targets().forEach(function (el) {\r
+ el.unclip()\r
+ })\r
+\r
+ // remove clipPath from parent\r
+ return SVG.Element.prototype.remove.call(this)\r
+ },\r
+\r
+ targets: function () {\r
+ return SVG.select('svg [clip-path*="' + this.id() + '"]')\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create clipping element\r
+ clip: function () {\r
+ return this.defs().put(new SVG.ClipPath())\r
+ }\r
+ }\r
+})\r
+\r
+//\r
+SVG.extend(SVG.Element, {\r
+ // Distribute clipPath to svg element\r
+ clipWith: function (element) {\r
+ // use given clip or create a new one\r
+ var clipper = element instanceof SVG.ClipPath ? element : this.parent().clip().add(element)\r
+\r
+ // apply mask\r
+ return this.attr('clip-path', 'url("#' + clipper.id() + '")')\r
+ },\r
+ // Unclip element\r
+ unclip: function () {\r
+ return this.attr('clip-path', null)\r
+ },\r
+ clipper: function () {\r
+ return this.reference('clip-path')\r
+ }\r
+\r
+})\r
+
+SVG.Gradient = SVG.invent({\r
+ // Initialize node\r
+ create: function (type) {\r
+ SVG.Element.call(this, typeof type === 'object' ? type : SVG.create(type + 'Gradient'))\r
+ },\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Add a color stop\r
+ stop: function (offset, color, opacity) {\r
+ return this.put(new SVG.Stop()).update(offset, color, opacity)\r
+ },\r
+ // Update gradient\r
+ update: function (block) {\r
+ // remove all stops\r
+ this.clear()\r
+\r
+ // invoke passed block\r
+ if (typeof block === 'function') {\r
+ block.call(this, this)\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Return the fill id\r
+ url: function () {\r
+ return 'url(#' + this.id() + ')'\r
+ },\r
+ // Alias string convertion to fill\r
+ toString: function () {\r
+ return this.url()\r
+ },\r
+ // custom attr to handle transform\r
+ attr: function (a, b, c) {\r
+ if (a === 'transform') a = 'gradientTransform'\r
+ return SVG.Container.prototype.attr.call(this, a, b, c)\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create gradient element in defs\r
+ gradient: function (type, block) {\r
+ return this.defs().gradient(type, block)\r
+ }\r
+ }\r
+})\r
+\r
+// Add animatable methods to both gradient and fx module\r
+SVG.extend([SVG.Gradient, SVG.Timeline], {\r
+ // From position\r
+ from: function (x, y) {\r
+ return (this._target || this).type === 'radialGradient'\r
+ ? this.attr({ fx: new SVG.Number(x), fy: new SVG.Number(y) })\r
+ : this.attr({ x1: new SVG.Number(x), y1: new SVG.Number(y) })\r
+ },\r
+ // To position\r
+ to: function (x, y) {\r
+ return (this._target || this).type === 'radialGradient'\r
+ ? this.attr({ cx: new SVG.Number(x), cy: new SVG.Number(y) })\r
+ : this.attr({ x2: new SVG.Number(x), y2: new SVG.Number(y) })\r
+ }\r
+})\r
+\r
+// Base gradient generation\r
+SVG.extend(SVG.Defs, {\r
+ // define gradient\r
+ gradient: function (type, block) {\r
+ return this.put(new SVG.Gradient(type)).update(block)\r
+ }\r
+\r
+})\r
+\r
+SVG.Stop = SVG.invent({\r
+ // Initialize node\r
+ create: 'stop',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Element,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // add color stops\r
+ update: function (o) {\r
+ if (typeof o === 'number' || o instanceof SVG.Number) {\r
+ o = {\r
+ offset: arguments[0],\r
+ color: arguments[1],\r
+ opacity: arguments[2]\r
+ }\r
+ }\r
+\r
+ // set attributes\r
+ if (o.opacity != null) this.attr('stop-opacity', o.opacity)\r
+ if (o.color != null) this.attr('stop-color', o.color)\r
+ if (o.offset != null) this.attr('offset', new SVG.Number(o.offset))\r
+\r
+ return this\r
+ }\r
+ }\r
+})\r
+
+SVG.Pattern = SVG.invent({\r
+ // Initialize node\r
+ create: 'pattern',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Return the fill id\r
+ url: function () {\r
+ return 'url(#' + this.id() + ')'\r
+ },\r
+ // Update pattern by rebuilding\r
+ update: function (block) {\r
+ // remove content\r
+ this.clear()\r
+\r
+ // invoke passed block\r
+ if (typeof block === 'function') {\r
+ block.call(this, this)\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Alias string convertion to fill\r
+ toString: function () {\r
+ return this.url()\r
+ },\r
+ // custom attr to handle transform\r
+ attr: function (a, b, c) {\r
+ if (a === 'transform') a = 'patternTransform'\r
+ return SVG.Container.prototype.attr.call(this, a, b, c)\r
+ }\r
+\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create pattern element in defs\r
+ pattern: function (width, height, block) {\r
+ return this.defs().pattern(width, height, block)\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend(SVG.Defs, {\r
+ // Define gradient\r
+ pattern: function (width, height, block) {\r
+ return this.put(new SVG.Pattern()).update(block).attr({\r
+ x: 0,\r
+ y: 0,\r
+ width: width,\r
+ height: height,\r
+ patternUnits: 'userSpaceOnUse'\r
+ })\r
+ }\r
+\r
+})\r
+
+SVG.Doc = SVG.invent({\r
+ // Initialize node\r
+ create: function (node) {\r
+ SVG.Element.call(this, node || SVG.create('svg'))\r
+\r
+ // set svg element attributes and ensure defs node\r
+ this.namespace()\r
+ },\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ isRoot: function () {\r
+ return !this.node.parentNode || !(this.node.parentNode instanceof window.SVGElement) || this.node.parentNode.nodeName === '#document'\r
+ },\r
+ // Check if this is a root svg. If not, call docs from this element\r
+ doc: function () {\r
+ if (this.isRoot()) return this\r
+ return SVG.Element.prototype.doc.call(this)\r
+ },\r
+ // Add namespaces\r
+ namespace: function () {\r
+ if (!this.isRoot()) return this.doc().namespace()\r
+ return this\r
+ .attr({ xmlns: SVG.ns, version: '1.1' })\r
+ .attr('xmlns:xlink', SVG.xlink, SVG.xmlns)\r
+ .attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns)\r
+ },\r
+ // Creates and returns defs element\r
+ defs: function () {\r
+ if (!this.isRoot()) return this.doc().defs()\r
+ return SVG.adopt(this.node.getElementsByTagName('defs')[0]) || this.put(new SVG.Defs())\r
+ },\r
+ // custom parent method\r
+ parent: function (type) {\r
+ if (this.isRoot()) {\r
+ return this.node.parentNode.nodeName === '#document' ? null : this.node.parentNode\r
+ }\r
+\r
+ return SVG.Element.prototype.parent.call(this, type)\r
+ },\r
+ // Removes the doc from the DOM\r
+ remove: function () {\r
+ if (!this.isRoot()) {\r
+ return SVG.Element.prototype.remove.call(this)\r
+ }\r
+\r
+ if (this.parent()) {\r
+ this.parent().removeChild(this.node)\r
+ }\r
+\r
+ return this\r
+ },\r
+ clear: function () {\r
+ // remove children\r
+ while (this.node.hasChildNodes()) {\r
+ this.node.removeChild(this.node.lastChild)\r
+ }\r
+ return this\r
+ }\r
+ },\r
+ construct: {\r
+ // Create nested svg document\r
+ nested: function () {\r
+ return this.put(new SVG.Doc())\r
+ }\r
+ }\r
+})\r
+
+\r
+SVG.Shape = SVG.invent({\r
+ // Initialize node\r
+ create: function (node) {\r
+ SVG.Element.call(this, node)\r
+ },\r
+\r
+ // Inherit from\r
+ inherit: SVG.Element\r
+})\r
+
+\r
+SVG.Bare = SVG.invent({\r
+ // Initialize\r
+ create: function (element, inherit) {\r
+ // construct element\r
+ SVG.Element.call(this, SVG.create(element))\r
+\r
+ // inherit custom methods\r
+ if (inherit) {\r
+ for (var method in inherit.prototype) {\r
+ if (typeof inherit.prototype[method] === 'function') {\r
+ this[method] = inherit.prototype[method]\r
+ }\r
+ }\r
+ }\r
+ },\r
+\r
+ // Inherit from\r
+ inherit: SVG.Element,\r
+\r
+ // Add methods\r
+ extend: {\r
+ // Insert some plain text\r
+ words: function (text) {\r
+ // remove contents\r
+ while (this.node.hasChildNodes()) {\r
+ this.node.removeChild(this.node.lastChild)\r
+ }\r
+\r
+ // create text node\r
+ this.node.appendChild(document.createTextNode(text))\r
+\r
+ return this\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend(SVG.Parent, {\r
+ // Create an element that is not described by SVG.js\r
+ element: function (element, inherit) {\r
+ return this.put(new SVG.Bare(element, inherit))\r
+ }\r
+})\r
+
+\r
+SVG.Symbol = SVG.invent({\r
+ // Initialize node\r
+ create: 'symbol',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ construct: {\r
+ // create symbol\r
+ symbol: function () {\r
+ return this.put(new SVG.Symbol())\r
+ }\r
+ }\r
+})\r
+
+\r
+SVG.Use = SVG.invent({\r
+ // Initialize node\r
+ create: 'use',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Use element as a reference\r
+ element: function (element, file) {\r
+ // Set lined element\r
+ return this.attr('href', (file || '') + '#' + element, SVG.xlink)\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create a use element\r
+ use: function (element, file) {\r
+ return this.put(new SVG.Use()).element(element, file)\r
+ }\r
+ }\r
+})\r
+
+\r
+SVG.Rect = SVG.invent({\r
+ // Initialize node\r
+ create: 'rect',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create a rect element\r
+ rect: function (width, height) {\r
+ return this.put(new SVG.Rect()).size(width, height)\r
+ }\r
+ }\r
+})\r
+
+/* global proportionalSize */\r
+\r
+SVG.Circle = SVG.invent({\r
+ // Initialize node\r
+ create: 'circle',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create circle element, based on ellipse\r
+ circle: function (size) {\r
+ return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0)\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend([SVG.Circle, SVG.Timeline], {\r
+ // Radius x value\r
+ rx: function (rx) {\r
+ return this.attr('r', rx)\r
+ },\r
+ // Alias radius x value\r
+ ry: function (ry) {\r
+ return this.rx(ry)\r
+ }\r
+})\r
+\r
+SVG.Ellipse = SVG.invent({\r
+ // Initialize node\r
+ create: 'ellipse',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create an ellipse\r
+ ellipse: function (width, height) {\r
+ return this.put(new SVG.Ellipse()).size(width, height).move(0, 0)\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend([SVG.Ellipse, SVG.Rect, SVG.Timeline], {\r
+ // Radius x value\r
+ rx: function (rx) {\r
+ return this.attr('rx', rx)\r
+ },\r
+ // Radius y value\r
+ ry: function (ry) {\r
+ return this.attr('ry', ry)\r
+ }\r
+})\r
+\r
+// Add common method\r
+SVG.extend([SVG.Circle, SVG.Ellipse], {\r
+ // Move over x-axis\r
+ x: function (x) {\r
+ return x == null ? this.cx() - this.rx() : this.cx(x + this.rx())\r
+ },\r
+ // Move over y-axis\r
+ y: function (y) {\r
+ return y == null ? this.cy() - this.ry() : this.cy(y + this.ry())\r
+ },\r
+ // Move by center over x-axis\r
+ cx: function (x) {\r
+ return x == null ? this.attr('cx') : this.attr('cx', x)\r
+ },\r
+ // Move by center over y-axis\r
+ cy: function (y) {\r
+ return y == null ? this.attr('cy') : this.attr('cy', y)\r
+ },\r
+ // Set width of element\r
+ width: function (width) {\r
+ return width == null ? this.rx() * 2 : this.rx(new SVG.Number(width).divide(2))\r
+ },\r
+ // Set height of element\r
+ height: function (height) {\r
+ return height == null ? this.ry() * 2 : this.ry(new SVG.Number(height).divide(2))\r
+ },\r
+ // Custom size function\r
+ size: function (width, height) {\r
+ var p = proportionalSize(this, width, height)\r
+\r
+ return this\r
+ .rx(new SVG.Number(p.width).divide(2))\r
+ .ry(new SVG.Number(p.height).divide(2))\r
+ }\r
+})\r
+
+/* global proportionalSize */\r
+\r
+SVG.Line = SVG.invent({\r
+ // Initialize node\r
+ create: 'line',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Get array\r
+ array: function () {\r
+ return new SVG.PointArray([\r
+ [ this.attr('x1'), this.attr('y1') ],\r
+ [ this.attr('x2'), this.attr('y2') ]\r
+ ])\r
+ },\r
+\r
+ // Overwrite native plot() method\r
+ plot: function (x1, y1, x2, y2) {\r
+ if (x1 == null) {\r
+ return this.array()\r
+ } else if (typeof y1 !== 'undefined') {\r
+ x1 = { x1: x1, y1: y1, x2: x2, y2: y2 }\r
+ } else {\r
+ x1 = new SVG.PointArray(x1).toLine()\r
+ }\r
+\r
+ return this.attr(x1)\r
+ },\r
+\r
+ // Move by left top corner\r
+ move: function (x, y) {\r
+ return this.attr(this.array().move(x, y).toLine())\r
+ },\r
+\r
+ // Set element size to given width and height\r
+ size: function (width, height) {\r
+ var p = proportionalSize(this, width, height)\r
+ return this.attr(this.array().size(p.width, p.height).toLine())\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create a line element\r
+ line: function (x1, y1, x2, y2) {\r
+ // make sure plot is called as a setter\r
+ // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray\r
+ return SVG.Line.prototype.plot.apply(\r
+ this.put(new SVG.Line())\r
+ , x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]\r
+ )\r
+ }\r
+ }\r
+})\r
+
+/* global proportionalSize */\r
+\r
+SVG.Polyline = SVG.invent({\r
+ // Initialize node\r
+ create: 'polyline',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create a wrapped polyline element\r
+ polyline: function (p) {\r
+ // make sure plot is called as a setter\r
+ return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray())\r
+ }\r
+ }\r
+})\r
+\r
+SVG.Polygon = SVG.invent({\r
+ // Initialize node\r
+ create: 'polygon',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create a wrapped polygon element\r
+ polygon: function (p) {\r
+ // make sure plot is called as a setter\r
+ return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray())\r
+ }\r
+ }\r
+})\r
+\r
+// Add polygon-specific functions\r
+SVG.extend([SVG.Polyline, SVG.Polygon], {\r
+ // Get array\r
+ array: function () {\r
+ return this._array || (this._array = new SVG.PointArray(this.attr('points')))\r
+ },\r
+\r
+ // Plot new path\r
+ plot: function (p) {\r
+ return (p == null) ? this.array()\r
+ : this.clear().attr('points', typeof p === 'string' ? p\r
+ : (this._array = new SVG.PointArray(p)))\r
+ },\r
+\r
+ // Clear array cache\r
+ clear: function () {\r
+ delete this._array\r
+ return this\r
+ },\r
+\r
+ // Move by left top corner\r
+ move: function (x, y) {\r
+ return this.attr('points', this.array().move(x, y))\r
+ },\r
+\r
+ // Set element size to given width and height\r
+ size: function (width, height) {\r
+ var p = proportionalSize(this, width, height)\r
+ return this.attr('points', this.array().size(p.width, p.height))\r
+ }\r
+})\r
+
+// unify all point to point elements\r
+SVG.extend([SVG.Line, SVG.Polyline, SVG.Polygon], {\r
+ // Define morphable array\r
+ MorphArray: SVG.PointArray,\r
+ // Move by left top corner over x-axis\r
+ x: function (x) {\r
+ return x == null ? this.bbox().x : this.move(x, this.bbox().y)\r
+ },\r
+ // Move by left top corner over y-axis\r
+ y: function (y) {\r
+ return y == null ? this.bbox().y : this.move(this.bbox().x, y)\r
+ },\r
+ // Set width of element\r
+ width: function (width) {\r
+ var b = this.bbox()\r
+\r
+ return width == null ? b.width : this.size(width, b.height)\r
+ },\r
+ // Set height of element\r
+ height: function (height) {\r
+ var b = this.bbox()\r
+\r
+ return height == null ? b.height : this.size(b.width, height)\r
+ }\r
+})\r
+
+/* global proportionalSize */\r
+\r
+SVG.Path = SVG.invent({\r
+ // Initialize node\r
+ create: 'path',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Define morphable array\r
+ MorphArray: SVG.PathArray,\r
+ // Get array\r
+ array: function () {\r
+ return this._array || (this._array = new SVG.PathArray(this.attr('d')))\r
+ },\r
+ // Plot new path\r
+ plot: function (d) {\r
+ return (d == null) ? this.array()\r
+ : this.clear().attr('d', typeof d === 'string' ? d : (this._array = new SVG.PathArray(d)))\r
+ },\r
+ // Clear array cache\r
+ clear: function () {\r
+ delete this._array\r
+ return this\r
+ },\r
+ // Move by left top corner\r
+ move: function (x, y) {\r
+ return this.attr('d', this.array().move(x, y))\r
+ },\r
+ // Move by left top corner over x-axis\r
+ x: function (x) {\r
+ return x == null ? this.bbox().x : this.move(x, this.bbox().y)\r
+ },\r
+ // Move by left top corner over y-axis\r
+ y: function (y) {\r
+ return y == null ? this.bbox().y : this.move(this.bbox().x, y)\r
+ },\r
+ // Set element size to given width and height\r
+ size: function (width, height) {\r
+ var p = proportionalSize(this, width, height)\r
+ return this.attr('d', this.array().size(p.width, p.height))\r
+ },\r
+ // Set width of element\r
+ width: function (width) {\r
+ return width == null ? this.bbox().width : this.size(width, this.bbox().height)\r
+ },\r
+ // Set height of element\r
+ height: function (height) {\r
+ return height == null ? this.bbox().height : this.size(this.bbox().width, height)\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create a wrapped path element\r
+ path: function (d) {\r
+ // make sure plot is called as a setter\r
+ return this.put(new SVG.Path()).plot(d || new SVG.PathArray())\r
+ }\r
+ }\r
+})\r
+
+SVG.Image = SVG.invent({\r
+ // Initialize node\r
+ create: 'image',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Shape,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // (re)load image\r
+ load: function (url, callback) {\r
+ if (!url) return this\r
+\r
+ var img = new window.Image()\r
+\r
+ SVG.on(img, 'load', function (e) {\r
+ var p = this.parent(SVG.Pattern)\r
+\r
+ // ensure image size\r
+ if (this.width() === 0 && this.height() === 0) {\r
+ this.size(img.width, img.height)\r
+ }\r
+\r
+ if (p instanceof SVG.Pattern) {\r
+ // ensure pattern size if not set\r
+ if (p.width() === 0 && p.height() === 0) {\r
+ p.size(this.width(), this.height())\r
+ }\r
+ }\r
+\r
+ if (typeof callback === 'function') {\r
+ callback.call(this, {\r
+ width: img.width,\r
+ height: img.height,\r
+ ratio: img.width / img.height,\r
+ url: url\r
+ })\r
+ }\r
+ }, this)\r
+\r
+ SVG.on(img, 'load error', function () {\r
+ // dont forget to unbind memory leaking events\r
+ SVG.off(img)\r
+ })\r
+\r
+ return this.attr('href', (img.src = url), SVG.xlink)\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // create image element, load image and set its size\r
+ image: function (source, callback) {\r
+ return this.put(new SVG.Image()).size(0, 0).load(source, callback)\r
+ }\r
+ }\r
+})\r
+
+SVG.Text = SVG.invent({\r
+ // Initialize node\r
+ create: function (node) {\r
+ SVG.Element.call(this, node || SVG.create('text'))\r
+ this.dom.leading = new SVG.Number(1.3) // store leading value for rebuilding\r
+ this._rebuild = true // enable automatic updating of dy values\r
+ this._build = false // disable build mode for adding multiple lines\r
+\r
+ // set default font\r
+ this.attr('font-family', SVG.defaults.attrs['font-family'])\r
+ },\r
+\r
+ // Inherit from\r
+ inherit: SVG.Parent,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Move over x-axis\r
+ x: function (x) {\r
+ // act as getter\r
+ if (x == null) {\r
+ return this.attr('x')\r
+ }\r
+\r
+ return this.attr('x', x)\r
+ },\r
+ // Move over y-axis\r
+ y: function (y) {\r
+ var oy = this.attr('y')\r
+ var o = typeof oy === 'number' ? oy - this.bbox().y : 0\r
+\r
+ // act as getter\r
+ if (y == null) {\r
+ return typeof oy === 'number' ? oy - o : oy\r
+ }\r
+\r
+ return this.attr('y', typeof y === 'number' ? y + o : y)\r
+ },\r
+ // Move center over x-axis\r
+ cx: function (x) {\r
+ return x == null ? this.bbox().cx : this.x(x - this.bbox().width / 2)\r
+ },\r
+ // Move center over y-axis\r
+ cy: function (y) {\r
+ return y == null ? this.bbox().cy : this.y(y - this.bbox().height / 2)\r
+ },\r
+ // Set the text content\r
+ text: function (text) {\r
+ // act as getter\r
+ if (text === undefined) {\r
+ var children = this.node.childNodes\r
+ var firstLine = 0\r
+ text = ''\r
+\r
+ for (var i = 0, len = children.length; i < len; ++i) {\r
+ // skip textPaths - they are no lines\r
+ if (children[i].nodeName === 'textPath') {\r
+ if (i === 0) firstLine = 1\r
+ continue\r
+ }\r
+\r
+ // add newline if its not the first child and newLined is set to true\r
+ if (i !== firstLine && children[i].nodeType !== 3 && SVG.adopt(children[i]).dom.newLined === true) {\r
+ text += '\n'\r
+ }\r
+\r
+ // add content of this node\r
+ text += children[i].textContent\r
+ }\r
+\r
+ return text\r
+ }\r
+\r
+ // remove existing content\r
+ this.clear().build(true)\r
+\r
+ if (typeof text === 'function') {\r
+ // call block\r
+ text.call(this, this)\r
+ } else {\r
+ // store text and make sure text is not blank\r
+ text = text.split('\n')\r
+\r
+ // build new lines\r
+ for (var j = 0, jl = text.length; j < jl; j++) {\r
+ this.tspan(text[j]).newLine()\r
+ }\r
+ }\r
+\r
+ // disable build mode and rebuild lines\r
+ return this.build(false).rebuild()\r
+ },\r
+ // Set / get leading\r
+ leading: function (value) {\r
+ // act as getter\r
+ if (value == null) {\r
+ return this.dom.leading\r
+ }\r
+\r
+ // act as setter\r
+ this.dom.leading = new SVG.Number(value)\r
+\r
+ return this.rebuild()\r
+ },\r
+ // Rebuild appearance type\r
+ rebuild: function (rebuild) {\r
+ // store new rebuild flag if given\r
+ if (typeof rebuild === 'boolean') {\r
+ this._rebuild = rebuild\r
+ }\r
+\r
+ // define position of all lines\r
+ if (this._rebuild) {\r
+ var self = this\r
+ var blankLineOffset = 0\r
+ var dy = this.dom.leading * new SVG.Number(this.attr('font-size'))\r
+\r
+ this.each(function () {\r
+ if (this.dom.newLined) {\r
+ this.attr('x', self.attr('x'))\r
+\r
+ if (this.text() === '\n') {\r
+ blankLineOffset += dy\r
+ } else {\r
+ this.attr('dy', dy + blankLineOffset)\r
+ blankLineOffset = 0\r
+ }\r
+ }\r
+ })\r
+\r
+ this.fire('rebuild')\r
+ }\r
+\r
+ return this\r
+ },\r
+ // Enable / disable build mode\r
+ build: function (build) {\r
+ this._build = !!build\r
+ return this\r
+ },\r
+ // overwrite method from parent to set data properly\r
+ setData: function (o) {\r
+ this.dom = o\r
+ this.dom.leading = new SVG.Number(o.leading || 1.3)\r
+ return this\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create text element\r
+ text: function (text) {\r
+ return this.put(new SVG.Text()).text(text)\r
+ },\r
+ // Create plain text element\r
+ plain: function (text) {\r
+ return this.put(new SVG.Text()).plain(text)\r
+ }\r
+ }\r
+\r
+})\r
+\r
+SVG.Tspan = SVG.invent({\r
+ // Initialize node\r
+ create: 'tspan',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Parent,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Set text content\r
+ text: function (text) {\r
+ if (text == null) return this.node.textContent + (this.dom.newLined ? '\n' : '')\r
+\r
+ typeof text === 'function' ? text.call(this, this) : this.plain(text)\r
+\r
+ return this\r
+ },\r
+ // Shortcut dx\r
+ dx: function (dx) {\r
+ return this.attr('dx', dx)\r
+ },\r
+ // Shortcut dy\r
+ dy: function (dy) {\r
+ return this.attr('dy', dy)\r
+ },\r
+ // Create new line\r
+ newLine: function () {\r
+ // fetch text parent\r
+ var t = this.parent(SVG.Text)\r
+\r
+ // mark new line\r
+ this.dom.newLined = true\r
+\r
+ // apply new position\r
+ return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x())\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend([SVG.Text, SVG.Tspan], {\r
+ // Create plain text node\r
+ plain: function (text) {\r
+ // clear if build mode is disabled\r
+ if (this._build === false) {\r
+ this.clear()\r
+ }\r
+\r
+ // create text node\r
+ this.node.appendChild(document.createTextNode(text))\r
+\r
+ return this\r
+ },\r
+ // Create a tspan\r
+ tspan: function (text) {\r
+ var tspan = new SVG.Tspan()\r
+\r
+ // clear if build mode is disabled\r
+ if (!this._build) {\r
+ this.clear()\r
+ }\r
+\r
+ // add new tspan\r
+ this.node.appendChild(tspan.node)\r
+\r
+ return tspan.text(text)\r
+ },\r
+ // FIXME: Does this also work for textpath?\r
+ // Get length of text element\r
+ length: function () {\r
+ return this.node.getComputedTextLength()\r
+ }\r
+})\r
+
+SVG.TextPath = SVG.invent({\r
+ // Initialize node\r
+ create: 'textPath',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Text,\r
+\r
+ // Define parent class\r
+ parent: SVG.Parent,\r
+\r
+ // Add parent method\r
+ extend: {\r
+ MorphArray: SVG.PathArray,\r
+ // return the array of the path track element\r
+ array: function () {\r
+ var track = this.track()\r
+\r
+ return track ? track.array() : null\r
+ },\r
+ // Plot path if any\r
+ plot: function (d) {\r
+ var track = this.track()\r
+ var pathArray = null\r
+\r
+ if (track) {\r
+ pathArray = track.plot(d)\r
+ }\r
+\r
+ return (d == null) ? pathArray : this\r
+ },\r
+ // Get the path element\r
+ track: function () {\r
+ return this.reference('href')\r
+ }\r
+ },\r
+ construct: {\r
+ textPath: function (text, path) {\r
+ return this.defs().path(path).text(text).addTo(this)\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend([SVG.Text], {\r
+ // Create path for text to run on\r
+ path: function (track) {\r
+ var path = new SVG.TextPath()\r
+\r
+ // if d is a path, reuse it\r
+ if (!(track instanceof SVG.Path)) {\r
+ // create path element\r
+ track = this.doc().defs().path(track)\r
+ }\r
+\r
+ // link textPath to path and add content\r
+ path.attr('href', '#' + track, SVG.xlink)\r
+\r
+ // add textPath element as child node and return textPath\r
+ return this.put(path)\r
+ },\r
+ // Todo: make this plural?\r
+ // Get the textPath children\r
+ textPath: function () {\r
+ return this.select('textPath')\r
+ }\r
+})\r
+\r
+SVG.extend([SVG.Path], {\r
+ // creates a textPath from this path\r
+ text: function (text) {\r
+ if (text instanceof SVG.Text) {\r
+ var txt = text.text()\r
+ return text.clear().path(this).text(txt)\r
+ }\r
+ return this.parent().put(new SVG.Text()).path(this).text(text)\r
+ }\r
+ // TODO: Maybe add `targets` to get all textPaths associated with this path\r
+})\r
+
+SVG.A = SVG.invent({\r
+ // Initialize node\r
+ create: 'a',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Link url\r
+ to: function (url) {\r
+ return this.attr('href', url, SVG.xlink)\r
+ },\r
+ // Link target attribute\r
+ target: function (target) {\r
+ return this.attr('target', target)\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ // Create a hyperlink element\r
+ link: function (url) {\r
+ return this.put(new SVG.A()).to(url)\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend(SVG.Element, {\r
+ // Create a hyperlink element\r
+ linkTo: function (url) {\r
+ var link = new SVG.A()\r
+\r
+ if (typeof url === 'function') { url.call(link, link) } else {\r
+ link.to(url)\r
+ }\r
+\r
+ return this.parent().put(link).put(this)\r
+ }\r
+\r
+})\r
+
+SVG.Marker = SVG.invent({\r
+ // Initialize node\r
+ create: 'marker',\r
+\r
+ // Inherit from\r
+ inherit: SVG.Container,\r
+\r
+ // Add class methods\r
+ extend: {\r
+ // Set width of element\r
+ width: function (width) {\r
+ return this.attr('markerWidth', width)\r
+ },\r
+ // Set height of element\r
+ height: function (height) {\r
+ return this.attr('markerHeight', height)\r
+ },\r
+ // Set marker refX and refY\r
+ ref: function (x, y) {\r
+ return this.attr('refX', x).attr('refY', y)\r
+ },\r
+ // Update marker\r
+ update: function (block) {\r
+ // remove all content\r
+ this.clear()\r
+\r
+ // invoke passed block\r
+ if (typeof block === 'function') { block.call(this, this) }\r
+\r
+ return this\r
+ },\r
+ // Return the fill id\r
+ toString: function () {\r
+ return 'url(#' + this.id() + ')'\r
+ }\r
+ },\r
+\r
+ // Add parent method\r
+ construct: {\r
+ marker: function (width, height, block) {\r
+ // Create marker element in defs\r
+ return this.defs().marker(width, height, block)\r
+ }\r
+ }\r
+\r
+})\r
+\r
+SVG.extend(SVG.Defs, {\r
+ // Create marker\r
+ marker: function (width, height, block) {\r
+ // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\r
+ return this.put(new SVG.Marker())\r
+ .size(width, height)\r
+ .ref(width / 2, height / 2)\r
+ .viewbox(0, 0, width, height)\r
+ .attr('orient', 'auto')\r
+ .update(block)\r
+ }\r
+\r
+})\r
+\r
+SVG.extend([SVG.Line, SVG.Polyline, SVG.Polygon, SVG.Path], {\r
+ // Create and attach markers\r
+ marker: function (marker, width, height, block) {\r
+ var attr = ['marker']\r
+\r
+ // Build attribute name\r
+ if (marker !== 'all') attr.push(marker)\r
+ attr = attr.join('-')\r
+\r
+ // Set marker attribute\r
+ marker = arguments[1] instanceof SVG.Marker\r
+ ? arguments[1]\r
+ : this.doc().marker(width, height, block)\r
+\r
+ return this.attr(attr, marker)\r
+ }\r
+})\r
+
+// // Define list of available attributes for stroke and fill\r
+// var sugar = {\r
+// stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],\r
+// fill: ['color', 'opacity', 'rule'],\r
+// prefix: function (t, a) {\r
+// return a === 'color' ? t : t + '-' + a\r
+// }\r
+// }\r
+//\r
+// // Add sugar for fill and stroke\r
+// ;['fill', 'stroke'].forEach(function (m) {\r
+// var extension = {}\r
+// var i\r
+//\r
+// extension[m] = function (o) {\r
+// if (typeof o === 'undefined') {\r
+// return this\r
+// }\r
+// if (typeof o === 'string' || SVG.Color.isRgb(o) || (o && typeof o.fill === 'function')) {\r
+// this.attr(m, o)\r
+// } else {\r
+// // set all attributes from sugar.fill and sugar.stroke list\r
+// for (i = sugar[m].length - 1; i >= 0; i--) {\r
+// if (o[sugar[m][i]] != null) {\r
+// this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]])\r
+// }\r
+// }\r
+// }\r
+//\r
+// return this\r
+// }\r
+//\r
+// SVG.extend([SVG.Element, SVG.Timeline], extension)\r
+// })\r
+//\r
+// SVG.extend([SVG.Element, SVG.Timeline], {\r
+// // Let the user set the matrix directly\r
+// matrix: function (mat, b, c, d, e, f) {\r
+// // Act as a getter\r
+// if (mat == null) {\r
+// return new SVG.Matrix(this)\r
+// }\r
+//\r
+// // Act as a setter, the user can pass a matrix or a set of numbers\r
+// return this.attr('transform', new SVG.Matrix(mat, b, c, d, e, f))\r
+// },\r
+//\r
+// // Map rotation to transform\r
+// rotate: function (angle, cx, cy) {\r
+// return this.transform({rotate: angle, ox: cx, oy: cy}, true)\r
+// },\r
+//\r
+// // Map skew to transform\r
+// skew: function (x, y, cx, cy) {\r
+// return arguments.length === 1 || arguments.length === 3\r
+// ? this.transform({skew: x, ox: y, oy: cx}, true)\r
+// : this.transform({skew: [x, y], ox: cx, oy: cy}, true)\r
+// },\r
+//\r
+// shear: function (lam, cx, cy) {\r
+// return this.transform({shear: lam, ox: cx, oy: cy}, true)\r
+// },\r
+//\r
+// // Map scale to transform\r
+// scale: function (x, y, cx, cy) {\r
+// return arguments.length === 1 || arguments.length === 3\r
+// ? this.transform({ scale: x, ox: y, oy: cx }, true)\r
+// : this.transform({ scale: [x, y], ox: cx, oy: cy }, true)\r
+// },\r
+//\r
+// // Map translate to transform\r
+// translate: function (x, y) {\r
+// return this.transform({ translate: [x, y] }, true)\r
+// },\r
+//\r
+// // Map relative translations to transform\r
+// relative: function (x, y) {\r
+// return this.transform({ relative: [x, y] }, true)\r
+// },\r
+//\r
+// // Map flip to transform\r
+// flip: function (direction, around) {\r
+// var directionString = typeof direction === 'string' ? direction\r
+// : isFinite(direction) ? 'both'\r
+// : 'both'\r
+// var origin = (direction === 'both' && isFinite(around)) ? [around, around]\r
+// : (direction === 'x') ? [around, 0]\r
+// : (direction === 'y') ? [0, around]\r
+// : isFinite(direction) ? [direction, direction]\r
+// : [0, 0]\r
+// this.transform({flip: directionString, origin: origin}, true)\r
+// },\r
+//\r
+// // Opacity\r
+// opacity: function (value) {\r
+// return this.attr('opacity', value)\r
+// },\r
+//\r
+// // Relative move over x axis\r
+// dx: function (x) {\r
+// return this.x(new SVG.Number(x).plus(this instanceof SVG.Timeline ? 0 : this.x()), true)\r
+// },\r
+//\r
+// // Relative move over y axis\r
+// dy: function (y) {\r
+// return this.y(new SVG.Number(y).plus(this instanceof SVG.Timeline ? 0 : this.y()), true)\r
+// },\r
+//\r
+// // Relative move over x and y axes\r
+// dmove: function (x, y) {\r
+// return this.dx(x).dy(y)\r
+// }\r
+// })\r
+//\r
+// SVG.extend([SVG.Rect, SVG.Ellipse, SVG.Circle, SVG.Gradient, SVG.Timeline], {\r
+// // Add x and y radius\r
+// radius: function (x, y) {\r
+// var type = (this._target || this).type\r
+// return type === 'radialGradient' || type === 'radialGradient'\r
+// ? this.attr('r', new SVG.Number(x))\r
+// : this.rx(x).ry(y == null ? x : y)\r
+// }\r
+// })\r
+//\r
+// SVG.extend(SVG.Path, {\r
+// // Get path length\r
+// length: function () {\r
+// return this.node.getTotalLength()\r
+// },\r
+// // Get point at length\r
+// pointAt: function (length) {\r
+// return new SVG.Point(this.node.getPointAtLength(length))\r
+// }\r
+// })\r
+//\r
+// SVG.extend([SVG.Parent, SVG.Text, SVG.Tspan, SVG.Timeline], {\r
+// // Set font\r
+// font: function (a, v) {\r
+// if (typeof a === 'object') {\r
+// for (v in a) this.font(v, a[v])\r
+// }\r
+//\r
+// return a === 'leading'\r
+// ? this.leading(v)\r
+// : a === 'anchor'\r
+// ? this.attr('text-anchor', v)\r
+// : a === 'size' || a === 'family' || a === 'weight' || a === 'stretch' || a === 'variant' || a === 'style'\r
+// ? this.attr('font-' + a, v)\r
+// : this.attr(a, v)\r
+// }\r
+// })\r
+
+\r
+SVG.extend(SVG.Element, {\r
+ // Store data values on svg nodes\r
+ data: function (a, v, r) {\r
+ if (typeof a === 'object') {\r
+ for (v in a) {\r
+ this.data(v, a[v])\r
+ }\r
+ } else if (arguments.length < 2) {\r
+ try {\r
+ return JSON.parse(this.attr('data-' + a))\r
+ } catch (e) {\r
+ return this.attr('data-' + a)\r
+ }\r
+ } else {\r
+ this.attr('data-' + a,\r
+ v === null ? null\r
+ : r === true || typeof v === 'string' || typeof v === 'number' ? v\r
+ : JSON.stringify(v)\r
+ )\r
+ }\r
+\r
+ return this\r
+ }\r
+})\r
+
+\r
+SVG.extend(SVG.Element, {\r
+ // Remember arbitrary data\r
+ remember: function (k, v) {\r
+ // remember every item in an object individually\r
+ if (typeof arguments[0] === 'object') {\r
+ for (var key in k) {\r
+ this.remember(key, k[key])\r
+ }\r
+ } else if (arguments.length === 1) {\r
+ // retrieve memory\r
+ return this.memory()[k]\r
+ } else {\r
+ // store memory\r
+ this.memory()[k] = v\r
+ }\r
+\r
+ return this\r
+ },\r
+\r
+ // Erase a given memory\r
+ forget: function () {\r
+ if (arguments.length === 0) {\r
+ this._memory = {}\r
+ } else {\r
+ for (var i = arguments.length - 1; i >= 0; i--) {\r
+ delete this.memory()[arguments[i]]\r
+ }\r
+ }\r
+ return this\r
+ },\r
+\r
+ // Initialize or return local memory object\r
+ memory: function () {\r
+ return this._memory || (this._memory = {})\r
+ }\r
+})\r
+
+/* global idFromReference */\r
+\r
+// Method for getting an element by id\r
+SVG.get = function (id) {\r
+ var node = document.getElementById(idFromReference(id) || id)\r
+ return SVG.adopt(node)\r
+}\r
+\r
+// Select elements by query string\r
+SVG.select = function (query, parent) {\r
+ return SVG.utils.map((parent || document).querySelectorAll(query), function (node) {\r
+ return SVG.adopt(node)\r
+ })\r
+}\r
+\r
+SVG.$$ = function (query, parent) {\r
+ return SVG.utils.map((parent || document).querySelectorAll(query), function (node) {\r
+ return SVG.adopt(node)\r
+ })\r
+}\r
+\r
+SVG.$ = function (query, parent) {\r
+ return SVG.adopt((parent || document).querySelector(query))\r
+}\r
+\r
+SVG.extend(SVG.Parent, {\r
+ // Scoped select method\r
+ select: function (query) {\r
+ return SVG.select(query, this.node)\r
+ }\r
+})\r
+
+/* eslint no-unused-vars: 0 */\r
+\r
+function createElement (element, makeNested) {\r
+ if (element instanceof SVG.Element) return element\r
+\r
+ if (typeof element === 'object') {\r
+ return SVG.adopt(element)\r
+ }\r
+\r
+ if (element == null) {\r
+ return new SVG.Doc()\r
+ }\r
+\r
+ if (typeof element === 'string' && element.charAt(0) !== '<') {\r
+ return SVG.adopt(document.querySelector(element))\r
+ }\r
+\r
+ var node = SVG.create('svg')\r
+ node.innerHTML = element\r
+\r
+ element = SVG.adopt(node.firstElementChild)\r
+\r
+ return element\r
+}\r
+\r
+function isNulledBox (box) {\r
+ return !box.w && !box.h && !box.x && !box.y\r
+}\r
+\r
+function domContains (node) {\r
+ return (document.documentElement.contains || function (node) {\r
+ // This is IE - it does not support contains() for top-level SVGs\r
+ while (node.parentNode) {\r
+ node = node.parentNode\r
+ }\r
+ return node === document\r
+ }).call(document.documentElement, node)\r
+}\r
+\r
+function pathRegReplace (a, b, c, d) {\r
+ return c + d.replace(SVG.regex.dots, ' .')\r
+}\r
+\r
+// creates deep clone of array\r
+function arrayClone (arr) {\r
+ var clone = arr.slice(0)\r
+ for (var i = clone.length; i--;) {\r
+ if (Array.isArray(clone[i])) {\r
+ clone[i] = arrayClone(clone[i])\r
+ }\r
+ }\r
+ return clone\r
+}\r
+\r
+// tests if a given element is instance of an object\r
+function is (el, obj) {\r
+ return el instanceof obj\r
+}\r
+\r
+// tests if a given selector matches an element\r
+function matches (el, selector) {\r
+ return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector)\r
+}\r
+\r
+// Convert dash-separated-string to camelCase\r
+function camelCase (s) {\r
+ return s.toLowerCase().replace(/-(.)/g, function (m, g) {\r
+ return g.toUpperCase()\r
+ })\r
+}\r
+\r
+// Capitalize first letter of a string\r
+function capitalize (s) {\r
+ return s.charAt(0).toUpperCase() + s.slice(1)\r
+}\r
+\r
+// Ensure to six-based hex\r
+function fullHex (hex) {\r
+ return hex.length === 4\r
+ ? [ '#',\r
+ hex.substring(1, 2), hex.substring(1, 2),\r
+ hex.substring(2, 3), hex.substring(2, 3),\r
+ hex.substring(3, 4), hex.substring(3, 4)\r
+ ].join('')\r
+ : hex\r
+}\r
+\r
+// Component to hex value\r
+function compToHex (comp) {\r
+ var hex = comp.toString(16)\r
+ return hex.length === 1 ? '0' + hex : hex\r
+}\r
+\r
+// Calculate proportional width and height values when necessary\r
+function proportionalSize (element, width, height) {\r
+ if (width == null || height == null) {\r
+ var box = element.bbox()\r
+\r
+ if (width == null) {\r
+ width = box.width / box.height * height\r
+ } else if (height == null) {\r
+ height = box.height / box.width * width\r
+ }\r
+ }\r
+\r
+ return {\r
+ width: width,\r
+ height: height\r
+ }\r
+}\r
+\r
+// Map matrix array to object\r
+function arrayToMatrix (a) {\r
+ return { a: a[0], b: a[1], c: a[2], d: a[3], e: a[4], f: a[5] }\r
+}\r
+\r
+// Add centre point to transform object\r
+function ensureCentre (o, target) {\r
+ o.cx = o.cx == null ? target.bbox().cx : o.cx\r
+ o.cy = o.cy == null ? target.bbox().cy : o.cy\r
+}\r
+\r
+// PathArray Helpers\r
+function arrayToString (a) {\r
+ for (var i = 0, il = a.length, s = ''; i < il; i++) {\r
+ s += a[i][0]\r
+\r
+ if (a[i][1] != null) {\r
+ s += a[i][1]\r
+\r
+ if (a[i][2] != null) {\r
+ s += ' '\r
+ s += a[i][2]\r
+\r
+ if (a[i][3] != null) {\r
+ s += ' '\r
+ s += a[i][3]\r
+ s += ' '\r
+ s += a[i][4]\r
+\r
+ if (a[i][5] != null) {\r
+ s += ' '\r
+ s += a[i][5]\r
+ s += ' '\r
+ s += a[i][6]\r
+\r
+ if (a[i][7] != null) {\r
+ s += ' '\r
+ s += a[i][7]\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return s + ' '\r
+}\r
+\r
+// Deep new id assignment\r
+function assignNewId (node) {\r
+ // do the same for SVG child nodes as well\r
+ for (var i = node.children.length - 1; i >= 0; i--) {\r
+ assignNewId(node.children[i])\r
+ }\r
+\r
+ if (node.id) {\r
+ return SVG.adopt(node).id(SVG.eid(node.nodeName))\r
+ }\r
+\r
+ return SVG.adopt(node)\r
+}\r
+\r
+// Add more bounding box properties\r
+function fullBox (b) {\r
+ if (b.x == null) {\r
+ b.x = 0\r
+ b.y = 0\r
+ b.width = 0\r
+ b.height = 0\r
+ }\r
+\r
+ b.w = b.width\r
+ b.h = b.height\r
+ b.x2 = b.x + b.width\r
+ b.y2 = b.y + b.height\r
+ b.cx = b.x + b.width / 2\r
+ b.cy = b.y + b.height / 2\r
+\r
+ return b\r
+}\r
+\r
+// Get id from reference string\r
+function idFromReference (url) {\r
+ var m = (url || '').toString().match(SVG.regex.reference)\r
+\r
+ if (m) return m[1]\r
+}\r
+\r
+// Create matrix array for looping\r
+var abcdef = 'abcdef'.split('')\r
+\r
+function closeEnough (a, b, threshold) {\r
+ return Math.abs(b - a) < (threshold || 1e-6)\r
+}\r
+\r
+// TODO: Refactor this to a static function of matrix.js\r
+function formatTransforms (o) {\r
+ // Get all of the parameters required to form the matrix\r
+ var flipBoth = o.flip === 'both' || o.flip === true\r
+ var flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1\r
+ var flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1\r
+ var skewX = o.skew && o.skew.length ? o.skew[0]\r
+ : isFinite(o.skew) ? o.skew\r
+ : isFinite(o.skewX) ? o.skewX\r
+ : 0\r
+ var skewY = o.skew && o.skew.length ? o.skew[1]\r
+ : isFinite(o.skew) ? o.skew\r
+ : isFinite(o.skewY) ? o.skewY\r
+ : 0\r
+ var scaleX = o.scale && o.scale.length ? o.scale[0] * flipX\r
+ : isFinite(o.scale) ? o.scale * flipX\r
+ : isFinite(o.scaleX) ? o.scaleX * flipX\r
+ : flipX\r
+ var scaleY = o.scale && o.scale.length ? o.scale[1] * flipY\r
+ : isFinite(o.scale) ? o.scale * flipY\r
+ : isFinite(o.scaleY) ? o.scaleY * flipY\r
+ : flipY\r
+ var shear = o.shear || 0\r
+ var theta = o.rotate || o.theta || 0\r
+ var origin = new SVG.Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY)\r
+ var ox = origin.x\r
+ var oy = origin.y\r
+ var position = new SVG.Point(o.position || o.px || o.positionX, o.py || o.positionY)\r
+ var px = position.x\r
+ var py = position.y\r
+ var translate = new SVG.Point(o.translate || o.tx || o.translateX, o.ty || o.translateY)\r
+ var tx = translate.x\r
+ var ty = translate.y\r
+ var relative = new SVG.Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY)\r
+ var rx = relative.x\r
+ var ry = relative.y\r
+\r
+ // Populate all of the values\r
+ return {\r
+ scaleX: scaleX,\r
+ scaleY: scaleY,\r
+ skewX: skewX,\r
+ skewY: skewY,\r
+ shear: shear,\r
+ theta: theta,\r
+ rx: rx,\r
+ ry: ry,\r
+ tx: tx,\r
+ ty: ty,\r
+ ox: ox,\r
+ oy: oy,\r
+ px: px,\r
+ py: py\r
+ }\r
+}\r
+\r
+function getOrigin (o, element) {\r
+ // Allow origin or around as the names\r
+ origin = o.around == null ? o.origin : o.around\r
+\r
+ // Allow the user to pass a string to rotate around a given point\r
+ if ( typeof origin === 'string' || origin == null ) {\r
+ // Get the bounding box of the element with no transformations applied\r
+ const string = (origin || 'center').toLowerCase().trim()\r
+ const { height, width, x, y } = element.bbox()\r
+\r
+ // Set the bounds eg : "bottom-left", "Top right", "middle" etc...\r
+ const ox = o.ox || string.includes('left') ? x\r
+ : string.includes('right') ? x + width\r
+ : x + width / 2\r
+ const oy = o.oy || string.includes('top') ? y\r
+ : string.includes('bottom') ? y + height\r
+ : y + height / 2\r
+ return [ox, oy]\r
+ }\r
+\r
+ // Return the origin as it is if it wasn't a string\r
+ return origin\r
+}\r
+
+/* globals fullBox, domContains, isNulledBox, Exception */\r
+\r
+SVG.Box = SVG.invent({\r
+ create: function (source) {\r
+ var base = [0, 0, 0, 0]\r
+ source = typeof source === 'string' ? source.split(SVG.regex.delimiter).map(parseFloat)\r
+ : Array.isArray(source) ? source\r
+ : typeof source === 'object' ? [source.left != null ? source.left\r
+ : source.x, source.top != null ? source.top : source.y, source.width, source.height]\r
+ : arguments.length === 4 ? [].slice.call(arguments)\r
+ : base\r
+\r
+ this.x = source[0]\r
+ this.y = source[1]\r
+ this.width = source[2]\r
+ this.height = source[3]\r
+\r
+ // add center, right, bottom...\r
+ fullBox(this)\r
+ },\r
+ extend: {\r
+ // Merge rect box with another, return a new instance\r
+ merge: function (box) {\r
+ var x = Math.min(this.x, box.x)\r
+ var y = Math.min(this.y, box.y)\r
+\r
+ return new SVG.Box(\r
+ x, y,\r
+ Math.max(this.x + this.width, box.x + box.width) - x,\r
+ Math.max(this.y + this.height, box.y + box.height) - y\r
+ )\r
+ },\r
+\r
+ transform: function (m) {\r
+ var xMin = Infinity\r
+ var xMax = -Infinity\r
+ var yMin = Infinity\r
+ var yMax = -Infinity\r
+\r
+ var pts = [\r
+ new SVG.Point(this.x, this.y),\r
+ new SVG.Point(this.x2, this.y),\r
+ new SVG.Point(this.x, this.y2),\r
+ new SVG.Point(this.x2, this.y2)\r
+ ]\r
+\r
+ pts.forEach(function (p) {\r
+ p = p.transform(m)\r
+ xMin = Math.min(xMin, p.x)\r
+ xMax = Math.max(xMax, p.x)\r
+ yMin = Math.min(yMin, p.y)\r
+ yMax = Math.max(yMax, p.y)\r
+ })\r
+\r
+ return new SVG.Box(\r
+ xMin, yMin,\r
+ xMax - xMin,\r
+ yMax - yMin\r
+ )\r
+ },\r
+\r
+ addOffset: function () {\r
+ // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\r
+ this.x += window.pageXOffset\r
+ this.y += window.pageYOffset\r
+ return this\r
+ },\r
+ toString: function () {\r
+ return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height\r
+ },\r
+ toArray: function () {\r
+ return [this.x, this.y, this.width, this.height]\r
+ },\r
+ morph: function (x, y, width, height) {\r
+ this.destination = new SVG.Box(x, y, width, height)\r
+ return this\r
+ },\r
+\r
+ at: function (pos) {\r
+ if (!this.destination) return this\r
+\r
+ return new SVG.Box(\r
+ this.x + (this.destination.x - this.x) * pos\r
+ , this.y + (this.destination.y - this.y) * pos\r
+ , this.width + (this.destination.width - this.width) * pos\r
+ , this.height + (this.destination.height - this.height) * pos\r
+ )\r
+ }\r
+ },\r
+\r
+ // Define Parent\r
+ parent: SVG.Element,\r
+\r
+ // Constructor\r
+ construct: {\r
+ // Get bounding box\r
+ bbox: function () {\r
+ var box\r
+\r
+ try {\r
+ // find native bbox\r
+ box = this.node.getBBox()\r
+\r
+ if (isNulledBox(box) && !domContains(this.node)) {\r
+ throw new Exception('Element not in the dom')\r
+ }\r
+ } catch (e) {\r
+ try {\r
+ var clone = this.clone(SVG.parser().svg).show()\r
+ box = clone.node.getBBox()\r
+ clone.remove()\r
+ } catch (e) {\r
+ console.warn('Getting a bounding box of this element is not possible')\r
+ }\r
+ }\r
+\r
+ return new SVG.Box(box)\r
+ },\r
+\r
+ rbox: function (el) {\r
+ // IE11 throws an error when element not in dom\r
+ try {\r
+ var box = new SVG.Box(this.node.getBoundingClientRect())\r
+ if (el) return box.transform(el.screenCTM().inverse())\r
+ return box.addOffset()\r
+ } catch (e) {\r
+ return new SVG.Box()\r
+ }\r
+ }\r
+ }\r
+})\r
+\r
+SVG.extend([SVG.Doc, SVG.Symbol, SVG.Image, SVG.Pattern, SVG.Marker, SVG.ForeignObject, SVG.View], {\r
+ viewbox: function (x, y, width, height) {\r
+ // act as getter\r
+ if (x == null) return new SVG.Box(this.attr('viewBox'))\r
+\r
+ // act as setter\r
+ return this.attr('viewBox', new SVG.Box(x, y, width, height))\r
+ }\r
+})\r
+
+\r
+SVG.parser = function () {\r
+ var b\r
+\r
+ if (!SVG.parser.nodes.svg.node.parentNode) {\r
+ b = document.body || document.documentElement\r
+ SVG.parser.nodes.svg.addTo(b)\r
+ }\r
+\r
+ return SVG.parser.nodes\r
+}\r
+\r
+SVG.parser.nodes = {\r
+ svg: SVG().size(2, 0).css({\r
+ opacity: 0,\r
+ position: 'absolute',\r
+ left: '-100%',\r
+ top: '-100%',\r
+ overflow: 'hidden'\r
+ })\r
+}\r
+\r
+SVG.parser.nodes.path = SVG.parser.nodes.svg.path().node\r
/* global requestAnimationFrame */
: null
}
}
-
-
-return SVG
-
-}));
\ No newline at end of file
+\r
+\r
+return SVG\r
+\r
+}));\r
\ No newline at end of file
"integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
"dev": true,
"requires": {
- "mime-types": "2.1.18",
+ "mime-types": "~2.1.11",
"negotiator": "0.6.1"
}
},
"acorn": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
- "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
"dev": true
},
"acorn-jsx": {
"integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
"dev": true,
"requires": {
- "acorn": "3.3.0"
+ "acorn": "^3.0.4"
},
"dependencies": {
"acorn": {
"dev": true
},
"ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
"dev": true,
"requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.0.0",
- "fast-json-stable-stringify": "2.0.0",
- "json-schema-traverse": "0.3.1"
+ "co": "^4.6.0",
+ "json-stable-stringify": "^1.0.1"
}
},
"ajv-keywords": {
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
"dev": true,
"requires": {
- "kind-of": "3.2.2",
- "longest": "1.0.1",
- "repeat-string": "1.6.1"
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
},
"dependencies": {
"kind-of": {
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
}
}
"integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
"dev": true,
"requires": {
- "ansi-wrap": "0.1.0"
+ "ansi-wrap": "^0.1.0"
}
},
"ansi-escapes": {
"integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
"dev": true,
"requires": {
- "micromatch": "2.3.11",
- "normalize-path": "2.1.1"
+ "micromatch": "^2.1.5",
+ "normalize-path": "^2.0.0"
},
"dependencies": {
"arr-diff": {
"integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
"dev": true,
"requires": {
- "arr-flatten": "1.1.0"
+ "arr-flatten": "^1.0.1"
}
},
"array-unique": {
"integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
"dev": true,
"requires": {
- "expand-range": "1.8.2",
- "preserve": "0.2.0",
- "repeat-element": "1.1.2"
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
}
},
"expand-brackets": {
"integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
"dev": true,
"requires": {
- "is-posix-bracket": "0.1.1"
+ "is-posix-bracket": "^0.1.0"
}
},
"extglob": {
"integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
},
"is-extglob": {
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
},
"kind-of": {
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
},
"micromatch": {
"integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
"dev": true,
"requires": {
- "arr-diff": "2.0.0",
- "array-unique": "0.2.1",
- "braces": "1.8.5",
- "expand-brackets": "0.1.5",
- "extglob": "0.3.2",
- "filename-regex": "2.0.1",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1",
- "kind-of": "3.2.2",
- "normalize-path": "2.1.1",
- "object.omit": "2.0.1",
- "parse-glob": "3.0.4",
- "regex-cache": "0.4.4"
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
}
}
}
},
"app-root-path": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz",
- "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz",
+ "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=",
"dev": true
},
"archy": {
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
- "sprintf-js": "1.0.3"
+ "sprintf-js": "~1.0.2"
}
},
"arr-diff": {
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"dev": true,
"requires": {
- "array-uniq": "1.0.3"
+ "array-uniq": "^1.0.1"
}
},
"array-uniq": {
"integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=",
"dev": true,
"requires": {
- "define-properties": "1.1.2",
- "es-abstract": "1.10.0"
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
}
},
"arraybuffer.slice": {
"integrity": "sha1-dJRAWIh9goPhidlUYAlHvJj+AGI=",
"dev": true,
"requires": {
- "escodegen": "1.2.0",
- "esprima": "1.0.4",
- "through": "2.3.8"
+ "escodegen": "~1.2.0",
+ "esprima": "~1.0.4",
+ "through": "~2.3.4"
},
"dependencies": {
"escodegen": {
"integrity": "sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E=",
"dev": true,
"requires": {
- "esprima": "1.0.4",
- "estraverse": "1.5.1",
- "esutils": "1.0.0",
- "source-map": "0.1.43"
+ "esprima": "~1.0.4",
+ "estraverse": "~1.5.0",
+ "esutils": "~1.0.0",
+ "source-map": "~0.1.30"
}
},
"esprima": {
"dev": true,
"optional": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
}
}
"dev": true
},
"atob": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
- "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
"dev": true
},
"aws-sign2": {
"dev": true
},
"aws4": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
- "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
"dev": true
},
"babel-code-frame": {
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.2"
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
}
},
"babel-runtime": {
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "2.5.3",
- "regenerator-runtime": "0.11.1"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
"backo2": {
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
"requires": {
- "cache-base": "1.0.1",
- "class-utils": "0.3.6",
- "component-emitter": "1.2.1",
- "define-property": "1.0.0",
- "isobject": "3.0.1",
- "mixin-deep": "1.3.1",
- "pascalcase": "0.1.1"
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
},
"dependencies": {
"define-property": {
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "1.0.2"
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
}
}
}
"dev": true
},
"base64-js": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz",
- "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
"dev": true
},
"base64id": {
"dev": true,
"optional": true,
"requires": {
- "tweetnacl": "0.14.5"
+ "tweetnacl": "^0.14.3"
}
},
"beeper": {
"dev": true
},
"body-parser": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "version": "1.18.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
"dev": true,
"requires": {
"bytes": "3.0.0",
- "content-type": "1.0.4",
+ "content-type": "~1.0.4",
"debug": "2.6.9",
- "depd": "1.1.2",
- "http-errors": "1.6.2",
- "iconv-lite": "0.4.19",
- "on-finished": "2.3.0",
- "qs": "6.5.1",
- "raw-body": "2.3.2",
- "type-is": "1.6.16"
+ "depd": "~1.1.2",
+ "http-errors": "~1.6.3",
+ "iconv-lite": "0.4.23",
+ "on-finished": "~2.3.0",
+ "qs": "6.5.2",
+ "raw-body": "2.3.3",
+ "type-is": "~1.6.16"
},
"dependencies": {
"qs": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
}
}
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": {
- "hoek": "2.16.3"
+ "hoek": "2.x.x"
}
},
"brace-expansion": {
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"braces": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
- "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
- "dev": true,
- "requires": {
- "arr-flatten": "1.1.0",
- "array-unique": "0.3.2",
- "define-property": "1.0.0",
- "extend-shallow": "2.0.1",
- "fill-range": "4.0.0",
- "isobject": "3.0.1",
- "kind-of": "6.0.2",
- "repeat-element": "1.1.2",
- "snapdragon": "0.8.1",
- "snapdragon-node": "2.1.1",
- "split-string": "3.1.0",
- "to-regex": "3.0.2"
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
},
"dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "1.0.2"
- }
- },
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "0.1.1"
+ "is-extendable": "^0.1.0"
}
}
}
},
"brfs": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.4.4.tgz",
- "integrity": "sha512-rX2qc9hkpLPiwdu1HkLY642rwwo3X6N+ZPyEPdNn3OUKV/B2BRP7dHdnkhGantOJLVoTluNYBi4VecHb2Kq2hw==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
+ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
"dev": true,
"requires": {
- "quote-stream": "1.0.2",
- "resolve": "1.5.0",
- "static-module": "2.1.1",
- "through2": "2.0.3"
+ "quote-stream": "^1.0.1",
+ "resolve": "^1.1.5",
+ "static-module": "^2.2.0",
+ "through2": "^2.0.0"
}
},
"brotli": {
"integrity": "sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y=",
"dev": true,
"requires": {
- "base64-js": "1.2.3"
+ "base64-js": "^1.1.2"
}
},
"browser-resolve": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
- "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
"dev": true,
"requires": {
"resolve": "1.1.7"
"dev": true,
"requires": {
"ast-transform": "0.0.0",
- "ast-types": "0.7.8",
- "browser-resolve": "1.11.2"
+ "ast-types": "^0.7.0",
+ "browser-resolve": "^1.8.1"
}
},
"buffer-equal": {
"integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
"dev": true
},
+ "buffer-from": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+ "dev": true
+ },
"bufferstreams": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.0.1.tgz",
"integrity": "sha1-z7GtlWjTujz+k1upq92VLeiKqyo=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14"
+ "readable-stream": "^1.0.33"
}
},
"builtin-modules": {
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
"requires": {
- "collection-visit": "1.0.0",
- "component-emitter": "1.2.1",
- "get-value": "2.0.6",
- "has-value": "1.0.0",
- "isobject": "3.0.1",
- "set-value": "2.0.0",
- "to-object-path": "0.3.0",
- "union-value": "1.0.0",
- "unset-value": "1.0.0"
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
}
},
"caller-path": {
"integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
"dev": true,
"requires": {
- "callsites": "0.2.0"
+ "callsites": "^0.2.0"
}
},
"callsite": {
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"dev": true,
"requires": {
- "camelcase": "2.1.1",
- "map-obj": "1.0.1"
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
}
},
"caseless": {
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
"dev": true,
"requires": {
- "align-text": "0.1.4",
- "lazy-cache": "1.0.4"
- },
- "dependencies": {
- "lazy-cache": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
- "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
- "dev": true
- }
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
}
},
"chalk": {
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
+ "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"
}
},
"chokidar": {
"integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
"dev": true,
"requires": {
- "anymatch": "1.3.2",
- "async-each": "1.0.1",
- "fsevents": "1.1.3",
- "glob-parent": "2.0.0",
- "inherits": "2.0.3",
- "is-binary-path": "1.0.1",
- "is-glob": "2.0.1",
- "path-is-absolute": "1.0.1",
- "readdirp": "2.1.0"
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
},
"dependencies": {
"is-extglob": {
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
}
}
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true,
"requires": {
- "arr-union": "3.1.0",
- "define-property": "0.2.5",
- "isobject": "3.0.1",
- "static-extend": "0.1.2"
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
},
"dependencies": {
"define-property": {
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
+ "is-descriptor": "^0.1.0"
}
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
}
}
},
"integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
"dev": true,
"requires": {
- "restore-cursor": "1.0.1"
+ "restore-cursor": "^1.0.1"
}
},
"cli-width": {
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
"dev": true,
"requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wrap-ansi": "2.1.0"
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
}
},
"clone": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
- "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
"dev": true
},
"clone-buffer": {
"dev": true
},
"cloneable-readable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
- "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
+ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "process-nextick-args": "1.0.7",
- "through2": "2.0.3"
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
},
"dependencies": {
- "process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "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"
+ }
+ },
+ "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"
+ }
}
}
},
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
"dev": true,
"requires": {
- "map-visit": "1.0.0",
- "object-visit": "1.0.1"
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
}
},
"color-support": {
"dev": true
},
"colors": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz",
+ "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==",
"dev": true
},
"combine-lists": {
"integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
"dev": true,
"requires": {
- "lodash": "4.17.5"
+ "lodash": "^4.5.0"
},
"dependencies": {
"lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
}
}
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"dev": true,
"requires": {
- "delayed-stream": "1.0.0"
+ "delayed-stream": "~1.0.0"
}
},
"commander": {
- "version": "2.14.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
- "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==",
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"component-bind": {
"dev": true
},
"concat-stream": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "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": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.4",
- "typedarray": "0.0.6"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
},
"dependencies": {
"isarray": {
"dev": true
},
"readable-stream": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
- "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "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"
}
},
"string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "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.1"
+ "safe-buffer": "~5.1.0"
}
}
}
},
"concat-with-sourcemaps": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.5.tgz",
- "integrity": "sha512-YtnS0VEY+e2Khzsey/6mra9EoM6h/5gxaC0e3mcHpA5yfDxafhygytNmcJWodvUgyXzSiL5MSkPO6bQGgfliHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
+ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
"dev": true,
"requires": {
- "source-map": "0.6.1"
+ "source-map": "^0.6.1"
},
"dependencies": {
"source-map": {
"requires": {
"debug": "2.6.9",
"finalhandler": "1.1.0",
- "parseurl": "1.3.2",
+ "parseurl": "~1.3.2",
"utils-merge": "1.0.1"
}
},
"integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=",
"dev": true,
"requires": {
- "bluebird": "3.5.1"
+ "bluebird": "^3.1.1"
}
},
"contains-path": {
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
"dev": true
},
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+ "dev": true
+ },
"cookie": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
"integrity": "sha1-8DJLvumXcRAeezraES8xPDk9uO0=",
"dev": true,
"requires": {
- "each-props": "1.3.1",
- "is-plain-object": "2.0.4"
+ "each-props": "^1.2.1",
+ "is-plain-object": "^2.0.1"
}
},
"core-js": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
- "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
"dev": true
},
"core-util-is": {
"integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
"dev": true,
"requires": {
- "aws-sign2": "0.6.0",
- "aws4": "1.6.0",
- "caseless": "0.11.0",
- "combined-stream": "1.0.6",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.1.4",
- "har-validator": "2.0.6",
- "hawk": "3.1.3",
- "http-signature": "1.1.1",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.18",
- "oauth-sign": "0.8.2",
- "qs": "6.3.2",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.3",
- "tunnel-agent": "0.4.3",
- "uuid": "3.2.1"
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.11.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~2.0.6",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "qs": "~6.3.0",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "~0.4.1",
+ "uuid": "^3.0.0"
}
}
}
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"requires": {
- "boom": "2.10.1"
+ "boom": "2.x.x"
}
},
"currently-unhandled": {
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
"dev": true,
"requires": {
- "array-find-index": "1.0.2"
+ "array-find-index": "^1.0.1"
}
},
"custom-event": {
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
- "es5-ext": "0.10.39"
+ "es5-ext": "^0.10.9"
}
},
"dashdash": {
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
"integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=",
"dev": true,
"requires": {
- "is-obj": "1.0.1"
+ "is-obj": "^1.0.0"
}
},
"deep-equal": {
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
"dev": true,
"requires": {
- "clone": "1.0.3"
+ "clone": "^1.0.2"
}
},
"define-properties": {
"integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
"dev": true,
"requires": {
- "foreach": "2.0.5",
- "object-keys": "1.0.11"
+ "foreach": "^2.0.5",
+ "object-keys": "^1.0.8"
}
},
"define-property": {
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"requires": {
- "is-descriptor": "1.0.2",
- "isobject": "3.0.1"
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
}
},
"deglob": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
- "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
+ "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.1.0",
- "glob": "7.1.2",
- "ignore": "3.3.7",
- "pkg-config": "1.1.1",
- "run-parallel": "1.1.7",
- "uniq": "1.0.1"
+ "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": {
"integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
"dev": true,
"requires": {
- "globby": "5.0.0",
- "is-path-cwd": "1.0.0",
- "is-path-in-cwd": "1.0.0",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "rimraf": "2.6.2"
+ "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"
}
},
"delayed-stream": {
"integrity": "sha1-0wIYvRDQMPpCHfPrvIIoVGOjF4E=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "babel-runtime": "^6.11.6"
}
},
"di": {
"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"requires": {
- "esutils": "2.0.2"
+ "esutils": "^2.0.2"
}
},
"dom-serialize": {
"integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
"dev": true,
"requires": {
- "custom-event": "1.0.1",
- "ent": "2.2.0",
- "extend": "3.0.1",
- "void-elements": "2.0.1"
+ "custom-event": "~1.0.0",
+ "ent": "~2.2.0",
+ "extend": "^3.0.0",
+ "void-elements": "^2.0.0"
}
},
"duplexer": {
"integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14"
+ "readable-stream": "~1.1.9"
}
},
"each-props": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.1.tgz",
- "integrity": "sha1-/BOPUeOid0KG1IWOAtbn3kYt4Vg=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
+ "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
"dev": true,
"requires": {
- "is-plain-object": "2.0.4",
- "object.defaults": "1.1.0"
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
}
},
"ecc-jsbn": {
"dev": true,
"optional": true,
"requires": {
- "jsbn": "0.1.1"
+ "jsbn": "~0.1.0"
}
},
"ee-first": {
"integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
"dev": true,
"requires": {
- "once": "1.3.3"
+ "once": "~1.3.0"
},
"dependencies": {
"once": {
"integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
}
}
"dev": true
},
"error-ex": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
- "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "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"
+ "is-arrayish": "^0.2.1"
}
},
"es-abstract": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz",
- "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
"dev": true,
"requires": {
- "es-to-primitive": "1.1.1",
- "function-bind": "1.1.1",
- "has": "1.0.1",
- "is-callable": "1.1.3",
- "is-regex": "1.0.4"
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
}
},
"es-to-primitive": {
"integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
"dev": true,
"requires": {
- "is-callable": "1.1.3",
- "is-date-object": "1.0.1",
- "is-symbol": "1.0.1"
+ "is-callable": "^1.1.1",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.1"
}
},
"es5-ext": {
- "version": "0.10.39",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.39.tgz",
- "integrity": "sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g==",
+ "version": "0.10.45",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
+ "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
"dev": true,
"requires": {
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "1"
}
},
"es6-iterator": {
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39",
- "es6-symbol": "3.1.1"
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
}
},
"es6-map": {
"integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39",
- "es6-iterator": "2.0.3",
- "es6-set": "0.1.5",
- "es6-symbol": "3.1.1",
- "event-emitter": "0.3.5"
+ "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-promise": {
"integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39",
- "es6-iterator": "2.0.3",
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
"es6-symbol": "3.1.1",
- "event-emitter": "0.3.5"
+ "event-emitter": "~0.3.5"
}
},
"es6-symbol": {
"integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39"
+ "d": "1",
+ "es5-ext": "~0.10.14"
}
},
"es6-weak-map": {
"integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39",
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
+ "d": "1",
+ "es5-ext": "^0.10.14",
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
}
},
"escape-html": {
"integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
"dev": true,
"requires": {
- "esprima": "2.7.3",
- "estraverse": "1.9.3",
- "esutils": "2.0.2",
- "optionator": "0.8.2",
- "source-map": "0.2.0"
+ "esprima": "^2.7.1",
+ "estraverse": "^1.9.1",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.2.0"
},
"dependencies": {
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "dev": true
+ },
"source-map": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
"dev": true,
"optional": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
}
}
"integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
"dev": true,
"requires": {
- "es6-map": "0.1.5",
- "es6-weak-map": "2.0.2",
- "esrecurse": "4.2.0",
- "estraverse": "4.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- }
+ "es6-map": "^0.1.3",
+ "es6-weak-map": "^2.0.1",
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
}
},
"eslint": {
- "version": "3.18.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.18.0.tgz",
- "integrity": "sha1-ZH6YXErnFQLSCsYsEJ9m1RBMiks=",
- "dev": true,
- "requires": {
- "babel-code-frame": "6.26.0",
- "chalk": "1.1.3",
- "concat-stream": "1.6.0",
- "debug": "2.6.9",
- "doctrine": "2.1.0",
- "escope": "3.6.0",
- "espree": "3.5.3",
- "esquery": "1.0.0",
- "estraverse": "4.2.0",
- "esutils": "2.0.2",
- "file-entry-cache": "2.0.0",
- "glob": "7.1.2",
- "globals": "9.18.0",
- "ignore": "3.3.7",
- "imurmurhash": "0.1.4",
- "inquirer": "0.12.0",
- "is-my-json-valid": "2.17.2",
- "is-resolvable": "1.1.0",
- "js-yaml": "3.6.1",
- "json-stable-stringify": "1.0.1",
- "levn": "0.3.0",
- "lodash": "4.17.5",
- "mkdirp": "0.5.1",
- "natural-compare": "1.4.0",
- "optionator": "0.8.2",
- "path-is-inside": "1.0.2",
- "pluralize": "1.2.1",
- "progress": "1.1.8",
- "require-uncached": "1.0.3",
- "shelljs": "0.7.8",
- "strip-bom": "3.0.0",
- "strip-json-comments": "2.0.1",
- "table": "3.8.3",
- "text-table": "0.2.0",
- "user-home": "2.0.0"
+ "version": "3.19.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
+ "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
+ "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": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- },
"lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
},
"strip-bom": {
"integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
"dev": true,
"requires": {
- "os-homedir": "1.0.2"
+ "os-homedir": "^1.0.0"
}
}
}
},
"eslint-config-standard": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-7.1.0.tgz",
- "integrity": "sha1-R+dp6gc59bLVaTsaUBwhyWUPr88=",
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz",
+ "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=",
"dev": true
},
"eslint-config-standard-jsx": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.3.0.tgz",
- "integrity": "sha1-yrCAGhWjYL9j+suXqyL73YjYpeA=",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz",
+ "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==",
"dev": true
},
"eslint-import-resolver-node": {
"integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=",
"dev": true,
"requires": {
- "debug": "2.6.9",
- "object-assign": "4.1.1",
- "resolve": "1.5.0"
+ "debug": "^2.2.0",
+ "object-assign": "^4.0.1",
+ "resolve": "^1.1.6"
}
},
"eslint-module-utils": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz",
- "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz",
+ "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
"dev": true,
"requires": {
- "debug": "2.6.9",
- "pkg-dir": "1.0.0"
+ "debug": "^2.6.8",
+ "pkg-dir": "^1.0.0"
}
},
"eslint-plugin-import": {
"integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=",
"dev": true,
"requires": {
- "builtin-modules": "1.1.1",
- "contains-path": "0.1.0",
- "debug": "2.6.9",
+ "builtin-modules": "^1.1.1",
+ "contains-path": "^0.1.0",
+ "debug": "^2.2.0",
"doctrine": "1.5.0",
- "eslint-import-resolver-node": "0.2.3",
- "eslint-module-utils": "2.1.1",
- "has": "1.0.1",
- "lodash.cond": "4.5.2",
- "minimatch": "3.0.4",
- "pkg-up": "1.0.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": {
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true,
"requires": {
- "esutils": "2.0.2",
- "isarray": "1.0.0"
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
}
},
"isarray": {
"integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==",
"dev": true,
"requires": {
- "ignore": "3.3.7",
- "minimatch": "3.0.4",
- "object-assign": "4.1.1",
- "resolve": "1.5.0",
+ "ignore": "^3.0.11",
+ "minimatch": "^3.0.2",
+ "object-assign": "^4.0.1",
+ "resolve": "^1.1.7",
"semver": "5.3.0"
},
"dependencies": {
}
},
"eslint-plugin-promise": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.4.2.tgz",
- "integrity": "sha1-G+J5Pq/i0YtbEjuBNsJp+AT+cSI=",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz",
+ "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=",
"dev": true
},
"eslint-plugin-react": {
- "version": "6.9.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz",
- "integrity": "sha1-VMLpkGt2+dEBQgML3DTp1oQKC7I=",
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz",
+ "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=",
"dev": true,
"requires": {
- "array.prototype.find": "2.0.4",
- "doctrine": "1.5.0",
- "jsx-ast-utils": "1.4.1"
+ "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": {
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true,
"requires": {
- "esutils": "2.0.2",
- "isarray": "1.0.0"
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
}
},
"isarray": {
}
},
"eslint-plugin-standard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz",
- "integrity": "sha1-NYlpn/nJF/LCX3apFmh/ZBw2n/M=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz",
+ "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=",
"dev": true
},
"espree": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz",
- "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==",
+ "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.4.1",
- "acorn-jsx": "3.0.1"
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
}
},
"esprima": {
"dev": true
},
"esquery": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
- "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
"dev": true,
"requires": {
- "estraverse": "4.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- }
+ "estraverse": "^4.0.0"
}
},
"esrecurse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
- "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
"dev": true,
"requires": {
- "estraverse": "4.2.0",
- "object-assign": "4.1.1"
- },
- "dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- }
+ "estraverse": "^4.1.0"
}
},
"estraverse": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
- "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
"dev": true
},
"esutils": {
"integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39"
+ "d": "1",
+ "es5-ext": "~0.10.14"
}
},
"eventemitter3": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
- "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
+ "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==",
"dev": true
},
"exit-hook": {
"integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
"dev": true,
"requires": {
- "array-slice": "0.2.3",
- "array-unique": "0.2.1",
- "braces": "0.1.5"
+ "array-slice": "^0.2.3",
+ "array-unique": "^0.2.1",
+ "braces": "^0.1.2"
},
"dependencies": {
"array-slice": {
"integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
"dev": true,
"requires": {
- "expand-range": "0.1.1"
+ "expand-range": "^0.1.0"
}
},
"expand-range": {
"integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
"dev": true,
"requires": {
- "is-number": "0.1.1",
- "repeat-string": "0.2.2"
+ "is-number": "^0.1.1",
+ "repeat-string": "^0.2.2"
}
},
"is-number": {
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
- "debug": "2.6.9",
- "define-property": "0.2.5",
- "extend-shallow": "2.0.1",
- "posix-character-classes": "0.1.1",
- "regex-not": "1.0.2",
- "snapdragon": "0.8.1",
- "to-regex": "3.0.2"
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
},
"dependencies": {
"define-property": {
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "0.1.6"
+ "is-descriptor": "^0.1.0"
}
},
"extend-shallow": {
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "0.1.1"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
+ "is-extendable": "^0.1.0"
}
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
}
}
},
"integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
"dev": true,
"requires": {
- "fill-range": "2.2.3"
+ "fill-range": "^2.1.0"
},
"dependencies": {
"fill-range": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
- "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
"dev": true,
"requires": {
- "is-number": "2.1.0",
- "isobject": "2.1.0",
- "randomatic": "1.1.7",
- "repeat-element": "1.1.2",
- "repeat-string": "1.6.1"
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
}
},
"is-number": {
"integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
"dev": true,
"requires": {
- "kind-of": "3.2.2"
+ "kind-of": "^3.0.2"
}
},
"isarray": {
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
}
}
"integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
"dev": true,
"requires": {
- "homedir-polyfill": "1.0.1"
+ "homedir-polyfill": "^1.0.1"
}
},
"extend": {
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
"dev": true,
"requires": {
- "assign-symbols": "1.0.0",
- "is-extendable": "1.0.1"
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
},
"dependencies": {
"is-extendable": {
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"requires": {
- "is-plain-object": "2.0.4"
+ "is-plain-object": "^2.0.4"
}
}
}
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
- "array-unique": "0.3.2",
- "define-property": "1.0.0",
- "expand-brackets": "2.1.4",
- "extend-shallow": "2.0.1",
- "fragment-cache": "0.2.1",
- "regex-not": "1.0.2",
- "snapdragon": "0.8.1",
- "to-regex": "3.0.2"
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
},
"dependencies": {
"define-property": {
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "1.0.2"
+ "is-descriptor": "^1.0.0"
}
},
"extend-shallow": {
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "0.1.1"
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
}
}
}
},
"extract-zip": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz",
- "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=",
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+ "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
"dev": true,
"requires": {
- "concat-stream": "1.6.0",
+ "concat-stream": "1.6.2",
"debug": "2.6.9",
- "mkdirp": "0.5.0",
+ "mkdirp": "0.5.1",
"yauzl": "2.4.1"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
- "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- }
}
},
"extsprintf": {
"integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
"dev": true,
"requires": {
- "acorn": "5.4.1",
- "foreach": "2.0.5",
+ "acorn": "^5.0.0",
+ "foreach": "^2.0.5",
"isarray": "0.0.1",
- "object-keys": "1.0.11"
+ "object-keys": "^1.0.6"
}
},
"fancy-log": {
"integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
"dev": true,
"requires": {
- "ansi-gray": "0.1.1",
- "color-support": "1.1.3",
- "time-stamp": "1.1.0"
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "time-stamp": "^1.0.0"
}
},
"fast-deep-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
- "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
"dev": true
},
"fast-json-stable-stringify": {
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
"dev": true,
"requires": {
- "pend": "1.2.0"
+ "pend": "~1.2.0"
}
},
"figures": {
"integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
"dev": true,
"requires": {
- "escape-string-regexp": "1.0.5",
- "object-assign": "4.1.1"
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
}
},
"file-entry-cache": {
"integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
"dev": true,
"requires": {
- "flat-cache": "1.3.0",
- "object-assign": "4.1.1"
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
}
},
"filename-regex": {
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "extend-shallow": "2.0.1",
- "is-number": "3.0.0",
- "repeat-string": "1.6.1",
- "to-regex-range": "2.1.1"
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
},
"dependencies": {
"extend-shallow": {
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "0.1.1"
+ "is-extendable": "^0.1.0"
}
}
}
"dev": true,
"requires": {
"debug": "2.6.9",
- "encodeurl": "1.0.2",
- "escape-html": "1.0.3",
- "on-finished": "2.3.0",
- "parseurl": "1.3.2",
- "statuses": "1.3.1",
- "unpipe": "1.0.0"
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.3.1",
+ "unpipe": "~1.0.0"
},
"dependencies": {
"statuses": {
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"dev": true,
"requires": {
- "path-exists": "2.1.0",
- "pinkie-promise": "2.0.1"
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
"findup-sync": {
"integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
"dev": true,
"requires": {
- "detect-file": "1.0.0",
- "is-glob": "3.1.0",
- "micromatch": "3.1.9",
- "resolve-dir": "1.0.1"
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
}
},
"fined": {
"integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
"dev": true,
"requires": {
- "expand-tilde": "2.0.2",
- "is-plain-object": "2.0.4",
- "object.defaults": "1.1.0",
- "object.pick": "1.3.0",
- "parse-filepath": "1.0.2"
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
}
},
"first-chunk-stream": {
"integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
"dev": true,
"requires": {
- "circular-json": "0.3.3",
- "del": "2.2.2",
- "graceful-fs": "4.1.11",
- "write": "0.2.1"
+ "circular-json": "^0.3.1",
+ "del": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "write": "^0.2.1"
},
"dependencies": {
"graceful-fs": {
}
}
},
+ "follow-redirects": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz",
+ "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
"fontkit": {
"version": "1.7.7",
"resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.7.7.tgz",
"integrity": "sha1-668tjz/t8wKuPGS0vurdwkf827E=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "brfs": "1.4.4",
- "brotli": "1.3.2",
- "browserify-optional": "1.0.1",
- "clone": "1.0.3",
- "deep-equal": "1.0.1",
- "dfa": "1.1.0",
- "restructure": "0.5.4",
- "tiny-inflate": "1.0.2",
- "unicode-properties": "1.1.0",
- "unicode-trie": "0.3.1"
+ "babel-runtime": "^6.11.6",
+ "brfs": "^1.4.0",
+ "brotli": "^1.2.0",
+ "browserify-optional": "^1.0.0",
+ "clone": "^1.0.1",
+ "deep-equal": "^1.0.0",
+ "dfa": "^1.0.0",
+ "restructure": "^0.5.3",
+ "tiny-inflate": "^1.0.2",
+ "unicode-properties": "^1.0.0",
+ "unicode-trie": "^0.3.0"
}
},
"for-in": {
"integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
"dev": true,
"requires": {
- "for-in": "1.0.2"
+ "for-in": "^1.0.1"
}
},
"foreach": {
"integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
"dev": true,
"requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "2.1.18"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
}
},
"fragment-cache": {
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
"dev": true,
"requires": {
- "map-cache": "0.2.2"
+ "map-cache": "^0.2.2"
}
},
"fs-extra": {
"integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "jsonfile": "2.4.0",
- "klaw": "1.3.1"
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0"
},
"dependencies": {
"graceful-fs": {
"integrity": "sha1-gAI4I5gfn//+AWCei+Zo9prknnA=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11"
+ "graceful-fs": "^4.1.2"
},
"dependencies": {
"graceful-fs": {
"dev": true
},
"fsevents": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
- "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
"dev": true,
"optional": true,
"requires": {
- "nan": "2.9.2",
- "node-pre-gyp": "0.6.39"
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
},
"dependencies": {
"abbrev": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
- "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
+ "version": "1.1.1",
+ "bundled": true,
"dev": true,
"optional": true
},
- "ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
- "dev": true,
- "optional": true,
- "requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
- }
- },
"ansi-regex": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "bundled": true,
"dev": true
},
"aproba": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz",
- "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=",
+ "version": "1.2.0",
+ "bundled": true,
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
- "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.2.9"
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
}
},
- "asn1": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
- "dev": true,
- "optional": true
- },
- "assert-plus": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
- "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
- "dev": true,
- "optional": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true,
- "optional": true
- },
- "aws-sign2": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
- "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
- "dev": true,
- "optional": true
- },
- "aws4": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
- "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
- "dev": true,
- "optional": true
- },
"balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "version": "1.0.0",
+ "bundled": true,
"dev": true
},
- "bcrypt-pbkdf": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
- "dev": true,
- "optional": true,
- "requires": {
- "tweetnacl": "0.14.5"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- }
- },
- "boom": {
- "version": "2.10.1",
- "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
- "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
- "dev": true,
- "requires": {
- "hoek": "2.16.3"
- }
- },
"brace-expansion": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
- "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
+ "version": "1.1.11",
+ "bundled": true,
"dev": true,
"requires": {
- "balanced-match": "0.4.2",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
- "buffer-shims": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
- "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true,
- "optional": true
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "bundled": true,
"dev": true
},
- "combined-stream": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
- "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
- "dev": true,
- "requires": {
- "delayed-stream": "1.0.0"
- }
- },
"concat-map": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "bundled": true,
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "bundled": true,
"dev": true
},
"core-util-is": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "cryptiles": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
- "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
- "dev": true,
- "requires": {
- "boom": "2.10.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "bundled": true,
"dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true,
- "optional": true
- }
- }
+ "optional": true
},
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
}
},
"deep-extend": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
- "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "version": "0.5.1",
+ "bundled": true,
"dev": true,
"optional": true
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
"delegates": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "bundled": true,
"dev": true,
"optional": true
},
"detect-libc": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz",
- "integrity": "sha1-ca1dIEvxempsqPRQxhRUBm70YeE=",
- "dev": true,
- "optional": true
- },
- "ecc-jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
- "dev": true,
- "optional": true,
- "requires": {
- "jsbn": "0.1.1"
- }
- },
- "extend": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "version": "1.0.3",
+ "bundled": true,
"dev": true,
"optional": true
},
- "extsprintf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
- "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true,
- "optional": true
- },
- "form-data": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
- "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.15"
+ "minipass": "^2.2.1"
}
},
"fs.realpath": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.1"
- }
- },
- "fstream-ignore": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
- "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
+ "bundled": true,
"dev": true,
- "optional": true,
- "requires": {
- "fstream": "1.0.11",
- "inherits": "2.0.3",
- "minimatch": "3.0.4"
- }
+ "optional": true
},
"gauge": {
"version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "1.1.1",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true,
- "optional": true
- }
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
}
},
"glob": {
"version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
- "dev": true
- },
- "har-schema": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
- "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
- "dev": true,
- "optional": true
- },
- "har-validator": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
- "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "ajv": "4.11.8",
- "har-schema": "1.0.5"
+ "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"
}
},
"has-unicode": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "bundled": true,
"dev": true,
"optional": true
},
- "hawk": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
- "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "boom": "2.10.1",
- "cryptiles": "2.0.5",
- "hoek": "2.16.3",
- "sntp": "1.0.9"
+ "safer-buffer": "^2.1.0"
}
},
- "hoek": {
- "version": "2.16.3",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
- "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
- "dev": true
- },
- "http-signature": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
- "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "0.2.0",
- "jsprim": "1.4.0",
- "sshpk": "1.13.0"
+ "minimatch": "^3.0.4"
}
},
"inflight": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "bundled": true,
"dev": true
},
"ini": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
- "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "version": "1.3.5",
+ "bundled": true,
"dev": true,
"optional": true
},
"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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "bundled": true,
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true,
- "optional": true
- },
"isarray": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true,
- "optional": true
- },
- "jodid25519": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
- "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
- "dev": true,
- "optional": true,
- "requires": {
- "jsbn": "0.1.1"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true,
- "optional": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true,
- "optional": true
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
- "dev": true,
- "optional": true,
- "requires": {
- "jsonify": "0.0.0"
- }
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true,
- "optional": true
- },
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "bundled": true,
"dev": true,
"optional": true
},
- "jsprim": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
- "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
"dev": true,
- "optional": true,
"requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.0.2",
- "json-schema": "0.2.3",
- "verror": "1.3.6"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true,
- "optional": true
- }
+ "brace-expansion": "^1.1.7"
}
},
- "mime-db": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
- "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=",
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
"dev": true
},
- "mime-types": {
- "version": "2.1.15",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
- "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
"dev": true,
"requires": {
- "mime-db": "1.27.0"
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
}
},
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "brace-expansion": "1.1.7"
+ "minipass": "^2.2.1"
}
},
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
"mkdirp": {
"version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "bundled": true,
"dev": true,
"requires": {
"minimist": "0.0.8"
},
"ms": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "bundled": true,
"dev": true,
"optional": true
},
+ "needle": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
"node-pre-gyp": {
- "version": "0.6.39",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz",
- "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==",
+ "version": "0.10.0",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "detect-libc": "1.0.2",
- "hawk": "3.1.3",
- "mkdirp": "0.5.1",
- "nopt": "4.0.1",
- "npmlog": "4.1.0",
- "rc": "1.2.1",
- "request": "2.81.0",
- "rimraf": "2.6.1",
- "semver": "5.3.0",
- "tar": "2.2.1",
- "tar-pack": "3.4.0"
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
}
},
"nopt": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "abbrev": "1.1.0",
- "osenv": "0.1.4"
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
}
},
"npmlog": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz",
- "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==",
+ "version": "4.1.2",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "are-we-there-yet": "1.1.4",
- "console-control-strings": "1.1.0",
- "gauge": "2.7.4",
- "set-blocking": "2.0.0"
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "bundled": true,
"dev": true
},
- "oauth-sign": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
- "dev": true,
- "optional": true
- },
"object-assign": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "bundled": true,
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "bundled": true,
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "bundled": true,
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "bundled": true,
"dev": true,
"optional": true
},
"osenv": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
- "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "version": "0.1.5",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "performance-now": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
- "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
- "dev": true
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true,
- "optional": true
- },
- "qs": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
- "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "version": "2.0.0",
+ "bundled": true,
"dev": true,
"optional": true
},
"rc": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
- "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
+ "version": "1.2.7",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "0.4.2",
- "ini": "1.3.4",
- "minimist": "1.2.0",
- "strip-json-comments": "2.0.1"
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "bundled": true,
"dev": true,
"optional": true
}
}
},
"readable-stream": {
- "version": "2.2.9",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz",
- "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=",
- "dev": true,
- "requires": {
- "buffer-shims": "1.0.0",
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "string_decoder": "1.0.1",
- "util-deprecate": "1.0.2"
- }
- },
- "request": {
- "version": "2.81.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
- "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "version": "2.3.6",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "aws-sign2": "0.6.0",
- "aws4": "1.6.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.5",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.1.4",
- "har-validator": "4.2.1",
- "hawk": "3.1.3",
- "http-signature": "1.1.1",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.15",
- "oauth-sign": "0.8.2",
- "performance-now": "0.2.0",
- "qs": "6.4.0",
- "safe-buffer": "5.0.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.2",
- "tunnel-agent": "0.6.0",
- "uuid": "3.0.1"
+ "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"
}
},
"rimraf": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
- "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "version": "2.6.2",
+ "bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "glob": "7.1.2"
+ "glob": "^7.0.5"
}
},
"safe-buffer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
- "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
+ "version": "5.1.1",
+ "bundled": true,
"dev": true
},
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
"semver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "version": "5.5.0",
+ "bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "bundled": true,
"dev": true,
"optional": true
},
- "sntp": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
- "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
"dev": true,
"requires": {
- "hoek": "2.16.3"
- }
- },
- "sshpk": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz",
- "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=",
- "dev": true,
- "optional": true,
- "requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jodid25519": "1.0.2",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true,
- "optional": true
- }
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
},
"string_decoder": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
- "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
- "dev": true,
- "requires": {
- "safe-buffer": "5.0.1"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "version": "1.1.1",
+ "bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "safe-buffer": "~5.1.0"
}
},
- "stringstream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
- "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
- "dev": true,
- "optional": true
- },
"strip-ansi": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "bundled": true,
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "bundled": true,
"dev": true,
"optional": true
},
"tar": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
- "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
- "dev": true,
- "requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.11",
- "inherits": "2.0.3"
- }
- },
- "tar-pack": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz",
- "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=",
+ "version": "4.4.1",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "debug": "2.6.8",
- "fstream": "1.0.11",
- "fstream-ignore": "1.0.5",
- "once": "1.4.0",
- "readable-stream": "2.2.9",
- "rimraf": "2.6.1",
- "tar": "2.2.1",
- "uid-number": "0.0.6"
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
}
},
- "tough-cookie": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
- "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
- "dev": true,
- "optional": true,
- "requires": {
- "punycode": "1.4.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true,
- "optional": true
- },
- "uid-number": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
- "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=",
- "dev": true,
- "optional": true
- },
"util-deprecate": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "uuid": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
- "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
+ "bundled": true,
"dev": true,
"optional": true
},
- "verror": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
- "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
- "dev": true,
- "optional": true,
- "requires": {
- "extsprintf": "1.0.2"
- }
- },
"wide-align": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
- "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "string-width": "1.0.2"
+ "string-width": "^1.0.2"
}
},
"wrappy": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true,
"dev": true
}
}
"integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
"dev": true,
"requires": {
- "globule": "0.1.0"
+ "globule": "~0.1.0"
}
},
"generate-function": {
"integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
"dev": true,
"requires": {
- "is-property": "1.0.2"
+ "is-property": "^1.0.0"
}
},
"get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
+ "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
"dev": true
},
"get-value": {
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
}
},
"gl-matrix": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-2.4.0.tgz",
- "integrity": "sha1-IImxMwGinuyCLZ2Z3/wfeO6aPFA=",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-2.6.1.tgz",
+ "integrity": "sha512-fK37p7vkpw5H4WSypfa6TUV8nlB8+Fd1pZj15sMtvRPnfzArvTI4U4E25x2Hmp+UxZX11ve0aGaHarRieP+gSw==",
"dev": true
},
"glob": {
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "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-base": {
"integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
"dev": true,
"requires": {
- "glob-parent": "2.0.0",
- "is-glob": "2.0.1"
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
},
"dependencies": {
"is-extglob": {
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
}
}
"integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
"dev": true,
"requires": {
- "is-glob": "2.0.1"
+ "is-glob": "^2.0.0"
},
"dependencies": {
"is-extglob": {
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
}
}
"integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
"dev": true,
"requires": {
- "glob": "4.5.3",
- "glob2base": "0.0.12",
- "minimatch": "2.0.10",
- "ordered-read-streams": "0.1.0",
- "through2": "0.6.5",
- "unique-stream": "1.0.0"
+ "glob": "^4.3.1",
+ "glob2base": "^0.0.12",
+ "minimatch": "^2.0.1",
+ "ordered-read-streams": "^0.1.0",
+ "through2": "^0.6.1",
+ "unique-stream": "^1.0.0"
},
"dependencies": {
"glob": {
"integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "2.0.10",
- "once": "1.4.0"
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
}
},
"minimatch": {
"integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
"dev": true,
"requires": {
- "brace-expansion": "1.1.11"
+ "brace-expansion": "^1.0.0"
}
},
"readable-stream": {
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "string_decoder": "~0.10.x"
}
},
"through2": {
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "4.0.1"
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
}
}
}
"integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
"dev": true,
"requires": {
- "gaze": "0.5.2"
+ "gaze": "^0.5.1"
}
},
"glob2base": {
"integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
"dev": true,
"requires": {
- "find-index": "0.1.1"
+ "find-index": "^0.1.1"
}
},
"global-modules": {
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
"dev": true,
"requires": {
- "global-prefix": "1.0.2",
- "is-windows": "1.0.2",
- "resolve-dir": "1.0.1"
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
}
},
"global-prefix": {
"integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
"dev": true,
"requires": {
- "expand-tilde": "2.0.2",
- "homedir-polyfill": "1.0.1",
- "ini": "1.3.5",
- "is-windows": "1.0.2",
- "which": "1.3.0"
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
}
},
"globals": {
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
"dev": true,
"requires": {
- "array-union": "1.0.2",
- "arrify": "1.0.1",
- "glob": "7.1.2",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
+ "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"
}
},
"globule": {
"integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
"dev": true,
"requires": {
- "glob": "3.1.21",
- "lodash": "1.0.2",
- "minimatch": "0.2.14"
+ "glob": "~3.1.21",
+ "lodash": "~1.0.1",
+ "minimatch": "~0.2.11"
},
"dependencies": {
"glob": {
"integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
"dev": true,
"requires": {
- "graceful-fs": "1.2.3",
- "inherits": "1.0.2",
- "minimatch": "0.2.14"
+ "graceful-fs": "~1.2.0",
+ "inherits": "1",
+ "minimatch": "~0.2.11"
}
},
"graceful-fs": {
"integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
"dev": true,
"requires": {
- "lru-cache": "2.7.3",
- "sigmund": "1.0.1"
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
}
}
}
"integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
"dev": true,
"requires": {
- "sparkles": "1.0.0"
+ "sparkles": "^1.0.0"
}
},
"graceful-fs": {
"integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
"dev": true,
"requires": {
- "natives": "1.1.1"
+ "natives": "^1.1.0"
}
},
"gulp": {
"integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
"dev": true,
"requires": {
- "archy": "1.0.0",
- "chalk": "1.1.3",
- "deprecated": "0.0.1",
- "gulp-util": "3.0.8",
- "interpret": "1.1.0",
- "liftoff": "2.5.0",
- "minimist": "1.2.0",
- "orchestrator": "0.3.8",
- "pretty-hrtime": "1.0.3",
- "semver": "4.3.6",
- "tildify": "1.2.0",
- "v8flags": "2.1.1",
- "vinyl-fs": "0.3.14"
+ "archy": "^1.0.0",
+ "chalk": "^1.0.0",
+ "deprecated": "^0.0.1",
+ "gulp-util": "^3.0.0",
+ "interpret": "^1.0.0",
+ "liftoff": "^2.1.0",
+ "minimist": "^1.1.0",
+ "orchestrator": "^0.3.0",
+ "pretty-hrtime": "^1.0.0",
+ "semver": "^4.1.0",
+ "tildify": "^1.0.0",
+ "v8flags": "^2.0.2",
+ "vinyl-fs": "^0.3.0"
}
},
"gulp-chmod": {
"integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=",
"dev": true,
"requires": {
- "deep-assign": "1.0.0",
- "stat-mode": "0.2.2",
- "through2": "2.0.3"
+ "deep-assign": "^1.0.0",
+ "stat-mode": "^0.2.0",
+ "through2": "^2.0.0"
}
},
"gulp-cli": {
"integrity": "sha1-b1u+LNC9tISdEs+eEkalhh+LT4g=",
"dev": true,
"requires": {
- "archy": "1.0.0",
- "chalk": "1.1.3",
- "copy-props": "1.6.0",
- "fancy-log": "1.3.2",
- "gulplog": "1.0.0",
- "interpret": "1.1.0",
- "liftoff": "2.5.0",
- "lodash.isfunction": "3.0.9",
- "lodash.isplainobject": "4.0.6",
- "lodash.sortby": "4.7.0",
- "matchdep": "1.0.1",
- "mute-stdout": "1.0.0",
- "pretty-hrtime": "1.0.3",
- "semver-greatest-satisfied-range": "1.1.0",
- "tildify": "1.2.0",
- "v8flags": "2.1.1",
- "wreck": "6.3.0",
- "yargs": "3.32.0"
+ "archy": "^1.0.0",
+ "chalk": "^1.1.0",
+ "copy-props": "^1.4.1",
+ "fancy-log": "^1.1.0",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.0.0",
+ "liftoff": "^2.3.0",
+ "lodash.isfunction": "^3.0.8",
+ "lodash.isplainobject": "^4.0.4",
+ "lodash.sortby": "^4.5.0",
+ "matchdep": "^1.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.0.0",
+ "tildify": "^1.0.0",
+ "v8flags": "^2.0.9",
+ "wreck": "^6.3.0",
+ "yargs": "^3.28.0"
}
},
"gulp-concat": {
"integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
"dev": true,
"requires": {
- "concat-with-sourcemaps": "1.0.5",
- "through2": "2.0.3",
- "vinyl": "2.1.0"
+ "concat-with-sourcemaps": "^1.0.0",
+ "through2": "^2.0.0",
+ "vinyl": "^2.0.0"
},
"dependencies": {
"clone": {
"dev": true
},
"vinyl": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
- "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
+ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
"dev": true,
"requires": {
- "clone": "2.1.1",
- "clone-buffer": "1.0.0",
- "clone-stats": "1.0.0",
- "cloneable-readable": "1.0.0",
- "remove-trailing-separator": "1.1.0",
- "replace-ext": "1.0.0"
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
}
}
}
},
"gulp-header": {
- "version": "1.8.9",
- "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.9.tgz",
- "integrity": "sha1-yfEP7gYy2B6Tl4nG7PRaFRvzCYs=",
+ "version": "1.8.12",
+ "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz",
+ "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==",
"dev": true,
"requires": {
- "concat-with-sourcemaps": "1.0.5",
- "gulp-util": "3.0.8",
- "object-assign": "4.1.1",
- "through2": "2.0.3"
+ "concat-with-sourcemaps": "*",
+ "lodash.template": "^4.4.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~3.0.0"
+ }
+ }
}
},
"gulp-rename": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
- "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.3.0.tgz",
+ "integrity": "sha512-nEuZB7/9i0IZ8AXORTizl2QLP9tcC9uWc/s329zElBLJw1CfOhmMXBxwVlCRKjDyrWuhVP0uBKl61KeQ32TiCg==",
"dev": true
},
"gulp-size": {
"integrity": "sha1-HCtk8X+QcdWr2Z0VS3s0gfj7oSg=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "gulp-util": "3.0.8",
- "gzip-size": "3.0.0",
- "object-assign": "4.1.1",
- "pretty-bytes": "3.0.1",
- "stream-counter": "1.0.0",
- "through2": "2.0.3"
+ "chalk": "^1.0.0",
+ "gulp-util": "^3.0.0",
+ "gzip-size": "^3.0.0",
+ "object-assign": "^4.0.1",
+ "pretty-bytes": "^3.0.1",
+ "stream-counter": "^1.0.0",
+ "through2": "^2.0.0"
}
},
"gulp-standard": {
"integrity": "sha512-w+VBktDzONh807qzV5FvngPgmzuGRWu7oMlIpIvOOmSPlyy/ixM138DGOuMWy1M9bRVMDKEfQSj0aGB2ZjzQSA==",
"dev": true,
"requires": {
- "app-root-path": "2.0.1",
- "colors": "1.1.2",
- "log-symbols": "1.0.2",
- "path": "0.12.7",
- "plugin-error": "1.0.1",
- "standard": "10.0.3",
- "through2": "2.0.3"
+ "app-root-path": "^2.0.0",
+ "colors": "^1.1.2",
+ "log-symbols": "^1.0.2",
+ "path": "^0.12.7",
+ "plugin-error": "^1.0.0",
+ "standard": "^10.0.0",
+ "through2": "^2.0.0"
},
"dependencies": {
- "eslint": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
- "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
- "dev": true,
- "requires": {
- "babel-code-frame": "6.26.0",
- "chalk": "1.1.3",
- "concat-stream": "1.6.0",
- "debug": "2.6.9",
- "doctrine": "2.1.0",
- "escope": "3.6.0",
- "espree": "3.5.3",
- "esquery": "1.0.0",
- "estraverse": "4.2.0",
- "esutils": "2.0.2",
- "file-entry-cache": "2.0.0",
- "glob": "7.1.2",
- "globals": "9.18.0",
- "ignore": "3.3.7",
- "imurmurhash": "0.1.4",
- "inquirer": "0.12.0",
- "is-my-json-valid": "2.17.2",
- "is-resolvable": "1.1.0",
- "js-yaml": "3.6.1",
- "json-stable-stringify": "1.0.1",
- "levn": "0.3.0",
- "lodash": "4.17.5",
- "mkdirp": "0.5.1",
- "natural-compare": "1.4.0",
- "optionator": "0.8.2",
- "path-is-inside": "1.0.2",
- "pluralize": "1.2.1",
- "progress": "1.1.8",
- "require-uncached": "1.0.3",
- "shelljs": "0.7.8",
- "strip-bom": "3.0.0",
- "strip-json-comments": "2.0.1",
- "table": "3.8.3",
- "text-table": "0.2.0",
- "user-home": "2.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": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=",
- "dev": true
- },
- "eslint-config-standard-jsx": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz",
- "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==",
- "dev": true
- },
- "eslint-plugin-promise": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz",
- "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=",
- "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": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=",
- "dev": true,
- "requires": {
- "array.prototype.find": "2.0.4",
- "doctrine": "1.5.0",
- "has": "1.0.1",
- "jsx-ast-utils": "1.4.1",
- "object.assign": "4.1.0"
- },
- "dependencies": {
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "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": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=",
- "dev": true
- },
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- },
- "get-stdin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
- "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
- "dev": true
- },
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "dev": true,
- "requires": {
- "ansi-colors": "1.1.0",
- "arr-diff": "4.0.0",
- "arr-union": "3.1.0",
- "extend-shallow": "3.0.2"
- }
- },
"standard": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/standard/-/standard-10.0.3.tgz",
"integrity": "sha512-JURZ+85ExKLQULckDFijdX5WHzN6RC7fgiZNSV4jFQVo+3tPoQGHyBrGekye/yf0aOfb4210EM5qPNlc2cRh4w==",
"dev": true,
"requires": {
- "eslint": "3.19.0",
+ "eslint": "~3.19.0",
"eslint-config-standard": "10.2.1",
"eslint-config-standard-jsx": "4.0.2",
- "eslint-plugin-import": "2.2.0",
- "eslint-plugin-node": "4.2.3",
- "eslint-plugin-promise": "3.5.0",
- "eslint-plugin-react": "6.10.3",
- "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": "sha1-67d7nI/CyBZf+jU72Rug3/Qa9pA=",
- "dev": true,
- "requires": {
- "deglob": "2.1.0",
- "get-stdin": "5.0.1",
- "minimist": "1.2.0",
- "pkg-conf": "2.1.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "user-home": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
- "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
- "dev": true,
- "requires": {
- "os-homedir": "1.0.2"
+ "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"
}
}
}
"integrity": "sha1-exeRa4UMoPBa9BkN0k6aweJunyY=",
"dev": true,
"requires": {
- "through2": "0.6.5"
+ "through2": "^0.6.3"
},
"dependencies": {
"readable-stream": {
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "string_decoder": "~0.10.x"
}
},
"through2": {
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "4.0.1"
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
}
}
}
"integrity": "sha1-bbhbHQ7mPRgFhZK2WGSdZcLsRUE=",
"dev": true,
"requires": {
- "gulplog": "1.0.0",
- "has-gulplog": "0.1.0",
- "lodash": "4.17.5",
- "make-error-cause": "1.2.2",
- "through2": "2.0.3",
- "uglify-js": "2.8.29",
- "uglify-save-license": "0.4.1",
- "vinyl-sourcemaps-apply": "0.2.1"
+ "gulplog": "^1.0.0",
+ "has-gulplog": "^0.1.0",
+ "lodash": "^4.13.1",
+ "make-error-cause": "^1.1.1",
+ "through2": "^2.0.0",
+ "uglify-js": "~2.8.10",
+ "uglify-save-license": "^0.4.1",
+ "vinyl-sourcemaps-apply": "^0.2.0"
},
"dependencies": {
"lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
}
}
"integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
"dev": true,
"requires": {
- "array-differ": "1.0.0",
- "array-uniq": "1.0.3",
- "beeper": "1.1.1",
- "chalk": "1.1.3",
- "dateformat": "2.2.0",
- "fancy-log": "1.3.2",
- "gulplog": "1.0.0",
- "has-gulplog": "0.1.0",
- "lodash._reescape": "3.0.0",
- "lodash._reevaluate": "3.0.0",
- "lodash._reinterpolate": "3.0.0",
- "lodash.template": "3.6.2",
- "minimist": "1.2.0",
- "multipipe": "0.1.2",
- "object-assign": "3.0.0",
+ "array-differ": "^1.0.0",
+ "array-uniq": "^1.0.2",
+ "beeper": "^1.0.0",
+ "chalk": "^1.0.0",
+ "dateformat": "^2.0.0",
+ "fancy-log": "^1.1.0",
+ "gulplog": "^1.0.0",
+ "has-gulplog": "^0.1.0",
+ "lodash._reescape": "^3.0.0",
+ "lodash._reevaluate": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.template": "^3.0.0",
+ "minimist": "^1.1.0",
+ "multipipe": "^0.1.2",
+ "object-assign": "^3.0.0",
"replace-ext": "0.0.1",
- "through2": "2.0.3",
- "vinyl": "0.5.3"
+ "through2": "^2.0.0",
+ "vinyl": "^0.5.0"
},
"dependencies": {
"object-assign": {
"integrity": "sha1-kPsLSieiZkM4Mv98YSLbXB7olMY=",
"dev": true,
"requires": {
- "consolidate": "0.14.5",
- "es6-promise": "3.3.1",
- "fs-readfile-promise": "2.0.1",
- "gulp-util": "3.0.8",
- "js-yaml": "3.6.1",
- "lodash": "4.17.5",
- "node.extend": "1.1.6",
- "through2": "2.0.3",
- "tryit": "1.0.3",
- "vinyl-bufferstream": "1.0.1"
+ "consolidate": "^0.14.1",
+ "es6-promise": "^3.1.2",
+ "fs-readfile-promise": "^2.0.1",
+ "gulp-util": "^3.0.3",
+ "js-yaml": "^3.2.6",
+ "lodash": "^4.11.1",
+ "node.extend": "^1.1.2",
+ "through2": "^2.0.1",
+ "tryit": "^1.0.1",
+ "vinyl-bufferstream": "^1.0.1"
},
"dependencies": {
"lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
}
}
"integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
"dev": true,
"requires": {
- "glogg": "1.0.1"
+ "glogg": "^1.0.0"
}
},
"gzip-size": {
"integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
"dev": true,
"requires": {
- "duplexer": "0.1.1"
+ "duplexer": "^0.1.1"
}
},
"handlebars": {
"integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
"dev": true,
"requires": {
- "async": "1.5.2",
- "optimist": "0.6.1",
- "source-map": "0.4.4",
- "uglify-js": "2.8.29"
+ "async": "^1.4.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.4.4",
+ "uglify-js": "^2.6"
},
"dependencies": {
"source-map": {
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
}
}
"integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "commander": "2.14.1",
- "is-my-json-valid": "2.17.2",
- "pinkie-promise": "2.0.1"
+ "chalk": "^1.1.1",
+ "commander": "^2.9.0",
+ "is-my-json-valid": "^2.12.4",
+ "pinkie-promise": "^2.0.0"
}
},
"has": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
- "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "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"
+ "function-bind": "^1.1.1"
}
},
"has-ansi": {
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"has-binary": {
"integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
"dev": true,
"requires": {
- "sparkles": "1.0.0"
+ "sparkles": "^1.0.0"
}
},
"has-symbols": {
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
"dev": true,
"requires": {
- "get-value": "2.0.6",
- "has-values": "1.0.0",
- "isobject": "3.0.1"
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
}
},
"has-values": {
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
"dev": true,
"requires": {
- "is-number": "3.0.0",
- "kind-of": "4.0.0"
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
},
"dependencies": {
"kind-of": {
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
}
}
"integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
"dev": true,
"requires": {
- "is-stream": "1.1.0",
- "pinkie-promise": "2.0.1"
+ "is-stream": "^1.0.1",
+ "pinkie-promise": "^2.0.0"
}
},
"hawk": {
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"dev": true,
"requires": {
- "boom": "2.10.1",
- "cryptiles": "2.0.5",
- "hoek": "2.16.3",
- "sntp": "1.0.9"
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
}
},
"hoek": {
"integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
"dev": true,
"requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
}
},
"homedir-polyfill": {
"integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
"dev": true,
"requires": {
- "parse-passwd": "1.0.0"
+ "parse-passwd": "^1.0.0"
}
},
"hosted-git-info": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
- "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.1.tgz",
+ "integrity": "sha512-Ba4+0M4YvIDUUsprMjhVTU1yN9F2/LJSAl69ZpzaLT4l4j5mwTS6jqqW9Ojvj6lKz/veqPzpJBqGbXspOb533A==",
"dev": true
},
"http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
"dev": true,
"requires": {
- "depd": "1.1.1",
+ "depd": "~1.1.2",
"inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": "1.4.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
- "dev": true
- }
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
}
},
"http-proxy": {
- "version": "1.16.2",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
- "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
+ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
"dev": true,
"requires": {
- "eventemitter3": "1.2.0",
- "requires-port": "1.0.0"
+ "eventemitter3": "^3.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
}
},
"http-signature": {
"integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
"dev": true,
"requires": {
- "assert-plus": "0.2.0",
- "jsprim": "1.4.1",
- "sshpk": "1.13.1"
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
"iconv-lite": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
- "dev": true
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
},
"ignore": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
- "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
"dev": true
},
"image-size": {
"integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
"dev": true,
"requires": {
- "repeating": "2.0.1"
+ "repeating": "^2.0.0"
}
},
"indexof": {
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
"integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
"dev": true,
"requires": {
- "ansi-escapes": "1.4.0",
- "ansi-regex": "2.1.1",
- "chalk": "1.1.3",
- "cli-cursor": "1.0.2",
- "cli-width": "2.2.0",
- "figures": "1.7.0",
- "lodash": "4.17.5",
- "readline2": "1.0.1",
- "run-async": "0.1.0",
- "rx-lite": "3.1.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "through": "2.3.8"
+ "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"
},
"dependencies": {
"lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
}
}
"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
"dev": true,
"requires": {
- "is-relative": "1.0.0",
- "is-windows": "1.0.2"
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
}
},
"is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
- "kind-of": "6.0.2"
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-arrayish": {
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
"requires": {
- "binary-extensions": "1.11.0"
+ "binary-extensions": "^1.0.0"
}
},
"is-buffer": {
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"dev": true,
"requires": {
- "builtin-modules": "1.1.1"
+ "builtin-modules": "^1.0.0"
}
},
"is-callable": {
"dev": true
},
"is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
- "kind-of": "6.0.2"
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-date-object": {
"dev": true
},
"is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "1.0.0",
- "is-data-descriptor": "1.0.0",
- "kind-of": "6.0.2"
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
}
},
"is-dotfile": {
"integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
"dev": true,
"requires": {
- "is-primitive": "2.0.0"
+ "is-primitive": "^2.0.0"
}
},
"is-extendable": {
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"is-fullwidth-code-point": {
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"is-glob": {
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
- "is-extglob": "2.1.1"
+ "is-extglob": "^2.1.0"
}
},
"is-my-ip-valid": {
"integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==",
"dev": true,
"requires": {
- "generate-function": "2.0.0",
- "generate-object-property": "1.2.0",
- "is-my-ip-valid": "1.0.0",
- "jsonpointer": "4.0.1",
- "xtend": "4.0.1"
+ "generate-function": "^2.0.0",
+ "generate-object-property": "^1.1.0",
+ "is-my-ip-valid": "^1.0.0",
+ "jsonpointer": "^4.0.0",
+ "xtend": "^4.0.0"
}
},
"is-number": {
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "3.2.2"
+ "kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
}
}
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true
},
- "is-odd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
- "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
- "dev": true,
- "requires": {
- "is-number": "4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- }
- }
- },
"is-path-cwd": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
"dev": true
},
"is-path-in-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
- "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
"dev": true,
"requires": {
- "is-path-inside": "1.0.1"
+ "is-path-inside": "^1.0.0"
}
},
"is-path-inside": {
"integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
"dev": true,
"requires": {
- "path-is-inside": "1.0.2"
+ "path-is-inside": "^1.0.1"
}
},
"is-plain-object": {
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"requires": {
- "isobject": "3.0.1"
+ "isobject": "^3.0.1"
}
},
"is-posix-bracket": {
"integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
"dev": true,
"requires": {
- "has": "1.0.1"
+ "has": "^1.0.1"
}
},
"is-relative": {
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
"dev": true,
"requires": {
- "is-unc-path": "1.0.0"
+ "is-unc-path": "^1.0.0"
}
},
"is-resolvable": {
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
"dev": true,
"requires": {
- "unc-path-regex": "0.1.2"
+ "unc-path-regex": "^0.1.2"
}
},
"is-utf8": {
"integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
"dev": true,
"requires": {
- "abbrev": "1.0.9",
- "async": "1.5.2",
- "escodegen": "1.8.1",
- "esprima": "2.7.3",
- "glob": "5.0.15",
- "handlebars": "4.0.11",
- "js-yaml": "3.6.1",
- "mkdirp": "0.5.1",
- "nopt": "3.0.6",
- "once": "1.4.0",
- "resolve": "1.1.7",
- "supports-color": "3.2.3",
- "which": "1.3.0",
- "wordwrap": "1.0.0"
+ "abbrev": "1.0.x",
+ "async": "1.x",
+ "escodegen": "1.8.x",
+ "esprima": "2.7.x",
+ "glob": "^5.0.15",
+ "handlebars": "^4.0.1",
+ "js-yaml": "3.x",
+ "mkdirp": "0.5.x",
+ "nopt": "3.x",
+ "once": "1.x",
+ "resolve": "1.1.x",
+ "supports-color": "^3.1.0",
+ "which": "^1.1.1",
+ "wordwrap": "^1.0.0"
},
"dependencies": {
"glob": {
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"resolve": {
"integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
"dev": true,
"requires": {
- "has-flag": "1.0.0"
+ "has-flag": "^1.0.0"
}
- },
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
}
}
},
"integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
"dev": true,
"requires": {
- "argparse": "1.0.10",
- "esprima": "2.7.3"
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
}
},
"jsbn": {
"optional": true
},
"json-parse-better-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz",
- "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==",
+ "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-schema": {
"integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
"dev": true,
"requires": {
- "jsonify": "0.0.0"
+ "jsonify": "~0.0.0"
}
},
"json-stringify-safe": {
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11"
+ "graceful-fs": "^4.1.6"
},
"dependencies": {
"graceful-fs": {
"integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==",
"dev": true,
"requires": {
- "bluebird": "3.5.1",
- "body-parser": "1.18.2",
- "chokidar": "1.7.0",
- "colors": "1.1.2",
- "combine-lists": "1.0.1",
- "connect": "3.6.6",
- "core-js": "2.5.3",
- "di": "0.0.1",
- "dom-serialize": "2.2.1",
- "expand-braces": "0.1.2",
- "glob": "7.1.2",
- "graceful-fs": "4.1.11",
- "http-proxy": "1.16.2",
- "isbinaryfile": "3.0.2",
- "lodash": "3.10.1",
- "log4js": "0.6.38",
- "mime": "1.6.0",
- "minimatch": "3.0.4",
- "optimist": "0.6.1",
- "qjobs": "1.2.0",
- "range-parser": "1.2.0",
- "rimraf": "2.6.2",
- "safe-buffer": "5.1.1",
+ "bluebird": "^3.3.0",
+ "body-parser": "^1.16.1",
+ "chokidar": "^1.4.1",
+ "colors": "^1.1.0",
+ "combine-lists": "^1.0.0",
+ "connect": "^3.6.0",
+ "core-js": "^2.2.0",
+ "di": "^0.0.1",
+ "dom-serialize": "^2.2.0",
+ "expand-braces": "^0.1.1",
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.1.2",
+ "http-proxy": "^1.13.0",
+ "isbinaryfile": "^3.0.0",
+ "lodash": "^3.8.0",
+ "log4js": "^0.6.31",
+ "mime": "^1.3.4",
+ "minimatch": "^3.0.2",
+ "optimist": "^0.6.1",
+ "qjobs": "^1.1.4",
+ "range-parser": "^1.2.0",
+ "rimraf": "^2.6.0",
+ "safe-buffer": "^5.0.1",
"socket.io": "1.7.3",
- "source-map": "0.5.7",
+ "source-map": "^0.5.3",
"tmp": "0.0.31",
- "useragent": "2.3.0"
+ "useragent": "^2.1.12"
},
"dependencies": {
"graceful-fs": {
}
},
"karma-coverage": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz",
- "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz",
+ "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==",
"dev": true,
"requires": {
- "dateformat": "1.0.12",
- "istanbul": "0.4.5",
- "lodash": "3.10.1",
- "minimatch": "3.0.4",
- "source-map": "0.5.7"
+ "dateformat": "^1.0.6",
+ "istanbul": "^0.4.0",
+ "lodash": "^4.17.0",
+ "minimatch": "^3.0.0",
+ "source-map": "^0.5.1"
},
"dependencies": {
"dateformat": {
"integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
"dev": true,
"requires": {
- "get-stdin": "4.0.1",
- "meow": "3.7.0"
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
}
},
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
"lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
}
}
"dev": true
},
"karma-jasmine": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.1.tgz",
- "integrity": "sha1-b+hA51oRYAydkehLM8RY4cRqNSk=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz",
+ "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=",
"dev": true
},
"karma-phantomjs-launcher": {
"integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=",
"dev": true,
"requires": {
- "lodash": "4.17.5",
- "phantomjs-prebuilt": "2.1.16"
+ "lodash": "^4.0.1",
+ "phantomjs-prebuilt": "^2.1.7"
},
"dependencies": {
"lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
}
}
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11"
+ "graceful-fs": "^4.1.9"
},
"dependencies": {
"graceful-fs": {
}
},
"lazy-cache": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
- "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
- "dev": true,
- "requires": {
- "set-getter": "0.1.0"
- }
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
},
"lcid": {
"version": "1.0.0",
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
"dev": true,
"requires": {
- "invert-kv": "1.0.0"
+ "invert-kv": "^1.0.0"
}
},
"lcov-parse": {
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true,
"requires": {
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2"
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
}
},
"liftoff": {
"integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
"dev": true,
"requires": {
- "extend": "3.0.1",
- "findup-sync": "2.0.0",
- "fined": "1.1.0",
- "flagged-respawn": "1.0.0",
- "is-plain-object": "2.0.4",
- "object.map": "1.0.1",
- "rechoir": "0.6.2",
- "resolve": "1.5.0"
+ "extend": "^3.0.0",
+ "findup-sync": "^2.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
}
},
"load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "parse-json": "2.2.0",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "strip-bom": "2.0.0"
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
},
"dependencies": {
"graceful-fs": {
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"dev": true
},
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
"strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "0.2.1"
- }
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
}
}
},
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
- "p-locate": "2.0.0",
- "path-exists": "3.0.0"
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
},
"dependencies": {
"path-exists": {
"integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
"dev": true,
"requires": {
- "lodash._root": "3.0.1"
+ "lodash._root": "^3.0.0"
}
},
"lodash.isarguments": {
"integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
"dev": true,
"requires": {
- "lodash._getnative": "3.9.1",
- "lodash.isarguments": "3.1.0",
- "lodash.isarray": "3.0.4"
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
}
},
"lodash.restparam": {
"integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
"dev": true,
"requires": {
- "lodash._basecopy": "3.0.1",
- "lodash._basetostring": "3.0.1",
- "lodash._basevalues": "3.0.0",
- "lodash._isiterateecall": "3.0.9",
- "lodash._reinterpolate": "3.0.0",
- "lodash.escape": "3.2.0",
- "lodash.keys": "3.1.2",
- "lodash.restparam": "3.6.1",
- "lodash.templatesettings": "3.1.1"
+ "lodash._basecopy": "^3.0.0",
+ "lodash._basetostring": "^3.0.0",
+ "lodash._basevalues": "^3.0.0",
+ "lodash._isiterateecall": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0",
+ "lodash.keys": "^3.0.0",
+ "lodash.restparam": "^3.0.0",
+ "lodash.templatesettings": "^3.0.0"
}
},
"lodash.templatesettings": {
"integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
"dev": true,
"requires": {
- "lodash._reinterpolate": "3.0.0",
- "lodash.escape": "3.2.0"
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0"
}
},
"log-driver": {
"integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
"dev": true,
"requires": {
- "chalk": "1.1.3"
+ "chalk": "^1.0.0"
}
},
"log4js": {
"integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "semver": "4.3.6"
+ "readable-stream": "~1.0.2",
+ "semver": "~4.3.3"
},
"dependencies": {
"readable-stream": {
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "string_decoder": "~0.10.x"
}
}
}
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
"dev": true,
"requires": {
- "currently-unhandled": "0.4.1",
- "signal-exit": "3.0.2"
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
}
},
"lru-cache": {
"integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
"dev": true
},
+ "magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "requires": {
+ "vlq": "^0.2.2"
+ }
+ },
"make-error": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz",
"integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
"dev": true,
"requires": {
- "make-error": "1.3.4"
+ "make-error": "^1.2.0"
}
},
"make-iterator": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz",
- "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
"dev": true,
"requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
+ "kind-of": "^6.0.2"
}
},
"map-cache": {
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
"dev": true,
"requires": {
- "object-visit": "1.0.1"
+ "object-visit": "^1.0.0"
}
},
"matchdep": {
"integrity": "sha1-pXozgESR+64girqPaDgEN6vC3KU=",
"dev": true,
"requires": {
- "findup-sync": "0.3.0",
- "micromatch": "2.3.11",
- "resolve": "1.1.7",
+ "findup-sync": "~0.3.0",
+ "micromatch": "^2.3.7",
+ "resolve": "~1.1.6",
"stack-trace": "0.0.9"
},
"dependencies": {
"integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
"dev": true,
"requires": {
- "arr-flatten": "1.1.0"
+ "arr-flatten": "^1.0.1"
}
},
"array-unique": {
"integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
"dev": true,
"requires": {
- "expand-range": "1.8.2",
- "preserve": "0.2.0",
- "repeat-element": "1.1.2"
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
}
},
"expand-brackets": {
"integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
"dev": true,
"requires": {
- "is-posix-bracket": "0.1.1"
+ "is-posix-bracket": "^0.1.0"
}
},
"extglob": {
"integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
},
"findup-sync": {
"integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
"dev": true,
"requires": {
- "glob": "5.0.15"
+ "glob": "~5.0.0"
}
},
"glob": {
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"is-extglob": {
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
},
"kind-of": {
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
},
"micromatch": {
"integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
"dev": true,
"requires": {
- "arr-diff": "2.0.0",
- "array-unique": "0.2.1",
- "braces": "1.8.5",
- "expand-brackets": "0.1.5",
- "extglob": "0.3.2",
- "filename-regex": "2.0.1",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1",
- "kind-of": "3.2.2",
- "normalize-path": "2.1.1",
- "object.omit": "2.0.1",
- "parse-glob": "3.0.4",
- "regex-cache": "0.4.4"
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
}
},
"resolve": {
}
}
},
+ "math-random": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+ "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+ "dev": true
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"dev": true,
"requires": {
- "camelcase-keys": "2.1.0",
- "decamelize": "1.2.0",
- "loud-rejection": "1.6.0",
- "map-obj": "1.0.1",
- "minimist": "1.2.0",
- "normalize-package-data": "2.4.0",
- "object-assign": "4.1.1",
- "read-pkg-up": "1.0.1",
- "redent": "1.0.0",
- "trim-newlines": "1.0.0"
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "merge-source-map": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
+ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
}
},
"micromatch": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz",
- "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==",
- "dev": true,
- "requires": {
- "arr-diff": "4.0.0",
- "array-unique": "0.3.2",
- "braces": "2.3.1",
- "define-property": "2.0.2",
- "extend-shallow": "3.0.2",
- "extglob": "2.0.4",
- "fragment-cache": "0.2.1",
- "kind-of": "6.0.2",
- "nanomatch": "1.2.9",
- "object.pick": "1.3.0",
- "regex-not": "1.0.2",
- "snapdragon": "0.8.1",
- "to-regex": "3.0.2"
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
}
},
"mime": {
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"dev": true,
"requires": {
- "mime-db": "1.33.0"
+ "mime-db": "~1.33.0"
}
},
"minimatch": {
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.11"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
"integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
"dev": true,
"requires": {
- "for-in": "1.0.2",
- "is-extendable": "1.0.1"
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
},
"dependencies": {
"is-extendable": {
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"requires": {
- "is-plain-object": "2.0.4"
+ "is-plain-object": "^2.0.4"
}
}
}
"dev": true
},
"nan": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz",
- "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
"dev": true,
"optional": true
},
"nanomatch": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
- "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
"requires": {
- "arr-diff": "4.0.0",
- "array-unique": "0.3.2",
- "define-property": "2.0.2",
- "extend-shallow": "3.0.2",
- "fragment-cache": "0.2.1",
- "is-odd": "2.0.0",
- "is-windows": "1.0.2",
- "kind-of": "6.0.2",
- "object.pick": "1.3.0",
- "regex-not": "1.0.2",
- "snapdragon": "0.8.1",
- "to-regex": "3.0.2"
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
}
},
"natives": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.1.tgz",
- "integrity": "sha512-8eRaxn8u/4wN8tGkhlc2cgwwvOLMLUMUn4IYTexMgWd+LyUDfeXVkk2ygQR0hvIHbJQXgHujia3ieUUDwNGkEA==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
+ "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==",
"dev": true
},
"natural-compare": {
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
"dev": true
},
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
"node.extend": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz",
"integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=",
"dev": true,
"requires": {
- "is": "3.2.1"
+ "is": "^3.1.0"
}
},
"nopt": {
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
- "abbrev": "1.0.9"
+ "abbrev": "1"
}
},
"normalize-package-data": {
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
"dev": true,
"requires": {
- "hosted-git-info": "2.5.0",
- "is-builtin-module": "1.0.0",
- "semver": "4.3.6",
- "validate-npm-package-license": "3.0.1"
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
}
},
"normalize-path": {
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"requires": {
- "remove-trailing-separator": "1.1.0"
+ "remove-trailing-separator": "^1.0.1"
}
},
"number-is-nan": {
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
"dev": true,
"requires": {
- "copy-descriptor": "0.1.1",
- "define-property": "0.2.5",
- "kind-of": "3.2.2"
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
},
"dependencies": {
"define-property": {
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
+ "is-descriptor": "^0.1.0"
}
},
"kind-of": {
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
}
}
"dev": true
},
"object-keys": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
- "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
"dev": true
},
"object-visit": {
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
"dev": true,
"requires": {
- "isobject": "3.0.1"
+ "isobject": "^3.0.0"
}
},
"object.assign": {
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
"dev": true,
"requires": {
- "define-properties": "1.1.2",
- "function-bind": "1.1.1",
- "has-symbols": "1.0.0",
- "object-keys": "1.0.11"
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
}
},
"object.defaults": {
"integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
"dev": true,
"requires": {
- "array-each": "1.0.1",
- "array-slice": "1.1.0",
- "for-own": "1.0.0",
- "isobject": "3.0.1"
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
}
},
"object.map": {
"integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
"dev": true,
"requires": {
- "for-own": "1.0.0",
- "make-iterator": "1.0.0"
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
}
},
"object.omit": {
"integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
"dev": true,
"requires": {
- "for-own": "0.1.5",
- "is-extendable": "0.1.1"
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
},
"dependencies": {
"for-own": {
"integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
"dev": true,
"requires": {
- "for-in": "1.0.2"
+ "for-in": "^1.0.1"
}
}
}
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
"dev": true,
"requires": {
- "isobject": "3.0.1"
+ "isobject": "^3.0.1"
}
},
"on-finished": {
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"onetime": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
"dev": true
},
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"dev": true,
"requires": {
- "minimist": "0.0.10",
- "wordwrap": "0.0.2"
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
},
"dependencies": {
"minimist": {
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
"dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
}
}
},
"integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
"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",
- "wordwrap": "1.0.0"
- },
- "dependencies": {
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- }
+ "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"
}
},
"options": {
"integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
"dev": true,
"requires": {
- "end-of-stream": "0.1.5",
- "sequencify": "0.0.7",
- "stream-consume": "0.1.1"
+ "end-of-stream": "~0.1.5",
+ "sequencify": "~0.0.7",
+ "stream-consume": "~0.1.0"
}
},
"ordered-read-streams": {
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
"dev": true,
"requires": {
- "lcid": "1.0.0"
+ "lcid": "^1.0.0"
}
},
"os-tmpdir": {
"dev": true
},
"p-limit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
- "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
+ "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-try": "^1.0.0"
}
},
"p-locate": {
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
- "p-limit": "1.2.0"
+ "p-limit": "^1.1.0"
}
},
"p-try": {
"integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
"dev": true,
"requires": {
- "is-absolute": "1.0.0",
- "map-cache": "0.2.2",
- "path-root": "0.1.1"
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
}
},
"parse-glob": {
"integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
"dev": true,
"requires": {
- "glob-base": "0.3.0",
- "is-dotfile": "1.0.3",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1"
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
},
"dependencies": {
"is-extglob": {
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
}
}
},
"parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"dev": true,
"requires": {
- "error-ex": "1.3.1"
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
}
},
"parse-passwd": {
"integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
"dev": true,
"requires": {
- "better-assert": "1.0.2"
+ "better-assert": "~1.0.0"
}
},
"parseqs": {
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
"dev": true,
"requires": {
- "better-assert": "1.0.2"
+ "better-assert": "~1.0.0"
}
},
"parseuri": {
"integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
"dev": true,
"requires": {
- "better-assert": "1.0.2"
+ "better-assert": "~1.0.0"
}
},
"parseurl": {
"integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
"dev": true,
"requires": {
- "process": "0.11.10",
- "util": "0.10.3"
+ "process": "^0.11.1",
+ "util": "^0.10.3"
}
},
"path-exists": {
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
"dev": true,
"requires": {
- "pinkie-promise": "2.0.1"
+ "pinkie-promise": "^2.0.0"
}
},
"path-is-absolute": {
"integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
"dev": true,
"requires": {
- "path-root-regex": "0.1.2"
+ "path-root-regex": "^0.1.0"
}
},
"path-root-regex": {
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
},
"dependencies": {
"graceful-fs": {
"integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
"dev": true,
"requires": {
- "es6-promise": "4.2.4",
- "extract-zip": "1.6.6",
- "fs-extra": "1.0.0",
- "hasha": "2.2.0",
- "kew": "0.7.0",
- "progress": "1.1.8",
- "request": "2.83.0",
- "request-progress": "2.0.1",
- "which": "1.3.0"
+ "es6-promise": "^4.0.3",
+ "extract-zip": "^1.6.5",
+ "fs-extra": "^1.0.0",
+ "hasha": "^2.2.0",
+ "kew": "^0.7.0",
+ "progress": "^1.1.8",
+ "request": "^2.81.0",
+ "request-progress": "^2.0.1",
+ "which": "^1.2.10"
},
"dependencies": {
"es6-promise": {
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": {
- "pinkie": "2.0.4"
+ "pinkie": "^2.0.0"
}
},
"pkg-conf": {
"integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
"dev": true,
"requires": {
- "find-up": "2.1.0",
- "load-json-file": "4.0.0"
+ "find-up": "^2.0.0",
+ "load-json-file": "^4.0.0"
},
"dependencies": {
"find-up": {
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
- "locate-path": "2.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
- "dev": true
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "parse-json": "4.0.0",
- "pify": "3.0.0",
- "strip-bom": "3.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "1.3.1",
- "json-parse-better-errors": "1.0.1"
+ "locate-path": "^2.0.0"
}
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
}
}
},
"integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
"dev": true,
"requires": {
- "debug-log": "1.0.1",
- "find-root": "1.1.0",
- "xtend": "4.0.1"
+ "debug-log": "^1.0.0",
+ "find-root": "^1.0.0",
+ "xtend": "^4.0.1"
}
},
"pkg-dir": {
"integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
"dev": true,
"requires": {
- "find-up": "1.1.2"
+ "find-up": "^1.0.0"
}
},
"pkg-up": {
"integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=",
"dev": true,
"requires": {
- "find-up": "1.1.2"
+ "find-up": "^1.0.0"
+ }
+ },
+ "plugin-error": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
}
},
"pluralize": {
"integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"pretty-hrtime": {
"dev": true,
"requires": {
"buffer-equal": "0.0.1",
- "minimist": "1.2.0",
- "through2": "2.0.3"
+ "minimist": "^1.1.3",
+ "through2": "^2.0.0"
}
},
"randomatic": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
- "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
+ "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
"dev": true,
"requires": {
- "is-number": "3.0.0",
- "kind-of": "4.0.0"
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
},
"dependencies": {
- "kind-of": {
+ "is-number": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
}
}
},
"dev": true
},
"raw-body": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+ "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
"dev": true,
"requires": {
"bytes": "3.0.0",
- "http-errors": "1.6.2",
- "iconv-lite": "0.4.19",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.23",
"unpipe": "1.0.0"
}
},
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"dev": true,
"requires": {
- "load-json-file": "1.1.0",
- "normalize-package-data": "2.4.0",
- "path-type": "1.1.0"
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ }
}
},
"read-pkg-up": {
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"dev": true,
"requires": {
- "find-up": "1.1.2",
- "read-pkg": "1.1.0"
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
}
},
"readable-stream": {
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "string_decoder": "~0.10.x"
}
},
"readdirp": {
"integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "minimatch": "3.0.4",
- "readable-stream": "2.3.4",
- "set-immediate-shim": "1.0.1"
+ "graceful-fs": "^4.1.2",
+ "minimatch": "^3.0.2",
+ "readable-stream": "^2.0.2",
+ "set-immediate-shim": "^1.0.1"
},
"dependencies": {
"graceful-fs": {
"dev": true
},
"readable-stream": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
- "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "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"
}
},
"string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "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.1"
+ "safe-buffer": "~5.1.0"
}
}
}
"integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
"dev": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
"mute-stream": "0.0.5"
}
},
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
"dev": true,
"requires": {
- "resolve": "1.5.0"
+ "resolve": "^1.1.6"
}
},
"redent": {
"integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
"dev": true,
"requires": {
- "indent-string": "2.1.0",
- "strip-indent": "1.0.1"
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
}
},
"regenerator-runtime": {
"integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
"dev": true,
"requires": {
- "is-equal-shallow": "0.1.3"
+ "is-equal-shallow": "^0.1.3"
}
},
"regex-not": {
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"requires": {
- "extend-shallow": "3.0.2",
- "safe-regex": "1.1.0"
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
}
},
"remove-trailing-separator": {
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"dev": true,
"requires": {
- "is-finite": "1.0.2"
+ "is-finite": "^1.0.0"
}
},
"replace-ext": {
"dev": true
},
"request": {
- "version": "2.83.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
- "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
- "dev": true,
- "requires": {
- "aws-sign2": "0.7.0",
- "aws4": "1.6.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.6",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.3.2",
- "har-validator": "5.0.3",
- "hawk": "6.0.2",
- "http-signature": "1.2.0",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.18",
- "oauth-sign": "0.8.2",
- "performance-now": "2.1.0",
- "qs": "6.5.1",
- "safe-buffer": "5.1.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.3",
- "tunnel-agent": "0.6.0",
- "uuid": "3.2.1"
+ "version": "2.87.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
+ "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.6.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.1",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.1",
+ "har-validator": "~5.0.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.17",
+ "oauth-sign": "~0.8.2",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.1",
+ "safe-buffer": "^5.1.1",
+ "tough-cookie": "~2.3.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.1.0"
},
"dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true
},
- "boom": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
- "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
- "dev": true,
- "requires": {
- "hoek": "4.2.1"
- }
- },
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
- "cryptiles": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
- "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
- "dev": true,
- "requires": {
- "boom": "5.2.0"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.2.1"
- }
- }
- }
- },
"form-data": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"dev": true,
"requires": {
- "asynckit": "0.4.0",
+ "asynckit": "^0.4.0",
"combined-stream": "1.0.6",
- "mime-types": "2.1.18"
+ "mime-types": "^2.1.12"
}
},
"har-validator": {
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"dev": true,
"requires": {
- "ajv": "5.5.2",
- "har-schema": "2.0.0"
- }
- },
- "hawk": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
- "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
- "dev": true,
- "requires": {
- "boom": "4.3.1",
- "cryptiles": "3.1.2",
- "hoek": "4.2.1",
- "sntp": "2.1.0"
+ "ajv": "^5.1.0",
+ "har-schema": "^2.0.0"
}
},
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0",
- "jsprim": "1.4.1",
- "sshpk": "1.13.1"
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
"qs": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
},
- "sntp": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
- "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
- "dev": true,
- "requires": {
- "hoek": "4.2.1"
- }
- },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "^5.0.1"
}
}
}
"integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
"dev": true,
"requires": {
- "throttleit": "1.0.0"
+ "throttleit": "^1.0.0"
}
},
"require-uncached": {
"integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
"dev": true,
"requires": {
- "caller-path": "0.1.0",
- "resolve-from": "1.0.1"
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
}
},
"requires-port": {
"dev": true
},
"resolve": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
- "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "path-parse": "^1.0.5"
}
},
"resolve-dir": {
"integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
"dev": true,
"requires": {
- "expand-tilde": "2.0.2",
- "global-modules": "1.0.0"
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
}
},
"resolve-from": {
"integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
"dev": true,
"requires": {
- "exit-hook": "1.1.1",
- "onetime": "1.1.0"
+ "exit-hook": "^1.0.0",
+ "onetime": "^1.0.0"
}
},
"restructure": {
"integrity": "sha1-9U591WNZD7NP1r9Vh2EJrsyyjeg=",
"dev": true,
"requires": {
- "browserify-optional": "1.0.1"
+ "browserify-optional": "^1.0.0"
}
},
"ret": {
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
"dev": true,
"requires": {
- "align-text": "0.1.4"
+ "align-text": "^0.1.1"
}
},
"rimraf": {
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
- "glob": "7.1.2"
+ "glob": "^7.0.5"
}
},
"run-async": {
"integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
"dev": true,
"requires": {
- "once": "1.4.0"
+ "once": "^1.3.0"
}
},
"run-parallel": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.7.tgz",
- "integrity": "sha512-nB641a6enJOh0fdsFHR9SiVCiOlAyjMplImDdjV3kWCzJZw9rwzvGwmpGuPmfX//Yxblh0pkzPcFcxA81iwmxA==",
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
"dev": true
},
"rx-lite": {
"dev": true
},
"safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "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
},
"safe-regex": {
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"dev": true,
"requires": {
- "ret": "0.1.15"
+ "ret": "~0.1.10"
}
},
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=",
"dev": true,
"requires": {
- "sver-compat": "1.5.0"
+ "sver-compat": "^1.5.0"
}
},
"sequencify": {
"integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
"dev": true
},
- "set-getter": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz",
- "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=",
- "dev": true,
- "requires": {
- "to-object-path": "0.3.0"
- }
- },
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
"integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
"dev": true,
"requires": {
- "extend-shallow": "2.0.1",
- "is-extendable": "0.1.1",
- "is-plain-object": "2.0.4",
- "split-string": "3.1.0"
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
},
"dependencies": {
"extend-shallow": {
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "0.1.1"
+ "is-extendable": "^0.1.0"
}
}
}
},
"setprototypeof": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
"dev": true
},
"shallow-copy": {
"integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
"dev": true,
"requires": {
- "glob": "7.1.2",
- "interpret": "1.1.0",
- "rechoir": "0.6.2"
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
}
},
"sigmund": {
"dev": true
},
"snapdragon": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz",
- "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=",
- "dev": true,
- "requires": {
- "base": "0.11.2",
- "debug": "2.6.9",
- "define-property": "0.2.5",
- "extend-shallow": "2.0.1",
- "map-cache": "0.2.2",
- "source-map": "0.5.7",
- "source-map-resolve": "0.5.1",
- "use": "2.0.2"
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
},
"dependencies": {
"define-property": {
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "0.1.6"
+ "is-descriptor": "^0.1.0"
}
},
"extend-shallow": {
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "0.1.1"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
+ "is-extendable": "^0.1.0"
}
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
}
}
},
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true,
"requires": {
- "define-property": "1.0.0",
- "isobject": "3.0.1",
- "snapdragon-util": "3.0.1"
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
},
"dependencies": {
"define-property": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-descriptor": "1.0.2"
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
}
}
}
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"dev": true,
"requires": {
- "kind-of": "3.2.2"
+ "kind-of": "^3.2.0"
},
"dependencies": {
"kind-of": {
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
}
}
"integrity": "sha1-ahfUeYy7yLxuETFTaUkHqLrJSU0=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "inherits": "2.0.3",
- "minimist": "1.2.0",
- "readable-stream": "2.3.4",
- "standard": "9.0.2",
- "standard-json": "1.0.2",
- "text-table": "0.2.0"
+ "chalk": "^1.1.0",
+ "inherits": "^2.0.1",
+ "minimist": "^1.1.1",
+ "readable-stream": "^2.0.6",
+ "standard": "*",
+ "standard-json": "^1.0.0",
+ "text-table": "^0.2.0"
},
"dependencies": {
"isarray": {
"dev": true
},
"readable-stream": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
- "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "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"
}
},
"string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "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.1"
+ "safe-buffer": "~5.1.0"
}
}
}
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"dev": true,
"requires": {
- "hoek": "2.16.3"
+ "hoek": "2.x.x"
}
},
"socket.io": {
"dev": true
},
"source-map-resolve": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
- "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
"dev": true,
"requires": {
- "atob": "2.0.3",
- "decode-uri-component": "0.2.0",
- "resolve-url": "0.2.1",
- "source-map-url": "0.4.0",
- "urix": "0.1.0"
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
}
},
"source-map-url": {
"dev": true
},
"sparkles": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
- "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
"dev": true
},
"spdx-correct": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
- "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
"dev": true,
"requires": {
- "spdx-license-ids": "1.2.2"
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
}
},
- "spdx-expression-parse": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
- "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
"dev": true
},
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
"spdx-license-ids": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
- "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
"dev": true
},
"split-string": {
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"dev": true,
"requires": {
- "extend-shallow": "3.0.2"
+ "extend-shallow": "^3.0.0"
}
},
"sprintf-js": {
"dev": true
},
"sshpk": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
- "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
- "dev": true,
- "requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
},
"dependencies": {
"assert-plus": {
"integrity": "sha1-m9O5RnSS4hKxkU14VTlD/5tI/Zk=",
"dev": true,
"requires": {
- "eslint": "3.18.0",
+ "eslint": "~3.18.0",
"eslint-config-standard": "7.1.0",
"eslint-config-standard-jsx": "3.3.0",
- "eslint-plugin-promise": "3.4.2",
- "eslint-plugin-react": "6.9.0",
- "eslint-plugin-standard": "2.0.1",
- "standard-engine": "5.4.0"
+ "eslint-plugin-promise": "~3.4.0",
+ "eslint-plugin-react": "~6.9.0",
+ "eslint-plugin-standard": "~2.0.1",
+ "standard-engine": "~5.4.0"
+ },
+ "dependencies": {
+ "eslint": {
+ "version": "3.18.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.18.0.tgz",
+ "integrity": "sha1-ZH6YXErnFQLSCsYsEJ9m1RBMiks=",
+ "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"
+ }
+ },
+ "eslint-config-standard": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-7.1.0.tgz",
+ "integrity": "sha1-R+dp6gc59bLVaTsaUBwhyWUPr88=",
+ "dev": true
+ },
+ "eslint-config-standard-jsx": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.3.0.tgz",
+ "integrity": "sha1-yrCAGhWjYL9j+suXqyL73YjYpeA=",
+ "dev": true
+ },
+ "eslint-plugin-promise": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.4.2.tgz",
+ "integrity": "sha1-G+J5Pq/i0YtbEjuBNsJp+AT+cSI=",
+ "dev": true
+ },
+ "eslint-plugin-react": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz",
+ "integrity": "sha1-VMLpkGt2+dEBQgML3DTp1oQKC7I=",
+ "dev": true,
+ "requires": {
+ "array.prototype.find": "^2.0.1",
+ "doctrine": "^1.2.2",
+ "jsx-ast-utils": "^1.3.4"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-standard": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz",
+ "integrity": "sha1-NYlpn/nJF/LCX3apFmh/ZBw2n/M=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "standard-engine": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-5.4.0.tgz",
+ "integrity": "sha1-4OhpWeoHhkJdM4PkDBv3DS+YVXk=",
+ "dev": true,
+ "requires": {
+ "deglob": "^2.1.0",
+ "get-stdin": "^5.0.1",
+ "home-or-tmp": "^2.0.0",
+ "minimist": "^1.1.0",
+ "pkg-conf": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ }
}
},
"standard-engine": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-5.4.0.tgz",
- "integrity": "sha1-4OhpWeoHhkJdM4PkDBv3DS+YVXk=",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz",
+ "integrity": "sha1-67d7nI/CyBZf+jU72Rug3/Qa9pA=",
"dev": true,
"requires": {
- "deglob": "2.1.0",
- "get-stdin": "5.0.1",
- "home-or-tmp": "2.0.0",
- "minimist": "1.2.0",
- "pkg-conf": "2.1.0"
- },
- "dependencies": {
- "get-stdin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
- "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
- "dev": true
- }
+ "deglob": "^2.1.0",
+ "get-stdin": "^5.0.1",
+ "minimist": "^1.1.0",
+ "pkg-conf": "^2.0.0"
}
},
"standard-json": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/standard-json/-/standard-json-1.0.2.tgz",
- "integrity": "sha1-gt6koUx4zZ4104zeS4isa2JZaiM=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/standard-json/-/standard-json-1.0.3.tgz",
+ "integrity": "sha512-lhMP+KREBcfyyMe2ObJlEjJ0lc0ItA9uny83d9ZL6ggYtB79DuaAKCxJVoiflg5EV3D2rpuWn+n4+zXjWXk0sQ==",
"dev": true,
"requires": {
- "concat-stream": "1.6.0"
+ "concat-stream": "^1.5.0"
}
},
"stat-mode": {
"integrity": "sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw==",
"dev": true,
"requires": {
- "escodegen": "1.8.1"
+ "escodegen": "^1.8.1"
}
},
"static-extend": {
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
"dev": true,
"requires": {
- "define-property": "0.2.5",
- "object-copy": "0.1.0"
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
},
"dependencies": {
"define-property": {
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
+ "is-descriptor": "^0.1.0"
}
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
}
}
},
"static-module": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.1.1.tgz",
- "integrity": "sha512-PPLCnxRl74wV38rG1T0rH8Fl2wIktTXFo7/varrZjtSGb/vndZIGkpe4HJVd8hoBYXRkRHW6hlCRAHvmDgrYQQ==",
- "dev": true,
- "requires": {
- "concat-stream": "1.6.0",
- "duplexer2": "0.1.4",
- "escodegen": "1.9.0",
- "falafel": "2.1.0",
- "has": "1.0.1",
- "object-inspect": "1.4.1",
- "quote-stream": "1.0.2",
- "readable-stream": "2.3.4",
- "shallow-copy": "0.0.1",
- "static-eval": "2.0.0",
- "through2": "2.0.3"
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
+ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "~1.6.0",
+ "convert-source-map": "^1.5.1",
+ "duplexer2": "~0.1.4",
+ "escodegen": "~1.9.0",
+ "falafel": "^2.1.0",
+ "has": "^1.0.1",
+ "magic-string": "^0.22.4",
+ "merge-source-map": "1.0.4",
+ "object-inspect": "~1.4.0",
+ "quote-stream": "~1.0.2",
+ "readable-stream": "~2.3.3",
+ "shallow-copy": "~0.0.1",
+ "static-eval": "^2.0.0",
+ "through2": "~2.0.3"
},
"dependencies": {
"duplexer2": {
"integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
"dev": true,
"requires": {
- "readable-stream": "2.3.4"
+ "readable-stream": "^2.0.2"
}
},
"escodegen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
- "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
"dev": true,
"requires": {
- "esprima": "3.1.3",
- "estraverse": "4.2.0",
- "esutils": "2.0.2",
- "optionator": "0.8.2",
- "source-map": "0.5.7"
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
}
},
"esprima": {
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
"dev": true
},
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"dev": true
},
"readable-stream": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
- "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "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"
}
},
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
"string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "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.1"
+ "safe-buffer": "~5.1.0"
}
}
}
},
"statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true
},
"stream-consume": {
"integrity": "sha1-kc8lac5NxQYf6816yyY5SloRR1E=",
"dev": true
},
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- },
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
},
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
"stringstream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
- "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
+ "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
"dev": true
},
"strip-ansi": {
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-bom": {
"integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
"dev": true,
"requires": {
- "first-chunk-stream": "1.0.0",
- "is-utf8": "0.2.1"
+ "first-chunk-stream": "^1.0.0",
+ "is-utf8": "^0.2.0"
}
},
"strip-indent": {
"integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
"dev": true,
"requires": {
- "get-stdin": "4.0.1"
+ "get-stdin": "^4.0.1"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ }
}
},
"strip-json-comments": {
"integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=",
"dev": true,
"requires": {
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
}
},
"svgdom": {
"integrity": "sha1-djlZYSQUjJ8eBlntNGgtN5s2dO4=",
"dev": true,
"requires": {
- "fontkit": "1.7.7",
- "gl-matrix": "2.4.0",
- "image-size": "0.5.5",
- "sax": "1.2.4"
+ "fontkit": "^1.5.4",
+ "gl-matrix": "^2.3.2",
+ "image-size": "^0.5.1",
+ "sax": "^1.2.2"
}
},
"table": {
"integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
"dev": true,
"requires": {
- "ajv": "4.11.8",
- "ajv-keywords": "1.5.1",
- "chalk": "1.1.3",
- "lodash": "4.17.5",
+ "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.1.1"
+ "string-width": "^2.0.0"
},
"dependencies": {
- "ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
- "dev": true,
- "requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
- }
- },
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
"dev": true
},
"lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
},
"string-width": {
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
}
},
"strip-ansi": {
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "3.0.0"
+ "ansi-regex": "^3.0.0"
}
}
}
"integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"requires": {
- "readable-stream": "2.3.4",
- "xtend": "4.0.1"
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
},
"dependencies": {
"isarray": {
"dev": true
},
"readable-stream": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
- "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "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"
}
},
"string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "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.1"
+ "safe-buffer": "~5.1.0"
}
}
}
"integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
"dev": true,
"requires": {
- "os-homedir": "1.0.2"
+ "os-homedir": "^1.0.0"
}
},
"time-stamp": {
"integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
"dev": true,
"requires": {
- "os-tmpdir": "1.0.2"
+ "os-tmpdir": "~1.0.1"
}
},
"to-array": {
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
"dev": true,
"requires": {
- "kind-of": "3.2.2"
+ "kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "is-buffer": "^1.1.5"
}
}
}
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
"dev": true,
"requires": {
- "define-property": "2.0.2",
- "extend-shallow": "3.0.2",
- "regex-not": "1.0.2",
- "safe-regex": "1.1.0"
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
}
},
"to-regex-range": {
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
"dev": true,
"requires": {
- "is-number": "3.0.0",
- "repeat-string": "1.6.1"
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
}
},
"tough-cookie": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
- "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"requires": {
- "punycode": "1.4.1"
+ "punycode": "^1.4.1"
}
},
"trim-newlines": {
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"requires": {
- "prelude-ls": "1.1.2"
+ "prelude-ls": "~1.1.2"
}
},
"type-is": {
"dev": true,
"requires": {
"media-typer": "0.3.0",
- "mime-types": "2.1.18"
+ "mime-types": "~2.1.18"
}
},
"typedarray": {
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true,
"requires": {
- "source-map": "0.5.7",
- "uglify-to-browserify": "1.0.2",
- "yargs": "3.10.0"
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
},
"dependencies": {
"camelcase": {
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
"dev": true,
"requires": {
- "center-align": "0.1.3",
- "right-align": "0.1.3",
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
"wordwrap": "0.0.2"
}
},
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
"dev": true
},
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
"yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
"dev": true,
"requires": {
- "camelcase": "1.2.1",
- "cliui": "2.1.0",
- "decamelize": "1.2.0",
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
"window-size": "0.1.0"
}
}
"integrity": "sha1-epbu9J91aC6mnSMV7smsQ//fAME=",
"dev": true,
"requires": {
- "brfs": "1.4.4",
- "unicode-trie": "0.3.1"
+ "brfs": "^1.4.0",
+ "unicode-trie": "^0.3.0"
}
},
"unicode-trie": {
"integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=",
"dev": true,
"requires": {
- "pako": "0.2.9",
- "tiny-inflate": "1.0.2"
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
}
},
"union-value": {
"integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
"dev": true,
"requires": {
- "arr-union": "3.1.0",
- "get-value": "2.0.6",
- "is-extendable": "0.1.1",
- "set-value": "0.4.3"
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
},
"dependencies": {
"extend-shallow": {
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "0.1.1"
+ "is-extendable": "^0.1.0"
}
},
"set-value": {
"integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
"dev": true,
"requires": {
- "extend-shallow": "2.0.1",
- "is-extendable": "0.1.1",
- "is-plain-object": "2.0.4",
- "to-object-path": "0.3.0"
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
}
}
}
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
"dev": true,
"requires": {
- "has-value": "0.3.1",
- "isobject": "3.0.1"
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
},
"dependencies": {
"has-value": {
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
"dev": true,
"requires": {
- "get-value": "2.0.6",
- "has-values": "0.1.4",
- "isobject": "2.1.0"
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
},
"dependencies": {
"isobject": {
"dev": true
},
"use": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz",
- "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
"dev": true,
"requires": {
- "define-property": "0.2.5",
- "isobject": "3.0.1",
- "lazy-cache": "2.0.2"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
+ "kind-of": "^6.0.2"
}
},
"user-home": {
"integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==",
"dev": true,
"requires": {
- "lru-cache": "4.1.1",
- "tmp": "0.0.31"
+ "lru-cache": "4.1.x",
+ "tmp": "0.0.x"
},
"dependencies": {
"lru-cache": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
- "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
"dev": true,
"requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
}
}
}
},
"util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"dev": true,
"requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- }
+ "inherits": "2.0.3"
}
},
"util-deprecate": {
"dev": true
},
"uuid": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
- "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.0.tgz",
+ "integrity": "sha512-ijO9N2xY/YaOqQ5yz5c4sy2ZjWmA6AR6zASb/gdpeKZ8+948CxwfMW9RrKVk5may6ev8c0/Xguu32e2Llelpqw==",
"dev": true
},
"v8flags": {
"integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
"dev": true,
"requires": {
- "user-home": "1.1.1"
+ "user-home": "^1.1.1"
}
},
"validate-npm-package-license": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
- "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
"dev": true,
"requires": {
- "spdx-correct": "1.0.2",
- "spdx-expression-parse": "1.0.4"
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
}
},
"verror": {
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0",
+ "assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
+ "extsprintf": "^1.2.0"
},
"dependencies": {
"assert-plus": {
"integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
"dev": true,
"requires": {
- "clone": "1.0.3",
- "clone-stats": "0.0.1",
+ "clone": "^1.0.0",
+ "clone-stats": "^0.0.1",
"replace-ext": "0.0.1"
}
},
"integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
"dev": true,
"requires": {
- "defaults": "1.0.3",
- "glob-stream": "3.1.18",
- "glob-watcher": "0.0.6",
- "graceful-fs": "3.0.11",
- "mkdirp": "0.5.1",
- "strip-bom": "1.0.0",
- "through2": "0.6.5",
- "vinyl": "0.4.6"
+ "defaults": "^1.0.0",
+ "glob-stream": "^3.1.5",
+ "glob-watcher": "^0.0.6",
+ "graceful-fs": "^3.0.0",
+ "mkdirp": "^0.5.0",
+ "strip-bom": "^1.0.0",
+ "through2": "^0.6.1",
+ "vinyl": "^0.4.0"
},
"dependencies": {
"clone": {
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "string_decoder": "~0.10.x"
}
},
"through2": {
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "4.0.1"
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
}
},
"vinyl": {
"integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
"dev": true,
"requires": {
- "clone": "0.2.0",
- "clone-stats": "0.0.1"
+ "clone": "^0.2.0",
+ "clone-stats": "^0.0.1"
}
}
}
"integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
"dev": true,
"requires": {
- "source-map": "0.5.7"
+ "source-map": "^0.5.1"
}
},
+ "vlq": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
+ "dev": true
+ },
"void-elements": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
"dev": true
},
"which": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
- "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"requires": {
- "isexe": "2.0.0"
+ "isexe": "^2.0.0"
}
},
"window-size": {
"dev": true
},
"wordwrap": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
"dev": true
},
"wrap-ansi": {
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
"dev": true,
"requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1"
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
}
},
"wrappy": {
"integrity": "sha1-oTaXafB7u2LWo3gzanhx/Hc8dAs=",
"dev": true,
"requires": {
- "boom": "2.10.1",
- "hoek": "2.16.3"
+ "boom": "2.x.x",
+ "hoek": "2.x.x"
}
},
"write": {
"integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
"dev": true,
"requires": {
- "mkdirp": "0.5.1"
+ "mkdirp": "^0.5.1"
}
},
"ws": {
"integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=",
"dev": true,
"requires": {
- "options": "0.0.6",
- "ultron": "1.0.2"
+ "options": ">=0.0.5",
+ "ultron": "1.0.x"
}
},
"wtf-8": {
"integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
"dev": true,
"requires": {
- "camelcase": "2.1.1",
- "cliui": "3.2.0",
- "decamelize": "1.2.0",
- "os-locale": "1.4.0",
- "string-width": "1.0.2",
- "window-size": "0.1.4",
- "y18n": "3.2.1"
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
}
},
"yauzl": {
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
"dev": true,
"requires": {
- "fd-slicer": "1.0.1"
+ "fd-slicer": "~1.0.1"
}
},
"yeast": {