Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
a838f7eb80 | |||
979e93be27 | |||
60587f052c | |||
da5bd43a42 | |||
24559d1582 | |||
d92657b130 | |||
f8f34bf8a3 | |||
861d2c04b3 | |||
5845d74160 | |||
9dd952e6b7 | |||
742a711359 | |||
8878a0ef8b | |||
6a52e81cdd | |||
757e709f3f | |||
e0d9c3a3e0 | |||
150953adaf | |||
e0eba5d206 | |||
d9eb836f98 | |||
6d29798660 | |||
f80a84086c | |||
929a6eff07 | |||
87243881bb | |||
5d51c14bd6 | |||
453c6d6ae8 | |||
2e9fe308df | |||
96a71638a0 | |||
1c7582d328 | |||
ccff9b39be | |||
749be9ac60 | |||
7c9ad26519 |
4
.gitignore
vendored
4
.gitignore
vendored
@ -15,8 +15,6 @@ node_modules/
|
|||||||
|
|
||||||
# builds
|
# builds
|
||||||
dist/
|
dist/
|
||||||
dist_web/
|
dist_*/
|
||||||
dist_serve/
|
|
||||||
dist_ts_web/
|
|
||||||
|
|
||||||
# custom
|
# custom
|
@ -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
|
||||||
|
10721
package-lock.json
generated
10721
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
36
package.json
36
package.json
@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "@pushrocks/lik",
|
"name": "@pushrocks/lik",
|
||||||
"version": "4.0.0",
|
"version": "4.0.15",
|
||||||
"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 --web && tsbundle npm)"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -20,33 +20,37 @@
|
|||||||
},
|
},
|
||||||
"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/tsrun": "^1.2.8",
|
"@gitzone/tsbundle": "^1.0.72",
|
||||||
"@gitzone/tstest": "^1.0.28",
|
"@gitzone/tsrun": "^1.2.12",
|
||||||
"@pushrocks/tapbundle": "^3.2.0",
|
"@gitzone/tstest": "^1.0.41",
|
||||||
"@types/node": "^13.7.0",
|
"@pushrocks/tapbundle": "^3.2.9",
|
||||||
"tslint": "^6.0.0",
|
"@types/node": "^14.0.22",
|
||||||
|
"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.10",
|
||||||
|
"@pushrocks/smartmatch": "^1.0.7",
|
||||||
"@pushrocks/smartpromise": "^3.0.6",
|
"@pushrocks/smartpromise": "^3.0.6",
|
||||||
"@pushrocks/smartrx": "^2.0.5",
|
"@pushrocks/smartrx": "^2.0.17",
|
||||||
"@pushrocks/smarttime": "^3.0.12",
|
"@pushrocks/smarttime": "^3.0.24",
|
||||||
"@pushrocks/smartunique": "^3.0.1",
|
|
||||||
"@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",
|
||||||
"npmextra.json",
|
"npmextra.json",
|
||||||
"readme.md"
|
"readme.md"
|
||||||
|
],
|
||||||
|
"browserslist": [
|
||||||
|
"last 1 chrome versions"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
22
readme.md
22
readme.md
@ -8,13 +8,20 @@ light little helpers for node
|
|||||||
* [docs (typedoc)](https://pushrocks.gitlab.io/lik/)
|
* [docs (typedoc)](https://pushrocks.gitlab.io/lik/)
|
||||||
|
|
||||||
## Status for master
|
## Status for master
|
||||||
[](https://gitlab.com/pushrocks/lik/commits/master)
|
|
||||||
[](https://gitlab.com/pushrocks/lik/commits/master)
|
Status Category | Status Badge
|
||||||
[](https://www.npmjs.com/package/@pushrocks/lik)
|
-- | --
|
||||||
[](https://snyk.io/test/npm/@pushrocks/lik)
|
GitLab Pipelines | [](https://lossless.cloud)
|
||||||
[](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
GitLab Pipline Test Coverage | [](https://lossless.cloud)
|
||||||
[](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
npm | [](https://lossless.cloud)
|
||||||
[](https://prettier.io/)
|
Snyk | [](https://lossless.cloud)
|
||||||
|
TypeScript Support | [](https://lossless.cloud)
|
||||||
|
node Support | [](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
||||||
|
Code Style | [](https://lossless.cloud)
|
||||||
|
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
||||||
|
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
||||||
|
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
||||||
|
Platform support | [](https://lossless.cloud) [](https://lossless.cloud)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@ -35,7 +42,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). :)
|
||||||
|
@ -4,7 +4,7 @@ import * as lik from '../ts/index';
|
|||||||
let testInterestmap: lik.InterestMap<number, number>;
|
let testInterestmap: lik.InterestMap<number, number>;
|
||||||
|
|
||||||
tap.test('should create an interestmap', async () => {
|
tap.test('should create an interestmap', async () => {
|
||||||
testInterestmap = new lik.InterestMap(numberArg => {
|
testInterestmap = new lik.InterestMap((numberArg) => {
|
||||||
return numberArg.toString();
|
return numberArg.toString();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
78
test/test.objectmap.browser.ts
Normal file
78
test/test.objectmap.browser.ts
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
// import test framework
|
||||||
|
import { expect, tap } from '@pushrocks/tapbundle';
|
||||||
|
import * as events from 'events';
|
||||||
|
import * as smartpromise from '@pushrocks/smartpromise';
|
||||||
|
|
||||||
|
// import the module
|
||||||
|
import * as lik from '../ts/index';
|
||||||
|
|
||||||
|
// Objectmap
|
||||||
|
interface ITestObject {
|
||||||
|
propOne: string;
|
||||||
|
propTwo: string;
|
||||||
|
}
|
||||||
|
let testObjectmap: lik.ObjectMap<ITestObject>;
|
||||||
|
let testObject1: ITestObject = {
|
||||||
|
propOne: 'hello',
|
||||||
|
propTwo: 'hello2',
|
||||||
|
};
|
||||||
|
let testObject2: ITestObject = {
|
||||||
|
propOne: 'hello',
|
||||||
|
propTwo: 'hello2',
|
||||||
|
};
|
||||||
|
|
||||||
|
tap.test('new lik.Objectmap() -> should correctly instantiate an Objectmap', async () => {
|
||||||
|
testObjectmap = new lik.ObjectMap<ITestObject>();
|
||||||
|
expect(testObjectmap).be.instanceof(lik.ObjectMap);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('lik.Objectmap.add() -> should correctly add an object to Objectmap', async () => {
|
||||||
|
testObjectmap.add(testObject1);
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(testObjectmap.checkForObject(testObject1)).be.true;
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(testObjectmap.checkForObject(testObject2)).be.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('lik.Objectmap.remove() -> should correctly remove an object to Objectmap', async () => {
|
||||||
|
testObjectmap.add(testObject2);
|
||||||
|
testObjectmap.remove(testObject1);
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(testObjectmap.checkForObject(testObject1)).be.false;
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(testObjectmap.checkForObject(testObject2)).be.true;
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('Objectmap.forEach -> should correctly run a function forEach map object', async () => {
|
||||||
|
testObjectmap.forEach((itemArg) => {
|
||||||
|
expect(itemArg).to.have.property('propOne');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('lik.Objectmap.find() -> should correctly find an object', async () => {
|
||||||
|
let myObject = { propOne: 'helloThere', propTwo: 'helloAnyway' };
|
||||||
|
testObjectmap.add(myObject);
|
||||||
|
let referenceObject = testObjectmap.find((itemArg) => {
|
||||||
|
return itemArg.propOne === 'helloThere';
|
||||||
|
});
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(myObject === referenceObject).be.true;
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('lik.Objectmap.getArray() -> should return a cloned array', async () => {
|
||||||
|
let myObject = { propOne: 'test1', propTwo: 'wow, how awesome' };
|
||||||
|
testObjectmap.add(myObject);
|
||||||
|
let clonedArray = testObjectmap.getArray();
|
||||||
|
expect(clonedArray[clonedArray.length - 1]).to.eql(myObject);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('should get one object and then remove it', async () => {
|
||||||
|
let originalLength = testObjectmap.getArray().length;
|
||||||
|
let oneObject = testObjectmap.getOneAndRemove();
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(oneObject).not.be.null;
|
||||||
|
expect(testObjectmap.getArray().length).equal(originalLength - 1);
|
||||||
|
expect(testObjectmap.getArray()).to.not.contain(oneObject);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.start();
|
@ -14,11 +14,11 @@ interface ITestObject {
|
|||||||
let testObjectmap: lik.ObjectMap<ITestObject>;
|
let testObjectmap: lik.ObjectMap<ITestObject>;
|
||||||
let testObject1: ITestObject = {
|
let testObject1: ITestObject = {
|
||||||
propOne: 'hello',
|
propOne: 'hello',
|
||||||
propTwo: 'hello2'
|
propTwo: 'hello2',
|
||||||
};
|
};
|
||||||
let testObject2: ITestObject = {
|
let testObject2: ITestObject = {
|
||||||
propOne: 'hello',
|
propOne: 'hello',
|
||||||
propTwo: 'hello2'
|
propTwo: 'hello2',
|
||||||
};
|
};
|
||||||
|
|
||||||
tap.test('new lik.Objectmap() -> should correctly instantiate an Objectmap', async () => {
|
tap.test('new lik.Objectmap() -> should correctly instantiate an Objectmap', async () => {
|
||||||
@ -44,7 +44,7 @@ tap.test('lik.Objectmap.remove() -> should correctly remove an object to Objectm
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('Objectmap.forEach -> should correctly run a function forEach map object', async () => {
|
tap.test('Objectmap.forEach -> should correctly run a function forEach map object', async () => {
|
||||||
testObjectmap.forEach(itemArg => {
|
testObjectmap.forEach((itemArg) => {
|
||||||
expect(itemArg).to.have.property('propOne');
|
expect(itemArg).to.have.property('propOne');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -52,7 +52,7 @@ tap.test('Objectmap.forEach -> should correctly run a function forEach map objec
|
|||||||
tap.test('lik.Objectmap.find() -> should correctly find an object', async () => {
|
tap.test('lik.Objectmap.find() -> should correctly find an object', async () => {
|
||||||
let myObject = { propOne: 'helloThere', propTwo: 'helloAnyway' };
|
let myObject = { propOne: 'helloThere', propTwo: 'helloAnyway' };
|
||||||
testObjectmap.add(myObject);
|
testObjectmap.add(myObject);
|
||||||
let referenceObject = testObjectmap.find(itemArg => {
|
let referenceObject = testObjectmap.find((itemArg) => {
|
||||||
return itemArg.propOne === 'helloThere';
|
return itemArg.propOne === 'helloThere';
|
||||||
});
|
});
|
||||||
// tslint:disable-next-line:no-unused-expression
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
@ -8,12 +8,12 @@ import * as lik from '../ts/index';
|
|||||||
|
|
||||||
let testTimedAggregator: lik.TimedAggregtor<string>;
|
let testTimedAggregator: lik.TimedAggregtor<string>;
|
||||||
|
|
||||||
tap.test('should create a timed aggregaotor', async tools => {
|
tap.test('should create a timed aggregaotor', async (tools) => {
|
||||||
testTimedAggregator = new lik.TimedAggregtor<string>({
|
testTimedAggregator = new lik.TimedAggregtor<string>({
|
||||||
aggregationIntervalInMillis: 1000,
|
aggregationIntervalInMillis: 1000,
|
||||||
functionForAggregation: aggregation => {
|
functionForAggregation: (aggregation) => {
|
||||||
console.log(aggregation);
|
console.log(aggregation);
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
testTimedAggregator.add('This');
|
testTimedAggregator.add('This');
|
||||||
testTimedAggregator.add('is a whole sentence.');
|
testTimedAggregator.add('is a whole sentence.');
|
||||||
|
@ -1 +0,0 @@
|
|||||||
import './test.objectmap';
|
|
@ -60,7 +60,7 @@ export class FastMap<T> {
|
|||||||
|
|
||||||
for (const key of fastMapArg.getKeys()) {
|
for (const key of fastMapArg.getKeys()) {
|
||||||
concatedFastmap.addToMap(key, fastMapArg.getByKey(key), {
|
concatedFastmap.addToMap(key, fastMapArg.getByKey(key), {
|
||||||
force: true
|
force: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ export class FastMap<T> {
|
|||||||
public addAllFromOther(fastMapArg: FastMap<T>) {
|
public addAllFromOther(fastMapArg: FastMap<T>) {
|
||||||
for (const key of fastMapArg.getKeys()) {
|
for (const key of fastMapArg.getKeys()) {
|
||||||
this.addToMap(key, fastMapArg.getByKey(key), {
|
this.addToMap(key, fastMapArg.getByKey(key), {
|
||||||
force: true
|
force: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,13 @@ import * as plugins from './lik.plugins';
|
|||||||
|
|
||||||
import { InterestMap, IInterestComparisonFunc } from './lik.interestmap';
|
import { InterestMap, IInterestComparisonFunc } from './lik.interestmap';
|
||||||
|
|
||||||
|
export interface IInterestOptions {
|
||||||
|
markLostAfterDefault: number;
|
||||||
|
}
|
||||||
|
|
||||||
export class Interest<DTInterestId, DTInterestFullfillment> {
|
export class Interest<DTInterestId, DTInterestFullfillment> {
|
||||||
|
public options: IInterestOptions;
|
||||||
|
|
||||||
private interestMapRef: InterestMap<DTInterestId, DTInterestFullfillment>;
|
private interestMapRef: InterestMap<DTInterestId, DTInterestFullfillment>;
|
||||||
public originalInterest: DTInterestId;
|
public originalInterest: DTInterestId;
|
||||||
public comparisonFunc: IInterestComparisonFunc<DTInterestId>;
|
public comparisonFunc: IInterestComparisonFunc<DTInterestId>;
|
||||||
@ -41,14 +47,20 @@ export class Interest<DTInterestId, DTInterestFullfillment> {
|
|||||||
constructor(
|
constructor(
|
||||||
interestMapArg: InterestMap<DTInterestId, DTInterestFullfillment>,
|
interestMapArg: InterestMap<DTInterestId, DTInterestFullfillment>,
|
||||||
interestArg: DTInterestId,
|
interestArg: DTInterestId,
|
||||||
comparisonFuncArg: IInterestComparisonFunc<DTInterestId>
|
comparisonFuncArg: IInterestComparisonFunc<DTInterestId>,
|
||||||
|
optionsArg?: IInterestOptions
|
||||||
) {
|
) {
|
||||||
|
this.interestMapRef = interestMapArg;
|
||||||
this.originalInterest = interestArg;
|
this.originalInterest = interestArg;
|
||||||
this.comparisonFunc = comparisonFuncArg;
|
this.comparisonFunc = comparisonFuncArg;
|
||||||
this.interestMapRef = interestMapArg;
|
this.options = optionsArg;
|
||||||
|
|
||||||
this.destructionTimer.completed.then(() => {
|
this.destructionTimer.completed.then(() => {
|
||||||
this.destroy();
|
this.destroy();
|
||||||
});
|
});
|
||||||
|
if (this.options?.markLostAfterDefault) {
|
||||||
|
plugins.smartdelay.delayFor(this.options.markLostAfterDefault).then(this.markLost);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
|
@ -7,7 +7,13 @@ import { Interest } from './lik.interestmap.interest';
|
|||||||
|
|
||||||
export type IInterestComparisonFunc<T> = (objectArg: T) => string;
|
export type IInterestComparisonFunc<T> = (objectArg: T) => string;
|
||||||
|
|
||||||
|
export interface IInterestMapOptions {
|
||||||
|
markLostAfterDefault?: number;
|
||||||
|
}
|
||||||
|
|
||||||
export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
||||||
|
public options: IInterestMapOptions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stores interests that are currently fullfilled by the cache
|
* stores interests that are currently fullfilled by the cache
|
||||||
*/
|
*/
|
||||||
@ -18,8 +24,9 @@ export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
|||||||
*/
|
*/
|
||||||
private comparisonFunc: IInterestComparisonFunc<DTInterestId>;
|
private comparisonFunc: IInterestComparisonFunc<DTInterestId>;
|
||||||
|
|
||||||
constructor(comparisonFuncArg: IInterestComparisonFunc<DTInterestId>) {
|
constructor(comparisonFuncArg: IInterestComparisonFunc<DTInterestId>, optionsArg: IInterestMapOptions = {}) {
|
||||||
this.comparisonFunc = comparisonFuncArg;
|
this.comparisonFunc = comparisonFuncArg;
|
||||||
|
this.options = optionsArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,10 +41,13 @@ export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
|||||||
const newInterest = new Interest<DTInterestId, DTInterestFullfillment>(
|
const newInterest = new Interest<DTInterestId, DTInterestFullfillment>(
|
||||||
this,
|
this,
|
||||||
objectArg,
|
objectArg,
|
||||||
this.comparisonFunc
|
this.comparisonFunc,
|
||||||
|
{
|
||||||
|
markLostAfterDefault: this.options.markLostAfterDefault
|
||||||
|
}
|
||||||
);
|
);
|
||||||
let interestExists = false;
|
let interestExists = false;
|
||||||
await this.interestObjectMap.forEach(interestArg => {
|
await this.interestObjectMap.forEach((interestArg) => {
|
||||||
if (!interestExists && interestArg.comparisonString === newInterest.comparisonString) {
|
if (!interestExists && interestArg.comparisonString === newInterest.comparisonString) {
|
||||||
console.log('info', `interest already exists for ${newInterest.comparisonString}`);
|
console.log('info', `interest already exists for ${newInterest.comparisonString}`);
|
||||||
interestExists = true;
|
interestExists = true;
|
||||||
@ -61,7 +71,7 @@ export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
|||||||
* @param objectArg removes an interest from the InterestMap
|
* @param objectArg removes an interest from the InterestMap
|
||||||
*/
|
*/
|
||||||
public removeInterest(interestArg: Interest<DTInterestId, DTInterestFullfillment>) {
|
public removeInterest(interestArg: Interest<DTInterestId, DTInterestFullfillment>) {
|
||||||
const interestToRemove = this.interestObjectMap.findOneAndRemove(interestArg2 => {
|
const interestToRemove = this.interestObjectMap.findOneAndRemove((interestArg2) => {
|
||||||
return interestArg.comparisonString === interestArg2.comparisonString;
|
return interestArg.comparisonString === interestArg2.comparisonString;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -79,7 +89,7 @@ export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
|||||||
* @param comparisonStringArg
|
* @param comparisonStringArg
|
||||||
*/
|
*/
|
||||||
public checkInterestByString(comparisonStringArg: string): boolean {
|
public checkInterestByString(comparisonStringArg: string): boolean {
|
||||||
const foundInterest = this.interestObjectMap.find(interest => {
|
const foundInterest = this.interestObjectMap.find((interest) => {
|
||||||
return interest.comparisonString === comparisonStringArg;
|
return interest.comparisonString === comparisonStringArg;
|
||||||
});
|
});
|
||||||
if (foundInterest) {
|
if (foundInterest) {
|
||||||
@ -106,7 +116,7 @@ export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
|||||||
*/
|
*/
|
||||||
public findInterest(objectArg: DTInterestId): Interest<DTInterestId, DTInterestFullfillment> {
|
public findInterest(objectArg: DTInterestId): Interest<DTInterestId, DTInterestFullfillment> {
|
||||||
const comparableString = this.comparisonFunc(objectArg);
|
const comparableString = this.comparisonFunc(objectArg);
|
||||||
const interest = this.interestObjectMap.find(interestArg => {
|
const interest = this.interestObjectMap.find((interestArg) => {
|
||||||
return interestArg.comparisonString === comparableString;
|
return interestArg.comparisonString === comparableString;
|
||||||
});
|
});
|
||||||
return interest; // if an interest is found, the interest is returned, otherwise interest is null
|
return interest; // if an interest is found, the interest is returned, otherwise interest is null
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
import * as plugins from './lik.plugins';
|
import * as plugins from './lik.plugins';
|
||||||
import { FastMap } from './lik.fastmap';
|
import { FastMap } from './lik.fastmap';
|
||||||
|
|
||||||
|
export const uni = (prefix: string = 'uni') => {
|
||||||
|
return `${prefix}xxxxxxxxxxx`.replace(/[xy]/g, (c) => {
|
||||||
|
const r = (Math.random() * 16) | 0;
|
||||||
|
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
||||||
|
return v.toString(16);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export interface IObjectmapForEachFunction<T> {
|
export interface IObjectmapForEachFunction<T> {
|
||||||
(itemArg: T): void;
|
(itemArg: T): void;
|
||||||
}
|
}
|
||||||
@ -64,7 +72,7 @@ export class ObjectMap<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// otherwise lets create it
|
// otherwise lets create it
|
||||||
const uniqueKey = plugins.smartunique.shortId();
|
const uniqueKey = uni('key');
|
||||||
this.addMappedUnique(uniqueKey, objectArg);
|
this.addMappedUnique(uniqueKey, objectArg);
|
||||||
return uniqueKey;
|
return uniqueKey;
|
||||||
}
|
}
|
||||||
@ -188,7 +196,7 @@ export class ObjectMap<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a new Objectmap that includes
|
* returns a new Objectmap that includes
|
||||||
*/
|
*/
|
||||||
public concat(objectMapArg: ObjectMap<T>) {
|
public concat(objectMapArg: ObjectMap<T>) {
|
||||||
const concattedObjectMap = new ObjectMap<T>();
|
const concattedObjectMap = new ObjectMap<T>();
|
||||||
|
@ -1,26 +1,17 @@
|
|||||||
// ==============
|
|
||||||
// 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';
|
|
||||||
|
|
||||||
export { smartdelay, smartpromise, smartrx, smarttime, smartunique };
|
export { smartdelay, smartmatch, smartpromise, smartrx, smarttime };
|
||||||
|
|
||||||
// ==============
|
// ==============
|
||||||
// third party
|
// third party
|
||||||
// ==============
|
// ==============
|
||||||
import minimatch from 'minimatch';
|
|
||||||
const symbolTree = require('symbol-tree');
|
const symbolTree = require('symbol-tree');
|
||||||
|
|
||||||
export { minimatch, symbolTree };
|
export { symbolTree };
|
||||||
|
@ -4,13 +4,11 @@ import * as plugins from './lik.plugins';
|
|||||||
* 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 +58,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 plugins.smartmatch.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,22 +91,27 @@ export class Stringmap {
|
|||||||
/**
|
/**
|
||||||
* register a new trigger
|
* register a new trigger
|
||||||
*/
|
*/
|
||||||
public registerUntilTrue(functionArg: ITriggerFunction, doFunctionArg) {
|
public registerUntilTrue(functionArg: TTriggerFunction, callbackArg?: () => any) {
|
||||||
|
const trueDeferred = plugins.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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* notifies triggers
|
* notifies triggers
|
||||||
*/
|
*/
|
||||||
private notifyTrigger() {
|
private notifyTrigger() {
|
||||||
const filteredArray = this._triggerUntilTrueFunctionArray.filter(functionArg => {
|
const filteredArray = this._triggerUntilTrueFunctionArray.filter((functionArg) => {
|
||||||
return !functionArg();
|
return !functionArg();
|
||||||
});
|
});
|
||||||
this._triggerUntilTrueFunctionArray = filteredArray;
|
this._triggerUntilTrueFunctionArray = filteredArray;
|
||||||
|
Reference in New Issue
Block a user