diff --git a/.gitignore b/.gitignore index 5a70b9ba4e..012eda4639 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ typings *.swo webpack-stats.json analyze.json +stats.json src/components/base .vscode todo @@ -15,6 +16,7 @@ how_to_add_a_new_language.txt .DS_Store /.alm/ package-lock.json +report.*.json diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..43c97e719a --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/Gulpfile.js b/Gulpfile.js index 855631d21b..7f7d48b081 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -161,7 +161,7 @@ function min_styl(done) { function background_webpack(done) { function spawn_webpack() { let env = process.env; - let webpack = spawn('node', ['node_modules/webpack/bin/webpack.js', '--watch', '--progress', '--colors'], { stdio: 'inherit' }) + let webpack = spawn('npm', ['run', 'webpack-watch'], { stdio: 'inherit' }) webpack.on('exit', spawn_webpack); } diff --git a/Makefile b/Makefile index be9d3e6e06..ffd989b2a2 100644 --- a/Makefile +++ b/Makefile @@ -3,35 +3,35 @@ PATH:=node_modules/.bin/:$(PATH) dev: node_modules - NODE_PATH=$(NODE_PATH) PATH=$(PATH) supervisor -w Gulpfile.js,webpack.config.js,tsconfig.json supervisor -w Gulpfile.js -x gulp -- + npm run dev node_modules: npm install yarn - npm install supervisor - NODE_PATH=$(NODE_PATH) PATH=$(PATH) yarn install + npm run yarn install pretty prettier: npm run prettytsx npm run prettyts lint tslint: - NODE_PATH=$(NODE_PATH) PATH=$(PATH) tslint --project tsconfig.json + npm run tslint -- --project tsconfig.json min: minjs mincss mincss: - NODE_PATH=$(NODE_PATH) PATH=$(PATH) gulp min_styl + npm run gulp min_styl @echo 'gzipped ogs.min.css: ' `gzip -9 dist/ogs.min.css -c | wc -c` minjs: - NODE_PATH=$(NODE_PATH) PATH=$(PATH) PRODUCTION=true webpack --optimize-minimize --devtool=source-map --display-modules + npm run webpack -- --mode production --optimize-minimize --devtool=source-map --display-modules @echo 'gzipped ogs.min.js: ' `gzip -9 dist/ogs.min.js -c | wc -c` @echo 'gzipped vendor.min.js: ' `gzip -9 dist/vendor.min.js -c | wc -c` analyze: - #NODE_PATH=$(NODE_PATH) PATH=$(PATH) PRODUCTION=true webpack --optimize-minimize --devtool=source-map --profile --json > analyze.json - #npm run webpack-bundle-analyzer dist/ analyze.json - npm run webpack-bundle-analyzer analyze.json dist/ + ANALYZE=true npm run analyze + +#NODE_PATH=$(NODE_PATH) PATH=$(PATH) PRODUCTION=true webpack --optimize-minimize --devtool=source-map --profile --json > analyze.json +#npm run webpack-bundle-analyzer dist/ analyze.json .PHONY: dev lint tslint min minjs mincss diff --git a/package.json b/package.json index 12875915fd..3c20b91e74 100644 --- a/package.json +++ b/package.json @@ -5,11 +5,15 @@ "license": "AGPL-3.0", "private": true, "scripts": { - "dev": "gulp", + "dev": "supervisor -w Gulpfile.js,webpack.config.js,tsconfig.json supervisor -w Gulpfile.js -x gulp --", "prettytsx": "prettier --write 'src/**/*.tsx'", "prettyts": "prettier --write 'src/**/*.ts'", "webpack": "webpack", - "webpack-bundle-analyzer": "webpack-bundle-analyzer" + "webpack-watch": "webpack --watch --progress --colors", + "yarn": "yarn", + "tslint": "tslint", + "gulp": "gulp", + "analyze": "webpack --mode production --profile --optimize-minimize --devtool=source-map" }, "browserslist": [ "defaults" @@ -40,7 +44,7 @@ "tslint": "^5.20.0", "typescript": "^3.6.3", "webpack": "^4.41.0", - "webpack-bundle-analyzer": "", + "webpack-bundle-analyzer": "^3.5.2", "webpack-cli": "^3.3.9", "xgettext-js": "^1.1.0", "yarn": "^1.19.0" @@ -66,7 +70,7 @@ "jsonwebtoken": "^8.5.1", "markdown-it": "^8.4.2", "moment": "^2.24.0", - "ogs-goban": "file:../ogs-goban", + "goban": "file:../goban", "prop-types": "^15.5.0", "query-string": "^5.0.1", "react": "^16.9.0", @@ -84,10 +88,8 @@ "react-virtualized": "^9.21.0", "redux": "^3.7.2", "sanitize-html": "^1.14.1", - "slugify": "^1.3.4", "ts-md5": "^1.2.5", "valid-url": "^1.0.9", - "webpack-bundle-analyzer": "^3.4.1", "whatwg-fetch": "^3.0.0" } } diff --git a/src/lib/configure-goban.ts b/src/lib/configure-goban.ts new file mode 100644 index 0000000000..ccae749a8c --- /dev/null +++ b/src/lib/configure-goban.ts @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2012-2019 Online-Go.com + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import * as preferences from "preferences"; +import * as data from "data"; +import {get_clock_drift, get_network_latency, termination_socket} from 'sockets'; +import {current_language} from "translate"; +import {Goban, GoEngine, sfx, GoThemes} from 'goban'; + +window['Goban'] = Goban; +window['GoThemes'] = GoThemes; +window['GoEngine'] = GoEngine; +window['sfx'] = sfx; + +data.setDefault("custom.black", "#000000"); +data.setDefault("custom.white", "#FFFFFF"); +data.setDefault("custom.board", "#DCB35C"); +data.setDefault("custom.line", "#000000"); + +export function configure_goban() { + Goban.setHooks({ + defaultConfig: () => { + return { + server_socket : termination_socket, + player_id : (data.get("user").anonymous ? 0 : data.get("user").id), + }; + }, + + getCoordinateDisplaySystem: ():'A1'|'1-1' => { + switch (preferences.get('board-labeling')) { + case 'A1': + return 'A1'; + case '1-1': + return '1-1'; + default: // auto + switch (current_language) { + case 'ko': + case 'ja': + case 'zh-cn': + return '1-1'; + default: + return 'A1'; + } + } + }, + + isAnalysisDisabled: (goban:Goban, perGameSettingAppliesToNonPlayers = false):boolean => { + // The player's preference setting to always disable analysis overrides the per-game setting for + // their own games. + if (preferences.get("always-disable-analysis") && goban.isParticipatingPlayer()) { + return true; + } + + // If the user hasn't enabled the always-disable-analysis option (or they do not participate in this game), + // we check the per-game setting. + if (perGameSettingAppliesToNonPlayers) { + // This is used for the SGF download which is disabled even for users that are not + // participating in the game (or not signed in) + return goban.engine.config.original_disable_analysis; + } else { + return goban.engine.config.disable_analysis; + } + }, + + getClockDrift: ():number => get_clock_drift(), + getNetworkLatency: ():number => get_network_latency(), + getLocation: ():string => window.location.pathname, + getShowMoveNumbers: ():boolean => !!preferences.get("show-move-numbers"), + getShowVariationMoveNumbers: ():boolean => preferences.get("show-variation-move-numbers"), + getMoveTreeNumbering: ():string => preferences.get("move-tree-numbering"), + getCDNReleaseBase: ():string => data.get('config.cdn_release'), + getSoundEnabled: ():boolean => !!preferences.get('sound-enabled'), + getSoundVolume: ():number => preferences.get('sound-volume') as number, + + watchSelectedThemes: (cb) => preferences.watchSelectedThemes(cb), + getSelectedThemes: () => preferences.getSelectedThemes(), + + discBlackStoneColor: ():string => data.get("custom.black"), + discBlackTextColor: ():string => data.get("custom.white"), + discWhiteStoneColor: ():string => data.get("custom.white"), + discWhiteTextColor: ():string => data.get("custom.black"), + plainBoardColor: ():string => data.get("custom.board"), + plainBoardLineColor: ():string => data.get("custom.line"), + }); +} diff --git a/src/lib/goban-themes/board_plain.ts b/src/lib/goban-themes/board_plain.ts deleted file mode 100644 index f54bdb1386..0000000000 --- a/src/lib/goban-themes/board_plain.ts +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 2012-2019 Online-Go.com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { GoTheme } from "ogs-goban"; -import {_} from "../translate"; -import * as data from "data"; - -data.setDefault("custom.board", "#DCB35C"); -data.setDefault("custom.line", "#000000"); - -// Converts a six-digit hex string to rgba() notation -function hexToRgba(raw: string, alpha: number = 1): string { - let hex = raw.replace("#", ""); - if (hex.length !== 6) { - return raw; - } - let r = parseInt(`0x${hex.substr(0, 2)}`); - let g = parseInt(`0x${hex.substr(2, 2)}`); - let b = parseInt(`0x${hex.substr(4, 2)}`); - return `rgba(${r}, ${g}, ${b}, ${alpha})`; -} - -export default function(GoThemes) { - - class Plain extends GoTheme { - sort() { return 0; } - getBackgroundCSS() { - return { - "background-color": data.get("custom.board"), - "background-image": "" - }; - } - getLineColor() { return data.get("custom.line"); } - getFadedLineColor() { return hexToRgba(data.get("custom.line"), 0.5); } - getStarColor() { return data.get("custom.line"); } - getFadedStarColor() { return hexToRgba(data.get("custom.line"), 0.5); } - getBlankTextColor() { return data.get("custom.line"); } - getLabelTextColor() { return hexToRgba(data.get("custom.line"), 0.75); } - } - - - _("Plain"); // ensure translation exists - GoThemes["board"]["Plain"] = Plain; - - class Night extends GoTheme { - sort() { - return 100; - } - getBackgroundCSS() { - return { - "background-color": "#444444", - "background-image": "" - }; - } - getLineColor() { return "#555555"; } - getFadedLineColor() { return "#333333"; } - getStarColor() { return "#555555"; } - getFadedStarColor() { return "#333333"; } - getBlankTextColor() { return "#777777"; } - getLabelTextColor() { return "#555555"; } - } - - _("Night Play"); // ensure translation exists - GoThemes["board"]["Night Play"] = Night; - - - - class HNG extends GoTheme { - static C = "#00193E"; - static C2 = "#004C75"; - sort() { return 105; } - getBackgroundCSS() { - return { - "background-color": "#00e7fc", - "background-image": "" - }; - } - getLineColor() { return HNG.C; } - getFadedLineColor() { return "#00AFBF"; } - getStarColor() { return HNG.C; } - getFadedStarColor() { return "#00AFBF"; } - getBlankTextColor() { return HNG.C2; } - getLabelTextColor() { return HNG.C2; } - } - - _("HNG"); // ensure translation exists - GoThemes["board"]["HNG"] = HNG; - - - - class HNGNight extends GoTheme { - static C = "#007591"; - sort() { return 105; } - getBackgroundCSS() { - return { - "background-color": "#090C1F", - "background-image": "" - }; - } - getLineColor() { return HNGNight.C; } - getFadedLineColor() { return "#4481B5"; } - getStarColor() { return HNGNight.C; } - getFadedStarColor() { return "#4481B5"; } - getBlankTextColor() { return "#3591DE"; } - getLabelTextColor() { return "#4481B5"; } - } - - _("HNG Night"); // ensure translation exists - GoThemes["board"]["HNG Night"] = HNGNight; - - - class Book extends GoTheme { - sort() { - return 110; - } - getBackgroundCSS() { - return { - "background-color": "#ffffff", - "background-image": "" - }; - } - getLineColor() { return "#555555"; } - getFadedLineColor() { return "#999999"; } - getStarColor() { return "#555555"; } - getFadedStarColor() { return "#999999"; } - getBlankTextColor() { return "#000000"; } - getLabelTextColor() { return "#555555"; } - } - - - _("Book"); // ensure translation exists - GoThemes["board"]["Book"] = Book; -} diff --git a/src/lib/goban-themes/board_woods.ts b/src/lib/goban-themes/board_woods.ts deleted file mode 100644 index 73fdfe2deb..0000000000 --- a/src/lib/goban-themes/board_woods.ts +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright 2012-2019 Online-Go.com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Goban, GoTheme } from "ogs-goban"; -import {_} from "../translate"; - - -export default function(GoThemes) { - class Kaya extends GoTheme { - sort() { return 10; } - getBackgroundCSS() { - return { - "background-color": "#DCB35C", - "background-image": "url('" + Goban.getCDNReleaseBase() + "/img/kaya.jpg')" - }; - } - getLineColor() { return "#000000"; } - getFadedLineColor() { return "#888888"; } - getStarColor() { return "#000000"; } - getFadedStarColor() { return "#888888"; } - getBlankTextColor() { return "#000000"; } - getLabelTextColor() { return "#444444"; } - } - - _("Kaya"); // ensure translation - GoThemes["board"]["Kaya"] = Kaya; - - - class RedOak extends GoTheme { - sort() { return 20; } - getBackgroundCSS() { - return { - "background-color": "#DCB35C", - "background-image": "url('" + Goban.getCDNReleaseBase() + "/img/oak.jpg')" - }; - } - getLineColor() { return "#000000"; } - getFadedLineColor() { return "#888888"; } - getStarColor() { return "#000000"; } - getFadedStarColor() { return "#888888"; } - getBlankTextColor() { return "#000000"; } - getLabelTextColor() { return "#000000"; } - } - - - _("Red Oak"); // ensure translation - GoThemes["board"]["Red Oak"] = RedOak; - - - - class Persimmon extends GoTheme { - sort() { return 30; } - getBackgroundCSS() { - return { - "background-color": "#DCB35C", - "background-image": "url('" + Goban.getCDNReleaseBase() + "/img/persimmon.jpg')" - }; - } - getLineColor() { return "#000000"; } - getFadedLineColor() { return "#888888"; } - getStarColor() { return "#000000"; } - getFadedStarColor() { return "#888888"; } - getBlankTextColor() { return "#000000"; } - getLabelTextColor() { return "#000000"; } - } - - - _("Persimmon"); // ensure translation - GoThemes["board"]["Persimmon"] = Persimmon; - - - class BlackWalnut extends GoTheme { - sort() { return 40; } - getBackgroundCSS() { - return { - "background-color": "#DCB35C", - "background-image": "url('" + Goban.getCDNReleaseBase() + "/img/black_walnut.jpg')" - }; - } - getLineColor() { return "#000000"; } - getFadedLineColor() { return "#4A2F24"; } - getStarColor() { return "#000000"; } - getFadedStarColor() { return "#4A2F24"; } - getBlankTextColor() { return "#000000"; } - getLabelTextColor() { return "#000000"; } - } - - - _("Black Walnut"); // ensure translation - GoThemes["board"]["Black Walnut"] = BlackWalnut; - - - class Granite extends GoTheme { - sort() { return 40; } - getBackgroundCSS() { - return { - "background-color": "#DCB35C", - "background-image": "url('" + Goban.getCDNReleaseBase() + "/img/granite.jpg')" - }; - } - getLineColor() { return "#cccccc"; } - getFadedLineColor() { return "#888888"; } - getStarColor() { return "#cccccc"; } - getFadedStarColor() { return "#888888"; } - getBlankTextColor() { return "#cccccc"; } - getLabelTextColor() { return "#cccccc"; } - } - - - _("Granite"); // ensure translation - GoThemes["board"]["Granite"] = Granite; -} diff --git a/src/lib/goban-themes/disc.ts b/src/lib/goban-themes/disc.ts deleted file mode 100644 index e5a7c8db8f..0000000000 --- a/src/lib/goban-themes/disc.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2012-2019 Online-Go.com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { GoTheme } from "ogs-goban"; -import {_} from "../translate"; -import * as data from "data"; - -data.setDefault("custom.black", "#000000"); -data.setDefault("custom.white", "#FFFFFF"); - -export default function(GoThemes) { - class Stone extends GoTheme { - sort() { return 0; } - - placePlainStone(ctx, cx, cy, radius, color) { - let lineWidth = radius * 0.10; - if (lineWidth < 0.3) { - lineWidth = 0; - } - ctx.fillStyle = color; - ctx.strokeStyle = this.parent ? this.parent.getLineColor() : this.getLineColor(); - if (lineWidth > 0) { - ctx.lineWidth = lineWidth; - } - ctx.beginPath(); - ctx.arc(cx, cy, radius - lineWidth / 2, 0.001, 2 * Math.PI, false); /* 0.001 to workaround fucked up chrome bug */ - if (lineWidth > 0) { - ctx.stroke(); - } - ctx.fill(); - } - } - - class Black extends Stone { - preRenderBlack(radius, seed): any { - return true; - } - - placeBlackStone(ctx, shadow_ctx, stone, cx, cy, radius) { - this.placePlainStone(ctx, cx, cy, radius, this.getBlackStoneColor()); - } - - public getBlackStoneColor() { - return data.get("custom.black"); - } - - public getBlackTextColor() { - return data.get("custom.white"); - } - } - - class White extends Stone { - preRenderWhite(radius, seed): any { - return true; - } - - placeWhiteStone(ctx, shadow_ctx, stone, cx, cy, radius) { - this.placePlainStone(ctx, cx, cy, radius, this.getWhiteStoneColor()); - } - - public getWhiteStoneColor() { - return data.get("custom.white"); - } - - public getWhiteTextColor() { - return data.get("custom.black"); - } - } - - GoThemes["black"]["Plain"] = Black; - GoThemes["white"]["Plain"] = White; - -} diff --git a/src/lib/goban-themes/rendered_stones.ts b/src/lib/goban-themes/rendered_stones.ts deleted file mode 100644 index 28b178647e..0000000000 --- a/src/lib/goban-themes/rendered_stones.ts +++ /dev/null @@ -1,587 +0,0 @@ -/* - * Copyright 2012-2019 Online-Go.com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { GoTheme, deviceCanvasScalingRatio } from "ogs-goban"; -import {_} from "../translate"; - -/** - * Converts an RGB color value to HSL. Conversion formula - * adapted from http://en.wikipedia.org/wiki/HSL_color_space. - * Assumes r, g, and b are contained in the set [0, 255] and - * returns h, s, and l in the set [0, 1]. - * - * @param Number r The red color value - * @param Number g The green color value - * @param Number b The blue color value - * @return Array The HSL representation - */ -function rgbToHsl(r, g, b) { - r /= 255; - g /= 255; - b /= 255; - let max = Math.max(r, g, b); - let min = Math.min(r, g, b); - let h; - let s; - let l = (max + min) / 2; - - if (max === min) { - h = s = 0; // achromatic - } else { - let d = max - min; - s = l > 0.5 ? d / (2 - max - min) : d / (max + min); - switch (max) { - case r: h = (g - b) / d + (g < b ? 6 : 0); break; - case g: h = (b - r) / d + 2; break; - case b: h = (r - g) / d + 4; break; - } - h /= 6; - } - - return [h, s, l]; -} - -/** - * 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]. - * - * @param Number h The hue - * @param Number s The saturation - * @param Number l The lightness - * @return Array The RGB representation - */ - - - -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; -} -function hslToRgb(h, s, l) { - let r; - let g; - let b; - - if (s === 0) { - r = g = b = l; // achromatic - } else { - let q = l < 0.5 ? l * (1 + s) : l + s - l * s; - let 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.min(255, r * 255), Math.min(255, g * 255), Math.min(255, b * 255)]; -} - -function add(A, B) { - return [A[0] + B[0], A[1] + B[1], A[2] + B[2]]; -} -function dot(A, B) { - return A[0] * B[0] + A[1] * B[1] + A[2] * B[2]; -} -function scale(A, x) { - return [A[0] * x, A[1] * x, A[2] * x]; -} -function length(A) { - return Math.sqrt(dot(A, A)); -} -function normalized(A) { - return scale(A, 1 / length(A)); -} -function stone_normal(x, y, radius) { - let z = Math.sqrt(Math.max(0, radius * radius - x * x - y * y)); - - let ret = normalized([x, y, z]); - z = ret[2]; - ret[2] = z * z * (3 - 2 * z); /* scurve3 */ - //ret[2] = z*z*z*(z*(z*6-15)+10); /* scurve5 */ - - return ret; -} -function square_size(radius, scaled) { - return 2 * Math.ceil(radius) + (scaled ? 0 : 1); -} -function stone_center_in_square(radius, scaled) { - return Math.ceil(radius) + (scaled ? 0 : 0.5); -} -function copyAlpha(ctx, width, height) { - if (width <= 0 || height <= 0) { - throw ("Invalid width/height given: " + (width + "x" + height)); - } - - let image = ctx.getImageData(0, 0, width, height); - let ret = new Array(width * height); - let idx = 0; - let i = 0; - for (let y = 0; y < height; ++y) { - for (let x = 0; x < width; ++x) { - ret[i] = image.data[idx + 3]; - idx += 4; - ++i; - } - } - return ret; -} -function pasteAlpha(ctx, alpha, width, height) { - let image = ctx.getImageData(0, 0, width, height); - let idx = 0; - let i = 0; - - for (let y = 0; y < height; ++y) { - for (let x = 0; x < width; ++x) { - image.data[idx + 3] = alpha[i]; - idx += 4; - ++i; - } - } - ctx.putImageData(image, 0, 0); -} -function applyPhongShading(ctx, ss, center, radius, ambient, specular_hardness, diffuse_light_distance, specular_light_distance, light) { - let image = ctx.getImageData(0, 0, ss, ss); - - let r2 = (radius + 1) * (radius + 1); /* alpha will save us from overrunning the image*/ - let look = [0, 0, 1]; - - let idx = 0; - let normal_idx = 0; - for (let y = -center; y < ss - center; ++y) { - for (let x = -center; x < ss - center; ++x) { - let xxyy = x * x + y * y; - if (xxyy < r2) { - let r = image.data[idx]; - let g = image.data[idx + 1]; - let b = image.data[idx + 2]; - - let N = stone_normal(x, y, radius); - let diffuse_intensity = dot(N, light) / diffuse_light_distance; - let H = normalized(add(light, look)); - let specular_intensity = Math.pow( dot(N, H), specular_hardness) / specular_light_distance; - - let hsl = rgbToHsl(r, g, b); - hsl[2] = Math.min(1, hsl[2] * (ambient + diffuse_intensity) + (diffuse_intensity * 0.5) + specular_intensity); - let rgb = hslToRgb(hsl[0], hsl[1], hsl[2]); - - image.data[idx] = rgb[0]; - image.data[idx + 1] = rgb[1]; - image.data[idx + 2] = rgb[2]; - } - - idx += 4; - ++normal_idx; - } - } - - ctx.putImageData(image, 0, 0); -} -function clearAboveColor(ctx, width, height, r, g, b) { - let image = ctx.getImageData(0, 0, width, height); - - let idx = 0; - for (let y = 0; y < height; ++y) { - for (let x = 0; x < width; ++x) { - if (image.data[idx + 0] > r && image.data[idx + 1] > g && image.data[idx + 2] > b) { - image.data[idx + 0] = 0; - image.data[idx + 1] = 0; - image.data[idx + 2] = 0; - image.data[idx + 3] = 0; - } - - idx += 4; - } - } - - ctx.putImageData(image, 0, 0); -} -function preRenderStone(radius, seed, options) { - - let dcsr = deviceCanvasScalingRatio(); - radius *= dcsr; - - let ss = square_size(radius, dcsr !== 1.0); - let center = stone_center_in_square(radius, dcsr !== 1.0); - let sss = radius * 2.5; /* Shadow square size */ - - let stone; - let shadow; - let ctx; - let shadow_ctx; - if (typeof($) !== "undefined") { - stone = $("").attr("width", ss).attr("height", ss); - shadow = $("").attr("width", sss).attr("height", sss); - //stone = createDeviceScaledCanvas(ss, ss); - //shadow = createDeviceScaledCanvas(sss, sss); - ctx = (stone[0] as HTMLCanvasElement).getContext("2d"); - shadow_ctx = (shadow[0] as HTMLCanvasElement).getContext("2d"); - } else { - throw new Error("Backend server rendering has been removed, should be easy to re-enable if we still need it though (code is here, just needs wiring up again)"); - } - - /* - } else { - var Canvas = require('canvas'); - stone = new Canvas(ss,ss); - shadow = new Canvas(sss,sss); - ctx = stone.getContext('2d'); - shadow_ctx = shadow.getContext('2d'); - } - */ - ctx.clearRect (0, 0, ss, ss); - shadow_ctx.clearRect (0, 0, sss, sss); - - - //var fillColor = color === 'white' ? 'rgba(207,205,206,1.0)' : 'rgba(25,25,27,1.0)'; - let fillColor = options.base_color; - - ctx.beginPath(); - ctx.fillStyle = fillColor; - ctx.arc(center, center, radius, 0, 2 * Math.PI, false); - ctx.fill(); - /* draw clamshell lines */ - if (options.shell_lines) { - try { - let alphas = copyAlpha(ctx, ss, ss); - let nlines = 5 + seed % 5; - let angle = ((seed % 160) + 10) * 0.0174532925; /* -> radians */ - if (seed & 0x100) { - angle = -angle; - } - - let sep = radius / (nlines * 2); - let rise = Math.cos(angle); - let run = Math.sin(angle); - let m = rise / run; - let minv = run / rise; - let ox1 = 0; - let oy1 = 0; - - let minv2_1 = minv * minv - 1; - let negate = minv2_1 < 0 ? 1 : -1; - minv2_1 = Math.abs(minv2_1); - - let s = seed; - let rstep = Math.round(radius * 0.1); - - ctx.save(); - - let r = -radius; - let base_line_width = radius * 0.07; - for (let i = 0; i < nlines * 4; ++i) { - for (let neg = 0; neg < 2; ++neg) { - r += (sep + (s % rstep)); - - let xp = Math.sqrt(r * r / minv2_1); - let yp = minv * xp; - let b = (neg ? -1 : 1) * yp - m * xp; - - let sx = 0; - let ex = radius * 2; - let sy = m * sx + b; - let ey = m * ex + b; - s = (s * 97) >> 3; - - ctx.beginPath(); - let clr = "rgba(194,191,198," + ((s % 10) / 10.0) + ")"; - //var clr = 'rgba(185,181,188,' + ((s%10)/10.0) + ')'; - //ctx.strokeStyle = 'rgba(209,204,208,1.0)'; - ctx.strokeStyle = clr; - //ctx.shadowColor='rgba(176,172,175,' + ((s%10)/10.0) + ')'; - ctx.shadowColor = clr; - ctx.shadowBlur = (s % 3 + 1) * base_line_width; - ctx.shadowOffsetX = 0; - ctx.shadowOffsetY = 0; - s = (s * 51) >> 3; - ctx.lineWidth = base_line_width * 0.5; - ctx.moveTo(sx, sy); - ctx.lineTo(ex, ey); - ctx.stroke(); - } - } - - ctx.restore(); - pasteAlpha(ctx, alphas, ss, ss); /* this fixes any line overruns */ - } catch (e) { - console.log(e); - } - } - - applyPhongShading(ctx, ss, center, radius, options.ambient, options.specular_hardness, options.diffuse_light_distance, options.specular_light_distance, options.light); - - if (! stoneCastsShadow(radius)) { - ctx.beginPath(); - ctx.strokeStyle = "rgba(100,100,100,0.3)"; - ctx.lineWidth = radius * 0.15; - ctx.arc(center, center, radius, Math.PI / 2 * 0.25, Math.PI / 2 * 0.75, false); - ctx.stroke(); - ctx.beginPath(); - ctx.strokeStyle = "rgba(100,100,100,0.5)"; - ctx.arc(center, center, radius, 0, Math.PI / 2, false); - ctx.stroke(); - } - - shadow_ctx.beginPath(); - shadow_ctx.shadowColor = "rgba(60,60,60,0.7)"; - shadow_ctx.shadowBlur = radius * 0.15; - shadow_ctx.shadowOffsetX = radius * 0.20; - shadow_ctx.shadowOffsetY = radius * 0.20; - shadow_ctx.fillStyle = "rgba(255,255,255,1.0)"; - /* here we draw the circle a little up and to the left so we don't have any - * funky problems when we mask out the shadow and apply it underneath the - * stone. (Without this we tend to see some funny artifacts) */ - //shadow_ctx.arc(radius*0.97, radius*0.97, radius*0.97, 0, 2*Math.PI, false); - shadow_ctx.arc(center, center, radius * 0.90, 0, 2 * Math.PI, false); - shadow_ctx.fill(); - clearAboveColor(shadow_ctx, sss, sss, 150, 150, 150); - - return [{"stone": stone[0], "shadow": shadow[0]}]; -} -function placeRenderedStone(ctx, shadow_ctx, stone, cx, cy, radius) { - - let dcsr = deviceCanvasScalingRatio(); - if (dcsr !== 1.0) { - let center = stone_center_in_square(radius * dcsr, true) / dcsr; - let ss = square_size(radius * dcsr, true) / dcsr; - - let sx = cx - center; - let sy = cy - center; - - if (shadow_ctx) { - shadow_ctx.drawImage(stone.shadow, sx, sy, radius * 2.5, radius * 2.5); - } - ctx.drawImage(stone.stone, sx, sy, ss, ss); - } else { - let center = stone_center_in_square(radius, false); - - let sx = cx - center; - let sy = cy - center; - - if (shadow_ctx) { - shadow_ctx.drawImage(stone.shadow, sx, sy); - } - ctx.drawImage(stone.stone, sx, sy); - } - -} -function stoneCastsShadow(radius) { - return radius >= 10; -} - -export default function(GoThemes) { - class Common extends GoTheme { - stoneCastsShadow(radius) { - return stoneCastsShadow(radius * deviceCanvasScalingRatio()); - } - placeBlackStone(ctx, shadow_ctx, stone, cx, cy, radius) { - placeRenderedStone(ctx, shadow_ctx, stone, cx, cy, radius); - } - placeWhiteStone(ctx, shadow_ctx, stone, cx, cy, radius) { - placeRenderedStone(ctx, shadow_ctx, stone, cx, cy, radius); - } - } - - /* Slate & Shell */ - class Slate extends Common { - sort() { return 30; } - - preRenderBlack(radius, seed) { - return preRenderStone(radius, seed, { - "base_color": "rgba(30,30,35,1.0)", - "light": normalized([-4, -4, 5]), - "ambient": 0.85, - "specular_hardness": 17, - "diffuse_light_distance": 10, - "specular_light_distance": 8, - }); - } - getBlackTextColor(color) { - return "#ffffff"; - } - } - - _("Slate"); // ensure translation - GoThemes["black"]["Slate"] = Slate; - - - - class Shell extends Common { - sort() { return 30; } - - preRenderWhite(radius, seed) { - let ret = []; - for (let i = 0; i < 10; ++i) { - ret = ret.concat(preRenderStone(radius, seed *= 13, { - "base_color": "rgba(207,205,206,1.0)", - "light": normalized([-4, -4, 2]), - "shell_lines": true, - "ambient": 1.0, - "specular_hardness": 24, - "diffuse_light_distance": 7, - "specular_light_distance": 100, - })); - } - return ret; - } - - getWhiteTextColor(color) { - return "#000000"; - } - } - _("Shell"); // ensure translation - GoThemes["white"]["Shell"] = Shell; - - - - /* Glass */ - - class GlassBlack extends Common { - sort() { return 20; } - preRenderBlack(radius, seed) { - return preRenderStone(radius, seed, { - "base_color": "rgba(15,15,20,1.0)", - "light": normalized([-4, -4, 2]), - "ambient": 0.85, - "specular_hardness": 30, - "diffuse_light_distance": 10, - "specular_light_distance": 10, - }); - } - getBlackTextColor(color) { - return "#ffffff"; - } - } - - _("Glass"); // ensure translation - GoThemes["black"]["Glass"] = GlassBlack; - - - class GlassWhite extends Common { - sort() { return 20; } - - preRenderWhite(radius, seed) { - return preRenderStone(radius, seed *= 13, { - "base_color": "rgba(207,205,206,1.0)", - "light": normalized([-4, -4, 2]), - "ambient": 1.0, - "specular_hardness": 80, - "diffuse_light_distance": 7, - "specular_light_distance": 100, - }); - } - - getWhiteTextColor(color) { - return "#000000"; - } - } - - GoThemes["white"]["Glass"] = GlassWhite; - - - - /* Worn Glass */ - - class WornGlassBlack extends Common { - sort() { return 21; } - - preRenderBlack(radius, seed) { - return preRenderStone(radius, seed, { - "base_color": "rgba(15,15,20,1.0)", - "light": normalized([-4, -4, 2]), - "ambient": 0.85, - "specular_hardness": 20, - "diffuse_light_distance": 10, - "specular_light_distance": 10, - }); - } - getBlackTextColor(color) { - return "#ffffff"; - } - } - - _("Worn Glass"); // ensure translation - GoThemes["black"]["Worn Glass"] = WornGlassBlack; - - class WornGlassWhite extends Common { - sort() { return 21; } - - preRenderWhite(radius, seed) { - return preRenderStone(radius, seed *= 13, { - "base_color": "rgba(189,189,194,1.0)", - "light": normalized([-4, -4, 2]), - "ambient": 1.0, - "specular_hardness": 35, - "diffuse_light_distance": 7, - "specular_light_distance": 100, - }); - } - - getWhiteTextColor(color) { - return "#000000"; - } - } - GoThemes["white"]["Worn Glass"] = WornGlassWhite; - - - /* Night */ - class NightBlack extends Common { - sort() { return 100; } - - preRenderBlack(radius, seed) { - return preRenderStone(radius, seed, { - "base_color": "rgba(15,15,20,1.0)", - "light": normalized([-4, -4, 2]), - "ambient": 0.85, - "specular_hardness": 5, - "diffuse_light_distance": 10, - "specular_light_distance": 10, - }); - } - getBlackTextColor(color) { - return "#888888"; - } - } - - _("Night"); // ensure translation - GoThemes["black"]["Night"] = NightBlack; - - - class NightWhite extends Common { - sort() { return 100; } - - preRenderWhite(radius, seed) { - return preRenderStone(radius, seed *= 13, { - "base_color": "rgba(100,100,100,1.0)", - "light": normalized([-4, -4, 2]), - "ambient": 1.0, - "specular_hardness": 13, - "diffuse_light_distance": 7, - "specular_light_distance": 100, - }); - } - - getWhiteTextColor(color) { - return "#000000"; - } - } - GoThemes["white"]["Night"] = NightWhite; - -} diff --git a/src/lib/goban.ts b/src/lib/goban.ts deleted file mode 100644 index cf1acc603e..0000000000 --- a/src/lib/goban.ts +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2012-2019 Online-Go.com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {Goban as OGSGoban} from 'ogs-goban'; -import {deepEqual, dup, getRandomInt, getRelativeEventPosition} from "misc"; -import {shortDurationString, isLiveGame} from "TimeControl"; -import {get_clock_drift, get_network_latency, termination_socket} from 'sockets'; -import {getSelectedThemes, watchSelectedThemes} from "preferences"; -import {_, pgettext, interpolate, current_language} from "translate"; -import * as preferences from "preferences"; -import * as data from "data"; -import * as player_cache from "player_cache"; - -export {GoEngine, sfx, GoThemes, GoMath, MoveTree} from 'ogs-goban'; - -export class Goban extends OGSGoban { - constructor(config, preloaded_data?) { - super(config, preloaded_data); - } - - defaultConfig() { - return { - server_socket : termination_socket, - player_id : (data.get("user").anonymous ? 0 : data.get("user").id), - }; - } - - getClockDrift() { - return get_clock_drift(); - } - - getNetworkLatency() { - return get_network_latency(); - } - - getLocation():string { - return window.location.pathname; - } - - protected getCoordinateDisplaySystem():'A1'|'1-1' { - switch (preferences.get('board-labeling')) { - case 'A1': - return 'A1'; - case '1-1': - return '1-1'; - default: // auto - switch (current_language) { - case 'ko': - case 'ja': - case 'zh-cn': - return '1-1'; - default: - return 'A1'; - } - } - } - - getShowMoveNumbers():boolean { - return preferences.get("show-move-numbers"); - } - - getShowVariationMoveNumbers():boolean { - return preferences.get("show-variation-move-numbers"); - } - - isAnalysisDisabled(perGameSettingAppliesToNonPlayers = false):boolean { - // The player's preference setting to always disable analysis overrides the per-game setting for - // their own games. - if (preferences.get("always-disable-analysis") && this.isParticipatingPlayer()) { - return true; - } - - // If the user hasn't enabled the always-disable-analysis option (or they do not participate in this game), - // we check the per-game setting. - if (perGameSettingAppliesToNonPlayers) { - // This is used for the SGF download which is disabled even for users that are not - // participating in the game (or not signed in) - return this.engine.config.original_disable_analysis; - } else { - return this.engine.config.disable_analysis; - } - } - - watchSelectedThemes(cb) { - return watchSelectedThemes(cb); - } - - getSelectedThemes() { - return getSelectedThemes(); - } -} - -OGSGoban.getMoveTreeNumbering = ():string => { - return preferences.get("move-tree-numbering"); -}; -OGSGoban.getCDNReleaseBase = ():string => { - return data.get('config.cdn_release'); -}; -OGSGoban.getSoundEnabled = ():boolean => { - return preferences.get('sound-enabled') as boolean; -}; -OGSGoban.getSoundVolume = ():number => { - return preferences.get('sound-volume') as number; -}; - - -/* Theme setup */ - -import { GoThemes } from "ogs-goban"; -import { GoTheme } from "ogs-goban"; - -import init_board_plain from "./goban-themes/board_plain"; -import init_board_woods from "./goban-themes/board_woods"; -import init_disc from "./goban-themes/disc"; -import init_rendered from "./goban-themes/rendered_stones"; - -init_board_plain(GoThemes); -init_board_woods(GoThemes); -init_disc(GoThemes); -init_rendered(GoThemes); - -function theme_sort(a, b) { - return a.sort - b.sort; -} - -for (let k in GoThemes) { - GoThemes[k].sorted = Object.keys(GoThemes[k]).map((n) => { - GoThemes[k][n].theme_name = n; - return GoThemes[k][n]; - }); - GoThemes[k].sorted.sort(theme_sort); -} diff --git a/src/lib/preferences.ts b/src/lib/preferences.ts index 65e84aeda5..77f7bff6cf 100644 --- a/src/lib/preferences.ts +++ b/src/lib/preferences.ts @@ -103,7 +103,7 @@ export function dump(): void { data.dump("preferences.", true); } -export function getSelectedThemes() { +export function getSelectedThemes():{"board": string, "black": string, "white": string} { //let default_plain = $.browser.mobile || ($(window).width() * (window.devicePixelRatio || 1)) <= 768; let default_plain = ($(window).width() * (window.devicePixelRatio || 1)) <= 768; diff --git a/src/main.tsx b/src/main.tsx index 9f9aa3f0fd..f60d0db5c9 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -18,6 +18,7 @@ /// import "whatwg-fetch"; /* polyfills window.fetch */ import * as Sentry from '@sentry/browser'; +import { configure_goban } from 'configure-goban'; declare var ogs_current_language; declare var ogs_version; @@ -98,6 +99,8 @@ data.setDefault("config.user", { "pro": 0, }); +configure_goban(); + import * as React from "react"; import * as ReactDOM from "react-dom"; import { browserHistory } from './ogsHistory'; diff --git a/src/ogs.styl b/src/ogs.styl index 5e4ab0045a..466814f96b 100644 --- a/src/ogs.styl +++ b/src/ogs.styl @@ -319,7 +319,7 @@ nowrap() @require "global_styl/bootstrap-esq.styl"; @require "global_styl/misc-ui.styl"; @require "global_styl/ogs-font.styl"; -@require "../node_modules/ogs-goban/src/Goban.styl"; +@require "../node_modules/goban/src/Goban.styl"; @require "global_styl/swal.styl"; @require "global_styl/flags16.styl"; @require "global_styl/flags32.styl"; diff --git a/src/views/Game/AIReview.tsx b/src/views/Game/AIReview.tsx index c3e651294e..3ef6c9f915 100644 --- a/src/views/Game/AIReview.tsx +++ b/src/views/Game/AIReview.tsx @@ -31,7 +31,7 @@ import {termination_socket} from 'sockets'; import {_, pgettext, interpolate} from "translate"; import {PersistentElement} from 'PersistentElement'; import {Game} from './Game'; -import {GoMath, MoveTree, ColoredCircle} from 'ogs-goban'; +import {GoMath, MoveTree, ColoredCircle} from 'goban'; import Select from 'react-select'; import {close_all_popovers, popover} from "popover"; diff --git a/src/views/Game/Game.tsx b/src/views/Game/Game.tsx index 21bcb43ddd..90e72468f8 100644 --- a/src/views/Game/Game.tsx +++ b/src/views/Game/Game.tsx @@ -46,7 +46,7 @@ import {openGameInfoModal} from "./GameInfoModal"; import {openGameLinkModal} from "./GameLinkModal"; //import {VoiceChat} from "VoiceChat"; import {openACLModal} from "./ACLModal"; -import {sfx} from "ogs-goban"; +import {sfx} from "goban"; import {AIReview} from "./AIReview"; import {GameChat} from "./Chat"; import {setActiveGameView} from "./Chat"; diff --git a/src/views/LearningHub/InstructionalGoban.tsx b/src/views/LearningHub/InstructionalGoban.tsx index 8ce033e34e..bd322ee683 100644 --- a/src/views/LearningHub/InstructionalGoban.tsx +++ b/src/views/LearningHub/InstructionalGoban.tsx @@ -19,7 +19,7 @@ import * as React from "react"; import {post, get} from "requests"; import {Goban} from "goban"; -import {sfx} from "ogs-goban"; +import {sfx} from "goban"; import {PersistentElement} from "PersistentElement"; interface InstructionalGobanProps { diff --git a/src/views/LearningHub/LearningPage.tsx b/src/views/LearningHub/LearningPage.tsx index 33c16dad12..a83518fa10 100644 --- a/src/views/LearningHub/LearningPage.tsx +++ b/src/views/LearningHub/LearningPage.tsx @@ -17,9 +17,8 @@ import * as React from "react"; import {Link} from "react-router-dom"; -import {GoMath} from 'ogs-goban'; +import {GoMath, sfx} from 'goban'; import {InstructionalGoban} from "./InstructionalGoban"; -import {sfx} from "ogs-goban"; import {browserHistory} from "ogsHistory"; import {setSectionPageCompleted, getSectionPageCompleted} from './util'; diff --git a/webpack.config.js b/webpack.config.js index b2723610db..4d6a6b120d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,7 +5,7 @@ let fs = require('fs'); var webpack = require('webpack'); const pkg = require('./package.json'); -const production = process.env.PRODUCTION ? true : false; +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; let plugins = []; @@ -38,81 +38,112 @@ plugins.push( ); */ +plugins.push(new webpack.EnvironmentPlugin({ + NODE_ENV: 'development', // use 'development' unless process.env.NODE_ENV is defined + DEBUG: false +})); + let defines = { - PRODUCTION: production, CLIENT: true, SERVER: false, }; - plugins.push(new webpack.DefinePlugin(defines)); -module.exports = { - mode: production ? 'production' : 'development', - entry: { - 'ogs': './src/main.tsx', - }, - resolve: { - modules: [ - 'src/lib', - 'src/lib/goban', - 'src/components', - 'src/views', - 'src/data', - 'src/compatibility', - 'src', - 'node_modules' - ], - extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js"], - }, - output: { - path: __dirname + '/dist', - filename: production ? '[name].min.js' : '[name].js' - }, - module: { - rules: [ - // All files with a '.ts' or '.tsx' extension will be handled by 'ts-loader'. - { - test: /\.tsx?$/, - loader: "ts-loader", - exclude: /node_modules/, - } - ] - }, - - performance: { - maxAssetSize: 1024 * 1024 * 2.5, - maxEntrypointSize: 1024 * 1024 * 2.5, - }, - - optimization: { - splitChunks: { - cacheGroups: { - "vendor": { - test: /[\\/]node_modules[\\/]/, // <-- use the test property to specify which deps go here - name: "vendor", - chunks: "all", - priority: -10 +if (process.env.ANALYZE) { + plugins.push(new BundleAnalyzerPlugin()); +} + + + +module.exports = (env, argv) => { + const production = argv.mode === 'production'; + + const config = { + mode: production ? 'production' : 'development', + entry: { + 'ogs': './src/main.tsx', + }, + resolve: { + modules: [ + 'src/lib', + 'src/components', + 'src/views', + 'src', + 'node_modules' + ], + extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js"], + }, + output: { + path: __dirname + '/dist', + filename: production ? '[name].min.js' : '[name].js' + }, + module: { + rules: [ + { + test: /\.js$/, + use: ["source-map-loader"], + enforce: "pre" + }, + // All files with a '.ts' or '.tsx' extension will be handled by 'ts-loader'. + { + test: /\.tsx?$/, + loader: "ts-loader", + exclude: /node_modules/, + } + ] + }, + + performance: { + maxAssetSize: 1024 * 1024 * 2.5, + maxEntrypointSize: 1024 * 1024 * 2.5, + }, + + optimization: { + splitChunks: { + cacheGroups: { + "vendor": { + test: /[\\/]node_modules[\\/]/, // <-- use the test property to specify which deps go here + name: "vendor", + chunks: "all", + priority: -10 + } } } - } - }, + }, - stats: 'errors-only', - plugins: plugins, + plugins: plugins, - //devtool: production ? 'source-map' : 'eval-source-map', - /* NOTE: The default needs to be source-map for the i18n translation stuff to work. Specifically, using eval-source-map makes it impossible for our xgettext-js parser to parse the embedded source. */ - devtool: 'source-map', + //devtool: production ? 'source-map' : 'eval-source-map', + /* NOTE: The default needs to be source-map for the i18n translation stuff to work. Specifically, using eval-source-map makes it impossible for our xgettext-js parser to parse the embedded source. */ + devtool: 'source-map', + + // When importing a module whose path matches one of the following, just + // assume a corresponding global variable exists and use that instead. + // This is important because it allows us to avoid bundling all of our + // dependencies, which allows browsers to cache those libraries between builds. + externals: { + "swal": "swal", // can't seem to import anyways + }, + + + devServer: { + stats: { + assets: true, + children: false, + chunks: true, + hash: true, + modules: true, + publicPath: true, + timings: true, + version: true, + warnings: true, + } + }, + }; - // When importing a module whose path matches one of the following, just - // assume a corresponding global variable exists and use that instead. - // This is important because it allows us to avoid bundling all of our - // dependencies, which allows browsers to cache those libraries between builds. - externals: { - "swal": "swal", // can't seem to import anyways - }, + return config; }; diff --git a/yarn.lock b/yarn.lock index 9a3c045ebf..b17c0cb269 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,9 +19,9 @@ js-tokens "^4.0.0" "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" - integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ== + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.2.tgz#c3d6e41b304ef10dcf13777a33e7694ec4a9a6dd" + integrity sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg== dependencies: regenerator-runtime "^0.13.2" @@ -366,14 +366,14 @@ integrity sha512-FWR7QB7EqBRq1s9BMk0ccOSOuRLfVEWYpHQYpFPaXtCoqN6dJx2ttdsdQbUxLLnAlKpYeVjveGGhQ3583TTa7g== "@types/node@*": - version "12.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" - integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== + version "12.7.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.9.tgz#da0210f91096aa67138cf5afd04c4d629f8a406a" + integrity sha512-P57oKTJ/vYivL2BCfxCC5tQjlS8qW31pbOL6qt99Yrjm95YdHgNZwjrTTjMBh+C2/y6PXIX4oz253+jUzxKKfQ== "@types/prop-types@*": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.2.tgz#0e58ae66773d7fd7c372a493aff740878ec9ceaa" - integrity sha512-f8JzJNWVhKtc9dg/dyDNfliTKNOJSLa7Oht/ElZdF/UbMUmAH3rLmAk3ODNjw0mZajDEgatA03tRjB4+Dp/tzA== + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== "@types/q@^1.5.1": version "1.5.2" @@ -393,9 +393,9 @@ "@types/react" "*" "@types/react-dom@^16.9.0": - version "16.9.0" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.0.tgz#ba6ddb00bf5de700b0eb91daa452081ffccbfdea" - integrity sha512-OL2lk7LYGjxn4b0efW3Pvf2KBVP0y1v3wip1Bp7nA79NkOpElH98q3WdCEdDj93b2b0zaeBG9DvriuKjIK5xDA== + version "16.9.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.1.tgz#79206237cba9532a9f870b1cd5428bef6b66378c" + integrity sha512-1S/akvkKr63qIUWVu5IKYou2P9fHLb/P2VAwyxVV85JGaGZTcUniMiTuIqM3lXFB25ej6h+CYEQ27ERVwi6eGA== dependencies: "@types/react" "*" @@ -423,17 +423,17 @@ "@types/react" "*" "@types/react@*", "@types/react@^16.9.2": - version "16.9.2" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.2.tgz#6d1765431a1ad1877979013906731aae373de268" - integrity sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg== + version "16.9.4" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.4.tgz#de8cf5e5e2838659fb78fa93181078469eeb19fc" + integrity sha512-ItGNmJvQ0IvWt8rbk5PLdpdQhvBVxAaXI9hDlx7UMd8Ie1iMIuwMNiKeTfmVN517CdplpyXvA22X4zm4jGGZnw== dependencies: "@types/prop-types" "*" csstype "^2.2.0" "@types/sanitize-html@^1.13.31": - version "1.20.1" - resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-1.20.1.tgz#6a64f98ca1589df2ed85ac725f53097a03b12981" - integrity sha512-WGFp6QuYUGaPl+WUfU4VYMYPx6buO9hfKkdeHCazjUzr0LlnrCKBjfKXiU+ra/JasDDALmtSGmOCtOT1iduQtQ== + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-1.20.2.tgz#59777f79f015321334e3a9f28882f58c0a0d42b8" + integrity sha512-SrefiiBebGIhxEFkpbbYOwO1S6+zQLWAC4s4tipchlHq1aO9bp0xiapM7Zm0ml20MF+3OePWYdksB1xtneKPxg== dependencies: "@types/htmlparser2" "*" @@ -1034,9 +1034,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + version "3.7.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.0.tgz#56a6a886e03f6ae577cffedeb524f8f2450293cf" + integrity sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" @@ -1316,9 +1316,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000989: - version "1.0.30000989" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" - integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== + version "1.0.30000998" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000998.tgz#7227a8046841e7d01e156ae7227a504d065f6744" + integrity sha512-8Tj5sPZR9kMHeDD9SZXIVr5m9ofufLLCG2Y4QwQrH18GIwG+kCc+zYdlR036ZRkuKjVVetyxeAgGA1xF7XdmzQ== center-align@^0.1.1: version "0.1.3" @@ -1362,9 +1362,9 @@ chokidar@^2.0.0, chokidar@^2.0.2: fsevents "^1.2.7" chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== chrome-trace-event@^1.0.2: version "1.0.2" @@ -1536,9 +1536,9 @@ color@^3.0.0: color-string "^1.5.2" commander@2, commander@^2.12.1, commander@^2.18.0, commander@^2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + version "2.20.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.1.tgz#3863ce3ca92d0831dcf2a102f5fb4b5926afd0f9" + integrity sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg== commander@2.11.x, commander@~2.11.0: version "2.11.0" @@ -1945,9 +1945,9 @@ d3-collection@1: integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== d3-color@1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.3.0.tgz#675818359074215b020dc1d41d518136dcb18fa9" - integrity sha512-NHODMBlj59xPAwl2BDiO2Mog6V+PrGRtBfWKqKRrs9MCqlSkIEb0Z/SfY7jW29ReHTDC/j+vwXhnZcXI3+3fbg== + version "1.4.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf" + integrity sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg== d3-contour@1: version "1.3.2" @@ -2084,9 +2084,9 @@ d3-time-format@2: d3-time "1" d3-time@1: - version "1.0.11" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.11.tgz#1d831a3e25cd189eb256c17770a666368762bbce" - integrity sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" + integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== d3-timer@1: version "1.0.9" @@ -2122,9 +2122,9 @@ d3-zoom@1: d3-transition "1" d3@^5.7.0: - version "5.11.0" - resolved "https://registry.yarnpkg.com/d3/-/d3-5.11.0.tgz#d5ffc84f930eeb895d88699195d2d852778ab158" - integrity sha512-LXgMVUAEAzQh6WfEEOa8tJX4RA64ZJ6twC3CJ+Xzid+fXWLTZkkglagXav/eOoQgzQi5rzV0xC4Sfspd6hFDHA== + version "5.12.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.12.0.tgz#0ddeac879c28c882317cd439b495290acd59ab61" + integrity sha512-flYVMoVuhPFHd9zVCe2BxIszUWqBcd5fvQGMNRmSiBrgdnh6Vlruh60RJQTouAK9xPbOB0plxMvBm4MoyODXNg== dependencies: d3-array "1" d3-axis "1" @@ -2377,7 +2377,7 @@ dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -duplexer@^0.1.1, duplexer@~0.1.1: +duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= @@ -2418,9 +2418,9 @@ ejs@^2.6.1: integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== electron-to-chromium@^1.3.247: - version "1.3.252" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.252.tgz#5b6261965b564a0f4df0f1c86246487897017f52" - integrity sha512-NWJ5TztDnjExFISZHFwpoJjMbLUifsNBnx7u2JI0gCw6SbKyQYYWWtBHasO/jPtHym69F4EZuTpRNGN11MT/jg== + version "1.3.273" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.273.tgz#94872d6823219f2812f2e35a2ce2a7d03c1eaa3f" + integrity sha512-0kUppiHQvHEENHh+nTtvTt4eXMwcPyWmMaj73GPrSEm3ldKhmmHuOH6IjrmuW6YmyS/fpXcLvMQLNVpqRhpNWw== elliptic@^6.0.0: version "6.5.1" @@ -2458,9 +2458,9 @@ encoding@^0.1.11: iconv-lite "~0.4.13" end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" @@ -2498,17 +2498,16 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" error@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= + version "7.2.0" + resolved "https://registry.yarnpkg.com/error/-/error-7.2.0.tgz#80c989885635b41df9309d145834a4f125ae2245" + integrity sha512-M6t3j3Vt3uDicrViMP5fLq2AeADNrCVFD8Oj4Qt2MHsX0mPYG7D5XdnEfSdRpaHQzjAJ19wu+I1mw9rQYMTAPg== dependencies: string-template "~0.2.1" - xtend "~4.0.0" es-abstract@^1.12.0, es-abstract@^1.5.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.1.tgz#6e8d84b445ec9c610781e74a6d52cc31aac5b4ca" - integrity sha512-cp/Tb1oA/rh2X7vqeSOvM+TSo3UkJLX70eNihgVEvnzwAgikjkTFr/QVgRCaxjm0knCNQzNoxxxcw2zO2LJdZA== + version "1.15.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.15.0.tgz#8884928ec7e40a79e3c9bc812d37d10c8b24cc57" + integrity sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ== dependencies: es-to-primitive "^1.2.0" function-bind "^1.1.1" @@ -2518,8 +2517,8 @@ es-abstract@^1.12.0, es-abstract@^1.5.1: is-regex "^1.0.4" object-inspect "^1.6.0" object-keys "^1.1.1" - string.prototype.trimleft "^2.0.0" - string.prototype.trimright "^2.0.0" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" es-to-primitive@^1.2.0: version "1.2.0" @@ -2629,19 +2628,6 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" -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" - eventemitter3@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" @@ -2963,17 +2949,12 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= - fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - minipass "^2.2.1" + minipass "^2.6.0" fs-mkdirp-stream@^1.0.0: version "1.0.0" @@ -3006,7 +2987,7 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" -function-bind@^1.0.2, function-bind@^1.1.1: +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== @@ -3138,6 +3119,9 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" +"goban@file:../goban": + version "0.2.0" + graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" @@ -3183,15 +3167,15 @@ gulp-cli@^2.2.0: yargs "^7.1.0" gulp-livereload@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/gulp-livereload/-/gulp-livereload-4.0.1.tgz#cb438e62f24363e26b44ddf36fd37c274b8b15ee" - integrity sha512-BfjRd3gyJ9VuFqIOM6C3041P0FUc0T5MXjABWWHp4iDLmdnJ1fDZAQz514OID+ICXbgIW7942r9luommHBtrfQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/gulp-livereload/-/gulp-livereload-4.0.2.tgz#fc8a75c7511cd65afd2202cbcdc8bb0f8dde377b" + integrity sha512-InmaR50Xl1xB1WdEk4mrUgGHv3VhhlRLrx7u60iY5AAer90FlK95KXitPcGGQoi28zrUJM189d/h6+V470Ncgg== dependencies: chalk "^2.4.1" debug "^3.1.0" - event-stream "3.3.4" fancy-log "^1.3.2" lodash.assign "^4.2.0" + readable-stream "^3.0.6" tiny-lr "^1.1.1" vinyl "^2.2.0" @@ -3358,16 +3342,16 @@ hex-color-regex@^1.1.0: integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== history@^4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/history/-/history-4.9.0.tgz#84587c2068039ead8af769e9d6a6860a14fa1bca" - integrity sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA== + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== dependencies: "@babel/runtime" "^7.1.2" loose-envify "^1.2.0" - resolve-pathname "^2.2.0" + resolve-pathname "^3.0.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" - value-equal "^0.4.0" + value-equal "^1.0.1" hmac-drbg@^1.0.0: version "1.0.1" @@ -3493,9 +3477,9 @@ iferr@^0.1.5: integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + version "3.0.2" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" + integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== dependencies: minimatch "^3.0.4" @@ -4101,7 +4085,7 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash-es@^4.17.11, lodash-es@^4.2.1: +lodash-es@^4.17.15, lodash-es@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== @@ -4344,11 +4328,6 @@ map-stream@~0.0.7: resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz#8a1f07896d82b10926bd3744a2420009f88974a8" integrity sha1-ih8HiW2CsQkmvTdEokIACfiJdKg= -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= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -4540,20 +4519,20 @@ minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.2.1, minipass@^2.3.5: - version "2.5.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.0.tgz#dddb1d001976978158a05badfcbef4a771612857" - integrity sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: - minipass "^2.2.1" + minipass "^2.9.0" mississippi@^3.0.0: version "3.0.0" @@ -4742,9 +4721,9 @@ node-pre-gyp@^0.12.0: tar "^4" node-releases@^1.1.29: - version "1.1.29" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.29.tgz#86a57c6587a30ecd6726449e5d293466b0a0bb86" - integrity sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ== + version "1.1.33" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.33.tgz#349f10291234624574f44cf32b7de259bf028303" + integrity sha512-I0V30bWQEoHb+10W8oedVoUrdjW5wIkYm0w7vvcrPO95pZY738m1k77GF5sO0vKg5eXYg9oGtrMAETbgZGm11A== dependencies: semver "^5.3.0" @@ -5060,9 +5039,9 @@ param-case@2.1.x: no-case "^2.2.0" parse-asn1@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" - integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -5185,13 +5164,6 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -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" - pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -5706,9 +5678,9 @@ qs@6.7.0: integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.4.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.8.0.tgz#87b763f0d37ca54200334cd57bb2ef8f68a1d081" - integrity sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w== + version "6.9.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.0.tgz#d1297e2a049c53119cb49cca366adbbacc80b409" + integrity sha512-27RP4UotQORTpmNQDX8BHPukOnBP3p1uUJY5UnDhaJB+rMt9iMsok724XL+UHU23bEFOHRMQ2ZhI99qOWUMGFA== query-string@^5.0.1: version "5.1.1" @@ -5729,7 +5701,7 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -raf-schd@^4.0.0: +raf-schd@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== @@ -5821,14 +5793,14 @@ react-datetime@^2.10.3: react-onclickoutside "^6.5.0" react-dom@^16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.9.0.tgz#5e65527a5e26f22ae3701131bcccaee9fb0d3962" - integrity sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ== + version "16.10.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.1.tgz#479a6511ba34a429273c213cbc2a9ac4d296dac1" + integrity sha512-SmM4ZW0uug0rn95U8uqr52I7UdNf6wdGLeXDmNLfg3y5q5H9eAbdjF5ubQc3bjDyRrvdAB2IKG7X0GzSpnn5Mg== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.15.0" + scheduler "^0.16.1" react-dropzone@^3.7.3: version "3.13.4" @@ -5839,16 +5811,16 @@ react-dropzone@^3.7.3: prop-types "^15.5.7" react-input-autosize@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8" - integrity sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA== + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2" + integrity sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw== dependencies: prop-types "^15.5.8" react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" - integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== + version "16.10.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.1.tgz#0612786bf19df406502d935494f0450b40b8294f" + integrity sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw== react-lifecycles-compat@^3.0.4: version "3.0.4" @@ -5880,33 +5852,33 @@ react-redux@^4.4.6: prop-types "^15.7.2" react-resize-detector@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-4.2.0.tgz#b87aee6b37c9e8a52daca8736b3230cf6a2a8647" - integrity sha512-AtOaNIxs0ydua7tEoglXR3902/EdlIj9PXDu1Zj0ug2VAUnkSQjguLGzaG/N6CXLOhJSccTsUCZxjLayQ1mE9Q== + version "4.2.1" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-4.2.1.tgz#8982b74c3e1cf949afaa3c41050458c87b033982" + integrity sha512-ZfPMBPxXi0o3xox42MIEtz84tPSVMW9GgwLHYvjVXlFM+OkNzbeEtpVSV+mSTJmk4Znwomolzt35zHN9LNBQMQ== dependencies: - lodash "^4.17.11" - lodash-es "^4.17.11" + lodash "^4.17.15" + lodash-es "^4.17.15" prop-types "^15.7.2" - raf-schd "^4.0.0" + raf-schd "^4.0.2" resize-observer-polyfill "^1.5.1" react-router-dom@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.0.1.tgz#ee66f4a5d18b6089c361958e443489d6bab714be" - integrity sha512-zaVHSy7NN0G91/Bz9GD4owex5+eop+KvgbxXsP/O+iW1/Ln+BrJ8QiIR5a6xNPtrdTvLkxqlDClx13QO1uB8CA== + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18" + integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.0.1" + react-router "5.1.2" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.0.1, react-router@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.0.1.tgz#04ee77df1d1ab6cb8939f9f01ad5702dbadb8b0f" - integrity sha512-EM7suCPNKb1NxcTZ2LEOWFtQBQRQXecLxVpdsP4DW4PbbqYWeRiLyV/Tt1SdCrvT2jcyXAXmVTmzvSzrPR63Bg== +react-router@5.1.2, react-router@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418" + integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" @@ -5929,9 +5901,9 @@ react-select@^1.2.1: react-input-autosize "^2.1.2" react-table@^6.10.0: - version "6.10.0" - resolved "https://registry.yarnpkg.com/react-table/-/react-table-6.10.0.tgz#20444b19d8ca3c1a08e7544e5c3a93e4ba56690e" - integrity sha512-s/mQLI1+mNvlae45MfAZyZ04YIT3jUzWJqx34s0tfwpDdgJkpeK6vyzwMUkKFCpGODBxpjBOekYZzcEmk+2FiQ== + version "6.10.3" + resolved "https://registry.yarnpkg.com/react-table/-/react-table-6.10.3.tgz#d085487a5a1b18b76486b71cf1d388d87c8c7362" + integrity sha512-sVlq2/rxVaQJywGD95+qGiMr/SMHFIFnXdx619BLOWE/Os5FOGtV6pQJNAjZixbQZiOu7dmBO1kME28uxh6wmA== dependencies: classnames "^2.2.5" @@ -5956,9 +5928,9 @@ react-virtualized@^9.21.0: react-lifecycles-compat "^3.0.4" react@^16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" - integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== + version "16.10.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.10.1.tgz#967c1e71a2767dfa699e6ba702a00483e3b0573f" + integrity sha512-2bisHwMhxQ3XQz4LiJJwG3360pY965pTl/MRrZYxIBKVj4fOHoDs5aZAkYXGxDRO1Li+SyjTAilQEbOmtQJHzA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -5994,7 +5966,7 @@ read-pkg@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.1.1: +"readable-stream@2 || 3", readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== @@ -6150,10 +6122,10 @@ resolve-options@^1.1.0: dependencies: value-or-function "^3.0.0" -resolve-pathname@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" - integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg== +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve-url@^0.2.1: version "0.2.1" @@ -6264,10 +6236,10 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e" - integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg== +scheduler@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.16.1.tgz#a6fb6ddec12dc2119176e6eb54ecfe69a9eba8df" + integrity sha512-MIuie7SgsqMYOdCXVFZa8SKoNorJZUWHW8dPgto7uEHn1lX3fg2Gu0TzgK8USj76uxV7vB5eRMnZs/cdEHg+cg== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -6399,11 +6371,6 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -slugify@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.3.4.tgz#78d2792d7222b55cd9fc81fa018df99af779efeb" - integrity sha512-KP0ZYk5hJNBS8/eIjGkFDCzGQIoZ1mnfQRYS5WM3273z+fxGWXeN0fkwf2ebEweydv9tioZIHGZKoF21U07/nw== - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6524,13 +6491,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -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" @@ -6582,13 +6542,6 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -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" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -6654,21 +6607,21 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.trimleft@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz#68b6aa8e162c6a80e76e3a8a0c2e747186e271ff" - integrity sha1-aLaqjhYsaoDnbjqKDC50cYbicf8= +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== dependencies: - define-properties "^1.1.2" - function-bind "^1.0.2" + define-properties "^1.1.3" + function-bind "^1.1.1" -string.prototype.trimright@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz#ab4a56d802a01fbe7293e11e84f24dc8164661dd" - integrity sha1-q0pW2AKgH75yk+EehPJNyBZGYd0= +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== dependencies: - define-properties "^1.1.2" - function-bind "^1.0.2" + define-properties "^1.1.3" + function-bind "^1.1.1" string_decoder@0.10: version "0.10.31" @@ -6812,13 +6765,13 @@ tapable@^1.0.0, tapable@^1.1.3: integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.5" + minipass "^2.8.6" minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" @@ -6840,9 +6793,9 @@ terser-webpack-plugin@^1.4.1: worker-farm "^1.7.0" terser@^4.1.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.2.1.tgz#1052cfe17576c66e7bc70fcc7119f22b155bdac1" - integrity sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A== + version "4.3.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.4.tgz#ad91bade95619e3434685d69efa621a5af5f877d" + integrity sha512-Kcrn3RiW8NtHBP0ssOAzwa2MsIRQ8lJWiBG/K7JgqPlomA3mtb2DEmp4/hrUA+Jujx+WZ02zqd7GYD+QRBB/2Q== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -6871,7 +6824,7 @@ through2@3.0.1: dependencies: readable-stream "2 || 3" -through@2, through@~2.3, through@~2.3.1, through@~2.3.8: +through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -6997,9 +6950,9 @@ ts-loader@^6.2.0: semver "^6.0.0" ts-md5@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/ts-md5/-/ts-md5-1.2.5.tgz#4cb00ddf687251a2aba09922f95f766bf6486a15" - integrity sha512-0E8UHsfEmK9CICH47YLVIN6/wtGJJ7/8XiAbUBszTHxeucglueTgPn86D8Ec3UG9tYWTICVY/EuUGQ+Xa2iSEA== + version "1.2.6" + resolved "https://registry.yarnpkg.com/ts-md5/-/ts-md5-1.2.6.tgz#a511b3023e46f729edbe6766d5899595a5643f1d" + integrity sha512-VFW6O4CTZsgTPDBhF31i83hPhfwd9Dcp5RnbfGOIJPDRro9IhvXMYd8xBycD0yXqHZiAvv+iDG8F+UFrPEyQ5w== tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.10.0" @@ -7046,9 +6999,9 @@ type-is@~1.6.17, type-is@~1.6.18: mime-types "~2.1.24" type@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179" - integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg== + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== typedarray@^0.0.6: version "0.0.6" @@ -7270,10 +7223,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-equal@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" - integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw== +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== value-or-function@^3.0.0: version "3.0.0" @@ -7359,10 +7312,10 @@ watchpack@^1.6.0: graceful-fs "^4.1.2" neo-async "^2.5.0" -webpack-bundle-analyzer@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.4.1.tgz#430544c7ba1631baccf673475ca8300cb74a3c47" - integrity sha512-Bs8D/1zF+17lhqj2OYmzi7HEVYqEVxu7lCO9Ff8BwajenOU0vAwEoV8e4ICCPNZAcqR1PCR/7o2SkW+cnCmF0A== +webpack-bundle-analyzer@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.5.2.tgz#ac02834f4b31de8e27d71e6c7a612301ebddb79f" + integrity sha512-g9spCNe25QYUVqHRDkwG414GTok2m7pTTP0wr6l0J50Z3YLS04+BGodTqqoVBL7QfU/U/9p/oiI5XFOyfZ7S/A== dependencies: acorn "^6.0.7" acorn-walk "^6.1.1" @@ -7556,9 +7509,9 @@ y18n@^4.0.0: integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yargs-parser@^13.1.0: version "13.1.1"