{"id":15692687,"url":"https://github.com/patarapolw/liteorm","last_synced_at":"2025-06-27T22:06:05.088Z","repository":{"id":56254864,"uuid":"206831974","full_name":"patarapolw/liteorm","owner":"patarapolw","description":"A simple wrapper for sqlite; with typings based on TypeScript decorators and reflect-metadata. With async eventemitter (emittery). Focusing on JSON, Date, and MongoDB interop.","archived":false,"fork":false,"pushed_at":"2023-08-03T06:55:27.000Z","size":409,"stargazers_count":7,"open_issues_count":4,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-09T14:13:07.583Z","etag":null,"topics":["orm","sqlite","typescript-decorators"],"latest_commit_sha":null,"homepage":"","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/patarapolw.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}},"created_at":"2019-09-06T16:19:01.000Z","updated_at":"2022-12-22T02:05:04.000Z","dependencies_parsed_at":"2024-06-19T20:04:20.111Z","dependency_job_id":"657edc64-19e7-457c-ae95-ca7f8eb78f95","html_url":"https://github.com/patarapolw/liteorm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/patarapolw/liteorm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fliteorm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fliteorm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fliteorm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fliteorm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patarapolw","download_url":"https://codeload.github.com/patarapolw/liteorm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fliteorm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262341618,"owners_count":23296069,"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":["orm","sqlite","typescript-decorators"],"created_at":"2024-10-03T18:37:42.472Z","updated_at":"2025-06-27T22:06:05.064Z","avatar_url":"https://github.com/patarapolw.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# liteorm\n\nA simple wrapper for [sqlite](https://www.npmjs.com/package/sqlite); with typings based on [TypeScript decorators](https://www.typescriptlang.org/docs/handbook/decorators.html) and [reflect-metadata](https://www.npmjs.com/package/reflect-metadata).\n\n[![npm version](https://badge.fury.io/js/liteorm.svg)](https://badge.fury.io/js/liteorm)\n\n- Async eventemitter ([emittery](https://www.npmjs.com/package/emittery))\n  - I make sure that you can intercept query objects and raw SQL (as well as their parameters) in an async way\n- ~~Auto-define `_id` as `PRIMARY KEY INTEGER AUTOINCREMENT` (Use `_id` as default name for primary key)~~\n  - I use ROWID, instead.\n- Auto-append `createdAt`, `updatedAt` if `@Table({ timestamp: true })`\n- JSON, Date, Boolean, and MongoDB interop\n- Additional type `StringArray`, inspired by [Anki schema](https://github.com/ankidroid/Anki-Android/wiki/Database-Structure)\n- Query with JSON, and tested with \u003chttps://q2search.herokuapp.com/LiteORM\u003e, using MongoDB-like languages, with some differences (for example, `$regex` is currently not supported, use `$like`, `$nlike`, `$substr`, `$nsubstr` instead.)\n- JSON querying is supported via JSON1 extension. I made it easy to query using dot notation, just like MongoDB.\n  - So, you can use `data.a`\n- Multiple SQLite databases, with cloned schemas or different schemas. Strongly-typed in the IDE.\n\n## Usage\n\nPlease see [/tests/suites](https://github.com/patarapolw/liteorm/tree/master/tests/suites) and [ankisync.js](https://github.com/patarapolw/ankisync.js)\n\n## Installation\n\n```sh\nnpm i liteorm\n# or yarn add liteorm\n```\n\n## Caveats\n\n- Type `Number` by default is associated with `REAL`. To change it to `INTEGER`, use\n\n```ts\n@prop({type: 'int'}) count!: number;\n```\n\n- `BLOB` is associated with Type `ArrayBuffer`.\n\n```ts\n@prop() data!: ArrayBuffer;\n```\n\n- To get a strongly-typed `default` / `onUpdate`, you might have to declare typing twice.\n\n```ts\n@prop\u003cRecord\u003cstring, string\u003e\u003e({ default: () =\u003e ({}) }) data!: Record\u003cstring, string\u003e;\n@prop\u003cnumber, EntryClass\u003e({ default: 1, onUpdate: (ent) =\u003e parseToInt(ent) }) order!: number;\n```\n\n- You might have to declare your own interface to get keys for `createdAt`, `updatedAt`, because typing is based directly on Class.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatarapolw%2Fliteorm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatarapolw%2Fliteorm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatarapolw%2Fliteorm/lists"}