{"id":17349262,"url":"https://github.com/co2-git/maeva","last_synced_at":"2025-09-25T20:19:57.607Z","repository":{"id":68258953,"uuid":"66733105","full_name":"co2-git/maeva","owner":"co2-git","description":"ORM in nodejs","archived":false,"fork":false,"pushed_at":"2018-03-08T02:22:23.000Z","size":565,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-01T16:23:21.894Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/co2-git.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":"2016-08-27T19:59:09.000Z","updated_at":"2017-11-30T04:04:23.000Z","dependencies_parsed_at":"2023-02-22T21:15:34.043Z","dependency_job_id":null,"html_url":"https://github.com/co2-git/maeva","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/co2-git%2Fmaeva","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/co2-git%2Fmaeva/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/co2-git%2Fmaeva/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/co2-git%2Fmaeva/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/co2-git","download_url":"https://codeload.github.com/co2-git/maeva/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245841692,"owners_count":20681184,"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-10-15T16:55:09.974Z","updated_at":"2025-09-25T20:19:52.567Z","avatar_url":"https://github.com/co2-git.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"maeva\n===\n\nJS models. Database agnostic.\n\n# Usage\n\n```js\nimport * as data from 'maeva';\nimport mongodb from 'maeva-mongodb';\n\n// Define a model\nconst players = data.model('players', {\n  name: String,\n  score: Number,\n  isCaptain: Boolean\n});\n\n// Use a data connector to connect to a database server\nconst connector = mongodb('mongodb://localhost');\nconst connection = data.connect(connector);\n\n// Now you can fire requests to the database server\nawait data.insertOne(players, {\n  name: 'Joe',\n  score: 100,\n  isCaptain: true\n});\n\n// Find first 100 players sorted by score\nawait data.findMany(players, {\n  isCaptain: true,\n  name: /jo/,\n  score: data.above(0)\n}, {sort: 'score', range: 100});\n```\n\n# Client/Server architecture\n\n`maeva` has been developed with the dichotomy client/server in mind. That's why we provide connectors for the two most basic ways a client app would fire queries: HTTP(s) and Web Sockets.\n\n## HTTP example\n\nIn your server app:\n\n```js\nimport * as data from 'maeva';\nimport postgres from 'maeva-postgresql';\nimport http from 'maeva-http';\n\nconst db = data.connect(postgres('pql://mypostgresserver.com'));\ndata.connect(http.server('http://myserver.com', {connector: db}));\n```\n\nIn your client app:\n\n```js\nimport * as data from 'maeva';\nimport http from 'maeva-http';\n\nconst usersModel = data.model('users', {email: String});\ndata.connect(http('http://myserver.com'));\nconst users = await data.findMany(usersModel);\n```\n\n## Web Sockets example\n\nIn your server app:\n\n```js\nimport * as data from 'maeva';\nimport postgres from 'maeva-postgresql';\nimport sockets from 'maeva-sockets';\n\nconst db = data.connect(postgres('pql://mypostgresserver.com'));\ndata.connect(sockets.server('ws://myserver.com', {connector: db}));\n```\n\nIn your client app:\n\n```js\nimport * as data from 'maeva';\nimport sockets from 'maeva-sockets';\n\nconst usersModel = data.model('users', {email: String});\ndata.connect(sockets('ws://myserver.com'));\nconst users = await data.findMany(usersModel);\n```\n\n# Connectors\n\n## Most popular databases\n\n- [maeva-firebase](https://npmjs.org/packages/maeva-firebase) FireBase connector\n- [maeva-mongodb](https://npmjs.org/packages/maeva-mongodb) MongoDB connector\n- [maeva-mysql](https://npmjs.org/packages/maeva-mysql) MySQL connector\n- [maeva-postgresql](https://npmjs.org/packages/maeva-postgresql) PostGreSQL connector\n\n## JavaScript databases\n\n- [maeva-json](https://npmjs.org/packages/maeva-json) A json database that lives in memory - with an option to persist data in storage\n\n## Client APIs\n\n- [maeva-http](https://npmjs.org/packages/maeva-http) A built-in HTTP API you can plug to any maeva connector\n- [maeva-sockets](https://npmjs.org/packages/maeva-sockets) A built-in Web Socket API you can plug to any maeva connector\n\n# Docs\n\n- [Guide](doc/guides/)\n  - [Quick start](doc/guides/Quick%20start.md)\n  - [Core concepts and design principles](doc/guides/Core%20concepts%20and%20design%20principles.md)\n  - [Model](doc/guides/Model.md)\n  - [Hooks](doc/guides/Hooks.md)\n  - [Connect](doc/guides/Connect.md)\n  - [Create your own connector](doc/guides/Create%20your%20own%20connector.md)\n  - [Ids](doc/guides/Ids.md)\n  - [Coding styles](doc/guides/Coding%20styles.md)\n  - [Back and front ends integrations](doc/guides/Back%20and%20front%20ends%20integrations.md)\n- API\n  - [Actions](./doc/actions)\n    - [count](./doc/actions/Count.md)\n    - [findById](./doc/actions/findById.md)\n    - [findByIds](./doc/actions/findByIds.md)\n    - [findMany](./doc/actions/FindMany.md)\n    - [findOne](./doc/actions/FindOne.md)\n    - [insertMany](./doc/actions/InsertMany.md)\n    - [insertOne](./doc/actions/InsertOne.md)\n    - [removeById](./doc/actions/removeById.md)\n    - [removeByIds](./doc/actions/removeByIds.md)\n    - [removeMany](./doc/actions/RemoveMany.md)\n    - [removeOne](./doc/actions/RemoveOne.md)\n    - [updateById](./doc/actions/updateById.md)\n    - [updateByIds](./doc/actions/updateByIds.md)\n    - [updateMany](./doc/actions/UpdateMany.md)\n    - [updateOne](./doc/actions/UpdateOne.md)\n  - [Connections](./doc/connections)\n    - [connect](./doc/connections/Connect.md)\n    - [connected](./doc/connections/Connected.md)\n    - [disconnect](./doc/connections/Disconnect.md)\n    - [disconnected](./doc/connections/Disconnected.md)\n    - [reconnect](./doc/connections/Reconnect.md)\n  - Models\n    - [model](./doc/guides/Model.md)\n  - [Types](./doc/types)\n    - [any](./doc/types/Any.md)\n    - [array](./doc/types/Array.md)\n    - [link](./doc/types/Link.md)\n    - [mixed](./doc/types/Mixed.md)\n    - [shape](./doc/types/Shape.md)\n    - [tuple](./doc/types/Tuple.md)\n    - [type](./doc/types/Type.md)\n  - [Updaters](./doc/updaters)\n    - [divide](./doc/updaters/Divide.md)\n    - [subtract](./doc/updaters/Subtract.md)\n    - [sum](./doc/updaters/Sum.md)\n    - [times](./doc/updaters/Times.md)\n  - [Values](./doc/values)\n    - [above](./doc/values/Above.md)\n    - [after](./doc/values/After.md)\n    - [before](./doc/values/Before.md)\n    - [below](./doc/values/Below.md)\n    - [like](./doc/values/Like.md)\n    - [match](./doc/values/Match.md)\n    - [not](./doc/values/Not.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fco2-git%2Fmaeva","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fco2-git%2Fmaeva","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fco2-git%2Fmaeva/lists"}