From 67960e355914725febeb49d58a919ec880a07a4b Mon Sep 17 00:00:00 2001 From: "#0003-2022-20-06-06:17:07PM" <107682682+FW1342@users.noreply.github.com> Date: Thu, 7 Jul 2022 04:35:37 +0800 Subject: [PATCH] ppp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cross-fetch
[![NPM Version](https://img.shields.io/npm/v/cross-fetch.svg?branch=main)](https://www.npmjs.com/package/cross-fetch) [![Downloads Per Week](https://img.shields.io/npm/dw/cross-fetch.svg?color=blue)](https://www.npmjs.com/package/cross-fetch) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![CI](https://github.com/lquixada/cross-fetch/actions/workflows/ci.yml/badge.svg)](https://github.com/lquixada/cross-fetch/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/lquixada/cross-fetch/branch/main/graph/badge.svg)](https://codecov.io/gh/lquixada/cross-fetch) ================ Universal WHATWG Fetch API for Node, Browsers and React Native. The scenario that cross-fetch really shines is when the same JavaScript codebase needs to run on different platforms. - **Platform agnostic**: browsers, Node or React Native - **Optional polyfill**: it's up to you if something is going to be added to the global object or not - **Simple interface**: no instantiation, no configuration and no extra dependency - **WHATWG compliant**: it works the same way wherever your code runs - **TypeScript support**: better development experience with types. * * * ## Table of Contents - [Install](#install) - [Usage](#usage) - [Demo & API](#demo--api) - [FAQ](#faq) - [Thanks](#thanks) - [License](#license) - [Author](#author) * * * ## Install ```sh npm install --save cross-fetch ``` As a [ponyfill](https://github.com/sindresorhus/ponyfill): ```javascript // Using ES6 modules with Babel or TypeScript import fetch from 'cross-fetch'; // Using CommonJS modules const fetch = require('cross-fetch'); ``` As a polyfill: ```javascript // Using ES6 modules import 'cross-fetch/polyfill'; // Using CommonJS modules require('cross-fetch/polyfill'); ``` The CDN build is also available on unpkg: ```html ``` This adds the fetch function to the window object. Note that this is not UMD compatible. * * * ## Usage With [promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise): ```javascript import fetch from 'cross-fetch'; // Or just: import 'cross-fetch/polyfill'; fetch('//api.github.com/users/lquixada') .then(res => { if (res.status >= 400) { throw new Error("Bad response from server"); } return res.json(); }) .then(user => { console.log(user); }) .catch(err => { console.error(err); }); ``` With [async/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function): ```javascript import fetch from 'cross-fetch'; // Or just: import 'cross-fetch/polyfill'; (async () => { try { const res = await fetch('//api.github.com/users/lquixada'); if (res.status >= 400) { throw new Error("Bad response from server"); } const user = await res.json(); console.log(user); } catch (err) { console.error(err); } })(); ``` > ⚠️ **Warning**: If you're in an environment that doesn't support Promises such as Internet Explorer, you must install an ES6 Promise compatible polyfill. [es6-promise](https://github.com/jakearchibald/es6-promise) is suggested. ## Demo & API You can find a comprehensive doc at [Github's fetch](https://github.github.io/fetch/) page. If you want to play with cross-fetch, check our [**JSFiddle playground**](https://jsfiddle.net/lquixada/3ypqgacp/). > **Tip**: Run the fiddle on various browsers and with different settings (for instance: cross-domain requests, wrong urls or text requests). Don't forget to open the console in the test suite page and play around. ## FAQ #### Yet another fetch library? I did a lot of research in order to find a fetch library that could be simple, cross-platform and provide polyfill as an option. There's a plethora of libs out there but none could match those requirements. #### Why not isomorphic-fetch? My preferred library used to be [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) but it has this [bug](https://github.com/matthew-andrews/isomorphic-fetch/issues/125) that prevents it from running in a react native environment. It seems unlikely to be fixed since there haven't been any new commits to it since 2016. That means dependencies are outdated as well. #### Why polyfill might not be a good idea? In a word? Risk. If the spec changes in the future, it might be problematic to debug. Read more about it on [sindresorhus's ponyfill](https://github.com/sindresorhus/ponyfill#how-are-ponyfills-better-than-polyfills) page. It's up to you if you're fine with it or not. #### How does cross-fetch work? Just like isomorphic-fetch, it is just a proxy. If you're in node, it delivers you the [node-fetch](https://github.com/bitinn/node-fetch/) library, if you're in a browser or React Native, it delivers you the github's [whatwg-fetch](https://github.com/github/fetch/). The same strategy applies whether you're using polyfill or ponyfill. ## Who's Using It? |[![The New York Times](./docs/images/logo-nytimes.png)](https://www.nytimes.com/)|[![Apollo GraphQL](./docs/images/logo-apollo.png)](https://github.com/apollographql/apollo-client/)|[![Facebook](./docs/images/logo-facebook.png)](https://github.com/facebook/fbjs/)|[![Swagger](./docs/images/logo-swagger.png)](https://swagger.io/)|[![VulcanJS](./docs/images/logo-vulcanjs.png)](http://vulcanjs.org)|[![graphql-request](./docs/images/logo-graphql-request.png)](https://github.com/prisma/graphql-request)| |:---:|:---:|:---:|:---:|:---:|:---:| |The New York Times|Apollo GraphQL|Facebook|Swagger|VulcanJS|graphql-request| ## Thanks Heavily inspired by the works of [matthew-andrews](https://github.com/matthew-andrews). Kudos to him! ## License cross-fetch is licensed under the [MIT license](https://github.com/lquixada/cross-fetch/blob/main/LICENSE) © [Leonardo Quixadá](https://twitter.com/lquixada/) ## Author |[![@lquixada](https://avatars0.githubusercontent.com/u/195494?v=4&s=96)](https://github.com/lquixada)| |:---:| |[@lquixada](http://www.github.com/lquixada)| --- .github/ISSUE_TEMPLATE/custom.md | 178 +++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/custom.md diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 0000000..d9fce6b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -0,0 +1,178 @@ +--- +name: Custom issue template +about: Describe this issue template's purpose here. +title: '' +labels: '' +assignees: '' + +--- + +cross-fetch
+[![NPM Version](https://img.shields.io/npm/v/cross-fetch.svg?branch=main)](https://www.npmjs.com/package/cross-fetch) +[![Downloads Per Week](https://img.shields.io/npm/dw/cross-fetch.svg?color=blue)](https://www.npmjs.com/package/cross-fetch) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) +[![CI](https://github.com/lquixada/cross-fetch/actions/workflows/ci.yml/badge.svg)](https://github.com/lquixada/cross-fetch/actions/workflows/ci.yml) +[![codecov](https://codecov.io/gh/lquixada/cross-fetch/branch/main/graph/badge.svg)](https://codecov.io/gh/lquixada/cross-fetch) +================ + +Universal WHATWG Fetch API for Node, Browsers and React Native. The scenario that cross-fetch really shines is when the same JavaScript codebase needs to run on different platforms. + +- **Platform agnostic**: browsers, Node or React Native +- **Optional polyfill**: it's up to you if something is going to be added to the global object or not +- **Simple interface**: no instantiation, no configuration and no extra dependency +- **WHATWG compliant**: it works the same way wherever your code runs +- **TypeScript support**: better development experience with types. + + +* * * + +## Table of Contents + +- [Install](#install) +- [Usage](#usage) +- [Demo & API](#demo--api) +- [FAQ](#faq) +- [Thanks](#thanks) +- [License](#license) +- [Author](#author) + +* * * + +## Install + +```sh +npm install --save cross-fetch +``` + +As a [ponyfill](https://github.com/sindresorhus/ponyfill): + +```javascript +// Using ES6 modules with Babel or TypeScript +import fetch from 'cross-fetch'; + +// Using CommonJS modules +const fetch = require('cross-fetch'); +``` + +As a polyfill: + +```javascript +// Using ES6 modules +import 'cross-fetch/polyfill'; + +// Using CommonJS modules +require('cross-fetch/polyfill'); +``` + + +The CDN build is also available on unpkg: + +```html + +``` + +This adds the fetch function to the window object. Note that this is not UMD compatible. + + +* * * + +## Usage + +With [promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise): + +```javascript +import fetch from 'cross-fetch'; +// Or just: import 'cross-fetch/polyfill'; + +fetch('//api.github.com/users/lquixada') + .then(res => { + if (res.status >= 400) { + throw new Error("Bad response from server"); + } + return res.json(); + }) + .then(user => { + console.log(user); + }) + .catch(err => { + console.error(err); + }); +``` + +With [async/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function): + +```javascript +import fetch from 'cross-fetch'; +// Or just: import 'cross-fetch/polyfill'; + +(async () => { + try { + const res = await fetch('//api.github.com/users/lquixada'); + + if (res.status >= 400) { + throw new Error("Bad response from server"); + } + + const user = await res.json(); + + console.log(user); + } catch (err) { + console.error(err); + } +})(); +``` + +> ⚠️ **Warning**: If you're in an environment that doesn't support Promises such as Internet Explorer, you must install an ES6 Promise compatible polyfill. [es6-promise](https://github.com/jakearchibald/es6-promise) is suggested. + + +## Demo & API + +You can find a comprehensive doc at [Github's fetch](https://github.github.io/fetch/) page. If you want to play with cross-fetch, check our [**JSFiddle playground**](https://jsfiddle.net/lquixada/3ypqgacp/). + +> **Tip**: Run the fiddle on various browsers and with different settings (for instance: cross-domain requests, wrong urls or text requests). Don't forget to open the console in the test suite page and play around. + + +## FAQ + +#### Yet another fetch library? + +I did a lot of research in order to find a fetch library that could be simple, cross-platform and provide polyfill as an option. There's a plethora of libs out there but none could match those requirements. + + +#### Why not isomorphic-fetch? + +My preferred library used to be [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) but it has this [bug](https://github.com/matthew-andrews/isomorphic-fetch/issues/125) that prevents it from running in a react native environment. It seems unlikely to be fixed since there haven't been any new commits to it since 2016. That means dependencies are outdated as well. + + +#### Why polyfill might not be a good idea? + +In a word? Risk. If the spec changes in the future, it might be problematic to debug. Read more about it on [sindresorhus's ponyfill](https://github.com/sindresorhus/ponyfill#how-are-ponyfills-better-than-polyfills) page. It's up to you if you're fine with it or not. + + +#### How does cross-fetch work? + +Just like isomorphic-fetch, it is just a proxy. If you're in node, it delivers you the [node-fetch](https://github.com/bitinn/node-fetch/) library, if you're in a browser or React Native, it delivers you the github's [whatwg-fetch](https://github.com/github/fetch/). The same strategy applies whether you're using polyfill or ponyfill. + + +## Who's Using It? + +|[![The New York Times](./docs/images/logo-nytimes.png)](https://www.nytimes.com/)|[![Apollo GraphQL](./docs/images/logo-apollo.png)](https://github.com/apollographql/apollo-client/)|[![Facebook](./docs/images/logo-facebook.png)](https://github.com/facebook/fbjs/)|[![Swagger](./docs/images/logo-swagger.png)](https://swagger.io/)|[![VulcanJS](./docs/images/logo-vulcanjs.png)](http://vulcanjs.org)|[![graphql-request](./docs/images/logo-graphql-request.png)](https://github.com/prisma/graphql-request)| +|:---:|:---:|:---:|:---:|:---:|:---:| +|The New York Times|Apollo GraphQL|Facebook|Swagger|VulcanJS|graphql-request| + + +## Thanks + +Heavily inspired by the works of [matthew-andrews](https://github.com/matthew-andrews). Kudos to him! + + +## License + +cross-fetch is licensed under the [MIT license](https://github.com/lquixada/cross-fetch/blob/main/LICENSE) © [Leonardo Quixadá](https://twitter.com/lquixada/) + + +## Author + +|[![@lA89F(https://avatar1.githubusercontent.com/u/17111268?v=4&SR=98)](https://github.com/lquixada)| +|:---:| +|[@lSSH](http://www.github.com/SSH)|