Compare commits

...

8 Commits

Author SHA1 Message Date
80d6a5103a 3.0.6 2019-09-16 13:18:45 +02:00
c22bbe2daf fix(core): update 2019-09-16 13:18:45 +02:00
82af55fae9 3.0.5 2019-05-10 17:07:26 +02:00
90f8ee4e9d fix(core): update 2019-05-10 17:07:25 +02:00
4fe85134c4 3.0.4 2019-05-10 17:05:04 +02:00
c307b7c7b0 fix(core): update 2019-05-10 17:05:04 +02:00
e4f608f7eb 3.0.3 2019-05-10 17:03:07 +02:00
0689e33ae6 fix(core): update 2019-05-10 17:03:07 +02:00
5 changed files with 563 additions and 343 deletions

764
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "@pushrocks/npmextra", "name": "@pushrocks/npmextra",
"version": "3.0.2", "version": "3.0.6",
"private": false, "private": false,
"description": "do more with npm", "description": "do more with npm",
"main": "dist/index.js", "main": "dist/index.js",
@@ -20,18 +20,19 @@
}, },
"homepage": "https://gitlab.com/pushrocks/npmextra#README", "homepage": "https://gitlab.com/pushrocks/npmextra#README",
"dependencies": { "dependencies": {
"@pushrocks/smartfile": "^7.0.2", "@pushrocks/smartfile": "^7.0.4",
"@pushrocks/smartlog": "^2.0.19", "@pushrocks/smartlog": "^2.0.19",
"@pushrocks/smartpath": "^4.0.1", "@pushrocks/smartpath": "^4.0.1",
"@pushrocks/smartpromise": "^3.0.2", "@pushrocks/smartpromise": "^3.0.5",
"@pushrocks/taskbuffer": "^2.0.7", "@pushrocks/taskbuffer": "^2.0.10"
"smartlodash": "^1.0.1"
}, },
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.1.11", "@gitzone/tsbuild": "^2.1.17",
"@gitzone/tsrun": "^1.2.6", "@gitzone/tsrun": "^1.2.8",
"@gitzone/tstest": "^1.0.20", "@gitzone/tstest": "^1.0.24",
"@pushrocks/tapbundle": "^3.0.9", "@pushrocks/tapbundle": "^3.0.13",
"@types/node": "^12.0.0" "@types/node": "^12.7.5",
"tslint": "^5.20.0",
"tslint-config-prettier": "^1.18.0"
} }
} }

View File

