Socket
Socket
Sign inDemoInstall

@sanity/eventsource

Package Overview
Dependencies
Maintainers
49
Versions
565
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sanity/eventsource - npm Package Compare versions

Comparing version 6.0.0-canary.1 to 6.0.0-canary.2

dist/browser.d.mts

1187

browser.js

@@ -1,1186 +0,1 @@

/**
* Inline version of https://github.com/Yaffle/EventSource/
* For ease of maintenance and slight modernization
* MIT-licensed, (c) 2012 vic99999@yandex.ru
*/
module.exports = (function (global) {
var setTimeout = global.setTimeout
var clearTimeout = global.clearTimeout
var XMLHttpRequest = global.XMLHttpRequest
var XDomainRequest = global.XDomainRequest
var ActiveXObject = global.ActiveXObject
var document = global.document
var Promise = global.Promise
var fetch = global.fetch
var Response = global.Response
var TextDecoder = global.TextDecoder
var TextEncoder = global.TextEncoder
var AbortController = global.AbortController
if (
typeof window !== 'undefined' &&
typeof document !== 'undefined' &&
!('readyState' in document) &&
document.body == null
) {
// Firefox 2
document.readyState = 'loading'
window.addEventListener(
'load',
function (event) {
document.readyState = 'complete'
},
false,
)
}
if (XMLHttpRequest == null && ActiveXObject != null) {
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest_in_IE6
XMLHttpRequest = function () {
return new ActiveXObject('Microsoft.XMLHTTP')
}
}
if (Object.create == undefined) {
Object.create = function (C) {
function F() {}
F.prototype = C
return new F()
}
}
if (!Date.now) {
Date.now = function now() {
return new Date().getTime()
}
}
// see #118 (Promise#finally with polyfilled Promise)
// see #123 (data URLs crash Edge)
// see #125 (CSP violations)
// see pull/#138
// => No way to polyfill Promise#finally
if (AbortController == undefined) {
var originalFetch2 = fetch
fetch = function (url, options) {
var signal = options.signal
return originalFetch2(url, {
headers: options.headers,
credentials: options.credentials,
cache: options.cache,
}).then(function (response) {
var reader = response.body.getReader()
signal._reader = reader
if (signal._aborted) {
signal._reader.cancel()
}
return {
status: response.status,
statusText: response.statusText,
headers: response.headers,
body: {
getReader: function () {
return reader
},
},
}
})
}
AbortController = function () {
this.signal = {
_reader: null,
_aborted: false,
}
this.abort = function () {
if (this.signal._reader != null) {
this.signal._reader.cancel()
}
this.signal._aborted = true
}
}
}
function TextDecoderPolyfill() {
this.bitsNeeded = 0
this.codePoint = 0
}
TextDecoderPolyfill.prototype.decode = function (octets) {
function valid(codePoint, shift, octetsCount) {
if (octetsCount === 1) {
return codePoint >= 0x0080 >> shift && codePoint << shift <= 0x07ff
}
if (octetsCount === 2) {
return (
(codePoint >= 0x0800 >> shift && codePoint << shift <= 0xd7ff) ||
(codePoint >= 0xe000 >> shift && codePoint << shift <= 0xffff)
)
}
if (octetsCount === 3) {
return codePoint >= 0x010000 >> shift && codePoint << shift <= 0x10ffff
}
throw new Error()
}
function octetsCount(bitsNeeded, codePoint) {
if (bitsNeeded === 6 * 1) {
return codePoint >> 6 > 15 ? 3 : codePoint > 31 ? 2 : 1
}
if (bitsNeeded === 6 * 2) {
return codePoint > 15 ? 3 : 2
}
if (bitsNeeded === 6 * 3) {
return 3
}
throw new Error()
}
var REPLACER = 0xfffd
var string = ''
var bitsNeeded = this.bitsNeeded
var codePoint = this.codePoint
for (var i = 0; i < octets.length; i += 1) {
var octet = octets[i]
if (bitsNeeded !== 0) {
if (
octet < 128 ||
octet > 191 ||
!valid(
(codePoint << 6) | (octet & 63),
bitsNeeded - 6,
octetsCount(bitsNeeded, codePoint),
)
) {
bitsNeeded = 0
codePoint = REPLACER
string += String.fromCharCode(codePoint)
}
}
if (bitsNeeded === 0) {
if (octet >= 0 && octet <= 127) {
bitsNeeded = 0
codePoint = octet
} else if (octet >= 192 && octet <= 223) {
bitsNeeded = 6 * 1
codePoint = octet & 31
} else if (octet >= 224 && octet <= 239) {
bitsNeeded = 6 * 2
codePoint = octet & 15
} else if (octet >= 240 && octet <= 247) {
bitsNeeded = 6 * 3
codePoint = octet & 7
} else {
bitsNeeded = 0
codePoint = REPLACER
}
if (
bitsNeeded !== 0 &&
!valid(codePoint, bitsNeeded, octetsCount(bitsNeeded, codePoint))
) {
bitsNeeded = 0
codePoint = REPLACER
}
} else {
bitsNeeded -= 6
codePoint = (codePoint << 6) | (octet & 63)
}
if (bitsNeeded === 0) {
if (codePoint <= 0xffff) {
string += String.fromCharCode(codePoint)
} else {
string += String.fromCharCode(
0xd800 + ((codePoint - 0xffff - 1) >> 10),
)
string += String.fromCharCode(
0xdc00 + ((codePoint - 0xffff - 1) & 0x3ff),
)
}
}
}
this.bitsNeeded = bitsNeeded
this.codePoint = codePoint
return string
}
// Firefox < 38 throws an error with stream option
var supportsStreamOption = function () {
try {
return (
new TextDecoder().decode(new TextEncoder().encode('test'), {
stream: true,
}) === 'test'
)
} catch (error) {
console.debug(
'TextDecoder does not support streaming option. Using polyfill instead: ' +
error,
)
}
return false
}
// IE, Edge
if (
TextDecoder == undefined ||
TextEncoder == undefined ||
!supportsStreamOption()
) {
TextDecoder = TextDecoderPolyfill
}
var k = function () {}
function XHRWrapper(xhr) {
this.withCredentials = false
this.readyState = 0
this.status = 0
this.statusText = ''
this.responseText = ''
this.onprogress = k
this.onload = k
this.onerror = k
this.onreadystatechange = k
this._contentType = ''
this._xhr = xhr
this._sendTimeout = 0
this._abort = k
}
XHRWrapper.prototype.open = function (method, url) {
this._abort(true)
var that = this
var xhr = this._xhr
var state = 1
var timeout = 0
this._abort = function (silent) {
if (that._sendTimeout !== 0) {
clearTimeout(that._sendTimeout)
that._sendTimeout = 0
}
if (state === 1 || state === 2 || state === 3) {
state = 4
xhr.onload = k
xhr.onerror = k
xhr.onabort = k
xhr.onprogress = k
xhr.onreadystatechange = k
// IE 8 - 9: XDomainRequest#abort() does not fire any event
// Opera < 10: XMLHttpRequest#abort() does not fire any event
xhr.abort()
if (timeout !== 0) {
clearTimeout(timeout)
timeout = 0
}
if (!silent) {
that.readyState = 4
that.onabort(null)
that.onreadystatechange()
}
}
state = 0
}
var onStart = function () {
if (state === 1) {
//state = 2;
var status = 0
var statusText = ''
var contentType = undefined
if (!('contentType' in xhr)) {
try {
status = xhr.status
statusText = xhr.statusText
contentType = xhr.getResponseHeader('Content-Type')
} catch (error) {
// IE < 10 throws exception for `xhr.status` when xhr.readyState === 2 || xhr.readyState === 3
// Opera < 11 throws exception for `xhr.status` when xhr.readyState === 2
// https://bugs.webkit.org/show_bug.cgi?id=29121
status = 0
statusText = ''
contentType = undefined
// Firefox < 14, Chrome ?, Safari ?
// https://bugs.webkit.org/show_bug.cgi?id=29658
// https://bugs.webkit.org/show_bug.cgi?id=77854
}
} else {
status = 200
statusText = 'OK'
contentType = xhr.contentType
}
if (status !== 0) {
state = 2
that.readyState = 2
that.status = status
that.statusText = statusText
that._contentType = contentType
that.onreadystatechange()
}
}
}
var onProgress = function () {
onStart()
if (state === 2 || state === 3) {
state = 3
var responseText = ''
try {
responseText = xhr.responseText
} catch (error) {
// IE 8 - 9 with XMLHttpRequest
}
that.readyState = 3
that.responseText = responseText
that.onprogress()
}
}
var onFinish = function (type, event) {
if (event == null || event.preventDefault == null) {
event = {
preventDefault: k,
}
}
// Firefox 52 fires "readystatechange" (xhr.readyState === 4) without final "readystatechange" (xhr.readyState === 3)
// IE 8 fires "onload" without "onprogress"
onProgress()
if (state === 1 || state === 2 || state === 3) {
state = 4
if (timeout !== 0) {
clearTimeout(timeout)
timeout = 0
}
that.readyState = 4
if (type === 'load') {
that.onload(event)
} else if (type === 'error') {
that.onerror(event)
} else if (type === 'abort') {
that.onabort(event)
} else {
throw new TypeError()
}
that.onreadystatechange()
}
}
var onReadyStateChange = function (event) {
if (xhr != undefined) {
// Opera 12
if (xhr.readyState === 4) {
if (
!('onload' in xhr) ||
!('onerror' in xhr) ||
!('onabort' in xhr)
) {
onFinish(xhr.responseText === '' ? 'error' : 'load', event)
}
} else if (xhr.readyState === 3) {
if (!('onprogress' in xhr)) {
// testing XMLHttpRequest#responseText too many times is too slow in IE 11
// and in Firefox 3.6
onProgress()
}
} else if (xhr.readyState === 2) {
onStart()
}
}
}
var onTimeout = function () {
timeout = setTimeout(function () {
onTimeout()
}, 500)
if (xhr.readyState === 3) {
onProgress()
}
}
// XDomainRequest#abort removes onprogress, onerror, onload
if ('onload' in xhr) {
xhr.onload = function (event) {
onFinish('load', event)
}
}
if ('onerror' in xhr) {
xhr.onerror = function (event) {
onFinish('error', event)
}
}
// improper fix to match Firefox behaviour, but it is better than just ignore abort
// see https://bugzilla.mozilla.org/show_bug.cgi?id=768596
// https://bugzilla.mozilla.org/show_bug.cgi?id=880200
// https://code.google.com/p/chromium/issues/detail?id=153570
// IE 8 fires "onload" without "onprogress
if ('onabort' in xhr) {
xhr.onabort = function (event) {
onFinish('abort', event)
}
}
if ('onprogress' in xhr) {
xhr.onprogress = onProgress
}
// IE 8 - 9 (XMLHTTPRequest)
// Opera < 12
// Firefox < 3.5
// Firefox 3.5 - 3.6 - ? < 9.0
// onprogress is not fired sometimes or delayed
// see also #64 (significant lag in IE 11)
if ('onreadystatechange' in xhr) {
xhr.onreadystatechange = function (event) {
onReadyStateChange(event)
}
}
if ('contentType' in xhr || !('ontimeout' in XMLHttpRequest.prototype)) {
url += (url.indexOf('?') === -1 ? '?' : '&') + 'padding=true'
}
xhr.open(method, url, true)
if ('readyState' in xhr) {
// workaround for Opera 12 issue with "progress" events
// #91 (XMLHttpRequest onprogress not fired for streaming response in Edge 14-15-?)
timeout = setTimeout(function () {
onTimeout()
}, 0)
}
}
XHRWrapper.prototype.abort = function () {
this._abort(false)
}
XHRWrapper.prototype.getResponseHeader = function (name) {
return this._contentType
}
XHRWrapper.prototype.setRequestHeader = function (name, value) {
var xhr = this._xhr
if ('setRequestHeader' in xhr) {
xhr.setRequestHeader(name, value)
}
}
XHRWrapper.prototype.getAllResponseHeaders = function () {
// XMLHttpRequest#getAllResponseHeaders returns null for CORS requests in Firefox 3.6.28
return this._xhr.getAllResponseHeaders != undefined
? this._xhr.getAllResponseHeaders() || ''
: ''
}
XHRWrapper.prototype.send = function () {
// loading indicator in Safari < ? (6), Chrome < 14, Firefox
// https://bugzilla.mozilla.org/show_bug.cgi?id=736723
if (
(!('ontimeout' in XMLHttpRequest.prototype) ||
(!('sendAsBinary' in XMLHttpRequest.prototype) &&
!('mozAnon' in XMLHttpRequest.prototype))) &&
document != undefined &&
document.readyState != undefined &&
document.readyState !== 'complete'
) {
var that = this
that._sendTimeout = setTimeout(function () {
that._sendTimeout = 0
that.send()
}, 4)
return
}
var xhr = this._xhr
// withCredentials should be set after "open" for Safari and Chrome (< 19 ?)
if ('withCredentials' in xhr) {
xhr.withCredentials = this.withCredentials
}
try {
// xhr.send(); throws "Not enough arguments" in Firefox 3.0
xhr.send(undefined)
} catch (error1) {
// Safari 5.1.7, Opera 12
throw error1
}
}
function toLowerCase(name) {
return name.replace(/[A-Z]/g, function (c) {
return String.fromCharCode(c.charCodeAt(0) + 0x20)
})
}
function HeadersPolyfill(all) {
// Get headers: implemented according to mozilla's example code: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders#Example
var map = Object.create(null)
var array = all.split('\r\n')
for (var i = 0; i < array.length; i += 1) {
var line = array[i]
var parts = line.split(': ')
var name = parts.shift()
var value = parts.join(': ')
map[toLowerCase(name)] = value
}
this._map = map
}
HeadersPolyfill.prototype.get = function (name) {
return this._map[toLowerCase(name)]
}
if (XMLHttpRequest != null && XMLHttpRequest.HEADERS_RECEIVED == null) {
// IE < 9, Firefox 3.6
XMLHttpRequest.HEADERS_RECEIVED = 2
}
function XHRTransport() {}
XHRTransport.prototype.open = function (
xhr,
onStartCallback,
onProgressCallback,
onFinishCallback,
url,
withCredentials,
headers,
) {
xhr.open('GET', url)
var offset = 0
xhr.onprogress = function () {
var responseText = xhr.responseText
var chunk = responseText.slice(offset)
offset += chunk.length
onProgressCallback(chunk)
}
xhr.onerror = function (event) {
event.preventDefault()
onFinishCallback(new Error('NetworkError'))
}
xhr.onload = function () {
onFinishCallback(null)
}
xhr.onabort = function () {
onFinishCallback(null)
}
xhr.onreadystatechange = function () {
if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
var status = xhr.status
var statusText = xhr.statusText
var contentType = xhr.getResponseHeader('Content-Type')
var headers = xhr.getAllResponseHeaders()
onStartCallback(
status,
statusText,
contentType,
new HeadersPolyfill(headers),
)
}
}
xhr.withCredentials = withCredentials
for (var name in headers) {
if (Object.prototype.hasOwnProperty.call(headers, name)) {
xhr.setRequestHeader(name, headers[name])
}
}
xhr.send()
return xhr
}
function HeadersWrapper(headers) {
this._headers = headers
}
HeadersWrapper.prototype.get = function (name) {
return this._headers.get(name)
}
function FetchTransport() {}
FetchTransport.prototype.open = function (
xhr,
onStartCallback,
onProgressCallback,
onFinishCallback,
url,
withCredentials,
headers,
) {
var reader = null
var controller = new AbortController()
var signal = controller.signal
var textDecoder = new TextDecoder()
fetch(url, {
headers: headers,
credentials: withCredentials ? 'include' : 'same-origin',
signal: signal,
cache: 'no-store',
})
.then(function (response) {
reader = response.body.getReader()
onStartCallback(
response.status,
response.statusText,
response.headers.get('Content-Type'),
new HeadersWrapper(response.headers),
)
// see https://github.com/promises-aplus/promises-spec/issues/179
return new Promise(function (resolve, reject) {
var readNextChunk = function () {
reader
.read()
.then(function (result) {
if (result.done) {
//Note: bytes in textDecoder are ignored
resolve(undefined)
} else {
var chunk = textDecoder.decode(result.value, { stream: true })
onProgressCallback(chunk)
readNextChunk()
}
})
['catch'](function (error) {
reject(error)
})
}
readNextChunk()
})
})
['catch'](function (error) {
if (error.name === 'AbortError') {
return undefined
} else {
return error
}
})
.then(function (error) {
onFinishCallback(error)
})
return {
abort: function () {
if (reader != null) {
reader.cancel() // https://bugzilla.mozilla.org/show_bug.cgi?id=1583815
}
controller.abort()
},
}
}
function EventTarget() {
this._listeners = Object.create(null)
}
function throwError(e) {
setTimeout(function () {
throw e
}, 0)
}
EventTarget.prototype.dispatchEvent = function (event) {
event.target = this
var typeListeners = this._listeners[event.type]
if (typeListeners != undefined) {
var length = typeListeners.length
for (var i = 0; i < length; i += 1) {
var listener = typeListeners[i]
try {
if (typeof listener.handleEvent === 'function') {
listener.handleEvent(event)
} else {
listener.call(this, event)
}
} catch (e) {
throwError(e)
}
}
}
}
EventTarget.prototype.addEventListener = function (type, listener) {
type = String(type)
var listeners = this._listeners
var typeListeners = listeners[type]
if (typeListeners == undefined) {
typeListeners = []
listeners[type] = typeListeners
}
var found = false
for (var i = 0; i < typeListeners.length; i += 1) {
if (typeListeners[i] === listener) {
found = true
}
}
if (!found) {
typeListeners.push(listener)
}
}
EventTarget.prototype.removeEventListener = function (type, listener) {
type = String(type)
var listeners = this._listeners
var typeListeners = listeners[type]
if (typeListeners != undefined) {
var filtered = []
for (var i = 0; i < typeListeners.length; i += 1) {
if (typeListeners[i] !== listener) {
filtered.push(typeListeners[i])
}
}
if (filtered.length === 0) {
delete listeners[type]
} else {
listeners[type] = filtered
}
}
}
function Event(type) {
this.type = type
this.target = undefined
}
function MessageEvent(type, options) {
Event.call(this, type)
this.data = options.data
this.lastEventId = options.lastEventId
}
MessageEvent.prototype = Object.create(Event.prototype)
function ConnectionEvent(type, options) {
Event.call(this, type)
this.status = options.status
this.statusText = options.statusText
this.headers = options.headers
}
ConnectionEvent.prototype = Object.create(Event.prototype)
function ErrorEvent(type, options) {
Event.call(this, type)
this.error = options.error
}
ErrorEvent.prototype = Object.create(Event.prototype)
var WAITING = -1
var CONNECTING = 0
var OPEN = 1
var CLOSED = 2
var AFTER_CR = -1
var FIELD_START = 0
var FIELD = 1
var VALUE_START = 2
var VALUE = 3
var contentTypeRegExp = /^text\/event\-stream(;.*)?$/i
var MINIMUM_DURATION = 1000
var MAXIMUM_DURATION = 18000000
var parseDuration = function (value, def) {
var n = value == null ? def : parseInt(value, 10)
if (n !== n) {
n = def
}
return clampDuration(n)
}
var clampDuration = function (n) {
return Math.min(Math.max(n, MINIMUM_DURATION), MAXIMUM_DURATION)
}
var fire = function (that, f, event) {
try {
if (typeof f === 'function') {
f.call(that, event)
}
} catch (e) {
throwError(e)
}
}
function EventSourcePolyfill(url, options) {
EventTarget.call(this)
options = options || {}
this.onopen = undefined
this.onmessage = undefined
this.onerror = undefined
this.url = undefined
this.readyState = undefined
this.withCredentials = undefined
this.headers = undefined
this._close = undefined
start(this, url, options)
}
function getBestXHRTransport() {
return (XMLHttpRequest != undefined &&
'withCredentials' in XMLHttpRequest.prototype) ||
XDomainRequest == undefined
? new XMLHttpRequest()
: new XDomainRequest()
}
var isFetchSupported =
fetch != undefined && Response != undefined && 'body' in Response.prototype
function start(es, url, options) {
url = String(url)
var withCredentials = Boolean(options.withCredentials)
var lastEventIdQueryParameterName =
options.lastEventIdQueryParameterName || 'lastEventId'
var initialRetry = clampDuration(1000)
var heartbeatTimeout = parseDuration(options.heartbeatTimeout, 45000)
var lastEventId = ''
var retry = initialRetry
var wasActivity = false
var textLength = 0
var headers = options.headers || {}
var TransportOption = options.Transport
var xhr =
isFetchSupported && TransportOption == undefined
? undefined
: new XHRWrapper(
TransportOption != undefined
? new TransportOption()
: getBestXHRTransport(),
)
var transport =
TransportOption != null && typeof TransportOption !== 'string'
? new TransportOption()
: xhr == undefined
? new FetchTransport()
: new XHRTransport()
var abortController = undefined
var timeout = 0
var currentState = WAITING
var dataBuffer = ''
var lastEventIdBuffer = ''
var eventTypeBuffer = ''
var textBuffer = ''
var state = FIELD_START
var fieldStart = 0
var valueStart = 0
var onStart = function (status, statusText, contentType, headers) {
if (currentState === CONNECTING) {
if (
status === 200 &&
contentType != undefined &&
contentTypeRegExp.test(contentType)
) {
currentState = OPEN
wasActivity = Date.now()
retry = initialRetry
es.readyState = OPEN
var event = new ConnectionEvent('open', {
status: status,
statusText: statusText,
headers: headers,
})
es.dispatchEvent(event)
fire(es, es.onopen, event)
} else {
var message = ''
if (status !== 200) {
if (statusText) {
statusText = statusText.replace(/\s+/g, ' ')
}
message =
"EventSource's response has a status " +
status +
' ' +
statusText +
' that is not 200. Aborting the connection.'
} else {
message =
"EventSource's response has a Content-Type specifying an unsupported type: " +
(contentType == undefined
? '-'
: contentType.replace(/\s+/g, ' ')) +
'. Aborting the connection.'
}
close()
var event = new ConnectionEvent('error', {
status: status,
statusText: statusText,
headers: headers,
})
es.dispatchEvent(event)
fire(es, es.onerror, event)
console.error(message)
}
}
}
var onProgress = function (textChunk) {
if (currentState === OPEN) {
var n = -1
for (var i = 0; i < textChunk.length; i += 1) {
var c = textChunk.charCodeAt(i)
if (c === '\n'.charCodeAt(0) || c === '\r'.charCodeAt(0)) {
n = i
}
}
var chunk = (n !== -1 ? textBuffer : '') + textChunk.slice(0, n + 1)
textBuffer = (n === -1 ? textBuffer : '') + textChunk.slice(n + 1)
if (textChunk !== '') {
wasActivity = Date.now()
textLength += textChunk.length
}
for (var position = 0; position < chunk.length; position += 1) {
var c = chunk.charCodeAt(position)
if (state === AFTER_CR && c === '\n'.charCodeAt(0)) {
state = FIELD_START
} else {
if (state === AFTER_CR) {
state = FIELD_START
}
if (c === '\r'.charCodeAt(0) || c === '\n'.charCodeAt(0)) {
if (state !== FIELD_START) {
if (state === FIELD) {
valueStart = position + 1
}
var field = chunk.slice(fieldStart, valueStart - 1)
var value = chunk.slice(
valueStart +
(valueStart < position &&
chunk.charCodeAt(valueStart) === ' '.charCodeAt(0)
? 1
: 0),
position,
)
if (field === 'data') {
dataBuffer += '\n'
dataBuffer += value
} else if (field === 'id') {
lastEventIdBuffer = value
} else if (field === 'event') {
eventTypeBuffer = value
} else if (field === 'retry') {
initialRetry = parseDuration(value, initialRetry)
retry = initialRetry
} else if (field === 'heartbeatTimeout') {
heartbeatTimeout = parseDuration(value, heartbeatTimeout)
if (timeout !== 0) {
clearTimeout(timeout)
timeout = setTimeout(function () {
onTimeout()
}, heartbeatTimeout)
}
}
}
if (state === FIELD_START) {
if (dataBuffer !== '') {
lastEventId = lastEventIdBuffer
if (eventTypeBuffer === '') {
eventTypeBuffer = 'message'
}
var event = new MessageEvent(eventTypeBuffer, {
data: dataBuffer.slice(1),
lastEventId: lastEventIdBuffer,
})
es.dispatchEvent(event)
if (eventTypeBuffer === 'open') {
fire(es, es.onopen, event)
} else if (eventTypeBuffer === 'message') {
fire(es, es.onmessage, event)
} else if (eventTypeBuffer === 'error') {
fire(es, es.onerror, event)
}
if (currentState === CLOSED) {
return
}
}
dataBuffer = ''
eventTypeBuffer = ''
}
state = c === '\r'.charCodeAt(0) ? AFTER_CR : FIELD_START
} else {
if (state === FIELD_START) {
fieldStart = position
state = FIELD
}
if (state === FIELD) {
if (c === ':'.charCodeAt(0)) {
valueStart = position + 1
state = VALUE_START
}
} else if (state === VALUE_START) {
state = VALUE
}
}
}
}
}
}
var onFinish = function (error) {
if (currentState === OPEN || currentState === CONNECTING) {
currentState = WAITING
if (timeout !== 0) {
clearTimeout(timeout)
timeout = 0
}
timeout = setTimeout(function () {
onTimeout()
}, retry)
retry = clampDuration(Math.min(initialRetry * 16, retry * 2))
es.readyState = CONNECTING
var event = new ErrorEvent('error', { error: error })
es.dispatchEvent(event)
fire(es, es.onerror, event)
if (error != undefined) {
console.error(error)
}
}
}
var close = function () {
currentState = CLOSED
if (abortController != undefined) {
abortController.abort()
abortController = undefined
}
if (timeout !== 0) {
clearTimeout(timeout)
timeout = 0
}
es.readyState = CLOSED
}
var onTimeout = function () {
timeout = 0
if (currentState !== WAITING) {
if (!wasActivity && abortController != undefined) {
onFinish(
new Error(
'No activity within ' +
heartbeatTimeout +
' milliseconds.' +
' ' +
(currentState === CONNECTING
? 'No response received.'
: textLength + ' chars received.') +
' ' +
'Reconnecting.',
),
)
if (abortController != undefined) {
abortController.abort()
abortController = undefined
}
} else {
var nextHeartbeat = Math.max(
(wasActivity || Date.now()) + heartbeatTimeout - Date.now(),
1,
)
wasActivity = false
timeout = setTimeout(function () {
onTimeout()
}, nextHeartbeat)
}
return
}
wasActivity = false
textLength = 0
timeout = setTimeout(function () {
onTimeout()
}, heartbeatTimeout)
currentState = CONNECTING
dataBuffer = ''
eventTypeBuffer = ''
lastEventIdBuffer = lastEventId
textBuffer = ''
fieldStart = 0
valueStart = 0
state = FIELD_START
// https://bugzilla.mozilla.org/show_bug.cgi?id=428916
// Request header field Last-Event-ID is not allowed by Access-Control-Allow-Headers.
var requestURL = url
if (url.slice(0, 5) !== 'data:' && url.slice(0, 5) !== 'blob:') {
if (lastEventId !== '') {
// Remove the lastEventId parameter if it's already part of the request URL.
var i = url.indexOf('?')
requestURL =
i === -1
? url
: url.slice(0, i + 1) +
url
.slice(i + 1)
.replace(
/(?:^|&)([^=&]*)(?:=[^&]*)?/g,
function (p, paramName) {
return paramName === lastEventIdQueryParameterName
? ''
: p
},
)
// Append the current lastEventId to the request URL.
requestURL +=
(url.indexOf('?') === -1 ? '?' : '&') +
lastEventIdQueryParameterName +
'=' +
encodeURIComponent(lastEventId)
}
}
var withCredentials = es.withCredentials
var requestHeaders = {}
requestHeaders['Accept'] = 'text/event-stream'
var headers = es.headers
if (headers != undefined) {
for (var name in headers) {
if (Object.prototype.hasOwnProperty.call(headers, name)) {
requestHeaders[name] = headers[name]
}
}
}
try {
abortController = transport.open(
xhr,
onStart,
onProgress,
onFinish,
requestURL,
withCredentials,
requestHeaders,
)
} catch (error) {
close()
throw error
}
}
es.url = url
es.readyState = CONNECTING
es.withCredentials = withCredentials
es.headers = headers
es._close = close
onTimeout()
}
EventSourcePolyfill.prototype = Object.create(EventTarget.prototype)
EventSourcePolyfill.prototype.CONNECTING = CONNECTING
EventSourcePolyfill.prototype.OPEN = OPEN
EventSourcePolyfill.prototype.CLOSED = CLOSED
EventSourcePolyfill.prototype.close = function () {
this._close()
}
EventSourcePolyfill.CONNECTING = CONNECTING
EventSourcePolyfill.OPEN = OPEN
EventSourcePolyfill.CLOSED = CLOSED
EventSourcePolyfill.prototype.withCredentials = undefined
return EventSourcePolyfill
})(
(function getGlobalScope() {
if (typeof globalThis !== 'undefined') return globalThis
if (typeof window !== 'undefined') return window
if (typeof self !== 'undefined') return self
if (typeof global !== 'undefined') return global
throw new Error('@sanity/eventsource: could not locate global scope')
})(),
)
module.exports = require('./dist/browser.js')

