UNPKG

pusher-js

Version:

Pusher Channels JavaScript library for browsers, React Native, NodeJS and web workers

58 lines (49 loc) 1.51 kB
import ScriptReceiver from './script_receiver'; /** Builds receivers for JSONP and Script requests. * * Each receiver is an object with following fields: * - number - unique (for the factory instance), numerical id of the receiver * - id - a string ID that can be used in DOM attributes * - name - name of the function triggering the receiver * - callback - callback function * * Receivers are triggered only once, on the first callback call. * * Receivers can be called by their name or by accessing factory object * by the number key. * * @param {String} prefix the prefix used in ids * @param {String} name the name of the object */ export class ScriptReceiverFactory { lastId: number; prefix: string; name: string; constructor(prefix: string, name: string) { this.lastId = 0; this.prefix = prefix; this.name = name; } create(callback: Function): ScriptReceiver { this.lastId++; var number = this.lastId; var id = this.prefix + number; var name = this.name + '[' + number + ']'; var called = false; var callbackWrapper = function() { if (!called) { callback.apply(null, arguments); called = true; } }; this[number] = callbackWrapper; return { number: number, id: id, name: name, callback: callbackWrapper }; } remove(receiver: ScriptReceiver) { delete this[receiver.number]; } } export var ScriptReceivers = new ScriptReceiverFactory( '_pusher_script_', 'Pusher.ScriptReceivers' );