diff --git a/README.md b/README.md
index 160e228..8600fb1 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-[](https://npmjs.org/package/chartjs-plugin-regression)
+[](https://npmjs.com/package/chartjs-plugin-regression)
[](https://github.com/pomgui/chartjs-plugin-regression/blob/master/LICENSE)
-[](https://npmjs.org/package/chartjs-plugin-regression)
+[](https://npmjs.com/package/chartjs-plugin-regression)
# chartjs-plugin-regression
Chart.js plugin to calculate and draw statistical linear, exponential, power,
@@ -11,20 +11,22 @@ npm package as its calculation engine.
### Important
- Only `bar`, `line`, and `scatter` chart types are supported.
-- The plugin works just fine with chart.js@2.5.0, however that version may have some problems handling certain color configuration (not related with the plugin). No problems have been found with chart.js@^2.6.0.
-- The plugin does not work with chart.js@3.x
+- The plugin works with chart.js@3.x
+- To use the plugin for chart.js@2.x, then use [this version](https://www.npmjs.com/package/chartjs-plugin-regression/v/0.2.1) of the plugin
## Demo
For a better understanding of the capabilities of this plugin, please see this
[Live Demo](https://pomgui.github.io/chartjs-plugin-regression/demo/).
## Download
-The [compressed](https://pomgui.github.io/chartjs-plugin-regression/dist/chartjs-plugin-regression-0.2.1.js)
+The [compressed](https://pomgui.github.io/chartjs-plugin-regression/dist/chartjs-plugin-regression-3.0.0.js)
version includes the regression package.
## Installation
- npm install --save chartjs-plugin-regression
+```sh
+npm install --save chartjs-plugin-regression
+```
## Usage
diff --git a/demo/demo.js b/demo/demo.js
index 73bbc9a..6299111 100644
--- a/demo/demo.js
+++ b/demo/demo.js
@@ -55,9 +55,10 @@ function piChart_LinkFn($scope, element) {
options: {
plugins: {
// Global configuration of the plugin for all the datasets
- regressions: Object.assign({
- onCompleteCalculation: showRegressionResults
- },
+ regressions: Object.assign(
+ {
+ onCompleteCalculation: showRegressionResults
+ },
$scope.sample.optionsCfg
)
},
diff --git a/demo/demoHelpers.js b/demo/demoHelpers.js
index 772bc6e..96fdf84 100644
--- a/demo/demoHelpers.js
+++ b/demo/demoHelpers.js
@@ -83,8 +83,45 @@ var helpers = new (function () {
};
this.color = function (id, alpha) {
- const c = new Color({ h: id * 16, s: 100, l: 50 });
- c.alpha(alpha);
- return c.rgbaString();
+ var [r, g, b] = hslToRgb(id / 100, 1, 0.5);
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
+ };
+
+ /**
+ * Converts an HSL color value to RGB. Conversion formula
+ * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
+ * Assumes h, s, and l are contained in the set [0, 1] and
+ * returns r, g, and b in the set [0, 255].
+ *
+ * Source: https://stackoverflow.com/a/29316972/8524080
+ *
+ * @param {number} h The hue
+ * @param {number} s The saturation
+ * @param {number} l The lightness
+ * @return {Array} The RGB representation
+ */
+ function hslToRgb(h, s, l) {
+ var r, g, b;
+
+ if (s == 0) {
+ r = g = b = l; // achromatic
+ } else {
+ var hue2rgb = function hue2rgb(p, q, t) {
+ if (t < 0) t += 1;
+ if (t > 1) t -= 1;
+ if (t < 1 / 6) return p + (q - p) * 6 * t;
+ if (t < 1 / 2) return q;
+ if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
+ return p;
+ }
+
+ var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+ var p = 2 * l - q;
+ r = hue2rgb(p, q, h + 1 / 3);
+ g = hue2rgb(p, q, h);
+ b = hue2rgb(p, q, h - 1 / 3);
+ }
+
+ return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
}
})();
diff --git a/demo/index.html b/demo/index.html
index d1d90a0..360922b 100644
--- a/demo/index.html
+++ b/demo/index.html
@@ -4,13 +4,11 @@
chartjs-plugin-regression
-
-
-
+
+
+
+
@@ -31,13 +29,11 @@
Global Options Config
-
+
diff --git a/dist/chartjs-plugin-regression-3.0.0.js b/dist/chartjs-plugin-regression-3.0.0.js
new file mode 100644
index 0000000..ba9c505
--- /dev/null
+++ b/dist/chartjs-plugin-regression-3.0.0.js
@@ -0,0 +1 @@
+(()=>{var t={254:function(t,e){var r,n;void 0===(n="function"==typeof(r=function(t){"use strict";var e=Object.assign||function(t){for(var e=1;eMath.abs(r[o][a])&&(a=s);for(var c=o;c=o;p--)r[p][l]-=r[p][o]*r[o][l]/r[o][o]}for(var h=n-1;h>=0;h--){for(var f=0,d=h+1;d=0;b--)m+=b>1?y[b]+"x^"+b+" + ":1===b?y[b]+"x + ":y[b];return{string:m,points:x,predict:g,equation:[].concat(r(y)).reverse(),r2:o(i(t,x),e.precision)}}};t.exports=Object.keys(a).reduce((function(t,r){return e({_round:o},t,(c=function(t,i){return a[r](t,e({},n,i))},(s=r)in(i={})?Object.defineProperty(i,s,{value:c,enumerable:!0,configurable:!0,writable:!0}):i[s]=c,i));var i,s,c}),{})})?r.apply(e,[t]):r)||(t.exports=n)},642:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MetaDataSet=void 0;var n=r(67),i=function(){function t(t,e){this.getXY=void 0,this.isXY=!1;var r=e.regressions;this.chart=t,this.dataset=e,this.normalizedData=this._normalizeData(e.data),this.sections=this._createMetaSections(r),this._calculate()}return t.prototype._normalizeData=function(t){var e=this;return t.map((function(t,r){var n;return"number"==typeof t||null==t||void 0===t?n=[r,t]:(e.isXY=!0,n=[t.x,t.y]),n}))},t.prototype._createMetaSections=function(t){var e=this;return(t.sections||[{startIndex:0,endIndex:this.dataset.data.length-1}]).map((function(t){return new n.MetaSection(t,e)}))},t.prototype._calculate=function(){this.sections.forEach((function(t){return t.calculate()}))},t.prototype.adjustScales=function(){if(void 0===this.topY){var t,e,r=this.chart.scales;Object.keys(r).forEach((function(n){return"x"==n[0]&&(t=r[n])||(e=r[n])})),this.topY=e.top,this.bottomY=e.bottom,this.getXY=function(r,n){return{x:t.getPixelForValue(r,void 0,void 0,!0),y:e.getPixelForValue(n)}}}},t.prototype.drawRegressions=function(){var t=this.chart.ctx;t.save();try{this.sections.forEach((function(e){return e.drawRegressions(t)}))}finally{t.restore()}},t.prototype.drawRightBorders=function(){var t=this.chart.ctx;t.save();try{for(var e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MetaSection=void 0;var n=r(254),i={type:"linear",calculation:{precision:2,order:2},line:{width:2,color:"#000",dash:[]},extendPredictions:!1,copy:{overwriteData:"none"}},o=function(){function t(t,e){this._meta=e;var r,n,o,a,s=e.chart,c=e.dataset,u=(r=["type","calculation","line","extendPredictions","copy"],a=(n=s.config.options)&&(o=n.plugins)&&o.regressions||{},function t(e){for(var r=[],n=1;n1&&this.type.includes("copy"))throw Error("Invalid regression type:"+this.type+'. "none" cannot be combined with other type!')},t.prototype.calculate=function(){var t=this._meta.normalizedData.slice(this.startIndex,this.endIndex+1);"copy"==this.type[0]?this._calculateCopySection(t):this._calculateBestR2(t)},t.prototype._calculateBestR2=function(t){var e=this;this.result=this.type.reduce((function(r,i){var o=Object.assign({},e.calculation),a=i;/polynomial[34]$/.test(i)&&(o.order=parseInt(i.substr(10)),a=i.substr(0,10));var s=n[a](t,o);return s.type=i,!r||r.r2r.endIndex)&&("all"==i||"last"==i&&l==e.endIndex||"empty"==i&&!o[l])&&(e.copy.maxValue&&(u=Math.min(e.copy.maxValue,u)),void 0!==e.copy.minValue&&(u=Math.max(e.copy.minValue,u)),a[l]=s?{x:c,y:u}:u)}))}},t.prototype.drawRightBorder=function(t){t.beginPath(),this._setLineAttrs(t),t.setLineDash([10,2]),t.lineWidth=2;var e=this._meta.getXY(this.endIndex,0);t.moveTo(e.x,this._meta.topY),t.lineTo(e.x,this._meta.bottomY),t.fillStyle=this.line.color,t.fillText(this.label,e.x,this._meta.topY),t.stroke()},t.prototype.drawRegressions=function(t){for(var e=0,r=this._meta.sections.length;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ChartRegressions=void 0;var n=r(642),i={},o=0,a=function(){function t(){this.id="regressions"}return t.prototype.beforeInit=function(t){t.$$id=++o},t.prototype.beforeUpdate=function(t,e){var r,o,a,c=null===(a=null===(o=null===(r=t.config.options)||void 0===r?void 0:r.plugins)||void 0===o?void 0:o.regressions)||void 0===a?void 0:a.onCompleteCalculation;s(t,(function(e,r,o){r=new n.MetaDataSet(t,e);var a=1e3*t.$$id+o;i[a]=r})),null==c||c(t)},t.prototype.beforeRender=function(t,e){s(t,(function(t,e){return e.adjustScales()}))},t.prototype.beforeDatasetsDraw=function(t,e,r){s(t,(function(t,e){return e.drawRightBorders()}))},t.prototype.afterDatasetsDraw=function(t,e,r){s(t,(function(t,e){return e.drawRegressions()}))},t.prototype.destroy=function(t){Object.keys(i).filter((function(e){return e/1e3>>0==t.$$id})).forEach((function(t){return delete i[t]}))},t.prototype.getDataset=function(t,e){var r=1e3*t.$$id+e;return i[r]},t.prototype.getSections=function(t,e){var r=this.getDataset(t,e);return r&&r.sections},t}();function s(t,r){t.data.datasets.forEach((function(n,i){if(n.regressions&&t.isDatasetVisible(i)){var o=e.ChartRegressions.getDataset(t,i);r(n,o,i)}}))}e.ChartRegressions=new a,window.ChartRegressions=e.ChartRegressions},491:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})}},e={};!function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,r),o.exports}(856)})();
\ No newline at end of file
diff --git a/package.json b/package.json
index f925ef7..033e2cd 100644
--- a/package.json
+++ b/package.json
@@ -1,9 +1,10 @@
{
"name": "chartjs-plugin-regression",
- "version": "0.2.1",
+ "version": "3.0.0",
"description": "Plugin to draw a regression line",
"main": "lib/index.js",
"scripts": {
+ "watch": "./node_modules/.bin/tsc-watch --onSuccess \"webpack -w --mode development\"",
"build": "tsc && webpack --mode development",
"format": "prettier --write \"src/**/*.ts\" \"demo/**/*.js\"",
"lint": "tslint -p tsconfig.json",
@@ -11,7 +12,7 @@
"preversion": "npm test",
"version": "node bin/setversion.js && npm run prepare && git add -A",
"postversion": "git push && git push --tags",
- "prepare": "find . -name '*.map' -delete; tsc && webpack --mode production"
+ "prepare": "tsc && webpack --mode production"
},
"repository": {
"type": "git",
@@ -32,10 +33,10 @@
"author": "Wilfredo Pomier (wpomier@pomgui.com)",
"license": "ISC",
"devDependencies": {
- "@types/chart.js": "^2.9.22",
"@types/regression": "^2.0.0",
"prettier": "^2.0.5",
"source-map-loader": "^1.0.1",
+ "tsc-watch": "^4.4.0",
"tslint": "^6.1.2",
"tslint-config-prettier": "^1.18.0",
"typescript": "^3.9.6"
@@ -44,7 +45,7 @@
"regression": "^2.0.1"
},
"peerDependencies": {
- "chart.js": "^2.6.0"
+ "chart.js": "3.1.0"
},
"files": [
"lib/**/*"
diff --git a/src/MetaData.ts b/src/MetaData.ts
index fb97432..2266683 100644
--- a/src/MetaData.ts
+++ b/src/MetaData.ts
@@ -1,7 +1,7 @@
-import { Options, DataPoint } from 'regression';
-import { Section, LineOptions, ChartDataSetsEx, DatasetConfig } from './types';
-import { Point } from 'chart.js';
+import { DataPoint } from 'regression';
+import { Point, Chart } from 'chart.js';
import { MetaSection } from './MetaSection';
+import { Section, ChartDataSetsEx, DatasetConfig } from './types';
type GetXY = (x: number, y: number) => Point;
@@ -78,7 +78,7 @@ export class MetaDataSet {
}
drawRegressions() {
- const ctx: CanvasRenderingContext2D = (this.chart as any).chart.ctx;
+ const ctx: CanvasRenderingContext2D = this.chart.ctx;
ctx.save();
try {
this.sections.forEach(section => section.drawRegressions(ctx));
@@ -88,7 +88,7 @@ export class MetaDataSet {
}
drawRightBorders() {
- const ctx: CanvasRenderingContext2D = (this.chart as any).chart.ctx;
+ const ctx: CanvasRenderingContext2D = this.chart.ctx;
ctx.save();
try {
for (let i = 0; i < this.sections.length - 1; i++)
diff --git a/src/MetaSection.ts b/src/MetaSection.ts
index d2e541a..f83abef 100644
--- a/src/MetaSection.ts
+++ b/src/MetaSection.ts
@@ -138,15 +138,18 @@ export class MetaSection implements Section, BasicOptions {
}
private _calculateCopySection(sectionData: regression.DataPoint[]) {
- const from = this._meta.sections[this.copy.fromSectionIndex!],
- r = (this.result = Object.assign({}, from.result)),
- overwrite = this.copy.overwriteData,
- data = this._meta.normalizedData;
+ const from = this._meta.sections[this.copy.fromSectionIndex!];
+ const r = (this.result = Object.assign({}, from.result));
+ const overwrite = this.copy.overwriteData;
+ const data = this._meta.normalizedData;
+
r.points = sectionData.map(p => r.predict(p[0])) as any;
- delete r.r2;
+ delete (r as any).r2;
+
if (overwrite != 'none') {
- const dsdata = this._meta.dataset.data!,
- isXY = this._meta.isXY;
+ const dsdata = this._meta.dataset.data!;
+ const isXY = this._meta.isXY;
+
r.points.forEach(([x, y], i) => {
const index = i + this.startIndex;
if (
diff --git a/src/regression-plugin.ts b/src/regression-plugin.ts
index a7223bd..303a1f5 100644
--- a/src/regression-plugin.ts
+++ b/src/regression-plugin.ts
@@ -1,9 +1,5 @@
+import { Chart, Plugin as ChartPlugin } from 'chart.js';
import { MetaDataSet } from './MetaData';
-import {
- PluginServiceGlobalRegistration,
- PluginServiceRegistrationOptions,
- Easing
-} from 'chart.js';
import { MetaSection } from './MetaSection';
import { ChartDataSetsEx, OptionsConfig } from './types';
@@ -15,8 +11,7 @@ interface ChartEx extends Chart {
$$id: number;
}
-class Plugin
- implements PluginServiceGlobalRegistration, PluginServiceRegistrationOptions {
+class Plugin implements ChartPlugin {
id = 'regressions';
beforeInit(chart: any) {
@@ -30,17 +25,18 @@ class Plugin
beforeUpdate?(chart: Chart, options?: any): void {
let o, p, r: OptionsConfig;
const onComplete =
- (o = chart.config.options) &&
- (p = o.plugins) &&
- (r = p.regressions) &&
- r.onCompleteCalculation;
+ chart.config.options?.plugins?.regressions?.onCompleteCalculation;
+ // (o = chart.config.options) &&
+ // (p = o.plugins) &&
+ // (r = p.regressions) &&
+ // r.onCompleteCalculation;
forEach(chart, (ds, meta, datasetIndex) => {
meta = new MetaDataSet(chart, ds);
const id = (chart as ChartEx).$$id * 1000 + datasetIndex;
_metadataMap[id] = meta;
});
- if (onComplete) onComplete(chart);
+ onComplete?.(chart);
}
/**
@@ -52,12 +48,12 @@ class Plugin
}
/** Draws the vertical lines before the datasets are drawn */
- beforeDatasetsDraw(chart: Chart, easing: Easing, options?: any): void {
+ beforeDatasetsDraw(chart: Chart, args: any, options?: any): void {
forEach(chart, (ds, meta) => meta.drawRightBorders());
}
/** Draws the regression lines */
- afterDatasetsDraw(chart: Chart, easing: Easing, options?: any): void {
+ afterDatasetsDraw(chart: Chart, args: any, options?: any): void {
forEach(chart, (ds, meta) => meta.drawRegressions());
}
diff --git a/src/tools.ts b/src/tools.ts
index 797138c..d012542 100644
--- a/src/tools.ts
+++ b/src/tools.ts
@@ -8,7 +8,7 @@ export function deepCopy(source: T, fields?: string[]): T {
let target: T = source;
if (source && (typeof source === 'object' || Array.isArray(source))) {
if (source instanceof Date)
- return (new Date(source.getTime()) as unknown) as T;
+ return new Date(source.getTime()) as unknown as T;
target = (Array.isArray(source) ? [] : {}) as any;
if (!fields)
for (const field in source) target[field] = deepCopy(source[field]);
diff --git a/src/types.ts b/src/types.ts
index a7a9433..6be0522 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,5 +1,10 @@
-import { ChartDataSets } from 'chart.js';
import * as regression from 'regression';
+import {
+ Chart,
+ ChartType,
+ ChartDatasetProperties,
+ DefaultDataPoint
+} from 'chart.js';
export type Type =
| 'copy'
@@ -63,7 +68,10 @@ export interface Section extends BasicOptions {
label?: string;
}
-export interface ChartDataSetsEx extends ChartDataSets {
+export interface ChartDataSetsEx<
+ TType extends ChartType = ChartType,
+ TData = DefaultDataPoint
+> extends ChartDatasetProperties {
regressions: DatasetConfig;
}
@@ -86,3 +94,9 @@ export interface OptionsConfig extends BasicOptions {
*/
onCompleteCalculation?: (chart: Chart) => void;
}
+
+declare module 'chart.js' {
+ export interface PluginOptionsByType {
+ regressions: OptionsConfig;
+ }
+}
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..0ddbad7
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,549 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
+ integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
+ dependencies:
+ "@babel/highlight" "^7.12.13"
+
+"@babel/helper-validator-identifier@^7.14.0":
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
+ integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
+
+"@babel/highlight@^7.12.13":
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf"
+ integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.0"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@types/json-schema@^7.0.6":
+ version "7.0.7"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+ integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
+
+"@types/regression@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/regression/-/regression-2.0.0.tgz#0677ea78d7bdb37039c02ebbccf062042f756ae3"
+ integrity sha512-Ch2FD53M1HpFLL6zSTc/sfuyqQcIPy+/PV3xFT6QYtk9EOiMI29XOYmLNxBb1Y0lfMOR/NNa86J1gRc/1jGLyw==
+
+abab@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+ integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+
+ajv-keywords@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.12.5:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+builtin-modules@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+chalk@^2.0.0, chalk@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chart.js@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.1.0.tgz#b99cfe712fa0059134a4ad3a3515135fbb20bcea"
+ integrity sha512-bKJi2VbC4fqZXlLbK7LKVvmG9crjoG9anfp96utZLyIGPuCx+YN+5/HDXy98QGt3lf74T8gKUPISUZL222tDJQ==
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+commander@^2.12.1:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+diff@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+duplexer@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+event-stream@=3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
+ integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=
+ dependencies:
+ duplexer "~0.1.1"
+ from "~0"
+ map-stream "~0.1.0"
+ pause-stream "0.0.11"
+ split "0.3"
+ stream-combiner "~0.0.4"
+ through "~2.3.1"
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+from@~0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
+ integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+glob@^7.1.1:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+ integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+iconv-lite@^0.6.2:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+is-core-module@^2.2.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
+ integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
+ dependencies:
+ has "^1.0.3"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json5@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
+ integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
+ dependencies:
+ minimist "^1.2.5"
+
+loader-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+ integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
+map-stream@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
+ integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=
+
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+mkdirp@^0.5.3:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+node-cleanup@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c"
+ integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+pause-stream@0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
+ dependencies:
+ through "~2.3"
+
+prettier@^2.0.5:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"
+ integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==
+
+ps-tree@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd"
+ integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==
+ dependencies:
+ event-stream "=3.3.4"
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+regression@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regression/-/regression-2.0.1.tgz#8d29c3e8224a10850c35e337e85a8b2fac3b0c87"
+ integrity sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc=
+
+resolve@^1.3.2:
+ version "1.20.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
+ integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
+ dependencies:
+ is-core-module "^2.2.0"
+ path-parse "^1.0.6"
+
+"safer-buffer@>= 2.1.2 < 3.0.0":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+schema-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
+ integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
+ dependencies:
+ "@types/json-schema" "^7.0.6"
+ ajv "^6.12.5"
+ ajv-keywords "^3.5.2"
+
+semver@^5.3.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+source-map-loader@^1.0.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.1.3.tgz#7dbc2fe7ea09d3e43c51fd9fc478b7f016c1f820"
+ integrity sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==
+ dependencies:
+ abab "^2.0.5"
+ iconv-lite "^0.6.2"
+ loader-utils "^2.0.0"
+ schema-utils "^3.0.0"
+ source-map "^0.6.1"
+ whatwg-mimetype "^2.3.0"
+
+source-map@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+split@0.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
+ integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=
+ dependencies:
+ through "2"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+stream-combiner@~0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
+ integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=
+ dependencies:
+ duplexer "~0.1.1"
+
+string-argv@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.1.2.tgz#c5b7bc03fb2b11983ba3a72333dd0559e77e4738"
+ integrity sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA==
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+through@2, through@~2.3, through@~2.3.1:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+tsc-watch@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.4.0.tgz#3ebbf1db54bcef6bfe534b330fa87284a4139320"
+ integrity sha512-+0Yey6ptOOXAnt44OKTk2/EnQnmA0auL7VWXm9d9abMS4tabt0Xdr9B4AK6OJbWAre9ZdLA81+Nk8sz9unptyA==
+ dependencies:
+ cross-spawn "^7.0.3"
+ node-cleanup "^2.1.2"
+ ps-tree "^1.2.0"
+ string-argv "^0.1.1"
+ strip-ansi "^6.0.0"
+
+tslib@^1.13.0, tslib@^1.8.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslint-config-prettier@^1.18.0:
+ version "1.18.0"
+ resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37"
+ integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==
+
+tslint@^6.1.2:
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904"
+ integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ builtin-modules "^1.1.1"
+ chalk "^2.3.0"
+ commander "^2.12.1"
+ diff "^4.0.1"
+ glob "^7.1.1"
+ js-yaml "^3.13.1"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.3"
+ resolve "^1.3.2"
+ semver "^5.3.0"
+ tslib "^1.13.0"
+ tsutils "^2.29.0"
+
+tsutils@^2.29.0:
+ version "2.29.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
+ integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
+ dependencies:
+ tslib "^1.8.1"
+
+typescript@^3.9.6:
+ version "3.9.9"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674"
+ integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+whatwg-mimetype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=