Switch back to third party fetch lib for all node versions (#2961)

As discussed in https://github.com/MichMich/MagicMirror/pull/2952

Co-authored-by: veeck <michael@veeck.de>
This commit is contained in:
Veeck
2022-10-29 23:10:25 +02:00
committed by GitHub
parent f25abfd2f8
commit 3879949f58
3 changed files with 28 additions and 12 deletions

View File

@@ -21,6 +21,8 @@ Special thanks to: @rejas, @sdetweil
### Removed ### Removed
- Removed usage of internal fetch function of node until it is more stable.
### Updated ### Updated
- Cleaned up test directory (#2937) and jest config (#2959) - Cleaned up test directory (#2937) and jest config (#2959)

View File

@@ -1,20 +1,28 @@
/** /**
* fetch * Helper class to provide either third party fetch library or (if node >= 18)
* return internal node fetch implementation.
* *
* Attention: After some discussion we always return the third party
* implementation until the node implementation is stable and more tested
*
* @see https://github.com/MichMich/MagicMirror/pull/2952
* @see https://github.com/MichMich/MagicMirror/issues/2649
* @param {string} url to be fetched * @param {string} url to be fetched
* @param {object} options object e.g. for headers * @param {object} options object e.g. for headers
* @class * @class
*/ */
async function fetch(url, options = {}) { async function fetch(url, options = {}) {
const nodeVersion = process.version.match(/^v(\d+)\.*/)[1]; // const nodeVersion = process.version.match(/^v(\d+)\.*/)[1];
if (nodeVersion >= 18) { // if (nodeVersion >= 18) {
// node version >= 18 // // node version >= 18
return global.fetch(url, options); // return global.fetch(url, options);
} else { // } else {
// node version < 18 // // node version < 18
// const nodefetch = require("node-fetch");
// return nodefetch(url, options);
// }
const nodefetch = require("node-fetch"); const nodefetch = require("node-fetch");
return nodefetch(url, options); return nodefetch(url, options);
}
} }
module.exports = fetch; module.exports = fetch;

View File

@@ -1,4 +1,5 @@
const jsdom = require("jsdom"); const jsdom = require("jsdom");
const corefetch = require("fetch");
exports.startApplication = async (configFilename, exec) => { exports.startApplication = async (configFilename, exec) => {
jest.resetModules(); jest.resetModules();
@@ -82,8 +83,13 @@ exports.waitForAllElements = (selector) => {
}); });
}; };
// When native fetch is used keep-alive is set which causes issues with tests that should not share the connection, fall back to use the older one for now... exports.fetch = (url) => {
exports.fetch = require("node-fetch"); return new Promise((resolve) => {
corefetch(url).then((res) => {
resolve(res);
});
});
};
exports.testMatch = async (element, regex) => { exports.testMatch = async (element, regex) => {
const elem = await this.waitForElement(element); const elem = await this.waitForElement(element);