GithubHelp home page GithubHelp logo

patarapolw / liteorm Goto Github PK

View Code? Open in Web Editor NEW
7.0 1.0 2.0 409 KB

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.

License: MIT License

TypeScript 97.78% JavaScript 2.22%
typescript-decorators sqlite orm

liteorm's Introduction

liteorm

A simple wrapper for sqlite; with typings based on TypeScript decorators and reflect-metadata.

npm version

  • Async eventemitter (emittery)
    • I make sure that you can intercept query objects and raw SQL (as well as their parameters) in an async way
  • Auto-define _id as PRIMARY KEY INTEGER AUTOINCREMENT (Use _id as default name for primary key)
    • I use ROWID, instead.
  • Auto-append createdAt, updatedAt if @Table({ timestamp: true })
  • JSON, Date, Boolean, and MongoDB interop
  • Additional type StringArray, inspired by Anki schema
  • Query with JSON, and tested with https://q2search.herokuapp.com/LiteORM, using MongoDB-like languages, with some differences (for example, $regex is currently not supported, use $like, $nlike, $substr, $nsubstr instead.)
  • JSON querying is supported via JSON1 extension. I made it easy to query using dot notation, just like MongoDB.
    • So, you can use data.a
  • Multiple SQLite databases, with cloned schemas or different schemas. Strongly-typed in the IDE.

Usage

Please see /tests/suites and ankisync.js

Installation

npm i liteorm
# or yarn add liteorm

Caveats

  • Type Number by default is associated with REAL. To change it to INTEGER, use
@prop({type: 'int'}) count!: number;
  • BLOB is associated with Type ArrayBuffer.
@prop() data!: ArrayBuffer;
  • To get a strongly-typed default / onUpdate, you might have to declare typing twice.
@prop<Record<string, string>>({ default: () => ({}) }) data!: Record<string, string>;
@prop<number, EntryClass>({ default: 1, onUpdate: (ent) => parseToInt(ent) }) order!: number;
  • You might have to declare your own interface to get keys for createdAt, updatedAt, because typing is based directly on Class.

liteorm's People

Contributors

patarapolw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

simhaonline

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.