Compare commits

..

10 Commits

Author SHA1 Message Date
5d51c14bd6 4.0.4 2020-05-25 22:04:22 +00:00
453c6d6ae8 fix(core): update 2020-05-25 22:04:21 +00:00
2e9fe308df 4.0.3 2020-05-25 18:10:10 +00:00
96a71638a0 fix(core): update 2020-05-25 18:10:10 +00:00
1c7582d328 4.0.2 2020-05-25 15:38:58 +00:00
ccff9b39be fix(core): update 2020-05-25 15:38:57 +00:00
749be9ac60 4.0.1 2020-05-25 13:18:53 +00:00
7c9ad26519 fix(core): update 2020-05-25 13:18:53 +00:00
6fdf08c8a9 4.0.0 2020-05-04 00:09:21 +00:00
de04d75e18 BREAKING CHANGE(core): refactored ObjectMap and introduced concat feature 2020-05-04 00:09:20 +00:00
12 changed files with 2257 additions and 873 deletions

4
.gitignore vendored
View File

@ -15,8 +15,6 @@ node_modules/
# builds # builds
dist/ dist/
dist_web/ dist_*/
dist_serve/
dist_ts_web/
# custom # custom

View File

@ -24,13 +24,14 @@ mirror:
- docker - docker
- notpriv - notpriv
snyk: audit:
image: registry.gitlab.com/hosttoday/ht-docker-node:snyk image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security stage: security
script: script:
- npmci npm prepare - npmci npm prepare
- npmci command npm install --ignore-scripts - npmci command npm install --ignore-scripts
- npmci command snyk test - npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high
tags: tags:
- lossless - lossless
- docker - docker

2971
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,13 @@
{ {
"name": "@pushrocks/lik", "name": "@pushrocks/lik",
"version": "3.0.19", "version": "4.0.4",
"private": false, "private": false,
"description": "light little helpers for node", "description": "light little helpers for node",
"main": "dist/index.js", "main": "dist_ts/index.js",
"typings": "dist/index.d.ts", "typings": "dist_ts/index.d.ts",
"scripts": { "scripts": {
"test": "(tstest test/)", "test": "(tstest test/)",
"build": "(tsbuild)" "build": "(tsbuild && tsbundle npm)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -20,29 +20,31 @@
}, },
"homepage": "https://gitlab.com/pushrocks/lik#README", "homepage": "https://gitlab.com/pushrocks/lik#README",
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.1.17", "@gitzone/tsbuild": "^2.1.24",
"@gitzone/tsbundle": "^1.0.69",
"@gitzone/tsrun": "^1.2.8", "@gitzone/tsrun": "^1.2.8",
"@gitzone/tstest": "^1.0.28", "@gitzone/tstest": "^1.0.28",
"@pushrocks/tapbundle": "^3.2.0", "@pushrocks/tapbundle": "^3.2.1",
"@types/node": "^13.7.0", "@types/node": "^14.0.5",
"tslint": "^6.0.0", "tslint": "^6.1.2",
"tslint-config-prettier": "^1.18.0" "tslint-config-prettier": "^1.18.0"
}, },
"dependencies": { "dependencies": {
"@pushrocks/smartdelay": "^2.0.6", "@pushrocks/smartdelay": "^2.0.6",
"@pushrocks/smartmatch": "^1.0.7",
"@pushrocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@pushrocks/smartrx": "^2.0.5", "@pushrocks/smartrx": "^2.0.5",
"@pushrocks/smarttime": "^3.0.12", "@pushrocks/smarttime": "^3.0.15",
"@pushrocks/smartunique": "^3.0.1", "@pushrocks/smartunique": "^3.0.3",
"@types/minimatch": "^3.0.3", "@types/minimatch": "^3.0.3",
"minimatch": "^3.0.4",
"symbol-tree": "^3.2.4" "symbol-tree": "^3.2.4"
}, },
"files": [ "files": [
"ts/**/*", "ts/**/*",
"ts_web/**/*", "ts_web/**/*",
"dist/**/*", "dist/**/*",
"dist_web/**/*", "dist_*/**/*",
"dist_ts/**/*",
"dist_ts_web/**/*", "dist_ts_web/**/*",
"assets/**/*", "assets/**/*",
"cli.js", "cli.js",

View File

@ -35,7 +35,6 @@ like when a certain string is removed or added to the map
Sometimes you need to keep track of objects, but implementing logic for removing, finding or updating is tedious. Sometimes you need to keep track of objects, but implementing logic for removing, finding or updating is tedious.
Objectmap takes care of keeping track of objects for you. Objectmap takes care of keeping track of objects for you.
## Contribution ## Contribution
We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :) We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)

