You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							93 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							93 lines
						
					
					
						
							2.2 KiB
						
					
					
				| import { loadEnv } from "@build/utils"; | |
| import { LocalStorage, LowSync } from "lowdb"; | |
| import { chain, cloneDeep } from "lodash-es"; | |
| import { storageLocal } from "."; | |
| import { cookies } from "./cookie"; | |
| type Data = { | |
|   database: {}; | |
|   sys: {}; | |
| }; | |
| /** | |
|  * db 数据存储,采用 LocalStorage存储 | |
|  */ | |
| class DB { | |
|   private db: LowSync<Data>; | |
|   private static env = loadEnv(); | |
|   constructor() { | |
|     this.db = new LowSync<Data>( | |
|       new LocalStorage<Data>(`${DB.env.VITE_TITLE}-${DB.env.VITE_VERSION}`) | |
|     ); | |
|     this.initialization(); | |
|     // @ts-ignore | |
|     this.db.chain = chain(this.db.data); | |
|   } | |
|   private initialization() { | |
|     this.db.data = storageLocal.getItem( | |
|       `${DB.env.VITE_TITLE}-${DB.env.VITE_VERSION}` | |
|     ) || { database: {}, sys: {} }; | |
|     this.db.write(); | |
|   } | |
|   /** | |
|    * 检查路径是否存在 不存在的话初始化 | |
|    * @param param0 | |
|    * @returns path | |
|    */ | |
|   pathInit({ | |
|     dbName = "database", | |
|     path = "", | |
|     user = true, | |
|     validator = () => true, | |
|     defaultValue = "" | |
|   }): string { | |
|     const uuid = cookies.get("uuid") || "ghost-uuid"; | |
|     const currentPath = `${dbName}.${user ? `user.${uuid}` : "public"}${ | |
|       path ? `.${path}` : "" | |
|     }`; | |
|     // @ts-ignore | |
|     const value = this.db.chain.get(currentPath).value(); | |
|     // @ts-ignore | |
|     if (!(value !== undefined && validator(value))) { | |
|       // @ts-ignore | |
|       this.db.chain.set(currentPath, defaultValue).value(); | |
|       this.db.write(); | |
|     } | |
|     return currentPath; | |
|   } | |
|   /** | |
|    *将数据存储到指定位置 | 路径不存在会自动初始化 | |
|    * | |
|    * 效果类似于取值 dbName.path = value | |
|    * @param param0 | |
|    */ | |
|   dbSet({ dbName = "database", path = "", value = "", user = false }): void { | |
|     const currentPath = this.pathInit({ | |
|       dbName, | |
|       path, | |
|       user | |
|     }); | |
|     // @ts-ignore | |
|     this.db.chain.set(currentPath, value).value(); | |
|     this.db.write(); | |
|   } | |
|   /** | |
|    * 获取数据 | |
|    * | |
|    * 效果类似于取值 dbName.path || defaultValue | |
|    * @param param0 | |
|    * @returns | |
|    */ | |
|   dbGet({ | |
|     dbName = "database", | |
|     path = "", | |
|     defaultValue = "", | |
|     user = false | |
|   }): any { | |
|     // @ts-ignore | |
|     const values = this.db.chain | |
|       .get(this.pathInit({ dbName, path, user, defaultValue })) | |
|       .value(); | |
|     return cloneDeep(values); | |
|   } | |
| } | |
| 
 | |
| export const db = new DB();
 |