UNPKG

1.22 kBJavaScriptView Raw
1var middleware = require('./middleware')
2var randomString = require('random-string')
3var mergeQueryString = require('../mergeQueryString')
4
5function randomGlobal (value) {
6 var name
7
8 do {
9 name = '_' + randomString({length: 20})
10 } while (typeof window[name] !== 'undefined')
11
12 window[name] = value
13
14 return name
15}
16
17module.exports = middleware('jsonp', function (request, next) {
18 var jsonp = request.options.jsonp
19
20 if (jsonp) {
21 request.options.querystring = request.options.querystring || {}
22
23 return new Promise(function (resolve, reject) {
24 var callbackName = randomGlobal(function (v) {
25 delete window[callbackName]
26 document.head.removeChild(script)
27 resolve({
28 statusCode: 200,
29 headers: {},
30 body: v
31 })
32 })
33
34 request.options.querystring[jsonp] = callbackName
35
36 mergeQueryString(request)
37
38 var script = document.createElement('script')
39 script.type = 'text/javascript'
40 script.src = request.url
41 script.onerror = function () {
42 reject(new Error('could not load script tag for JSONP request: ' + request.url))
43 }
44 document.head.appendChild(script)
45 })
46 }
47
48 return next()
49})