diff --git a/desktop/babel-transformer/src/__tests__/plugin-flipper-requires.node.tsx b/desktop/babel-transformer/src/__tests__/plugin-flipper-requires.node.tsx index 83f715b8c..12802ab02 100644 --- a/desktop/babel-transformer/src/__tests__/plugin-flipper-requires.node.tsx +++ b/desktop/babel-transformer/src/__tests__/plugin-flipper-requires.node.tsx @@ -34,6 +34,14 @@ test('transform react-dom requires to global object', () => { expect(code).toBe('global.ReactDOM;'); }); +test('transform react-dom/client requires to global object', () => { + const src = 'require("react-dom/client")'; + const ast = parse(src); + const transformed = transformFromAstSync(ast, src, babelOptions)!.ast; + const {code} = generate(transformed!); + expect(code).toBe('global.ReactDOMClient;'); +}); + test('transform flipper requires to global object', () => { const src = 'require("flipper")'; const ast = parse(src); diff --git a/desktop/babel-transformer/src/electron-requires.tsx b/desktop/babel-transformer/src/electron-requires.tsx index 04a21078b..4adca0f06 100644 --- a/desktop/babel-transformer/src/electron-requires.tsx +++ b/desktop/babel-transformer/src/electron-requires.tsx @@ -45,6 +45,9 @@ export const BUILTINS = [ 'v8', 'repl', 'timers', + 'perf_hooks', + 'fsevents', + './fsevents.node', // MWE node-fetch looks strange here, not sure what the effect of changing that would be 'node-fetch', // jest is referred to in source code, like in TestUtils, but we don't want to ever bundle it up! diff --git a/desktop/babel-transformer/src/fsevents-dynamic-imports.tsx b/desktop/babel-transformer/src/fsevents-dynamic-imports.tsx new file mode 100644 index 000000000..25b162568 --- /dev/null +++ b/desktop/babel-transformer/src/fsevents-dynamic-imports.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 {CallExpression, identifier} from '@babel/types'; +import {NodePath} from '@babel/traverse'; +module.exports = () => ({ + name: 'skip-fsevents-dynamic-imports-on-win-and-linux', + visitor: { + CallExpression(path: NodePath) { + if (process.platform === 'darwin') { + return; + } + + const node = path.node; + if ( + node.type === 'CallExpression' && + node.callee.type === 'Import' && + node.arguments.length === 1 && + node.arguments[0].type === 'StringLiteral' + ) { + const source = node.arguments[0].value; + if (source === 'fsevents') { + path.replaceWith(identifier('triggerReferenceError')); + } + } + }, + }, +}); diff --git a/desktop/babel-transformer/src/plugin-flipper-requires.tsx b/desktop/babel-transformer/src/plugin-flipper-requires.tsx index 4735b5af7..a3eb664d7 100644 --- a/desktop/babel-transformer/src/plugin-flipper-requires.tsx +++ b/desktop/babel-transformer/src/plugin-flipper-requires.tsx @@ -17,10 +17,7 @@ import { } from './replace-flipper-requires'; // do not apply this transform for these paths -const EXCLUDE_PATHS = [ - '/node_modules/react-devtools-core/', - 'relay-devtools/DevtoolsUI', -]; +const EXCLUDE_PATHS = ['relay-devtools/DevtoolsUI']; function isExcludedPath(path: string) { for (const epath of EXCLUDE_PATHS) { if (path.indexOf(epath) > -1) { diff --git a/desktop/babel-transformer/src/replace-flipper-requires.tsx b/desktop/babel-transformer/src/replace-flipper-requires.tsx index c7885049b..6807b4461 100644 --- a/desktop/babel-transformer/src/replace-flipper-requires.tsx +++ b/desktop/babel-transformer/src/replace-flipper-requires.tsx @@ -21,6 +21,8 @@ const requireReplacements: any = { 'flipper-plugin': 'global.FlipperPlugin', react: 'global.React', 'react-dom': 'global.ReactDOM', + 'react-dom/client': 'global.ReactDOMClient', + 'react-is': 'global.ReactIs', antd: 'global.antd', immer: 'global.Immer', '@emotion/styled': 'global.emotion_styled', diff --git a/desktop/babel-transformer/src/transform-app.tsx b/desktop/babel-transformer/src/transform-app.tsx index 9486afe12..022d3ae11 100644 --- a/desktop/babel-transformer/src/transform-app.tsx +++ b/desktop/babel-transformer/src/transform-app.tsx @@ -12,6 +12,7 @@ import {default as getCacheKey} from './get-cache-key'; const presets = [require('@babel/preset-react')]; const plugins = [ + require('./fsevents-dynamic-imports'), require('./electron-requires'), require('./import-react'), require('./app-flipper-requires'), diff --git a/desktop/babel-transformer/src/transform-main.tsx b/desktop/babel-transformer/src/transform-main.tsx index 95f39bf09..3fa716ae4 100644 --- a/desktop/babel-transformer/src/transform-main.tsx +++ b/desktop/babel-transformer/src/transform-main.tsx @@ -17,7 +17,11 @@ const presets = [ {targets: {electron: flipperEnv.FLIPPER_ELECTRON_VERSION}}, ], ]; -const plugins = [require('./electron-requires-main'), require('./fb-stubs')]; +const plugins = [ + require('./fsevents-dynamic-imports'), + require('./electron-requires-main'), + require('./fb-stubs'), +]; module.exports = { transform, diff --git a/desktop/babel-transformer/src/transform-plugin.tsx b/desktop/babel-transformer/src/transform-plugin.tsx index a4a68a80d..d8ad39836 100644 --- a/desktop/babel-transformer/src/transform-plugin.tsx +++ b/desktop/babel-transformer/src/transform-plugin.tsx @@ -11,6 +11,7 @@ import {default as doTransform} from './transform'; const presets = [require('@babel/preset-react')]; const plugins = [ + require('./fsevents-dynamic-imports'), require('./electron-requires'), require('./plugin-flipper-requires'), require('./fb-stubs'), diff --git a/desktop/babel-transformer/src/transform-server-add-on.tsx b/desktop/babel-transformer/src/transform-server-add-on.tsx index 476b15586..071e68069 100644 --- a/desktop/babel-transformer/src/transform-server-add-on.tsx +++ b/desktop/babel-transformer/src/transform-server-add-on.tsx @@ -24,6 +24,7 @@ const presets = [ ]; const plugins = [ + require('./fsevents-dynamic-imports'), require('./electron-requires'), require('./plugin-flipper-requires'), require('./fb-stubs'), diff --git a/desktop/babel-transformer/src/transform-server-dev.tsx b/desktop/babel-transformer/src/transform-server-dev.tsx index 505238e3c..49c77e79b 100644 --- a/desktop/babel-transformer/src/transform-server-dev.tsx +++ b/desktop/babel-transformer/src/transform-server-dev.tsx @@ -23,6 +23,7 @@ const presets = [ // In DEV builds, we keep node_modules as is, as to not waste resources on trying to bundle them const plugins = [ + require('./fsevents-dynamic-imports'), require('./electron-requires-server'), require('./plugin-flipper-requires'), require('./fb-stubs'), diff --git a/desktop/babel-transformer/src/transform-server-prod.tsx b/desktop/babel-transformer/src/transform-server-prod.tsx index c84d8fe3c..ee05a96e6 100644 --- a/desktop/babel-transformer/src/transform-server-prod.tsx +++ b/desktop/babel-transformer/src/transform-server-prod.tsx @@ -27,6 +27,7 @@ const presets = [ // electron-requires makes sure that *only* requires of built in node_modules are using "electronRequire" // (which effectively makes them external, as electronRequire === require, but not rolled up with Metro) const plugins = [ + require('./fsevents-dynamic-imports'), require('./electron-requires'), require('./plugin-flipper-requires'), require('./fb-stubs'), diff --git a/desktop/flipper-common/src/ServerAddOn.tsx b/desktop/flipper-common/src/ServerAddOn.tsx index 2de78cef3..ee3649b73 100644 --- a/desktop/flipper-common/src/ServerAddOn.tsx +++ b/desktop/flipper-common/src/ServerAddOn.tsx @@ -77,10 +77,15 @@ export interface FlipperServerForServerAddOn extends FlipperServer { } export type ServerAddOnCleanup = () => Promise; + +export type ServerAddOnExtras = { + flipperServer: FlipperServerForServerAddOn; +}; + export type ServerAddOn< Events extends EventsContract, Methods extends MethodsContract, > = ( connection: ServerAddOnPluginConnection, - {flipperServer}: {flipperServer: FlipperServerForServerAddOn}, + extras: ServerAddOnExtras, ) => Promise; diff --git a/desktop/flipper-server-core/package.json b/desktop/flipper-server-core/package.json index b8241e4ba..e221d28c4 100644 --- a/desktop/flipper-server-core/package.json +++ b/desktop/flipper-server-core/package.json @@ -55,8 +55,7 @@ "@types/tmp": "^0.2.3", "@types/which": "^2.0.1", "@types/ws": "^8.5.2", - "memorystream": "^0.3.1", - "tmp": "^0.2.1" + "memorystream": "^0.3.1" }, "peerDependencies": {}, "scripts": { diff --git a/desktop/flipper-server-core/tsconfig.json b/desktop/flipper-server-core/tsconfig.json index 9d2a11e6b..c14e3fc45 100644 --- a/desktop/flipper-server-core/tsconfig.json +++ b/desktop/flipper-server-core/tsconfig.json @@ -23,6 +23,9 @@ }, { "path": "../plugin-lib" + }, + { + "path": "../pkg-lib" } ] } diff --git a/desktop/flipper-ui-core/package.json b/desktop/flipper-ui-core/package.json index 4604dc0db..7c52631b8 100644 --- a/desktop/flipper-ui-core/package.json +++ b/desktop/flipper-ui-core/package.json @@ -35,6 +35,7 @@ "react-debounce-render": "^7.0.1", "react-dom": "^0.0.0-experimental-14c2be8da-20220304", "react-element-to-jsx-string": "^14.3.4", + "react-is": "^17.0.2", "react-markdown": "^6.0.3", "react-player": "^2.10.0", "react-redux": "^7.2.6", @@ -54,6 +55,7 @@ "@types/lodash.memoize": "^4.1.6", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.12", + "@types/react-is": "^17.0.3", "@types/react-test-renderer": "^17.0.1", "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", diff --git a/desktop/flipper-ui-core/src/dispatcher/plugins.tsx b/desktop/flipper-ui-core/src/dispatcher/plugins.tsx index fae676fe0..8099c5fb3 100644 --- a/desktop/flipper-ui-core/src/dispatcher/plugins.tsx +++ b/desktop/flipper-ui-core/src/dispatcher/plugins.tsx @@ -16,6 +16,8 @@ import { import {PluginDefinition} from '../plugin'; import React from 'react'; import ReactDOM from 'react-dom'; +import ReactDOMClient from 'react-dom/client'; +import ReactIs from 'react-is'; import { registerPlugins, addGatekeepedPlugins, @@ -61,6 +63,8 @@ export default async (store: Store, _logger: Logger) => { // this list should match `replace-flipper-requires.tsx` and the `builtInModules` in `desktop/.eslintrc` globalObject.React = React; globalObject.ReactDOM = ReactDOM; + globalObject.ReactDOMClient = ReactDOMClient; + globalObject.ReactIs = ReactIs; globalObject.Flipper = deprecatedExports; globalObject.FlipperPlugin = FlipperPluginSDK; globalObject.Immer = Immer; diff --git a/desktop/plugins/public/reactdevtools/index.tsx b/desktop/plugins/public/reactdevtools/index.tsx index 1224e83af..5bff47ed5 100644 --- a/desktop/plugins/public/reactdevtools/index.tsx +++ b/desktop/plugins/public/reactdevtools/index.tsx @@ -7,7 +7,7 @@ * @format */ -import {createRoot} from 'react-dom/client'; +import {createRoot, Root} from 'react-dom/client'; import { Layout, usePlugin, @@ -50,13 +50,17 @@ export function devicePlugin(client: DevicePluginClient) { const globalDevToolsAvailable = createState(false); let globalDevToolsInstance: DevToolsInstance | undefined; - const useGlobalDevTools = createState(false, { - persist: 'useGlobalDevTools', - persistToLocalStorage: true, - }); let devToolsInstance: DevToolsInstance | undefined; - const selectedDevToolsInstanceType = createState('oss'); + const selectedDevToolsInstanceType = createState( + 'oss', + { + persist: 'selectedDevToolsInstanceType', + persistToLocalStorage: true, + }, + ); + + let root: Root | undefined; let pollHandle: NodeJS.Timeout | undefined = undefined; @@ -87,14 +91,17 @@ export function devicePlugin(client: DevicePluginClient) { ); } - if (useGlobalDevTools.get() && globalDevToolsInstance) { + if ( + selectedDevToolsInstanceType.get() === 'global' && + globalDevToolsInstance + ) { console.debug( 'flipper-plugin-react-devtools.maybeGetInitialGlobalDevTools -> using global devtools', ); return globalDevToolsInstance; } - useGlobalDevTools.set(false); // disable in case it was enabled + selectedDevToolsInstanceType.set('oss'); // disable in case it was enabled console.debug( 'flipper-plugin-react-devtools.maybeGetInitialGlobalDevTools -> using OSS devtools', ); @@ -133,7 +140,6 @@ export function devicePlugin(client: DevicePluginClient) { ); return devToolsInstance.type; }); - useGlobalDevTools.update((v) => !v); await rebootDevTools(); } @@ -145,6 +151,14 @@ export function devicePlugin(client: DevicePluginClient) { if (pollHandle) { clearTimeout(pollHandle); } + const devToolsNode = document.getElementById(DEV_TOOLS_NODE_ID); + if (!devToolsNode) { + setStatus(ConnectionStatus.Error, 'Failed to find target DOM Node'); + return; + } + if (root) { + root.unmount(); + } await bootDevTools(); } @@ -216,7 +230,7 @@ export function devicePlugin(client: DevicePluginClient) { store, }); - const root = createRoot(devToolsNode); + root = createRoot(devToolsNode); root.render(React.createElement(DevTools)); console.debug('flipper-plugin-react-devtools -> connected'); @@ -315,7 +329,6 @@ export function devicePlugin(client: DevicePluginClient) { rebootDevTools, metroDevice, globalDevToolsAvailable, - useGlobalDevTools, selectedDevToolsInstanceType, toggleUseGlobalDevTools, initialized, @@ -346,13 +359,15 @@ function DevToolsInstanceToolbar() { const globalDevToolsAvailable = useValue(instance.globalDevToolsAvailable); const connectionStatus = useValue(instance.connectionStatus); const statusMessage = useValue(instance.statusMessage); - const useGlobalDevTools = useValue(instance.useGlobalDevTools); + const selectedDevToolsInstanceType = useValue( + instance.selectedDevToolsInstanceType, + ); const initialized = useValue(instance.initialized); const selectionControl = globalDevToolsAvailable ? ( <> = async ( globalDevToolsPath, ); - // TODO: Transform ReactDevTools for browsers - /* - const globalDevToolsSource = globalDevToolsPath; - return globalDevToolsSource; - */ - return; + const bundle = await rollup({ + input: globalDevToolsPath, + plugins: [resolve(), commonjs()], + external: ['react', 'react-is', 'react-dom/client', 'react-dom'], + }); + + try { + const {output} = await bundle.generate({ + format: 'iife', + globals: { + react: 'global.React', + 'react-is': 'global.ReactIs', + 'react-dom/client': 'global.ReactDOMClient', + 'react-dom': 'global.ReactDOM', + }, + }); + return output[0].code; + } finally { + await bundle.close(); + } }); return async () => { diff --git a/desktop/plugins/public/yarn.lock b/desktop/plugins/public/yarn.lock index ad45cb1f5..d8cddd3b9 100644 --- a/desktop/plugins/public/yarn.lock +++ b/desktop/plugins/public/yarn.lock @@ -109,6 +109,40 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= +"@rollup/plugin-commonjs@^21.0.3": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.3.tgz#287896c64926ef3d7f0013708dcdcc1223576ef0" + integrity sha512-ThGfwyvcLc6cfP/MWxA5ACF+LZCvsuhUq7V5134Az1oQWsiC7lNpLT4mJI86WQunK7BYmpUiHmMk2Op6OAHs0g== + dependencies: + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + +"@rollup/plugin-node-resolve@^13.1.3": + version "13.1.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz#2ed277fb3ad98745424c1d2ba152484508a92d79" + integrity sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + "@testing-library/dom@^7.28.1": version "7.29.4" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.4.tgz#1647c2b478789621ead7a50614ad81ab5ae5b86c" @@ -165,6 +199,16 @@ resolved "https://registry.yarnpkg.com/@types/dateformat/-/dateformat-3.0.1.tgz#98d747a2e5e9a56070c6bf14e27bff56204e34cc" integrity sha512-KlPPdikagvL6ELjWsljbyDIPzNCeliYkqRpI+zea99vBBbCIA5JNshZAwQKTON139c87y9qvTFVgkFd14rtS4g== +"@types/estree@*": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "@types/hoist-non-react-statics@^3.3.0": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" @@ -240,6 +284,13 @@ resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.5.tgz#36d897708172ac2380cd486da7a3daf1161c1e23" integrity sha512-8k/67Z95Goa6Lznuykxkfhq9YU3l1Qe6LNZmwde1u7802a3x8v44oq0j91DICclxatTr0rNnhXx7+VTIetSrSQ== +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + "@types/sql-formatter@^2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@types/sql-formatter/-/sql-formatter-2.3.0.tgz#d2584c54f865fd57a7fe7e88ee8ed3623b23da33" @@ -366,6 +417,11 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -463,6 +519,11 @@ colors@0.5.x: resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" integrity sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q= +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -697,6 +758,11 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -748,6 +814,16 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + eventemitter3@^4.0.1: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -861,6 +937,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -892,6 +973,18 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.6: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global@^4.3.1: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" @@ -1024,6 +1117,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -1075,6 +1175,11 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -1089,6 +1194,13 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + is-regex@^1.0.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -1222,6 +1334,13 @@ lz-string@^1.4.4: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -1398,6 +1517,11 @@ path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -1408,6 +1532,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.2.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -1665,6 +1794,15 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@^1.17.0, resolve@^1.19.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -1677,6 +1815,13 @@ rimraf@^2.6.3: dependencies: glob "^7.1.3" +rollup@^2.70.1: + version "2.70.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.70.1.tgz#824b1f1f879ea396db30b0fc3ae8d2fead93523e" + integrity sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA== + optionalDependencies: + fsevents "~2.3.2" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -1813,6 +1958,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 18489ad73..8b428eedf 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -2735,6 +2735,13 @@ dependencies: "@types/react" "*" +"@types/react-is@^17.0.3": + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a" + integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw== + dependencies: + "@types/react" "*" + "@types/react-redux@^7.1.20": version "7.1.20" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df"