{"id":13623381,"url":"https://github.com/alexeyraspopov/dataclass","last_synced_at":"2025-04-05T05:09:09.871Z","repository":{"id":39498879,"uuid":"94632148","full_name":"alexeyraspopov/dataclass","owner":"alexeyraspopov","description":"Data classes for TypeScript \u0026 JavaScript","archived":false,"fork":false,"pushed_at":"2024-04-22T13:41:57.000Z","size":675,"stargazers_count":188,"open_issues_count":2,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-04T20:12:41.728Z","etag":null,"topics":["data-class","data-structures","dataclass","immutable","javascript","typescript","value-object","zero-dependency"],"latest_commit_sha":null,"homepage":"https://dataclass.js.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexeyraspopov.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2017-06-17T15:26:00.000Z","updated_at":"2025-04-01T18:06:57.000Z","dependencies_parsed_at":"2024-01-14T07:17:54.026Z","dependency_job_id":"ee1c5930-bc06-4063-a9a2-df63fc00649b","html_url":"https://github.com/alexeyraspopov/dataclass","commit_stats":{"total_commits":162,"total_committers":5,"mean_commits":32.4,"dds":"0.32098765432098764","last_synced_commit":"93e410a1a57c1a8ac439e9b7319081d7d0b06002"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeyraspopov%2Fdataclass","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeyraspopov%2Fdataclass/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeyraspopov%2Fdataclass/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeyraspopov%2Fdataclass/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexeyraspopov","download_url":"https://codeload.github.com/alexeyraspopov/dataclass/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247242681,"owners_count":20907134,"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":["data-class","data-structures","dataclass","immutable","javascript","typescript","value-object","zero-dependency"],"created_at":"2024-08-01T21:01:31.118Z","updated_at":"2025-04-05T05:09:09.851Z","avatar_url":"https://github.com/alexeyraspopov.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# dataclass\n\n    npm install dataclass\n\nSyntax sugar that leverages the power of available type systems in TypeScript and JavaScript to\nprovide an effortless way for defining value objects that are immutable and persistent.\n\nRead full docs [on the website](https://dataclass.js.org).\n\n```ts\nimport { Data } from \"dataclass\";\n\nclass User extends Data {\n  name: string = \"Anon\";\n  age: number = 25;\n}\n\nlet user = User.create({ name: \"Liza\", age: 23 });\n// \u003e User { name: \"Liza\", age: 23 }\n\nlet updated = user.copy({ name: \"Ann\" });\n// \u003e User { name: \"Ann\", age: 23 }\n\nlet isEqual = user.equals(updated);\n// \u003e false\n```\n\n## Prior Art\n\nThe implemented concept is heavily inspired by Scala and Kotlin. Both languages have the\nimplementation of data classes as a part of their syntax and share similar APIs.\n\nSee [Data Classes](https://kotlinlang.org/docs/reference/data-classes.html) in Kotlin (also\n[Case Classes](https://docs.scala-lang.org/tour/case-classes.html) in Scala):\n\n```kotlin\ndata class User(val name: String = \"Anonymous\", val age: Int = 0)\n\nval user = User(name = \"Liza\", age = 23)\nval updated = user.copy(name = \"Ann\")\n\nuser.equals(updated)\n```\n\nAnd [Data Classes](https://docs.python.org/3/library/dataclasses.html) in Python:\n\n```python\nfrom dataclasses import dataclass, replace\n\n@dataclass\nclass User:\n  name: str = \"Anonymous\"\n  age: int = 0\n\nuser = User(name=\"Liza\", age=23)\nupdated = replace(user, name=\"Ann\")\n\nuser == updated\n```\n\n## Contributing\n\nThe project is opened for any contributions (features, updates, fixes, etc). If you're interested,\nplease check\n[the contributing guidelines](https://github.com/alexeyraspopov/dataclass/blob/master/CONTRIBUTING.md).\n\nThe project is licensed under the\n[ISC](https://github.com/alexeyraspopov/dataclass/blob/master/LICENSE) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexeyraspopov%2Fdataclass","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexeyraspopov%2Fdataclass","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexeyraspopov%2Fdataclass/lists"}