From 87f31910aa021e746cdda0bd52bf6c331f20e3be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gast=C3=B3n=20I=2E=20Silva?= Date: Tue, 2 Apr 2019 22:28:42 -0700 Subject: [PATCH 1/4] bugfix: iife is 100% backwards compatible --- .gitignore | 2 +- .npmignore | 2 +- package.json | 8 ++--- rollup.config.js | 65 ++++++++++++++++++++++++++---------- src/iife-self-placeholder.js | 3 -- src/index.ts | 1 - yarn.lock | 14 +++++--- 7 files changed, 63 insertions(+), 32 deletions(-) delete mode 100644 src/iife-self-placeholder.js diff --git a/.gitignore b/.gitignore index 2c9db88..3c24d40 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ bower_components node_modules coverage* dist -src/pretender.es.js +dist/pretender.es.js diff --git a/.npmignore b/.npmignore index e2c5f16..4b3e91f 100644 --- a/.npmignore +++ b/.npmignore @@ -1,4 +1,4 @@ -src/index.ts +src test rollup.config.js karma.conf.js diff --git a/package.json b/package.json index 5c2303e..f22b762 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "pretender", "version": "2.1.0", "main": "./dist/pretender.js", - "module": "./src/pretender.es.js", + "module": "./dist/pretender.es.js", "types": "index.d.ts", "description": "Pretender is a mock server library for XMLHttpRequest and Fetch, that comes with an express/sinatra style syntax for defining routes and their handlers.", "license": "MIT", @@ -40,7 +40,7 @@ "karma-sinon": "^1.0.5", "phantomjs": "^2.1.7", "qunit": "^2.6.1", - "rollup": "0.68.2", + "rollup": "^1.1.2", "rollup-plugin-commonjs": "^9.2.0", "rollup-plugin-multi-entry": "^2.1.0", "rollup-plugin-node-resolve": "^4.0.0", @@ -50,9 +50,9 @@ "typescript": "~3.1.1" }, "dependencies": { - "whatwg-fetch": "^3.0.0", "fake-xml-http-request": "^2.0.0", - "route-recognizer": "^0.3.3" + "route-recognizer": "^0.3.3", + "whatwg-fetch": "^3.0.0" }, "jspm": { "shim": { diff --git a/rollup.config.js b/rollup.config.js index 5709301..229e97b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,37 +1,66 @@ const commonjs = require('rollup-plugin-commonjs'); -const path = require('path'); const resolve = require('rollup-plugin-node-resolve'); const typescript = require('rollup-plugin-typescript'); const pkg = require('./package.json'); -const selfId = path.resolve(__dirname, 'src/iife-self-placeholder.js'); +const globals = { + 'whatwg-fetch': 'FakeFetch', + 'fake-xml-http-request': 'FakeXMLHttpRequest', + 'route-recognizer': 'RouteRecognizer', +}; + +const iife = { + banner: +`var Pretender = (function (self) { + + function getModuleDefault(module) { + return module.default || module; + } + + var appearsBrowserified = 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')) : self.RouteRecognizer; + var FakeXMLHttpRequest = appearsBrowserified ? getModuleDefault(require('fake-xml-http-request')) : + self.FakeXMLHttpRequest; + + // fetch related ponyfills + var FakeFetch = appearsBrowserified ? getModuleDefault(require('whatwg-fetch')) : self.WHATWGFetch; +`, + footer: +` +if (typeof module === 'object') { + module.exports = Pretender; +} else if (typeof define !== 'undefined') { + define('pretender', [], function() { + return Pretender; + }); +} + +self.Pretender = Pretender; + +return Pretender; + +}(self));`, +}; module.exports = { input: 'src/index.ts', - external: [ - selfId, - 'whatwg-fetch', - 'fake-xml-http-request', - 'route-recognizer', - ], + external: Object.keys(pkg.dependencies), output: [ { name: 'Pretender', file: pkg.main, format: 'iife', - globals: { - [selfId]: 'self', - 'whatwg-fetch': 'FakeFetch', - 'fake-xml-http-request': 'FakeXMLHttpRequest', - 'route-recognizer': 'RouteRecognizer', - }, - banner: 'var FakeFetch = self.WHATWGFetch;\n' + - 'var FakeXMLHttpRequest = self.FakeXMLHttpRequest;\n' + - 'var RouteRecognizer = self.RouteRecognizer;\n', + globals: globals, + banner: iife.banner, + footer: iife.footer, }, { file: pkg.module, - format: 'es' + format: 'es', }, ], plugins: [ diff --git a/src/iife-self-placeholder.js b/src/iife-self-placeholder.js deleted file mode 100644 index 0834b42..0000000 --- a/src/iife-self-placeholder.js +++ /dev/null @@ -1,3 +0,0 @@ -// This is just a placeholder for the build step -// See the IIFE output in the Rollup config -export default window; diff --git a/src/index.ts b/src/index.ts index 17cc35b..840c08a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ -import self from './iife-self-placeholder'; import RouteRecognizer from 'route-recognizer'; import FakeXMLHttpRequest from 'fake-xml-http-request'; import * as FakeFetch from 'whatwg-fetch'; diff --git a/yarn.lock b/yarn.lock index 5acbd47..3477db7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,6 +63,11 @@ accepts@1.3.3: mime-types "~2.1.11" negotiator "0.6.1" +acorn@^6.0.5: + version "6.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" + integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw== + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -3769,13 +3774,14 @@ rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.3.3: estree-walker "^0.5.2" micromatch "^2.3.11" -rollup@0.68.2: - version "0.68.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.68.2.tgz#c26afb5d981ca7a1a32f76087dbde9dad4fcc653" - integrity sha512-WgjNCXYv7ZbtStIap1+tz4pd2zwz0XYN//OILwEY6dINIFLVizK1iWdu+ZtUURL/OKnp8Lv2w8FBds8YihzX7Q== +rollup@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.1.2.tgz#8d094b85683b810d0c05a16bd7618cf70d48eba7" + integrity sha512-OkdMxqMl8pWoQc5D8y1cIinYQPPLV8ZkfLgCzL6SytXeNA2P7UHynEQXI9tYxuAjAMsSyvRaWnyJDLHMxq0XAg== dependencies: "@types/estree" "0.0.39" "@types/node" "*" + acorn "^6.0.5" route-recognizer@^0.3.3: version "0.3.4" From 5e87b0b73c0094b2381d05c7f8008e1ba8ed09e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gast=C3=B3n=20I=2E=20Silva?= Date: Tue, 2 Apr 2019 22:54:21 -0700 Subject: [PATCH 2/4] rm .npmignore --- .npmignore | 6 ------ package.json | 4 ++++ 2 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 .npmignore diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 4b3e91f..0000000 --- a/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -src -test -rollup.config.js -karma.conf.js -*.md -yarn.lock diff --git a/package.json b/package.json index f22b762..6cb5865 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,10 @@ "route-recognizer": "^0.3.3", "whatwg-fetch": "^3.0.0" }, + "files": [ + "dist", + "index.d.ts" + ], "jspm": { "shim": { "pretender": { From 5a07d62fcf8f91e7805927588b3ecf93645fb07d Mon Sep 17 00:00:00 2001 From: Mike North Date: Wed, 3 Apr 2019 19:05:06 -0700 Subject: [PATCH 3/4] chore: maintain the IIFE wrapper used by rollup as an independent file --- iife-wrapper.js | 37 ++++++++++++++++++++++++++++++ rollup.config.js | 58 +++++++++--------------------------------------- 2 files changed, 47 insertions(+), 48 deletions(-) create mode 100644 iife-wrapper.js diff --git a/iife-wrapper.js b/iife-wrapper.js new file mode 100644 index 0000000..bd3730d --- /dev/null +++ b/iife-wrapper.js @@ -0,0 +1,37 @@ +var Pretender = (function(self) { + function getModuleDefault(module) { + return module.default || module; + } + + var appearsBrowserified = + 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')) + : self.RouteRecognizer; + var FakeXMLHttpRequest = appearsBrowserified + ? 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') { + module.exports = Pretender; + } else if (typeof define !== 'undefined') { + define('pretender', [], function() { + return Pretender; + }); + } + + self.Pretender = Pretender; + + return Pretender; +})(self); diff --git a/rollup.config.js b/rollup.config.js index 229e97b..942c48e 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -2,49 +2,15 @@ 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 globals = { 'whatwg-fetch': 'FakeFetch', 'fake-xml-http-request': 'FakeXMLHttpRequest', - 'route-recognizer': 'RouteRecognizer', + 'route-recognizer': 'RouteRecognizer' }; -const iife = { - banner: -`var Pretender = (function (self) { - - function getModuleDefault(module) { - return module.default || module; - } - - var appearsBrowserified = 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')) : self.RouteRecognizer; - var FakeXMLHttpRequest = appearsBrowserified ? getModuleDefault(require('fake-xml-http-request')) : - self.FakeXMLHttpRequest; - - // fetch related ponyfills - var FakeFetch = appearsBrowserified ? getModuleDefault(require('whatwg-fetch')) : self.WHATWGFetch; -`, - footer: -` -if (typeof module === 'object') { - module.exports = Pretender; -} else if (typeof define !== 'undefined') { - define('pretender', [], function() { - return Pretender; - }); -} - -self.Pretender = Pretender; - -return Pretender; - -}(self));`, -}; +const rollupTemplate = fs.readFileSync('./iife-wrapper.js').toString(); +const [ banner, footer ] = rollupTemplate.split('/*==ROLLUP_CONTENT==*/'); module.exports = { input: 'src/index.ts', @@ -54,18 +20,14 @@ module.exports = { name: 'Pretender', file: pkg.main, format: 'iife', - globals: globals, - banner: iife.banner, - footer: iife.footer, + globals, + banner, + footer }, { file: pkg.module, - format: 'es', - }, - ], - plugins: [ - commonjs(), - resolve(), - typescript() + format: 'es' + } ], + plugins: [commonjs(), resolve(), typescript()] }; From efa3bb6bb94ff3931b4c5858e213bb3040608c84 Mon Sep 17 00:00:00 2001 From: Mike North Date: Wed, 3 Apr 2019 19:08:12 -0700 Subject: [PATCH 4/4] chore: remove unneeded line in .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3c24d40..475006b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ bower_components node_modules coverage* dist -dist/pretender.es.js