-
Notifications
You must be signed in to change notification settings - Fork 105
/
rollup.config.js
134 lines (123 loc) · 3.57 KB
/
rollup.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* Rollup creates the browser version of the polyfill and ponyfill. */
import path from 'path'
import copy from 'rollup-plugin-copy'
import terser from '@rollup/plugin-terser'
const input = path.join(__dirname, 'node_modules', 'whatwg-fetch', 'fetch.js')
const outdent = str => str.replace(/^\s*/mg, '')
export default [
/**
* Ponyfill for CommonJS or EcmaScript Modules
* Description:
* Wraps up the whatwg-fetch code in order to prevent it from adding fetch to
* the global object.
* Usage examples:
* - const fetch = require('cross-fetch')
* - import fetch from 'cross-fetch')
*/
{
input,
output: {
file: path.join(__dirname, 'dist', 'browser-ponyfill.js'),
format: 'iife',
name: 'irrelevant',
strict: false,
banner: outdent(`
// Save global object in a variable
var __global__ =
(typeof globalThis !== 'undefined' && globalThis) ||
(typeof self !== 'undefined' && self) ||
(typeof global !== 'undefined' && global);
// Create an object that extends from __global__ without the fetch function
var __globalThis__ = (function () {
function F() {
this.fetch = false;
this.DOMException = __global__.DOMException
}
F.prototype = __global__; // Needed for feature detection on whatwg-fetch's code
return new F();
})();
// Wraps whatwg-fetch with a function scope to hijack the global object
// "globalThis" that's going to be patched
(function(globalThis) {
`),
footer: outdent(`
})(__globalThis__);
// This is a ponyfill, so...
__globalThis__.fetch.ponyfill = true;
delete __globalThis__.fetch.polyfill;
// Choose between native implementation (__global__) or custom implementation (__globalThis__)
var ctx = __global__.fetch ? __global__ : __globalThis__;
exports = ctx.fetch // To enable: import fetch from 'cross-fetch'
exports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.
exports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'
exports.Headers = ctx.Headers
exports.Request = ctx.Request
exports.Response = ctx.Response
module.exports = exports
`)
},
plugins: [
copy({
targets: [
{ src: 'src/*-ponyfill.js', dest: 'dist' }
],
verbose: true
})
],
context: 'this'
},
/**
* Polyfill for CommonJS or EcmaScript Modules
* Usage examples:
* - require('cross-fetch/polyfill')
* - import 'cross-fetch/polyfill'
*/
{
input,
output: {
file: path.join(__dirname, 'dist', 'browser-polyfill.js'),
format: 'iife',
name: 'irrelevant',
strict: false,
banner: outdent(`
(function(self) {
`),
footer: outdent(`
})(typeof self !== 'undefined' ? self : this);
`)
},
plugins: [
copy({
targets: [
{ src: 'src/*-polyfill.js', dest: 'dist' }
],
verbose: true
})
],
context: 'this'
},
/**
* Browser
* Usage examples:
* - <script src="cross-fetch.js"></script>
*/
{
input,
output: {
file: path.join(__dirname, 'dist', 'cross-fetch.js'),
format: 'iife',
name: 'irrelevant',
sourcemap: true,
strict: false,
banner: outdent(`
(function(self) {
`),
footer: outdent(`
})(typeof self !== 'undefined' ? self : this);
`)
},
plugins: [
terser()
]
}
]