Skip to content

Commit 3a9ef78

Browse files
committed
feat: update providers api
1 parent 0aa1887 commit 3a9ef78

File tree

14 files changed

+44
-60
lines changed

14 files changed

+44
-60
lines changed

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# stenodb [![](https://img.shields.io/npm/v/stenodb)](https://www.npmjs.org/package/stenodb)
22

3-
> ✍ Easy to use local JSON database. Ready to use in browser (localStorage, sessionStorage) and Node.js.
3+
> ✍ Easy to use local JSON database.
44
55
## Install
66

@@ -19,8 +19,9 @@ pnpm add stenodb
1919
| Package | Version | Description |
2020
| ------- | ------ | ----------- |
2121
| [@stenodb/node](./packages/node) | [![](https://img.shields.io/npm/v/@stenodb/node)](https://npm.im/@stenodb/node) | Node.js |
22-
| [@stenodb/browser](./packages/browser) | [![](https://img.shields.io/npm/v/@stenodb/browser)](https://npm.im/@stenodb/browser) | Browser storages (localStorage, sessionStorage) |
23-
| [@stenodb/nest](./packages/nest) | [![](https://img.shields.io/npm/v/@stenodb/nest)](https://npm.im/@stenodb/nest) | Nest.js module |
22+
| [@stenodb/browser](./packages/browser) | [![](https://img.shields.io/npm/v/@stenodb/browser)](https://npm.im/@stenodb/browser) | Browser (localStorage, sessionStorage) |
23+
| [@stenodb/nest](./packages/nest) | [![](https://img.shields.io/npm/v/@stenodb/nest)](https://npm.im/@stenodb/nest) | Nest.js |
24+
| [@stenodb/logger](./packages/logger) | [![](https://img.shields.io/npm/v/@stenodb/logger)](https://npm.im/@stenodb/logger) | Logger |
2425

2526
## Usage
2627

@@ -75,7 +76,7 @@ import { Users, User, Post } from './entities.js'
7576
const path = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'database')
7677
const initialData = new Users(new User('John Doe'))
7778
const adapter = new AsyncAdapter('users', Users, initialData)
78-
const provider = new NodeProvider(path)
79+
const provider = new NodeProvider({ path })
7980
const database = provider.createAsync(adapter)
8081

8182
await database.read()
@@ -160,7 +161,7 @@ export class UsersService implements OnModuleInit {
160161
constructor(private readonly stenoService: StenoService) {}
161162

162163
async onModuleInit(): Promise<void> {
163-
this.usersProvider = await this.stenoService.createAsync(
164+
this.usersProvider = await this.stenoService.create(
164165
'users',
165166
Users,
166167
new Users(

examples/with-browser-lodash/src/storage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { BrowserProvider, LocalStorage } from '@stenodb/browser'
2-
import { Steno } from '@stenodb/browser/types'
32
import lodash from 'lodash'
43
import { User, Users } from './entities.js'
4+
import type { Steno } from '@stenodb/browser'
55

66
export class BrowserWithLodash<T> {
77
chain: lodash.ExpChain<T>

examples/with-nest/src/app.service.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ export class UsersService implements OnModuleInit {
99
constructor(private readonly stenoService: StenoService) {}
1010

1111
async onModuleInit(): Promise<void> {
12-
this.usersProvider = await this.stenoService.createAsync(
12+
this.usersProvider = await this.stenoService.create(
1313
'users',
1414
Users,
1515
initialUsersData
1616
)
17+
18+
await this.usersProvider.read()
1719
}
1820

1921
get users(): CreateUserDto[] {

examples/with-node-lodash/src/index.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url'
44
import { AsyncAdapter, NodeProvider } from '@stenodb/node'
55
import lodash from 'lodash'
66
import { User, Users } from './entities.js'
7-
import type { Steno } from '@stenodb/node/types'
7+
import type { Steno } from '@stenodb/node'
88

99
export class NodeWithLodash<T> {
1010
chain: lodash.ExpChain<T>
@@ -33,11 +33,10 @@ export class NodeWithLodash<T> {
3333
const path = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'database')
3434
const initialData = new Users(new User(1, 'John Doe'))
3535
const adapter = new AsyncAdapter('users', Users, initialData)
36-
const provider = new NodeProvider(path)
36+
const provider = new NodeProvider({ path })
3737

38-
const database = new NodeWithLodash(provider.createAsync(adapter))
38+
const database = new NodeWithLodash(await provider.create(adapter))
3939
await database.read()
40-
await database.write()
4140

4241
function findUserById(id: number) {
4342
return database.chain.get('users').find({ id }).value()

examples/with-node/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ const logger = createLogger({
1818

1919
const initialData = new Users(new User('John Doe'))
2020
const adapter = new AsyncAdapter('users', Users, initialData)
21-
const provider = new NodeProvider(path, { logger })
21+
const provider = new NodeProvider({ path, logger })
2222

23-
const database = provider.createAsync(adapter)
23+
const database = await provider.create(adapter)
2424
await database.read()
2525
const post = new Post('Hello world')
2626
database.data?.users[0]?.addPost(post)

packages/browser/src/provider/BrowserProvider.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
import { StorageProvider } from './StorageProvider.js'
22
import type { Steno } from '../types.js'
3-
import type { CreateLogger } from '@stenodb/logger'
43

54
export class BrowserProvider {
6-
#options: Steno.BrowserProviderOptions | undefined
7-
#logger: CreateLogger
5+
#options: Steno.BrowserProviderOptions
86

9-
constructor(options?: Steno.BrowserProviderOptions) {
7+
constructor(options: Steno.BrowserProviderOptions = {}) {
108
this.#options = options
11-
this.#logger = options?.logger
129
}
1310

1411
private registerAdapterModules<T>(adapter: Steno.BrowserAdapter<T>) {
15-
if (!this.#logger) return
16-
const logger = this.#logger(adapter.name)
12+
if (!this.#options?.logger) return
13+
const logger = this.#options.logger(adapter.name)
1714
adapter.registerLogger(logger)
1815
}
1916

packages/nest/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export class UsersService implements OnModuleInit {
7676
constructor(private readonly stenoService: StenoService) {}
7777

7878
async onModuleInit(): Promise<void> {
79-
this.usersProvider = await this.stenoService.createAsync(
79+
this.usersProvider = await this.stenoService.create(
8080
'users',
8181
Users,
8282
new Users(

packages/nest/src/config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { ConfigurableModuleBuilder } from '@nestjs/common'
2-
import type { StenoOptions } from './types.js'
2+
import type { Steno } from '@stenodb/node'
33

44
export const {
55
ConfigurableModuleClass,
66
MODULE_OPTIONS_TOKEN,
77
OPTIONS_TYPE,
88
ASYNC_OPTIONS_TYPE
9-
} = new ConfigurableModuleBuilder<StenoOptions>()
9+
} = new ConfigurableModuleBuilder<Steno.NodeProviderOptions>()
1010
.setExtras({ isGlobal: false }, (definition, extras) => ({
1111
...definition,
1212
global: extras.isGlobal

packages/nest/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export * from './stenodb.module.js'
22
export * from './stenodb.service.js'
3-
export * from './types.js'
3+
export { Steno } from '@stenodb/node'
Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,22 @@
11
import { Inject, Injectable } from '@nestjs/common'
2-
import { AsyncAdapter, NodeProvider, SyncAdapter } from '@stenodb/node'
2+
import { AsyncAdapter, NodeProvider } from '@stenodb/node'
33
import { MODULE_OPTIONS_TOKEN, OPTIONS_TYPE } from './config.js'
44
import type { Steno } from '@stenodb/node'
55

66
@Injectable()
77
export class StenoService {
88
private readonly provider: NodeProvider
99

10-
constructor(
11-
@Inject(MODULE_OPTIONS_TOKEN) private readonly options: typeof OPTIONS_TYPE
12-
) {
13-
this.provider = new NodeProvider(options.path)
10+
constructor(@Inject(MODULE_OPTIONS_TOKEN) options: typeof OPTIONS_TYPE) {
11+
this.provider = new NodeProvider(options)
1412
}
1513

1614
async create<T>(
17-
name: string,
15+
fileName: string,
1816
entity: Steno.Entity<T>,
1917
initialData?: T
2018
): Promise<Steno.NodeProvider<T>> {
21-
const adapter = new SyncAdapter(name, entity, initialData)
22-
const db = await this.provider.create(adapter)
23-
db.read()
24-
return db
25-
}
26-
27-
async createAsync<T>(
28-
name: string,
29-
entity: Steno.Entity<T>,
30-
initialData?: T
31-
): Promise<Steno.NodeProvider<T>> {
32-
const adapter = new AsyncAdapter(name, entity, initialData)
33-
const db = await this.provider.createAsync(adapter)
34-
await db.read()
35-
return db
19+
const adapter = new AsyncAdapter(fileName, entity, initialData)
20+
return await this.provider.create(adapter)
3621
}
3722
}

0 commit comments

Comments
 (0)