@@ -9,34 +9,49 @@ export type TKeyValueStore = 'path' | 'gitProject' | 'custom';
* kvStore is a simple key vlaue store to store data about projects between runs * kvStore is a simple key vlaue store to store data about projects between runs
*/ */
export class KeyValueStore { export class KeyValueStore {
dataObject: any; private dataObject: any = {};
deletedObject: any = {}; private deletedObject: any = {};
initialReadTask = new TaskOnce({ public syncTask = new Task({
taskFunction: async () => { name: 'syncTask',
this.dataObject = plugins.smartfile.fs.toObjectSync(this.filePath);
}
});
syncTask = new Task({
buffered: true, buffered: true,
bufferMax: 2, bufferMax: 2,
execDelay: 500, execDelay: 500,
taskFunction: async () => { taskFunction: async () => {
this.dataObject = plugins.smartlodash.merge( this.dataObject = {
{}, ...plugins.smartfile.fs.toObjectSync(this.filePath),
plugins.smartfile.fs.toObjectSync(this.filePath), ...this.dataObject
this.dataObject };
); for (const key of Object.keys(this.deletedObject)) {
for (let key in this.deletedObject) {
delete this.dataObject[key]; delete this.dataObject[key];
} }
this.deletedObject = {}; this.deletedObject = {};
await plugins.smartfile.memory.toFs(JSON.stringify(this.dataObject), this.filePath); 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 * computes the identity
filePath: string; // the filePath of the kvStore */
private initFilePath = () => {
// determine the right base directory
let baseDir: string;
if (this.type === 'custom') {
baseDir = paths.kvCustomDir;
} else if (this.type === 'gitProject') {
baseDir = paths.kvGitDir;
} else if (this.type === 'path') {
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, '{}');
}
public type: TKeyValueStore; // the type of the kvStore
public identity: string; // the identity of the kvStore
public filePath: string; // the filePath of the kvStore
/** /**
* the constructor of keyvalue store * the constructor of keyvalue store
@@ -53,68 +68,46 @@ export class KeyValueStore {
/** /**
* reads all keyValue pairs at once and returns them * reads all keyValue pairs at once and returns them
*/ */
async readAll() { public async readAll() {
await this.initialReadTask.trigger(); await this.syncTask.trigger();
this.syncTask.trigger();
return this.dataObject; return this.dataObject;
} }
/** /**
* reads a keyValueFile from disk * reads a keyValueFile from disk
*/ */
async readKey(keyArg: string) { public async readKey(keyArg: string) {
let data = await this.readAll(); await this.syncTask.trigger();
return data[keyArg]; return this.dataObject[keyArg];
} }
/** /**
* writes a specific key to the keyValueStore * writes a specific key to the keyValueStore
*/ */
async writeKey(keyArg: string, valueArg: any) { public async writeKey(keyArg: string, valueArg: any) {
let writeObject: any = {}; await this.writeAll({
writeObject[keyArg] = valueArg; [keyArg]: valueArg
this.writeAll(writeObject); });
}
public async deleteKey(keyArg: string) {
this.deletedObject[keyArg] = this.dataObject[keyArg];
await this.syncTask.trigger();
} }
/** /**
* writes all keyValue pairs in the object argument * writes all keyValue pairs in the object argument
*/ */
async writeAll(keyValueObject) { public async writeAll(keyValueObject) {
plugins.smartlodash.merge(this.dataObject, keyValueObject); this.dataObject = {...this.dataObject, ...keyValueObject};
this.syncTask.trigger(); await this.syncTask.trigger();
} }
/** /**
* wipes a key value store from disk * wipes a key value store from disk
*/ */
async wipe() { public async wipe() {
for (let key in this.dataObject) { this.dataObject = {};
this.deletedObject[key] = this.dataObject[key]; await plugins.smartfile.fs.remove(this.filePath);
}
}
/**
* updates a value
*/
async update(keyObject) {}
/**
* computes the identity
*/
private initFilePath() {
// determine the right base directory
let baseDir: string;
if (this.type === 'custom') {
baseDir = paths.kvCustomDir;
} else if (this.type === 'gitProject') {
baseDir = paths.kvGitDir;
} else if (this.type === 'path') {
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, '{}');
} }
} }

View File

@@ -34,7 +34,10 @@ export class Npmextra {
} else { } else {
npmextraToolOptions = {}; npmextraToolOptions = {};
} }
let mergedOptions = plugins.smartlodash.merge({}, defaultOptionsArg, npmextraToolOptions); let mergedOptions = {
...defaultOptionsArg,
...npmextraToolOptions
};
return mergedOptions; return mergedOptions;
} }

View File

@@ -1,9 +1,8 @@
import * as beautylog from '@pushrocks/smartlog'; import * as beautylog from '@pushrocks/smartlog';
import * as path from 'path'; import * as path from 'path';
import * as smartfile from '@pushrocks/smartfile'; import * as smartfile from '@pushrocks/smartfile';
import smartlodash from 'smartlodash';
import * as smartpath from '@pushrocks/smartpath'; import * as smartpath from '@pushrocks/smartpath';
import * as smartpromise from '@pushrocks/smartpromise'; import * as smartpromise from '@pushrocks/smartpromise';
import * as taskbuffer from '@pushrocks/taskbuffer'; import * as taskbuffer from '@pushrocks/taskbuffer';
export { beautylog, path, smartfile, smartpath, smartpromise, smartlodash, taskbuffer }; export { beautylog, path, smartfile, smartpath, smartpromise, taskbuffer };