diff --git a/.babelrc b/.babelrc index 3dfdfae..0d94d2b 100644 --- a/.babelrc +++ b/.babelrc @@ -1,6 +1,7 @@ { "presets": [ [ + // Latest stable ECMAScript features "@babel/preset-env", { "targets": { @@ -12,9 +13,15 @@ ] ], "plugins": [ + // Some transforms (such as object-rest-spread) + // don't work without it: https://github.com/babel/babel/issues/7215 + ["@babel/plugin-transform-destructuring", { "useBuiltIns": true }], + ["@babel/plugin-proposal-object-rest-spread", { "useBuiltIns": true }], [ + // Polyfills the runtime needed for async/await and generators "@babel/plugin-transform-runtime", { + "helpers": false, "regenerator": true } ] diff --git a/package.json b/package.json index 165edfa..81a8889 100644 --- a/package.json +++ b/package.json @@ -8,18 +8,20 @@ "author": "abhijithvijayan <34790378+abhijithvijayan@users.noreply.github.com>", "license": "MIT", "scripts": { - "dev:chrome": "cross-env NODE_ENV=development cross-env TARGET=chrome webpack --watch --mode=development", - "dev:firefox": "cross-env NODE_ENV=development cross-env TARGET=firefox webpack --watch --mode=development", - "dev:opera": "cross-env NODE_ENV=development cross-env TARGET=opera webpack --watch --mode=development", - "build:chrome": "cross-env NODE_ENV=production cross-env TARGET=chrome webpack --mode=production", - "build:firefox": "cross-env NODE_ENV=production cross-env TARGET=firefox webpack --mode=production", - "build:opera": "cross-env NODE_ENV=production cross-env TARGET=opera webpack --mode=production", + "dev:chrome": "cross-env NODE_ENV=development cross-env TARGET_BROWSER=chrome webpack --watch --mode=development", + "dev:firefox": "cross-env NODE_ENV=development cross-env TARGET_BROWSER=firefox webpack --watch --mode=development", + "dev:opera": "cross-env NODE_ENV=development cross-env TARGET_BROWSER=opera webpack --watch --mode=development", + "build:chrome": "cross-env NODE_ENV=production cross-env TARGET_BROWSER=chrome webpack --mode=production", + "build:firefox": "cross-env NODE_ENV=production cross-env TARGET_BROWSER=firefox webpack --mode=production", + "build:opera": "cross-env NODE_ENV=production cross-env TARGET_BROWSER=opera webpack --mode=production", "build": "yarn run build:chrome && yarn run build:firefox && yarn run build:opera", "lint": "eslint .", "lint:fix": "eslint . --fix" }, "devDependencies": { "@babel/core": "^7.6.4", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/plugin-transform-destructuring": "^7.6.0", "@babel/plugin-transform-runtime": "^7.6.2", "@babel/preset-env": "^7.6.3", "autoprefixer": "^9.7.0", @@ -30,10 +32,10 @@ "copy-webpack-plugin": "^5.0.4", "cross-env": "^6.0.3", "css-loader": "^3.2.0", - "eslint": "^6.5.1", + "eslint": "^6.6.0", "eslint-config-airbnb": "^18.0.1", - "eslint-config-onepass": "1.4.2", - "eslint-config-prettier": "^6.4.0", + "eslint-config-onepass": "1.4.3", + "eslint-config-prettier": "^6.5.0", "eslint-plugin-html": "^6.0.0", "eslint-plugin-import": "^2.18.2", "eslint-plugin-jsx-a11y": "^6.2.3", @@ -52,11 +54,13 @@ "webpack-cli": "^3.3.9", "webpack-dev-server": "^3.9.0", "webpack-fix-style-only-entries": "^0.4.0", + "write-webpack-plugin": "^1.1.0", "zip-webpack-plugin": "^3.0.0" }, "dependencies": { "@babel/runtime": "^7.6.3", "terser-webpack-plugin": "^2.2.1", - "webextension-polyfill": "^0.5.0" + "webextension-polyfill": "^0.5.0", + "wext-manifest": "^2.0.0" } } diff --git a/src/manifest/index.js b/src/manifest/index.js new file mode 100644 index 0000000..3917f85 --- /dev/null +++ b/src/manifest/index.js @@ -0,0 +1,61 @@ +const pkg = require('../../package.json'); + +const manifestInput = { + manifest_version: 2, + name: 'Sample WebExtension', + version: pkg.version, + + icons: { + '16': 'assets/icons/favicon-16.png', + '32': 'assets/icons/favicon-32.png', + '48': 'assets/icons/favicon-48.png', + '128': 'assets/icons/favicon-128.png', + }, + + description: 'Sample description', + homepage_url: 'https://github.com/abhijithvijayan/web-extension-starter', + short_name: 'Sample Name', + + permissions: ['tabs', 'storage', 'http://*/*', 'https://*/*'], + content_security_policy: "script-src 'self' 'unsafe-eval'; object-src 'self'", + + '__chrome|firefox__author': 'abhijithvijayan', + __opera__developer: { + name: 'abhijithvijayan', + }, + + __firefox__applications: { + gecko: { id: '{754FB1AD-CC3B-4856-B6A0-7786F8CA9D17}' }, + }, + + __chrome__minimum_chrome_version: '49', + __opera__minimum_opera_version: '36', + + browser_action: { + default_popup: 'popup.html', + default_icon: { + '16': 'assets/icons/favicon-16.png', + '32': 'assets/icons/favicon-32.png', + '48': 'assets/icons/favicon-48.png', + '128': 'assets/icons/favicon-128.png', + }, + default_title: 'tiny title', + '__chrome|opera__chrome_style': false, + __firefox__browser_style: false, + }, + + '__chrome|opera__options_page': 'options.html', + + options_ui: { + page: 'options.html', + open_in_tab: true, + __chrome__chrome_style: false, + }, + + background: { + scripts: ['js/background.bundle.js'], + '__chrome|opera__persistent': false, + }, +}; + +module.exports = manifestInput; diff --git a/src/manifests/chrome.json b/src/manifests/chrome.json deleted file mode 100644 index b88bace..0000000 --- a/src/manifests/chrome.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "Sample WebExtension", - "author": "abhijithvijayan", - "short_name": "Sample Name", - "description": "Sample description", - "homepage_url": "https://github.com/abhijithvijayan/web-extension-starter", - "manifest_version": 2, - "minimum_chrome_version": "49", - "permissions": ["tabs", "storage", "http://*/*", "https://*/*"], - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", - "icons": { - "16": "assets/icons/favicon-16.png", - "32": "assets/icons/favicon-32.png", - "48": "assets/icons/favicon-48.png", - "128": "assets/icons/favicon-128.png" - }, - "browser_action": { - "default_popup": "popup.html", - "default_icon": { - "16": "assets/icons/favicon-16.png", - "32": "assets/icons/favicon-32.png", - "48": "assets/icons/favicon-48.png", - "128": "assets/icons/favicon-128.png" - }, - "default_title": "tiny title", - "chrome_style": false - }, - "options_page": "options.html", - "options_ui": { - "page": "options.html", - "chrome_style": false, - "open_in_tab": true - } -} diff --git a/src/manifests/firefox.json b/src/manifests/firefox.json deleted file mode 100644 index 8f91f7b..0000000 --- a/src/manifests/firefox.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "Sample WebExtension", - "author": "abhijithvijayan", - "short_name": "Sample Name", - "description": "Sample description", - "homepage_url": "https://github.com/abhijithvijayan/kutt-extension", - "manifest_version": 2, - "permissions": ["tabs", "storage", "http://*/*", "https://*/*"], - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", - "icons": { - "16": "assets/icons/favicon-16.png", - "32": "assets/icons/favicon-32.png", - "48": "assets/icons/favicon-48.png", - "128": "assets/icons/favicon-128.png" - }, - "browser_action": { - "default_popup": "popup.html", - "default_icon": { - "16": "assets/icons/favicon-16.png", - "32": "assets/icons/favicon-32.png", - "48": "assets/icons/favicon-48.png", - "128": "assets/icons/favicon-128.png" - }, - "default_title": "tiny title", - "browser_style": false - }, - "options_ui": { - "page": "options.html", - "open_in_tab": true - } -} diff --git a/src/manifests/opera.json b/src/manifests/opera.json deleted file mode 100644 index f1f9ffd..0000000 --- a/src/manifests/opera.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "Sample WebExtension", - "developer": { - "name": "abhijithvijayan" - }, - "short_name": "Sample Name", - "description": "Sample description", - "homepage_url": "https://github.com/abhijithvijayan/web-extension-starter", - "manifest_version": 2, - "minimum_opera_version": "36", - "permissions": ["tabs", "storage", "http://*/*", "https://*/*"], - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", - "icons": { - "16": "assets/icons/favicon-16.png", - "32": "assets/icons/favicon-32.png", - "48": "assets/icons/favicon-48.png", - "128": "assets/icons/favicon-128.png" - }, - "browser_action": { - "default_popup": "popup.html", - "default_icon": { - "16": "assets/icons/favicon-16.png", - "32": "assets/icons/favicon-32.png", - "48": "assets/icons/favicon-48.png", - "128": "assets/icons/favicon-128.png" - }, - "default_title": "tiny title", - "chrome_style": false - }, - "options_page": "options.html", - "options_ui": { - "page": "options.html", - "open_in_tab": true - } -} diff --git a/webpack.config.js b/webpack.config.js index 5814fbf..8ab5091 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,12 +1,29 @@ const path = require('path'); const webpack = require('webpack'); +const wextManifest = require('wext-manifest'); const ZipPlugin = require('zip-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); +const WriteWebpackPlugin = require('write-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const FixStyleOnlyEntriesPlugin = require('webpack-fix-style-only-entries'); +const manifestInput = require('./src/manifest'); + +const targetBrowser = process.env.TARGET_BROWSER; +const manifest = wextManifest[targetBrowser](manifestInput); + +const getExtensionFileType = () => { + if (targetBrowser === 'opera') { + return 'crx'; + } + if (targetBrowser === 'firefox') { + return 'xpi'; + } + return 'zip'; +}; + module.exports = { mode: 'development', @@ -19,7 +36,7 @@ module.exports = { output: { filename: 'js/[name].bundle.js', - path: path.resolve(__dirname, 'extension', process.env.TARGET), + path: path.resolve(__dirname, 'extension', targetBrowser), }, plugins: [ @@ -27,32 +44,12 @@ module.exports = { new FixStyleOnlyEntriesPlugin({ silent: true }), new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: [ - path.join(process.cwd(), `extension/${process.env.TARGET}`), - path.join(process.cwd(), `extension/${process.env.TARGET}.zip`), + path.join(process.cwd(), `extension/${targetBrowser}`), + path.join(process.cwd(), `extension/${targetBrowser}.${getExtensionFileType()}`), ], cleanStaleWebpackAssets: false, verbose: true, }), - new CopyWebpackPlugin([ - { from: 'src/assets', to: 'assets' }, - { - from: `src/manifests/${process.env.TARGET}.json`, - transform(content, path) { - // generates the manifest file using the package.json informations - return Buffer.from( - JSON.stringify({ - version: process.env.npm_package_version, - background: { - persistent: false, - scripts: ['js/background.bundle.js'], - }, - ...JSON.parse(content.toString()), - }) - ); - }, - to: 'manifest.json', - }, - ]), new HtmlWebpackPlugin({ template: 'src/options.html', // inject: false, @@ -65,6 +62,8 @@ module.exports = { chunks: ['popup'], filename: 'popup.html', }), + new CopyWebpackPlugin([{ from: 'src/assets', to: 'assets' }]), + new WriteWebpackPlugin([{ name: manifest.name, data: Buffer.from(manifest.content) }]), ], module: { @@ -128,7 +127,8 @@ module.exports = { }), new ZipPlugin({ path: path.resolve(__dirname, 'extension'), - filename: `${process.env.TARGET}.zip`, + extension: `${getExtensionFileType()}`, + filename: `${targetBrowser}`, }), ], }, diff --git a/yarn.lock b/yarn.lock index cac74c4..fc3f2b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -954,10 +954,12 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" + integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== + dependencies: + type-fest "^0.5.2" ansi-html@0.0.7: version "0.0.7" @@ -1732,12 +1734,12 @@ clean-webpack-plugin@^3.0.0: "@types/webpack" "^4.4.31" del "^4.1.1" -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - restore-cursor "^2.0.0" + restore-cursor "^3.1.0" cli-width@^2.0.0: version "2.2.0" @@ -2479,6 +2481,11 @@ emoji-regex@^7.0.1, emoji-regex@^7.0.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -2617,15 +2624,15 @@ eslint-config-airbnb@^18.0.1: object.assign "^4.1.0" object.entries "^1.1.0" -eslint-config-onepass@1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-config-onepass/-/eslint-config-onepass-1.4.2.tgz#46b684db51e8fc155b47ab001f5cccddc05cdbc9" - integrity sha512-mdjLX51GJF5Vj+blRv8D6cjcBowUQXUr7t82jVnhQlDXJfdkgam85jgH2xJ9QKaCopWdM0NAnpX11UkurGfWGw== +eslint-config-onepass@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-config-onepass/-/eslint-config-onepass-1.4.3.tgz#0d89d8858fe9b50f6762768f80278a61e7bd5014" + integrity sha512-lRyt8S9l/rvwcgVZNxAlLMKqQAoqgQa6BXab0HTRyB8Y63YtuttfEYtw65YmJuLVbj/Iwg/THAt3XuIRudWsiQ== -eslint-config-prettier@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz#0a04f147e31d33c6c161b2dd0971418ac52d0477" - integrity sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w== +eslint-config-prettier@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.5.0.tgz#aaf9a495e2a816865e541bfdbb73a65cc162b3eb" + integrity sha512-cjXp8SbO9VFGW/Z7mbTydqS9to8Z58E5aYhj3e1+Hx7lS9s6gL5ILKNpCqZAFOVYRcSkWPFYljHrEh8QFEK5EQ== dependencies: get-stdin "^6.0.0" @@ -2727,7 +2734,7 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.4.2: +eslint-utils@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== @@ -2739,10 +2746,10 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.5.1.tgz#828e4c469697d43bb586144be152198b91e96ed6" - integrity sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A== +eslint@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.6.0.tgz#4a01a2fb48d32aacef5530ee9c5a78f11a8afd04" + integrity sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -2751,9 +2758,9 @@ eslint@^6.5.1: debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" - eslint-utils "^1.4.2" + eslint-utils "^1.4.3" eslint-visitor-keys "^1.1.0" - espree "^6.1.1" + espree "^6.1.2" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" @@ -2763,7 +2770,7 @@ eslint@^6.5.1: ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.4.1" + inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" @@ -2782,7 +2789,7 @@ eslint@^6.5.1: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.1: +espree@^6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== @@ -3021,10 +3028,10 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== dependencies: escape-string-regexp "^1.0.5" @@ -3806,22 +3813,22 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@^6.4.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== +inquirer@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" + integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== dependencies: - ansi-escapes "^3.2.0" + ansi-escapes "^4.2.1" chalk "^2.4.2" - cli-cursor "^2.1.0" + cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" run-async "^2.2.0" rxjs "^6.4.0" - string-width "^2.1.0" + string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" @@ -3999,6 +4006,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -4349,7 +4361,7 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@~4.17.10: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -4562,12 +4574,7 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -4713,10 +4720,10 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1, nan@^2.13.2: version "2.14.0" @@ -5093,12 +5100,12 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: - mimic-fn "^1.0.0" + mimic-fn "^2.1.0" opn@^5.5.0: version "5.5.0" @@ -6047,12 +6054,12 @@ resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5. dependencies: path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - onetime "^2.0.0" + onetime "^5.1.0" signal-exit "^3.0.2" ret@~0.1.10: @@ -6609,7 +6616,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -6626,6 +6633,15 @@ 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.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" + integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^5.2.0" + string.prototype.trimleft@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" @@ -6936,6 +6952,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" + integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== + 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" @@ -7301,6 +7322,11 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== +wext-manifest@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wext-manifest/-/wext-manifest-2.0.0.tgz#8e0a7f08ea72395f070a5407b96d297e7b9c7529" + integrity sha512-LraoRQgJr0622/DVjIxxf0y8DU3V2j0WmglqDaWK6b1vpzvIxQZIBZPvMovveU7SYkKtLrXJdTUDf0FwGbkZWg== + which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -7366,6 +7392,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write-webpack-plugin@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/write-webpack-plugin/-/write-webpack-plugin-1.1.0.tgz#ac60a7fcbc149a8cc33a465420fbdf2f612e9af9" + integrity sha512-/E04VeJtHiOW02ET68yy38KRSOJTtvMFvAV3pLLgtYJWuhhNRQypPQWUsYzChndkRtedspqydOCG134AZZqBaA== + write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"