diff --git a/desktop/flipper-frontend-core/src/globalObject.tsx b/desktop/flipper-frontend-core/src/globalObject.tsx index 105f2a6f2..8489daf8f 100644 --- a/desktop/flipper-frontend-core/src/globalObject.tsx +++ b/desktop/flipper-frontend-core/src/globalObject.tsx @@ -21,11 +21,21 @@ export interface GlobalObject { antdesign_icons: any; } +declare module globalThis { + let React: any; + let ReactDOM: any; + let ReactDOMClient: any; + let ReactIs: any; + let Flipper: any; + let FlipperPlugin: any; + let Immer: any; + let antd: any; + let emotion_styled: any; + let antdesign_icons: any; +} + export const setGlobalObject = (replacements: GlobalObject) => { - const globalObject = (function (this: any) { - return this; - })(); for (const [name, module] of Object.entries(replacements)) { - globalObject[name] = module; + globalThis[name as keyof GlobalObject] = module; } }; diff --git a/desktop/flipper-server-companion/src/initializeRenderHost.tsx b/desktop/flipper-server-companion/src/initializeRenderHost.tsx index a33caefa7..f9b4b08f6 100644 --- a/desktop/flipper-server-companion/src/initializeRenderHost.tsx +++ b/desktop/flipper-server-companion/src/initializeRenderHost.tsx @@ -14,7 +14,7 @@ export function initializeRenderHost( flipperServer: FlipperServer, flipperServerConfig: FlipperServerConfig, ) { - FlipperRenderHostInstance = { + globalThis.FlipperRenderHostInstance = { readTextFromClipboard() { // TODO: return undefined; @@ -83,8 +83,6 @@ export function initializeRenderHost( } function getDefaultPluginsIndex() { - // @ts-ignore - // eslint-disable-next-line import/no-unresolved - const index = require('./defaultPlugins'); - return index.default || index; + // TODO: Fix me + return {}; } diff --git a/desktop/flipper-server-core/package.json b/desktop/flipper-server-core/package.json index a3e372620..93807e2f5 100644 --- a/desktop/flipper-server-core/package.json +++ b/desktop/flipper-server-core/package.json @@ -27,7 +27,7 @@ "invariant": "^2.2.4", "js-base64": "^3.7.2", "lodash.memoize": "^4.1.2", - "node-fetch": "^3.2.4", + "node-fetch": "2", "node-forge": "^0.10.0", "open": "^8.3.0", "openssl-wrapper": "^0.3.4", @@ -46,12 +46,13 @@ "xdg-basedir": "^4.0.0" }, "devDependencies": { + "@types/archiver": "^5.3.1", "@types/express": "^4.17.13", "@types/http-proxy": "^1.17.8", - "@types/archiver": "^5.3.1", "@types/invariant": "^2.2.35", "@types/memorystream": "^0.3.0", "@types/node": "^17.0.31", + "@types/node-fetch": "2", "@types/node-forge": "^0.10", "@types/rimraf": "^3.0.2", "@types/rsocket-core": "^0.0.7", @@ -60,10 +61,10 @@ "@types/tmp": "^0.2.3", "@types/which": "^2.0.1", "@types/ws": "^8.5.3", - "memorystream": "^0.3.1", "exit-hook": "^2.1.1", + "express": "^4.17.3", "http-proxy": "^1.18.1", - "express": "^4.17.3" + "memorystream": "^0.3.1" }, "peerDependencies": {}, "scripts": { diff --git a/desktop/flipper-server-core/src/plugins/fb-stubs/pluginMarketplaceAPI.tsx b/desktop/flipper-server-core/src/plugins/fb-stubs/pluginMarketplaceAPI.tsx index 12934bb05..eeeb38590 100644 --- a/desktop/flipper-server-core/src/plugins/fb-stubs/pluginMarketplaceAPI.tsx +++ b/desktop/flipper-server-core/src/plugins/fb-stubs/pluginMarketplaceAPI.tsx @@ -8,6 +8,7 @@ */ import {FlipperServer, MarketplacePluginDetails} from 'flipper-common'; +import fetch from 'node-fetch'; export async function loadAvailablePlugins( server: FlipperServer, diff --git a/desktop/flipper-server/server.js b/desktop/flipper-server/server.js index 196636018..1ddc9381f 100755 --- a/desktop/flipper-server/server.js +++ b/desktop/flipper-server/server.js @@ -8,9 +8,5 @@ * @format */ -/* eslint-disable */ - -// flipper-server uses the same infra & babel transforms as Electron -// to make sure our own sources are bundled up, but node modules arent -global.electronRequire = require; -require('./dist/index.js'); +// eslint-disable-next-line import/no-unresolved +require('./lib/index.js'); diff --git a/desktop/flipper-server/src/electronRequire.tsx b/desktop/flipper-server/src/electronRequire.tsx new file mode 100644 index 000000000..ec76d9644 --- /dev/null +++ b/desktop/flipper-server/src/electronRequire.tsx @@ -0,0 +1,11 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +// @ts-expect-error +global.electronRequire = require; diff --git a/desktop/flipper-server/src/fb-stubs.tsx b/desktop/flipper-server/src/fb-stubs.tsx new file mode 100644 index 000000000..784f22324 --- /dev/null +++ b/desktop/flipper-server/src/fb-stubs.tsx @@ -0,0 +1,34 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import Module from 'module'; + +Module.prototype.require = new Proxy(Module.prototype.require, { + apply(target, thisArg, argumentsList) { + const name = argumentsList[0]; + + if ( + process.env.FLIPPER_FORCE_PUBLIC_BUILD !== 'true' && + typeof name === 'string' && + name.includes('fb-stubs') + ) { + const replacement = name.replace('/fb-stubs/', '/fb/'); + try { + return Reflect.apply(target, thisArg, [ + replacement, + argumentsList.slice(1), + ]); + } catch { + return Reflect.apply(target, thisArg, argumentsList); + } + } + + return Reflect.apply(target, thisArg, argumentsList); + }, +}); diff --git a/desktop/flipper-server/src/index.tsx b/desktop/flipper-server/src/index.tsx index 47664a2c4..5c5f425b0 100644 --- a/desktop/flipper-server/src/index.tsx +++ b/desktop/flipper-server/src/index.tsx @@ -7,6 +7,8 @@ * @format */ +import './fb-stubs'; +import './electronRequire'; import process from 'process'; import chalk from 'chalk'; import path from 'path'; diff --git a/desktop/scripts/build-flipper-server-release.tsx b/desktop/scripts/build-flipper-server-release.tsx index 50357ea52..ea16733db 100644 --- a/desktop/scripts/build-flipper-server-release.tsx +++ b/desktop/scripts/build-flipper-server-release.tsx @@ -16,8 +16,9 @@ import { genMercurialRevision, getVersionNumber, prepareDefaultPlugins, - prepareHeadlessPlugins, + buildHeadlessPlugins, moveServerSourceMaps, + buildServerAddOns, } from './build-utils'; import {defaultPluginsDir, distDir, serverDir, staticDir} from './paths'; import isFB from './isFB'; @@ -217,7 +218,7 @@ async function copyStaticResources(outDir: string, versionNumber: string) { console.log(`⚙️ Copying package resources...`); // static folder, without the things that are only for Electron - const packageFilesToCopy = ['README.md', 'package.json', 'server.js', 'dist']; + const packageFilesToCopy = ['README.md', 'package.json', 'server.js', 'lib']; await Promise.all( packageFilesToCopy.map((e) => @@ -352,8 +353,9 @@ async function buildServerRelease() { // create plugin output dir await fs.mkdirp(path.join(dir, 'static', 'defaultPlugins')); - await prepareDefaultPlugins(argv.channel === 'insiders'); - await prepareHeadlessPlugins(); + await prepareDefaultPlugins(argv.channel === 'insiders', true); + await buildServerAddOns(false); + await buildHeadlessPlugins(false); await compileServerMain(false); await copyStaticResources(dir, versionNumber); await downloadIcons(path.join(dir, 'static')); diff --git a/desktop/scripts/build-utils.tsx b/desktop/scripts/build-utils.tsx index 65e212781..5603e6201 100644 --- a/desktop/scripts/build-utils.tsx +++ b/desktop/scripts/build-utils.tsx @@ -16,7 +16,7 @@ import MetroResolver from 'metro-resolver'; import tmp from 'tmp'; import path from 'path'; import fs from 'fs-extra'; -import {spawn} from 'promisify-child-process'; +import {spawn, exec} from 'promisify-child-process'; import { getWatchFolders, runBuild, @@ -37,7 +37,6 @@ import { rootDir, browserUiDir, serverCoreDir, - serverCompanionDir, } from './paths'; import pFilter from 'p-filter'; import child from 'child_process'; @@ -76,7 +75,10 @@ export function die(err: Error) { process.exit(1); } -export async function prepareDefaultPlugins(isInsidersBuild: boolean = false) { +export async function prepareDefaultPlugins( + isInsidersBuild: boolean = false, + flipperServerBuild = false, +) { console.log( `⚙️ Preparing default plugins (isInsidersBuild=${isInsidersBuild})...`, ); @@ -105,18 +107,29 @@ export async function prepareDefaultPlugins(isInsidersBuild: boolean = false) { await buildDefaultPlugins(defaultPlugins); await generateDefaultPluginEntryPoints([]); // calling it here just to generate empty indexes } else { - await generateDefaultPluginEntryPoints(defaultPlugins); + await generateDefaultPluginEntryPoints( + defaultPlugins, + flipperServerBuild, + ); } } console.log('✅ Prepared default plugins.'); } -export async function prepareHeadlessPlugins() { - console.log(`⚙️ Preparing headless plugins...`); +export async function buildHeadlessPlugins(dev: boolean) { + console.log(`⚙️ Building headless plugins...`); const sourcePlugins = await getSourcePlugins(); const headlessPlugins = sourcePlugins.filter((p) => p.headless); - await generateHeadlessPluginEntryPoints(headlessPlugins); - console.log('✅ Prepared headless plugins.'); + await Promise.all(headlessPlugins.map((p) => runBuild(p.dir, dev))); + console.log('✅ Built headless plugins.'); +} + +export async function buildServerAddOns(dev: boolean) { + console.log(`⚙️ Building plugins with server add-ons plugins...`); + const sourcePlugins = await getSourcePlugins(); + const serverAddOns = sourcePlugins.filter((p) => p.serverAddOnSource); + await Promise.all(serverAddOns.map((p) => runBuild(p.dir, dev))); + console.log('✅ Built plugins with server add-ons plugins.'); } function getGeneratedIndex(pluginRequires: string) { @@ -142,6 +155,7 @@ function getGeneratedIndex(pluginRequires: string) { async function generateDefaultPluginEntryPoints( defaultPlugins: InstalledPluginDetails[], + flipperServerBuild?: boolean, ) { console.log( `⚙️ Generating entry points for ${defaultPlugins.length} bundled plugins...`, @@ -181,9 +195,9 @@ async function generateDefaultPluginEntryPoints( generatedIndex, ); - const serverAddOns = defaultPlugins.filter( - ({serverAddOnSource}) => !!serverAddOnSource, - ); + const serverAddOns = flipperServerBuild + ? [] + : defaultPlugins.filter(({serverAddOnSource}) => !!serverAddOnSource); const serverAddOnRequires = serverAddOns .map( (x) => @@ -200,28 +214,6 @@ async function generateDefaultPluginEntryPoints( console.log('✅ Generated bundled plugin entry points.'); } -async function generateHeadlessPluginEntryPoints( - headlessPlugins: InstalledPluginDetails[], -) { - console.log( - `⚙️ Generating entry points for ${headlessPlugins.length} headless plugins...`, - ); - const headlessRequires = headlessPlugins - .map( - (x) => - ` '${x.name}': tryRequire('${x.name}', () => require('${x.name}'))`, - ) - .join(',\n'); - const generatedIndexHeadless = getGeneratedIndex(headlessRequires); - await fs.ensureDir(path.join(serverCompanionDir, 'src', 'defaultPlugins')); - await fs.writeFile( - path.join(serverCompanionDir, 'src', 'defaultPlugins', 'index.tsx'), - generatedIndexHeadless, - ); - - console.log('✅ Generated headless plugin entry points.'); -} - async function buildDefaultPlugins(defaultPlugins: InstalledPluginDetails[]) { if (process.env.FLIPPER_NO_REBUILD_PLUGINS) { console.log( @@ -468,40 +460,7 @@ export function genMercurialRevision(): Promise { } export async function compileServerMain(dev: boolean) { - await fs.promises.mkdir(path.join(serverDir, 'dist'), {recursive: true}); - const out = path.join(serverDir, 'dist', 'index.js'); - console.log('⚙️ Compiling server bundle...'); - const config = Object.assign({}, await Metro.loadConfig(), { - reporter: {update: () => {}}, - projectRoot: rootDir, - transformer: { - babelTransformerPath: path.join( - babelTransformationsDir, - 'transform-server-' + (dev ? 'dev' : 'prod'), - ), - ...minifierConfig, - }, - resolver: { - // no 'mjs' / 'module'; it caused issues - sourceExts: ['tsx', 'ts', 'js', 'json', 'cjs'], - resolverMainFields: ['flipperBundlerEntry', 'main'], - resolveRequest(context: any, moduleName: string, ...rest: any[]) { - assertSaneImport(context, moduleName); - return defaultResolve(context, moduleName, ...rest); - }, - }, - }); - await Metro.runBuild(config, { - platform: 'node', - entry: path.join(serverDir, 'src', 'index.tsx'), - out, - dev, - minify: false, // !dev, - sourceMap: true, - sourceMapUrl: dev ? 'index.map' : undefined, - inlineSourceMap: false, - resetCache: !dev, - }); + await exec(`cd ${serverDir} && yarn build`); console.log('✅ Compiled server bundle.'); } @@ -611,7 +570,6 @@ export async function launchServer( if (proc) { console.log('⚙️ Killing old flipper-server...'); proc.kill(9); - await sleep(1000); } console.log('⚙️ Launching flipper-server...'); proc = child.spawn( diff --git a/desktop/scripts/generate-plugin-entry-points.tsx b/desktop/scripts/generate-plugin-entry-points.tsx index 79b3c0e8d..52d46fd5a 100644 --- a/desktop/scripts/generate-plugin-entry-points.tsx +++ b/desktop/scripts/generate-plugin-entry-points.tsx @@ -9,11 +9,9 @@ /* eslint-disable flipper/no-console-error-without-context */ -import {prepareDefaultPlugins, prepareHeadlessPlugins} from './build-utils'; +import {prepareDefaultPlugins} from './build-utils'; -Promise.all([prepareDefaultPlugins(), prepareHeadlessPlugins()]).catch( - (err) => { - console.error(err); - process.exit(1); - }, -); +prepareDefaultPlugins().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/desktop/scripts/start-dev-server.tsx b/desktop/scripts/start-dev-server.tsx index 3458214ad..ae47003a0 100644 --- a/desktop/scripts/start-dev-server.tsx +++ b/desktop/scripts/start-dev-server.tsx @@ -23,7 +23,7 @@ import {hostname} from 'os'; import { compileMain, prepareDefaultPlugins, - prepareHeadlessPlugins, + buildHeadlessPlugins, } from './build-utils'; import Watchman from './watchman'; // @ts-ignore no typings for metro @@ -445,7 +445,7 @@ function checkDevServer() { await prepareDefaultPlugins( process.env.FLIPPER_RELEASE_CHANNEL === 'insiders', ); - await prepareHeadlessPlugins(); + await buildHeadlessPlugins(true); await ensurePluginFoldersWatchable(); const port = await detect(DEFAULT_PORT); const {app, server} = await startAssetServer(port); diff --git a/desktop/scripts/start-flipper-server-dev.tsx b/desktop/scripts/start-flipper-server-dev.tsx index f86d0c505..0784d723c 100644 --- a/desktop/scripts/start-flipper-server-dev.tsx +++ b/desktop/scripts/start-flipper-server-dev.tsx @@ -14,7 +14,8 @@ import { compileServerMain, launchServer, prepareDefaultPlugins, - prepareHeadlessPlugins, + buildHeadlessPlugins, + buildServerAddOns, } from './build-utils'; import Watchman from './watchman'; import isFB from './isFB'; @@ -59,11 +60,6 @@ const argv = yargs '[FB-internal only] Will force using public sources only, to be able to iterate quickly on the public version. If sources are checked out from GitHub this is already the default. Setting env var "FLIPPER_FORCE_PUBLIC_BUILD" is equivalent.', type: 'boolean', }, - open: { - describe: 'Open Flipper in the default browser after starting', - type: 'boolean', - default: true, - }, tcp: { describe: 'Enable TCP connections on flipper-server.', type: 'boolean', @@ -136,7 +132,7 @@ let startCount = 0; async function restartServer() { try { await compileServerMain(true); - await launchServer(true, argv.open && ++startCount === 1, argv.tcp); // only open on the first time + await launchServer(true, ++startCount === 1, argv.tcp); // only open on the first time } catch (e) { console.error( chalk.red( @@ -190,12 +186,14 @@ async function startWatchChanges() { } await prepareDefaultPlugins( process.env.FLIPPER_RELEASE_CHANNEL === 'insiders', + true, ); - await prepareHeadlessPlugins(); + await buildHeadlessPlugins(true); + await buildServerAddOns(true); - // watch - await startWatchChanges(); await ensurePluginFoldersWatchable(); // builds and starts await restartServer(); + // watch + await startWatchChanges(); })(); diff --git a/desktop/types/flipperGlobals.d.ts b/desktop/types/flipperGlobals.d.ts index a56f847a5..50d8305df 100644 --- a/desktop/types/flipperGlobals.d.ts +++ b/desktop/types/flipperGlobals.d.ts @@ -15,4 +15,8 @@ declare const electronRequire: { cache: {[module: string]: any}; }; +declare module globalThis { + // eslint-disable-next-line no-var + var FlipperRenderHostInstance: any /* RenderHost */; +} declare let FlipperRenderHostInstance: any /* RenderHost */; diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 703aba2f0..b50c15b9c 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -3469,6 +3469,14 @@ "@types/node" "*" form-data "^3.0.0" +"@types/node-fetch@2": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + "@types/node-fetch@^2.5.12": version "2.5.12" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" @@ -5919,11 +5927,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" - integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== - data-urls@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" @@ -7281,14 +7284,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.1.4.tgz#e8c6567f80ad7fc22fd302e7dcb72bafde9c1717" - integrity sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - figures@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" @@ -7494,13 +7489,6 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -10747,31 +10735,17 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - -node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: +node-fetch@2, node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" -node-fetch@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.4.tgz#3fbca2d8838111048232de54cb532bd3cf134947" - integrity sha512-WvYJRN7mMyOLurFR2YpysQGuwYrJN+qrrpHjJDuKMcSPdfFccRUla/kng2mz6HWSBxJcqPbvatS6Gb4RhOzCJw== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" +node-fetch@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== node-forge@^0.10.0, node-forge@^0.7.1, node-forge@^1.0.6: version "1.3.1" @@ -14380,11 +14354,6 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -web-streams-polyfill@^3.0.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz#a6b74026b38e4885869fb5c589e90b95ccfc7965" - integrity sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA== - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"