Skip to content

Latest commit

 

History

History
121 lines (98 loc) · 2.68 KB

README.md

File metadata and controls

121 lines (98 loc) · 2.68 KB

prostgles-server

Isomorphic PostgreSQL client for node

GitHub license npm version Tests

New: JSONB schema runtime validation and TS types

Features

  • CRUD operations with end-to-end type safety
  • Auto-Generated TypeScript Definition for Database schema
  • Subscriptions to data and schema changes
  • Fine grained access control
  • Optimistic data replication

Installation

$ npm install prostgles-server

Quick start

import prostgles from "prostgles-server";
import prostgles from "prostgles-server";

prostgles({
  dbConnection: {
    host: "localhost",
    port: "5432",
    user: process.env.PG_USER,
    password: process.env.PG_PASS,
  },
  tsGeneratedTypesDir: __dirname,
  onReady: async ({ dbo }) => {
    const posts = await dbo.posts.find(
      { title: { $ilike: "%car%" } },
      {
        orderBy: { created: -1 },
        limit: 10,
      },
    );
  },
});

Server-Client usage

server.js

const express = require("express");
const app = express();
const path = require("path");
var http = require("http").createServer(app);
var io = require("socket.io")(http);
http.listen(3000);

let prostgles = require("prostgles-server");

prostgles({
  dbConnection: {
    host: "localhost",
    port: "5432",
    user: process.env.PRGL_USER,
    password: process.env.PRGL_PWD,
  },
  io,
  publish: "*", // Unrestricted INSERT/SELECT/UPDATE/DELETE access to the tables in the database
  onReady: async (dbo) => {},
});

react.tsx

const App = () => {
  const { isLoading, dbo } = useProstglesClient();
  if (isLoading) return null;
  return <>Database tables: {Object.keys(dbo)}</>;
};

./public/index.html

<!DOCTYPE html>
<html>
  <head>
    <title>Prostgles</title>

    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script
      src="https://unpkg.com/socket.io-client@latest/dist/socket.io.min.js"
      type="text/javascript"
    ></script>
    <script
      src="https://unpkg.com/prostgles-client@latest/dist/index.js"
      type="text/javascript"
    ></script>
  </head>
  <body>
    <script>
      prostgles({
        socket: io(),
        onReady: async ({ dbo, dbsMethods, schemaTables, auth }) => {},
      });
    </script>
  </body>
</html>

License

MIT