Skip to content

Commit 6eb4014

Browse files
committed
feat: add presets to simplify use
1 parent ffa7ac6 commit 6eb4014

File tree

5 files changed

+53
-16
lines changed

5 files changed

+53
-16
lines changed

src/examples/browser.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
import { LocalStorage } from '../browser.js'
2-
import { LowSync } from '../index.js'
1+
import { WebStoragePreset } from '../presets/WebStoragePreset.js'
32

43
type Data = {
54
messages: string[]
65
}
7-
const adapter = new LocalStorage<Data>('db')
8-
const db = new LowSync<Data>(adapter, { messages: [] })
96

10-
db.read()
7+
const defaultData: Data = { messages: [] }
8+
const db = WebStoragePreset<Data>('db', defaultData)
9+
1110
db.data.messages.push('foo')
1211

1312
db.write()

src/examples/cli.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
import { LowSync } from '../index.js'
2-
import { JSONFileSync } from '../node.js'
1+
import { JSONSyncPreset } from '../presets/JSONPreset.js'
32

43
type Data = {
54
messages: string[]
65
}
76

87
const message = process.argv[2] || ''
98
const defaultData: Data = { messages: [] }
10-
const adapter = new JSONFileSync<Data>('file.json')
11-
const db = new LowSync<Data>(adapter, defaultData)
12-
13-
db.read()
9+
const db = JSONSyncPreset('file.json', defaultData)
1410

1511
db.data.messages.push(message)
1612

src/examples/server.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import express from 'express'
55
import asyncHandler from 'express-async-handler'
66

7-
import { Low } from '../index.js'
8-
import { JSONFile } from '../node.js'
7+
import { JSONPreset } from '../presets/JSONPreset.js'
98

109
const app = express()
1110
app.use(express.json())
@@ -19,9 +18,8 @@ type Data = {
1918
posts: Post[]
2019
}
2120

22-
const adapter = new JSONFile<Data>('db.json')
23-
const db = new Low<Data>(adapter, { posts: [] })
24-
await db.read()
21+
const defaultData: Data = { posts: [] }
22+
const db = await JSONPreset<Data>('db.json', defaultData)
2523

2624
// db.data can be destructured to avoid typing `db.data` everywhere
2725
const { posts } = db.data

src/presets/JSONPreset.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Memory, MemorySync } from '../adapters/Memory.js'
2+
import { JSONFile, JSONFileSync } from '../adapters/node/JSONFile.js'
3+
import { Low, LowSync } from '../core/Low.js'
4+
5+
export async function JSONPreset<Data>(
6+
filename: string | URL,
7+
defaultData: Data,
8+
dir?: string | URL,
9+
): Promise<Low<Data>> {
10+
const adapter =
11+
process.env.NODE_ENV === 'test'
12+
? new Memory<Data>()
13+
: new JSONFile<Data>(new URL(filename, dir))
14+
const db = new Low<Data>(adapter, defaultData)
15+
await db.read()
16+
return db
17+
}
18+
19+
export function JSONSyncPreset<Data>(
20+
filename: string | URL,
21+
defaultData: Data,
22+
dir?: string | URL,
23+
): LowSync<Data> {
24+
const adapter =
25+
process.env.NODE_ENV === 'test'
26+
? new MemorySync<Data>()
27+
: new JSONFileSync<Data>(new URL(filename, dir))
28+
const db = new LowSync<Data>(adapter, defaultData)
29+
db.read()
30+
return db
31+
}

src/presets/WebStoragePreset.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { WebStorage } from '../adapters/browser/WebStorage.js'
2+
import { LowSync } from '../index.js'
3+
4+
export function WebStoragePreset<Data>(
5+
key: string,
6+
defaultData: Data,
7+
storage: Storage = localStorage,
8+
) {
9+
const adapter = new WebStorage<Data>(key, storage)
10+
const db = new LowSync<Data>(adapter, defaultData)
11+
db.read()
12+
return db
13+
}

0 commit comments

Comments
 (0)