1234567891011 |
- import { Channel } from './chunk-NH5GSF3H.mjs';
- import { global } from '@storybook/global';
- import * as EVENTS from '@storybook/core-events';
- import { logger, pretty } from '@storybook/client-logger';
- import { stringify, isJSON, parse } from 'telejson';
- import qs from 'qs';
- import invariant from 'tiny-invariant';
- var getEventSourceUrl=event=>{let frames=Array.from(document.querySelectorAll("iframe[data-is-storybook]")),[frame,...remainder]=frames.filter(element=>{try{return element.contentWindow===event.source}catch{}let src2=element.getAttribute("src"),origin;try{if(!src2)return !1;({origin}=new URL(src2,document.location.toString()));}catch{return !1}return origin===event.origin}),src=frame?.getAttribute("src");if(src&&remainder.length===0){let{protocol,host,pathname}=new URL(src,document.location.toString());return `${protocol}//${host}${pathname}`}return remainder.length>0&&logger.error("found multiple candidates for event source"),null};var {document:document2,location}=global,KEY="storybook-channel",defaultEventOptions={allowFunction:!0,maxDepth:25},PostMessageTransport=class{constructor(config){this.config=config;this.connected=!1;if(this.buffer=[],typeof global?.addEventListener=="function"&&global.addEventListener("message",this.handleEvent.bind(this),!1),config.page!=="manager"&&config.page!=="preview")throw new Error(`postmsg-channel: "config.page" cannot be "${config.page}"`)}setHandler(handler){this.handler=(...args)=>{handler.apply(this,args),!this.connected&&this.getLocalFrame().length&&(this.flush(),this.connected=!0);};}send(event,options){let{target,allowRegExp,allowFunction,allowSymbol,allowDate,allowError,allowUndefined,allowClass,maxDepth,space,lazyEval}=options||{},eventOptions=Object.fromEntries(Object.entries({allowRegExp,allowFunction,allowSymbol,allowDate,allowError,allowUndefined,allowClass,maxDepth,space,lazyEval}).filter(([k,v])=>typeof v<"u")),stringifyOptions={...defaultEventOptions,...global.CHANNEL_OPTIONS||{},...eventOptions},frames=this.getFrames(target),query=qs.parse(location?.search||"",{ignoreQueryPrefix:!0}),data=stringify({key:KEY,event,refId:query.refId},stringifyOptions);return frames.length?(this.buffer.length&&this.flush(),frames.forEach(f=>{try{f.postMessage(data,"*");}catch{logger.error("sending over postmessage fail");}}),Promise.resolve(null)):new Promise((resolve,reject)=>{this.buffer.push({event,resolve,reject});})}flush(){let{buffer}=this;this.buffer=[],buffer.forEach(item=>{this.send(item.event).then(item.resolve).catch(item.reject);});}getFrames(target){if(this.config.page==="manager"){let list=Array.from(document2.querySelectorAll("iframe[data-is-storybook][data-is-loaded]")).flatMap(e=>{try{return e.contentWindow&&e.dataset.isStorybook!==void 0&&e.id===target?[e.contentWindow]:[]}catch{return []}});return list?.length?list:this.getCurrentFrames()}return global&&global.parent&&global.parent!==global.self?[global.parent]:[]}getCurrentFrames(){return this.config.page==="manager"?Array.from(document2.querySelectorAll('[data-is-storybook="true"]')).flatMap(e=>e.contentWindow?[e.contentWindow]:[]):global&&global.parent?[global.parent]:[]}getLocalFrame(){return this.config.page==="manager"?Array.from(document2.querySelectorAll("#storybook-preview-iframe")).flatMap(e=>e.contentWindow?[e.contentWindow]:[]):global&&global.parent?[global.parent]:[]}handleEvent(rawEvent){try{let{data}=rawEvent,{key,event,refId}=typeof data=="string"&&isJSON(data)?parse(data,global.CHANNEL_OPTIONS||{}):data;if(key===KEY){let pageString=this.config.page==="manager"?'<span style="color: #37D5D3; background: black"> manager </span>':'<span style="color: #1EA7FD; background: black"> preview </span>',eventString=Object.values(EVENTS).includes(event.type)?`<span style="color: #FF4785">${event.type}</span>`:`<span style="color: #FFAE00">${event.type}</span>`;if(refId&&(event.refId=refId),event.source=this.config.page==="preview"?rawEvent.origin:getEventSourceUrl(rawEvent),!event.source){pretty.error(`${pageString} received ${eventString} but was unable to determine the source of the event`);return}let message=`${pageString} received ${eventString} (${data.length})`;pretty.debug(location.origin!==event.source?message:`${message} <span style="color: gray">(on ${location.origin} from ${event.source})</span>`,...event.args),invariant(this.handler,"ChannelHandler should be set"),this.handler(event);}}catch(error){logger.error(error);}}},PostmsgTransport=PostMessageTransport;function createChannel({page}){let transport=new PostmsgTransport({page});return new Channel({transport})}var postmessage_default=createChannel;
- export { KEY, PostMessageTransport, PostmsgTransport, createChannel, postmessage_default };
|