fix(core): update

This commit is contained in:
Philipp Kunz 2024-02-07 18:16:40 +01:00
parent 3ce6036478
commit d209661586
6 changed files with 1078 additions and 1347 deletions

View File

@ -119,6 +119,6 @@ jobs:
run: |
npmci node install stable
npmci npm install
pnpm install -g @gitzone/tsdoc
pnpm install -g @git.zone/tsdoc
npmci command tsdoc
continue-on-error: true

View File

@ -26,12 +26,13 @@
"@push.rocks/smartlog": "^3.0.2",
"@push.rocks/smartpath": "^5.0.11",
"@push.rocks/smartpromise": "^4.0.2",
"@push.rocks/smartrx": "^3.0.7",
"@push.rocks/taskbuffer": "^3.1.7"
},
"devDependencies": {
"@gitzone/tsbuild": "^2.1.66",
"@gitzone/tsrun": "^1.2.44",
"@gitzone/tstest": "^1.0.77",
"@git.zone/tsbuild": "^2.1.66",
"@git.zone/tsrun": "^1.2.44",
"@git.zone/tstest": "^1.0.77",
"@push.rocks/tapbundle": "^5.0.15",
"@types/node": "^20.11.6"
},

2370
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@push.rocks/npmextra',
version: '4.0.6',
version: '4.0.7',
description: 'do more with npm'
}

View File

@ -11,12 +11,17 @@ export type TKeyValueStore = 'custom' | 'userHomeDir';
export class KeyValueStore {
private dataObject: any = {};
private deletedObject: any = {};
private mandatoryKeys: Set<string> = new Set();
public changeSubject = new plugins.smartrx.rxjs.Subject();
private storedStateString: string = '';
public syncTask = new Task({
name: 'syncTask',
buffered: true,
bufferMax: 1,
execDelay: 0,
taskFunction: async () => {
this.dataObject = {
...plugins.smartfile.fs.toObjectSync(this.filePath),
...this.dataObject,
@ -29,6 +34,13 @@ export class KeyValueStore {
plugins.smartjson.stringifyPretty(this.dataObject),
this.filePath
);
const newStateString = plugins.smartjson.stringify(this.dataObject);
// change detection
if (newStateString !== this.storedStateString) {
this.storedStateString = newStateString;
this.changeSubject.next(this.dataObject);
}
},
});
@ -70,7 +82,7 @@ export class KeyValueStore {
* @param identityArg
* @param customPath Optional custom path for the keyValue store
*/
constructor(typeArg: TKeyValueStore, identityArg: string, customPath?: string) {
constructor(typeArg: TKeyValueStore, identityArg: string, customPath?: string, mandatoryKeys?: string[]) {
if (customPath && typeArg !== 'custom') {
throw new Error('customPath can only be provided if typeArg is custom');
}
@ -81,6 +93,9 @@ export class KeyValueStore {
this.identity = identityArg;
this.customPath = customPath; // Store custom path if provided
this.initFilePath();
if (mandatoryKeys) {
this.setMandatoryKeys(mandatoryKeys);
}
}
/**
@ -143,4 +158,28 @@ export class KeyValueStore {
await this.syncTask.trigger(); // Sync again to reflect the deletion
}
private setMandatoryKeys(keys: string[]) {
keys.forEach(key => this.mandatoryKeys.add(key));
}
public getMissingMandatoryKeys(): string[] {
return Array.from(this.mandatoryKeys).filter(key => !(key in this.dataObject));
}
public async waitForKeysPresent(keysArg: []): Promise<void> {
const missingKeys = keysArg.filter(keyArg => !this.dataObject[keyArg]);
if (missingKeys.length === 0) {
return;
}
return new Promise((resolve, reject) => {
const subscription = this.changeSubject.subscribe(() => {
const missingKeys = keysArg.filter(keyArg => !this.dataObject[keyArg]);
if (missingKeys.length === 0) {
subscription.unsubscribe();
resolve();
}
});
});
}
}

View File

@ -4,6 +4,7 @@ import * as smartfile from '@push.rocks/smartfile';
import * as smartjson from '@push.rocks/smartjson';
import * as smartpath from '@push.rocks/smartpath';
import * as smartpromise from '@push.rocks/smartpromise';
import * as smartrx from '@push.rocks/smartrx';
import * as taskbuffer from '@push.rocks/taskbuffer';
export { smartlog, path, smartfile, smartjson, smartpath, smartpromise, taskbuffer };
export { smartlog, path, smartfile, smartjson, smartpath, smartpromise, smartrx, taskbuffer };