@gasstack/db
TypeScript icon, indicating that this package has built-in type declarations

0.3.3 • Public • Published

@gasstack/db

The package is meant to enable the useage of a Google Sheet as a database-like store.

Description

The package allows to define schemas in a way similar to Drizzle and use them to create typed ContextRefs. The ContextRefs can be used with a typed basic CRUD API and as enablers of a more advanced ORM-like API. Through the basic ContextRefs is possible to read, insert, delete and update entities of a given sheet range, both singularly and by group of contiguous rows.

Using a ManagedContexRef is possible to opearate in memory, adding, removing or updating directly in place entity objects both with the possibility to rollback the operations or commit them.

Usage

The schema definition allows you to create a map-like object, specifing for each key both the data type and the position of the corresponding column in the sheet range. It is also possibile to decorate a field with modifiers hinting autogeration or readonlyness.

const mapping = {
  id: numeric("Num"),
  name: text(1),
  seq: serial(numeric(2)),
  fseq: formula(numeric(3)),
  score: boolean("Rank"),
  link: hyperLink("Link"),
};

The schema defined is than used to obtain ContextRefs:

const ctx = createContext<typeof mapping>(
  ss,
  { a1NotationRange: "ranges!O5:T5" },
  mapping
);

And use them with the CRUD or the ORM API:

let item = insertAt(
  ctx,
  {
    id: 5,
    name: "five",
    score: true,
    link: { url: "https://www.google.com", label: "Page 5" },
  },
  1
);

console.log(read(ctx));

const orm = createManagedContext(ctx);

item = orm.list()[0];

item.name = "test";

commit(orm);

Example

Have a look to the e2e test.

API

API Reference

Package Sidebar

Install

npm i @gasstack/db

Weekly Downloads

12

Version

0.3.3

License

MIT

Unpacked Size

31.4 kB

Total Files

5

Last publish

Collaborators

  • gcanossa