{"id":17816455,"url":"https://github.com/zebrajaeger/ws-value","last_synced_at":"2026-02-15T12:35:14.471Z","repository":{"id":40767147,"uuid":"266605524","full_name":"zebrajaeger/ws-value","owner":"zebrajaeger","description":"TS lib for value distribution vie websocket","archived":false,"fork":false,"pushed_at":"2023-01-06T07:09:17.000Z","size":1322,"stargazers_count":0,"open_issues_count":12,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-09T00:44:51.211Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zebrajaeger.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2020-05-24T18:57:34.000Z","updated_at":"2020-06-02T11:52:16.000Z","dependencies_parsed_at":"2023-02-05T14:30:56.798Z","dependency_job_id":null,"html_url":"https://github.com/zebrajaeger/ws-value","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/zebrajaeger/ws-value","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fws-value","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fws-value/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fws-value/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fws-value/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zebrajaeger","download_url":"https://codeload.github.com/zebrajaeger/ws-value/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fws-value/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278532354,"owners_count":26002343,"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","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"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":[],"created_at":"2024-10-27T16:38:11.217Z","updated_at":"2025-10-05T22:37:22.932Z","avatar_url":"https://github.com/zebrajaeger.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ws-value\n\nDistribute values via websocket\n\n## Example in TS\n\n### MyInterface\n \n#### Common stuff for Client and server \n\n```typescript\n// complex object (may have sub-objects but we keep it simple)\nexport interface Status {\n  foo: number;\n  bar: string;\n}\n```\n\n### Basic Server\n\n```typescript\nimport {Status} from 'MyInterface';\nimport {Server} from 'rpc-websockets';\nimport {ServerValue} from '@zebrajaeger/ws-value';\n\n// bind server to all interfaces and port 8081\nconst server = new Server({port: 8081, host: '0.0.0.0'});\n\n// register server value of type 'Status' with name 'status' and set initial value\nconst status = new ServerValue\u003cStatus\u003e(server, 'status');\nstatus.setValue({foo: 666, bar: 'hello'});\n\n// register server value of type 'number' with name 'counter and let it uninitialized\nconst counter = new ServerValue\u003cnumber\u003e(server, 'counter');\n```\n\n### Basic Client\n\n```typescript\nimport {Status} from 'MyInterface';\nimport {Client} from 'rpc-websockets';\nimport {ClientValue} from '@zebrajaeger/ws-value';\n\n// simple value\nlet counter: ClientValue\u003cnumber\u003e;\n  \n// complex value\nlet status: ClientValue\u003cStatus\u003e;\n\n// create websocket client\nconst client = new Client('ws://192.168.178.68:8081');\n    \n// until client is ready we can register out values \nthis.client.on('open', () =\u003e {\n  \n  // register value with name 'counter' and type 'number'\n  this.counter = new ClientValue\u003cnumber\u003e(this.client, 'counter');\n\n  // register value with name 'status' and type 'Status'\n  this.status = new ClientValue\u003cStatus\u003e(this.client, 'status');\n});\n```\n\n\n### Change values (interface is equal on client and server side)\n\n#### Change value \n\n```typescript\nfunction incCounter() {\n  const v = counter.getValue() || 0;\n  counter.setValue(v + 1);\n}\n\nfunction setStatus(s: Status) {\n  status.setValue(s);\n} \n```\n\n#### Get notificated on value change\n\n```typescript\n// call as soon as status has a valid value. Is called only once\nstatus.onInit(newStatus=\u003e{ \n    console.log('init',  newStatus);\n});\n\n// call everytime when status has been changed\nstatus.onChange(newStatus=\u003e{ \n    console.log('change', newStatus);\n});\n```\n\n#### Change equality behavior using deep-equal instead of equal (===) operator\n\n```typescript\nimport deepEqual = require('deep-equal');\n\n// using custom function within lambda\nconst status = new ServerValue\u003cStatus\u003e(server, 'counter', (o1, o2) =\u003e deepEqual(o1, o2));\n\n// or more simple: deepEqual function as parameter\nconst status = new ServerValue\u003cStatus\u003e(server, 'counter', deepEqual);\n```\n\n## Overview \n![Overview](./doc/overview.png)\n\n\n## Release nodes\n\n## v1.1.3\n\n- Start with release notes in readme\n- remove unneeded files from deployed package to keep it small\n- reduce image size","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzebrajaeger%2Fws-value","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzebrajaeger%2Fws-value","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzebrajaeger%2Fws-value/lists"}