{"id":22010466,"url":"https://github.com/virtualstate/combinational","last_synced_at":"2026-04-15T18:31:18.345Z","repository":{"id":51541109,"uuid":"504764196","full_name":"virtualstate/combinational","owner":"virtualstate","description":null,"archived":false,"fork":false,"pushed_at":"2022-08-11T11:53:49.000Z","size":255,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-08T08:31:18.252Z","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/virtualstate.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE-OF-CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-18T06:30:40.000Z","updated_at":"2022-06-18T06:31:01.000Z","dependencies_parsed_at":"2022-08-22T05:01:12.455Z","dependency_job_id":null,"html_url":"https://github.com/virtualstate/combinational","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/virtualstate/combinational","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualstate%2Fcombinational","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualstate%2Fcombinational/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualstate%2Fcombinational/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualstate%2Fcombinational/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/virtualstate","download_url":"https://codeload.github.com/virtualstate/combinational/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualstate%2Fcombinational/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31854615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-11-30T02:13:11.108Z","updated_at":"2026-04-15T18:31:18.313Z","avatar_url":"https://github.com/virtualstate.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `@virtualstate/combinational`\n\nThis project is in semver alpha stage\n\n[//]: # (badges)\n\n### Support\n\n ![Node.js supported](https://img.shields.io/badge/node-%3E%3D16.0.0-blue) ![Deno supported](https://img.shields.io/badge/deno-%3E%3D1.17.0-blue) \n\n### Test Coverage\n\n ![100%25 lines covered](https://img.shields.io/badge/lines-100%25-brightgreen) ![100%25 statements covered](https://img.shields.io/badge/statements-100%25-brightgreen) ![100%25 functions covered](https://img.shields.io/badge/functions-100%25-brightgreen) ![100%25 branches covered](https://img.shields.io/badge/branches-100%25-brightgreen)\n\n[//]: # (badges)\n\n[//]: # (src/trying-to-write-documentation/combinational-how.tsx)\n\nimport {ok, h, descendants} from \"@virtualstate/focus\";\nimport {\n    And,\n    Boolean,\n    isBooleanFalseArray,\n    isBooleanTrueArray, Nand,\n    Nor,\n    Not,\n    Or,\n    Xnor,\n    Xor\n} from \"@virtualstate/combinational\";\n\n/**\n * This is living documentation, change this code, and on build, README.md will be updated\n *\n * Comments starting with /* (and not /**) will be treated as markdown\n * Code is treated as codeblocks\n *\n * To split code up, add an empty comment\n * A comment must have its starting \u0026 ending markers on their own lines\n\n# Hello\n\n```typescript jsx\nconst nodeTrue = \u003cBoolean\u003e{true}\u003c/Boolean\u003e\nconst nodeTrueNumber = \u003cBoolean\u003e{1}\u003c/Boolean\u003e\nconst nodeTrueString = \u003cBoolean\u003e{\" \"}\u003c/Boolean\u003e\nconst nodeTrueNode = \u003cBoolean\u003e\u003ctest /\u003e\u003c/Boolean\u003e\n\nconst nodeFalse = \u003cBoolean\u003e{false}\u003c/Boolean\u003e\nconst nodeFalseNumber = \u003cBoolean\u003e{0}\u003c/Boolean\u003e\nconst nodeFalseString = \u003cBoolean\u003e{\"\"}\u003c/Boolean\u003e\n\nasync function assertTrue(input: unknown): Promise\u003cvoid\u003e {\n    const booleans = await descendants(input);\n    ok(isBooleanTrueArray(booleans), `expected all to be true, got ${booleans}`);\n}\nasync function assertFalse(input: unknown): Promise\u003cvoid\u003e {\n    const booleans = await descendants(input);\n    ok(isBooleanFalseArray(booleans), `expected all to be false, got ${booleans}`);\n}\n\nawait assertTrue(nodeTrue);\nawait assertTrue(nodeTrueNumber);\nawait assertTrue(nodeTrueString);\nawait assertTrue(nodeTrueNode);\n\nawait assertFalse(nodeFalse);\nawait assertFalse(nodeFalseNumber);\nawait assertFalse(nodeFalseString);\n\nconst nodeAndTrue = (\n    \u003cAnd\u003e\n        {nodeTrue}\n        {nodeTrueNumber}\n        {nodeTrueString}\n        {nodeTrueNode}\n        {true}\n        {\" \"}\n        {1}\n        \u003ctest /\u003e\n    \u003c/And\u003e\n)\nconst nodeAndFalse = (\n    \u003cAnd\u003e\n        {nodeAndTrue}\n        {false}\n    \u003c/And\u003e\n);\n\nawait assertFalse(\u003cAnd /\u003e);\nawait assertTrue(nodeAndTrue);\nawait assertFalse(nodeAndFalse);\n\nconst not = (\n    \u003cNot\u003e\n        {nodeAndTrue}\n    \u003c/Not\u003e\n)\nconst notTrue = (\n    \u003cNot\u003e\n        {nodeAndFalse}\n    \u003c/Not\u003e\n);\n\nawait assertTrue(\u003cNot /\u003e);\nawait assertFalse(not);\nawait assertTrue(notTrue);\n\nconst or = (\n    \u003cOr\u003e\n        {nodeAndTrue}\n        {nodeAndFalse}\n    \u003c/Or\u003e\n)\nconst orFalse = (\n    \u003cOr\u003e\n        {nodeFalse}\n        {nodeAndFalse}\n    \u003c/Or\u003e\n);\n\nawait assertFalse(\u003cOr /\u003e);\nawait assertTrue(or);\nawait assertFalse(orFalse);\n\nconst nor = (\n    \u003cNor\u003e\n        {nodeAndTrue}\n        {nodeAndFalse}\n    \u003c/Nor\u003e\n)\nconst norTrue = (\n    \u003cNor\u003e\n        {nodeFalse}\n        {nodeAndFalse}\n    \u003c/Nor\u003e\n);\n\nawait assertTrue(\u003cNor /\u003e);\nawait assertFalse(nor);\nawait assertTrue(norTrue);\n\nconst xor = (\n    \u003cXor\u003e\n        {false}\n        {nodeFalse}\n    \u003c/Xor\u003e\n)\nawait assertFalse(\u003cXor /\u003e);\nawait assertFalse(xor);\nconst xorTrueOne = (\n    \u003cXor\u003e\n        {nodeFalse}\n        {nodeTrue}\n    \u003c/Xor\u003e\n)\nconst xorTrueOther = (\n    \u003cXor\u003e\n        {nodeAndTrue}\n        {orFalse}\n    \u003c/Xor\u003e\n);\nawait assertTrue(xorTrueOne);\nawait assertTrue(xorTrueOther);\nconst xorFalseAll = (\n    \u003cXor\u003e\n        {nodeAndTrue}\n        {true}\n        {nodeTrueString}\n    \u003c/Xor\u003e\n);\nawait assertFalse(xorFalseAll);\n\nconst xnor = (\n    \u003cXnor\u003e\n        {false}\n        {nodeFalse}\n        {nodeAndFalse}\n        {orFalse}\n    \u003c/Xnor\u003e\n);\nawait assertTrue(\u003cXnor /\u003e);\nawait assertTrue(xnor);\nconst xnorTrue = (\n    \u003cXnor\u003e\n        {true}\n        {nodeTrue}\n        {nodeAndTrue}\n        {or}\n    \u003c/Xnor\u003e\n);\nawait assertTrue(xnorTrue);\n\nconst xnorFalse = (\n    \u003cXnor\u003e\n        {true}\n        {nodeFalse}\n        {nodeAndTrue}\n        {or}\n    \u003c/Xnor\u003e\n);\nawait assertFalse(xnorFalse);\nconst xnorFalseOther = (\n    \u003cXnor\u003e\n        {true}\n        {nodeFalse}\n        {nodeAndTrue}\n        {orFalse}\n    \u003c/Xnor\u003e\n);\nawait assertFalse(xnorFalseOther);\n\nconst nand = (\n    \u003cNand\u003e\n        {false}\n        {nodeFalse}\n        {orFalse}\n    \u003c/Nand\u003e\n);\nawait assertTrue(\u003cNand /\u003e);\nawait assertTrue(nand);\nconst nandTrue = (\n    \u003cNand\u003e\n        {true}\n        {nodeFalse}\n        {orFalse}\n    \u003c/Nand\u003e\n);\nawait assertTrue(nandTrue);\nconst nandTrueOther = (\n    \u003cNand\u003e\n        {true}\n        {nodeAndTrue}\n        {orFalse}\n    \u003c/Nand\u003e\n);\nawait assertTrue(nandTrueOther);\nconst nandTrueAnother = (\n    \u003cNand\u003e\n        {true}\n        {nodeAndTrue}\n        {orFalse}\n        {or}\n    \u003c/Nand\u003e\n);\nawait assertTrue(nandTrueAnother);\nconst nandFalse = (\n    \u003cNand\u003e\n        {true}\n        {nodeAndTrue}\n        {nodeTrue}\n        {or}\n    \u003c/Nand\u003e\n);\nawait assertFalse(nandFalse);\n```\n\n[//]: # (src/trying-to-write-documentation/combinational-how.tsx)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirtualstate%2Fcombinational","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvirtualstate%2Fcombinational","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirtualstate%2Fcombinational/lists"}