From 245909c6efa98c4421e65d0b8bdb46a422dbb76f Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Wed, 10 Aug 2022 08:10:00 +0700 Subject: [PATCH] Add background script --- auto-imports.d.ts | 5 ++ package.json | 3 +- src/entries/background/main.ts | 40 +++++++++- src/entries/contentScript/main.ts | 22 +++--- src/entries/options/index.html | 2 +- src/entries/popup/index.html | 2 +- src/manifest.ts | 3 +- vite.config.ts | 18 ++++- yarn.lock | 119 +++++++++++++++++++++++++++++- 9 files changed, 196 insertions(+), 18 deletions(-) create mode 100644 auto-imports.d.ts diff --git a/auto-imports.d.ts b/auto-imports.d.ts new file mode 100644 index 000000000..4f8676349 --- /dev/null +++ b/auto-imports.d.ts @@ -0,0 +1,5 @@ +// Generated by 'unplugin-auto-import' +export {} +declare global { + const browser: typeof import('webextension-polyfill')['default'] +} diff --git a/package.json b/package.json index a7408dbd6..0e1c0a86f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "svelte-preprocess": "^4.9.8", "tslib": "^2.3.1", "typescript": "^4.4.4", + "unplugin-auto-import": "^0.11.1", "vite": "~2.9.0", "web-ext": "^6.6.0" }, @@ -38,8 +39,8 @@ "numeral": "^2.0.6", "svelte-windicss-preprocess": "^4.2.8", "tippy.js": "^6.3.7", - "vite-imagetools": "^4.0.4", "url-pattern": "^1.0.3", + "vite-imagetools": "^4.0.4", "webext-bridge": "^5.0.5", "webextension-polyfill": "^0.9.0", "windicss": "^3.5.6" diff --git a/src/entries/background/main.ts b/src/entries/background/main.ts index 8a080c1c7..8a501b246 100644 --- a/src/entries/background/main.ts +++ b/src/entries/background/main.ts @@ -1,5 +1,43 @@ -import browser from "webextension-polyfill"; +import * as browser from "webextension-polyfill"; +import { onMessage } from "webext-bridge"; browser.runtime.onInstalled.addListener(() => { console.log("Extension installed"); }); + +console.log(browser); + +const fetchBasicData = async () => { + const list = await fetch("https://api.coingecko.com/api/v3/search").then( + (response) => response.json() + ); + console.log(browser.storage); + browser.storage.local + .set({ coinList: JSON.stringify(list.coins) }) + .then(() => { + console.log("Loaded crypto list"); + }); +}; + +browser.runtime.onStartup.addListener(async () => { + console.log("onStartup...."); + await fetchBasicData(); +}); + +interface ICoinListInput { + limit: number; +} + +onMessage("coinList", async ({ data: { limit } }) => { + try { + const data = JSON.parse( + (await browser.storage.local.get("coinList")).coinList + ); + return data.slice(0, limit); + } catch (error) { + return []; + } +}); + +// Run on init +fetchBasicData(); diff --git a/src/entries/contentScript/main.ts b/src/entries/contentScript/main.ts index 17a710b4b..27038bea8 100644 --- a/src/entries/contentScript/main.ts +++ b/src/entries/contentScript/main.ts @@ -1,6 +1,6 @@ /* eslint-disable no-console */ // import { onMessage, sendMessage } from "webext-bridge"; -// import browser from "webextension-polyfill"; +import * as browser from "webextension-polyfill"; import Mark from "mark.js"; import "@webcomponents/webcomponentsjs/webcomponents-bundle.js"; import { coinGeko } from "./views/network"; @@ -11,6 +11,7 @@ import "./views/AddressHighlight.svelte"; import "./views/TrxHighlight.svelte"; import "./views/NativeTokenHighlight.svelte"; import { escapeRegex } from "./views/utils"; +import { sendMessage } from "webext-bridge"; const regexETHTrx = /0x[a-fA-F0-9]{64}/g; // TODO: Ignore longer address const regexETHAddress = /0x[a-fA-F0-9]{40}/g; // TODO: Solana, Near regex @@ -90,19 +91,24 @@ const getCoinList = async () => { // Firefox `browser.tabs.executeScript()` requires scripts return a primitive value (async () => { - // const coinList: { [key: string]: string | number }[] = - // (await sendMessage("coinList", { limit: 500 })) || []; + const coinList: { [key: string]: string | number }[] = + (await sendMessage("coinList", { limit: 500 })) || []; - const coinList = (await getCoinList()) || []; + console.log(coinList); + + // const coinList = (await getCoinList()) || []; const nameAndSymbolList: string[] = [ ...coinList.map((item: any) => item.symbol.toUpperCase()), ]; const regexNativeToken = new RegExp( - `\\b(${nameAndSymbolList.slice(0, 500).map(function (w) { - return escapeRegex(w); - }).join("|")})\\b`, + `\\b(${nameAndSymbolList + .slice(0, 500) + .map(function (w) { + return escapeRegex(w); + }) + .join("|")})\\b`, "g" ); @@ -205,8 +211,6 @@ const getCoinList = async () => { data.symbol === item.innerText || data.name === item.innerText ); - console.log("selectedItem: ", selectedItem) - // Inject address as props item.setAttribute("id", selectedItem?.id); item.setAttribute("name", item.innerText); diff --git a/src/entries/options/index.html b/src/entries/options/index.html index 34f0f444b..8cec1f570 100644 --- a/src/entries/options/index.html +++ b/src/entries/options/index.html @@ -8,7 +8,7 @@
- + diff --git a/src/entries/popup/index.html b/src/entries/popup/index.html index 03a9b09c2..fa2fd289f 100644 --- a/src/entries/popup/index.html +++ b/src/entries/popup/index.html @@ -8,7 +8,7 @@
- + diff --git a/src/manifest.ts b/src/manifest.ts index e23d12629..43c7ddc73 100644 --- a/src/manifest.ts +++ b/src/manifest.ts @@ -23,7 +23,7 @@ const sharedManifest = { page: "src/entries/options/index.html", open_in_tab: true, }, - permissions: [], + permissions: ["tabs", "storage", "activeTab", "http://*/", "https://*/"], }; const browserAction = { @@ -55,6 +55,7 @@ const ManifestV3 = { action: browserAction, background: { service_worker: "src/entries/background/serviceWorker.ts", + type: "module", }, host_permissions: ["*://*/*"], }; diff --git a/vite.config.ts b/vite.config.ts index 62296b3f4..97a654724 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,6 +5,9 @@ import path from "path"; import { getManifest } from "./src/manifest"; import { windi } from "svelte-windicss-preprocess"; import sveltePreprocess from "svelte-preprocess"; +import AutoImport from "unplugin-auto-import/vite"; + +console.log({ env: process.env.NODE_ENV }); // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { @@ -14,7 +17,7 @@ export default defineConfig(({ mode }) => { plugins: [ svelte({ preprocess: [sveltePreprocess(), windi({})], - exclude: ["*.normal.svelte"], + // exclude: ["*.normal.svelte"], compilerOptions: { customElement: true, }, @@ -22,11 +25,24 @@ export default defineConfig(({ mode }) => { webExtension({ manifest: getManifest(Number(env.MANIFEST_VERSION)), }), + AutoImport({ + imports: [ + { + "webextension-polyfill": [["default", "browser"]], + }, + ], + }), ], resolve: { alias: { "~": path.resolve(__dirname, "./src"), }, }, + build: { + sourcemap: true, // TODO: Change me for prod build + }, + optimizeDeps: { + include: ["webextension-polyfill"], + }, }; }); diff --git a/yarn.lock b/yarn.lock index 5690b54cd..124d20daf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,11 @@ dependencies: "@types/throttle-debounce" "^2.1.0" +"@antfu/utils@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.5.2.tgz#8c2d931ff927be0ebe740169874a3d4004ab414b" + integrity sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA== + "@babel/code-frame@^7.0.0": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" @@ -280,7 +285,7 @@ acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.7.0, acorn@^8.8.0: +acorn@^8.7.0, acorn@^8.7.1, acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== @@ -661,7 +666,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.4.1: +chokidar@^3.4.1, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -1256,6 +1261,11 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + eslint-plugin-no-unsanitized@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.1.tgz#e2343265467ba2270ade478cbe07bbafeaea412d" @@ -1445,7 +1455,7 @@ fast-glob@3.2.7: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.7: +fast-glob@^3.2.11, fast-glob@^3.2.7: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -2169,6 +2179,11 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== +jsonc-parser@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d" + integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -2292,6 +2307,11 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +local-pkg@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f" + integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg== + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -2485,6 +2505,15 @@ mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "^1.2.6" +mlly@^0.5.3, mlly@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-0.5.7.tgz#3b058c36268314a1670f89767d40eead66099b93" + integrity sha512-rz+n2i9862ymLH+UDlHpsuTVyCIAs+9WejS2De2VUlAKdpq8OJ9x/C2M7nNUMLEW1H+D6n0uZlpz8+tMGxCmyQ== + dependencies: + acorn "^8.8.0" + pathe "^0.3.3" + pkg-types "^0.3.3" + moment@^2.19.3: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" @@ -2777,6 +2806,11 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +pathe@^0.3.0, pathe@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.3.tgz#8d6d70a25d4db6024ed4d59e59c1bf80fcf18753" + integrity sha512-x3nrPvG0HDSDzUiJ0WqtzhN4MD+h5B+dFJ3/qyxVuARlr4Y3aJv8gri2cZzp9Z8sGs2a+aG9gNbKngh3gme57A== + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -2826,6 +2860,15 @@ pino@7.9.1: sonic-boom "^2.2.1" thread-stream "^0.13.0" +pkg-types@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-0.3.3.tgz#3c25e45274e1c586ec7811dcc3449afde846e463" + integrity sha512-6AJcCMnjUQPQv/Wk960w0TOmjhdjbeaQJoSKWRQv9N3rgkessCu6J0Ydsog/nw1MbpnxHuPzYbfOn2KmlZO1FA== + dependencies: + jsonc-parser "^3.0.0" + mlly "^0.5.3" + pathe "^0.3.0" + postcss@8.4.12: version "8.4.12" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" @@ -3160,6 +3203,11 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +scule@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/scule/-/scule-0.3.2.tgz#472445cecd8357165a94a067f78cee40e700b596" + integrity sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g== + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -3465,6 +3513,13 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +strip-literal@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-0.4.0.tgz#0f90e86daecc1eb23c61c62d25238ffad4524634" + integrity sha512-ql/sBDoJOybTKSIOWrrh8kgUEMjXMwRAkZTD0EwiwxQH/6tTPkZvMIEjp0CRlpi6V5FMiJyvxeRkEi1KrGISoA== + dependencies: + acorn "^8.7.1" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -3692,6 +3747,22 @@ unconfig@0.2.2: defu "^5.0.0" jiti "^1.12.9" +unimport@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/unimport/-/unimport-0.6.5.tgz#f50fcfcba6ee4228d649670b4bed2f63cb03ef96" + integrity sha512-B8x6+GiYUzDphN6Iaoshu99mUo8n7QCq13QTY2Z8saj1QBmGKXf+vJJlptfL3MdOmzxpve2Ikx91UZ4Qoz4dVQ== + dependencies: + "@rollup/pluginutils" "^4.2.1" + escape-string-regexp "^5.0.0" + fast-glob "^3.2.11" + local-pkg "^0.4.2" + magic-string "^0.26.2" + mlly "^0.5.7" + pathe "^0.3.3" + scule "^0.3.2" + strip-literal "^0.4.0" + unplugin "^0.8.1" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -3709,6 +3780,38 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unplugin-auto-import@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/unplugin-auto-import/-/unplugin-auto-import-0.11.1.tgz#c77b0e29890ea5efd013a6f893d436765462e9f0" + integrity sha512-3KMbjc3Sv2h1osgQ16uKmD2XHb8MLK3Lj5Twzo3x2vDexYdNKjVljLZUX+eT5cvh2f1VzJR77dkzDhdEi9+1uw== + dependencies: + "@antfu/utils" "^0.5.2" + "@rollup/pluginutils" "^4.2.1" + local-pkg "^0.4.2" + magic-string "^0.26.2" + unimport "^0.6.5" + unplugin "^0.9.0" + +unplugin@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-0.8.1.tgz#4517b6a8ec3d944e838f9c346921d9777cd159e1" + integrity sha512-o7rUZoPLG1fH4LKinWgb77gDtTE6mw/iry0Pq0Z5UPvZ9+HZ1/4+7fic7t58s8/CGkPrDpGq+RltO+DmswcR4g== + dependencies: + acorn "^8.8.0" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.4.4" + +unplugin@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-0.9.0.tgz#ebad287d61aa1b1f16de60feea74e8dd12224819" + integrity sha512-6o7q8Y9yxdPi5yCPmRuFfeNnVzGumRNZSK6hIkvZ6hd0cfigVdm0qBx/GgQ/NEjs54eUV1qTjvMYKRs9yh3rzw== + dependencies: + acorn "^8.8.0" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.4.4" + upath@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" @@ -3870,6 +3973,16 @@ webextension-polyfill@^0.9.0: resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.9.0.tgz#de6c1941d0ef1b0858b20e9c7b46bbc042c5a960" integrity sha512-LTtHb0yR49xa9irkstDxba4GATDAcDw3ncnFH9RImoFwDlW47U95ME5sn5IiQX2ghfaECaf6xyXM8yvClIBkkw== +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz#a19fcf371923c59c4712d63d7d194b1e4d8262cc" + integrity sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA== + when@3.7.7: version "3.7.7" resolved "https://registry.yarnpkg.com/when/-/when-3.7.7.tgz#aba03fc3bb736d6c88b091d013d8a8e590d84718"