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 🙏

© 2024 – Pkg Stats / Ryan Hefner

rsl

v0.0.24

Published

A language compiler for generating rest services and database connections

Downloads

10

Readme

RSL - REST Service Language

Introduction

REST Service Language is a JavaScript library for easily creating REST services based on entities. RSL generates all routes and the corresponding database schema. Also RSL provides you functionality for filtering and expanding data in your requests.

Documentation

Installation

You can easily install RSL using npm or yarn:

npm install --save rsl
yarn add rsl

Since RSL is currently a NodeJS-only package there aren't other options for installing.

Setup

To getting started with RSL you can directly import it:

const RSL = require('rsl');

With that you could create a new app object:

const app = new RSL({
    client: 'sqlite3',
    connection: {
        filename: "./mydb.sqlite"
    }
});

The object passed to the RSL constructor is a configuration object for Knex.js. See their documentation for further instructions how to configure different database clients.

To start the server you need to call listen on the app object with the port and a callback function as parameters:

app.listen(6586, () => console.log('Server is running'));

Defining a type

A type is defined by an RSL definition:

type User {
    name: String
    email: String
    birthday: Date
}

Possible types are for attributes are:

  • String (max. 255 characters)
  • Float
  • Integer
  • Date
  • Text
  • Boolean

You can also reference custom types:

type User {
    name: String
    email: String
    birthday: Date
}

type Message {
    body: Text
    from: User
    to: User
}

To pass the RSL definition to the app use the following code snippet:

const example = `
type User {
    name: String
    email: String
    birthday: Date
}

type Message {
    body: Text
    from: User
    to: User
}
`;

app.define(example);

That needs to be done before the listen function is called.

To have an array as type just add square brackets around the inner type:

type Car {
    color: [String]
}

Routes

Given this example definition...

type User {
    name: String
    email: String
    birthday: Date
}

...the following routes are generated:

GET /user - All users are returned
GET /user/:id - A specific user is returned
POST /user - Create a new user
PUT /user/:id - Update a specific user
DELETE /user/:id - A user is deleted

To prefix a url to the routes you can use the route keyword in the definition:

route /api/v1.0

type User {
    name: String
    email: String
    birthday: Date
}

Only use one route statement per definition!

Static content

To serve also static content, you can call the static function on the app object.

app.static({
    path: path.resolve(__dirname, 'public'),
    route: '/'
});

The path option is the absolute path to the root folder. The route option defines where the content should be served to.

Filter results

When calling a GET route without id you can pass a filtering option via query parameter.

Example:

GET /api/user?filter=id=1

If you want to pass multiple seperate them with a ,.

It is currently not possible to filter for expanded data or array data.

Expanding results

When calling any GET route you can pass a expanding option via query parameters. All named attributes with a custom type will then be expanded into full objects instead of returning the id of the corresponding object. You can also add multiple attributes by seperating with a ,.

Example:

GET /api/message?expand=to,from