View File

@ -11,7 +11,7 @@ interface ITestObject {
propOne: string; propOne: string;
propTwo: string; propTwo: string;
} }
let testObjectmap: lik.Objectmap<ITestObject>; let testObjectmap: lik.ObjectMap<ITestObject>;
let testObject1: ITestObject = { let testObject1: ITestObject = {
propOne: 'hello', propOne: 'hello',
propTwo: 'hello2' propTwo: 'hello2'
@ -22,8 +22,8 @@ let testObject2: ITestObject = {
}; };
tap.test('new lik.Objectmap() -> should correctly instantiate an Objectmap', async () => { tap.test('new lik.Objectmap() -> should correctly instantiate an Objectmap', async () => {
testObjectmap = new lik.Objectmap<ITestObject>(); testObjectmap = new lik.ObjectMap<ITestObject>();
expect(testObjectmap).be.instanceof(lik.Objectmap); expect(testObjectmap).be.instanceof(lik.ObjectMap);
}); });
tap.test('lik.Objectmap.add() -> should correctly add an object to Objectmap', async () => { tap.test('lik.Objectmap.add() -> should correctly add an object to Objectmap', async () => {

View File

@ -1,5 +1,3 @@
import * as plugins from './lik.plugins';
/** /**
* fast map allows for very quick lookups of objects with a unique key * fast map allows for very quick lookups of objects with a unique key
*/ */
@ -10,8 +8,14 @@ export class FastMap<T> {
return this.mapObject[keyArg] ? false : true; return this.mapObject[keyArg] ? false : true;
} }
public addToMap(keyArg: string, objectArg: T): boolean { public addToMap(
if (this.isUniqueKey(keyArg)) { keyArg: string,
objectArg: T,
optionsArg?: {
force: boolean;
}
): boolean {
if (this.isUniqueKey(keyArg) || (optionsArg && optionsArg.force)) {
this.mapObject[keyArg] = objectArg; this.mapObject[keyArg] = objectArg;
return true; return true;
} else { } else {
@ -32,9 +36,9 @@ export class FastMap<T> {
public getKeys() { public getKeys() {
const keys: string[] = []; const keys: string[] = [];
for (const keyArg in this.mapObject) { for (const keyArg in this.mapObject) {
if (this.mapObject[keyArg]) { if (this.mapObject[keyArg]) {
keys.push(keyArg); keys.push(keyArg);
} }
} }
return keys; return keys;
} }
@ -42,4 +46,35 @@ export class FastMap<T> {
public clean() { public clean() {
this.mapObject = {}; this.mapObject = {};
} }
/**
* returns a new Objectmap that includes
*/
public concat(fastMapArg: FastMap<T>) {
const concatedFastmap = new FastMap<T>();
for (const key of this.getKeys()) {
concatedFastmap.addToMap(key, this.getByKey(key));
}
for (const key of fastMapArg.getKeys()) {
concatedFastmap.addToMap(key, fastMapArg.getByKey(key), {
force: true
});
}
return concatedFastmap;
}
/**
* tries to merge another Objectmap
* Note: uniqueKeyCollisions will cause overwrite
* @param objectMapArg
*/
public addAllFromOther(fastMapArg: FastMap<T>) {
for (const key of fastMapArg.getKeys()) {
this.addToMap(key, fastMapArg.getByKey(key), {
force: true
});
}
}
} }

View File

@ -1,5 +1,5 @@
import * as plugins from './lik.plugins'; import * as plugins from './lik.plugins';
import { Objectmap } from './lik.objectmap'; import { ObjectMap } from './lik.objectmap';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
@ -11,7 +11,7 @@ export class InterestMap<DTInterestId, DTInterestFullfillment> {
/** /**
* stores interests that are currently fullfilled by the cache * stores interests that are currently fullfilled by the cache
*/ */
private interestObjectMap = new Objectmap<Interest<DTInterestId, DTInterestFullfillment>>(); private interestObjectMap = new ObjectMap<Interest<DTInterestId, DTInterestFullfillment>>();
/** /**
* a function to compare interests * a function to compare interests

View File

@ -1,9 +1,9 @@
import * as plugins from './lik.plugins'; import * as plugins from './lik.plugins';
import { Objectmap } from './lik.objectmap'; import { ObjectMap } from './lik.objectmap';
export class LoopTracker<T> { export class LoopTracker<T> {
referenceObjectMap = new Objectmap<any>(); referenceObjectMap = new ObjectMap<any>();
constructor() { constructor() {
// nothing here // nothing here
} }

View File

@ -12,7 +12,7 @@ export interface IObjectmapFindFunction<T> {
/** /**
* allows keeping track of objects * allows keeping track of objects
*/ */
export class Objectmap<T> { export class ObjectMap<T> {
private fastMap = new FastMap<T>(); private fastMap = new FastMap<T>();
// events // events
@ -186,4 +186,23 @@ export class Objectmap<T> {
this.fastMap.removeFromMap(keyArg); this.fastMap.removeFromMap(keyArg);
} }
} }
/**
* returns a new Objectmap that includes
*/
public concat(objectMapArg: ObjectMap<T>) {
const concattedObjectMap = new ObjectMap<T>();
concattedObjectMap.fastMap.addAllFromOther(this.fastMap);
concattedObjectMap.fastMap.addAllFromOther(objectMapArg.fastMap);
return concattedObjectMap;
}
/**
* tries to merge another Objectmap
* Note: uniqueKeyCollisions will cause overwrite
* @param objectMapArg
*/
public addAllFromOther(objectMapArg: ObjectMap<T>) {
this.fastMap.addAllFromOther(objectMapArg.fastMap);
}
} }

View File

@ -1,26 +1,18 @@
// ==============
// native
// ==============
import * as events from 'events';
export { events };
// ============== // ==============
// @pushrocks // @pushrocks
// ============== // ==============
import * as smartdelay from '@pushrocks/smartdelay'; import * as smartdelay from '@pushrocks/smartdelay';
import * as smartmatch from '@pushrocks/smartmatch';
import * as smartpromise from '@pushrocks/smartpromise'; import * as smartpromise from '@pushrocks/smartpromise';
import * as smartrx from '@pushrocks/smartrx'; import * as smartrx from '@pushrocks/smartrx';
import * as smarttime from '@pushrocks/smarttime'; import * as smarttime from '@pushrocks/smarttime';
import * as smartunique from '@pushrocks/smartunique'; import * as smartunique from '@pushrocks/smartunique';
export { smartdelay, smartpromise, smartrx, smarttime, smartunique }; export { smartdelay, smartmatch, smartpromise, smartrx, smarttime, smartunique };
// ============== // ==============
// third party // third party
// ============== // ==============
import minimatch from 'minimatch';
const symbolTree = require('symbol-tree'); const symbolTree = require('symbol-tree');
export { minimatch, symbolTree }; export { symbolTree };

View File

@ -1,16 +1,15 @@
import * as plugins from './lik.plugins'; import { SmartMatch } from '@pushrocks/smartmatch';
import * as smartpromise from '@pushrocks/smartpromise';
/** /**
* allows you to easily keep track of a bunch of strings * allows you to easily keep track of a bunch of strings
*/ */
export interface ITriggerFunction { export type TTriggerFunction = (stringArray?: string[]) => boolean;
(): boolean;
}
export class Stringmap { export class Stringmap {
private _stringArray: string[] = []; private _stringArray: string[] = [];
private _triggerUntilTrueFunctionArray: ITriggerFunction[] = []; private _triggerUntilTrueFunctionArray: TTriggerFunction[] = [];
constructor() {} constructor() {}
/** /**
* add a string to the Stringmap * add a string to the Stringmap
@ -60,9 +59,10 @@ export class Stringmap {
* checks stringPresence with minimatch * checks stringPresence with minimatch
*/ */
public checkMinimatch(miniMatchStringArg: string): boolean { public checkMinimatch(miniMatchStringArg: string): boolean {
const smartMatchInstance = new SmartMatch(miniMatchStringArg);
let foundMatch: boolean = false; let foundMatch: boolean = false;
for (const stringItem of this._stringArray) { for (const stringItem of this._stringArray) {
if (plugins.minimatch(stringItem, miniMatchStringArg)) { if (smartMatchInstance.match(stringItem)) {
foundMatch = true; foundMatch = true;
} }
} }
@ -92,15 +92,20 @@ export class Stringmap {
/** /**
* register a new trigger * register a new trigger
*/ */
public registerUntilTrue(functionArg: ITriggerFunction, doFunctionArg) { public registerUntilTrue(functionArg: TTriggerFunction, callbackArg?: () => any) {
const trueDeferred = smartpromise.defer();
this._triggerUntilTrueFunctionArray.push(() => { this._triggerUntilTrueFunctionArray.push(() => {
const result = functionArg(); const result = functionArg(this.getStringArray());
if (result === true) { if (result === true) {
doFunctionArg(); if (callbackArg) {
callbackArg();
}
trueDeferred.resolve();
} }
return result; return result;
}); });
this.notifyTrigger(); this.notifyTrigger();
return trueDeferred.promise;
} }
/** /**