Socket
Socket
Sign inDemoInstall

lowdb

Package Overview
Dependencies
Maintainers
1
Versions
76
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lowdb - npm Package Compare versions

Comparing version 2.0.3 to 2.1.0

lib/adapters/TextFile.d.ts

5

lib/adapters/JSONFile.d.ts
import { Adapter } from '../Low.js';
export declare class JSONFile<T> implements Adapter<T> {
private filename;
private writer;
private adapter;
constructor(filename: string);
read(): Promise<T | null>;
write(obj: unknown): Promise<void>;
write(obj: T): Promise<void>;
}

22

lib/adapters/JSONFile.js

@@ -1,24 +0,18 @@

import fs from 'fs';
import { Writer } from 'steno';
import { TextFile } from './TextFile.js';
export class JSONFile {
constructor(filename) {
this.filename = filename;
this.writer = new Writer(filename);
this.adapter = new TextFile(filename);
}
async read() {
let data;
try {
data = await fs.promises.readFile(this.filename, 'utf-8');
const data = await this.adapter.read();
if (data === null) {
return null;
}
catch (e) {
if (e.code === 'ENOENT') {
return null;
}
throw e;
else {
return JSON.parse(data);
}
return JSON.parse(data);
}
write(obj) {
return this.writer.write(JSON.stringify(obj, null, 2));
return this.adapter.write(JSON.stringify(obj, null, 2));
}
}
import { SyncAdapter } from '../LowSync.js';
export declare class JSONFileSync<T> implements SyncAdapter<T> {
private tempFilename;
filename: string;
private adapter;
constructor(filename: string);

@@ -6,0 +5,0 @@ read(): T | null;

@@ -1,25 +0,18 @@

import fs from 'fs';
import path from 'path';
import { TextFileSync } from './TextFileSync.js';
export class JSONFileSync {
constructor(filename) {
this.filename = filename;
this.tempFilename = path.join(path.dirname(filename), `.${path.basename(filename)}.tmp`);
this.adapter = new TextFileSync(filename);
}
read() {
let data;
try {
data = fs.readFileSync(this.filename, 'utf-8');
const data = this.adapter.read();
if (data === null) {
return null;
}
catch (e) {
if (e.code === 'ENOENT') {
return null;
}
throw e;
else {
return JSON.parse(data);
}
return JSON.parse(data);
}
write(obj) {
fs.writeFileSync(this.tempFilename, JSON.stringify(obj, null, 2));
fs.renameSync(this.tempFilename, this.filename);
this.adapter.write(JSON.stringify(obj, null, 2));
}
}

@@ -6,3 +6,5 @@ export * from './adapters/JSONFile.js';

export * from './adapters/MemorySync.js';
export * from './adapters/TextFile.js';
export * from './adapters/TextFileSync.js';
export * from './Low.js';
export * from './LowSync.js';

@@ -6,3 +6,5 @@ export * from './adapters/JSONFile.js';

export * from './adapters/MemorySync.js';
export * from './adapters/TextFile.js';
export * from './adapters/TextFileSync.js';
export * from './Low.js';
export * from './LowSync.js';
{
"name": "lowdb",
"version": "2.0.3",
"version": "2.1.0",
"description": "Tiny local JSON database for Node, Electron and the browser",

@@ -5,0 +5,0 @@ "type": "module",

@@ -21,3 +21,3 @@ # lowdb [![](http://img.shields.io/npm/dm/lowdb.svg?style=flat)](https://www.npmjs.org/package/lowdb) [![Node.js CI](https://github.com/typicode/lowdb/actions/workflows/node.js.yml/badge.svg)](https://github.com/typicode/lowdb/actions/workflows/node.js.yml)

To help with OSS funding, lowdb v2 is released under Parity license for a limited time. It'll be released under MIT license once the __goal of 100 [sponsors](https://github.com/sponsors/typicode)__ is reached (currently at 55) or in five months.
To help with OSS funding, lowdb v2 is released under Parity license for a limited time. It'll be released under MIT license once the __goal of 100 [sponsors](https://github.com/sponsors/typicode)__ is reached (currently at 57) or in five months.

@@ -98,2 +98,3 @@ Meanwhile, lowdb v2 can be freely used in Open Source projects. Sponsors can use it in any type of project.

}
const adapter = new JSONFile<Data>('db.json')
const db = new Low<Data>(adapter)

@@ -223,2 +224,6 @@

#### `TextFile` `TextFileSync`
Adapters for reading and writing text. Useful for creating custom adapters.
### Third-party adapters

@@ -230,3 +235,3 @@

You may want to create an adapter to write `db.data` to YAML, XML, ... or encrypt data.
You may want to create an adapter to write `db.data` to YAML, XML, encrypt data, a remote storage, ...

@@ -242,4 +247,4 @@ An adapter is a simple class that just needs to expose two methods:

class SyncAdapter {
read() { /* ... */ } // data
write(data) { /* ... */ } // void
read() { /* ... */ } // should return data
write(data) { /* ... */ } // should return nothing
}

@@ -275,2 +280,37 @@ ```

#### Custom serialization
To create an adapter for another format than JSON, you can use `TextFile` or `TextFileSync`.
For example:
```js
import { Adapter, Low, TextFile } from 'Low.js'
import YAML from 'yaml'
export class YAMLFile {
private adapter
constructor(filename: string) {
this.adapter = new TextFile(filename)
}
async read() {
const data = await this.adapter.read()
if (data === null) {
return null
} else {
return YAML.parse(data)
}
}
write(obj) {
return this.adapter.write(YAML.stringify(obj))
}
}
const adapter = new YAMLFile('file.yaml')
const db = new Low(adapter)
```
## Limits

@@ -277,0 +317,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc