diff --git a/README.md b/README.md index d543ce96788e5..6cbc3730a0ebe 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ React is a JavaScript library for building user interfaces. * **Declarative:** React makes it painless to create interactive UIs. Design simple views for each state in your application, and React will efficiently update and render just the right components when your data changes. Declarative views make your code more predictable, simpler to understand, and easier to debug. -* **Component-Based:** Build encapsulated components that manage their state, then compose them to make complex UIs. Since component logic is written in JavaScript instead of templates, you can easily pass rich data through your app and keep the state out of the DOM. +* **Component-Based:** Build encapsulated components that manage their own state, then compose them to make complex UIs. Since component logic is written in JavaScript instead of templates, you can easily pass rich data through your app and keep the state out of the DOM. * **Learn Once, Write Anywhere:** We don't make assumptions about the rest of your technology stack, so you can develop new features in React without rewriting existing code. React can also render on the server using Node and power mobile apps using [React Native](https://reactnative.dev/). [Learn how to use React in your project](https://reactjs.org/docs/getting-started.html). diff --git a/ReactVersions.js b/ReactVersions.js index acb76f56c4826..e8dffe7dee1b1 100644 --- a/ReactVersions.js +++ b/ReactVersions.js @@ -25,7 +25,7 @@ const ReactVersion = '18.3.0'; const nextChannelLabel = 'next'; const stablePackages = { - 'eslint-plugin-react-hooks': '4.7.0', + 'eslint-plugin-react-hooks': '5.0.0', 'jest-react': '0.15.0', react: ReactVersion, 'react-art': ReactVersion, diff --git a/dangerfile.js b/dangerfile.js index 59bc43466b11b..4fa16bb4a7345 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -86,8 +86,16 @@ const header = ` function row(result, baseSha, headSha) { const diffViewUrl = `https://react-builds.vercel.app/commits/${headSha}/files/${result.path}?compare=${baseSha}`; - // prettier-ignore - return `| [${result.path}](${diffViewUrl}) | **${change(result.change)}** | ${kbs(result.baseSize)} | ${kbs(result.headSize)} | ${change(result.changeGzip)} | ${kbs(result.baseSizeGzip)} | ${kbs(result.headSizeGzip)}`; + const rowArr = [ + `| [${result.path}](${diffViewUrl})`, + `**${change(result.change)}**`, + `${kbs(result.baseSize)}`, + `${kbs(result.headSize)}`, + `${change(result.changeGzip)}`, + `${kbs(result.baseSizeGzip)}`, + `${kbs(result.headSizeGzip)}`, + ]; + return rowArr.join(' | '); } (async function() { diff --git a/fixtures/blocks/yarn.lock b/fixtures/blocks/yarn.lock index f4aef117a1fed..a21cbff63b94d 100644 --- a/fixtures/blocks/yarn.lock +++ b/fixtures/blocks/yarn.lock @@ -1915,9 +1915,9 @@ async-limiter@~1.0.0: integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" @@ -2355,9 +2355,9 @@ bser@2.1.1: node-int64 "^0.4.0" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-indexof@^1.0.0: version "1.1.1" @@ -6540,9 +6540,9 @@ lodash.uniq@^4.5.0: integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= lodash@4, "lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loglevel@^1.6.6: version "1.6.7" @@ -9646,9 +9646,9 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: urix "^0.1.0" source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -10117,9 +10117,9 @@ terser-webpack-plugin@^1.4.3: worker-farm "^1.7.0" terser@^4.1.2, terser@^4.4.3, terser@^4.6.3: - version "4.6.7" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" - integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== dependencies: commander "^2.20.0" source-map "~0.6.1" diff --git a/fixtures/concurrent/time-slicing/yarn.lock b/fixtures/concurrent/time-slicing/yarn.lock index 0cab4641b7891..7b531c7b25962 100644 --- a/fixtures/concurrent/time-slicing/yarn.lock +++ b/fixtures/concurrent/time-slicing/yarn.lock @@ -341,9 +341,9 @@ async-each@^1.0.1: integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async@^2.1.2, async@^2.1.4, async@^2.4.1, async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" diff --git a/fixtures/dom/yarn.lock b/fixtures/dom/yarn.lock index 59ad08c8297d2..26f6cc7c77909 100644 --- a/fixtures/dom/yarn.lock +++ b/fixtures/dom/yarn.lock @@ -405,9 +405,9 @@ async-each@^1.0.1: integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async@^2.1.2, async@^2.1.4, async@^2.4.1, async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" @@ -5116,9 +5116,9 @@ lodash.uniq@^4.5.0: integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= "lodash@>=3.5 <5", lodash@^4.15.0, lodash@^4.17.14, lodash@^4.17.2, lodash@^4.17.20, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loglevel@^1.4.1: version "1.7.1" diff --git a/fixtures/fizz/yarn.lock b/fixtures/fizz/yarn.lock index 7b3eeac78715b..4cc15f152c628 100644 --- a/fixtures/fizz/yarn.lock +++ b/fixtures/fizz/yarn.lock @@ -3171,7 +3171,7 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -3295,13 +3295,6 @@ lodash@^4.17.15, lodash@^4.17.19: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -4087,7 +4080,6 @@ rc@^1.2.8: "react-dom@link:../../build/node_modules/react-dom": version "0.0.0" - uid "" react-error-boundary@^3.1.3: version "3.1.4" @@ -4098,7 +4090,6 @@ react-error-boundary@^3.1.3: "react@link:../../build/node_modules/react": version "0.0.0" - uid "" read-pkg@^4.0.1: version "4.0.1" @@ -4357,13 +4348,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scheduler@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" - integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== - dependencies: - loose-envify "^1.1.0" - schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -4766,9 +4750,9 @@ terser-webpack-plugin@^1.4.3: worker-farm "^1.7.0" terser@^4.1.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== dependencies: commander "^2.20.0" source-map "~0.6.1" diff --git a/fixtures/legacy-jsx-runtimes/yarn.lock b/fixtures/legacy-jsx-runtimes/yarn.lock index fe5d0c7955c2a..375b64caddc8a 100644 --- a/fixtures/legacy-jsx-runtimes/yarn.lock +++ b/fixtures/legacy-jsx-runtimes/yarn.lock @@ -576,6 +576,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.10" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40" @@ -667,10 +672,10 @@ dependencies: "@types/yargs-parser" "*" -abab@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abab@^2.0.3, abab@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== acorn-globals@^6.0.0: version "6.0.0" @@ -690,15 +695,17 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +acorn@^8.2.4: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" + debug "4" ansi-escapes@^4.2.1: version "4.3.1" @@ -769,18 +776,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -789,23 +784,13 @@ assign-symbols@^1.0.0: asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== - babel-jest@^26.5.2: version "26.5.2" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.5.2.tgz#164f367a35946c6cf54eaccde8762dec50422250" @@ -891,13 +876,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -983,11 +961,6 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1076,7 +1049,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1105,11 +1078,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1140,20 +1108,13 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.2.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -1163,6 +1124,13 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +debug@4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -1182,10 +1150,10 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decimal.js@^10.2.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== +decimal.js@^10.2.1: + version "10.4.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.0.tgz#97a7448873b01e92e5ff9117d89a7bca8e63e0fe" + integrity sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg== decode-uri-component@^0.2.0: version "0.2.0" @@ -1193,9 +1161,9 @@ decode-uri-component@^0.2.0: integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" @@ -1234,7 +1202,7 @@ define-property@^2.0.2: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== detect-newline@^3.0.0: version "3.1.0" @@ -1253,14 +1221,6 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - emittery@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" @@ -1339,13 +1299,13 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.14.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -1356,10 +1316,10 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -1444,11 +1404,6 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -1463,21 +1418,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -1486,7 +1426,7 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fb-watchman@^2.0.0: version "2.0.1" @@ -1525,18 +1465,13 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" + combined-stream "^1.0.8" mime-types "^2.1.12" fragment-cache@^0.2.1: @@ -1595,13 +1530,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -1629,19 +1557,6 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -1712,14 +1627,22 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" human-signals@^1.1.1: version "1.1.1" @@ -1759,11 +1682,6 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -1888,10 +1806,10 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.1.1: version "1.1.1" @@ -1917,7 +1835,7 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -1956,11 +1874,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - istanbul-lib-coverage@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" @@ -2386,41 +2299,37 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== dependencies: - abab "^2.0.3" - acorn "^7.1.1" + abab "^2.0.5" + acorn "^8.2.4" acorn-globals "^6.0.0" cssom "^0.4.4" - cssstyle "^2.2.0" + cssstyle "^2.3.0" data-urls "^2.0.0" - decimal.js "^10.2.0" + decimal.js "^10.2.1" domexception "^2.0.1" - escodegen "^1.14.1" + escodegen "^2.0.0" + form-data "^3.0.0" html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" nwsapi "^2.2.0" - parse5 "5.1.1" - request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" + parse5 "6.0.1" + saxes "^5.0.1" symbol-tree "^3.2.4" - tough-cookie "^3.0.1" + tough-cookie "^4.0.0" w3c-hr-time "^1.0.2" w3c-xmlserializer "^2.0.0" webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.2.3" + whatwg-url "^8.5.0" + ws "^7.4.6" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -2433,21 +2342,6 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" @@ -2455,16 +2349,6 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2502,7 +2386,7 @@ leven@^3.1.0: levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -2519,16 +2403,16 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - lodash@^4.17.19: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -2587,17 +2471,17 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.44.0" + mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" @@ -2720,14 +2604,9 @@ npm-run-path@^4.0.0: path-key "^3.0.0" nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== object-copy@^0.1.0: version "0.1.0" @@ -2837,10 +2716,10 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== pascalcase@^0.1.1: version "0.1.1" @@ -2872,11 +2751,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picomatch@^2.0.4, picomatch@^2.0.5: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -2904,7 +2778,7 @@ posix-character-classes@^0.1.0: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== pretty-format@^26.5.2: version "26.5.2" @@ -2924,10 +2798,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.4" -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pump@^3.0.0: version "3.0.0" @@ -2937,15 +2811,15 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== react-is@^16.12.0: version "16.13.1" @@ -2994,48 +2868,6 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -3046,6 +2878,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -3087,11 +2924,6 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -3104,7 +2936,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3124,7 +2956,7 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -saxes@^5.0.0: +saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== @@ -3312,21 +3144,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - stack-utils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" @@ -3342,11 +3159,6 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - string-length@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" @@ -3493,46 +3305,27 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== +tough-cookie@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" - integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== dependencies: punycode "^2.1.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" @@ -3573,6 +3366,11 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -3581,28 +3379,24 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== - dependencies: - punycode "^2.1.0" - urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.0: version "8.3.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" @@ -3625,15 +3419,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -3677,13 +3462,13 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^8.0.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" - integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== dependencies: - lodash.sortby "^4.7.0" - tr46 "^2.0.2" + lodash "^4.7.0" + tr46 "^2.1.0" webidl-conversions "^6.1.0" which-module@^2.0.0: @@ -3734,10 +3519,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.2.3: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== xml-name-validator@^3.0.0: version "3.0.0" diff --git a/fixtures/packaging/browserify/dev/yarn.lock b/fixtures/packaging/browserify/dev/yarn.lock index edcf2e696b753..2c56a370d8201 100644 --- a/fixtures/packaging/browserify/dev/yarn.lock +++ b/fixtures/packaging/browserify/dev/yarn.lock @@ -13,18 +13,6 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - asn1.js@^4.0.0: version "4.9.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" @@ -728,13 +716,8 @@ shasum@^1.0.0: sha.js "~2.4.4" shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" source-map@~0.5.3: version "0.5.7" diff --git a/fixtures/packaging/browserify/prod/yarn.lock b/fixtures/packaging/browserify/prod/yarn.lock index 62da80fb7e8ee..c85c30d03c51b 100644 --- a/fixtures/packaging/browserify/prod/yarn.lock +++ b/fixtures/packaging/browserify/prod/yarn.lock @@ -13,18 +13,6 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - asn1.js@^4.0.0: version "4.9.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" @@ -739,13 +727,8 @@ shasum@^1.0.0: sha.js "~2.4.4" shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" source-map@~0.5.3: version "0.5.7" diff --git a/fixtures/ssr/yarn.lock b/fixtures/ssr/yarn.lock index 3609381253bce..a245336534547 100644 --- a/fixtures/ssr/yarn.lock +++ b/fixtures/ssr/yarn.lock @@ -4265,7 +4265,7 @@ longest@^1.0.1: resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= -loose-envify@^1.0.0, loose-envify@^1.1.0: +loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -4472,9 +4472,9 @@ mixin-deep@^1.2.0: minimist "^1.2.5" moment@^2.11.2: - version "2.29.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== ms@0.7.1: version "0.7.1" @@ -5492,7 +5492,6 @@ react-dev-utils@^0.5.2: "react-dom@link:../../build/node_modules/react-dom": version "0.0.0" - uid "" react-scripts@0.9.5: version "0.9.5" @@ -5542,7 +5541,6 @@ react-scripts@0.9.5: "react@link:../../build/node_modules/react": version "0.0.0" - uid "" read-pkg-up@^1.0.1: version "1.0.1" @@ -5945,14 +5943,6 @@ sax@^1.2.1, sax@~1.2.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.20.1: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - "semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" diff --git a/package.json b/package.json index f669e23a95d25..75214bf13488b 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "eslint-plugin-react-internal": "link:./scripts/eslint-rules", "fbjs-scripts": "1.2.0", "filesize": "^6.0.1", - "flow-bin": "0.97", + "flow-bin": "^0.132", "glob": "^7.1.6", "glob-stream": "^6.1.0", "google-closure-compiler": "^20200517.0.0", diff --git a/packages/eslint-plugin-react-hooks/CHANGELOG.md b/packages/eslint-plugin-react-hooks/CHANGELOG.md index 8a0882d24ec40..589574ede95cb 100644 --- a/packages/eslint-plugin-react-hooks/CHANGELOG.md +++ b/packages/eslint-plugin-react-hooks/CHANGELOG.md @@ -1,3 +1,9 @@ +## 5.0.0 (next release) + +* **New Violations:** Component names now need to start with an uppercase letter instead of a non-lowercase letter. This means `_Button` or `_component` are no longer valid. ([@kassens](https://github.com/kassens)) in [#25162](https://github.com/facebook/react/pull/25162) + +## 4.6.0 + ## 4.5.0 * Fix false positive error with large number of branches. ([@scyron6](https://github.com/scyron6) in [#24287](https://github.com/facebook/react/pull/24287)) diff --git a/packages/eslint-plugin-react-hooks/__tests__/ESLintRulesOfHooks-test.js b/packages/eslint-plugin-react-hooks/__tests__/ESLintRulesOfHooks-test.js index 044cc58f40c4c..ee220fa5dba3c 100644 --- a/packages/eslint-plugin-react-hooks/__tests__/ESLintRulesOfHooks-test.js +++ b/packages/eslint-plugin-react-hooks/__tests__/ESLintRulesOfHooks-test.js @@ -641,6 +641,21 @@ const tests = { functionError('useHookInsideNormalFunction', 'normalFunctionWithHook'), ], }, + { + code: ` + // These are neither functions nor hooks. + function _normalFunctionWithHook() { + useHookInsideNormalFunction(); + } + function _useNotAHook() { + useHookInsideNormalFunction(); + } + `, + errors: [ + functionError('useHookInsideNormalFunction', '_normalFunctionWithHook'), + functionError('useHookInsideNormalFunction', '_useNotAHook'), + ], + }, { code: ` // Invalid because it's dangerous and might not warn otherwise. diff --git a/packages/eslint-plugin-react-hooks/package.json b/packages/eslint-plugin-react-hooks/package.json index 3f14cee365115..683d95dccf050 100644 --- a/packages/eslint-plugin-react-hooks/package.json +++ b/packages/eslint-plugin-react-hooks/package.json @@ -1,7 +1,7 @@ { "name": "eslint-plugin-react-hooks", "description": "ESLint rules for React Hooks", - "version": "4.6.0", + "version": "5.0.0", "repository": { "type": "git", "url": "https://github.com/facebook/react.git", diff --git a/packages/eslint-plugin-react-hooks/src/RulesOfHooks.js b/packages/eslint-plugin-react-hooks/src/RulesOfHooks.js index 31d54e813ae65..1957d3ce199af 100644 --- a/packages/eslint-plugin-react-hooks/src/RulesOfHooks.js +++ b/packages/eslint-plugin-react-hooks/src/RulesOfHooks.js @@ -16,7 +16,7 @@ */ function isHookName(s) { - return /^use[A-Z0-9].*$/.test(s); + return /^use[A-Z0-9]/.test(s); } /** @@ -42,16 +42,11 @@ function isHook(node) { /** * Checks if the node is a React component name. React component names must - * always start with a non-lowercase letter. So `MyComponent` or `_MyComponent` - * are valid component names for instance. + * always start with an uppercase letter. */ function isComponentName(node) { - if (node.type === 'Identifier') { - return !/^[a-z]/.test(node.name); - } else { - return false; - } + return node.type === 'Identifier' && /^[A-Z]/.test(node.name); } function isReactFunction(node, functionName) { diff --git a/packages/jest-react/src/internalAct.js b/packages/jest-react/src/internalAct.js index 4e41f6234c928..a5a398b7e2a0d 100644 --- a/packages/jest-react/src/internalAct.js +++ b/packages/jest-react/src/internalAct.js @@ -28,6 +28,8 @@ export function act(scope: () => Thenable | T): Thenable { 'This version of `act` requires a special mock build of Scheduler.', ); } + + // $FlowFixMe: _isMockFunction doesn't exist on function if (setTimeout._isMockFunction !== true) { throw Error( "This version of `act` requires Jest's timer mocks " + diff --git a/packages/react-cache/src/LRU.js b/packages/react-cache/src/LRU.js index 5046b3f2bc9fe..9a90cc8a3ede7 100644 --- a/packages/react-cache/src/LRU.js +++ b/packages/react-cache/src/LRU.js @@ -16,12 +16,12 @@ const { unstable_IdlePriority: IdlePriority, } = Scheduler; -type Entry = {| +type Entry = { value: T, onDelete: () => mixed, previous: Entry, next: Entry, -|}; +}; export function createLRU(limit: number) { let LIMIT = limit; diff --git a/packages/react-cache/src/ReactCacheOld.js b/packages/react-cache/src/ReactCacheOld.js index f8b33434b7c76..8781899dc2ae7 100644 --- a/packages/react-cache/src/ReactCacheOld.js +++ b/packages/react-cache/src/ReactCacheOld.js @@ -15,20 +15,20 @@ import {createLRU} from './LRU'; type Suspender = {then(resolve: () => mixed, reject: () => mixed): mixed, ...}; -type PendingResult = {| +type PendingResult = { status: 0, value: Suspender, -|}; +}; -type ResolvedResult = {| +type ResolvedResult = { status: 1, value: V, -|}; +}; -type RejectedResult = {| +type RejectedResult = { status: 2, value: mixed, -|}; +}; type Result = PendingResult | ResolvedResult | RejectedResult; diff --git a/packages/react-client/src/ReactFlightClient.js b/packages/react-client/src/ReactFlightClient.js index 13fb0897e747b..bd78cd237640b 100644 --- a/packages/react-client/src/ReactFlightClient.js +++ b/packages/react-client/src/ReactFlightClient.js @@ -129,10 +129,12 @@ function readRoot(): T { } function createPendingChunk(response: Response): PendingChunk { + // $FlowFixMe Flow doesn't support functions as constructors return new Chunk(PENDING, null, response); } function createErrorChunk(response: Response, error: Error): ErroredChunk { + // $FlowFixMe Flow doesn't support functions as constructors return new Chunk(ERRORED, error, response); } @@ -140,6 +142,7 @@ function createInitializedChunk( response: Response, value: T, ): InitializedChunk { + // $FlowFixMe Flow doesn't support functions as constructors return new Chunk(INITIALIZED, value, response); } @@ -168,6 +171,7 @@ function createResolvedModelChunk( response: Response, value: UninitializedModel, ): ResolvedModelChunk { + // $FlowFixMe Flow doesn't support functions as constructors return new Chunk(RESOLVED_MODEL, value, response); } @@ -175,6 +179,7 @@ function createResolvedModuleChunk( response: Response, value: ModuleReference, ): ResolvedModuleChunk { + // $FlowFixMe Flow doesn't support functions as constructors return new Chunk(RESOLVED_MODULE, value, response); } diff --git a/packages/react-debug-tools/src/ReactDebugHooks.js b/packages/react-debug-tools/src/ReactDebugHooks.js index 940873725cb2f..2cb6e7fbdf386 100644 --- a/packages/react-debug-tools/src/ReactDebugHooks.js +++ b/packages/react-debug-tools/src/ReactDebugHooks.js @@ -154,7 +154,7 @@ function useReducer( return [state, (action: A) => {}]; } -function useRef(initialValue: T): {|current: T|} { +function useRef(initialValue: T): {current: T} { const hook = nextHook(); const ref = hook !== null ? hook.memoizedState : {current: initialValue}; hookLog.push({ @@ -208,7 +208,7 @@ function useEffect( } function useImperativeHandle( - ref: {|current: T | null|} | ((inst: T | null) => mixed) | null | void, + ref: {current: T | null} | ((inst: T | null) => mixed) | null | void, create: () => T, inputs: Array | void | null, ): void { @@ -683,6 +683,7 @@ function handleRenderFunctionError(error: any): void { // TODO: refactor this if we ever combine the devtools and debug tools packages wrapperError.name = 'ReactDebugToolsRenderError'; // this stage-4 proposal is not supported by all environments yet. + // $FlowFixMe Flow doesn't have this type yet. wrapperError.cause = error; throw wrapperError; } diff --git a/packages/react-devtools-core/src/standalone.js b/packages/react-devtools-core/src/standalone.js index ff69b709dab00..4a2ba8ff08e67 100644 --- a/packages/react-devtools-core/src/standalone.js +++ b/packages/react-devtools-core/src/standalone.js @@ -266,7 +266,7 @@ function initialize(socket: WebSocket) { let startServerTimeoutID: TimeoutID | null = null; -function connectToSocket(socket: WebSocket) { +function connectToSocket(socket: WebSocket): {close(): void} { socket.onerror = err => { onDisconnected(); log.error('Error with websocket connection', err); @@ -284,21 +284,21 @@ function connectToSocket(socket: WebSocket) { }; } -type ServerOptions = {| +type ServerOptions = { key?: string, cert?: string, -|}; +}; -type LoggerOptions = {| +type LoggerOptions = { surface?: ?string, -|}; +}; function startServer( port?: number = 8097, host?: string = 'localhost', httpsOptions?: ServerOptions, loggerOptions?: LoggerOptions, -) { +): {close(): void} { registerDevToolsEventLogger(loggerOptions?.surface ?? 'standalone'); const useHttps = !!httpsOptions; diff --git a/packages/react-devtools-extensions/flow-typed/jest.js b/packages/react-devtools-extensions/flow-typed/jest.js index 39e6cae3c2551..dba752e9ba300 100644 --- a/packages/react-devtools-extensions/flow-typed/jest.js +++ b/packages/react-devtools-extensions/flow-typed/jest.js @@ -206,7 +206,7 @@ type EnzymeMatchersType = { toIncludeText(text: string): void, toMatchElement( element: React$Element, - options?: {|ignoreProps?: boolean, verbose?: boolean|} + options?: {ignoreProps?: boolean, verbose?: boolean} ): void, toMatchSelector(selector: string): void, // 7.x @@ -1095,7 +1095,7 @@ type JestPrettyFormatPrint = any => string; // eslint-disable-next-line no-unused-vars type JestPrettyFormatStringOrNull = string | null; -type JestPrettyFormatOptions = {| +type JestPrettyFormatOptions = { callToJSON: boolean, edgeSpacing: string, escapeRegex: boolean, @@ -1107,14 +1107,14 @@ type JestPrettyFormatOptions = {| plugins: JestPrettyFormatPlugins, printFunctionName: boolean, spacing: string, - theme: {| + theme: { comment: string, content: string, prop: string, tag: string, value: string, - |}, -|}; + }, +}; type JestPrettyFormatPlugin = { print: ( diff --git a/packages/react-devtools-inline/src/backend.js b/packages/react-devtools-inline/src/backend.js index c0c87871df117..234c7f5f8853d 100644 --- a/packages/react-devtools-inline/src/backend.js +++ b/packages/react-devtools-inline/src/backend.js @@ -9,7 +9,7 @@ import setupNativeStyleEditor from 'react-devtools-shared/src/backend/NativeStyl import type {BackendBridge} from 'react-devtools-shared/src/bridge'; import type {Wall} from 'react-devtools-shared/src/types'; -function startActivation(contentWindow: window, bridge: BackendBridge) { +function startActivation(contentWindow: any, bridge: BackendBridge) { const onSavedPreferences = data => { // This is the only message we're listening for, // so it's safe to cleanup after we've received it. @@ -55,7 +55,7 @@ function startActivation(contentWindow: window, bridge: BackendBridge) { bridge.send('getSavedPreferences'); } -function finishActivation(contentWindow: window, bridge: BackendBridge) { +function finishActivation(contentWindow: any, bridge: BackendBridge) { const agent = new Agent(bridge); const hook = contentWindow.__REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -75,12 +75,12 @@ function finishActivation(contentWindow: window, bridge: BackendBridge) { } export function activate( - contentWindow: window, + contentWindow: any, { bridge, - }: {| + }: { bridge?: BackendBridge, - |} = {}, + } = {}, ): void { if (bridge == null) { bridge = createBridge(contentWindow); @@ -89,10 +89,7 @@ export function activate( startActivation(contentWindow, bridge); } -export function createBridge( - contentWindow: window, - wall?: Wall, -): BackendBridge { +export function createBridge(contentWindow: any, wall?: Wall): BackendBridge { const {parent} = contentWindow; if (wall == null) { @@ -115,6 +112,6 @@ export function createBridge( return (new Bridge(wall): BackendBridge); } -export function initialize(contentWindow: window): void { +export function initialize(contentWindow: any): void { installHook(contentWindow); } diff --git a/packages/react-devtools-inline/src/frontend.js b/packages/react-devtools-inline/src/frontend.js index 42c820126f285..1e5ea336a477f 100644 --- a/packages/react-devtools-inline/src/frontend.js +++ b/packages/react-devtools-inline/src/frontend.js @@ -17,11 +17,11 @@ import type {Wall} from 'react-devtools-shared/src/types'; import type {FrontendBridge} from 'react-devtools-shared/src/bridge'; import type {Props} from 'react-devtools-shared/src/devtools/views/DevTools'; -type Config = {| +type Config = { checkBridgeProtocolCompatibility?: boolean, supportsNativeInspection?: boolean, supportsProfiling?: boolean, -|}; +}; export function createStore(bridge: FrontendBridge, config?: Config): Store { return new Store(bridge, { @@ -33,10 +33,7 @@ export function createStore(bridge: FrontendBridge, config?: Config): Store { }); } -export function createBridge( - contentWindow: window, - wall?: Wall, -): FrontendBridge { +export function createBridge(contentWindow: any, wall?: Wall): FrontendBridge { if (wall == null) { wall = { listen(fn) { @@ -58,14 +55,14 @@ export function createBridge( } export function initialize( - contentWindow: window, + contentWindow: any, { bridge, store, - }: {| + }: { bridge?: FrontendBridge, store?: Store, - |} = {}, + } = {}, ): React.AbstractComponent { if (bridge == null) { bridge = createBridge(contentWindow); diff --git a/packages/react-devtools-shared/src/Logger.js b/packages/react-devtools-shared/src/Logger.js index ddf60f8fd70f7..0998f860a99c4 100644 --- a/packages/react-devtools-shared/src/Logger.js +++ b/packages/react-devtools-shared/src/Logger.js @@ -10,57 +10,57 @@ import {enableLogger} from 'react-devtools-feature-flags'; export type LoggerEvent = - | {| + | { +event_name: 'loaded-dev-tools', - |} - | {| + } + | { +event_name: 'error', +error_message: string | null, +error_stack: string | null, +error_component_stack: string | null, - |} - | {| + } + | { +event_name: 'selected-components-tab', - |} - | {| + } + | { +event_name: 'selected-profiler-tab', - |} - | {| + } + | { +event_name: 'load-hook-names', +event_status: 'success' | 'error' | 'timeout' | 'unknown', +duration_ms: number, +inspected_element_display_name: string | null, +inspected_element_number_of_hooks: number | null, - |} - | {| + } + | { +event_name: 'select-element', +metadata: { +source: string, }, - |} - | {| + } + | { +event_name: 'inspect-element-button-clicked', - |} - | {| + } + | { +event_name: 'profiling-start', +metadata: { +current_tab: string, }, - |} - | {| + } + | { +event_name: 'profiler-tab-changed', +metadata: { +tabId: string, }, - |} - | {| + } + | { +event_name: 'settings-changed', +metadata: { +key: string, +value: any, ... }, - |}; + }; export type LogFunction = LoggerEvent => void | Promise; diff --git a/packages/react-devtools-shared/src/__tests__/console-test.js b/packages/react-devtools-shared/src/__tests__/console-test.js index 40eb388a955ca..407150b5e39b8 100644 --- a/packages/react-devtools-shared/src/__tests__/console-test.js +++ b/packages/react-devtools-shared/src/__tests__/console-test.js @@ -16,6 +16,8 @@ let fakeConsole; let legacyRender; let mockError; let mockInfo; +let mockGroup; +let mockGroupCollapsed; let mockLog; let mockWarn; let patchConsole; @@ -25,6 +27,7 @@ let rendererID; describe('console', () => { beforeEach(() => { const Console = require('react-devtools-shared/src/backend/console'); + patchConsole = Console.patch; unpatchConsole = Console.unpatch; @@ -33,6 +36,8 @@ describe('console', () => { // because Jest itself has hooks into it as does our test env setup. mockError = jest.fn(); mockInfo = jest.fn(); + mockGroup = jest.fn(); + mockGroupCollapsed = jest.fn(); mockLog = jest.fn(); mockWarn = jest.fn(); fakeConsole = { @@ -40,6 +45,8 @@ describe('console', () => { info: mockInfo, log: mockLog, warn: mockWarn, + group: mockGroup, + groupCollapsed: mockGroupCollapsed, }; Console.dangerous_setTargetConsoleForTesting(fakeConsole); @@ -69,6 +76,8 @@ describe('console', () => { expect(fakeConsole.info).toBe(mockInfo); expect(fakeConsole.log).toBe(mockLog); expect(fakeConsole.warn).not.toBe(mockWarn); + expect(fakeConsole.group).toBe(mockGroup); + expect(fakeConsole.groupCollapsed).toBe(mockGroupCollapsed); }); // @reactVersion >=18.0 @@ -491,6 +500,9 @@ describe('console', () => { fakeConsole.log('log'); fakeConsole.warn('warn'); fakeConsole.error('error'); + fakeConsole.info('info'); + fakeConsole.group('group'); + fakeConsole.groupCollapsed('groupCollapsed'); return
; } @@ -528,6 +540,36 @@ describe('console', () => { `color: ${process.env.DARK_MODE_DIMMED_ERROR_COLOR}`, 'error', ]); + + expect(mockInfo).toHaveBeenCalledTimes(2); + expect(mockInfo.mock.calls[0]).toHaveLength(1); + expect(mockInfo.mock.calls[0][0]).toBe('info'); + expect(mockInfo.mock.calls[1]).toHaveLength(3); + expect(mockInfo.mock.calls[1]).toEqual([ + '%c%s', + `color: ${process.env.DARK_MODE_DIMMED_LOG_COLOR}`, + 'info', + ]); + + expect(mockGroup).toHaveBeenCalledTimes(2); + expect(mockGroup.mock.calls[0]).toHaveLength(1); + expect(mockGroup.mock.calls[0][0]).toBe('group'); + expect(mockGroup.mock.calls[1]).toHaveLength(3); + expect(mockGroup.mock.calls[1]).toEqual([ + '%c%s', + `color: ${process.env.DARK_MODE_DIMMED_LOG_COLOR}`, + 'group', + ]); + + expect(mockGroupCollapsed).toHaveBeenCalledTimes(2); + expect(mockGroupCollapsed.mock.calls[0]).toHaveLength(1); + expect(mockGroupCollapsed.mock.calls[0][0]).toBe('groupCollapsed'); + expect(mockGroupCollapsed.mock.calls[1]).toHaveLength(3); + expect(mockGroupCollapsed.mock.calls[1]).toEqual([ + '%c%s', + `color: ${process.env.DARK_MODE_DIMMED_LOG_COLOR}`, + 'groupCollapsed', + ]); }); it('should not double log if hideConsoleLogsInStrictMode is enabled in Strict mode', () => { @@ -538,9 +580,16 @@ describe('console', () => { const root = ReactDOMClient.createRoot(container); function App() { + console.log( + 'CALL', + global.__REACT_DEVTOOLS_HIDE_CONSOLE_LOGS_IN_STRICT_MODE__, + ); fakeConsole.log('log'); fakeConsole.warn('warn'); fakeConsole.error('error'); + fakeConsole.info('info'); + fakeConsole.group('group'); + fakeConsole.groupCollapsed('groupCollapsed'); return
; } @@ -563,6 +612,18 @@ describe('console', () => { expect(mockError).toHaveBeenCalledTimes(1); expect(mockError.mock.calls[0]).toHaveLength(1); expect(mockError.mock.calls[0][0]).toBe('error'); + + expect(mockInfo).toHaveBeenCalledTimes(1); + expect(mockInfo.mock.calls[0]).toHaveLength(1); + expect(mockInfo.mock.calls[0][0]).toBe('info'); + + expect(mockGroup).toHaveBeenCalledTimes(1); + expect(mockGroup.mock.calls[0]).toHaveLength(1); + expect(mockGroup.mock.calls[0][0]).toBe('group'); + + expect(mockGroupCollapsed).toHaveBeenCalledTimes(1); + expect(mockGroupCollapsed.mock.calls[0]).toHaveLength(1); + expect(mockGroupCollapsed.mock.calls[0][0]).toBe('groupCollapsed'); }); it('should double log in Strict mode initial render for extension', () => { @@ -734,6 +795,8 @@ describe('console error', () => { // because Jest itself has hooks into it as does our test env setup. mockError = jest.fn(); mockInfo = jest.fn(); + mockGroup = jest.fn(); + mockGroupCollapsed = jest.fn(); mockLog = jest.fn(); mockWarn = jest.fn(); fakeConsole = { @@ -741,6 +804,8 @@ describe('console error', () => { info: mockInfo, log: mockLog, warn: mockWarn, + group: mockGroup, + groupCollapsed: mockGroupCollapsed, }; Console.dangerous_setTargetConsoleForTesting(fakeConsole); diff --git a/packages/react-devtools-shared/src/__tests__/profilingCache-test.js b/packages/react-devtools-shared/src/__tests__/profilingCache-test.js index 1a84be03aa502..d3ce61cbd7472 100644 --- a/packages/react-devtools-shared/src/__tests__/profilingCache-test.js +++ b/packages/react-devtools-shared/src/__tests__/profilingCache-test.js @@ -202,10 +202,7 @@ describe('ProfilingCache', () => { const ModernContext = React.createContext(0); - class LegacyContextProvider extends React.Component< - any, - {|count: number|}, - > { + class LegacyContextProvider extends React.Component { static childContextTypes = { count: PropTypes.number, }; diff --git a/packages/react-devtools-shared/src/__tests__/profilingCharts-test.js b/packages/react-devtools-shared/src/__tests__/profilingCharts-test.js index cf8d4aae4a717..67196274a68d4 100644 --- a/packages/react-devtools-shared/src/__tests__/profilingCharts-test.js +++ b/packages/react-devtools-shared/src/__tests__/profilingCharts-test.js @@ -61,7 +61,7 @@ describe('profiling charts', () => { describe('flamegraph chart', () => { // @reactVersion >= 16.9 it('should contain valid data', () => { - const Parent = (_: {||}) => { + const Parent = (_: {}) => { Scheduler.unstable_advanceTime(10); return ( @@ -211,7 +211,7 @@ describe('profiling charts', () => { describe('ranked chart', () => { // @reactVersion >= 16.9 it('should contain valid data', () => { - const Parent = (_: {||}) => { + const Parent = (_: {}) => { Scheduler.unstable_advanceTime(10); return ( diff --git a/packages/react-devtools-shared/src/__tests__/setupTests.js b/packages/react-devtools-shared/src/__tests__/setupTests.js index 37ca023381bd2..ca77678451145 100644 --- a/packages/react-devtools-shared/src/__tests__/setupTests.js +++ b/packages/react-devtools-shared/src/__tests__/setupTests.js @@ -52,8 +52,7 @@ env.beforeEach(() => { const {installHook} = require('react-devtools-shared/src/hook'); const { getDefaultComponentFilters, - saveComponentFilters, - setShowInlineWarningsAndErrors, + setSavedComponentFilters, } = require('react-devtools-shared/src/utils'); // Fake timers let us flush Bridge operations between setup and assertions. @@ -118,11 +117,10 @@ env.beforeEach(() => { }; // Initialize filters to a known good state. - saveComponentFilters(getDefaultComponentFilters()); + setSavedComponentFilters(getDefaultComponentFilters()); global.__REACT_DEVTOOLS_COMPONENT_FILTERS__ = getDefaultComponentFilters(); // Also initialize inline warnings so that we can test them. - setShowInlineWarningsAndErrors(true); global.__REACT_DEVTOOLS_SHOW_INLINE_WARNINGS_AND_ERRORS__ = true; installHook(global); diff --git a/packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js b/packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js index e9e30de830a1f..d49f3f3e1b8ea 100644 --- a/packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js +++ b/packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js @@ -51,7 +51,7 @@ describe('Store component filters', () => { // @reactVersion >= 16.0 it('should support filtering by element type', () => { - class ClassComponent extends React.Component<{|children: React$Node|}> { + class ClassComponent extends React.Component<{children: React$Node}> { render() { return
{this.props.children}
; } diff --git a/packages/react-devtools-shared/src/backend/NativeStyleEditor/setupNativeStyleEditor.js b/packages/react-devtools-shared/src/backend/NativeStyleEditor/setupNativeStyleEditor.js index 6a7921489c597..fee2847f05e6d 100644 --- a/packages/react-devtools-shared/src/backend/NativeStyleEditor/setupNativeStyleEditor.js +++ b/packages/react-devtools-shared/src/backend/NativeStyleEditor/setupNativeStyleEditor.js @@ -25,7 +25,7 @@ export default function setupNativeStyleEditor( ) { bridge.addListener( 'NativeStyleEditor_measure', - ({id, rendererID}: {|id: number, rendererID: RendererID|}) => { + ({id, rendererID}: {id: number, rendererID: RendererID}) => { measureStyle(agent, bridge, resolveNativeStyle, id, rendererID); }, ); @@ -38,13 +38,13 @@ export default function setupNativeStyleEditor( oldName, newName, value, - }: {| + }: { id: number, rendererID: RendererID, oldName: string, newName: string, value: string, - |}) => { + }) => { renameStyle(agent, id, rendererID, oldName, newName, value); setTimeout(() => measureStyle(agent, bridge, resolveNativeStyle, id, rendererID), @@ -59,12 +59,12 @@ export default function setupNativeStyleEditor( rendererID, name, value, - }: {| + }: { id: number, rendererID: number, name: string, value: string, - |}) => { + }) => { setStyle(agent, id, rendererID, name, value); setTimeout(() => measureStyle(agent, bridge, resolveNativeStyle, id, rendererID), diff --git a/packages/react-devtools-shared/src/backend/NativeStyleEditor/types.js b/packages/react-devtools-shared/src/backend/NativeStyleEditor/types.js index f20d0d016d850..51ac03051d448 100644 --- a/packages/react-devtools-shared/src/backend/NativeStyleEditor/types.js +++ b/packages/react-devtools-shared/src/backend/NativeStyleEditor/types.js @@ -7,14 +7,14 @@ * @flow */ -export type BoxStyle = $ReadOnly<{| +export type BoxStyle = $ReadOnly<{ bottom: number, left: number, right: number, top: number, -|}>; +}>; -export type Layout = {| +export type Layout = { x: number, y: number, width: number, @@ -23,12 +23,12 @@ export type Layout = {| top: number, margin: BoxStyle, padding: BoxStyle, -|}; +}; export type Style = Object; -export type StyleAndLayout = {| +export type StyleAndLayout = { id: number, style: Style | null, layout: Layout | null, -|}; +}; diff --git a/packages/react-devtools-shared/src/backend/StyleX/utils.js b/packages/react-devtools-shared/src/backend/StyleX/utils.js index 68bda23a2262c..2167321b0c84d 100644 --- a/packages/react-devtools-shared/src/backend/StyleX/utils.js +++ b/packages/react-devtools-shared/src/backend/StyleX/utils.js @@ -92,7 +92,9 @@ function getPropertyValueForStyleName(styleName: string): string | null { ]: any): CSSStyleSheet); // $FlowFixMe Flow doesn't konw about these properties const rules = styleSheet.rules || styleSheet.cssRules; + // $FlowFixMe `rules` is mixed for (let ruleIndex = 0; ruleIndex < rules.length; ruleIndex++) { + // $FlowFixMe `rules` is mixed const rule = rules[ruleIndex]; // $FlowFixMe Flow doesn't konw about these properties const {cssText, selectorText, style} = rule; diff --git a/packages/react-devtools-shared/src/backend/agent.js b/packages/react-devtools-shared/src/backend/agent.js index 222a883ce7619..0d0fb5e81d7f8 100644 --- a/packages/react-devtools-shared/src/backend/agent.js +++ b/packages/react-devtools-shared/src/backend/agent.js @@ -53,102 +53,102 @@ const debug = (methodName, ...args) => { } }; -type ElementAndRendererID = {| +type ElementAndRendererID = { id: number, rendererID: number, -|}; +}; -type StoreAsGlobalParams = {| +type StoreAsGlobalParams = { count: number, id: number, path: Array, rendererID: number, -|}; +}; -type CopyElementParams = {| +type CopyElementParams = { id: number, path: Array, rendererID: number, -|}; +}; -type InspectElementParams = {| +type InspectElementParams = { forceFullData: boolean, id: number, path: Array | null, rendererID: number, requestID: number, -|}; +}; -type OverrideHookParams = {| +type OverrideHookParams = { id: number, hookID: number, path: Array, rendererID: number, wasForwarded?: boolean, value: any, -|}; +}; -type SetInParams = {| +type SetInParams = { id: number, path: Array, rendererID: number, wasForwarded?: boolean, value: any, -|}; +}; type PathType = 'props' | 'hooks' | 'state' | 'context'; -type DeletePathParams = {| +type DeletePathParams = { type: PathType, hookID?: ?number, id: number, path: Array, rendererID: number, -|}; +}; -type RenamePathParams = {| +type RenamePathParams = { type: PathType, hookID?: ?number, id: number, oldPath: Array, newPath: Array, rendererID: number, -|}; +}; -type OverrideValueAtPathParams = {| +type OverrideValueAtPathParams = { type: PathType, hookID?: ?number, id: number, path: Array, rendererID: number, value: any, -|}; +}; -type OverrideErrorParams = {| +type OverrideErrorParams = { id: number, rendererID: number, forceError: boolean, -|}; +}; -type OverrideSuspenseParams = {| +type OverrideSuspenseParams = { id: number, rendererID: number, forceFallback: boolean, -|}; +}; -type PersistedSelection = {| +type PersistedSelection = { rendererID: number, path: Array, -|}; +}; -export default class Agent extends EventEmitter<{| +export default class Agent extends EventEmitter<{ hideNativeHighlight: [], showNativeHighlight: [NativeType], startInspectingNative: [], stopInspectingNative: [], shutdown: [], traceUpdates: [Set], -|}> { +}> { _bridge: BackendBridge; _isProfiling: boolean = false; _recordChangeDescriptions: boolean = false; @@ -254,7 +254,7 @@ export default class Agent extends EventEmitter<{| return this._rendererInterfaces; } - clearErrorsAndWarnings = ({rendererID}: {|rendererID: RendererID|}) => { + clearErrorsAndWarnings = ({rendererID}: {rendererID: RendererID}) => { const renderer = this._rendererInterfaces[rendererID]; if (renderer == null) { console.warn(`Invalid renderer id "${rendererID}"`); @@ -355,7 +355,7 @@ export default class Agent extends EventEmitter<{| this._bridge.send('bridgeProtocol', currentBridgeProtocol); }; - getProfilingData = ({rendererID}: {|rendererID: RendererID|}) => { + getProfilingData = ({rendererID}: {rendererID: RendererID}) => { const renderer = this._rendererInterfaces[rendererID]; if (renderer == null) { console.warn(`Invalid renderer id "${rendererID}"`); @@ -676,13 +676,13 @@ export default class Agent extends EventEmitter<{| showInlineWarningsAndErrors, hideConsoleLogsInStrictMode, browserTheme, - }: {| + }: { appendComponentStack: boolean, breakOnConsoleErrors: boolean, showInlineWarningsAndErrors: boolean, hideConsoleLogsInStrictMode: boolean, browserTheme: BrowserTheme, - |}) => { + }) => { // If the frontend preference has change, // or in the case of React Native- if the backend is just finding out the preference- // then reinstall the console overrides. diff --git a/packages/react-devtools-shared/src/backend/console.js b/packages/react-devtools-shared/src/backend/console.js index 5a85b68deac32..0ca957f216c6f 100644 --- a/packages/react-devtools-shared/src/backend/console.js +++ b/packages/react-devtools-shared/src/backend/console.js @@ -69,12 +69,12 @@ type OnErrorOrWarning = ( const injectedRenderers: Map< ReactRenderer, - {| + { currentDispatcherRef: CurrentDispatcherRef, getCurrentFiber: () => Fiber | null, onErrorOrWarning: ?OnErrorOrWarning, workTagMap: WorkTagMap, - |}, + }, > = new Map(); let targetConsole: Object = console; @@ -301,7 +301,15 @@ let unpatchForStrictModeFn: null | (() => void) = null; // NOTE: KEEP IN SYNC with src/hook.js:patchConsoleForInitialRenderInStrictMode export function patchForStrictMode() { if (consoleManagedByDevToolsDuringStrictMode) { - const overrideConsoleMethods = ['error', 'trace', 'warn', 'log']; + const overrideConsoleMethods = [ + 'error', + 'group', + 'groupCollapsed', + 'info', + 'log', + 'trace', + 'warn', + ]; if (unpatchForStrictModeFn !== null) { // Don't patch twice. @@ -363,3 +371,37 @@ export function unpatchForStrictMode(): void { } } } + +export function patchConsoleUsingWindowValues() { + const appendComponentStack = + castBool(window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__) ?? true; + const breakOnConsoleErrors = + castBool(window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__) ?? false; + const showInlineWarningsAndErrors = + castBool(window.__REACT_DEVTOOLS_SHOW_INLINE_WARNINGS_AND_ERRORS__) ?? true; + const hideConsoleLogsInStrictMode = + castBool(window.__REACT_DEVTOOLS_HIDE_CONSOLE_LOGS_IN_STRICT_MODE__) ?? + false; + const browserTheme = + castBrowserTheme(window.__REACT_DEVTOOLS_BROWSER_THEME__) ?? 'dark'; + + patch({ + appendComponentStack, + breakOnConsoleErrors, + showInlineWarningsAndErrors, + hideConsoleLogsInStrictMode, + browserTheme, + }); +} + +function castBool(v: any): ?boolean { + if (v === true || v === false) { + return v; + } +} + +function castBrowserTheme(v: any): ?BrowserTheme { + if (v === 'light' || v === 'dark' || v === 'auto') { + return v; + } +} diff --git a/packages/react-devtools-shared/src/backend/profilingHooks.js b/packages/react-devtools-shared/src/backend/profilingHooks.js index 2110545d8a663..bd08fef3505af 100644 --- a/packages/react-devtools-shared/src/backend/profilingHooks.js +++ b/packages/react-devtools-shared/src/backend/profilingHooks.js @@ -93,11 +93,11 @@ export function setPerformanceMock_ONLY_FOR_TESTING( export type GetTimelineData = () => TimelineData | null; export type ToggleProfilingStatus = (value: boolean) => void; -type Response = {| +type Response = { getTimelineData: GetTimelineData, profilingHooks: DevToolsProfilingHooks, toggleProfilingStatus: ToggleProfilingStatus, -|}; +}; export function createProfilingHooks({ getDisplayNameForFiber, @@ -106,14 +106,14 @@ export function createProfilingHooks({ workTagMap, currentDispatcherRef, reactVersion, -}: {| +}: { getDisplayNameForFiber: (fiber: Fiber) => string | null, getIsProfiling: () => boolean, getLaneLabelMap?: () => Map | null, currentDispatcherRef?: CurrentDispatcherRef, workTagMap: WorkTagMap, reactVersion: string, -|}): Response { +}): Response { let currentBatchUID: BatchUID = 0; let currentReactComponentMeasure: ReactComponentMeasure | null = null; let currentReactMeasuresStack: Array = []; diff --git a/packages/react-devtools-shared/src/backend/renderer.js b/packages/react-devtools-shared/src/backend/renderer.js index df1c5d53e0776..9e0d8c278c45f 100644 --- a/packages/react-devtools-shared/src/backend/renderer.js +++ b/packages/react-devtools-shared/src/backend/renderer.js @@ -63,7 +63,7 @@ import { } from '../constants'; import {inspectHooksOfFiber} from 'react-debug-tools'; import { - patch as patchConsole, + patchConsoleUsingWindowValues, registerRenderer as registerRendererWithConsole, patchForStrictMode as patchConsoleForStrictMode, unpatchForStrictMode as unpatchConsoleForStrictMode, @@ -124,25 +124,25 @@ import type { } from 'react-devtools-shared/src/types'; type getDisplayNameForFiberType = (fiber: Fiber) => string | null; -type getTypeSymbolType = (type: any) => Symbol | number; +type getTypeSymbolType = (type: any) => symbol | number; -type ReactPriorityLevelsType = {| +type ReactPriorityLevelsType = { ImmediatePriority: number, UserBlockingPriority: number, NormalPriority: number, LowPriority: number, IdlePriority: number, NoPriority: number, -|}; +}; -type ReactTypeOfSideEffectType = {| +type ReactTypeOfSideEffectType = { DidCapture: number, NoFlags: number, PerformedWork: number, Placement: number, Incomplete: number, Hydrating: number, -|}; +}; function getFiberFlags(fiber: Fiber): number { // The name of this field changed from "effectTag" to "flags" @@ -157,14 +157,14 @@ const getCurrentTime = export function getInternalReactConstants( version: string, -): {| +): { getDisplayNameForFiber: getDisplayNameForFiberType, getTypeSymbol: getTypeSymbolType, ReactPriorityLevels: ReactPriorityLevelsType, ReactTypeOfSideEffect: ReactTypeOfSideEffectType, ReactTypeOfWork: WorkTagMap, StrictModeBits: number, -|} { +} { const ReactTypeOfSideEffect: ReactTypeOfSideEffectType = { DidCapture: 0b10000000, NoFlags: 0b00, @@ -382,13 +382,14 @@ export function getInternalReactConstants( // End of copied code. // ********************************************************** - function getTypeSymbol(type: any): Symbol | number { + function getTypeSymbol(type: any): symbol | number { const symbolOrNumber = typeof type === 'object' && type !== null ? type.$$typeof : type; // $FlowFixMe Flow doesn't know about typeof "symbol" return typeof symbolOrNumber === 'symbol' - ? symbolOrNumber.toString() + ? // $FlowFixMe `toString()` doesn't match the type signature? + symbolOrNumber.toString() : symbolOrNumber; } @@ -468,8 +469,9 @@ export function getInternalReactConstants( return type; case HostPortal: case HostText: - case Fragment: return null; + case Fragment: + return 'Fragment'; case LazyComponent: // This display name will not be user visible. // Once a Lazy component loads its inner component, React replaces the tag and type. @@ -810,32 +812,12 @@ export function attach( // Patching the console enables DevTools to do a few useful things: // * Append component stacks to warnings and error messages // * Disable logging during re-renders to inspect hooks (see inspectHooksOfFiber) - // - // Don't patch in test environments because we don't want to interfere with Jest's own console overrides. - if (process.env.NODE_ENV !== 'test') { - registerRendererWithConsole(renderer, onErrorOrWarning); - - // The renderer interface can't read these preferences directly, - // because it is stored in localStorage within the context of the extension. - // It relies on the extension to pass the preference through via the global. - const appendComponentStack = - window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__ !== false; - const breakOnConsoleErrors = - window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__ === true; - const showInlineWarningsAndErrors = - window.__REACT_DEVTOOLS_SHOW_INLINE_WARNINGS_AND_ERRORS__ !== false; - const hideConsoleLogsInStrictMode = - window.__REACT_DEVTOOLS_HIDE_CONSOLE_LOGS_IN_STRICT_MODE__ === true; - const browserTheme = window.__REACT_DEVTOOLS_BROWSER_THEME__; - - patchConsole({ - appendComponentStack, - breakOnConsoleErrors, - showInlineWarningsAndErrors, - hideConsoleLogsInStrictMode, - browserTheme, - }); - } + registerRendererWithConsole(renderer, onErrorOrWarning); + + // The renderer interface can't read these preferences directly, + // because it is stored in localStorage within the context of the extension. + // It relies on the extension to pass the preference through via the global. + patchConsoleUsingWindowValues(); const debug = ( name: string, @@ -981,7 +963,7 @@ export function attach( // NOTICE Keep in sync with get*ForFiber methods function shouldFilterFiber(fiber: Fiber): boolean { - const {_debugSource, tag, type} = fiber; + const {_debugSource, tag, type, key} = fiber; switch (tag) { case DehydratedSuspenseComponent: @@ -993,13 +975,14 @@ export function attach( return true; case HostPortal: case HostText: - case Fragment: case LegacyHiddenComponent: case OffscreenComponent: return true; case HostRoot: // It is never valid to filter the root element. return false; + case Fragment: + return key === null; default: const typeSymbol = getTypeSymbol(type); @@ -1596,10 +1579,10 @@ export function attach( type OperationsArray = Array; - type StringTableEntry = {| + type StringTableEntry = { encodedString: Array, id: number, - |}; + }; const pendingOperations: OperationsArray = []; const pendingRealUnmountedIDs: Array = []; @@ -3951,7 +3934,7 @@ export function attach( } } - type CommitProfilingData = {| + type CommitProfilingData = { changeDescriptions: Map | null, commitTime: number, durations: Array, @@ -3960,7 +3943,7 @@ export function attach( passiveEffectDuration: number | null, priorityLevel: string | null, updaters: Array | null, - |}; + }; type CommitProfilingMetadataMap = Map>; type DisplayNamesByRootID = Map; diff --git a/packages/react-devtools-shared/src/backend/types.js b/packages/react-devtools-shared/src/backend/types.js index 81ed15b04ae78..1830edfef4055 100644 --- a/packages/react-devtools-shared/src/backend/types.js +++ b/packages/react-devtools-shared/src/backend/types.js @@ -26,7 +26,7 @@ export type WorkTag = number; export type WorkFlags = number; export type ExpirationTime = number; -export type WorkTagMap = {| +export type WorkTagMap = { CacheComponent: WorkTag, ClassComponent: WorkTag, ContextConsumer: WorkTag, @@ -55,22 +55,22 @@ export type WorkTagMap = {| SuspenseListComponent: WorkTag, TracingMarkerComponent: WorkTag, YieldComponent: WorkTag, -|}; +}; // TODO: If it's useful for the frontend to know which types of data an Element has // (e.g. props, state, context, hooks) then we could add a bitmask field for this // to keep the number of attributes small. -export type FiberData = {| +export type FiberData = { key: string | null, displayName: string | null, type: ElementType, -|}; +}; export type NativeType = Object; export type RendererID = number; type Dispatcher = any; -export type CurrentDispatcherRef = {|current: null | Dispatcher|}; +export type CurrentDispatcherRef = {current: null | Dispatcher}; export type GetDisplayNameForFiberID = ( id: number, @@ -84,7 +84,7 @@ export type GetFiberIDForNative = ( export type FindNativeNodesForFiberID = (id: number) => ?Array; export type ReactProviderType = { - $$typeof: Symbol | number, + $$typeof: symbol | number, _context: ReactContext, ... }; @@ -158,16 +158,16 @@ export type ReactRenderer = { ... }; -export type ChangeDescription = {| +export type ChangeDescription = { context: Array | boolean | null, didHooksChange: boolean, isFirstMount: boolean, props: Array | null, state: Array | null, hooks?: Array | null, -|}; +}; -export type CommitDataBackend = {| +export type CommitDataBackend = { // Tuple of fiber ID and change description changeDescriptions: Array<[number, ChangeDescription]> | null, duration: number, @@ -182,48 +182,48 @@ export type CommitDataBackend = {| priorityLevel: string | null, timestamp: number, updaters: Array | null, -|}; +}; -export type ProfilingDataForRootBackend = {| +export type ProfilingDataForRootBackend = { commitData: Array, displayName: string, // Tuple of Fiber ID and base duration initialTreeBaseDurations: Array<[number, number]>, rootID: number, -|}; +}; // Profiling data collected by the renderer interface. // This information will be passed to the frontend and combined with info it collects. -export type ProfilingDataBackend = {| +export type ProfilingDataBackend = { dataForRoots: Array, rendererID: number, timelineData: TimelineDataExport | null, -|}; +}; -export type PathFrame = {| +export type PathFrame = { key: string | null, index: number, displayName: string | null, -|}; +}; -export type PathMatch = {| +export type PathMatch = { id: number, isFullMatch: boolean, -|}; +}; -export type SerializedElement = {| +export type SerializedElement = { displayName: string | null, id: number, key: number | string | null, type: ElementType, -|}; +}; -export type OwnersList = {| +export type OwnersList = { id: number, owners: Array | null, -|}; +}; -export type InspectedElement = {| +export type InspectedElement = { id: number, displayName: string | null, @@ -278,48 +278,48 @@ export type InspectedElement = {| // UI plugins/visualizations for the inspected element. plugins: Plugins, -|}; +}; export const InspectElementErrorType = 'error'; export const InspectElementFullDataType = 'full-data'; export const InspectElementNoChangeType = 'no-change'; export const InspectElementNotFoundType = 'not-found'; -export type InspectElementError = {| +export type InspectElementError = { id: number, responseID: number, type: 'error', errorType: 'user' | 'unknown-hook' | 'uncaught', message: string, stack?: string, -|}; +}; -export type InspectElementFullData = {| +export type InspectElementFullData = { id: number, responseID: number, type: 'full-data', value: InspectedElement, -|}; +}; -export type InspectElementHydratedPath = {| +export type InspectElementHydratedPath = { id: number, responseID: number, type: 'hydrated-path', path: Array, value: any, -|}; +}; -export type InspectElementNoChange = {| +export type InspectElementNoChange = { id: number, responseID: number, type: 'no-change', -|}; +}; -export type InspectElementNotFound = {| +export type InspectElementNotFound = { id: number, responseID: number, type: 'not-found', -|}; +}; export type InspectedElementPayload = | InspectElementError @@ -328,10 +328,10 @@ export type InspectedElementPayload = | InspectElementNoChange | InspectElementNotFound; -export type InstanceAndStyle = {| +export type InstanceAndStyle = { instance: Object | null, style: Object | null, -|}; +}; type Type = 'props' | 'hooks' | 'state' | 'context'; @@ -411,7 +411,7 @@ export type Handler = (data: any) => void; // Renderers use these APIs to report profiling data to DevTools at runtime. // They get passed from the DevTools backend to the reconciler during injection. -export type DevToolsProfilingHooks = {| +export type DevToolsProfilingHooks = { // Scheduling methods: markRenderScheduled: (lane: Lane) => void, markStateUpdateScheduled: (fiber: Fiber, lane: Lane) => void, @@ -449,7 +449,7 @@ export type DevToolsProfilingHooks = {| markComponentPassiveEffectMountStopped: () => void, markComponentPassiveEffectUnmountStarted: (fiber: Fiber) => void, markComponentPassiveEffectUnmountStopped: () => void, -|}; +}; export type DevToolsHook = { listeners: {[key: string]: Array, ...}, diff --git a/packages/react-devtools-shared/src/backend/views/Highlighter/Overlay.js b/packages/react-devtools-shared/src/backend/views/Highlighter/Overlay.js index b9bfae87a86d3..577aaf912860e 100644 --- a/packages/react-devtools-shared/src/backend/views/Highlighter/Overlay.js +++ b/packages/react-devtools-shared/src/backend/views/Highlighter/Overlay.js @@ -12,7 +12,7 @@ import {getElementDimensions, getNestedBoundingClientRect} from '../utils'; import type {Rect} from '../utils'; import type Agent from 'react-devtools-shared/src/backend/agent'; -type Box = {|top: number, left: number, width: number, height: number|}; +type Box = {top: number, left: number, width: number, height: number}; const assign = Object.assign; @@ -148,8 +148,8 @@ class OverlayTip { } export default class Overlay { - window: window; - tipBoundsWindow: window; + window: any; + tipBoundsWindow: any; container: HTMLElement; tip: OverlayTip; rects: Array; diff --git a/packages/react-devtools-shared/src/backend/views/TraceUpdates/index.js b/packages/react-devtools-shared/src/backend/views/TraceUpdates/index.js index 831b47385d8ea..4927d4a3cb221 100644 --- a/packages/react-devtools-shared/src/backend/views/TraceUpdates/index.js +++ b/packages/react-devtools-shared/src/backend/views/TraceUpdates/index.js @@ -30,12 +30,12 @@ const getCurrentTime = ? () => performance.now() : () => Date.now(); -export type Data = {| +export type Data = { count: number, expirationTime: number, lastMeasuredAt: number, rect: Rect | null, -|}; +}; const nodeToData: Map = new Map(); diff --git a/packages/react-devtools-shared/src/backend/views/utils.js b/packages/react-devtools-shared/src/backend/views/utils.js index a677c7447efc7..35e8d17192c6a 100644 --- a/packages/react-devtools-shared/src/backend/views/utils.js +++ b/packages/react-devtools-shared/src/backend/views/utils.js @@ -39,7 +39,7 @@ export function getOwnerIframe(node: HTMLElement): HTMLElement | null { // Get a bounding client rect for a node, with an // offset added to compensate for its border. -export function getBoundingClientRectWithBorderOffset(node: HTMLElement) { +export function getBoundingClientRectWithBorderOffset(node: HTMLElement): Rect { const dimensions = getElementDimensions(node); return mergeRectOffsets([ node.getBoundingClientRect(), @@ -109,7 +109,22 @@ export function getNestedBoundingClientRect( } } -export function getElementDimensions(domElement: Element) { +export function getElementDimensions( + domElement: Element, +): { + borderBottom: number, + borderLeft: number, + borderRight: number, + borderTop: number, + marginBottom: number, + marginLeft: number, + marginRight: number, + marginTop: number, + paddingBottom: number, + paddingLeft: number, + paddingRight: number, + paddingTop: number, +} { const calculatedStyle = window.getComputedStyle(domElement); return { borderLeft: parseInt(calculatedStyle.borderLeftWidth, 10), diff --git a/packages/react-devtools-shared/src/backendAPI.js b/packages/react-devtools-shared/src/backendAPI.js index adf0c5e8b0911..efa56cfcaddf4 100644 --- a/packages/react-devtools-shared/src/backendAPI.js +++ b/packages/react-devtools-shared/src/backendAPI.js @@ -28,10 +28,10 @@ import type { export function clearErrorsAndWarnings({ bridge, store, -}: {| +}: { bridge: FrontendBridge, store: Store, -|}): void { +}): void { store.rootIDToRendererID.forEach(rendererID => { bridge.send('clearErrorsAndWarnings', {rendererID}); }); @@ -41,11 +41,11 @@ export function clearErrorsForElement({ bridge, id, rendererID, -}: {| +}: { bridge: FrontendBridge, id: number, rendererID: number, -|}): void { +}): void { bridge.send('clearErrorsForFiberID', { rendererID, id, @@ -56,11 +56,11 @@ export function clearWarningsForElement({ bridge, id, rendererID, -}: {| +}: { bridge: FrontendBridge, id: number, rendererID: number, -|}): void { +}): void { bridge.send('clearWarningsForFiberID', { rendererID, id, @@ -72,12 +72,12 @@ export function copyInspectedElementPath({ id, path, rendererID, -}: {| +}: { bridge: FrontendBridge, id: number, path: Array, rendererID: number, -|}): void { +}): void { bridge.send('copyElementPath', { id, path, @@ -91,13 +91,13 @@ export function inspectElement({ id, path, rendererID, -}: {| +}: { bridge: FrontendBridge, forceFullData: boolean, id: number, path: Array | null, rendererID: number, -|}): Promise { +}): Promise { const requestID = requestCounter++; const promise = getPromiseForRequestID( requestID, @@ -124,12 +124,12 @@ export function storeAsGlobal({ id, path, rendererID, -}: {| +}: { bridge: FrontendBridge, id: number, path: Array, rendererID: number, -|}): void { +}): void { bridge.send('storeAsGlobal', { count: storeAsGlobalCount++, id, diff --git a/packages/react-devtools-shared/src/bridge.js b/packages/react-devtools-shared/src/bridge.js index 0e5f837ecbc78..b5dd931ef0a3b 100644 --- a/packages/react-devtools-shared/src/bridge.js +++ b/packages/react-devtools-shared/src/bridge.js @@ -24,7 +24,7 @@ const BATCH_DURATION = 100; // This message specifies the version of the DevTools protocol currently supported by the backend, // as well as the earliest NPM version (e.g. "4.13.0") that protocol is supported by on the frontend. // This enables an older frontend to display an upgrade message to users for a newer, unsupported backend. -export type BridgeProtocol = {| +export type BridgeProtocol = { // Version supported by the current frontend/backend. version: number, @@ -32,7 +32,7 @@ export type BridgeProtocol = {| // Note that 'maxNpmVersion' is only set when the version is bumped. minNpmVersion: string, maxNpmVersion: string | null, -|}; +}; // Bump protocol version whenever a backwards breaking change is made // in the messages sent between BackendBridge and FrontendBridge. @@ -73,121 +73,121 @@ export const BRIDGE_PROTOCOL: Array = [ export const currentBridgeProtocol: BridgeProtocol = BRIDGE_PROTOCOL[BRIDGE_PROTOCOL.length - 1]; -type ElementAndRendererID = {|id: number, rendererID: RendererID|}; +type ElementAndRendererID = {id: number, rendererID: RendererID}; -type Message = {| +type Message = { event: string, payload: any, -|}; +}; -type HighlightElementInDOM = {| +type HighlightElementInDOM = { ...ElementAndRendererID, displayName: string | null, hideAfterTimeout: boolean, openNativeElementsPanel: boolean, scrollIntoView: boolean, -|}; +}; -type OverrideValue = {| +type OverrideValue = { ...ElementAndRendererID, path: Array, wasForwarded?: boolean, value: any, -|}; +}; -type OverrideHookState = {| +type OverrideHookState = { ...OverrideValue, hookID: number, -|}; +}; type PathType = 'props' | 'hooks' | 'state' | 'context'; -type DeletePath = {| +type DeletePath = { ...ElementAndRendererID, type: PathType, hookID?: ?number, path: Array, -|}; +}; -type RenamePath = {| +type RenamePath = { ...ElementAndRendererID, type: PathType, hookID?: ?number, oldPath: Array, newPath: Array, -|}; +}; -type OverrideValueAtPath = {| +type OverrideValueAtPath = { ...ElementAndRendererID, type: PathType, hookID?: ?number, path: Array, value: any, -|}; +}; -type OverrideError = {| +type OverrideError = { ...ElementAndRendererID, forceError: boolean, -|}; +}; -type OverrideSuspense = {| +type OverrideSuspense = { ...ElementAndRendererID, forceFallback: boolean, -|}; +}; -type CopyElementPathParams = {| +type CopyElementPathParams = { ...ElementAndRendererID, path: Array, -|}; +}; -type ViewAttributeSourceParams = {| +type ViewAttributeSourceParams = { ...ElementAndRendererID, path: Array, -|}; +}; -type InspectElementParams = {| +type InspectElementParams = { ...ElementAndRendererID, forceFullData: boolean, path: Array | null, requestID: number, -|}; +}; -type StoreAsGlobalParams = {| +type StoreAsGlobalParams = { ...ElementAndRendererID, count: number, path: Array, -|}; +}; -type NativeStyleEditor_RenameAttributeParams = {| +type NativeStyleEditor_RenameAttributeParams = { ...ElementAndRendererID, oldName: string, newName: string, value: string, -|}; +}; -type NativeStyleEditor_SetValueParams = {| +type NativeStyleEditor_SetValueParams = { ...ElementAndRendererID, name: string, value: string, -|}; +}; -type UpdateConsolePatchSettingsParams = {| +type UpdateConsolePatchSettingsParams = { appendComponentStack: boolean, breakOnConsoleErrors: boolean, showInlineWarningsAndErrors: boolean, hideConsoleLogsInStrictMode: boolean, browserTheme: BrowserTheme, -|}; +}; -type SavedPreferencesParams = {| +type SavedPreferencesParams = { appendComponentStack: boolean, breakOnConsoleErrors: boolean, componentFilters: Array, showInlineWarningsAndErrors: boolean, hideConsoleLogsInStrictMode: boolean, -|}; +}; -export type BackendEvents = {| +export type BackendEvents = { backendVersion: [string], bridgeProtocol: [BridgeProtocol], extensionBackendInitialized: [], @@ -211,13 +211,13 @@ export type BackendEvents = {| // React Native style editor plug-in. isNativeStyleEditorSupported: [ - {|isSupported: boolean, validAttributes: ?$ReadOnlyArray|}, + {isSupported: boolean, validAttributes: ?$ReadOnlyArray}, ], NativeStyleEditor_styleAndLayout: [StyleAndLayoutPayload], -|}; +}; -type FrontendEvents = {| - clearErrorsAndWarnings: [{|rendererID: RendererID|}], +type FrontendEvents = { + clearErrorsAndWarnings: [{rendererID: RendererID}], clearErrorsForFiberID: [ElementAndRendererID], clearNativeElementHighlight: [], clearWarningsForFiberID: [ElementAndRendererID], @@ -226,7 +226,7 @@ type FrontendEvents = {| getBackendVersion: [], getBridgeProtocol: [], getOwnersList: [ElementAndRendererID], - getProfilingData: [{|rendererID: RendererID|}], + getProfilingData: [{rendererID: RendererID}], getProfilingStatus: [], highlightNativeElement: [HighlightElementInDOM], inspectElement: [InspectElementParams], @@ -270,15 +270,15 @@ type FrontendEvents = {| overrideHookState: [OverrideHookState], overrideProps: [OverrideValue], overrideState: [OverrideValue], -|}; +}; class Bridge< OutgoingEvents: Object, IncomingEvents: Object, -> extends EventEmitter<{| +> extends EventEmitter<{ ...IncomingEvents, ...OutgoingEvents, -|}> { +}> { _isShutdown: boolean = false; _messageQueue: Array = []; _timeoutID: TimeoutID | null = null; @@ -375,7 +375,7 @@ class Bridge< } } - _flush = () => { + _flush: () => void = () => { // This method is used after the bridge is marked as destroyed in shutdown sequence, // so we do not bail out if the bridge marked as destroyed. // It is a private method that the bridge ensures is only called at the right times. @@ -400,7 +400,7 @@ class Bridge< // Temporarily support older standalone backends by forwarding "overrideValueAtPath" commands // to the older message types they may be listening to. - overrideValueAtPath = ({ + overrideValueAtPath: OverrideValueAtPath => void = ({ id, path, rendererID, diff --git a/packages/react-devtools-shared/src/constants.js b/packages/react-devtools-shared/src/constants.js index d7fafc082ce24..e51ced674d207 100644 --- a/packages/react-devtools-shared/src/constants.js +++ b/packages/react-devtools-shared/src/constants.js @@ -30,7 +30,7 @@ export const PROFILING_FLAG_TIMELINE_SUPPORT = 0b10; export const LOCAL_STORAGE_DEFAULT_TAB_KEY = 'React::DevTools::defaultTab'; -export const LOCAL_STORAGE_FILTER_PREFERENCES_KEY = +export const LOCAL_STORAGE_COMPONENT_FILTER_PREFERENCES_KEY = 'React::DevTools::componentFilters'; export const SESSION_STORAGE_LAST_SELECTION_KEY = @@ -51,7 +51,9 @@ export const SESSION_STORAGE_RELOAD_AND_PROFILE_KEY = export const LOCAL_STORAGE_SHOULD_BREAK_ON_CONSOLE_ERRORS = 'React::DevTools::breakOnConsoleErrors'; -export const LOCAL_STORAGE_SHOULD_PATCH_CONSOLE_KEY = +export const LOCAL_STORAGE_BROWSER_THEME = 'React::DevTools::theme'; + +export const LOCAL_STORAGE_SHOULD_APPEND_COMPONENT_STACK_KEY = 'React::DevTools::appendComponentStack'; export const LOCAL_STORAGE_SHOW_INLINE_WARNINGS_AND_ERRORS_KEY = @@ -79,7 +81,7 @@ import type { DisplayDensity, } from './devtools/views/Settings/SettingsContext'; -export const THEME_STYLES: {[style: Theme | DisplayDensity]: any} = { +export const THEME_STYLES: {[style: Theme | DisplayDensity]: any, ...} = { light: { '--color-attribute-name': '#ef6632', '--color-attribute-name-not-editable': '#23272f', @@ -393,11 +395,11 @@ export const THEME_STYLES: {[style: Theme | DisplayDensity]: any} = { // // Sometimes the inline target is rendered before root styles are applied, // which would result in e.g. NaN itemSize being passed to react-window list. -const COMFORTABLE_LINE_HEIGHT = parseInt( +const COMFORTABLE_LINE_HEIGHT: number = parseInt( THEME_STYLES.comfortable['--line-height-data'], 10, ); -const COMPACT_LINE_HEIGHT = parseInt( +const COMPACT_LINE_HEIGHT: number = parseInt( THEME_STYLES.compact['--line-height-data'], 10, ); diff --git a/packages/react-devtools-shared/src/devtools/ContextMenu/ContextMenu.js b/packages/react-devtools-shared/src/devtools/ContextMenu/ContextMenu.js index 90be1883612ab..e29a33bb32610 100644 --- a/packages/react-devtools-shared/src/devtools/ContextMenu/ContextMenu.js +++ b/packages/react-devtools-shared/src/devtools/ContextMenu/ContextMenu.js @@ -48,10 +48,10 @@ const HIDDEN_STATE = { pageY: 0, }; -type Props = {| +type Props = { children: (data: Object) => React$Node, id: string, -|}; +}; export default function ContextMenu({children, id}: Props) { const {hideMenu, registerMenu} = useContext( diff --git a/packages/react-devtools-shared/src/devtools/ContextMenu/ContextMenuItem.js b/packages/react-devtools-shared/src/devtools/ContextMenu/ContextMenuItem.js index f56bad1110b85..df313307b15f8 100644 --- a/packages/react-devtools-shared/src/devtools/ContextMenu/ContextMenuItem.js +++ b/packages/react-devtools-shared/src/devtools/ContextMenu/ContextMenuItem.js @@ -15,11 +15,11 @@ import styles from './ContextMenuItem.css'; import type {RegistryContextType} from './Contexts'; -type Props = {| +type Props = { children: React$Node, onClick: () => void, title: string, -|}; +}; export default function ContextMenuItem({children, onClick, title}: Props) { const {hideMenu} = useContext(RegistryContext); diff --git a/packages/react-devtools-shared/src/devtools/ContextMenu/Contexts.js b/packages/react-devtools-shared/src/devtools/ContextMenu/Contexts.js index e2caf6eefcaa6..f8d310a02f72b 100644 --- a/packages/react-devtools-shared/src/devtools/ContextMenu/Contexts.js +++ b/packages/react-devtools-shared/src/devtools/ContextMenu/Contexts.js @@ -9,7 +9,7 @@ import {createContext} from 'react'; -export type ShowFn = ({|data: Object, pageX: number, pageY: number|}) => void; +export type ShowFn = ({data: Object, pageX: number, pageY: number}) => void; export type HideFn = () => void; export type OnChangeFn = boolean => void; @@ -38,13 +38,13 @@ function showMenu({ onChange, pageX, pageY, -}: {| +}: { data: Object, id: string, onChange?: OnChangeFn, pageX: number, pageY: number, -|}) { +}) { const showFn = idToShowFnMap.get(id); if (typeof showFn === 'function') { // Prevent open menus from being left hanging. @@ -61,7 +61,7 @@ function showMenu({ } } -function registerMenu(id: string, showFn: ShowFn, hideFn: HideFn) { +function registerMenu(id: string, showFn: ShowFn, hideFn: HideFn): () => void { if (idToShowFnMap.has(id)) { throw Error(`Context menu with id "${id}" already registered.`); } @@ -75,11 +75,11 @@ function registerMenu(id: string, showFn: ShowFn, hideFn: HideFn) { }; } -export type RegistryContextType = {| +export type RegistryContextType = { hideMenu: typeof hideMenu, showMenu: typeof showMenu, registerMenu: typeof registerMenu, -|}; +}; export const RegistryContext = createContext({ hideMenu, diff --git a/packages/react-devtools-shared/src/devtools/ContextMenu/useContextMenu.js b/packages/react-devtools-shared/src/devtools/ContextMenu/useContextMenu.js index 150cb0766fc55..1a457f0de2c14 100644 --- a/packages/react-devtools-shared/src/devtools/ContextMenu/useContextMenu.js +++ b/packages/react-devtools-shared/src/devtools/ContextMenu/useContextMenu.js @@ -18,12 +18,12 @@ export default function useContextMenu({ id, onChange, ref, -}: {| +}: { data: Object, id: string, onChange?: OnChangeFn, ref: {current: ElementRef<*> | null}, -|}) { +}) { const {showMenu} = useContext(RegistryContext); useEffect(() => { diff --git a/packages/react-devtools-shared/src/devtools/ProfilerStore.js b/packages/react-devtools-shared/src/devtools/ProfilerStore.js index 1aa84d2da53f1..b74e958cefa77 100644 --- a/packages/react-devtools-shared/src/devtools/ProfilerStore.js +++ b/packages/react-devtools-shared/src/devtools/ProfilerStore.js @@ -21,11 +21,11 @@ import type { SnapshotNode, } from './views/Profiler/types'; -export default class ProfilerStore extends EventEmitter<{| +export default class ProfilerStore extends EventEmitter<{ isProcessingData: [], isProfiling: [], profilingData: [], -|}> { +}> { _bridge: FrontendBridge; // Suspense cache for lazily calculating derived profiling data. diff --git a/packages/react-devtools-shared/src/devtools/ProfilingCache.js b/packages/react-devtools-shared/src/devtools/ProfilingCache.js index 96e236b143d6c..6384db8d1c628 100644 --- a/packages/react-devtools-shared/src/devtools/ProfilingCache.js +++ b/packages/react-devtools-shared/src/devtools/ProfilingCache.js @@ -36,10 +36,10 @@ export default class ProfilingCache { getCommitTree = ({ commitIndex, rootID, - }: {| + }: { commitIndex: number, rootID: number, - |}) => + }) => getCommitTree({ commitIndex, profilerStore: this._profilerStore, @@ -49,10 +49,10 @@ export default class ProfilingCache { getFiberCommits = ({ fiberID, rootID, - }: {| + }: { fiberID: number, rootID: number, - |}): Array => { + }): Array => { const cachedFiberCommits = this._fiberCommits.get(fiberID); if (cachedFiberCommits != null) { return cachedFiberCommits; @@ -75,11 +75,11 @@ export default class ProfilingCache { commitIndex, commitTree, rootID, - }: {| + }: { commitIndex: number, commitTree: CommitTree, rootID: number, - |}): FlamegraphChartData => + }): FlamegraphChartData => getFlamegraphChartData({ commitIndex, commitTree, @@ -91,11 +91,11 @@ export default class ProfilingCache { commitIndex, commitTree, rootID, - }: {| + }: { commitIndex: number, commitTree: CommitTree, rootID: number, - |}): RankedChartData => + }): RankedChartData => getRankedChartData({ commitIndex, commitTree, diff --git a/packages/react-devtools-shared/src/devtools/cache.js b/packages/react-devtools-shared/src/devtools/cache.js index c98b0566d8819..acbbfff00b997 100644 --- a/packages/react-devtools-shared/src/devtools/cache.js +++ b/packages/react-devtools-shared/src/devtools/cache.js @@ -28,20 +28,20 @@ export type {Thenable}; type Suspender = {then(resolve: () => mixed, reject: () => mixed): mixed, ...}; -type PendingResult = {| +type PendingResult = { status: 0, value: Suspender, -|}; +}; -type ResolvedResult = {| +type ResolvedResult = { status: 1, value: Value, -|}; +}; -type RejectedResult = {| +type RejectedResult = { status: 2, value: mixed, -|}; +}; type Result = PendingResult | ResolvedResult | RejectedResult; diff --git a/packages/react-devtools-shared/src/devtools/index.js b/packages/react-devtools-shared/src/devtools/index.js index a15999478f1d9..12d8327bfef4f 100644 --- a/packages/react-devtools-shared/src/devtools/index.js +++ b/packages/react-devtools-shared/src/devtools/index.js @@ -9,10 +9,10 @@ import type {FrontendBridge} from 'react-devtools-shared/src/bridge'; -type Shell = {| +type Shell = { connect: (callback: Function) => void, onReload: (reloadFn: Function) => void, -|}; +}; export function initDevTools(shell: Shell) { shell.connect((bridge: FrontendBridge) => { diff --git a/packages/react-devtools-shared/src/devtools/store.js b/packages/react-devtools-shared/src/devtools/store.js index 2c5703505c965..b51597f43a528 100644 --- a/packages/react-devtools-shared/src/devtools/store.js +++ b/packages/react-devtools-shared/src/devtools/store.js @@ -23,7 +23,7 @@ import { import {ElementTypeRoot} from '../types'; import { getSavedComponentFilters, - saveComponentFilters, + setSavedComponentFilters, separateDisplayNameAndHOCs, shallowDiffers, utfDecodeString, @@ -62,9 +62,9 @@ const LOCAL_STORAGE_COLLAPSE_ROOTS_BY_DEFAULT_KEY = const LOCAL_STORAGE_RECORD_CHANGE_DESCRIPTIONS_KEY = 'React::DevTools::recordChangeDescriptions'; -type ErrorAndWarningTuples = Array<{|id: number, index: number|}>; +type ErrorAndWarningTuples = Array<{id: number, index: number}>; -type Config = {| +type Config = { checkBridgeProtocolCompatibility?: boolean, isProfiling?: boolean, supportsNativeInspection?: boolean, @@ -72,20 +72,20 @@ type Config = {| supportsReloadAndProfile?: boolean, supportsTimeline?: boolean, supportsTraceUpdates?: boolean, -|}; +}; -export type Capabilities = {| +export type Capabilities = { supportsBasicProfiling: boolean, hasOwnerMetadata: boolean, supportsStrictMode: boolean, supportsTimeline: boolean, -|}; +}; /** * The store is the single source of truth for updates from the backend. * ContextProviders can subscribe to the Store for specific things they want to provide. */ -export default class Store extends EventEmitter<{| +export default class Store extends EventEmitter<{ backendVersion: [], collapseNodesByDefault: [], componentFilters: [], @@ -99,7 +99,7 @@ export default class Store extends EventEmitter<{| supportsReloadAndProfile: [], unsupportedBridgeProtocolDetected: [], unsupportedRendererVersionDetected: [], -|}> { +}> { // If the backend version is new enough to report its (NPM) version, this is it. // This version may be displayed by the frontend for debugging purposes. _backendVersion: string | null = null; @@ -119,7 +119,7 @@ export default class Store extends EventEmitter<{| // Map of ID to number of recorded error and warning message IDs. _errorsAndWarnings: Map< number, - {|errorCount: number, warningCount: number|}, + {errorCount: number, warningCount: number}, > = new Map(); // At least one of the injected renderers contains (DEV only) owner metadata. @@ -365,7 +365,7 @@ export default class Store extends EventEmitter<{| this._componentFilters = value; // Update persisted filter preferences stored in localStorage. - saveComponentFilters(value); + setSavedComponentFilters(value); // Notify the renderer that filter preferences have changed. // This is an expensive operation; it unmounts and remounts the entire tree, @@ -553,7 +553,7 @@ export default class Store extends EventEmitter<{| } // Returns a tuple of [id, index] - getElementsWithErrorsAndWarnings(): Array<{|id: number, index: number|}> { + getElementsWithErrorsAndWarnings(): Array<{id: number, index: number}> { if (this._cachedErrorAndWarningTuples !== null) { return this._cachedErrorAndWarningTuples; } else { @@ -586,7 +586,7 @@ export default class Store extends EventEmitter<{| getErrorAndWarningCountForElementID( id: number, - ): {|errorCount: number, warningCount: number|} { + ): {errorCount: number, warningCount: number} { return this._errorsAndWarnings.get(id) || {errorCount: 0, warningCount: 0}; } @@ -681,6 +681,7 @@ export default class Store extends EventEmitter<{| let depth = 0; while (parentID > 0) { if (parentID === ownerID || unsortedIDs.has(parentID)) { + // $FlowFixMe[unsafe-addition] addition with possible null/undefined value depth = depthMap.get(parentID) + 1; depthMap.set(id, depth); break; @@ -871,10 +872,10 @@ export default class Store extends EventEmitter<{| onBridgeNativeStyleEditorSupported = ({ isSupported, validAttributes, - }: {| + }: { isSupported: boolean, validAttributes: ?$ReadOnlyArray, - |}) => { + }) => { this._isNativeStyleEditorSupported = isSupported; this._nativeStyleEditorValidAttributes = validAttributes || null; @@ -1332,7 +1333,7 @@ export default class Store extends EventEmitter<{| ) => { this._componentFilters = componentFilters; - saveComponentFilters(componentFilters); + setSavedComponentFilters(componentFilters); }; onBridgeShutdown = () => { diff --git a/packages/react-devtools-shared/src/devtools/utils.js b/packages/react-devtools-shared/src/devtools/utils.js index 7cbce2d771dea..86c9dd6c8cefe 100644 --- a/packages/react-devtools-shared/src/devtools/utils.js +++ b/packages/react-devtools-shared/src/devtools/utils.js @@ -13,7 +13,10 @@ import type {Element} from './views/Components/types'; import type {StateContext} from './views/Components/TreeContext'; import type Store from './store'; -export function printElement(element: Element, includeWeight: boolean = false) { +export function printElement( + element: Element, + includeWeight: boolean = false, +): string { let prefix = ' '; if (element.children.length > 0) { prefix = element.isCollapsed ? 'â–¸' : 'â–¾'; @@ -44,7 +47,7 @@ export function printElement(element: Element, includeWeight: boolean = false) { export function printOwnersList( elements: Array, includeWeight: boolean = false, -) { +): string { return elements .map(element => printElement(element, includeWeight)) .join('\n'); @@ -54,7 +57,7 @@ export function printStore( store: Store, includeWeight: boolean = false, state: StateContext | null = null, -) { +): string { const snapshotLines = []; let rootWeight = 0; @@ -172,7 +175,7 @@ export function smartParse(value: any) { } } -export function smartStringify(value: any) { +export function smartStringify(value: any): string { if (typeof value === 'number') { if (Number.isNaN(value)) { return 'NaN'; diff --git a/packages/react-devtools-shared/src/devtools/views/Button.js b/packages/react-devtools-shared/src/devtools/views/Button.js index 82400bb8982a2..bdd84b57da431 100644 --- a/packages/react-devtools-shared/src/devtools/views/Button.js +++ b/packages/react-devtools-shared/src/devtools/views/Button.js @@ -28,6 +28,7 @@ export default function Button({ ...rest }: Props) { let button = ( + // $FlowFixMe unsafe spread