diff --git a/.dockerignore b/.dockerignore index 45ead65e15..ced02564a8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,7 +3,6 @@ test/ webapp/ lib/ node_modules/ -electron_app/ karma-reports/ .idea/ .tmp/ diff --git a/.gitignore b/.gitignore index 4dd3a26213..c7f99f6925 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,6 @@ /key.pem /lib /node_modules -/electron_app/node_modules -/electron_app/dist -/electron_app/pub /packages/ /webapp /.npmrc diff --git a/CHANGELOG.md b/CHANGELOG.md index a5bc6cda88..d0871d5f8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,99 @@ +Changes in [1.6.0](https://github.com/vector-im/riot-web/releases/tag/v1.6.0) (2020-05-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.6...v1.6.0) + + * Cross-signing and E2EE by default for DMs and private rooms enabled + * Upgrade to React SDK 2.5.0 and JS SDK 6.0.0 + +Changes in [1.6.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.6) (2020-05-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.5...v1.6.0-rc.6) + + * Upgrade to React SDK 2.5.0-rc.6 and JS SDK 6.0.0-rc.2 + +Changes in [1.6.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.5) (2020-04-30) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.4...v1.6.0-rc.5) + + * Upgrade to React SDK 2.5.0-rc.5 and JS SDK 6.0.0-rc.1 + * Remove feature flag docs from docs on release + [\#13375](https://github.com/vector-im/riot-web/pull/13375) + +Changes in [1.6.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.4) (2020-04-23) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.3...v1.6.0-rc.4) + + * Upgrade to React SDK 2.5.0-rc.4 and JS SDK 5.3.1-rc.4 + +Changes in [1.6.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.3) (2020-04-17) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.2...v1.6.0-rc.3) + + * Upgrade to React SDK 2.5.0-rc.3 and JS SDK 5.3.1-rc.3 + +Changes in [1.6.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.2) (2020-04-16) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.1...v1.6.0-rc.2) + + * Upgrade to React SDK 2.5.0-rc.2 and JS SDK 5.3.1-rc.2 + * Enable cross-signing / E2EE by default for DM without config changes + +Changes in [1.6.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.1) (2020-04-15) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.16-rc.1...v1.6.0-rc.1) + + * Enable cross-signing / E2EE by default for DM on release + [\#13179](https://github.com/vector-im/riot-web/pull/13179) + * Upgrade to React SDK 2.5.0-rc.1 and JS SDK 5.3.1-rc.1 + * Add instruction to resolve the inotify watch limit issue + [\#13128](https://github.com/vector-im/riot-web/pull/13128) + * docs: labs: add a pointer to config.md + [\#13149](https://github.com/vector-im/riot-web/pull/13149) + * Fix Electron SSO handling to support multiple profiles + [\#13028](https://github.com/vector-im/riot-web/pull/13028) + * Add riot-desktop shortcuts for forward/back matching browsers&slack + [\#13133](https://github.com/vector-im/riot-web/pull/13133) + * Allow rageshake to fail in init + [\#13164](https://github.com/vector-im/riot-web/pull/13164) + * Fix broken yarn install link in README.md + [\#13125](https://github.com/vector-im/riot-web/pull/13125) + * fix build:jitsi scripts crash caused by a missing folder + [\#13122](https://github.com/vector-im/riot-web/pull/13122) + * App load order changes to catch errors better + [\#13095](https://github.com/vector-im/riot-web/pull/13095) + * Upgrade deps + [\#13080](https://github.com/vector-im/riot-web/pull/13080) + +Changes in [1.5.16-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.16-rc.1) (2020-04-08) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.15...v1.5.16-rc.1) + + * Upgrade React SDK to 2.4.0-rc.1 and JS SDK to 5.3.0-rc.1 + * Update from Weblate + [\#13078](https://github.com/vector-im/riot-web/pull/13078) + * Mention Jitsi support at the .well-known level in Jitsi docs + [\#13047](https://github.com/vector-im/riot-web/pull/13047) + * Add new default home page fallback + [\#13049](https://github.com/vector-im/riot-web/pull/13049) + * App load order tweaks for code splitting + [\#13032](https://github.com/vector-im/riot-web/pull/13032) + * Add some docs about Jitsi widgets and Jitsi configuration + [\#13027](https://github.com/vector-im/riot-web/pull/13027) + * Bump minimist from 1.2.2 to 1.2.3 in /electron_app + [\#13030](https://github.com/vector-im/riot-web/pull/13030) + * Fix Electron mac-specific shortcut being registered on Web too. + [\#13020](https://github.com/vector-im/riot-web/pull/13020) + * Add a console warning that errors from Jitsi Meet are fine + [\#12968](https://github.com/vector-im/riot-web/pull/12968) + * Fix popout support for jitsi widgets + [\#12975](https://github.com/vector-im/riot-web/pull/12975) + * Some grammar and clarifications + [\#12925](https://github.com/vector-im/riot-web/pull/12925) + * Don't immediately remove notifications from notification trays + [\#12861](https://github.com/vector-im/riot-web/pull/12861) + * Remove welcome user from config + [\#12894](https://github.com/vector-im/riot-web/pull/12894) + Changes in [1.5.15](https://github.com/vector-im/riot-web/releases/tag/v1.5.15) (2020-04-01) ============================================================================================ [Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.14...v1.5.15) diff --git a/README.md b/README.md index 51cdb0eef7..0f4a304e0d 100644 --- a/README.md +++ b/README.md @@ -108,40 +108,7 @@ Riot can also be run as a desktop app, wrapped in Electron. You can download a pre-built version from https://riot.im/download/desktop/ or, if you prefer, build it yourself. -To build it yourself, follow the instructions below. - -1. Follow the instructions in 'Building From Source' above, but run - `yarn build` instead of `yarn dist` (since we don't need the tarball). -2. Install Electron and run it: - - ```bash - yarn electron - ``` - -To build packages, use `electron-builder`. This is configured to output: - * `dmg` + `zip` for macOS - * `exe` + `nupkg` for Windows - * `deb` for Linux -But this can be customised by editing the `build` section of package.json -as per https://github.com/electron-userland/electron-builder/wiki/Options - -See https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Build -for dependencies required for building packages for various platforms. - -The only platform that can build packages for all three platforms is macOS: -```bash -brew install mono -yarn install -yarn build:electron -``` - -For other packages, use `electron-builder` manually. For example, to build a -package for 64 bit Linux: - - 1. Follow the instructions in 'Building From Source' above - 2. `node_modules/.bin/build -l --x64` - -All Electron packages go into `electron_app/dist/` +To build it yourself, follow the instructions at https://github.com/vector-im/riot-desktop. Many thanks to @aviraldg for the initial work on the Electron integration. @@ -310,7 +277,7 @@ modifying it. See the [configuration docs](docs/config.md) for details. Open http://127.0.0.1:8080/ in your browser to see your newly built Riot. -**Note**: The build script uses inotify by default on Linux to monitor directories +**Note**: The build script uses inotify by default on Linux to monitor directories for changes. If the inotify watch limit is too low your build will silently fail. To avoid this issue, we recommend a limit of at least 128M. diff --git a/__mocks__/cssMock.js b/__mocks__/cssMock.js new file mode 100644 index 0000000000..9b5d9b3476 --- /dev/null +++ b/__mocks__/cssMock.js @@ -0,0 +1 @@ +module.exports = "css-file-stub"; diff --git a/docs/config.md b/docs/config.md index cb501da02a..e781211945 100644 --- a/docs/config.md +++ b/docs/config.md @@ -136,24 +136,11 @@ If none of these sources have an identity server set, then Riot will prompt the user to set an identity server first when attempting to use features that require one. -Currently the only two public identity servers are https://vector.im and +Currently, the only two public identity servers are https://vector.im and https://matrix.org, however in the future identity servers will be decentralised. Desktop app configuration ========================= -To run multiple instances of the desktop app for different accounts, you can -launch the executable with the `--profile` argument followed by a unique -identifier, e.g `riot-web --profile Work` for it to run a separate profile and -not interfere with the default one. - -Alternatively, a custom location for the profile data can be specified using the -`--profile-dir` flag followed by the desired path. - -+ `%APPDATA%\$NAME\config.json` on Windows -+ `$XDG_CONFIG_HOME\$NAME\config.json` or `~/.config/$NAME/config.json` on Linux -+ `~Library/Application Support/$NAME/config.json` on macOS - -In the paths above, `$NAME` is typically `Riot`, unless you use `--profile -$PROFILE` in which case it becomes `Riot-$PROFILE`. +See https://github.com/vector-im/riot-desktop#user-specified-configjson diff --git a/electron_app/build/entitlements.mac.plist b/electron_app/build/entitlements.mac.plist deleted file mode 100644 index 3fdab97494..0000000000 --- a/electron_app/build/entitlements.mac.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - - - com.apple.security.cs.disable-library-validation - - - - com.apple.security.device.camera - - com.apple.security.device.audio-input - - - diff --git a/electron_app/build/icon.icns b/electron_app/build/icon.icns deleted file mode 100644 index eba95ecf4f..0000000000 Binary files a/electron_app/build/icon.icns and /dev/null differ diff --git a/electron_app/build/icon.ico b/electron_app/build/icon.ico deleted file mode 100644 index 1305b7dd9a..0000000000 Binary files a/electron_app/build/icon.ico and /dev/null differ diff --git a/electron_app/build/icons/128x128.png b/electron_app/build/icons/128x128.png deleted file mode 100644 index 3684017853..0000000000 Binary files a/electron_app/build/icons/128x128.png and /dev/null differ diff --git a/electron_app/build/icons/16x16.png b/electron_app/build/icons/16x16.png deleted file mode 100644 index 0403a514c8..0000000000 Binary files a/electron_app/build/icons/16x16.png and /dev/null differ diff --git a/electron_app/build/icons/24x24.png b/electron_app/build/icons/24x24.png deleted file mode 100644 index 804559fd62..0000000000 Binary files a/electron_app/build/icons/24x24.png and /dev/null differ diff --git a/electron_app/build/icons/256x256.png b/electron_app/build/icons/256x256.png deleted file mode 100644 index ab8a33a333..0000000000 Binary files a/electron_app/build/icons/256x256.png and /dev/null differ diff --git a/electron_app/build/icons/48x48.png b/electron_app/build/icons/48x48.png deleted file mode 100644 index b872420a5d..0000000000 Binary files a/electron_app/build/icons/48x48.png and /dev/null differ diff --git a/electron_app/build/icons/512x512.png b/electron_app/build/icons/512x512.png deleted file mode 100644 index a7d2a3198e..0000000000 Binary files a/electron_app/build/icons/512x512.png and /dev/null differ diff --git a/electron_app/build/icons/64x64.png b/electron_app/build/icons/64x64.png deleted file mode 100644 index be276e16ea..0000000000 Binary files a/electron_app/build/icons/64x64.png and /dev/null differ diff --git a/electron_app/build/icons/96x96.png b/electron_app/build/icons/96x96.png deleted file mode 100644 index 11f0bd9183..0000000000 Binary files a/electron_app/build/icons/96x96.png and /dev/null differ diff --git a/electron_app/build/install-spinner.gif b/electron_app/build/install-spinner.gif deleted file mode 100644 index 4a685294b6..0000000000 Binary files a/electron_app/build/install-spinner.gif and /dev/null differ diff --git a/electron_app/img/riot.ico b/electron_app/img/riot.ico deleted file mode 100644 index 1305b7dd9a..0000000000 Binary files a/electron_app/img/riot.ico and /dev/null differ diff --git a/electron_app/img/riot.png b/electron_app/img/riot.png deleted file mode 100644 index ab8a33a333..0000000000 Binary files a/electron_app/img/riot.png and /dev/null differ diff --git a/electron_app/package.json b/electron_app/package.json deleted file mode 100644 index 390b61d8d3..0000000000 --- a/electron_app/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "riot-web", - "productName": "Riot", - "main": "src/electron-main.js", - "version": "1.5.15", - "description": "A feature-rich client for Matrix.org", - "author": "New Vector Ltd.", - "dependencies": { - "auto-launch": "^5.0.1", - "electron-store": "^2.0.0", - "electron-window-state": "^4.1.0", - "minimist": "^1.2.0", - "png-to-ico": "^1.0.2" - } -} diff --git a/electron_app/riot.im/New_Vector_Ltd.pem b/electron_app/riot.im/New_Vector_Ltd.pem deleted file mode 100644 index 1a34127210..0000000000 --- a/electron_app/riot.im/New_Vector_Ltd.pem +++ /dev/null @@ -1,34 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF0jCCBLqgAwIBAgIRAISYBqZi3VvCUeSfHXF+cbwwDQYJKoZIhvcNAQELBQAw -gZExCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTcwNQYD -VQQDEy5DT01PRE8gUlNBIEV4dGVuZGVkIFZhbGlkYXRpb24gQ29kZSBTaWduaW5n -IENBMB4XDTE3MDgyMzAwMDAwMFoXDTIwMDgyMjIzNTk1OVowgdgxETAPBgNVBAUT -CDEwODczNjYxMRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0wGwYDVQQPExRQcml2YXRl -IE9yZ2FuaXphdGlvbjELMAkGA1UEBhMCR0IxETAPBgNVBBEMCFdDMVIgNEFHMQ8w -DQYDVQQIDAZMb25kb24xDzANBgNVBAcMBkxvbmRvbjEbMBkGA1UECQwSMjYgUmVk -IExpb24gU3F1YXJlMRcwFQYDVQQKDA5OZXcgVmVjdG9yIEx0ZDEXMBUGA1UEAwwO -TmV3IFZlY3RvciBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7 -X0HP3oM/SVr6PboD03ndtYTONZDcJ/GJ3EyYi6UNrcbKjuDHwPktx9hjAhNjcVkG -lmuTEPluPj9DbvjaTrers0cQsAS1vJ0RHjLfA93Flg1ys9Q6OThUMw77FtFPtiJU -z5cSYzfFAhn/4dv7BcgGptn+Mv/8CaTu+RUZJUgoSlRWcT1TREmxkzWotbblqsHO -zjDmUg20tL5/qpt6BSWsNespf5udKQFXMtqkczBcLvBLmql0vurVcQy8BibB+Q89 -QKwRzwLgaIa7O8WEssFcW8uJe9s0SNtUy8ehbuoSxpA/DbHFwsiDbNA78vp7HrqM -qY6t6OIgLtDYBFCfe/btAgMBAAGjggHaMIIB1jAfBgNVHSMEGDAWgBTfj/MgDOnK -pgTYW1g3Kj2rRtyDSTAdBgNVHQ4EFgQUH+mDOdRkF3bYDxCWEaGB4lxiCxcwDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMw -EQYJYIZIAYb4QgEBBAQDAgQQMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQYBMCsw -KQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMFUGA1Ud -HwROMEwwSqBIoEaGRGh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9ET1JTQUV4 -dGVuZGVkVmFsaWRhdGlvbkNvZGVTaWduaW5nQ0EuY3JsMIGGBggrBgEFBQcBAQR6 -MHgwUAYIKwYBBQUHMAKGRGh0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET1JT -QUV4dGVuZGVkVmFsaWRhdGlvbkNvZGVTaWduaW5nQ0EuY3J0MCQGCCsGAQUFBzAB -hhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wJgYDVR0RBB8wHaAbBggrBgEFBQcI -A6APMA0MC0dCLTEwODczNjYxMA0GCSqGSIb3DQEBCwUAA4IBAQBJ2aH4aixh0aiz -4WKlK+LMVLHpQ2POE3FZYNpAW7o1q2YDGEADXdGrygPE9NCGNBXKo0CAemCYNWfX -Ov/jdoiMfeqW3vrZ66oEy8OqbvJSwK1xmomWuYw3wYPWcPVG+YbWYD2CGdQu8jTz -fzAJCpvAuY3Wji3fQjiecAC7JCSB4fBHa0ALJOmiSqKQUUpkXs5kW7O0lPBnHzNF -2tQGltXMSIrq1QfFtcreMyKlwDOxPIh360dv5aHhaeSRDRKxq7uq5ikQF2gjKx4k -ieg2HRbAW6fVPpFr4zRS5umpeZV3i06i11VQQPS/mA/OBEXyaqzx4mr6B7U6ptrp -jMqiUv2w ------END CERTIFICATE----- diff --git a/electron_app/riot.im/README b/electron_app/riot.im/README deleted file mode 100644 index 8e463c25ec..0000000000 --- a/electron_app/riot.im/README +++ /dev/null @@ -1,6 +0,0 @@ -This directory contains the config file for the official riot.im distribution -of Riot Desktop. - -You probably do not want to build with this config unless you're building the -official riot.im distribution, or you'll find your builds will replace -themselves with the riot.im build. diff --git a/electron_app/riot.im/config.json b/electron_app/riot.im/config.json deleted file mode 100644 index 86631130bd..0000000000 --- a/electron_app/riot.im/config.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "update_base_url": "https://packages.riot.im/desktop/update/", - "default_server_name": "matrix.org", - "brand": "Riot", - "integrations_ui_url": "https://scalar.vector.im/", - "integrations_rest_url": "https://scalar.vector.im/api", - "integrations_widgets_urls": [ - "https://scalar.vector.im/_matrix/integrations/v1", - "https://scalar.vector.im/api", - "https://scalar-staging.vector.im/_matrix/integrations/v1", - "https://scalar-staging.vector.im/api", - "https://scalar-staging.riot.im/scalar/api" - ], - "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web", - "bug_report_endpoint_url": "https://riot.im/bugreports/submit", - "roomDirectory": { - "servers": [ - "matrix.org" - ] - }, - "piwik": { - "url": "https://piwik.riot.im/", - "siteId": 1, - "policyUrl": "https://matrix.org/legal/riot-im-cookie-policy" - }, - "features": { - "feature_cross_signing": "enable" - }, - "enable_presence_by_hs_url": { - "https://matrix.org": false, - "https://matrix-client.matrix.org": false - } -} diff --git a/electron_app/riot.im/env.sh b/electron_app/riot.im/env.sh deleted file mode 100644 index 0ee810521d..0000000000 --- a/electron_app/riot.im/env.sh +++ /dev/null @@ -1 +0,0 @@ -export OSSLSIGNCODE_SIGNARGS='-pkcs11module /Library/Frameworks/eToken.framework/Versions/Current/libeToken.dylib -pkcs11engine /usr/local/lib/engines/engine_pkcs11.so -certs electron_app/riot.im/New_Vector_Ltd.pem -key 0a3271cbc1ec0fd8afb37f6bbe0cd65ba08d3b4d -t http://timestamp.comodoca.com -verbose' diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js deleted file mode 100644 index 62f1fb385e..0000000000 --- a/electron_app/src/electron-main.js +++ /dev/null @@ -1,658 +0,0 @@ -/* -Copyright 2016 Aviral Dasgupta -Copyright 2016 OpenMarket Ltd -Copyright 2018, 2019 New Vector Ltd -Copyright 2017, 2019 Michael Telatynski <7t3chguy@gmail.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. -*/ - -// Squirrel on windows starts the app with various flags -// as hooks to tell us when we've been installed/uninstalled -// etc. -const checkSquirrelHooks = require('./squirrelhooks'); -if (checkSquirrelHooks()) return; - -const argv = require('minimist')(process.argv, { - alias: {help: "h"}, -}); - -const {app, ipcMain, powerSaveBlocker, BrowserWindow, Menu, autoUpdater, protocol} = require('electron'); -const AutoLaunch = require('auto-launch'); -const path = require('path'); - -const tray = require('./tray'); -const vectorMenu = require('./vectormenu'); -const webContentsHandler = require('./webcontents-handler'); -const updater = require('./updater'); -const {getProfileFromDeeplink, protocolInit, recordSSOSession} = require('./protocol'); - -const windowStateKeeper = require('electron-window-state'); -const Store = require('electron-store'); - -const fs = require('fs'); -const afs = fs.promises; - -let Seshat = null; - -try { - Seshat = require('matrix-seshat'); -} catch (e) { - if (e.code === "MODULE_NOT_FOUND") { - console.log("Seshat isn't installed, event indexing is disabled."); - } else { - console.warn("Seshat unexpected error:", e); - } -} - -if (argv["help"]) { - console.log("Options:"); - console.log(" --profile-dir {path}: Path to where to store the profile."); - console.log(" --profile {name}: Name of alternate profile to use, allows for running multiple accounts."); - console.log(" --devtools: Install and use react-devtools and react-perf."); - console.log(" --no-update: Disable automatic updating."); - console.log(" --hidden: Start the application hidden in the system tray."); - console.log(" --help: Displays this help message."); - console.log("And more such as --proxy, see:" + - "https://electronjs.org/docs/api/chrome-command-line-switches#supported-chrome-command-line-switches"); - app.exit(); -} - -// check if we are passed a profile in the SSO callback url -const userDataPathInProtocol = getProfileFromDeeplink(argv["_"]); -if (userDataPathInProtocol) { - app.setPath('userData', userDataPathInProtocol); -} else if (argv['profile-dir']) { - app.setPath('userData', argv['profile-dir']); -} else if (argv['profile']) { - app.setPath('userData', `${app.getPath('userData')}-${argv['profile']}`); -} - -let vectorConfig = {}; -try { - vectorConfig = require('../../webapp/config.json'); -} catch (e) { - // it would be nice to check the error code here and bail if the config - // is unparseable, but we get MODULE_NOT_FOUND in the case of a missing - // file or invalid json, so node is just very unhelpful. - // Continue with the defaults (ie. an empty config) -} - -try { - // Load local config and use it to override values from the one baked with the build - const localConfig = require(path.join(app.getPath('userData'), 'config.json')); - - // If the local config has a homeserver defined, don't use the homeserver from the build - // config. This is to avoid a problem where Riot thinks there are multiple homeservers - // defined, and panics as a result. - const homeserverProps = ['default_is_url', 'default_hs_url', 'default_server_name', 'default_server_config']; - if (Object.keys(localConfig).find(k => homeserverProps.includes(k))) { - // Rip out all the homeserver options from the vector config - vectorConfig = Object.keys(vectorConfig) - .filter(k => !homeserverProps.includes(k)) - .reduce((obj, key) => {obj[key] = vectorConfig[key]; return obj;}, {}); - } - - vectorConfig = Object.assign(vectorConfig, localConfig); -} catch (e) { - // Could not load local config, this is expected in most cases. -} - -const eventStorePath = path.join(app.getPath('userData'), 'EventStore'); -const store = new Store({ name: "electron-config" }); - -let eventIndex = null; - -let mainWindow = null; -global.appQuitting = false; - -// It's important to call `path.join` so we don't end up with the packaged asar in the final path. -const iconFile = `riot.${process.platform === 'win32' ? 'ico' : 'png'}`; -const iconPath = path.join(__dirname, "..", "..", "img", iconFile); -const trayConfig = { - icon_path: iconPath, - brand: vectorConfig.brand || 'Riot', -}; - -// handle uncaught errors otherwise it displays -// stack traces in popup dialogs, which is terrible (which -// it will do any time the auto update poke fails, and there's -// no other way to catch this error). -// Assuming we generally run from the console when developing, -// this is far preferable. -process.on('uncaughtException', function(error) { - console.log('Unhandled exception', error); -}); - -let focusHandlerAttached = false; -ipcMain.on('setBadgeCount', function(ev, count) { - app.setBadgeCount(count); - if (count === 0 && mainWindow) { - mainWindow.flashFrame(false); - } -}); - -ipcMain.on('loudNotification', function() { - if (process.platform === 'win32' && mainWindow && !mainWindow.isFocused() && !focusHandlerAttached) { - mainWindow.flashFrame(true); - mainWindow.once('focus', () => { - mainWindow.flashFrame(false); - focusHandlerAttached = false; - }); - focusHandlerAttached = true; - } -}); - -let powerSaveBlockerId = null; -ipcMain.on('app_onAction', function(ev, payload) { - switch (payload.action) { - case 'call_state': - if (powerSaveBlockerId !== null && powerSaveBlocker.isStarted(powerSaveBlockerId)) { - if (payload.state === 'ended') { - powerSaveBlocker.stop(powerSaveBlockerId); - powerSaveBlockerId = null; - } - } else { - if (powerSaveBlockerId === null && payload.state === 'connected') { - powerSaveBlockerId = powerSaveBlocker.start('prevent-display-sleep'); - } - } - break; - } -}); - -autoUpdater.on('update-downloaded', (ev, releaseNotes, releaseName, releaseDate, updateURL) => { - if (!mainWindow) return; - // forward to renderer - mainWindow.webContents.send('update-downloaded', { - releaseNotes, - releaseName, - releaseDate, - updateURL, - }); -}); - -ipcMain.on('ipcCall', async function(ev, payload) { - if (!mainWindow) return; - - const args = payload.args || []; - let ret; - - switch (payload.name) { - case 'getUpdateFeedUrl': - ret = autoUpdater.getFeedURL(); - break; - case 'getAutoLaunchEnabled': - ret = await launcher.isEnabled(); - break; - case 'setAutoLaunchEnabled': - if (args[0]) { - launcher.enable(); - } else { - launcher.disable(); - } - break; - case 'getMinimizeToTrayEnabled': - ret = tray.hasTray(); - break; - case 'setMinimizeToTrayEnabled': - if (args[0]) { - // Create trayIcon icon - tray.create(trayConfig); - } else { - tray.destroy(); - } - store.set('minimizeToTray', args[0]); - break; - case 'getAutoHideMenuBarEnabled': - ret = global.mainWindow.isMenuBarAutoHide(); - break; - case 'setAutoHideMenuBarEnabled': - store.set('autoHideMenuBar', args[0]); - global.mainWindow.setAutoHideMenuBar(args[0]); - global.mainWindow.setMenuBarVisibility(!args[0]); - break; - case 'getAppVersion': - ret = app.getVersion(); - break; - case 'focusWindow': - if (mainWindow.isMinimized()) { - mainWindow.restore(); - } else if (!mainWindow.isVisible()) { - mainWindow.show(); - } else { - mainWindow.focus(); - } - break; - case 'getConfig': - ret = vectorConfig; - break; - case 'navigateBack': - if (mainWindow.webContents.canGoBack()) { - mainWindow.webContents.goBack(); - } - break; - case 'navigateForward': - if (mainWindow.webContents.canGoForward()) { - mainWindow.webContents.goForward(); - } - break; - case 'startSSOFlow': - recordSSOSession(args[0]); - break; - - default: - mainWindow.webContents.send('ipcReply', { - id: payload.id, - error: "Unknown IPC Call: " + payload.name, - }); - return; - } - - mainWindow.webContents.send('ipcReply', { - id: payload.id, - reply: ret, - }); -}); - -ipcMain.on('seshat', async function(ev, payload) { - if (!mainWindow) return; - - const sendError = (id, e) => { - const error = { - message: e.message - } - - mainWindow.webContents.send('seshatReply', { - id:id, - error: error - }); - } - - const args = payload.args || []; - let ret; - - switch (payload.name) { - case 'supportsEventIndexing': - if (Seshat === null) ret = false; - else ret = true; - break; - - case 'initEventIndex': - if (eventIndex === null) { - try { - await afs.mkdir(eventStorePath, {recursive: true}); - eventIndex = new Seshat(eventStorePath, {passphrase: "DEFAULT_PASSPHRASE"}); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'closeEventIndex': - eventIndex = null; - break; - - case 'deleteEventIndex': - const deleteFolderRecursive = async(p) => { - for (let entry of await afs.readdir(p)) { - const curPath = path.join(p, entry); - await afs.unlink(curPath); - } - } - - try { - await deleteFolderRecursive(eventStorePath); - } catch (e) { - } - - break; - - case 'isEventIndexEmpty': - if (eventIndex === null) ret = true; - else ret = await eventIndex.isEmpty(); - break; - - case 'addEventToIndex': - try { - eventIndex.addEvent(args[0], args[1]); - } catch (e) { - sendError(payload.id, e); - return; - } - break; - - case 'commitLiveEvents': - try { - ret = await eventIndex.commit(); - } catch (e) { - sendError(payload.id, e); - return; - } - break; - - case 'searchEventIndex': - try { - ret = await eventIndex.search(args[0]); - } catch (e) { - sendError(payload.id, e); - return; - } - break; - - case 'addHistoricEvents': - if (eventIndex === null) ret = false; - else { - try { - ret = await eventIndex.addHistoricEvents( - args[0], args[1], args[2]); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'getStats': - if (eventIndex === null) ret = 0; - else { - try { - ret = await eventIndex.getStats(); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'removeCrawlerCheckpoint': - if (eventIndex === null) ret = false; - else { - try { - ret = await eventIndex.removeCrawlerCheckpoint(args[0]); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'addCrawlerCheckpoint': - if (eventIndex === null) ret = false; - else { - try { - ret = await eventIndex.addCrawlerCheckpoint(args[0]); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'loadFileEvents': - if (eventIndex === null) ret = []; - else { - try { - ret = await eventIndex.loadFileEvents(args[0]); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'loadCheckpoints': - if (eventIndex === null) ret = []; - else { - try { - ret = await eventIndex.loadCheckpoints(); - } catch (e) { - ret = []; - } - } - break; - - default: - mainWindow.webContents.send('seshatReply', { - id: payload.id, - error: "Unknown IPC Call: " + payload.name, - }); - return; - } - - mainWindow.webContents.send('seshatReply', { - id: payload.id, - reply: ret, - }); -}); - -app.commandLine.appendSwitch('--enable-usermedia-screen-capturing'); - -const gotLock = app.requestSingleInstanceLock(); -if (!gotLock) { - console.log('Other instance detected: exiting'); - app.exit(); -} - -// do this after we know we are the primary instance of the app -protocolInit(); - -const launcher = new AutoLaunch({ - name: vectorConfig.brand || 'Riot', - isHidden: true, - mac: { - useLaunchAgent: true, - }, -}); - -// Register the scheme the app is served from as 'standard' -// which allows things like relative URLs and IndexedDB to -// work. -// Also mark it as secure (ie. accessing resources from this -// protocol and HTTPS won't trigger mixed content warnings). -protocol.registerSchemesAsPrivileged([{ - scheme: 'vector', - privileges: { - standard: true, - secure: true, - supportFetchAPI: true, - }, -}]); - -app.on('ready', () => { - if (argv['devtools']) { - try { - const { default: installExt, REACT_DEVELOPER_TOOLS, REACT_PERF } = require('electron-devtools-installer'); - installExt(REACT_DEVELOPER_TOOLS) - .then((name) => console.log(`Added Extension: ${name}`)) - .catch((err) => console.log('An error occurred: ', err)); - installExt(REACT_PERF) - .then((name) => console.log(`Added Extension: ${name}`)) - .catch((err) => console.log('An error occurred: ', err)); - } catch (e) { - console.log(e); - } - } - - protocol.registerFileProtocol('vector', (request, callback) => { - if (request.method !== 'GET') { - callback({error: -322}); // METHOD_NOT_SUPPORTED from chromium/src/net/base/net_error_list.h - return null; - } - - const parsedUrl = new URL(request.url); - if (parsedUrl.protocol !== 'vector:') { - callback({error: -302}); // UNKNOWN_URL_SCHEME - return; - } - if (parsedUrl.host !== 'vector') { - callback({error: -105}); // NAME_NOT_RESOLVED - return; - } - - const target = parsedUrl.pathname.split('/'); - - // path starts with a '/' - if (target[0] !== '') { - callback({error: -6}); // FILE_NOT_FOUND - return; - } - - if (target[target.length - 1] == '') { - target[target.length - 1] = 'index.html'; - } - - let baseDir; - // first part of the path determines where we serve from - if (target[1] === 'webapp') { - baseDir = __dirname + "/../../webapp"; - } else { - callback({error: -6}); // FILE_NOT_FOUND - return; - } - - // Normalise the base dir and the target path separately, then make sure - // the target path isn't trying to back out beyond its root - baseDir = path.normalize(baseDir); - - const relTarget = path.normalize(path.join(...target.slice(2))); - if (relTarget.startsWith('..')) { - callback({error: -6}); // FILE_NOT_FOUND - return; - } - const absTarget = path.join(baseDir, relTarget); - - callback({ - path: absTarget, - }); - }, (error) => { - if (error) console.error('Failed to register protocol'); - }); - - if (argv['no-update']) { - console.log('Auto update disabled via command line flag "--no-update"'); - } else if (vectorConfig['update_base_url']) { - console.log(`Starting auto update with base URL: ${vectorConfig['update_base_url']}`); - updater.start(vectorConfig['update_base_url']); - } else { - console.log('No update_base_url is defined: auto update is disabled'); - } - - // Load the previous window state with fallback to defaults - const mainWindowState = windowStateKeeper({ - defaultWidth: 1024, - defaultHeight: 768, - }); - - const preloadScript = path.normalize(`${__dirname}/preload.js`); - mainWindow = global.mainWindow = new BrowserWindow({ - icon: iconPath, - show: false, - autoHideMenuBar: store.get('autoHideMenuBar', true), - - x: mainWindowState.x, - y: mainWindowState.y, - width: mainWindowState.width, - height: mainWindowState.height, - webPreferences: { - preload: preloadScript, - nodeIntegration: false, - sandbox: true, - enableRemoteModule: false, - // We don't use this: it's useful for the preload script to - // share a context with the main page so we can give select - // objects to the main page. The sandbox option isolates the - // main page from the background script. - contextIsolation: false, - webgl: false, - }, - }); - mainWindow.loadURL('vector://vector/webapp/'); - Menu.setApplicationMenu(vectorMenu); - - // Create trayIcon icon - if (store.get('minimizeToTray', true)) tray.create(trayConfig); - - mainWindow.once('ready-to-show', () => { - mainWindowState.manage(mainWindow); - - if (!argv['hidden']) { - mainWindow.show(); - } else { - // hide here explicitly because window manage above sometimes shows it - mainWindow.hide(); - } - }); - - mainWindow.on('closed', () => { - mainWindow = global.mainWindow = null; - }); - mainWindow.on('close', (e) => { - // If we are not quitting and have a tray icon then minimize to tray - if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) { - // On Mac, closing the window just hides it - // (this is generally how single-window Mac apps - // behave, eg. Mail.app) - e.preventDefault(); - mainWindow.hide(); - return false; - } - }); - - if (process.platform === 'win32') { - // Handle forward/backward mouse buttons in Windows - mainWindow.on('app-command', (e, cmd) => { - if (cmd === 'browser-backward' && mainWindow.webContents.canGoBack()) { - mainWindow.webContents.goBack(); - } else if (cmd === 'browser-forward' && mainWindow.webContents.canGoForward()) { - mainWindow.webContents.goForward(); - } - }); - } - - webContentsHandler(mainWindow.webContents); -}); - -app.on('window-all-closed', () => { - app.quit(); -}); - -app.on('activate', () => { - mainWindow.show(); -}); - -app.on('before-quit', () => { - global.appQuitting = true; - if (mainWindow) { - mainWindow.webContents.send('before-quit'); - } -}); - -app.on('second-instance', (ev, commandLine, workingDirectory) => { - // If other instance launched with --hidden then skip showing window - if (commandLine.includes('--hidden')) return; - - // Someone tried to run a second instance, we should focus our window. - if (mainWindow) { - if (!mainWindow.isVisible()) mainWindow.show(); - if (mainWindow.isMinimized()) mainWindow.restore(); - mainWindow.focus(); - } -}); - -// Set the App User Model ID to match what the squirrel -// installer uses for the shortcut icon. -// This makes notifications work on windows 8.1 (and is -// a noop on other platforms). -app.setAppUserModelId('com.squirrel.riot-web.Riot'); diff --git a/electron_app/src/preload.js b/electron_app/src/preload.js deleted file mode 100644 index 0862ec67a2..0000000000 --- a/electron_app/src/preload.js +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 2018, 2019 New Vector Ltd - -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. -*/ - -const { ipcRenderer } = require('electron'); - -// expose ipcRenderer to the renderer process -window.ipcRenderer = ipcRenderer; diff --git a/electron_app/src/protocol.js b/electron_app/src/protocol.js deleted file mode 100644 index 48247fef98..0000000000 --- a/electron_app/src/protocol.js +++ /dev/null @@ -1,104 +0,0 @@ -/* -Copyright 2020 The Matrix.org Foundation C.I.C. - -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. -*/ - -const {app} = require("electron"); -const path = require("path"); -const fs = require("fs"); - -const PROTOCOL = "riot://"; -const SEARCH_PARAM = "riot-desktop-ssoid"; -const STORE_FILE_NAME = "sso-sessions.json"; - -// we getPath userData before electron-main changes it, so this is the default value -const storePath = path.join(app.getPath("userData"), STORE_FILE_NAME); - -const processUrl = (url) => { - if (!global.mainWindow) return; - console.log("Handling link: ", url); - global.mainWindow.loadURL(url.replace(PROTOCOL, "vector://")); -}; - -const readStore = () => { - try { - const s = fs.readFileSync(storePath, { encoding: "utf8" }); - const o = JSON.parse(s); - return typeof o === "object" ? o : {}; - } catch (e) { - return {}; - } -}; - -const writeStore = (data) => { - fs.writeFileSync(storePath, JSON.stringify(data)); -}; - -module.exports = { - recordSSOSession: (sessionID) => { - const userDataPath = app.getPath('userData'); - const store = readStore(); - for (const key in store) { - // ensure each instance only has one (the latest) session ID to prevent the file growing unbounded - if (store[key] === userDataPath) { - delete store[key]; - break; - } - } - store[sessionID] = userDataPath; - writeStore(store); - }, - getProfileFromDeeplink: (args) => { - // check if we are passed a profile in the SSO callback url - const deeplinkUrl = args.find(arg => arg.startsWith('riot://')); - if (deeplinkUrl && deeplinkUrl.includes(SEARCH_PARAM)) { - const parsedUrl = new URL(deeplinkUrl); - if (parsedUrl.protocol === 'riot:') { - const ssoID = parsedUrl.searchParams.get(SEARCH_PARAM); - const store = readStore(); - console.log("Forwarding to profile: ", store[ssoID]); - return store[ssoID]; - } - } - }, - protocolInit: () => { - // get all args except `hidden` as it'd mean the app would not get focused - // XXX: passing args to protocol handlers only works on Windows, so unpackaged deep-linking - // --profile/--profile-dir are passed via the SEARCH_PARAM var in the callback url - const args = process.argv.slice(1).filter(arg => arg !== "--hidden" && arg !== "-hidden"); - if (app.isPackaged) { - app.setAsDefaultProtocolClient('riot', process.execPath, args); - } else if (process.platform === 'win32') { // on Mac/Linux this would just cause the electron binary to open - // special handler for running without being packaged, e.g `electron .` by passing our app path to electron - app.setAsDefaultProtocolClient('riot', process.execPath, [app.getAppPath(), ...args]); - } - - if (process.platform === 'darwin') { - // Protocol handler for macos - app.on('open-url', function(ev, url) { - ev.preventDefault(); - processUrl(url); - }); - } else { - // Protocol handler for win32/Linux - app.on('second-instance', (ev, commandLine) => { - const url = commandLine[commandLine.length - 1]; - if (!url.startsWith(PROTOCOL)) return; - processUrl(url); - }); - } - }, -}; - - diff --git a/electron_app/src/squirrelhooks.js b/electron_app/src/squirrelhooks.js deleted file mode 100644 index 728c9cfb2c..0000000000 --- a/electron_app/src/squirrelhooks.js +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2017 OpenMarket Ltd - -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. -*/ - -const path = require('path'); -const spawn = require('child_process').spawn; -const {app} = require('electron'); - -function runUpdateExe(args, done) { - // Invokes Squirrel's Update.exe which will do things for us like create shortcuts - // Note that there's an Update.exe in the app-x.x.x directory and one in the parent - // directory: we need to run the one in the parent directory, because it discovers - // information about the app by inspecting the directory it's run from. - const updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe'); - console.log(`Spawning '${updateExe}' with args '${args}'`); - spawn(updateExe, args, { - detached: true, - }).on('close', done); -} - -function checkSquirrelHooks() { - if (process.platform !== 'win32') return false; - - const cmd = process.argv[1]; - const target = path.basename(process.execPath); - if (cmd === '--squirrel-install' || cmd === '--squirrel-updated') { - runUpdateExe(['--createShortcut=' + target + ''], app.quit); - return true; - } else if (cmd === '--squirrel-uninstall') { - runUpdateExe(['--removeShortcut=' + target + ''], app.quit); - return true; - } else if (cmd === '--squirrel-obsolete') { - app.quit(); - return true; - } - return false; -} - -module.exports = checkSquirrelHooks; diff --git a/electron_app/src/tray.js b/electron_app/src/tray.js deleted file mode 100644 index 04aaa1f179..0000000000 --- a/electron_app/src/tray.js +++ /dev/null @@ -1,106 +0,0 @@ -/* -Copyright 2017 Karl Glatz -Copyright 2017 OpenMarket Ltd - -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. -*/ - -const {app, Tray, Menu, nativeImage} = require('electron'); -const pngToIco = require('png-to-ico'); -const path = require('path'); -const fs = require('fs'); - -let trayIcon = null; - -exports.hasTray = function hasTray() { - return (trayIcon !== null); -}; - -exports.destroy = function() { - if (trayIcon) { - trayIcon.destroy(); - trayIcon = null; - } -}; - -exports.create = function(config) { - // no trays on darwin - if (process.platform === 'darwin' || trayIcon) return; - - const toggleWin = function() { - if (global.mainWindow.isVisible() && !global.mainWindow.isMinimized()) { - global.mainWindow.hide(); - } else { - if (global.mainWindow.isMinimized()) global.mainWindow.restore(); - if (!global.mainWindow.isVisible()) global.mainWindow.show(); - global.mainWindow.focus(); - } - }; - - const contextMenu = Menu.buildFromTemplate([ - { - label: `Show/Hide ${config.brand}`, - click: toggleWin, - }, - { type: 'separator' }, - { - label: 'Quit', - click: function() { - app.quit(); - }, - }, - ]); - - const defaultIcon = nativeImage.createFromPath(config.icon_path); - - trayIcon = new Tray(defaultIcon); - trayIcon.setToolTip(config.brand); - trayIcon.setContextMenu(contextMenu); - trayIcon.on('click', toggleWin); - - let lastFavicon = null; - global.mainWindow.webContents.on('page-favicon-updated', async function(ev, favicons) { - if (!favicons || favicons.length <= 0 || !favicons[0].startsWith('data:')) { - if (lastFavicon !== null) { - global.mainWindow.setIcon(defaultIcon); - trayIcon.setImage(defaultIcon); - lastFavicon = null; - } - return; - } - - // No need to change, shortcut - if (favicons[0] === lastFavicon) return; - lastFavicon = favicons[0]; - - let newFavicon = nativeImage.createFromDataURL(favicons[0]); - - // Windows likes ico's too much. - if (process.platform === 'win32') { - try { - const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico'); - fs.writeFileSync(icoPath, await pngToIco(newFavicon.toPNG())); - newFavicon = nativeImage.createFromPath(icoPath); - } catch (e) { - console.error("Failed to make win32 ico", e); - } - } - - trayIcon.setImage(newFavicon); - global.mainWindow.setIcon(newFavicon); - }); - - global.mainWindow.webContents.on('page-title-updated', function(ev, title) { - trayIcon.setToolTip(title); - }); -}; diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js deleted file mode 100644 index 49fa4e0419..0000000000 --- a/electron_app/src/updater.js +++ /dev/null @@ -1,84 +0,0 @@ -const { app, autoUpdater, ipcMain } = require('electron'); - -const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000; -const INITIAL_UPDATE_DELAY_MS = 30 * 1000; - -function installUpdate() { - // for some reason, quitAndInstall does not fire the - // before-quit event, so we need to set the flag here. - global.appQuitting = true; - autoUpdater.quitAndInstall(); -} - -function pollForUpdates() { - try { - autoUpdater.checkForUpdates(); - } catch (e) { - console.log('Couldn\'t check for update', e); - } -} - -module.exports = {}; -module.exports.start = function startAutoUpdate(updateBaseUrl) { - if (updateBaseUrl.slice(-1) !== '/') { - updateBaseUrl = updateBaseUrl + '/'; - } - try { - let url; - // For reasons best known to Squirrel, the way it checks for updates - // is completely different between macOS and windows. On macOS, it - // hits a URL that either gives it a 200 with some json or - // 204 No Content. On windows it takes a base path and looks for - // files under that path. - if (process.platform === 'darwin') { - // include the current version in the URL we hit. Electron doesn't add - // it anywhere (apart from the User-Agent) so it's up to us. We could - // (and previously did) just use the User-Agent, but this doesn't - // rely on NSURLConnection setting the User-Agent to what we expect, - // and also acts as a convenient cache-buster to ensure that when the - // app updates it always gets a fresh value to avoid update-looping. - url = `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`; - - } else if (process.platform === 'win32') { - url = `${updateBaseUrl}win32/${process.arch}/`; - } else { - // Squirrel / electron only supports auto-update on these two platforms. - // I'm not even going to try to guess which feed style they'd use if they - // implemented it on Linux, or if it would be different again. - console.log('Auto update not supported on this platform'); - } - - if (url) { - autoUpdater.setFeedURL(url); - // We check for updates ourselves rather than using 'updater' because we need to - // do it in the main process (and we don't really need to check every 10 minutes: - // every hour should be just fine for a desktop app) - // However, we still let the main window listen for the update events. - // We also wait a short time before checking for updates the first time because - // of squirrel on windows and it taking a small amount of time to release a - // lock file. - setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS); - setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS); - } - } catch (err) { - // will fail if running in debug mode - console.log('Couldn\'t enable update checking', err); - } -} - -ipcMain.on('install_update', installUpdate); -ipcMain.on('check_updates', pollForUpdates); - -function ipcChannelSendUpdateStatus(status) { - if (global.mainWindow) { - global.mainWindow.webContents.send('check_updates', status); - } -} - -autoUpdater.on('update-available', function() { - ipcChannelSendUpdateStatus(true); -}).on('update-not-available', function() { - ipcChannelSendUpdateStatus(false); -}).on('error', function(error) { - ipcChannelSendUpdateStatus(error.message); -}); diff --git a/electron_app/src/vectormenu.js b/electron_app/src/vectormenu.js deleted file mode 100644 index b6e00d509d..0000000000 --- a/electron_app/src/vectormenu.js +++ /dev/null @@ -1,144 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -const {app, shell, Menu} = require('electron'); - -// Menu template from http://electron.atom.io/docs/api/menu/, edited -const template = [ - { - label: '&Edit', - submenu: [ - { role: 'undo' }, - { role: 'redo' }, - { type: 'separator' }, - { role: 'cut' }, - { role: 'copy' }, - { role: 'paste' }, - { role: 'pasteandmatchstyle' }, - { role: 'delete' }, - { role: 'selectall' }, - ], - }, - { - label: '&View', - submenu: [ - { type: 'separator' }, - { role: 'resetzoom' }, - { role: 'zoomin', accelerator: 'CommandOrControl+=' }, - { role: 'zoomout' }, - { type: 'separator' }, - { - label: 'Preferences', - accelerator: 'Command+,', // Mac-only accelerator - click() { global.mainWindow.webContents.send('preferences'); }, - }, - { role: 'togglefullscreen' }, - { role: 'toggledevtools' }, - ], - }, - { - label: '&Window', - role: 'window', - submenu: [ - { role: 'minimize' }, - { role: 'close' }, - ], - }, - { - label: '&Help', - role: 'help', - submenu: [ - { - label: 'Riot Help', - click() { shell.openExternal('https://about.riot.im/help'); }, - }, - ], - }, -]; - -// macOS has specific menu conventions... -if (process.platform === 'darwin') { - // first macOS menu is the name of the app - const name = app.getName(); - template.unshift({ - label: name, - submenu: [ - { role: 'about' }, - { type: 'separator' }, - { - role: 'services', - submenu: [], - }, - { type: 'separator' }, - { role: 'hide' }, - { role: 'hideothers' }, - { role: 'unhide' }, - { type: 'separator' }, - { role: 'quit' }, - ], - }); - // Edit menu. - // This has a 'speech' section on macOS - template[1].submenu.push( - { type: 'separator' }, - { - label: 'Speech', - submenu: [ - { role: 'startspeaking' }, - { role: 'stopspeaking' }, - ], - }); - - // Window menu. - // This also has specific functionality on macOS - template[3].submenu = [ - { - label: 'Close', - accelerator: 'CmdOrCtrl+W', - role: 'close', - }, - { - label: 'Minimize', - accelerator: 'CmdOrCtrl+M', - role: 'minimize', - }, - { - label: 'Zoom', - role: 'zoom', - }, - { - type: 'separator', - }, - { - label: 'Bring All to Front', - role: 'front', - }, - ]; -} else { - template.unshift({ - label: '&File', - submenu: [ - // For some reason, 'about' does not seem to work on windows. - /*{ - role: 'about' - },*/ - { role: 'quit' }, - ], - }); -} - -module.exports = Menu.buildFromTemplate(template); - diff --git a/electron_app/src/webcontents-handler.js b/electron_app/src/webcontents-handler.js deleted file mode 100644 index 782d12e56b..0000000000 --- a/electron_app/src/webcontents-handler.js +++ /dev/null @@ -1,191 +0,0 @@ -const {clipboard, nativeImage, Menu, MenuItem, shell, dialog} = require('electron'); -const url = require('url'); -const fs = require('fs'); -const request = require('request'); - -const MAILTO_PREFIX = "mailto:"; - -const PERMITTED_URL_SCHEMES = [ - 'http:', - 'https:', - MAILTO_PREFIX, -]; - -function safeOpenURL(target) { - // openExternal passes the target to open/start/xdg-open, - // so put fairly stringent limits on what can be opened - // (for instance, open /bin/sh does indeed open a terminal - // with a shell, albeit with no arguments) - const parsedUrl = url.parse(target); - if (PERMITTED_URL_SCHEMES.indexOf(parsedUrl.protocol) > -1) { - // explicitly use the URL re-assembled by the url library, - // so we know the url parser has understood all the parts - // of the input string - const newTarget = url.format(parsedUrl); - shell.openExternal(newTarget); - } -} - -function onWindowOrNavigate(ev, target) { - // always prevent the default: if something goes wrong, - // we don't want to end up opening it in the electron - // app, as we could end up opening any sort of random - // url in a window that has node scripting access. - ev.preventDefault(); - safeOpenURL(target); -} - -function onLinkContextMenu(ev, params) { - let url = params.linkURL || params.srcURL; - - if (url.startsWith('vector://vector/webapp')) { - url = "https://riot.im/app/" + url.substring(23); - } - - const popupMenu = new Menu(); - // No point trying to open blob: URLs in an external browser: it ain't gonna work. - if (!url.startsWith('blob:')) { - popupMenu.append(new MenuItem({ - label: url, - click() { - safeOpenURL(url); - }, - })); - } - - let addSaveAs = false; - if (params.mediaType && params.mediaType === 'image' && !url.startsWith('file://')) { - popupMenu.append(new MenuItem({ - label: '&Copy image', - click() { - if (url.startsWith('data:')) { - clipboard.writeImage(nativeImage.createFromDataURL(url)); - } else { - ev.sender.copyImageAt(params.x, params.y); - } - }, - })); - - // We want the link to be ordered below the copy stuff, but don't want to duplicate - // the `if` statement, so use a flag. - addSaveAs = true; - } - - // No point offering to copy a blob: URL either - if (!url.startsWith('blob:')) { - // Special-case e-mail URLs to strip the `mailto:` like modern browsers do - if (url.startsWith(MAILTO_PREFIX)) { - popupMenu.append(new MenuItem({ - label: 'Copy email &address', - click() { - clipboard.writeText(url.substr(MAILTO_PREFIX.length)); - }, - })); - } else { - popupMenu.append(new MenuItem({ - label: 'Copy link &address', - click() { - clipboard.writeText(url); - }, - })); - } - } - - if (addSaveAs) { - popupMenu.append(new MenuItem({ - label: 'Sa&ve image as...', - click() { - const targetFileName = params.titleText || "image.png"; - const filePath = dialog.showSaveDialog({ - defaultPath: targetFileName, - }); - - if (!filePath) return; // user cancelled dialog - - try { - if (url.startsWith("data:")) { - fs.writeFileSync(filePath, nativeImage.createFromDataURL(url)); - } else { - request.get(url).pipe(fs.createWriteStream(filePath)); - } - } catch (err) { - console.error(err); - dialog.showMessageBox({ - type: "error", - title: "Failed to save image", - message: "The image failed to save", - }); - } - }, - })); - } - - // popup() requires an options object even for no options - popupMenu.popup({}); - ev.preventDefault(); -} - -function _CutCopyPasteSelectContextMenus(params) { - return [{ - role: 'cut', - label: 'Cu&t', - enabled: params.editFlags.canCut, - }, { - role: 'copy', - label: '&Copy', - enabled: params.editFlags.canCopy, - }, { - role: 'paste', - label: '&Paste', - enabled: params.editFlags.canPaste, - }, { - role: 'pasteandmatchstyle', - enabled: params.editFlags.canPaste, - }, { - role: 'selectall', - label: "Select &All", - enabled: params.editFlags.canSelectAll, - }]; -} - -function onSelectedContextMenu(ev, params) { - const items = _CutCopyPasteSelectContextMenus(params); - const popupMenu = Menu.buildFromTemplate(items); - - // popup() requires an options object even for no options - popupMenu.popup({}); - ev.preventDefault(); -} - -function onEditableContextMenu(ev, params) { - const items = [ - { role: 'undo' }, - { role: 'redo', enabled: params.editFlags.canRedo }, - { type: 'separator' }, - ].concat(_CutCopyPasteSelectContextMenus(params)); - - const popupMenu = Menu.buildFromTemplate(items); - - // popup() requires an options object even for no options - popupMenu.popup({}); - ev.preventDefault(); -} - - -module.exports = (webContents) => { - webContents.on('new-window', onWindowOrNavigate); - webContents.on('will-navigate', (ev, target) => { - if (target.startsWith("vector://")) return; - return onWindowOrNavigate(ev, target); - }); - - webContents.on('context-menu', function(ev, params) { - if (params.linkURL || params.srcURL) { - onLinkContextMenu(ev, params); - } else if (params.selectionText) { - onSelectedContextMenu(ev, params); - } else if (params.isEditable) { - onEditableContextMenu(ev, params); - } - }); -}; diff --git a/electron_app/yarn.lock b/electron_app/yarn.lock deleted file mode 100644 index eb4b54caa1..0000000000 --- a/electron_app/yarn.lock +++ /dev/null @@ -1,837 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/node@^9.4.0": - version "9.6.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.45.tgz#a9e5cfd026a3abaaf17e3c0318a470da9f2f178e" - integrity sha512-9scD7xI1kpIoMs3gVFMOWsWDyRIQ1AOZwe56i1CQPE6N/P4POYkn9UtW5F66t8C2AIoPtVfOFycQ2r11t3pcyg== - -ajv@^6.5.5: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -applescript@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz#bb87af568cad034a4e48c4bdaf6067a3a2701317" - integrity sha1-u4evVoytA0pOSMS9r2Bno6JwExc= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -auto-launch@^5.0.1: - version "5.0.5" - resolved "https://registry.yarnpkg.com/auto-launch/-/auto-launch-5.0.5.tgz#d14bd002b1ef642f85e991a6195ff5300c8ad3c0" - integrity sha512-ppdF4mihhYzMYLuCcx9H/c5TUOCev8uM7en53zWVQhyYAJrurd2bFZx3qQVeJKF2jrc7rsPRNN5cD+i23l6PdA== - dependencies: - applescript "^1.0.0" - mkdirp "^0.5.1" - path-is-absolute "^1.0.0" - untildify "^3.0.2" - winreg "1.2.4" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bignumber.js@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8" - integrity sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg= - -bmp-js@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.3.tgz#64113e9c7cf1202b376ed607bf30626ebe57b18a" - integrity sha1-ZBE+nHzxICs3btYHvzBibr5XsYo= - -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== - dependencies: - delayed-stream "~1.0.0" - -conf@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/conf/-/conf-2.2.0.tgz#ee282efafc1450b61e205372041ad7d866802d9a" - integrity sha512-93Kz74FOMo6aWRVpAZsonOdl2I57jKtHrNmxhumehFQw4X8Sk37SohNY11PG7Q8Okta+UnrVaI006WLeyp8/XA== - dependencies: - dot-prop "^4.1.0" - env-paths "^1.0.0" - make-dir "^1.0.0" - pkg-up "^2.0.0" - write-file-atomic "^2.3.0" - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= - -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -electron-store@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-2.0.0.tgz#1035cca2a95409d1f54c7466606345852450d64a" - integrity sha512-1WCFYHsYvZBqDsoaS0Relnz0rd81ZkBAI0Fgx7Nq2UWU77rSNs1qxm4S6uH7TCZ0bV3LQpJFk7id/is/ZgoOPA== - dependencies: - conf "^2.0.0" - -electron-window-state@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-4.1.1.tgz#6b34fdc31b38514dfec8b7c8f7b5d4addb67632d" - integrity sha1-azT9wxs4UU3+yLfI97XUrdtnYy0= - dependencies: - deep-equal "^1.0.1" - jsonfile "^2.2.3" - mkdirp "^0.5.1" - -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= - -es-abstract@^1.5.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^3.0.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= - -exif-parser@^0.1.9: - version "0.1.12" - resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" - integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -file-type@^3.1.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -function-bind@^1.0.2, 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== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= - dependencies: - min-document "^2.19.0" - process "~0.5.1" - -graceful-fs@^4.1.11, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has@^1.0.1, 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" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -ip-regex@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" - integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0= - -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -jimp@^0.2.28: - version "0.2.28" - resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.2.28.tgz#dd529a937190f42957a7937d1acc3a7762996ea2" - integrity sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI= - dependencies: - bignumber.js "^2.1.0" - bmp-js "0.0.3" - es6-promise "^3.0.2" - exif-parser "^0.1.9" - file-type "^3.1.0" - jpeg-js "^0.2.0" - load-bmfont "^1.2.3" - mime "^1.3.4" - mkdirp "0.5.1" - pixelmatch "^4.0.0" - pngjs "^3.0.0" - read-chunk "^1.0.1" - request "^2.65.0" - stream-to-buffer "^0.1.0" - tinycolor2 "^1.1.2" - url-regex "^3.0.0" - -jpeg-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.2.0.tgz#53e448ec9d263e683266467e9442d2c5a2ef5482" - integrity sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII= - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -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== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsonfile@^2.2.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -load-bmfont@^1.2.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b" - integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g== - dependencies: - buffer-equal "0.0.1" - mime "^1.3.4" - parse-bmfont-ascii "^1.0.3" - parse-bmfont-binary "^1.0.5" - parse-bmfont-xml "^1.1.4" - phin "^2.9.1" - xhr "^2.0.1" - xtend "^4.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -mime-db@~1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" - integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.22" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" - integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== - dependencies: - mime-db "~1.38.0" - -mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz#3db5c0765545ab8637be71f333a104a965a9ca3f" - integrity sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw== - -mkdirp@0.5.1, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-keys@^1.0.12: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" - integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -parse-bmfont-ascii@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" - integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= - -parse-bmfont-binary@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" - integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= - -parse-bmfont-xml@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" - integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== - dependencies: - xml-parse-from-string "^1.0.0" - xml2js "^0.4.5" - -parse-headers@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.2.tgz#9545e8a4c1ae5eaea7d24992bca890281ed26e34" - integrity sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg== - dependencies: - for-each "^0.3.3" - string.prototype.trim "^1.1.2" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -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= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -phin@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" - integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pixelmatch@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" - integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= - dependencies: - pngjs "^3.0.0" - -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - -png-to-ico@^1.0.2: - version "1.0.7" - resolved "https://registry.yarnpkg.com/png-to-ico/-/png-to-ico-1.0.7.tgz#9346b5f4d6fd7e94cb08fd49eeb585f501c3e5f2" - integrity sha512-heHiZjPFhVgLiuSG4C4wwKN9YPGLpPJvOfXRyI+cEJf0vPutjJ4XDaeI2f/hzTFs+2juihDw3pP8R5JtTuQTGg== - dependencies: - "@types/node" "^9.4.0" - jimp "^0.2.28" - minimist "^1.2.0" - -pngjs@^3.0.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= - -psl@^1.1.24: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -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== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -read-chunk@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194" - integrity sha1-X2jKswfmY/GZk1J9m1icrORmEZQ= - -request@^2.65.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stream-to-buffer@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz#26799d903ab2025c9bd550ac47171b00f8dd80a9" - integrity sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk= - dependencies: - stream-to "~0.2.0" - -stream-to@~0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d" - integrity sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0= - -string.prototype.trim@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" - integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.0" - function-bind "^1.0.2" - -tinycolor2@^1.1.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" - integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -untildify@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" - integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -url-regex@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724" - integrity sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ= - dependencies: - ip-regex "^1.0.1" - -uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -winreg@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b" - integrity sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs= - -write-file-atomic@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" - integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -xhr@^2.0.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" - integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== - dependencies: - global "~4.3.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xml-parse-from-string@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" - integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= - -xml2js@^0.4.5: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= diff --git a/package.json b/package.json index 57d8513f34..11e7a31d9a 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,7 @@ { "name": "riot-web", "productName": "Riot", - "main": "electron_app/src/electron-main.js", - "version": "1.5.15", + "version": "1.6.0", "description": "A feature-rich client for Matrix.org", "author": "New Vector Ltd.", "repository": { @@ -35,7 +34,7 @@ "reskindex": "reskindex -h src/header", "reskindex:watch": "reskindex -h src/header -w", "reskindex:watch-react": "node scripts/yarn-sub.js matrix-react-sdk reskindex:watch", - "clean": "rimraf lib webapp electron_app/dist", + "clean": "rimraf lib webapp", "build": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle", "build-stats": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle-stats", "build:jitsi": "node scripts/build-jitsi.js", @@ -45,17 +44,11 @@ "build:compile": "babel -d lib --verbose --extensions \".ts,.js,.tsx\" src", "build:bundle": "cross-env NODE_ENV=production webpack -p --progress --bail --mode production", "build:bundle-stats": "cross-env NODE_ENV=production webpack -p --progress --bail --mode production --json > webpack-stats.json", - "build:electron": "yarn build && yarn install:electron && electron-builder -wml --ia32 --x64", - "build:electron:linux": "yarn build && electron-builder -l --x64", - "build:electron:macos": "yarn build && electron-builder -m --x64", - "build:electron:windows": "yarn build && electron-builder -w --ia32 --x64", "build:types": "tsc --emitDeclarationOnly --jsx react", - "install:electron": "electron-builder install-app-deps", "dist": "scripts/package.sh", "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,riot-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"", "start:res": "yarn build:jitsi && node scripts/copy-res.js -w", "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development", - "electron": "yarn build && yarn install:electron && electron .", "lint": "yarn lint:types && yarn lint:ts && yarn lint:js && yarn lint:style", "lint:js": "eslint src", "lint:ts": "echo 'We don't actually have a typescript linter at this layer because tslint is being removed from our stack. Presumably your TS is fine.'", @@ -109,10 +102,6 @@ "cpx": "^1.3.2", "cross-env": "^6.0.3", "css-loader": "^3.3.2", - "electron-builder": "^22.3.2", - "electron-builder-squirrel-windows": "^22.3.2", - "electron-devtools-installer": "^2.2.4", - "electron-notarize": "^0.2.0", "eslint": "^5.8.0", "eslint-config-google": "^0.7.1", "eslint-plugin-babel": "^4.1.2", @@ -156,57 +145,7 @@ "webpack-cli": "^3.3.10", "webpack-dev-server": "^3.9.0" }, - "build": { - "appId": "im.riot.app", - "electronVersion": "7.1.14", - "files": [ - "node_modules/**", - "src/**" - ], - "extraResources": [ - { - "from": "electron_app/img", - "to": "img" - }, - "webapp/**/*" - ], - "linux": { - "target": "deb", - "category": "Network;InstantMessaging;Chat", - "maintainer": "support@riot.im", - "desktop": { - "StartupWMClass": "riot" - } - }, - "mac": { - "category": "public.app-category.social-networking", - "darkModeSupport": true - }, - "win": { - "target": { - "target": "squirrel" - }, - "sign": "scripts/electron_winSign" - }, - "directories": { - "buildResources": "electron_app/build", - "output": "electron_app/dist", - "app": "electron_app" - }, - "afterSign": "scripts/electron_afterSign.js", - "protocols": [ - { - "name": "riot", - "schemes": [ - "riot" - ] - } - ] - }, "jest": { - "modulePathIgnorePatterns": [ - "/electron_app" - ], "testEnvironment": "jest-environment-jsdom-fourteen", "testMatch": [ "/test/**/*-test.js" @@ -215,6 +154,7 @@ "/node_modules/matrix-react-sdk/test/setupTests.js" ], "moduleNameMapper": { + "\\.(css|scss)$": "/__mocks__/cssMock.js", "\\.(gif|png|svg|ttf|woff2)$": "/node_modules/matrix-react-sdk/__mocks__/imageMock.js", "\\$webapp/i18n/languages.json": "/node_modules/matrix-react-sdk/__mocks__/languages.json", "^browser-request$": "/node_modules/matrix-react-sdk/__mocks__/browser-request.js", diff --git a/res/css/structures/ErrorView.scss b/res/css/structures/ErrorView.scss new file mode 100644 index 0000000000..f75ee6956f --- /dev/null +++ b/res/css/structures/ErrorView.scss @@ -0,0 +1,101 @@ +/* +Copyright 2020 New Vector Ltd + +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 font-size variables manually, ideally this scss would get loaded by the theme which has all variables in context +@import "../../../node_modules/matrix-react-sdk/res/css/_font-sizes.scss"; + +.mx_ErrorView { + background: #c5e0f7; + background: -moz-linear-gradient(top, #c5e0f7 0%, #ffffff 100%); + background: -webkit-linear-gradient(top, #c5e0f7 0%, #ffffff 100%); + background: linear-gradient(to bottom, #c5e0f7 0%, #ffffff 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c5e0f7', endColorstr='#ffffff',GradientType=0 ); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + width: 100%; + min-height: 100%; + height: auto; + color: #000; + + .mx_ErrorView_container { + max-width: 680px; + margin: auto; + } + + .mx_Button { + border: 0; + border-radius: 4px; + font-size: $font-18px; + margin-left: 4px; + margin-right: 4px; + min-width: 80px; + background-color: #03B381; + color: #fff; + cursor: pointer; + padding: 12px 22px; + word-break: break-word; + text-decoration: none; + } + + .mx_Center { + justify-content: center; + } + + .mx_HomePage_header { + color: #2E2F32; + display: flex; + align-items: center; + justify-content: center; + } + + font-size: $font-16px; + h1 { + font-size: $font-32px; + } + h2 { + font-size: $font-24px; + color: #000; + } + + .mx_HomePage_col { + display: flex; + flex-direction: row; + } + + .mx_HomePage_row { + flex: 1 1 0; + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + .mx_HomePage_logo { + margin: auto 20px auto 0; + } + + h1, h2 { + font-weight: 600; + margin-bottom: 32px; + } + + .mx_Spacer { + margin-top: 24px; + } + + .mx_FooterLink { + color: #368BD6; + text-decoration: none; + } +} diff --git a/res/decoder-ring/datatypes.js b/res/decoder-ring/datatypes.js new file mode 100644 index 0000000000..93a779e079 --- /dev/null +++ b/res/decoder-ring/datatypes.js @@ -0,0 +1,107 @@ +/* + * Quick-n-dirty algebraic datatypes. + * + * These let us handle the possibility of failure without having to constantly write code to check for it. + * We can apply all of the transformations we need as if the data is present using `map`. + * If there's a None, or a FetchError, or a Pending, those are left untouched. + * + * I've used perhaps an odd bit of terminology from scalaz in `fold`. This is basically a `switch` statement: + * You pass it a set of functions to handle the various different states of the datatype, and if it finds the + * function it'll call it on its value. + * + * It's handy to have this in functional style when dealing with React as we can dispatch different ways of rendering + * really simply: + * ``` + * bundleFetchStatus.fold({ + * some: (fetchStatus) => , + * }), + * ``` + */ + + +class Optional { + static from(value) { + return value && Some.of(value) || None; + } + map(f) { + return this; + } + flatMap(f) { + return this; + } + fold({ none }) { + return none && none(); + } +} +class Some extends Optional { + constructor(value) { + super(); + this.value = value; + } + map(f) { + return Some.of(f(this.value)); + } + flatMap(f) { + return f(this.value); + } + fold({ some }) { + return some && some(this.value); + } + static of(value) { + return new Some(value); + } +} +const None = new Optional(); + +class FetchStatus { + constructor(opt = {}) { + this.opt = { at: Date.now(), ...opt }; + } + map(f) { + return this; + } + flatMap(f) { + return this; + } +} +class Success extends FetchStatus { + static of(value) { + return new Success(value); + } + constructor(value, opt) { + super(opt); + this.value = value; + } + map(f) { + return new Success(f(this.value), this.opt); + } + flatMap(f) { + return f(this.value, this.opt); + } + fold({ success }) { + return success instanceof Function ? success(this.value, this.opt) : undefined; + } +} +class Pending extends FetchStatus { + static of(opt) { + return new Pending(opt); + } + constructor(opt) { + super(opt); + } + fold({ pending }) { + return pending instanceof Function ? pending(this.opt) : undefined; + } +} +class FetchError extends FetchStatus { + static of(reason, opt) { + return new FetchError(reason, opt); + } + constructor(reason, opt) { + super(opt); + this.reason = reason; + } + fold({ error }) { + return error instanceof Function ? error(this.reason, this.opt) : undefined; + } +} diff --git a/res/decoder-ring/decoder.js b/res/decoder-ring/decoder.js new file mode 100644 index 0000000000..68c6bb066b --- /dev/null +++ b/res/decoder-ring/decoder.js @@ -0,0 +1,319 @@ +class StartupError extends Error {} + +/* + * We need to know the bundle path before we can fetch the sourcemap files. In a production environment, we can guess + * it using this. + */ +async function getBundleName() { + const res = await fetch("../index.html"); + if (!res.ok) { + throw new StartupError(`Couldn't fetch index.html to prefill bundle; ${res.status} ${res.statusText}`); + } + const index = await res.text(); + return index.split("\n").map((line) => + line.match(/ + + + + + + + + + + + +

Decoder ring

+ Waiting for javascript to run... + + + diff --git a/res/manifest.json b/res/manifest.json index 75b182122d..92c46dc16f 100644 --- a/res/manifest.json +++ b/res/manifest.json @@ -6,40 +6,69 @@ "start_url": "index.html", "icons": [ { - "src": "vector-icons/android-chrome-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" + "src": "/vector-icons/20587a91-30e9-d583-2b9b-5c4c2aca967f.webPlatform.png", + "sizes": "44x44", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" + "src": "/vector-icons/20522817-fde7-6a88-54a9-496b1c8aee53.webPlatform.png", + "sizes": "1240x600", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" + "src": "/vector-icons/4168a7e5-9d94-e9a3-4e60-45a58cc8ee4e.webPlatform.png", + "sizes": "300x300", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" + "src": "/vector-icons/dd73cdd3-17c4-9b33-81b8-4789b7a4a250.webPlatform.png", + "sizes": "150x150", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" + "src": "/vector-icons/8f19f71b-ab84-4fe7-1866-8ee9fb1362da.webPlatform.png", + "sizes": "88x88", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" + "src": "/vector-icons/89ac632f-d735-868d-4b9b-cfe32121294c.webPlatform.png", + "sizes": "24x24", + "type": "image/png" + }, + { + "src": "/vector-icons/5c925eef-dd2e-aa16-b6d4-13c90b81af1f.webPlatform.png", + "sizes": "50x50", + "type": "image/png" + }, + { + "src": "/vector-icons/b3624ff1-eaf4-1082-4923-949bc8eb40ef.webPlatform.png", + "sizes": "620x300", + "type": "image/png" + }, + { + "src": "/vector-icons/32aa4ec4-8b3f-d7b8-e2df-a49ba887199a.webPlatform.png", + "sizes": "1024x1024", + "type": "image/png" + }, + { + "src": "/vector-icons/a2e91e68-aa4e-45e7-e5e6-951e1d314675.webPlatform.png", + "sizes": "180x180", + "type": "image/png" + }, + { + "src": "/vector-icons/627721aa-5331-ded6-b4a5-0bb4799985ee.webPlatform.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "/vector-icons/4f4b5190-3b9c-9173-3118-442179ae62d4.webPlatform.png", + "sizes": "120x120", + "type": "image/png" + }, + { + "src": "/vector-icons/552c9d70-ff13-2235-8ef9-00db0d2fda0c.webPlatform.png", + "sizes": "76x76", + "type": "image/png" } ], "related_applications": [ diff --git a/res/themes/riot/img/download/apple.svg b/res/themes/riot/img/download/apple.svg new file mode 100644 index 0000000000..9de39edc8f --- /dev/null +++ b/res/themes/riot/img/download/apple.svg @@ -0,0 +1,97 @@ + + Download on the App Store. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/themes/riot/img/download/fdroid.svg b/res/themes/riot/img/download/fdroid.svg new file mode 100644 index 0000000000..847196f54b --- /dev/null +++ b/res/themes/riot/img/download/fdroid.svg @@ -0,0 +1,135 @@ + + Get it on F-Droid. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/themes/riot/img/download/google.svg b/res/themes/riot/img/download/google.svg new file mode 100644 index 0000000000..d54aca167c --- /dev/null +++ b/res/themes/riot/img/download/google.svg @@ -0,0 +1,70 @@ + + Download on the Google Play Store. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/vector-icons/20522817-fde7-6a88-54a9-496b1c8aee53.webPlatform.png b/res/vector-icons/20522817-fde7-6a88-54a9-496b1c8aee53.webPlatform.png new file mode 100755 index 0000000000..4a994a5e66 Binary files /dev/null and b/res/vector-icons/20522817-fde7-6a88-54a9-496b1c8aee53.webPlatform.png differ diff --git a/res/vector-icons/20587a91-30e9-d583-2b9b-5c4c2aca967f.webPlatform.png b/res/vector-icons/20587a91-30e9-d583-2b9b-5c4c2aca967f.webPlatform.png new file mode 100755 index 0000000000..70829bbc21 Binary files /dev/null and b/res/vector-icons/20587a91-30e9-d583-2b9b-5c4c2aca967f.webPlatform.png differ diff --git a/res/vector-icons/32aa4ec4-8b3f-d7b8-e2df-a49ba887199a.webPlatform.png b/res/vector-icons/32aa4ec4-8b3f-d7b8-e2df-a49ba887199a.webPlatform.png new file mode 100755 index 0000000000..3a9e2c2683 Binary files /dev/null and b/res/vector-icons/32aa4ec4-8b3f-d7b8-e2df-a49ba887199a.webPlatform.png differ diff --git a/res/vector-icons/4168a7e5-9d94-e9a3-4e60-45a58cc8ee4e.webPlatform.png b/res/vector-icons/4168a7e5-9d94-e9a3-4e60-45a58cc8ee4e.webPlatform.png new file mode 100755 index 0000000000..8945cc9bf6 Binary files /dev/null and b/res/vector-icons/4168a7e5-9d94-e9a3-4e60-45a58cc8ee4e.webPlatform.png differ diff --git a/res/vector-icons/4f4b5190-3b9c-9173-3118-442179ae62d4.webPlatform.png b/res/vector-icons/4f4b5190-3b9c-9173-3118-442179ae62d4.webPlatform.png new file mode 100755 index 0000000000..8f5e287fe9 Binary files /dev/null and b/res/vector-icons/4f4b5190-3b9c-9173-3118-442179ae62d4.webPlatform.png differ diff --git a/res/vector-icons/552c9d70-ff13-2235-8ef9-00db0d2fda0c.webPlatform.png b/res/vector-icons/552c9d70-ff13-2235-8ef9-00db0d2fda0c.webPlatform.png new file mode 100755 index 0000000000..b3d83f3699 Binary files /dev/null and b/res/vector-icons/552c9d70-ff13-2235-8ef9-00db0d2fda0c.webPlatform.png differ diff --git a/res/vector-icons/5c925eef-dd2e-aa16-b6d4-13c90b81af1f.webPlatform.png b/res/vector-icons/5c925eef-dd2e-aa16-b6d4-13c90b81af1f.webPlatform.png new file mode 100755 index 0000000000..f553a5c650 Binary files /dev/null and b/res/vector-icons/5c925eef-dd2e-aa16-b6d4-13c90b81af1f.webPlatform.png differ diff --git a/res/vector-icons/627721aa-5331-ded6-b4a5-0bb4799985ee.webPlatform.png b/res/vector-icons/627721aa-5331-ded6-b4a5-0bb4799985ee.webPlatform.png new file mode 100755 index 0000000000..0680cdf17d Binary files /dev/null and b/res/vector-icons/627721aa-5331-ded6-b4a5-0bb4799985ee.webPlatform.png differ diff --git a/res/vector-icons/89ac632f-d735-868d-4b9b-cfe32121294c.webPlatform.png b/res/vector-icons/89ac632f-d735-868d-4b9b-cfe32121294c.webPlatform.png new file mode 100755 index 0000000000..d059960c79 Binary files /dev/null and b/res/vector-icons/89ac632f-d735-868d-4b9b-cfe32121294c.webPlatform.png differ diff --git a/res/vector-icons/8f19f71b-ab84-4fe7-1866-8ee9fb1362da.webPlatform.png b/res/vector-icons/8f19f71b-ab84-4fe7-1866-8ee9fb1362da.webPlatform.png new file mode 100755 index 0000000000..3eb483f7f4 Binary files /dev/null and b/res/vector-icons/8f19f71b-ab84-4fe7-1866-8ee9fb1362da.webPlatform.png differ diff --git a/res/vector-icons/a2e91e68-aa4e-45e7-e5e6-951e1d314675.webPlatform.png b/res/vector-icons/a2e91e68-aa4e-45e7-e5e6-951e1d314675.webPlatform.png new file mode 100755 index 0000000000..ec74149472 Binary files /dev/null and b/res/vector-icons/a2e91e68-aa4e-45e7-e5e6-951e1d314675.webPlatform.png differ diff --git a/res/vector-icons/b3624ff1-eaf4-1082-4923-949bc8eb40ef.webPlatform.png b/res/vector-icons/b3624ff1-eaf4-1082-4923-949bc8eb40ef.webPlatform.png new file mode 100755 index 0000000000..3d0457dba5 Binary files /dev/null and b/res/vector-icons/b3624ff1-eaf4-1082-4923-949bc8eb40ef.webPlatform.png differ diff --git a/res/vector-icons/dd73cdd3-17c4-9b33-81b8-4789b7a4a250.webPlatform.png b/res/vector-icons/dd73cdd3-17c4-9b33-81b8-4789b7a4a250.webPlatform.png new file mode 100755 index 0000000000..575781ccec Binary files /dev/null and b/res/vector-icons/dd73cdd3-17c4-9b33-81b8-4789b7a4a250.webPlatform.png differ diff --git a/riot.im/README b/riot.im/README index 2186e48dee..ba9b17d313 100644 --- a/riot.im/README +++ b/riot.im/README @@ -5,7 +5,7 @@ You probably do not want to build with this config unless you're building the official riot.im distribution, but these files may be useful if you want to inspect the configuration used there. -Riot Desktop uses a separate config (see electron_app/riot.im/config.json). +Riot Desktop uses a separate config (see https://github.com/vector-im/riot-desktop/tree/develop/riot.im). Deployment scripts (such as app/deploy.py) are meant to be run on the web server hosting the Riot installation. diff --git a/riot.im/app/config.json b/riot.im/app/config.json index da45ee86a8..100051537e 100644 --- a/riot.im/app/config.json +++ b/riot.im/app/config.json @@ -13,7 +13,6 @@ "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web", "bug_report_endpoint_url": "https://riot.im/bugreports/submit", "features": { - "feature_cross_signing": "enable" }, "piwik": { "url": "https://piwik.riot.im/", diff --git a/riot.im/develop/config.json b/riot.im/develop/config.json index 1843aef282..3cff49839b 100644 --- a/riot.im/develop/config.json +++ b/riot.im/develop/config.json @@ -20,7 +20,6 @@ "feature_many_integration_managers": "labs", "feature_mjolnir": "labs", "feature_dm_verification": "labs", - "feature_cross_signing": "enable", "feature_bridge_state": "labs", "feature_presence_in_room_list": "labs", "feature_custom_themes": "labs" diff --git a/scripts/copy-res.js b/scripts/copy-res.js index e25d07fffc..6153bb9b95 100755 --- a/scripts/copy-res.js +++ b/scripts/copy-res.js @@ -63,6 +63,7 @@ const COPY_LIST = [ ["res/welcome/**", "webapp/welcome"], ["res/themes/**", "webapp/themes"], ["res/vector-icons/**", "webapp/vector-icons"], + ["res/decoder-ring/**", "webapp/decoder-ring"], ["node_modules/matrix-react-sdk/res/media/**", "webapp/media"], ["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }], ["./config.json", "webapp", { directwatch: 1 }], diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index a3fb9028c4..9716cafe22 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -15,7 +15,7 @@ limitations under the License. */ import "matrix-react-sdk/src/@types/global"; // load matrix-react-sdk's type extensions first -import {Renderer} from "react-dom"; +import type {Renderer} from "react-dom"; declare global { interface Window { diff --git a/src/async-components/structures/CompatibilityView.tsx b/src/async-components/structures/CompatibilityView.tsx new file mode 100644 index 0000000000..b032214a99 --- /dev/null +++ b/src/async-components/structures/CompatibilityView.tsx @@ -0,0 +1,105 @@ +/* +Copyright 2020 New Vector Ltd + +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 * as React from "react"; +import { _t } from "matrix-react-sdk/src/languageHandler"; + +// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk +// scss variables will be accessible. +import "../../../res/css/structures/ErrorView.scss"; + +interface IProps { + onAccept(): void; +} + +const CompatibilityView: React.FC = ({ onAccept }) => { + return
+
+
+ + Riot + +

{ _t("Unsupported browser") }

+
+ +
+
+
+

{ _t("Your browser can't run Riot") }

+

+ { _t( + "Riot uses advanced browser features which aren't supported by your current browser.", + ) } +

+

+ { _t( + 'Please install Chrome, Firefox, ' + + 'or Safari for the best experience.', + {}, + { + 'chromeLink': (sub) => {sub}, + 'firefoxLink': (sub) => {sub}, + 'safariLink': (sub) => {sub}, + }, + )} +

+

+ { _t( + "You can continue using your current browser, but some or all features may not work " + + "and the look and feel of the application may be incorrect.", + ) } +

+ +
+
+
+ +
+
+
+

Use Riot on mobile

+

iOS (iPhone or iPad)

+ + Apple App Store + +

Android

+ + Google Play Store + + + F-Droid + +
+
+
+ + +
+
; +}; + +export default CompatibilityView; diff --git a/src/async-components/structures/ErrorView.tsx b/src/async-components/structures/ErrorView.tsx new file mode 100644 index 0000000000..3c2d1e41bd --- /dev/null +++ b/src/async-components/structures/ErrorView.tsx @@ -0,0 +1,61 @@ +/* +Copyright 2020 New Vector Ltd + +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 * as React from "react"; +import { _t } from "matrix-react-sdk/src/languageHandler"; + +// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk +// scss variables will be accessible. +import "../../../res/css/structures/ErrorView.scss"; + +interface IProps { + // both of these should already be internationalised + title: string; + messages?: string[]; +} + +const ErrorView: React.FC = ({title, messages}) => { + return
+
+
+ + Riot + +

{ _t("Failed to start") }

+
+
+
+
+

{ title }

+ {messages && messages.map(msg =>

+ { msg } +

)} +
+
+
+ +
+
; +}; + +export default ErrorView; + diff --git a/src/components/structures/ErrorView.tsx b/src/components/structures/ErrorView.tsx deleted file mode 100644 index 6941dbf16a..0000000000 --- a/src/components/structures/ErrorView.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2020 New Vector Ltd - -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 * as React from "react"; -import * as PropTypes from "prop-types"; - -import { _t } from "matrix-react-sdk/src/languageHandler"; - -interface IProps { - title: string; - messages?: string[]; -} - -const ErrorView: React.FC = ({title, messages}) => { - return
-
-

{title}

-
- {messages && messages.map(msg =>

- { _t(msg) } -

)} -
-
-
; -}; - -ErrorView.propTypes = { - title: PropTypes.string.isRequired, - messages: PropTypes.arrayOf(PropTypes.string.isRequired), -}; - -export default ErrorView; - diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 7e1892a1c5..8580d111a1 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -23,5 +23,18 @@ "The message from the parser is: %(message)s": "Грешката от парсъра е: %(message)s", "Invalid JSON": "Невалиден JSON", "Open user settings": "Отвори потребителските настройки", - "Go to your browser to complete Sign In": "Отидете в браузъра за да завършите влизането" + "Go to your browser to complete Sign In": "Отидете в браузъра за да завършите влизането", + "Missing indexeddb worker script!": "Липсва indexdb worker скриптът!", + "Unable to load config file: please refresh the page to try again.": "Неуспешно зареждане на конфигурационния файл: презаредете страницата за да опитате пак.", + "Previous/next recently visited room or community": "Предишна/следваща наскоро-посетена стая или общност", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Неподдържан браузър", + "Your browser can't run Riot": "Браузърът ви не може да подкара Riot", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot използва напредничави браузър функции, които не се поддържат от сегашния ви браузър.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Инсталирайте Chrome, Firefox или Safari за най-добра работа.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Може да продължите да използвате сегашния си браузър, но някои или всички функции може да се окажат неработещи, или пък външния вид на приложението да изглежда неправилен.", + "I understand the risks and wish to continue": "Разбирам рисковете и желая да продължа", + "Go to Riot.im": "Отиди на Riot.im", + "Failed to start": "Неуспешно стартиране" } diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index 9e4c2899a3..6b8a9991b9 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -15,5 +15,9 @@ "Room Directory": "Directori de sales", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Podeu emprar les opcions personalitzades del servidor per iniciar la sessió en altres servidors de Matrix especificant un URL de servidor personal diferent. Això us permet emprar el Riot amb un compte de Matrix existent en un servidor personal diferent.", "Sign In": "Inicia la sessió", - "Invalid configuration: no default server specified.": "Configuració no vàlida: no s'ha especificat cap servidor per defecte." + "Invalid configuration: no default server specified.": "Configuració no vàlida: no s'ha especificat cap servidor per defecte.", + "Your Riot is misconfigured": "El vostre Riot té una configuració errònia", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "El JSON de la configuraciò de Riot no és vàlid. Corregiu el problema i torneu a carregar la pàgina.", + "Invalid JSON": "JSON no vàlid", + "Go to your browser to complete Sign In": "Aneu al vostre navegador per completar l'inici de sessió" } diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index d8e5859ada..4845643794 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -25,6 +25,16 @@ "Go to your browser to complete Sign In": "Gehe zu deinem Browser, um die Anmeldung abzuschließen", "Open user settings": "Öffne Nutzer-Einstellungen", "Unable to load config file: please refresh the page to try again.": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisieren Sie die Seite, um es erneut zu versuchen.", - "Missing indexeddb worker script!": "Fehlendes „indexeddb worker“-Script!", - "Previous/next recently visited room or community": "Vorheriger/nächster kürzlich besuchter Raum oder Community" + "Missing indexeddb worker script!": "Indexeddb worker Skript fehlt!", + "Previous/next recently visited room or community": "Vorheriger/nächster kürzlich besuchter Raum oder Community", + "Unsupported browser": "Nicht unterstützter Browser", + "Your browser can't run Riot": "Riot funktioniert in deinem Browser nicht", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot nutzt fortgeschrittene Browser-Eigenschaften, die dein aktueller Browser nicht unterstützt.", + "Go to Riot.im": "Gehe zu Riot.im", + "Failed to start": "Start fehlgeschlagen", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Please install Chrome, Firefox, or Safari for the best experience.": "Bitte installiere Chrome, Firefox, oder Safari für das beste Erlebnis.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kannst mit diesem Browser weitermachen, aber einiges könnte nicht funktionieren und die Darstellung könnte fehlerhaft sein.", + "I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren" } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index a10e48ac1f..3461eeb7d8 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -10,15 +10,23 @@ "Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.", "Open user settings": "Open user settings", "Previous/next recently visited room or community": "Previous/next recently visited room or community", - "Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", "Go to your browser to complete Sign In": "Go to your browser to complete Sign In", "Unknown device": "Unknown device", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", "powered by Matrix": "powered by Matrix", "Custom Server Options": "Custom Server Options", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.", "Dismiss": "Dismiss", + "Unsupported browser": "Unsupported browser", + "Your browser can't run Riot": "Your browser can't run Riot", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot uses advanced browser features which aren't supported by your current browser.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Please install Chrome, Firefox, or Safari for the best experience.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.", + "I understand the risks and wish to continue": "I understand the risks and wish to continue", + "Go to Riot.im": "Go to Riot.im", + "Failed to start": "Failed to start", "Welcome to Riot.im": "Welcome to Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", "Sign In": "Sign In", diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index fdcdc92da6..c5e75cdbe5 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -25,5 +25,16 @@ "Go to your browser to complete Sign In": "Iru al via foliumilo por fini la saluton", "Open user settings": "Malfermi agordojn de uzanto", "Unable to load config file: please refresh the page to try again.": "Ne povas enlegi agordan dosieron: bonvolu reprovi per aktualigo de la paĝo.", - "Previous/next recently visited room or community": "Antaŭa/sekva freŝe vizitita ĉambro aŭ komunumo" + "Previous/next recently visited room or community": "Antaŭa/sekva freŝe vizitita ĉambro aŭ komunumo", + "Missing indexeddb worker script!": "Mankas fonskripto «indexeddb»!", + "Riot Desktop (%(platformName)s)": "Riot labortabla (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nesubtenata foliumilo", + "Your browser can't run Riot": "Via foliumilo ne povas ruli Rioton", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot uzas altnivelajn foliumilajn funkciojn, kiuj ne estas subtenataj de via nuna foliumilo.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Bonvolu instali foliumilon Chrome, Firefox, aŭ Safari, por la plej bona sperto.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Vi povas daŭre uzadi vian nunan foliumilon, sed iuj (eĉ ĉiuj) funkcioj eble ne funkcios, kaj la aspekto de la aplikaĵo eble ne estos ĝusta.", + "I understand the risks and wish to continue": "Mi komprenas la riskon kaj volas pluiĝi", + "Go to Riot.im": "Iri al Riot.im", + "Failed to start": "Malsukcesis starti" } diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 7a004f0b3a..ec2c3c17e0 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -9,12 +9,12 @@ "Welcome to Riot.im": "Bienvenido a Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas y colaboración con el poder de [matrix]", "Chat with Riot Bot": "Hablar con Riot Bot", - "Sign In": "Iniciar sesión", + "Sign In": "Registrarse", "Create Account": "Crear cuenta", - "Need help?": "Ayuda?", + "Need help?": "Necesitas ayuda?", "Explore rooms": "Explorar salas", "Room Directory": "Directorio de salas", - "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Puedes usar la opción de servidor personalizado para iniciar sesión en otros servidores Matrix, especificando la dirección URL del servidor. Esto te permite usar una cuenta Matrix en un servidor diferente.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Puedes usar las opciones personalizadas del servidor para iniciar sesión en otros servidores Matrix, especificando la dirección URL del servidor. Esto te permite usar una cuenta Matrix en un servidor diferente.", "Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Vea la consola para más detalles.", "Your Riot is misconfigured": "Riot tiene un error de configuración", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración errónea: sólo puede especificar uno de default_server_config, default_server_name, o default_hs_url.", @@ -23,5 +23,18 @@ "The message from the parser is: %(message)s": "El mensaje del parser es: %(message)s", "Invalid JSON": "JSON inválido", "Open user settings": "Abrir opciones de usuario", - "Go to your browser to complete Sign In": "Abre tu navegador web para completar el registro" + "Go to your browser to complete Sign In": "Abre tu navegador web para completar el registro", + "Missing indexeddb worker script!": "¡Worker script “indexeddb” faltante!", + "Unable to load config file: please refresh the page to try again.": "No se ha podido cargar el archivo de configuración. Recarga la página para intentar nuevamente.", + "Previous/next recently visited room or community": "Anterior/siguiente sala o comunidad visitada recientemente", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navegador no soportado", + "Your browser can't run Riot": "Tu navegador no puede ejecutar Riot", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot requiere funcionalidades que tu navegador actual no soporta.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Por favor, instale Chrome, Firefox, o Safari para la mejor experiencia.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Puedes seguir utilizando tu navegador actual, pero puede que algunas funcionalidades no estén disponibles o que algunas partes de la aplicación se muestren de forma incorrecta.", + "I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar", + "Go to Riot.im": "Ir a Riot.im", + "Failed to start": "Fallo al iniciar" } diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 27a0a0d193..f1b9dfa61b 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -12,5 +12,29 @@ "Dismiss": "Loobu", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Matrix'i protokollil põhinev hajutatud ja krüpteeritud suhtlus- ning ühistöörakendus", "Chat with Riot Bot": "Vestle Riot'i robotiga", - "Explore rooms": "Uuri jututubasid" + "Explore rooms": "Uuri jututubasid", + "Missing indexeddb worker script!": "Lahendusest puudub indexeddb skript!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Vigane seadistus. Sa võid määrata vaid ühe alljärgnevatest: default_server_config, default_server_name või default_hs_url.", + "Previous/next recently visited room or community": "Eelmine/järgmine hiljuti kasutatud jututuba või kogukond", + "Riot Desktop on %(platformName)s": "Riot Desktop, %(platformName)s", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s, %(browserName)s, %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Ekraani jagava kõne jaoks pead kasutama HTTPS-ühendust.", + "powered by Matrix": "põhineb Matrix'il", + "Custom Server Options": "Serveri kohaldatud seadistused", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Selleks et sisse logida teistesse Matrix'i serveritesse võid sa määrates vajaliku koduserveri aadreesi kasutada kohaldatud serveriseadistusi. See võimaldab sul kasutada Riot'it olemasoleva Matrix'i kontoga teisest koduserverist.", + "Welcome to Riot.im": "Tere tulemast Riot.im kasutajaks", + "Sign In": "Logi sisse", + "Create Account": "Loo konto", + "Need help?": "Kas vajad abi?", + "Room Directory": "Jututubade loend", + "Riot Desktop (%(platformName)s)": "Riot'i töölauaversioon (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Sellele brauserile puudub tugi", + "Your browser can't run Riot": "Riot ei tööta sinu brauseris", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot eeldab brauseritelt tänapäevaseid funktsionaalsusi ning sinu pragune brauser neid võimalusi ei toeta.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Parima kasutuskogemuse jaoks palun paigalda Chrome, Firefox või Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Sa võid jätkata praeguse brauseri kasutamist, kuid mõned või kõik funktsionaalsused ei pruugi toimida ning rakenduse välimus võib vigane olla.", + "I understand the risks and wish to continue": "Ma mõistan riske ja soovin jätkata", + "Go to Riot.im": "Mine Riot.im lehele", + "Failed to start": "Käivitamine ei õnnestunud" } diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 63dd8854ec..c11ec611fd 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -21,5 +21,6 @@ "Invalid configuration: no default server specified.": "Virheellinen asetus: oletuspalvelinta ei ole määritetty.", "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-asetuksissasi on virheellistä JSONia. Korjaa ongelma ja lataa sivu uudelleen.", "The message from the parser is: %(message)s": "Viesti jäsentimeltä: %(message)s", - "Invalid JSON": "Virheellinen JSON" + "Invalid JSON": "Virheellinen JSON", + "Missing indexeddb worker script!": "Indexeddb-suorittajan skripti puuttuu!" } diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 5d250e6e13..611ba14e5c 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -26,5 +26,15 @@ "Open user settings": "Ouvrir les paramètres utilisateur", "Missing indexeddb worker script!": "Script du worker IndexedDB manquant !", "Unable to load config file: please refresh the page to try again.": "Impossible de charger le fichier de configuration : rafraichissez la page pour réessayer.", - "Previous/next recently visited room or community": "Salon ou communauté visité récemment précédent/suivant" + "Previous/next recently visited room or community": "Salon ou communauté visité récemment précédent/suivant", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navigateur non pris en charge", + "Your browser can't run Riot": "Votre navigateur ne peut pas exécuter Riot", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot utilise des fonctionnalités avancées qui ne sont pas prises en charge par votre navigateur actuel.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Veuillez installer Chrome, Firefox ou Safari pour une expérience optimale.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Vous pouvez continuer à utiliser votre navigateur actuel, mais vous risquez de trouver que certaines fonctionnalités et/ou l'apparence de l'application sont incorrectes.", + "I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer", + "Go to Riot.im": "Aller vers Riot.im", + "Failed to start": "Échec au démarrage", + "Riot Desktop (%(platformName)s)": "Riot pour bureau (%(platformName)s)" } diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 2eb537f344..e9017b8184 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -1,7 +1,7 @@ { - "Custom Server Options": "Egyedi szerverbeállítások", + "Custom Server Options": "Egyéni kiszolgálóbeállítások", "Dismiss": "Eltüntetés", - "powered by Matrix": "Matrix hajtja", + "powered by Matrix": "a gépházban: Matrix", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s alkalmazás %(browserName)s böngészőn %(osName)s rendszeren", "Riot Desktop on %(platformName)s": "Riot Desktop itt: %(platformName)s", "Unknown device": "Ismeretlen eszköz", @@ -9,7 +9,7 @@ "Welcome to Riot.im": "Üdvözöl a Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizált, titkosított csevegés és kollaboráció [matrix] alapokon", "Chat with Riot Bot": "Csevegés a Riot Robottal", - "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Használhatod az egyedi szerver beállítást más Matrix szerverre való belépéshez, azzal, hogy megadod a Matrix szerver URL-jét. Ezzel a Riot-ot használhatod más Matrix szerveren lévő fiókkal.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Használhatsz egyéni kiszolgálóbeállításokat, hogy más Matrix-kiszolgálóra jelentkezz be, úgy, hogy megadod a másik kiszolgáló URL-jét. Ezzel a Riotot használhatod más Matrix kiszolgálón lévő fiókkal.", "Sign In": "Bejelentkezés", "Create Account": "Fiók létrehozása", "Need help?": "Segíthetünk?", @@ -17,14 +17,24 @@ "Room Directory": "Szobalista", "Unexpected error preparing the app. See console for details.": "Váratlan hiba történt az alkalmazás előkészítésénél. A részletekért nézd meg a konzolt.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Érvénytelen konfiguráció: csak egyet lehet megadni a default_server_config, default_server_name és default_hs_url közül.", - "Invalid configuration: no default server specified.": "Érvénytelen konfiguráció: nincs megadva alapértelmezett szerver.", + "Invalid configuration: no default server specified.": "Érvénytelen konfiguráció: nincs megadva alapértelmezett kiszolgáló.", "Your Riot is misconfigured": "A Riotod hibásan van beállítva", "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "A Riot beállításod érvénytelen JSON szöveget tartalmaz. Kérlek javítsd és töltsd újra az oldalt.", "The message from the parser is: %(message)s": "A feldolgozó algoritmus üzenete: %(message)s", "Invalid JSON": "Érvénytelen JSON", "Go to your browser to complete Sign In": "A böngészőben fejezd be a bejelentkezést", "Open user settings": "Felhasználói beállítások megnyitása", - "Missing indexeddb worker script!": "Indexeddb worker szkript hiányzik!", + "Missing indexeddb worker script!": "Hiányzó indexeddb worker parancsfájl!", "Unable to load config file: please refresh the page to try again.": "A konfigurációs fájlt nem sikerült betölteni: frissítsd az oldalt és próbáld meg újra.", - "Previous/next recently visited room or community": "Előző/következő nemrég meglátogatott szobák vagy közösségek" + "Previous/next recently visited room or community": "Előző/következő nemrég meglátogatott szobák vagy közösségek", + "Riot Desktop (%(platformName)s)": "Asztali Riot (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "A böngésző nem támogatott", + "Your browser can't run Riot": "A böngésződ nem tudja futtatni a Riotot", + "Riot uses advanced browser features which aren't supported by your current browser.": "A Riot fejlett böngészőfunkciókat használt, amit a jelenlegi böngésződ nem támogat.", + "Please install Chrome, Firefox, or Safari for the best experience.": "A legjobb élmény eléréséhez kérlek telepíts Chrome-ot, Firefoxot vagy Safarit.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Folytathatod a jelenlegi böngésződdel, de néhány vagy az összes funkció használhatatlan lehet, vagy hibák lehetnek az alkalmazás kinézetében és viselkedésében.", + "I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom", + "Go to Riot.im": "Irány a Riot.im", + "Failed to start": "Az indítás sikertelen" } diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 47f904d06f..5c844d169f 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -26,5 +26,15 @@ "Open user settings": "Apri impostazioni utente", "Missing indexeddb worker script!": "Script di lavoro indexeddb mancante!", "Unable to load config file: please refresh the page to try again.": "Impossibile caricare il file di configurazione: ricarica la pagina per riprovare.", - "Previous/next recently visited room or community": "Avanti/indietro stanze o comunità visitate di recente" + "Previous/next recently visited room or community": "Avanti/indietro stanze o comunità visitate di recente", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Browser non supportato", + "Your browser can't run Riot": "Il tuo browser non può avviare Riot", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot usa caratteristiche avanzate del browser che non sono supportate dal tuo.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Installa Chrome, Firefox, o Safari per una migliore esperienza.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Puoi comunque usare il browser attuale, ma alcune o tutte le caratteristiche potrebbero non funzionare e l'aspetto dell'applicazione potrebbe essere sbagliato.", + "I understand the risks and wish to continue": "Capisco i rischi e desidero continuare", + "Go to Riot.im": "Vai su Riot.im", + "Failed to start": "Avvio fallito" } diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index f7314c77a6..533cf4e3bf 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -1,5 +1,5 @@ { - "Welcome to Riot.im": "Riot.imへようこそ", + "Welcome to Riot.im": "Riot.im へようこそ", "Unknown device": "不明な端末", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)sは%(osName)sの%(browserName)s上で動作しています", "Custom Server Options": "カスタムサーバのオプション", diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index a39058be74..8994677520 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -18,7 +18,7 @@ "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-konfigurasjonen din inneholder ugyldig JSON. Vennligst fiks problemet og oppdater siden.", "The message from the parser is: %(message)s": "Meldingen fra parseren er: %(message)s", "Invalid JSON": "Ugyldig JSON", - "Your Riot is misconfigured": "Riot er feilkonfigurert", + "Your Riot is misconfigured": "Ditt Riot-oppsett er feiloppsatt", "Invalid configuration: no default server specified.": "Ugyldig konfigurasjon: ingen standardserver spesifisert.", "Unexpected error preparing the app. See console for details.": "Uventet feil oppsto mens appen ble gjort klar. Se konsollen for detaljer.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfigurasjon: Spesifiser kun en av følgende: default_server_config, default_server_name eller default_hs_url.", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 4bd39bf34e..032948ac30 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -23,5 +23,18 @@ "The message from the parser is: %(message)s": "De ontleder meldt: %(message)s", "Invalid JSON": "Ongeldige JSON", "Go to your browser to complete Sign In": "Ga naar uw browser om de aanmelding te voltooien", - "Open user settings": "Open de gebruikersinstellingen" + "Open user settings": "Open de gebruikersinstellingen", + "Missing indexeddb worker script!": "Het indexeddb script ontbreekt!", + "Unable to load config file: please refresh the page to try again.": "Kan het configuratiebestand niet laden. Herlaad de pagina alstublieft.", + "Previous/next recently visited room or community": "Vorige/volgende recent bezochte kamer of gemeenschap", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Niet-ondersteunde browser", + "Your browser can't run Riot": "Riot werkt niet in uw browser", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot gebruikt geavanceerde features die niet door uw huidige browser ondersteund worden.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Installeer Chrome, Firefox, of Safari voor de beste gebruikservaring.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "U kunt uw huidige browser blijven gebruiken, maar sommige of alle features zouden niet kunnen werken en de uitstraling van het programma kan verkeerd zijn.", + "I understand the risks and wish to continue": "Ik begrijp de risico's en wil verder gaan", + "Go to Riot.im": "Ga naar Riot.im", + "Failed to start": "Opstarten gefaald" } diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 283aa8b59f..74f45c04ff 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -23,5 +23,18 @@ "Invalid configuration: no default server specified.": "Błędna konfiguracja: nie wybrano domyślnego serwera.", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Możesz użyć Niestandardowych Opcji Serwera by zalogować się do innych serwerów Matrix poprzez podanie URL innego serwera głównego. Dzięki temu możesz używać Riot z istniejącym kontem z innego serwera głównego.", "Open user settings": "Otwórz ustawienia użytkownika", - "Go to your browser to complete Sign In": "Aby dokończyć proces rejestracji, przejdź do swojej przeglądarki" + "Go to your browser to complete Sign In": "Aby dokończyć proces rejestracji, przejdź do swojej przeglądarki", + "Missing indexeddb worker script!": "Brakujący skrypt workera indexeddb!", + "Unable to load config file: please refresh the page to try again.": "Nie udało się załadować pliku konfiguracyjnego: odśwież stronę aby spróbować ponownie.", + "Previous/next recently visited room or community": "Poprzedni/następny niedawno odwiedzony pokój lub społeczność", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Niewspierana przeglądarka", + "Your browser can't run Riot": "Twoja przeglądarka nie jest w stanie uruchomić Riota", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot używa zaawansowanych funkcji, które nie są dostępne na Twojej obecnej przeglądarce.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Zainstaluj Chrome, Firefox, lub Safari w celu zapewnienia najlepszego działania.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Możesz kontynuować używanie obecnej przeglądarki, lecz niektóre lub wszystkie funkcje mogą nie działać oraz wygląd aplikacji może być niepoprawny.", + "I understand the risks and wish to continue": "Rozumiem ryzyko i chcę kontynuować", + "Go to Riot.im": "Przejdź do Riot.im", + "Failed to start": "Nie udało się wystartować" } diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index df00bd66e1..bcec67bccb 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -26,5 +26,15 @@ "Open user settings": "Открыть настройки пользователя", "Missing indexeddb worker script!": "Отсутствует скрипт воркера для indexeddb!", "Unable to load config file: please refresh the page to try again.": "Не удалось загрузить файл конфигурации. Попробуйте обновить страницу.", - "Previous/next recently visited room or community": "Предыдущая/следующая недавно посещённая комната или сообщество" + "Previous/next recently visited room or community": "Предыдущая/следующая недавно посещённая комната или сообщество", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Неподдерживаемый браузер", + "Your browser can't run Riot": "Ваш браузер не может запустить Riot", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot использует расширенные возможности браузера, которые не поддерживаются вашим браузером.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Пожалуйста поставьте Chrome, Firefox, или Safari для лучшей совместимости.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Вы можете продолжать пользоваться этим браузером но некоторые возможности будут недоступны и интерфейс может быть отрисован неправильно.", + "I understand the risks and wish to continue": "Я понимаю риск и хочу продолжить", + "Go to Riot.im": "К Riot.im", + "Failed to start": "Старт не удался" } diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index aa1bf68c4d..50e8795152 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -20,5 +20,11 @@ "The message from the parser is: %(message)s": "Správa z parsera je: %(message)s", "Invalid JSON": "Neplatný JSON", "Unexpected error preparing the app. See console for details.": "Neočakávaná chyba počas pripravovania aplikácie. Pre podrobnosti pozri konzolu.", - "Invalid configuration: no default server specified.": "Neplatné nastavenie: nebol určený východiskový server." + "Invalid configuration: no default server specified.": "Neplatné nastavenie: nebol určený východiskový server.", + "Missing indexeddb worker script!": "Chýba indexovaný databázový skript pracovníka!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neplatná konfigurácia: je možné špecifikovať len jednu možnosť z default_server_config, default_server_name, or default_hs_url.", + "Unable to load config file: please refresh the page to try again.": "Nemožno načítať konfiguračný súbor: prosím, obnovte stránku a skúste to znova.", + "Open user settings": "Otvoriť používateľské nastavenia", + "Previous/next recently visited room or community": "Predchádzajúca/ďalšia nedávno navštívená miestnosť alebo komunita", + "Go to your browser to complete Sign In": "Prejdite do prehliadača a dokončite prihlásenie" } diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index cf3fbcf1b0..91e3f56f07 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -25,5 +25,15 @@ "Go to your browser to complete Sign In": "Që të plotësoni Hyrjen, kaloni te shfletuesi juaj", "Open user settings": "Hapni rregullime përdoruesi", "Unable to load config file: please refresh the page to try again.": "S’arrihet të ngarkohet kartelë formësimesh: ju lutemi, rifreskoni faqen dhe riprovoni.", - "Previous/next recently visited room or community": "Dhomë ose bashkësi e mëparshme/pasuese e vizituar së fundi" + "Previous/next recently visited room or community": "Dhomë ose bashkësi e mëparshme/pasuese e vizituar së fundi", + "Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Shfletues i pambuluar", + "Your browser can't run Riot": "Shfletuesi juaj s’xhiron dot Riot-in", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot-i përdor veçori të përparuara shfletuesi, të cilat nuk mbulohen nga shfletuesi juaj i tanishëm.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Ju lutemi, për funksionimin më të mirë, instaloni Chrome, Firefox, ose Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Mund të vazhdoni të përdorni shfletuesin tuaj të tanishëm, por disa ose krejt veçoritë mund të mos funksionojnë dhe pamja dhe ndjesitë prej aplikacionit të mos jenë të sakta.", + "I understand the risks and wish to continue": "I kuptoj rreziqet dhe dëshiroj të vazhdoj", + "Go to Riot.im": "Shko te Riot.im", + "Failed to start": "S’u arrit të nisej" } diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index 75020c7a4d..bf39a7c57e 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -7,12 +7,12 @@ "Unknown device": "Невідомий пристрій", "You need to be using HTTPS to place a screen-sharing call.": "Ви маєте використовувати HTTPS щоб зробити виклик із поширенням екрану.", "Welcome to Riot.im": "Ласкаво просимо до Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізований, шифрований чат та засіб для співробітництва, що працює на [matrix]", - "Chat with Riot Bot": "Чат із Riot-ботом", - "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Ви можете використати власні параметри сервера для входу в інші Matrix сервери, вказавши інший URL. Це дозволить використовувати Riot з наявним обліковим записом Matrix на іншому сервері.", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізована, зашифрована балачка та засіб для співробітництва, що працює на [matrix]", + "Chat with Riot Bot": "Балачка з Riot-ботом", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Ви можете використати власні параметри сервера для входу в інші Matrix сервери, вказавши інший URL. Це дозволить використовувати Riot з наявною обліківкою Matrix на іншому сервері.", "Need help?": "Допомогти?", - "Sign In": "Вхід", - "Create Account": "Створити акаунт", + "Sign In": "Увійти", + "Create Account": "Створити обліківку", "Explore rooms": "Дослідити кімнати", "Room Directory": "Каталог кімнат", "Unexpected error preparing the app. See console for details.": "Неочікувана помилка при підготовці програми. Дивіться деталі у виводі консолі.", @@ -21,5 +21,13 @@ "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша конфігурація Riot містить некоректний JSON. Виправте проблему та оновіть сторінку.", "The message from the parser is: %(message)s": "Повідомлення від парсера: %(message)s", "Invalid JSON": "Хибний JSON", - "Your Riot is misconfigured": "Ваш Riot налаштовано неправильно" + "Your Riot is misconfigured": "Ваш Riot налаштовано неправильно", + "Unsupported browser": "Непідтримуваний переглядач", + "Your browser can't run Riot": "Ваш переглядач не може запустити Riot", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot використовує передові особливості, які не підтримуються вашим переглядачем.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Для найкращих вражень від користування встановіть, будь ласка, Chrome, Firefox, або Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Ви можете продовжити, користуючись вашим поточним переглядачем, але деякі функції можуть не працювати і застосунок може виглядати неправильно.", + "I understand the risks and wish to continue": "Я усвідомлюю ризик і бажаю продовжити", + "Go to Riot.im": "Перейти на Riot.im", + "Failed to start": "Запуск не вдався" } diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index b4be046f63..e3324e3589 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -26,5 +26,15 @@ "Open user settings": "開啟使用者設定", "Missing indexeddb worker script!": "缺少 indexeddb 輔助指令稿!", "Unable to load config file: please refresh the page to try again.": "無法載入設定檔:請重新整理頁面以再試一次。", - "Previous/next recently visited room or community": "上一個/下一個最近造訪的聊天室或社群" + "Previous/next recently visited room or community": "上一個/下一個最近造訪的聊天室或社群", + "Riot Desktop (%(platformName)s)": "Riot 桌面版 (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "不支援的瀏覽器", + "Your browser can't run Riot": "您的瀏覽器無法執行 Riot", + "Riot uses advanced browser features which aren't supported by your current browser.": "Riot 使用了不被您目前的瀏覽器所支援的進階瀏覽器功能。", + "Please install Chrome, Firefox, or Safari for the best experience.": "請安裝 ChromeFirefoxSafari 以取得最佳體驗。", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以繼續使用您目前的瀏覽器,但部份或全部的功能可能會無法運作,而應用程式的外觀與感覺可能也會不正確。", + "I understand the risks and wish to continue": "我了解風險並希望繼續", + "Go to Riot.im": "到 Riot.im", + "Failed to start": "啟動失敗" } diff --git a/src/vector/app.js b/src/vector/app.tsx similarity index 93% rename from src/vector/app.js rename to src/vector/app.tsx index 930576e2d5..b665fedaf1 100644 --- a/src/vector/app.js +++ b/src/vector/app.tsx @@ -19,9 +19,9 @@ limitations under the License. */ import React from 'react'; -// add React and ReactPerf to the global namespace, to make them easier to -// access via the console -global.React = React; +// add React and ReactPerf to the global namespace, to make them easier to access via the console +// this incidentally means we can forget our React imports in JSX files without penalty. +window.React = React; import * as sdk from 'matrix-react-sdk'; import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg'; @@ -30,6 +30,7 @@ import {_td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler'; import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils'; import {AutoDiscovery} from "matrix-js-sdk/src/autodiscovery"; import * as Lifecycle from "matrix-react-sdk/src/Lifecycle"; +import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat"; import url from 'url'; @@ -40,11 +41,11 @@ import SdkConfig from "matrix-react-sdk/src/SdkConfig"; import CallHandler from 'matrix-react-sdk/src/CallHandler'; -let lastLocationHashSet = null; +let lastLocationHashSet: string = null; // Parse the given window.location and return parameters that can be used when calling // MatrixChat.showScreen(screen, params) -function getScreenFromLocation(location) { +function getScreenFromLocation(location: Location) { const fragparts = parseQsFromFragment(location); return { screen: fragparts.location.substring(1), @@ -54,15 +55,15 @@ function getScreenFromLocation(location) { // Here, we do some crude URL analysis to allow // deep-linking. -function routeUrl(location) { +function routeUrl(location: Location) { if (!window.matrixChat) return; console.log("Routing URL ", location.href); const s = getScreenFromLocation(location); - window.matrixChat.showScreen(s.screen, s.params); + (window.matrixChat as MatrixChatType).showScreen(s.screen, s.params); } -function onHashChange(ev) { +function onHashChange(ev: HashChangeEvent) { if (decodeURIComponent(window.location.hash) === lastLocationHashSet) { // we just set this: no need to route it! return; @@ -72,8 +73,8 @@ function onHashChange(ev) { // This will be called whenever the SDK changes screens, // so a web page can update the URL bar appropriately. -function onNewScreen(screen) { - console.log("newscreen "+screen); +function onNewScreen(screen: string) { + console.log("newscreen " + screen); const hash = '#/' + screen; lastLocationHashSet = hash; window.location.hash = hash; @@ -88,7 +89,7 @@ function onNewScreen(screen) { // If we're in electron, we should never pass through a file:// URL otherwise // the identity server will try to 302 the browser to it, which breaks horribly. // so in that instance, hardcode to use riot.im/app for now instead. -function makeRegistrationUrl(params) { +function makeRegistrationUrl(params: object) { let url; if (window.location.protocol === "vector:") { url = 'https://riot.im/app/#/register'; @@ -121,8 +122,7 @@ function onTokenLoginCompleted() { const parsedUrl = url.parse(window.location.href); parsedUrl.search = ""; const formatted = url.format(parsedUrl); - console.log("Redirecting to " + formatted + " to drop loginToken " + - "from queryparams"); + console.log(`Redirecting to ${formatted} to drop loginToken from queryparams`); window.location.href = formatted; } diff --git a/src/vector/index.html b/src/vector/index.html index 85b6a1bd86..daa1290d97 100644 --- a/src/vector/index.html +++ b/src/vector/index.html @@ -49,7 +49,7 @@ <% } } %> - +
diff --git a/src/vector/index.ts b/src/vector/index.ts index c820587386..b3e25a5893 100644 --- a/src/vector/index.ts +++ b/src/vector/index.ts @@ -78,10 +78,7 @@ function checkBrowserFeatures() { return featureComplete; } -let acceptBrowser = checkBrowserFeatures(); -if (!acceptBrowser && window.localStorage) { - acceptBrowser = Boolean(window.localStorage.getItem("mx_accepts_unsupported_browser")); -} +const supportedBrowser = checkBrowserFeatures(); // React depends on Map & Set which we check for using modernizr's es6collections // if modernizr fails we may not have a functional react to show the error message. @@ -148,6 +145,11 @@ async function start() { // await things settling so that any errors we have to render have features like i18n running await settled(loadSkinPromise, loadThemePromise, loadLanguagePromise); + let acceptBrowser = supportedBrowser; + if (!acceptBrowser && window.localStorage) { + acceptBrowser = Boolean(window.localStorage.getItem("mx_accepts_unsupported_browser")); + } + // ########################## // error handling begins here // ########################## @@ -199,9 +201,23 @@ async function start() { ]); } } + start().catch(err => { console.error(err); - if (!acceptBrowser) { - // TODO redirect to static incompatible browser page - } + // show the static error in an iframe to not lose any context / console data + // with some basic styling to make the iframe full page + delete document.body.style.height; + const iframe = document.createElement("iframe"); + // @ts-ignore - typescript seems to only like the IE syntax for iframe sandboxing + iframe["sandbox"] = ""; + iframe.src = supportedBrowser ? "static/unable-to-load.html" : "static/incompatible-browser.html"; + iframe.style.width = "100%"; + iframe.style.height = "100%"; + iframe.style.position = "absolute"; + iframe.style.top = "0"; + iframe.style.left = "0"; + iframe.style.right = "0"; + iframe.style.bottom = "0"; + iframe.style.border = "0"; + document.getElementById("matrixchat").appendChild(iframe); }); diff --git a/src/vector/init.tsx b/src/vector/init.tsx index c7c9141ebf..82c5931bde 100644 --- a/src/vector/init.tsx +++ b/src/vector/init.tsx @@ -148,18 +148,16 @@ export async function loadApp(fragParams: {}) { export async function showError(title: string, messages?: string[]) { const ErrorView = (await import( /* webpackChunkName: "error-view" */ - /* webpackPreload: true */ - "../components/structures/ErrorView")).default; + "../async-components/structures/ErrorView")).default; window.matrixChat = ReactDOM.render(, document.getElementById('matrixchat')); } export async function showIncompatibleBrowser(onAccept) { - const CompatibilityPage = (await import( - /* webpackChunkName: "compatibility-page" */ - /* webpackPreload: true */ - "matrix-react-sdk/src/components/structures/CompatibilityPage")).default; - window.matrixChat = ReactDOM.render(, + const CompatibilityView = (await import( + /* webpackChunkName: "compatibility-view" */ + "../async-components/structures/CompatibilityView")).default; + window.matrixChat = ReactDOM.render(, document.getElementById('matrixchat')); } diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index aee9ee4930..4a07e202f7 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -390,7 +390,7 @@ export default class ElectronPlatform extends VectorBasePlatform { } getDefaultDeviceDisplayName(): string { - return _t('Riot Desktop on %(platformName)s', { platformName: platformFriendlyName() }); + return _t('Riot Desktop (%(platformName)s)', { platformName: platformFriendlyName() }); } screenCaptureErrorString(): ?string { diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index f89efad54d..b4a01f78c9 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -3,6 +3,7 @@ /* Copyright 2016 Aviral Dasgupta Copyright 2016 OpenMarket Ltd +Copyright 2017-2020 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -180,14 +181,27 @@ export default class WebPlatform extends VectorBasePlatform { getDefaultDeviceDisplayName(): string { // strip query-string and fragment from uri const u = url.parse(window.location.href); + u.protocol = ""; u.search = ""; u.hash = ""; - const appName = u.format(); + // Remove trailing slash if present + u.pathname = u.pathname.replace(/\/$/, ""); + + let appName = u.format(); + // Remove leading slashes if present + appName = appName.replace(/^\/\//, ""); + // `appName` is now in the format `riot.im/develop`. const ua = new UAParser(); const browserName = ua.getBrowser().name || "unknown browser"; - const osName = ua.getOS().name || "unknown os"; - return _t('%(appName)s via %(browserName)s on %(osName)s', {appName: appName, browserName: browserName, osName: osName}); + let osName = ua.getOS().name || "unknown OS"; + // Stylise the value from the parser to match Apple's current branding. + if (osName === "Mac OS") osName = "macOS"; + return _t('%(appName)s (%(browserName)s, %(osName)s)', { + appName, + browserName, + osName, + }); } screenCaptureErrorString(): ?string { diff --git a/src/vector/static/incompatible-browser.html b/src/vector/static/incompatible-browser.html new file mode 100644 index 0000000000..69287949e1 --- /dev/null +++ b/src/vector/static/incompatible-browser.html @@ -0,0 +1,492 @@ + + + + + + + + + + +
+
+ +

Unsupported browser

+
+
+
+
+

Your browser can't run Riot

+

Riot uses many advanced browser features, some of which are not available or experimental in your current browser.

+

Please install Chrome, Firefox, + or Safari for the best experience.

+
+
+
+ + +
+ + diff --git a/src/vector/static/unable-to-load.html b/src/vector/static/unable-to-load.html new file mode 100644 index 0000000000..f521965316 --- /dev/null +++ b/src/vector/static/unable-to-load.html @@ -0,0 +1,199 @@ + + + + + + + + + + + +
+ +
+ +
+
+ +

Unable to load

+
+
+
+
+

Riot can't load

+

Something went wrong and riot was unable to load.

+
+
+
+ +
+ + diff --git a/test/app-tests/loading-test.js b/test/app-tests/loading-test.js index 5418382df1..beb62270f4 100644 --- a/test/app-tests/loading-test.js +++ b/test/app-tests/loading-test.js @@ -28,7 +28,7 @@ import MatrixReactTestUtils from 'matrix-react-test-utils'; import * as jssdk from 'matrix-js-sdk'; import * as sdk from 'matrix-react-sdk'; import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg'; -import {VIEWS} from 'matrix-react-sdk/src/components/structures/MatrixChat'; +import {Views} from 'matrix-react-sdk/src/components/structures/MatrixChat'; import dis from 'matrix-react-sdk/src/dispatcher'; import * as test_utils from '../test-utils'; import MockHttpBackend from 'matrix-mock-request'; @@ -679,7 +679,7 @@ function assertAtLoadingSpinner(matrixChat) { } function awaitLoggedIn(matrixChat) { - if (matrixChat.state.view === VIEWS.LOGGED_IN) { + if (matrixChat.state.view === Views.LOGGED_IN) { return Promise.resolve(); } return new Promise(resolve => { @@ -704,7 +704,7 @@ function awaitRoomView(matrixChat, retryLimit, retryCount) { retryCount = 0; } - if (matrixChat.state.view !== VIEWS.LOGGED_IN || !matrixChat.state.ready) { + if (matrixChat.state.view !== Views.LOGGED_IN || !matrixChat.state.ready) { console.log(Date.now() + " Awaiting room view: not ready yet."); if (retryCount >= retryLimit) { throw new Error("MatrixChat still not ready after " + diff --git a/webpack.config.js b/webpack.config.js index 6c44587483..ee22819d3f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -19,6 +19,8 @@ module.exports = (env, argv) => { // This makes the sourcemaps human readable for developers. We use eval-source-map // because the plain source-map devtool ruins the alignment. development['devtool'] = 'eval-source-map'; + } else { + development['devtool'] = 'nosources-source-map'; } // Resolve the directories for the react-sdk and js-sdk for later use. We resolve these early so we @@ -335,6 +337,20 @@ module.exports = (env, argv) => { chunks: ['mobileguide'], }), + // These are the static error pages for when the javascript env is *really unsupported* + new HtmlWebpackPlugin({ + template: './src/vector/static/unable-to-load.html', + filename: 'static/unable-to-load.html', + minify: argv.mode === 'production', + chunks: [], + }), + new HtmlWebpackPlugin({ + template: './src/vector/static/incompatible-browser.html', + filename: 'static/incompatible-browser.html', + minify: argv.mode === 'production', + chunks: [], + }), + // This is the usercontent sandbox's entry point (separate for iframing) new HtmlWebpackPlugin({ template: './node_modules/matrix-react-sdk/src/usercontent/index.html', diff --git a/yarn.lock b/yarn.lock index a9205673c2..b27bdebbd9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,16 +2,6 @@ # yarn lockfile v1 -"7zip-bin@~5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.0.3.tgz#bc5b5532ecafd923a61f2fb097e3b108c0106a3f" - integrity sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA== - -"7zip@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" - integrity sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA= - "@babel/cli@^7.7.5": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" @@ -996,22 +986,6 @@ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@develar/schema-utils@~2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.1.0.tgz#eceb1695bfbed6f6bb84666d5d3abe5e1fd54e17" - integrity sha512-qjCqB4ctMig9Gz5bd6lkdFr3bO6arOdQqptdBSpF1ZpCnjofieCciEzkoS9ujY9cMGyllYSCSmBJ3x9OKHXzoA== - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -"@develar/schema-utils@~2.6.5": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" - integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== - dependencies: - ajv "^6.12.0" - ajv-keywords "^3.4.1" - "@jest/console@^24.7.1", "@jest/console@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" @@ -1173,18 +1147,6 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - "@types/babel__core@^7.1.0": version "7.1.7" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" @@ -1223,23 +1185,11 @@ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== -"@types/debug@^4.1.5": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" - integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== - "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== -"@types/fs-extra@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d" - integrity sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg== - dependencies: - "@types/node" "*" - "@types/glob@^7.1.1": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" @@ -1357,13 +1307,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^15.0.4": - version "15.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" - integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== - dependencies: - "@types/yargs-parser" "*" - "@typescript-eslint/experimental-utils@^2.5.0": version "2.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.27.0.tgz#801a952c10b58e486c9a0b36cf21e2aab1e9e01a" @@ -1647,13 +1590,6 @@ another-json@^0.2.0: resolved "https://registry.yarnpkg.com/another-json/-/another-json-0.2.0.tgz#b5f4019c973b6dd5c6506a2d93469cb6d32aeedc" integrity sha1-tfQBnJc7bdXGUGotk0acttMq7tw= -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -1733,106 +1669,11 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -app-builder-bin@3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.5.tgz#c83200dccd8df5ccb2a5adcd41b2a76bacfb531a" - integrity sha512-ZcHzJ9Xl+azPqdKzXZKdRZmkNmbxHHZyl4cbobNf8qMQpoPChpcov8riVrZSbu/0cT/JqJ8LOwJjy1OAwbChaQ== - -app-builder-bin@3.5.6: - version "3.5.6" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.6.tgz#61debd4531f60b07bd20296e7e0297b4a1f5f3b9" - integrity sha512-gY9ABoV5jh67IrPEwF81R8l9LwE3RqHUyU3rIKitwqMpKhplN5OZC6WEHOXO3XhwiLCIlr9LLI6OPhr3bmtQIg== - -app-builder-lib@22.4.1, app-builder-lib@~22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.4.1.tgz#9d73b2834e434fb65fc9571ae3fed3c1470b6915" - integrity sha512-epwUzIM+2pcdy/If9koTP74CKx4v7xGPj75a2Z5cM4rrGN9yVZ3eDUBbfF0e0qE4Qmcv5pd0BAZJ26bGm8NWsQ== - dependencies: - "7zip-bin" "~5.0.3" - "@develar/schema-utils" "~2.1.0" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.9" - builder-util "22.4.1" - builder-util-runtime "8.6.2" - chromium-pickle-js "^0.2.0" - debug "^4.1.1" - ejs "^3.0.1" - electron-publish "22.4.1" - fs-extra "^8.1.0" - hosted-git-info "^3.0.4" - is-ci "^2.0.0" - isbinaryfile "^4.0.4" - js-yaml "^3.13.1" - lazy-val "^1.0.4" - minimatch "^3.0.4" - normalize-package-data "^2.5.0" - read-config-file "5.0.2" - sanitize-filename "^1.6.3" - semver "^7.1.3" - temp-file "^3.3.7" - -app-builder-lib@22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.5.1.tgz#d1c53f6c3627029c850c46405dc40108d92b7619" - integrity sha512-VtB/PD8actR1317D/0uGzuJIYbpw4pRrfMB6IyTLwGynUd3ihqiCFjejVWHjCwopgCct2kE0MvLwo8P49xHIeQ== - dependencies: - "7zip-bin" "~5.0.3" - "@develar/schema-utils" "~2.6.5" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.9" - builder-util "22.5.1" - builder-util-runtime "8.7.0" - chromium-pickle-js "^0.2.0" - debug "^4.1.1" - ejs "^3.0.2" - electron-publish "22.5.1" - fs-extra "^9.0.0" - hosted-git-info "^3.0.4" - is-ci "^2.0.0" - isbinaryfile "^4.0.5" - js-yaml "^3.13.1" - lazy-val "^1.0.4" - minimatch "^3.0.4" - normalize-package-data "^2.5.0" - read-config-file "6.0.0" - sanitize-filename "^1.6.3" - semver "^7.1.3" - temp-file "^3.3.7" - aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0" - integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg== - dependencies: - archiver-utils "^2.1.0" - async "^2.6.3" - buffer-crc32 "^0.2.1" - glob "^7.1.4" - readable-stream "^3.4.0" - tar-stream "^2.1.0" - zip-stream "^2.1.2" - are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1975,17 +1816,12 @@ async-each@^1.0.0, async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-exit-hook@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" - integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^2.4.1, async@^2.6.2, async@^2.6.3: +async@^2.4.1, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -1997,11 +1833,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -2185,22 +2016,6 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" - integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird-lst@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" - integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== - dependencies: - bluebird "^3.5.5" - bluebird@^3.5.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -2249,20 +2064,6 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2426,11 +2227,6 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -2460,7 +2256,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.1.0, buffer@^5.4.3, buffer@^5.5.0: +buffer@^5.4.3: version "5.5.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== @@ -2468,62 +2264,6 @@ buffer@^5.1.0, buffer@^5.4.3, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builder-util-runtime@8.6.2: - version "8.6.2" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.6.2.tgz#8270e15b012d8d3b110f3e327b0fd8b0e07b1686" - integrity sha512-9QnIBISfhgQ2BxtRLidVqf/v5HD73vSKZDllpUmGd2L6VORGQk7cZAPmPtw4HQM3gPBelyVJ5yIjMNZ8xjmd1A== - dependencies: - debug "^4.1.1" - sax "^1.2.4" - -builder-util-runtime@8.7.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.0.tgz#e48ad004835c8284662e8eaf47a53468c66e8e8d" - integrity sha512-G1AqqVM2vYTrSFR982c1NNzwXKrGLQjVjaZaWQdn4O6Z3YKjdMDofw88aD9jpyK9ZXkrCxR0tI3Qe9wNbyTlXg== - dependencies: - debug "^4.1.1" - sax "^1.2.4" - -builder-util@22.4.1, builder-util@~22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.4.1.tgz#49cce9f06a62cdccda66d5efa82077040fa1f462" - integrity sha512-+ysLc7cC4w6P7rBxmZ5X2aU3QvcwFoWCl1us+mcUKdsGmJAtFUMPJqueeptdxjyPrPShIUOKHzA8uk5A3d1fHg== - dependencies: - "7zip-bin" "~5.0.3" - "@types/debug" "^4.1.5" - "@types/fs-extra" "^8.1.0" - app-builder-bin "3.5.5" - bluebird-lst "^1.0.9" - builder-util-runtime "8.6.2" - chalk "^3.0.0" - debug "^4.1.1" - fs-extra "^8.1.0" - is-ci "^2.0.0" - js-yaml "^3.13.1" - source-map-support "^0.5.16" - stat-mode "^1.0.0" - temp-file "^3.3.7" - -builder-util@22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.5.1.tgz#ad9a9178cf3561563ad1e36091413c194915c409" - integrity sha512-CelDTP3+fvDfZfbwy3PXif7mudPaWankJ8vrRg/NtCGvL+hXnwycnJZr46d5EQL7AgQcpJ27o9LTdfu61cxTFw== - dependencies: - "7zip-bin" "~5.0.3" - "@types/debug" "^4.1.5" - "@types/fs-extra" "^8.1.0" - app-builder-bin "3.5.6" - bluebird-lst "^1.0.9" - builder-util-runtime "8.7.0" - chalk "^3.0.0" - debug "^4.1.1" - fs-extra "^9.0.0" - is-ci "^2.0.0" - js-yaml "^3.13.1" - source-map-support "^0.5.16" - stat-mode "^1.0.0" - temp-file "^3.3.7" - builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -2599,19 +2339,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -2714,11 +2441,6 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== -chain-function@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" - integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg== - chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2834,11 +2556,6 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -chromium-pickle-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" - integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -2879,11 +2596,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -2930,13 +2642,6 @@ clone-regexp@^2.1.0: dependencies: is-regexp "^2.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3056,16 +2761,6 @@ component-emitter@^1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -compress-commons@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610" - integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^3.0.1" - normalize-path "^3.0.0" - readable-stream "^2.3.6" - compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -3116,18 +2811,6 @@ concurrently@^4.0.1: tree-kill "^1.2.1" yargs "^12.0.5" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" @@ -3276,21 +2959,6 @@ crc-32@^0.3.0: resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-0.3.0.tgz#6a3d3687f5baec41f7e9b99fe1953a2e5d19775e" integrity sha1-aj02h/W67EH36bmf4ZU6Ll0Zd14= -crc32-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" - integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== - dependencies: - crc "^3.4.4" - readable-stream "^3.4.0" - -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -3358,11 +3026,6 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" -cross-unzip@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/cross-unzip/-/cross-unzip-0.0.2.tgz#5183bc47a09559befcf98cc4657964999359372f" - integrity sha1-UYO8R6CVWb78+YzEZXlkmZNZNy8= - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -3380,11 +3043,6 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-blank-pseudo@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" @@ -3681,13 +3339,6 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - decompress-response@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" @@ -3725,11 +3376,6 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - define-properties@^1.1.2, define-properties@^1.1.3, define-properties@~1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -3867,19 +3513,6 @@ dir-glob@^2.2.2: dependencies: path-type "^3.0.0" -dmg-builder@22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.4.1.tgz#ab80d3d6e4ed8a1d38beddbfe97c8f7a794dd932" - integrity sha512-hEemh7n0zoVt7zPPwvn7iOttP03oENjJ4ApttPmt8oDnX8T4q42MjGWyDlLkPMplMJfoTxkkNqmm296f0OYM8Q== - dependencies: - app-builder-lib "~22.4.1" - bluebird-lst "^1.0.9" - builder-util "~22.4.1" - fs-extra "^8.1.0" - iconv-lite "^0.5.1" - js-yaml "^3.13.1" - sanitize-filename "^1.6.3" - dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -3921,13 +3554,6 @@ dom-converter@^0.2: dependencies: utila "~0.4" -dom-helpers@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" - dom-serializer@0, dom-serializer@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -4004,21 +3630,6 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -4047,91 +3658,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^3.0.1, ejs@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.0.2.tgz#745b01cdcfe38c1c6a2da3bbb2d9957060a31226" - integrity sha512-IncmUpn1yN84hy2shb0POJ80FWrfGNY0cxO9f4v+/sG7qcBvAtVWUA1IdzY/8EYUmOVhoKJVdJjNd3AZcnxOjA== - -electron-builder-squirrel-windows@^22.3.2: - version "22.5.1" - resolved "https://registry.yarnpkg.com/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-22.5.1.tgz#9f9cd4e4f41d769c48543276850e181c2f8f930f" - integrity sha512-s3y93NHxgnGLIjXzFiEA0fJMhTTqo6GphYqM3FONQUMum2PVaERQj4xSMJQZ5vm9G6iI9xgzpyc+mqVM/ZbQZQ== - dependencies: - app-builder-lib "22.5.1" - archiver "^3.1.1" - bluebird-lst "^1.0.9" - builder-util "22.5.1" - fs-extra "^9.0.0" - sanitize-filename "^1.6.3" - optionalDependencies: - "7zip-bin" "~5.0.3" - -electron-builder@^22.3.2: - version "22.4.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.4.1.tgz#7a7a2cbd9955c90cecc36de32ecba7f565265bab" - integrity sha512-13CjZcGeJS+c3EKRwFT/Oty5Niif5g1FwDioBLEbjkPCPQgxdtDsr+rJtCu9qxkiKDYpAoPS+t/clNk0efONvQ== - dependencies: - "@types/yargs" "^15.0.4" - app-builder-lib "22.4.1" - bluebird-lst "^1.0.9" - builder-util "22.4.1" - builder-util-runtime "8.6.2" - chalk "^3.0.0" - dmg-builder "22.4.1" - fs-extra "^8.1.0" - is-ci "^2.0.0" - lazy-val "^1.0.4" - read-config-file "5.0.2" - sanitize-filename "^1.6.3" - update-notifier "^4.1.0" - yargs "^15.1.0" - -electron-devtools-installer@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.4.tgz#261a50337e37121d338b966f07922eb4939a8763" - integrity sha512-b5kcM3hmUqn64+RUcHjjr8ZMpHS2WJ5YO0pnG9+P/RTdx46of/JrEjuciHWux6pE+On6ynWhHJF53j/EDJN0PA== - dependencies: - "7zip" "0.0.6" - cross-unzip "0.0.2" - rimraf "^2.5.2" - semver "^5.3.0" - -electron-notarize@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-0.2.1.tgz#759e8006decae19134f82996ed910db26d9192cc" - integrity sha512-oZ6/NhKeXmEKNROiFmRNfytqu3cxqC95sjooG7kBXQVEUSQkZnbiAhxVh5jXngL881G197pbwpeVPJyM7Ikmxw== - dependencies: - debug "^4.1.1" - fs-extra "^8.1.0" - -electron-publish@22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.4.1.tgz#a7fcf166786f7d5957f19a70ee8389f219769ba5" - integrity sha512-nwKNum3KXm+01rtWX2pc1jhazdzDy2zYnQx+zmXphZchjd6UOMX3ZN0xyZUCKugw5ZliflT6LkgbrcBXBtYD3A== - dependencies: - "@types/fs-extra" "^8.1.0" - bluebird-lst "^1.0.9" - builder-util "~22.4.1" - builder-util-runtime "8.6.2" - chalk "^3.0.0" - fs-extra "^8.1.0" - lazy-val "^1.0.4" - mime "^2.4.4" - -electron-publish@22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.5.1.tgz#04b3c90961226e687a588e743011b4b72cc6be56" - integrity sha512-g5bwLAHZT6A++yU1+Et+fncnFAdXXgkRao9rzTFAvhQ0QJBsmLiyOd0Ta2RI/EQcVoy6jyHtxFs7CWIXE5aZOA== - dependencies: - "@types/fs-extra" "^8.1.0" - bluebird-lst "^1.0.9" - builder-util "22.5.1" - builder-util-runtime "8.7.0" - chalk "^3.0.0" - fs-extra "^9.0.0" - lazy-val "^1.0.4" - mime "^2.4.4" - electron-to-chromium@^1.3.390: version "1.3.398" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.398.tgz#4c01e29091bf39e578ac3f66c1f157d92fa5725d" @@ -4160,15 +3686,15 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojibase-data@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/emojibase-data/-/emojibase-data-5.0.1.tgz#ce6fe36b4affd3578e0be8779211018a2fdae960" - integrity sha512-rYWlogJ2q5P78U8Xx1vhsXHcYKu1wFnr7+o6z9QHssZ1SsJLTCkJINZIPHRFWuDreAUK457TkqHpdOXElu0fzA== +emojibase-data@^4.0.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/emojibase-data/-/emojibase-data-4.2.1.tgz#3d1f0c69ddbb2ca7b7014f5e34654190802a40df" + integrity sha512-O0vxoPMgVkRq/uII/gdAjz9RwNv6ClJrd3J9QCCRC4btZRmeut/qohC/Fi+NNXUcjY08RWNTvxSnq/vij8hvrw== -emojibase-regex@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/emojibase-regex/-/emojibase-regex-4.0.1.tgz#a2cd4bbb42825422da9ec72f15e970bc2c90b46a" - integrity sha512-S42UHkFfz15i4NNz+wi9iMKFo+B6Kalc6PJLpYX0BUANViXw4vSyYZMFdBGRLduSabWHuEcTLZl9xOa2YP3eJw== +emojibase-regex@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/emojibase-regex/-/emojibase-regex-3.2.1.tgz#122935958c9a49c96bb29ac69ccbbac0b2e7022d" + integrity sha512-VAX2Rc2U/alu5q6P2cET2alzC63o1Uarm6Ea/b3ab+KOzxZT4JKmB0tCU1sTZvfNKa16KMLCK2k7hJBHJq4vWQ== emojis-list@^2.0.0: version "2.1.0" @@ -4192,7 +3718,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: 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== @@ -4297,11 +3823,6 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -5070,11 +4591,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -5086,25 +4602,6 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" - integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -5206,20 +4703,13 @@ get-stdin@^7.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -5296,13 +4786,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, gl once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" - integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== - dependencies: - ini "^1.3.5" - global-modules@2.0.0, global-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -5394,24 +4877,7 @@ gonzales-pe@^4.3.0: dependencies: minimist "^1.2.5" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -5507,11 +4973,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -5585,13 +5046,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -hosted-git-info@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" - integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== - dependencies: - lru-cache "^5.1.1" - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -5692,11 +5146,6 @@ http-cache-semantics@^3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -5802,13 +5251,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.1.tgz#b2425d3c7b18f7219f2ca663d103bddb91718d64" - integrity sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q== - dependencies: - safer-buffer ">= 2.1.2 < 3" - icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" @@ -5883,11 +5325,6 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-lazy@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" @@ -5939,7 +5376,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6307,14 +5744,6 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - is-ip@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-2.0.0.tgz#68eea07e8a0a0a94c2d080dd674c731ab2a461ab" @@ -6327,11 +5756,6 @@ is-map@^2.0.1: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - is-number-object@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" @@ -6385,11 +5809,6 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-path-inside@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== - is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -6498,11 +5917,6 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -6513,11 +5927,6 @@ isarray@^2.0.1, isarray@^2.0.5: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -isbinaryfile@^4.0.4, isbinaryfile@^4.0.5: - version "4.0.6" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" - integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -7064,11 +6473,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - json-loader@^0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" @@ -7116,7 +6520,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.1, json5@^2.1.2: +json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -7130,22 +6534,6 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -7164,13 +6552,6 @@ jsx-ast-utils@^2.2.3: array-includes "^3.0.3" object.assign "^4.1.0" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -7225,25 +6606,6 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -lazy-val@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65" - integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q== - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -7374,26 +6736,11 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -7434,11 +6781,6 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -7493,16 +6835,6 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -7518,7 +6850,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2: +make-dir@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== @@ -7610,8 +6942,8 @@ mathml-tag-names@^2.1.1: integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== "matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": - version "5.2.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/84637c6ebd442346623bce562b441e1093d40270" + version "6.0.0" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/f120533fadb309ac5dc8b2bcb6882e784ba93f18" dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" @@ -7632,8 +6964,8 @@ matrix-mock-request@^1.2.3: expect "^1.20.2" "matrix-react-sdk@github:matrix-org/matrix-react-sdk#develop": - version "2.3.1" - resolved "https://codeload.github.com/matrix-org/matrix-react-sdk/tar.gz/a26a3f58624d5e135104029a8bc9799df3962414" + version "2.5.0" + resolved "https://codeload.github.com/matrix-org/matrix-react-sdk/tar.gz/aa0c6f1f71a6122579c74f3cba3a7925f35131ac" dependencies: "@babel/runtime" "^7.8.3" blueimp-canvas-to-blob "^3.5.0" @@ -7645,8 +6977,8 @@ matrix-mock-request@^1.2.3: create-react-class "^15.6.0" diff-dom "^4.1.3" diff-match-patch "^1.0.4" - emojibase-data "^5.0.1" - emojibase-regex "^4.0.1" + emojibase-data "^4.0.2" + emojibase-regex "^3.0.0" escape-html "^1.0.3" file-saver "^1.3.3" filesize "3.5.6" @@ -7663,6 +6995,7 @@ matrix-mock-request@^1.2.3: matrix-js-sdk "github:matrix-org/matrix-js-sdk#develop" minimist "^1.2.0" pako "^1.0.5" + parse5 "^5.1.1" png-chunks-extract "^1.0.0" project-name-generator "^2.1.7" prop-types "^15.5.8" @@ -7670,7 +7003,6 @@ matrix-mock-request@^1.2.3: qrcode-react "^0.1.16" qs "^6.6.0" react "^16.9.0" - react-addons-css-transition-group "15.6.2" react-beautiful-dnd "^4.0.1" react-dom "^16.9.0" react-focus-lock "^2.2.1" @@ -7874,11 +7206,6 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - mimic-response@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" @@ -8225,7 +7552,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -8272,11 +7599,6 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - npm-bundled@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" @@ -8542,11 +7864,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -8638,16 +7955,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - pako@^1.0.5, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -8743,6 +8050,11 @@ parse5@5.1.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -9721,11 +9033,6 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" @@ -9805,7 +9112,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.4" -prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -9884,13 +9191,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" - integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== - dependencies: - escape-goat "^2.0.0" - q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -10025,13 +9325,6 @@ rc@1.2.8, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-addons-css-transition-group@15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-addons-css-transition-group/-/react-addons-css-transition-group-15.6.2.tgz#9e4376bcf40b5217d14ec68553081cee4b08a6d6" - integrity sha1-nkN2vPQLUhfRTsaFUwgc7ksIptY= - dependencies: - react-transition-group "^1.2.0" - react-beautiful-dnd@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-4.0.1.tgz#3b0a49bf6be75af351176c904f012611dd292b81" @@ -10109,17 +9402,6 @@ react-redux@^5.0.6: react-is "^16.6.0" react-lifecycles-compat "^3.0.0" -react-transition-group@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" - integrity sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q== - dependencies: - chain-function "^1.0.0" - dom-helpers "^3.2.0" - loose-envify "^1.3.1" - prop-types "^15.5.6" - warning "^3.0.0" - react@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" @@ -10136,29 +9418,6 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-config-file@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-5.0.2.tgz#55e005e5a447a9ce5806358d7b22cb7cefb6436d" - integrity sha512-tVt1lsiSjs+FtL/vtfCivqtKR1UNk3BB3uPJQvJqkgtAYDvZjo0xyXFYSVmzaTcO+Jdi5G7O2K2vDV+p1M/oug== - dependencies: - dotenv "^8.2.0" - dotenv-expand "^5.1.0" - fs-extra "^8.1.0" - js-yaml "^3.13.1" - json5 "^2.1.1" - lazy-val "^1.0.4" - -read-config-file@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.0.0.tgz#224b5dca6a5bdc1fb19e63f89f342680efdb9299" - integrity sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA== - dependencies: - dotenv "^8.2.0" - dotenv-expand "^5.1.0" - js-yaml "^3.13.1" - json5 "^2.1.2" - lazy-val "^1.0.4" - read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -10193,7 +9452,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -10206,7 +9465,7 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: +readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -10349,20 +9608,6 @@ registry-auth-token@4.0.0: rc "^1.2.8" safe-buffer "^5.0.1" -registry-auth-token@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" - integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - regjsgen@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" @@ -10585,13 +9830,6 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.15.1, resolve@^1.3. dependencies: path-parse "^1.0.6" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -10632,7 +9870,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -10728,13 +9966,6 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sanitize-filename@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - sanitize-html@^1.18.4, sanitize-html@^1.19.1: version "1.22.1" resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.22.1.tgz#5b36c92ab27917ddd2775396815c2bc1a6268310" @@ -10808,13 +10039,6 @@ selfsigned@^1.10.7: dependencies: node-forge "0.9.0" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -10830,11 +10054,6 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^7.1.3: - version "7.2.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.2.1.tgz#d997aa36bdbb00b501ae4ac4c7d17e9f7a587ae5" - integrity sha512-aHhm1pD02jXXkyIpq25qBZjr3CQgg8KST8uX0OWXch3xE6jw+1bfbWnCjzMwojsTquroUmKFHNzU6x26mEiRxw== - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -11260,11 +10479,6 @@ stack-utils@^1.0.1: resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== -stat-mode@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" - integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== - state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -11368,7 +10582,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== @@ -11671,17 +10885,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar-stream@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325" - integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q== - dependencies: - bl "^4.0.1" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -11695,19 +10898,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -temp-file@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a" - integrity sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g== - dependencies: - async-exit-hook "^2.0.1" - fs-extra "^8.1.0" - -term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== - terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -11836,11 +11026,6 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -11916,13 +11101,6 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= - dependencies: - utf8-byte-length "^1.0.1" - tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.11.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" @@ -11959,11 +11137,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -12105,13 +11278,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - unist-util-find-all-after@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz#5751a8608834f41d117ad9c577770c5f2f1b2899" @@ -12157,16 +11323,6 @@ unist-util-visit@^1.1.0: dependencies: unist-util-visit-parents "^2.0.0" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -12190,25 +11346,6 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" - integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - updates@^8.5.2: version "8.5.3" resolved "https://registry.yarnpkg.com/updates/-/updates-8.5.3.tgz#6397674fcfe9938deabbfa2f88dad717d756eebb" @@ -12242,13 +11379,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - url-parse@^1.4.3: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" @@ -12283,11 +11413,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -12440,13 +11565,6 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= - dependencies: - loose-envify "^1.0.0" - watchpack@^1.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" @@ -12686,13 +11804,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -12745,7 +11856,7 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0, write-file-atomic@^3.0.1: +write-file-atomic@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -12781,11 +11892,6 @@ x-is-string@^0.1.0: resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -12912,7 +12018,7 @@ yargs@^13.2.4, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.1.0, yargs@^15.3.1: +yargs@^15.3.1: version "15.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== @@ -12929,15 +12035,6 @@ yargs@^15.1.0, yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.1" -zip-stream@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.3.tgz#26cc4bdb93641a8590dd07112e1f77af1758865b" - integrity sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^2.1.1" - readable-stream "^3.4.0" - zxcvbn@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30"