UNPKG

@webrtc-remote-control/vue

Version:

Thin abstraction layer above peerjs that will let you be more productive at making WebRTC data channels based apps.

1 lines 8.08 kB
{"version":3,"file":"vue.cjs","sources":["../src/Provider.js","../src/hooks.js"],"sourcesContent":["// eslint-disable-next-line import/no-extraneous-dependencies\nimport { shallowRef, watchEffect, provide } from \"vue\";\nimport { master, remote, prepareUtils } from \"@webrtc-remote-control/core\";\n\n// use Symbol to avoid collision in provide/inject\nexport const MyContext = Symbol(\"context-webrtc-remote-control\");\n\nexport function provideWebTCRemoteControl(\n init,\n mode,\n { masterPeerId, sessionStorageKey, humanErrors } = {}\n) {\n const allowedMode = [\"master\", \"remote\"];\n if (!allowedMode.includes(mode)) {\n throw new Error(\n `Unsupported \"${mode}\" mode. Only ${allowedMode\n .map((a) => `\"${a}\"`)\n .join(\", \")} accepted.`\n );\n }\n if (mode === \"master\" && masterPeerId) {\n console.log(typeof masterPeerId);\n throw new Error(\n `\\`masterPeerId\\` prop not allowed in \"master\" mode - \"${masterPeerId}\" was passed.`\n );\n }\n if (mode === \"remote\" && !masterPeerId) {\n throw new Error(`\\`masterPeerId\\` prop required in \"remote\" mode.`);\n }\n const utils = prepareUtils({\n sessionStorageKey,\n humanErrors,\n });\n const providerValue = shallowRef({\n peer: null,\n promise: null,\n mode,\n masterPeerId,\n });\n // expose providerValue so that it can be injected inside the hook\n provide(MyContext, providerValue);\n\n watchEffect((onCleanup) => {\n console.log(\"Provider.watch\");\n providerValue.value.mode = mode;\n providerValue.value.humanizeError = utils.humanizeError;\n if (mode === \"master\") {\n providerValue.value.isConnectionFromRemote = utils.isConnectionFromRemote;\n }\n\n // init callback that should return a peer instance like:\n // `({ getPeerId }) => new Peer(getPeerId())`\n providerValue.value.peer = init({\n humanizeError: utils.humanizeError,\n getPeerId: utils.getPeerId,\n isConnectionFromRemote:\n mode === \"master\" ? utils.isConnectionFromRemote : undefined,\n });\n\n providerValue.value.promise = (mode === \"master\" ? master : remote)\n .default(utils)\n .bindConnection(\n providerValue.value.peer,\n remote ? masterPeerId : undefined\n );\n // start resolving the promise as soon as possible (it will be used in `usePeer`)\n providerValue.value.promise.then((wrcApi) => {\n console.log(\"Provider.then\", wrcApi);\n });\n // register cleanup\n onCleanup(() => {\n console.log(\"Provider.onInvalidate\", providerValue.value);\n if (providerValue.value) {\n providerValue.value.peer.disconnect();\n }\n });\n });\n}\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport { inject, watchEffect, toRefs, unref, reactive } from \"vue\";\n\nimport { MyContext } from \"./Provider\";\n\nexport function usePeer() {\n console.log(\"usePeer\");\n // const ready = ref(false);\n const context = inject(MyContext);\n // const resolvedWrcApi = shallowRef(null);\n console.log(\"context\", context);\n const result = reactive({\n ...unref(context),\n peerReady: false,\n ready: false,\n api: null,\n });\n watchEffect(() => {\n // run on next tick (ensure the `then` of the Provider has executed + retrieve the api from the resolve promise)\n Promise.resolve().then(() => {\n console.log(\"hooks.Promise.resolve\", context);\n result.peerReady = true;\n context.value?.promise?.then((wrcApi) => {\n console.log(\"hooks.Promise.resolve - context.promise.then\", wrcApi);\n // resolvedWrcApi.value = wrcApi;\n // ready.value = true;\n result.ready = true;\n result.api = wrcApi;\n });\n });\n });\n // use toRefs ? https://vuejs.org/api/reactivity-utilities.html#torefs\n return toRefs(result); // todo - is spread necessary ?\n}\n"],"names":["MyContext","Symbol","provideWebTCRemoteControl","init","mode","masterPeerId","sessionStorageKey","humanErrors","allowedMode","includes","Error","map","a","join","console","log","utils","prepareUtils","providerValue","shallowRef","peer","promise","provide","watchEffect","onCleanup","value","humanizeError","isConnectionFromRemote","getPeerId","undefined","master","remote","bindConnection","then","wrcApi","disconnect","usePeer","context","inject","result","reactive","unref","peerReady","ready","api","Promise","resolve","toRefs"],"mappings":"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"}