diff --git a/dist/npmextra.classes.keyvaluestore.d.ts b/dist/npmextra.classes.keyvaluestore.d.ts index 1ee58d5..269d016 100644 --- a/dist/npmextra.classes.keyvaluestore.d.ts +++ b/dist/npmextra.classes.keyvaluestore.d.ts @@ -1,28 +1,42 @@ +import { Task, TaskOnce } from 'taskbuffer'; export declare type TKeyValueStore = 'path' | 'gitProject' | 'custom'; /** * kvStore is a simple key vlaue store to store data about projects between runs */ export declare class KeyValueStore { + dataObject: any; + deletedObject: any; + initialReadTask: TaskOnce; + syncTask: Task; type: TKeyValueStore; identity: string; filePath: string; - constructor(typeArg: TKeyValueStore, customStringArg?: string); + /** + * the constructor of keyvalue store + * @param typeArg + * @param customStringArg + */ + constructor(typeArg: TKeyValueStore, customStringArg: string); + /** + * reads all keyValue pairs at once and returns them + */ + readAll(): Promise; /** * reads a keyValueFile from disk */ - read(): void; + read(keyArg: string): Promise; /** * writes a key value file to disk */ - write(): void; + write(keyValueObject: any): Promise; /** * wipes a key value store from disk */ - wipe(): void; + wipe(): Promise; /** * updates a value */ - update(): void; + update(keyObject: any): Promise; /** * computes the identity */ diff --git a/dist/npmextra.classes.keyvaluestore.js b/dist/npmextra.classes.keyvaluestore.js index 6d90d11..332f8c6 100644 --- a/dist/npmextra.classes.keyvaluestore.js +++ b/dist/npmextra.classes.keyvaluestore.js @@ -1,36 +1,91 @@ "use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", { value: true }); const plugins = require("./npmextra.plugins"); const paths = require("./npmextra.paths"); +const taskbuffer_1 = require("taskbuffer"); /** * kvStore is a simple key vlaue store to store data about projects between runs */ class KeyValueStore { + /** + * the constructor of keyvalue store + * @param typeArg + * @param customStringArg + */ constructor(typeArg, customStringArg) { + this.deletedObject = {}; + this.initialReadTask = new taskbuffer_1.TaskOnce({ + taskFunction: () => __awaiter(this, void 0, void 0, function* () { + this.dataObject = plugins.smartfile.fs.toObjectSync(this.filePath); + }) + }); + this.syncTask = new taskbuffer_1.Task({ + buffered: true, + bufferMax: 2, + execDelay: 500, + taskFunction: () => __awaiter(this, void 0, void 0, function* () { + this.dataObject = plugins.smartlodash.merge({}, plugins.smartfile.fs.toObjectSync(this.filePath), this.dataObject); + yield plugins.smartfile.memory.toFs(JSON.stringify(this.dataObject), this.filePath); + }), + name: 'syncTask' + }); // set kvStoreType this.type = typeArg; this.identity = customStringArg; this.initFilePath(); } + /** + * reads all keyValue pairs at once and returns them + */ + readAll() { + return __awaiter(this, void 0, void 0, function* () { + yield this.initialReadTask.trigger(); + this.syncTask.trigger(); + return this.dataObject; + }); + } /** * reads a keyValueFile from disk */ - read() { + read(keyArg) { + return __awaiter(this, void 0, void 0, function* () { + let data = yield this.readAll(); + return data[keyArg]; + }); } /** * writes a key value file to disk */ - write() { + write(keyValueObject) { + return __awaiter(this, void 0, void 0, function* () { + plugins.smartlodash.merge(this.dataObject, keyValueObject); + this.syncTask.trigger(); + }); } /** * wipes a key value store from disk */ wipe() { + return __awaiter(this, void 0, void 0, function* () { + for (let key in this.dataObject) { + this.deletedObject[key] = this.dataObject[key]; + } + }); } /** * updates a value */ - update() { + update(keyObject) { + return __awaiter(this, void 0, void 0, function* () { + }); } /** * computes the identity @@ -48,8 +103,11 @@ class KeyValueStore { baseDir = paths.kvPathDir; } this.filePath = plugins.path.join(baseDir, this.identity + '.json'); + plugins.smartfile.fs.ensureDirSync(paths.kvCustomDir); + plugins.smartfile.fs.ensureDirSync(paths.kvGitDir); + plugins.smartfile.fs.ensureDirSync(paths.kvPathDir); plugins.smartfile.fs.ensureFileSync(this.filePath, '{}'); } } exports.KeyValueStore = KeyValueStore; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEuY2xhc3Nlcy5rZXl2YWx1ZXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtZXh0cmEuY2xhc3Nlcy5rZXl2YWx1ZXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsOENBQTZDO0FBQzdDLDBDQUF5QztBQUl6Qzs7R0FFRztBQUNIO0lBSUUsWUFBWSxPQUF1QixFQUFFLGVBQXdCO1FBQzNELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQTtRQUMvQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtJQUVKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7SUFFTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO0lBRUosQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtJQUVOLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVk7UUFDbEIscUNBQXFDO1FBQ3JDLElBQUksT0FBZSxDQUFBO1FBQ25CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMzQixPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQTtRQUM3QixDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN0QyxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQTtRQUMxQixDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztZQUVoQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQTtRQUMzQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQTtRQUNuRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0NBQ0Y7QUF4REQsc0NBd0RDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEuY2xhc3Nlcy5rZXl2YWx1ZXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtZXh0cmEuY2xhc3Nlcy5rZXl2YWx1ZXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNkM7QUFDN0MsMENBQXlDO0FBRXpDLDJDQUEyQztBQUkzQzs7R0FFRztBQUNIO0lBNkJFOzs7O09BSUc7SUFDSCxZQUFZLE9BQXVCLEVBQUUsZUFBdUI7UUFoQzVELGtCQUFhLEdBQVEsRUFBRSxDQUFBO1FBQ3ZCLG9CQUFlLEdBQUcsSUFBSSxxQkFBUSxDQUFDO1lBQzdCLFlBQVksRUFBRTtnQkFDWixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDcEUsQ0FBQyxDQUFBO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsYUFBUSxHQUFHLElBQUksaUJBQUksQ0FBQztZQUNsQixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLEdBQUc7WUFDZCxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FDekMsRUFBRSxFQUNGLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ2hELElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUE7Z0JBQ0QsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUMvQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUE7WUFDSCxDQUFDLENBQUE7WUFDRCxJQUFJLEVBQUUsVUFBVTtTQUNqQixDQUFDLENBQUE7UUFXQSxr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 \ No newline at end of file diff --git a/dist/npmextra.classes.npmextra.js b/dist/npmextra.classes.npmextra.js index b4ade46..d56c574 100644 --- a/dist/npmextra.classes.npmextra.js +++ b/dist/npmextra.classes.npmextra.js @@ -31,7 +31,7 @@ class Npmextra { else { npmextraToolOptions = {}; } - let mergedOptions = plugins.lodash.merge({}, defaultOptionsArg, npmextraToolOptions); + let mergedOptions = plugins.smartlodash.merge({}, defaultOptionsArg, npmextraToolOptions); return mergedOptions; } /** @@ -65,4 +65,4 @@ class Npmextra { } } exports.Npmextra = Npmextra; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEuY2xhc3Nlcy5ucG1leHRyYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWV4dHJhLmNsYXNzZXMubnBtZXh0cmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4Q0FBNkM7QUFDN0MsMENBQXlDO0FBRXpDOztHQUVHO0FBQ0g7SUFNRTs7T0FFRztJQUNILFlBQVksTUFBZTtRQUN6QixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1gsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUE7UUFDbkIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFBO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7UUFDdEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFjLFdBQW1CLEVBQUUsaUJBQXNCO1FBQzlELElBQUksbUJBQW1CLENBQUE7UUFDdkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFFLFdBQVcsQ0FBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUUsV0FBVyxDQUFFLENBQUE7UUFDNUQsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sbUJBQW1CLEdBQUcsRUFBRSxDQUFBO1FBQzFCLENBQUM7UUFDRCxJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtRQUNwRixNQUFNLENBQUMsYUFBYSxDQUFBO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ2hFLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQTtRQUNwQyxDQUFDO1FBQUEsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQjtRQUMzQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzVFLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7UUFDNUIsQ0FBQztJQUNILENBQUM7Q0FFRjtBQS9ERCw0QkErREMifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEuY2xhc3Nlcy5ucG1leHRyYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWV4dHJhLmNsYXNzZXMubnBtZXh0cmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4Q0FBNkM7QUFDN0MsMENBQXlDO0FBRXpDOztHQUVHO0FBQ0g7SUFNRTs7T0FFRztJQUNILFlBQWEsTUFBZTtRQUMxQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1gsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUE7UUFDbkIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFBO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7UUFDdEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFjLFdBQW1CLEVBQUUsaUJBQXNCO1FBQzlELElBQUksbUJBQW1CLENBQUE7UUFDdkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFFLFdBQVcsQ0FBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUUsV0FBVyxDQUFFLENBQUE7UUFDNUQsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sbUJBQW1CLEdBQUcsRUFBRSxDQUFBO1FBQzFCLENBQUM7UUFDRCxJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtRQUN6RixNQUFNLENBQUMsYUFBYSxDQUFBO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ2hFLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQTtRQUNwQyxDQUFDO1FBQUEsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQjtRQUMzQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzVFLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7UUFDNUIsQ0FBQztJQUNILENBQUM7Q0FFRjtBQS9ERCw0QkErREMifQ== \ No newline at end of file diff --git a/dist/npmextra.paths.d.ts b/dist/npmextra.paths.d.ts index c3a5f71..414356b 100644 --- a/dist/npmextra.paths.d.ts +++ b/dist/npmextra.paths.d.ts @@ -1,5 +1,6 @@ export declare let cwd: string; export declare let packageDir: string; +export declare let home: any; /** * keyValue base path */ diff --git a/dist/npmextra.paths.js b/dist/npmextra.paths.js index 02e4f27..a3a40ec 100644 --- a/dist/npmextra.paths.js +++ b/dist/npmextra.paths.js @@ -7,10 +7,11 @@ exports.packageDir = plugins.path.join(__dirname, '../'); // ---------------------- // keyValueStore specific // ---------------------- +exports.home = plugins.smartpath.get.home(); /** * keyValue base path */ -exports.kvBase = '~/.npmextra/kv'; +exports.kvBase = plugins.path.join(exports.home, '.npmextra/kv'); /** * the base directory for custom string based key value store */ @@ -25,4 +26,4 @@ exports.kvGitDir = plugins.path.join(exports.kvBase, 'git'); exports.kvPathDir = plugins.path.join(exports.kvBase, 'path'); // files exports.configFile = plugins.path.join(exports.cwd, 'npmextra.json'); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEucGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ucG1leHRyYS5wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhDQUE2QztBQUU3QyxjQUFjO0FBQ0gsUUFBQSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ25CLFFBQUEsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQTtBQUUxRCx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUV6Qjs7R0FFRztBQUNRLFFBQUEsTUFBTSxHQUFHLGdCQUFnQixDQUFBO0FBRXBDOztHQUVHO0FBQ1EsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBRTVEOztHQUVHO0FBQ1EsUUFBQSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBRXREOztHQUVHO0FBQ1EsUUFBQSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBRXhELFFBQVE7QUFDRyxRQUFBLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFHLEVBQUMsZUFBZSxDQUFDLENBQUEifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEucGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ucG1leHRyYS5wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhDQUE2QztBQUU3QyxjQUFjO0FBQ0gsUUFBQSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ25CLFFBQUEsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQTtBQUUxRCx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUVkLFFBQUEsSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0FBRTlDOztHQUVHO0FBQ1EsUUFBQSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBSSxFQUFDLGNBQWMsQ0FBQyxDQUFBO0FBRzFEOztHQUVHO0FBQ1EsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBRTVEOztHQUVHO0FBQ1EsUUFBQSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBRXREOztHQUVHO0FBQ1EsUUFBQSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBRXhELFFBQVE7QUFDRyxRQUFBLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFHLEVBQUMsZUFBZSxDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/dist/npmextra.plugins.d.ts b/dist/npmextra.plugins.d.ts index 5e10305..d1dcb2b 100644 --- a/dist/npmextra.plugins.d.ts +++ b/dist/npmextra.plugins.d.ts @@ -1,6 +1,9 @@ import 'typings-global'; -export import beautylog = require('beautylog'); -export import lodash = require('lodash'); -export import path = require('path'); -export import smartfile = require('smartfile'); -export import q = require('smartq'); +import * as beautylog from 'beautylog'; +import * as path from 'path'; +import * as smartfile from 'smartfile'; +import smartlodash from 'smartlodash'; +import * as smartpath from 'smartpath'; +import * as smartq from 'smartq'; +import * as taskbuffer from 'taskbuffer'; +export { beautylog, path, smartfile, smartpath, smartq, smartlodash, taskbuffer }; diff --git a/dist/npmextra.plugins.js b/dist/npmextra.plugins.js index dfb725e..f19e6b8 100644 --- a/dist/npmextra.plugins.js +++ b/dist/npmextra.plugins.js @@ -1,9 +1,18 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("typings-global"); -exports.beautylog = require("beautylog"); -exports.lodash = require("lodash"); -exports.path = require("path"); -exports.smartfile = require("smartfile"); -exports.q = require("smartq"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWV4dHJhLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBdUI7QUFDdkIseUNBQThDO0FBQzlDLG1DQUF3QztBQUN4QywrQkFBb0M7QUFDcEMseUNBQThDO0FBQzlDLDhCQUFtQyJ9 \ No newline at end of file +const beautylog = require("beautylog"); +exports.beautylog = beautylog; +const path = require("path"); +exports.path = path; +const smartfile = require("smartfile"); +exports.smartfile = smartfile; +const smartlodash_1 = require("smartlodash"); +exports.smartlodash = smartlodash_1.default; +const smartpath = require("smartpath"); +exports.smartpath = smartpath; +const smartq = require("smartq"); +exports.smartq = smartq; +const taskbuffer = require("taskbuffer"); +exports.taskbuffer = taskbuffer; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWV4dHJhLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBdUI7QUFDdkIsdUNBQXNDO0FBU3BDLDhCQUFTO0FBUlgsNkJBQTRCO0FBUzFCLG9CQUFJO0FBUk4sdUNBQXNDO0FBU3BDLDhCQUFTO0FBUlgsNkNBQXFDO0FBV25DLHNCQVhLLHFCQUFXLENBV0w7QUFWYix1Q0FBc0M7QUFRcEMsOEJBQVM7QUFQWCxpQ0FBZ0M7QUFROUIsd0JBQU07QUFQUix5Q0FBd0M7QUFTdEMsZ0NBQVUifQ== \ No newline at end of file diff --git a/npmextra.json b/npmextra.json index c4494f5..c3efb91 100644 --- a/npmextra.json +++ b/npmextra.json @@ -3,5 +3,10 @@ "globalNpmTools": [ "npmts" ] + }, + "npmts": { + "testConfig": { + "parallel": false + } } } \ No newline at end of file diff --git a/package.json b/package.json index 265b4c2..62d7819 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,10 @@ "beautylog": "^6.1.10", "smartfile": "^4.2.17", "smartlodash": "^1.0.1", + "smartpath": "^3.2.8", "smartq": "^1.1.6", "tapbundle": "^1.1.1", - "taskbuffer": "^1.0.21", + "taskbuffer": "^1.0.22", "typings-global": "^1.0.19" }, "devDependencies": {} diff --git a/test/test.kvstore.ts b/test/test.kvstore.ts new file mode 100644 index 0000000..ec50970 --- /dev/null +++ b/test/test.kvstore.ts @@ -0,0 +1,25 @@ +import { expect, tap } from 'tapbundle' + +import * as npmextra from '../dist/index' + +let myKeyValueStore: npmextra.KeyValueStore + +tap.test('should create a keyValueStore', async () => { + myKeyValueStore = new npmextra.KeyValueStore('custom','test') + expect(myKeyValueStore).to.be.instanceof(npmextra.KeyValueStore) +}) + +tap.test('expect result to be empty', async () => { + let result = myKeyValueStore.readAll() + // tslint:disable-next-line:no-unused-expression + expect(result).to.be.empty +}) + +tap.test('expect to add an object to the kv Store', async () => { + await myKeyValueStore.write({ + myKey: 'myValue' + }) + await expect(myKeyValueStore.read('myKey')).to.eventually.equal('myValue') +}) + +tap.start() diff --git a/ts/npmextra.classes.keyvaluestore.ts b/ts/npmextra.classes.keyvaluestore.ts index e9aaa9d..ebe4d85 100644 --- a/ts/npmextra.classes.keyvaluestore.ts +++ b/ts/npmextra.classes.keyvaluestore.ts @@ -1,7 +1,7 @@ import * as plugins from './npmextra.plugins' import * as paths from './npmextra.paths' -import { Task } from 'taskbuffer' +import { Task, TaskOnce } from 'taskbuffer' export type TKeyValueStore = 'path' | 'gitProject' | 'custom' @@ -10,40 +10,51 @@ export type TKeyValueStore = 'path' | 'gitProject' | 'custom' */ export class KeyValueStore { dataObject: any - firstReadDeferred = plugins.smartq.defer() - syncTask: plugins.taskbuffer.Task + deletedObject: any = {} + initialReadTask = new TaskOnce({ + taskFunction: async () => { + this.dataObject = plugins.smartfile.fs.toObjectSync(this.filePath) + } + }) + syncTask = new Task({ + buffered: true, + bufferMax: 2, + execDelay: 500, + taskFunction: async () => { + this.dataObject = plugins.smartlodash.merge( + {}, + plugins.smartfile.fs.toObjectSync(this.filePath), + this.dataObject + ) + await plugins.smartfile.memory.toFs( + JSON.stringify(this.dataObject), + this.filePath + ) + }, + name: 'syncTask' + }) type: TKeyValueStore // the type of the kvStore identity: string // the identity of the kvStore filePath: string // the filePath of the kvStore - constructor (typeArg: TKeyValueStore, customStringArg?: string) { + + /** + * the constructor of keyvalue store + * @param typeArg + * @param customStringArg + */ + constructor(typeArg: TKeyValueStore, customStringArg: string) { // set kvStoreType this.type = typeArg this.identity = customStringArg this.initFilePath() - - // set up the sync Task - this.syncTask = new Task({ - buffered: true, - bufferMax: 2, - execDelay: 500, - taskFunction: async () => { - this.dataObject = plugins.smartlodash.merge( - {}, - plugins.smartfile.fs.toObjectSync(this.filePath, - this.dataObject - ) - await plugins.smartfile.memory.toFs(JSON.stringify(this.dataObject), this.filePath) - }, - name: 'syncTask' - }) } /** * reads all keyValue pairs at once and returns them */ async readAll () { + await this.initialReadTask.trigger() this.syncTask.trigger() - await this.firstReadDeferred.promise return this.dataObject } @@ -51,7 +62,7 @@ export class KeyValueStore { * reads a keyValueFile from disk */ async read (keyArg: string) { - let data = this.readAll() + let data = await this.readAll() return data[keyArg] } @@ -67,13 +78,15 @@ export class KeyValueStore { * wipes a key value store from disk */ async wipe () { - this.dataObject. + for (let key in this.dataObject) { + this.deletedObject[key] = this.dataObject[key] + } } /** * updates a value */ - async update () { + async update (keyObject) { } @@ -92,6 +105,9 @@ export class KeyValueStore { baseDir = paths.kvPathDir } this.filePath = plugins.path.join(baseDir, this.identity + '.json') + plugins.smartfile.fs.ensureDirSync(paths.kvCustomDir) + plugins.smartfile.fs.ensureDirSync(paths.kvGitDir) + plugins.smartfile.fs.ensureDirSync(paths.kvPathDir) plugins.smartfile.fs.ensureFileSync(this.filePath, '{}') } } diff --git a/ts/npmextra.classes.npmextra.ts b/ts/npmextra.classes.npmextra.ts index 0762832..406e9a5 100644 --- a/ts/npmextra.classes.npmextra.ts +++ b/ts/npmextra.classes.npmextra.ts @@ -34,7 +34,7 @@ export class Npmextra { } else { npmextraToolOptions = {} } - let mergedOptions = plugins.lodash.merge({}, defaultOptionsArg, npmextraToolOptions) + let mergedOptions = plugins.smartlodash.merge({}, defaultOptionsArg, npmextraToolOptions) return mergedOptions } diff --git a/ts/npmextra.paths.ts b/ts/npmextra.paths.ts index 21c9538..4caeb89 100644 --- a/ts/npmextra.paths.ts +++ b/ts/npmextra.paths.ts @@ -8,10 +8,13 @@ export let packageDir = plugins.path.join(__dirname,'../') // keyValueStore specific // ---------------------- +export let home = plugins.smartpath.get.home() + /** * keyValue base path */ -export let kvBase = '~/.npmextra/kv' +export let kvBase = plugins.path.join(home,'.npmextra/kv') + /** * the base directory for custom string based key value store diff --git a/ts/npmextra.plugins.ts b/ts/npmextra.plugins.ts index 9ddc270..e85f590 100644 --- a/ts/npmextra.plugins.ts +++ b/ts/npmextra.plugins.ts @@ -3,6 +3,7 @@ import * as beautylog from 'beautylog' import * as path from 'path' import * as smartfile from 'smartfile' import smartlodash from 'smartlodash' +import * as smartpath from 'smartpath' import * as smartq from 'smartq' import * as taskbuffer from 'taskbuffer' @@ -10,6 +11,7 @@ export { beautylog, path, smartfile, + smartpath, smartq, smartlodash, taskbuffer diff --git a/yarn.lock b/yarn.lock index 3fb139f..aca7455 100644 --- a/yarn.lock +++ b/yarn.lock @@ -712,9 +712,9 @@ tapbundle@^1.1.1: smartq "^1.1.1" typings-global "^1.0.19" -taskbuffer@^1.0.21: - version "1.0.21" - resolved "https://registry.yarnpkg.com/taskbuffer/-/taskbuffer-1.0.21.tgz#8471cb770ad30ca8b12d2166ce5dd45e634782ea" +taskbuffer@^1.0.22: + version "1.0.22" + resolved "https://registry.yarnpkg.com/taskbuffer/-/taskbuffer-1.0.22.tgz#05d498d157d79dd897e11e6225fd447ba2f2fa3e" dependencies: "@types/cron" "^1.2.1" "@types/lodash" "4.x.x"