Socket
Socket
Sign inDemoInstall

osc-js

Package Overview
Dependencies
6
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.0.4 to 2.1.0

135

lib/osc.js

@@ -5,3 +5,3 @@ (function (global, factory) {

(global = global || self, global.OSC = factory());
}(this, function () { 'use strict';
}(this, (function () { 'use strict';

@@ -30,2 +30,51 @@ function _classCallCheck(instance, Constructor) {

function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
function _inherits(subClass, superClass) {

@@ -756,3 +805,3 @@ if (typeof superClass !== "function" && superClass !== null) {

_classCallCheck(this, EventHandler);
this.options = Object.assign({}, defaultOptions, options);
this.options = _objectSpread2({}, defaultOptions, {}, options);
this.addressHandlers = [];

@@ -768,3 +817,3 @@ this.eventHandlers = {

key: "dispatch",
value: function dispatch(packet) {
value: function dispatch(packet, rinfo) {
var _this = this;

@@ -787,3 +836,3 @@ if (!(packet instanceof Packet)) {

var message = bundleItem;
return _this.notify(message.address, message, bundle.timetag.value.timestamp());
return _this.notify(message.address, message, bundle.timetag.value.timestamp(), rinfo);
}

@@ -794,3 +843,3 @@ throw new Error('OSC EventHander dispatch() can\'t dispatch unknown Packet value');

var message = packet.value;
return this.notify(message.address, message);
return this.notify(message.address, message, 0, rinfo);
}

@@ -801,7 +850,7 @@ throw new Error('OSC EventHander dispatch() can\'t dispatch unknown Packet value');

key: "call",
value: function call(name, data) {
value: function call(name, data, rinfo) {
var success = false;
if (isString(name) && name in this.eventHandlers) {
this.eventHandlers[name].forEach(function (handler) {
handler.callback(data);
handler.callback(data, rinfo);
success = true;

@@ -829,3 +878,3 @@ });

handlers[key].forEach(function (handler) {
handler.callback(data);
handler.callback(data, rinfo);
success = true;

@@ -847,9 +896,9 @@ });

if (args[0] instanceof Packet) {
return this.dispatch(args[0]);
return this.dispatch(args[0], args[1]);
} else if (args[0] instanceof Bundle || args[0] instanceof Message) {
return this.dispatch(new Packet(args[0]));
return this.dispatch(new Packet(args[0]), args[1]);
} else if (!isString(args[0])) {
var packet = new Packet();
packet.unpack(dataView(args[0]));
return this.dispatch(packet);
return this.dispatch(packet, args[1]);
}

@@ -871,2 +920,6 @@ var name = args[0];

}
var rinfo = null;
if (args.length >= 3) {
rinfo = args[3];
}
if (timestamp) {

@@ -876,3 +929,3 @@ var now = Date.now();

if (!this.options.discardLateMessages) {
return this.call(name, data);
return this.call(name, data, rinfo);
}

@@ -882,7 +935,7 @@ }

setTimeout(function () {
that.call(name, data);
that.call(name, data, rinfo);
}, timestamp - now);
return true;
}
return this.call(name, data);
return this.call(name, data, rinfo);
}

@@ -970,5 +1023,5 @@ }, {

function mergeOptions(base, custom) {
return Object.assign({}, defaultOptions$1, base, custom, {
open: Object.assign({}, defaultOptions$1.open, base.open, custom.open),
send: Object.assign({}, defaultOptions$1.send, base.send, custom.send)
return _objectSpread2({}, defaultOptions$1, {}, base, {}, custom, {
open: _objectSpread2({}, defaultOptions$1.open, {}, base.open, {}, custom.open),
send: _objectSpread2({}, defaultOptions$1.send, {}, base.send, {}, custom.send)
});

@@ -988,4 +1041,4 @@ }

this.socketStatus = STATUS.IS_NOT_INITIALIZED;
this.socket.on('message', function (message) {
_this.notify(message);
this.socket.on('message', function (message, rinfo) {
_this.notify(message, rinfo);
});

@@ -1012,3 +1065,3 @@ this.socket.on('error', function (error) {

var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var options = Object.assign({}, this.options.open, customOptions);
var options = _objectSpread2({}, this.options.open, {}, customOptions);
var port = options.port,

@@ -1040,3 +1093,3 @@ exclusive = options.exclusive;

var customOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var options = Object.assign({}, this.options.send, customOptions);
var options = _objectSpread2({}, this.options.send, {}, customOptions);
var port = options.port,

@@ -1076,6 +1129,6 @@ host = options.host;

function mergeOptions$1(base, custom) {
return Object.assign({}, defaultOptions$2, base, custom, {
udpServer: Object.assign({}, defaultOptions$2.udpServer, base.udpServer, custom.udpServer),
udpClient: Object.assign({}, defaultOptions$2.udpClient, base.udpClient, custom.udpClient),
wsServer: Object.assign({}, defaultOptions$2.wsServer, base.wsServer, custom.wsServer)
return _objectSpread2({}, defaultOptions$2, {}, base, {}, custom, {
udpServer: _objectSpread2({}, defaultOptions$2.udpServer, {}, base.udpServer, {}, custom.udpServer),
udpClient: _objectSpread2({}, defaultOptions$2.udpClient, {}, base.udpClient, {}, custom.udpClient),
wsServer: _objectSpread2({}, defaultOptions$2.wsServer, {}, base.wsServer, {}, custom.wsServer)
});

@@ -1142,7 +1195,7 @@ }

_this2.websocket.on('connection', function (client) {
client.on('message', function (message) {
client.on('message', function (message, rinfo) {
_this2.send(message, {
receiver: 'udp'
});
_this2.notify(new Uint8Array(message));
_this2.notify(new Uint8Array(message), rinfo);
});

@@ -1208,3 +1261,3 @@ });

}
this.options = Object.assign({}, defaultOptions$3, customOptions);
this.options = _objectSpread2({}, defaultOptions$3, {}, customOptions);
this.socket = null;

@@ -1229,3 +1282,3 @@ this.socketStatus = STATUS$2.IS_NOT_INITIALIZED;

var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var options = Object.assign({}, this.options, customOptions);
var options = _objectSpread2({}, this.options, {}, customOptions);
var port = options.port,

@@ -1238,2 +1291,8 @@ host = options.host,

var protocol = secure ? 'wss' : 'ws';
var rinfo = {
address: host,
family: protocol,
port: port,
size: 0
};
this.socket = new WebSocket("".concat(protocol, "://").concat(host, ":").concat(port));

@@ -1254,3 +1313,3 @@ this.socket.binaryType = 'arraybuffer';

this.socket.onmessage = function (message) {
_this.notify(message.data);
_this.notify(message.data, rinfo);
};

@@ -1292,3 +1351,3 @@ }

}
this.options = Object.assign({}, defaultOptions$4, customOptions);
this.options = _objectSpread2({}, defaultOptions$4, {}, customOptions);
this.socket = null;

@@ -1313,5 +1372,11 @@ this.socketStatus = STATUS$3.IS_NOT_INITIALIZED;

var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var options = Object.assign({}, this.options, customOptions);
var options = _objectSpread2({}, this.options, {}, customOptions);
var port = options.port,
host = options.host;
var rinfo = {
address: host,
family: 'wsserver',
port: port,
size: 0
};
if (this.socket) {

@@ -1335,3 +1400,3 @@ this.close();

client.on('message', function (message) {
_this.notify(new Uint8Array(message));
_this.notify(new Uint8Array(message), rinfo);
});

@@ -1381,3 +1446,3 @@ });

}
this.options = Object.assign({}, defaultOptions$5, options);
this.options = _objectSpread2({}, defaultOptions$5, {}, options);
this.eventHandler = new EventHandler({

@@ -1464,2 +1529,2 @@ discardLateMessages: this.options.discardLateMessages

}));
})));

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

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).OSC=e()}(this,function(){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function t(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t}function e(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&n(t,e)}function o(t){return(o=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function n(t,e){return(n=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t,e){return!e||"object"!=typeof e&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t,e,n){return(a="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=o(t)););return t}(t,e);if(r){var i=Object.getOwnPropertyDescriptor(r,e);return i.get?i.get.call(n):i.value}})(t,e,n||t)}function c(t){return Number(t)===t&&t%1==0}function u(t){return Number(t)===t&&t%1!=0}function f(t){return"string"==typeof t}function h(t){return"[object Array]"===Object.prototype.toString.call(t)}function l(t){return"[object Object]"===Object.prototype.toString.call(t)}function d(t){return"function"==typeof t}function p(t){return t instanceof Uint8Array}function v(t){return void 0===t}function w(t){return t+3&-4}function g(t){return Object.prototype.hasOwnProperty.call("undefined"!=typeof global?global:window,t)}function y(t){if(c(t))return"i";if(u(t))return"f";if(f(t))return"s";if(p(t))return"b";throw new Error("OSC typeTag() found unknown value type")}function k(t){var e="";if(h(t))return"/".concat(t.join("/"));if(f(t))return 1<(e=t).length&&"/"===e[e.length-1]&&(e=e.slice(0,e.length-1)),1<e.length&&"/"!==e[0]&&(e="/".concat(e)),e;throw new Error("OSC prepareAddress() needs addresses of type array or string")}function b(t){if(!f(t))throw new Error("OSC prepareRegExPattern() needs strings");return t.replace(/\./g,"\\.").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/\{/g,"(").replace(/\}/g,")").replace(/,/g,"|").replace(/\[!/g,"[^").replace(/\?/g,".").replace(/\*/g,".*")}var m=(t(S,[{key:"add",value:function(t){var e=t.pack();return this.byteLength+=e.byteLength,this.data.push(e),this}},{key:"merge",value:function(){var e=new Uint8Array(this.byteLength),n=0;return this.data.forEach(function(t){e.set(t,n),n+=t.byteLength}),e}}]),S);function S(){i(this,S),this.data=[],this.byteLength=0}var O=(t(E,[{key:"pack",value:function(t,e){if(!t||!e)throw new Error("OSC Atomic cant't be packed without given method or byteLength");var n=new Uint8Array(e),r=new DataView(n.buffer);if(v(this.value))throw new Error("OSC Atomic cant't be encoded with empty value");return r[t](this.offset,this.value,!1),n}},{key:"unpack",value:function(t,e,n,r){var i=3<arguments.length&&void 0!==r?r:0;if(!(t&&e&&n))throw new Error("OSC Atomic cant't be unpacked without given dataView, method or byteLength");if(!(t instanceof DataView))throw new Error("OSC Atomic expects an instance of type DataView");return this.value=t[e](i,!1),this.offset=i+n,this.offset}}]),E);function E(t){i(this,E),this.value=t,this.offset=0}var C=(e(A,O),t(A,[{key:"pack",value:function(){return a(o(A.prototype),"pack",this).call(this,"setInt32",4)}},{key:"unpack",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:0;return a(o(A.prototype),"unpack",this).call(this,t,"getInt32",4,n)}}]),A);function A(t){if(i(this,A),t&&!c(t))throw new Error("OSC AtomicInt32 constructor expects value of type number");return s(this,o(A).call(this,t))}var j="utf-8";var P=(e(D,O),t(D,[{key:"pack",value:function(){if(v(this.value))throw new Error("OSC AtomicString can not be encoded with empty value");for(var t="".concat(this.value,"\0"),e=w(t.length),n=new Uint8Array(e),r=0;r<t.length;r+=1)n[r]=t.charCodeAt(r);return n}},{key:"unpack",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:0;if(!(t instanceof DataView))throw new Error("OSC AtomicString expects an instance of type DataView");for(var r,i=n,o=[];i<t.byteLength;i+=1){if(0===(r=t.getUint8(i))){i+=1;break}o.push(r)}if(i===t.length)throw new Error("OSC AtomicString found a malformed OSC string");return this.offset=w(i),this.value=function(t){if(g("Buffer"))return Buffer.from(t).toString(j);if(g("TextDecoder"))return new TextDecoder(j).decode(new Int8Array(t));for(var e="",n=0;n<t.length;n+=65537)e+=String.fromCharCode.apply(null,t.slice(n,n+65537));return e}(o),this.offset}}]),D);function D(t){if(i(this,D),t&&!f(t))throw new Error("OSC AtomicString constructor expects value of type string");return s(this,o(D).call(this,t))}var x=2208988800,H=4294967296,I=(t(L,[{key:"timestamp",value:function(t){var e;if("number"!=typeof t)return 1e3*((e=this.seconds-x)+Math.round(this.fractions/H));e=t/1e3;var n=Math.floor(e);return this.seconds=n+x,this.fractions=Math.round(H*(e-n)),t}}]),L);function L(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;if(i(this,L),!c(t)||!c(e))throw new Error("OSC Timetag constructor expects values of type integer number");this.seconds=t,this.fractions=e}var _=(e(B,O),t(B,[{key:"pack",value:function(){if(v(this.value))throw new Error("OSC AtomicTimetag can not be encoded with empty value");var t=this.value,e=t.seconds,n=t.fractions,r=new Uint8Array(8),i=new DataView(r.buffer);return i.setInt32(0,e,!1),i.setInt32(4,n,!1),r}},{key:"unpack",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:0;if(!(t instanceof DataView))throw new Error("OSC AtomicTimetag expects an instance of type DataView");var r=t.getUint32(n,!1),i=t.getUint32(n+4,!1);return this.value=new I(r,i),this.offset=n+8,this.offset}}]),B);function B(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:Date.now();i(this,B);var e=new I;return t instanceof I?e=t:c(t)?e.timestamp(t):function(t){return t instanceof Date}(t)&&e.timestamp(t.getTime()),s(this,o(B).call(this,e))}var V=(e(M,O),t(M,[{key:"pack",value:function(){if(v(this.value))throw new Error("OSC AtomicBlob can not be encoded with empty value");var t=w(this.value.byteLength),e=new Uint8Array(t+4);return new DataView(e.buffer).setInt32(0,this.value.byteLength,!1),e.set(this.value,4),e}},{key:"unpack",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:0;if(!(t instanceof DataView))throw new Error("OSC AtomicBlob expects an instance of type DataView");var r=t.getInt32(n,!1);return this.value=new Uint8Array(t.buffer,n+4,r),this.offset=w(n+4+r),this.offset}}]),M);function M(t){if(i(this,M),t&&!p(t))throw new Error("OSC AtomicBlob constructor expects value of type Uint8Array");return s(this,o(M).call(this,t))}var T=(e(N,O),t(N,[{key:"pack",value:function(){return a(o(N.prototype),"pack",this).call(this,"setFloat32",4)}},{key:"unpack",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:0;return a(o(N.prototype),"unpack",this).call(this,t,"getFloat32",4,n)}}]),N);function N(t){if(i(this,N),t&&!u(t))throw new Error("OSC AtomicFloat32 constructor expects value of type float");return s(this,o(N).call(this,t))}var U=(t(R,[{key:"add",value:function(t){if(v(t))throw new Error("OSC Message needs a valid OSC Atomic Data Type");this.args.push(t),this.types+=y(t)}},{key:"pack",value:function(){if(0===this.address.length||"/"!==this.address[0])throw new Error("OSC Message has an invalid address");var e,n=new m;return n.add(new P(this.address)),n.add(new P(",".concat(this.types))),0<this.args.length&&this.args.forEach(function(t){if(c(t))e=new C(t);else if(u(t))e=new T(t);else if(f(t))e=new P(t);else{if(!p(t))throw new Error("OSC Message found unknown argument type");e=new V(t)}n.add(e)}),n.merge()}},{key:"unpack",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:0;if(!(t instanceof DataView))throw new Error("OSC Message expects an instance of type DataView.");var r=new P;r.unpack(t,n);var i=new P;if(i.unpack(t,r.offset),0===r.value.length||"/"!==r.value[0])throw new Error("OSC Message found malformed or missing address string");if(0===i.value.length&&","!==i.value[0])throw new Error("OSC Message found malformed or missing type string");for(var o,s,a=i.offset,u=[],c=1;c<i.value.length;c+=1){if("i"===(s=i.value[c]))o=new C;else if("f"===s)o=new T;else if("s"===s)o=new P;else{if("b"!==s)throw new Error("OSC Message found non-standard argument type");o=new V}a=o.unpack(t,a),u.push(o.value)}return this.offset=a,this.address=r.value,this.types=i.value,this.args=u,this.offset}}]),R);function R(){i(this,R),this.offset=0,this.address="",this.types="",this.args=[];for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];if(0<e.length){if(!f(e[0])&&!h(e[0]))throw new Error("OSC Message constructor first argument (address) must be a string or array");this.address=k(e.shift()),this.types=e.map(function(t){return y(t)}).join(""),this.args=e}}var W="#bundle",q=(t(F,[{key:"timestamp",value:function(t){if(!c(t))throw new Error("OSC Bundle needs an integer for setting the timestamp");this.timetag=new _(t)}},{key:"add",value:function(t){if(!(t instanceof U||t instanceof F))throw new Error("OSC Bundle contains only Messages and Bundles");this.bundleElements.push(t)}},{key:"pack",value:function(){var e=new m;return e.add(new P(W)),this.timetag||(this.timetag=new _),e.add(this.timetag),this.bundleElements.forEach(function(t){e.add(new C(t.pack().byteLength)),e.add(t)}),e.merge()}},{key:"unpack",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:0;if(!(t instanceof DataView))throw new Error("OSC Bundle expects an instance of type DataView");var r=new P;if(r.unpack(t,n),r.value!==W)throw new Error("OSC Bundle does not contain a valid #bundle head");var i=new _,o=i.unpack(t,r.offset);for(this.bundleElements=[];o<t.byteLength;){var s=new P;o=(new C).unpack(t,o);var a=void 0;s.unpack(t,o),o=(a=s.value===W?new F:new U).unpack(t,o),this.bundleElements.push(a)}return this.offset=o,this.timetag=i,this.offset}}]),F);function F(){var e=this;i(this,F),this.offset=0,this.timetag=new _,this.bundleElements=[];for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];0<n.length&&(n[0]instanceof Date||c(n[0])?this.timetag=new _(n[0]):h(n[0])?(n[0].forEach(function(t){e.add(t)}),1<n.length&&(n[1]instanceof Date||c(n[0]))&&(this.timetag=new _(n[1]))):n.forEach(function(t){e.add(t)}))}var G=(t(Z,[{key:"pack",value:function(){if(!this.value)throw new Error("OSC Packet can not be encoded with empty body");return this.value.pack()}},{key:"unpack",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:0;if(!(t instanceof DataView))throw new Error("OSC Packet expects an instance of type DataView");if(t.byteLength%4!=0)throw new Error("OSC Packet byteLength has to be a multiple of four");var r,i=new P;return i.unpack(t,n),(r=i.value===W?new q:new U).unpack(t,n),this.offset=r.offset,this.value=r,this.offset}}]),Z);function Z(t){if(i(this,Z),t&&!(t instanceof U||t instanceof q))throw new Error("OSC Packet value has to be Message or Bundle");this.value=t,this.offset=0}var z={discardLateMessages:!1},J=(t(K,[{key:"dispatch",value:function(t){var n=this;if(!(t instanceof G))throw new Error("OSC EventHander dispatch() accepts only arguments of type Packet");if(!t.value)throw new Error("OSC EventHander dispatch() can't read empty Packets");if(t.value instanceof q){var r=t.value;return r.bundleElements.forEach(function(t){if(t instanceof q){if(r.timetag.value.timestamp()<t.timetag.value.timestamp())throw new Error("OSC Bundle timestamp is older than the timestamp of enclosed Bundles");return n.dispatch(t)}if(t instanceof U){var e=t;return n.notify(e.address,e,r.timetag.value.timestamp())}throw new Error("OSC EventHander dispatch() can't dispatch unknown Packet value")})}if(t.value instanceof U){var e=t.value;return this.notify(e.address,e)}throw new Error("OSC EventHander dispatch() can't dispatch unknown Packet value")}},{key:"call",value:function(i,o){var s=!1;if(f(i)&&i in this.eventHandlers)return this.eventHandlers[i].forEach(function(t){t.callback(o),s=!0}),s;var t=Object.keys(this.addressHandlers),a=this.addressHandlers;return t.forEach(function(t){var e=!1,n=new RegExp(b(k(i)),"g");if(n.test(t)&&t.length===n.lastIndex&&(e=!0),!e){var r=new RegExp(b(k(t)),"g");r.test(i)&&i.length===r.lastIndex&&(e=!0)}e&&a[t].forEach(function(t){t.callback(o),s=!0})}),s}},{key:"notify",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];if(0===e.length)throw new Error("OSC EventHandler can not be called without any argument");if(e[0]instanceof G)return this.dispatch(e[0]);if(e[0]instanceof q||e[0]instanceof U)return this.dispatch(new G(e[0]));if(!f(e[0])){var r=new G;return r.unpack(function(t){return t.buffer?new DataView(t.buffer):t instanceof ArrayBuffer?new DataView(t):new DataView(new Uint8Array(t))}(e[0])),this.dispatch(r)}var i=e[0],o=null;1<e.length&&(o=e[1]);var s=null;if(2<e.length)if(c(e[2]))s=e[2];else{if(!(e[2]instanceof Date))throw new Error("OSC EventHandler timestamp has to be a number or Date");s=e[2].getTime()}if(s){var a=Date.now();if(s<a&&!this.options.discardLateMessages)return this.call(i,o);var u=this;return setTimeout(function(){u.call(i,o)},s-a),!0}return this.call(i,o)}},{key:"on",value:function(t,e){if(!f(t)&&!h(t))throw new Error("OSC EventHandler accepts only strings or arrays for address patterns");if(!d(e))throw new Error("OSC EventHandler callback has to be a function");this.uuid+=1;var n={id:this.uuid,callback:e};if(f(t)&&t in this.eventHandlers)return this.eventHandlers[t].push(n),this.uuid;var r=k(t);return r in this.addressHandlers||(this.addressHandlers[r]=[]),this.addressHandlers[r].push(n),this.uuid}},{key:"off",value:function(t,n){if(!f(t)&&!h(t))throw new Error("OSC EventHandler accepts only strings or arrays for address patterns");if(!c(n))throw new Error("OSC EventHandler subscription id has to be a number");var r,i;return i=f(t)&&t in this.eventHandlers?(r=t,this.eventHandlers):(r=k(t),this.addressHandlers),r in i&&i[r].some(function(t,e){return t.id===n&&(i[r].splice(e,1),!0)})}}]),K);function K(t){i(this,K),this.options=Object.assign({},z,t),this.addressHandlers=[],this.eventHandlers={open:[],error:[],close:[]},this.uuid=0}var Q="undefined"!=typeof __dirname?require("dgram"):void 0,X=-1,Y=0,$=1,tt=2,et=3,nt={type:"udp4",open:{host:"localhost",port:41234,exclusive:!1},send:{host:"localhost",port:41235}};var rt=(t(it,[{key:"registerNotify",value:function(t){this.notify=t}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(t){var e=this,n=0<arguments.length&&void 0!==t?t:{},r=Object.assign({},this.options.open,n),i=r.port,o=r.exclusive;this.socketStatus=Y,this.socket.bind({address:r.host,port:i,exclusive:o},function(){e.socketStatus=$,e.notify("open")})}},{key:"close",value:function(){var t=this;this.socketStatus=tt,this.socket.close(function(){t.socketStatus=et,t.notify("close")})}},{key:"send",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:{},r=Object.assign({},this.options.send,n),i=r.port,o=r.host;this.socket.send(Buffer.from(t),0,t.byteLength,i,o)}}]),it);function it(){var e=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(i(this,it),!Q)throw new Error("DatagramPlugin can not be used in browser context");this.options=function(t,e){return Object.assign({},nt,t,e,{open:Object.assign({},nt.open,t.open,e.open),send:Object.assign({},nt.send,t.send,e.send)})}({},t),this.socket=Q.createSocket(this.options.type),this.socketStatus=X,this.socket.on("message",function(t){e.notify(t)}),this.socket.on("error",function(t){e.notify("error",t)}),this.notify=function(){}}var ot="undefined"!=typeof __dirname?require("dgram"):void 0,st="undefined"!=typeof __dirname?require("isomorphic-ws").Server:void 0,at=-1,ut=0,ct=1,ft=2,ht=3,lt={udpServer:{host:"localhost",port:41234,exclusive:!1},udpClient:{host:"localhost",port:41235},wsServer:{host:"localhost",port:8080},receiver:"ws"};function dt(t,e){return Object.assign({},lt,t,e,{udpServer:Object.assign({},lt.udpServer,t.udpServer,e.udpServer),udpClient:Object.assign({},lt.udpClient,t.udpClient,e.udpClient),wsServer:Object.assign({},lt.wsServer,t.wsServer,e.wsServer)})}var pt=(t(vt,[{key:"registerNotify",value:function(t){this.notify=t}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(t){var e=this,n=0<arguments.length&&void 0!==t?t:{},r=dt(this.options,n);this.socketStatus=ut,this.socket.bind({address:r.udpServer.host,port:r.udpServer.port,exclusive:r.udpServer.exclusive},function(){e.websocket=new st({host:r.wsServer.host,port:r.wsServer.port}),e.websocket.binaryType="arraybuffer",e.websocket.on("listening",function(){e.socketStatus=ct,e.notify("open")}),e.websocket.on("error",function(t){e.notify("error",t)}),e.websocket.on("connection",function(t){t.on("message",function(t){e.send(t,{receiver:"udp"}),e.notify(new Uint8Array(t))})})})}},{key:"close",value:function(){var t=this;this.socketStatus=ft,this.socket.close(function(){t.websocket.close(function(){t.socketStatus=ht,t.notify("close")})})}},{key:"send",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:{},r=dt(this.options,n),i=r.receiver;if("udp"===i){var o=e instanceof Buffer?e:Buffer.from(e);this.socket.send(o,0,o.byteLength,r.udpClient.port,r.udpClient.host)}else{if("ws"!==i)throw new Error("BridgePlugin can not send message to unknown receiver");this.websocket.clients.forEach(function(t){t.send(e,{binary:!0})})}}}]),vt);function vt(){var e=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(i(this,vt),!ot||!st)throw new Error("BridgePlugin can not be used in browser context");this.options=dt({},t),this.websocket=null,this.socket=ot.createSocket("udp4"),this.socketStatus=at,this.socket.on("message",function(t){e.send(t,{receiver:"ws"}),e.notify(t.buffer)}),this.socket.on("error",function(t){e.notify("error",t)}),this.notify=function(){}}var wt="undefined"==typeof global?window:global,gt="undefined"==typeof __dirname?wt.WebSocket:require("isomorphic-ws"),yt=-1,kt=0,bt=1,mt=2,St=3,Ot={host:"localhost",port:8080,secure:!1},Et=(t(Ct,[{key:"registerNotify",value:function(t){this.notify=t}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(t){var e=this,n=0<arguments.length&&void 0!==t?t:{},r=Object.assign({},this.options,n),i=r.port,o=r.host,s=r.secure;this.socket&&this.close();var a=s?"wss":"ws";this.socket=new gt("".concat(a,"://").concat(o,":").concat(i)),this.socket.binaryType="arraybuffer",this.socketStatus=kt,this.socket.onopen=function(){e.socketStatus=bt,e.notify("open")},this.socket.onclose=function(){e.socketStatus=St,e.notify("close")},this.socket.onerror=function(t){e.notify("error",t)},this.socket.onmessage=function(t){e.notify(t.data)}}},{key:"close",value:function(){this.socketStatus=mt,this.socket.close()}},{key:"send",value:function(t){this.socket.send(t)}}]),Ct);function Ct(t){if(i(this,Ct),!gt)throw new Error("WebsocketClientPlugin can't find a WebSocket class");this.options=Object.assign({},Ot,t),this.socket=null,this.socketStatus=yt,this.notify=function(){}}var At="undefined"!=typeof __dirname?require("isomorphic-ws").Server:void 0,jt=-1,Pt=0,Dt=1,xt=2,Ht=3,It={host:"localhost",port:8080},Lt=(t(_t,[{key:"registerNotify",value:function(t){this.notify=t}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(t){var e=this,n=0<arguments.length&&void 0!==t?t:{},r=Object.assign({},this.options,n),i=r.port,o=r.host;this.socket&&this.close(),this.socket=new At({host:o,port:i}),this.socket.binaryType="arraybuffer",this.socketStatus=Pt,this.socket.on("listening",function(){e.socketStatus=Dt,e.notify("open")}),this.socket.on("error",function(t){e.notify("error",t)}),this.socket.on("connection",function(t){t.on("message",function(t){e.notify(new Uint8Array(t))})})}},{key:"close",value:function(){var t=this;this.socketStatus=xt,this.socket.close(function(){t.socketStatus=Ht,t.notify("close")})}},{key:"send",value:function(e){this.socket.clients.forEach(function(t){t.send(e,{binary:!0})})}}]),_t);function _t(t){if(i(this,_t),!At)throw new Error("WebsocketServerPlugin can not be used in browser context");this.options=Object.assign({},It,t),this.socket=null,this.socketStatus=jt,this.notify=function(){}}var Bt={discardLateMessages:!1,plugin:new Et},Vt=(t(Mt,[{key:"on",value:function(t,e){if(!f(t)||!d(e))throw new Error("OSC on() needs event- or address string and callback function");return this.eventHandler.on(t,e)}},{key:"off",value:function(t,e){if(!f(t)||!c(e))throw new Error("OSC off() needs string and number (subscriptionId) to unsubscribe");return this.eventHandler.off(t,e)}},{key:"open",value:function(t){if(t&&!l(t))throw new Error("OSC open() options argument needs to be an object");if(!this.options.plugin||!d(this.options.plugin.open))throw new Error("OSC Plugin API #open is not implemented!");return this.options.plugin.open(t)}},{key:"status",value:function(){if(!this.options.plugin||!d(this.options.plugin.status))throw new Error("OSC Plugin API #status is not implemented!");return this.options.plugin.status()}},{key:"close",value:function(){if(!this.options.plugin||!d(this.options.plugin.close))throw new Error("OSC Plugin API #close is not implemented!");return this.options.plugin.close()}},{key:"send",value:function(t,e){if(!this.options.plugin||!d(this.options.plugin.send))throw new Error("OSC Plugin API #send is not implemented!");if(!(t instanceof U||t instanceof q||t instanceof G))throw new Error("OSC send() needs Messages, Bundles or Packets");if(e&&!l(e))throw new Error("OSC send() options argument has to be an object");return this.options.plugin.send(t.pack(),e)}}]),Mt);function Mt(t){if(i(this,Mt),t&&!l(t))throw new Error("OSC options argument has to be an object.");this.options=Object.assign({},Bt,t),this.eventHandler=new J({discardLateMessages:this.options.discardLateMessages});var e=this.eventHandler;this.options.plugin&&this.options.plugin.registerNotify&&this.options.plugin.registerNotify(function(){return e.notify.apply(e,arguments)})}return Vt.STATUS={IS_NOT_INITIALIZED:-1,IS_CONNECTING:0,IS_OPEN:1,IS_CLOSING:2,IS_CLOSED:3},Vt.Packet=G,Vt.Bundle=q,Vt.Message=U,Vt.DatagramPlugin=rt,Vt.WebsocketClientPlugin=Et,Vt.WebsocketServerPlugin=Lt,Vt.BridgePlugin=pt,Vt});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).OSC=t()}(this,function(){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function e(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function c(o){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?t(Object(i),!0).forEach(function(e){var t,n,r;t=o,r=i[n=e],n in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach(function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(i,e))})}return o}function n(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&s(e,t)}function i(e){return(i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function s(e,t){return(s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function a(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function u(e,t,n){return(u="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var r=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=i(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(n):o.value}})(e,t,n||e)}function f(e){return Number(e)===e&&e%1==0}function h(e){return Number(e)===e&&e%1!=0}function l(e){return"string"==typeof e}function d(e){return"[object Array]"===Object.prototype.toString.call(e)}function p(e){return"[object Object]"===Object.prototype.toString.call(e)}function v(e){return"function"==typeof e}function w(e){return e instanceof Uint8Array}function y(e){return void 0===e}function g(e){return e+3&-4}function k(e){return Object.prototype.hasOwnProperty.call("undefined"!=typeof global?global:window,e)}function b(e){if(f(e))return"i";if(h(e))return"f";if(l(e))return"s";if(w(e))return"b";throw new Error("OSC typeTag() found unknown value type")}function m(e){var t="";if(d(e))return"/".concat(e.join("/"));if(l(e))return 1<(t=e).length&&"/"===t[t.length-1]&&(t=t.slice(0,t.length-1)),1<t.length&&"/"!==t[0]&&(t="/".concat(t)),t;throw new Error("OSC prepareAddress() needs addresses of type array or string")}function S(e){if(!l(e))throw new Error("OSC prepareRegExPattern() needs strings");return e.replace(/\./g,"\\.").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/\{/g,"(").replace(/\}/g,")").replace(/,/g,"|").replace(/\[!/g,"[^").replace(/\?/g,".").replace(/\*/g,".*")}var O=(e(E,[{key:"add",value:function(e){var t=e.pack();return this.byteLength+=t.byteLength,this.data.push(t),this}},{key:"merge",value:function(){var t=new Uint8Array(this.byteLength),n=0;return this.data.forEach(function(e){t.set(e,n),n+=e.byteLength}),t}}]),E);function E(){o(this,E),this.data=[],this.byteLength=0}var C=(e(P,[{key:"pack",value:function(e,t){if(!e||!t)throw new Error("OSC Atomic cant't be packed without given method or byteLength");var n=new Uint8Array(t),r=new DataView(n.buffer);if(y(this.value))throw new Error("OSC Atomic cant't be encoded with empty value");return r[e](this.offset,this.value,!1),n}},{key:"unpack",value:function(e,t,n,r){var o=3<arguments.length&&void 0!==r?r:0;if(!(e&&t&&n))throw new Error("OSC Atomic cant't be unpacked without given dataView, method or byteLength");if(!(e instanceof DataView))throw new Error("OSC Atomic expects an instance of type DataView");return this.value=e[t](o,!1),this.offset=o+n,this.offset}}]),P);function P(e){o(this,P),this.value=e,this.offset=0}var A=(n(D,C),e(D,[{key:"pack",value:function(){return u(i(D.prototype),"pack",this).call(this,"setInt32",4)}},{key:"unpack",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:0;return u(i(D.prototype),"unpack",this).call(this,e,"getInt32",4,n)}}]),D);function D(e){if(o(this,D),e&&!f(e))throw new Error("OSC AtomicInt32 constructor expects value of type number");return a(this,i(D).call(this,e))}var j="utf-8";var x=(n(H,C),e(H,[{key:"pack",value:function(){if(y(this.value))throw new Error("OSC AtomicString can not be encoded with empty value");for(var e="".concat(this.value,"\0"),t=g(e.length),n=new Uint8Array(t),r=0;r<e.length;r+=1)n[r]=e.charCodeAt(r);return n}},{key:"unpack",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:0;if(!(e instanceof DataView))throw new Error("OSC AtomicString expects an instance of type DataView");for(var r,o=n,i=[];o<e.byteLength;o+=1){if(0===(r=e.getUint8(o))){o+=1;break}i.push(r)}if(o===e.length)throw new Error("OSC AtomicString found a malformed OSC string");return this.offset=g(o),this.value=function(e){if(k("Buffer"))return Buffer.from(e).toString(j);if(k("TextDecoder"))return new TextDecoder(j).decode(new Int8Array(e));for(var t="",n=0;n<e.length;n+=65537)t+=String.fromCharCode.apply(null,e.slice(n,n+65537));return t}(i),this.offset}}]),H);function H(e){if(o(this,H),e&&!l(e))throw new Error("OSC AtomicString constructor expects value of type string");return a(this,i(H).call(this,e))}var I=2208988800,L=4294967296,_=(e(B,[{key:"timestamp",value:function(e){var t;if("number"!=typeof e)return 1e3*((t=this.seconds-I)+Math.round(this.fractions/L));t=e/1e3;var n=Math.floor(t);return this.seconds=n+I,this.fractions=Math.round(L*(t-n)),e}}]),B);function B(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;if(o(this,B),!f(e)||!f(t))throw new Error("OSC Timetag constructor expects values of type integer number");this.seconds=e,this.fractions=t}var V=(n(M,C),e(M,[{key:"pack",value:function(){if(y(this.value))throw new Error("OSC AtomicTimetag can not be encoded with empty value");var e=this.value,t=e.seconds,n=e.fractions,r=new Uint8Array(8),o=new DataView(r.buffer);return o.setInt32(0,t,!1),o.setInt32(4,n,!1),r}},{key:"unpack",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:0;if(!(e instanceof DataView))throw new Error("OSC AtomicTimetag expects an instance of type DataView");var r=e.getUint32(n,!1),o=e.getUint32(n+4,!1);return this.value=new _(r,o),this.offset=n+8,this.offset}}]),M);function M(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:Date.now();o(this,M);var t=new _;return e instanceof _?t=e:f(e)?t.timestamp(e):function(e){return e instanceof Date}(e)&&t.timestamp(e.getTime()),a(this,i(M).call(this,t))}var T=(n(N,C),e(N,[{key:"pack",value:function(){if(y(this.value))throw new Error("OSC AtomicBlob can not be encoded with empty value");var e=g(this.value.byteLength),t=new Uint8Array(e+4);return new DataView(t.buffer).setInt32(0,this.value.byteLength,!1),t.set(this.value,4),t}},{key:"unpack",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:0;if(!(e instanceof DataView))throw new Error("OSC AtomicBlob expects an instance of type DataView");var r=e.getInt32(n,!1);return this.value=new Uint8Array(e.buffer,n+4,r),this.offset=g(n+4+r),this.offset}}]),N);function N(e){if(o(this,N),e&&!w(e))throw new Error("OSC AtomicBlob constructor expects value of type Uint8Array");return a(this,i(N).call(this,e))}var U=(n(R,C),e(R,[{key:"pack",value:function(){return u(i(R.prototype),"pack",this).call(this,"setFloat32",4)}},{key:"unpack",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:0;return u(i(R.prototype),"unpack",this).call(this,e,"getFloat32",4,n)}}]),R);function R(e){if(o(this,R),e&&!h(e))throw new Error("OSC AtomicFloat32 constructor expects value of type float");return a(this,i(R).call(this,e))}var W=(e(q,[{key:"add",value:function(e){if(y(e))throw new Error("OSC Message needs a valid OSC Atomic Data Type");this.args.push(e),this.types+=b(e)}},{key:"pack",value:function(){if(0===this.address.length||"/"!==this.address[0])throw new Error("OSC Message has an invalid address");var t,n=new O;return n.add(new x(this.address)),n.add(new x(",".concat(this.types))),0<this.args.length&&this.args.forEach(function(e){if(f(e))t=new A(e);else if(h(e))t=new U(e);else if(l(e))t=new x(e);else{if(!w(e))throw new Error("OSC Message found unknown argument type");t=new T(e)}n.add(t)}),n.merge()}},{key:"unpack",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:0;if(!(e instanceof DataView))throw new Error("OSC Message expects an instance of type DataView.");var r=new x;r.unpack(e,n);var o=new x;if(o.unpack(e,r.offset),0===r.value.length||"/"!==r.value[0])throw new Error("OSC Message found malformed or missing address string");if(0===o.value.length&&","!==o.value[0])throw new Error("OSC Message found malformed or missing type string");for(var i,s,a=o.offset,u=[],c=1;c<o.value.length;c+=1){if("i"===(s=o.value[c]))i=new A;else if("f"===s)i=new U;else if("s"===s)i=new x;else{if("b"!==s)throw new Error("OSC Message found non-standard argument type");i=new T}a=i.unpack(e,a),u.push(i.value)}return this.offset=a,this.address=r.value,this.types=o.value,this.args=u,this.offset}}]),q);function q(){o(this,q),this.offset=0,this.address="",this.types="",this.args=[];for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(0<t.length){if(!l(t[0])&&!d(t[0]))throw new Error("OSC Message constructor first argument (address) must be a string or array");this.address=m(t.shift()),this.types=t.map(function(e){return b(e)}).join(""),this.args=t}}var F="#bundle",z=(e(G,[{key:"timestamp",value:function(e){if(!f(e))throw new Error("OSC Bundle needs an integer for setting the timestamp");this.timetag=new V(e)}},{key:"add",value:function(e){if(!(e instanceof W||e instanceof G))throw new Error("OSC Bundle contains only Messages and Bundles");this.bundleElements.push(e)}},{key:"pack",value:function(){var t=new O;return t.add(new x(F)),this.timetag||(this.timetag=new V),t.add(this.timetag),this.bundleElements.forEach(function(e){t.add(new A(e.pack().byteLength)),t.add(e)}),t.merge()}},{key:"unpack",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:0;if(!(e instanceof DataView))throw new Error("OSC Bundle expects an instance of type DataView");var r=new x;if(r.unpack(e,n),r.value!==F)throw new Error("OSC Bundle does not contain a valid #bundle head");var o=new V,i=o.unpack(e,r.offset);for(this.bundleElements=[];i<e.byteLength;){var s=new x;i=(new A).unpack(e,i);var a=void 0;s.unpack(e,i),i=(a=s.value===F?new G:new W).unpack(e,i),this.bundleElements.push(a)}return this.offset=i,this.timetag=o,this.offset}}]),G);function G(){var t=this;o(this,G),this.offset=0,this.timetag=new V,this.bundleElements=[];for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];0<n.length&&(n[0]instanceof Date||f(n[0])?this.timetag=new V(n[0]):d(n[0])?(n[0].forEach(function(e){t.add(e)}),1<n.length&&(n[1]instanceof Date||f(n[0]))&&(this.timetag=new V(n[1]))):n.forEach(function(e){t.add(e)}))}var Z=(e(J,[{key:"pack",value:function(){if(!this.value)throw new Error("OSC Packet can not be encoded with empty body");return this.value.pack()}},{key:"unpack",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:0;if(!(e instanceof DataView))throw new Error("OSC Packet expects an instance of type DataView");if(e.byteLength%4!=0)throw new Error("OSC Packet byteLength has to be a multiple of four");var r,o=new x;return o.unpack(e,n),(r=o.value===F?new z:new W).unpack(e,n),this.offset=r.offset,this.value=r,this.offset}}]),J);function J(e){if(o(this,J),e&&!(e instanceof W||e instanceof z))throw new Error("OSC Packet value has to be Message or Bundle");this.value=e,this.offset=0}var K={discardLateMessages:!1},Q=(e(X,[{key:"dispatch",value:function(e,n){var r=this;if(!(e instanceof Z))throw new Error("OSC EventHander dispatch() accepts only arguments of type Packet");if(!e.value)throw new Error("OSC EventHander dispatch() can't read empty Packets");if(e.value instanceof z){var o=e.value;return o.bundleElements.forEach(function(e){if(e instanceof z){if(o.timetag.value.timestamp()<e.timetag.value.timestamp())throw new Error("OSC Bundle timestamp is older than the timestamp of enclosed Bundles");return r.dispatch(e)}if(e instanceof W){var t=e;return r.notify(t.address,t,o.timetag.value.timestamp(),n)}throw new Error("OSC EventHander dispatch() can't dispatch unknown Packet value")})}if(e.value instanceof W){var t=e.value;return this.notify(t.address,t,0,n)}throw new Error("OSC EventHander dispatch() can't dispatch unknown Packet value")}},{key:"call",value:function(o,i,s){var a=!1;if(l(o)&&o in this.eventHandlers)return this.eventHandlers[o].forEach(function(e){e.callback(i,s),a=!0}),a;var e=Object.keys(this.addressHandlers),u=this.addressHandlers;return e.forEach(function(e){var t=!1,n=new RegExp(S(m(o)),"g");if(n.test(e)&&e.length===n.lastIndex&&(t=!0),!t){var r=new RegExp(S(m(e)),"g");r.test(o)&&o.length===r.lastIndex&&(t=!0)}t&&u[e].forEach(function(e){e.callback(i,s),a=!0})}),a}},{key:"notify",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(0===t.length)throw new Error("OSC EventHandler can not be called without any argument");if(t[0]instanceof Z)return this.dispatch(t[0],t[1]);if(t[0]instanceof z||t[0]instanceof W)return this.dispatch(new Z(t[0]),t[1]);if(!l(t[0])){var r=new Z;return r.unpack(function(e){return e.buffer?new DataView(e.buffer):e instanceof ArrayBuffer?new DataView(e):new DataView(new Uint8Array(e))}(t[0])),this.dispatch(r,t[1])}var o=t[0],i=null;1<t.length&&(i=t[1]);var s=null;if(2<t.length)if(f(t[2]))s=t[2];else{if(!(t[2]instanceof Date))throw new Error("OSC EventHandler timestamp has to be a number or Date");s=t[2].getTime()}var a=null;if(3<=t.length&&(a=t[3]),s){var u=Date.now();if(s<u&&!this.options.discardLateMessages)return this.call(o,i,a);var c=this;return setTimeout(function(){c.call(o,i,a)},s-u),!0}return this.call(o,i,a)}},{key:"on",value:function(e,t){if(!l(e)&&!d(e))throw new Error("OSC EventHandler accepts only strings or arrays for address patterns");if(!v(t))throw new Error("OSC EventHandler callback has to be a function");this.uuid+=1;var n={id:this.uuid,callback:t};if(l(e)&&e in this.eventHandlers)return this.eventHandlers[e].push(n),this.uuid;var r=m(e);return r in this.addressHandlers||(this.addressHandlers[r]=[]),this.addressHandlers[r].push(n),this.uuid}},{key:"off",value:function(e,n){if(!l(e)&&!d(e))throw new Error("OSC EventHandler accepts only strings or arrays for address patterns");if(!f(n))throw new Error("OSC EventHandler subscription id has to be a number");var r,o;return o=l(e)&&e in this.eventHandlers?(r=e,this.eventHandlers):(r=m(e),this.addressHandlers),r in o&&o[r].some(function(e,t){return e.id===n&&(o[r].splice(t,1),!0)})}}]),X);function X(e){o(this,X),this.options=c({},K,{},e),this.addressHandlers=[],this.eventHandlers={open:[],error:[],close:[]},this.uuid=0}var Y="undefined"!=typeof __dirname?require("dgram"):void 0,$=-1,ee=0,te=1,ne=2,re=3,oe={type:"udp4",open:{host:"localhost",port:41234,exclusive:!1},send:{host:"localhost",port:41235}};var ie=(e(se,[{key:"registerNotify",value:function(e){this.notify=e}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(e){var t=this,n=0<arguments.length&&void 0!==e?e:{},r=c({},this.options.open,{},n),o=r.port,i=r.exclusive;this.socketStatus=ee,this.socket.bind({address:r.host,port:o,exclusive:i},function(){t.socketStatus=te,t.notify("open")})}},{key:"close",value:function(){var e=this;this.socketStatus=ne,this.socket.close(function(){e.socketStatus=re,e.notify("close")})}},{key:"send",value:function(e,t){var n=1<arguments.length&&void 0!==t?t:{},r=c({},this.options.send,{},n),o=r.port,i=r.host;this.socket.send(Buffer.from(e),0,e.byteLength,o,i)}}]),se);function se(){var n=this,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(o(this,se),!Y)throw new Error("DatagramPlugin can not be used in browser context");this.options=function(e,t){return c({},oe,{},e,{},t,{open:c({},oe.open,{},e.open,{},t.open),send:c({},oe.send,{},e.send,{},t.send)})}({},e),this.socket=Y.createSocket(this.options.type),this.socketStatus=$,this.socket.on("message",function(e,t){n.notify(e,t)}),this.socket.on("error",function(e){n.notify("error",e)}),this.notify=function(){}}var ae="undefined"!=typeof __dirname?require("dgram"):void 0,ue="undefined"!=typeof __dirname?require("isomorphic-ws").Server:void 0,ce=-1,fe=0,he=1,le=2,de=3,pe={udpServer:{host:"localhost",port:41234,exclusive:!1},udpClient:{host:"localhost",port:41235},wsServer:{host:"localhost",port:8080},receiver:"ws"};function ve(e,t){return c({},pe,{},e,{},t,{udpServer:c({},pe.udpServer,{},e.udpServer,{},t.udpServer),udpClient:c({},pe.udpClient,{},e.udpClient,{},t.udpClient),wsServer:c({},pe.wsServer,{},e.wsServer,{},t.wsServer)})}var we=(e(ye,[{key:"registerNotify",value:function(e){this.notify=e}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(e){var n=this,t=0<arguments.length&&void 0!==e?e:{},r=ve(this.options,t);this.socketStatus=fe,this.socket.bind({address:r.udpServer.host,port:r.udpServer.port,exclusive:r.udpServer.exclusive},function(){n.websocket=new ue({host:r.wsServer.host,port:r.wsServer.port}),n.websocket.binaryType="arraybuffer",n.websocket.on("listening",function(){n.socketStatus=he,n.notify("open")}),n.websocket.on("error",function(e){n.notify("error",e)}),n.websocket.on("connection",function(e){e.on("message",function(e,t){n.send(e,{receiver:"udp"}),n.notify(new Uint8Array(e),t)})})})}},{key:"close",value:function(){var e=this;this.socketStatus=le,this.socket.close(function(){e.websocket.close(function(){e.socketStatus=de,e.notify("close")})})}},{key:"send",value:function(t,e){var n=1<arguments.length&&void 0!==e?e:{},r=ve(this.options,n),o=r.receiver;if("udp"===o){var i=t instanceof Buffer?t:Buffer.from(t);this.socket.send(i,0,i.byteLength,r.udpClient.port,r.udpClient.host)}else{if("ws"!==o)throw new Error("BridgePlugin can not send message to unknown receiver");this.websocket.clients.forEach(function(e){e.send(t,{binary:!0})})}}}]),ye);function ye(){var t=this,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(o(this,ye),!ae||!ue)throw new Error("BridgePlugin can not be used in browser context");this.options=ve({},e),this.websocket=null,this.socket=ae.createSocket("udp4"),this.socketStatus=ce,this.socket.on("message",function(e){t.send(e,{receiver:"ws"}),t.notify(e.buffer)}),this.socket.on("error",function(e){t.notify("error",e)}),this.notify=function(){}}var ge="undefined"==typeof global?window:global,ke="undefined"==typeof __dirname?ge.WebSocket:require("isomorphic-ws"),be=-1,me=0,Se=1,Oe=2,Ee=3,Ce={host:"localhost",port:8080,secure:!1},Pe=(e(Ae,[{key:"registerNotify",value:function(e){this.notify=e}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(e){var t=this,n=0<arguments.length&&void 0!==e?e:{},r=c({},this.options,{},n),o=r.port,i=r.host,s=r.secure;this.socket&&this.close();var a=s?"wss":"ws",u={address:i,family:a,port:o,size:0};this.socket=new ke("".concat(a,"://").concat(i,":").concat(o)),this.socket.binaryType="arraybuffer",this.socketStatus=me,this.socket.onopen=function(){t.socketStatus=Se,t.notify("open")},this.socket.onclose=function(){t.socketStatus=Ee,t.notify("close")},this.socket.onerror=function(e){t.notify("error",e)},this.socket.onmessage=function(e){t.notify(e.data,u)}}},{key:"close",value:function(){this.socketStatus=Oe,this.socket.close()}},{key:"send",value:function(e){this.socket.send(e)}}]),Ae);function Ae(e){if(o(this,Ae),!ke)throw new Error("WebsocketClientPlugin can't find a WebSocket class");this.options=c({},Ce,{},e),this.socket=null,this.socketStatus=be,this.notify=function(){}}var De="undefined"!=typeof __dirname?require("isomorphic-ws").Server:void 0,je=-1,xe=0,He=1,Ie=2,Le=3,_e={host:"localhost",port:8080},Be=(e(Ve,[{key:"registerNotify",value:function(e){this.notify=e}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(e){var t=this,n=0<arguments.length&&void 0!==e?e:{},r=c({},this.options,{},n),o=r.port,i=r.host,s={address:i,family:"wsserver",port:o,size:0};this.socket&&this.close(),this.socket=new De({host:i,port:o}),this.socket.binaryType="arraybuffer",this.socketStatus=xe,this.socket.on("listening",function(){t.socketStatus=He,t.notify("open")}),this.socket.on("error",function(e){t.notify("error",e)}),this.socket.on("connection",function(e){e.on("message",function(e){t.notify(new Uint8Array(e),s)})})}},{key:"close",value:function(){var e=this;this.socketStatus=Ie,this.socket.close(function(){e.socketStatus=Le,e.notify("close")})}},{key:"send",value:function(t){this.socket.clients.forEach(function(e){e.send(t,{binary:!0})})}}]),Ve);function Ve(e){if(o(this,Ve),!De)throw new Error("WebsocketServerPlugin can not be used in browser context");this.options=c({},_e,{},e),this.socket=null,this.socketStatus=je,this.notify=function(){}}var Me={discardLateMessages:!1,plugin:new Pe},Te=(e(Ne,[{key:"on",value:function(e,t){if(!l(e)||!v(t))throw new Error("OSC on() needs event- or address string and callback function");return this.eventHandler.on(e,t)}},{key:"off",value:function(e,t){if(!l(e)||!f(t))throw new Error("OSC off() needs string and number (subscriptionId) to unsubscribe");return this.eventHandler.off(e,t)}},{key:"open",value:function(e){if(e&&!p(e))throw new Error("OSC open() options argument needs to be an object");if(!this.options.plugin||!v(this.options.plugin.open))throw new Error("OSC Plugin API #open is not implemented!");return this.options.plugin.open(e)}},{key:"status",value:function(){if(!this.options.plugin||!v(this.options.plugin.status))throw new Error("OSC Plugin API #status is not implemented!");return this.options.plugin.status()}},{key:"close",value:function(){if(!this.options.plugin||!v(this.options.plugin.close))throw new Error("OSC Plugin API #close is not implemented!");return this.options.plugin.close()}},{key:"send",value:function(e,t){if(!this.options.plugin||!v(this.options.plugin.send))throw new Error("OSC Plugin API #send is not implemented!");if(!(e instanceof W||e instanceof z||e instanceof Z))throw new Error("OSC send() needs Messages, Bundles or Packets");if(t&&!p(t))throw new Error("OSC send() options argument has to be an object");return this.options.plugin.send(e.pack(),t)}}]),Ne);function Ne(e){if(o(this,Ne),e&&!p(e))throw new Error("OSC options argument has to be an object.");this.options=c({},Me,{},e),this.eventHandler=new Q({discardLateMessages:this.options.discardLateMessages});var t=this.eventHandler;this.options.plugin&&this.options.plugin.registerNotify&&this.options.plugin.registerNotify(function(){return t.notify.apply(t,arguments)})}return Te.STATUS={IS_NOT_INITIALIZED:-1,IS_CONNECTING:0,IS_OPEN:1,IS_CLOSING:2,IS_CLOSED:3},Te.Packet=Z,Te.Bundle=z,Te.Message=W,Te.DatagramPlugin=ie,Te.WebsocketClientPlugin=Pe,Te.WebsocketServerPlugin=Be,Te.BridgePlugin=we,Te});
//# sourceMappingURL=osc.min.js.map
{
"name": "osc-js",
"version": "2.0.4",
"version": "2.1.0",
"description": "OSC library for Node.js and the browser, with customizable Plugin API for WebSocket, UDP or bridge networking",

@@ -9,4 +9,4 @@ "main": "lib/osc.js",

"docs": "esdoc",
"lint": "eslint rollup.config.js src/** test/**; exit 0",
"test": "mocha test/** --require @babel/register; exit 0",
"lint": "eslint rollup.config.js src/** test/**",
"test": "mocha test/** --require @babel/register --exit",
"test:watch": "mocha test/** --require @babel/register --reporter min --watch test/** src/**"

@@ -39,5 +39,5 @@ },

"devDependencies": {
"@babel/core": "7.6.0",
"@babel/preset-env": "7.6.0",
"@babel/register": "7.6.0",
"@babel/core": "7.7.4",
"@babel/preset-env": "7.7.4",
"@babel/register": "7.7.4",
"babel-eslint": "10.0.3",

@@ -48,7 +48,7 @@ "chai": "4.2.0",

"esdoc-standard-plugin": "1.0.0",
"eslint": "6.4.0",
"eslint": "6.7.1",
"eslint-config-airbnb-base": "14.0.0",
"eslint-plugin-import": "2.18.2",
"mocha": "6.2.0",
"rollup": "1.21.4",
"mocha": "6.2.2",
"rollup": "1.27.5",
"rollup-plugin-babel": "4.3.3",

@@ -60,4 +60,4 @@ "rollup-plugin-cleanup": "3.1.1",

"isomorphic-ws": "4.0.1",
"ws": "7.1.2"
"ws": "7.2.0"
}
}

@@ -28,2 +28,3 @@ osc-js

- No dependencies (except of `ws` in Node.js or similar environments)
- Receive sender information from incoming messages
- Built-in *UDP*, *WebSocket* networking support as plugins

@@ -45,4 +46,5 @@ - Special bridge plugin for easy communication between *UDP*- and *WebSocket* clients

osc.on('/param/density', message => {
osc.on('/param/density', (message, rinfo) => {
console.log(message.args)
console.log(rinfo)
})

@@ -189,4 +191,9 @@

### Contributors
* [@adzialocha](https://github.com/adzialocha)
* [@eliot-akira](https://github.com/eliot-akira)
### ESDocs
`npm run docs` for generating a `docs` folder with HTML files documenting the library. Read them online here: [https://doc.esdoc.org/github.com/adzialocha/osc-js/](https://doc.esdoc.org/github.com/adzialocha/osc-js/)

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc