{"id":20253185,"url":"https://github.com/jeremylikness/tsviewmodel","last_synced_at":"2025-08-13T01:34:21.330Z","repository":{"id":77126134,"uuid":"127177984","full_name":"JeremyLikness/tsviewmodel","owner":"JeremyLikness","description":"ViewModel implementation in TypeScript using decorators for property change notifications","archived":false,"fork":false,"pushed_at":"2018-03-28T17:54:20.000Z","size":3,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-03T16:50:45.132Z","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":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JeremyLikness.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-28T17:54:16.000Z","updated_at":"2024-05-30T12:17:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"f28ea102-95c2-4e39-ba64-76031241a5d5","html_url":"https://github.com/JeremyLikness/tsviewmodel","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JeremyLikness/tsviewmodel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremyLikness%2Ftsviewmodel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremyLikness%2Ftsviewmodel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremyLikness%2Ftsviewmodel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremyLikness%2Ftsviewmodel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JeremyLikness","download_url":"https://codeload.github.com/JeremyLikness/tsviewmodel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremyLikness%2Ftsviewmodel/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266076350,"owners_count":23872741,"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-11-14T10:22:06.198Z","updated_at":"2025-07-20T06:33:21.770Z","avatar_url":"https://github.com/JeremyLikness.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Property change notification in TypeScript\n\nThis is a simple example that demonstrates how to use TypeScript decorators to transform simple properties into \"view model\" properties that raise events when the value changes. This works by intercepting the setter and invoking a callback when the setter value is different. The property is turned into a getter/setter with a backing property.\n\n## Make it rain\n\n`git clone https://github.com/JeremyLikness/tsviewmodel.git`\n\n`cd tsviewmodel`\n\n`npm i`\n\n`npm run-script build`\n\n`node index`\n\nThat's it. Feedback: [@JeremyLikness](https://twitter.com/JeremyLikness)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeremylikness%2Ftsviewmodel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeremylikness%2Ftsviewmodel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeremylikness%2Ftsviewmodel/lists"}