{"id":28049172,"url":"https://github.com/luis-codex/sw-worker","last_synced_at":"2026-03-08T04:32:31.151Z","repository":{"id":291840352,"uuid":"978952734","full_name":"luis-codex/sw-worker","owner":"luis-codex","description":"Librería para comunicación entre cliente y worker en entornos de navegador y extensiones.","archived":false,"fork":false,"pushed_at":"2025-05-07T22:43:38.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-28T10:49:19.410Z","etag":null,"topics":["chrome-extensions","communication","extension","npm-package","qbytes","routing","typescript","web-worker","worker"],"latest_commit_sha":null,"homepage":"https://sw-worker.qbytes.dev/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luis-codex.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-06T19:00:55.000Z","updated_at":"2025-05-07T22:43:42.000Z","dependencies_parsed_at":"2025-05-11T23:06:07.827Z","dependency_job_id":null,"html_url":"https://github.com/luis-codex/sw-worker","commit_stats":null,"previous_names":["luis-codex/q-worker","luis-codex/sw-worker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/luis-codex/sw-worker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luis-codex%2Fsw-worker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luis-codex%2Fsw-worker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luis-codex%2Fsw-worker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luis-codex%2Fsw-worker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luis-codex","download_url":"https://codeload.github.com/luis-codex/sw-worker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luis-codex%2Fsw-worker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30245238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:58:18.660Z","status":"online","status_checked_at":"2026-03-08T02:00:06.215Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["chrome-extensions","communication","extension","npm-package","qbytes","routing","typescript","web-worker","worker"],"created_at":"2025-05-11T23:06:03.691Z","updated_at":"2026-03-08T04:32:31.133Z","avatar_url":"https://github.com/luis-codex.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sw-worker\n\n![npm](https://img.shields.io/npm/v/sw-worker)\n![License](https://img.shields.io/github/license/luis-codex/sw-worker)\n  \n[🌐 Landing page](https://sw-worker.qbytes.dev)\n\n`sw-worker` es una librería que facilita la comunicación entre un cliente y un trabajador (worker) en entornos de navegador o extensiones. Proporciona una arquitectura modular y flexible para manejar rutas, solicitudes y respuestas.\n\n## Tabla de Contenido\n\n- [sw-worker](#sw-worker)\n  - [Tabla de Contenido](#tabla-de-contenido)\n  - [Instalación](#instalación)\n  - [Uso](#uso)\n    - [Cliente](#cliente)\n      - [Ejemplo de uso:](#ejemplo-de-uso)\n    - [Trabajador](#trabajador)\n      - [Ejemplo de uso:](#ejemplo-de-uso-1)\n    - [Uso en Entorno de Extensión](#uso-en-entorno-de-extensión)\n      - [Cliente en Extensión:](#cliente-en-extensión)\n      - [Trabajador en Extensión:](#trabajador-en-extensión)\n  - [Estructura del Proyecto](#estructura-del-proyecto)\n  - [API](#api)\n    - [SWWorkerClient](#swworkerclient)\n      - [Métodos](#métodos)\n    - [SWWorker](#swworker)\n      - [Métodos](#métodos-1)\n  - [Contribución](#contribución)\n  - [Licencia](#licencia)\n\n## Instalación\n\nUsa el siguiente comando para instalar la dependencia:\n\n```bash\nnpm install sw-worker\n```\n\nO si usas `pnpm`:\n\n```bash\npnpm add sw-worker\n```\n\n## Uso\n\n### Cliente\n\nEl cliente (`SWWorkerClient`) permite realizar solicitudes al trabajador. Puedes inicializarlo con diferentes configuraciones dependiendo del entorno.\n\n#### Ejemplo de uso:\n\n```typescript\nimport { SWWorkerClient } from 'sw-worker/client';\n\nconst client = new SWWorkerClient({\n  runtime: 'browser',\n  url: new URL('./worker.js', import.meta.url),\n});\n\n// Realizar una solicitud GET\nclient.get('/ruta')\n  .then((response) =\u003e response.json())\n  .then((data) =\u003e console.log(data))\n  .catch((error) =\u003e console.error('Error:', error))\n  .finally(() =\u003e console.log('Finalizado'));\n\n// Realizar una solicitud POST\nclient.post('/ruta', { key: 'value' })\n  .then((response) =\u003e response.json())\n  .then((data) =\u003e console.log(data))\n  .catch((error) =\u003e console.error('Error:', error))\n  .finally(() =\u003e console.log('Finalizado'));\n\n// Terminar el worker cuando ya no sea necesario\nclient.terminate();\n```\n\n### Trabajador\n\nEl trabajador (`SWWorker`) permite definir rutas y manejar solicitudes desde el cliente.\n\n#### Ejemplo de uso:\n\n```typescript\nimport SWWorker from 'sw-worker/worker';\n\nconst worker = new SWWorker('browser');\n\n// Definir rutas\nworker.get('/ruta', (req, res) =\u003e {\n  res.send({ mensaje: 'Hola desde el worker' });\n});\n\nworker.post('/ruta', (req, res) =\u003e {\n  const { key } = req.body;\n  res.send({ mensaje: `Recibido: ${key}` });\n});\n\n// Escuchar solicitudes\nworker.listen();\n```\n\n### Uso en Entorno de Extensión\n\nEl cliente y el trabajador también pueden ser utilizados en un entorno de extensión. A continuación, se muestra un ejemplo con rutas CRUD para `/tabs` y `/bookmarks`:\n\n#### Cliente en Extensión:\n\n```typescript\nimport { SWWorkerClient } from 'sw-worker/client';\n\nconst client = new SWWorkerClient({\n  runtime: 'extension',\n});\n\n// Obtener todas las pestañas\nclient.get('/tabs')\n  .then((response) =\u003e response.json())\n  .then((data) =\u003e console.log(data))\n  .catch((error) =\u003e console.error('Error:', error))\n  .finally(() =\u003e console.log('Finalizado'));\n\n// Crear un marcador\nclient.post('/bookmarks', { title: 'Nuevo Marcador', url: 'https://example.com' })\n  .then((response) =\u003e response.json())\n  .then((data) =\u003e console.log(data))\n  .catch((error) =\u003e console.error('Error:', error))\n  .finally(() =\u003e console.log('Finalizado'));\n```\n\n#### Trabajador en Extensión:\n\n```typescript\nimport SWWorker from 'sw-worker/worker';\n\nconst worker = new SWWorker('extension');\n\n// Rutas para pestañas\nworker.get('/tabs', async (req, res) =\u003e {\n  const tabs = await chrome.tabs.query({});\n  res.send({ tabs });\n});\n\nworker.post('/tabs', async (req, res) =\u003e {\n  const { url } = req.body;\n  const tab = await chrome.tabs.create({ url });\n  res.send({ tab });\n});\n\n// Rutas para marcadores\nworker.get('/bookmarks', async (req, res) =\u003e {\n  const bookmarks = await chrome.bookmarks.getTree();\n  res.send({ bookmarks });\n});\n\nworker.post('/bookmarks', async (req, res) =\u003e {\n  const { title, url } = req.body;\n  const bookmark = await chrome.bookmarks.create({ title, url });\n  res.send({ bookmark });\n});\n\n// Escuchar solicitudes\nworker.listen();\n```\n\n## Estructura del Proyecto\n\nLa librería sigue una arquitectura modular:\n\n```\nsw-worker/\n├── src/\n│   ├── client/\n│   │   └── index.ts\n│   ├── worker/\n│   │   └── index.ts\n│   ├── managers/\n│   │   ├── RequestHandler.ts\n│   │   ├── ResponseManager.ts\n│   │   └── RouteManager.ts\n│   ├── types/\n│   │   └── types.d.ts\n│   └── utils/\n│       └── pathUtils.ts\n├── tests/\n│   ├── client.test.ts\n│   └── worker.test.ts\n├── package.json\n├── tsconfig.json\n├── LICENSE\n└── README.md\n```\n\n## API\n\n### SWWorkerClient\n\n#### Métodos\n- `get(route: string, headers?: HeadersInit): Promise\u003cClientResponse\u003e`\n- `post(route: string, body?: StructuredCloneable, headers?: HeadersInit): Promise\u003cClientResponse\u003e`\n- `put(route: string, body?: StructuredCloneable, headers?: HeadersInit): Promise\u003cClientResponse\u003e`\n- `delete(route: string, body?: StructuredCloneable, headers?: HeadersInit): Promise\u003cClientResponse\u003e`\n- `terminate(): void`\n\n### SWWorker\n\n#### Métodos\n- `get(path: string, handler: Handler): void`\n- `post(path: string, handler: Handler): void`\n- `put(path: string, handler: Handler): void`\n- `delete(path: string, handler: Handler): void`\n- `route(path: string, app: SWWorker): void`\n- `listen(): void`\n\n## Contribución\n\n¡Las contribuciones son bienvenidas! Si deseas colaborar, sigue estos pasos:\n\n1. Haz un fork del repositorio.\n2. Crea una rama para tu funcionalidad (`git checkout -b feature/nueva-funcionalidad`). **No envíes tus cambios a la rama `master`, utiliza la rama `develop`.**\n3. Realiza tus cambios y haz un commit (`git commit -m 'feat: agrega nueva funcionalidad'`).\n4. Sube tus cambios a tu rama (`git push origin feature/nueva-funcionalidad`).\n5. Abre un Pull Request en el repositorio principal.\n\n**Nota:** El flujo de trabajo de GitHub Actions solo se ejecutará en la rama `master`.\n\n## Licencia\n\nEste proyecto está licenciado bajo la Licencia MIT. Consulta el archivo `LICENSE` para más detalles.\n\n---\n\nRepositorio: [sw-worker](https://github.com/luis-codex/sw-worker)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluis-codex%2Fsw-worker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluis-codex%2Fsw-worker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluis-codex%2Fsw-worker/lists"}