import * as plugins from './npmextra.plugins.js'; import * as paths from './npmextra.paths.js'; import { KeyValueStore } from './npmextra.classes.keyvaluestore.js'; export class AppData { public static async createAndInit(pathArg: string) { const appData = new AppData(pathArg); await appData.init(); return appData; } // instance public readyDeferred = plugins.smartpromise.defer(); public dirPathArg: string; private kvStore: KeyValueStore; constructor(pathArg?: string) { this.init(pathArg); } private async init(pathArg?: string) { if (pathArg) { this.dirPathArg = pathArg; } else { const appDataDir = '/app/data'; const dataDir = '/data'; const nogitAppData = '.nogit/appdata'; const appDataExists = plugins.smartfile.fs.isDirectory(appDataDir); const dataExists = plugins.smartfile.fs.isDirectory(dataDir); if (appDataExists) { this.dirPathArg = appDataDir; } else if (dataExists) { this.dirPathArg = dataDir; } else { await plugins.smartfile.fs.ensureDir(nogitAppData); this.dirPathArg = nogitAppData; } } this.kvStore = new KeyValueStore('custom', 'appkv', this.dirPathArg); this.readyDeferred.resolve(); } /** * returns a kvtore that resides in appdata */ public async getKvStore() { await this.readyDeferred.promise; return this.kvStore; } }