Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/n2geoff/record.js

minimalistic, dead-simple object collection library
https://github.com/n2geoff/record.js

dataset in-memory json localstorage minimalist

Last synced: about 1 month ago
JSON representation

minimalistic, dead-simple object collection library

Awesome Lists containing this project

README

        

# Record.js

> A minimalistic object collection library

**Record.js** aims to provide a lite, *2kb*, *zero-dependency* collection utility to help build simple in-memory or local storage database of records. Records are stored as plain arrays.

Records can be exported to JSON, with no internal metadata[*], so you can import your data anywhere; via `.dump()`

### Features

- Tiny, only >2kb
- Zero-Dependencies
- Saves to LocalStorage (if available)
- Data saved, and exported as simple JSON
- Browser ESM or Nodejs (use `require('record.cjs.js').default`)

### Why

Sometimes having a simple single-user data storage library that stays out of your way while you prototype out your ideas is all you need. With a small footprint, removing/replacing a library like `record.js` is a breeze. Ideally, using this to library to build out configuration files, mock out test data, or even develop simple applications is where this shines. I use it for just that! I often replace this library once an idea becomes soluble; I export the data to JSON to a real DB and expand.

## Getting Started

- [Download Library](https://raw.githubusercontent.com/n2geoff/record.js/master/dist/record.min.js), then...

create a new record collection (in-memory)

const pets = new Record();

add something to the collection

pets.add({"name": "Fluffy", "type": "cat"});
// [{"id": "123fk91j7", "name": "Fluffy", "type": "cat"}]

an `id` field is auto-generated if not provided, this allows easy record retrieval via

pets.find("123fk91j7");
// [{"id": "123fk91j7", "name": "Fluffy", "type": "cat"}]

you can also find items via properties like

pets.find({"type": "cat"});
// [{"id": "123fk91j7", "name": "Fluffy", "type": "cat"}]

and when it comes time to update you can do that to

var fluffy = pets.find({"name": "Fluffy"})[0]; // one record
fluffy.age = 25;

pets.update(fluffy);

and you can remove items via

pets.remove("123fk91j7");
// [{"id": "123fk91j7", "name": "Fluffy", "type": "cat"}]

so, no records, right?

pets.find();
// []

### API

The public API is very simple, you really only need 4 methods: `add`, `update`, `remove`, and `find`.

| Method | Description |
|---|---|
| `.add(object)` | Adds entry to collection and returns entry(s) added |
| `.update(object)` | Updates a record |
| `.remove(id or object)` | Removes entry(s) from collection and returns removed |
| `.find(id or object)` | find all, find by id, or find by filter, returns array of entries |
| `.dump()` | saves records to JSON file |

#### Length (Count Records)
As `Records` are just plain JavaScript Arrays, you can use `.length` to determine the number of results returned, for example:

```js
let cats = pets.find({"type": "cat"}); // []
cats.length; // 0
```

> NOTICE: `find` is special, changes based on what you pass in, an id, an object, or nothing at all
- Additional [API Documentation](docs/api.md)

### Options

Records.js constructor supports a few options passed in as an `object`

- **store**: localStorage KEY to use. This actives localStorage if available
- **stores**: TBD
- **debug**: may logout useful information, maybe not;)
- **fields**: TBD

## Tests

npm test

## Build

npm install esbuild -g

npm run build

## Support

Please open [an issue](https://github.com/n2geoff/record.js/issues/new) for support.

## Contributing

Anyone is welcome to contribute, however, if you decide to get involved, please take a moment to review the [guidelines](CONTRIBUTING.md), there minimalistic;)

## License

[MIT](LICENSE)

---

> [*]: with exception of a generated ID, if not provided

## TODO

- make reactive, so just doing `fluffy.age = 25` updates