New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

bun-sqlite-key-value

Package Overview
Dependencies
Maintainers
0
Versions
73
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bun-sqlite-key-value - npm Package Compare versions

Comparing version 1.3.9 to 1.3.10

26

examples/multipleDatabasesExample.ts

@@ -21,3 +21,2 @@ import { BunSqliteKeyValue } from "../src"

settingsStore.set("screen-position", {top: 100, left: 100})
settingsStore.set("window-size", {height: 1000, width: 1000})

@@ -33,24 +32,7 @@ // Write languages

// -> [
// {
// key: "language",
// value: "de",
// }, {
// key: "page-size",
// value: "A4",
// }, {
// key: "screen-position",
// value: {
// top: 100,
// left: 100,
// },
// }, {
// key: "window-size",
// value: {
// height: 1000,
// width: 1000,
// },
// }
// {key: "language", value: "de"},
// {key: "page-size", value: "A4"},
// {key: "screen-position", value: {top: 100, left: 100}},
// ]
// Read all languages

@@ -60,3 +42,2 @@ const languageValues = languagesStore.getValues()

// Read current language

@@ -67,5 +48,4 @@ const languageKey = settingsStore.get("language")

// Explicitly close DBs
settingsStore.close()
languagesStore.close()

2

package.json
{
"name": "bun-sqlite-key-value",
"version": "1.3.9",
"version": "1.3.10",
"author": "Gerold Penz<gerold@gp-softwaretechnik.at>",

@@ -5,0 +5,0 @@ "repository": {

@@ -271,2 +271,3 @@ # Bun SQLite Key Value

import { BunSqliteKeyValue } from "bun-sqlite-key-value"
import { join } from "node:path"

@@ -291,3 +292,2 @@ import { exists, mkdir } from "node:fs/promises"

settingsStore.set("screen-position", {top: 100, left: 100})
settingsStore.set("window-size", {height: 1000, width: 1000})

@@ -303,24 +303,7 @@ // Write languages

// -> [
// {
// key: "language",
// value: "de",
// }, {
// key: "page-size",
// value: "A4",
// }, {
// key: "screen-position",
// value: {
// top: 100,
// left: 100,
// },
// }, {
// key: "window-size",
// value: {
// height: 1000,
// width: 1000,
// },
// }
// {key: "language", value: "de"},
// {key: "page-size", value: "A4"},
// {key: "screen-position", value: {top: 100, left: 100}},
// ]
// Read all languages

@@ -330,3 +313,2 @@ const languageValues = languagesStore.getValues()

// Read current language

@@ -337,3 +319,2 @@ const languageKey = settingsStore.get("language")

// Explicitly close DBs

@@ -340,0 +321,0 @@ settingsStore.close()

@@ -44,2 +44,5 @@ import { Database, type Statement } from "bun:sqlite"

private getItemsStartsWithStatement: Statement<RawItem>
private getKeyStatement: Statement<Omit<RawItem, "value">>
// private getAllKeysStatement: Statement<Omit<RawItem, "value">>
// private getKeysStartsWithStatement: Statement<Omit<RawItem, "value">>

@@ -82,2 +85,5 @@

this.deleteStatement = this.db.query("DELETE FROM items WHERE key = $key")
this.getKeyStatement = this.db.query("SELECT key, expires FROM items WHERE key = $key")
// this.getAllKeysStatement = this.db.query("SELECT key, expires FROM items")
// this.getKeysStartsWithStatement = this.db.query("SELECT key, expires FROM items WHERE key LIKE $startsWith")

@@ -95,4 +101,13 @@ // Delete expired items

delete(key: string) {
this.deleteStatement.run({key})
// Delete one or multiple items
delete(keyOrKeys: string | string[]) {
if (typeof keyOrKeys === "string") {
this.deleteStatement.run({key: keyOrKeys})
} else {
this.db.transaction(() => {
keyOrKeys.forEach((key) => {
this.deleteStatement.run({key})
})
})()
}
}

@@ -131,3 +146,3 @@

// Set ttlMs to 0 if you explicitly want to disable expiration.
setValue<T = any>(key: string, value: T, ttlMs?: number) {
set<T = any>(key: string, value: T, ttlMs?: number) {
let expires: number | undefined

@@ -142,7 +157,8 @@ ttlMs = ttlMs ?? this.ttlMs

// Alias for `setValue`
set = this.setValue
// Alias for `set`
setValue = this.set
getItem<T = any>(key: string): Item<T> | undefined {
// Get one value
get<T = any>(key: string): T | undefined {
const record = this.getItemStatement.get({key})

@@ -157,18 +173,20 @@ if (!record) return

}
return {
key,
value: value ? deserialize(value) as T : undefined
}
return value ? deserialize(value) as T : undefined
}
getValue<T = any>(key: string): T | undefined {
return this.getItem<T>(key)?.value || undefined
}
// Alias for `get`
getValue = this.get
// Alias for getValue
get = this.getValue
// Get one item (key, value)
getItem<T = any>(key: string): Item<T> | undefined {
return {
key,
value: this.get<T>(key)
}
}
// Get multiple items (key-value array)
getItems<T = any>(startsWithOrKeys?: string | string[]): Item<T>[] | undefined {

@@ -215,2 +233,3 @@ let records: RawItem[]

// Get multiple values as array
getValues<T = any>(startsWithOrKeys?: string | string[]): (T | undefined)[] | undefined {

@@ -225,12 +244,39 @@ return this.getItems<T>(startsWithOrKeys)?.map((result) => result.value)

getItemsObject<T = any>(startsWithOrKeys?: string | string[]): {[key: string]: T} | undefined {
// Get multiple items as object
getItemsObject<T = any>(startsWithOrKeys?: string | string[]): {[key: string]: T | undefined} | undefined {
const items = this.getItems(startsWithOrKeys)
if (!items) return
const result: {[key: string]: T} = {}
for (const item of items) {
result[item.key] = item.value
return Object.fromEntries(items.map(item => [item.key, item.value as T | undefined]))
}
// Get multiple items as Map()
getItemsMap<T = any>(startsWithOrKeys?: string | string[]): Map<string, T | undefined> | undefined {
const items = this.getItems(startsWithOrKeys)
if (!items) return
return new Map(items.map(item => [item.key, item.value as T | undefined]))
}
// Get multiple values as Set()
getValuesSet<T = any>(startsWithOrKeys?: string | string[]): Set<T> | undefined {
const values = this.getValues(startsWithOrKeys)
if (!values) return
return new Set(values)
}
// Checks if key exists
has(key: string): boolean {
const record = this.getKeyStatement.get({key})
if (!record) return false
if (record.expires) {
if (record.expires < Date.now()) {
this.delete(key)
return false
}
}
return result
return true
}
}

@@ -94,3 +94,16 @@ import { expect, test } from "bun:test"

test("Delete item", () => {
test("Caching with implicite TTL", async () => {
const store: BunSqliteKeyValue = new BunSqliteKeyValue(undefined, {ttlMs: 40})
store.set(KEY_1, STRING_VALUE_1)
store.set(KEY_2, STRING_VALUE_2)
store.set(KEY_3, STRING_VALUE_3)
await Bun.sleep(60)
expect(store.get(KEY_1)).toBeUndefined()
expect(store.get(KEY_2)).toBeUndefined()
expect(store.get(KEY_3)).toBeUndefined()
})
test("Delete one item", () => {
const store: BunSqliteKeyValue = new BunSqliteKeyValue()

@@ -104,2 +117,12 @@ store.set<string>(KEY_1, STRING_VALUE_1)

test("Delete multiple items", () => {
const store: BunSqliteKeyValue = new BunSqliteKeyValue()
store.set<string>(KEY_1, STRING_VALUE_1)
store.set<string>(KEY_2, STRING_VALUE_2)
store.set<string>(KEY_3, STRING_VALUE_3)
store.delete([KEY_1, KEY_2])
expect(store.length).toEqual(1)
})
test("Delete all items (clear)", () => {

@@ -281,13 +304,44 @@ const store: BunSqliteKeyValue = new BunSqliteKeyValue()

test("Caching with implicite TTL", async () => {
const store: BunSqliteKeyValue = new BunSqliteKeyValue(undefined, {ttlMs: 40})
test("Get items as Map", () => {
const store: BunSqliteKeyValue = new BunSqliteKeyValue()
store.set(KEY_1, STRING_VALUE_1)
store.set(KEY_2, STRING_VALUE_2)
store.set(KEY_3, STRING_VALUE_3)
await Bun.sleep(60)
expect(store.get(KEY_1)).toBeUndefined()
expect(store.get(KEY_2)).toBeUndefined()
expect(store.get(KEY_3)).toBeUndefined()
store.set<string>(KEY_1, STRING_VALUE_1)
store.set<string>(KEY_2, STRING_VALUE_2)
store.set(KEY_3, null)
expect(store.getItemsMap([
KEY_1,
KEY_2,
KEY_3,
"unknown-key"
])).toEqual(new Map([
[KEY_1, STRING_VALUE_1],
[KEY_2, STRING_VALUE_2],
[KEY_3, null],
["unknown-key", undefined],
]))
})
test("Get values as Set", () => {
const store: BunSqliteKeyValue = new BunSqliteKeyValue()
store.set<string>(KEY_1, STRING_VALUE_1)
store.set<string>(KEY_2, STRING_VALUE_2)
store.set(KEY_3, null)
expect(store.getValuesSet([
KEY_1, KEY_2, KEY_3, "unknown-key"
])).toEqual(new Set([
STRING_VALUE_1, STRING_VALUE_2, null, undefined
]))
})
test("Has key", () => {
const store: BunSqliteKeyValue = new BunSqliteKeyValue()
store.set<string>(KEY_1, STRING_VALUE_1)
expect(store.has(KEY_1)).toEqual(true)
expect(store.has(KEY_2)).toEqual(false)
})
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