diff --git a/src/index.mjs b/src/index.mjs index 6d1ccef..90dd431 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,20 +1,6 @@ +import response from './lib/response'; + const regex = /^(.*?):[^\S\n]*([\s\S]*?)$/gm; -const response = (request, headers) => ({ - ok: (request.status/100|0) == 2, // 200-299 - statusText: request.statusText, - status: request.status, - url: request.responseURL, - text: () => Promise.resolve(request.responseText), - json: () => Promise.resolve(JSON.parse(request.responseText)), - blob: () => Promise.resolve(new Blob([request.response])), - clone: () => response(request, headers), - headers: { - keys: () => headers.keys, - entries: () => headers.all, - get: n => headers.raw[n.toLowerCase()], - has: n => n.toLowerCase() in headers.raw - } -}); export default function(url, options) { options = options || {}; @@ -44,5 +30,3 @@ export default function(url, options) { request.send(options.body || null); }); } - -export { response }; diff --git a/src/lib/response.mjs b/src/lib/response.mjs new file mode 100644 index 0000000..48c4cc6 --- /dev/null +++ b/src/lib/response.mjs @@ -0,0 +1,18 @@ +export default function response (request, headers) { + return { + ok: (request.status/100|0) == 2, // 200-299 + statusText: request.statusText, + status: request.status, + url: request.responseURL, + text: () => Promise.resolve(request.responseText), + json: () => Promise.resolve(JSON.parse(request.responseText)), + blob: () => Promise.resolve(new Blob([request.response])), + clone: () => response(request, headers), + headers: { + keys: () => headers.keys, + entries: () => headers.all, + get: n => headers.raw[n.toLowerCase()], + has: n => n.toLowerCase() in headers.raw + } + }; +} diff --git a/test/index.js b/test/index.js index 0336596..3a9e598 100644 --- a/test/index.js +++ b/test/index.js @@ -1,4 +1,4 @@ -import fetch, { response } from '../src/index.mjs'; +import fetch from '../src/index.mjs'; import fetchDist from '..'; describe('unfetch', () => { @@ -81,33 +81,4 @@ describe('unfetch', () => { return p; }); }); - - describe('response()', () => { - it('returns text()', () => response({ responseText: 'A passing test.' }) - .text() - .then((text) => expect(text).toBe('A passing test.')) - ); - - it('returns blob()', () => response({ response: 'A passing test.' }) - .blob() - .then((text) => expect(text.toString()).toBe(new Blob(['A passing test.']).toString())) - ); - - it('returns headers', () => { - const all = [['x-foo', 'bar'], ['x-baz', 'boo']]; - const result = response({}, { all }).headers.entries(); - expect(result).toEqual(all); - }); - - it('returns header keys', () => { - const result = response({}, { keys: ['x-foo'] }).headers.keys(); - expect(result).toEqual(['x-foo']); - }); - - it('returns headers has', () => { - const raw = { 'x-foo': 'bar', 'x-baz': 'boo' }; - const test = response({}, { raw }).headers; - expect(test.has('x-foo')).toBe(true); - }); - }); }); diff --git a/test/lib/response.js b/test/lib/response.js new file mode 100644 index 0000000..471b7d3 --- /dev/null +++ b/test/lib/response.js @@ -0,0 +1,30 @@ +import response from '../../src/lib/response.mjs'; + +describe('response()', () => { + it('returns text()', () => response({ responseText: 'A passing test.' }) + .text() + .then((text) => expect(text).toBe('A passing test.')) + ); + + it('returns blob()', () => response({ response: 'A passing test.' }) + .blob() + .then((text) => expect(text.toString()).toBe(new Blob(['A passing test.']).toString())) + ); + + it('returns headers', () => { + const all = [['x-foo', 'bar'], ['x-baz', 'boo']]; + const result = response({}, { all }).headers.entries(); + expect(result).toEqual(all); + }); + + it('returns header keys', () => { + const result = response({}, { keys: ['x-foo'] }).headers.keys(); + expect(result).toEqual(['x-foo']); + }); + + it('returns headers has', () => { + const raw = { 'x-foo': 'bar', 'x-baz': 'boo' }; + const test = response({}, { raw }).headers; + expect(test.has('x-foo')).toBe(true); + }); +});