pusher-js
Version:
Pusher JavaScript library for browser, React Native, NodeJS and web workers
57 lines (48 loc) • 1.54 kB
text/typescript
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"
);