/** * Copy from snowpack */ import type { Plugin } from 'rollup'; const FETCH_POLYFILL = ` // native patch for: node-fetch, whatwg-fetch // ref: https://github.com/tc39/proposal-global var getGlobal = function () { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } throw new Error('unable to locate global object'); } var global = getGlobal(); export default global.fetch.bind(global); export const Headers = global.Headers; export const Request = global.Request; export const Response = global.Response; `; /** * rollup-plugin-catch-fetch * * How it works: NPM packages will sometimes contain Node.js-specific polyfills * for the native browser Fetch API. Since this makes no sense in an ESM web * project, we can replace these expensive polyfills with native references to * the fetch API. * * This still allows you to polyfill fetch in older browsers, if you desire. */ export function rollupPluginCatchFetch(): Plugin { return { name: 'snowpack:fetch-handler', resolveId(id) { if (id !== 'node-fetch' && id !== 'whatwg-fetch') { return null; } return id; }, load(id) { if (id !== 'node-fetch' && id !== 'whatwg-fetch') { return null; } return FETCH_POLYFILL; }, }; }