@silver-zepp/easy-storage
Version:
The Easy Storage library offers a suite of storage solutions designed for ZeppOS applications, providing a range of data persistence strategies to accommodate different data management needs.
3 lines (2 loc) • 2.81 kB
JavaScript
/** @about Easy Storage @min_zeppos 2.0 @author: Silver, Zepp Health. @license: MIT */
import{debugLog}from"./core/core";import{Storage}from"./storage";export class EasyFlashStorage{#directory;constructor(directory="easy_flash_storage"){this.#directory=directory;Storage.MakeDirectory(this.#directory)}setKey(key,value){const data=JSON.stringify(value);Storage.WriteFile(`${this.#directory}/${key}`,data)}getKey(key){try{const file_content=Storage.ReadFile(`${this.#directory}/${key}`);debugLog(3,`Content for key ${key}:`,file_content);if(!file_content){debugLog(1,`File content is empty for key ${key}`);return undefined}const parsed_content=this.#parseJSON(file_content);if(parsed_content===null){debugLog(1,`Failed to parse JSON for key ${key}`)}return parsed_content}catch(error){debugLog(1,"Error accessing or parsing file:",error);return undefined}}removeKey(key){if(this.hasKey(key)){Storage.RemoveFile(`${this.#directory}/${key}`)}}hasKey(key){return Storage.Exists(`${this.#directory}/${key}`)}isEmpty(){const keys=Storage.ListDirectory(this.#directory);return keys.length===0||keys.length===1&&keys.includes("index")}count(){const keys=Storage.ListDirectory(this.#directory);return keys.includes("index")?keys.length-1:keys.length}dataSize(key,unit="B"){if(this.hasKey(key)){let stat=Storage.FileInfo(`${this.#directory}/${key}`);let size=stat?stat.size:0;return this.#convertSize(size,unit)}else{return 0}}size(unit="B"){let ttl_size=0;const keys=Storage.ListDirectory(this.#directory);keys.forEach(key=>{if(key==="index")return;const stat=Storage.FileInfo(`${this.#directory}/${key}`);if(stat)ttl_size+=stat.size});return this.#convertSize(ttl_size,unit)}getAllKeys(stringify=false){const keys=Storage.ListDirectory(this.#directory);return stringify?JSON.stringify(keys):keys}getAllValues(stringify=false){let values=[];const keys=Storage.ListDirectory(this.#directory);values=keys.map(key=>this.getKey(key));values=values.filter(value=>value!==undefined);return stringify?JSON.stringify(values):values}getStorageSnapshot(stringify=false){const keys=this.getAllKeys();const contents=keys.reduce((acc,key)=>{try{const file_content=Storage.ReadFile(`${this.#directory}/${key}`);acc[key]=JSON.parse(file_content)}catch(error){debugLog(1,`Error parsing JSON from file for key ${key}:`,error)}return acc},{});return stringify?JSON.stringify(contents):contents}deleteAll(){let keys=this.getAllKeys();for(let key of keys){this.removeKey(key)}}printAllKeys(){let keys=this.getAllKeys();for(let key of keys){console.log(key+": "+this.getKey(key))}}#convertSize(size,unit){let result;switch(unit){case"KB":result=size/1024;break;case"MB":result=size/1024/1024;break;default:result=size;break}return Number(result.toFixed(2))}#parseJSON(content){try{return JSON.parse(content)}catch(error){return null}}}