diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..7549b0f --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: ashleydavis diff --git a/.vscode/settings.json b/.vscode/settings.json index ec75252..52bdb61 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "editor.tabSize": 4, - "editor.renderWhitespace": "boundary", + "editor.renderWhitespace": "none", "editor.insertSpaces": true, "typescript.reportStyleChecksAsWarnings": true, "editor.trimAutoWhitespace": true, diff --git a/README.md b/README.md index f1943b7..f86baae 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ The forgiving plotting API designed for use with [Data-Forge](https://github.com/data-forge/data-forge-ts). +Data-Forge Plot is now a simple wrapper for [the Plot library](https://www.npmjs.com/package/plot). + Use Data-Forge Plot to quickly and conveniently render charts from your data in JavaScript or TypeScript. It is an abstraction layer that connects Data-Forge with JavaScript visualization libraries so that it's easy to plot charts from your data. Why not do your data wrangling, analysis and visualization entirely in JavaScript? To support my effort please buy or help promote my book @@ -13,11 +15,39 @@ Do your prototyping and exploratory data analysis in JavaScript with [Data-Forge Please join the conversation on [Gitter](https://gitter.im/data-forge) +[Click here to support my work](https://www.codecapers.com.au/about#support-my-work) + +## Breaking changes + +As of version 1.0.0 Data-Forge Plot has been gutted and reimplimented in terms of the [Plot library](https://www.npmjs.com/package/plot) (which is very similar). DFP is now just a wrapper for Plot to ease my maintence burden. + +The function `exportWeb` has been removed because it is to difficult to maintain. + +If you want to use this in the browser please use the [Plot library](https://www.npmjs.com/package/plot) instead, e.g.: + +```javascript +const dataframe = ... +const plotConfig = { ... }; +const axisMap = { ... }; +import { plot } from "plot"; +import "@plotex/render-dom"; +plot(dataframe.toArray(), plotConfig, axisMap) + .renderDOM(document.getElementByID("a-chart"); +``` + +-- + +As of version 0.4.0 the Nightmare/Electron depenency has been removed along with the `renderImage` function. + +The `renderImage` function has been moved to the separate library [@data-forge-plot/render](todo). This has been removed due to the size that the Electron dependency adds to this package. In the future you you will have to install the separate package to render a plot to an image. + +Please note that the sample code below to see how the new library is installed and *required* to access the `renderImage` function. + + ## Project Goals - To simply and conveniently from a series or dataframe to chart. - To create charts and visualizations in Node.js and the browser. -- To export web-based interactive charts that can easily be hosted under a web-server. - To be able to serialize a chart to JSON and then reinstantiate it from the JSON in a web-app. - To separate configuration and data definition to make it easy to reuse charts. - To configure charts in JSON or fluent API. @@ -28,7 +58,7 @@ Some instructions for using Data-Forge Plot. These instructions are for JavaScri ### Install - npm install --save data-forge data-forge-plot + npm install --save data-forge data-forge-plot @plotex/render-image ### Setup @@ -36,6 +66,8 @@ Some instructions for using Data-Forge Plot. These instructions are for JavaScri const dataForge = require('data-forge'); require('data-forge-fs'); // Extends Data-Forge with 'readFile' function. require('data-forge-plot'); // Extends Data-Forge with the 'plot' function. + require('@plotex/render-image'); // Extends Data-Forge Plot with the 'renderImage' function. + require('@plotex/render-dom'); // Extends Data-Forge Plot with the 'renderDOM' function. ``` ### Rendering a chart from a CSV file to an image file @@ -45,26 +77,11 @@ Some instructions for using Data-Forge Plot. These instructions are for JavaScri await dataFrame.plot().renderImage("my-chart.png"); ``` -### Exporting a chart from a CSV file to an interactive web visualization +### Rendering a chart to a web page. ```javascript - const dataFrame = await dataForge.readFile("my-data-file.csv").parseCSV(); - await dataFrame.plot().exportWeb("./output-path"); + const dataArray = // ... acquire data, e.g. from a REST API ... + const dataFrame = new DataFrame(dataArray); + const chartElement = document.getElementById("chart"); + await dataFrame.plot().renderDOM(chartElement); ``` - -### More docs coming soon - -It's early days for DFP. I'll be working on more docs soon. - -To see examples of API usage please see my blog posts: -- http://www.the-data-wrangler.com/introducing-data-forge-plot/ -- http://www.the-data-wrangler.com/data-forge-plot-update/ -- http://www.the-data-wrangler.com/data-forge-plot-update2/ - -There's also a first example of DFP here (JavaScript): - -https://github.com/data-forge/data-forge-plot-first-example - -There's a bunch of TypeScript examples in DFP's GitHub repo: - -https://github.com/data-forge/data-forge-plot/tree/master/examples/ diff --git a/examples/example-1.ts b/examples/example-1.ts deleted file mode 100644 index ee1555a..0000000 --- a/examples/example-1.ts +++ /dev/null @@ -1,39 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/simple_multiple.html -// - -const data1 = [30, 200, 100, 400, 150, 250]; -const data2 = [50, 20, 10, 40, 15, 25]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - data1: data1, - data2: data2 - }, - }); - - //console.log(df.toString()); - - const plot = df.plot(); - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-10.ts b/examples/example-10.ts deleted file mode 100644 index de98e35..0000000 --- a/examples/example-10.ts +++ /dev/null @@ -1,56 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/chart_scatter.html -// - -const versicolor_x = [ 3.2, 3.2, 3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2.0, 3.0, 2.2, 2.9, 2.9, 3.1, 3.0, 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3.0, 2.8, 3.0, 2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3.0, 3.4, 3.1, 2.3, 3.0, 2.5, 2.6, 3.0, 2.6, 2.3, 2.7, 3.0, 2.9, 2.9, 2.5, 2.8 ]; -const versicolor_y = [ 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3 ]; -const setosa_x = [ 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3.0, 3.0, 4.0, 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3.0, 3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.6, 3.0, 3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3.0, 3.8, 3.2, 3.7, 3.3 ]; -const setosa_y = [ 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2 ]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; -import { ChartType } from '../src/index'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - versicolor_x: versicolor_x, - versicolor_y: versicolor_y, - setosa_x: setosa_x, - setosa_y: setosa_y, - }, - }); - - //console.log(df.head(10).toString()); - - const plot = df.plot() - .chartType(ChartType.Scatter) - .y() - .addSeries("versicolor_y") - .label("Versicolor") - //todo: .color("blue") - .setX("versicolor_x") - .y() - .addSeries("setosa_y") - .label("Setosa") - //todo: .color("green") - .setX("setosa_x"); - - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-2.ts b/examples/example-2.ts deleted file mode 100644 index 02ee85d..0000000 --- a/examples/example-2.ts +++ /dev/null @@ -1,44 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/timeseries.html -// - -const x = ['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06']; -const data1 = [30, 200, 100, 400, 150, 250]; -const data2 = [130, 340, 200, 500, 250, 350]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - date: x, - data1: data1, - data2: data2 - }, - }) - .parseDates("date", "YYYY-MM-DD") - .setIndex("date") - .dropSeries("date"); - - //console.log(df.toString()); - - const plot = df.plot(); - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-3.ts b/examples/example-3.ts deleted file mode 100644 index 422effd..0000000 --- a/examples/example-3.ts +++ /dev/null @@ -1,42 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/timeseries.html -// - -const x = ['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06']; -const data1 = [30, 200, 100, 400, 150, 250]; -const data2 = [130, 340, 200, 500, 250, 350]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - date: x, - data1: data1, - data2: data2 - }, - }) - .parseDates("date", "YYYY-MM-DD"); - - //console.log(df.toString()); - - const plot = df.plot({}, { x: "date", y: [ "data1", "data2" ]}); - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-4.ts b/examples/example-4.ts deleted file mode 100644 index 3426ae3..0000000 --- a/examples/example-4.ts +++ /dev/null @@ -1,48 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/timeseries.html -// - -const x = ['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06']; -const data1 = [30, 200, 100, 400, 150, 250]; -const data2 = [130, 340, 200, 500, 250, 350]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - date: x, - data1: data1, - data2: data2 - }, - }) - .parseDates("date", "YYYY-MM-DD"); - - //console.log(df.toString()); - - const plot = df.plot() - .x() - .setSeries("date") - .y() - .addSeries("data1") - .y() - .addSeries("data2"); - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-5.ts b/examples/example-5.ts deleted file mode 100644 index 74cd8ad..0000000 --- a/examples/example-5.ts +++ /dev/null @@ -1,42 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/chart_bar.html -// - -const data1 = [30, 200, 100, 400, 150, 250]; -const data2 = [130, 100, 140, 200, 150, 50]; -const data3 = [130, -150, 200, 300, -200, 100]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; -import { ChartType } from '../src/index'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - data1: data1, - data2: data2, - data3: data3, - }, - }); - - //console.log(df.toString()); - - const plot = df.plot({ chartType: ChartType.Bar }); - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-6.ts b/examples/example-6.ts deleted file mode 100644 index 207d7bb..0000000 --- a/examples/example-6.ts +++ /dev/null @@ -1,43 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/chart_bar.html -// - -const data1 = [30, 200, 100, 400, 150, 250]; -const data2 = [130, 100, 140, 200, 150, 50]; -const data3 = [130, -150, 200, 300, -200, 100]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; -import { ChartType } from '../src/index'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - data1: data1, - data2: data2, - data3: data3, - }, - }); - - //console.log(df.toString()); - - const plot = df.plot() - .chartType(ChartType.Bar); - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-7.ts b/examples/example-7.ts deleted file mode 100644 index e6e7c23..0000000 --- a/examples/example-7.ts +++ /dev/null @@ -1,40 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/chart_scatter.html -// - -const versicolor_x = [ 3.2, 3.2, 3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2.0, 3.0, 2.2, 2.9, 2.9, 3.1, 3.0, 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3.0, 2.8, 3.0, 2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3.0, 3.4, 3.1, 2.3, 3.0, 2.5, 2.6, 3.0, 2.6, 2.3, 2.7, 3.0, 2.9, 2.9, 2.5, 2.8 ]; -const versicolor_y = [ 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3 ]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; -import { ChartType } from '../src/index'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - versicolor_x: versicolor_x, - versicolor_y: versicolor_y, - }, - }); - - //console.log(df.toString()); - - const plot = df.plot({ chartType: ChartType.Scatter }, { x: "versicolor_x", y: "versicolor_y" }); - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-8.ts b/examples/example-8.ts deleted file mode 100644 index 3211c61..0000000 --- a/examples/example-8.ts +++ /dev/null @@ -1,45 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/chart_scatter.html -// - -const versicolor_x = [ 3.2, 3.2, 3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2.0, 3.0, 2.2, 2.9, 2.9, 3.1, 3.0, 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3.0, 2.8, 3.0, 2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3.0, 3.4, 3.1, 2.3, 3.0, 2.5, 2.6, 3.0, 2.6, 2.3, 2.7, 3.0, 2.9, 2.9, 2.5, 2.8 ]; -const versicolor_y = [ 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3 ]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; -import { ChartType } from '../src/index'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - versicolor_x: versicolor_x, - versicolor_y: versicolor_y, - }, - }); - - //console.log(df.toString()); - - const plot = df.plot() - .chartType(ChartType.Scatter) - .x() - .setSeries("versicolor_x") - .y() - .addSeries("versicolor_y"); - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/example-9.ts b/examples/example-9.ts deleted file mode 100644 index 3b04d88..0000000 --- a/examples/example-9.ts +++ /dev/null @@ -1,69 +0,0 @@ -// -// This example modelled on the C3 example line chart. -// -// http://c3js.org/samples/chart_scatter.html -// - -const versicolor_x = [ 3.2, 3.2, 3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2.0, 3.0, 2.2, 2.9, 2.9, 3.1, 3.0, 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3.0, 2.8, 3.0, 2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3.0, 3.4, 3.1, 2.3, 3.0, 2.5, 2.6, 3.0, 2.6, 2.3, 2.7, 3.0, 2.9, 2.9, 2.5, 2.8 ]; -const versicolor_y = [ 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3 ]; -const setosa_x = [ 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3.0, 3.0, 4.0, 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3.0, 3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.6, 3.0, 3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3.0, 3.8, 3.2, 3.7, 3.3 ]; -const setosa_y = [ 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2 ]; - -import { DataFrame } from 'data-forge'; -import '../src/index'; -import * as fs from 'fs-extra'; -import * as path from 'path'; -import { ChartType } from '../src/index'; - -const outputName = path.basename(__filename, ".ts"); -const outputPath = path.join("./output", outputName); -fs.emptyDirSync(outputPath); - -async function main(): Promise { - - const df = new DataFrame({ - columns: { - versicolor_x: versicolor_x, - versicolor_y: versicolor_y, - setosa_x: setosa_x, - setosa_y: setosa_y, - }, - }); - - //console.log(df.head(10).toString()); - - const plot = df.plot( - { - chartType: ChartType.Scatter - }, - { - y: [ - { - series: "versicolor_y", - label: "Versicolor", - color: "blue", - x: { - series: "versicolor_x", - } - }, - { - series: "setosa_y", - label: "Setosa", - color: "green", - x: { - series: "setosa_x", - } - }, - ], - } - ); - - await plot.renderImage(path.join(outputPath, "image.png"), { openImage: false }); - await plot.exportWeb(path.join(outputPath, "web"), { overwrite: true, openBrowser: false }); -} - -main() - .then(() => console.log("Done")) - .catch(err => console.error(err && err.stack || err)); - - diff --git a/examples/package-lock.json b/examples/package-lock.json deleted file mode 100644 index 486dc74..0000000 --- a/examples/package-lock.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "examples", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/fs-extra": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.5.tgz", - "integrity": "sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "11.13.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.5.tgz", - "integrity": "sha512-/OMMBnjVtDuwX1tg2pkYVSqRIDSmNTnvVvmvP/2xiMAAWf4a5+JozrApCrO4WCAILmXVxfNoQ3E+0HJbNpFVGg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } - } -} diff --git a/examples/package.json b/examples/package.json deleted file mode 100644 index 9cf6008..0000000 --- a/examples/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "examples", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "fs-extra": "^7.0.1" - }, - "devDependencies": { - "@types/fs-extra": "^5.0.5" - } -} diff --git a/examples/run.bat b/examples/run.bat deleted file mode 100644 index 4ae78fb..0000000 --- a/examples/run.bat +++ /dev/null @@ -1,10 +0,0 @@ -call ts-node example-1.ts -call ts-node example-2.ts -call ts-node example-3.ts -call ts-node example-4.ts -call ts-node example-5.ts -call ts-node example-6.ts -call ts-node example-7.ts -call ts-node example-8.ts -call ts-node example-9.ts -call ts-node example-10.ts \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b2a6c78..beabd51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "data-forge-plot", - "version": "0.3.1", + "version": "1.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -239,29 +239,6 @@ } } }, - "@data-forge-plot/apex": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/@data-forge-plot/apex/-/apex-0.0.31.tgz", - "integrity": "sha512-fRTGr6rSf8er8M/HUfAWt8/ZtZ6QfsGtAv2+QgKQrdSfEhVVQSw/q5ymJWGRuksZEy1CeYDNPeCGC7yVQglCdw==", - "requires": { - "@data-forge-plot/chart-def": "^1.0.9", - "@data-forge/serialization": "^1.0.0", - "apexcharts": "^3.6.8" - } - }, - "@data-forge-plot/chart-def": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@data-forge-plot/chart-def/-/chart-def-1.0.9.tgz", - "integrity": "sha512-zMTpxK3nQPAT9IPfIGKSvmjIYfnLfR1rfrPvGtpdMVj1Fm0g6IAYXX3OWH6mxKR9bw1NQUmTsgEylLs4mbVzdg==", - "requires": { - "@data-forge/serialization": "^1.0.0" - } - }, - "@data-forge/serialization": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@data-forge/serialization/-/serialization-1.0.0.tgz", - "integrity": "sha512-I1xNietgBq6635D52WYauLjQihHwtRsbx0JFCKkH3l/gRPmGky7jwC9+X26mlh1eOSKmuVFX+/1OtUU3upHJeg==" - }, "@jest/console": { "version": "24.7.1", "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", @@ -501,19 +478,18 @@ "@types/yargs": "^12.0.9" } }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "@plotex/chart-def": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@plotex/chart-def/-/chart-def-1.0.15.tgz", + "integrity": "sha512-q6cGi0MNPS0JRbrB6Z+kCTvh7ztVSHi+ZDONTH3ROwnLl2TZralSPhFf/0CKBUoNDEOyiDce0KjpWS88T+QIbw==", "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" + "@plotex/serialization": "^1.0.11" } }, - "@nodelib/fs.stat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz", - "integrity": "sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A==" + "@plotex/serialization": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@plotex/serialization/-/serialization-1.0.11.tgz", + "integrity": "sha512-ugvfkh6kSJQ2SnVAm733klHs5g50gMgSfxFDLQgqnV8RdUSdMMuzH/2iqcKJdcV9kvE/J/jTNAs+YECc57yb3Q==" }, "@types/babel__core": { "version": "7.1.1", @@ -601,15 +577,6 @@ "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", "dev": true }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, "acorn": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", @@ -644,6 +611,7 @@ "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -660,7 +628,8 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -681,21 +650,6 @@ "normalize-path": "^2.1.1" } }, - "apexcharts": { - "version": "3.6.8", - "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.6.8.tgz", - "integrity": "sha512-53cgmbPAnHTHQEqvbLphEaLBWG3kJdCxCGkBQss+ZCAxnD/TwS6wxI1SIN0uBQf35d8hN/IXCAH4ayGPEBftXQ==", - "requires": { - "promise-polyfill": "8.1.0", - "svg.draggable.js": "^2.2.1", - "svg.easing.js": "^2.0.0", - "svg.filter.js": "^2.0.2", - "svg.js": "^2.6.6", - "svg.pathmorphing.js": "^0.1.3", - "svg.resize.js": "^1.4.1", - "svg.select.js": "^2.1.2" - } - }, "append-transform": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", @@ -717,17 +671,20 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, "array-equal": { "version": "1.0.0", @@ -735,43 +692,23 @@ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -779,17 +716,14 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "astral-regex": { "version": "1.0.0", @@ -815,22 +749,26 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "atob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true }, "babel-code-frame": { "version": "6.26.0", @@ -961,12 +899,14 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -981,6 +921,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -989,6 +930,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -997,6 +939,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1005,6 +948,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1017,54 +961,16 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1074,6 +980,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -1091,6 +998,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1141,7 +1049,8 @@ "buffer-from": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true }, "builtin-modules": { "version": "1.1.1", @@ -1149,15 +1058,11 @@ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -1170,11 +1075,6 @@ "unset-value": "^1.0.0" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1184,23 +1084,8 @@ "camelcase": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==" - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - } - } + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "dev": true }, "capture-exit": { "version": "2.0.0", @@ -1211,49 +1096,11 @@ "rsvp": "^4.8.4" } }, - "capture-template": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/capture-template/-/capture-template-1.1.10.tgz", - "integrity": "sha512-wzbgkSv40b0U1x4Pr+44bIFJKMIsPjpDcwNCV49k85u9Cc9HGrBn3JF2dBXYlBs0EwYyJj039+9ax8Dkw7wVMQ==", - "requires": { - "chai": "4.1.2", - "express": "^4.16.4", - "fs-extra": "^7.0.1", - "inflate-template": "^1.1.6", - "nightmare": "^3.0.1", - "promisify-any": "^2.0.1", - "yargs": "^12.0.5" - }, - "dependencies": { - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", - "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", - "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chalk": { "version": "2.4.1", @@ -1283,11 +1130,6 @@ } } }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1298,6 +1140,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -1309,6 +1152,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1319,46 +1163,30 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "co-bluebird": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/co-bluebird/-/co-bluebird-1.1.0.tgz", - "integrity": "sha1-yLnzqTIKftMJh9zKGlw8/1llXHw=", - "requires": { - "bluebird": "^2.10.0", - "co-use": "^1.1.0" - } - }, - "co-use": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/co-use/-/co-use-1.1.0.tgz", - "integrity": "sha1-xrs83xDLc17Kqdru2kbXJclKTmI=" - }, "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=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -1383,6 +1211,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -1402,33 +1231,14 @@ "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "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==" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "convert-source-map": { "version": "1.6.0", @@ -1439,30 +1249,23 @@ "safe-buffer": "~5.1.1" } }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "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=" - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -1486,18 +1289,11 @@ "cssom": "0.3.x" } }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "requires": { - "array-find-index": "^1.0.1" - } - }, "dashdash": { "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" } @@ -1530,6 +1326,7 @@ "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, "requires": { "ms": "2.0.0" } @@ -1537,33 +1334,14 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "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-defaults": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/deep-defaults/-/deep-defaults-1.0.5.tgz", - "integrity": "sha512-5ev/sNkiHTmeTqbDJEDgdQa/Ub0eOMQNix9l+dLLGbwOos7/in5HdvHXI014wqxsET4YeJG9Eq4qj0PJRL8rSw==", - "requires": { - "lodash": "^4.17.5" - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "deep-is": { "version": "0.1.3", @@ -1580,14 +1358,6 @@ "strip-bom": "^3.0.0" } }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1609,6 +1379,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -1618,6 +1389,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1626,6 +1398,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1634,6 +1407,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1645,17 +1419,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "detect-newline": { "version": "2.1.0", @@ -1675,15 +1440,6 @@ "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", "dev": true }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - } - }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -1697,116 +1453,26 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.8.tgz", - "integrity": "sha512-1f9zJehcTTGjrkb06o6ds+gsRq6SYhZJyxOk6zIWjRH8hVy03y/RzUDELzNas71f5vcvXmfGVvyjeEsadDI8tg==", - "requires": { - "@types/node": "^8.0.24", - "electron-download": "^3.0.1", - "extract-zip": "^1.0.3" - }, - "dependencies": { - "@types/node": { - "version": "8.10.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.45.tgz", - "integrity": "sha512-tGVTbA+i3qfXsLbq9rEq/hezaHY55QxQLeXQL2ejNgFAxxrgu8eMmYIOsRcl7hN1uTLVsKOOYacV/rcJM3sfgQ==" - } - } - }, - "electron-download": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", - "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", - "requires": { - "debug": "^2.2.0", - "fs-extra": "^0.30.0", - "home-path": "^1.0.1", - "minimist": "^1.2.0", - "nugget": "^2.0.0", - "path-exists": "^2.1.0", - "rc": "^1.1.2", - "semver": "^5.3.0", - "sumchecker": "^1.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, "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==", + "dev": true, "requires": { "once": "^1.4.0" } }, - "enqueue": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enqueue/-/enqueue-1.0.2.tgz", - "integrity": "sha1-kBTpvOVw7pPKlubI5jrVTBkra8g=", - "requires": { - "sliced": "0.0.5" - }, - "dependencies": { - "sliced": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", - "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" - } - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -1844,16 +1510,6 @@ "is-symbol": "^1.0.2" } }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1899,11 +1555,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, "exec-sh": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", @@ -1914,6 +1565,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -1934,6 +1586,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -1948,6 +1601,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1956,6 +1610,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1976,62 +1631,17 @@ "jest-regex-util": "^24.3.0" } }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -2041,6 +1651,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -2051,6 +1662,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -2066,6 +1678,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -2074,6 +1687,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -2082,6 +1696,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -2090,6 +1705,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -2098,6 +1714,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2106,54 +1723,23 @@ } } }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", - "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.0.1", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.1", - "micromatch": "^3.1.10" - } + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true }, "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", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -2170,14 +1756,6 @@ "bser": "^2.0.0" } }, - "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" - } - }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -2192,6 +1770,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -2203,40 +1782,18 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -2244,45 +1801,40 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { "map-cache": "^0.2.2" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "1.2.8", @@ -2304,7 +1856,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2325,12 +1878,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2345,17 +1900,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2472,7 +2030,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2484,6 +2043,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2498,6 +2058,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2505,12 +2066,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2529,6 +2092,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2609,7 +2173,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2621,6 +2186,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2706,7 +2272,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2742,6 +2309,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2761,6 +2329,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2804,12 +2373,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -2819,30 +2390,17 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "function-source": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/function-source/-/function-source-0.1.0.tgz", - "integrity": "sha1-2RBL8+RniLVUaMAr8bL6vPj8Ga8=" - }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -2850,12 +2408,14 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "getpass": { "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" } @@ -2874,69 +2434,17 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, "globals": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", "dev": true }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true }, "growly": { "version": "1.3.0", @@ -2948,6 +2456,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "dev": true, "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -2958,12 +2467,14 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -3011,6 +2522,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -3021,6 +2533,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -3030,21 +2543,18 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, - "home-path": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz", - "integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==" - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true }, "html-encoding-sniffer": { "version": "1.0.2", @@ -3055,21 +2565,11 @@ "whatwg-encoding": "^1.0.1" } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -3085,11 +2585,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -3098,64 +2593,36 @@ "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "^2.0.0" - } - }, - "inflate-template": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/inflate-template/-/inflate-template-1.1.6.tgz", - "integrity": "sha512-E/6wrSKZPtBa8KFlgxvkbVzzhWIvi7a34qDdNfmAflOOw+I3SoLJzGwZJHef9r6f+hGwNTK4pcicyBVxBrFWDw==", - "requires": { - "chai": "4.1.2", - "fs-extra": "^7.0.1", - "globby": "^8.0.2", - "handlebars": "^4.1.1", - "promisify-any": "^2.0.1", - "yargs": "^12.0.5" }, "dependencies": { - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", - "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" + "resolve-from": "^3.0.0" } }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true } } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3164,12 +2631,8 @@ "inherits": { "version": "2.0.3", "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==" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "invariant": { "version": "2.2.4", @@ -3183,17 +2646,14 @@ "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -3202,6 +2662,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -3211,12 +2672,14 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-callable": { "version": "1.1.4", @@ -3237,6 +2700,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -3245,6 +2709,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -3261,6 +2726,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -3270,37 +2736,22 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "^1.0.0" - } + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-generator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", - "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-generator-fn": { "version": "2.1.0", @@ -3308,18 +2759,11 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "requires": { - "is-extglob": "^2.1.1" - } - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -3328,6 +2772,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -3338,6 +2783,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -3354,7 +2800,8 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-symbol": { "version": "1.0.2", @@ -3368,17 +2815,14 @@ "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", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, "is-wsl": { "version": "1.1.0", @@ -3388,22 +2832,26 @@ "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", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "istanbul-api": { "version": "2.1.4", @@ -4024,7 +3472,8 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true }, "jsdom": { "version": "11.12.0", @@ -4060,11 +3509,6 @@ "xml-name-validator": "^3.0.0" } }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -4074,17 +3518,20 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "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=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "json5": { "version": "2.1.0", @@ -4103,18 +3550,11 @@ } } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, "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", @@ -4122,23 +3562,11 @@ "verror": "1.10.0" } }, - "keypress": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", - "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=" - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "^4.1.9" - } + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, "kleur": { "version": "3.0.3", @@ -4150,6 +3578,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, "requires": { "invert-kv": "^2.0.0" } @@ -4176,37 +3605,11 @@ "type-check": "~0.3.2" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -4215,7 +3618,8 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true }, "lodash.sortby": { "version": "4.7.0", @@ -4232,15 +3636,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -4278,6 +3673,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, "requires": { "p-defer": "^1.0.0" } @@ -4285,65 +3681,29 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { "object-visit": "^1.0.0" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, "mem": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", @@ -4353,20 +3713,11 @@ "readable-stream": "^2.0.1" } }, - "merge2": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", - "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -4383,20 +3734,17 @@ "to-regex": "^3.0.2" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, "mime-db": { "version": "1.38.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true }, "mime-types": { "version": "2.1.22", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "dev": true, "requires": { "mime-db": "~1.38.0" } @@ -4404,12 +3752,14 @@ "mimic-fn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", - "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==" + "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4417,30 +3767,14 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minstache": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minstache/-/minstache-1.2.0.tgz", - "integrity": "sha1-/xzEA6woRPaNvxjGYhKb5+sO/EE=", - "requires": { - "commander": "1.0.4" - }, - "dependencies": { - "commander": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/commander/-/commander-1.0.4.tgz", - "integrity": "sha1-Xt6xruI8T7VBprcNaSq+8ZZpotM=", - "requires": { - "keypress": "0.1.x" - } - } - } + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -4450,6 +3784,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -4460,6 +3795,7 @@ "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" } @@ -4467,15 +3803,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multiline": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", - "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", - "requires": { - "strip-indent": "^1.0.0" - } + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "nan": { "version": "2.13.2", @@ -4488,6 +3817,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -4508,41 +3838,17 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, "neo-async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "nightmare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nightmare/-/nightmare-3.0.1.tgz", - "integrity": "sha512-WptvyPfp5mHRRYHzt6+4xazaR9cc437BuLJI6cLFnqwwgxgdtsFImfBVDeTUCPAeLrkp5VryX5jlw7Wwg+UnFQ==", - "requires": { - "debug": "^2.2.0", - "deep-defaults": "^1.0.3", - "defaults": "^1.0.2", - "electron": "^1.8.4", - "enqueue": "^1.0.2", - "function-source": "^0.1.0", - "jsesc": "^0.5.0", - "minstache": "^1.2.0", - "mkdirp": "^0.5.1", - "multiline": "^1.0.2", - "once": "^1.3.3", - "rimraf": "^2.4.3", - "sliced": "1.0.1", - "split2": "^2.0.1" - } + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node-int64": { "version": "0.4.0", @@ -4573,6 +3879,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -4593,35 +3900,16 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { "path-key": "^2.0.0" } }, - "nugget": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", - "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", - "requires": { - "debug": "^2.1.3", - "minimist": "^1.1.0", - "pretty-bytes": "^1.0.2", - "progress-stream": "^1.1.0", - "request": "^2.45.0", - "single-line-log": "^1.1.2", - "throttleit": "0.0.2" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, "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=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "nwsapi": { "version": "2.1.3", @@ -4632,17 +3920,14 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -4653,6 +3938,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4661,21 +3947,18 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { "isobject": "^3.0.0" } @@ -4694,22 +3977,16 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { "isobject": "^3.0.1" } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -4726,6 +4003,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -4757,6 +4035,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, "requires": { "execa": "^1.0.0", "lcid": "^2.0.0", @@ -4766,7 +4045,8 @@ "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true }, "p-each-series": { "version": "1.0.0", @@ -4780,17 +4060,20 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-is-promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "dev": true }, "p-limit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -4799,6 +4082,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "requires": { "p-limit": "^2.0.0" } @@ -4812,15 +4096,8 @@ "p-try": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", - "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==" - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } + "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==", + "dev": true }, "parse5": { "version": "4.0.0", @@ -4828,86 +4105,56 @@ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "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=" + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "requires": { "pify": "^3.0.0" } }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true }, "pirates": { "version": "4.0.1", @@ -4927,6 +4174,16 @@ "find-up": "^3.0.0" } }, + "plot": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/plot/-/plot-1.0.17.tgz", + "integrity": "sha512-idSHM9PqvgyNQMPxX/ig2yuasZ6lzuD1AsNyM36IZpTKU42JtupAnXu/fM+lEaViVwULuD4SzsX6Kiru+ccMVw==", + "requires": { + "@plotex/chart-def": "^1.0.15", + "@plotex/serialization": "^1.0.11", + "typy": "3.0.1" + } + }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", @@ -4936,7 +4193,8 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, "prelude-ls": { "version": "1.1.2", @@ -4944,15 +4202,6 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.1.0" - } - }, "pretty-format": { "version": "24.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", @@ -4976,71 +4225,8 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "progress-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", - "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", - "requires": { - "speedometer": "~0.1.2", - "through2": "~0.2.3" - }, - "dependencies": { - "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.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", - "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "requires": { - "readable-stream": "~1.1.9", - "xtend": "~2.1.1" - } - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "promise-polyfill": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.0.tgz", - "integrity": "sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==" - }, - "promisify-any": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promisify-any/-/promisify-any-2.0.1.tgz", - "integrity": "sha1-QD4AqIE/F1JCq1D+M6afjuzkcwU=", - "requires": { - "bluebird": "^2.10.0", - "co-bluebird": "^1.1.0", - "is-generator": "^1.0.2" - } + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true }, "prompts": { "version": "2.0.4", @@ -5052,24 +4238,17 @@ "sisteransi": "^1.0.0" } }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" - } - }, "psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -5078,56 +4257,14 @@ "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.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "react-is": { "version": "16.8.6", @@ -5135,65 +4272,11 @@ "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", "dev": true }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5208,6 +4291,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -5223,19 +4307,11 @@ "util.promisify": "^1.0.0" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -5250,25 +4326,20 @@ "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "^1.0.0" - } + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -5315,50 +4386,54 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "resolve": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, "requires": { "path-parse": "^1.0.6" } }, "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "^5.0.0" } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { "glob": "^7.1.3" }, @@ -5367,6 +4442,7 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5387,12 +4463,14 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { "ret": "~0.1.10" } @@ -5400,7 +4478,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sane": { "version": "4.1.0", @@ -5436,58 +4515,20 @@ "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true }, "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-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -5499,21 +4540,18 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -5521,7 +4559,8 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "shellwords": { "version": "0.1.1", @@ -5532,48 +4571,8 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "single-line-log": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", - "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", - "requires": { - "string-width": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "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=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "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.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "sisteransi": { "version": "1.0.0", @@ -5581,20 +4580,11 @@ "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", "dev": true }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -5610,6 +4600,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5618,6 +4609,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -5625,7 +4617,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -5633,6 +4626,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -5643,6 +4637,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -5651,6 +4646,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5659,6 +4655,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5667,6 +4664,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5679,6 +4677,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -5687,6 +4686,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5696,12 +4696,14 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", @@ -5723,12 +4725,14 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -5737,12 +4741,14 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -5751,29 +4757,18 @@ "spdx-license-ids": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" - }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=" + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "requires": { "extend-shallow": "^3.0.0" } }, - "split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "requires": { - "through2": "^2.0.2" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -5784,6 +4779,7 @@ "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -5806,6 +4802,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -5815,17 +4812,13 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } } } }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -5846,6 +4839,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -5855,6 +4849,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -5868,29 +4863,8 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "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=" - }, - "sumchecker": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", - "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", - "requires": { - "debug": "^2.2.0", - "es6-promise": "^4.0.5" - } + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "supports-color": { "version": "6.1.0", @@ -5901,60 +4875,6 @@ "has-flag": "^3.0.0" } }, - "svg.draggable.js": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", - "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", - "requires": { - "svg.js": "^2.0.1" - } - }, - "svg.easing.js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", - "integrity": "sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI=", - "requires": { - "svg.js": ">=2.3.x" - } - }, - "svg.filter.js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", - "integrity": "sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM=", - "requires": { - "svg.js": "^2.2.5" - } - }, - "svg.js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", - "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" - }, - "svg.pathmorphing.js": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", - "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", - "requires": { - "svg.js": "^2.4.0" - } - }, - "svg.resize.js": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", - "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", - "requires": { - "svg.js": "^2.6.5", - "svg.select.js": "^2.1.2" - } - }, - "svg.select.js": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", - "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", - "requires": { - "svg.js": "^2.2.5" - } - }, "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", @@ -6044,20 +4964,6 @@ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", "dev": true }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -6074,6 +4980,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -6082,6 +4989,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -6092,6 +5000,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -6103,6 +5012,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -6112,6 +5022,7 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -6134,11 +5045,6 @@ } } }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -6249,6 +5155,7 @@ "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.0.1" } @@ -6256,7 +5163,8 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true }, "type-check": { "version": "0.3.2", @@ -6267,25 +5175,6 @@ "prelude-ls": "~1.1.2" } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "typescript": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.1.tgz", @@ -6301,6 +5190,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.2.tgz", "integrity": "sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg==", + "dev": true, "optional": true, "requires": { "commander": "~2.19.0", @@ -6311,6 +5201,7 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true, "optional": true } } @@ -6319,6 +5210,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -6330,6 +5222,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6338,6 +5231,7 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -6347,20 +5241,11 @@ } } }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -6370,6 +5255,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -6380,6 +5266,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -6389,12 +5276,14 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true } } }, @@ -6402,6 +5291,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, "requires": { "punycode": "^2.1.0" }, @@ -6409,19 +5299,22 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true } } }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "use": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, "requires": { "kind-of": "^6.0.2" } @@ -6429,7 +5322,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 }, "util.promisify": { "version": "1.0.0", @@ -6441,34 +5335,27 @@ "object.getownpropertydescriptors": "^2.0.3" } }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "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=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -6529,6 +5416,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -6536,17 +5424,20 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true }, "wrap-ansi": { "version": "2.1.0", "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -6555,12 +5446,14 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -6569,6 +5462,7 @@ "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.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6579,6 +5473,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6588,7 +5483,8 @@ "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-file-atomic": { "version": "2.4.1", @@ -6616,20 +5512,17 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, "requires": { "cliui": "^4.0.0", "decamelize": "^1.2.0", @@ -6649,19 +5542,12 @@ "version": "11.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "requires": { - "fd-slicer": "~1.0.1" - } - }, "yn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", diff --git a/package.json b/package.json index 6fa1c77..ec28210 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,11 @@ { "name": "data-forge-plot", - "version": "0.3.1", + "version": "1.0.2", "description": "Plotting API for use with Data-Forge.", "main": "build/index.js", "types": "build/index.d.ts", "scripts": { + "setup": "npm install --save=false data-forge", "c": "npm run clean", "clean": "rm -rf build/*", "b": "npm run build", @@ -13,7 +14,7 @@ "clean-build": "npm run clean && npm run build", "build:watch": "tsc --watch", "clean-build:watch": "rm -rf build/* && tsc --watch", - "prepublishOnly": "npm test && npm run clean-build", + "prepublishOnly": "npm run setup && npm test && npm run clean-build", "l": "npm run lint", "lint": "tslint -c tslint.json 'src/**/*.{ts,tsx}'", "pretest": "npm run lint", @@ -34,16 +35,14 @@ }, "homepage": "https://github.com/data-forge/data-forge-plot#readme", "dependencies": { - "@data-forge-plot/apex": "0.0.31", - "@data-forge-plot/chart-def": "^1.0.9", - "@data-forge/serialization": "^1.0.0", - "capture-template": "^1.1.10", - "inflate-template": "^1.1.6", + "@plotex/chart-def": "^1.0.15", "opn": "^5.5.0", + "plot": "^1.0.17", + "resolve-cwd": "^3.0.0", "typy": "^3.0.1" }, "peerDependencies": { - "data-forge": "^1.6.7" + "data-forge": "^1.8.17" }, "devDependencies": { "@types/jest": "^24.0.6", diff --git a/src/apply-defaults.ts b/src/apply-defaults.ts deleted file mode 100644 index 9faf841..0000000 --- a/src/apply-defaults.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { IChartDef, ChartType, IYAxisSeriesConfig } from "@data-forge-plot/chart-def"; -import { expandYSeriesConfigArray, expandPlotConfig } from "./expand-chart-def"; -import { IPlotConfig } from "./chart-def"; -import { ISerializedDataFrame } from "@data-forge/serialization"; - -// -// Extract series from the chart definition's data. -// -function extractValues(data: ISerializedDataFrame, seriesConfigs: IYAxisSeriesConfig[]): any[] { - const values = seriesConfigs - .filter(axis => data && data.columns && data.columns[axis.series] === "number") - .map(axis => data.values && data.values.map(row => row[axis.series]) || []); - const flattened = [].concat.apply([], values); // Flatten array of arrays. - return flattened; -} - -// -// Apply defaults to a chart definition and patch misssing values. -// -export function applyDefaults(inputChartDef: IChartDef, plotDefaults?: IPlotConfig): IChartDef { - - const chartDef = Object.assign({}, inputChartDef); - - if (!chartDef.plotConfig) { - if (plotDefaults) { - chartDef.plotConfig = Object.assign({}, expandPlotConfig(plotDefaults)); - } - else { - chartDef.plotConfig = {}; - } - } - else { - if (plotDefaults) { - chartDef.plotConfig = Object.assign({}, expandPlotConfig(plotDefaults), chartDef.plotConfig); - } - else { - chartDef.plotConfig = Object.assign({}, chartDef.plotConfig); - } - } - - if (chartDef.plotConfig.chartType === undefined) { - chartDef.plotConfig.chartType = ChartType.Line; - } - - if (chartDef.plotConfig.width === undefined) { - chartDef.plotConfig.width = 800; - } - - if (chartDef.plotConfig.height === undefined) { - chartDef.plotConfig.height = 600; - } - - if (!chartDef.axisMap) { - chartDef.axisMap = { y: [], y2: [] }; - } - else { - chartDef.axisMap = Object.assign({}, chartDef.axisMap); - if (!chartDef.axisMap.y) { - chartDef.axisMap.y = []; - } - - if (!chartDef.axisMap.y2) { - chartDef.axisMap.y2 = []; - } - } - - if (chartDef.axisMap.y.length === 0 && - chartDef.axisMap.y2.length === 0) { - chartDef.axisMap.y = expandYSeriesConfigArray(chartDef.data.columnOrder); - } - - if (!chartDef.plotConfig.y) { - chartDef.plotConfig.y = {}; - } - - let y1Values; - - if (chartDef.plotConfig.y.min === undefined) { - y1Values = extractValues(chartDef.data, chartDef.axisMap.y); - - if (y1Values.length > 0) { - chartDef.plotConfig.y.min = Math.min(...y1Values); - } - } - - if (chartDef.plotConfig.y.max === undefined) { - if (!y1Values) { - y1Values = extractValues(chartDef.data, chartDef.axisMap.y); - } - - if (y1Values.length > 0) { - chartDef.plotConfig.y.max = Math.max(...y1Values); - } - } - - if (!chartDef.plotConfig.y2) { - chartDef.plotConfig.y2 = {}; - } - - let y2Values; - - if (chartDef.plotConfig.y2.min === undefined) { - y2Values = extractValues(chartDef.data, chartDef.axisMap.y2); - if (y2Values.length > 0) { - chartDef.plotConfig.y2.min = Math.min(...y2Values); - } - } - - if (chartDef.plotConfig.y2.max === undefined) { - if (!y2Values) { - y2Values = extractValues(chartDef.data, chartDef.axisMap.y2); - } - - if (y2Values.length > 0) { - chartDef.plotConfig.y2.max = Math.max(...y2Values); - } - } - - return chartDef; -} diff --git a/src/chart-def.ts b/src/chart-def.ts deleted file mode 100644 index 1185a28..0000000 --- a/src/chart-def.ts +++ /dev/null @@ -1,164 +0,0 @@ - -import { ISerializedDataFrame } from "@data-forge/serialization"; -import { HorizontalLabelPosition, VerticalLabelPosition, AxisType, ChartType } from "@data-forge-plot/chart-def"; - -/** - * Defines the configuration of an axis label. - */ -export interface IAxisLabelConfig { - - /** - * The text for the label. - */ - text?: string; - - /** - * Position of the label. - */ - position?: HorizontalLabelPosition | VerticalLabelPosition; -} - -/** - * Configures an axis of the chart. - */ -export interface IAxisConfig { - - /** - * Sets the type of the axis' data. - * Default: AxisType.Indexed ("indexed") - */ - axisType?: AxisType; - - /** - * Label for the axis. - */ - label?: string | IAxisLabelConfig; -} - -/** - * Configures a Y axis of the chart. - */ -export interface IYAxisConfig extends IAxisConfig { - - /** - * The minimum value to render on the axis. - */ - min?: number; - - /** - * The maximum value to render on the axis. - */ - max?: number; -} - -/** - * Configures the legend of the chart. - */ -export interface ILegendConfig { - - /** - * Set to true (default) to show the legend for the chart . - */ - show?: boolean; -} - -/** - * Defines the chart. - */ -export interface IPlotConfig { - - /** - * The type of chart to render. - * Default to "line". - */ - chartType?: ChartType; - - /** - * Width of the plot. - * Default to 800. - */ - width?: number | string; - - /** - * Height of the plot. - * Default to 600. - */ - height?: number | string; - - /** - * Configuration for the x axis. - */ - x?: IAxisConfig; - - /** - * Configuration for the y axis. - */ - y?: IYAxisConfig; - - /** - * Configuration for the second y axis. - */ - y2?: IYAxisConfig; - - /** - * Configures the chart's legend. - */ - legend?: ILegendConfig; -} - -/** - * Relates a single axis to data series. - */ -export interface IAxisSeriesConfig { - - /** - * The name of the series to render on the axis. - */ - series: string; - - /** - * The label for the series on this axis. - */ - label?: string; - - /** - * The format for rendering values of the series. - */ - format?: string; - - /** - * The color to render to assign to the series. - */ - color?: string; -} - -/** - * Relates a single Y axis to data series. - */ -export interface IYAxisSeriesConfig extends IAxisSeriesConfig { - /** - * Configure a separate X axis for the y axis. - */ - x?: string | IAxisSeriesConfig; -} - -/** - * Maps the columns in a dataframe to an axis in the chart. - */ -export interface IAxisMap { - - /** - * The x axis for the chart. - */ - x?: string | IAxisSeriesConfig; - - /** - * The y axis for the chart. - */ - y?: string | string[] | IYAxisSeriesConfig | IYAxisSeriesConfig[]; - - /** - * The optional second y axis for the chart. - */ - y2?: string | string[] | IYAxisSeriesConfig | IYAxisSeriesConfig[]; -} diff --git a/src/expand-chart-def.ts b/src/expand-chart-def.ts deleted file mode 100644 index d64fb59..0000000 --- a/src/expand-chart-def.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { IChartDef, IPlotConfig as IExpandedPlotConfig, IAxisMap as IExpandedAxisMap, ChartType, IAxisConfig as IExpandedAxisConfig, IYAxisConfig as IExpandedYAxisConfig, IAxisSeriesConfig as IExpandedAxisSeriesConfig, IYAxisSeriesConfig as IExpandedYAxisSeriesConfig } from "@data-forge-plot/chart-def"; -import { IAxisMap, IPlotConfig, IAxisConfig, IYAxisConfig, IAxisSeriesConfig, IYAxisSeriesConfig } from "./chart-def"; -import { ISerializedDataFrame } from "@data-forge/serialization"; -import { isString } from "./utils"; -import { isObject, isArray } from "util"; - -// -// Expands a chart definition so that chart renderer plugins have less work to do. -// - -export function expandAxisConfig(axisConfig: IAxisConfig): IExpandedAxisConfig { - const expandedAxisConfig = Object.assign({}, axisConfig) as IExpandedAxisConfig; - if (isString(expandedAxisConfig.label)) { - expandedAxisConfig.label = { - text: expandedAxisConfig.label, - }; - } - - return expandedAxisConfig; -} - -export function expandYAxisConfig(axisConfig: IYAxisConfig): IExpandedYAxisConfig { - const expandedAxisConfig = expandAxisConfig(axisConfig); - return expandedAxisConfig; -} - -export function expandSeriesConfig(series: string | IAxisSeriesConfig): IExpandedAxisSeriesConfig { - if (isString(series)) { - return { - series: series as string, - }; - } - else { - return Object.assign({}, series); - } -} - -export function expandYSeriesConfig(series: string | IYAxisSeriesConfig): IExpandedYAxisSeriesConfig { - const expanded = expandSeriesConfig(series) as IExpandedYAxisSeriesConfig; - if (expanded.x) { - expanded.x = expandSeriesConfig(expanded.x); - } - return expanded; -} - -export function expandYSeriesConfigArray(series?: string | string[] | IYAxisSeriesConfig | IYAxisSeriesConfig[]): IExpandedYAxisSeriesConfig[] { - if (!series) { - return []; - } - - if (isString(series)) { - return [{ - series, - }]; - } - - if (isArray(series)) { - return (series as Array).map(expandYSeriesConfig); - } - - if (isObject(series)) { - return [ - expandYSeriesConfig(series as IYAxisSeriesConfig), - ]; - } - - throw new Error(`Unexpected type for series: ${series}.`); -} - -export function expandAxisMap(axisMap: IAxisMap, columns: string[]): IExpandedAxisMap { - const expandedAxisMap = Object.assign({}, axisMap) as IExpandedAxisMap; - if (axisMap.x) { - expandedAxisMap.x = expandSeriesConfig(axisMap.x); - } - - expandedAxisMap.y = expandYSeriesConfigArray(axisMap.y); - expandedAxisMap.y2 = expandYSeriesConfigArray(axisMap.y2); - - return expandedAxisMap; -} - -export function expandPlotConfig(plotConfig: IPlotConfig): IExpandedPlotConfig { - const expandedPlotConfig = Object.assign({}, plotConfig) as IExpandedPlotConfig; - if (plotConfig.x) { - expandedPlotConfig.x = expandAxisConfig(plotConfig.x); - } - - if (plotConfig.y) { - expandedPlotConfig.y = expandYAxisConfig(plotConfig.y); - } - - if (plotConfig.y2) { - expandedPlotConfig.y2 = expandYAxisConfig(plotConfig.y2); - } - - return expandedPlotConfig; -} - -export function expandChartDef(data: ISerializedDataFrame, plotConfig: IPlotConfig, axisMap: IAxisMap): IChartDef { - return { - data, - plotConfig: expandPlotConfig(plotConfig), - axisMap: expandAxisMap(axisMap, data.columnOrder), - }; -} diff --git a/src/index.ts b/src/index.ts index a8acc9d..d9b97d6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,8 @@ import { ISeries, Series } from "data-forge"; import { IDataFrame, DataFrame } from "data-forge"; -import { IPlotAPI, PlotAPI, /*todo: globalChartRenderer,*/ startPlot, endPlot } from "./plot-api"; -import { IPlotConfig, IAxisMap } from "./chart-def"; -export * from "./chart-def"; -export { ChartType, AxisType, HorizontalLabelPosition, VerticalLabelPosition } from "@data-forge-plot/chart-def"; +import { IAxisMap, IPlotAPI, IPlotConfig, plot } from "plot"; +export * from "@plotex/chart-def"; +export { IPlotAPI, IAxisConfig, IXAxisConfig, IYAxisConfig, IPlotConfig, IYAxisSeriesConfig, IAxisMap } from "plot"; // // Augment ISeries and Series with plot function. @@ -31,14 +30,9 @@ const seriesPlotDefaults: IPlotConfig = { }; function plotSeries(this: ISeries, plotConfig?: IPlotConfig, axisMap?: IAxisMap): IPlotAPI { - const serializedData = this - .inflate((value: any) => ({ __value__: value })) - .serialize(); - return new PlotAPI(serializedData, plotConfig || {}, axisMap || {}, seriesPlotDefaults); + return plot(this.toArray(), plotConfig, axisMap); } -Series.prototype.startPlot = startPlot; -Series.prototype.endPlot = endPlot; Series.prototype.plot = plotSeries; // @@ -46,16 +40,10 @@ Series.prototype.plot = plotSeries; // declare module "data-forge/build/lib/dataframe" { interface IDataFrame { - startPlot(): void; - endPlot(): void; - plot(plotDef?: IPlotConfig, axisMap?: IAxisMap): IPlotAPI; } interface DataFrame { - startPlot(): void; - endPlot(): void; - plot(plotDef?: IPlotConfig, axisMap?: IAxisMap): IPlotAPI; } } @@ -66,11 +54,8 @@ const dataFramePlotDefaults: IPlotConfig = { }, }; -function plotDataFrame(this: IDataFrame, plotDef?: IPlotConfig, axisMap?: IAxisMap): IPlotAPI { - const serializedData = this.serialize(); - return new PlotAPI(serializedData, plotDef || {}, axisMap || {}, dataFramePlotDefaults); +function plotDataFrame(this: IDataFrame, plotConfig?: IPlotConfig, axisMap?: IAxisMap): IPlotAPI { + return plot(this.toArray(), plotConfig, axisMap); } -DataFrame.prototype.startPlot = startPlot; -DataFrame.prototype.endPlot = endPlot; DataFrame.prototype.plot = plotDataFrame; diff --git a/src/plot-api.ts b/src/plot-api.ts deleted file mode 100644 index 71f157b..0000000 --- a/src/plot-api.ts +++ /dev/null @@ -1,733 +0,0 @@ -const opn = require("opn"); -import * as path from "path"; -import { ISerializedDataFrame } from "@data-forge/serialization"; -import { exportTemplate, IExportOptions } from "inflate-template"; -import { captureImage, ICaptureOptions } from "capture-template"; -import { IPlotConfig, IAxisMap } from "./chart-def"; -import { isObject } from "./utils"; -import { ChartType, IChartDef, AxisType, HorizontalLabelPosition, VerticalLabelPosition, IAxisConfig, IYAxisSeriesConfig, IAxisSeriesConfig } from "@data-forge-plot/chart-def"; -import { expandChartDef } from "./expand-chart-def"; -import { applyDefaults } from "./apply-defaults"; - -const DEFAULT_CHART_PACKAGE = "@data-forge-plot/apex"; - -// -// Reusable chart renderer. -// For improved performance. -// -// TODO :export let globalChartRenderer: IChartRenderer | null = null; - -async function findChartTemplatePath(): Promise { - const defaultTemplatePath = require.resolve(`${DEFAULT_CHART_PACKAGE}/build/template/template.json`); - const chartTemplatesPath = path.dirname(defaultTemplatePath); - return chartTemplatesPath; -} - -export async function startPlot(): Promise { - /*TODO: - globalChartRenderer = new ChartRenderer(); - - const chartTemplatesPath = await findChartTemplatesPath(); - await globalChartRenderer.start(chartTemplatesPath, false); - */ -} - -export async function endPlot(): Promise { - /*TODO: - await globalChartRenderer!.end(); - globalChartRenderer = null; - */ -} - -/** - * Options for image rendering. - */ -export interface IRenderOptions { - /** - * Open the image in your default image viewer. - */ - openImage?: boolean; - - /** - * Path to electron, so that electron can be installed separately to a different location and shared - * between the various packages that need it. - * - * Electron is used to render charts and capture them to images. - */ - electronPath?: string; - - /** - * Name of the template used to render the image. - */ - template?: string; - - /** - * Set to true to show the chart definition after expansion and also after formatting. - */ - showChartDef?: boolean; -} - -/** - * Options for exporting web projects for interactive charts. - */ -export interface IWebExportOptions { - /** - * Open the exported web visualization in the browser after exporting it. - * Default: false - */ - openBrowser?: boolean; - - /** - * Set to true to overwrite existing output. - * Default: false - */ - overwrite?: boolean; - - /** - * Name of the template used to render the image. - */ - template?: string; - - /** - * Set to true to show the chart definition after expansion and also after formatting. - */ - showChartDef?: boolean; -} - -/** - * Options for exporting Node.js projects for interactive charts. - */ -export interface INodejsExportOptions { - - /** - * Set to true to overwrite existing output. - * Default: false - */ - overwrite?: boolean; -} - -/** - * Fluent API for configuring the plot. - */ -export interface IPlotAPI { - - /** - * Set the type of the chart to be plotted. - * - * @param chartType Specifies the chart type. - */ - chartType(chartType: ChartType): IPlotAPI; - - /** - * Set the width of the chart. - */ - width(width: number | string): IPlotAPI; - - /** - * Set the height of the chart. - */ - height(height: number | string): IPlotAPI; - - /** - * Configure the x axis. - */ - x(): IXAxisConfigAPI; - - /** - * Configure the y axis. - */ - y(): IYAxisConfigAPI; - - /** - * Configure the y axis. - */ - y2(): IYAxisConfigAPI; - - /** - * Render the plot to an image file. - */ - renderImage(imageFilePath: string, renderOptions?: IRenderOptions): Promise; - - /** - * Export an interactive web visualization of the chart. - */ - exportWeb(outputFolderPath: string, exportOptions?: IWebExportOptions): Promise; - - /** - * Serialize the plot definition so that it can be converted to JSON. - * The JSON definition of the chart can be used to instantiate the chart in a browser. - */ - serialize(): IChartDef; -} - -/** - * Plot API for configuring a particular axis. - */ -export interface IAxisConfigAPI extends IPlotAPI { - - /** - * Set the label for the axis. - */ - label(label: string): FluentT; - - /** - * Set the type of the axis. - */ - type(axisType: AxisType): FluentT; -} - -/** - * Configure a series. - */ -export interface IAxisSeriesConfigAPI extends IPlotAPI { -} - -/** - * Configure an X axis series. - */ -export interface IXAxisSeriesConfigAPI extends IAxisSeriesConfigAPI { - -} - -/** - * Configure a Y axis series. - */ -export interface IYAxisSeriesConfigAPI extends IAxisSeriesConfigAPI { - - /** - * Set the series label. - */ - label(label: string): IYAxisSeriesConfigAPI; - - /** - * Set the display format for values of this series. - */ - format(formatString: string): IYAxisSeriesConfigAPI; - - /** - * Configure an explicit x axis for this series. - */ - setX(seriesName: string): IXAxisSeriesConfigAPI; -} - -/** - * Plot API for configuring a particular axis. - */ -export interface IXAxisConfigAPI extends IAxisConfigAPI { - - /** - * Set the series for the x axis. - */ - setSeries(seriesName: string): IXAxisSeriesConfigAPI; - - /** - * Set the position for the label. - */ - labelPosition(position: HorizontalLabelPosition): IXAxisConfigAPI; -} - -/** - * Plot API for configuring a particular Y axis. - */ -export interface IYAxisConfigAPI extends IAxisConfigAPI { - - /** - * Add a series to a Y axis. - */ - addSeries(seriesName: string): IYAxisSeriesConfigAPI; - - /** - * Set the position for the label. - */ - labelPosition(position: VerticalLabelPosition): IYAxisConfigAPI; - - /** - * Sets the minimum value to render on the axis. - * @param value The minimum value to render. - */ - min(value: number): IYAxisConfigAPI; - - /** - * Sets the maximum value to render on the axis. - * @param value The maximum value to render. - */ - max(value: number): IYAxisConfigAPI; -} - -/** - * Fluent API for configuring the plot. - */ -export abstract class AbstractPlotAPI implements IPlotAPI { - - // - // The expanded chart def. - // - protected chartDef: IChartDef; - - // - // Defaults for the chart configuration. - // - private plotDefaults?: IPlotConfig; - - constructor(chartDef: IChartDef, plotDefaults?: IPlotConfig) { - this.chartDef = chartDef; - this.plotDefaults = plotDefaults; - } - - /** - * Set the type of the chart to be plotted. - * - * @param chartType Specifies the chart type. - */ - chartType(chartType: ChartType): IPlotAPI { - this.chartDef.plotConfig.chartType = chartType; // TODO: could call toLower, would have to also toLower the config. - return this; - } - - /** - * Set the width of the chart. - */ - width(width: number | string): IPlotAPI { - this.chartDef.plotConfig.width = width; - return this; - } - - /** - * Set the height of the chart. - */ - height(height: number | string): IPlotAPI { - this.chartDef.plotConfig.height = height; - return this; - } - - /** - * Configure the default x axis. - */ - x(): IXAxisConfigAPI { - if (!this.chartDef.plotConfig.x) { - this.chartDef.plotConfig.x = {}; - } - - return new XAxisConfigAPI( - "x", - this.chartDef.plotConfig.x, - (seriesName: string) => { - if (this.chartDef.axisMap.x) { - this.chartDef.axisMap.x.series = seriesName; - return this.chartDef.axisMap.x; - } - else { - const seriesConfig: IAxisSeriesConfig = { - series: seriesName, - }; - this.chartDef.axisMap.x = seriesConfig; - return seriesConfig; - } - }, - this.chartDef - ); - } - - /** - * Configure the y axis. - */ - y(): IYAxisConfigAPI { - if (!this.chartDef.plotConfig.y) { - this.chartDef.plotConfig.y = {}; - } - - return new YAxisConfigAPI( - "y", - this.chartDef.plotConfig.y!, - (seriesName: string) => { - const seriesConfig: IYAxisSeriesConfig = { - series: seriesName, - }; - this.chartDef.axisMap.y.push(seriesConfig); - return seriesConfig; - }, - this.chartDef - ); - } - - /** - * Configure the y axis. - */ - y2(): IYAxisConfigAPI { - if (!this.chartDef.plotConfig.y2) { - this.chartDef.plotConfig.y2 = {}; - } - - return new YAxisConfigAPI( - "y2", - this.chartDef.plotConfig.y2!, - (seriesName: string) => { - const seriesConfig: IYAxisSeriesConfig = { - series: seriesName, - }; - this.chartDef.axisMap.y2.push(seriesConfig); - return seriesConfig; - }, - this.chartDef - ); - } - - /** - * Render the plot to an image file. - */ - async renderImage(imageFilePath: string, renderOptions?: IRenderOptions): Promise { - - const chartDef = this.serialize(); - if (renderOptions && renderOptions.showChartDef) { - console.log("Expanded chart definition:"); - console.log(JSON.stringify(chartDef, null, 4)); - } - - const templatePath = renderOptions && renderOptions.template || await findChartTemplatePath(); - const captureOptions: ICaptureOptions = { - electronPath: renderOptions && renderOptions.electronPath, - inflateOptions: { - inMemoryFiles: [ - { - file: "chart-def.json", - content: JSON.stringify( - { - chartDef, - options: { - makeStatic: true, - showChartDef: renderOptions && renderOptions.showChartDef || false, - }, - }, - null, - 4 - ), - }, - ], - }, - }; - await captureImage(templatePath, { chartDef }, imageFilePath, captureOptions); - - if (renderOptions && renderOptions.openImage) { - opn(path.resolve(imageFilePath)); - } - } - - /** - * Export an interactive web visualization of the chart. - */ - async exportWeb(outputFolderPath: string, exportOptions?: IWebExportOptions): Promise { - - const chartDef = this.serialize(); - if (exportOptions && exportOptions.showChartDef) { - console.log("Expanded chart definition:"); - console.log(JSON.stringify(chartDef, null, 4)); - } - - const templatePath = exportOptions && exportOptions.template || await findChartTemplatePath(); - const overwrite = exportOptions && !!exportOptions.overwrite || false; - - const exportTemplateOptions: IExportOptions = { - overwrite, - inMemoryFiles: [ - { - file: "chart-def.json", - content: JSON.stringify( - { - chartDef, - options: { - makeStatic: false, - showChartDef: exportOptions && exportOptions.showChartDef || false, - }, - }, - null, - 4 - ), - }, - ], - }; - - await exportTemplate(templatePath, { chartDef }, outputFolderPath, exportTemplateOptions); - - if (exportOptions && exportOptions.openBrowser) { - opn("file://" + path.resolve(path.join(outputFolderPath, "index.html"))); - } - } - - /** - * Serialize the plot definition so that it can be converted to JSON. - * The JSON definition of the chart can be used to instantiate the chart in a browser. - */ - serialize(): IChartDef { - return applyDefaults(this.chartDef, this.plotDefaults); // Set missing default values after configuration by the fluent. - } - - /** - * Used to external detect the type of this object. - */ - getTypeCode(): string { - return "plot"; - } -} - -/** - * Fluent API for configuring the plot. - */ -export class PlotAPI extends AbstractPlotAPI { - - /** - * Deserialize an instance of PlotAPI from a previously serialize chart def. - * - * @param chartDef The chart definition to deserialize from. - */ - static deserialize(chartDef: IChartDef): IPlotAPI { - return new PlotAPI(chartDef.data, chartDef.plotConfig, chartDef.axisMap); - } - - constructor(data: ISerializedDataFrame, plotConfig: IPlotConfig, axisMap: IAxisMap, plotDefaults?: IPlotConfig) { - if (!isObject(data)) { - throw new Error("Expected 'data' parameter to PlotAPI constructor to be a serialized dataframe."); - } - - super(expandChartDef(data, plotConfig, axisMap), plotDefaults); - } -} - -/** - * Fluent API for series configuration. - */ -abstract class AxisSeriesConfigAPI extends AbstractPlotAPI implements IAxisSeriesConfigAPI { - - seriesName: string; - seriesConfig: SeriesConfigT; - - constructor( - seriesName: string, - seriesConfig: SeriesConfigT, - chartDef: IChartDef - ) { - super(chartDef); - - this.seriesName = seriesName; - this.seriesConfig = seriesConfig; - } -} - -/** - * Fluent API for X axis series configuration. - */ -class XAxisSeriesConfigAPI extends AxisSeriesConfigAPI implements IXAxisSeriesConfigAPI { - - constructor( - seriesName: string, - seriesConfig: IAxisSeriesConfig, - chartDef: IChartDef - ) { - super(seriesName, seriesConfig, chartDef); - } -} - -/** - * Fluent API for Y axis series configuration. - */ -class YAxisSeriesConfigAPI extends AxisSeriesConfigAPI implements IYAxisSeriesConfigAPI { - - constructor( - seriesName: string, - seriesConfig: IYAxisSeriesConfig, - chartDef: IChartDef - ) { - super(seriesName, seriesConfig, chartDef); - } - - /** - * Set the label for the series. - */ - label(label: string): IYAxisSeriesConfigAPI { - this.seriesConfig.label = label; - return this; - } - - /** - * Set the display format for values of this series. - */ - format(formatString: string): IYAxisSeriesConfigAPI { - this.seriesConfig.format = formatString; - return this; - } - - /** - * Configure an explicit x axis for this series. - */ - setX(seriesName: string): IXAxisSeriesConfigAPI { - if (!this.seriesConfig.x) { - this.seriesConfig.x = { series: seriesName }; - } - else { - this.seriesConfig.x.series = seriesName; - } - - return new XAxisSeriesConfigAPI( - "x", - this.seriesConfig.x!, - this.chartDef - ); - } -} - -/** - * Fluent API for configuring an axis of the chart. - */ -abstract class AxisConfigAPI extends AbstractPlotAPI implements IAxisConfigAPI { - - /** - * The name of the axis being configured. - */ - protected axisName: string; - - /** - * Configuration for the axis. - */ - protected axisConfig: IAxisConfig; - - constructor( - axisName: string, - axisConfig: IAxisConfig, - chartDef: IChartDef - ) { - super(chartDef); - - this.axisName = axisName; - this.axisConfig = axisConfig; - } - - /** - * Set the label for the axis. - */ - label(label: string): FluentT { - - if (!this.axisConfig.label) { - this.axisConfig.label = {}; - } - - this.axisConfig.label.text = label; - return this as any as FluentT; - } - - /** - * Set the type of the axis. - */ - type(axisType: AxisType): FluentT { - this.axisConfig.axisType = axisType; - return this as any as FluentT; - } -} - -/** - * Fluent API for configuring an axis of the chart. - */ -class XAxisConfigAPI extends AxisConfigAPI implements IXAxisConfigAPI { - - createSeriesConfig: (seriesName: string) => IAxisSeriesConfig; - - constructor( - axisName: string, - axisConfig: IAxisConfig, - createSeriesConfig: (seriesName: string) => IAxisSeriesConfig, - chartDef: IChartDef - ) { - super(axisName, axisConfig, chartDef); - - this.createSeriesConfig = createSeriesConfig; - } - - /** - * Set the series for the x axis. - */ - setSeries(seriesName: string): IXAxisSeriesConfigAPI { - return new XAxisSeriesConfigAPI( - seriesName, - this.createSeriesConfig(seriesName), - this.chartDef - ); - } - - /** - * Set the position for the label. - */ - labelPosition(position: HorizontalLabelPosition): IXAxisConfigAPI { - - if (!this.axisConfig.label) { - this.axisConfig.label = {}; - } - - this.axisConfig.label.position = position; - return this; - } -} - -/** - * Fluent API for configuring an axis of the chart. - */ -class YAxisConfigAPI extends AxisConfigAPI implements IYAxisConfigAPI { - - createSeriesConfig: (seriesName: string) => IYAxisSeriesConfig; - - constructor( - axisName: string, - axisConfig: IAxisConfig, - createSeriesConfig: (seriesName: string) => IYAxisSeriesConfig, - chartDef: IChartDef - ) { - super(axisName, axisConfig, chartDef); - - this.createSeriesConfig = createSeriesConfig; - } - - /** - * Add a series to a Y axis. - */ - addSeries(seriesName: string): IYAxisSeriesConfigAPI { - - return new YAxisSeriesConfigAPI( - seriesName, - this.createSeriesConfig(seriesName), - this.chartDef - ); - } - - /** - * Set the position for the label. - */ - labelPosition(position: VerticalLabelPosition): IYAxisConfigAPI { - if (!this.axisConfig.label) { - this.axisConfig.label = {}; - } - else if (typeof(this.axisConfig.label) === "string") { - this.axisConfig.label = { - text: this.axisConfig.label, - }; - } - - this.axisConfig.label.position = position; - return this; - } - - /** - * Sets the minimum value to render on the axis. - * @param value The minimum value to render. - */ - min(value: number): IYAxisConfigAPI { - // todo: - return this; - } - - /** - * Sets the maximum value to render on the axis. - * @param value The maximum value to render. - */ - max(value: number): IYAxisConfigAPI { - // todo: - return this; - } - -} diff --git a/src/test/apply-defaults.test.ts b/src/test/apply-defaults.test.ts deleted file mode 100644 index e7e2de7..0000000 --- a/src/test/apply-defaults.test.ts +++ /dev/null @@ -1,329 +0,0 @@ -import "jest"; -import { applyDefaults } from "../apply-defaults"; -import { ChartType } from "@data-forge-plot/chart-def"; - -describe("apply defaults", () => { - - it("chart type defaults to line 1", () => { - const inputChartDef: any = { data: { columnOrder: [], }, plotConfig: {} }; - const expanded = applyDefaults(inputChartDef); - expect(expanded.plotConfig!.chartType!).toEqual(ChartType.Line); - }); - - it("chart type defaults to line 2", () => { - const inputChartDef: any = { data: { columnOrder: [], }, plotConfig: {} }; - const expanded = applyDefaults(inputChartDef); - expect(expanded.plotConfig!.chartType!).toEqual(ChartType.Line); - }); - - it("width defaults to 800", () => { - const inputChartDef: any = { data: { columnOrder: [], }, plotConfig: {} }; - const expanded = applyDefaults(inputChartDef); - expect(expanded.plotConfig!.width).toEqual(800); - }); - - it("height defaults to 600", () => { - const inputChartDef: any = { data: { columnOrder: [], }, plotConfig: {} }; - const expanded = applyDefaults(inputChartDef); - expect(expanded.plotConfig!.height).toEqual(600); - }); - - it("y axis defaults to all columns when no y axis series is specified 1", () => { - - const data: any = { columnOrder: ["a", "b", "c"] }; - const plotConfig: any = {}; - const axisMap: any = {}; - const inputChartDef: any = { data, plotConfig, axisMap }; - const expanded = applyDefaults(inputChartDef); - expect(expanded.axisMap.y).toEqual([ - { - series: "a", - }, - { - series: "b", - }, - { - series: "c", - }, - ]); - expect(expanded.axisMap.y2).toEqual([]); - }); - - it("y axis defaults to all columns when no y axis series is specified 2", () => { - - const data: any = { columnOrder: ["a", "b", "c"] }; - const plotConfig: any = {}; - const axisMap: any = { y: [], y2: [] }; - const inputChartDef: any = { data, plotConfig, axisMap }; - const expanded = applyDefaults(inputChartDef); - expect(expanded.axisMap.y).toEqual([ - { - series: "a", - }, - { - series: "b", - }, - { - series: "c", - }, - ]); - expect(expanded.axisMap.y2).toEqual([]); - }); - - it("can set plot defaults 1", () => { - const inputChartDef: any = { data: { columnOrder: [], } }; - const expanded = applyDefaults(inputChartDef, { chartType: ChartType.Bubble }); - expect(expanded.plotConfig!.chartType!).toEqual(ChartType.Bubble); - }); - - it("can set plot defaults 2", () => { - const inputChartDef: any = { data: { columnOrder: [], }, plotConfig: {} }; - const expanded = applyDefaults(inputChartDef, { chartType: ChartType.Bubble }); - expect(expanded.plotConfig!.chartType!).toEqual(ChartType.Bubble); - }); - - const testData = { - columnOrder: ["a", "b"], - columns: { - a: "number", - b: "number", - }, - index: { - type: "number", - values: [2, 3, 4], - }, - values: [ - { - a: 10, - b: 100, - }, - { - a: 20, - b: 200, - }, - { - a: 30, - b: 300, - }, - ], - }; - - it("y min can be passed through", () => { - - const inputChartDef: any = { - data: testData, - plotConfig: { - y: { - min: 15, - }, - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y!.min).toBe(15); - }); - - it("y min defaults to y series min", () => { - - const inputChartDef: any = { - data: testData, - plotConfig: { - y: { - }, - y2: { - }, - }, - axisMap: { - y: [ - { - series: "a", - }, - { - series: "b", - }, - ], - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y!.min).toBe(10); - }); - - it("y max can be passed through", () => { - - const inputChartDef: any = { - data: testData, - plotConfig: { - y: { - max: 25, - }, - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y!.max).toBe(25); - }); - - it("y max defaults to y series max", () => { - - const inputChartDef: any = { - data: testData, - plotConfig: { - y: { - }, - y2: { - }, - }, - axisMap: { - y: [ - { - series: "a", - }, - { - series: "b", - }, - ], - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y!.max).toBe(300); - }); - - it("y2 min can be passed through", () => { - - const inputChartDef: any = { - data: testData, - plotConfig: { - y2: { - min: 0, - }, - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y2!.min).toBe(0); - }); - - it("y2 min defaults to y2 series min", () => { - - const inputChartDef: any = { - data: testData, - plotConfig: { - y: { - }, - y2: { - }, - }, - axisMap: { - y2: [ - { - series: "a", - }, - { - series: "b", - }, - ], - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y2!.min).toBe(10); - }); - - it("y2 max can be passed through", () => { - - const inputChartDef: any = { - data: testData, - plotConfig: { - y2: { - max: 400, - }, - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y2!.max).toBe(400); - }); - - it("y2 max defaults to y2 series max", () => { - - const inputChartDef: any = { - data: testData, - plotConfig: { - y: { - }, - y2: { - }, - }, - axisMap: { - y2: [ - { - series: "a", - }, - { - series: "b", - }, - ], - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y2!.max).toBe(300); - }); - - it("min/max not computed for non number data", () => { - - const data = { - columnOrder: ["a", "b"], - columns: { - a: "string", - b: "string", - }, - index: { - type: "number", - values: [2, 3, 4], - }, - values: [ - { - a: "10", - b: "100", - }, - { - a: "20", - b: "200", - }, - { - a: "30", - b: "300", - }, - ], - }; - - const inputChartDef: any = { - data, - plotConfig: { - y: { - }, - y2: { - }, - }, - axisMap: { - y: [ - { - series: "a", - }, - { - series: "b", - }, - ], - }, - }; - - const chartDef = applyDefaults(inputChartDef); - expect(chartDef.plotConfig.y!.min).toBeUndefined(); - expect(chartDef.plotConfig.y!.max).toBeUndefined(); - expect(chartDef.plotConfig.y2!.min).toBeUndefined(); - expect(chartDef.plotConfig.y2!.max).toBeUndefined(); - }); -}); diff --git a/src/test/dataframe-fluent.test.ts b/src/test/dataframe-fluent.test.ts index 6d61f52..8ab013e 100644 --- a/src/test/dataframe-fluent.test.ts +++ b/src/test/dataframe-fluent.test.ts @@ -5,56 +5,41 @@ import "../index"; describe("data-forge-plot - dataframe fluent", () => { it("can explicity set y axis", () => { - const df = new DataFrame({ index: [1, 2, 3], values: [{ A: 10, }, { A: 20 }, { A: 30 } ] }); const plotAPI = df.plot() .y() .addSeries("A"); - - expect(plotAPI.serialize()).toEqual({ - data: { - columnOrder: [ - "A", - ], - columns: { - A: "number", - }, - index: { - type: "number", - values: [ 1, 2, 3 ], - }, - values: [ - { - A: 10, - }, - { - A: 20, - }, - { - A: 30, - }, - ], + expect(plotAPI.serialize()).toEqual( { + "data": { + "series": { + "A": { + "type": "number", + "values": [ + 10, + 20, + 30 + ] + } + } }, - plotConfig: { - chartType: "line", - width: 800, - height: 600, - y: { - min: 10, - max: 30, - }, - y2: { + "plotConfig": { + "y": { + "min": 10, + "max": 30 }, + "chartType": "line", + "width": 800, + "height": 600, + "y2": {} }, - axisMap: { - y: [ + "axisMap": { + "y": [ { - series: "A", - }, + "series": "A" + } ], - y2: [], - }, + "y2": [] + } }); }); - }); diff --git a/src/test/dataframe.test.ts b/src/test/dataframe.test.ts index f2943b2..31c560a 100644 --- a/src/test/dataframe.test.ts +++ b/src/test/dataframe.test.ts @@ -1,7 +1,6 @@ import "jest"; import { DataFrame } from "data-forge"; import "../index"; -import { ChartType } from "@data-forge-plot/chart-def"; describe("data-forge-plot - dataframe configuration", () => { @@ -10,59 +9,39 @@ describe("data-forge-plot - dataframe configuration", () => { const df = new DataFrame({ index: [1, 2, 3], values: [{ A: 10 }, { A: 20 }, { A: 30 } ] }); const plotAPI = df.plot(); expect(plotAPI.serialize()).toEqual({ - data: { - columnOrder: [ - "A", - ], - columns: { - A: "number", - }, - index: { - type: "number", - values: [ 1, 2, 3 ], - }, - values: [ - { - A: 10, - }, - { - A: 20, - }, - { - A: 30, - }, - ], + "data": { + "series": { + "A": { + "type": "number", + "values": [ + 10, + 20, + 30 + ] + } + } }, - plotConfig: { - chartType: "line", - width: 800, - height: 600, - y: { - min: 10, - max: 30, + "plotConfig": { + "legend": { + "show": true }, - y2: { - }, - legend: { - show: true, + "chartType": "line", + "width": 800, + "height": 600, + "y": { + "min": 10, + "max": 30 }, + "y2": {} }, - axisMap: { - y: [ + "axisMap": { + "y": [ { - series: "A", - }, + "series": "A" + } ], - y2: [], - }, + "y2": [] + } }); }); - - it("legend is enabled by default for dataframe", () => { - - const df = new DataFrame(); - const plotAPI = df.plot(); - const serialized = plotAPI.serialize(); - expect(serialized.plotConfig.legend!.show).toEqual(true); - }); }); diff --git a/src/test/expand-chart-def.test.ts b/src/test/expand-chart-def.test.ts deleted file mode 100644 index 518d7e2..0000000 --- a/src/test/expand-chart-def.test.ts +++ /dev/null @@ -1,184 +0,0 @@ -import "jest"; -import { expandChartDef, expandAxisConfig, expandAxisMap, expandSeriesConfig, expandYSeriesConfig, expandYSeriesConfigArray } from "../expand-chart-def"; -import { ChartType, AxisType } from "@data-forge-plot/chart-def"; - -describe("expand chart def", () => { - - it("axis label string is expended to an object", () => { - const expanded = expandAxisConfig({ label: "My label" }); - expect(expanded.label!.text).toBe("My label"); - }); - - it("can expand string series config to object", () => { - const expanded = expandSeriesConfig("my series"); - expect(expanded.series).toBe("my series"); - }); - - it("can clone object series config", () => { - const seriesConfig = { series: "my series" }; - const expanded = expandSeriesConfig(seriesConfig); - expect(expanded).not.toBe(seriesConfig); - expect(expanded).toEqual(seriesConfig); - }); - - it("can expand y series config with specific x series as string", () => { - const seriesConfig = { series: "my y series", x: "my x series" }; - const expanded = expandYSeriesConfig(seriesConfig); - expect(expanded.x!.series).toBe("my x series"); - }); - - it("can expand undefined y series to empty array", () => { - const expanded = expandYSeriesConfigArray(); - expect(expanded).toEqual([]); - }); - - it("can expand empty y series to empty array", () => { - const expanded = expandYSeriesConfigArray([]); - expect(expanded).toEqual([]); - }); - - it("can expand string y series to array", () => { - const expanded = expandYSeriesConfigArray("my series"); - expect(expanded).toEqual([ - { - series: "my series", - }, - ]); - }); - - it("can expand object y series to array", () => { - const expanded = expandYSeriesConfigArray({ series: "my series" }); - expect(expanded).toEqual([ - { - series: "my series", - }, - ]); - }); - - it("can expand string array y series to array", () => { - const expanded = expandYSeriesConfigArray(["s1", "s2"]); - expect(expanded).toEqual([ - { - series: "s1", - }, - { - series: "s2", - }, - ]); - }); - - it("can expand object array y series to array", () => { - const expanded = expandYSeriesConfigArray([{ series: "s1" }, { series: "s2" }]); - expect(expanded).toEqual([ - { - series: "s1", - }, - { - series: "s2", - }, - ]); - }); - - it("can expand empty axis map", () => { - const expanded = expandAxisMap({}, []); - expect(expanded).toEqual({ - y: [], - y2: [], - }); - }); - - it("can expand empty axis map 2", () => { - const expanded = expandAxisMap({ y: [], y2: [] }, []); - expect(expanded).toEqual({ - y: [], - y2: [], - }); - }); - - it("can expand axis map with strings", () => { - const expanded = expandAxisMap({ x: "my x", y: "my y1", y2: "my y2" }, []); - expect(expanded).toEqual({ - x: { - series: "my x", - }, - y: [ - { - series: "my y1", - }, - ], - y2: [ - { - series: "my y2", - }, - ], - }); - }); - - it("y does not default when y is specified", () => { - - const data: any = { columnOrder: ["a", "b", "c"] }; - const plotConfig: any = {}; - const axisMap: any = { y: "b" }; - const chartDef = expandChartDef(data, plotConfig, axisMap); - expect(chartDef.axisMap.y).toEqual([ - { - series: "b", - }, - ]); - expect(chartDef.axisMap.y2).toEqual([]); - }); - - it("y does not default when y2 is specified", () => { - - const data: any = { columnOrder: ["a", "b", "c"] }; - const plotConfig: any = {}; - const axisMap: any = { y2: "b" }; - const chartDef = expandChartDef(data, plotConfig, axisMap); - expect(chartDef.axisMap.y).toEqual([]); - expect(chartDef.axisMap.y2).toEqual([ - { - series: "b", - }, - ]); - }); - - it("can set chart type", () => { - const data: any = {}; - const plotConfig: any = { chartType: ChartType.Donut }; - const axisMap: any = {}; - const chartDef = expandChartDef(data, plotConfig, axisMap); - expect(chartDef.plotConfig.chartType).toBe(ChartType.Donut); - }); - - it("can set width and height", () => { - - const data: any = {}; - const plotConfig: any = { width: 5555, height: 6666 }; - const axisMap: any = {}; - const chartDef = expandChartDef(data, plotConfig, axisMap); - expect(chartDef.plotConfig.width).toBe(5555); - expect(chartDef.plotConfig.height).toBe(6666); - }); - - it("can expand axis config", () => { - - const xConfig = { axisType: AxisType.Category }; - const yConfig = { axisType: AxisType.Indexed }; - const y2Config = { axisType: AxisType.Timeseries }; - const expanded = expandChartDef({} as any, { x: xConfig, y: yConfig, y2: y2Config }, {}); - expect(expanded.plotConfig.x).not.toBe(xConfig); - expect(expanded.plotConfig.x).toEqual(xConfig); - expect(expanded.plotConfig.y).not.toBe(yConfig); - expect(expanded.plotConfig.y).toEqual(yConfig); - expect(expanded.plotConfig.y2).not.toBe(y2Config); - expect(expanded.plotConfig.y2).toEqual(y2Config); - }); - - it("can expand axis map", () => { - - const expanded = expandChartDef({} as any, {}, { x: "my x", y: "my y", y2: "my y2" }); - expect(expanded.axisMap.x).toEqual({ series: "my x" }); - expect(expanded.axisMap.y).toEqual([{ series: "my y" }]); - expect(expanded.axisMap.y2).toEqual([{ series: "my y2" }]); - }); -}); diff --git a/src/test/plot-api.test.ts b/src/test/plot-api.test.ts deleted file mode 100644 index 5970e53..0000000 --- a/src/test/plot-api.test.ts +++ /dev/null @@ -1,462 +0,0 @@ -import "jest"; -jest.mock("capture-template"); -jest.mock("inflate-template"); -import { captureImage } from "capture-template"; -import { exportTemplate } from "inflate-template"; -import { PlotAPI } from "../plot-api"; -import { ChartType, HorizontalLabelPosition, VerticalLabelPosition, AxisType } from "@data-forge-plot/chart-def"; -import { IAxisMap, IPlotConfig } from "../chart-def"; - -describe("plot-api", () => { - - it("chart type defaults to line when not specified", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - expect(plot.serialize().plotConfig.chartType).toBe(ChartType.Line); - }); - - it("can set chart type from def", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { chartType: ChartType.Bubble }; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - expect(plot.serialize().plotConfig.chartType).toBe(ChartType.Bubble); - }); - - it("can set chart type from fluent API", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - plot.chartType(ChartType.Bubble); - expect(plot.serialize().plotConfig.chartType).toBe(ChartType.Bubble); - }); - - it("can override chart type from fluent API", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { chartType: ChartType.Pie }; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - plot.chartType(ChartType.Radar); - expect(plot.serialize().plotConfig.chartType).toBe(ChartType.Radar); - }); - - it("can set width and height from def", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { width: 333, height: 444 }; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot.serialize(); - expect(serialized.plotConfig.width).toBe(333); - expect(serialized.plotConfig.height).toBe(444); - }); - - it("can set width and height from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { width: 333, height: 444 }; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .width(222) - .height(555); - const serialized = plot.serialize(); - expect(serialized.plotConfig.width).toBe(222); - expect(serialized.plotConfig.height).toBe(555); - }); - - it("can override width and height from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { width: 333, height: 444 }; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .width(99) - .height(88); - const serialized = plot.serialize(); - expect(serialized.plotConfig.width).toBe(99); - expect(serialized.plotConfig.height).toBe(88); - }); - - it("can serialize and deserialize", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { width: 333, height: 444 }; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized1 = plot.serialize(); - const serialized2 = PlotAPI.deserialize(serialized1).serialize(); - expect(serialized1).toEqual(serialized2); - }); - - it("can configure x axis", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .x() - .label("my label") - .serialize(); - expect(serialized.plotConfig.x!.label!.text).toBe("my label"); - }); - - it("can configure y axis", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y() - .label("my label") - .serialize(); - expect(serialized.plotConfig.y!.label!.text).toBe("my label"); - }); - - it("can configure y2 axis", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y2() - .label("my label") - .serialize(); - expect(serialized.plotConfig.y2!.label!.text).toBe("my label"); - }); - - it("can set x axis series", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .x() - .setSeries("my series") - .serialize(); - expect(serialized.axisMap.x!.series).toBe("my series"); - }); - - it("can add y axis series", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y() - .addSeries("my series") - .serialize(); - expect(serialized.axisMap.y[0].series).toBe("my series"); - }); - - it("can add y2 axis series", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y2() - .addSeries("my series") - .serialize(); - expect(serialized.axisMap.y2[0].series).toBe("my series"); - }); - - /*todo: - nothing to configure yet! - it("can config x axis series", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .x() - .setSeries("my series") - . - .serialize(); - expect(serialized.axisMap.x!.series).toBe("my series"); - }); - */ - - it("can configure y axis series", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y() - .addSeries("my series") - .label("a great series") - .serialize(); - expect(serialized.axisMap.y[0].label!).toBe("a great series"); - }); - - it("can set specific x series for y axis series", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y() - .addSeries("my series") - .setX("my x") - .serialize(); - expect(serialized.axisMap.y[0].x!.series).toBe("my x"); - }); - - it("can configure y axis series", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y2() - .addSeries("my series") - .label("a great series") - .serialize(); - expect(serialized.axisMap.y2[0].label!).toBe("a great series"); - }); - - it("can set specific x series for y2 axis series", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y2() - .addSeries("my series") - .setX("my x") - .serialize(); - expect(serialized.axisMap.y2[0].x!.series).toBe("my x"); - }); - - it("can set x axis label", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { x: { label: { text: "A label!" }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.label!.text).toBe("A label!"); - }); - - it("can set x axis label from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .x() - .label("My label!"); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.label!.text).toBe("My label!"); - }); - - it("can override x axis label from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { x: { label: { text: "A label!" }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .x() - .label("My label!"); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.label!.text).toBe("My label!"); - }); - - it("can set x axis label position", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { x: { label: { position: HorizontalLabelPosition.OuterRight }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.label!.position).toBe(HorizontalLabelPosition.OuterRight); - }); - - it("can set x axis type", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .x() - .type(AxisType.Timeseries); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.axisType).toBe(AxisType.Timeseries); - }); - - it("can set x axis label", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { x: { label: { text: "A label!" }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.label!.text).toBe("A label!"); - }); - - it("can set x axis label from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .x() - .label("My label!"); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.label!.text).toBe("My label!"); - }); - - it("can override x axis label from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { x: { label: { text: "A label!" }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .x() - .label("My label!"); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.label!.text).toBe("My label!"); - }); - - it("can set x axis label position", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .x() - .labelPosition(HorizontalLabelPosition.OuterLeft) - .serialize(); - expect(serialized.plotConfig.x!.label!.position).toBe(HorizontalLabelPosition.OuterLeft); - }); - - it("can set x axis type", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .x() - .type(AxisType.Timeseries); - const serialized = plot.serialize(); - expect(serialized.plotConfig.x!.axisType).toBe(AxisType.Timeseries); - }); - - it("can set y axis label", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { y: { label: { text: "A label!" }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot.serialize(); - expect(serialized.plotConfig.y!.label!.text).toBe("A label!"); - }); - - it("can set y axis label from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .y() - .label("My label!"); - const serialized = plot.serialize(); - expect(serialized.plotConfig.y!.label!.text).toBe("My label!"); - }); - - it("can override y axis label from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { y: { label: { text: "A label!" }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .y() - .label("My label!"); - const serialized = plot.serialize(); - expect(serialized.plotConfig.y!.label!.text).toBe("My label!"); - }); - - it("can set y axis label position", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y() - .labelPosition(VerticalLabelPosition.OuterMiddle) - .serialize(); - expect(serialized.plotConfig.y!.label!.position).toBe(VerticalLabelPosition.OuterMiddle); - }); - - it("can set y axis type", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .y() - .type(AxisType.Timeseries); - const serialized = plot.serialize(); - expect(serialized.plotConfig.y!.axisType).toBe(AxisType.Timeseries); - }); - - it("can set y2 axis label", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { y2: { label: { text: "A label!" }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot.serialize(); - expect(serialized.plotConfig.y2!.label!.text).toBe("A label!"); - }); - - it("can set y2 axis label from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .y2() - .label("My label!"); - const serialized = plot.serialize(); - expect(serialized.plotConfig.y2!.label!.text).toBe("My label!"); - }); - - it("can override y2 axis label from fluent api", () => { - const data: any = {}; - const plotConfig: IPlotConfig = { y2: { label: { text: "A label!" }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .y2() - .label("My label!"); - const serialized = plot.serialize(); - expect(serialized.plotConfig.y2!.label!.text).toBe("My label!"); - }); - - it("can set y2 axis label position", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const serialized = plot - .y2() - .labelPosition(VerticalLabelPosition.OuterMiddle) - .serialize(); - expect(serialized.plotConfig.y2!.label!.position).toBe(VerticalLabelPosition.OuterMiddle); - }); - - it("can set y2 axis type", () => { - const data: any = {}; - const plotConfig: IPlotConfig = {}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap) - .y2() - .type(AxisType.Timeseries); - const serialized = plot.serialize(); - expect(serialized.plotConfig.y2!.axisType).toBe(AxisType.Timeseries); - }); - - it("can render image", async () => { - const data: any = {}; - const plotConfig: IPlotConfig = { x: { label: { position: HorizontalLabelPosition.OuterRight }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const outputPath = "./output/test"; - await plot.renderImage(outputPath); - expect(captureImage).toHaveBeenCalled(); - }); - - it("can export web", async () => { - const data: any = {}; - const plotConfig: IPlotConfig = { x: { label: { position: HorizontalLabelPosition.OuterRight }}}; - const axisMap: IAxisMap = {}; - const plot = new PlotAPI(data, plotConfig, axisMap); - const outputPath = "./output/test"; - await plot.exportWeb(outputPath); - expect(exportTemplate).toHaveBeenCalled(); - }); -}); diff --git a/src/test/series.test.ts b/src/test/series.test.ts index b781038..04b344b 100644 --- a/src/test/series.test.ts +++ b/src/test/series.test.ts @@ -5,63 +5,42 @@ import "../index"; describe("data-forge-plot - series", () => { it("plot series with no configuration", () => { - const series = new Series({ index: [1, 2, 3], values: [10, 20, 30] }); const plotAPI = series.plot(); expect(plotAPI.serialize()).toEqual({ - data: { - columnOrder: [ - "__value__", - ], - columns: { - __value__: "number", - }, - index: { - type: "number", - values: [ 1, 2, 3 ], - }, - values: [ - { - __value__: 10, - }, - { - __value__: 20, - }, - { - __value__: 30, + "data": { + "series": { + "y": { + "type": "number", + "values": [ + 10, + 20, + 30 + ] } - ] + } }, - plotConfig: { - chartType: "line", - width: 800, - height: 600, - y: { - min: 10, - max: 30, - }, - y2: { + "plotConfig": { + "legend": { + "show": false }, - legend: { - show: false, + "chartType": "line", + "width": 800, + "height": 600, + "y": { + "min": 10, + "max": 30 }, + "y2": {} }, - axisMap: { - y: [ + "axisMap": { + "y": [ { - series: "__value__" + "series": "y" } ], - y2: [] + "y2": [] } }); }); - - it("legend is disabled by default for series", () => { - - const series = new Series(); - const plotAPI = series.plot(); - const serialized = plotAPI.serialize(); - expect(serialized.plotConfig.legend!.show).toEqual(false); - }); });