From f6591260e26fd62464346589dc5789f01d995dd0 Mon Sep 17 00:00:00 2001 From: Ryan Toronto Date: Tue, 3 Mar 2020 15:49:54 -0500 Subject: [PATCH] Vendor whatwg-fetch using rollup+devDep --- iife-wrapper.js | 23 +++++++++------------- package.json | 12 ++++++------ rollup.config.js | 50 ++++++++++++++++++++++++++++++++---------------- yarn.lock | 5 +++++ 4 files changed, 54 insertions(+), 36 deletions(-) diff --git a/iife-wrapper.js b/iife-wrapper.js index bd3730d..47675f2 100644 --- a/iife-wrapper.js +++ b/iife-wrapper.js @@ -4,29 +4,24 @@ var Pretender = (function(self) { } var appearsBrowserified = - typeof self !== 'undefined' && - typeof process !== 'undefined' && - (Object.prototype.toString.call(process) === '[object Object]' || - Object.prototype.toString.call(process) === '[object process]'); + typeof self !== "undefined" && + typeof process !== "undefined" && + (Object.prototype.toString.call(process) === "[object Object]" || + Object.prototype.toString.call(process) === "[object process]"); var RouteRecognizer = appearsBrowserified - ? getModuleDefault(require('route-recognizer')) + ? getModuleDefault(require("route-recognizer")) : self.RouteRecognizer; var FakeXMLHttpRequest = appearsBrowserified - ? getModuleDefault(require('fake-xml-http-request')) + ? getModuleDefault(require("fake-xml-http-request")) : self.FakeXMLHttpRequest; - // fetch related ponyfills - var FakeFetch = appearsBrowserified - ? getModuleDefault(require('whatwg-fetch')) - : self.WHATWGFetch; - /*==ROLLUP_CONTENT==*/ - if (typeof module === 'object') { + if (typeof module === "object") { module.exports = Pretender; - } else if (typeof define !== 'undefined') { - define('pretender', [], function() { + } else if (typeof define !== "undefined") { + define("pretender", [], function() { return Pretender; }); } diff --git a/package.json b/package.json index 20e25ef..b32d07d 100644 --- a/package.json +++ b/package.json @@ -28,9 +28,9 @@ "devDependencies": { "@rollup/plugin-commonjs": "^11.0.2", "@rollup/plugin-node-resolve": "^7.1.1", - "rollup-plugin-typescript": "^1.0.0", "abortcontroller-polyfill": "^1.1.9", "coveralls": "^3.0.9", + "dedent": "^0.7.0", "es6-promise": "^4.0.5", "eslint": "^5.12.0", "jshint": "^2.8.0", @@ -45,16 +45,17 @@ "release-it": "^12.4.3", "release-it-lerna-changelog": "^1.0.3", "rollup": "^1.1.2", + "rollup-plugin-typescript": "^1.0.0", "sinon": "^9.0.0", "tslib": "^1.9.3", "typescript": "~3.1.1", "typescript-eslint-parser": "^21.0.2", - "url-parse": "^1.4.7" + "url-parse": "^1.4.7", + "whatwg-fetch": "^3.0.0" }, "dependencies": { "fake-xml-http-request": "^2.1.1", - "route-recognizer": "^0.3.3", - "whatwg-fetch": "^3.0.0" + "route-recognizer": "^0.3.3" }, "files": [ "dist", @@ -65,8 +66,7 @@ "pretender": { "deps": [ "route-recognizer", - "fake-xml-http-request", - "whatwg-fetch" + "fake-xml-http-request" ], "exports": "Pretender" } diff --git a/rollup.config.js b/rollup.config.js index 5485487..5387be2 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,34 +1,52 @@ -const commonjs = require('@rollup/plugin-commonjs'); -const resolve = require('@rollup/plugin-node-resolve'); -const typescript = require('rollup-plugin-typescript'); -const pkg = require('./package.json'); -const fs = require('fs'); +const commonjs = require("@rollup/plugin-commonjs"); +const resolve = require("@rollup/plugin-node-resolve"); +const typescript = require("rollup-plugin-typescript"); +const pkg = require("./package.json"); +const fs = require("fs"); +const dedent = require("dedent"); const globals = { - 'whatwg-fetch': 'FakeFetch', - 'fake-xml-http-request': 'FakeXMLHttpRequest', - 'route-recognizer': 'RouteRecognizer', - 'url-parse': 'urlParse' + "fake-xml-http-request": "FakeXMLHttpRequest", + "route-recognizer": "RouteRecognizer", + "url-parse": "urlParse" }; -const rollupTemplate = fs.readFileSync('./iife-wrapper.js').toString(); -const [banner, footer] = rollupTemplate.split('/*==ROLLUP_CONTENT==*/'); +const rollupTemplate = fs.readFileSync("./iife-wrapper.js").toString(); +const [banner, footer] = rollupTemplate.split("/*==ROLLUP_CONTENT==*/"); + +let importableInNode = { + transform(code, id) { + let before = dedent` + if (typeof global !== "undefined" && typeof global.self === 'undefined') { + global.self = {}; + global.__pretenderNodePolyfill = true; + }`; + + let after = dedent` + if (typeof global !== "undefined" && global.__pretenderNodePolyfill) { + delete global.self; + delete global.__pretenderNodePolyfill; + }`; + + return id.match(/whatwg-fetch/) ? `${before}\n${code}\n${after}` : code; + } +}; module.exports = { - input: 'src/index.ts', + input: "src/index.ts", external: Object.keys(pkg.dependencies), output: [ { - name: 'Pretender', + name: "Pretender", file: pkg.main, - format: 'iife', + format: "iife", globals, banner, footer }, { file: pkg.module, - format: 'es' + format: "es" } ], - plugins: [commonjs(), resolve(), typescript()] + plugins: [commonjs(), resolve(), importableInNode, typescript()] }; diff --git a/yarn.lock b/yarn.lock index 815b00f..5e2a2d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1351,6 +1351,11 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"