dbfs-utils 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +14 -0
- package/package.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# dbfs-utils
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
|
|
3
|
+
export type DBFSKey = string[] | string;
|
|
4
|
+
export type DBFSPossibleValueType = string | boolean | number | null | Record<string, unknown> | unknown[] | Buffer;
|
|
5
|
+
export declare class DBFS {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(dataDir: string, entriesJSONDir?: string | undefined, entriesBinaryDir?: string | undefined);
|
|
8
|
+
init(): Promise<void>;
|
|
9
|
+
get<T extends DBFSPossibleValueType>(inputKey: DBFSKey): Promise<T | undefined>;
|
|
10
|
+
getValidated<V extends z.ZodType>(inputKey: DBFSKey, validationSchema: V): Promise<z.infer<V> | undefined>;
|
|
11
|
+
set<T extends DBFSPossibleValueType>(inputKey: DBFSKey, value: T, ttlMs?: number): Promise<T | undefined>;
|
|
12
|
+
exists(inputKey: DBFSKey): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* @returns `true` if key was removed, `false` if key was not found.
|
|
15
|
+
*/
|
|
16
|
+
del(inputKey: DBFSKey): Promise<boolean>;
|
|
17
|
+
getKeysFromPrefix(inputKey: DBFSKey): Promise<string[]>;
|
|
18
|
+
delPrefix(inputKey: DBFSKey): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import x from"zod";import Z from"zod";var O=Z.string({error:(o)=>`Not a string: "${typeof o?.input}"`}).transform((o)=>o.trim()).refine((o)=>o!=="","String must not be empty"),n=Z.string({error:(o)=>`Not a string: "${typeof o?.input}"`}).transform((o)=>o.trim()).transform((o)=>o===""?null:o);var w=x.enum(["json","binary"]),B=x.string().regex(/^[a-z0-9]{32}$/,{error:(o)=>`Invalid entry id ${JSON.stringify(o?.input)}`}),M=x.object({id:B,type:w,createdAt:x.int(),updatedAt:x.int().nullable(),expiresAt:x.int().nullable()}),A=x.object({version:x.literal("1.0.0"),entries:x.record(O,M)});import{base32crockford as z,utf8 as C}from"@scure/base";import J from"crypto-random-string";import{existsSync as S}from"node:fs";import{access as G,constants as u,mkdir as $,readdir as E,readFile as R,writeFile as H}from"node:fs/promises";import{dirname as L,join as V,normalize as Q,resolve as W}from"node:path";import{gunzipSync as g,gzipSync as X}from"node:zlib";import{rimraf as Y}from"rimraf";import j from"zod";function U(){if(typeof process>"u"||typeof process?.env>"u")return!1;return typeof process.env?.NODE_ENV==="string"&&process.env?.NODE_ENV==="development"}function q(o){if(typeof o!=="string")return;try{return JSON.parse(o)}catch{return}}class v{#p;#x;#T;#o={version:"1.0.0",entries:{}};constructor(o,p=void 0,f=void 0){this.#p=Q(W(o)),this.#x=Q(W(p??V(this.#p,"entries"))),this.#T=Q(W(f??V(this.#p,"entries")))}#u(){return V(this.#p,"index.json.gz")}async#_(){if(S(this.#u())===!1)return A.parse({version:"1.0.0",entries:{}});return A.parse(q(C.encode(g((await R(this.#u())).buffer))))}async#$(){await H(this.#u(),X(JSON.stringify(this.#o)))}async init(){await $(this.#p,{mode:504,recursive:!0}),await G(this.#p,u.R_OK|u.W_OK),await $(this.#x,{mode:504,recursive:!0}),await G(this.#x,u.R_OK|u.W_OK),await $(this.#T,{mode:504,recursive:!0}),await G(this.#T,u.R_OK|u.W_OK),this.#o=await this.#_()}#f(o,p){if(o==="binary")return V(this.#T,p.substring(0,2),p+".bin");else return V(this.#x,p.substring(0,2),p+".json.gz")}#N(...o){let p=[];if(U())p.push("dev");for(let f of o)if(typeof f==="string")p.push(f);else p.push(...f);return p.join(":").replace(/^:+/,"").replace(/:+$/,"").replaceAll(/::+/g,":")}#c(){return z.encode(C.decode(J({length:128,type:"ascii-printable"}))).substring(0,32).toLocaleLowerCase()}async get(o){let p=this.#N(o),f=this.#o.entries?.[p]??void 0;if(typeof f>"u")return;if(typeof f.expiresAt==="number"&&f.expiresAt<Date.now()){await this.del(o);return}let N=this.#f(f.type,f.id),T=g((await R(N)).buffer);if(f.type==="binary")return Buffer.from(T);else return q(C.encode(T))}async getValidated(o,p){let f=await this.get(o);if(typeof f>"u")return;let N=await j.safeParseAsync(p,f);if(U()&&N.success===!1)console.error("zod validation failed"),console.error(j.prettifyError(N.error));return N?.data??void 0}async set(o,p,f){let N=this.#N(o),T=this.#o.entries?.[N]??void 0,_={id:T?.id??this.#c(),createdAt:T?.createdAt??Date.now(),updatedAt:typeof T>"u"?null:Date.now(),expiresAt:typeof f==="number"?Date.now()+f:null,type:T?.type??(typeof p==="object"&&p instanceof Buffer?"binary":"json")};this.#o.entries[N]=_,await this.#$();let c=this.#f(_.type,_.id);if(await $(L(c),{mode:504,recursive:!0}),_.type==="binary")await H(c,X(p),{mode:504});else await H(c,X(JSON.stringify(p)),{mode:504});return p}async exists(o){let p=this.#N(o);return typeof this.#o?.entries?.[p]<"u"}async#V(o){if((await E(o,{recursive:!1})).length===0)await Y(o,{preserveRoot:!0})}async del(o){let p=this.#N(o),f=this.#o.entries?.[p]??void 0;if(typeof f>"u")return!1;return delete this.#o.entries?.[p],await Y(this.#f(f.type,f.id)),await this.#V(L(this.#f(f.type,f.id))),!0}async getKeysFromPrefix(o){let p=this.#N(o)+":";return Object.keys(this.#o.entries).filter((N)=>N.startsWith(p))}async delPrefix(o){let p=await this.getKeysFromPrefix(o);for await(let f of p){let N=this.#o.entries?.[f]??void 0;if(typeof N>"u")continue;delete this.#o.entries?.[f],await Y(this.#f(N.type,N.id)),await this.#V(L(this.#f(N.type,N.id)))}}}export{v as DBFS};
|
|
2
|
+
|
|
3
|
+
//# debugId=FECC8CFAF391144264756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/schemas/dbfs.ts", "../src/schemas/string.ts", "../src/utils/dbfs.ts", "../src/utils/env.ts", "../src/utils/string.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import z from \"zod\";\nimport { NonEmptyString } from \"./string\";\n\nexport const EntryType = z.enum([\"json\", \"binary\"]);\nexport type EntryType = z.infer<typeof EntryType>;\n\nexport const EntryId = z\n\t.string()\n\t.regex(/^[a-z0-9]{32}$/, { error: (e) => `Invalid entry id ${JSON.stringify(e?.input)}` });\nexport type EntryId = z.infer<typeof EntryId>;\n\nexport const Entry = z.object({\n\tid: EntryId,\n\ttype: EntryType,\n\tcreatedAt: z.int(),\n\tupdatedAt: z.int().nullable(),\n\texpiresAt: z.int().nullable(),\n});\nexport type Entry = z.infer<typeof Entry>;\n\nexport const Database = z.object({\n\tversion: z.literal(\"1.0.0\"),\n\tentries: z.record(NonEmptyString, Entry),\n});\nexport type Database = z.infer<typeof Database>;\n",
|
|
6
|
+
"import z from \"zod\";\n\nexport const NonEmptyString = z\n\t.string({ error: (e) => `Not a string: \"${typeof e?.input}\"` })\n\t.transform((e) => e.trim())\n\t.refine((e) => e !== \"\", \"String must not be empty\");\nexport type NonEmptyString = z.infer<typeof NonEmptyString>;\n\nexport const NullableNonEmptyString = z\n\t.string({ error: (e) => `Not a string: \"${typeof e?.input}\"` })\n\t.transform((e) => e.trim())\n\t.transform((e) => (e === \"\" ? null : e));\nexport type NullableNonEmptyString = z.infer<typeof NullableNonEmptyString>;\n",
|
|
7
|
+
"import { Database, Entry, type EntryType } from \"@/schemas/dbfs\";\nimport type { DBFSKey, DBFSPossibleValueType } from \"@/types/dbfs\";\nimport { base32crockford, utf8 } from \"@scure/base\";\nimport cryptoRandomString from \"crypto-random-string\";\nimport { existsSync } from \"node:fs\";\nimport { access, constants, mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, normalize, resolve } from \"node:path\";\nimport { gunzipSync, gzipSync } from \"node:zlib\";\nimport { rimraf } from \"rimraf\";\nimport z from \"zod\";\nimport { isDev } from \"./env\";\nimport { safeParseJSON } from \"./string\";\n\nexport class DBFS {\n\t#dataDir: string;\n\t#entriesJSONDir: string;\n\t#entriesBinaryDir: string;\n\t#memoryDatabase: Database = { version: \"1.0.0\", entries: {} };\n\n\tconstructor(\n\t\tdataDir: string,\n\t\tentriesJSONDir: string | undefined = undefined,\n\t\tentriesBinaryDir: string | undefined = undefined\n\t) {\n\t\tthis.#dataDir = normalize(resolve(dataDir));\n\t\tthis.#entriesJSONDir = normalize(resolve(entriesJSONDir ?? join(this.#dataDir, \"entries\")));\n\t\tthis.#entriesBinaryDir = normalize(resolve(entriesBinaryDir ?? join(this.#dataDir, \"entries\")));\n\t}\n\n\t#getIndexFilePath(): string {\n\t\treturn join(this.#dataDir, \"index.json.gz\");\n\t}\n\n\tasync #readIndex(): Promise<Database> {\n\t\tif (existsSync(this.#getIndexFilePath()) === false) {\n\t\t\treturn Database.parse({ version: \"1.0.0\", entries: {} } satisfies Database);\n\t\t}\n\n\t\treturn Database.parse(\n\t\t\tsafeParseJSON(utf8.encode(gunzipSync((await readFile(this.#getIndexFilePath())).buffer)))\n\t\t);\n\t}\n\n\tasync #writeIndex(): Promise<void> {\n\t\tawait writeFile(this.#getIndexFilePath(), gzipSync(JSON.stringify(this.#memoryDatabase)));\n\t}\n\n\tasync init() {\n\t\tawait mkdir(this.#dataDir, { mode: 0o770, recursive: true });\n\t\tawait access(this.#dataDir, constants.R_OK | constants.W_OK);\n\n\t\tawait mkdir(this.#entriesJSONDir, { mode: 0o770, recursive: true });\n\t\tawait access(this.#entriesJSONDir, constants.R_OK | constants.W_OK);\n\n\t\tawait mkdir(this.#entriesBinaryDir, { mode: 0o770, recursive: true });\n\t\tawait access(this.#entriesBinaryDir, constants.R_OK | constants.W_OK);\n\n\t\tthis.#memoryDatabase = await this.#readIndex();\n\t}\n\n\t#getEntryPath(type: EntryType, entryId: string) {\n\t\tif (type === \"binary\") {\n\t\t\treturn join(this.#entriesBinaryDir, entryId.substring(0, 2), entryId + \".bin\");\n\t\t} else {\n\t\t\treturn join(this.#entriesJSONDir, entryId.substring(0, 2), entryId + \".json.gz\");\n\t\t}\n\t}\n\n\t#key(...inputKeys: DBFSKey[]): string {\n\t\tconst keys: string[] = [];\n\n\t\tif (isDev()) {\n\t\t\tkeys.push(\"dev\");\n\t\t}\n\n\t\tfor (const k of inputKeys) {\n\t\t\tif (typeof k === \"string\") {\n\t\t\t\tkeys.push(k);\n\t\t\t} else {\n\t\t\t\tkeys.push(...k);\n\t\t\t}\n\t\t}\n\n\t\treturn keys.join(\":\").replace(/^:+/, \"\").replace(/:+$/, \"\").replaceAll(/::+/g, \":\");\n\t}\n\n\t#generateEntryId(): string {\n\t\treturn base32crockford\n\t\t\t.encode(utf8.decode(cryptoRandomString({ length: 128, type: \"ascii-printable\" })))\n\t\t\t.substring(0, 32)\n\t\t\t.toLocaleLowerCase();\n\t}\n\n\tasync get<T extends DBFSPossibleValueType>(inputKey: DBFSKey): Promise<T | undefined> {\n\t\tconst key: string = this.#key(inputKey);\n\n\t\tconst databaseEntry = this.#memoryDatabase.entries?.[key] ?? undefined;\n\n\t\tif (typeof databaseEntry === \"undefined\") {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (typeof databaseEntry.expiresAt === \"number\" && databaseEntry.expiresAt < Date.now()) {\n\t\t\tawait this.del(inputKey);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst entryFilePath = this.#getEntryPath(databaseEntry.type, databaseEntry.id);\n\n\t\tconst entryFileGunzip = gunzipSync((await readFile(entryFilePath)).buffer);\n\n\t\tif (databaseEntry.type === \"binary\") {\n\t\t\treturn Buffer.from(entryFileGunzip) as T;\n\t\t} else {\n\t\t\treturn safeParseJSON(utf8.encode(entryFileGunzip)) as T;\n\t\t}\n\t}\n\n\tasync getValidated<V extends z.ZodType>(\n\t\tinputKey: DBFSKey,\n\t\tvalidationSchema: V\n\t): Promise<z.infer<V> | undefined> {\n\t\tconst value = await this.get(inputKey);\n\n\t\tif (typeof value === \"undefined\") {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst parsed = await z.safeParseAsync(validationSchema, value);\n\n\t\tif (isDev() && parsed.success === false) {\n\t\t\tconsole.error(\"zod validation failed\");\n\t\t\tconsole.error(z.prettifyError(parsed.error));\n\t\t}\n\n\t\treturn parsed?.data ?? undefined;\n\t}\n\n\tasync set<T extends DBFSPossibleValueType>(\n\t\tinputKey: DBFSKey,\n\t\tvalue: T,\n\t\tttlMs?: number\n\t): Promise<T | undefined> {\n\t\tconst key: string = this.#key(inputKey);\n\n\t\tconst existingDatabaseEntry = this.#memoryDatabase.entries?.[key] ?? undefined;\n\n\t\tconst databaseEntry: Entry = {\n\t\t\tid: existingDatabaseEntry?.id ?? this.#generateEntryId(),\n\t\t\tcreatedAt: existingDatabaseEntry?.createdAt ?? Date.now(),\n\t\t\tupdatedAt: typeof existingDatabaseEntry === \"undefined\" ? null : Date.now(),\n\t\t\texpiresAt: typeof ttlMs === \"number\" ? Date.now() + ttlMs : null,\n\t\t\ttype:\n\t\t\t\texistingDatabaseEntry?.type ??\n\t\t\t\t(typeof value === \"object\" && value instanceof Buffer ? \"binary\" : \"json\"),\n\t\t};\n\n\t\tthis.#memoryDatabase.entries[key] = databaseEntry;\n\t\tawait this.#writeIndex();\n\n\t\tconst entryFilePath = this.#getEntryPath(databaseEntry.type, databaseEntry.id);\n\n\t\tawait mkdir(dirname(entryFilePath), { mode: 0o770, recursive: true });\n\n\t\tif (databaseEntry.type === \"binary\") {\n\t\t\tawait writeFile(entryFilePath, gzipSync(value as Buffer), { mode: 0o770 });\n\t\t} else {\n\t\t\tawait writeFile(entryFilePath, gzipSync(JSON.stringify(value as T)), { mode: 0o770 });\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tasync exists(inputKey: DBFSKey): Promise<boolean> {\n\t\tconst key: string = this.#key(inputKey);\n\t\treturn typeof this.#memoryDatabase?.entries?.[key] !== \"undefined\";\n\t}\n\n\tasync #deleteEmptyFolder(dir: string): Promise<void> {\n\t\tconst items = await readdir(dir, { recursive: false });\n\n\t\tif (items.length === 0) {\n\t\t\tawait rimraf(dir, { preserveRoot: true });\n\t\t}\n\t}\n\n\t/**\n\t * @returns `true` if key was removed, `false` if key was not found.\n\t */\n\tasync del(inputKey: DBFSKey): Promise<boolean> {\n\t\tconst key: string = this.#key(inputKey);\n\n\t\tconst databaseEntry = this.#memoryDatabase.entries?.[key] ?? undefined;\n\n\t\tif (typeof databaseEntry === \"undefined\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tdelete this.#memoryDatabase.entries?.[key];\n\n\t\tawait rimraf(this.#getEntryPath(databaseEntry.type, databaseEntry.id));\n\t\tawait this.#deleteEmptyFolder(\n\t\t\tdirname(this.#getEntryPath(databaseEntry.type, databaseEntry.id))\n\t\t);\n\n\t\treturn true;\n\t}\n\n\tasync getKeysFromPrefix(inputKey: DBFSKey): Promise<string[]> {\n\t\tconst key: string = this.#key(inputKey) + \":\";\n\n\t\tconst allKeys = Object.keys(this.#memoryDatabase.entries);\n\n\t\treturn allKeys.filter((e) => e.startsWith(key));\n\t}\n\n\tasync delPrefix(inputKey: DBFSKey): Promise<void> {\n\t\tconst keys = await this.getKeysFromPrefix(inputKey);\n\n\t\tfor await (const key of keys) {\n\t\t\tconst databaseEntry = this.#memoryDatabase.entries?.[key] ?? undefined;\n\n\t\t\tif (typeof databaseEntry === \"undefined\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdelete this.#memoryDatabase.entries?.[key];\n\t\t\tawait rimraf(this.#getEntryPath(databaseEntry.type, databaseEntry.id));\n\t\t\tawait this.#deleteEmptyFolder(\n\t\t\t\tdirname(this.#getEntryPath(databaseEntry.type, databaseEntry.id))\n\t\t\t);\n\t\t}\n\t}\n}\n",
|
|
8
|
+
"export function isDev(): boolean {\n\tif (typeof process === \"undefined\" || typeof process?.env === \"undefined\") return false;\n\treturn typeof process.env?.NODE_ENV === \"string\" && process.env?.NODE_ENV === \"development\";\n}\n\nexport function isTest(): boolean {\n\tif (typeof process === \"undefined\" || typeof process?.env === \"undefined\") return false;\n\treturn typeof process.env?.NODE_ENV === \"string\" && process.env?.NODE_ENV === \"test\";\n}\n\nexport function isDebug(): boolean {\n\tif (isDev() === true) return true;\n\tif (isTest() === true) return true;\n\treturn typeof process.env?.DEBUG === \"string\" && process.env?.DEBUG === \"true\";\n}\n",
|
|
9
|
+
"export function typesafeIncludes<T>(arr: T[], includesItem: T): boolean {\n\treturn arr.includes(includesItem);\n}\n\nexport function safeParseJSON(input: unknown): unknown | undefined {\n\tif (typeof input !== \"string\") {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\treturn JSON.parse(input) as unknown;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"
|
|
10
|
+
],
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "FECC8CFAF391144264756E2164756E21",
|
|
13
|
+
"names": []
|
|
14
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dbfs-utils",
|
|
3
|
+
"main": "dist/index.js",
|
|
4
|
+
"exports": {
|
|
5
|
+
".": "./dist/index.js"
|
|
6
|
+
},
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"type": "module",
|
|
11
|
+
"version": "0.1.4",
|
|
12
|
+
"scripts": {
|
|
13
|
+
"format": "prettier --write --cache .",
|
|
14
|
+
"lint": "prettier --check . && eslint --cache .",
|
|
15
|
+
"build": "bun run ./build.ts"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@eslint/compat": "^2.0.0",
|
|
19
|
+
"@eslint/js": "^9.39.2",
|
|
20
|
+
"@types/bun": "latest",
|
|
21
|
+
"bun-plugin-dts": "^0.3.0",
|
|
22
|
+
"eslint": "^9.39.2",
|
|
23
|
+
"eslint-config-prettier": "^10.1.8",
|
|
24
|
+
"globals": "^17.0.0",
|
|
25
|
+
"prettier": "^3.7.4",
|
|
26
|
+
"prettier-plugin-eslint": "^1.0.2",
|
|
27
|
+
"typescript-eslint": "^8.52.0"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"typescript": "^5"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@scure/base": "^2.0.0",
|
|
37
|
+
"crypto-random-string": "^5.0.0",
|
|
38
|
+
"rimraf": "^6.1.3",
|
|
39
|
+
"zod": "^4.3.6"
|
|
40
|
+
}
|
|
41
|
+
}
|