{"id":15059622,"url":"https://github.com/maximoleinyk/atbox","last_synced_at":"2025-10-17T07:46:28.240Z","repository":{"id":79593706,"uuid":"105376957","full_name":"maximoleinyk/atBox","owner":"maximoleinyk","description":"Pretty clever text box that supports query DSL which does make sense!","archived":false,"fork":false,"pushed_at":"2017-11-26T21:56:07.000Z","size":30507,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-11T01:04:04.881Z","etag":null,"topics":["at-box","autosuggest","elm","elm-architecture","elm-community","elm-dom","elm-lang","elm-language","elm-test","fsm","input","lexer","parser","rich-text-editor","smart-text-box","textbox","translator","web","web-component","webpack"],"latest_commit_sha":null,"homepage":"","language":"Elm","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/maximoleinyk.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,"zenodo":null}},"created_at":"2017-09-30T14:51:23.000Z","updated_at":"2019-09-27T19:36:58.000Z","dependencies_parsed_at":"2023-04-13T18:02:25.521Z","dependency_job_id":null,"html_url":"https://github.com/maximoleinyk/atBox","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maximoleinyk/atBox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximoleinyk%2FatBox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximoleinyk%2FatBox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximoleinyk%2FatBox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximoleinyk%2FatBox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maximoleinyk","download_url":"https://codeload.github.com/maximoleinyk/atBox/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximoleinyk%2FatBox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279304351,"owners_count":26144039,"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-17T02:00:07.504Z","response_time":56,"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":["at-box","autosuggest","elm","elm-architecture","elm-community","elm-dom","elm-lang","elm-language","elm-test","fsm","input","lexer","parser","rich-text-editor","smart-text-box","textbox","translator","web","web-component","webpack"],"created_at":"2024-09-24T22:46:03.732Z","updated_at":"2025-10-17T07:46:28.235Z","avatar_url":"https://github.com/maximoleinyk.png","language":"Elm","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/maximoleinyk/atBox.svg?branch=master)](https://travis-ci.org/maximoleinyk/atBox)\n\n# Demo\n![](https://github.com/maximoleinyk/atBox/blob/master/resources/demo.gif)\n\n# Specification\n             \n## Is\n        \n### Case 1.1.1:\ninput = `find a person whose @name is Maksym`\n```\noutput = {\n    \"field\": \"name\",\n    \"operator\": \"==\",\n    \"value\": \"Maksym\"\n}\n```       \n\n### Case 1.1.2:\ninput = `find person whose @name is \"Maksym\"`\n\n```\noutput = {\n    \"field\": \"name\",\n    \"operator\": \"==\",\n    \"value\": \"Maksym\"\n}\n```\n   \n### Case 1.1.3:\ninput = `find a person whose @name is \"Maksym Oliinyk\"`\n```\noutput = {\n    \"field\": \"name\",\n    \"operator\": \"==\",\n    \"value\": \"Maksym Oliinyk\"\n}\n```\n    \n### Case 1.1.4:\ninput = `@name is \"Maksym Oliinyk\"`    \n```\noutput = {\n    \"field\": \"name\",\n    \"operator\": \"==\",\n    \"value\": \"Maksym Oliinyk\"\n}  \n```\n    \n### Case 1.1.5:\ninput = `find a person whose name Maksym`    \n```\noutput = null\n```\n\n### Case 1.1.6:\ninput = `find a person whose @ name is Maksym`    \n```\noutput = null   \n```\n\n### Case 1.1.7:\ninput = `find@name is Maksym`    \n```\noutput = null\n```\n\n### Case 1.1.8:\ninput = `@@@name is Max`    \n```\noutput = null\n```\n\n### Case 1.1.9:\ninput = `@nonexistingfield is Max`    \n```\noutput = [\n]        \n```\n\n### Case 1.1.10:\ninput = `@name could be or is Maksym Oliinyk`    \n```\noutput = null \n```\n    \n## Is not\n\n### Case 1.2.1:\ninput = `@name is not Maksym`    \n```\noutput = {\n    \"field\": \"name\",\n    \"operator\": \"!=\",\n    \"value\": \"Maksym\"\n}\n```\n\n### Case 1.2.2:\ninput = `@name is something not something Maksym`    \n```\noutput = {\n    \"field\": \"name\",\n    \"operator\": \"==\",\n    \"value\": \"Maksym\"\n} \n```\n\n### Case 1.2.3:\ninput = `find a person whose @name is not Maksym Oliinyk`    \n```\noutput = {\n    \"field\": \"name\",\n    \"operator\": \"!=\",\n    \"value\": \"Maksym\"\n}    \n```\n\n### Case 1.2.4:\ninput = `@name is not \"Maksym Oliinyk\"`    \n```\noutput = {\n    \"field\": \"name\",\n    \"operator\": \"!=\",\n    \"value\": \"Maksym Oliinyk\"\n}  \n```\n\n## Either or / Neither nor\n\n### Case 1.3.1:\ninput = `@forename is either Maksym or Viktor`    \n```\noutput = {\n    \"field\": \"forename\",\n    \"operator\": \"in\",\n    \"value\": [\n        \"\\\"Maksym\\\"\",\n        \"\\\"Viktor\\\"\"\n    ]\n} \n```\n\n### Case 1.3.2:\ninput = `@forename is neither Maksym nor Viktor`    \n```\noutput = {\n     \"field\": \"forename\",\n     \"operator\": \"not in\",\n     \"value\": [\n         \"\\\"Maksym\\\"\",\n         \"\\\"Viktor\\\"\"\n     ]\n}    \n```\n\n## And\n\n### Case 1.4.1:\ninput = `@forename is Maksym and @surname Oliinyk and @age is 26`    \n```\noutput = {\n    \"and\": [\n        {\n            \"and\": [\n                {\n                    \"field\": \"forename\",\n                    \"operator\": \"==\",\n                    \"value\": \"Maksym\"\n                },\n                null\n            ]\n        },\n        {\n            \"field\": \"age\",\n            \"operator\": \"==\",\n            \"value\": \"26\"\n        }\n    ]\n}\n```\n\n### Case 1.4.2:\ninput = `@age is 26 and @name is \"Maksym Oliinyk\"`    \n```\noutput = {\n    \"and\": [\n        {\n            \"field\": \"age\",\n            \"operator\": \"==\",\n            \"value\": \"26\"\n        },\n        {\n            \"field\": \"name\",\n            \"operator\": \"==\",\n            \"value\": \"Maksym Oliinyk\"\n        }\n    ]\n}  \n```\n\n### Case 1.4.3:\ninput = `@forename is Maksym and @surname is either Ivanov or Petrov`    \n```\noutput = {\n    \"and\": [\n        {\n            \"field\": \"forename\",\n            \"operator\": \"==\",\n            \"value\": \"Maksym\"\n        },\n        {\n            \"field\": \"surname\",\n            \"operator\": \"in\",\n            \"value\": [\n                \"\\\"Ivanov\\\"\",\n                \"\\\"Petrov\\\"\"\n            ]\n        }\n    ]\n}   \n```\n\n## Or\n\n### Case 1.5.1:\ninput = `@forename is Maksym or @surname Oliinyk`    \n```\noutput = {\n    \"or\": [\n        {\n            \"field\": \"forename\",\n            \"operator\": \"==\",\n            \"value\": \"Maksym\"\n        },\n        null\n    ]\n}   \n```\n\n### Case 1.5.2:\ninput = `@forename is Maksym and @surname is either Ivanov or Petrov \n            or @forename is Viktor and @surname is neither Sokolov nor Smirnov`             \n```\noutput = {\n    \"or\": [\n        {\n            \"and\": [\n                {\n                    \"field\": \"forename\",\n                    \"operator\": \"==\",\n                    \"value\": \"Maksym\"\n                },\n                {\n                    \"field\": \"surname\",\n                    \"operator\": \"in\",\n                    \"value\": [\n                        \"\\\"Ivanov\\\"\",\n                        \"\\\"Petrov\\\"\"\n                    ]\n                }\n            ]\n        },\n        {\n            \"and\": [\n                {\n                    \"field\": \"forename\",\n                    \"operator\": \"==\",\n                    \"value\": \"Viktor\"\n                },\n                {\n                    \"field\": \"surname\",\n                    \"operator\": \"not in\",\n                    \"value\": [\n                        \"\\\"Sokolov\\\"\",\n                        \"\\\"Smirnov\\\"\"\n                    ]\n                }\n            ]\n        }\n    ]\n}  \n```\n\n## In\n\n### Case 1.6.1:\ninput = `@forename is in (Maksym, Viktor)`    \n```\noutput = {\n    \"field\": \"forename\",\n    \"operator\": \"in\",\n    \"value\": [\n        \"\\\"Maksym\\\"\",\n        \"\\\"Viktor\\\"\"\n    ]\n}    \n```\n\n### Case 1.6.2:\ninput = `@forename is in ()`    \n```\noutput = {\n    \"field\": \"forename\",\n    \"operator\": \"in\",\n    \"value\": []\n} \n```\n\n### Case 1.6.3:\ninput = `@forename is in`    \n```\noutput = null   \n```\n\n### Case 1.7.1:\ninput = `@forename is in (Maksym, Viktor) or @forename is not in (Alex, Julia)`    \n```\noutput = \n    \"or\": [\n        {\n            \"field\": \"forename\",\n            \"operator\": \"in\",\n            \"value\": [\n                \"\\\"Maksym\\\"\",\n                \"\\\"Viktor\\\"\"\n            ]\n        },\n        {\n            \"field\": \"forename\",\n            \"operator\": \"not in\",\n            \"value\": [\n                \"\\\"Alex\\\"\",\n                \"\\\"Julia\\\"\"\n            ]\n        }\n    ]\n}\n```\n\n### Case 1.7.2:\ninput = `((@name is either Max or Joe) or (@surname is neither Oliinyk nor Doe)) \n            and ((@age is not 27) or (@forename is Oliinyk)) \n                or @surname is not Smirnov`\n```\noutput = {\n    \"or\": [\n        {\n            \"and\": [\n                {\n                    \"or\": [\n                        {\n                            \"field\": \"name\",\n                            \"operator\": \"in\",\n                            \"value\": [\n                                \"Max\",\n                                \"Joe\"\n                            ]\n                        },\n                        {\n                            \"field\": \"surname\",\n                            \"operator\": \"not in\",\n                            \"value\": [\n                                \"Oliinyk\",\n                                \"Doe\"\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"or\": [\n                        {\n                            \"field\": \"age\",\n                            \"operator\": \"!=\",\n                            \"value\": \"27\"\n                        },\n                        {\n                            \"field\": \"forename\",\n                            \"operator\": \"==\",\n                            \"value\": \"Oliinyk\"\n                        }\n                    ]\n                }\n            ]\n        },\n        {\n            \"field\": \"surname\",\n            \"operator\": \"!=\",\n            \"value\": \"Smirnov\"\n        }\n    ]\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximoleinyk%2Fatbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaximoleinyk%2Fatbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximoleinyk%2Fatbox/lists"}