{"version":3,"file":"index.umd.cjs","sources":["../src/main.ts"],"sourcesContent":["import { NAME, callTarget, handler } from '@kthksgy/procedure-call';\n\nimport type { ProcedureCallPacket } from '@kthksgy/procedure-call';\n\n/** オリジン */\nconst origins = new Set<string | RegExp>();\n/** 開始されている場合、`true` */\nlet started = false;\n\n/**\n * WindowClientの手続きを呼び出す。\n * @param windowClient WindowClient\n * @param name 名前\n * @param requestData リクエストデータ\n * @param options オプション\n * @returns レスポンスデータ\n */\nexport const callWindowClient = callTarget;\n\n/**\n * Message Event Handler\n * @param event Message Event\n */\nexport async function messageEventHandler(event: MessageEvent<string>) {\n  if (typeof event.data === 'string' && event.data.length > 0) {\n    /** 実行を許可されている場合、`true` */\n    let allowed = false;\n    for (const origin of origins) {\n      if (\n        (typeof origin === 'string' && event.origin === origin) ||\n        (origin instanceof RegExp && origin.test(event.origin))\n      ) {\n        allowed = true;\n      }\n    }\n\n    if (allowed) {\n      /** 送信関数 */\n      const post = function (payloadString: string, payload: ProcedureCallPacket<'req'>) {\n        /** ソース */\n        if (event.source !== null) {\n          event.source.postMessage(payloadString);\n        } else {\n          console.error(\n            `[${NAME}] \\`event.source\\`が\\`null\\`であるため、手続き\\`${payload.name}\\`のレスポンスを送信できません。`,\n          );\n        }\n      };\n\n      await handler(event.data, post);\n    }\n  }\n}\n\n/**\n * Window Clientのリスナーを開始する。\n * @param origin オリジン(デフォルト: 自分のオリジン)\n * @returns 停止する。\n */\nexport function startMessageEventHandler(origin?: string | RegExp) {\n  if (\n    typeof navigator === 'object' &&\n    navigator !== null &&\n    typeof navigator.serviceWorker === 'object' &&\n    navigator.serviceWorker !== null\n  ) {\n    if (\n      origin === undefined &&\n      typeof window === 'object' &&\n      window !== null &&\n      typeof window.location === 'object' &&\n      window.location !== null\n    ) {\n      origin ??= window.location.origin;\n    }\n\n    if (origin !== undefined) {\n      origins.add(origin);\n    }\n\n    if (!started) {\n      navigator.serviceWorker.addEventListener('message', messageEventHandler);\n      started = true;\n    }\n\n    return function () {\n      if (origin !== undefined) {\n        origins.delete(origin);\n      }\n\n      if (origins.size === 0) {\n        navigator.serviceWorker.removeEventListener('message', messageEventHandler);\n        started = false;\n      }\n    };\n  } else {\n    console.error(\n      `[${NAME}] Service Workerに対応していないため、Window Clientのソケット関数を開始できません。`,\n    );\n    return function () {};\n  }\n}\n"],"names":["origins","started","callWindowClient","callTarget","messageEventHandler","event","allowed","origin","post","payloadString","payload","NAME","handler","startMessageEventHandler"],"mappings":"+UAKA,MAAMA,MAAc,IAEpB,IAAIC,EAAU,GAUD,MAAAC,EAAmBC,EAAA,WAMhC,eAAsBC,EAAoBC,EAA6B,CACrE,GAAI,OAAOA,EAAM,MAAS,UAAYA,EAAM,KAAK,OAAS,EAAG,CAE3D,IAAIC,EAAU,GACd,UAAWC,KAAUP,GAEhB,OAAOO,GAAW,UAAYF,EAAM,SAAWE,GAC/CA,aAAkB,QAAUA,EAAO,KAAKF,EAAM,MAAM,KAE3CC,EAAA,IAId,GAAIA,EAAS,CAEL,MAAAE,EAAO,SAAUC,EAAuBC,EAAqC,CAE7EL,EAAM,SAAW,KACbA,EAAA,OAAO,YAAYI,CAAa,EAE9B,QAAA,MACN,IAAIE,EAAAA,IAAI,yCAAyCD,EAAQ,IAAI,mBAAA,CAEjE,EAGI,MAAAE,UAAQP,EAAM,KAAMG,CAAI,CAChC,CACF,CACF,CAOO,SAASK,EAAyBN,EAA0B,CAE/D,OAAA,OAAO,WAAc,UACrB,YAAc,MACd,OAAO,UAAU,eAAkB,UACnC,UAAU,gBAAkB,MAG1BA,IAAW,QACX,OAAO,QAAW,UAClB,SAAW,MACX,OAAO,OAAO,UAAa,UAC3B,OAAO,WAAa,OAEpBA,MAAW,OAAO,SAAS,SAGzBA,IAAW,QACbP,EAAQ,IAAIO,CAAM,EAGfN,IACO,UAAA,cAAc,iBAAiB,UAAWG,CAAmB,EAC7DH,EAAA,IAGL,UAAY,CACbM,IAAW,QACbP,EAAQ,OAAOO,CAAM,EAGnBP,EAAQ,OAAS,IACT,UAAA,cAAc,oBAAoB,UAAWI,CAAmB,EAChEH,EAAA,GACZ,IAGM,QAAA,MACN,IAAIU,EAAI,IAAA,0DAAA,EAEH,UAAY,CAAA,EAEvB"}