Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/roberthgnz/lsdb

Typed localStorage database powered by with JSON definition
https://github.com/roberthgnz/lsdb

database hacktoberfest localstorage project

Last synced: about 2 hours ago
JSON representation

Typed localStorage database powered by with JSON definition

Awesome Lists containing this project

README

        

# lsdb

[![CI](https://github.com/roberthgnz/lsdb/actions/workflows/main.yml/badge.svg)](https://github.com/roberthgnz/lsdb/actions/workflows/main.yml)
[![Issues](https://img.shields.io/github/issues/roberthgnz/lsdb)](https://github.com/roberthgnz/lsdb/issues)
[![Forks](https://img.shields.io/github/forks/roberthgnz/lsdb)](https://github.com/roberthgnz/lsdb)
[![Stars](https://img.shields.io/github/stars/roberthgnz/lsdb)](https://github.com/roberthgnz/lsdb)
[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg)](#contributors-)

Typed localStorage database powered by with JSON definition

## Features

- 📦 Tree-shakeable
- ⚡ Fast
- ✨ Lightweight
- ❤️ Strongly typed

## Installation

```bash
npm i @reliutg/lsdb
```

## With Skypack

no npm install needed!

```html

import Lsdb from 'https://cdn.skypack.dev/@reliutg/lsdb';

```

## We’ll start by setting up a database:

```js
const lsdb = new Lsdb('dbname');
```

## Creating list of collections

```js
// Create multiple collections
lsdb.collection(['categories', 'articles']);
// Create single collection
lsdb.collection('categories');
```

## Inserting

```js
lsdb.insert('categories', { title: 'Drinks' });
lsdb.insert('categories', { title: 'Dinner' });
lsdb.insert('categories', { title: 'Breakfast' });
lsdb.insert('articles', { title: 'Coffee', category: 'Drinks' });
```

```js
lsdb.insertMany('categories', [{ title: 'Drinks' }, { title: 'Dinner' }, { title: 'Breakfast' }]);
```

## Getting data

Get single collection or all collection entries

```js
lsdb.all();
// {categories: Array(2), articles: Array(0)}

lsdb.all('categories');
// [{title: 'Drinks'}, {title: 'Dinner'}, {title: 'Breakfast'}]
```

Get a list of documents

```js
lsdb.find('categories', {
where: {
category: { $in: ['Drinks'] },
},
});

lsdb.find('articles', {
where: {
category: { $eq: 'Drinks' },
},
});

lsdb.find('articles', {
sort: {
field: 'title',
order: 'asc'
},
limit: 2,
skip: 1,
});
```

### Find Options

| Field | Type | Description | Default | Required |
| ------- | -------- | ----------------------- | ----------- | -------- |
| `where` | `Object` | Filter by object | `undefined` | `false` |
| `sort` | `Object` | Sort by field name | `undefined` | `false` |
| `limit` | `number` | Limit number of results | `undefined` | `false` |
| `skip` | `number` | Skip number of results | `0` | `false` |

### Available operators for where

Based on [MongoDB](https://docs.mongodb.com/manual/reference/operator/query/#query-selectors) query selectors

- `$eq` - Equal
- `$in` - In
- `$nin` - Not in
- `$ne` - Not equal
- `$gt` - Greater than
- `$gte` - Greater than or equal
- `$lt` - Less than
- `$lte` - Less than or equal

Get a single document matching the query

```js
lsdb.findOne('categories', {
where: {
_id: { $eq: id },
},
});
```

## Updating

Update a single document matching the query

```js
lsdb.update('categories', {
where: {
_id: { $eq: id },
},
});
```

## Removing

Remove a single document matching the query

```js
lsdb.delete('categories', {
where: {
_id: { $eq: id },
},
});
```

## Contributors ✨

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):



Aneesh Relan

⚠️ 💻

Zymantas Maumevicius

🚇 💻

Nitkalya Wiriyanuparb

⚠️ 💻

Connor Ruggles

🚇 💻

MAKSS

📖

Vasiliy Vanchuk

💻

Pablo

💻

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!