{"_id":"@bluesyoung/rpc","_rev":"2-abc848cdedd2252d768ec5bde2940f1e","name":"@bluesyoung/rpc","dist-tags":{"latest":"0.1.1"},"versions":{"0.0.1":{"name":"@bluesyoung/rpc","version":"0.0.1","description":"基于 postMessage(MessageChannel) 的远程调用库","main":"dist/index.cjs.js","module":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"require":"./dist/index.cjs.js","import":"./dist/index.es.js","types":"./dist/index.d.ts"}},"browser":"dist/index.umd.js","unpkg":"dist/index.umd.js","jsdelivr":"dist/index.umd.js","repository":{"type":"git","url":"git+ssh://git@github.com/BluesYoung-web/young.git","directory":"packages/rpc"},"author":"BluesYoung-web","license":"MIT","bugs":{"url":"https://github.com/BluesYoung-web/young/issues"},"homepage":"https://github.com/BluesYoung-web/young#readme","keywords":["rpc","postMessage","MessageChannel"],"scripts":{"test":"vitest","build":"vite build && tsup","release":"bumpp --commit","push":"pnpm publish --access public"},"_id":"@bluesyoung/rpc@0.0.1","_integrity":"sha512-PG5yQTWhfgYcooxOGaAJfQnJcbU51EJd1JxQB23eJrY/A5Zw/xz3Hg2oKal+HSKNnO9b8GJNGwpolUPSSY1G5w==","_resolved":"C:\\Users\\张扬\\AppData\\Local\\Temp\\75d99185fae7e2b2d14e33d6c4af62e3\\bluesyoung-rpc-0.0.1.tgz","_from":"file:bluesyoung-rpc-0.0.1.tgz","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-PG5yQTWhfgYcooxOGaAJfQnJcbU51EJd1JxQB23eJrY/A5Zw/xz3Hg2oKal+HSKNnO9b8GJNGwpolUPSSY1G5w==","shasum":"f7c9ab6bb204d43d6b9846b82869dea12168b1ca","tarball":"https://registry.npmjs.org/@bluesyoung/rpc/-/rpc-0.0.1.tgz","fileCount":18,"unpackedSize":40474,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWxtwuzE3S01sAA9MPY8UQKuOvwe5LxeXvUlGUdqWdtQIhAKZ7KW/XUWGcbzjvylAS5+/l83n53+KtfO10Ew6zixI9"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwP9PACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoRvQ/9EMdc+iNsLg/e4hbKrY2KbSWEQ8RD7oYikbkjVVgnMzxrB0lk\r\nw2cTbnDTeADI2s4JLnHM98H21mJc7JvH2bBlWl28EirRnjXqf3w+Iq5P5q3E\r\n44541n2fAbewVGr8yM9QoGDSIaptwn2FAnKPxFravdJEMv+a5XDQxkP7yq8z\r\n8acdWGPjItUjlGa0wR6rHC9ajSA3ShumuC03rFZBenT6QL8wDoKUZ6vyvPw0\r\nYGxXnFLy9XL8aZUbP1fOVFjx6y6ITmJdWKmr4WCuoky9MvmYYHJVloeAvtJx\r\nw9df+I7XQ7WBWw8iZtO5T1037oomFfOPktYwtqtb5clQQeUXIYkqvYLNAHmO\r\nH5p5NjQp4s4wpEWw2zbXsEILBhI15UvcYD3IroQjJXExFMK4As5R7GeYvD7W\r\nolvDnxI3koNawngc27txEDMImp4e9BFBke+fx1Uwch91GSI02CPmcBWFshvB\r\nHkDmUW4u8GCren542zIMKOG/BFAiS4sXgo9Ea1G/wkAAj66aq2qi6N3IkeSo\r\nPm02KllFAE6GuEsBjpFiyuIRiDV0Jj1I0UF6GXST+rNJeFrBXsii8n2PvmLd\r\nVKIBax8KlhusL1u7v2GfxtZOXrS/7tGGgrtKPFzTrvqKNxx9SGvqV3tvPmxm\r\nesiAPnc+mj1Y0m5Uhsizo8wyF83nlRbMqGQ=\r\n=E/mO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bluesyoung","email":"15171255945@163.com"},"directories":{},"maintainers":[{"name":"bluesyoung","email":"15171255945@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rpc_0.0.1_1656815439499_0.7250721878187634"},"_hasShrinkwrap":false},"0.1.0":{"name":"@bluesyoung/rpc","version":"0.1.0","description":"基于 postMessage(MessageChannel) 的远程调用库","main":"dist/index.cjs.js","module":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"require":"./dist/index.cjs.js","import":"./dist/index.es.js","types":"./dist/index.d.ts"}},"browser":"dist/index.umd.js","unpkg":"dist/index.umd.js","jsdelivr":"dist/index.umd.js","repository":{"type":"git","url":"git+ssh://git@github.com/BluesYoung-web/young.git","directory":"packages/rpc"},"author":"BluesYoung-web","license":"MIT","bugs":{"url":"https://github.com/BluesYoung-web/young/issues"},"homepage":"https://github.com/BluesYoung-web/young#readme","keywords":["rpc","postMessage","MessageChannel"],"scripts":{"test":"vitest","build":"vite build && tsup","release":"bumpp --commit","push":"pnpm publish --access public"},"_id":"@bluesyoung/rpc@0.1.0","_integrity":"sha512-cbHgELB1YRgA3hoRCkNJWMfCQhNr5HumI2RmXBQm+uy4ayqorJD5LHVR2nNyrLthjm5c2Zf1CZq6ZGd2442adw==","_resolved":"C:\\Users\\张扬\\AppData\\Local\\Temp\\bbd5a08869df3f1e41998a556e6717c9\\bluesyoung-rpc-0.1.0.tgz","_from":"file:bluesyoung-rpc-0.1.0.tgz","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-cbHgELB1YRgA3hoRCkNJWMfCQhNr5HumI2RmXBQm+uy4ayqorJD5LHVR2nNyrLthjm5c2Zf1CZq6ZGd2442adw==","shasum":"1f7b08bc60f437b2ed1f5ea8131c4978a03cf63c","tarball":"https://registry.npmjs.org/@bluesyoung/rpc/-/rpc-0.1.0.tgz","fileCount":18,"unpackedSize":41898,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDFHx8roq9OzbbbwrRj/pY+/r9yUByqL4mdxd3vnGXRMAiAQegH8khpObqu8b1S4WFBJBXmmtkHCxPz0Giy49/Nr6Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi5iyNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr5KhAAnoSsfjYfz+OHO9x8EpRI8Jn+QCyMWQrZo6QMUKERhiNCcb3z\r\n3Nis5l+oKMz0WbNgOal+O7YUP30BXb6DEtul6YCmghnoNB/mPQfuVNgg9Lji\r\nSAelhShuVFafdoUZeveRiC42K4KAsVej7Ol+Jxc1jolxPh4iV33Omd/HB00A\r\nfL4cm8+2Q+MX7srKbdVcSiDvTmuKkbiLYVNU2IIpdYEVHFh2TG9pZbndrtEn\r\nkwz4guivTEM4fFfthnH2n0axgYQVTTNpSOQgPVWMxO+InAnKa8PXQJxhv0nE\r\nRx3Y0PuvjsQA5zzoAQl4HOD1BV5OqasA97G66Wfw6a31koZGuJw5hpJXQY3u\r\n/JGTPmxzgCSa27T/hcSl2UXQWhwTuez6FutbDSyAZ8YNp6sIvOB23Xw6P1PI\r\nV+dWF7xHYSYaV3oeKdig20nCoQIXNx1XITnaXIzcxR/KerEP+Ng+WhB906Cx\r\nKApuBYM9vUW/aJXxRGS3CuAw7YVnipwJ6Euv7pn55kQ/n0XCB37bafwEUedb\r\nzgq+PaU6WOvZ+AfyU1e+kbPF+AlSQwsHHuVVGUOrMyg6H9cXrourmK49ZjOZ\r\n0wWfEDR7/eXawvt/7nY89VnuBnRG/6GxaJWiCey2NkIjiri94bE51jU7cjBT\r\nzW1mtJdFRtdc4SNZWttamX8j1ocReJ1tHX4=\r\n=xIyS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bluesyoung","email":"15171255945@163.com"},"directories":{},"maintainers":[{"name":"bluesyoung","email":"15171255945@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rpc_0.1.0_1659251853758_0.7308485424584115"},"_hasShrinkwrap":false},"0.1.1":{"name":"@bluesyoung/rpc","version":"0.1.1","description":"基于 postMessage(MessageChannel) 的远程调用库","main":"dist/index.cjs.js","module":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"require":"./dist/index.cjs.js","import":"./dist/index.es.js","types":"./dist/index.d.ts"}},"browser":"dist/index.umd.js","unpkg":"dist/index.umd.js","jsdelivr":"dist/index.umd.js","repository":{"type":"git","url":"git+ssh://git@github.com/BluesYoung-web/young.git","directory":"packages/rpc"},"author":{"name":"BluesYoung-web"},"license":"MIT","bugs":{"url":"https://github.com/BluesYoung-web/young/issues"},"homepage":"https://github.com/BluesYoung-web/young#readme","keywords":["rpc","postMessage","MessageChannel"],"scripts":{"test":"vitest","build":"vite build && tsup","release":"bumpp --commit","push":"pnpm publish --access public"},"_id":"@bluesyoung/rpc@0.1.1","_integrity":"sha512-6POAOpks8cD/mXltGgUMFQUYPQ8rBY6NejzUsGfQbVNPwlOO0dJh+kbZtcDge+XI8ad928yLVgXtmftbaqW0pA==","_resolved":"/tmp/f95dce58da03c24a1014feab99d59800/bluesyoung-rpc-0.1.1.tgz","_from":"file:bluesyoung-rpc-0.1.1.tgz","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-6POAOpks8cD/mXltGgUMFQUYPQ8rBY6NejzUsGfQbVNPwlOO0dJh+kbZtcDge+XI8ad928yLVgXtmftbaqW0pA==","shasum":"6119364b5a34e360d3fd69d730620c1e714a25bf","tarball":"https://registry.npmjs.org/@bluesyoung/rpc/-/rpc-0.1.1.tgz","fileCount":19,"unpackedSize":42413,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYLCfZDemssgMauiCZWOFRZ7OZriqASUbj6FzD/3wEPAIgRlC3aOeW15NIJjl/e3IlJMC6HBhvP9cS1h9yplLVhEw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLns+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrobQ//UxE1wDfCLT2f5WJHuNV+0+KnBM+Bt2V4q43PH5uLeYLj+13K\r\nqrZLU6BrfqgGLUpv1GN5DaBFYMp8hLEFCVT3Pll3iFHo3JLEEitiR2d/jBi+\r\nGzfEjMhaq2KkUg4rbmxSlaUssvqckpW8iM+119BLFtqNPlcq3jXY1FPbDM1e\r\nfuCQAGCr1TN9Pqazj9FGJMwf8x1d85Xv6kf5It5AXkyCjNdxgGdr0Ms9w0pc\r\nHj9V7k70Kgop7rkL7dpil5FaODNSHbY7n8TLsG1+ZWFeGGp3d5jWqLBFvsWu\r\nvO2YFuIIE952M/E2tc/CKCqFEwgzj2+xaZ9bUD85myaKQJRrkf0vA4wHewUY\r\nyd0gIDZjoGQ+dNS6ZU9WY2/PSeJavmmFCJZnW8xDzBHohDdJEru4BajbzgCr\r\nVW8dF2jQK0p41M/3tBCqDns+pviHMqfr1ci71tmstvlgSgkkTmt8/dcw5d4Q\r\noMNfhthxv8wUPTw8fzi2VwvJaTnEhLRM8Ccrv/43rBaklPm0f9IzAC3reu77\r\n/062e6HaU42jbYxb2B1tr+dUyY1oEs27DiekwP4gwnpRuPz9O6Ce8+3BLYJJ\r\nRVXg74jOQqv97PuLW37tC10h4FHjhoCNmapfBPfjGetfZln4QUUrHr3MBWfv\r\nY/Eq9/HJLUib0kXKMMF4YK2RVknbQycNs/M=\r\n=OPFX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bluesyoung","email":"15171255945@163.com"},"directories":{},"maintainers":[{"name":"bluesyoung","email":"15171255945@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rpc_0.1.1_1680767806132_0.7699215653845293"},"_hasShrinkwrap":false}},"time":{"created":"2022-07-03T02:30:39.445Z","0.0.1":"2022-07-03T02:30:39.635Z","modified":"2023-04-06T07:56:46.414Z","0.1.0":"2022-07-31T07:17:33.966Z","0.1.1":"2023-04-06T07:56:46.318Z"},"maintainers":[{"name":"bluesyoung","email":"15171255945@163.com"}],"description":"基于 postMessage(MessageChannel) 的远程调用库","homepage":"https://github.com/BluesYoung-web/young#readme","keywords":["rpc","postMessage","MessageChannel"],"repository":{"type":"git","url":"git+ssh://git@github.com/BluesYoung-web/young.git","directory":"packages/rpc"},"author":{"name":"BluesYoung-web"},"bugs":{"url":"https://github.com/BluesYoung-web/young/issues"},"license":"MIT","readme":"# 基于 postMessage(MessageChannel) 的远程调用库\n\n## 特性\n\n🌟 基于 [`postMessage`](https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage) + [`MessageChannel`](https://developer.mozilla.org/zh-CN/docs/Web/API/MessageChannel)\n\n🌟 可用于 `window.open` 打开的页面及 `iframe` 嵌套的子页面与父页面之间的通信(远程函数调用)\n\n🌟 **无视跨域限制，拥有安全限制，阻隔恶意消息**\n\n🌟 `100% TypeScript`，拥有**近乎完美的类型提示**\n\n🌟 `esm | cjs | umd`，各种环境一应俱全\n\n🌟 `IOC` 通信与调用解耦\n\n## 安装\n\n### 使用包管理器安装\n\n```bash\n# 选择一个你喜欢的包管理器\n# NPM\n$ npm install @bluesyoung/rpc --save\n\n# Yarn\n$ yarn add @bluesyoung/rpc\n\n# pnpm\n$ pnpm add @bluesyoung/rpc\n```\n\n### cdn 引入\n\n```html\n<!-- unpkg -->\n<script src=\"//unpkg.com/@bluesyoung/rpc\"></script>\n<!-- jsdelivr -->\n<script src=\"//cdn.jsdelivr.net/npm/@bluesyoung/rpc\"></script>\n<script>\nconst { YoungRPCMaster, YoungRPCSlave } = window.YoungRPC;\n</script>\n```\n\n## 使用示例\n\n```ts\n// test.ts 所有可调用的函数列表\nexport default {\n  add: ({a, b}:{a: number, b: number}) => a + b,\n  dec: ({a, b}:{a: number, b: number}) => a - b,\n  getUsers: async () => {\n    const res = await (await fetch('https://lf3-static.bytednsdoc.com/obj/eden-cn/beeh7uvzhq/users.json')).json();\n    return res as {\n      key: string;\n      name: string;\n      age: number;\n      country: string;\n    };\n }\n};\n```\n\n```ts\n//  子页面\nimport { YoungRPCSlave } from '@bluesyoung/rpc';\n// 此时为使用值推导类型\n// 实际应用中建议先定义函数签名，使用签名以达到更精准的类型提示\nimport fns from './test';\n\nconst app = new YoungRPCSlave<typeof fns>();\n// 调用方式一：\nconst addFn = app.setHandler('add', {\n  success: console.log,\n  fail: console.error\n});\naddFn({ a: 1, b: 2 });\n// 调用方式二\napp.setHandler('add', {\n  success: console.log,\n  fail: console.error\n});\napp.trigger('add', { a: 1, b: 2 });\n```\n\n```ts\n// 父页面\nimport { YoungRPCMaster } from '@bluesyoung/rpc';\n// 此时为使用值推导类型\n// 实际应用中建议先定义函数签名，使用签名以达到更精准的类型提示\nimport fns from './test';\n\nconst masterApp = new YoungRPCMaster<typeof fns>();\n// 批量设置消息处理函数，默认直接透传\nfor (const [cmd, fn] of Object.entries(fns) as [[cmd: keyof typeof fns, fn: typeof fns[keyof typeof fns]]]) {\n  if (typeof fn === 'function') {\n    masterApp.setHandler(cmd, async (params) => {\n      try {\n        const data = await fn(params as any);\n        masterApp.sendMsg({\n          ok: true,\n          data,\n          cmd\n        });\n      } catch (error) {\n        masterApp.sendMsg({\n          ok: false,\n          data: (error as Error).message,\n          cmd\n        });\n      }\n    });\n  } else {\n    throw new Error('cmd handler must be a function !');\n  }\n}\n// 需要特殊处理的函数单独定义，覆盖之前的\nmasterApp.setHandler('getUsers', async () => {\n  try {\n    const data = await fns['getUsers']();\n    masterApp.sendMsg({\n      ok: true,\n      data: {\n        inject: 'master',\n        data\n      },\n      cmd: 'getUsers'\n    });\n  } catch (error) {\n    masterApp.sendMsg({\n      ok: false,\n      data: (error as Error).message,\n      cmd: 'getUsers'\n    });\n  }\n});\n```\n\n### 多实例\n\n```ts\n// 主页\nconst masterApp1 = new YoungRPCMaster<T1>('rpc-shakehands-001');\nconst masterApp2 = new YoungRPCMaster<T2>('rpc-shakehands-002');\n\n// 子页1\nconst slaveApp1 = new YoungRPCSlave<T1>('rpc-shakehands-001');\n\n// 子页2\nconst slaveApp2 = new YoungRPCSlave<T2>('rpc-shakehands-002');\n```","readmeFilename":"README.md"}