From 2aee317d422937b57dc1218900ec6f9798d0dc48 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 13:09:31 +0100 Subject: [PATCH 001/163] move ultimaker 2 go --- src/settings/printer.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/settings/printer.yml b/src/settings/printer.yml index 3bc6504..9cab853 100644 --- a/src/settings/printer.yml +++ b/src/settings/printer.yml @@ -1,3 +1,11 @@ +ultimaker2go: + title: Ultimaker 2 Go + heatedBed: false + filamentThickness: 2.85 + dimensions: + x: 120 + y: 120 + z: 112 _3Dison_plus: title: 3Dison plus heatedBed: false @@ -271,14 +279,6 @@ ultimaker2_plus: x: 223 y: 223 z: 305 -ultimaker2go: - title: Ultimaker 2 Go - heatedBed: false - filamentThickness: 2.85 - dimensions: - x: 120 - y: 120 - z: 112 ultimaker_original_plus: title: Ultimaker Original Plus heatedBed: true From 43af4e05ab76a1023138c47dd6347226ba88bfb4 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 13:43:53 +0100 Subject: [PATCH 002/163] add doodle3d printer --- src/settings/printer.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/settings/printer.yml b/src/settings/printer.yml index 9cab853..18dd9fa 100644 --- a/src/settings/printer.yml +++ b/src/settings/printer.yml @@ -1,3 +1,30 @@ +doodle3d_printer: + startCode: |- + M140 S{bedTemperature} + M104 S{temperature} + G28 + M109 S{temperature} + M82 + G1 Z10.0 F6000 + G92 E0 + G1 F200 E3 + G92 E0 + endCode: |- + M104 S0 + M140 S0 + G92 E1 + G1 E-1 F300 + G28 X0 Y0 + M84 + M82 + M104 S0 + title: Doodle3D Printer + heatedBed: true + filamentThickness: 1.75 + dimensions: + x: 120 + y: 120 + z: 120 ultimaker2go: title: Ultimaker 2 Go heatedBed: false From 10fb3714c78665d81fbd0e2ac005eb2c14868a12 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 13:44:59 +0100 Subject: [PATCH 003/163] add support for start and end code --- src/sliceActions/helpers/GCode.js | 9 +++++++++ src/sliceActions/slice.js | 29 ++++++++++++++++++----------- src/sliceActions/slicesToGCode.js | 4 ++++ 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/sliceActions/helpers/GCode.js b/src/sliceActions/helpers/GCode.js index 6955cbf..4683c10 100644 --- a/src/sliceActions/helpers/GCode.js +++ b/src/sliceActions/helpers/GCode.js @@ -122,6 +122,15 @@ export default class { return this; } + addGCode(gcode, { temperature, bedTemperature, heatedbed }) { + gcode = gcode + .replace(/{temperature}/gi, temperature) + .replace(/{bedTemperature}/gi, bedTemperature) + .replace(/{if heatedBed}/gi, heatedbed ? '' : ';'); + + this._addGCode(gcode); + } + getGCode() { return { gcode: this._gcode, diff --git a/src/sliceActions/slice.js b/src/sliceActions/slice.js index 57b8232..a7064e3 100644 --- a/src/sliceActions/slice.js +++ b/src/sliceActions/slice.js @@ -76,16 +76,20 @@ export default function(settings, geometry, openObjectIndexes, constructLinePrev function gcodeToString(gcode) { const currentValues = {}; return gcode.reduce((string, command) => { - let first = true; - for (const action in command) { - const value = command[action]; - const currentValue = currentValues[action]; - if (first) { - string += `${action}${value}`; - first = false; - } else if (currentValue !== value) { - string += ` ${action}${value}`; - currentValues[action] = value; + if (typeof command === 'string') { + string += command; + } else { + let first = true; + for (const action in command) { + const value = command[action]; + const currentValue = currentValues[action]; + if (first) { + string += `${action}${value}`; + first = false; + } else if (currentValue !== value) { + string += ` ${action}${value}`; + currentValues[action] = value; + } } } string += '\n'; @@ -101,7 +105,10 @@ function createGcodeGeometry(gcode) { let lastPoint = [0, 0, 0]; for (let i = 0; i < gcode.length; i ++) { - const { G, F, X, Y, Z } = gcode[i]; + const command = gcode[i]; + if (typeof command === 'string') continue; + + const { G, F, X, Y, Z } = command; if (X || Y || Z) { if (G === 1) { diff --git a/src/sliceActions/slicesToGCode.js b/src/sliceActions/slicesToGCode.js index 790385d..cbc38a2 100644 --- a/src/sliceActions/slicesToGCode.js +++ b/src/sliceActions/slicesToGCode.js @@ -22,6 +22,8 @@ export default function slicesToGCode(slices, settings) { const gcode = new GCode(nozzleToFilamentRatio); + if (settings.startCode) gcode.addGCode(settings.startCode, settings); + const defaultProfile = { travelProfile: travel, retractionProfile: retraction @@ -77,6 +79,8 @@ export default function slicesToGCode(slices, settings) { } } + if (settings.endCode) gcode.addGCode(settings.endCode, settings); + return gcode.getGCode(); } From ecc37273caa76baef0e06b90120b1c2a61e89240 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 13:47:16 +0100 Subject: [PATCH 004/163] better error throwing --- src/interface/utils.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/interface/utils.js b/src/interface/utils.js index 492d26b..5feb1c1 100644 --- a/src/interface/utils.js +++ b/src/interface/utils.js @@ -131,7 +131,7 @@ export async function slice(target, name, mesh, settings, printers, quality, mat steps = 2; break; default: - steps = 1; + throw new Error('unknown target'); break; } @@ -197,6 +197,7 @@ export async function slice(target, name, mesh, settings, printers, quality, mat } default: + throw new Error('unknown target'); break; } } From 212075e3069832afc1fd0b6256e1c258bc8782c8 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 14:21:42 +0100 Subject: [PATCH 005/163] pack scene state in scene object --- src/interface/index.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index 6fc92c9..bc31557 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -139,15 +139,15 @@ class Interface extends React.Component { } componentWillUnmount() { - const { editorControls, mesh: { material }, renderer } = this.state; + const { scene: { editorControls, mesh: { material } }, renderer } = this.state; editorControls.dispose(); material.dispose(); renderer.dispose(); } resetMesh = () => { - const { mesh, render, isSlicing } = this.state; if (isSlicing) return; + const { scene: { mesh, render }, isSlicing, isLoading } = this.state; if (mesh) { mesh.position.set(0, 0, 0); mesh.scale.set(1, 1, 1); @@ -161,8 +161,8 @@ class Interface extends React.Component { scaleUp = () => this.scaleMesh(0.9); scaleDown = () => this.scaleMesh(1.0 / 0.9); scaleMesh = (factor) => { - const { mesh, render, isSlicing } = this.state; if (isSlicing) return; + const { scene: { mesh, render }, isSlicing, isLoading } = this.state; if (mesh) { mesh.scale.multiplyScalar(factor); mesh.updateMatrix(); @@ -175,8 +175,8 @@ class Interface extends React.Component { rotateY = () => this.rotate(new Vector3(1, 0, 0), Math.PI / 2.0); rotateZ = () => this.rotate(new Vector3(0, 1, 0), Math.PI / 2.0); rotate = (axis, angle) => { - const { mesh, render, isSlicing } = this.state; if (isSlicing) return; + const { scene: { mesh, render }, isSlicing, isLoading } = this.state; if (mesh) { mesh.rotateOnWorldAxis(axis, angle); placeOnGround(mesh); @@ -185,7 +185,7 @@ class Interface extends React.Component { }; slice = async (target) => { - const { isSlicing, settings, printers, quality, material, mesh: { matrix } } = this.state; + const { isSlicing, isLoading, settings, printers, quality, scene: { material, mesh: { matrix } } } = this.state; const { name, mesh } = this.props; if (isSlicing) return; @@ -233,7 +233,8 @@ class Interface extends React.Component { }; componentWillUpdate(nextProps, nextState) { - const { box, render, setSize } = this.state; + if (!this.state.scene) return; + const { scene: { box, render, setSize } } = this.state; let changed = false; if (box && nextState.settings.dimensions !== this.state.settings.dimensions) { const { dimensions } = nextState.settings; @@ -245,14 +246,14 @@ class Interface extends React.Component { } componentDidUpdate() { - const { updateCanvas } = this.state; + const { scene: { updateCanvas } } = this.state; const { canvas } = this.refs; if (updateCanvas && canvas) updateCanvas(canvas); } onResize3dView = (width, height) => { window.requestAnimationFrame(() => { - const { setSize } = this.state; + const { scene: { setSize } } = this.state; const { pixelRatio } = this.props; if (setSize) setSize(width, height, pixelRatio); }); From 0d64b62f12d95cb5a8534628dc2305fec923de1c Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 14:40:52 +0100 Subject: [PATCH 006/163] update bed temperature of doodle3d printer --- src/settings/printer.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/settings/printer.yml b/src/settings/printer.yml index 18dd9fa..e67a4bb 100644 --- a/src/settings/printer.yml +++ b/src/settings/printer.yml @@ -20,6 +20,7 @@ doodle3d_printer: M104 S0 title: Doodle3D Printer heatedBed: true + bedTemperature: 50 filamentThickness: 1.75 dimensions: x: 120 From 457f110dd2dd23b2757d2b47c399142a61aa10c4 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 15:17:38 +0100 Subject: [PATCH 007/163] slicer can now fetch d3 files from cloud --- index.js | 25 ++---- package-lock.json | 181 ++++++++++++++++++++++++++++++----------- package.json | 3 +- src/interface/index.js | 74 ++++++++++++----- src/interface/utils.js | 19 +++-- 5 files changed, 209 insertions(+), 93 deletions(-) diff --git a/index.js b/index.js index 54d517b..e6ae0cb 100644 --- a/index.js +++ b/index.js @@ -1,17 +1,13 @@ import 'babel-polyfill' import React from 'react'; import { Interface } from 'doodle3d-slicer'; -import doodleURL from '!url-loader!./models/Doodle_2.d3sketch'; import { render } from 'react-dom'; import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import injectTapEventPlugin from 'react-tap-event-plugin'; import jss from 'jss'; import preset from 'jss-preset-default'; import normalize from 'normalize-jss'; -import JSONToSketchData from 'doodle3d-core/shape/JSONToSketchData'; -import createSceneData from 'doodle3d-core/d3/createSceneData.js'; -import { generateExportMesh } from 'doodle3d-core/utils/exportUtils.js'; -import { Matrix4 } from 'three/src/math/Matrix4.js'; +import queryString from 'query-string'; injectTapEventPlugin(); @@ -26,17 +22,10 @@ jss.createStyleSheet({ } }).attach(); -function init(mesh) { - render(( - - - - ), document.getElementById('app')); -} +const { file } = queryString.parse(location.search); -fetch(doodleURL) - .then(resonse => resonse.json()) - .then(json => JSONToSketchData(json)) - .then(file => createSceneData(file)) - .then(sketch => generateExportMesh(sketch, { offsetSingleWalls: false, matrix: new Matrix4() })) - .then(init); +render(( + + + +), document.getElementById('app')); diff --git a/package-lock.json b/package-lock.json index cd11baa..d1dc294 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "integrity": "sha512-glELSijsD9b+/0d9iOdasBwqH3s+xPxD59tJ7aXkBx7klugygGOMXn7PB05AdhVyA1OYMj7GUCegaQa7nvLtmQ==" }, "@doodle3d/doodle3d-core": { - "version": "github:doodle3d/doodle3d-core#0c4e410a27ea2df8336a956e966ee16ad8ac04d7", + "version": "github:doodle3d/doodle3d-core#36a73c233e569fca79d2059a50edb6bdb511aa58", "dev": true, "requires": { "@doodle3d/cal": "0.0.8", @@ -35,16 +35,18 @@ "@doodle3d/threejs-export-stl": "0.0.5", "@doodle3d/touch-events": "0.0.7", "babel-polyfill": "6.26.0", - "bezier-js": "2.2.3", + "bezier-js": "2.2.5", "blueimp-canvas-to-blob": "3.14.0", "bowser": "1.8.1", "fit-curve": "0.1.6", + "google-fonts-webpack-plugin": "0.4.4", "imports-loader": "0.7.1", - "jss": "9.4.0", + "jss": "9.5.1", "keycode": "2.1.9", "lodash": "4.17.4", "memoizee": "0.3.10", - "pouchdb": "6.4.0", + "normalize-wheel": "1.0.1", + "pouchdb": "6.4.1", "proptypes": "1.1.0", "raf": "3.4.0", "ramda": "0.21.0", @@ -66,9 +68,9 @@ }, "dependencies": { "jss": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-9.4.0.tgz", - "integrity": "sha512-ckJpElL5CimehboeLDQoHeY7mlxn0KPnPn2EZVbn6pomhfbTXiQJ6fAJXSp9rUM2hPtE0PG8Swzdy9vhB2v82w==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-9.5.1.tgz", + "integrity": "sha512-py//ogG1xeztpEDmosJtrkfUXibx3qiAr+1GQvfLHp7azpqkzTPLCnainDgH7Zn0q6S7rcM1eINrVT9n/r5f2w==", "dev": true, "requires": { "is-in-browser": "1.1.3", @@ -1716,9 +1718,9 @@ } }, "bezier-js": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.2.3.tgz", - "integrity": "sha1-xVdBFqSjVkpxU41z4LDVFdqN3sU=", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.2.5.tgz", + "integrity": "sha512-HGh+GevPguxrAmnWF2/A+8c8FEatnKcE6WttpYWA5fn1CfpJz4reFbr11DuyFs2gwaIo9vF7aVXW2xg1iaqvyg==", "dev": true }, "big.js": { @@ -1952,6 +1954,12 @@ "isarray": "1.0.0" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, "buffer-from": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz", @@ -2456,6 +2464,11 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", @@ -2729,9 +2742,9 @@ } }, "encoding-down": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-3.0.0.tgz", - "integrity": "sha1-IGjLZ7E3G14frJtfF44FpVUr+l4=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-3.0.1.tgz", + "integrity": "sha512-uvx+39YNqiPLqhXAvOSGBVy/oYBh4p2ShwG9YFCipwgfOhnVIOxuOPE3R9dEGM44bn0VHIrC3ojXq6lNf2ulwg==", "dev": true, "requires": { "abstract-leveldown": "3.0.0", @@ -2748,9 +2761,9 @@ } }, "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { "once": "1.4.0" @@ -2836,9 +2849,9 @@ } }, "es6-error": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.0.2.tgz", - "integrity": "sha1-7sXHJurO9Rt/a3PCDbbhsTsGnJg=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "es6-iterator": { @@ -3173,6 +3186,15 @@ } } }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, "file-saver": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", @@ -4081,14 +4103,6 @@ } } }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, "string-width": { "version": "1.0.2", "bundled": true, @@ -4099,6 +4113,14 @@ "strip-ansi": "3.0.1" } }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, "stringstream": { "version": "0.0.5", "bundled": true, @@ -4338,6 +4360,36 @@ "pinkie-promise": "2.0.1" } }, + "google-fonts-webpack-plugin": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/google-fonts-webpack-plugin/-/google-fonts-webpack-plugin-0.4.4.tgz", + "integrity": "sha512-+e2D9/DVBG9EDydRovzoqMZ658SsTBGbC0c65GyZqkwNvdj8vRSYQKXqbz7/yt7QaXsCPT1MpH45r3ivWOitcw==", + "dev": true, + "requires": { + "lodash": "4.17.4", + "node-fetch": "1.7.3", + "webpack-sources": "0.2.3", + "yauzl": "2.9.1" + }, + "dependencies": { + "source-list-map": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz", + "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=", + "dev": true + }, + "webpack-sources": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz", + "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=", + "dev": true, + "requires": { + "source-list-map": "1.1.2", + "source-map": "0.5.6" + } + } + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -5504,7 +5556,7 @@ "integrity": "sha512-I97zvGOZ6fJ9OFfYv+QmgBpDWbC+UaP5ERJ3oraTyk1v+ABAL4tazris5ym5qL2iLe+qNjXNM/iP8LQcoZMEWw==", "dev": true, "requires": { - "encoding-down": "3.0.0", + "encoding-down": "3.0.1", "levelup": "2.0.1" } }, @@ -6198,6 +6250,12 @@ "white-space-x": "3.0.0" } }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=", + "dev": true + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -6534,6 +6592,12 @@ "sha.js": "2.4.9" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, "pepjs": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/pepjs/-/pepjs-0.4.3.tgz", @@ -6596,9 +6660,9 @@ } }, "pouchdb": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-6.4.0.tgz", - "integrity": "sha512-R9sm7USMctC1/itY9UdtA8iVOF04Ui+rsGnNdO9zLTpolzglWskSL/0B3RQ2OchGYLNgsaZS0UzQ7AQ1SHXobg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-6.4.1.tgz", + "integrity": "sha512-7YrhsBXbQh/iPA8O5Nzixi9QigaQJjqbbCFr+D7Kc258oeXNW9a0t/tOME1Lh84TJiFRuN9982FGVnrBrUhLiA==", "dev": true, "requires": { "argsarray": "0.0.1", @@ -6679,7 +6743,7 @@ "npmlog": "4.1.2", "os-homedir": "1.0.2", "pump": "1.0.3", - "rc": "1.2.2", + "rc": "1.2.3", "simple-get": "1.4.3", "tar-fs": "1.16.0", "tunnel-agent": "0.6.0", @@ -6802,7 +6866,7 @@ "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "dev": true, "requires": { - "end-of-stream": "1.4.0", + "end-of-stream": "1.4.1", "once": "1.4.0" } }, @@ -6818,6 +6882,16 @@ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", "dev": true }, + "query-string": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.0.1.tgz", + "integrity": "sha512-aM+MkQClojlNiKkO09tiN2Fv8jM/L7GWIjG2liWeKljlOdOPNWr+bW3KQ+w5V/uKprpezC7fAsAMsJtJ+2rLKA==", + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -6944,9 +7018,9 @@ "dev": true }, "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.3.tgz", + "integrity": "sha1-UVdakA+N1oOBxxC0cSwhVMPiA1s=", "dev": true, "requires": { "deep-extend": "0.4.2", @@ -7210,7 +7284,7 @@ "dev": true, "requires": { "deep-equal": "1.0.1", - "es6-error": "4.0.2", + "es6-error": "4.1.1", "hoist-non-react-statics": "2.3.1", "invariant": "2.2.2", "is-promise": "2.1.0", @@ -7873,14 +7947,10 @@ "xtend": "4.0.1" } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string-width": { "version": "2.1.1", @@ -7915,6 +7985,15 @@ } } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", @@ -7991,7 +8070,7 @@ "dev": true, "requires": { "bl": "1.2.1", - "end-of-stream": "1.4.0", + "end-of-stream": "1.4.1", "readable-stream": "2.3.3", "xtend": "4.0.1" } @@ -9036,6 +9115,16 @@ } } }, + "yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.0.1" + } + }, "yml-loader": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/yml-loader/-/yml-loader-2.1.0.tgz", diff --git a/package.json b/package.json index 26cabdb..6d7cfc5 100644 --- a/package.json +++ b/package.json @@ -16,11 +16,13 @@ }, "dependencies": { "@doodle3d/clipper-js": "^1.0.7", + "@doodle3d/doodle3d-core": "github:doodle3d/doodle3d-core", "babel-plugin-transform-class-properties": "^6.24.1", "file-saver": "^1.3.3", "lodash": "^4.17.4", "material-ui": "^0.19.4", "proptypes": "^1.1.0", + "query-string": "^5.0.1", "react": "^16.0.0", "react-dom": "^16.0.0", "react-jss": "^7.2.0", @@ -28,7 +30,6 @@ "three": "^0.88.0" }, "devDependencies": { - "@doodle3d/doodle3d-core": "github:doodle3d/doodle3d-core", "babel-cli": "6.24.1", "babel-loader": "7.0.0", "babel-plugin-transform-es2015-classes": "^6.24.1", diff --git a/src/interface/index.js b/src/interface/index.js index bc31557..b4e94ec 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -4,7 +4,7 @@ import { Quaternion } from 'three/src/math/Quaternion.js'; import { Vector3 } from 'three/src/math/Vector3.js'; import { Mesh } from 'three/src/objects/Mesh.js'; import PropTypes from 'proptypes'; -import { placeOnGround, createScene, fetchProgress, slice, TabTemplate } from './utils.js'; +import { centerGeometry, placeOnGround, createScene, fetchProgress, slice, TabTemplate } from './utils.js'; import injectSheet from 'react-jss'; import RaisedButton from 'material-ui/RaisedButton'; import FlatButton from 'material-ui/FlatButton'; @@ -21,6 +21,10 @@ import printerSettings from '../settings/printer.yml'; import materialSettings from '../settings/material.yml'; import qualitySettings from '../settings/quality.yml'; import ReactResizeDetector from 'react-resize-detector'; +import JSONToSketchData from 'doodle3d-core/shape/JSONToSketchData'; +import createSceneData from 'doodle3d-core/d3/createSceneData.js'; +import { generateExportMesh } from 'doodle3d-core/utils/exportUtils.js'; +import { Matrix4 } from 'three/src/math/Matrix4.js'; const MAX_FULLSCREEN_WIDTH = 720; @@ -82,7 +86,10 @@ const styles = { class Interface extends React.Component { static propTypes = { - mesh: PropTypes.shape({ isMesh: PropTypes.oneOf([true]) }).isRequired, + file: PropTypes.oneOfType([ + PropTypes.shape({ isMesh: PropTypes.oneOf([true]) }), + PropTypes.string + ]).isRequired, classes: PropTypes.objectOf(PropTypes.string), defaultSettings: PropTypes.object.isRequired, printers: PropTypes.object.isRequired, @@ -110,9 +117,11 @@ class Interface extends React.Component { constructor(props) { super(props); const { defaultPrinter, defaultQuality, defaultMaterial, printers, quality, material, defaultSettings } = props; + this.state = { showFullScreen: false, isSlicing: false, + isLoading: true, error: null, printers: defaultPrinter, quality: defaultQuality, @@ -133,9 +142,35 @@ class Interface extends React.Component { componentDidMount() { const { canvas } = this.refs; - const scene = createScene(canvas, this.props, this.state); - this.setState({ ...scene }); + + this.setState({ scene }); + + const { file } = this.props; + + if (!file) { + throw new Error('no file provided'); + } if (typeof file === 'string') { + fetch(file) + .then(resonse => resonse.json()) + .then(json => JSONToSketchData(json)) + .then(file => createSceneData(file)) + .then(sketch => generateExportMesh(sketch, { offsetSingleWalls: false, matrix: new Matrix4() })) + .then(mesh => this.updateMesh(mesh, scene)); + } else if (file.isMesh) { + this.updateMesh(file, scene); + } else { + throw new Error('unknown file property'); + } + } + + updateMesh(mesh, scene) { + scene.mesh.geometry = mesh.geometry; + centerGeometry(scene.mesh); + placeOnGround(scene.mesh); + scene.render(); + + this.setState({ mesh, isLoading: false }); } componentWillUnmount() { @@ -146,8 +181,8 @@ class Interface extends React.Component { } resetMesh = () => { - if (isSlicing) return; const { scene: { mesh, render }, isSlicing, isLoading } = this.state; + if (isSlicing || isLoading) return; if (mesh) { mesh.position.set(0, 0, 0); mesh.scale.set(1, 1, 1); @@ -161,8 +196,8 @@ class Interface extends React.Component { scaleUp = () => this.scaleMesh(0.9); scaleDown = () => this.scaleMesh(1.0 / 0.9); scaleMesh = (factor) => { - if (isSlicing) return; const { scene: { mesh, render }, isSlicing, isLoading } = this.state; + if (isSlicing || isLoading) return; if (mesh) { mesh.scale.multiplyScalar(factor); mesh.updateMatrix(); @@ -175,8 +210,8 @@ class Interface extends React.Component { rotateY = () => this.rotate(new Vector3(1, 0, 0), Math.PI / 2.0); rotateZ = () => this.rotate(new Vector3(0, 1, 0), Math.PI / 2.0); rotate = (axis, angle) => { - if (isSlicing) return; const { scene: { mesh, render }, isSlicing, isLoading } = this.state; + if (isSlicing || isLoading) return; if (mesh) { mesh.rotateOnWorldAxis(axis, angle); placeOnGround(mesh); @@ -185,10 +220,10 @@ class Interface extends React.Component { }; slice = async (target) => { - const { isSlicing, isLoading, settings, printers, quality, scene: { material, mesh: { matrix } } } = this.state; - const { name, mesh } = this.props; + const { isSlicing, isLoading, settings, printers, quality, mesh, scene: { material, mesh: { matrix } } } = this.state; + const { name } = this.props; - if (isSlicing) return; + if (isSlicing || isLoading) return; this.closePopover(); @@ -265,14 +300,15 @@ class Interface extends React.Component { render() { const { classes, defaultPrinter, defaultQuality, defaultMaterial, onCancel } = this.props; - const { isSlicing, progress, settings, printers, quality, material, showFullScreen, error } = this.state; + const { isSlicing, isLoading, progress, settings, printers, quality, material, showFullScreen, error } = this.state; + const disableUI = isSlicing || isLoading; const style = { ...(showFullScreen ? {} : { maxWidth: 'inherit', width: '100%', height: '100%' }) }; const settingsPanel = (
- - - - - - + + + + + +
); diff --git a/src/interface/utils.js b/src/interface/utils.js index 5feb1c1..0d81a2f 100644 --- a/src/interface/utils.js +++ b/src/interface/utils.js @@ -27,14 +27,16 @@ export function placeOnGround(mesh) { mesh.updateMatrix(); } -export function createScene(canvas, props, state) { - const { pixelRatio, mesh: { geometry } } = props; - const { settings } = state; - +export function centerGeometry(mesh) { // center geometry - geometry.computeBoundingBox(); - const center = geometry.boundingBox.getCenter(); - geometry.applyMatrix(new Matrix4().makeTranslation(-center.x, -center.y, -center.z)); + mesh.geometry.computeBoundingBox(); + const center = mesh.geometry.boundingBox.getCenter(); + mesh.geometry.applyMatrix(new Matrix4().makeTranslation(-center.x, -center.y, -center.z)); +} + +export function createScene(canvas, props, state) { + const { pixelRatio } = props; + const { settings } = state; const scene = new Scene(); @@ -53,8 +55,7 @@ export function createScene(canvas, props, state) { scene.add(light); const material = new MeshPhongMaterial({ color: 0x2194ce, side: DoubleSide, specular: 0xc5c5c5, shininess: 5 }); - const mesh = new Mesh(geometry, material); - placeOnGround(mesh); + const mesh = new Mesh(new THREE.Geometry(), material); scene.add(mesh); const box = new BoxHelper(new Mesh(new BoxGeometry(1, 1, 1).applyMatrix(new Matrix4().makeTranslation(0, 0.5, 0))), 0x72bcd4); From 03b957001474b8e566cfd8581dc01862d2cc7a56 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 15:24:09 +0100 Subject: [PATCH 008/163] change default bed temperature --- src/settings/default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/default.yml b/src/settings/default.yml index 30f552d..ad4daff 100644 --- a/src/settings/default.yml +++ b/src/settings/default.yml @@ -7,7 +7,7 @@ heatedBed: false nozzleDiameter: 0.4 filamentThickness: 2.85 temperature: 210 -bedTemperature: 70 +bedTemperature: 50 layerHeight: 0.15 combing: true thickness: From 55eadc73debcd10969f640ba0e7fd9a8d5d2910c Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 15:27:12 +0100 Subject: [PATCH 009/163] lower z offset --- src/settings/default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/default.yml b/src/settings/default.yml index ad4daff..41074fb 100644 --- a/src/settings/default.yml +++ b/src/settings/default.yml @@ -1,4 +1,4 @@ -zOffset: 0.3 +zOffset: 0.2 dimensions: x: 200 y: 200 From 700b27e6e04a9d90d82724f215066c5db7924fd4 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 15:29:40 +0100 Subject: [PATCH 010/163] add combing setting --- src/interface/Settings.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/interface/Settings.js b/src/interface/Settings.js index ec45c54..8fbfa90 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -123,6 +123,8 @@ class Settings extends React.Component { +

Combing

+

Retraction

From da3ab2b0e6940b07d004eaefcfcb3e47850593a4 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 15:43:58 +0100 Subject: [PATCH 011/163] Added default line to gcode --- src/constants.js | 1 + src/sliceActions/helpers/GCode.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/constants.js b/src/constants.js index 3e117b5..e08c4ca 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1 +1,2 @@ export const PRECISION = 0.01; +export const VERSION = '0.0.18'; diff --git a/src/sliceActions/helpers/GCode.js b/src/sliceActions/helpers/GCode.js index 4683c10..cf2fbb4 100644 --- a/src/sliceActions/helpers/GCode.js +++ b/src/sliceActions/helpers/GCode.js @@ -1,5 +1,5 @@ import { Vector2 } from 'three/src/math/Vector2.js'; -import { PRECISION } from '../../constants.js'; +import { PRECISION, VERSION } from '../../constants.js'; export const MOVE = 'G'; export const M_COMMAND = 'M'; @@ -14,7 +14,7 @@ export default class { constructor(nozzleToFilamentRatio) { this._nozzleToFilamentRatio = nozzleToFilamentRatio; - this._gcode = []; + this._gcode = [`; Generated with Doodle3D Slicer V${VERSION}`]; this._currentValues = {}; this._nozzlePosition = new Vector2(0, 0); this._extruder = 0.0; From 9a37e8a928d1f30bd4dca7eb9cebbea9dc497c90 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 15:55:48 +0100 Subject: [PATCH 012/163] Revert "lower z offset" This reverts commit 55eadc73debcd10969f640ba0e7fd9a8d5d2910c. --- src/settings/default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/default.yml b/src/settings/default.yml index 41074fb..ad4daff 100644 --- a/src/settings/default.yml +++ b/src/settings/default.yml @@ -1,4 +1,4 @@ -zOffset: 0.2 +zOffset: 0.3 dimensions: x: 200 y: 200 From 1ebbe7fc6a0db9931b7ea0d5e297171ca970a0f1 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 16:30:20 +0100 Subject: [PATCH 013/163] implement brim --- src/interface/Settings.js | 2 +- src/settings/default.yml | 2 +- src/sliceActions/addBrim.js | 22 +++++++++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/interface/Settings.js b/src/interface/Settings.js index 8fbfa90..b97d634 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -147,7 +147,7 @@ class Settings extends React.Component {

Brim

- +

First layer

diff --git a/src/settings/default.yml b/src/settings/default.yml index ad4daff..df5f42e 100644 --- a/src/settings/default.yml +++ b/src/settings/default.yml @@ -44,7 +44,7 @@ outerInfill: flowRate: 1.0 speed: 50.0 brim: - offset: 4.0 + size: 4.0 flowRate: 1.0 speed: 40.0 firstLayer: diff --git a/src/sliceActions/addBrim.js b/src/sliceActions/addBrim.js index 122f140..f3e7627 100644 --- a/src/sliceActions/addBrim.js +++ b/src/sliceActions/addBrim.js @@ -4,21 +4,33 @@ import { PRECISION } from '../constants.js'; const offsetOptions = { jointType: 'jtRound', miterLimit: 2.0, - roundPrecision: 0.25 + roundPrecision: 0.25, + endType: 'etClosedPolygon' }; export default function addBrim(slices, settings) { let { - brim: { offset: brimOffset } + brim: { size: brimSize }, + nozzleDiameter } = settings; - brimOffset /= PRECISION; + + nozzleDiameter /= PRECISION; + brimSize /= PRECISION; + const nozzleRadius = nozzleDiameter / 2; const [firstLayer] = slices; - firstLayer.brim = firstLayer.parts.reduce((brim, { shape }) => ( - brim.join(shape.offset(brimOffset, { + const brim = firstLayer.parts.reduce((brim, { shape }) => ( + brim.join(shape.offset(nozzleRadius, { ...offsetOptions, endType: shape.closed ? 'etClosedPolygon' : 'etOpenRound' })) ), new Shape([], true)).simplify('pftNonZero'); + + firstLayer.brim = new Shape([], true); + + for (let offset = 0; offset < brimSize; offset += nozzleDiameter) { + const brimPart = brim.offset(offset, offsetOptions); + firstLayer.brim = firstLayer.brim.join(brimPart); + } } From eee2682f7064a64093c3025fdb3629291561e2e9 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 16:41:06 +0100 Subject: [PATCH 014/163] Fix brim brim now always prints the most outer layer first --- src/sliceActions/addBrim.js | 5 ++--- src/sliceActions/optimizePaths.js | 10 +++++++--- src/sliceActions/removePrecision.js | 4 +++- src/sliceActions/slicesToGCode.js | 4 +++- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/sliceActions/addBrim.js b/src/sliceActions/addBrim.js index f3e7627..6307e9b 100644 --- a/src/sliceActions/addBrim.js +++ b/src/sliceActions/addBrim.js @@ -27,10 +27,9 @@ export default function addBrim(slices, settings) { })) ), new Shape([], true)).simplify('pftNonZero'); - firstLayer.brim = new Shape([], true); - + firstLayer.brim = []; for (let offset = 0; offset < brimSize; offset += nozzleDiameter) { const brimPart = brim.offset(offset, offsetOptions); - firstLayer.brim = firstLayer.brim.join(brimPart); + firstLayer.brim.unshift(brimPart); } } diff --git a/src/sliceActions/optimizePaths.js b/src/sliceActions/optimizePaths.js index 661e7e0..7def91d 100644 --- a/src/sliceActions/optimizePaths.js +++ b/src/sliceActions/optimizePaths.js @@ -7,9 +7,13 @@ export default function optimizePaths(slices, settings) { for (let layer = 0; layer < slices.length; layer ++) { const slice = slices[layer]; - if (typeof slice.brim !== 'undefined' && slice.brim.paths.length > 0) { - slice.brim = optimizeShape(slice.brim, start); - start.copy(slice.brim.lastPoint(true)); + if (typeof slice.brim !== 'undefined') { + for (let i = 0; i < slice.brim.length; i ++) { + if (slice.brim[i].paths.length > 0) { + slice.brim[i] = optimizeShape(slice.brim[i], start); + start.copy(slice.brim[i].lastPoint(true)); + } + } } const parts = []; diff --git a/src/sliceActions/removePrecision.js b/src/sliceActions/removePrecision.js index 2ecd8df..a237a06 100644 --- a/src/sliceActions/removePrecision.js +++ b/src/sliceActions/removePrecision.js @@ -25,7 +25,9 @@ export default function removePrecision(slices) { slice.support.scaleDown(inversePrecision); } if (typeof slice.brim !== 'undefined') { - slice.brim.scaleDown(inversePrecision); + for (let i = 0; i < slice.brim.length; i ++) { + slice.brim[i].scaleDown(inversePrecision); + } } } } diff --git a/src/sliceActions/slicesToGCode.js b/src/sliceActions/slicesToGCode.js index cbc38a2..049bab5 100644 --- a/src/sliceActions/slicesToGCode.js +++ b/src/sliceActions/slicesToGCode.js @@ -48,7 +48,9 @@ export default function slicesToGCode(slices, settings) { }, {}); if (typeof slice.brim !== 'undefined') { - pathToGCode(null, false, gcode, slice.brim, true, true, z, profiles.brim); + for (let i = 0; i < slice.brim.length; i ++) { + pathToGCode(null, false, gcode, slice.brim[i], false, false, z, profiles.brim); + } } for (let i = 0; i < slice.parts.length; i ++) { From 9d47e8dc237b6ca3e6f5f2ea13bb49de2cb63717 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 17:47:50 +0100 Subject: [PATCH 015/163] change default brim size --- src/settings/default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/default.yml b/src/settings/default.yml index df5f42e..58f1d73 100644 --- a/src/settings/default.yml +++ b/src/settings/default.yml @@ -44,7 +44,7 @@ outerInfill: flowRate: 1.0 speed: 50.0 brim: - size: 4.0 + size: 8.0 flowRate: 1.0 speed: 40.0 firstLayer: From 7b59ba1108d252894f7e428a6babd413f8512959 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Tue, 16 Jan 2018 17:57:34 +0100 Subject: [PATCH 016/163] implement local storage --- package-lock.json | 674 +++++++++----------------------- package.json | 4 + src/constants.js | 1 + src/interface/FormComponents.js | 50 ++- src/interface/Settings.js | 280 ++++++++++--- src/interface/index.js | 89 ++--- src/interface/utils.js | 43 +- 7 files changed, 512 insertions(+), 629 deletions(-) diff --git a/package-lock.json b/package-lock.json index d1dc294..4aa69e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,7 @@ "@doodle3d/cal": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/@doodle3d/cal/-/cal-0.0.8.tgz", - "integrity": "sha512-1qXg62qaZkc/zYPan37CXvUtaJk4aFVLz2y8cqnkN9Y0r1Er5soIZ5esMz4YYyjUrQGawBoYcGvatRALYnzlvg==", - "dev": true + "integrity": "sha512-1qXg62qaZkc/zYPan37CXvUtaJk4aFVLz2y8cqnkN9Y0r1Er5soIZ5esMz4YYyjUrQGawBoYcGvatRALYnzlvg==" }, "@doodle3d/clipper-js": { "version": "1.0.7", @@ -25,7 +24,6 @@ }, "@doodle3d/doodle3d-core": { "version": "github:doodle3d/doodle3d-core#36a73c233e569fca79d2059a50edb6bdb511aa58", - "dev": true, "requires": { "@doodle3d/cal": "0.0.8", "@doodle3d/clipper-js": "1.0.7", @@ -71,7 +69,6 @@ "version": "9.5.1", "resolved": "https://registry.npmjs.org/jss/-/jss-9.5.1.tgz", "integrity": "sha512-py//ogG1xeztpEDmosJtrkfUXibx3qiAr+1GQvfLHp7azpqkzTPLCnainDgH7Zn0q6S7rcM1eINrVT9n/r5f2w==", - "dev": true, "requires": { "is-in-browser": "1.1.3", "symbol-observable": "1.1.0", @@ -81,8 +78,7 @@ "symbol-observable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz", - "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==", - "dev": true + "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==" } } }, @@ -90,7 +86,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@doodle3d/fill-path/-/fill-path-1.0.7.tgz", "integrity": "sha512-4sdgWQ28JgRsmnyy1OnuKHE+DZ8kDGpluGqFmMASh2/6dlyjp2/oXnNEgNefG4/xiEitV8AtzEij9Bijh6yNRw==", - "dev": true, "requires": { "@doodle3d/clipper-js": "1.0.7" } @@ -98,14 +93,12 @@ "@doodle3d/potrace-js": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@doodle3d/potrace-js/-/potrace-js-0.0.6.tgz", - "integrity": "sha512-w1+sG3ClsSaQwo3ks5wl6QLe4aWEHBe8QePq0IeAcj+lypqo770sUcWVfEZWUFBumAhSlCJg3GRc8MsycHy8LA==", - "dev": true + "integrity": "sha512-w1+sG3ClsSaQwo3ks5wl6QLe4aWEHBe8QePq0IeAcj+lypqo770sUcWVfEZWUFBumAhSlCJg3GRc8MsycHy8LA==" }, "@doodle3d/threejs-export-obj": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/@doodle3d/threejs-export-obj/-/threejs-export-obj-0.0.8.tgz", "integrity": "sha512-HVnJCvrjj3FqHJ5+CLVT1oZ0OjS2eOvrpMKjo71Jg7bdrusluIRlF7w9JdaoZs3ScWASAucu2cvTKJ+OAm3Rhw==", - "dev": true, "requires": { "jszip": "3.1.5", "three": "0.88.0" @@ -115,7 +108,6 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/@doodle3d/threejs-export-stl/-/threejs-export-stl-0.0.5.tgz", "integrity": "sha512-GeApmYL657Dug8/+WOHGGijJbQ52dN2AWkhz9FsCe9sehZRhCg0fOg4LKXNS0XGKWMQbyumlbrmCWZrK73sfJA==", - "dev": true, "requires": { "babel-preset-env": "1.6.1", "three": "0.88.0" @@ -125,7 +117,6 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/@doodle3d/touch-events/-/touch-events-0.0.7.tgz", "integrity": "sha512-EpL8IEGKKy2gqFFlxA4n84IeAyPTrEzle0jwmRv+mmVBzwGr6xDl5Ga5vJIrg2WcYs4Xc7qWbiKSHEXvEpDLlg==", - "dev": true, "requires": { "eventdispatcher.js": "0.0.2", "pepjs": "0.4.3" @@ -135,7 +126,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz", "integrity": "sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==", - "dev": true, "requires": { "xtend": "4.0.1" } @@ -231,14 +221,12 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "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=", - "dev": true, "requires": { "delegates": "1.0.0", "readable-stream": "2.3.3" @@ -256,8 +244,7 @@ "argsarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=", - "dev": true + "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" }, "arr-diff": { "version": "2.0.0", @@ -331,8 +318,7 @@ "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "asn1.js": { "version": "4.9.2", @@ -357,8 +343,7 @@ "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 + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" }, "async": { "version": "2.6.0", @@ -378,26 +363,22 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "attempt-x": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/attempt-x/-/attempt-x-1.1.1.tgz", - "integrity": "sha512-hIp37ojJRRW8ExWSxxLpkDHUufk/DFfsb7/cUC1cVbBg7JV4gJTkCTRa44dlL9e5jx1P3VNrjL7QOQfi4MyltA==", - "dev": true + "integrity": "sha512-hIp37ojJRRW8ExWSxxLpkDHUufk/DFfsb7/cUC1cVbBg7JV4gJTkCTRa44dlL9e5jx1P3VNrjL7QOQfi4MyltA==" }, "aws-sign2": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" }, "aws4": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" }, "babel-cli": { "version": "6.24.1", @@ -490,7 +471,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, "requires": { "babel-helper-explode-assignable-expression": "6.24.1", "babel-runtime": "6.26.0", @@ -542,7 +522,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, "requires": { "babel-helper-hoist-variables": "6.24.1", "babel-runtime": "6.26.0", @@ -554,7 +533,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -566,7 +544,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -576,7 +553,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -587,8 +563,7 @@ "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" } } }, @@ -596,7 +571,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.25.0", @@ -640,7 +614,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -650,7 +623,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -660,7 +632,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", @@ -671,7 +642,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -681,7 +651,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -692,8 +661,7 @@ "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" } } }, @@ -701,7 +669,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -714,7 +681,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, "requires": { "babel-helper-optimise-call-expression": "6.24.1", "babel-messages": "6.23.0", @@ -757,7 +723,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -765,8 +730,7 @@ "babel-plugin-syntax-async-functions": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", @@ -806,8 +770,7 @@ "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" }, "babel-plugin-syntax-export-extensions": { "version": "6.13.0", @@ -842,8 +805,7 @@ "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" }, "babel-plugin-transform-async-generator-functions": { "version": "6.24.1", @@ -860,7 +822,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, "requires": { "babel-helper-remap-async-to-generator": "6.24.1", "babel-plugin-syntax-async-functions": "6.13.0", @@ -916,7 +877,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -925,7 +885,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -934,7 +893,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-template": "6.26.0", @@ -947,7 +905,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", @@ -958,7 +915,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -968,7 +924,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", @@ -981,7 +936,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, "requires": { "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", @@ -998,7 +952,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -1009,14 +962,12 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" } } }, @@ -1024,7 +975,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, "requires": { "babel-helper-define-map": "6.26.0", "babel-helper-function-name": "6.24.1", @@ -1041,7 +991,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-template": "6.25.0" @@ -1051,7 +1000,6 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1060,7 +1008,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -1070,7 +1017,6 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1079,7 +1025,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -1090,7 +1035,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1099,7 +1043,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, "requires": { "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", "babel-runtime": "6.26.0", @@ -1110,7 +1053,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true, "requires": { "babel-plugin-transform-strict-mode": "6.24.1", "babel-runtime": "6.26.0", @@ -1122,7 +1064,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", @@ -1133,7 +1074,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -1143,7 +1083,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", @@ -1156,7 +1095,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, "requires": { "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", @@ -1173,7 +1111,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -1184,14 +1121,12 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" } } }, @@ -1199,7 +1134,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, "requires": { "babel-helper-hoist-variables": "6.24.1", "babel-runtime": "6.26.0", @@ -1210,7 +1144,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, "requires": { "babel-plugin-transform-es2015-modules-amd": "6.24.1", "babel-runtime": "6.26.0", @@ -1221,7 +1154,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, "requires": { "babel-helper-replace-supers": "6.24.1", "babel-runtime": "6.26.0" @@ -1231,7 +1163,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, "requires": { "babel-helper-call-delegate": "6.24.1", "babel-helper-get-function-arity": "6.24.1", @@ -1245,7 +1176,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -1255,7 +1185,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1264,7 +1193,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, "requires": { "babel-helper-regex": "6.26.0", "babel-runtime": "6.26.0", @@ -1275,7 +1203,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1284,7 +1211,6 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1293,7 +1219,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, "requires": { "babel-helper-regex": "6.26.0", "babel-runtime": "6.26.0", @@ -1304,7 +1229,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, "requires": { "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", "babel-plugin-syntax-exponentiation-operator": "6.13.0", @@ -1413,7 +1337,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, "requires": { "regenerator-transform": "0.10.1" } @@ -1431,7 +1354,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -1441,7 +1363,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "core-js": "2.5.3", @@ -1452,7 +1373,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.5.3", "regenerator-runtime": "0.11.1" @@ -1461,16 +1381,14 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" } } }, "core-js": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" } } }, @@ -1478,7 +1396,6 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", - "dev": true, "requires": { "babel-plugin-check-es2015-constants": "6.22.0", "babel-plugin-syntax-trailing-function-commas": "6.22.0", @@ -1711,7 +1628,6 @@ "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" @@ -1720,14 +1636,12 @@ "bezier-js": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.2.5.tgz", - "integrity": "sha512-HGh+GevPguxrAmnWF2/A+8c8FEatnKcE6WttpYWA5fn1CfpJz4reFbr11DuyFs2gwaIo9vF7aVXW2xg1iaqvyg==", - "dev": true + "integrity": "sha512-HGh+GevPguxrAmnWF2/A+8c8FEatnKcE6WttpYWA5fn1CfpJz4reFbr11DuyFs2gwaIo9vF7aVXW2xg1iaqvyg==" }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" }, "binary-extensions": { "version": "1.8.0", @@ -1738,14 +1652,12 @@ "bindings": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==", - "dev": true + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" }, "bl": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "dev": true, "requires": { "readable-stream": "2.3.3" } @@ -1759,8 +1671,7 @@ "blueimp-canvas-to-blob": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.14.0.tgz", - "integrity": "sha512-i6I2CiX1VR8YwUNYBo+dM8tg89ns4TTHxSpWjaDeHKcYS3yFalpLCwDaY21/EsJMufLy2tnG4j0JN5L8OVNkKQ==", - "dev": true + "integrity": "sha512-i6I2CiX1VR8YwUNYBo+dM8tg89ns4TTHxSpWjaDeHKcYS3yFalpLCwDaY21/EsJMufLy2tnG4j0JN5L8OVNkKQ==" }, "bn.js": { "version": "4.11.8", @@ -1821,7 +1732,6 @@ "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" } @@ -1937,7 +1847,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.8.0.tgz", "integrity": "sha512-iiWHM1Et6Q4TQpB7Ar6pxuM3TNMXasVJY4Y/oh3q38EwR3Z+IdZ9MyVf7PI4MJFB4xpwMcZgs9bEUnPG2E3TCA==", - "dev": true, "requires": { "caniuse-lite": "1.0.30000760", "electron-to-chromium": "1.3.27" @@ -1957,14 +1866,12 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, "buffer-from": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz", "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=", - "dev": true, "requires": { "is-array-buffer-x": "1.7.0" } @@ -2002,8 +1909,7 @@ "cached-constructors-x": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.0.tgz", - "integrity": "sha512-JVP0oilYlPgBTD8bkQ+of7hSIJRtydCCJiMtzdRMXVQ98gdj0NyrJTZzbu5wtlO26Ev/1HXRTtbBNsVlLJ3+3A==", - "dev": true + "integrity": "sha512-JVP0oilYlPgBTD8bkQ+of7hSIJRtydCCJiMtzdRMXVQ98gdj0NyrJTZzbu5wtlO26Ev/1HXRTtbBNsVlLJ3+3A==" }, "camel-case": { "version": "3.0.0", @@ -2042,14 +1948,12 @@ "caniuse-lite": { "version": "1.0.30000760", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz", - "integrity": "sha1-7HIDlXQvHH7IlH/W3SYE53qPmP8=", - "dev": true + "integrity": "sha1-7HIDlXQvHH7IlH/W3SYE53qPmP8=" }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "center-align": { "version": "0.1.3", @@ -2103,8 +2007,7 @@ "chownr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "cipher-base": { "version": "1.0.4", @@ -2119,8 +2022,7 @@ "classnames": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=", - "dev": true + "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" }, "clean-css": { "version": "4.1.9", @@ -2145,26 +2047,22 @@ "clone-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "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=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "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" } @@ -2240,8 +2138,7 @@ "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=", - "dev": true + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "constants-browserify": { "version": "1.0.0", @@ -2287,8 +2184,7 @@ "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 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-ecdh": { "version": "4.0.0", @@ -2351,7 +2247,6 @@ "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" } @@ -2422,7 +2317,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, "requires": { "es5-ext": "0.10.35" } @@ -2431,7 +2325,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, "requires": { "assert-plus": "1.0.0" }, @@ -2439,8 +2332,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, @@ -2472,20 +2364,17 @@ "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, "deep-extend": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" }, "deferred-leveldown": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-2.0.3.tgz", "integrity": "sha512-8c2Hv+vIwKNc7qqy4zE3t5DIsln+FQnudcyjLYstHwLFg7XnXZT/H8gQb8lj6xi8xqGM0Bz633ZWcCkonycBTA==", - "dev": true, "requires": { "abstract-leveldown": "3.0.0" } @@ -2525,14 +2414,12 @@ "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 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { "version": "1.1.1", @@ -2681,14 +2568,12 @@ "double-ended-queue": { "version": "2.1.0-0", "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", - "dev": true + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" }, "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" @@ -2703,8 +2588,7 @@ "electron-to-chromium": { "version": "1.3.27", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", - "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", - "dev": true + "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=" }, "elliptic": { "version": "6.4.0", @@ -2724,8 +2608,7 @@ "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "encodeurl": { "version": "1.0.1", @@ -2745,7 +2628,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-3.0.1.tgz", "integrity": "sha512-uvx+39YNqiPLqhXAvOSGBVy/oYBh4p2ShwG9YFCipwgfOhnVIOxuOPE3R9dEGM44bn0VHIrC3ojXq6lNf2ulwg==", - "dev": true, "requires": { "abstract-leveldown": "3.0.0", "level-codec": "8.0.0", @@ -2755,8 +2637,7 @@ "level-codec": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-8.0.0.tgz", - "integrity": "sha512-gNZlo1HRHz0BWxzGCyNf7xntAs2HKOPvvRBWtXsoDvEX4vMYnSTBS6ZnxoaiX7nhxSBPpegRa8CQ/hnfGBKk3Q==", - "dev": true + "integrity": "sha512-gNZlo1HRHz0BWxzGCyNf7xntAs2HKOPvvRBWtXsoDvEX4vMYnSTBS6ZnxoaiX7nhxSBPpegRa8CQ/hnfGBKk3Q==" } } }, @@ -2764,7 +2645,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "1.4.0" } @@ -2773,7 +2653,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", "integrity": "sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=", - "dev": true, "requires": { "write-stream": "0.4.3" } @@ -2800,7 +2679,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, "requires": { "prr": "0.0.0" } @@ -2842,7 +2720,6 @@ "version": "0.10.35", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", - "dev": true, "requires": { "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" @@ -2851,14 +2728,12 @@ "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35", @@ -2882,8 +2757,7 @@ "es6-promise": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" }, "es6-set": { "version": "0.1.5", @@ -2902,7 +2776,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35" @@ -2980,7 +2853,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35" @@ -2989,8 +2861,7 @@ "eventdispatcher.js": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/eventdispatcher.js/-/eventdispatcher.js-0.0.2.tgz", - "integrity": "sha1-wntZzkEEa2iUEu3M/UzYr8ZM2DU=", - "dev": true + "integrity": "sha1-wntZzkEEa2iUEu3M/UzYr8ZM2DU=" }, "eventemitter3": { "version": "1.2.0", @@ -3059,8 +2930,7 @@ "expand-template": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz", - "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==", - "dev": true + "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==" }, "express": { "version": "4.16.2", @@ -3120,8 +2990,7 @@ "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extglob": { "version": "0.3.2", @@ -3135,8 +3004,7 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { "version": "1.0.0", @@ -3147,8 +3015,7 @@ "fast-future": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz", - "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=", - "dev": true + "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -3190,7 +3057,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, "requires": { "pend": "1.2.0" } @@ -3269,8 +3135,7 @@ "fit-curve": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/fit-curve/-/fit-curve-0.1.6.tgz", - "integrity": "sha1-w72+b1oqO+j4Aerr2kBpGRJWqVs=", - "dev": true + "integrity": "sha1-w72+b1oqO+j4Aerr2kBpGRJWqVs=" }, "for-in": { "version": "1.0.2", @@ -3296,14 +3161,12 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.5", @@ -4243,7 +4106,6 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, "requires": { "aproba": "1.2.0", "console-control-strings": "1.1.0", @@ -4259,7 +4121,6 @@ "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", @@ -4290,7 +4151,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, "requires": { "assert-plus": "1.0.0" }, @@ -4298,16 +4158,14 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" }, "glob": { "version": "7.1.2", @@ -4364,7 +4222,6 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/google-fonts-webpack-plugin/-/google-fonts-webpack-plugin-0.4.4.tgz", "integrity": "sha512-+e2D9/DVBG9EDydRovzoqMZ658SsTBGbC0c65GyZqkwNvdj8vRSYQKXqbz7/yt7QaXsCPT1MpH45r3ivWOitcw==", - "dev": true, "requires": { "lodash": "4.17.4", "node-fetch": "1.7.3", @@ -4375,14 +4232,12 @@ "source-list-map": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz", - "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=", - "dev": true + "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=" }, "webpack-sources": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz", "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=", - "dev": true, "requires": { "source-list-map": "1.1.2", "source-map": "0.5.6" @@ -4405,14 +4260,12 @@ "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 + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" }, "har-validator": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, "requires": { "ajv": "4.11.8", "har-schema": "1.0.5" @@ -4422,7 +4275,6 @@ "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" @@ -4457,7 +4309,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/has-own-property-x/-/has-own-property-x-3.2.0.tgz", "integrity": "sha512-HtRQTYpRFz/YVaQ7jh2mU5iorMAxFcML9FNOLMI1f8VNJ2K0hpOlXoi1a+nmVl6oUcGnhd6zYOFAVe7NUFStyQ==", - "dev": true, "requires": { "cached-constructors-x": "1.0.0", "to-object-x": "1.5.0", @@ -4467,14 +4318,12 @@ "has-symbol-support-x": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", - "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==", - "dev": true + "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==" }, "has-to-string-tag-x": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, "requires": { "has-symbol-support-x": "1.4.1" } @@ -4482,8 +4331,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "hash-base": { "version": "2.0.2", @@ -4508,7 +4356,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, "requires": { "boom": "2.10.1", "cryptiles": "2.0.5", @@ -4536,8 +4383,7 @@ "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "hoist-non-react-statics": { "version": "1.2.0", @@ -4750,7 +4596,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.1", @@ -4782,8 +4627,7 @@ "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" }, "import-local": { "version": "0.1.1", @@ -4819,7 +4663,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.7.1.tgz", "integrity": "sha1-8gS180cCoywdt9SNidXoZ6BEElM=", - "dev": true, "requires": { "loader-utils": "1.1.0", "source-map": "0.5.6" @@ -4843,8 +4686,7 @@ "infinity-x": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.0.tgz", - "integrity": "sha512-wjy2TupBtZ+aAniKt+xs/PO0xOkuaL6wBysUKbgD7aL1PMW/qY5xXDG59zXZ7dU+gk3zwXOu4yIEWPCEFBTgHQ==", - "dev": true + "integrity": "sha512-wjy2TupBtZ+aAniKt+xs/PO0xOkuaL6wBysUKbgD7aL1PMW/qY5xXDG59zXZ7dU+gk3zwXOu4yIEWPCEFBTgHQ==" }, "inflight": { "version": "1.0.6", @@ -4859,14 +4701,12 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inline-style-prefixer": { "version": "3.0.8", @@ -4922,7 +4762,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/is-array-buffer-x/-/is-array-buffer-x-1.7.0.tgz", "integrity": "sha512-ufSZRMY2WZX5xyNvk0NOZAG7cgi35B/sGQDGqv8w0X7MoQ2GC9vedanJhuYTPaC4PUCqLQsda1w7NF+dPZmAJw==", - "dev": true, "requires": { "attempt-x": "1.1.1", "has-to-string-tag-x": "1.4.1", @@ -4970,8 +4809,7 @@ "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-dotfile": { "version": "1.0.3", @@ -5004,7 +4842,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-falsey-x/-/is-falsey-x-1.0.1.tgz", "integrity": "sha512-XWNZC4A+3FX1ECoMjspuEFgSdio82IWjqY/suE0gZ10QA7nzHd/KraRq7Tc5VEHtFRgTRyTdY6W+ykPrDnyoAQ==", - "dev": true, "requires": { "to-boolean-x": "1.0.1" } @@ -5022,7 +4859,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-finite-x/-/is-finite-x-3.0.2.tgz", "integrity": "sha512-HyFrxJZsgmP5RtR1PVlVvHSP4VslZOqr4uoq4x3rDrSOFaYp4R9tfmiWtAzQxPzixXhac3cYEno3NuVn0OHk2Q==", - "dev": true, "requires": { "infinity-x": "1.0.0", "is-nan-x": "1.0.1" @@ -5032,7 +4868,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -5046,7 +4881,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/is-function-x/-/is-function-x-3.3.0.tgz", "integrity": "sha512-SreSSU1dlgYaXR5c0mm4qJHKYHIiGiEY+7Cd8/aRLLoMP/VvofD2XcWgBnP833ajpU5XzXbUSpfysnfKZLJFlg==", - "dev": true, "requires": { "attempt-x": "1.1.1", "has-to-string-tag-x": "1.4.1", @@ -5076,7 +4910,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-index-x/-/is-index-x-1.1.0.tgz", "integrity": "sha512-qULKLMepQLGC8rSVdi8uF2vI4LiDrU9XSDg1D+Aa657GIB7GV1jHpga7uXgQvkt/cpQ5mVBHUFTpSehYSqT6+A==", - "dev": true, "requires": { "math-clamp-x": "1.2.0", "max-safe-integer": "1.0.1", @@ -5088,14 +4921,12 @@ "is-nan-x": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-nan-x/-/is-nan-x-1.0.1.tgz", - "integrity": "sha512-VfNJgfuT8USqKCYQss8g7sFvCzDnL+OOVMQoXhVoulZAyp0ZTj3oyZaaPrn2dxepAkKSQI2BiKHbBabX1DqVtw==", - "dev": true + "integrity": "sha512-VfNJgfuT8USqKCYQss8g7sFvCzDnL+OOVMQoXhVoulZAyp0ZTj3oyZaaPrn2dxepAkKSQI2BiKHbBabX1DqVtw==" }, "is-nil-x": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/is-nil-x/-/is-nil-x-1.4.1.tgz", "integrity": "sha512-cfTKWI5iSR04SSCzzugTH5tS2rYG7kwI8yl/AqWkyuxZ7k55cbA47Y7Lezdg1N9aaELd+UxLg628bdQeNQ6BUw==", - "dev": true, "requires": { "lodash.isnull": "3.0.0", "validate.io-undefined": "1.0.3" @@ -5114,7 +4945,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.6.0.tgz", "integrity": "sha512-mc3dBMv1jEOdk0f1i2RkJFsZDux0MuHqGwHOoRo770ShUOf4VE6tWThAW8dAZARr9a5RN+iNX1yzMDA5ad1clQ==", - "dev": true, "requires": { "is-function-x": "3.3.0", "is-primitive": "2.0.0" @@ -5168,14 +4998,12 @@ "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { "version": "1.0.4", @@ -5194,20 +5022,17 @@ "is-string": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true + "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=" }, "is-symbol": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-utf8": { "version": "0.2.1", @@ -5224,8 +5049,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -5254,8 +5078,7 @@ "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 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "js-tokens": { "version": "3.0.2", @@ -5276,7 +5099,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, "optional": true }, "jsesc": { @@ -5294,8 +5116,7 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.3.1", @@ -5307,7 +5128,6 @@ "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, "requires": { "jsonify": "0.0.0" } @@ -5315,8 +5135,7 @@ "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 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { "version": "3.3.2", @@ -5327,20 +5146,17 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -5351,8 +5167,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, @@ -5442,7 +5257,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", - "dev": true, "requires": { "core-js": "2.3.0", "es6-promise": "3.0.2", @@ -5454,14 +5268,12 @@ "core-js": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", - "dev": true + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=" }, "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -5474,8 +5286,7 @@ "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 + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, @@ -5518,7 +5329,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/level/-/level-2.1.1.tgz", "integrity": "sha512-jhsItEs/L5bf5ctKsvIPcMzeh4nwXxnL3Tsxm4E9My07jcFfqEYwKP57Y9AZu7tmtECdyK6bvCqoClwuOBuY9w==", - "dev": true, "requires": { "level-packager": "2.1.0", "leveldown": "2.1.1" @@ -5527,14 +5337,12 @@ "level-codec": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", - "dev": true + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" }, "level-errors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz", "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==", - "dev": true, "requires": { "errno": "0.1.4" } @@ -5543,7 +5351,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-2.0.0.tgz", "integrity": "sha512-TWOYw8HR5mhj6xwoVLo0yu26RPL6v28KgvhK1kY1CJf9LyL+rJXjx99zhORTYhN9ysOBIH+iaxAiqRteA+C1/g==", - "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.3.3", @@ -5554,7 +5361,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-2.1.0.tgz", "integrity": "sha512-I97zvGOZ6fJ9OFfYv+QmgBpDWbC+UaP5ERJ3oraTyk1v+ABAL4tazris5ym5qL2iLe+qNjXNM/iP8LQcoZMEWw==", - "dev": true, "requires": { "encoding-down": "3.0.1", "levelup": "2.0.1" @@ -5564,7 +5370,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", "integrity": "sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=", - "dev": true, "requires": { "end-stream": "0.1.0" } @@ -5573,7 +5378,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-2.1.1.tgz", "integrity": "sha512-JNMCTSchq1YtQLMGePmT07UE7hIIYR4GHpZI7+nUXbM9XgNtRAwcBGhnyJyITwpTILTkUcNPBKZ9lZmTUj2E3g==", - "dev": true, "requires": { "abstract-leveldown": "3.0.0", "bindings": "1.3.0", @@ -5585,8 +5389,7 @@ "nan": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", - "dev": true + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=" } } }, @@ -5594,7 +5397,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/levelup/-/levelup-2.0.1.tgz", "integrity": "sha1-PckbPmMtN8nlRiOchkEYsATJ+GA=", - "dev": true, "requires": { "deferred-leveldown": "2.0.3", "level-errors": "1.1.2", @@ -5606,7 +5408,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "dev": true, "requires": { "immediate": "3.0.6" } @@ -5633,7 +5434,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, "requires": { "big.js": "3.2.0", "emojis-list": "2.1.0", @@ -5666,14 +5466,12 @@ "lodash-es": { "version": "4.17.4", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz", - "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=", - "dev": true + "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=" }, "lodash.isnull": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash.isnull/-/lodash.isnull-3.0.0.tgz", - "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4=", - "dev": true + "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4=" }, "lodash.merge": { "version": "4.6.0", @@ -5735,7 +5533,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, "requires": { "es5-ext": "0.10.35" } @@ -5743,8 +5540,7 @@ "ltgt": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.0.tgz", - "integrity": "sha1-tlul/LNJopkkyOMz98alVi8uSEI=", - "dev": true + "integrity": "sha1-tlul/LNJopkkyOMz98alVi8uSEI=" }, "map-obj": { "version": "1.0.1", @@ -5770,11 +5566,53 @@ "warning": "3.0.0" } }, + "material-ui-icons": { + "version": "1.0.0-beta.17", + "resolved": "https://registry.npmjs.org/material-ui-icons/-/material-ui-icons-1.0.0-beta.17.tgz", + "integrity": "sha1-XxmvVKLZnu7zR6VUFKaFPhyFDcM=", + "requires": { + "recompose": "0.26.0" + } + }, + "material-ui-textfield-icon": { + "version": "0.2.2-1", + "resolved": "https://registry.npmjs.org/material-ui-textfield-icon/-/material-ui-textfield-icon-0.2.2-1.tgz", + "integrity": "sha512-hvRDPs2YqIUjbkAIWmEHAvRtDXSz5miBWnZiAsRSZFMvjjbtCi6t1IHMrhKkzHRHjdEQkLPs37e/9HezZxBAxg==", + "requires": { + "material-ui": "0.19.4", + "react": "15.6.2", + "react-dom": "15.6.2" + }, + "dependencies": { + "react": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz", + "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", + "requires": { + "create-react-class": "15.6.2", + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.0" + } + }, + "react-dom": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", + "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.0" + } + } + } + }, "math-clamp-x": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/math-clamp-x/-/math-clamp-x-1.2.0.tgz", "integrity": "sha512-tqpjpBcIf9UulApz3EjWXqTZpMlr2vLN9PryC9ghoyCuRmqZaf3JJhPddzgQpJnKLi2QhoFnvKBFtJekAIBSYg==", - "dev": true, "requires": { "to-number-x": "2.0.0" } @@ -5783,7 +5621,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/math-sign-x/-/math-sign-x-3.0.0.tgz", "integrity": "sha512-OzPas41Pn4d16KHnaXmGxxY3/l3zK4OIXtmIwdhgZsxz4FDDcNnbrABYPg2vGfxIkaT9ezGnzDviRH7RfF44jQ==", - "dev": true, "requires": { "is-nan-x": "1.0.1", "to-number-x": "2.0.0" @@ -5792,8 +5629,7 @@ "max-safe-integer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz", - "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA=", - "dev": true + "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA=" }, "md5.js": { "version": "1.3.4", @@ -5836,7 +5672,6 @@ "version": "0.3.10", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", "integrity": "sha1-TsoNiu057J0Bf0xcLy9kMvQuXI8=", - "dev": true, "requires": { "d": "0.1.1", "es5-ext": "0.10.35", @@ -5851,7 +5686,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", - "dev": true, "requires": { "es5-ext": "0.10.35" } @@ -5860,7 +5694,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", "integrity": "sha1-1vWLjE/EE8JJtLqhl2j45NfIlE4=", - "dev": true, "requires": { "d": "0.1.1", "es5-ext": "0.10.35", @@ -5871,7 +5704,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", "integrity": "sha1-dhtcZ8/U8dGK+yNPaR1nhoLLO/M=", - "dev": true, "requires": { "d": "0.1.1", "es5-ext": "0.10.35" @@ -5881,7 +5713,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", "integrity": "sha1-cGzvnpmqI2undmwjnIueKG6n0ig=", - "dev": true, "requires": { "d": "0.1.1", "es5-ext": "0.10.35", @@ -6033,14 +5864,12 @@ "mime-db": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" }, "mime-types": { "version": "2.1.17", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, "requires": { "mime-db": "1.30.0" } @@ -6075,14 +5904,12 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } @@ -6118,8 +5945,7 @@ "nan-x": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/nan-x/-/nan-x-1.0.0.tgz", - "integrity": "sha512-yw4Fhe2/UTzanQ4f0yHWkRnfTuHZFAi4GZDjXS4G+qv5BqXTqPJBbSxpa7MyyW9v4Y4ZySZQik1vcbNkhdnIOg==", - "dev": true + "integrity": "sha512-yw4Fhe2/UTzanQ4f0yHWkRnfTuHZFAi4GZDjXS4G+qv5BqXTqPJBbSxpa7MyyW9v4Y4ZySZQik1vcbNkhdnIOg==" }, "ncname": { "version": "1.0.0", @@ -6139,8 +5965,7 @@ "next-tick": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", - "integrity": "sha1-ddpKkn7liH45BliABltzNkE7MQ0=", - "dev": true + "integrity": "sha1-ddpKkn7liH45BliABltzNkE7MQ0=" }, "no-case": { "version": "2.3.2", @@ -6155,7 +5980,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.1.2.tgz", "integrity": "sha512-hmUtb8m75RSi7N+zZLYqe75XDvZB+6LyTBPkj2DConvNgQet2e3BIqEwe1LLvqMrfyjabuT5ZOrTioLCH1HTdA==", - "dev": true, "requires": { "semver": "5.4.1" } @@ -6209,8 +6033,7 @@ "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, "normalize-jss": { "version": "4.0.0", @@ -6243,7 +6066,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-space-x/-/normalize-space-x-3.0.0.tgz", "integrity": "sha512-tbCJerqZCCHPst4rRKgsTanLf45fjOyeAU5zE3mhDxJtFJKt66q39g2XArWhXelgTFVib8mNBUm6Wrd0LxYcfQ==", - "dev": true, "requires": { "cached-constructors-x": "1.0.0", "trim-x": "3.0.0", @@ -6253,8 +6075,7 @@ "normalize-wheel": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", - "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=", - "dev": true + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" }, "npm-run-path": { "version": "2.0.2", @@ -6269,7 +6090,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -6289,14 +6109,12 @@ "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=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "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 + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { "version": "4.1.1", @@ -6307,7 +6125,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz", "integrity": "sha512-Z/0fIrptD9YuzN+SNK/1kxAEaBcPQM4gSrtOSMSi9eplnL/AbyQcAyAlreAoAzmBon+DQ1Z+AdhxyQSvav5Fyg==", - "dev": true, "requires": { "attempt-x": "1.1.1", "has-own-property-x": "3.2.0", @@ -6362,7 +6179,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1.0.2" } @@ -6406,8 +6222,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "2.1.0", @@ -6467,8 +6282,7 @@ "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, "param-case": { "version": "2.1.1", @@ -6508,7 +6322,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-int-x/-/parse-int-x-2.0.0.tgz", "integrity": "sha512-NIMm52gmd1+0qxJK8lV3OZ4zzWpRH1xcz9xCHXl+DNzddwUdS4NEtd7BmTeK7iCIXoaK5e6BoDMHgieH2eNIhg==", - "dev": true, "requires": { "cached-constructors-x": "1.0.0", "nan-x": "1.0.0", @@ -6595,20 +6408,17 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "pepjs": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/pepjs/-/pepjs-0.4.3.tgz", - "integrity": "sha1-FggOlwqud5kTdWwtrviOqnSG30E=", - "dev": true + "integrity": "sha1-FggOlwqud5kTdWwtrviOqnSG30E=" }, "performance-now": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" }, "pify": { "version": "2.3.0", @@ -6663,7 +6473,6 @@ "version": "6.4.1", "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-6.4.1.tgz", "integrity": "sha512-7YrhsBXbQh/iPA8O5Nzixi9QigaQJjqbbCFr+D7Kc258oeXNW9a0t/tOME1Lh84TJiFRuN9982FGVnrBrUhLiA==", - "dev": true, "requires": { "argsarray": "0.0.1", "buffer-from": "0.1.1", @@ -6683,7 +6492,7 @@ "request": "2.80.0", "spark-md5": "3.0.0", "through2": "2.0.3", - "uuid": "3.1.0", + "uuid": "3.2.0", "vuvuzela": "1.0.3" }, "dependencies": { @@ -6691,7 +6500,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz", "integrity": "sha512-6nVc6S36qbt/mutyt+UGMnawAMrPDZUPQjRZI3FS9tCtDRhvxJbK79unYBLPi+z5SLXQ3ftoVBFCblQtNSls8w==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -6699,14 +6507,12 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "readable-stream": { "version": "1.0.33", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=", - "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -6717,14 +6523,12 @@ "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 + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.0.tgz", + "integrity": "sha512-qC0vMFX6q6ee8JaoTF2Om1uL8KAV1ATUjVaHRxLiPJkIsp8JZl6ZjG0MIB+twZFLbi1vXj30rqj4zlqYiOS9xg==" } } }, @@ -6732,7 +6536,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.4.1.tgz", "integrity": "sha512-99TyEFYTTkBWANT+mwSptmLb9ZCLQ6qKIUE36fXSIOtShB0JNprL2hzBD8F1yIuT9btjFrFEwbRHXhqDi1HmRA==", - "dev": true, "requires": { "expand-template": "1.1.0", "github-from-package": "0.0.0", @@ -6753,8 +6556,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } }, @@ -6777,8 +6579,7 @@ "private": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", - "dev": true + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=" }, "process": { "version": "0.11.10", @@ -6789,8 +6590,7 @@ "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 + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "promise": { "version": "7.3.1", @@ -6814,7 +6614,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz", "integrity": "sha512-22cKy3w3OpRswU6to9iKWDDlg+F9vF2REcwGlGW23jyLjHb1U/jJEWA44sWupOnkhGfDgotU6Lw+N2oyhNi+5A==", - "dev": true, "requires": { "to-object-x": "1.5.0", "to-property-key-x": "2.0.2" @@ -6838,8 +6637,7 @@ "prr": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" }, "pseudomap": { "version": "1.0.2", @@ -6864,7 +6662,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, "requires": { "end-of-stream": "1.4.1", "once": "1.4.0" @@ -6873,8 +6670,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { "version": "6.5.1", @@ -6914,7 +6710,6 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", - "dev": true, "requires": { "performance-now": "2.1.0" }, @@ -6922,16 +6717,14 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" } } }, "ramda": { "version": "0.21.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz", - "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=", - "dev": true + "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=" }, "randomatic": { "version": "1.1.7", @@ -7021,7 +6814,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.3.tgz", "integrity": "sha1-UVdakA+N1oOBxxC0cSwhVMPiA1s=", - "dev": true, "requires": { "deep-extend": "0.4.2", "ini": "1.3.5", @@ -7032,8 +6824,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } }, @@ -7052,7 +6843,6 @@ "version": "15.6.2", "resolved": "https://registry.npmjs.org/react-addons-update/-/react-addons-update-15.6.2.tgz", "integrity": "sha1-5TdTxbNIh5dFEMiC1/sHWFHV5QQ=", - "dev": true, "requires": { "fbjs": "0.8.16", "object-assign": "4.1.1" @@ -7112,7 +6902,6 @@ "version": "0.2.16", "resolved": "https://registry.npmjs.org/react-notification-system/-/react-notification-system-0.2.16.tgz", "integrity": "sha1-m52iCw00eGtgBXxStCUW6hKVN0o=", - "dev": true, "requires": { "create-react-class": "15.6.2", "object-assign": "4.1.1", @@ -7123,7 +6912,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/react-notification-system-redux/-/react-notification-system-redux-1.2.0.tgz", "integrity": "sha1-FPsJFccuTBLZmD/+ByVOLNGexd8=", - "dev": true, "requires": { "prop-types": "15.6.0", "react-notification-system": "0.2.16" @@ -7133,7 +6921,6 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.6.tgz", "integrity": "sha512-8taaaGu+J7PMJQDJrk/xiWEYQmdo3mkXw6wPr3K3LxvXis3Fymiq7c13S+Tpls/AyNUAsoONkU81AP0RA6y6Vw==", - "dev": true, "requires": { "hoist-non-react-statics": "2.3.1", "invariant": "2.2.2", @@ -7146,8 +6933,7 @@ "hoist-non-react-statics": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", - "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=", - "dev": true + "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" } } }, @@ -7163,7 +6949,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/react-svg-inline/-/react-svg-inline-2.0.1.tgz", "integrity": "sha512-9YVqJ80g1gPWAvD9CS/z4cKPD45ZSMjjzwxFAmQJiMEoAo1Ajhz92WirXag3ftltDN5lPNkVWx/KOnEWB/PaMQ==", - "dev": true, "requires": { "classnames": "2.2.5", "prop-types": "15.6.0" @@ -7226,7 +7011,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -7281,7 +7065,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.2.0.tgz", "integrity": "sha512-qbgeI19drwnm9FeGAotDA1vsZO8q94XF7IxPDuJmSXxDYX2rqzhND6NROahCBJfBK5xM1cchvmgscO2rry1EEw==", - "dev": true, "requires": { "deep-equal": "1.0.1", "es6-error": "4.1.1", @@ -7296,34 +7079,29 @@ "hoist-non-react-statics": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", - "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=", - "dev": true + "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" } } }, "redux-undo": { "version": "1.0.0-beta9-9-7", "resolved": "https://registry.npmjs.org/redux-undo/-/redux-undo-1.0.0-beta9-9-7.tgz", - "integrity": "sha1-/juqGycUI9fdu/w6gscbApotuLo=", - "dev": true + "integrity": "sha1-/juqGycUI9fdu/w6gscbApotuLo=" }, "regenerate": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" }, "regenerator-runtime": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" }, "regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0", @@ -7344,7 +7122,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, "requires": { "regenerate": "1.3.3", "regjsgen": "0.2.0", @@ -7354,14 +7131,12 @@ "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" }, "regjsparser": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, "requires": { "jsesc": "0.5.0" }, @@ -7369,8 +7144,7 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" } } }, @@ -7432,7 +7206,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/replace-comments-x/-/replace-comments-x-2.0.0.tgz", "integrity": "sha512-+vMP4jqU+8HboLWms6YMNEiaZG5hh1oR6ENCnGYDF/UQ7aYiJUK/8tcl3+KZAHRCKKa3gqzrfiarlUBHQSgRlg==", - "dev": true, "requires": { "require-coercible-to-string-x": "1.0.0", "to-string-x": "1.4.2" @@ -7442,7 +7215,6 @@ "version": "2.80.0", "resolved": "https://registry.npmjs.org/request/-/request-2.80.0.tgz", "integrity": "sha1-jMFi1215OBze/dNQXXa4C2BYm9A=", - "dev": true, "requires": { "aws-sign2": "0.6.0", "aws4": "1.6.0", @@ -7464,26 +7236,23 @@ "stringstream": "0.0.5", "tough-cookie": "2.3.3", "tunnel-agent": "0.4.3", - "uuid": "3.1.0" + "uuid": "3.2.0" }, "dependencies": { "qs": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=" }, "tunnel-agent": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.0.tgz", + "integrity": "sha512-qC0vMFX6q6ee8JaoTF2Om1uL8KAV1ATUjVaHRxLiPJkIsp8JZl6ZjG0MIB+twZFLbi1vXj30rqj4zlqYiOS9xg==" } } }, @@ -7491,7 +7260,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.0.tgz", "integrity": "sha512-Rpfd4sMdflPAKecdKhfAtQHlZzzle4UMUgxJ01hXtTcNWMV8w9GeZnKhEyrT73kgrflBOP1zg41amUPZGcNspA==", - "dev": true, "requires": { "require-object-coercible-x": "1.4.1", "to-string-x": "1.4.2" @@ -7513,7 +7281,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/require-object-coercible-x/-/require-object-coercible-x-1.4.1.tgz", "integrity": "sha512-0YHa2afepsLfQvwQ1P2XvDZnGOUia5sC07ZijIRU2dnsRxnuilXWF6B2CFaKGDA9eZl39lJHrXCDsnfgroRd6Q==", - "dev": true, "requires": { "is-nil-x": "1.4.1" } @@ -7527,8 +7294,7 @@ "reselect": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", - "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=", - "dev": true + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" }, "resolve-cwd": { "version": "2.0.0", @@ -7576,8 +7342,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", - "dev": true + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "schema-utils": { "version": "0.3.0", @@ -7606,8 +7371,7 @@ "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" }, "send": { "version": "0.16.1", @@ -7688,8 +7452,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-immediate-shim": { "version": "1.0.1", @@ -7736,14 +7499,12 @@ "shortid": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.8.tgz", - "integrity": "sha1-AzsRfWoul1gE9vCWnb59PQs1UTE=", - "dev": true + "integrity": "sha1-AzsRfWoul1gE9vCWnb59PQs1UTE=" }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-assign": { "version": "0.1.0", @@ -7754,7 +7515,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", - "dev": true, "requires": { "once": "1.4.0", "unzip-response": "1.0.2", @@ -7771,7 +7531,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, "requires": { "hoek": "2.16.3" } @@ -7820,8 +7579,7 @@ "source-map": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" }, "source-map-support": { "version": "0.4.15", @@ -7835,8 +7593,7 @@ "spark-md5": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", - "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=", - "dev": true + "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" }, "spdx-correct": { "version": "1.0.2", @@ -7898,7 +7655,6 @@ "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", @@ -7913,8 +7669,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, @@ -7989,7 +7744,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, "requires": { "safe-buffer": "5.1.1" } @@ -7997,8 +7751,7 @@ "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "strip-ansi": { "version": "3.0.1", @@ -8032,8 +7785,7 @@ "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=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "supports-color": { "version": "2.0.0", @@ -8055,7 +7807,6 @@ "version": "1.16.0", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz", "integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg==", - "dev": true, "requires": { "chownr": "1.0.1", "mkdirp": "0.5.1", @@ -8067,7 +7818,6 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", - "dev": true, "requires": { "bl": "1.2.1", "end-of-stream": "1.4.1", @@ -8107,14 +7857,12 @@ "integrity": "sha1-QlbC/Djk+yOg0j66K2zOTfjkZtU=" }, "three-js-csg": { - "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045", - "dev": true + "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, "requires": { "readable-stream": "2.3.3", "xtend": "4.0.1" @@ -8145,7 +7893,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", - "dev": true, "requires": { "es5-ext": "0.10.35", "next-tick": "1.0.0" @@ -8154,8 +7901,7 @@ "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 + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" } } }, @@ -8168,8 +7914,7 @@ "to-boolean-x": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-boolean-x/-/to-boolean-x-1.0.1.tgz", - "integrity": "sha512-PstxY3K6hVEHnY3FITs8XBoJbt0RI1e4MLIhAL9hWa3BtVLCrb86vU5z6lEKh7uZZjiPiLqIKMmfMro1nNgtXQ==", - "dev": true + "integrity": "sha512-PstxY3K6hVEHnY3FITs8XBoJbt0RI1e4MLIhAL9hWa3BtVLCrb86vU5z6lEKh7uZZjiPiLqIKMmfMro1nNgtXQ==" }, "to-fast-properties": { "version": "1.0.3", @@ -8180,7 +7925,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/to-integer-x/-/to-integer-x-3.0.0.tgz", "integrity": "sha512-794L2Lpwjtynm7RxahJi2YdbRY75gTxUW27TMuN26UgwPkmJb/+HPhkFEFbz+E4vNoiP0dxq5tq5fkXoXLaK/w==", - "dev": true, "requires": { "is-finite-x": "3.0.2", "is-nan-x": "1.0.1", @@ -8192,7 +7936,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-number-x/-/to-number-x-2.0.0.tgz", "integrity": "sha512-lGOnCoccUoSzjZ/9Uen8TC4+VFaQcFGhTroWTv2tYWxXgyJV1zqAZ8hEIMkez/Eo790fBMOjidTnQ/OJSCvAoQ==", - "dev": true, "requires": { "cached-constructors-x": "1.0.0", "nan-x": "1.0.0", @@ -8205,7 +7948,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/to-object-x/-/to-object-x-1.5.0.tgz", "integrity": "sha512-AKn5GQcdWky+s20vjWkt+Wa6y3dxQH3yQyMBhOfBOPldUwqwhgvlqcIg5H092ntNc+TX8/Cxzs1kMHH19pyCnA==", - "dev": true, "requires": { "cached-constructors-x": "1.0.0", "require-object-coercible-x": "1.4.1" @@ -8215,7 +7957,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/to-primitive-x/-/to-primitive-x-1.1.0.tgz", "integrity": "sha512-gyMY0gi3wjK3e4MUBKqv9Zl8QGcWguIkaUr2VJmoBEsOpDcpDZSEyljR773eVG4maS48uX7muLkoQoh/BA82OQ==", - "dev": true, "requires": { "has-symbol-support-x": "1.4.1", "is-date-object": "1.0.1", @@ -8231,7 +7972,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-property-key-x/-/to-property-key-x-2.0.2.tgz", "integrity": "sha512-YISLpZFYIazNm0P8hLsKEEUEZ3m8U3+eDysJZqTu3+B9tQp+2TrMpaEGT8Agh4fZ5LSoums60/glNEzk5ozqrg==", - "dev": true, "requires": { "has-symbol-support-x": "1.4.1", "to-primitive-x": "1.1.0", @@ -8242,7 +7982,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.0.tgz", "integrity": "sha512-HbVH673pybrUmhzESGHUm17BBJvqb7BU8HciOvuEYm9ipuDyjmddhvkVqpVW6sM/C5/zhJo17n7O7I/24loJIQ==", - "dev": true, "requires": { "cached-constructors-x": "1.0.0", "has-symbol-support-x": "1.4.1", @@ -8253,7 +7992,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/to-string-tag-x/-/to-string-tag-x-1.4.2.tgz", "integrity": "sha512-ytO9eLigxsQQLGuab0C1iSSTzKdJNVSlBg0Spg4J/rGAVrQJ5y774mo0SSzgGeTT4RJGGyJNfObXaTMzX0XDOQ==", - "dev": true, "requires": { "lodash.isnull": "3.0.0", "validate.io-undefined": "1.0.3" @@ -8263,7 +8001,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/to-string-x/-/to-string-x-1.4.2.tgz", "integrity": "sha512-/WP5arlwtCpAAexCCHiQBW0eXwse84osWyP1Qtaz71nsYSuUpOkT6tBm8nQ4IIUfSh5hji0hDupUCD2xbbOL6A==", - "dev": true, "requires": { "is-symbol": "1.0.1" } @@ -8278,7 +8015,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, "requires": { "punycode": "1.4.1" } @@ -8287,7 +8023,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/trim-left-x/-/trim-left-x-3.0.0.tgz", "integrity": "sha512-+m6cqkppI+CxQBTwWEZliOHpOBnCArGyMnS1WCLb6IRgukhTkiQu/TNEN5Lj2eM9jk8ewJsc7WxFZfmwNpRXWQ==", - "dev": true, "requires": { "cached-constructors-x": "1.0.0", "require-coercible-to-string-x": "1.0.0", @@ -8310,7 +8045,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/trim-right-x/-/trim-right-x-3.0.0.tgz", "integrity": "sha512-iIqEsWEbWVodqdixJHi4FoayJkUxhoL4AvSNGp4FF4FfQKRPGizt8++/RnyC9od75y7P/S6EfONoVqP+NddiKA==", - "dev": true, "requires": { "cached-constructors-x": "1.0.0", "require-coercible-to-string-x": "1.0.0", @@ -8321,7 +8055,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/trim-x/-/trim-x-3.0.0.tgz", "integrity": "sha512-w8s38RAUScQ6t3XqMkS75iz5ZkIYLQpVnv2lp3IuTS36JdlVzC54oe6okOf4Wz3UH4rr3XAb2xR3kR5Xei82fw==", - "dev": true, "requires": { "trim-left-x": "3.0.0", "trim-right-x": "3.0.0" @@ -8337,7 +8070,6 @@ "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" } @@ -8346,7 +8078,6 @@ "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 }, "type-is": { @@ -8434,8 +8165,7 @@ "unzip-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", - "dev": true + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" }, "upper-case": { "version": "1.1.3", @@ -8515,8 +8245,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utila": { "version": "0.4.0", @@ -8548,8 +8277,7 @@ "valid-url": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", - "dev": true + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" }, "validate-npm-package-license": { "version": "3.0.1", @@ -8564,8 +8292,7 @@ "validate.io-undefined": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/validate.io-undefined/-/validate.io-undefined-1.0.3.tgz", - "integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q=", - "dev": true + "integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q=" }, "vary": { "version": "1.1.2", @@ -8577,7 +8304,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, "requires": { "assert-plus": "1.0.0", "core-util-is": "1.0.2", @@ -8587,8 +8313,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, @@ -8604,8 +8329,7 @@ "vuvuzela": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws=", - "dev": true + "integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws=" }, "warning": { "version": "3.0.0", @@ -8928,14 +8652,12 @@ "white-space-x": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/white-space-x/-/white-space-x-3.0.0.tgz", - "integrity": "sha512-nMPVXGMdi/jQepXKryxqzEh/vCwdOYY/u6NZy40glMHvZfEr7/+vQKnDhEq4rZ1nniOFq9GWohQYB30uW/5Olg==", - "dev": true + "integrity": "sha512-nMPVXGMdi/jQepXKryxqzEh/vCwdOYY/u6NZy40glMHvZfEr7/+vQKnDhEq4rZ1nniOFq9GWohQYB30uW/5Olg==" }, "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==", - "dev": true, "requires": { "string-width": "1.0.2" }, @@ -8944,7 +8666,6 @@ "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", @@ -9001,14 +8722,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-stream": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", "integrity": "sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=", - "dev": true, "requires": { "readable-stream": "0.0.4" }, @@ -9016,8 +8735,7 @@ "readable-stream": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", - "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=", - "dev": true + "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=" } } }, @@ -9030,8 +8748,7 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "3.2.1", @@ -9119,7 +8836,6 @@ "version": "2.9.1", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", - "dev": true, "requires": { "buffer-crc32": "0.2.13", "fd-slicer": "1.0.1" diff --git a/package.json b/package.json index 6d7cfc5..390c419 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,16 @@ "file-saver": "^1.3.3", "lodash": "^4.17.4", "material-ui": "^0.19.4", + "material-ui-icons": "^1.0.0-beta.17", + "material-ui-textfield-icon": "^0.2.2-1", "proptypes": "^1.1.0", "query-string": "^5.0.1", "react": "^16.0.0", + "react-addons-update": "^15.6.2", "react-dom": "^16.0.0", "react-jss": "^7.2.0", "react-resize-detector": "^1.1.0", + "shortid": "^2.2.8", "three": "^0.88.0" }, "devDependencies": { diff --git a/src/constants.js b/src/constants.js index e08c4ca..f8b06f8 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,2 +1,3 @@ export const PRECISION = 0.01; export const VERSION = '0.0.18'; +export const LOCAL_STORAGE_KEY = 'PRINTER_SETTINGS'; diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index aff0278..20f2ec6 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -4,36 +4,58 @@ import _ from 'lodash'; import injectSheet from 'react-jss'; import MaterialUISelectField from 'material-ui/SelectField' import MaterialUICheckbox from 'material-ui/Checkbox'; -import MaterialUITextField from 'material-ui/TextField'; +import { blue500, grey500 } from 'material-ui/styles/colors'; +import TextFieldIcon from 'material-ui-textfield-icon'; +import Clear from 'material-ui-icons/Clear'; -const contextTypes = { state: PropTypes.object, onChange: PropTypes.func, disabled: PropTypes.bool }; +const contextTypes = { + settings: PropTypes.object.isRequired, + onChange: PropTypes.func.isRequired, + disabled: PropTypes.bool.isRequired, + addPrinter: PropTypes.object.isRequired, + advancedFields: PropTypes.array.isRequired, + activePrinter: PropTypes.string +}; +const propTypes = { + name: PropTypes.string.isRequired +}; export const SelectField = (props, context) => ( context.onChange(props.name, value)} /> ); SelectField.contextTypes = contextTypes; +SelectField.propTypes = propTypes; export const TextField = (props, context) => ( - context.onChange(props.name, null)} />} + floatingLabelStyle={{ color: context.advancedFields.includes(props.name) ? blue500 : grey500 }} disabled={context.disabled} - value={_.get(context.state, props.name)} - onChange={(event, value) => context.onChange(props.name, value)} + value={_.get(context, props.name)} + onChange={(event, value) => context.onChange(props.name, props.type === 'number' ? parseFloat(value) : value)} /> ); TextField.contextTypes = contextTypes; +TextField.propTypes = propTypes; export const Checkbox = (props, context) => ( - context.onChange(props.name, value)} - /> + + context.onChange(props.name, value)} + /> + {context.advancedFields.includes(props.name) && context.onChange(props.name, null)} />} + ); Checkbox.contextTypes = contextTypes; +Checkbox.propTypes = propTypes; diff --git a/src/interface/Settings.js b/src/interface/Settings.js index b97d634..e2303a8 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -5,7 +5,17 @@ import { Tabs, Tab } from 'material-ui/Tabs'; import MenuItem from 'material-ui/MenuItem'; import injectSheet from 'react-jss'; import { SelectField, TextField, Checkbox } from './FormComponents.js'; -import { grey800, cyan500 } from 'material-ui/styles/colors'; +import { grey800, cyan500, red500 } from 'material-ui/styles/colors'; +import Divider from 'material-ui/Divider'; +import Dialog from 'material-ui/Dialog'; +import FlatButton from 'material-ui/FlatButton'; +import { LOCAL_STORAGE_KEY } from '../constants.js'; +import shortid from 'shortid'; +import defaultSettings from '../settings/default.yml'; +import printerSettings from '../settings/printer.yml'; +import materialSettings from '../settings/material.yml'; +import qualitySettings from '../settings/quality.yml'; +import update from 'react-addons-update'; const styles = { textFieldRow: { @@ -19,74 +29,232 @@ const styles = { fontWeight: 'bold', margin: '30px 0 0 0' } + }, + error: { + color: red500 } }; +const getLocalStorage = () => { + let localStorage = window.localStorage.getItem(LOCAL_STORAGE_KEY); + + if (!localStorage) { + localStorage = { printers: {}, active: null }; + updateLocalStorage(localStorage); + } else { + localStorage = JSON.parse(localStorage); + } + return localStorage; +}; + +const updateLocalStorage = (localStorage) => { + window.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(localStorage)); +}; + class Settings extends React.Component { - static childContextTypes = { state: PropTypes.object, onChange: PropTypes.func, disabled: PropTypes.bool }; - static defaultProps: { - disabled: false - }; static propTypes = { classes: PropTypes.objectOf(PropTypes.string), onChange: PropTypes.func, - printers: PropTypes.object.isRequired, - defaultPrinter: PropTypes.string, - quality: PropTypes.object.isRequired, - defaultQuality: PropTypes.string.isRequired, - material: PropTypes.object.isRequired, - defaultMaterial: PropTypes.string.isRequired, - initialSettings: PropTypes.object.isRequired, disabled: PropTypes.bool.isRequired }; - constructor(props) { - super(); - this.state = { - settings: props.initialSettings, - printers: props.defaultPrinter, - quality: props.defaultQuality, - material: props.defaultMaterial - }; + static defaultProps: { + disabled: false + }; + static childContextTypes = { + settings: PropTypes.object.isRequired, + onChange: PropTypes.func.isRequired, + disabled: PropTypes.bool.isRequired, + addPrinter: PropTypes.object.isRequired, + activePrinter: PropTypes.string, + advancedFields: PropTypes.array.isRequired + }; + + state = { + localStorage: getLocalStorage(), + addPrinter: { + open: false, + name: '', + printer: '', + error: null + } + }; + + componentDidMount() { + const { onChange } = this.props; + const { localStorage } = this.state; + if (localStorage.active) { + if (onChange) onChange(this.constructSettings(localStorage)); + } else { + this.openAddPrinterDialog(); + } } changeSettings = (fieldName, value) => { const { onChange } = this.props; + const { localStorage } = this.state; + + let state = _.cloneDeep(this.state); + + const removeAddPrinterError = () => { + state = update(state, { addPrinter: { error: { $set: null } } }); + }; - let state; switch (fieldName) { - case 'printers': - case 'quality': - case 'material': - state = { - [fieldName]: value, - settings: _.merge({}, this.state.settings, this.props[fieldName][value]) - }; + case 'addPrinter.printer': + state = update(state, { addPrinter: { printer: { $set: value } } }); + state = update(state, { addPrinter: { name: { $set: printerSettings[value].title } } }); + removeAddPrinterError(); + break; + + case 'addPrinter.name': + state = update(state, { addPrinter: { name: { $set: value } } }); + removeAddPrinterError(); + break; + + case 'activePrinter': + if (value !== 'add_printer') state = update(state, { localStorage: { active: { $set: value } } }); + break; + + case 'settings.quality': + case 'settings.material': + if (!localStorage.active) return this.openAddPrinterDialog(); + + state = _.set(state, `localStorage.printers[${localStorage.active}].${fieldName}`, value); + break; + + case 'settings.layerHeight': + case 'settings.dimensions.x': + case 'settings.dimensions.y': + case 'settings.dimensions.z': + case 'settings.nozzleDiameter': + case 'settings.bedTemperature': + case 'settings.heatedBed': + case 'settings.filamentThickness': + case 'settings.temperature': + case 'settings.thickness.top': + case 'settings.thickness.bottom': + case 'settings.thickness.shell': + case 'settings.retraction.enabled': + case 'settings.retraction.amount': + case 'settings.retraction.speed': + case 'settings.retraction.minDistance': + case 'settings.travel.speed': + case 'settings.combing': + case 'settings.innerShell.speed': + case 'settings.innerShell.flowRate': + case 'settings.outerShell.speed': + case 'settings.outerShell.flowRate': + case 'settings.innerInfill.gridSize': + case 'settings.innerInfill.speed': + case 'settings.innerInfill.flowRate': + case 'settings.outerInfill.speed': + case 'settings.outerInfill.flowRate': + case 'settings.brim.size': + case 'settings.brim.speed': + case 'settings.brim.flowRate': + case 'settings.firstLayer.speed': + case 'settings.firstLayer.flowRate': + if (!localStorage.active) return this.openAddPrinterDialog(); + + if (value === null) { + const advanced = { ...state.localStorage.printers[localStorage.active].settings.advanced }; + delete advanced[fieldName]; + state = update(state, { localStorage: { printers: { [localStorage.active]: { settings: { advanced: { $set: advanced } } } } } }); + } else { + state = _.set(state, `localStorage.printers[${localStorage.active}].settings.advanced[${JSON.stringify(fieldName)}]`, value); + } break; default: - state = _.set(_.cloneDeep(this.state), fieldName, value); break; } - if (onChange) onChange(state); - if (state) this.setState(state); - }; - - getChildContext() { - return { state: this.state, onChange: this.changeSettings, disabled: this.props.disabled }; + this.setState(state); + if (localStorage.active) { + if (onChange) onChange(this.constructSettings(state.localStorage)); + updateLocalStorage(state.localStorage); + } } + getChildContext() { + const { localStorage, addPrinter } = this.state; + + return { + addPrinter, + activePrinter: localStorage.active, + advancedFields: localStorage.active ? Object.keys(localStorage.printers[localStorage.active].settings.advanced) : [], + settings: this.constructSettings(localStorage), + onChange: this.changeSettings, + disabled: this.props.disabled + }; + } + + constructSettings(localStorage) { + if (!localStorage.active) return defaultSettings; + + const { printer, material, quality, advanced } = localStorage.printers[localStorage.active].settings; + let settings = { + ...defaultSettings, + printer, + material, + quality + }; + + settings = _.merge({}, settings, printerSettings[printer]); + settings = _.merge({}, settings, qualitySettings[quality]); + settings = _.merge({}, settings, materialSettings[material]); + + for (const key in advanced) { + const value = advanced[key]; + settings = _.set(_.cloneDeep(settings), key.replace('settings.', ''), value); + } + + return settings; + } + + addPrinter = () => { + const { name, printer } = this.state.addPrinter; + + if (!name || !printer) { + this.setState({ addPrinter: { ...this.state.addPrinter, error: 'Please enter a name and printer' } }); + return; + } + + const id = shortid.generate(); + const localStorage = { + active: id, + printers: { + ...this.state.localStorage.printers, + [id]: { name, settings: { printer, material: 'pla', quality: 'medium', advanced: {} } } + } + }; + this.setState({ localStorage }); + updateLocalStorage(localStorage); + + this.closeAddPrinterDialog(); + + const { onChange } = this.props; + if (onChange) onChange(this.constructSettings(localStorage)); + } + + closeAddPrinterDialog = () => this.setAddPrinterDialog(false); + openAddPrinterDialog = () => this.setAddPrinterDialog(true); + setAddPrinterDialog = (open) => this.setState({ addPrinter: { name: '', printer: '', error: null, open } }); + render() { - const { classes, printers, quality, material, disabled } = this.props; + const { addPrinter, localStorage } = this.state; + const { classes, disabled } = this.props; return (
- - {Object.entries(printers).map(([value, { title }]) => ( - + + {Object.entries(localStorage.printers).map(([id, { name }]) => ( + ))} + + - - {Object.entries(material).map(([value, { title }]) => ( + + {Object.entries(materialSettings).map(([value, { title }]) => ( ))} @@ -94,8 +262,8 @@ class Settings extends React.Component {
- - {Object.entries(quality).map(([value, { title }]) => ( + + {Object.entries(qualitySettings).map(([value, { title }]) => ( ))} @@ -123,8 +291,6 @@ class Settings extends React.Component { -

Combing

-

Retraction

@@ -156,6 +322,30 @@ class Settings extends React.Component {
+ , + + ]} + > + + {Object.entries(printerSettings).map(([value, { title }]) => ( + ))} + + + {addPrinter.error &&

{addPrinter.error}

} +
); } diff --git a/src/interface/index.js b/src/interface/index.js index b4e94ec..0d8fe43 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -16,10 +16,6 @@ import Menu from 'material-ui/Menu'; import MenuItem from 'material-ui/MenuItem'; import { Tabs, Tab } from 'material-ui/Tabs'; import Settings from './Settings.js'; -import defaultSettings from '../settings/default.yml'; -import printerSettings from '../settings/printer.yml'; -import materialSettings from '../settings/material.yml'; -import qualitySettings from '../settings/quality.yml'; import ReactResizeDetector from 'react-resize-detector'; import JSONToSketchData from 'doodle3d-core/shape/JSONToSketchData'; import createSceneData from 'doodle3d-core/d3/createSceneData.js'; @@ -91,63 +87,40 @@ class Interface extends React.Component { PropTypes.string ]).isRequired, classes: PropTypes.objectOf(PropTypes.string), - defaultSettings: PropTypes.object.isRequired, - printers: PropTypes.object.isRequired, - defaultPrinter: PropTypes.string, - quality: PropTypes.object.isRequired, - defaultQuality: PropTypes.string.isRequired, - material: PropTypes.object.isRequired, - defaultMaterial: PropTypes.string.isRequired, pixelRatio: PropTypes.number.isRequired, onCancel: PropTypes.func, name: PropTypes.string.isRequired }; static defaultProps = { - defaultSettings: defaultSettings, - printers: printerSettings, - quality: qualitySettings, - defaultQuality: 'medium', - material: materialSettings, - defaultMaterial: 'pla', pixelRatio: 1, name: 'Doodle3D' }; constructor(props) { super(props); - const { defaultPrinter, defaultQuality, defaultMaterial, printers, quality, material, defaultSettings } = props; + const scene = createScene(this.props); this.state = { + scene, + settings: null, showFullScreen: false, isSlicing: false, isLoading: true, error: null, - printers: defaultPrinter, - quality: defaultQuality, - material: defaultMaterial, popover: { element: null, open: false - }, - settings: _.merge( - {}, - defaultSettings, - printers[defaultPrinter], - quality[defaultQuality], - material[defaultMaterial] - ) + } }; } componentDidMount() { const { canvas } = this.refs; - const scene = createScene(canvas, this.props, this.state); - - this.setState({ scene }); + const { scene } = this.state; + scene.updateCanvas(canvas); const { file } = this.props; - if (!file) { throw new Error('no file provided'); } if (typeof file === 'string') { @@ -220,22 +193,20 @@ class Interface extends React.Component { }; slice = async (target) => { - const { isSlicing, isLoading, settings, printers, quality, mesh, scene: { material, mesh: { matrix } } } = this.state; + const { isSlicing, isLoading, settings, mesh, scene: { material, mesh: { matrix } } } = this.state; const { name } = this.props; if (isSlicing || isLoading) return; this.closePopover(); - this.setState({ isSlicing: true, progress: { action: '', percentage: 0, step: 0 }, error: null }); const exportMesh = new Mesh(mesh.geometry, mesh.material); exportMesh.applyMatrix(matrix); try { - await slice(target, name, exportMesh, settings, printers, quality, material, progress => { - this.setState({ progress: { ...this.state.progress, ...progress } }); - }); + const updateProgres = progress => this.setState({ progress: { ...this.state.progress, ...progress } }); + await slice(target, name, exportMesh, settings, updateProgres); } catch (error) { this.setState({ error: error.message }); throw error; @@ -263,23 +234,6 @@ class Interface extends React.Component { }); }; - onChangeSettings = (settings) => { - this.setState(settings); - }; - - componentWillUpdate(nextProps, nextState) { - if (!this.state.scene) return; - const { scene: { box, render, setSize } } = this.state; - let changed = false; - if (box && nextState.settings.dimensions !== this.state.settings.dimensions) { - const { dimensions } = nextState.settings; - box.scale.set(dimensions.y, dimensions.z, dimensions.x); - box.updateMatrix(); - changed = true; - } - if (changed) render(); - } - componentDidUpdate() { const { scene: { updateCanvas } } = this.state; const { canvas } = this.refs; @@ -298,9 +252,23 @@ class Interface extends React.Component { this.setState({ showFullScreen: width > MAX_FULLSCREEN_WIDTH }); }; + onChangeSettings = (settings) => { + const { scene: { box, render } } = this.state; + + let changed = false; + if (!this.state.settings || this.state.settings.dimensions !== settings.dimensions) { + box.scale.set(settings.dimensions.y, settings.dimensions.z, settings.dimensions.x); + box.updateMatrix(); + changed = true; + } + if (changed) render(); + + this.setState({ settings, error: null }); + }; + render() { - const { classes, defaultPrinter, defaultQuality, defaultMaterial, onCancel } = this.props; - const { isSlicing, isLoading, progress, settings, printers, quality, material, showFullScreen, error } = this.state; + const { classes, onCancel } = this.props; + const { isSlicing, isLoading, progress, showFullScreen, error } = this.state; const disableUI = isSlicing || isLoading; const style = { ...(showFullScreen ? {} : { maxWidth: 'inherit', width: '100%', height: '100%' }) }; @@ -309,13 +277,6 @@ class Interface extends React.Component {
diff --git a/src/interface/utils.js b/src/interface/utils.js index 0d81a2f..7d8a15e 100644 --- a/src/interface/utils.js +++ b/src/interface/utils.js @@ -1,6 +1,7 @@ import * as THREE from 'three'; import { Box3 } from 'three/src/math/Box3.js'; import { Matrix4 } from 'three/src/math/Matrix4.js'; +import { Vector3 } from 'three/src/math/Vector3.js'; import { Scene } from 'three/src/scenes/Scene.js'; import { PerspectiveCamera } from 'three/src/cameras/PerspectiveCamera.js'; import { AmbientLight } from 'three/src/lights/AmbientLight.js'; @@ -34,14 +35,12 @@ export function centerGeometry(mesh) { mesh.geometry.applyMatrix(new Matrix4().makeTranslation(-center.x, -center.y, -center.z)); } -export function createScene(canvas, props, state) { - const { pixelRatio } = props; - const { settings } = state; - +export function createScene({ pixelRatio }) { const scene = new Scene(); const camera = new PerspectiveCamera(50, 1, 1, 10000); camera.position.set(0, 400, 300); + camera.lookAt(new Vector3(0, 0, 0)); const directionalLightA = new DirectionalLight(0xa2a2a2); directionalLightA.position.set(1, 1, 1); @@ -61,8 +60,10 @@ export function createScene(canvas, props, state) { const box = new BoxHelper(new Mesh(new BoxGeometry(1, 1, 1).applyMatrix(new Matrix4().makeTranslation(0, 0.5, 0))), 0x72bcd4); scene.add(box); - const { dimensions } = settings; - box.scale.set(dimensions.y, dimensions.z, dimensions.x); + let renderer = new WebGLRenderer({ alpha: true, antialias: true }); + let editorControls = new THREE.EditorControls(camera, renderer.domElement); + + box.scale.set(1., 1., 1.); box.updateMatrix(); const render = () => renderer.render(scene, camera); @@ -75,8 +76,6 @@ export function createScene(canvas, props, state) { render(); }; - let editorControls; - let renderer; const updateCanvas = (canvas) => { if (!renderer || renderer.domElement !== canvas) { if (renderer) renderer.dispose(); @@ -86,13 +85,11 @@ export function createScene(canvas, props, state) { if (!editorControls || editorControls.domElement !== canvas) { if (editorControls) editorControls.dispose(); editorControls = new THREE.EditorControls(camera, canvas); - editorControls.focus(mesh); editorControls.addEventListener('change', render); } render(); }; - updateCanvas(canvas); const focus = () => editorControls.focus(mesh); @@ -119,8 +116,8 @@ export function fetchProgress(url, { method = 'get', headers = {}, body = {} } = const GCODE_SERVER_URL = 'https://gcodeserver.doodle3d.com'; const CONNECT_URL = 'http://connect.doodle3d.com/'; -export async function slice(target, name, mesh, settings, printers, quality, material, updateProgress) { - if (!printers) throw new Error('Please select a printer'); +export async function slice(target, name, mesh, settings, updateProgress) { + if (!settings) throw new Error('please select a printer first'); let steps; let currentStep = 0; @@ -167,22 +164,13 @@ export async function slice(target, name, mesh, settings, printers, quality, mat body.append(key, fields[key]); } - const file = ';' + JSON.stringify({ - name: `${name}.gcode`, + const file = `;${JSON.stringify({ ...settings, - printer: { - type: printers, - title: printerSettings[printers].title - }, - material: { - type: material, - title: materialSettings[material].title - }, - quality: { - type: quality, - title: qualitySettings[quality].title - } - }).trim() + '\n' + gcode; + name: `${name}.gcode`, + printer: { type: settings.printers, title: printerSettings[settings.printer].title }, + material: { type: settings.material, title: materialSettings[settings.material].title }, + quality: { type: settings.quality, title: qualitySettings[settings.quality].title } + }).trim()}\n${gcode}`; body.append('file', file); await fetchProgress(reservation.url, { method: 'POST', body }, (progess) => { @@ -195,6 +183,7 @@ export async function slice(target, name, mesh, settings, printers, quality, mat const popup = window.open(`${CONNECT_URL}?uuid=${id}`, '_blank'); if (!popup) throw new Error('popup was blocked by browser'); + break; } default: From f20f5b95b86c2d92adf7a77d5359265b1b61992f Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Tue, 16 Jan 2018 18:52:03 +0100 Subject: [PATCH 017/163] Change infill gridsize to infill percentage #31 --- src/interface/Settings.js | 4 ++-- src/settings/default.yml | 2 +- src/settings/quality.yml | 6 +++--- src/sliceActions/generateInfills.js | 12 ++++++------ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/interface/Settings.js b/src/interface/Settings.js index e2303a8..e4c781f 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -144,7 +144,7 @@ class Settings extends React.Component { case 'settings.innerShell.flowRate': case 'settings.outerShell.speed': case 'settings.outerShell.flowRate': - case 'settings.innerInfill.gridSize': + case 'settings.innerInfill.precentage': case 'settings.innerInfill.speed': case 'settings.innerInfill.flowRate': case 'settings.outerInfill.speed': @@ -306,7 +306,7 @@ class Settings extends React.Component {

Inner infill

- +

Outer infill

diff --git a/src/settings/default.yml b/src/settings/default.yml index 58f1d73..f69d507 100644 --- a/src/settings/default.yml +++ b/src/settings/default.yml @@ -39,7 +39,7 @@ outerShell: innerInfill: flowRate: 1.0 speed: 80.0 - gridSize: 15.0 + precentage: 20.0 outerInfill: flowRate: 1.0 speed: 50.0 diff --git a/src/settings/quality.yml b/src/settings/quality.yml index 967a7b0..1c840bf 100644 --- a/src/settings/quality.yml +++ b/src/settings/quality.yml @@ -15,7 +15,7 @@ low: speed: 70.0 innerInfill: speed: 80.0 - gridSize: 25.0 + precentage: 10.0 medium: title: "Medium" layerHeight: .15 @@ -33,7 +33,7 @@ medium: speed: 40.0 innerInfill: speed: 80.0 - gridSize: 25.0 + precentage: 10.0 high: title: "High" thickness: @@ -51,4 +51,4 @@ high: speed: 30.0 innerInfill: speed: 70.0 - gridSize: 10.0 + precentage: 20.0 diff --git a/src/sliceActions/generateInfills.js b/src/sliceActions/generateInfills.js index 3ddfa56..1a777e1 100644 --- a/src/sliceActions/generateInfills.js +++ b/src/sliceActions/generateInfills.js @@ -5,7 +5,7 @@ import Shape from 'clipper-js'; export default function generateInfills(slices, settings) { let { layerHeight, - innerInfill: { gridSize: infillGridSize }, + innerInfill: { precentage: infillPercentage }, thickness: { top: topThickness, bottom: bottomThickness @@ -13,11 +13,11 @@ export default function generateInfills(slices, settings) { nozzleDiameter } = settings; - infillGridSize /= PRECISION; + infillPercentage /= 100; nozzleDiameter /= PRECISION; - const bottomSkinCount = Math.ceil(bottomThickness/layerHeight); - const topSkinCount = Math.ceil(topThickness/layerHeight); + const bidirectionalInfill = infillPercentage < 0.8; + const infillGridSize = nozzleDiameter * (bidirectionalInfill ? 2 : 1) / infillPercentage; const nozzleRadius = nozzleDiameter / 2; const outerFillTemplateSize = Math.sqrt(2 * Math.pow(nozzleDiameter, 2)); @@ -32,6 +32,7 @@ export default function generateInfills(slices, settings) { } for (let i = 0; i < slice.parts.length; i ++) { + const even = (layer % 2 === 0); const part = slice.parts[i]; if (!part.closed) continue; @@ -52,14 +53,13 @@ export default function generateInfills(slices, settings) { if (innerFillArea && innerFillArea.paths.length > 0) { const bounds = innerFillArea.shapeBounds(); - const innerFillTemplate = getFillTemplate(bounds, infillGridSize, true, true); + const innerFillTemplate = getFillTemplate(bounds, infillGridSize, bidirectionalInfill || even, bidirectionalInfill || !even); part.innerFill.join(innerFillTemplate.intersect(innerFillArea)); } if (outerFillArea.paths.length > 0) { const bounds = outerFillArea.shapeBounds(); - const even = (layer % 2 === 0); const outerFillTemplate = getFillTemplate(bounds, outerFillTemplateSize, even, !even); part.outerFill.join(outerFillTemplate.intersect(outerFillArea)); From e1d833d4f384413a9e51a749a1466625648bb0f8 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Tue, 16 Jan 2018 18:52:08 +0100 Subject: [PATCH 018/163] syntax --- src/sliceActions/generateInfills.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sliceActions/generateInfills.js b/src/sliceActions/generateInfills.js index 1a777e1..20335fd 100644 --- a/src/sliceActions/generateInfills.js +++ b/src/sliceActions/generateInfills.js @@ -18,6 +18,9 @@ export default function generateInfills(slices, settings) { const bidirectionalInfill = infillPercentage < 0.8; const infillGridSize = nozzleDiameter * (bidirectionalInfill ? 2 : 1) / infillPercentage; + + const bottomSkinCount = Math.ceil(bottomThickness / layerHeight); + const topSkinCount = Math.ceil(topThickness / layerHeight); const nozzleRadius = nozzleDiameter / 2; const outerFillTemplateSize = Math.sqrt(2 * Math.pow(nozzleDiameter, 2)); From 9764e0a374350134086f95f1b09a19c8c757069e Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 08:40:48 +0100 Subject: [PATCH 019/163] Add dimensions details to 3d panel --- src/interface/index.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/interface/index.js b/src/interface/index.js index 0d8fe43..253212a 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -3,6 +3,7 @@ import React from 'react'; import { Quaternion } from 'three/src/math/Quaternion.js'; import { Vector3 } from 'three/src/math/Vector3.js'; import { Mesh } from 'three/src/objects/Mesh.js'; +import { Box3 } from 'three/src/math/Box3.js'; import PropTypes from 'proptypes'; import { centerGeometry, placeOnGround, createScene, fetchProgress, slice, TabTemplate } from './utils.js'; import injectSheet from 'react-jss'; @@ -77,6 +78,9 @@ const styles = { }, title: { position: 'absolute' + }, + detail: { + marginBottom: '10px' } }; @@ -108,6 +112,7 @@ class Interface extends React.Component { isSlicing: false, isLoading: true, error: null, + objectDimensions: '0x0x0mm', popover: { element: null, open: false @@ -141,6 +146,7 @@ class Interface extends React.Component { scene.mesh.geometry = mesh.geometry; centerGeometry(scene.mesh); placeOnGround(scene.mesh); + this.calculateDimensions(); scene.render(); this.setState({ mesh, isLoading: false }); @@ -162,6 +168,7 @@ class Interface extends React.Component { mesh.rotation.set(0, 0, 0); mesh.updateMatrix(); placeOnGround(mesh); + this.calculateDimensions(); render(); } }; @@ -175,6 +182,7 @@ class Interface extends React.Component { mesh.scale.multiplyScalar(factor); mesh.updateMatrix(); placeOnGround(mesh); + this.calculateDimensions(); render(); } }; @@ -188,6 +196,7 @@ class Interface extends React.Component { if (mesh) { mesh.rotateOnWorldAxis(axis, angle); placeOnGround(mesh); + this.calculateDimensions(); render(); } }; @@ -266,9 +275,15 @@ class Interface extends React.Component { this.setState({ settings, error: null }); }; + calculateDimensions = () => { + const { scene: { mesh } } = this.state; + const { x, y, z } = new Box3().setFromObject(mesh).getSize(); + this.setState({ objectDimensions: `${Math.round(x)}x${Math.round(y)}x${Math.round(z)}mm` }); + }; + render() { const { classes, onCancel } = this.props; - const { isSlicing, isLoading, progress, showFullScreen, error } = this.state; + const { isSlicing, isLoading, progress, showFullScreen, error, objectDimensions } = this.state; const disableUI = isSlicing || isLoading; const style = { ...(showFullScreen ? {} : { maxWidth: 'inherit', width: '100%', height: '100%' }) }; @@ -319,6 +334,9 @@ class Interface extends React.Component {
+
+

Dimensions: {objectDimensions}

+
From d190625f14245e6e4e9722f0191a643b424e8aba Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 09:01:40 +0100 Subject: [PATCH 020/163] Fix form element --- src/interface/FormComponents.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index 20f2ec6..a4bccb3 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -45,7 +45,7 @@ TextField.contextTypes = contextTypes; TextField.propTypes = propTypes; export const Checkbox = (props, context) => ( - + Date: Wed, 17 Jan 2018 09:02:50 +0100 Subject: [PATCH 021/163] change html title --- webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index 8e59163..58bcbeb 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -63,7 +63,7 @@ module.exports = { }, plugins: [ new HTMLWebpackPlugin({ - title: 'Doodle3D Slicer - Simple example', + title: 'Doodle3D Slicer', template: require('html-webpack-template'), inject: false, appMountId: 'app' From 5fbd7f50ec8df36bf144948e1c5122d6fab787bd Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 09:11:15 +0100 Subject: [PATCH 022/163] Update title --- src/interface/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index 253212a..58affe2 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -77,7 +77,8 @@ const styles = { color: red500 }, title: { - position: 'absolute' + position: 'absolute', + left: '10px' }, detail: { marginBottom: '10px' @@ -351,7 +352,7 @@ class Interface extends React.Component { return (
-

Print

+

Doodle3D Slicer

{d3Panel} {settingsPanel}
From a48768e2684a64555f9f298e1acef13afbc3eccc Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 10:23:23 +0100 Subject: [PATCH 023/163] replace clear icon with refresh icon --- src/interface/FormComponents.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index a4bccb3..548547d 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -6,7 +6,7 @@ import MaterialUISelectField from 'material-ui/SelectField' import MaterialUICheckbox from 'material-ui/Checkbox'; import { blue500, grey500 } from 'material-ui/styles/colors'; import TextFieldIcon from 'material-ui-textfield-icon'; -import Clear from 'material-ui-icons/Clear'; +import RefreshIcon from 'material-ui-icons/Refresh'; const contextTypes = { settings: PropTypes.object.isRequired, @@ -34,7 +34,7 @@ SelectField.propTypes = propTypes; export const TextField = (props, context) => ( context.onChange(props.name, null)} />} + icon={context.advancedFields.includes(props.name) && context.onChange(props.name, null)} />} floatingLabelStyle={{ color: context.advancedFields.includes(props.name) ? blue500 : grey500 }} disabled={context.disabled} value={_.get(context, props.name)} @@ -54,7 +54,7 @@ export const Checkbox = (props, context) => ( checked={_.get(context, props.name)} onCheck={(event, value) => context.onChange(props.name, value)} /> - {context.advancedFields.includes(props.name) && context.onChange(props.name, null)} />} + {context.advancedFields.includes(props.name) && context.onChange(props.name, null)} />}
); Checkbox.contextTypes = contextTypes; From 879667fa0514323840c4605db8e9d4f94bd6859a Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 11:04:22 +0100 Subject: [PATCH 024/163] add manage printer dialog --- src/interface/FormComponents.js | 1 + src/interface/Settings.js | 122 ++++++++++++++++++++++++++++---- 2 files changed, 111 insertions(+), 12 deletions(-) diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index 548547d..bedb69d 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -13,6 +13,7 @@ const contextTypes = { onChange: PropTypes.func.isRequired, disabled: PropTypes.bool.isRequired, addPrinter: PropTypes.object.isRequired, + managePrinter: PropTypes.object.isRequired, advancedFields: PropTypes.array.isRequired, activePrinter: PropTypes.string }; diff --git a/src/interface/Settings.js b/src/interface/Settings.js index e4c781f..c99cb3f 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -16,10 +16,12 @@ import printerSettings from '../settings/printer.yml'; import materialSettings from '../settings/material.yml'; import qualitySettings from '../settings/quality.yml'; import update from 'react-addons-update'; +import SettingsIcon from 'material-ui-icons/Settings'; const styles = { textFieldRow: { - display: 'flex' + display: 'flex', + alignItems: 'center' }, container: { width: '100%', @@ -65,6 +67,7 @@ class Settings extends React.Component { onChange: PropTypes.func.isRequired, disabled: PropTypes.bool.isRequired, addPrinter: PropTypes.object.isRequired, + managePrinter: PropTypes.object.isRequired, activePrinter: PropTypes.string, advancedFields: PropTypes.array.isRequired }; @@ -76,6 +79,9 @@ class Settings extends React.Component { name: '', printer: '', error: null + }, + managePrinter: { + open: false } }; @@ -100,6 +106,11 @@ class Settings extends React.Component { }; switch (fieldName) { + case 'managePrinter.printer': + case 'managePrinter.name': + state = _.set(state, fieldName, value); + break; + case 'addPrinter.printer': state = update(state, { addPrinter: { printer: { $set: value } } }); state = update(state, { addPrinter: { name: { $set: printerSettings[value].title } } }); @@ -176,10 +187,11 @@ class Settings extends React.Component { } getChildContext() { - const { localStorage, addPrinter } = this.state; + const { localStorage, addPrinter, managePrinter } = this.state; return { addPrinter, + managePrinter, activePrinter: localStorage.active, advancedFields: localStorage.active ? Object.keys(localStorage.printers[localStorage.active].settings.advanced) : [], settings: this.constructSettings(localStorage), @@ -234,25 +246,82 @@ class Settings extends React.Component { const { onChange } = this.props; if (onChange) onChange(this.constructSettings(localStorage)); - } + }; + + editPrinter = () => { + const { localStorage: { active, printers }, managePrinter: { printer, name } } = this.state; + const localStorage = update(this.state.localStorage, { + printers: { + [active]: { + name: { $set: name }, + settings: { + printer: { $set: printer } + } + } + } + }); + this.closeManagePrinterDialog(); + this.setState({ localStorage }); + updateLocalStorage(localStorage); + + const { onChange } = this.props; + if (onChange) onChange(this.constructSettings(localStorage)); + }; + + removeActivePrinter = () => { + let { localStorage: { active, printers } } = this.state; + if (!active) return; + + printers = { ...printers }; + delete printers[active]; + active = Object.keys(printers)[0] || null; + const localStorage = { active, printers }; + + this.closeManagePrinterDialog(); + this.setState({ localStorage }); + updateLocalStorage(localStorage); + + const { onChange } = this.props; + if (onChange) onChange(this.constructSettings(localStorage)); + }; closeAddPrinterDialog = () => this.setAddPrinterDialog(false); openAddPrinterDialog = () => this.setAddPrinterDialog(true); setAddPrinterDialog = (open) => this.setState({ addPrinter: { name: '', printer: '', error: null, open } }); + closeManagePrinterDialog = () => this.setManagePrinterDialog(false); + openManagePrinterDialog = () => this.setManagePrinterDialog(true); + setManagePrinterDialog = (open) => { + const { localStorage: { active, printers } } = this.state; + if (!active) return this.setState({ managePrinter: { open: false } }); + this.setState({ + managePrinter: { + open, + name: printers[active].name, + printer: printers[active].settings.printer + } + }); + } + render() { - const { addPrinter, localStorage } = this.state; + const { addPrinter, managePrinter, localStorage } = this.state; const { classes, disabled } = this.props; return (
- - {Object.entries(localStorage.printers).map(([id, { name }]) => ( - - ))} - - - +
+ + {Object.entries(localStorage.printers).map(([id, { name }]) => ( + + ))} + + + + {localStorage.active && } +
{Object.entries(materialSettings).map(([value, { title }]) => ( @@ -341,11 +410,40 @@ class Settings extends React.Component { > {Object.entries(printerSettings).map(([value, { title }]) => ( - ))} + + ))} {addPrinter.error &&

{addPrinter.error}

} + , + , + + ]} + > + + {Object.entries(printerSettings).map(([value, { title }]) => ( + + ))} + + +
); } From 9b78f4e2c889547128e8a50f9f4b42e40c7d7052 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 11:22:50 +0100 Subject: [PATCH 025/163] move ultimaker 2go --- src/settings/printer.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/settings/printer.yml b/src/settings/printer.yml index e67a4bb..1f8f212 100644 --- a/src/settings/printer.yml +++ b/src/settings/printer.yml @@ -26,14 +26,6 @@ doodle3d_printer: x: 120 y: 120 z: 120 -ultimaker2go: - title: Ultimaker 2 Go - heatedBed: false - filamentThickness: 2.85 - dimensions: - x: 120 - y: 120 - z: 112 _3Dison_plus: title: 3Dison plus heatedBed: false @@ -307,6 +299,14 @@ ultimaker2_plus: x: 223 y: 223 z: 305 +ultimaker2go: + title: Ultimaker 2 Go + heatedBed: false + filamentThickness: 2.85 + dimensions: + x: 120 + y: 120 + z: 112 ultimaker_original_plus: title: Ultimaker Original Plus heatedBed: true From 137f95fdba053b0431d2ddc82a4569123bf70a85 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 11:56:42 +0100 Subject: [PATCH 026/163] Add constrains to fields #32 --- package-lock.json | 6 ++-- src/interface/FormComponents.js | 21 +++++++++++- src/interface/Settings.js | 60 ++++++++++++++++----------------- 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4aa69e8..984bc97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,6 +79,9 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz", "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==" + }, + "three-js-csg": { + "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" } } }, @@ -7856,9 +7859,6 @@ "resolved": "https://registry.npmjs.org/three/-/three-0.88.0.tgz", "integrity": "sha1-QlbC/Djk+yOg0j66K2zOTfjkZtU=" }, - "three-js-csg": { - "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" - }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index bedb69d..b99d7ae 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -39,12 +39,31 @@ export const TextField = (props, context) => ( floatingLabelStyle={{ color: context.advancedFields.includes(props.name) ? blue500 : grey500 }} disabled={context.disabled} value={_.get(context, props.name)} - onChange={(event, value) => context.onChange(props.name, props.type === 'number' ? parseFloat(value) : value)} + onChange={(event, value) => context.onChange(props.name, value)} /> ); TextField.contextTypes = contextTypes; TextField.propTypes = propTypes; +export const NumberField = (props, context) => ( + context.onChange(props.name, null)} />} + floatingLabelStyle={{ color: context.advancedFields.includes(props.name) ? blue500 : grey500 }} + disabled={context.disabled} + value={_.get(context, props.name)} + onChange={(event, value) => { + value = parseFloat(value); + if (props.min) value = Math.max(value, props.min); + if (props.max) value = Math.min(value, props.max); + context.onChange(props.name, value); + }} + /> +); +NumberField.contextTypes = contextTypes; +NumberField.propTypes = propTypes; + export const Checkbox = (props, context) => (

Layer

- +

Printer dimensions

- - - + + +

Nozzle

- +

Bed

- +

Material

- - + +

Thickness

- - - + + +

Retraction

- - - + + +

Travel

- +

Inner shell

- - + +

Outer shell

- - + +

Inner infill

- - - + + +

Outer infill

- - + +

Brim

- - - + + +

First layer

- - + +
From 89e67882a0c392c8a4b71f86cd539a1bc07cb2f7 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 12:00:19 +0100 Subject: [PATCH 027/163] cast number as string --- src/interface/FormComponents.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index b99d7ae..ec16553 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -52,7 +52,7 @@ export const NumberField = (props, context) => ( icon={context.advancedFields.includes(props.name) && context.onChange(props.name, null)} />} floatingLabelStyle={{ color: context.advancedFields.includes(props.name) ? blue500 : grey500 }} disabled={context.disabled} - value={_.get(context, props.name)} + value={_.get(context, props.name.toString())} onChange={(event, value) => { value = parseFloat(value); if (props.min) value = Math.max(value, props.min); From 291e11fecfc7908120bbaaaff0917cd689a62d8f Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 12:21:36 +0100 Subject: [PATCH 028/163] update style --- src/interface/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index 58affe2..6cec528 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -50,9 +50,9 @@ const styles = { settingsBar: { display: 'flex', flexDirection: 'column', - maxWidth: '380px', + maxWidth: '320px', boxSizing: 'border-box', - padding: '10px', + padding: '10px 20px', backgroundColor: 'white', borderLeft: `1px solid ${grey300}` }, From 2fdc5ca16be8afe6ff0f41657bf3eedf6ec33050 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 12:23:03 +0100 Subject: [PATCH 029/163] disable selecting for title and details --- src/interface/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/interface/index.js b/src/interface/index.js index 6cec528..6474834 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -77,10 +77,12 @@ const styles = { color: red500 }, title: { + userSelect: 'none', position: 'absolute', left: '10px' }, detail: { + userSelect: 'none', marginBottom: '10px' } }; From 2f4adbbb4724657fd377a05dc0e46295089e1cdb Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 13:26:30 +0100 Subject: [PATCH 030/163] use mui theme for colors --- index.js | 13 ++++++- src/interface/FormComponents.js | 67 ++++++++++++++++++--------------- src/interface/Settings.js | 6 +-- src/interface/index.js | 6 ++- src/interface/utils.js | 7 ++-- 5 files changed, 59 insertions(+), 40 deletions(-) diff --git a/index.js b/index.js index e6ae0cb..de66ab6 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,17 @@ import jss from 'jss'; import preset from 'jss-preset-default'; import normalize from 'normalize-jss'; import queryString from 'query-string'; +import getMuiTheme from 'material-ui/styles/getMuiTheme'; +import { blue400, blue500, blue700 } from 'material-ui/styles/colors'; + +const muiTheme = getMuiTheme({ + palette: { + primary1Color: blue500, + primary2Color: blue700, + primary3Color: blue400, + accent1Color: blue500, + } +}); injectTapEventPlugin(); @@ -25,7 +36,7 @@ jss.createStyleSheet({ const { file } = queryString.parse(location.search); render(( - + ), document.getElementById('app')); diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index ec16553..8128a67 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -4,11 +4,11 @@ import _ from 'lodash'; import injectSheet from 'react-jss'; import MaterialUISelectField from 'material-ui/SelectField' import MaterialUICheckbox from 'material-ui/Checkbox'; -import { blue500, grey500 } from 'material-ui/styles/colors'; import TextFieldIcon from 'material-ui-textfield-icon'; import RefreshIcon from 'material-ui-icons/Refresh'; +import muiThemeable from 'material-ui/styles/muiThemeable'; -const contextTypes = { +export const contextTypes = { settings: PropTypes.object.isRequired, onChange: PropTypes.func.isRequired, disabled: PropTypes.bool.isRequired, @@ -18,64 +18,69 @@ const contextTypes = { activePrinter: PropTypes.string }; const propTypes = { - name: PropTypes.string.isRequired + name: PropTypes.string.isRequired, + muiTheme: PropTypes.object.isRequired }; -export const SelectField = (props, context) => ( +export const _SelectField = ({ name, muiTheme, ...props }, context) => ( context.onChange(props.name, value)} + value={_.get(context, name)} + onChange={(event, index, value) => context.onChange(name, value)} /> ); -SelectField.contextTypes = contextTypes; -SelectField.propTypes = propTypes; +_SelectField.contextTypes = contextTypes; +_SelectField.propTypes = propTypes; +export const SelectField = muiThemeable()(_SelectField); -export const TextField = (props, context) => ( +const _TextField = ({ name, muiTheme, ...props }, context) => ( context.onChange(props.name, null)} />} - floatingLabelStyle={{ color: context.advancedFields.includes(props.name) ? blue500 : grey500 }} + icon={context.advancedFields.includes(name) && context.onChange(name, null)} />} + floatingLabelStyle={{ color: context.advancedFields.includes(name) ? muiTheme.palette.primary3Color : muiTheme.palette.disabledColor }} disabled={context.disabled} - value={_.get(context, props.name)} - onChange={(event, value) => context.onChange(props.name, value)} + value={_.get(context, name)} + onChange={(event, value) => context.onChange(name, value)} /> ); -TextField.contextTypes = contextTypes; -TextField.propTypes = propTypes; +_TextField.contextTypes = contextTypes; +_TextField.propTypes = propTypes; +export const TextField = muiThemeable()(_TextField); -export const NumberField = (props, context) => ( +const _NumberField = ({ name, min, max, muiTheme, ...props }, context) => ( context.onChange(props.name, null)} />} - floatingLabelStyle={{ color: context.advancedFields.includes(props.name) ? blue500 : grey500 }} + icon={context.advancedFields.includes(name) && context.onChange(name, null)} />} + floatingLabelStyle={{ color: context.advancedFields.includes(name) ? muiTheme.palette.primary3Color : muiTheme.palette.disabledColor }} disabled={context.disabled} - value={_.get(context, props.name.toString())} + value={_.get(context, name.toString())} onChange={(event, value) => { value = parseFloat(value); - if (props.min) value = Math.max(value, props.min); - if (props.max) value = Math.min(value, props.max); - context.onChange(props.name, value); + if (min) value = Math.max(value, min); + if (max) value = Math.min(value, max); + context.onChange(name, value); }} /> ); -NumberField.contextTypes = contextTypes; -NumberField.propTypes = propTypes; +_NumberField.contextTypes = contextTypes; +_NumberField.propTypes = propTypes; +export const NumberField = muiThemeable()(_NumberField); -export const Checkbox = (props, context) => ( +export const _Checkbox = ({ name, muiTheme, ...props }, context) => ( context.onChange(props.name, value)} + checked={_.get(context, name)} + onCheck={(event, value) => context.onChange(name, value)} /> - {context.advancedFields.includes(props.name) && context.onChange(props.name, null)} />} + {context.advancedFields.includes(name) && context.onChange(name, null)} />} ); -Checkbox.contextTypes = contextTypes; -Checkbox.propTypes = propTypes; +_Checkbox.contextTypes = contextTypes; +_Checkbox.propTypes = propTypes; +export const Checkbox = muiThemeable()(_Checkbox); diff --git a/src/interface/Settings.js b/src/interface/Settings.js index 1aab264..3987194 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -5,7 +5,7 @@ import { Tabs, Tab } from 'material-ui/Tabs'; import MenuItem from 'material-ui/MenuItem'; import injectSheet from 'react-jss'; import { SelectField, TextField, NumberField, Checkbox } from './FormComponents.js'; -import { grey800, cyan500, red500 } from 'material-ui/styles/colors'; +import { grey800, red500 } from 'material-ui/styles/colors'; import Divider from 'material-ui/Divider'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; @@ -319,7 +319,7 @@ class Settings extends React.Component { {localStorage.active && }
@@ -328,7 +328,7 @@ class Settings extends React.Component { ))}

Printer Setup

- +
diff --git a/src/interface/index.js b/src/interface/index.js index 6474834..f29ef78 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -22,6 +22,7 @@ import JSONToSketchData from 'doodle3d-core/shape/JSONToSketchData'; import createSceneData from 'doodle3d-core/d3/createSceneData.js'; import { generateExportMesh } from 'doodle3d-core/utils/exportUtils.js'; import { Matrix4 } from 'three/src/math/Matrix4.js'; +import muiThemeable from 'material-ui/styles/muiThemeable'; const MAX_FULLSCREEN_WIDTH = 720; @@ -96,7 +97,8 @@ class Interface extends React.Component { classes: PropTypes.objectOf(PropTypes.string), pixelRatio: PropTypes.number.isRequired, onCancel: PropTypes.func, - name: PropTypes.string.isRequired + name: PropTypes.string.isRequired, + muiTheme: PropTypes.object.isRequired }; static defaultProps = { @@ -383,4 +385,4 @@ class Interface extends React.Component { } } -export default injectSheet(styles)(Interface); +export default muiThemeable()(injectSheet(styles)(Interface)); diff --git a/src/interface/utils.js b/src/interface/utils.js index 7d8a15e..48acc3e 100644 --- a/src/interface/utils.js +++ b/src/interface/utils.js @@ -17,6 +17,7 @@ import printerSettings from '../settings/printer.yml'; import materialSettings from '../settings/material.yml'; import qualitySettings from '../settings/quality.yml'; import { sliceGeometry } from '../slicer.js'; +import { grey800, red500 } from 'material-ui/styles/colors'; import React from 'react'; import PropTypes from 'prop-types'; import fileSaver from 'file-saver'; @@ -35,7 +36,7 @@ export function centerGeometry(mesh) { mesh.geometry.applyMatrix(new Matrix4().makeTranslation(-center.x, -center.y, -center.z)); } -export function createScene({ pixelRatio }) { +export function createScene({ pixelRatio, muiTheme }) { const scene = new Scene(); const camera = new PerspectiveCamera(50, 1, 1, 10000); @@ -53,11 +54,11 @@ export function createScene({ pixelRatio }) { const light = new AmbientLight(0x656565); scene.add(light); - const material = new MeshPhongMaterial({ color: 0x2194ce, side: DoubleSide, specular: 0xc5c5c5, shininess: 5 }); + const material = new MeshPhongMaterial({ color: muiTheme.palette.primary2Color, side: DoubleSide, specular: 0xc5c5c5, shininess: 5 }); const mesh = new Mesh(new THREE.Geometry(), material); scene.add(mesh); - const box = new BoxHelper(new Mesh(new BoxGeometry(1, 1, 1).applyMatrix(new Matrix4().makeTranslation(0, 0.5, 0))), 0x72bcd4); + const box = new BoxHelper(new Mesh(new BoxGeometry(1, 1, 1).applyMatrix(new Matrix4().makeTranslation(0, 0.5, 0))), muiTheme.palette.primary3Color); scene.add(box); let renderer = new WebGLRenderer({ alpha: true, antialias: true }); From a8b3d688452bfb864f76c3c712d9d2fa2df135b0 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 14:21:59 +0100 Subject: [PATCH 031/163] order advanced settings based on most use --- src/interface/Settings.js | 58 +++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/interface/Settings.js b/src/interface/Settings.js index 3987194..9471488 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -342,32 +342,23 @@ class Settings extends React.Component {

Layer

-

Printer dimensions

-
- - - -
-

Nozzle

- -

Bed

- - -

Material

- -

Thickness

-

Retraction

- - - - -

Travel

- - +

Material

+ + +

Bed

+ + +

Brim

+ + + +

First layer

+ +

Inner shell

@@ -381,13 +372,22 @@ class Settings extends React.Component {

Outer infill

-

Brim

- - - -

First layer

- - +

Travel

+ + +

Retraction

+ + + + +

Printer dimensions

+
+ + + +
+

Nozzle

+
From 9f1958563d139894761de813c9f7be567248bf61 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 14:58:36 +0100 Subject: [PATCH 032/163] remove primary color 3 --- index.js | 3 +-- src/interface/FormComponents.js | 6 +++--- src/interface/utils.js | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index de66ab6..3421e5e 100644 --- a/index.js +++ b/index.js @@ -9,13 +9,12 @@ import preset from 'jss-preset-default'; import normalize from 'normalize-jss'; import queryString from 'query-string'; import getMuiTheme from 'material-ui/styles/getMuiTheme'; -import { blue400, blue500, blue700 } from 'material-ui/styles/colors'; +import { grey400, blue500, blue700 } from 'material-ui/styles/colors'; const muiTheme = getMuiTheme({ palette: { primary1Color: blue500, primary2Color: blue700, - primary3Color: blue400, accent1Color: blue500, } }); diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index 8128a67..b8ae5d5 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -38,7 +38,7 @@ const _TextField = ({ name, muiTheme, ...props }, context) => ( context.onChange(name, null)} />} - floatingLabelStyle={{ color: context.advancedFields.includes(name) ? muiTheme.palette.primary3Color : muiTheme.palette.disabledColor }} + floatingLabelStyle={{ color: context.advancedFields.includes(name) ? muiTheme.palette.primary1Color : muiTheme.palette.primary3Color }} disabled={context.disabled} value={_.get(context, name)} onChange={(event, value) => context.onChange(name, value)} @@ -53,7 +53,7 @@ const _NumberField = ({ name, min, max, muiTheme, ...props }, context) => ( {...props} type="number" icon={context.advancedFields.includes(name) && context.onChange(name, null)} />} - floatingLabelStyle={{ color: context.advancedFields.includes(name) ? muiTheme.palette.primary3Color : muiTheme.palette.disabledColor }} + floatingLabelStyle={{ color: context.advancedFields.includes(name) ? muiTheme.palette.primary1Color : muiTheme.palette.primary3Color }} disabled={context.disabled} value={_.get(context, name.toString())} onChange={(event, value) => { @@ -73,7 +73,7 @@ export const _Checkbox = ({ name, muiTheme, ...props }, context) => ( context.onChange(name, value)} diff --git a/src/interface/utils.js b/src/interface/utils.js index 48acc3e..64aeb58 100644 --- a/src/interface/utils.js +++ b/src/interface/utils.js @@ -58,7 +58,7 @@ export function createScene({ pixelRatio, muiTheme }) { const mesh = new Mesh(new THREE.Geometry(), material); scene.add(mesh); - const box = new BoxHelper(new Mesh(new BoxGeometry(1, 1, 1).applyMatrix(new Matrix4().makeTranslation(0, 0.5, 0))), muiTheme.palette.primary3Color); + const box = new BoxHelper(new Mesh(new BoxGeometry(1, 1, 1).applyMatrix(new Matrix4().makeTranslation(0, 0.5, 0))), muiTheme.palette.primary2Color); scene.add(box); let renderer = new WebGLRenderer({ alpha: true, antialias: true }); From 222a27d5b5ce1bee86c6559441214b9c80301c0a Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 15:27:42 +0100 Subject: [PATCH 033/163] fix catching errors in the worker --- src/slicer.js | 6 +++--- src/slicer.worker.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/slicer.js b/src/slicer.js index ead168b..5341d9f 100644 --- a/src/slicer.js +++ b/src/slicer.js @@ -63,10 +63,10 @@ function sliceAsync(settings, geometry, openObjectIndexes, constructLinePreview, // create the slicer worker const slicerWorker = new SlicerWorker(); - slicerWorker.onerror = error => { + slicerWorker.addEventListener('error', event => { slicerWorker.terminate(); - reject(error); - }; + reject(event); + }); // listen to messages send from worker slicerWorker.addEventListener('message', (event) => { diff --git a/src/slicer.worker.js b/src/slicer.worker.js index 0168b7b..2d866ef 100644 --- a/src/slicer.worker.js +++ b/src/slicer.worker.js @@ -12,7 +12,7 @@ const onProgress = progress => { const loader = new JSONLoader(); -self.addEventListener('message', async (event) => { +self.addEventListener('message', (event) => { const { message, data } = event.data; switch (message) { case 'SLICE': { From 1f4ca15442a3593e888384903d4910a72dae3492 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 15:53:03 +0100 Subject: [PATCH 034/163] Show dialog for closed popups #30 --- src/interface/index.js | 43 +++++++++++++++++++++++++++++++++++++++--- src/interface/utils.js | 13 ++++++++----- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index f29ef78..8c521ab 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -23,6 +23,7 @@ import createSceneData from 'doodle3d-core/d3/createSceneData.js'; import { generateExportMesh } from 'doodle3d-core/utils/exportUtils.js'; import { Matrix4 } from 'three/src/math/Matrix4.js'; import muiThemeable from 'material-ui/styles/muiThemeable'; +import Dialog from 'material-ui/Dialog'; const MAX_FULLSCREEN_WIDTH = 720; @@ -121,6 +122,10 @@ class Interface extends React.Component { popover: { element: null, open: false + }, + openUrlDialog: { + open: true, + url: '' } }; } @@ -222,8 +227,12 @@ class Interface extends React.Component { const updateProgres = progress => this.setState({ progress: { ...this.state.progress, ...progress } }); await slice(target, name, exportMesh, settings, updateProgres); } catch (error) { - this.setState({ error: error.message }); - throw error; + if (error.code === 3) { + this.setState({ openUrlDialog: { open: true, url: error.url } }); + } else { + this.setState({ error: error.message }); + throw error; + } } finally { this.setState({ isSlicing: false }); } @@ -288,7 +297,7 @@ class Interface extends React.Component { render() { const { classes, onCancel } = this.props; - const { isSlicing, isLoading, progress, showFullScreen, error, objectDimensions } = this.state; + const { isSlicing, isLoading, progress, showFullScreen, error, objectDimensions, openUrlDialog } = this.state; const disableUI = isSlicing || isLoading; const style = { ...(showFullScreen ? {} : { maxWidth: 'inherit', width: '100%', height: '100%' }) }; @@ -352,6 +361,32 @@ class Interface extends React.Component {
); + const closeDialog = () => this.setState({ openUrlDialog: { open: false, url: '' } }); + + const dialog = ( + , + { + window.open(openUrlDialog.url, '_blank'); + closeDialog(); + }} + /> + ]} + > +

Click 'Open' to continue to Doodle3D Connect

+
+ ) + if (showFullScreen) { return (
@@ -359,6 +394,7 @@ class Interface extends React.Component {

Doodle3D Slicer

{d3Panel} {settingsPanel} + {dialog}
); } else { @@ -379,6 +415,7 @@ class Interface extends React.Component { {d3Panel}
+ {dialog}
); } diff --git a/src/interface/utils.js b/src/interface/utils.js index 64aeb58..7f98ec4 100644 --- a/src/interface/utils.js +++ b/src/interface/utils.js @@ -118,7 +118,7 @@ const GCODE_SERVER_URL = 'https://gcodeserver.doodle3d.com'; const CONNECT_URL = 'http://connect.doodle3d.com/'; export async function slice(target, name, mesh, settings, updateProgress) { - if (!settings) throw new Error('please select a printer first'); + if (!settings) throw { message: 'please select a printer first', code: 0 }; let steps; let currentStep = 0; @@ -130,7 +130,7 @@ export async function slice(target, name, mesh, settings, updateProgress) { steps = 2; break; default: - throw new Error('unknown target'); + throw { message: 'unknown target', code: 1 }; break; } @@ -144,6 +144,8 @@ export async function slice(target, name, mesh, settings, updateProgress) { action: progress.action, percentage: currentStep / steps + progress.done / progress.total / steps }); + }).catch(error => { + throw { message: `error during slicing: ${error.message}`, code: 2 }; }); currentStep ++; @@ -182,13 +184,14 @@ export async function slice(target, name, mesh, settings, updateProgress) { }); currentStep ++; - const popup = window.open(`${CONNECT_URL}?uuid=${id}`, '_blank'); - if (!popup) throw new Error('popup was blocked by browser'); + const url = `${CONNECT_URL}?uuid=${id}`; + const popup = window.open(url, '_blank'); + if (!popup) throw { message: 'popup was blocked by browser', code: 3, url }; break; } default: - throw new Error('unknown target'); + throw { message: 'unknown target', code: 1 }; break; } } From 11222aaa823eb863c8c3c90e0f0d05bf9595c196 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 15:55:21 +0100 Subject: [PATCH 035/163] close url dialog by default --- src/interface/index.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index 8c521ab..65fa5b1 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -119,14 +119,8 @@ class Interface extends React.Component { isLoading: true, error: null, objectDimensions: '0x0x0mm', - popover: { - element: null, - open: false - }, - openUrlDialog: { - open: true, - url: '' - } + popover: { element: null, open: false }, + openUrlDialog: { open: false, url: '' } }; } From 53e961b9bb87db0ba11e443310412c8cc5bc49b5 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 16:10:22 +0100 Subject: [PATCH 036/163] fix min and max props --- src/interface/FormComponents.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index b8ae5d5..ef1e081 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -58,8 +58,8 @@ const _NumberField = ({ name, min, max, muiTheme, ...props }, context) => ( value={_.get(context, name.toString())} onChange={(event, value) => { value = parseFloat(value); - if (min) value = Math.max(value, min); - if (max) value = Math.min(value, max); + if (typeof min === 'number') value = Math.max(value, min); + if (typeof max === 'number') value = Math.min(value, max); context.onChange(name, value); }} /> From ac85bbc6d54cb5f80041b4df56aa11d42f515947 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 16:15:13 +0100 Subject: [PATCH 037/163] use primary buttons --- src/interface/Settings.js | 5 +++-- src/interface/index.js | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/interface/Settings.js b/src/interface/Settings.js index 9471488..b578672 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -9,6 +9,7 @@ import { grey800, red500 } from 'material-ui/styles/colors'; import Divider from 'material-ui/Divider'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; +import RaisedButton from 'material-ui/RaisedButton'; import { LOCAL_STORAGE_KEY } from '../constants.js'; import shortid from 'shortid'; import defaultSettings from '../settings/default.yml'; @@ -401,7 +402,7 @@ class Settings extends React.Component { label="Cancel" onTouchTap={this.closeAddPrinterDialog} />, - , - , - { From 742783e4dba1a2b767fa9552440a2a8dbe04813e Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 16:52:14 +0100 Subject: [PATCH 038/163] add margin to percentage container --- src/interface/index.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index 854f820..f9245ce 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -61,6 +61,9 @@ const styles = { sliceActions: { flexShrink: 0, }, + sliceInfo: { + margin: '10px 0' + }, sliceButtons: { justifyContent: 'flex-end', display: 'flex' @@ -303,9 +306,11 @@ class Interface extends React.Component { onChange={this.onChangeSettings} />
- {error &&

{error}

} - {isSlicing &&

{progress.action}

} - {isSlicing && } +
+ {error &&

{error}

} + {isSlicing &&

{progress.action}

} + {isSlicing && } +
{onCancel && Date: Wed, 17 Jan 2018 17:18:28 +0100 Subject: [PATCH 039/163] don't require a model for the slicer interface --- index.js | 2 +- src/interface/index.js | 64 +++++++++++++++++++----------------------- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/index.js b/index.js index 3421e5e..5e02721 100644 --- a/index.js +++ b/index.js @@ -36,6 +36,6 @@ const { file } = queryString.parse(location.search); render(( - + ), document.getElementById('app')); diff --git a/src/interface/index.js b/src/interface/index.js index f9245ce..23ed9a5 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -94,10 +94,8 @@ const styles = { class Interface extends React.Component { static propTypes = { - file: PropTypes.oneOfType([ - PropTypes.shape({ isMesh: PropTypes.oneOf([true]) }), - PropTypes.string - ]).isRequired, + fileUrl: PropTypes.string, + mesh: PropTypes.shape({ isMesh: PropTypes.oneOf([true]) }), classes: PropTypes.objectOf(PropTypes.string), pixelRatio: PropTypes.number.isRequired, onCancel: PropTypes.func, @@ -119,10 +117,9 @@ class Interface extends React.Component { settings: null, showFullScreen: false, isSlicing: false, - isLoading: true, error: null, objectDimensions: '0x0x0mm', - popover: { element: null, open: false }, + popover: { open: false, element: null }, openUrlDialog: { open: false, url: '' } }; } @@ -132,20 +129,16 @@ class Interface extends React.Component { const { scene } = this.state; scene.updateCanvas(canvas); - const { file } = this.props; - if (!file) { - throw new Error('no file provided'); - } if (typeof file === 'string') { - fetch(file) + const { mesh, fileUrl } = this.props; + if (mesh) { + this.updateMesh(mesh, scene); + } else if (fileUrl) { + fetch(fileUrl) .then(resonse => resonse.json()) .then(json => JSONToSketchData(json)) .then(file => createSceneData(file)) .then(sketch => generateExportMesh(sketch, { offsetSingleWalls: false, matrix: new Matrix4() })) .then(mesh => this.updateMesh(mesh, scene)); - } else if (file.isMesh) { - this.updateMesh(file, scene); - } else { - throw new Error('unknown file property'); } } @@ -155,8 +148,6 @@ class Interface extends React.Component { placeOnGround(scene.mesh); this.calculateDimensions(); scene.render(); - - this.setState({ mesh, isLoading: false }); } componentWillUnmount() { @@ -167,8 +158,8 @@ class Interface extends React.Component { } resetMesh = () => { - const { scene: { mesh, render }, isSlicing, isLoading } = this.state; - if (isSlicing || isLoading) return; + const { scene: { mesh, render }, isSlicing } = this.state; + if (isSlicing) return; if (mesh) { mesh.position.set(0, 0, 0); mesh.scale.set(1, 1, 1); @@ -183,8 +174,8 @@ class Interface extends React.Component { scaleUp = () => this.scaleMesh(0.9); scaleDown = () => this.scaleMesh(1.0 / 0.9); scaleMesh = (factor) => { - const { scene: { mesh, render }, isSlicing, isLoading } = this.state; - if (isSlicing || isLoading) return; + const { scene: { mesh, render }, isSlicing } = this.state; + if (isSlicing) return; if (mesh) { mesh.scale.multiplyScalar(factor); mesh.updateMatrix(); @@ -198,8 +189,8 @@ class Interface extends React.Component { rotateY = () => this.rotate(new Vector3(1, 0, 0), Math.PI / 2.0); rotateZ = () => this.rotate(new Vector3(0, 1, 0), Math.PI / 2.0); rotate = (axis, angle) => { - const { scene: { mesh, render }, isSlicing, isLoading } = this.state; - if (isSlicing || isLoading) return; + const { scene: { mesh, render }, isSlicing } = this.state; + if (isSlicing) return; if (mesh) { mesh.rotateOnWorldAxis(axis, angle); placeOnGround(mesh); @@ -209,10 +200,14 @@ class Interface extends React.Component { }; slice = async (target) => { - const { isSlicing, isLoading, settings, mesh, scene: { material, mesh: { matrix } } } = this.state; + const { isSlicing, settings, mesh, scene: { material, mesh: { matrix } } } = this.state; const { name } = this.props; - if (isSlicing || isLoading) return; + if (isSlicing) return; + if (!mesh) { + this.setState({ error: 'there is no file to slice' }); + return; + } this.closePopover(); this.setState({ isSlicing: true, progress: { action: '', percentage: 0, step: 0 }, error: null }); @@ -294,15 +289,14 @@ class Interface extends React.Component { render() { const { classes, onCancel } = this.props; - const { isSlicing, isLoading, progress, showFullScreen, error, objectDimensions, openUrlDialog } = this.state; + const { isSlicing, progress, showFullScreen, error, objectDimensions, openUrlDialog } = this.state; - const disableUI = isSlicing || isLoading; const style = { ...(showFullScreen ? {} : { maxWidth: 'inherit', width: '100%', height: '100%' }) }; const settingsPanel = (
@@ -323,7 +317,7 @@ class Interface extends React.Component { primary className={`${classes.button}`} onTouchTap={this.openPopover} - disabled={disableUI} + disabled={isSlicing} />

Dimensions: {objectDimensions}

- - - - - - + + + + + +
); From b562d3c2e2530f23e943478d3474a58a6cb4aa01 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 17:42:58 +0100 Subject: [PATCH 040/163] allow for drag and dropping files --- src/interface/index.js | 61 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index 23ed9a5..73618cd 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -100,12 +100,14 @@ class Interface extends React.Component { pixelRatio: PropTypes.number.isRequired, onCancel: PropTypes.func, name: PropTypes.string.isRequired, - muiTheme: PropTypes.object.isRequired + muiTheme: PropTypes.object.isRequired, + allowDragDrop: PropTypes.bool.isRequired }; static defaultProps = { pixelRatio: 1, - name: 'Doodle3D' + name: 'Doodle3D', + allowDragDrop: true }; constructor(props) { @@ -133,16 +135,20 @@ class Interface extends React.Component { if (mesh) { this.updateMesh(mesh, scene); } else if (fileUrl) { - fetch(fileUrl) - .then(resonse => resonse.json()) - .then(json => JSONToSketchData(json)) - .then(file => createSceneData(file)) - .then(sketch => generateExportMesh(sketch, { offsetSingleWalls: false, matrix: new Matrix4() })) - .then(mesh => this.updateMesh(mesh, scene)); + this.loadFile(fileUrl); } } - updateMesh(mesh, scene) { + loadFile = (fileUrl) => { + fetch(fileUrl) + .then(resonse => resonse.json()) + .then(json => JSONToSketchData(json)) + .then(file => createSceneData(file)) + .then(sketch => generateExportMesh(sketch, { offsetSingleWalls: false, matrix: new Matrix4() })) + .then(mesh => this.updateMesh(mesh)); + }; + + updateMesh(mesh, scene = this.state.scene) { scene.mesh.geometry = mesh.geometry; centerGeometry(scene.mesh); placeOnGround(scene.mesh); @@ -287,6 +293,23 @@ class Interface extends React.Component { this.setState({ objectDimensions: `${Math.round(x)}x${Math.round(y)}x${Math.round(z)}mm` }); }; + onDrop = (event) => { + event.preventDefault(); + if (!this.props.allowDragDrop) return; + + for (const file of event.dataTransfer.files) { + const extentions = file.name.split('.').pop(); + + switch (extentions.toUpperCase()) { + case 'D3SKETCH': + this.loadFile(URL.createObjectURL(file)); + break; + default: + break; + } + } + } + render() { const { classes, onCancel } = this.props; const { isSlicing, progress, showFullScreen, error, objectDimensions, openUrlDialog } = this.state; @@ -382,7 +405,15 @@ class Interface extends React.Component { if (showFullScreen) { return ( -
+
{ + if (container) { + container.addEventListener('dragover', event => event.preventDefault()); + container.addEventListener('drop', this.onDrop); + } + }} + >

Doodle3D Slicer

{d3Panel} @@ -392,7 +423,15 @@ class Interface extends React.Component { ); } else { return ( -
+
{ + if (container) { + container.addEventListener('dragover', event => event.preventDefault()); + container.addEventListener('drop', this.onDrop); + } + }} + > Date: Wed, 17 Jan 2018 23:53:40 +0100 Subject: [PATCH 041/163] fix loading mesh --- src/interface/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/interface/index.js b/src/interface/index.js index 73618cd..0bd4969 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -120,6 +120,7 @@ class Interface extends React.Component { showFullScreen: false, isSlicing: false, error: null, + mesh: null, objectDimensions: '0x0x0mm', popover: { open: false, element: null }, openUrlDialog: { open: false, url: '' } @@ -154,6 +155,8 @@ class Interface extends React.Component { placeOnGround(scene.mesh); this.calculateDimensions(); scene.render(); + + this.setState({ mesh }); } componentWillUnmount() { From 0f7da8545348b9e861e5bd81858635156fe418ea Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 17 Jan 2018 23:53:49 +0100 Subject: [PATCH 042/163] Revert "Fix brim" This reverts commit eee2682f7064a64093c3025fdb3629291561e2e9. --- src/sliceActions/addBrim.js | 5 +++-- src/sliceActions/optimizePaths.js | 10 +++------- src/sliceActions/removePrecision.js | 4 +--- src/sliceActions/slicesToGCode.js | 4 +--- 4 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/sliceActions/addBrim.js b/src/sliceActions/addBrim.js index 6307e9b..f3e7627 100644 --- a/src/sliceActions/addBrim.js +++ b/src/sliceActions/addBrim.js @@ -27,9 +27,10 @@ export default function addBrim(slices, settings) { })) ), new Shape([], true)).simplify('pftNonZero'); - firstLayer.brim = []; + firstLayer.brim = new Shape([], true); + for (let offset = 0; offset < brimSize; offset += nozzleDiameter) { const brimPart = brim.offset(offset, offsetOptions); - firstLayer.brim.unshift(brimPart); + firstLayer.brim = firstLayer.brim.join(brimPart); } } diff --git a/src/sliceActions/optimizePaths.js b/src/sliceActions/optimizePaths.js index 7def91d..661e7e0 100644 --- a/src/sliceActions/optimizePaths.js +++ b/src/sliceActions/optimizePaths.js @@ -7,13 +7,9 @@ export default function optimizePaths(slices, settings) { for (let layer = 0; layer < slices.length; layer ++) { const slice = slices[layer]; - if (typeof slice.brim !== 'undefined') { - for (let i = 0; i < slice.brim.length; i ++) { - if (slice.brim[i].paths.length > 0) { - slice.brim[i] = optimizeShape(slice.brim[i], start); - start.copy(slice.brim[i].lastPoint(true)); - } - } + if (typeof slice.brim !== 'undefined' && slice.brim.paths.length > 0) { + slice.brim = optimizeShape(slice.brim, start); + start.copy(slice.brim.lastPoint(true)); } const parts = []; diff --git a/src/sliceActions/removePrecision.js b/src/sliceActions/removePrecision.js index a237a06..2ecd8df 100644 --- a/src/sliceActions/removePrecision.js +++ b/src/sliceActions/removePrecision.js @@ -25,9 +25,7 @@ export default function removePrecision(slices) { slice.support.scaleDown(inversePrecision); } if (typeof slice.brim !== 'undefined') { - for (let i = 0; i < slice.brim.length; i ++) { - slice.brim[i].scaleDown(inversePrecision); - } + slice.brim.scaleDown(inversePrecision); } } } diff --git a/src/sliceActions/slicesToGCode.js b/src/sliceActions/slicesToGCode.js index 049bab5..cbc38a2 100644 --- a/src/sliceActions/slicesToGCode.js +++ b/src/sliceActions/slicesToGCode.js @@ -48,9 +48,7 @@ export default function slicesToGCode(slices, settings) { }, {}); if (typeof slice.brim !== 'undefined') { - for (let i = 0; i < slice.brim.length; i ++) { - pathToGCode(null, false, gcode, slice.brim[i], false, false, z, profiles.brim); - } + pathToGCode(null, false, gcode, slice.brim, true, true, z, profiles.brim); } for (let i = 0; i < slice.parts.length; i ++) { From bbd8bc529d968ef647f1538c7753dd084a5c339c Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 11:14:21 +0100 Subject: [PATCH 043/163] clean up --- src/interface/FormComponents.js | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/interface/FormComponents.js b/src/interface/FormComponents.js index ef1e081..8cc4185 100644 --- a/src/interface/FormComponents.js +++ b/src/interface/FormComponents.js @@ -34,11 +34,16 @@ _SelectField.contextTypes = contextTypes; _SelectField.propTypes = propTypes; export const SelectField = muiThemeable()(_SelectField); -const _TextField = ({ name, muiTheme, ...props }, context) => ( +const _TextField = ({ name, muiTheme: { palette }, ...props }, context) => ( context.onChange(name, null)} />} - floatingLabelStyle={{ color: context.advancedFields.includes(name) ? muiTheme.palette.primary1Color : muiTheme.palette.primary3Color }} + icon={context.advancedFields.includes(name) && context.onChange(name, null)} + />} + floatingLabelStyle={{ + color: context.advancedFields.includes(name) ? palette.primary1Color : palette.primary3Color + }} disabled={context.disabled} value={_.get(context, name)} onChange={(event, value) => context.onChange(name, value)} @@ -48,12 +53,17 @@ _TextField.contextTypes = contextTypes; _TextField.propTypes = propTypes; export const TextField = muiThemeable()(_TextField); -const _NumberField = ({ name, min, max, muiTheme, ...props }, context) => ( +const _NumberField = ({ name, min, max, muiTheme: { palette }, ...props }, context) => ( context.onChange(name, null)} />} - floatingLabelStyle={{ color: context.advancedFields.includes(name) ? muiTheme.palette.primary1Color : muiTheme.palette.primary3Color }} + icon={context.advancedFields.includes(name) && context.onChange(name, null)} /> + } + floatingLabelStyle={{ + color: context.advancedFields.includes(name) ? palette.primary1Color : palette.primary3Color + }} disabled={context.disabled} value={_.get(context, name.toString())} onChange={(event, value) => { @@ -68,17 +78,21 @@ _NumberField.contextTypes = contextTypes; _NumberField.propTypes = propTypes; export const NumberField = muiThemeable()(_NumberField); -export const _Checkbox = ({ name, muiTheme, ...props }, context) => ( +export const _Checkbox = ({ name, muiTheme: { palette }, ...props }, context) => ( context.onChange(name, value)} /> - {context.advancedFields.includes(name) && context.onChange(name, null)} />} + {context.advancedFields.includes(name) && context.onChange(name, null)} + />} ); _Checkbox.contextTypes = contextTypes; From 46408e0668e4cea008c9f580d59218ef62c3f4aa Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 11:40:57 +0100 Subject: [PATCH 044/163] add analyse script --- package-lock.json | 2032 ++++++--------------------------------------- package.json | 4 +- webpack.config.js | 9 +- 3 files changed, 253 insertions(+), 1792 deletions(-) diff --git a/package-lock.json b/package-lock.json index 984bc97..795aae2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,11 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@doodle3d/cal": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@doodle3d/cal/-/cal-0.0.8.tgz", - "integrity": "sha512-1qXg62qaZkc/zYPan37CXvUtaJk4aFVLz2y8cqnkN9Y0r1Er5soIZ5esMz4YYyjUrQGawBoYcGvatRALYnzlvg==" - }, "@doodle3d/clipper-js": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@doodle3d/clipper-js/-/clipper-js-1.0.7.tgz", @@ -22,122 +17,10 @@ "resolved": "https://registry.npmjs.org/@doodle3d/clipper-lib/-/clipper-lib-6.4.2-b.tgz", "integrity": "sha512-glELSijsD9b+/0d9iOdasBwqH3s+xPxD59tJ7aXkBx7klugygGOMXn7PB05AdhVyA1OYMj7GUCegaQa7nvLtmQ==" }, - "@doodle3d/doodle3d-core": { - "version": "github:doodle3d/doodle3d-core#36a73c233e569fca79d2059a50edb6bdb511aa58", - "requires": { - "@doodle3d/cal": "0.0.8", - "@doodle3d/clipper-js": "1.0.7", - "@doodle3d/fill-path": "1.0.7", - "@doodle3d/potrace-js": "0.0.6", - "@doodle3d/threejs-export-obj": "0.0.8", - "@doodle3d/threejs-export-stl": "0.0.5", - "@doodle3d/touch-events": "0.0.7", - "babel-polyfill": "6.26.0", - "bezier-js": "2.2.5", - "blueimp-canvas-to-blob": "3.14.0", - "bowser": "1.8.1", - "fit-curve": "0.1.6", - "google-fonts-webpack-plugin": "0.4.4", - "imports-loader": "0.7.1", - "jss": "9.5.1", - "keycode": "2.1.9", - "lodash": "4.17.4", - "memoizee": "0.3.10", - "normalize-wheel": "1.0.1", - "pouchdb": "6.4.1", - "proptypes": "1.1.0", - "raf": "3.4.0", - "ramda": "0.21.0", - "react": "16.1.0", - "react-addons-update": "15.6.2", - "react-jss": "7.2.0", - "react-notification-system-redux": "1.2.0", - "react-redux": "5.0.6", - "react-resize-detector": "1.1.0", - "react-svg-inline": "2.0.1", - "redux-form": "7.2.0", - "redux-undo": "1.0.0-beta9-9-7", - "reselect": "3.0.1", - "semver": "5.4.1", - "shortid": "2.2.8", - "three": "0.88.0", - "three-js-csg": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045", - "valid-url": "1.0.9" - }, - "dependencies": { - "jss": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/jss/-/jss-9.5.1.tgz", - "integrity": "sha512-py//ogG1xeztpEDmosJtrkfUXibx3qiAr+1GQvfLHp7azpqkzTPLCnainDgH7Zn0q6S7rcM1eINrVT9n/r5f2w==", - "requires": { - "is-in-browser": "1.1.3", - "symbol-observable": "1.1.0", - "warning": "3.0.0" - } - }, - "symbol-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz", - "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==" - }, - "three-js-csg": { - "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" - } - } - }, - "@doodle3d/fill-path": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@doodle3d/fill-path/-/fill-path-1.0.7.tgz", - "integrity": "sha512-4sdgWQ28JgRsmnyy1OnuKHE+DZ8kDGpluGqFmMASh2/6dlyjp2/oXnNEgNefG4/xiEitV8AtzEij9Bijh6yNRw==", - "requires": { - "@doodle3d/clipper-js": "1.0.7" - } - }, - "@doodle3d/potrace-js": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@doodle3d/potrace-js/-/potrace-js-0.0.6.tgz", - "integrity": "sha512-w1+sG3ClsSaQwo3ks5wl6QLe4aWEHBe8QePq0IeAcj+lypqo770sUcWVfEZWUFBumAhSlCJg3GRc8MsycHy8LA==" - }, - "@doodle3d/threejs-export-obj": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@doodle3d/threejs-export-obj/-/threejs-export-obj-0.0.8.tgz", - "integrity": "sha512-HVnJCvrjj3FqHJ5+CLVT1oZ0OjS2eOvrpMKjo71Jg7bdrusluIRlF7w9JdaoZs3ScWASAucu2cvTKJ+OAm3Rhw==", - "requires": { - "jszip": "3.1.5", - "three": "0.88.0" - } - }, - "@doodle3d/threejs-export-stl": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@doodle3d/threejs-export-stl/-/threejs-export-stl-0.0.5.tgz", - "integrity": "sha512-GeApmYL657Dug8/+WOHGGijJbQ52dN2AWkhz9FsCe9sehZRhCg0fOg4LKXNS0XGKWMQbyumlbrmCWZrK73sfJA==", - "requires": { - "babel-preset-env": "1.6.1", - "three": "0.88.0" - } - }, - "@doodle3d/touch-events": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@doodle3d/touch-events/-/touch-events-0.0.7.tgz", - "integrity": "sha512-EpL8IEGKKy2gqFFlxA4n84IeAyPTrEzle0jwmRv+mmVBzwGr6xDl5Ga5vJIrg2WcYs4Xc7qWbiKSHEXvEpDLlg==", - "requires": { - "eventdispatcher.js": "0.0.2", - "pepjs": "0.4.3" - } - }, - "abstract-leveldown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz", - "integrity": "sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==", - "requires": { - "xtend": "4.0.1" - } - }, "accepts": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, "requires": { "mime-types": "2.1.17", "negotiator": "0.6.1" @@ -146,8 +29,7 @@ "acorn": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==" }, "acorn-dynamic-import": { "version": "2.0.2", @@ -221,20 +103,6 @@ "micromatch": "2.3.11" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "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=", - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" - } - }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -244,11 +112,6 @@ "sprintf-js": "1.0.3" } }, - "argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" - }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -318,11 +181,6 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, "asn1.js": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", @@ -343,11 +201,6 @@ "util": "0.10.3" } }, - "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=" - }, "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", @@ -363,25 +216,10 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "attempt-x": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/attempt-x/-/attempt-x-1.1.1.tgz", - "integrity": "sha512-hIp37ojJRRW8ExWSxxLpkDHUufk/DFfsb7/cUC1cVbBg7JV4gJTkCTRa44dlL9e5jx1P3VNrjL7QOQfi4MyltA==" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, "babel-cli": { "version": "6.24.1", @@ -474,6 +312,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, "requires": { "babel-helper-explode-assignable-expression": "6.24.1", "babel-runtime": "6.26.0", @@ -525,6 +364,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, "requires": { "babel-helper-hoist-variables": "6.24.1", "babel-runtime": "6.26.0", @@ -536,6 +376,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -547,6 +388,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -556,6 +398,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -566,7 +409,8 @@ "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true } } }, @@ -574,6 +418,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.25.0", @@ -617,6 +462,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -626,6 +472,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -635,6 +482,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", @@ -645,6 +493,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -654,6 +503,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -664,7 +514,8 @@ "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true } } }, @@ -672,6 +523,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -684,6 +536,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, "requires": { "babel-helper-optimise-call-expression": "6.24.1", "babel-messages": "6.23.0", @@ -726,6 +579,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -733,7 +587,8 @@ "babel-plugin-syntax-async-functions": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", @@ -773,7 +628,8 @@ "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true }, "babel-plugin-syntax-export-extensions": { "version": "6.13.0", @@ -808,7 +664,8 @@ "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true }, "babel-plugin-transform-async-generator-functions": { "version": "6.24.1", @@ -825,6 +682,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, "requires": { "babel-helper-remap-async-to-generator": "6.24.1", "babel-plugin-syntax-async-functions": "6.13.0", @@ -880,6 +738,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -888,6 +747,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -896,6 +756,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-template": "6.26.0", @@ -908,6 +769,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", @@ -918,6 +780,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -927,6 +790,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", @@ -939,6 +803,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, "requires": { "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", @@ -955,6 +820,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -965,12 +831,14 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true }, "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true } } }, @@ -978,6 +846,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, "requires": { "babel-helper-define-map": "6.26.0", "babel-helper-function-name": "6.24.1", @@ -994,6 +863,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-template": "6.25.0" @@ -1003,6 +873,7 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1011,6 +882,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -1020,6 +892,7 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1028,6 +901,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -1038,6 +912,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1046,6 +921,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, "requires": { "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", "babel-runtime": "6.26.0", @@ -1056,6 +932,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, "requires": { "babel-plugin-transform-strict-mode": "6.24.1", "babel-runtime": "6.26.0", @@ -1067,6 +944,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", @@ -1077,6 +955,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -1086,6 +965,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", @@ -1098,6 +978,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, "requires": { "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", @@ -1114,6 +995,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -1124,12 +1006,14 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true }, "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true } } }, @@ -1137,6 +1021,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, "requires": { "babel-helper-hoist-variables": "6.24.1", "babel-runtime": "6.26.0", @@ -1147,6 +1032,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, "requires": { "babel-plugin-transform-es2015-modules-amd": "6.24.1", "babel-runtime": "6.26.0", @@ -1157,6 +1043,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, "requires": { "babel-helper-replace-supers": "6.24.1", "babel-runtime": "6.26.0" @@ -1166,6 +1053,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, "requires": { "babel-helper-call-delegate": "6.24.1", "babel-helper-get-function-arity": "6.24.1", @@ -1179,6 +1067,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -1188,6 +1077,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1196,6 +1086,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, "requires": { "babel-helper-regex": "6.26.0", "babel-runtime": "6.26.0", @@ -1206,6 +1097,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1214,6 +1106,7 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1222,6 +1115,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, "requires": { "babel-helper-regex": "6.26.0", "babel-runtime": "6.26.0", @@ -1232,6 +1126,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, "requires": { "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", "babel-plugin-syntax-exponentiation-operator": "6.13.0", @@ -1340,6 +1235,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, "requires": { "regenerator-transform": "0.10.1" } @@ -1357,6 +1253,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -1366,6 +1263,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "core-js": "2.5.3", @@ -1376,6 +1274,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, "requires": { "core-js": "2.5.3", "regenerator-runtime": "0.11.1" @@ -1384,14 +1283,16 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true } } }, "core-js": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "dev": true } } }, @@ -1399,6 +1300,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true, "requires": { "babel-plugin-check-es2015-constants": "6.22.0", "babel-plugin-syntax-trailing-function-commas": "6.22.0", @@ -1627,24 +1529,11 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "bezier-js": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.2.5.tgz", - "integrity": "sha512-HGh+GevPguxrAmnWF2/A+8c8FEatnKcE6WttpYWA5fn1CfpJz4reFbr11DuyFs2gwaIo9vF7aVXW2xg1iaqvyg==" - }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true }, "binary-extensions": { "version": "1.8.0", @@ -1652,30 +1541,12 @@ "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", "dev": true }, - "bindings": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" - }, - "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "requires": { - "readable-stream": "2.3.3" - } - }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "dev": true }, - "blueimp-canvas-to-blob": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.14.0.tgz", - "integrity": "sha512-i6I2CiX1VR8YwUNYBo+dM8tg89ns4TTHxSpWjaDeHKcYS3yFalpLCwDaY21/EsJMufLy2tnG4j0JN5L8OVNkKQ==" - }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -1686,7 +1557,6 @@ "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, "requires": { "bytes": "3.0.0", "content-type": "1.0.4", @@ -1704,7 +1574,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -1731,14 +1600,6 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, "bowser": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.8.1.tgz", @@ -1850,6 +1711,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.8.0.tgz", "integrity": "sha512-iiWHM1Et6Q4TQpB7Ar6pxuM3TNMXasVJY4Y/oh3q38EwR3Z+IdZ9MyVf7PI4MJFB4xpwMcZgs9bEUnPG2E3TCA==", + "dev": true, "requires": { "caniuse-lite": "1.0.30000760", "electron-to-chromium": "1.3.27" @@ -1866,19 +1728,6 @@ "isarray": "1.0.0" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-from": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz", - "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=", - "requires": { - "is-array-buffer-x": "1.7.0" - } - }, "buffer-indexof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", @@ -1906,13 +1755,7 @@ "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cached-constructors-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.0.tgz", - "integrity": "sha512-JVP0oilYlPgBTD8bkQ+of7hSIJRtydCCJiMtzdRMXVQ98gdj0NyrJTZzbu5wtlO26Ev/1HXRTtbBNsVlLJ3+3A==" + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "camel-case": { "version": "3.0.0", @@ -1951,12 +1794,8 @@ "caniuse-lite": { "version": "1.0.30000760", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz", - "integrity": "sha1-7HIDlXQvHH7IlH/W3SYE53qPmP8=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-7HIDlXQvHH7IlH/W3SYE53qPmP8=", + "dev": true }, "center-align": { "version": "0.1.3", @@ -2007,11 +1846,6 @@ "readdirp": "2.1.0" } }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" - }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -2022,11 +1856,6 @@ "safe-buffer": "5.1.1" } }, - "classnames": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" - }, "clean-css": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", @@ -2047,34 +1876,22 @@ "wordwrap": "0.0.2" } }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "requires": { - "delayed-stream": "1.0.0" - } + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" }, "commondir": { "version": "1.0.1", @@ -2138,11 +1955,6 @@ "date-now": "0.1.4" } }, - "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=" - }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -2152,14 +1964,12 @@ "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "convert-source-map": { "version": "1.5.0", @@ -2170,14 +1980,12 @@ "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-js": { "version": "2.4.1", @@ -2187,7 +1995,8 @@ "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=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "create-ecdh": { "version": "4.0.0", @@ -2246,14 +2055,6 @@ "which": "1.3.0" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -2320,25 +2121,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, "requires": { "es5-ext": "0.10.35" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "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=" - } - } - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2367,20 +2154,8 @@ "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" - }, - "deferred-leveldown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-2.0.3.tgz", - "integrity": "sha512-8c2Hv+vIwKNc7qqy4zE3t5DIsln+FQnudcyjLYstHwLFg7XnXZT/H8gQb8lj6xi8xqGM0Bz633ZWcCkonycBTA==", - "requires": { - "abstract-leveldown": "3.0.0" - } + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true }, "define-properties": { "version": "1.1.2", @@ -2414,21 +2189,10 @@ } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, "depd": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" }, "des.js": { "version": "1.0.0", @@ -2443,8 +2207,7 @@ "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detect-indent": { "version": "4.0.0", @@ -2568,30 +2331,26 @@ "domelementtype": "1.3.0" } }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" - }, - "ecc-jsbn": { + "duplexer": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" }, "electron-to-chromium": { "version": "1.3.27", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", - "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=" + "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", + "dev": true }, "elliptic": { "version": "6.4.0", @@ -2611,13 +2370,13 @@ "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true }, "encodeurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" }, "encoding": { "version": "0.1.12", @@ -2627,39 +2386,6 @@ "iconv-lite": "0.4.19" } }, - "encoding-down": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-3.0.1.tgz", - "integrity": "sha512-uvx+39YNqiPLqhXAvOSGBVy/oYBh4p2ShwG9YFCipwgfOhnVIOxuOPE3R9dEGM44bn0VHIrC3ojXq6lNf2ulwg==", - "requires": { - "abstract-leveldown": "3.0.0", - "level-codec": "8.0.0", - "level-errors": "1.1.2" - }, - "dependencies": { - "level-codec": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-8.0.0.tgz", - "integrity": "sha512-gNZlo1HRHz0BWxzGCyNf7xntAs2HKOPvvRBWtXsoDvEX4vMYnSTBS6ZnxoaiX7nhxSBPpegRa8CQ/hnfGBKk3Q==" - } - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "1.4.0" - } - }, - "end-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", - "integrity": "sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=", - "requires": { - "write-stream": "0.4.3" - } - }, "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", @@ -2682,6 +2408,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, "requires": { "prr": "0.0.0" } @@ -2723,20 +2450,17 @@ "version": "0.10.35", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", + "dev": true, "requires": { "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" - }, "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35", @@ -2757,11 +2481,6 @@ "event-emitter": "0.3.5" } }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" - }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -2779,6 +2498,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35" @@ -2799,8 +2519,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { "version": "1.0.5", @@ -2849,23 +2568,18 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35" } }, - "eventdispatcher.js": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/eventdispatcher.js/-/eventdispatcher.js-0.0.2.tgz", - "integrity": "sha1-wntZzkEEa2iUEu3M/UzYr8ZM2DU=" - }, "eventemitter3": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", @@ -2930,16 +2644,10 @@ "fill-range": "2.2.3" } }, - "expand-template": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz", - "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==" - }, "express": { "version": "4.16.2", "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", - "dev": true, "requires": { "accepts": "1.3.4", "array-flatten": "1.1.1", @@ -2976,25 +2684,18 @@ "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } } } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -3004,22 +2705,12 @@ "is-extglob": "1.0.0" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, "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=", "dev": true }, - "fast-future": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz", - "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=" - }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -3056,14 +2747,6 @@ } } }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "requires": { - "pend": "1.2.0" - } - }, "file-saver": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", @@ -3075,6 +2758,11 @@ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, + "filesize": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", + "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==" + }, "fill-range": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", @@ -3092,7 +2780,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "1.0.1", @@ -3107,7 +2794,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -3135,11 +2821,6 @@ "pinkie-promise": "2.0.1" } }, - "fit-curve": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/fit-curve/-/fit-curve-0.1.6.tgz", - "integrity": "sha1-w72+b1oqO+j4Aerr2kBpGRJWqVs=" - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3161,32 +2842,15 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs-readdir-recursive": { "version": "1.0.0", @@ -4105,33 +3769,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "1.2.0", - "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" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -4150,26 +3787,6 @@ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "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=" - } - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -4221,70 +3838,26 @@ "pinkie-promise": "2.0.1" } }, - "google-fonts-webpack-plugin": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/google-fonts-webpack-plugin/-/google-fonts-webpack-plugin-0.4.4.tgz", - "integrity": "sha512-+e2D9/DVBG9EDydRovzoqMZ658SsTBGbC0c65GyZqkwNvdj8vRSYQKXqbz7/yt7QaXsCPT1MpH45r3ivWOitcw==", - "requires": { - "lodash": "4.17.4", - "node-fetch": "1.7.3", - "webpack-sources": "0.2.3", - "yauzl": "2.9.1" - }, - "dependencies": { - "source-list-map": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz", - "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=" - }, - "webpack-sources": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz", - "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=", - "requires": { - "source-list-map": "1.1.2", - "source-map": "0.5.6" - } - } - } - }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "requires": { + "duplexer": "0.1.1" + } + }, "handle-thing": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", "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=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } - } - }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", @@ -4308,34 +3881,6 @@ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, - "has-own-property-x": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/has-own-property-x/-/has-own-property-x-3.2.0.tgz", - "integrity": "sha512-HtRQTYpRFz/YVaQ7jh2mU5iorMAxFcML9FNOLMI1f8VNJ2K0hpOlXoi1a+nmVl6oUcGnhd6zYOFAVe7NUFStyQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" - } - }, - "has-symbol-support-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", - "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "1.4.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, "hash-base": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", @@ -4355,17 +3900,6 @@ "minimalistic-assert": "1.0.0" } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -4383,11 +3917,6 @@ "minimalistic-crypto-utils": "1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, "hoist-non-react-statics": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", @@ -4534,7 +4063,6 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, "requires": { "depd": "1.1.1", "inherits": "2.0.3", @@ -4545,8 +4073,7 @@ "setprototypeof": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" } } }, @@ -4595,16 +4122,6 @@ } } }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -4627,11 +4144,6 @@ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, "import-local": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz", @@ -4666,6 +4178,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.7.1.tgz", "integrity": "sha1-8gS180cCoywdt9SNidXoZ6BEElM=", + "dev": true, "requires": { "loader-utils": "1.1.0", "source-map": "0.5.6" @@ -4686,11 +4199,6 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, - "infinity-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.0.tgz", - "integrity": "sha512-wjy2TupBtZ+aAniKt+xs/PO0xOkuaL6wBysUKbgD7aL1PMW/qY5xXDG59zXZ7dU+gk3zwXOu4yIEWPCEFBTgHQ==" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4706,11 +4214,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, "inline-style-prefixer": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz", @@ -4758,20 +4261,7 @@ "ipaddr.js": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", - "dev": true - }, - "is-array-buffer-x": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/is-array-buffer-x/-/is-array-buffer-x-1.7.0.tgz", - "integrity": "sha512-ufSZRMY2WZX5xyNvk0NOZAG7cgi35B/sGQDGqv8w0X7MoQ2GC9vedanJhuYTPaC4PUCqLQsda1w7NF+dPZmAJw==", - "requires": { - "attempt-x": "1.1.1", - "has-to-string-tag-x": "1.4.1", - "is-object-like-x": "1.6.0", - "object-get-own-property-descriptor-x": "3.2.0", - "to-string-tag-x": "1.4.2" - } + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" }, "is-arrayish": { "version": "0.2.1", @@ -4812,7 +4302,8 @@ "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, "is-dotfile": { "version": "1.0.3", @@ -4841,14 +4332,6 @@ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "is-falsey-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-falsey-x/-/is-falsey-x-1.0.1.tgz", - "integrity": "sha512-XWNZC4A+3FX1ECoMjspuEFgSdio82IWjqY/suE0gZ10QA7nzHd/KraRq7Tc5VEHtFRgTRyTdY6W+ykPrDnyoAQ==", - "requires": { - "to-boolean-x": "1.0.1" - } - }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", @@ -4858,19 +4341,11 @@ "number-is-nan": "1.0.1" } }, - "is-finite-x": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-finite-x/-/is-finite-x-3.0.2.tgz", - "integrity": "sha512-HyFrxJZsgmP5RtR1PVlVvHSP4VslZOqr4uoq4x3rDrSOFaYp4R9tfmiWtAzQxPzixXhac3cYEno3NuVn0OHk2Q==", - "requires": { - "infinity-x": "1.0.0", - "is-nan-x": "1.0.1" - } - }, "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=", + "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -4880,21 +4355,6 @@ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" }, - "is-function-x": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is-function-x/-/is-function-x-3.3.0.tgz", - "integrity": "sha512-SreSSU1dlgYaXR5c0mm4qJHKYHIiGiEY+7Cd8/aRLLoMP/VvofD2XcWgBnP833ajpU5XzXbUSpfysnfKZLJFlg==", - "requires": { - "attempt-x": "1.1.1", - "has-to-string-tag-x": "1.4.1", - "is-falsey-x": "1.0.1", - "is-primitive": "2.0.0", - "normalize-space-x": "3.0.0", - "replace-comments-x": "2.0.0", - "to-boolean-x": "1.0.1", - "to-string-tag-x": "1.4.2" - } - }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -4909,32 +4369,6 @@ "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" }, - "is-index-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-index-x/-/is-index-x-1.1.0.tgz", - "integrity": "sha512-qULKLMepQLGC8rSVdi8uF2vI4LiDrU9XSDg1D+Aa657GIB7GV1jHpga7uXgQvkt/cpQ5mVBHUFTpSehYSqT6+A==", - "requires": { - "math-clamp-x": "1.2.0", - "max-safe-integer": "1.0.1", - "to-integer-x": "3.0.0", - "to-number-x": "2.0.0", - "to-string-symbols-supported-x": "1.0.0" - } - }, - "is-nan-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-nan-x/-/is-nan-x-1.0.1.tgz", - "integrity": "sha512-VfNJgfuT8USqKCYQss8g7sFvCzDnL+OOVMQoXhVoulZAyp0ZTj3oyZaaPrn2dxepAkKSQI2BiKHbBabX1DqVtw==" - }, - "is-nil-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/is-nil-x/-/is-nil-x-1.4.1.tgz", - "integrity": "sha512-cfTKWI5iSR04SSCzzugTH5tS2rYG7kwI8yl/AqWkyuxZ7k55cbA47Y7Lezdg1N9aaELd+UxLg628bdQeNQ6BUw==", - "requires": { - "lodash.isnull": "3.0.0", - "validate.io-undefined": "1.0.3" - } - }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -4944,15 +4378,6 @@ "kind-of": "3.2.2" } }, - "is-object-like-x": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.6.0.tgz", - "integrity": "sha512-mc3dBMv1jEOdk0f1i2RkJFsZDux0MuHqGwHOoRo770ShUOf4VE6tWThAW8dAZARr9a5RN+iNX1yzMDA5ad1clQ==", - "requires": { - "is-function-x": "3.3.0", - "is-primitive": "2.0.0" - } - }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -5001,12 +4426,8 @@ "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true }, "is-regex": { "version": "1.0.4", @@ -5022,20 +4443,11 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=" - }, "is-symbol": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true }, "is-utf8": { "version": "0.2.1", @@ -5052,7 +4464,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -5078,11 +4491,6 @@ "whatwg-fetch": "2.0.3" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -5098,12 +4506,6 @@ "esprima": "4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", @@ -5116,30 +4518,12 @@ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "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=" - }, "json3": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", @@ -5149,30 +4533,8 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true }, "jss": { "version": "8.1.0", @@ -5256,43 +4618,6 @@ "css-vendor": "0.3.8" } }, - "jszip": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", - "requires": { - "core-js": "2.3.0", - "es6-promise": "3.0.2", - "lie": "3.1.1", - "pako": "1.0.6", - "readable-stream": "2.0.6" - }, - "dependencies": { - "core-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=" - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, "keycode": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz", @@ -5328,93 +4653,6 @@ "invert-kv": "1.0.0" } }, - "level": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/level/-/level-2.1.1.tgz", - "integrity": "sha512-jhsItEs/L5bf5ctKsvIPcMzeh4nwXxnL3Tsxm4E9My07jcFfqEYwKP57Y9AZu7tmtECdyK6bvCqoClwuOBuY9w==", - "requires": { - "level-packager": "2.1.0", - "leveldown": "2.1.1" - } - }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" - }, - "level-errors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz", - "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==", - "requires": { - "errno": "0.1.4" - } - }, - "level-iterator-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-2.0.0.tgz", - "integrity": "sha512-TWOYw8HR5mhj6xwoVLo0yu26RPL6v28KgvhK1kY1CJf9LyL+rJXjx99zhORTYhN9ysOBIH+iaxAiqRteA+C1/g==", - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "level-packager": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-2.1.0.tgz", - "integrity": "sha512-I97zvGOZ6fJ9OFfYv+QmgBpDWbC+UaP5ERJ3oraTyk1v+ABAL4tazris5ym5qL2iLe+qNjXNM/iP8LQcoZMEWw==", - "requires": { - "encoding-down": "3.0.1", - "levelup": "2.0.1" - } - }, - "level-write-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", - "integrity": "sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=", - "requires": { - "end-stream": "0.1.0" - } - }, - "leveldown": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-2.1.1.tgz", - "integrity": "sha512-JNMCTSchq1YtQLMGePmT07UE7hIIYR4GHpZI7+nUXbM9XgNtRAwcBGhnyJyITwpTILTkUcNPBKZ9lZmTUj2E3g==", - "requires": { - "abstract-leveldown": "3.0.0", - "bindings": "1.3.0", - "fast-future": "1.0.2", - "nan": "2.8.0", - "prebuild-install": "2.4.1" - }, - "dependencies": { - "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=" - } - } - }, - "levelup": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-2.0.1.tgz", - "integrity": "sha1-PckbPmMtN8nlRiOchkEYsATJ+GA=", - "requires": { - "deferred-leveldown": "2.0.3", - "level-errors": "1.1.2", - "level-iterator-stream": "2.0.0", - "xtend": "4.0.1" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "requires": { - "immediate": "3.0.6" - } - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -5437,6 +4675,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, "requires": { "big.js": "3.2.0", "emojis-list": "2.1.0", @@ -5466,16 +4705,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, - "lodash-es": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz", - "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=" - }, - "lodash.isnull": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnull/-/lodash.isnull-3.0.0.tgz", - "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4=" - }, "lodash.merge": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", @@ -5532,19 +4761,6 @@ "yallist": "2.1.2" } }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "requires": { - "es5-ext": "0.10.35" - } - }, - "ltgt": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.0.tgz", - "integrity": "sha1-tlul/LNJopkkyOMz98alVi8uSEI=" - }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -5612,28 +4828,6 @@ } } }, - "math-clamp-x": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/math-clamp-x/-/math-clamp-x-1.2.0.tgz", - "integrity": "sha512-tqpjpBcIf9UulApz3EjWXqTZpMlr2vLN9PryC9ghoyCuRmqZaf3JJhPddzgQpJnKLi2QhoFnvKBFtJekAIBSYg==", - "requires": { - "to-number-x": "2.0.0" - } - }, - "math-sign-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/math-sign-x/-/math-sign-x-3.0.0.tgz", - "integrity": "sha512-OzPas41Pn4d16KHnaXmGxxY3/l3zK4OIXtmIwdhgZsxz4FDDcNnbrABYPg2vGfxIkaT9ezGnzDviRH7RfF44jQ==", - "requires": { - "is-nan-x": "1.0.1", - "to-number-x": "2.0.0" - } - }, - "max-safe-integer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz", - "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA=" - }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -5659,8 +4853,7 @@ "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { "version": "1.1.0", @@ -5671,60 +4864,6 @@ "mimic-fn": "1.1.0" } }, - "memoizee": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", - "integrity": "sha1-TsoNiu057J0Bf0xcLy9kMvQuXI8=", - "requires": { - "d": "0.1.1", - "es5-ext": "0.10.35", - "es6-weak-map": "0.1.4", - "event-emitter": "0.3.5", - "lru-queue": "0.1.0", - "next-tick": "0.2.2", - "timers-ext": "0.1.2" - }, - "dependencies": { - "d": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", - "requires": { - "es5-ext": "0.10.35" - } - }, - "es6-iterator": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", - "integrity": "sha1-1vWLjE/EE8JJtLqhl2j45NfIlE4=", - "requires": { - "d": "0.1.1", - "es5-ext": "0.10.35", - "es6-symbol": "2.0.1" - } - }, - "es6-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", - "integrity": "sha1-dhtcZ8/U8dGK+yNPaR1nhoLLO/M=", - "requires": { - "d": "0.1.1", - "es5-ext": "0.10.35" - } - }, - "es6-weak-map": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", - "integrity": "sha1-cGzvnpmqI2undmwjnIueKG6n0ig=", - "requires": { - "d": "0.1.1", - "es5-ext": "0.10.35", - "es6-iterator": "0.1.3", - "es6-symbol": "2.0.1" - } - } - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -5818,14 +4957,12 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { "version": "2.3.11", @@ -5945,11 +5082,6 @@ "dev": true, "optional": true }, - "nan-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nan-x/-/nan-x-1.0.0.tgz", - "integrity": "sha512-yw4Fhe2/UTzanQ4f0yHWkRnfTuHZFAi4GZDjXS4G+qv5BqXTqPJBbSxpa7MyyW9v4Y4ZySZQik1vcbNkhdnIOg==" - }, "ncname": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", @@ -5962,13 +5094,7 @@ "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "next-tick": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", - "integrity": "sha1-ddpKkn7liH45BliABltzNkE7MQ0=" + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "no-case": { "version": "2.3.2", @@ -5979,14 +5105,6 @@ "lower-case": "1.1.4" } }, - "node-abi": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.1.2.tgz", - "integrity": "sha512-hmUtb8m75RSi7N+zZLYqe75XDvZB+6LyTBPkj2DConvNgQet2e3BIqEwe1LLvqMrfyjabuT5ZOrTioLCH1HTdA==", - "requires": { - "semver": "5.4.1" - } - }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -6033,11 +5151,6 @@ "vm-browserify": "0.0.4" } }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, "normalize-jss": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/normalize-jss/-/normalize-jss-4.0.0.tgz", @@ -6065,21 +5178,6 @@ "remove-trailing-separator": "1.0.2" } }, - "normalize-space-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-space-x/-/normalize-space-x-3.0.0.tgz", - "integrity": "sha512-tbCJerqZCCHPst4rRKgsTanLf45fjOyeAU5zE3mhDxJtFJKt66q39g2XArWhXelgTFVib8mNBUm6Wrd0LxYcfQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "trim-x": "3.0.0", - "white-space-x": "3.0.0" - } - }, - "normalize-wheel": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", - "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -6089,17 +5187,6 @@ "path-key": "2.0.1" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, "nth-check": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", @@ -6112,35 +5199,14 @@ "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=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-get-own-property-descriptor-x": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz", - "integrity": "sha512-Z/0fIrptD9YuzN+SNK/1kxAEaBcPQM4gSrtOSMSi9eplnL/AbyQcAyAlreAoAzmBon+DQ1Z+AdhxyQSvav5Fyg==", - "requires": { - "attempt-x": "1.1.1", - "has-own-property-x": "3.2.0", - "has-symbol-support-x": "1.4.1", - "is-falsey-x": "1.0.1", - "is-index-x": "1.1.0", - "is-primitive": "2.0.0", - "is-string": "1.0.4", - "property-is-enumerable-x": "1.1.0", - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" - } - }, "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", @@ -6167,7 +5233,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, "requires": { "ee-first": "1.1.1" } @@ -6182,10 +5247,16 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1.0.2" } }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=" + }, "opn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", @@ -6225,7 +5296,8 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true }, "os-locale": { "version": "2.1.0", @@ -6285,7 +5357,8 @@ "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true }, "param-case": { "version": "2.1.1", @@ -6321,17 +5394,6 @@ "is-glob": "2.0.1" } }, - "parse-int-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-int-x/-/parse-int-x-2.0.0.tgz", - "integrity": "sha512-NIMm52gmd1+0qxJK8lV3OZ4zzWpRH1xcz9xCHXl+DNzddwUdS4NEtd7BmTeK7iCIXoaK5e6BoDMHgieH2eNIhg==", - "requires": { - "cached-constructors-x": "1.0.0", - "nan-x": "1.0.0", - "to-string-x": "1.4.2", - "trim-left-x": "3.0.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -6344,8 +5406,7 @@ "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, "path-browserify": { "version": "0.0.0", @@ -6383,8 +5444,7 @@ "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { "version": "2.0.0", @@ -6408,21 +5468,6 @@ "sha.js": "2.4.9" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "pepjs": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/pepjs/-/pepjs-0.4.3.tgz", - "integrity": "sha1-FggOlwqud5kTdWwtrviOqnSG30E=" - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -6472,97 +5517,6 @@ } } }, - "pouchdb": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-6.4.1.tgz", - "integrity": "sha512-7YrhsBXbQh/iPA8O5Nzixi9QigaQJjqbbCFr+D7Kc258oeXNW9a0t/tOME1Lh84TJiFRuN9982FGVnrBrUhLiA==", - "requires": { - "argsarray": "0.0.1", - "buffer-from": "0.1.1", - "clone-buffer": "1.0.0", - "debug": "3.0.1", - "double-ended-queue": "2.1.0-0", - "immediate": "3.0.6", - "inherits": "2.0.3", - "level": "2.1.1", - "level-codec": "7.0.1", - "level-write-stream": "1.0.0", - "leveldown": "2.1.1", - "levelup": "2.0.1", - "lie": "3.1.1", - "ltgt": "2.2.0", - "readable-stream": "1.0.33", - "request": "2.80.0", - "spark-md5": "3.0.0", - "through2": "2.0.3", - "uuid": "3.2.0", - "vuvuzela": "1.0.3" - }, - "dependencies": { - "debug": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz", - "integrity": "sha512-6nVc6S36qbt/mutyt+UGMnawAMrPDZUPQjRZI3FS9tCtDRhvxJbK79unYBLPi+z5SLXQ3ftoVBFCblQtNSls8w==", - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", - "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "uuid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.0.tgz", - "integrity": "sha512-qC0vMFX6q6ee8JaoTF2Om1uL8KAV1ATUjVaHRxLiPJkIsp8JZl6ZjG0MIB+twZFLbi1vXj30rqj4zlqYiOS9xg==" - } - } - }, - "prebuild-install": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.4.1.tgz", - "integrity": "sha512-99TyEFYTTkBWANT+mwSptmLb9ZCLQ6qKIUE36fXSIOtShB0JNprL2hzBD8F1yIuT9btjFrFEwbRHXhqDi1HmRA==", - "requires": { - "expand-template": "1.1.0", - "github-from-package": "0.0.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "node-abi": "2.1.2", - "noop-logger": "0.1.1", - "npmlog": "4.1.2", - "os-homedir": "1.0.2", - "pump": "1.0.3", - "rc": "1.2.3", - "simple-get": "1.4.3", - "tar-fs": "1.16.0", - "tunnel-agent": "0.6.0", - "xtend": "4.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", @@ -6582,7 +5536,8 @@ "private": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=" + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "dev": true }, "process": { "version": "0.11.10", @@ -6593,7 +5548,8 @@ "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=" + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true }, "promise": { "version": "7.3.1", @@ -6613,15 +5569,6 @@ "object-assign": "4.1.1" } }, - "property-is-enumerable-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz", - "integrity": "sha512-22cKy3w3OpRswU6to9iKWDDlg+F9vF2REcwGlGW23jyLjHb1U/jJEWA44sWupOnkhGfDgotU6Lw+N2oyhNi+5A==", - "requires": { - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" - } - }, "proptypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proptypes/-/proptypes-1.1.0.tgz", @@ -6631,7 +5578,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", - "dev": true, "requires": { "forwarded": "0.1.2", "ipaddr.js": "1.5.2" @@ -6640,7 +5586,8 @@ "prr": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true }, "pseudomap": { "version": "1.0.2", @@ -6661,25 +5608,16 @@ "randombytes": "2.0.5" } }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true }, "qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "query-string": { "version": "5.0.1", @@ -6709,26 +5647,6 @@ "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", "dev": true }, - "raf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", - "requires": { - "performance-now": "2.1.0" - }, - "dependencies": { - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - } - } - }, - "ramda": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz", - "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=" - }, "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", @@ -6792,14 +5710,12 @@ "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raw-body": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true, "requires": { "bytes": "3.0.0", "http-errors": "1.6.2", @@ -6813,24 +5729,6 @@ "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", "dev": true }, - "rc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.3.tgz", - "integrity": "sha1-UVdakA+N1oOBxxC0cSwhVMPiA1s=", - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "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=" - } - } - }, "react": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/react/-/react-16.1.0.tgz", @@ -6901,45 +5799,6 @@ "theming": "1.1.0" } }, - "react-notification-system": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/react-notification-system/-/react-notification-system-0.2.16.tgz", - "integrity": "sha1-m52iCw00eGtgBXxStCUW6hKVN0o=", - "requires": { - "create-react-class": "15.6.2", - "object-assign": "4.1.1", - "prop-types": "15.6.0" - } - }, - "react-notification-system-redux": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/react-notification-system-redux/-/react-notification-system-redux-1.2.0.tgz", - "integrity": "sha1-FPsJFccuTBLZmD/+ByVOLNGexd8=", - "requires": { - "prop-types": "15.6.0", - "react-notification-system": "0.2.16" - } - }, - "react-redux": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.6.tgz", - "integrity": "sha512-8taaaGu+J7PMJQDJrk/xiWEYQmdo3mkXw6wPr3K3LxvXis3Fymiq7c13S+Tpls/AyNUAsoONkU81AP0RA6y6Vw==", - "requires": { - "hoist-non-react-statics": "2.3.1", - "invariant": "2.2.2", - "lodash": "4.17.4", - "lodash-es": "4.17.4", - "loose-envify": "1.3.1", - "prop-types": "15.6.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", - "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" - } - } - }, "react-resize-detector": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-1.1.0.tgz", @@ -6948,15 +5807,6 @@ "prop-types": "15.6.0" } }, - "react-svg-inline": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/react-svg-inline/-/react-svg-inline-2.0.1.tgz", - "integrity": "sha512-9YVqJ80g1gPWAvD9CS/z4cKPD45ZSMjjzwxFAmQJiMEoAo1Ajhz92WirXag3ftltDN5lPNkVWx/KOnEWB/PaMQ==", - "requires": { - "classnames": "2.2.5", - "prop-types": "15.6.0" - } - }, "react-tap-event-plugin": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/react-tap-event-plugin/-/react-tap-event-plugin-3.0.2.tgz", @@ -7014,6 +5864,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -7064,47 +5915,23 @@ "strip-indent": "1.0.1" } }, - "redux-form": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.2.0.tgz", - "integrity": "sha512-qbgeI19drwnm9FeGAotDA1vsZO8q94XF7IxPDuJmSXxDYX2rqzhND6NROahCBJfBK5xM1cchvmgscO2rry1EEw==", - "requires": { - "deep-equal": "1.0.1", - "es6-error": "4.1.1", - "hoist-non-react-statics": "2.3.1", - "invariant": "2.2.2", - "is-promise": "2.1.0", - "lodash": "4.17.4", - "lodash-es": "4.17.4", - "prop-types": "15.6.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", - "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" - } - } - }, - "redux-undo": { - "version": "1.0.0-beta9-9-7", - "resolved": "https://registry.npmjs.org/redux-undo/-/redux-undo-1.0.0-beta9-9-7.tgz", - "integrity": "sha1-/juqGycUI9fdu/w6gscbApotuLo=" - }, "regenerate": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true }, "regenerator-runtime": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true }, "regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0", @@ -7125,6 +5952,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, "requires": { "regenerate": "1.3.3", "regjsgen": "0.2.0", @@ -7134,12 +5962,14 @@ "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true }, "regjsparser": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, "requires": { "jsesc": "0.5.0" }, @@ -7147,7 +5977,8 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true } } }, @@ -7205,69 +6036,6 @@ "is-finite": "1.0.2" } }, - "replace-comments-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-comments-x/-/replace-comments-x-2.0.0.tgz", - "integrity": "sha512-+vMP4jqU+8HboLWms6YMNEiaZG5hh1oR6ENCnGYDF/UQ7aYiJUK/8tcl3+KZAHRCKKa3gqzrfiarlUBHQSgRlg==", - "requires": { - "require-coercible-to-string-x": "1.0.0", - "to-string-x": "1.4.2" - } - }, - "request": { - "version": "2.80.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.80.0.tgz", - "integrity": "sha1-jMFi1215OBze/dNQXXa4C2BYm9A=", - "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.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.2.0" - }, - "dependencies": { - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=" - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" - }, - "uuid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.0.tgz", - "integrity": "sha512-qC0vMFX6q6ee8JaoTF2Om1uL8KAV1ATUjVaHRxLiPJkIsp8JZl6ZjG0MIB+twZFLbi1vXj30rqj4zlqYiOS9xg==" - } - } - }, - "require-coercible-to-string-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.0.tgz", - "integrity": "sha512-Rpfd4sMdflPAKecdKhfAtQHlZzzle4UMUgxJ01hXtTcNWMV8w9GeZnKhEyrT73kgrflBOP1zg41amUPZGcNspA==", - "requires": { - "require-object-coercible-x": "1.4.1", - "to-string-x": "1.4.2" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7280,25 +6048,12 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "require-object-coercible-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/require-object-coercible-x/-/require-object-coercible-x-1.4.1.tgz", - "integrity": "sha512-0YHa2afepsLfQvwQ1P2XvDZnGOUia5sC07ZijIRU2dnsRxnuilXWF6B2CFaKGDA9eZl39lJHrXCDsnfgroRd6Q==", - "requires": { - "is-nil-x": "1.4.1" - } - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "reselect": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", - "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" - }, "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", @@ -7374,13 +6129,13 @@ "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true }, "send": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", - "dev": true, "requires": { "debug": "2.6.9", "depd": "1.1.1", @@ -7401,7 +6156,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -7409,8 +6163,7 @@ "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" } } }, @@ -7444,7 +6197,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", - "dev": true, "requires": { "encodeurl": "1.0.1", "escape-html": "1.0.3", @@ -7455,7 +6207,8 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-immediate-shim": { "version": "1.0.1", @@ -7471,8 +6224,7 @@ "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "sha.js": { "version": "2.4.9", @@ -7507,37 +6259,20 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-assign": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/simple-assign/-/simple-assign-0.1.0.tgz", "integrity": "sha1-F/0wZqXz13OPUDIbsPFMooHMS6o=" }, - "simple-get": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", - "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", - "requires": { - "once": "1.4.0", - "unzip-response": "1.0.2", - "xtend": "4.0.1" - } - }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" - } - }, "sockjs": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", @@ -7582,7 +6317,8 @@ "source-map": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true }, "source-map-support": { "version": "0.4.15", @@ -7593,11 +6329,6 @@ "source-map": "0.5.6" } }, - "spark-md5": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", - "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" - }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", @@ -7654,33 +6385,10 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "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" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, "statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" }, "stream-browserify": { "version": "2.0.1", @@ -7747,15 +6455,11 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "dev": true, "requires": { "safe-buffer": "5.1.1" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -7785,11 +6489,6 @@ "get-stdin": "4.0.1" } }, - "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=" - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -7806,28 +6505,6 @@ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", "dev": true }, - "tar-fs": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz", - "integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg==", - "requires": { - "chownr": "1.0.1", - "mkdirp": "0.5.1", - "pump": "1.0.3", - "tar-stream": "1.5.5" - } - }, - "tar-stream": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", - "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", - "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.1", - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, "theming": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/theming/-/theming-1.1.0.tgz", @@ -7859,15 +6536,6 @@ "resolved": "https://registry.npmjs.org/three/-/three-0.88.0.tgz", "integrity": "sha1-QlbC/Djk+yOg0j66K2zOTfjkZtU=" }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, "thunky": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", @@ -7889,146 +6557,23 @@ "setimmediate": "1.0.5" } }, - "timers-ext": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", - "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", - "requires": { - "es5-ext": "0.10.35", - "next-tick": "1.0.0" - }, - "dependencies": { - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - } - } - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, - "to-boolean-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-boolean-x/-/to-boolean-x-1.0.1.tgz", - "integrity": "sha512-PstxY3K6hVEHnY3FITs8XBoJbt0RI1e4MLIhAL9hWa3BtVLCrb86vU5z6lEKh7uZZjiPiLqIKMmfMro1nNgtXQ==" - }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, - "to-integer-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-integer-x/-/to-integer-x-3.0.0.tgz", - "integrity": "sha512-794L2Lpwjtynm7RxahJi2YdbRY75gTxUW27TMuN26UgwPkmJb/+HPhkFEFbz+E4vNoiP0dxq5tq5fkXoXLaK/w==", - "requires": { - "is-finite-x": "3.0.2", - "is-nan-x": "1.0.1", - "math-sign-x": "3.0.0", - "to-number-x": "2.0.0" - } - }, - "to-number-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-number-x/-/to-number-x-2.0.0.tgz", - "integrity": "sha512-lGOnCoccUoSzjZ/9Uen8TC4+VFaQcFGhTroWTv2tYWxXgyJV1zqAZ8hEIMkez/Eo790fBMOjidTnQ/OJSCvAoQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "nan-x": "1.0.0", - "parse-int-x": "2.0.0", - "to-primitive-x": "1.1.0", - "trim-x": "3.0.0" - } - }, - "to-object-x": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/to-object-x/-/to-object-x-1.5.0.tgz", - "integrity": "sha512-AKn5GQcdWky+s20vjWkt+Wa6y3dxQH3yQyMBhOfBOPldUwqwhgvlqcIg5H092ntNc+TX8/Cxzs1kMHH19pyCnA==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-object-coercible-x": "1.4.1" - } - }, - "to-primitive-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/to-primitive-x/-/to-primitive-x-1.1.0.tgz", - "integrity": "sha512-gyMY0gi3wjK3e4MUBKqv9Zl8QGcWguIkaUr2VJmoBEsOpDcpDZSEyljR773eVG4maS48uX7muLkoQoh/BA82OQ==", - "requires": { - "has-symbol-support-x": "1.4.1", - "is-date-object": "1.0.1", - "is-function-x": "3.3.0", - "is-nil-x": "1.4.1", - "is-primitive": "2.0.0", - "is-symbol": "1.0.1", - "require-object-coercible-x": "1.4.1", - "validate.io-undefined": "1.0.3" - } - }, - "to-property-key-x": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-property-key-x/-/to-property-key-x-2.0.2.tgz", - "integrity": "sha512-YISLpZFYIazNm0P8hLsKEEUEZ3m8U3+eDysJZqTu3+B9tQp+2TrMpaEGT8Agh4fZ5LSoums60/glNEzk5ozqrg==", - "requires": { - "has-symbol-support-x": "1.4.1", - "to-primitive-x": "1.1.0", - "to-string-x": "1.4.2" - } - }, - "to-string-symbols-supported-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.0.tgz", - "integrity": "sha512-HbVH673pybrUmhzESGHUm17BBJvqb7BU8HciOvuEYm9ipuDyjmddhvkVqpVW6sM/C5/zhJo17n7O7I/24loJIQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "has-symbol-support-x": "1.4.1", - "is-symbol": "1.0.1" - } - }, - "to-string-tag-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/to-string-tag-x/-/to-string-tag-x-1.4.2.tgz", - "integrity": "sha512-ytO9eLigxsQQLGuab0C1iSSTzKdJNVSlBg0Spg4J/rGAVrQJ5y774mo0SSzgGeTT4RJGGyJNfObXaTMzX0XDOQ==", - "requires": { - "lodash.isnull": "3.0.0", - "validate.io-undefined": "1.0.3" - } - }, - "to-string-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/to-string-x/-/to-string-x-1.4.2.tgz", - "integrity": "sha512-/WP5arlwtCpAAexCCHiQBW0eXwse84osWyP1Qtaz71nsYSuUpOkT6tBm8nQ4IIUfSh5hji0hDupUCD2xbbOL6A==", - "requires": { - "is-symbol": "1.0.1" - } - }, "toposort": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", "dev": true }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "requires": { - "punycode": "1.4.1" - } - }, - "trim-left-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-left-x/-/trim-left-x-3.0.0.tgz", - "integrity": "sha512-+m6cqkppI+CxQBTwWEZliOHpOBnCArGyMnS1WCLb6IRgukhTkiQu/TNEN5Lj2eM9jk8ewJsc7WxFZfmwNpRXWQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-coercible-to-string-x": "1.0.0", - "white-space-x": "3.0.0" - } - }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -8041,50 +6586,16 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "trim-right-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-right-x/-/trim-right-x-3.0.0.tgz", - "integrity": "sha512-iIqEsWEbWVodqdixJHi4FoayJkUxhoL4AvSNGp4FF4FfQKRPGizt8++/RnyC9od75y7P/S6EfONoVqP+NddiKA==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-coercible-to-string-x": "1.0.0", - "white-space-x": "3.0.0" - } - }, - "trim-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-x/-/trim-x-3.0.0.tgz", - "integrity": "sha512-w8s38RAUScQ6t3XqMkS75iz5ZkIYLQpVnv2lp3IuTS36JdlVzC54oe6okOf4Wz3UH4rr3XAb2xR3kR5Xei82fw==", - "requires": { - "trim-left-x": "3.0.0", - "trim-right-x": "3.0.0" - } - }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, "requires": { "media-typer": "0.3.0", "mime-types": "2.1.17" @@ -8156,16 +6667,15 @@ } } }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "upper-case": { "version": "1.1.3", @@ -8245,7 +6755,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "utila": { "version": "0.4.0", @@ -8256,8 +6767,7 @@ "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { "version": "2.0.3", @@ -8274,11 +6784,6 @@ "user-home": "1.1.1" } }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" - }, "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", @@ -8289,33 +6794,10 @@ "spdx-expression-parse": "1.0.4" } }, - "validate.io-undefined": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-undefined/-/validate.io-undefined-1.0.3.tgz", - "integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q=" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vm-browserify": { "version": "0.0.4", @@ -8326,11 +6808,6 @@ "indexof": "0.0.1" } }, - "vuvuzela": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws=" - }, "warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", @@ -8400,6 +6877,24 @@ } } }, + "webpack-bundle-analyzer": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.2.tgz", + "integrity": "sha1-Y+2G63HMTNqG9o5oWoRTC6ASZEk=", + "requires": { + "acorn": "5.2.1", + "chalk": "1.1.3", + "commander": "2.11.0", + "ejs": "2.5.7", + "express": "4.16.2", + "filesize": "3.5.11", + "gzip-size": "3.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "opener": "1.4.3", + "ws": "4.0.0" + } + }, "webpack-dev-middleware": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", @@ -8649,31 +7144,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "white-space-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/white-space-x/-/white-space-x-3.0.0.tgz", - "integrity": "sha512-nMPVXGMdi/jQepXKryxqzEh/vCwdOYY/u6NZy40glMHvZfEr7/+vQKnDhEq4rZ1nniOFq9GWohQYB30uW/5Olg==" - }, - "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==", - "requires": { - "string-width": "1.0.2" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -8722,21 +7192,17 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, - "write-stream": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", - "integrity": "sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=", + "ws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", + "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", "requires": { - "readable-stream": "0.0.4" - }, - "dependencies": { - "readable-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", - "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=" - } + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" } }, "xml-char-classes": { @@ -8748,7 +7214,8 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true }, "y18n": { "version": "3.2.1", @@ -8832,15 +7299,6 @@ } } }, - "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" - } - }, "yml-loader": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/yml-loader/-/yml-loader-2.1.0.tgz", diff --git a/package.json b/package.json index 390c419..5c07c7f 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "scripts": { "start": "webpack-dev-server -w", "prepare": "npm run build", + "analyze": "ANALYZE_BUNDLE=true webpack -p", "build": "npm run build:main && npm run build:main:settings && npm run build:module && npm run build:module:settings ", "build:main": "BABEL_ENV=main babel src -s -d lib", "build:module": "BABEL_ENV=module babel src -s -d module", @@ -31,7 +32,8 @@ "react-jss": "^7.2.0", "react-resize-detector": "^1.1.0", "shortid": "^2.2.8", - "three": "^0.88.0" + "three": "^0.88.0", + "webpack-bundle-analyzer": "^2.9.2" }, "devDependencies": { "babel-cli": "6.24.1", diff --git a/webpack.config.js b/webpack.config.js index 58bcbeb..985b6b9 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,8 +1,9 @@ const path = require('path'); -// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const HTMLWebpackPlugin = require('html-webpack-plugin'); -const devMode = true; +const devMode = process.env.NODE_ENV !== 'production'; +const analyzeBundle = process.env.ANALYZE_BUNDLE; const babelLoader = { loader: 'babel-loader', @@ -61,13 +62,13 @@ module.exports = { } ] }, - plugins: [ + plugins: analyzeBundle ? [new BundleAnalyzerPlugin()] : [ new HTMLWebpackPlugin({ title: 'Doodle3D Slicer', template: require('html-webpack-template'), inject: false, appMountId: 'app' - }), + }) ], devtool: "source-map", devServer: { From d4743ef867796adf36ef8235f0c1553011c83be5 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 12:06:14 +0100 Subject: [PATCH 045/163] improve bundle size --- src/interface/index.js | 18 ++++++-------- src/interface/utils.js | 41 +++++++++++-------------------- src/sliceActions/createLines.js | 4 +-- src/sliceActions/helpers/GCode.js | 8 +++--- src/sliceActions/optimizePaths.js | 10 ++++---- src/sliceActions/slice.js | 19 ++++++-------- src/slicer.js | 23 +++++++---------- src/slicer.worker.js | 5 ++-- webpack.config.js | 3 ++- 9 files changed, 52 insertions(+), 79 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index 0bd4969..10b94ff 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -1,9 +1,6 @@ +import * as THREE from 'three'; import _ from 'lodash'; import React from 'react'; -import { Quaternion } from 'three/src/math/Quaternion.js'; -import { Vector3 } from 'three/src/math/Vector3.js'; -import { Mesh } from 'three/src/objects/Mesh.js'; -import { Box3 } from 'three/src/math/Box3.js'; import PropTypes from 'proptypes'; import { centerGeometry, placeOnGround, createScene, fetchProgress, slice, TabTemplate } from './utils.js'; import injectSheet from 'react-jss'; @@ -21,7 +18,6 @@ import ReactResizeDetector from 'react-resize-detector'; import JSONToSketchData from 'doodle3d-core/shape/JSONToSketchData'; import createSceneData from 'doodle3d-core/d3/createSceneData.js'; import { generateExportMesh } from 'doodle3d-core/utils/exportUtils.js'; -import { Matrix4 } from 'three/src/math/Matrix4.js'; import muiThemeable from 'material-ui/styles/muiThemeable'; import Dialog from 'material-ui/Dialog'; @@ -145,7 +141,7 @@ class Interface extends React.Component { .then(resonse => resonse.json()) .then(json => JSONToSketchData(json)) .then(file => createSceneData(file)) - .then(sketch => generateExportMesh(sketch, { offsetSingleWalls: false, matrix: new Matrix4() })) + .then(sketch => generateExportMesh(sketch, { offsetSingleWalls: false, matrix: new THREE.Matrix4() })) .then(mesh => this.updateMesh(mesh)); }; @@ -194,9 +190,9 @@ class Interface extends React.Component { } }; - rotateX = () => this.rotate(new Vector3(0, 0, 1), Math.PI / 2.0); - rotateY = () => this.rotate(new Vector3(1, 0, 0), Math.PI / 2.0); - rotateZ = () => this.rotate(new Vector3(0, 1, 0), Math.PI / 2.0); + rotateX = () => this.rotate(new THREE.Vector3(0, 0, 1), Math.PI / 2.0); + rotateY = () => this.rotate(new THREE.Vector3(1, 0, 0), Math.PI / 2.0); + rotateZ = () => this.rotate(new THREE.Vector3(0, 1, 0), Math.PI / 2.0); rotate = (axis, angle) => { const { scene: { mesh, render }, isSlicing } = this.state; if (isSlicing) return; @@ -221,7 +217,7 @@ class Interface extends React.Component { this.closePopover(); this.setState({ isSlicing: true, progress: { action: '', percentage: 0, step: 0 }, error: null }); - const exportMesh = new Mesh(mesh.geometry, mesh.material); + const exportMesh = new THREE.Mesh(mesh.geometry, mesh.material); exportMesh.applyMatrix(matrix); try { @@ -292,7 +288,7 @@ class Interface extends React.Component { calculateDimensions = () => { const { scene: { mesh } } = this.state; - const { x, y, z } = new Box3().setFromObject(mesh).getSize(); + const { x, y, z } = new THREE.Box3().setFromObject(mesh).getSize(); this.setState({ objectDimensions: `${Math.round(x)}x${Math.round(y)}x${Math.round(z)}mm` }); }; diff --git a/src/interface/utils.js b/src/interface/utils.js index 7f98ec4..4f2b811 100644 --- a/src/interface/utils.js +++ b/src/interface/utils.js @@ -1,17 +1,4 @@ import * as THREE from 'three'; -import { Box3 } from 'three/src/math/Box3.js'; -import { Matrix4 } from 'three/src/math/Matrix4.js'; -import { Vector3 } from 'three/src/math/Vector3.js'; -import { Scene } from 'three/src/scenes/Scene.js'; -import { PerspectiveCamera } from 'three/src/cameras/PerspectiveCamera.js'; -import { AmbientLight } from 'three/src/lights/AmbientLight.js'; -import { DirectionalLight } from 'three/src/lights/DirectionalLight.js'; -import { MeshPhongMaterial } from 'three/src/materials/MeshPhongMaterial.js'; -import { BoxGeometry } from 'three/src/geometries/BoxGeometry.js'; -import { Mesh } from 'three/src/objects/Mesh.js'; -import { BoxHelper } from 'three/src/helpers/BoxHelper.js'; -import { WebGLRenderer } from 'three/src/renderers/WebGLRenderer.js'; -import { DoubleSide } from 'three/src/constants.js'; import 'three/examples/js/controls/EditorControls'; import printerSettings from '../settings/printer.yml'; import materialSettings from '../settings/material.yml'; @@ -23,7 +10,7 @@ import PropTypes from 'prop-types'; import fileSaver from 'file-saver'; export function placeOnGround(mesh) { - const boundingBox = new Box3().setFromObject(mesh); + const boundingBox = new THREE.Box3().setFromObject(mesh); mesh.position.y -= boundingBox.min.y; mesh.updateMatrix(); @@ -33,35 +20,35 @@ export function centerGeometry(mesh) { // center geometry mesh.geometry.computeBoundingBox(); const center = mesh.geometry.boundingBox.getCenter(); - mesh.geometry.applyMatrix(new Matrix4().makeTranslation(-center.x, -center.y, -center.z)); + mesh.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-center.x, -center.y, -center.z)); } export function createScene({ pixelRatio, muiTheme }) { - const scene = new Scene(); + const scene = new THREE.Scene(); - const camera = new PerspectiveCamera(50, 1, 1, 10000); + const camera = new THREE.PerspectiveCamera(50, 1, 1, 10000); camera.position.set(0, 400, 300); - camera.lookAt(new Vector3(0, 0, 0)); + camera.lookAt(new THREE.Vector3(0, 0, 0)); - const directionalLightA = new DirectionalLight(0xa2a2a2); + const directionalLightA = new THREE.DirectionalLight(0xa2a2a2); directionalLightA.position.set(1, 1, 1); scene.add(directionalLightA); - const directionalLightB = new DirectionalLight(0xa2a2a2); + const directionalLightB = new THREE.DirectionalLight(0xa2a2a2); directionalLightB.position.set(-1, 1, -1); scene.add(directionalLightB); - const light = new AmbientLight(0x656565); + const light = new THREE.AmbientLight(0x656565); scene.add(light); - const material = new MeshPhongMaterial({ color: muiTheme.palette.primary2Color, side: DoubleSide, specular: 0xc5c5c5, shininess: 5 }); - const mesh = new Mesh(new THREE.Geometry(), material); + const material = new THREE.MeshPhongMaterial({ color: muiTheme.palette.primary2Color, side: THREE.DoubleSide, specular: 0xc5c5c5, shininess: 5 }); + const mesh = new THREE.Mesh(new THREE.Geometry(), material); scene.add(mesh); - const box = new BoxHelper(new Mesh(new BoxGeometry(1, 1, 1).applyMatrix(new Matrix4().makeTranslation(0, 0.5, 0))), muiTheme.palette.primary2Color); + const box = new THREE.BoxHelper(new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1).applyMatrix(new THREE.Matrix4().makeTranslation(0, 0.5, 0))), muiTheme.palette.primary2Color); scene.add(box); - let renderer = new WebGLRenderer({ alpha: true, antialias: true }); + let renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true }); let editorControls = new THREE.EditorControls(camera, renderer.domElement); box.scale.set(1., 1., 1.); @@ -80,7 +67,7 @@ export function createScene({ pixelRatio, muiTheme }) { const updateCanvas = (canvas) => { if (!renderer || renderer.domElement !== canvas) { if (renderer) renderer.dispose(); - renderer = new WebGLRenderer({ canvas, alpha: true, antialias: true }); + renderer = new THREE.WebGLRenderer({ canvas, alpha: true, antialias: true }); renderer.setClearColor(0xffffff, 0); } if (!editorControls || editorControls.domElement !== canvas) { @@ -138,7 +125,7 @@ export async function slice(target, name, mesh, settings, updateProgress) { const centerX = dimensions.x / 2; const centerY = dimensions.y / 2; - const matrix = new Matrix4().makeTranslation(centerY, 0, centerX).multiply(mesh.matrix); + const matrix = new THREE.Matrix4().makeTranslation(centerY, 0, centerX).multiply(mesh.matrix); const { gcode } = await sliceGeometry(settings, mesh.geometry, mesh.material, matrix, false, false, ({ progress }) => { updateProgress({ action: progress.action, diff --git a/src/sliceActions/createLines.js b/src/sliceActions/createLines.js index 62b7c19..e9f9fd2 100644 --- a/src/sliceActions/createLines.js +++ b/src/sliceActions/createLines.js @@ -1,4 +1,4 @@ -import { Line3 } from 'three/src/math/Line3.js'; +import * as THREE from 'three'; import { normalize } from './helpers/VectorUtils.js'; function addLine(geometry, lineLookup, lines, a, b, faceIndex) { @@ -9,7 +9,7 @@ function addLine(geometry, lineLookup, lines, a, b, faceIndex) { index = lines.length; lineLookup[`${a}_${b}`] = index; - const line = new Line3(geometry.vertices[a], geometry.vertices[b]); + const line = new THREE.Line3(geometry.vertices[a], geometry.vertices[b]); lines.push({ line, faces: [] }); } diff --git a/src/sliceActions/helpers/GCode.js b/src/sliceActions/helpers/GCode.js index cf2fbb4..ea51272 100644 --- a/src/sliceActions/helpers/GCode.js +++ b/src/sliceActions/helpers/GCode.js @@ -1,4 +1,4 @@ -import { Vector2 } from 'three/src/math/Vector2.js'; +import * as THREE from 'three'; import { PRECISION, VERSION } from '../../constants.js'; export const MOVE = 'G'; @@ -16,7 +16,7 @@ export default class { this._gcode = [`; Generated with Doodle3D Slicer V${VERSION}`]; this._currentValues = {}; - this._nozzlePosition = new Vector2(0, 0); + this._nozzlePosition = new THREE.Vector2(0, 0); this._extruder = 0.0; this._duration = 0.0; this._isRetracted = false; @@ -47,7 +47,7 @@ export default class { } moveTo(x, y, z, { speed }) { - const newNozzlePosition = new Vector2(x, y).multiplyScalar(PRECISION); + const newNozzlePosition = new THREE.Vector2(x, y).multiplyScalar(PRECISION); const lineLength = this._nozzlePosition.distanceTo(newNozzlePosition); this._duration += lineLength / speed; @@ -66,7 +66,7 @@ export default class { } lineTo(x, y, z, { speed, flowRate }) { - const newNozzlePosition = new Vector2(x, y).multiplyScalar(PRECISION); + const newNozzlePosition = new THREE.Vector2(x, y).multiplyScalar(PRECISION); const lineLength = this._nozzlePosition.distanceTo(newNozzlePosition); this._extruder += this._nozzleToFilamentRatio * lineLength * flowRate; diff --git a/src/sliceActions/optimizePaths.js b/src/sliceActions/optimizePaths.js index 661e7e0..18043ef 100644 --- a/src/sliceActions/optimizePaths.js +++ b/src/sliceActions/optimizePaths.js @@ -1,8 +1,8 @@ -import { Vector2 } from 'three/src/math/Vector2.js'; +import * as THREE from 'three'; import Shape from 'clipper-js'; export default function optimizePaths(slices, settings) { - const start = new Vector2(0, 0); + const start = new THREE.Vector2(0, 0); for (let layer = 0; layer < slices.length; layer ++) { const slice = slices[layer]; @@ -102,7 +102,7 @@ function optimizeShape(shape, start) { if (shape.closed) { for (let j = 0; j < path.length; j += 1) { - const point = new Vector2().copy(path[j]); + const point = new THREE.Vector2().copy(path[j]); const length = point.sub(start).length(); if (minLength === false || length < minLength) { minPath = path; @@ -112,7 +112,7 @@ function optimizeShape(shape, start) { } } } else { - const startPoint = new Vector2().copy(path[0]); + const startPoint = new THREE.Vector2().copy(path[0]); const lengthToStart = startPoint.sub(start).length(); if (minLength === false || lengthToStart < minLength) { minPath = path; @@ -121,7 +121,7 @@ function optimizeShape(shape, start) { pathIndex = i; } - const endPoint = new Vector2().copy(path[path.length - 1]); + const endPoint = new THREE.Vector2().copy(path[path.length - 1]); const lengthToEnd = endPoint.sub(start).length(); if (lengthToEnd < minLength) { minPath = path; diff --git a/src/sliceActions/slice.js b/src/sliceActions/slice.js index a7064e3..fcd13fc 100644 --- a/src/sliceActions/slice.js +++ b/src/sliceActions/slice.js @@ -1,9 +1,4 @@ -import { Color } from 'three/src/math/Color.js'; -import { BufferGeometry } from 'three/src/core/BufferGeometry.js'; -import { BufferAttribute } from 'three/src/core/BufferAttribute.js'; -import { LineBasicMaterial } from 'three/src/materials/LineBasicMaterial.js'; -import { VertexColors } from 'three/src/constants.js'; -import { LineSegments } from 'three/src/objects/LineSegments.js'; +import * as THREE from 'three'; import calculateLayersIntersections from './calculateLayersIntersections.js'; import createLines from './createLines.js'; import generateInfills from './generateInfills.js'; @@ -98,7 +93,7 @@ function gcodeToString(gcode) { } const MAX_SPEED = 100 * 60; -const COLOR = new Color(); +const COLOR = new THREE.Color(); function createGcodeGeometry(gcode) { const positions = []; const colors = []; @@ -123,13 +118,13 @@ function createGcodeGeometry(gcode) { } } - const geometry = new BufferGeometry(); + const geometry = new THREE.BufferGeometry(); - geometry.addAttribute('position', new BufferAttribute(new Float32Array(positions), 3)); - geometry.addAttribute('color', new BufferAttribute(new Float32Array(colors), 3)); + geometry.addAttribute('position', new THREE.BufferAttribute(new Float32Array(positions), 3)); + geometry.addAttribute('color', new THREE.BufferAttribute(new Float32Array(colors), 3)); - const material = new LineBasicMaterial({ vertexColors: VertexColors }); - const linePreview = new LineSegments(geometry, material); + const material = new THREE.LineBasicMaterial({ vertexColors: THREE.VertexColors }); + const linePreview = new THREE.LineSegments(geometry, material); return linePreview; } diff --git a/src/slicer.js b/src/slicer.js index 5341d9f..c49ec2e 100644 --- a/src/slicer.js +++ b/src/slicer.js @@ -1,11 +1,6 @@ -import { VertexColors } from 'three/src/constants.js'; -import { BufferAttribute } from 'three/src/core/BufferAttribute.js'; -import { LineBasicMaterial } from 'three/src/materials/LineBasicMaterial.js'; -import { LineSegments } from 'three/src/objects/LineSegments.js'; +import * as THREE from 'three'; import slice from './sliceActions/slice.js'; import SlicerWorker from './slicer.worker.js'; -import { FrontSide, DoubleSide } from 'three/src/constants.js'; -import { BufferGeometry } from 'three/src/core/BufferGeometry.js' export function sliceMesh(settings, mesh, sync = false, constructLinePreview = false, onProgress) { if (!mesh || !mesh.isMesh) { @@ -21,7 +16,7 @@ export function sliceGeometry(settings, geometry, materials, matrix, sync = fals if (!geometry) { throw new Error('Missing required geometry argument'); } else if (geometry.isBufferGeometry) { - geometry = new Geometry().fromBufferGeometry(geometry); + geometry = new THREE.Geometry().fromBufferGeometry(geometry); } else if (geometry.isGeometry) { geometry = geometry.clone(); } else { @@ -38,9 +33,9 @@ export function sliceGeometry(settings, geometry, materials, matrix, sync = fals const openObjectIndexes = materials instanceof Array ? materials.map(({ side }) => { switch (side) { - case FrontSide: + case THREE.FrontSide: return false; - case DoubleSide: + case THREE.DoubleSide: return true; default: return false; @@ -76,14 +71,14 @@ function sliceAsync(settings, geometry, openObjectIndexes, constructLinePreview, slicerWorker.terminate(); if (data.gcode.linePreview) { - const geometry = new BufferGeometry(); + const geometry = new THREE.BufferGeometry(); const { position, color } = data.gcode.linePreview; - geometry.addAttribute('position', new BufferAttribute(new Float32Array(position), 3)); - geometry.addAttribute('color', new BufferAttribute(new Float32Array(color), 3)); + geometry.addAttribute('position', new THREE.BufferAttribute(new Float32Array(position), 3)); + geometry.addAttribute('color', new THREE.BufferAttribute(new Float32Array(color), 3)); - const material = new LineBasicMaterial({ vertexColors: VertexColors }); - const linePreview = new LineSegments(geometry, material); + const material = new THREE.LineBasicMaterial({ vertexColors: THREE.VertexColors }); + const linePreview = new THREE.LineSegments(geometry, material); data.gcode.linePreview = linePreview; } diff --git a/src/slicer.worker.js b/src/slicer.worker.js index 2d866ef..f06ce93 100644 --- a/src/slicer.worker.js +++ b/src/slicer.worker.js @@ -1,7 +1,6 @@ import 'core-js'; // polyfills import slice from './sliceActions/slice.js'; -import { Matrix4 } from 'three/src/math/Matrix4.js'; -import { JSONLoader } from 'three/src/loaders/JSONLoader.js'; +import * as THREE from 'three'; const onProgress = progress => { self.postMessage({ @@ -10,7 +9,7 @@ const onProgress = progress => { }); } -const loader = new JSONLoader(); +const loader = new THREE.JSONLoader(); self.addEventListener('message', (event) => { const { message, data } = event.data; diff --git a/webpack.config.js b/webpack.config.js index 985b6b9..9e4da86 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -70,7 +70,8 @@ module.exports = { appMountId: 'app' }) ], - devtool: "source-map", + devtool: false, + devtool: devMode ? 'source-map' : false, devServer: { contentBase: 'dist' } From a892d6ff896dfff5fca4b9ef881a3fd9c9ee7fee Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 12:24:20 +0100 Subject: [PATCH 046/163] update package lock --- package-lock.json | 1867 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 1714 insertions(+), 153 deletions(-) diff --git a/package-lock.json b/package-lock.json index 795aae2..927312f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@doodle3d/cal": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@doodle3d/cal/-/cal-0.0.8.tgz", + "integrity": "sha512-1qXg62qaZkc/zYPan37CXvUtaJk4aFVLz2y8cqnkN9Y0r1Er5soIZ5esMz4YYyjUrQGawBoYcGvatRALYnzlvg==" + }, "@doodle3d/clipper-js": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@doodle3d/clipper-js/-/clipper-js-1.0.7.tgz", @@ -17,6 +22,114 @@ "resolved": "https://registry.npmjs.org/@doodle3d/clipper-lib/-/clipper-lib-6.4.2-b.tgz", "integrity": "sha512-glELSijsD9b+/0d9iOdasBwqH3s+xPxD59tJ7aXkBx7klugygGOMXn7PB05AdhVyA1OYMj7GUCegaQa7nvLtmQ==" }, + "@doodle3d/doodle3d-core": { + "version": "github:doodle3d/doodle3d-core#36a73c233e569fca79d2059a50edb6bdb511aa58", + "requires": { + "@doodle3d/cal": "0.0.8", + "@doodle3d/clipper-js": "1.0.7", + "@doodle3d/fill-path": "1.0.7", + "@doodle3d/potrace-js": "0.0.6", + "@doodle3d/threejs-export-obj": "0.0.8", + "@doodle3d/threejs-export-stl": "0.0.5", + "@doodle3d/touch-events": "0.0.7", + "babel-polyfill": "6.26.0", + "bezier-js": "2.2.5", + "blueimp-canvas-to-blob": "3.14.0", + "bowser": "1.8.1", + "fit-curve": "0.1.6", + "google-fonts-webpack-plugin": "0.4.4", + "imports-loader": "0.7.1", + "jss": "9.5.1", + "keycode": "2.1.9", + "lodash": "4.17.4", + "memoizee": "0.3.10", + "normalize-wheel": "1.0.1", + "pouchdb": "6.4.1", + "proptypes": "1.1.0", + "raf": "3.4.0", + "ramda": "0.21.0", + "react": "16.1.0", + "react-addons-update": "15.6.2", + "react-jss": "7.2.0", + "react-notification-system-redux": "1.2.0", + "react-redux": "5.0.6", + "react-resize-detector": "1.1.0", + "react-svg-inline": "2.0.1", + "redux-form": "7.2.0", + "redux-undo": "1.0.0-beta9-9-7", + "reselect": "3.0.1", + "semver": "5.4.1", + "shortid": "2.2.8", + "three": "0.88.0", + "three-js-csg": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045", + "valid-url": "1.0.9" + }, + "dependencies": { + "jss": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-9.5.1.tgz", + "integrity": "sha512-py//ogG1xeztpEDmosJtrkfUXibx3qiAr+1GQvfLHp7azpqkzTPLCnainDgH7Zn0q6S7rcM1eINrVT9n/r5f2w==", + "requires": { + "is-in-browser": "1.1.3", + "symbol-observable": "1.1.0", + "warning": "3.0.0" + } + }, + "symbol-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz", + "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==" + } + } + }, + "@doodle3d/fill-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@doodle3d/fill-path/-/fill-path-1.0.7.tgz", + "integrity": "sha512-4sdgWQ28JgRsmnyy1OnuKHE+DZ8kDGpluGqFmMASh2/6dlyjp2/oXnNEgNefG4/xiEitV8AtzEij9Bijh6yNRw==", + "requires": { + "@doodle3d/clipper-js": "1.0.7" + } + }, + "@doodle3d/potrace-js": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@doodle3d/potrace-js/-/potrace-js-0.0.6.tgz", + "integrity": "sha512-w1+sG3ClsSaQwo3ks5wl6QLe4aWEHBe8QePq0IeAcj+lypqo770sUcWVfEZWUFBumAhSlCJg3GRc8MsycHy8LA==" + }, + "@doodle3d/threejs-export-obj": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@doodle3d/threejs-export-obj/-/threejs-export-obj-0.0.8.tgz", + "integrity": "sha512-HVnJCvrjj3FqHJ5+CLVT1oZ0OjS2eOvrpMKjo71Jg7bdrusluIRlF7w9JdaoZs3ScWASAucu2cvTKJ+OAm3Rhw==", + "requires": { + "jszip": "3.1.5", + "three": "0.88.0" + } + }, + "@doodle3d/threejs-export-stl": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@doodle3d/threejs-export-stl/-/threejs-export-stl-0.0.5.tgz", + "integrity": "sha512-GeApmYL657Dug8/+WOHGGijJbQ52dN2AWkhz9FsCe9sehZRhCg0fOg4LKXNS0XGKWMQbyumlbrmCWZrK73sfJA==", + "requires": { + "babel-preset-env": "1.6.1", + "three": "0.88.0" + } + }, + "@doodle3d/touch-events": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@doodle3d/touch-events/-/touch-events-0.0.7.tgz", + "integrity": "sha512-EpL8IEGKKy2gqFFlxA4n84IeAyPTrEzle0jwmRv+mmVBzwGr6xDl5Ga5vJIrg2WcYs4Xc7qWbiKSHEXvEpDLlg==", + "requires": { + "eventdispatcher.js": "0.0.2", + "pepjs": "0.4.3" + } + }, + "abstract-leveldown": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz", + "integrity": "sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==", + "requires": { + "xtend": "4.0.1" + } + }, "accepts": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", @@ -103,6 +216,20 @@ "micromatch": "2.3.11" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "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=", + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -112,6 +239,11 @@ "sprintf-js": "1.0.3" } }, + "argsarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", + "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" + }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -181,6 +313,11 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, "asn1.js": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", @@ -201,6 +338,11 @@ "util": "0.10.3" } }, + "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=" + }, "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", @@ -221,6 +363,26 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "attempt-x": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/attempt-x/-/attempt-x-1.1.1.tgz", + "integrity": "sha512-hIp37ojJRRW8ExWSxxLpkDHUufk/DFfsb7/cUC1cVbBg7JV4gJTkCTRa44dlL9e5jx1P3VNrjL7QOQfi4MyltA==" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, "babel-cli": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz", @@ -312,7 +474,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, "requires": { "babel-helper-explode-assignable-expression": "6.24.1", "babel-runtime": "6.26.0", @@ -364,7 +525,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, "requires": { "babel-helper-hoist-variables": "6.24.1", "babel-runtime": "6.26.0", @@ -376,7 +536,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -388,7 +547,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -398,7 +556,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -409,8 +566,7 @@ "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" } } }, @@ -418,7 +574,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.25.0", @@ -462,7 +617,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -472,7 +626,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -482,7 +635,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", @@ -493,7 +645,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -503,7 +654,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -514,8 +664,7 @@ "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" } } }, @@ -523,7 +672,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -536,7 +684,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, "requires": { "babel-helper-optimise-call-expression": "6.24.1", "babel-messages": "6.23.0", @@ -579,7 +726,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -587,8 +733,7 @@ "babel-plugin-syntax-async-functions": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", @@ -628,8 +773,7 @@ "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" }, "babel-plugin-syntax-export-extensions": { "version": "6.13.0", @@ -664,8 +808,7 @@ "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" }, "babel-plugin-transform-async-generator-functions": { "version": "6.24.1", @@ -682,7 +825,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, "requires": { "babel-helper-remap-async-to-generator": "6.24.1", "babel-plugin-syntax-async-functions": "6.13.0", @@ -738,7 +880,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -747,7 +888,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -756,7 +896,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-template": "6.26.0", @@ -769,7 +908,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", @@ -780,7 +918,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -790,7 +927,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", @@ -803,7 +939,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, "requires": { "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", @@ -820,7 +955,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -831,14 +965,12 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" } } }, @@ -846,7 +978,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, "requires": { "babel-helper-define-map": "6.26.0", "babel-helper-function-name": "6.24.1", @@ -863,7 +994,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-template": "6.25.0" @@ -873,7 +1003,6 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -882,7 +1011,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -892,7 +1020,6 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -901,7 +1028,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, "requires": { "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", @@ -912,7 +1038,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -921,7 +1046,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, "requires": { "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", "babel-runtime": "6.26.0", @@ -932,7 +1056,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true, "requires": { "babel-plugin-transform-strict-mode": "6.24.1", "babel-runtime": "6.26.0", @@ -944,7 +1067,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", @@ -955,7 +1077,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.4.1", "regenerator-runtime": "0.11.0" @@ -965,7 +1086,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", @@ -978,7 +1098,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, "requires": { "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", @@ -995,7 +1114,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -1006,14 +1124,12 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" } } }, @@ -1021,7 +1137,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, "requires": { "babel-helper-hoist-variables": "6.24.1", "babel-runtime": "6.26.0", @@ -1032,7 +1147,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, "requires": { "babel-plugin-transform-es2015-modules-amd": "6.24.1", "babel-runtime": "6.26.0", @@ -1043,7 +1157,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, "requires": { "babel-helper-replace-supers": "6.24.1", "babel-runtime": "6.26.0" @@ -1053,7 +1166,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, "requires": { "babel-helper-call-delegate": "6.24.1", "babel-helper-get-function-arity": "6.24.1", @@ -1067,7 +1179,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -1077,7 +1188,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1086,7 +1196,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, "requires": { "babel-helper-regex": "6.26.0", "babel-runtime": "6.26.0", @@ -1097,7 +1206,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1106,7 +1214,6 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1115,7 +1222,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, "requires": { "babel-helper-regex": "6.26.0", "babel-runtime": "6.26.0", @@ -1126,7 +1232,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, "requires": { "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", "babel-plugin-syntax-exponentiation-operator": "6.13.0", @@ -1235,7 +1340,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, "requires": { "regenerator-transform": "0.10.1" } @@ -1253,7 +1357,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0" @@ -1263,7 +1366,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "core-js": "2.5.3", @@ -1274,7 +1376,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "2.5.3", "regenerator-runtime": "0.11.1" @@ -1283,16 +1384,14 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" } } }, "core-js": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" } } }, @@ -1300,7 +1399,6 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", - "dev": true, "requires": { "babel-plugin-check-es2015-constants": "6.22.0", "babel-plugin-syntax-trailing-function-commas": "6.22.0", @@ -1529,11 +1627,24 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bezier-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.2.5.tgz", + "integrity": "sha512-HGh+GevPguxrAmnWF2/A+8c8FEatnKcE6WttpYWA5fn1CfpJz4reFbr11DuyFs2gwaIo9vF7aVXW2xg1iaqvyg==" + }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" }, "binary-extensions": { "version": "1.8.0", @@ -1541,12 +1652,30 @@ "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", "dev": true }, + "bindings": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" + }, + "bl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "requires": { + "readable-stream": "2.3.3" + } + }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "dev": true }, + "blueimp-canvas-to-blob": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.14.0.tgz", + "integrity": "sha512-i6I2CiX1VR8YwUNYBo+dM8tg89ns4TTHxSpWjaDeHKcYS3yFalpLCwDaY21/EsJMufLy2tnG4j0JN5L8OVNkKQ==" + }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -1600,6 +1729,14 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, "bowser": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.8.1.tgz", @@ -1711,7 +1848,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.8.0.tgz", "integrity": "sha512-iiWHM1Et6Q4TQpB7Ar6pxuM3TNMXasVJY4Y/oh3q38EwR3Z+IdZ9MyVf7PI4MJFB4xpwMcZgs9bEUnPG2E3TCA==", - "dev": true, "requires": { "caniuse-lite": "1.0.30000760", "electron-to-chromium": "1.3.27" @@ -1728,6 +1864,19 @@ "isarray": "1.0.0" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-from": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz", + "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=", + "requires": { + "is-array-buffer-x": "1.7.0" + } + }, "buffer-indexof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", @@ -1757,6 +1906,11 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "cached-constructors-x": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.0.tgz", + "integrity": "sha512-JVP0oilYlPgBTD8bkQ+of7hSIJRtydCCJiMtzdRMXVQ98gdj0NyrJTZzbu5wtlO26Ev/1HXRTtbBNsVlLJ3+3A==" + }, "camel-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", @@ -1794,8 +1948,12 @@ "caniuse-lite": { "version": "1.0.30000760", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz", - "integrity": "sha1-7HIDlXQvHH7IlH/W3SYE53qPmP8=", - "dev": true + "integrity": "sha1-7HIDlXQvHH7IlH/W3SYE53qPmP8=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "center-align": { "version": "0.1.3", @@ -1846,6 +2004,11 @@ "readdirp": "2.1.0" } }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -1856,6 +2019,11 @@ "safe-buffer": "5.1.1" } }, + "classnames": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", + "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" + }, "clean-css": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", @@ -1876,17 +2044,28 @@ "wordwrap": "0.0.2" } }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "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=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "2.11.0", @@ -1955,6 +2134,11 @@ "date-now": "0.1.4" } }, + "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=" + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -1995,8 +2179,7 @@ "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 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-ecdh": { "version": "4.0.0", @@ -2055,6 +2238,14 @@ "which": "1.3.0" } }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -2121,11 +2312,25 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, "requires": { "es5-ext": "0.10.35" } }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "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=" + } + } + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2154,8 +2359,20 @@ "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, + "deferred-leveldown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-2.0.3.tgz", + "integrity": "sha512-8c2Hv+vIwKNc7qqy4zE3t5DIsln+FQnudcyjLYstHwLFg7XnXZT/H8gQb8lj6xi8xqGM0Bz633ZWcCkonycBTA==", + "requires": { + "abstract-leveldown": "3.0.0" + } }, "define-properties": { "version": "1.1.2", @@ -2189,6 +2406,16 @@ } } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", @@ -2331,11 +2558,25 @@ "domelementtype": "1.3.0" } }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" + }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2349,8 +2590,7 @@ "electron-to-chromium": { "version": "1.3.27", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", - "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", - "dev": true + "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=" }, "elliptic": { "version": "6.4.0", @@ -2370,8 +2610,7 @@ "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "encodeurl": { "version": "1.0.1", @@ -2386,6 +2625,39 @@ "iconv-lite": "0.4.19" } }, + "encoding-down": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-3.0.1.tgz", + "integrity": "sha512-uvx+39YNqiPLqhXAvOSGBVy/oYBh4p2ShwG9YFCipwgfOhnVIOxuOPE3R9dEGM44bn0VHIrC3ojXq6lNf2ulwg==", + "requires": { + "abstract-leveldown": "3.0.0", + "level-codec": "8.0.0", + "level-errors": "1.1.2" + }, + "dependencies": { + "level-codec": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-8.0.0.tgz", + "integrity": "sha512-gNZlo1HRHz0BWxzGCyNf7xntAs2HKOPvvRBWtXsoDvEX4vMYnSTBS6ZnxoaiX7nhxSBPpegRa8CQ/hnfGBKk3Q==" + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "end-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", + "integrity": "sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=", + "requires": { + "write-stream": "0.4.3" + } + }, "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", @@ -2408,7 +2680,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, "requires": { "prr": "0.0.0" } @@ -2450,17 +2721,20 @@ "version": "0.10.35", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", - "dev": true, "requires": { "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + }, "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35", @@ -2481,6 +2755,11 @@ "event-emitter": "0.3.5" } }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" + }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -2498,7 +2777,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35" @@ -2574,12 +2852,16 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.35" } }, + "eventdispatcher.js": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/eventdispatcher.js/-/eventdispatcher.js-0.0.2.tgz", + "integrity": "sha1-wntZzkEEa2iUEu3M/UzYr8ZM2DU=" + }, "eventemitter3": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", @@ -2644,6 +2926,11 @@ "fill-range": "2.2.3" } }, + "expand-template": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz", + "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==" + }, "express": { "version": "4.16.2", "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", @@ -2696,6 +2983,11 @@ } } }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -2705,12 +2997,22 @@ "is-extglob": "1.0.0" } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, "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=", "dev": true }, + "fast-future": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz", + "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=" + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -2747,6 +3049,14 @@ } } }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "1.2.0" + } + }, "file-saver": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", @@ -2821,6 +3131,11 @@ "pinkie-promise": "2.0.1" } }, + "fit-curve": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/fit-curve/-/fit-curve-0.1.6.tgz", + "integrity": "sha1-w72+b1oqO+j4Aerr2kBpGRJWqVs=" + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -2842,6 +3157,21 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -3769,6 +4099,33 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "1.2.0", + "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" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -3787,6 +4144,26 @@ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "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=" + } + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -3838,6 +4215,33 @@ "pinkie-promise": "2.0.1" } }, + "google-fonts-webpack-plugin": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/google-fonts-webpack-plugin/-/google-fonts-webpack-plugin-0.4.4.tgz", + "integrity": "sha512-+e2D9/DVBG9EDydRovzoqMZ658SsTBGbC0c65GyZqkwNvdj8vRSYQKXqbz7/yt7QaXsCPT1MpH45r3ivWOitcw==", + "requires": { + "lodash": "4.17.4", + "node-fetch": "1.7.3", + "webpack-sources": "0.2.3", + "yauzl": "2.9.1" + }, + "dependencies": { + "source-list-map": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz", + "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=" + }, + "webpack-sources": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz", + "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=", + "requires": { + "source-list-map": "1.1.2", + "source-map": "0.5.6" + } + } + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -3858,6 +4262,31 @@ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", "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=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + } + } + }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", @@ -3881,6 +4310,34 @@ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, + "has-own-property-x": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/has-own-property-x/-/has-own-property-x-3.2.0.tgz", + "integrity": "sha512-HtRQTYpRFz/YVaQ7jh2mU5iorMAxFcML9FNOLMI1f8VNJ2K0hpOlXoi1a+nmVl6oUcGnhd6zYOFAVe7NUFStyQ==", + "requires": { + "cached-constructors-x": "1.0.0", + "to-object-x": "1.5.0", + "to-property-key-x": "2.0.2" + } + }, + "has-symbol-support-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", + "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "1.4.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "hash-base": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", @@ -3900,6 +4357,17 @@ "minimalistic-assert": "1.0.0" } }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -3917,6 +4385,11 @@ "minimalistic-crypto-utils": "1.0.1" } }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, "hoist-non-react-statics": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", @@ -4122,6 +4595,16 @@ } } }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -4144,6 +4627,11 @@ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, "import-local": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz", @@ -4178,7 +4666,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.7.1.tgz", "integrity": "sha1-8gS180cCoywdt9SNidXoZ6BEElM=", - "dev": true, "requires": { "loader-utils": "1.1.0", "source-map": "0.5.6" @@ -4199,6 +4686,11 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, + "infinity-x": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.0.tgz", + "integrity": "sha512-wjy2TupBtZ+aAniKt+xs/PO0xOkuaL6wBysUKbgD7aL1PMW/qY5xXDG59zXZ7dU+gk3zwXOu4yIEWPCEFBTgHQ==" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4214,6 +4706,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, "inline-style-prefixer": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz", @@ -4263,6 +4760,18 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" }, + "is-array-buffer-x": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/is-array-buffer-x/-/is-array-buffer-x-1.7.0.tgz", + "integrity": "sha512-ufSZRMY2WZX5xyNvk0NOZAG7cgi35B/sGQDGqv8w0X7MoQ2GC9vedanJhuYTPaC4PUCqLQsda1w7NF+dPZmAJw==", + "requires": { + "attempt-x": "1.1.1", + "has-to-string-tag-x": "1.4.1", + "is-object-like-x": "1.6.0", + "object-get-own-property-descriptor-x": "3.2.0", + "to-string-tag-x": "1.4.2" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4302,8 +4811,7 @@ "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-dotfile": { "version": "1.0.3", @@ -4332,6 +4840,14 @@ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, + "is-falsey-x": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-falsey-x/-/is-falsey-x-1.0.1.tgz", + "integrity": "sha512-XWNZC4A+3FX1ECoMjspuEFgSdio82IWjqY/suE0gZ10QA7nzHd/KraRq7Tc5VEHtFRgTRyTdY6W+ykPrDnyoAQ==", + "requires": { + "to-boolean-x": "1.0.1" + } + }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", @@ -4341,11 +4857,19 @@ "number-is-nan": "1.0.1" } }, + "is-finite-x": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-finite-x/-/is-finite-x-3.0.2.tgz", + "integrity": "sha512-HyFrxJZsgmP5RtR1PVlVvHSP4VslZOqr4uoq4x3rDrSOFaYp4R9tfmiWtAzQxPzixXhac3cYEno3NuVn0OHk2Q==", + "requires": { + "infinity-x": "1.0.0", + "is-nan-x": "1.0.1" + } + }, "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=", - "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -4355,6 +4879,21 @@ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" }, + "is-function-x": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/is-function-x/-/is-function-x-3.3.0.tgz", + "integrity": "sha512-SreSSU1dlgYaXR5c0mm4qJHKYHIiGiEY+7Cd8/aRLLoMP/VvofD2XcWgBnP833ajpU5XzXbUSpfysnfKZLJFlg==", + "requires": { + "attempt-x": "1.1.1", + "has-to-string-tag-x": "1.4.1", + "is-falsey-x": "1.0.1", + "is-primitive": "2.0.0", + "normalize-space-x": "3.0.0", + "replace-comments-x": "2.0.0", + "to-boolean-x": "1.0.1", + "to-string-tag-x": "1.4.2" + } + }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -4369,6 +4908,32 @@ "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" }, + "is-index-x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-index-x/-/is-index-x-1.1.0.tgz", + "integrity": "sha512-qULKLMepQLGC8rSVdi8uF2vI4LiDrU9XSDg1D+Aa657GIB7GV1jHpga7uXgQvkt/cpQ5mVBHUFTpSehYSqT6+A==", + "requires": { + "math-clamp-x": "1.2.0", + "max-safe-integer": "1.0.1", + "to-integer-x": "3.0.0", + "to-number-x": "2.0.0", + "to-string-symbols-supported-x": "1.0.0" + } + }, + "is-nan-x": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-nan-x/-/is-nan-x-1.0.1.tgz", + "integrity": "sha512-VfNJgfuT8USqKCYQss8g7sFvCzDnL+OOVMQoXhVoulZAyp0ZTj3oyZaaPrn2dxepAkKSQI2BiKHbBabX1DqVtw==" + }, + "is-nil-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-nil-x/-/is-nil-x-1.4.1.tgz", + "integrity": "sha512-cfTKWI5iSR04SSCzzugTH5tS2rYG7kwI8yl/AqWkyuxZ7k55cbA47Y7Lezdg1N9aaELd+UxLg628bdQeNQ6BUw==", + "requires": { + "lodash.isnull": "3.0.0", + "validate.io-undefined": "1.0.3" + } + }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -4378,6 +4943,15 @@ "kind-of": "3.2.2" } }, + "is-object-like-x": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.6.0.tgz", + "integrity": "sha512-mc3dBMv1jEOdk0f1i2RkJFsZDux0MuHqGwHOoRo770ShUOf4VE6tWThAW8dAZARr9a5RN+iNX1yzMDA5ad1clQ==", + "requires": { + "is-function-x": "3.3.0", + "is-primitive": "2.0.0" + } + }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -4426,8 +5000,12 @@ "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { "version": "1.0.4", @@ -4443,11 +5021,20 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", + "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=" + }, "is-symbol": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-utf8": { "version": "0.2.1", @@ -4464,8 +5051,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -4491,6 +5077,11 @@ "whatwg-fetch": "2.0.3" } }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -4506,6 +5097,12 @@ "esprima": "4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", @@ -4518,12 +5115,30 @@ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", "dev": true }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "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=" + }, "json3": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", @@ -4533,8 +5148,30 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } }, "jss": { "version": "8.1.0", @@ -4618,6 +5255,43 @@ "css-vendor": "0.3.8" } }, + "jszip": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "requires": { + "core-js": "2.3.0", + "es6-promise": "3.0.2", + "lie": "3.1.1", + "pako": "1.0.6", + "readable-stream": "2.0.6" + }, + "dependencies": { + "core-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=" + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "keycode": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz", @@ -4653,6 +5327,93 @@ "invert-kv": "1.0.0" } }, + "level": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/level/-/level-2.1.1.tgz", + "integrity": "sha512-jhsItEs/L5bf5ctKsvIPcMzeh4nwXxnL3Tsxm4E9My07jcFfqEYwKP57Y9AZu7tmtECdyK6bvCqoClwuOBuY9w==", + "requires": { + "level-packager": "2.1.0", + "leveldown": "2.1.1" + } + }, + "level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + }, + "level-errors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz", + "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==", + "requires": { + "errno": "0.1.4" + } + }, + "level-iterator-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-2.0.0.tgz", + "integrity": "sha512-TWOYw8HR5mhj6xwoVLo0yu26RPL6v28KgvhK1kY1CJf9LyL+rJXjx99zhORTYhN9ysOBIH+iaxAiqRteA+C1/g==", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "level-packager": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-2.1.0.tgz", + "integrity": "sha512-I97zvGOZ6fJ9OFfYv+QmgBpDWbC+UaP5ERJ3oraTyk1v+ABAL4tazris5ym5qL2iLe+qNjXNM/iP8LQcoZMEWw==", + "requires": { + "encoding-down": "3.0.1", + "levelup": "2.0.1" + } + }, + "level-write-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", + "integrity": "sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=", + "requires": { + "end-stream": "0.1.0" + } + }, + "leveldown": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-2.1.1.tgz", + "integrity": "sha512-JNMCTSchq1YtQLMGePmT07UE7hIIYR4GHpZI7+nUXbM9XgNtRAwcBGhnyJyITwpTILTkUcNPBKZ9lZmTUj2E3g==", + "requires": { + "abstract-leveldown": "3.0.0", + "bindings": "1.3.0", + "fast-future": "1.0.2", + "nan": "2.8.0", + "prebuild-install": "2.4.1" + }, + "dependencies": { + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=" + } + } + }, + "levelup": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-2.0.1.tgz", + "integrity": "sha1-PckbPmMtN8nlRiOchkEYsATJ+GA=", + "requires": { + "deferred-leveldown": "2.0.3", + "level-errors": "1.1.2", + "level-iterator-stream": "2.0.0", + "xtend": "4.0.1" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "3.0.6" + } + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -4675,7 +5436,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, "requires": { "big.js": "3.2.0", "emojis-list": "2.1.0", @@ -4705,6 +5465,16 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, + "lodash-es": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz", + "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=" + }, + "lodash.isnull": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnull/-/lodash.isnull-3.0.0.tgz", + "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4=" + }, "lodash.merge": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", @@ -4761,6 +5531,19 @@ "yallist": "2.1.2" } }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "requires": { + "es5-ext": "0.10.35" + } + }, + "ltgt": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.0.tgz", + "integrity": "sha1-tlul/LNJopkkyOMz98alVi8uSEI=" + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -4828,6 +5611,28 @@ } } }, + "math-clamp-x": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/math-clamp-x/-/math-clamp-x-1.2.0.tgz", + "integrity": "sha512-tqpjpBcIf9UulApz3EjWXqTZpMlr2vLN9PryC9ghoyCuRmqZaf3JJhPddzgQpJnKLi2QhoFnvKBFtJekAIBSYg==", + "requires": { + "to-number-x": "2.0.0" + } + }, + "math-sign-x": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/math-sign-x/-/math-sign-x-3.0.0.tgz", + "integrity": "sha512-OzPas41Pn4d16KHnaXmGxxY3/l3zK4OIXtmIwdhgZsxz4FDDcNnbrABYPg2vGfxIkaT9ezGnzDviRH7RfF44jQ==", + "requires": { + "is-nan-x": "1.0.1", + "to-number-x": "2.0.0" + } + }, + "max-safe-integer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz", + "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA=" + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -4864,6 +5669,60 @@ "mimic-fn": "1.1.0" } }, + "memoizee": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", + "integrity": "sha1-TsoNiu057J0Bf0xcLy9kMvQuXI8=", + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.35", + "es6-weak-map": "0.1.4", + "event-emitter": "0.3.5", + "lru-queue": "0.1.0", + "next-tick": "0.2.2", + "timers-ext": "0.1.2" + }, + "dependencies": { + "d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", + "requires": { + "es5-ext": "0.10.35" + } + }, + "es6-iterator": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", + "integrity": "sha1-1vWLjE/EE8JJtLqhl2j45NfIlE4=", + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.35", + "es6-symbol": "2.0.1" + } + }, + "es6-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", + "integrity": "sha1-dhtcZ8/U8dGK+yNPaR1nhoLLO/M=", + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.35" + } + }, + "es6-weak-map": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", + "integrity": "sha1-cGzvnpmqI2undmwjnIueKG6n0ig=", + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.35", + "es6-iterator": "0.1.3", + "es6-symbol": "2.0.1" + } + } + } + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -5082,6 +5941,11 @@ "dev": true, "optional": true }, + "nan-x": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nan-x/-/nan-x-1.0.0.tgz", + "integrity": "sha512-yw4Fhe2/UTzanQ4f0yHWkRnfTuHZFAi4GZDjXS4G+qv5BqXTqPJBbSxpa7MyyW9v4Y4ZySZQik1vcbNkhdnIOg==" + }, "ncname": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", @@ -5096,6 +5960,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "next-tick": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", + "integrity": "sha1-ddpKkn7liH45BliABltzNkE7MQ0=" + }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", @@ -5105,6 +5974,14 @@ "lower-case": "1.1.4" } }, + "node-abi": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.1.2.tgz", + "integrity": "sha512-hmUtb8m75RSi7N+zZLYqe75XDvZB+6LyTBPkj2DConvNgQet2e3BIqEwe1LLvqMrfyjabuT5ZOrTioLCH1HTdA==", + "requires": { + "semver": "5.4.1" + } + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -5151,6 +6028,11 @@ "vm-browserify": "0.0.4" } }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, "normalize-jss": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/normalize-jss/-/normalize-jss-4.0.0.tgz", @@ -5178,6 +6060,21 @@ "remove-trailing-separator": "1.0.2" } }, + "normalize-space-x": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-space-x/-/normalize-space-x-3.0.0.tgz", + "integrity": "sha512-tbCJerqZCCHPst4rRKgsTanLf45fjOyeAU5zE3mhDxJtFJKt66q39g2XArWhXelgTFVib8mNBUm6Wrd0LxYcfQ==", + "requires": { + "cached-constructors-x": "1.0.0", + "trim-x": "3.0.0", + "white-space-x": "3.0.0" + } + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -5187,6 +6084,17 @@ "path-key": "2.0.1" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, "nth-check": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", @@ -5199,14 +6107,35 @@ "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=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-get-own-property-descriptor-x": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz", + "integrity": "sha512-Z/0fIrptD9YuzN+SNK/1kxAEaBcPQM4gSrtOSMSi9eplnL/AbyQcAyAlreAoAzmBon+DQ1Z+AdhxyQSvav5Fyg==", + "requires": { + "attempt-x": "1.1.1", + "has-own-property-x": "3.2.0", + "has-symbol-support-x": "1.4.1", + "is-falsey-x": "1.0.1", + "is-index-x": "1.1.0", + "is-primitive": "2.0.0", + "is-string": "1.0.4", + "property-is-enumerable-x": "1.1.0", + "to-object-x": "1.5.0", + "to-property-key-x": "2.0.2" + } + }, "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", @@ -5247,7 +6176,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1.0.2" } @@ -5296,8 +6224,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "2.1.0", @@ -5357,8 +6284,7 @@ "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, "param-case": { "version": "2.1.1", @@ -5394,6 +6320,17 @@ "is-glob": "2.0.1" } }, + "parse-int-x": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-int-x/-/parse-int-x-2.0.0.tgz", + "integrity": "sha512-NIMm52gmd1+0qxJK8lV3OZ4zzWpRH1xcz9xCHXl+DNzddwUdS4NEtd7BmTeK7iCIXoaK5e6BoDMHgieH2eNIhg==", + "requires": { + "cached-constructors-x": "1.0.0", + "nan-x": "1.0.0", + "to-string-x": "1.4.2", + "trim-left-x": "3.0.0" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -5468,6 +6405,21 @@ "sha.js": "2.4.9" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "pepjs": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/pepjs/-/pepjs-0.4.3.tgz", + "integrity": "sha1-FggOlwqud5kTdWwtrviOqnSG30E=" + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -5517,6 +6469,97 @@ } } }, + "pouchdb": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-6.4.1.tgz", + "integrity": "sha512-7YrhsBXbQh/iPA8O5Nzixi9QigaQJjqbbCFr+D7Kc258oeXNW9a0t/tOME1Lh84TJiFRuN9982FGVnrBrUhLiA==", + "requires": { + "argsarray": "0.0.1", + "buffer-from": "0.1.1", + "clone-buffer": "1.0.0", + "debug": "3.0.1", + "double-ended-queue": "2.1.0-0", + "immediate": "3.0.6", + "inherits": "2.0.3", + "level": "2.1.1", + "level-codec": "7.0.1", + "level-write-stream": "1.0.0", + "leveldown": "2.1.1", + "levelup": "2.0.1", + "lie": "3.1.1", + "ltgt": "2.2.0", + "readable-stream": "1.0.33", + "request": "2.80.0", + "spark-md5": "3.0.0", + "through2": "2.0.3", + "uuid": "3.2.1", + "vuvuzela": "1.0.3" + }, + "dependencies": { + "debug": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz", + "integrity": "sha512-6nVc6S36qbt/mutyt+UGMnawAMrPDZUPQjRZI3FS9tCtDRhvxJbK79unYBLPi+z5SLXQ3ftoVBFCblQtNSls8w==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", + "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + } + } + }, + "prebuild-install": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.4.1.tgz", + "integrity": "sha512-99TyEFYTTkBWANT+mwSptmLb9ZCLQ6qKIUE36fXSIOtShB0JNprL2hzBD8F1yIuT9btjFrFEwbRHXhqDi1HmRA==", + "requires": { + "expand-template": "1.1.0", + "github-from-package": "0.0.0", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "node-abi": "2.1.2", + "noop-logger": "0.1.1", + "npmlog": "4.1.2", + "os-homedir": "1.0.2", + "pump": "1.0.3", + "rc": "1.2.4", + "simple-get": "1.4.3", + "tar-fs": "1.16.0", + "tunnel-agent": "0.6.0", + "xtend": "4.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", @@ -5536,8 +6579,7 @@ "private": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", - "dev": true + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=" }, "process": { "version": "0.11.10", @@ -5548,8 +6590,7 @@ "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 + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "promise": { "version": "7.3.1", @@ -5569,6 +6610,15 @@ "object-assign": "4.1.1" } }, + "property-is-enumerable-x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz", + "integrity": "sha512-22cKy3w3OpRswU6to9iKWDDlg+F9vF2REcwGlGW23jyLjHb1U/jJEWA44sWupOnkhGfDgotU6Lw+N2oyhNi+5A==", + "requires": { + "to-object-x": "1.5.0", + "to-property-key-x": "2.0.2" + } + }, "proptypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proptypes/-/proptypes-1.1.0.tgz", @@ -5586,8 +6636,7 @@ "prr": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" }, "pseudomap": { "version": "1.0.2", @@ -5608,11 +6657,19 @@ "randombytes": "2.0.5" } }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { "version": "6.5.1", @@ -5647,6 +6704,26 @@ "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", "dev": true }, + "raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", + "requires": { + "performance-now": "2.1.0" + }, + "dependencies": { + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + } + } + }, + "ramda": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz", + "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=" + }, "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", @@ -5729,6 +6806,24 @@ "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", "dev": true }, + "rc": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.4.tgz", + "integrity": "sha1-oPYGyq4qO4YrvQ74VILAElsxX6M=", + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "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=" + } + } + }, "react": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/react/-/react-16.1.0.tgz", @@ -5799,6 +6894,45 @@ "theming": "1.1.0" } }, + "react-notification-system": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/react-notification-system/-/react-notification-system-0.2.16.tgz", + "integrity": "sha1-m52iCw00eGtgBXxStCUW6hKVN0o=", + "requires": { + "create-react-class": "15.6.2", + "object-assign": "4.1.1", + "prop-types": "15.6.0" + } + }, + "react-notification-system-redux": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-notification-system-redux/-/react-notification-system-redux-1.2.0.tgz", + "integrity": "sha1-FPsJFccuTBLZmD/+ByVOLNGexd8=", + "requires": { + "prop-types": "15.6.0", + "react-notification-system": "0.2.16" + } + }, + "react-redux": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.6.tgz", + "integrity": "sha512-8taaaGu+J7PMJQDJrk/xiWEYQmdo3mkXw6wPr3K3LxvXis3Fymiq7c13S+Tpls/AyNUAsoONkU81AP0RA6y6Vw==", + "requires": { + "hoist-non-react-statics": "2.3.1", + "invariant": "2.2.2", + "lodash": "4.17.4", + "lodash-es": "4.17.4", + "loose-envify": "1.3.1", + "prop-types": "15.6.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", + "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" + } + } + }, "react-resize-detector": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-1.1.0.tgz", @@ -5807,6 +6941,15 @@ "prop-types": "15.6.0" } }, + "react-svg-inline": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-svg-inline/-/react-svg-inline-2.0.1.tgz", + "integrity": "sha512-9YVqJ80g1gPWAvD9CS/z4cKPD45ZSMjjzwxFAmQJiMEoAo1Ajhz92WirXag3ftltDN5lPNkVWx/KOnEWB/PaMQ==", + "requires": { + "classnames": "2.2.5", + "prop-types": "15.6.0" + } + }, "react-tap-event-plugin": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/react-tap-event-plugin/-/react-tap-event-plugin-3.0.2.tgz", @@ -5864,7 +7007,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -5915,23 +7057,47 @@ "strip-indent": "1.0.1" } }, + "redux-form": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.2.0.tgz", + "integrity": "sha512-qbgeI19drwnm9FeGAotDA1vsZO8q94XF7IxPDuJmSXxDYX2rqzhND6NROahCBJfBK5xM1cchvmgscO2rry1EEw==", + "requires": { + "deep-equal": "1.0.1", + "es6-error": "4.1.1", + "hoist-non-react-statics": "2.3.1", + "invariant": "2.2.2", + "is-promise": "2.1.0", + "lodash": "4.17.4", + "lodash-es": "4.17.4", + "prop-types": "15.6.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", + "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" + } + } + }, + "redux-undo": { + "version": "1.0.0-beta9-9-7", + "resolved": "https://registry.npmjs.org/redux-undo/-/redux-undo-1.0.0-beta9-9-7.tgz", + "integrity": "sha1-/juqGycUI9fdu/w6gscbApotuLo=" + }, "regenerate": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" }, "regenerator-runtime": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" }, "regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.25.0", @@ -5952,7 +7118,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, "requires": { "regenerate": "1.3.3", "regjsgen": "0.2.0", @@ -5962,14 +7127,12 @@ "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" }, "regjsparser": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, "requires": { "jsesc": "0.5.0" }, @@ -5977,8 +7140,7 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" } } }, @@ -6036,6 +7198,69 @@ "is-finite": "1.0.2" } }, + "replace-comments-x": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-comments-x/-/replace-comments-x-2.0.0.tgz", + "integrity": "sha512-+vMP4jqU+8HboLWms6YMNEiaZG5hh1oR6ENCnGYDF/UQ7aYiJUK/8tcl3+KZAHRCKKa3gqzrfiarlUBHQSgRlg==", + "requires": { + "require-coercible-to-string-x": "1.0.0", + "to-string-x": "1.4.2" + } + }, + "request": { + "version": "2.80.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.80.0.tgz", + "integrity": "sha1-jMFi1215OBze/dNQXXa4C2BYm9A=", + "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.17", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.4.3", + "uuid": "3.2.1" + }, + "dependencies": { + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=" + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + } + } + }, + "require-coercible-to-string-x": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.0.tgz", + "integrity": "sha512-Rpfd4sMdflPAKecdKhfAtQHlZzzle4UMUgxJ01hXtTcNWMV8w9GeZnKhEyrT73kgrflBOP1zg41amUPZGcNspA==", + "requires": { + "require-object-coercible-x": "1.4.1", + "to-string-x": "1.4.2" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6048,12 +7273,25 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, + "require-object-coercible-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/require-object-coercible-x/-/require-object-coercible-x-1.4.1.tgz", + "integrity": "sha512-0YHa2afepsLfQvwQ1P2XvDZnGOUia5sC07ZijIRU2dnsRxnuilXWF6B2CFaKGDA9eZl39lJHrXCDsnfgroRd6Q==", + "requires": { + "is-nil-x": "1.4.1" + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, + "reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" + }, "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", @@ -6129,8 +7367,7 @@ "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" }, "send": { "version": "0.16.1", @@ -6207,8 +7444,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-immediate-shim": { "version": "1.0.1", @@ -6259,20 +7495,37 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-assign": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/simple-assign/-/simple-assign-0.1.0.tgz", "integrity": "sha1-F/0wZqXz13OPUDIbsPFMooHMS6o=" }, + "simple-get": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", + "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", + "requires": { + "once": "1.4.0", + "unzip-response": "1.0.2", + "xtend": "4.0.1" + } + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, "sockjs": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", @@ -6317,8 +7570,7 @@ "source-map": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" }, "source-map-support": { "version": "0.4.15", @@ -6329,6 +7581,11 @@ "source-map": "0.5.6" } }, + "spark-md5": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", + "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" + }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", @@ -6385,6 +7642,28 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, "statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", @@ -6455,11 +7734,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, "requires": { "safe-buffer": "5.1.1" } }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -6489,6 +7772,11 @@ "get-stdin": "4.0.1" } }, + "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=" + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -6505,6 +7793,28 @@ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", "dev": true }, + "tar-fs": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz", + "integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg==", + "requires": { + "chownr": "1.0.1", + "mkdirp": "0.5.1", + "pump": "1.0.3", + "tar-stream": "1.5.5" + } + }, + "tar-stream": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", + "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.1", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, "theming": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/theming/-/theming-1.1.0.tgz", @@ -6536,6 +7846,18 @@ "resolved": "https://registry.npmjs.org/three/-/three-0.88.0.tgz", "integrity": "sha1-QlbC/Djk+yOg0j66K2zOTfjkZtU=" }, + "three-js-csg": { + "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, "thunky": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", @@ -6557,23 +7879,146 @@ "setimmediate": "1.0.5" } }, + "timers-ext": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", + "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", + "requires": { + "es5-ext": "0.10.35", + "next-tick": "1.0.0" + }, + "dependencies": { + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + } + } + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, + "to-boolean-x": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-boolean-x/-/to-boolean-x-1.0.1.tgz", + "integrity": "sha512-PstxY3K6hVEHnY3FITs8XBoJbt0RI1e4MLIhAL9hWa3BtVLCrb86vU5z6lEKh7uZZjiPiLqIKMmfMro1nNgtXQ==" + }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, + "to-integer-x": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-integer-x/-/to-integer-x-3.0.0.tgz", + "integrity": "sha512-794L2Lpwjtynm7RxahJi2YdbRY75gTxUW27TMuN26UgwPkmJb/+HPhkFEFbz+E4vNoiP0dxq5tq5fkXoXLaK/w==", + "requires": { + "is-finite-x": "3.0.2", + "is-nan-x": "1.0.1", + "math-sign-x": "3.0.0", + "to-number-x": "2.0.0" + } + }, + "to-number-x": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-number-x/-/to-number-x-2.0.0.tgz", + "integrity": "sha512-lGOnCoccUoSzjZ/9Uen8TC4+VFaQcFGhTroWTv2tYWxXgyJV1zqAZ8hEIMkez/Eo790fBMOjidTnQ/OJSCvAoQ==", + "requires": { + "cached-constructors-x": "1.0.0", + "nan-x": "1.0.0", + "parse-int-x": "2.0.0", + "to-primitive-x": "1.1.0", + "trim-x": "3.0.0" + } + }, + "to-object-x": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/to-object-x/-/to-object-x-1.5.0.tgz", + "integrity": "sha512-AKn5GQcdWky+s20vjWkt+Wa6y3dxQH3yQyMBhOfBOPldUwqwhgvlqcIg5H092ntNc+TX8/Cxzs1kMHH19pyCnA==", + "requires": { + "cached-constructors-x": "1.0.0", + "require-object-coercible-x": "1.4.1" + } + }, + "to-primitive-x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-primitive-x/-/to-primitive-x-1.1.0.tgz", + "integrity": "sha512-gyMY0gi3wjK3e4MUBKqv9Zl8QGcWguIkaUr2VJmoBEsOpDcpDZSEyljR773eVG4maS48uX7muLkoQoh/BA82OQ==", + "requires": { + "has-symbol-support-x": "1.4.1", + "is-date-object": "1.0.1", + "is-function-x": "3.3.0", + "is-nil-x": "1.4.1", + "is-primitive": "2.0.0", + "is-symbol": "1.0.1", + "require-object-coercible-x": "1.4.1", + "validate.io-undefined": "1.0.3" + } + }, + "to-property-key-x": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-property-key-x/-/to-property-key-x-2.0.2.tgz", + "integrity": "sha512-YISLpZFYIazNm0P8hLsKEEUEZ3m8U3+eDysJZqTu3+B9tQp+2TrMpaEGT8Agh4fZ5LSoums60/glNEzk5ozqrg==", + "requires": { + "has-symbol-support-x": "1.4.1", + "to-primitive-x": "1.1.0", + "to-string-x": "1.4.2" + } + }, + "to-string-symbols-supported-x": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.0.tgz", + "integrity": "sha512-HbVH673pybrUmhzESGHUm17BBJvqb7BU8HciOvuEYm9ipuDyjmddhvkVqpVW6sM/C5/zhJo17n7O7I/24loJIQ==", + "requires": { + "cached-constructors-x": "1.0.0", + "has-symbol-support-x": "1.4.1", + "is-symbol": "1.0.1" + } + }, + "to-string-tag-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/to-string-tag-x/-/to-string-tag-x-1.4.2.tgz", + "integrity": "sha512-ytO9eLigxsQQLGuab0C1iSSTzKdJNVSlBg0Spg4J/rGAVrQJ5y774mo0SSzgGeTT4RJGGyJNfObXaTMzX0XDOQ==", + "requires": { + "lodash.isnull": "3.0.0", + "validate.io-undefined": "1.0.3" + } + }, + "to-string-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/to-string-x/-/to-string-x-1.4.2.tgz", + "integrity": "sha512-/WP5arlwtCpAAexCCHiQBW0eXwse84osWyP1Qtaz71nsYSuUpOkT6tBm8nQ4IIUfSh5hji0hDupUCD2xbbOL6A==", + "requires": { + "is-symbol": "1.0.1" + } + }, "toposort": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", "dev": true }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "requires": { + "punycode": "1.4.1" + } + }, + "trim-left-x": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-left-x/-/trim-left-x-3.0.0.tgz", + "integrity": "sha512-+m6cqkppI+CxQBTwWEZliOHpOBnCArGyMnS1WCLb6IRgukhTkiQu/TNEN5Lj2eM9jk8ewJsc7WxFZfmwNpRXWQ==", + "requires": { + "cached-constructors-x": "1.0.0", + "require-coercible-to-string-x": "1.0.0", + "white-space-x": "3.0.0" + } + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -6586,12 +8031,45 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "trim-right-x": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-right-x/-/trim-right-x-3.0.0.tgz", + "integrity": "sha512-iIqEsWEbWVodqdixJHi4FoayJkUxhoL4AvSNGp4FF4FfQKRPGizt8++/RnyC9od75y7P/S6EfONoVqP+NddiKA==", + "requires": { + "cached-constructors-x": "1.0.0", + "require-coercible-to-string-x": "1.0.0", + "white-space-x": "3.0.0" + } + }, + "trim-x": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-x/-/trim-x-3.0.0.tgz", + "integrity": "sha512-w8s38RAUScQ6t3XqMkS75iz5ZkIYLQpVnv2lp3IuTS36JdlVzC54oe6okOf4Wz3UH4rr3XAb2xR3kR5Xei82fw==", + "requires": { + "trim-left-x": "3.0.0", + "trim-right-x": "3.0.0" + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", @@ -6677,6 +8155,11 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" + }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -6755,8 +8238,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utila": { "version": "0.4.0", @@ -6784,6 +8266,11 @@ "user-home": "1.1.1" } }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + }, "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", @@ -6794,11 +8281,33 @@ "spdx-expression-parse": "1.0.4" } }, + "validate.io-undefined": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-undefined/-/validate.io-undefined-1.0.3.tgz", + "integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q=" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -6808,6 +8317,11 @@ "indexof": "0.0.1" } }, + "vuvuzela": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", + "integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws=" + }, "warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", @@ -7144,6 +8658,31 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "white-space-x": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/white-space-x/-/white-space-x-3.0.0.tgz", + "integrity": "sha512-nMPVXGMdi/jQepXKryxqzEh/vCwdOYY/u6NZy40glMHvZfEr7/+vQKnDhEq4rZ1nniOFq9GWohQYB30uW/5Olg==" + }, + "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==", + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -7192,8 +8731,22 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-stream": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", + "integrity": "sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=", + "requires": { + "readable-stream": "0.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", + "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=" + } + } }, "ws": { "version": "4.0.0", @@ -7214,8 +8767,7 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "3.2.1", @@ -7299,6 +8851,15 @@ } } }, + "yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.0.1" + } + }, "yml-loader": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/yml-loader/-/yml-loader-2.1.0.tgz", From 961337138ba0303386f2f7bf4ebf604115da8747 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 12:38:35 +0100 Subject: [PATCH 047/163] fix grid size calculation --- src/sliceActions/generateInfills.js | 2 +- src/sliceActions/getFillTemplate.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sliceActions/generateInfills.js b/src/sliceActions/generateInfills.js index 20335fd..e741493 100644 --- a/src/sliceActions/generateInfills.js +++ b/src/sliceActions/generateInfills.js @@ -22,7 +22,7 @@ export default function generateInfills(slices, settings) { const bottomSkinCount = Math.ceil(bottomThickness / layerHeight); const topSkinCount = Math.ceil(topThickness / layerHeight); const nozzleRadius = nozzleDiameter / 2; - const outerFillTemplateSize = Math.sqrt(2 * Math.pow(nozzleDiameter, 2)); + const outerFillTemplateSize = nozzleDiameter; for (let layer = 0; layer < slices.length; layer ++) { const slice = slices[layer]; diff --git a/src/sliceActions/getFillTemplate.js b/src/sliceActions/getFillTemplate.js index 98ee8be..6b3db95 100644 --- a/src/sliceActions/getFillTemplate.js +++ b/src/sliceActions/getFillTemplate.js @@ -1,8 +1,10 @@ import Shape from 'clipper-js'; -export default function getFillTemplate(bounds, size, even, uneven) { +export default function getFillTemplate(bounds, gridSize, even, uneven) { const paths = []; + const size = Math.sqrt(2 * Math.pow(gridSize, 2)); + const left = Math.floor(bounds.left / size) * size; const right = Math.ceil(bounds.right / size) * size; const top = Math.floor(bounds.top / size) * size; From 198ca783f7fa31f3e33399091ddb2f280b92944e Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 13:59:42 +0100 Subject: [PATCH 048/163] update package lock --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 927312f..da8be14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,6 +79,9 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz", "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==" + }, + "three-js-csg": { + "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" } } }, @@ -7846,9 +7849,6 @@ "resolved": "https://registry.npmjs.org/three/-/three-0.88.0.tgz", "integrity": "sha1-QlbC/Djk+yOg0j66K2zOTfjkZtU=" }, - "three-js-csg": { - "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" - }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", From 60c70cdbd5bf13f9ea1445a1a57d06dc63afd88a Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 14:02:34 +0100 Subject: [PATCH 049/163] difference line shapes with fill shapes --- src/sliceActions/shapesToSlices.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/sliceActions/shapesToSlices.js b/src/sliceActions/shapesToSlices.js index a6ace31..71d3ab7 100644 --- a/src/sliceActions/shapesToSlices.js +++ b/src/sliceActions/shapesToSlices.js @@ -27,14 +27,16 @@ export default function shapesToSlices(shapes, settings) { for (let i = 0; i < fillShapes.length; i ++) { const fillShape = fillShapes[i]; + if (fillShape.paths.length === 0) continue; + slice.add(fillShape, true); - // if (lineShapesClosed.paths.length > 0) { - // lineShapesClosed = lineShapesClosed.difference(closedShape); - // } - // if (lineShapesOpen.paths.length > 0) { - // lineShapesOpen = lineShapesOpen.difference(closedShape); - // } + if (lineShapesClosed.paths.length > 0) { + lineShapesClosed = lineShapesClosed.difference(fillShape); + } + if (lineShapesOpen.paths.length > 0) { + lineShapesOpen = lineShapesOpen.difference(fillShape); + } } if (lineShapesClosed.paths.length > 0) { From 0bb646a5ac994aa4e6b1eb8a9e7642c553db5b5b Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 14:24:01 +0100 Subject: [PATCH 050/163] move z offset to constant --- src/constants.js | 1 + src/settings/default.yml | 1 - src/sliceActions/calculateLayersIntersections.js | 13 +++++++------ src/sliceActions/slicesToGCode.js | 7 +++---- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/constants.js b/src/constants.js index f8b06f8..828d62e 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,3 +1,4 @@ export const PRECISION = 0.01; export const VERSION = '0.0.18'; export const LOCAL_STORAGE_KEY = 'PRINTER_SETTINGS'; +export const Z_OFFSET = 0.3; diff --git a/src/settings/default.yml b/src/settings/default.yml index f69d507..84806ad 100644 --- a/src/settings/default.yml +++ b/src/settings/default.yml @@ -1,4 +1,3 @@ -zOffset: 0.3 dimensions: x: 200 y: 200 diff --git a/src/sliceActions/calculateLayersIntersections.js b/src/sliceActions/calculateLayersIntersections.js index c077bd9..a9c2ddd 100644 --- a/src/sliceActions/calculateLayersIntersections.js +++ b/src/sliceActions/calculateLayersIntersections.js @@ -1,11 +1,12 @@ +import { Z_OFFSET } from '../constants.js'; + export default function calculateLayersIntersections(lines, settings) { const { dimensions: { z: dimensionsZ }, - layerHeight, - zOffset + layerHeight } = settings; - const numLayers = Math.floor((dimensionsZ - zOffset) / layerHeight); + const numLayers = Math.floor((dimensionsZ - Z_OFFSET) / layerHeight); const layers = Array.from(Array(numLayers)).map(() => ({ points: {}, @@ -15,12 +16,12 @@ export default function calculateLayersIntersections(lines, settings) { for (let lineIndex = 0; lineIndex < lines.length; lineIndex ++) { const { line, faces } = lines[lineIndex]; - const min = Math.ceil((Math.min(line.start.y, line.end.y) - zOffset) / layerHeight); - const max = Math.floor((Math.max(line.start.y, line.end.y) - zOffset) / layerHeight); + const min = Math.ceil((Math.min(line.start.y, line.end.y) - Z_OFFSET) / layerHeight); + const max = Math.floor((Math.max(line.start.y, line.end.y) - Z_OFFSET) / layerHeight); for (let layerIndex = min; layerIndex <= max; layerIndex ++) { if (layerIndex >= 0 && layerIndex < numLayers) { - const y = layerIndex * layerHeight + zOffset; + const y = layerIndex * layerHeight + Z_OFFSET; let x, z; if (line.start.y === line.end.y) { diff --git a/src/sliceActions/slicesToGCode.js b/src/sliceActions/slicesToGCode.js index cbc38a2..14070b1 100644 --- a/src/sliceActions/slicesToGCode.js +++ b/src/sliceActions/slicesToGCode.js @@ -1,6 +1,6 @@ import GCode from './helpers/GCode.js'; import comb from './helpers/comb.js'; -import { PRECISION } from '../constants.js'; +import { PRECISION, Z_OFFSET } from '../constants.js'; const PROFILE_TYPES = ['support', 'innerShell', 'outerShell', 'innerInfill', 'outerInfill', 'brim']; @@ -12,8 +12,7 @@ export default function slicesToGCode(slices, settings) { travelSpeed, retraction, travel, - combing, - zOffset + combing } = settings; const filamentSurfaceArea = Math.pow((filamentThickness / 2), 2) * Math.PI; @@ -32,7 +31,7 @@ export default function slicesToGCode(slices, settings) { let isFirstLayer = true; for (let layer = 0; layer < slices.length; layer ++) { const slice = slices[layer]; - const z = layer * layerHeight + zOffset; + const z = layer * layerHeight + Z_OFFSET; if (layer === 1) { gcode.turnFanOn(); From ca3718e4925a686a0a4c22655175d875c486ec79 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 15:27:08 +0100 Subject: [PATCH 051/163] Remove tiny holes #18 --- package-lock.json | 16 ++++++++-------- package.json | 2 +- src/constants.js | 1 + src/sliceActions/shapesToSlices.js | 3 ++- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index da8be14..8e6597c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,9 @@ "integrity": "sha512-1qXg62qaZkc/zYPan37CXvUtaJk4aFVLz2y8cqnkN9Y0r1Er5soIZ5esMz4YYyjUrQGawBoYcGvatRALYnzlvg==" }, "@doodle3d/clipper-js": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@doodle3d/clipper-js/-/clipper-js-1.0.7.tgz", - "integrity": "sha512-8Ji8rrFWZ7LAEpIp1SQZJgewxt0FUBFeDku+ZRIR5PS0Jc6Abbq5KykQLVh1zOh3oqX2Cgl+myhqMhFeZXqutA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@doodle3d/clipper-js/-/clipper-js-1.0.10.tgz", + "integrity": "sha512-BSLvOvS9ECFyV90BsG1rXPb9W/g0j+azlPu5ntohFdIyUJPIzmRNAYq4lreQKBO8FSF0e9BVGG0QX8vC6ZQa4w==", "requires": { "@doodle3d/clipper-lib": "6.4.2-b" } @@ -26,7 +26,7 @@ "version": "github:doodle3d/doodle3d-core#36a73c233e569fca79d2059a50edb6bdb511aa58", "requires": { "@doodle3d/cal": "0.0.8", - "@doodle3d/clipper-js": "1.0.7", + "@doodle3d/clipper-js": "1.0.10", "@doodle3d/fill-path": "1.0.7", "@doodle3d/potrace-js": "0.0.6", "@doodle3d/threejs-export-obj": "0.0.8", @@ -79,9 +79,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz", "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==" - }, - "three-js-csg": { - "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" } } }, @@ -90,7 +87,7 @@ "resolved": "https://registry.npmjs.org/@doodle3d/fill-path/-/fill-path-1.0.7.tgz", "integrity": "sha512-4sdgWQ28JgRsmnyy1OnuKHE+DZ8kDGpluGqFmMASh2/6dlyjp2/oXnNEgNefG4/xiEitV8AtzEij9Bijh6yNRw==", "requires": { - "@doodle3d/clipper-js": "1.0.7" + "@doodle3d/clipper-js": "1.0.10" } }, "@doodle3d/potrace-js": { @@ -7849,6 +7846,9 @@ "resolved": "https://registry.npmjs.org/three/-/three-0.88.0.tgz", "integrity": "sha1-QlbC/Djk+yOg0j66K2zOTfjkZtU=" }, + "three-js-csg": { + "version": "github:Doodle3D/three-js-csg#a36f23da6e9be2405a9094de5709cb0ae8f58045" + }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", diff --git a/package.json b/package.json index 5c07c7f..8b655e4 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "build:module:settings": "cp -r src/settings module" }, "dependencies": { - "@doodle3d/clipper-js": "^1.0.7", + "@doodle3d/clipper-js": "^1.0.10", "@doodle3d/doodle3d-core": "github:doodle3d/doodle3d-core", "babel-plugin-transform-class-properties": "^6.24.1", "file-saver": "^1.3.3", diff --git a/src/constants.js b/src/constants.js index 828d62e..2bc85da 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,4 +1,5 @@ export const PRECISION = 0.01; export const VERSION = '0.0.18'; export const LOCAL_STORAGE_KEY = 'PRINTER_SETTINGS'; +export const MIN_AREA = 25; export const Z_OFFSET = 0.3; diff --git a/src/sliceActions/shapesToSlices.js b/src/sliceActions/shapesToSlices.js index 71d3ab7..23bea79 100644 --- a/src/sliceActions/shapesToSlices.js +++ b/src/sliceActions/shapesToSlices.js @@ -1,7 +1,7 @@ import Shape from 'clipper-js'; import Slice from './helpers/Slice.js'; -import { PRECISION } from '../constants.js'; +import { PRECISION, MIN_AREA } from '../constants.js'; export default function shapesToSlices(shapes, settings) { const sliceLayers = []; @@ -11,6 +11,7 @@ export default function shapesToSlices(shapes, settings) { fillShapes = new Shape(fillShapes, true, true, true, true) .fixOrientation() + .thresholdArea(MIN_AREA / Math.pow(PRECISION, 2)) .simplify('pftNonZero') .clean(1) .seperateShapes(); From 2f04aa9c506a72f3a2ba6b087fb06b669be59943 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 15:30:08 +0100 Subject: [PATCH 052/163] fix threshold area function #18 --- src/constants.js | 2 +- src/sliceActions/shapesToSlices.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/constants.js b/src/constants.js index 2bc85da..4977e27 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,5 +1,5 @@ export const PRECISION = 0.01; export const VERSION = '0.0.18'; export const LOCAL_STORAGE_KEY = 'PRINTER_SETTINGS'; -export const MIN_AREA = 25; +export const MIN_AREA = 10; export const Z_OFFSET = 0.3; diff --git a/src/sliceActions/shapesToSlices.js b/src/sliceActions/shapesToSlices.js index 23bea79..b681a72 100644 --- a/src/sliceActions/shapesToSlices.js +++ b/src/sliceActions/shapesToSlices.js @@ -11,9 +11,9 @@ export default function shapesToSlices(shapes, settings) { fillShapes = new Shape(fillShapes, true, true, true, true) .fixOrientation() - .thresholdArea(MIN_AREA / Math.pow(PRECISION, 2)) .simplify('pftNonZero') .clean(1) + .thresholdArea(MIN_AREA / Math.pow(PRECISION, 2)) .seperateShapes(); lineShapesClosed = new Shape(lineShapesClosed, true, true, true, true) From 485f741077ec210684d7d7539db29843bf11cd98 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 15:33:12 +0100 Subject: [PATCH 053/163] change min area --- src/constants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants.js b/src/constants.js index 4977e27..17803b6 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,5 +1,5 @@ export const PRECISION = 0.01; export const VERSION = '0.0.18'; export const LOCAL_STORAGE_KEY = 'PRINTER_SETTINGS'; -export const MIN_AREA = 10; +export const MIN_AREA = 1; // holes smaller as 1mm2 get removed export const Z_OFFSET = 0.3; From f28722aec52129b0ec407c824c108dd4e505ff2e Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 18 Jan 2018 16:32:54 +0100 Subject: [PATCH 054/163] rename percentage to density --- src/interface/Settings.js | 4 ++-- src/settings/default.yml | 2 +- src/settings/quality.yml | 6 +++--- src/sliceActions/generateInfills.js | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/interface/Settings.js b/src/interface/Settings.js index b578672..ec94401 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -156,7 +156,7 @@ class Settings extends React.Component { case 'settings.innerShell.flowRate': case 'settings.outerShell.speed': case 'settings.outerShell.flowRate': - case 'settings.innerInfill.precentage': + case 'settings.innerInfill.density': case 'settings.innerInfill.speed': case 'settings.innerInfill.flowRate': case 'settings.outerInfill.speed': @@ -367,7 +367,7 @@ class Settings extends React.Component {

Inner infill

- +

Outer infill

diff --git a/src/settings/default.yml b/src/settings/default.yml index 84806ad..b3c42ec 100644 --- a/src/settings/default.yml +++ b/src/settings/default.yml @@ -38,7 +38,7 @@ outerShell: innerInfill: flowRate: 1.0 speed: 80.0 - precentage: 20.0 + density: 20.0 outerInfill: flowRate: 1.0 speed: 50.0 diff --git a/src/settings/quality.yml b/src/settings/quality.yml index 1c840bf..96134d9 100644 --- a/src/settings/quality.yml +++ b/src/settings/quality.yml @@ -15,7 +15,7 @@ low: speed: 70.0 innerInfill: speed: 80.0 - precentage: 10.0 + density: 10.0 medium: title: "Medium" layerHeight: .15 @@ -33,7 +33,7 @@ medium: speed: 40.0 innerInfill: speed: 80.0 - precentage: 10.0 + density: 10.0 high: title: "High" thickness: @@ -51,4 +51,4 @@ high: speed: 30.0 innerInfill: speed: 70.0 - precentage: 20.0 + density: 20.0 diff --git a/src/sliceActions/generateInfills.js b/src/sliceActions/generateInfills.js index e741493..6d854aa 100644 --- a/src/sliceActions/generateInfills.js +++ b/src/sliceActions/generateInfills.js @@ -5,7 +5,7 @@ import Shape from 'clipper-js'; export default function generateInfills(slices, settings) { let { layerHeight, - innerInfill: { precentage: infillPercentage }, + innerInfill: { density: infillDensity }, thickness: { top: topThickness, bottom: bottomThickness @@ -13,11 +13,11 @@ export default function generateInfills(slices, settings) { nozzleDiameter } = settings; - infillPercentage /= 100; + infillDensity /= 100; nozzleDiameter /= PRECISION; - const bidirectionalInfill = infillPercentage < 0.8; - const infillGridSize = nozzleDiameter * (bidirectionalInfill ? 2 : 1) / infillPercentage; + const bidirectionalInfill = infillDensity < 0.8; + const infillGridSize = nozzleDiameter * (bidirectionalInfill ? 2 : 1) / infillDensity; const bottomSkinCount = Math.ceil(bottomThickness / layerHeight); const topSkinCount = Math.ceil(topThickness / layerHeight); From 4dc5e4849e35f8d97e157c2020ee351427d598d4 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 22 Jan 2018 18:12:33 +0100 Subject: [PATCH 055/163] update fetch progress --- src/interface/index.js | 2 +- src/interface/utils.js | 33 +++++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/interface/index.js b/src/interface/index.js index 10b94ff..47f8bff 100644 --- a/src/interface/index.js +++ b/src/interface/index.js @@ -2,7 +2,7 @@ import * as THREE from 'three'; import _ from 'lodash'; import React from 'react'; import PropTypes from 'proptypes'; -import { centerGeometry, placeOnGround, createScene, fetchProgress, slice, TabTemplate } from './utils.js'; +import { centerGeometry, placeOnGround, createScene, slice, TabTemplate } from './utils.js'; import injectSheet from 'react-jss'; import RaisedButton from 'material-ui/RaisedButton'; import FlatButton from 'material-ui/FlatButton'; diff --git a/src/interface/utils.js b/src/interface/utils.js index 4f2b811..3dd601e 100644 --- a/src/interface/utils.js +++ b/src/interface/utils.js @@ -84,20 +84,33 @@ export function createScene({ pixelRatio, muiTheme }) { return { editorControls, scene, mesh, camera, renderer, render, box, setSize, updateCanvas, focus }; } -export function fetchProgress(url, { method = 'get', headers = {}, body = {} } = {}, onProgress) { +export function fetchProgress(url, data = {}, onProgress) { return new Promise((resolve, reject) => { + const request = new Request(url, data); const xhr = new XMLHttpRequest(); - xhr.open(method, url); - if (headers) { - for (const key in headers) { - const header = headers[key]; - xhr.setRequestHeader(key, header); - } + + xhr.onload = () => { + const { status, statusText, responseURL: url } = xhr; + resolve(new Response(xhr.response, { status, statusText, url })); + } + xhr.onerror = () => reject(new TypeError('Network request failed')); + xhr.ontimeout = () => reject(new TypeError('Network request failed')); + + xhr.open(request.method, url); + + if (request.credentials === 'include') { + xhr.withCredentials = true + } else if (request.credentials === 'omit') { + xhr.withCredentials = false } - xhr.onload = event => resolve(event.target.responseText); - xhr.onerror = reject; if (xhr.upload && onProgress) xhr.upload.onprogress = onProgress; - xhr.send(body); + if (xhr.responseType) xhr.responseType = 'blob'; + + request.headers.forEach((value, name) => { + xhr.setRequestHeader(name, value) + }); + + xhr.send(data.body); }); } From d5ea6709679acefb31c8a20e80b7d995df5ef652 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Tue, 23 Jan 2018 12:19:43 +0100 Subject: [PATCH 056/163] add ip in settings config for the doodle3d printer --- package-lock.json | 21 ++++--- package.json | 1 + src/interface/Settings.js | 56 +++++++++++------ test.js | 122 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 174 insertions(+), 26 deletions(-) create mode 100644 test.js diff --git a/package-lock.json b/package-lock.json index 8e6597c..21fcd11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,8 +54,8 @@ "react-notification-system-redux": "1.2.0", "react-redux": "5.0.6", "react-resize-detector": "1.1.0", - "react-svg-inline": "2.0.1", - "redux-form": "7.2.0", + "react-svg-inline": "2.1.0", + "redux-form": "7.2.1", "redux-undo": "1.0.0-beta9-9-7", "reselect": "3.0.1", "semver": "5.4.1", @@ -6942,9 +6942,9 @@ } }, "react-svg-inline": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/react-svg-inline/-/react-svg-inline-2.0.1.tgz", - "integrity": "sha512-9YVqJ80g1gPWAvD9CS/z4cKPD45ZSMjjzwxFAmQJiMEoAo1Ajhz92WirXag3ftltDN5lPNkVWx/KOnEWB/PaMQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-svg-inline/-/react-svg-inline-2.1.0.tgz", + "integrity": "sha512-GzRID5IcEQ8dnnaUtTb9MDTAbhuaOiVKKAVLgrCNuehHsg3DuZbe82bjc9JhmPv0zsDWhDrJwzADNgzEvE6VeQ==", "requires": { "classnames": "2.2.5", "prop-types": "15.6.0" @@ -7058,9 +7058,9 @@ } }, "redux-form": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.2.0.tgz", - "integrity": "sha512-qbgeI19drwnm9FeGAotDA1vsZO8q94XF7IxPDuJmSXxDYX2rqzhND6NROahCBJfBK5xM1cchvmgscO2rry1EEw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.2.1.tgz", + "integrity": "sha512-KWV+rq+L1QGoRSKoJXbGS8Mw2q4ta5FVyGxW5ZYnAEjXZAukvUCkqDUzobBmOqiRHvrZ3/ssEA7kJFdu7rV8+w==", "requires": { "deep-equal": "1.0.1", "es6-error": "4.1.1", @@ -8271,6 +8271,11 @@ "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" }, + "validate-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate-ip/-/validate-ip-1.0.1.tgz", + "integrity": "sha1-615PY+HRq8buRuGK4gaXv1vtBto=" + }, "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", diff --git a/package.json b/package.json index 8b655e4..473f113 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "react-resize-detector": "^1.1.0", "shortid": "^2.2.8", "three": "^0.88.0", + "validate-ip": "^1.0.1", "webpack-bundle-analyzer": "^2.9.2" }, "devDependencies": { diff --git a/src/interface/Settings.js b/src/interface/Settings.js index ec94401..d28b5ee 100644 --- a/src/interface/Settings.js +++ b/src/interface/Settings.js @@ -18,6 +18,7 @@ import materialSettings from '../settings/material.yml'; import qualitySettings from '../settings/quality.yml'; import update from 'react-addons-update'; import SettingsIcon from 'material-ui-icons/Settings'; +import validateIp from 'validate-ip'; const styles = { textFieldRow: { @@ -79,6 +80,7 @@ class Settings extends React.Component { open: false, name: '', printer: '', + ip: '', error: null }, managePrinter: { @@ -102,25 +104,22 @@ class Settings extends React.Component { let state = _.cloneDeep(this.state); - const removeAddPrinterError = () => { - state = update(state, { addPrinter: { error: { $set: null } } }); - }; - switch (fieldName) { case 'managePrinter.printer': case 'managePrinter.name': + case 'managePrinter.ip': state = _.set(state, fieldName, value); + state = update(state, { managePrinter: { error: { $set: null } } }); break; case 'addPrinter.printer': - state = update(state, { addPrinter: { printer: { $set: value } } }); - state = update(state, { addPrinter: { name: { $set: printerSettings[value].title } } }); - removeAddPrinterError(); - break; - case 'addPrinter.name': - state = update(state, { addPrinter: { name: { $set: value } } }); - removeAddPrinterError(); + case 'addPrinter.ip': + state = _.set(state, fieldName, value); + if (fieldName === 'addPrinter.printer') { + state = update(state, { addPrinter: { name: { $set: printerSettings[value].title } } }); + } + state = update(state, { addPrinter: { error: { $set: null } } }); break; case 'activePrinter': @@ -204,12 +203,13 @@ class Settings extends React.Component { constructSettings(localStorage) { if (!localStorage.active) return defaultSettings; - const { printer, material, quality, advanced } = localStorage.printers[localStorage.active].settings; + const { ip, settings: { printer, material, quality, advanced } } = localStorage.printers[localStorage.active]; let settings = { ...defaultSettings, printer, material, quality + ip }; settings = _.merge({}, settings, printerSettings[printer]); @@ -225,10 +225,14 @@ class Settings extends React.Component { } addPrinter = () => { - const { name, printer } = this.state.addPrinter; + const { name, printer, ip } = this.state.addPrinter; if (!name || !printer) { - this.setState({ addPrinter: { ...this.state.addPrinter, error: 'Please enter a name and printer' } }); + this.setState(update(this.state, { addPrinter: { error: { $set: 'Please enter a name and printer' } } })); + return; + } + if (printer === 'doodle3d_printer' && !validateIp(ip)) { + this.setState(update(this.state, { addPrinter: { error: { $set: 'Please enter a valid IP adress' } } })); return; } @@ -237,7 +241,7 @@ class Settings extends React.Component { active: id, printers: { ...this.state.localStorage.printers, - [id]: { name, settings: { printer, material: 'pla', quality: 'medium', advanced: {} } } + [id]: { name, ip, settings: { printer, material: 'pla', quality: 'medium', advanced: {} } } } }; this.setState({ localStorage }); @@ -250,11 +254,22 @@ class Settings extends React.Component { }; editPrinter = () => { - const { localStorage: { active, printers }, managePrinter: { printer, name } } = this.state; + const { localStorage: { active, printers }, managePrinter: { printer, name, ip } } = this.state; + + if (!name) { + this.setState(update(this.state, { managePrinter: { error: { $set: 'Please enter a name' } } })); + return; + } + if (printer === 'doodle3d_printer' && !validateIp(ip)) { + this.setState(update(this.state, { managePrinter: { error: { $set: 'Please enter a valid IP adress' } } })); + return; + } + const localStorage = update(this.state.localStorage, { printers: { [active]: { name: { $set: name }, + ip: { $set: ip }, settings: { printer: { $set: printer } } @@ -288,7 +303,7 @@ class Settings extends React.Component { closeAddPrinterDialog = () => this.setAddPrinterDialog(false); openAddPrinterDialog = () => this.setAddPrinterDialog(true); - setAddPrinterDialog = (open) => this.setState({ addPrinter: { name: '', printer: '', error: null, open } }); + setAddPrinterDialog = (open) => this.setState({ addPrinter: { ip: '', name: '', printer: '', error: null, open } }); closeManagePrinterDialog = () => this.setManagePrinterDialog(false); openManagePrinterDialog = () => this.setManagePrinterDialog(true); @@ -299,7 +314,9 @@ class Settings extends React.Component { managePrinter: { open, name: printers[active].name, - printer: printers[active].settings.printer + ip: printers[active].ip, + printer: printers[active].settings.printer, + error: null } }); } @@ -415,6 +432,7 @@ class Settings extends React.Component { ))} + {(addPrinter.printer === 'doodle3d_printer') && } {addPrinter.error &&

{addPrinter.error}

} + {(managePrinter.printer === 'doodle3d_printer') && } + {managePrinter.error &&

{managePrinter.error}

}
); diff --git a/test.js b/test.js new file mode 100644 index 0000000..d448d41 --- /dev/null +++ b/test.js @@ -0,0 +1,122 @@ +import 'babel-polyfill' +import React from 'react'; +import { render } from 'react-dom'; +import injectTapEventPlugin from 'react-tap-event-plugin'; +// import './fetch.js'; + +injectTapEventPlugin(); + +const IP = 'http://10.0.0.109'; +const DEFAULT_GCODE = `; Generated with Doodle3D Slicer V0.0.18 +G28 +G1 X30 Y30 +G1 X90 Y30 +G1 X30 Y30 +G1 X90 Y30 +G1 X30 Y30 +G1 X90 Y30 +G1 X30 Y30 +G1 X90 Y30 +G1 X30 Y30 +G1 X90 Y30 +G1 X30 Y30 +G1 X90 Y30 +; test +`; + +const CIRCLE = `; Generated with Doodle3D Slicer V0.0.18 +G28 +G1 X50 Y70 +G1 X56.180339887498945 Y69.02113032590307 +G1 X61.75570504584947 Y66.18033988749895 +G1 X66.18033988749895 Y61.75570504584947 +G1 X69.02113032590307 Y56.180339887498945 +G1 X70 Y50 +G1 X69.02113032590307 Y43.819660112501055 +G1 X66.18033988749895 Y38.24429495415054 +G1 X61.75570504584947 Y33.819660112501055 +G1 X56.18033988749895 Y30.97886967409693 +G1 X50 Y30 +G1 X43.819660112501055 Y30.978869674096927 +G1 X38.24429495415054 Y33.819660112501055 +G1 X33.819660112501055 Y38.24429495415053 +G1 X30.97886967409693 Y43.81966011250105 +G1 X30 Y49.99999999999999 +G1 X30.978869674096927 Y56.180339887498945 +G1 X33.81966011250105 Y61.75570504584946 +G1 X38.24429495415053 Y66.18033988749895 +G1 X43.81966011250105 Y69.02113032590307 +; test +`; + +// export function fetch(url, data = {}, onProgress) { +// return new Promise((resolve, reject) => { +// const request = new Request(url, data); +// const xhr = new XMLHttpRequest(); +// +// xhr.onload = () => { +// const { status, statusText, responseURL: url } = xhr; +// resolve(new Response(xhr.response, { status, statusText, url })); +// } +// xhr.onerror = () => reject(new TypeError('Network request failed')); +// xhr.ontimeout = () => reject(new TypeError('Network request failed')); +// +// xhr.open(request.method, url); +// +// if (request.credentials === 'include') { +// xhr.withCredentials = true +// } else if (request.credentials === 'omit') { +// xhr.withCredentials = false +// } +// if (xhr.upload && onProgress) xhr.upload.onprogress = onProgress; +// if (xhr.responseType) xhr.responseType = 'blob'; +// +// request.headers.forEach((value, name) => { +// xhr.setRequestHeader(name, value) +// }); +// +// xhr.send(data.body); +// }); +// } + +class Print extends React.Component { + home = () => fetch(`${IP}/set?code=G28`, { method: 'GET', mode: 'no-cors' }); + status = () => fetch(`${IP}/inquiry`, { method: 'GET', mode: 'no-cors' }) + .then(response => response.text()) + .then(result => console.log('result: ', result)); + start = () => fetch(`${IP}/set?code=M565`, { method: 'GET', mode: 'no-cors' }); + stop = () => fetch(`${IP}/set?cmd={P:X}`, { method: 'GET', mode: 'no-cors' }); + upload = async () => { + const gcode = this.refs.gcode.value; + + const headers = new Headers(); + headers.append('Content-Disposition', 'form-data; name="file"; filename="doodle.gcode"'); + headers.append('Content-Type', 'application/octet-stream'); + headers.append('Accept', 'application/json'); + + const body = new FormData(); + const file = new File([gcode], 'doodle.gcode', { type: 'application/octet-stream' }); + body.append('file', file); + + const result = await fetch(`${IP}/upload`, { method: 'POST', mode: 'no-cors', headers, body }); + }; + + render() { + return ( + + + + + +
+