@ostore/db
Version:
基于文件系统的轻量级 NoSQL 数据库【Lightweight file-based NoSQL database】
1 lines • 29.1 kB
Source Map (JSON)
{"version":3,"sources":["../src/types.ts","../src/Document.ts","../src/FileHandler.ts","../src/DB.ts"],"names":["promisify","fs","path"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface ICopyFileResult {\n code: 200 | 500;\n data?: IDocument[];\n error?: any;\n}\n\nexport interface IReadDatabaseOptions {\n _$id?: number;\n [key: string]: any;\n}\n\nexport interface IDocumentData {\n _$id: number;\n [key: string]: any;\n}\n\nexport interface IFindResult {\n code: 200 | 500;\n data?: IDocumentData[];\n count: number;\n error?: any;\n}\n\nexport interface IWriteDatabaseResult {\n code: 200 | 500;\n error?: any;\n doc?: IDocument;\n}\n\nexport interface IWriteDatabaseOptions {\n copy?: boolean;\n}\n\nexport interface IDocument {\n _$status: number;\n _$id: number;\n content: any;\n}\n\nexport interface IDBConfig {\n base?: string;\n model: string;\n}\n\nexport interface IQueryParams {\n [key: string]: any;\n}\n\nexport interface IFindOptions {\n skip?: number;\n limit?: number;\n sort?: number;\n}\n\nexport interface IUpdateResult {\n code: 200 | 500;\n status?: boolean;\n errlist?: any[];\n doc?: IDocument;\n error?: any;\n}\n\n// 内部查询结果类型(未扁平化)\nexport interface IInternalFindResult {\n code: 200 | 500;\n data: IDocument[];\n count: number;\n error?: any;\n}\n\n// ==================== 常量定义 ====================\n\n// 顶层字段(不在 content 中)\nexport const TOP_LEVEL_FIELDS = ['_$id', '_$status'] as const;","import { IDocument } from './types';\n\nexport class Document implements IDocument {\n _$status: number;\n _$id: number;\n content: any;\n\n constructor(data: IDocument | any, isExisting: boolean = false) {\n if (isExisting) {\n // 从数据库读取的完整文档\n this._$id = data._$id;\n this._$status = data._$status;\n this.content = data.content;\n } else {\n // 新建文档\n this._$id = Number(process.hrtime.bigint() / 1000n);\n this._$status = 1;\n this.content = data;\n }\n }\n}","import * as fs from 'fs';\nimport * as path from 'path';\nimport { promisify } from 'util';\nimport { Document } from './Document';\nimport {\n IDBConfig,\n ICopyFileResult,\n IReadDatabaseOptions,\n IDocument,\n IWriteDatabaseOptions,\n IWriteDatabaseResult,\n} from './types';\n\nconst fsReadFile = promisify(fs.readFile);\nconst fsWriteFile = promisify(fs.writeFile);\nconst fsCopyFile = promisify(fs.copyFile);\nconst fsUnlink = promisify(fs.unlink);\nconst fsReaddir = promisify(fs.readdir);\n\nexport class FileHandler {\n protected model: string;\n protected databasePath: string;\n\n constructor(config: IDBConfig) {\n const rootPath = config.base || process.cwd();\n this.model = config.model;\n this.databasePath = path.join(rootPath, 'data', this.model);\n\n if (!this.model) {\n throw new Error('Model name is required');\n }\n\n this.initDatabase();\n }\n\n /**\n * 初始化数据库目录\n */\n private initDatabase(): void {\n if (!fs.existsSync(this.databasePath)) {\n fs.mkdirSync(this.databasePath, { recursive: true });\n console.log(`Database directory created: ${this.databasePath}`);\n }\n }\n\n /**\n * 复制文件\n */\n protected async copyFile(source: string, target: string): Promise<ICopyFileResult> {\n try {\n await fsCopyFile(source, target);\n return { code: 200 };\n } catch (error) {\n return { code: 500, error };\n }\n }\n\n /**\n * 删除文件\n */\n protected async unlinkFile(target: string): Promise<ICopyFileResult> {\n try {\n await fsUnlink(target);\n return { code: 200 };\n } catch (error) {\n return { code: 500, error };\n }\n }\n\n /**\n * 读取数据库文档\n */\n protected async readDatabase(options: IReadDatabaseOptions = {}): Promise<ICopyFileResult> {\n try {\n const docs: IDocument[] = [];\n\n // 根据 _$id 读取单个文档\n if (options._$id) {\n const filePath = path.join(this.databasePath, `${options._$id}.json`);\n if (!fs.existsSync(filePath)) {\n return { code: 200, data: [] };\n }\n \n const fileContent = await fsReadFile(filePath, 'utf-8');\n const doc = JSON.parse(fileContent);\n \n // 只返回状态正常的文档\n if (doc._$status === 1) {\n docs.push(doc);\n }\n } else {\n // 读取所有文档\n const files = await fsReaddir(this.databasePath);\n \n for (const file of files) {\n if (!file.endsWith('.json') || file.endsWith('_copy.json')) continue;\n \n const filePath = path.join(this.databasePath, file);\n const fileContent = await fsReadFile(filePath, 'utf-8');\n const doc = JSON.parse(fileContent);\n \n // 只返回状态正常的文档\n if (doc._$status === 1) {\n docs.push(doc);\n }\n }\n }\n\n return { code: 200, data: docs };\n } catch (error) {\n return { code: 500, error };\n }\n }\n\n /**\n * 写入数据库文档\n */\n protected async writeDatabase(\n data: any,\n options: IWriteDatabaseOptions = {}\n ): Promise<IWriteDatabaseResult> {\n try {\n // 判断是更新还是新建\n const isExisting = data._$id !== undefined && data._$status !== undefined;\n const doc = new Document(data, isExisting);\n \n const filename = path.join(this.databasePath, `${doc._$id}.json`);\n const filenameCopy = path.join(this.databasePath, `${doc._$id}_copy.json`);\n\n // 如果需要备份\n if (options.copy && fs.existsSync(filename)) {\n const copyResult = await this.copyFile(filename, filenameCopy);\n if (copyResult.code !== 200) {\n return copyResult;\n }\n }\n\n // 写入文件\n await fsWriteFile(filename, JSON.stringify(doc, null, 2), 'utf-8');\n\n // 删除备份\n if (options.copy && fs.existsSync(filenameCopy)) {\n await this.unlinkFile(filenameCopy);\n }\n\n return { code: 200, doc };\n } catch (error) {\n // 如果失败,恢复备份\n if (options.copy) {\n const isExisting = data._$id !== undefined && data._$status !== undefined;\n const doc = new Document(data, isExisting);\n const filename = path.join(this.databasePath, `${doc._$id}.json`);\n const filenameCopy = path.join(this.databasePath, `${doc._$id}_copy.json`);\n \n if (fs.existsSync(filenameCopy)) {\n await this.copyFile(filenameCopy, filename);\n await this.unlinkFile(filenameCopy);\n }\n }\n return { code: 500, error };\n }\n }\n\n /**\n * 批量写入数据库(并发优化)\n */\n protected async writeDatabaseBatch(\n dataList: any[],\n options: IWriteDatabaseOptions = {}\n ): Promise<{ successCount: number; errorList: any[] }> {\n const results = await Promise.allSettled(\n dataList.map(data => this.writeDatabase(data, options))\n );\n\n const errorList = results\n .filter((result, index) => \n result.status === 'rejected' || \n (result.status === 'fulfilled' && result.value.code !== 200)\n )\n .map((result, index) => ({\n index,\n error: result.status === 'rejected' ? result.reason : result.value.error\n }));\n\n return {\n successCount: results.length - errorList.length,\n errorList\n };\n }\n}","import { FileHandler } from './FileHandler';\nimport {\n IDBConfig,\n IQueryParams,\n IDocument,\n IFindOptions,\n ICopyFileResult,\n IWriteDatabaseResult,\n IInternalFindResult,\n IFindResult,\n IUpdateResult,\n TOP_LEVEL_FIELDS\n} from './types';\n\nexport class DB extends FileHandler {\n private _id: number;\n\n constructor(config: IDBConfig) {\n super(config);\n this._id = Date.now();\n }\n\n /**\n * 创建文档\n */\n public async create(data: IQueryParams): Promise<IWriteDatabaseResult> {\n return this.writeDatabase(data);\n }\n\n /**\n * 内部查询方法(返回未扁平化的 IDocument[])\n */\n private async _findInternal(\n params: IQueryParams,\n options: IFindOptions = {}\n ): Promise<IInternalFindResult> {\n const { skip = 0, limit = 10000, sort = -1 } = options;\n\n // 过滤 undefined 值,构建查询条件\n const query = this.buildQuery(params);\n\n // 读取数据库\n const result = await this.readDatabase(query);\n if (result.code !== 200) {\n return { code: 500, data: [], count: 0, error: result.error };\n }\n\n let docs = result.data || [];\n\n // 如果有查询条件,进行过滤\n if (Object.keys(query).length > 0) {\n docs = docs.filter((item: IDocument) =>\n Object.keys(query).every((key) => {\n const queryValue = query[key];\n const itemValue = this.getDocumentFieldValue(item, key);\n\n // 支持函数查询\n if (typeof queryValue === 'function') {\n return queryValue(itemValue);\n }\n\n // 精确匹配\n return queryValue === itemValue;\n })\n );\n }\n\n // 排序\n const sortedDocs = this.sortDocuments(docs, sort);\n\n // 分页(不再重复排序)\n const paginatedDocs = sortedDocs.slice(skip, skip + limit);\n\n return {\n code: 200,\n data: paginatedDocs,\n count: docs.length\n };\n }\n\n /**\n * 查询文档(公开方法,保持向后兼容)\n */\n public async find(\n params: IQueryParams,\n options: IFindOptions = {}\n ): Promise<ICopyFileResult | IFindResult> {\n const result = await this._findInternal(params, options);\n return result as ICopyFileResult;\n }\n\n /**\n * 查询单个文档\n */\n public async findOne(\n query: IQueryParams,\n options: IFindOptions = {}\n ): Promise<IFindResult> {\n const result = await this._findInternal(query, options);\n if (result.code !== 200) return { ...result, data: [] };\n\n const firstDoc = result.data[0];\n const data = firstDoc ? { ...firstDoc.content, _$id: firstDoc._$id } : null;\n\n return {\n code: 200,\n data: data ? [data] : [],\n count: result.count\n };\n }\n\n /**\n * 查询所有文档\n */\n public async findMany(\n query: IQueryParams,\n options: IFindOptions = {}\n ): Promise<IFindResult> {\n const result = await this._findInternal(query, options);\n if (result.code !== 200) return { ...result, data: [] };\n\n const data = result.data.map((item: IDocument) => ({\n ...item.content,\n _$id: item._$id\n }));\n\n return {\n code: 200,\n data,\n count: result.count\n };\n }\n\n /**\n * 更新单个文档\n * @param target - 更新的数据\n * @param source - 查询条件(可选,默认使用 target)\n */\n public async updateOne(\n target: IQueryParams,\n source?: IQueryParams\n ): Promise<IUpdateResult> {\n // 深拷贝避免修改原对象\n const updateData = { ...target };\n let queryCondition: IQueryParams;\n \n // 确定查询条件\n if (source) {\n queryCondition = { ...source };\n } else {\n // 当 source 为空时,必须包含 _$id\n if (!target._$id) {\n return { \n code: 500, \n error: 'updateOne requires _$id in target when source is not provided' \n };\n }\n queryCondition = { _$id: target._$id };\n delete updateData._$id;\n }\n\n // 查询文档\n let result: IInternalFindResult;\n if (queryCondition._$id) {\n const readResult = await this.readDatabase({ _$id: queryCondition._$id });\n result = {\n code: readResult.code,\n data: readResult.data || [],\n count: readResult.data?.length || 0,\n error: readResult.error\n };\n } else {\n result = await this._findInternal(queryCondition, {});\n }\n\n if (result.code !== 200) return { code: 500, error: result.error };\n\n const item = result.data[0];\n if (!item) {\n return { code: 500, error: 'Document not found' };\n }\n\n // 合并更新内容\n item.content = { ...item.content, ...updateData };\n\n return this.writeDatabase(item, { copy: true });\n }\n\n /**\n * 批量更新文档\n * @param target - 更新的数据\n * @param source - 查询条件(可选,默认使用 target)\n */\n public async updateMany(\n target: IQueryParams,\n source?: IQueryParams\n ): Promise<IUpdateResult> {\n // 深拷贝避免修改原对象\n const updateData = { ...target };\n const queryCondition = source || { ...target };\n\n // 智能过滤:只删除值相同的查询字段\n if (source) {\n Object.keys(source).forEach(key => {\n if (updateData[key] === source[key]) {\n delete updateData[key];\n }\n });\n }\n\n const result = await this._findInternal(queryCondition, {});\n if (result.code !== 200) return { code: 500, error: result.error };\n\n if (result.data.length === 0) {\n return { code: 500, error: 'No documents found' };\n }\n\n // 准备批量更新数据\n const updatedDocs = result.data.map((item: IDocument) => ({\n ...item,\n content: { ...item.content, ...updateData }\n }));\n\n // 并发批量更新\n const batchResult = await this.writeDatabaseBatch(updatedDocs, { copy: true });\n\n return {\n code: 200,\n status: batchResult.errorList.length === 0,\n errlist: batchResult.errorList\n };\n }\n\n /**\n * 删除单个文档(软删除)\n */\n public async removeOne(\n query: IQueryParams,\n options: IFindOptions = {}\n ): Promise<IUpdateResult> {\n // 深拷贝避免修改原对象\n const queryCondition = { ...query };\n\n // 查询文档\n let result: IInternalFindResult;\n if (queryCondition._$id) {\n const readResult = await this.readDatabase({ _$id: queryCondition._$id });\n result = {\n code: readResult.code,\n data: readResult.data || [],\n count: readResult.data?.length || 0,\n error: readResult.error\n };\n } else {\n result = await this._findInternal(queryCondition, options);\n }\n\n if (result.code !== 200) return { code: 500, error: result.error };\n\n const item = result.data[0];\n if (!item) {\n return { code: 500, error: 'Document not found' };\n }\n\n // 软删除:设置状态为 0\n item._$status = 0;\n\n return this.writeDatabase(item, { copy: true });\n }\n\n /**\n * 批量删除文档(软删除)\n */\n public async removeMany(query: IQueryParams): Promise<IUpdateResult> {\n const result = await this._findInternal(query);\n if (result.code !== 200) return { code: 500, error: result.error };\n\n if (result.data.length === 0) {\n return { code: 500, error: 'No documents found' };\n }\n\n // 准备批量删除数据\n const deletedDocs = result.data.map((item: IDocument) => ({\n ...item,\n _$status: 0\n }));\n\n // 并发批量删除\n const batchResult = await this.writeDatabaseBatch(deletedDocs, { copy: true });\n\n return {\n code: 200,\n status: batchResult.errorList.length === 0,\n errlist: batchResult.errorList\n };\n }\n\n // ==================== 私有辅助方法 ====================\n\n /**\n * 获取文档字段值(兼容顶层字段和 content 字段)\n */\n private getDocumentFieldValue(doc: IDocument, key: string): any {\n // 使用常量判断顶层字段\n if (TOP_LEVEL_FIELDS.includes(key as any)) {\n return doc[key as keyof IDocument];\n }\n // 其他字段在 content 中\n return doc.content[key];\n }\n\n /**\n * 构建查询条件(过滤 undefined 值)\n */\n private buildQuery(params: IQueryParams): IQueryParams {\n return Object.keys(params).reduce((query: IQueryParams, key) => {\n if (params[key] !== undefined) {\n query[key] = params[key];\n }\n return query;\n }, {});\n }\n\n /**\n * 文档排序\n */\n private sortDocuments(docs: IDocument[], sort: number): IDocument[] {\n return [...docs].sort((a, b) =>\n sort > 0 ? a._$id - b._$id : b._$id - a._$id\n );\n }\n}"]}