npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

tsrecord

v0.8.0

Published

ActiveRecord orm implementation using Typescript

Readme

tsrecord

ActiveRecord implementation using Typescript

Conventions

table name

  1. table name is plural it's corresponding class name should be its singular. for example the class Flight is equivalent to the table flights
  2. table name should be in lower case snake_case and its corresponding class name should be in CamelCase. example: person_names table will have equivalent class PersonName

table structure

  1. it assumes each table has a primary key with the name id

Example

Basic Table Mapping

example for table flights

###  table structure  ###
id int auto increment
name varchar(50)
route_from varchar(100)
route_to varchar(100)

the equivalent model class in typescript will be

class Flight extends Model{
    public id :number;
    public name :string;
    public route_from :string;
    public route_to :string;
}

or if you dont want the advatages of adding field names

class Flight {

}

now we can use this class for accessing the table

Basic Create Operation

you can insert data to the flights table like this.

var a = new Flight();
a.name = "Air india"
a.route_from = "india";
a.route_to = "Singapore";
a.save();

Basic Read Operation

you can perform Database Read in the Following Format

var a = new Flight();
a.all(
    (flights :Flight[])=>{
        console.log(flights);
    }
);
// or a.all(function(flight :Flight){...})
// but the former format will preserve 'this' from current class context

also if you don't want adavatages of adding :Flight[] you can use :any

here we get data to the callback function inside all method as an array of Flight object.

Read One Record

var a = new Flight();
a.first(
    (flight :Flight)=>{
        console.log(flight.name); //Air india
        console.log(flight.route_from) //india
        console.log(flight.route_to) //Singapore
    }
);

Basic Delete Operation


var flight = new Flight();
flight.where("id","2").delete();

Basic Update Operation


var a = new Flight();
a.where("id","1").first(
    (flight :Flight)=>{
        flight.name = "Air Asia"
        flight.route_from = "Shanghai" 
        flight.save();
    }
);

Overriding Table Name or key

You can use @TableOverride decorator for overriding tablename or key.


@TableOverride({
    tableName:"flights"
})
class random extends Model{
    public id :number;
    public name :string;
    public route_from :string;
    public route_to :string;
}