{"_id":"@alshdavid/shared-worker","name":"@alshdavid/shared-worker","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@alshdavid/shared-worker","version":"1.0.0","type":"module","license":"MIT","description":"Connection Manager for SharedWorkers","exports":{"./*":{"import":"./*","module-sync":"./*","types":"./*.d.ts"}},"scripts":{"serve":"npx http-server .","build":"tsc"},"devDependencies":{"http-server":"*","typescript":"*"},"_id":"@alshdavid/shared-worker@1.0.0","gitHead":"6ef82a52a5106e009caa432ad2856fbbc9c7b00b","_nodeVersion":"22.19.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-im4/odlzZEvYox/eseUzLSqzZ1M01lozfnep4Wn0I14uGGS5CukSZLcgH2Cr6EmyNDHq3tI8BsiX+0rSa9PKCg==","shasum":"f695d32d5ad9d754e296503dcdc0181aa9dee0b3","tarball":"https://registry.npmjs.org/@alshdavid/shared-worker/-/shared-worker-1.0.0.tgz","fileCount":15,"unpackedSize":10699,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD+O08dFSXYz5WVwg/YIEPa32/Y6SEwvj3h0kyQ46aSlgIhAImqqk1w1VoxtNHw8EHN3iP5mn+IVrglA139wgTSwPRB"}]},"_npmUser":{"name":"alshdavid","email":"alshdavid@gmail.com"},"directories":{},"maintainers":[{"name":"alshdavid","email":"alshdavid@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shared-worker_1.0.0_1759969123497_0.028560460830160617"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-09T00:18:43.418Z","1.0.0":"2025-10-09T00:18:43.716Z","modified":"2025-10-09T00:18:44.028Z"},"maintainers":[{"name":"alshdavid","email":"alshdavid@gmail.com"}],"description":"Connection Manager for SharedWorkers","license":"MIT","readme":"# SharedWorker\r\n\r\n## SharedWorker implementation that tracks connected clients\r\n\r\nThe default implementation of `SharedWorker` does not notify clients when a tab/window disconnects.\r\n\r\nThis can make tracking connected clients difficult and result in memory leaks.\r\n\r\nThis library uses the Locks API to detect when a window has been closed and notifies the shared worker.\r\n\r\n### Usage\r\n\r\nThis example creates a page with an incrementable counter that is shared between multiple pages\r\n\r\n```html\r\n<body>\r\n  <div id=\"count\"></div>\r\n  <button id=\"increment\">Increment</button>\r\n</body>\r\n\r\n<script type=\"module\">\r\n  import { SharedWorker } from '@alshdavid/shared-worker/shared-worker.js'\r\n\r\n  const elm_div_count = document.getElementById('count')\r\n  const elm_btn_increment = document.getElementById('increment')\r\n\r\n  const worker = new SharedWorker('./worker.mjs', { type: \"module\" })\r\n  \r\n  worker.addEventListener('message', (e) => {\r\n    elm_div_count.innerHTML = e.data\r\n  })\r\n\r\n  elm_btn_increment.addEventListener('click', () => {\r\n    worker.postMessage(null)\r\n  })\r\n</script>\r\n```\r\n\r\n```javascript\r\n// worker.mjs\r\nimport { ConnectionManager } from \"@alshdavid/shared-worker/connection-manager.js\";\r\n\r\n// Shared state\r\nlet count = 0;\r\n\r\nconst clients = new ConnectionManager();\r\n\r\nclients.addEventListener(\"connect\", ({ data: conn }) => {\r\n  console.log(\"Connected\", conn.id());\r\n\r\n  conn.postMessage(count);\r\n\r\n  conn.addEventListener(\"message\", (_e) => {\r\n    count += 1;\r\n    worker.postMessageAll(count);\r\n  });\r\n\r\n  conn.addEventListener(\"disconnect\", (_e) => \r\n    console.log(\"Disconnected\", conn.id()),\r\n    { once: true }\r\n  );\r\n});\r\n```","readmeFilename":"README.md","_rev":"1-0601e7ea6a7eb296a5d739c014745d8d"}