From 3811e9d10bee5da5c88af903ce6abdc6f60b97d1 Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Mon, 2 Jul 2018 14:38:37 -0700 Subject: [PATCH] fix: Changes self to global, rollup-plugin-node-globals makes isomorphic (#54) * fix: Changes self to global, rollup-plugin-node-globals makes isomorphic * chore: Adding linting rule for whitelisting global --- .eslintrc.js | 3 +++ .../@pollyjs/core/src/adapters/fetch/index.js | 10 +++++----- packages/@pollyjs/core/src/adapters/xhr/index.js | 2 +- .../core/src/persisters/local-storage/index.js | 2 +- .../@pollyjs/core/src/persisters/rest/ajax.js | 5 +++-- packages/@pollyjs/core/src/test-helpers/mocha.js | 6 +++--- .../@pollyjs/core/tests/helpers/setup-fetch.js | 15 +++++++++------ packages/@pollyjs/core/tests/unit/polly-test.js | 6 +++--- 8 files changed, 28 insertions(+), 21 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index cde834ee..a270baaa 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,6 +9,9 @@ module.exports = { }, plugins: ['prettier'], extends: ['eslint:recommended', 'prettier'], + globals: { + global: true + }, env: { browser: true, es6: true diff --git a/packages/@pollyjs/core/src/adapters/fetch/index.js b/packages/@pollyjs/core/src/adapters/fetch/index.js index 1e5090c0..b68569fb 100644 --- a/packages/@pollyjs/core/src/adapters/fetch/index.js +++ b/packages/@pollyjs/core/src/adapters/fetch/index.js @@ -1,7 +1,7 @@ import Adapter from '@pollyjs/adapter'; import serializeHeaders from './utils/serialize-headers'; -const nativeFetch = self.fetch; +const nativeFetch = global.fetch; const { defineProperty } = Object; export default class FetchAdapter extends Adapter { @@ -9,11 +9,11 @@ export default class FetchAdapter extends Adapter { this.assert('Fetch global not found.', nativeFetch); this.assert( 'Running concurrent fetch adapters is unsupported, stop any running Polly instances.', - self.fetch === nativeFetch + global.fetch === nativeFetch ); this.native = nativeFetch; - self.fetch = (url, options = {}) => + global.fetch = (url, options = {}) => this.handleRequest({ url, method: options.method || 'GET', @@ -24,7 +24,7 @@ export default class FetchAdapter extends Adapter { } onDisconnect() { - self.fetch = nativeFetch; + global.fetch = nativeFetch; } async onRecord(pollyRequest) { @@ -50,7 +50,7 @@ export default class FetchAdapter extends Adapter { async onPassthrough(pollyRequest) { const [, options] = pollyRequest.requestArguments; - const response = await this.native.apply(self, [ + const response = await this.native.apply(global, [ pollyRequest.url, { ...options, diff --git a/packages/@pollyjs/core/src/adapters/xhr/index.js b/packages/@pollyjs/core/src/adapters/xhr/index.js index fdc71709..56fe08c9 100644 --- a/packages/@pollyjs/core/src/adapters/xhr/index.js +++ b/packages/@pollyjs/core/src/adapters/xhr/index.js @@ -10,7 +10,7 @@ export default class XHRAdapter extends Adapter { this.assert('XHR global not found.', FakeXHR.xhr.supportsXHR); this.assert( 'Running concurrent XHR adapters is unsupported, stop any running Polly instances.', - self.XMLHttpRequest === FakeXHR.xhr.GlobalXMLHttpRequest + global.XMLHttpRequest === FakeXHR.xhr.GlobalXMLHttpRequest ); this.native = FakeXHR.xhr.GlobalXMLHttpRequest; diff --git a/packages/@pollyjs/core/src/persisters/local-storage/index.js b/packages/@pollyjs/core/src/persisters/local-storage/index.js index 1e3b4f41..864543be 100644 --- a/packages/@pollyjs/core/src/persisters/local-storage/index.js +++ b/packages/@pollyjs/core/src/persisters/local-storage/index.js @@ -2,7 +2,7 @@ import Persister from '@pollyjs/persister'; import stringify from 'json-stable-stringify'; export default class LocalStoragePersister extends Persister { - constructor(polly, store = self.localStorage) { + constructor(polly, store = global.localStorage) { super(polly); this._store = store; this._namespace = '__pollyjs__'; diff --git a/packages/@pollyjs/core/src/persisters/rest/ajax.js b/packages/@pollyjs/core/src/persisters/rest/ajax.js index 9b8851b6..6bb598c9 100644 --- a/packages/@pollyjs/core/src/persisters/rest/ajax.js +++ b/packages/@pollyjs/core/src/persisters/rest/ajax.js @@ -1,6 +1,7 @@ const { keys } = Object; -const REQUEST_ASYNC = !/PhantomJS/.test(self.navigator.userAgent); -const NativeXMLHttpRequest = self.XMLHttpRequest; +const REQUEST_ASYNC = + !('navigator' in global) || !/PhantomJS/.test(global.navigator.userAgent); +const NativeXMLHttpRequest = global.XMLHttpRequest; export default function ajax(url, options = {}) { return new Promise((resolve, reject) => { diff --git a/packages/@pollyjs/core/src/test-helpers/mocha.js b/packages/@pollyjs/core/src/test-helpers/mocha.js index e104dc76..1628d0c8 100644 --- a/packages/@pollyjs/core/src/test-helpers/mocha.js +++ b/packages/@pollyjs/core/src/test-helpers/mocha.js @@ -13,18 +13,18 @@ function generateRecordingName(context) { return parts.reverse().join('/'); } -export default function setupMocha(defaults = {}, ctx = self) { +export default function setupMocha(defaults = {}, ctx = global) { setupMocha.beforeEach(defaults, ctx); setupMocha.afterEach(ctx); } -setupMocha.beforeEach = function setupMochaBeforeEach(defaults, ctx = self) { +setupMocha.beforeEach = function setupMochaBeforeEach(defaults, ctx = global) { ctx.beforeEach(function() { return beforeEach(this, generateRecordingName(this), defaults); }); }; -setupMocha.afterEach = function setupMochaAfterEach(ctx = self) { +setupMocha.afterEach = function setupMochaAfterEach(ctx = global) { ctx.afterEach(function() { return afterEach(this, 'mocha'); }); diff --git a/packages/@pollyjs/core/tests/helpers/setup-fetch.js b/packages/@pollyjs/core/tests/helpers/setup-fetch.js index 3b1791bd..e3594b68 100644 --- a/packages/@pollyjs/core/tests/helpers/setup-fetch.js +++ b/packages/@pollyjs/core/tests/helpers/setup-fetch.js @@ -1,12 +1,13 @@ +/* globals beforeEach, afterEach */ import xhrRequest from './xhr-request'; export default function setupFetch(fetchType) { - beforeEach(fetchType); - afterEach(); + beforeEachWrapper(fetchType); + afterEachWrapper(); } -export function beforeEach(fetchType) { - self.beforeEach(function() { +function beforeEachWrapper(fetchType) { + beforeEach(function() { this.fetch = (...args) => { if (fetchType === 'xhr') { return xhrRequest(...args); @@ -23,10 +24,12 @@ export function beforeEach(fetchType) { }); } -export function afterEach() { - self.afterEach(async function() { +export function afterEachWrapper() { + afterEach(async function() { this.polly.stop(); await this.fetchRecord({ method: 'DELETE' }); }); } +export { beforeEachWrapper as beforeEach }; +export { afterEachWrapper as afterEach }; diff --git a/packages/@pollyjs/core/tests/unit/polly-test.js b/packages/@pollyjs/core/tests/unit/polly-test.js index 4b860904..b692fdc4 100644 --- a/packages/@pollyjs/core/tests/unit/polly-test.js +++ b/packages/@pollyjs/core/tests/unit/polly-test.js @@ -5,7 +5,7 @@ import Adapter from '@pollyjs/adapter'; import Persister from '@pollyjs/persister'; import { MODES } from '@pollyjs/utils'; -const nativeFetch = self.fetch; +const nativeFetch = global.fetch; describe('Unit | Polly', function() { it('should exist', function() { @@ -201,9 +201,9 @@ describe('Unit | Polly', function() { }); it('should connect to new adapters', async function() { - expect(nativeFetch).to.equal(self.fetch); + expect(nativeFetch).to.equal(global.fetch); this.polly.configure({ adapters: ['fetch'] }); - expect(nativeFetch).to.not.equal(self.fetch); + expect(nativeFetch).to.not.equal(global.fetch); }); });