tlojs
Version:
The Last One - The last npm package you'll need to install
56 lines (45 loc) • 1.21 kB
text/typescript
import { GenericObject } from "../types/type";
declare type JSONQueryGreaterThan = {
$gt: number;
};
declare type JSONQueryGreaterThanOrEquals = {
$gte: number
};
declare type JSONQueryValue = JSONQueryGreaterThan | JSONQueryGreaterThanOrEquals
export declare type JSONQuery = {
$key?: JSONQueryValue
}
export class JsonQuery {
constructor(
private json: GenericObject
) {
}
query<T = object>(query: JSONQuery): T {
const obj = {}
if (query.$key) {
return this.anyKeyWith(query.$key)
}
return obj as T
}
private anyKeyWith<T>(query: JSONQueryValue): T {
const obj: GenericObject = {}
const keys = Object.keys(this.json)
for (const key of keys) {
const val = this.json[key]
if (!isNaN(Number(val))) {
if ((query as JSONQueryGreaterThan).$gt) {
const gtVal = (query as JSONQueryGreaterThan).$gt
if (val > gtVal) {
obj[key] = val
}
} else if ((query as JSONQueryGreaterThanOrEquals).$gte) {
const gtVal = (query as JSONQueryGreaterThanOrEquals).$gte
if (val >= gtVal) {
obj[key] = val
}
}
}
}
return obj as T
}
}