# gm-database

> Local binary database

Latest version **1.0.9** (published 2022-04-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install gm-database
pnpm add gm-database
yarn add gm-database
bun add gm-database
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.9 |
| Published | 2022-04-23 |
| First published | 2022-04-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 18 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Guild MAnager |
| Maintainers | guild-manager |
| Keywords | database, local database, db, guild manager, gm-database |

## Links

- npm: https://www.npmjs.com/package/gm-database
- npm.io page: https://npm.io/package/gm-database

## Alternatives

- [angular-pipes](https://npm.io/package/angular-pipes.md) — 5.6K weekly downloads
- [@ng-web-apis/midi](https://npm.io/package/@ng-web-apis/midi.md) — 2.6K weekly downloads
- [happn-3](https://npm.io/package/happn-3.md) — 1.6K weekly downloads
- [@opensip-cli/lang-go](https://npm.io/package/@opensip-cli/lang-go.md) — 1.2K weekly downloads
- [mongoose-typescript](https://npm.io/package/mongoose-typescript.md) — 85 weekly downloads

## Recent versions

- 1.0.9 (latest) — 2022-04-23
- 1.0.8 — 2022-04-23
- 1.0.7 — 2022-04-23
- 1.0.6 — 2022-04-23
- 1.0.5 — 2022-04-23
- 1.0.4 — 2022-04-23
- 1.0.3 — 2022-04-23
- 1.0.2 — 2022-04-23
- 1.0.1 — 2022-04-23
- 1.0.0 — 2022-04-23

## README

# gm-database

Este paquete no es una base de datos, el paquete te ayuda a guardar información en archivos locales simulando una base de datos. Los archivos son procesados en JSON pero se almacenan en código binario **no encriptado**.

## Antes de usar
Antes de poder usar este paquete, tienes que crear una carpeta llamada `gm-database` en el primer nivel de tu proyecto, no recomendamos editar manualmente los archivos creados ya que podría fallar la conversión de binario a json al requerir estos archivos.

El paquete no retornara nunca un error, en caso de error retornará un objeto con 3 propiedades: `{error: Boolean, code: Number, message: String}`

`La versión 1.0.3 usa el binario para guardar, la 1.0.4 lo guarda directamente como JSON`

## Métodos
### checkDirectory(dir_name)
Verifica si una carpeta existe dentro de la carpeta principal.
### createDirectory(dir_name)
Crea una carpeta dentro de la carpeta principal.
### deleteDirectory(dir_name)
Elimina una carpeta y todos los archivos que contiene.
### createFile(dir_name, file_name)
Crea un archivo con un objecto vacío dentro de una carpeta.
### deleteFile(dir_name, file_name)
Elimina una archivo dentro de una carpeta.
### updateFile(dir_name, file_name, data_object)
Actualiza las propiedades del archivo dentro de una carpeta.
### rewriteFile(dir_name, file_name, data_object)
Actualiza todo el objeto del archivo.
### createSingleFile(dir_name, file_name)
Crea un archivo compartido para guardar objetos que podrán ser buscados.
### setSinglePage(dir_name, file_name, key, data_object)
Añade objetos a un archivo compartido.
### findSinglePage(dir_name, file_name, key)
Busca objetos en un archivo compartido.
### deleteSinglePage(dir_name, file_name, key)
Elimina objetos de un archivo compartido.

## Plugins
### plugins.expiringFiles
> ### createStream(dir_name, file_name, time, key?)
> Elimina un archivo al pasar cierto tiempo, introduce una key en caso de que el archivo sea compartido y solo se quiera eliminar un objeto de él.
> ### fetchStreams()
> Elimina todos los archivos que tendrían que ser eliminados, este método se ejecuta automáticamente cada hora.

```js
  const db = require('gm-database');

  let directory = await db.checkDirectory('users'); // Busca la carpeta
  if(directory) await db.createDirectory('users'); // Crea la carpeta

  /* --------------------------- */

  await db.deleteDirectory('users'); // Elimina la carpeta

  /* --------------------------- */

  let user = await db.getFile('users', 'user_1'); // Obtiene los datos del usuario 1
  /*
  {
    name: 'Lucas',
    last_names: ['Garcia', 'Sanchez'],
    phone: '6271825828',
    id: '0020273617a',
    age: 18
  }
  */
  
  await db.updateFile('users', 'user_1', {name: 'Martín'}); // Actualiza solo el nombre
  /*
  {
    name: 'Martín',
    last_names: ['Garcia', 'Sanchez'],
    phone: '6271825828',
    id: '0020273617a',
    age: 18
  }
  */

  await db.rewriteFile('users', 'user_1', {name: 'Lucía'}); // Actualiza todo el documento
  /*
  {
    name: 'Lucía'
  }
  */

  /* --------------------------- */

  await db.deleteFile('users', 'user_1'); // Elimina el documento

  /* --------------------------- */

  await db.createSingleFile('users', 'user_info'); // Prepara un archivo
  await db.setSinglePage('users', 'user_names', '0020273617a', {name: 'Martín'}) // Guarda un dato en un archivo compartido con el id "0020273617a"

  let user = await db.findSinglePage('users', 'user_names', '0020273617a'); // Busca un dato de un archivo compartido
  /*
    {
      key: "0020273617a",
      name: "Martín"
    }
  */

  await db.deleteSinglePage('users', 'user_names', '0020273617a'); // Elimina un dato de un archivo compartido

  /* --------------------------- */

  let ten_hours = 10 * 60 * 60 * 1000
  await db.plugins.expiringFiles.createStream('users', 'user_1', ten_hours); // Elimina un archivo pasado cierto tiempo

  await db.plugins.expiringFiles.fetchStreams() // Se buscan los archivos que se tienen que eliminar, este método se ejecuta automáticamente cada hora

  await db.plugins.expiringFiles.createStream('users', 'user_names', ten_hours, '0020273617a'); // Si se añade un key se eliminará el dato de un archivo compartido
```

---
_Source: https://npm.io/package/gm-database · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
