You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

csr-controller

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

csr-controller

DB Controller for client side rendering

1.5.6
latest
Source
npmnpm
Version published
Weekly downloads
0
-100%
Maintainers
1
Weekly downloads
 
Created
Source

Database controllers for client side rendering

This is library for creating client side type-safe database controllers. Integrates out of box with typescript, ORM, Next.JS.

Installation

Install package with npm i csr-controller

Features

Creating controller

To create your first controller use:

    type User = {
        name: string,
        age: number
    } & CRUDBase;
    
    type UpdateUserType = User & CRUDBase;

	const UserController = createController<User, CRUDBase, UpdateUserType>({
		$url: 'user',
	})(crudTemplate)();

First, we can skip generics and just call createController(), but for type safety it is recommended way. Every Controller needs three generics:

  • Object type. In our case it's User
  • Create new object type. In our case it's default option - CRUDBase It is made as: { id: string | null }
  • Update object type, simillar to create new object type.

Calling the function, we must specify $url - it's the api path. We can also specify $base. It is default to "custom".

In our case, using UserController any action would fetch relativeServerPath:port/api/custom/user

Next, we must provide template. Here we provide crudTemplate. It is preferred when using web server as it makes direct fetch calls to api and can be shared between projects. In the feature there will be electronTemplate that makes IPC calls.

Adding controller behaviour

To add controller behaviour such as making database calls/fetching external api use:

const routes = controllerRegistry().register(UserController, {
    index: async () => {
        const users = await db.getUsers(); // Make call to database to fetch all users
        return users;
    },
    read: async data => {
        const user = await db.getUser({ id: data.id }); // Make call to database to fetch single user by id
        return user;
    }
}).handle();
Next.JS

To use our routes with Next, create page in api/[base]/[...nextcontroller]. Remember, base defaults to "custom".

import { withNextRoute } from "csr-controller/apiRoutes/next"
import { controllerRegistry } from "csr-controller/registry"

const routes = controllerRegistry().register(...).handle();

export default withNextRoute(routes, middlewareFoo, middlewareBar);

This API page will handle every request from registered controllers.

Client side rendering

// Get all users
const users = await UserController.index();

// Update user
const updatedUser = await UserController.update({ id: 1, /* Pass rest data here */ })

It is recommended to use useSWR hook when developing with React based frameworks like Next.JS

Keywords

controller

FAQs

Package last updated on 24 Mar 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts