{"id":15504455,"url":"https://github.com/kwonoj/comlink-electron-adapter","last_synced_at":"2025-04-23T00:12:23.595Z","repository":{"id":57203966,"uuid":"188736002","full_name":"kwonoj/comlink-electron-adapter","owner":"kwonoj","description":"Comlink endpoint adapter for Electron's IPC","archived":false,"fork":false,"pushed_at":"2020-03-30T23:17:35.000Z","size":225,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-23T00:12:17.296Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kwonoj.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-26T22:04:39.000Z","updated_at":"2022-05-11T07:16:13.000Z","dependencies_parsed_at":"2022-09-17T14:52:46.333Z","dependency_job_id":null,"html_url":"https://github.com/kwonoj/comlink-electron-adapter","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kwonoj%2Fcomlink-electron-adapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kwonoj%2Fcomlink-electron-adapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kwonoj%2Fcomlink-electron-adapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kwonoj%2Fcomlink-electron-adapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kwonoj","download_url":"https://codeload.github.com/kwonoj/comlink-electron-adapter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250343955,"owners_count":21415041,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T09:18:05.428Z","updated_at":"2025-04-23T00:12:23.541Z","avatar_url":"https://github.com/kwonoj.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.com/kwonoj/comlink-electron-adapter.svg)](https://travis-ci.com/kwonoj/comlink-electron-adapter)\n[![Build status](https://ci.appveyor.com/api/projects/status/51vn1y7yygjfcl98/branch/master?svg=true)](https://ci.appveyor.com/project/kwonoj/comlink-electron-adapter/branch/master)\n[![codecov](https://codecov.io/gh/kwonoj/comlink-electron-adapter/branch/master/graph/badge.svg)](https://codecov.io/gh/kwonoj/comlink-electron-adapter)\n[![npm](https://img.shields.io/npm/v/comlink-electron-adapter.svg)](https://www.npmjs.com/package/comlink-electron-adapter)\n[![node](https://img.shields.io/badge/electron-=\u003e5.0-blue.svg?style=flat)](https://www.npmjs.com/package/comlink-electron-adapter)\n\n# Comlink-electron-adapter\n\n[Comlink](https://github.com/GoogleChromeLabs/comlink) provides way to interface between worker-like endpoint via ES proxy. This module allows to create custom endpoints around Electron's IPC (https://electronjs.org/docs/api/ipc-main) for proxy object across Electron's processes.\n\n# Install\n\nThis has a peer dependencies of `comlink@4`, which will have to be installed as well\n\n```sh\nnpm install comlink-electron-adapter\n```\n\n# Usage\n\nThere are separate endpoint creation method per object's origin.\n\n## Expose main process's object to renderer project\n\n```ts\n// main process\nimport { ipcMain } from 'electron';\nimport { expose } from 'comlink';\nimport { mainProcObjectEndpoint } from 'comlink-electron-adapter';\n\nconst mainProcessObject = {...};\nexpose(mainProcessObject, mainProcObjectEndpoint(ipcMain));\n\n// renderer process\nimport { wrap } from 'comlink';\nimport { ipcRenderer } from 'electron';\n\n// `proxied` is proxy object to `mainProcessObject` in main process\nconst proxied = wrap(mainProcObjectEndpoint(ipcRenderer));\n```\n\n## Expose renderer process's object to main process\n\nIt is also possible to access renderer process's object in main process.\n\n```ts\n// renderer process\nimport { expose } from 'comlink';\nimport { ipcRenderer } from 'electron';\nimport { rendererProcObjectEndpoint } from 'comlink-electron-adapter';\n\nconst rendererProcessObject = {...};\nexpose(rendererProcessObject, rendererProcObjectEndpoint(ipcRenderer));\n\n// main process\nimport { wrap } from 'comlink';\nimport { ipcMain } from 'electron';\nimport { rendererProcObjectEndpoint } from 'comlink-electron-adapter';\n\nconst rendererProcessWindow = new BrowserWindow();\nrendererProcessWindow.loadFile('.../renderer.js');\n\nconst proxied = wrap(requestRendererProcessEndpoint(ipcMain, rendererProcessWindow.webContents));\n```\n\nUnlike renderer process main process does not aware target renderer process to send message and target webContents should be specified. Also main process should wait call proxy object until renderer process expose its object.\n\n# Note\n\nDue to Electron IPC's design `comlink-electron-adapter` do not support `transferable`. Using `Comlink.transfer` will raise not supported exception.\n\n# Building / Testing\n\nFew npm scripts are supported for build / test code.\n\n- `build`: Transpiles code to ES5 commonjs to `dist`.\n- `test`: Run test cases.\n- `lint`: Run lint over all codebases\n- `lint:staged`: Run lint only for staged changes. This'll be executed automatically with precommit hook.\n- `commit`: Commit wizard to write commit message\n\n# License\n\n[MIT](https://github.com/kwonoj/comlink-electron-adapter/blob/master/LICENSE)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkwonoj%2Fcomlink-electron-adapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkwonoj%2Fcomlink-electron-adapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkwonoj%2Fcomlink-electron-adapter/lists"}