{"version":3,"sources":["../src/preset.ts"],"names":["experimental_serverChannel","channel","configType","presets","loglevel","options","port","host","wss","WebSocketServer","ws","data","_a","_b","json","error","EVENTS","curEvent","toSend"],"mappings":"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","file":"preset.mjs","sourcesContent":["import { Channel } from \"storybook/internal/channels\";\nimport { Options } from \"storybook/internal/types\";\nimport { WebSocketServer } from \"ws\";\nimport EVENTS from \"storybook/internal/core-events\";\n\nexport type ReactNativeServerOptions = {\n  host?: string;\n  port?: number;\n};\n\nexport async function experimental_serverChannel(\n  channel: Channel,\n  { configType, presets, loglevel }: Options,\n) {\n  if (configType === \"DEVELOPMENT\") {\n    const options = await presets.apply<ReactNativeServerOptions>(\n      \"reactNativeServerOptions\",\n    );\n\n    if (options) {\n      const port = options.port ?? 7007;\n\n      const host = options.host ?? \"localhost\";\n\n      const wss = new WebSocketServer({ port, host });\n\n      wss.on(\"connection\", function connection(ws) {\n        console.log(\"websocket connection established\");\n\n        ws.on(\"error\", console.error);\n\n        ws.on(\"message\", function message(data) {\n          try {\n            const json = JSON.parse(data.toString());\n\n            if (loglevel === \"debug\") {\n              console.log(\"Websocket message received from client:\");\n              console.log(\"type: \", json.type);\n              console.log(\"args: \", json.args[0]);\n            }\n\n            if (json.args && Array.isArray(json.args) && json.args.length > 0) {\n              channel.emit?.(json.type, json.args[0]);\n            } else {\n              channel.emit?.(json.type);\n            }\n          } catch (error) {\n            console.error(error);\n          }\n        });\n      });\n\n      setInterval(function ping() {\n        wss.clients.forEach(function each(ws) {\n          ws.send(JSON.stringify({ type: \"ping\", args: [] }));\n        });\n      }, 10000);\n\n      [\n        ...Object.values(EVENTS),\n        \"storybook-addon-background:set\",\n        \"storybook-addon-background:unset\",\n        \"storybook-addon-background:update\",\n        \"storybook/actions/action-event\",\n        \"storybook/actions/action-clear\",\n      ].forEach((curEvent) => {\n        channel.on(curEvent, async (data) => {\n          try {\n            if (\n              curEvent === \"storybook/actions/action-event\" &&\n              data?.data?.args?.target\n            ) {\n              // fixes self referencing object error for json stringify\n              data.data.args.nativeEvent = null;\n              data.data.args.target = null;\n              data.data.args.currentTarget = null;\n              data.data.args.view = null;\n            }\n\n            const toSend = JSON.stringify({ type: curEvent, args: [data] });\n\n            if (loglevel === \"debug\") {\n              console.log(\"message received on the storybook channel\");\n              console.log(\"type: \", curEvent);\n              console.log(\"data: \", data);\n            }\n\n            wss.clients.forEach((ws) => ws.send(toSend));\n          } catch (error) {\n            console.error({ event: curEvent, error });\n          }\n        });\n      });\n    }\n  }\n\n  return channel;\n}\n"]}