diff --git a/packages/fela-dom/src/server/renderToSheetList.js b/packages/fela-dom/src/server/renderToSheetList.js index 3acd4b656..2fea0a448 100644 --- a/packages/fela-dom/src/server/renderToSheetList.js +++ b/packages/fela-dom/src/server/renderToSheetList.js @@ -7,8 +7,13 @@ const sheetMap = { keyframes: KEYFRAME_TYPE, rules: RULE_TYPE } +type Sheet = { + css: string, + type: RULE_TYPE | KEYFRAME_TYPE | FONT_TYPE | STATIC_TYPE, + media?: string +} -export default function renderToSheetList(renderer: Object): string { +export default function renderToSheetList(renderer: Object): Array { const sheetList = [] for (const style in sheetMap) { @@ -21,9 +26,11 @@ export default function renderToSheetList(renderer: Object): string { } for (const media in renderer.mediaRules) { + const mediaCSS = renderer.mediaRules[media] + if (mediaCSS.length > 0) { sheetList.push({ - css: renderer.mediaRules[media], + css: mediaCSS, type: RULE_TYPE, media }) diff --git a/packages/fela-monolithic/src/index.js b/packages/fela-monolithic/src/index.js index bbe3509a3..84930d588 100644 --- a/packages/fela-monolithic/src/index.js +++ b/packages/fela-monolithic/src/index.js @@ -121,7 +121,8 @@ function useMonolithicRenderer( const processedStyle = processStyleWithPlugins( renderer, rule(props), - RULE_TYPE + RULE_TYPE, + props ) return renderer._renderStyleToClassNames(processedStyle, rule) } diff --git a/packages/fela-plugin-simulate/LICENSE b/packages/fela-plugin-simulate/LICENSE new file mode 100644 index 000000000..66b820997 --- /dev/null +++ b/packages/fela-plugin-simulate/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Robin Frischmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/fela-plugin-simulate/README.md b/packages/fela-plugin-simulate/README.md new file mode 100644 index 000000000..ea2e83ba0 --- /dev/null +++ b/packages/fela-plugin-simulate/README.md @@ -0,0 +1,69 @@ +# fela-plugin-simulate + + +npm downloads gzipped size + +This plugin can be used to quickly simulate nested style objects such as pseudo classes, media queries or attribute selectors. + +## Installation +```sh +yarn add fela-plugin-simulate +``` +You may alternatively use `npm i --save fela-plugin-simulate`. + + +## Usage +Make sure to read the documentation on [how to use plugins](http://fela.js.org/docs/advanced/Plugins.html). + +```javascript +import { createRenderer } from 'fela' +import simulate from 'fela-plugin-simulate' + +const renderer = createRenderer({ + plugins: [ simulate() ] +}) +``` + +## Example + +#### Input +```javascript +{ + color: 'red', + + '@media (min-height: 320px)': { + color: 'green', + backgroundColor: 'red' + }, + ':hover': { + color: 'blue' + }, + ':active': { + color: 'yellow' + } +} +``` + +rendered with the following props +```javascript +{ + simulate: { + ':hover': true, + ':active': false, + '@media (min-height: 320px)': true + } +} +``` + +#### Output +```javascript +{ + backgroundColor: 'red', + color: 'blue' +} +``` + +## License +Fela is licensed under the [MIT License](http://opensource.org/licenses/MIT).
+Documentation is licensed under [Creative Common License](http://creativecommons.org/licenses/by/4.0/).
+Created with ♥ by [@rofrischmann](http://rofrischmann.de) and all the great contributors. diff --git a/packages/fela-plugin-simulate/package.json b/packages/fela-plugin-simulate/package.json new file mode 100644 index 000000000..b6dbf23bd --- /dev/null +++ b/packages/fela-plugin-simulate/package.json @@ -0,0 +1,28 @@ +{ + "name": "fela-plugin-simulate", + "version": "5.0.0", + "description": "Fela plugin to simulate pseudo classes and media queries", + "main": "lib/index.js", + "module": "es/index.js", + "jsnext:main": "es/index.js", + "files": [ + "LICENSE", + "README.md", + "lib/**", + "es/**" + ], + "repository": "https://github.com/rofrischmann/fela/", + "keywords": [ + "fela", + "fela-native", + "react-native", + "media query", + "cssinjs" + ], + "author": "Robin Frischmann", + "license": "MIT", + "dependencies": { + "css-in-js-utils": "^1.0.3", + "fela-utils": "^5.0.0" + } +} diff --git a/packages/fela-plugin-simulate/src/__tests__/simulate-test.js b/packages/fela-plugin-simulate/src/__tests__/simulate-test.js new file mode 100644 index 000000000..c2c17535f --- /dev/null +++ b/packages/fela-plugin-simulate/src/__tests__/simulate-test.js @@ -0,0 +1,64 @@ +import simulate from '../index' + +describe('Simulating nested styles', () => { + it('should simulate pseudo classes', () => { + const style = { + width: 20, + ':hover': { color: 'red' }, + ':active': { color: 'blue' } + } + + expect( + simulate()(style, undefined, undefined, { simulate: { ':hover': true } }) + ).toEqual({ + width: 20, + color: 'red', + ':active': { color: 'blue' } + }) + }) + + it('should simulate media queries', () => { + const style = { + width: 20, + ':hover': { color: 'red' }, + '@media (min-height: 300px)': { color: 'blue' } + } + + expect( + simulate()(style, undefined, undefined, { + simulate: { + '@media (min-height: 300px)': true, + ':hover': false + } + }) + ).toEqual({ + width: 20, + color: 'blue', + ':hover': { color: 'red' } + }) + }) + + it('should simulate multiple nested styles', () => { + const style = { + width: 20, + ':hover': { + color: 'red', + backgroundColor: 'blue' + }, + '@media (min-height: 300px)': { color: 'blue' } + } + + expect( + simulate()(style, undefined, undefined, { + simulate: { + '@media (min-height: 300px)': true, + ':hover': true + } + }) + ).toEqual({ + width: 20, + backgroundColor: 'blue', + color: 'blue' + }) + }) +}) diff --git a/packages/fela-plugin-simulate/src/index.js b/packages/fela-plugin-simulate/src/index.js new file mode 100644 index 000000000..155463849 --- /dev/null +++ b/packages/fela-plugin-simulate/src/index.js @@ -0,0 +1,31 @@ +/* @flow */ +import { isObject } from 'fela-utils' +import assignStyle from 'css-in-js-utils/lib/assignStyle' + +import { DOMRenderer } from '../../../flowtypes/DOMRenderer' +import { NativeRenderer } from '../../../flowtypes/NativeRenderer' + +type Type = 'KEYFRAME' | 'RULE' | 'STATIC' +function resolveSimulation( + style: Object, + type: Type, + renderer: DOMRenderer | NativeRenderer, + props: Object +): Object { + if (props.simulate) { + for (const property in style) { + const value = style[property] + + if (isObject(value) && props.simulate[property]) { + const resolvedValue = resolveSimulation(value, type, renderer, props) + + assignStyle(style, resolvedValue) + delete style[property] + } + } + } + + return style +} + +export default () => resolveSimulation diff --git a/packages/fela-utils/src/processStyleWithPlugins.js b/packages/fela-utils/src/processStyleWithPlugins.js index f98057145..cf8ffb8fc 100644 --- a/packages/fela-utils/src/processStyleWithPlugins.js +++ b/packages/fela-utils/src/processStyleWithPlugins.js @@ -9,13 +9,14 @@ type Type = 'RULE' | 'KEYFRAME' | 'STATIC' export default function processStyleWithPlugins( renderer: DOMRenderer | NativeRenderer, style: Object, - type: Type + type: Type, + props: Object = {} ) { if (renderer.plugins.length > 0) { return arrayReduce( renderer.plugins, (processedStyle, plugin) => { - processedStyle = plugin(processedStyle, type, renderer) + processedStyle = plugin(processedStyle, type, renderer, props) return processedStyle }, style diff --git a/packages/fela/src/createRenderer.js b/packages/fela/src/createRenderer.js index 8e737f383..25a170269 100644 --- a/packages/fela/src/createRenderer.js +++ b/packages/fela/src/createRenderer.js @@ -64,7 +64,8 @@ export default function createRenderer( const processedStyle = processStyleWithPlugins( renderer, rule(props), - RULE_TYPE + RULE_TYPE, + props ) return renderer._renderStyleToClassNames(processedStyle).slice(1) }, @@ -82,7 +83,8 @@ export default function createRenderer( const processedKeyframe = processStyleWithPlugins( renderer, resolvedKeyframe, - KEYFRAME_TYPE + KEYFRAME_TYPE, + props ) const cssKeyframe = cssifyKeyframe( diff --git a/packages/react-fela/package.json b/packages/react-fela/package.json index c9459b82b..7ee91bfef 100644 --- a/packages/react-fela/package.json +++ b/packages/react-fela/package.json @@ -25,6 +25,9 @@ "peerDependencies": { "react": "*" }, + "devDependencies": { + "fela-dom": "^5.0.0" + }, "dependencies": { "fela": "^5.0.0", "prop-types": "^15.5.8" diff --git a/yarn.lock b/yarn.lock index d874344ae..806743e02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1464,7 +1464,7 @@ char-spinner@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" -cheerio@^0.22.0: +cheerio@0.22.0, cheerio@^0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" dependencies: @@ -1532,6 +1532,14 @@ cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" +clipboard@^1.5.5: + version "1.7.1" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-1.7.1.tgz#360d6d6946e99a7a1fef395e42ba92b5e9b5a16b" + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -2095,6 +2103,10 @@ delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" +delegate@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.1.3.tgz#9a8251a777d7025faa55737bc3b071742127a9fd" + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -2217,6 +2229,10 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" +emojify.js@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/emojify.js/-/emojify.js-1.1.0.tgz#079fff223307c9007f570785e8e4935d5c398beb" + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -3001,6 +3017,32 @@ gitbook-cli@^2.3.0: tmp "0.0.28" user-home "2.0.0" +gitbook-plugin-advanced-emoji@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/gitbook-plugin-advanced-emoji/-/gitbook-plugin-advanced-emoji-0.2.2.tgz#08bcc69f62a749cd69204435276518c941c319e3" + dependencies: + emojify.js "^1.1.0" + +gitbook-plugin-anker-enable@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/gitbook-plugin-anker-enable/-/gitbook-plugin-anker-enable-0.0.4.tgz#7fc714b96d7fe9a957c88337f00e83e0a8214d79" + +gitbook-plugin-edit-link@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/gitbook-plugin-edit-link/-/gitbook-plugin-edit-link-2.0.2.tgz#d8fcd927eced81e7a662a72d59db609eafd7e72f" + +gitbook-plugin-github@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/gitbook-plugin-github/-/gitbook-plugin-github-2.0.0.tgz#5166e763cfcc402d432880b7a6c85c1c54b56a8d" + +gitbook-plugin-prism@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gitbook-plugin-prism/-/gitbook-plugin-prism-2.2.0.tgz#7d941a6e1aaba0340f88d9b375502a6533eaa69c" + dependencies: + cheerio "0.22.0" + mkdirp "0.5.1" + prismjs "1.6.0" + gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" @@ -3129,6 +3171,12 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + dependencies: + delegate "^3.1.2" + graceful-fs@4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.2.tgz#fe2239b7574972e67e41f808823f9bfa4a991e37" @@ -4587,13 +4635,13 @@ mime-db@~1.23.0: version "1.23.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" -mime-types@2.1.11, mime-types@^2.1.11, mime-types@~2.1.7: +mime-types@2.1.11, mime-types@~2.1.7: version "2.1.11" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" dependencies: mime-db "~1.23.0" -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.6, mime-types@~2.1.9: +mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.6, mime-types@~2.1.9: version "2.1.15" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: @@ -4652,7 +4700,7 @@ minimist@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -5438,6 +5486,12 @@ pretty-format@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" +prismjs@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.6.0.tgz#118d95fb7a66dba2272e343b345f5236659db365" + optionalDependencies: + clipboard "^1.5.5" + private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -5935,33 +5989,7 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" -request@2, request@^2.47.0, request@~2.72.0: - version "2.72.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~1.0.0-rc3" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.1.0" - stringstream "~0.0.4" - tough-cookie "~2.2.0" - tunnel-agent "~0.4.1" - -request@^2.74.0, request@^2.79.0, request@^2.81.0: +request@2, request@^2.47.0, request@^2.74.0, request@^2.79.0, request@^2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -6014,6 +6042,32 @@ request@~2.69.0: tough-cookie "~2.2.0" tunnel-agent "~0.4.1" +request@~2.72.0: + version "2.72.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + bl "~1.1.2" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~1.0.0-rc3" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.1.0" + stringstream "~0.0.4" + tough-cookie "~2.2.0" + tunnel-agent "~0.4.1" + request@~2.74.0: version "2.74.0" resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" @@ -6199,11 +6253,15 @@ sax@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", semver@5.x, "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.3.0, semver@~5.3.0: +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.1, semver@^5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@5.1.0, semver@^5.1.0, semver@~5.1.0: +semver@5.1.0, semver@5.x, semver@^5.0.3, semver@^5.1.0, semver@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5" @@ -6647,6 +6705,10 @@ time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" +tiny-emitter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.0.tgz#bad327adb1804b42a231afa741532bd884cd09ad" + tmp@0.0.28: version "0.0.28" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" @@ -6742,7 +6804,7 @@ ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@2.7.5: +uglify-js@2.7.5, uglify-js@^2.6: version "2.7.5" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" dependencies: @@ -6751,15 +6813,6 @@ uglify-js@2.7.5: uglify-to-browserify "~1.0.0" yargs "~3.10.0" -uglify-js@^2.6: - version "2.8.27" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" @@ -6927,11 +6980,7 @@ whatwg-encoding@^1.0.1: dependencies: iconv-lite "0.4.13" -whatwg-fetch@>=0.10.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" - -whatwg-fetch@^1.0.0: +whatwg-fetch@>=0.10.0, whatwg-fetch@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319"