@liascript/exporter
Version:
A generic exporter for LiaScript
1 lines β’ 19.9 kB
JavaScript
!function(){function e(e,n,t,r){Object.defineProperty(e,n,{get:t,set:r,enumerable:!0,configurable:!0})}var n=("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{}).parcelRequire55a5;n.register("2OEDy",(function(t,r){e(t.exports,"Sync",(function(){return y}));var o=n("f1evb"),i=n("hnmIs"),a=n("9Klpk"),s=n("3bWnf"),c=n("eT7f3"),l=n("9WzNc"),u=n("div3d"),f=n("kb0qF"),d=n("bgoEC"),g=n("bWNdT"),p=n("32Euv"),h=n("auvHb"),v=n("9sT0C"),m=n("733OA"),y=function(e){"use strict";(0,f.default)(t,e);var n=(0,g.default)(t);function t(){var e;return(0,a.default)(this,t),e=n.apply(this,arguments),(0,c.default)((0,o.default)(e),"syncFallbackTimer",null),e}return(0,s.default)(t,[{key:"destroy",value:function(){var e;null!==this.syncFallbackTimer&&(clearTimeout(this.syncFallbackTimer),this.syncFallbackTimer=null),(0,l.default)((0,u.default)(t.prototype),"destroy",this).call(this),null===(e=this.provider)||void 0===e||e.disconnect()}},{key:"connect",value:function(e){var n=this,r=this;return(0,i.default)((function(){var o,i;return(0,p.__generator)(this,(function(a){if((0,l.default)((0,u.default)(t.prototype),"connect",n).call(r,e),r.signaling=(null===(o=e.config)||void 0===o?void 0:o.signaling)?e.config.signaling.split(",").map((function(e){return e.trim()})).filter(Boolean):void 0,!r.signaling||0===r.signaling.length)return[2,r.sendDisconnectError("You have to provide at least one signaling server URL (e.g. wss://your-signaling-server.example.com). See https://github.com/yjs/y-webrtc for setup instructions.")];if(null===(i=e.config)||void 0===i?void 0:i.iceServers)try{r.iceServers=JSON.parse(e.config.iceServers)}catch(n){console.warn("SimplePeer: invalid iceServers JSON, ignoring:",e.config.iceServers)}return window.SimplePeer?r.init(!0):r.load(["//unpkg.com/simple-peer@9.11.1/simplepeer.min.js"],r),[2]}))}))()}},{key:"init",value:function(e,n){var t=this,r=this.uniqueID();if(e&&window.SimplePeer&&r)(function(e){return w.apply(this,arguments)})(r).then((function(e){var n,r=null!==(n=t.iceServers)&&void 0!==n?n:JSON.parse("null");t.transport=new(0,v.SimplePeerTransport)((0,d.default)({peer:window.SimplePeer},t.signaling?{signaling:t.signaling}:{},r?{iceServers:r}:{},t.password?{password:t.password}:{})),t.provider=new(0,m.GenericProvider)(t.db.doc,t.transport),t.db.setAwareness(t.provider.awareness);var o=!1,i=function(){o||(o=!0,null!==t.syncFallbackTimer&&(clearTimeout(t.syncFallbackTimer),t.syncFallbackTimer=null),t.sendConnect())};t.provider.on("synced",(function(e){console.log("SimplePeer: document synchronized",e.synced),i()})),t.provider.on("status",(function(e){var n=e.state;console.log("SimplePeer status: ".concat(n)),"connected"===n?t.syncFallbackTimer=setTimeout((function(){console.log("SimplePeer: sync fallback, proceeding as first peer"),i()}),2e3):"disconnected"===n&&console.warn("SimplePeer: disconnected")})),t.provider.pubsub.subscribe("*",(function(e,n){var r,o;null===(o=(r=t).onReceive)||void 0===o||o.call(r,n,e)})),t.provider.connect((0,d.default)({room:e},t.password?{password:t.password}:{}))}));else{var o="SimplePeer unknown error";n?o="Could not load resource: "+n:window.SimplePeer||(o="Could not load SimplePeer library"),this.sendDisconnectError(o)}}},{key:"pubsubSend",value:function(e,n){var t;this.provider&&(this.provider.pubsub.publish(e,n),this.replyOnReceive&&(null===(t=this.onReceive)||void 0===t||t.call(this,e,n)))}}]),t}(h.Sync);function w(){return(w=(0,i.default)((function(e){var n,t;return(0,p.__generator)(this,(function(r){switch(r.label){case 0:return n=(new TextEncoder).encode(e),[4,crypto.subtle.digest("SHA-256",n)];case 1:return t=r.sent(),[2,Array.from(new Uint8Array(t)).map((function(e){return e.toString(16).padStart(2,"0")})).join("")]}}))}))).apply(this,arguments)}})),n.register("9WzNc",(function(t,r){e(t.exports,"default",(function(){return a}));var o=n("jwduU");function i(e,n,t){return i="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,n,t){var r=(0,o.default)(e,n);if(r){var i=Object.getOwnPropertyDescriptor(r,n);return i.get?i.get.call(t||e):i.value}},i(e,n,t)}function a(e,n,t){return i(e,n,t)}})),n.register("jwduU",(function(t,r){e(t.exports,"default",(function(){return i}));var o=n("div3d");function i(e,n){for(;!Object.prototype.hasOwnProperty.call(e,n)&&null!==(e=(0,o.default)(e)););return e}})),n.register("9sT0C",(function(t,r){e(t.exports,"SimplePeerTransport",(function(){return g}));var o=n("hnmIs"),i=n("9Klpk"),a=n("3bWnf"),s=n("bgoEC"),c=n("7j4mF"),l=n("6Wo7Q"),u=n("rJmE6"),f=n("32Euv"),d=0,g=function(){"use strict";function e(n){var t,r;if((0,i.default)(this,e),this._connected=!1,this._room="",this.peers=new Map,this.signalingConns=[],this.announcedPeers=new Set,!n.peer)throw new Error('SimplePeerTransport requires the "peer" option. Please provide the simple-peer constructor: import Peer from "simple-peer"; new SimplePeerTransport({ peer: Peer, ... })');var o,a,l,u,f,d=(0,s.default)({},n.peerOpts);if(n.iceServers||!(null===(t=d.config)||void 0===t?void 0:t.iceServers)){var g,p=null!==(g=n.iceServers)&&void 0!==g?g:[{urls:"stun:stun.l.google.com:19302"}];d.config=(0,c.default)((0,s.default)({},d.config),{iceServers:p})}this.options={peer:n.peer,signaling:null!==(o=n.signaling)&&void 0!==o?o:["wss://signaling.yjs.dev"],password:null!==(a=n.password)&&void 0!==a?a:"",maxConns:null!==(l=n.maxConns)&&void 0!==l?l:20+Math.floor(15*Math.random()),peerOpts:d,debug:null!==(u=n.debug)&&void 0!==u&&u},this.peerId=this.generatePeerId(),this.log("Initialized β peerId: ".concat(this.peerId,", maxConns: ").concat(this.options.maxConns),"\n signaling: [".concat(this.options.signaling.join(", "),"]"),"\n iceServers: [".concat((null!==(f=null===(r=d.config)||void 0===r?void 0:r.iceServers)&&void 0!==f?f:[]).map((function(e){return Array.isArray(e.urls)?e.urls[0]:e.urls})).join(", "),"]"))}return(0,a.default)(e,[{key:"connect",value:function(e){var n=this;return(0,o.default)((function(){var t,r;return(0,f.__generator)(this,(function(o){switch(o.label){case 0:if(n._connected)throw new Error("Already connected");return n._room=e.room,n.log('π Connecting to room "'.concat(e.room,'" as ').concat(n.peerId)),[4,Promise.allSettled(n.options.signaling.map((function(e){return n.connectSignaling(e)})))];case 1:return t=o.sent(),r=t.filter((function(e){return"fulfilled"===e.status})).length,t.filter((function(e){return"rejected"===e.status})).length,r>0?n.log("π‘ Signaling: ".concat(r,"/").concat(n.options.signaling.length," server(s) connected")):(console.warn("[SimplePeerTransport] β οΈ No signaling servers reachable β WebRTC peer discovery disabled. Cross-tab sync via BroadcastChannel will still work."),t.forEach((function(e,t){var r,o;"rejected"===e.status&&console.warn("[SimplePeerTransport] β ".concat(n.options.signaling[t],":"),null!==(o=null===(r=e.reason)||void 0===r?void 0:r.message)&&void 0!==o?o:e.reason)}))),n._connected=!0,n.log('β
Connected to room "'.concat(n._room,'" β ').concat(n.signalingConns.length,"/").concat(n.options.signaling.length," signaling server(s)")),n.announceInterval=setInterval((function(){if(n.peers.size<n.options.maxConns&&n.signalingConns.length>0){n.log("Re-announcing presence...");var e=!0,t=!1,r=void 0;try{for(var o,i=n.signalingConns[Symbol.iterator]();!(e=(o=i.next()).done);e=!0){var a=o.value;n.sendSignaling(a,{type:"publish",topic:n._room,from:n.peerId})}}catch(e){t=!0,r=e}finally{try{e||null==i.return||i.return()}finally{if(t)throw r}}}}),5e3),[2]}}))}))()}},{key:"disconnect",value:function(){if(this._connected){this.log("π Disconnecting β ".concat(this.peers.size," peer(s), ").concat(this.signalingConns.length," signaling server(s)")),this.announceInterval&&(clearInterval(this.announceInterval),this.announceInterval=void 0);var e=!0,n=!1,t=void 0;try{for(var r,o=this.peers.values()[Symbol.iterator]();!(e=(r=o.next()).done);e=!0){r.value.peer.destroy()}}catch(e){n=!0,t=e}finally{try{e||null==o.return||o.return()}finally{if(n)throw t}}this.peers.clear();var i=!0,a=!1,s=void 0;try{for(var c,l=this.signalingConns[Symbol.iterator]();!(i=(c=l.next()).done);i=!0){c.value.close()}}catch(e){a=!0,s=e}finally{try{i||null==l.return||l.return()}finally{if(a)throw s}}this.signalingConns=[],this._connected=!1,this.announcedPeers.clear()}}},{key:"send",value:function(e){if(this._connected){var n=this.options.password?this.encrypt(e,this.options.password):e,t=0,r=!0,o=!1,i=void 0;try{for(var a,s=this.peers.values()[Symbol.iterator]();!(r=(a=s.next()).done);r=!0){var c=a.value;if(c.connected)try{this.sendToPeer(c,n),t++}catch(e){this.log("β Send failed to ".concat(c.peerId,":"),e.message)}}}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}if(0===t)this.log("β οΈ Send: 0 peers connected β ".concat(e.length,"B dropped"));else if(t<this.peers.size){var l=this.peers.size-t;this.log("π€ Sent ".concat(e.length,"B to ").concat(t,"/").concat(this.peers.size," peer(s) β ").concat(l," not yet connected"))}}else this.log("Not connected, cannot send")}},{key:"sendToPeer",value:function(e,n){if(n.length<=65535){var t=new Uint8Array(n.length+1);return t[0]=0,t.set(n,1),void e.peer.send(t)}var r=d++,o=Math.ceil(n.length/65523);this.log("π¦ Chunking ".concat(n.length,"B β ").concat(o," chunks (msgId=").concat(r,")"));for(var i=[],a=0;a<o;a++){var s=65523*a,c=Math.min(s+65523,n.length),l=n.slice(s,c),u=new Uint8Array(13+l.length);u[0]=1,new DataView(u.buffer).setUint32(1,r,!0),new DataView(u.buffer).setUint32(5,a,!0),new DataView(u.buffer).setUint32(9,o,!0),u.set(l,13),i.push(u)}this.sendChunksWithFlowControl(e,i)}},{key:"sendChunksWithFlowControl",value:function(e,n){var t=this,r=0,o=e.peer,i=function(){for(var a=function(){var a=o._channel;if(a&&a.bufferedAmount>16384)return t.log("βΈοΈ Backpressure on ".concat(e.peerId,": buffered ").concat(a.bufferedAmount,"B, waiting...")),a.bufferedAmountLowThreshold=8192,a.onbufferedamountlow=function(){a.onbufferedamountlow=null,t.log("βΆοΈ Buffer drained on ".concat(e.peerId,", resuming chunks")),i()},{v:void 0};try{o.send(n[r]),r++}catch(e){return t.log("Error sending chunk:",r,e),{v:void 0}}};r<n.length;){var s=a();if("object"===(0,u.default)(s))return s.v}};i()}},{key:"onMessage",value:function(e){var n=this;return this._callback=e,function(){n._callback=void 0}}},{key:"onPeerConnect",value:function(e){var n=this;return this._peerConnectCallback=e,function(){n._peerConnectCallback=void 0}}},{key:"isConnected",get:function(){return this._connected}},{key:"connectedPeers",get:function(){return Array.from(this.peers.values()).filter((function(e){return e.connected})).length}},{key:"connectSignaling",value:function(e){var n=this;return(0,o.default)((function(){return(0,f.__generator)(this,(function(t){return[2,new Promise((function(t,r){var o=new WebSocket(e),i=!1;o.onopen=function(){n.log("π’ Signaling connected: ".concat(e)),n.sendSignaling(o,{type:"subscribe",topics:[n._room]}),n.peers.size<n.options.maxConns&&(n.sendSignaling(o,{type:"publish",topic:n._room,from:n.peerId}),n.sendSignaling(o,{type:"announce",from:n.peerId,topic:n._room})),n.signalingConns.push(o),i||(i=!0,t())},o.onmessage=function(e){try{var t,r=JSON.parse(e.data);(r.signal||"announce"===r.type)&&n.log("π© Signaling βΉ".concat(r.type,"βΊ"),r.from?"from=".concat(r.from.slice(0,8)):"",r.to?"to=".concat(r.to.slice(0,8)):"",r.signal?"signal=".concat(null!==(t=r.signal.type)&&void 0!==t?t:"candidate"):""),n.handleSignalingMessage(r)}catch(t){n.log("β Failed to parse signaling message: ".concat(t.message," raw=").concat(e.data))}},o.onerror=function(t){n.log("β Signaling error: ".concat(e),t),i||(i=!0,r(t))},o.onclose=function(){n.log("π΄ Signaling disconnected: ".concat(e));var t=n.signalingConns.indexOf(o);t>-1&&n.signalingConns.splice(t,1)},setTimeout((function(){i||(i=!0,n.log("β±οΈ Signaling connection timeout: ".concat(e)),r(new Error("Signaling connection timeout")))}),1e4)}))]}))}))()}},{key:"handleSignalingMessage",value:function(e){if(!e.from||e.from!==this.peerId)switch(e.type){case"publish":if(e.from&&!this.peers.has(e.from)&&this.peers.size<this.options.maxConns&&!this.announcedPeers.has(e.from)){var n=this.peerId>e.from;if(this.log("π‘ Peer discovered via publish: ".concat(e.from," β role: ").concat(n?"initiator":"non-initiator"),"(peers: ".concat(this.peers.size+1,"/").concat(this.options.maxConns,")")),this.announcedPeers.add(e.from),this.createPeerConnection(e.from,n),!n){this.log("π’ Re-announcing so initiator can find us...");var t=!0,r=!1,o=void 0;try{for(var i,a=this.signalingConns[Symbol.iterator]();!(t=(i=a.next()).done);t=!0){var s=i.value;this.sendSignaling(s,{type:"publish",topic:this._room,from:this.peerId})}}catch(e){r=!0,o=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw o}}}}e.signal&&e.from&&(e.to&&e.to!==this.peerId||this.handlePeerSignal(e.from,e.signal));break;case"announce":if(!e.from)return void this.log("Announce message missing from field");if(!this.peers.has(e.from)&&this.peers.size<this.options.maxConns&&!this.announcedPeers.has(e.from)){var c=this.peerId>e.from;this.log("π‘ Peer announced: ".concat(e.from," β role: ").concat(c?"initiator":"non-initiator"),"(peers: ".concat(this.peers.size+1,"/").concat(this.options.maxConns,")")),this.announcedPeers.add(e.from),this.createPeerConnection(e.from,c)}else this.peers.size>=this.options.maxConns&&this.log("β οΈ Peer limit reached (".concat(this.options.maxConns,"), ignoring announce from ").concat(e.from));break;case"signal":if(!e.from)return void this.log("Signal message missing from field");(e.to===this.peerId&&e.signal||!e.to&&e.signal)&&this.handlePeerSignal(e.from,e.signal);break;default:this.log("β Unknown signaling message type: ".concat(e.type))}}},{key:"sendSignaling",value:function(e,n){e.readyState===WebSocket.OPEN&&e.send(JSON.stringify(n))}},{key:"broadcastSignaling",value:function(e){var n=!0,t=!1,r=void 0;try{for(var o,i=this.signalingConns[Symbol.iterator]();!(n=(o=i.next()).done);n=!0){var a=o.value;this.sendSignaling(a,e)}}catch(e){t=!0,r=e}finally{try{n||null==i.return||i.return()}finally{if(t)throw r}}}},{key:"createPeerConnection",value:function(e,n){var t=this;if(this.peers.has(e))this.log("βοΈ Peer connection already exists: ".concat(e));else{this.log("π€ Creating ".concat(n?"outbound (initiator)":"inbound (non-initiator)"," connection to ").concat(e));var r=new this.options.peer((0,s.default)({initiator:n},this.options.peerOpts)),o={peer:r,connected:!1,peerId:e,chunkBuffers:new Map};this.peers.set(e,o),r.on("signal",(function(n){var r;t.log("π€ Signal to ".concat(e,": ").concat(null!==(r=n.type)&&void 0!==r?r:"candidate")),t.broadcastSignaling({type:"publish",from:t.peerId,to:e,signal:n,topic:t._room})}));var i=function(n){var r,i;if(!o.connected){o.connected=!0;var a=Array.from(t.peers.values()).filter((function(e){return e.connected})).length;t.log("β
Peer channel open (".concat(n,"): ").concat(e," β ").concat(a,"/").concat(t.peers.size," peer(s) connected")),null===(i=(r=t)._peerConnectCallback)||void 0===i||i.call(r,e)}};r.on("connect",(function(){return i("connect")})),r._pc&&(r._pc.oniceconnectionstatechange=function(){t.log("π§ ICE ".concat(e,": ").concat(r._pc.iceConnectionState))},r._pc.onconnectionstatechange=function(){t.log("π Connection ".concat(e,": ").concat(r._pc.connectionState))}),r.on("data",(function(e){if(i("data"),t._callback)try{var n=new Uint8Array(e);if(0===n.length)return;var r=n[0];if(0===r){var a=n.slice(1),s=t.options.password?t.decrypt(a,t.options.password):a;t._callback(s)}else if(1===r){var c=new DataView(n.buffer,n.byteOffset),l=c.getUint32(1,!0),u=c.getUint32(5,!0),f=c.getUint32(9,!0),d=n.slice(13),g=o.chunkBuffers.get(l);if(g||(g={chunks:new Map,totalChunks:f},o.chunkBuffers.set(l,g)),g.chunks.set(u,d),g.chunks.size===f){for(var p=0,h=0;h<f;h++)p+=g.chunks.get(h).length;for(var v=new Uint8Array(p),m=0,y=0;y<f;y++){var w=g.chunks.get(y);v.set(w,m),m+=w.length}o.chunkBuffers.delete(l);var b=t.options.password?t.decrypt(v,t.options.password):v;t._callback(b),t.log("π₯ Reassembled ".concat(p,"B from ").concat(f," chunks (msgId=").concat(l,")"))}}else{var S=t.options.password?t.decrypt(n,t.options.password):n;t._callback(S)}}catch(e){t.log("Error handling peer data:",e)}})),r.on("error",(function(n){var r;t.log("β Peer error [".concat(e,"]: ").concat(null!==(r=n.message)&&void 0!==r?r:n)),t.removePeer(e)})),r.on("close",(function(){var n=Array.from(t.peers.values()).filter((function(n){return n.connected&&n.peerId!==e})).length;t.log("π΄ Peer channel closed: ".concat(e," β ").concat(n,"/").concat(t.peers.size-1," remaining")),t.removePeer(e)}))}}},{key:"handlePeerSignal",value:function(e,n){var t,r=this.peers.get(e);r||(this.log("πΆ Signal from unknown peer ".concat(e," (").concat(null!==(t=null==n?void 0:n.type)&&void 0!==t?t:"candidate",") β creating non-initiator connection")),this.createPeerConnection(e,!1),r=this.peers.get(e));if(r)try{r.peer.signal(n)}catch(n){this.log("β Failed to apply signal from ".concat(e,": ").concat(n.message))}else this.log("β Could not create peer connection for signal from ".concat(e))}},{key:"removePeer",value:function(e){var n=this.peers.get(e);if(n){try{n.peer.destroy()}catch(e){}this.peers.delete(e),this.announcedPeers.delete(e);var t=Array.from(this.peers.values()).filter((function(e){return e.connected})).length;this.log("ποΈ Removed peer ".concat(e," β ").concat(t," connected / ").concat(this.peers.size," total"))}}},{key:"generatePeerId",value:function(){return Date.now().toString(36)+Math.random().toString(36).substr(2,9)}},{key:"encrypt",value:function(e,n){for(var t=this.hashPassword(n),r=new Uint8Array(e.length),o=0;o<e.length;o++)r[o]=e[o]^t[o%t.length];return r}},{key:"decrypt",value:function(e,n){return this.encrypt(e,n)}},{key:"hashPassword",value:function(e){return(new TextEncoder).encode(e)}},{key:"log",value:function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];var r;this.options.debug&&(r=console).log.apply(r,["[SimplePeerTransport]"].concat((0,l.default)(n)))}}]),e}()})),n.register("84cK9",(function(e,n){var t,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(t===setTimeout)return setTimeout(e,0);if((t===i||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:i}catch(e){t=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,l=[],u=!1,f=-1;function d(){u&&c&&(u=!1,c.length?l=c.concat(l):f=-1,l.length&&g())}function g(){if(!u){var e=s(d);u=!0;for(var n=l.length;n;){for(c=l,l=[];++f<n;)c&&c[f].run();f=-1,n=l.length}c=null,u=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{return r(e)}catch(n){try{return r.call(null,e)}catch(n){return r.call(this,e)}}}(e)}}function p(e,n){this.fun=e,this.array=n}function h(){}o.nextTick=function(e){var n=new Array(arguments.length-1);if(arguments.length>1)for(var t=1;t<arguments.length;t++)n[t-1]=arguments[t];l.push(new p(e,n)),1!==l.length||u||s(g)},p.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=h,o.addListener=h,o.once=h,o.off=h,o.removeListener=h,o.removeAllListeners=h,o.emit=h,o.prependListener=h,o.prependOnceListener=h,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}}))}();