From 3ec5b5626372155d4e4bc1b077007a74ce3ed7b0 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Mon, 28 Feb 2022 03:50:34 -0800 Subject: [PATCH] Polyfill fetch Summary: Provide server add-on writers with a well-known fetch API Reviewed By: mweststrate Differential Revision: D34447630 fbshipit-source-id: 70386940c12f9e53aa97b3530a7edf1d40b5f2e2 --- desktop/flipper-server-core/package.json | 3 +- .../src/FlipperServerImpl.tsx | 1 + .../src/utils/fetch-polyfill.tsx | 32 +++++++++++++++ desktop/yarn.lock | 39 +++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 desktop/flipper-server-core/src/utils/fetch-polyfill.tsx diff --git a/desktop/flipper-server-core/package.json b/desktop/flipper-server-core/package.json index a4e149a8d..c62966229 100644 --- a/desktop/flipper-server-core/package.json +++ b/desktop/flipper-server-core/package.json @@ -19,13 +19,14 @@ "axios": "^0.26.0", "flipper-common": "0.0.0", "flipper-doctor": "0.0.0", - "flipper-plugin-lib": "0.0.0", "flipper-plugin": "0.0.0", + "flipper-plugin-lib": "0.0.0", "form-data": "^4.0.0", "fs-extra": "^10.0.0", "invariant": "^2.2.4", "js-base64": "^3.7.2", "lodash.memoize": "^4.1.2", + "node-fetch": "^3.2.0", "open": "^8.3.0", "openssl-wrapper": "^0.3.4", "promisify-child-process": "^4.1.1", diff --git a/desktop/flipper-server-core/src/FlipperServerImpl.tsx b/desktop/flipper-server-core/src/FlipperServerImpl.tsx index 22d6f6ced..890bb95c0 100644 --- a/desktop/flipper-server-core/src/FlipperServerImpl.tsx +++ b/desktop/flipper-server-core/src/FlipperServerImpl.tsx @@ -7,6 +7,7 @@ * @format */ +import './utils/fetch-polyfill'; import EventEmitter from 'events'; import {ServerController} from './comms/ServerController'; import {CertificateExchangeMedium} from './utils/CertificateProvider'; diff --git a/desktop/flipper-server-core/src/utils/fetch-polyfill.tsx b/desktop/flipper-server-core/src/utils/fetch-polyfill.tsx new file mode 100644 index 000000000..7cd5d74b7 --- /dev/null +++ b/desktop/flipper-server-core/src/utils/fetch-polyfill.tsx @@ -0,0 +1,32 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import nodeFetch, { + Headers as HeadersNF, + Request as RequestNF, + Response as ResponseNF, +} from 'node-fetch'; + +declare module globalThis { + // eslint-disable-next-line no-var + var fetch: typeof nodeFetch; + // eslint-disable-next-line no-var + var Headers: typeof HeadersNF; + // eslint-disable-next-line no-var + var Request: typeof RequestNF; + // eslint-disable-next-line no-var + var Response: typeof ResponseNF; +} + +if (!globalThis.fetch) { + globalThis.fetch = nodeFetch; + globalThis.Headers = HeadersNF; + globalThis.Request = RequestNF; + globalThis.Response = ResponseNF; +} diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 93865b253..7b962d511 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -4980,6 +4980,11 @@ damerau-levenshtein@^1.0.7: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== +data-uri-to-buffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" + integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -6280,6 +6285,14 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.1.4.tgz#e8c6567f80ad7fc22fd302e7dcb72bafde9c1717" + integrity sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + figures@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" @@ -6468,6 +6481,13 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -9279,6 +9299,11 @@ node-addon-api@^1.6.3: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-fetch@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" @@ -9291,6 +9316,15 @@ node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.0.tgz#59390db4e489184fa35d4b74caf5510e8dfbaf3b" + integrity sha512-8xeimMwMItMw8hRrOl3C9/xzU49HV/yE6ORew/l+dxWimO5A4Ra8ld2rerlJvc/O7et5Z1zrWsPX43v1QBjCxw== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -12630,6 +12664,11 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web-streams-polyfill@^3.0.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz#a6b74026b38e4885869fb5c589e90b95ccfc7965" + integrity sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"