@@ -10,14 +10,12 @@ <!-- markdownlint-disable --><!-- textlint-disable -->

### Bug Fixes
* add react-native export ([#54](https://github.com/sanity-io/eventsource/issues/54)) ([52064fb](https://github.com/sanity-io/eventsource/commit/52064fb506f4ad37530bb535eee07bd41cbd1f36))
- add react-native export ([#54](https://github.com/sanity-io/eventsource/issues/54)) ([52064fb](https://github.com/sanity-io/eventsource/commit/52064fb506f4ad37530bb535eee07bd41cbd1f36))
## [5.0.1](https://github.com/sanity-io/eventsource/compare/v5.0.0...v5.0.1) (2023-09-28)
### Bug Fixes
* **deps:** update dependency @types/event-source-polyfill to v1.0.2 ([bb87c96](https://github.com/sanity-io/eventsource/commit/bb87c961b924783c02d9756dc688b0c061e55a40))
* **deps:** update dependency @types/eventsource to v1.1.12 ([#39](https://github.com/sanity-io/eventsource/issues/39)) ([e312938](https://github.com/sanity-io/eventsource/commit/e3129386ab2a0119f485d9622d6497ca9c2149b4))
- **deps:** update dependency @types/event-source-polyfill to v1.0.2 ([bb87c96](https://github.com/sanity-io/eventsource/commit/bb87c961b924783c02d9756dc688b0c061e55a40))
- **deps:** update dependency @types/eventsource to v1.1.12 ([#39](https://github.com/sanity-io/eventsource/issues/39)) ([e312938](https://github.com/sanity-io/eventsource/commit/e3129386ab2a0119f485d9622d6497ca9c2149b4))

@@ -24,0 +22,0 @@ ## [5.0.0](https://github.com/sanity-io/eventsource/compare/v4.1.1...v5.0.0) (2023-03-22)

@@ -1,1 +0,1 @@

module.exports = require('eventsource')
module.exports = require('./dist/node.js')
{
"name": "@sanity/eventsource",
"version": "6.0.0-canary.1",
"version": "6.0.0-canary.2",
"description": "EventSource polyfill for browser and node.js",

@@ -28,37 +28,45 @@ "keywords": [

".": {
"types": "./node.d.ts",
"source": "./src/node.ts",
"browser": {
"types": "./browser.d.ts",
"default": "./browser.js"
"source": "./src/browser.ts",
"import": "./dist/browser.mjs",
"require": "./dist/browser.js"
},
"react-native": {
"types": "./browser.d.ts",
"default": "./browser.js"
"import": "./dist/browser.mjs",
"default": "./dist/browser.js"
},
"deno": "./browser.js",
"edge-light": "./browser.js",
"worker": "./browser.js",
"node": "./node.js",
"default": "./node.js"
"deno": "./dist/browser.mjs",
"edge-light": "./dist/browser.mjs",
"worker": "./dist/browser.mjs",
"node": {
"import": "./dist/node.mjs",
"default": "./dist/node.js"
},
"import": "./dist/node.mjs",
"default": "./dist/node.js"
},
"./browser": {
"types": "./browser.d.ts",
"default": "./browser.js"
"import": "./dist/browser.mjs",
"default": "./dist/browser.js"
},
"./node": {
"types": "./node.d.ts",
"default": "./node.js"
"import": "./dist/node.mjs",
"default": "./dist/node.js"
},
"./package.json": "./package.json"
},
"main": "./node.js",
"browser": "./browser.js",
"types": "./node.d.ts",
"main": "./dist/node.js",
"browser": {
"./dist/node.js": "./dist/browser.js",
"./dist/node.mjs": "./dist/browser.mjs"
},
"types": "./dist/node.d.ts",
"typesVersions": {
"*": {
"browser": [
"./browser.d.ts"
"./dist/browser.d.ts"
],
"node": [
"./node.d.ts"
"./dist/node.d.ts"
]

@@ -68,16 +76,14 @@ }

"files": [
"dist",
"CHANGELOG.md",
"browser.js",
"browser.d.ts",
"node.js",
"node.d.ts"
"node.js"
],
"scripts": {
"prepublishOnly": "tsc",
"test": "tsc --noEmit --emitDeclarationOnly false"
"build": "pkg-utils build --strict --clean --check",
"prepublishOnly": "npm run build",
"test": "tsc"
},
"prettier": {
"semi": false,
"singleQuote": true
},
"browserslist": "extends @sanity/browserslist-config",
"prettier": "@sanity/prettier-config",
"dependencies": {

@@ -88,6 +94,7 @@ "@types/eventsource": "1.1.15",

"devDependencies": {
"@sanity/pkg-utils": "^6.8.6",
"@sanity/prettier-config": "^1.0.2",
"prettier": "^3.2.5",
"prettier-plugin-packagejson": "^2.4.12",
"typescript": "5.4.2"
"typescript": "5.4.5"
}
}

@@ -22,3 +22,3 @@ # @sanity/eventsource

In Node.js environments, the implementation is from the [eventsource](https://www.npmjs.com/package/eventsource) package, while browser-like environments use an inlined version of [event-source-polyfill](https://www.npmjs.com/package/event-source-polyfill).
In NodeJS environments it's the implementation from [eventsource](https://www.npmjs.com/package/eventsource) package. While browsers use [event-source-polyfill](https://www.npmjs.com/package/event-source-polyfill).

@@ -33,3 +33,3 @@ ### Forcing a specific implementation

To force the Node.js implementation, use the following:
To force the Node implementation, use the following:

@@ -36,0 +36,0 @@ ```ts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc