{"id":15059573,"url":"https://github.com/panukettu/pkxp-forge-ts-json","last_synced_at":"2026-05-05T09:32:22.954Z","repository":{"id":257791082,"uuid":"861315390","full_name":"panukettu/pkxp-forge-ts-json","owner":"panukettu","description":"Writes inner object values to JSON files and generates solidity types and getters for them.","archived":false,"fork":false,"pushed_at":"2024-09-23T18:49:47.000Z","size":16,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-04T02:47:49.424Z","etag":null,"topics":["forge","json","solidity","typescript"],"latest_commit_sha":null,"homepage":"","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/panukettu.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}},"created_at":"2024-09-22T15:17:03.000Z","updated_at":"2024-09-30T13:19:50.000Z","dependencies_parsed_at":"2024-09-24T22:45:36.997Z","dependency_job_id":null,"html_url":"https://github.com/panukettu/pkxp-forge-ts-json","commit_stats":null,"previous_names":["panukettu/pk-forge-ts-json"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/panukettu/pkxp-forge-ts-json","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panukettu%2Fpkxp-forge-ts-json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panukettu%2Fpkxp-forge-ts-json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panukettu%2Fpkxp-forge-ts-json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panukettu%2Fpkxp-forge-ts-json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/panukettu","download_url":"https://codeload.github.com/panukettu/pkxp-forge-ts-json/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panukettu%2Fpkxp-forge-ts-json/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32643615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"online","status_checked_at":"2026-05-05T02:00:06.033Z","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":["forge","json","solidity","typescript"],"created_at":"2024-09-24T22:45:35.805Z","updated_at":"2026-05-05T09:32:22.918Z","avatar_url":"https://github.com/panukettu.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# forge + ts + json\n\nWrites object keys to JSON files and generates solidity types and getters for them.\n\n## Install\n\n`bun i @pkxp/forge-ts-json` or `forge install panukettu/pkxp-forge-ts-json`\n\n## Input\n\n```typescript\nimport { toSolidityJSON } from '@pkxp/forge-ts-json';\n\nconst foo = {\n  amount: 1,\n  amountETH: 10_000.15e18,\n  value: -11e16,\n  description: 'hello',\n  qux: {\n    enabled: true,\n    values: [1, 2, 3],\n  },\n};\n\nconst bar = {\n  foo,\n  abc: 'def',\n  similar: {\n    foo,\n    bar: 10,\n    amount: -10,\n  },\n  baz: {\n    val: '0x12342AAABBBCCCDDDDDDDDDD111111111111111121491294219491294129491249129491',\n    val2: '0x12342AAABBBCCCDDDDDDDDDD1111111111111111214912',\n    addr: '0x12342AAABBBCCCDDDDDDDDDD1111111111111111',\n    foo,\n    similar2: {\n      foo,\n      bar: 10,\n      amount: -15,\n    },\n  },\n};\n\ntoSolidityJSON(\n  { bar, foo, baz: { c: 'd' }, foo2: foo, baz2: { c: 'd' } },\n  { name: 'Types', dirJSON: 'temp', dirSOL: 'src' } // all optional, dirSOL default is 'profile.default.src' from foundry.toml\n);\n```\n\n## Solidity Output\n\nAbove snippet generates the following solidity at `src/Types.sol`:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ITypes {\n\tstruct Bar {\n\t\tFoo foo;\n\t\tstring abc;\n\t\tBarSimilar similar;\n\t\tBarBaz baz;\n\t}\n\n\tstruct BarSimilar {\n\t\tFoo foo;\n\t\tuint256 bar;\n\t\tint256 amount;\n\t}\n\n\tstruct BarBaz {\n\t\tbytes val;\n\t\tbytes32 val2;\n\t\taddress addr;\n\t\tFoo foo;\n\t\tBarSimilar similar2;\n\t}\n\n\tstruct Foo {\n\t\tuint256 amount;\n\t\tuint256 amountETH;\n\t\tint256 value;\n\t\tstring description;\n\t\tFooQux qux;\n\t}\n\n\tstruct FooQux {\n\t\tbool enabled;\n\t\tuint256[] values;\n\t}\n\n\tstruct Baz {\n\t\tstring c;\n\t}\n}\n\ncontract Types is ITypes {\n\taddress private constant vm = address(uint160(uint256(keccak256(\"hevm cheat code\"))));\n\n\tfunction getBar() internal virtual view returns (Bar memory) {\n\t\treturn abi.decode(getJSON(\"bar.json\"), (Bar));\n\t}\n\n\tfunction getFoo() internal virtual view returns (Foo memory) {\n\t\treturn abi.decode(getJSON(\"foo.json\"), (Foo));\n\t}\n\n\tfunction getBaz() internal virtual view returns (Baz memory) {\n\t\treturn abi.decode(getJSON(\"baz.json\"), (Baz));\n\t}\n\n\tfunction getFoo2() internal virtual view returns (Foo memory) {\n\t\treturn abi.decode(getJSON(\"foo2.json\"), (Foo));\n\t}\n\n\tfunction getBaz2() internal virtual view returns (Baz memory) {\n\t\treturn abi.decode(getJSON(\"baz2.json\"), (Baz));\n\t}\n\n\tfunction getJSON(string memory path) private view returns (bytes memory) {\n\t\t(, bytes memory data) = vm.staticcall(bytes.concat(hex'60f9bb11', abi.encode(path)));\n\t\t(, bytes memory json) = vm.staticcall(bytes.concat(hex'6a82600a', data));\n\t\treturn abi.decode(json, (bytes));\n\t}\n}\n```\n\n## JSON Output\n\nExample snippet generates `temp/bar.json`, `temp/foo.json`, `temp/foo2.json`, `temp/baz.json`, `temp/baz2.json`\n\nAll inner keys are renamed to match struct order when parsing in solidity, eg. `temp/bar.json`:\n\n```json\n{\n  \"00_foo\": {\n    \"00_amount\": 1,\n    \"01_amountETH\": 1.000015e22,\n    \"02_value\": -110000000000000000,\n    \"03_description\": \"hello\",\n    \"04_qux\": {\n      \"00_enabled\": true,\n      \"01_values\": [1, 2, 3]\n    }\n  },\n  \"01_abc\": \"def\",\n  \"02_similar\": {\n    \"00_foo\": {\n      \"00_amount\": 1,\n      \"01_amountETH\": 1.000015e22,\n      \"02_value\": -110000000000000000,\n      \"03_description\": \"hello\",\n      \"04_qux\": {\n        \"00_enabled\": true,\n        \"01_values\": [1, 2, 3]\n      }\n    },\n    \"01_bar\": 10,\n    \"02_amount\": -10\n  },\n  \"03_baz\": {\n    \"00_val\": \"0x12342AAABBBCCCDDDDDDDDDD111111111111111121491294219491294129491249129491\",\n    \"01_val2\": \"0x12342AAABBBCCCDDDDDDDDDD1111111111111111214912\",\n    \"02_addr\": \"0x12342AAABBBCCCDDDDDDDDDD1111111111111111\",\n    \"03_foo\": {\n      \"00_amount\": 1,\n      \"01_amountETH\": 1.000015e22,\n      \"02_value\": -110000000000000000,\n      \"03_description\": \"hello\",\n      \"04_qux\": {\n        \"00_enabled\": true,\n        \"01_values\": [1, 2, 3]\n      }\n    },\n    \"04_similar2\": {\n      \"00_foo\": {\n        \"00_amount\": 1,\n        \"01_amountETH\": 1.000015e22,\n        \"02_value\": -110000000000000000,\n        \"03_description\": \"hello\",\n        \"04_qux\": {\n          \"00_enabled\": true,\n          \"01_values\": [1, 2, 3]\n        }\n      },\n      \"01_bar\": 10,\n      \"02_amount\": -15\n    }\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpanukettu%2Fpkxp-forge-ts-json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpanukettu%2Fpkxp-forge-ts-json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpanukettu%2Fpkxp-forge-ts-json/lists"}