index.js 4.6 KB

1
  1. "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var websocket_exports={};__export(websocket_exports,{WebsocketTransport:()=>WebsocketTransport,createChannel:()=>createChannel,default:()=>websocket_default});module.exports=__toCommonJS(websocket_exports);var import_global=require("@storybook/global"),import_client_logger=require("@storybook/client-logger"),import_telejson=require("telejson"),import_tiny_invariant=__toESM(require("tiny-invariant"));var isMulti=args=>args.transports!==void 0,generateRandomId=()=>Math.random().toString(16).slice(2),Channel=class{constructor(input={}){this.sender=generateRandomId();this.events={};this.data={};this.transports=[];this.isAsync=input.async||!1,isMulti(input)?(this.transports=input.transports||[],this.transports.forEach(t=>{t.setHandler(event=>this.handleEvent(event))})):this.transports=input.transport?[input.transport]:[],this.transports.forEach(t=>{t.setHandler(event=>this.handleEvent(event))})}get hasTransport(){return this.transports.length>0}addListener(eventName,listener){this.events[eventName]=this.events[eventName]||[],this.events[eventName].push(listener)}emit(eventName,...args){let event={type:eventName,args,from:this.sender},options={};args.length>=1&&args[0]&&args[0].options&&(options=args[0].options);let handler=()=>{this.transports.forEach(t=>{t.send(event,options)}),this.handleEvent(event)};this.isAsync?setImmediate(handler):handler()}last(eventName){return this.data[eventName]}eventNames(){return Object.keys(this.events)}listenerCount(eventName){let listeners=this.listeners(eventName);return listeners?listeners.length:0}listeners(eventName){return this.events[eventName]||void 0}once(eventName,listener){let onceListener=this.onceListener(eventName,listener);this.addListener(eventName,onceListener)}removeAllListeners(eventName){eventName?this.events[eventName]&&delete this.events[eventName]:this.events={}}removeListener(eventName,listener){let listeners=this.listeners(eventName);listeners&&(this.events[eventName]=listeners.filter(l=>l!==listener))}on(eventName,listener){this.addListener(eventName,listener)}off(eventName,listener){this.removeListener(eventName,listener)}handleEvent(event){let listeners=this.listeners(event.type);listeners&&listeners.length&&listeners.forEach(fn=>{fn.apply(event,event.args)}),this.data[event.type]=event.args}onceListener(eventName,listener){let onceListener=(...args)=>(this.removeListener(eventName,onceListener),listener(...args));return onceListener}};var{WebSocket}=import_global.global,WebsocketTransport=class{constructor({url,onError}){this.buffer=[];this.isReady=!1;this.socket=new WebSocket(url),this.socket.onopen=()=>{this.isReady=!0,this.flush()},this.socket.onmessage=({data})=>{let event=typeof data=="string"&&(0,import_telejson.isJSON)(data)?(0,import_telejson.parse)(data):data;(0,import_tiny_invariant.default)(this.handler,"WebsocketTransport handler should be set"),this.handler(event)},this.socket.onerror=e=>{onError&&onError(e)}}setHandler(handler){this.handler=handler}send(event){this.isReady?this.sendNow(event):this.sendLater(event)}sendLater(event){this.buffer.push(event)}sendNow(event){let data=(0,import_telejson.stringify)(event,{maxDepth:15,allowFunction:!0});this.socket.send(data)}flush(){let{buffer}=this;this.buffer=[],buffer.forEach(event=>this.send(event))}};function createChannel({url,async=!1,onError=err=>import_client_logger.logger.warn(err)}){let channelUrl=url;if(!channelUrl){let protocol=window.location.protocol==="http:"?"ws":"wss",{hostname,port}=window.location;channelUrl=`${protocol}://${hostname}:${port}/storybook-server-channel`}let transport=new WebsocketTransport({url:channelUrl,onError});return new Channel({transport,async})}var websocket_default=createChannel;0&&(module.exports={WebsocketTransport,createChannel});