qweery 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,6 +12,7 @@ npm install qweery
12
12
  - Typescript first design, ensuring type safety and autocompletion.
13
13
  - ORM-like querying.
14
14
  - Chainable API for building complex queries.
15
+ - Fast? I don't really know.
15
16
 
16
17
  ## Usage
17
18
 
@@ -81,4 +82,24 @@ console.log(
81
82
  );
82
83
 
83
84
  // Output: [{ name: 'Charlie', age: 35 }]
85
+ ```
86
+
87
+ ```typescript
88
+ console.log(
89
+ qweery
90
+ // name.includes('a') || age > 30
91
+ .where({
92
+ name: {
93
+ includes: 'a'
94
+ },
95
+ $OR: {
96
+ age: { greaterThan: 30 }
97
+ }
98
+ })
99
+ .skip(0)
100
+ .take(10)
101
+ .toArray()
102
+ );
103
+
104
+ // Output: [{ name: 'Charlie', age: 35 }, { name: 'David', age: 28 }]
84
105
  ```
package/dist/index.cjs CHANGED
@@ -1,5 +1,137 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
+ //#region src/classes/Primitive.ts
4
+ var Primitive = class Primitive {
5
+ static satisfiesValue(value, options) {
6
+ if (Primitive.isDefined(options.equals) && value !== options.equals) return false;
7
+ if (Primitive.isDefined(options.notEquals) && value === options.notEquals) return false;
8
+ return true;
9
+ }
10
+ static statisfiesString(value, options) {
11
+ if (options.caseInsensitive) value = value.toLowerCase();
12
+ if (!this.satisfiesValue(value, options)) return false;
13
+ if (Primitive.isDefined(options.startsWith) && !value.startsWith(options.startsWith)) return false;
14
+ if (Primitive.isDefined(options.endsWith) && !value.endsWith(options.endsWith)) return false;
15
+ if (Primitive.isDefined(options.includes) && !value.includes(options.includes)) return false;
16
+ if (Primitive.isDefined(options.matches) && !options.matches.test(value)) return false;
17
+ return true;
18
+ }
19
+ static statisfiesNumerical(value, options) {
20
+ value = Primitive.normalizeNumericalValue(value);
21
+ if (Primitive.isDefined(options.equals) && value !== Primitive.normalizeNumericalValue(options.equals)) return false;
22
+ if (Primitive.isDefined(options.notEquals) && value === Primitive.normalizeNumericalValue(options.notEquals)) return false;
23
+ if (Primitive.isDefined(options.greaterThan) && value <= Primitive.normalizeNumericalValue(options.greaterThan)) return false;
24
+ if (Primitive.isDefined(options.greaterThanOrEqual) && value < Primitive.normalizeNumericalValue(options.greaterThanOrEqual)) return false;
25
+ if (Primitive.isDefined(options.lessThan) && value >= Primitive.normalizeNumericalValue(options.lessThan)) return false;
26
+ if (Primitive.isDefined(options.lessThanOrEqual) && value > Primitive.normalizeNumericalValue(options.lessThanOrEqual)) return false;
27
+ return true;
28
+ }
29
+ static statisfiesArray(value, options) {
30
+ if (!this.satisfiesValue(value, options)) return false;
31
+ if (Primitive.isDefined(options.includesEvery) && !options.includesEvery.every((item) => value.includes(item))) return false;
32
+ if (Primitive.isDefined(options.includesSome) && !options.includesSome.some((item) => value.includes(item))) return false;
33
+ if (Primitive.isDefined(options.includesNone) && options.includesNone.some((item) => value.includes(item))) return false;
34
+ if (Primitive.isDefined(options.length) && !Primitive.statisfiesNumerical(value.length, options.length)) return false;
35
+ return true;
36
+ }
37
+ };
38
+ (function(_Primitive) {
39
+ function normalizeNumericalValue(value) {
40
+ return value instanceof Date ? value.getTime() : value;
41
+ }
42
+ _Primitive.normalizeNumericalValue = normalizeNumericalValue;
43
+ function isNumerical(value) {
44
+ return typeof value === "number" || typeof value === "bigint" || value instanceof Date;
45
+ }
46
+ _Primitive.isNumerical = isNumerical;
47
+ function isDefined(value) {
48
+ return value !== void 0;
49
+ }
50
+ _Primitive.isDefined = isDefined;
51
+ })(Primitive || (Primitive = {}));
52
+
53
+ //#endregion
54
+ //#region src/classes/Where.ts
55
+ var Where = class Where {
56
+ data;
57
+ constructor(data) {
58
+ this.data = Array.from(data);
59
+ }
60
+ filter(options) {
61
+ return this.data.filter((_, index) => this.satisfiesItem(options, index));
62
+ }
63
+ satisfiesItem(options, index) {
64
+ const item = this.data.at(index);
65
+ if (!item) return false;
66
+ let value = true;
67
+ for (const key in options) {
68
+ if (Where.isLogicalOperator(key)) {
69
+ const conditions = options[key];
70
+ switch (key) {
71
+ case "$NOT":
72
+ value = value && !(Array.isArray(conditions) ? conditions.every((condition) => this.satisfiesItem(condition, index)) : this.satisfiesItem(conditions, index));
73
+ break;
74
+ case "$AND":
75
+ value = value && (Array.isArray(conditions) ? conditions.every((condition) => this.satisfiesItem(condition, index)) : this.satisfiesItem(conditions, index));
76
+ break;
77
+ case "$OR":
78
+ value = Array.isArray(conditions) ? value && conditions.some((condition) => this.satisfiesItem(condition, index)) : value || this.satisfiesItem(conditions, index);
79
+ break;
80
+ }
81
+ continue;
82
+ }
83
+ const filter = options[key];
84
+ const itemValue = item[key];
85
+ if (filter instanceof Function) {
86
+ value = value && filter(itemValue, item, index, this.data);
87
+ continue;
88
+ }
89
+ if (typeof filter === "object") {
90
+ if (typeof itemValue === "string") {
91
+ value = value && Primitive.statisfiesString(itemValue, filter);
92
+ continue;
93
+ }
94
+ if (Array.isArray(itemValue)) {
95
+ value = value && Primitive.statisfiesArray(itemValue, filter);
96
+ continue;
97
+ }
98
+ if (Primitive.isNumerical(itemValue)) {
99
+ value = value && Primitive.statisfiesNumerical(itemValue, filter);
100
+ continue;
101
+ }
102
+ value = value && Primitive.satisfiesValue(itemValue, filter);
103
+ continue;
104
+ }
105
+ value = value && itemValue === filter;
106
+ }
107
+ return value;
108
+ }
109
+ };
110
+ (function(_Where) {
111
+ function isLogicalOperator(value) {
112
+ return value === "$AND" || value === "$OR" || value === "$NOT";
113
+ }
114
+ _Where.isLogicalOperator = isLogicalOperator;
115
+ })(Where || (Where = {}));
116
+ new Where([
117
+ {
118
+ name: "Alice",
119
+ age: 30,
120
+ sports: ["Football", "Basketball"]
121
+ },
122
+ {
123
+ name: "Bob",
124
+ age: 25,
125
+ sports: ["Football", "Basketball"]
126
+ },
127
+ {
128
+ name: "Charlie",
129
+ age: 35,
130
+ sports: ["Football", "Basketball"]
131
+ }
132
+ ]);
133
+
134
+ //#endregion
3
135
  //#region src/classes/Qweery.ts
4
136
  var Qweery = class Qweery {
5
137
  data;
@@ -7,13 +139,13 @@ var Qweery = class Qweery {
7
139
  this.data = Array.from(data);
8
140
  }
9
141
  query(options) {
10
- let result = this.data.filter((_, index) => options.where ? this.isItemMatch(index, options.where) : true);
142
+ let result = new Where(this.data).filter(options.where || {});
11
143
  if (options.skip) result = result.slice(options.skip);
12
144
  if (options.limit) result = result.slice(0, options.limit);
13
145
  return result;
14
146
  }
15
147
  where(options) {
16
- return new Qweery(this.data.filter((_, index) => this.isItemMatch(index, options)));
148
+ return new Qweery(new Where(this.data).filter(options || {}));
17
149
  }
18
150
  skip(count) {
19
151
  return new Qweery(this.data.slice(count));
@@ -33,85 +165,8 @@ var Qweery = class Qweery {
33
165
  toArray() {
34
166
  return this.data;
35
167
  }
36
- isItemMatch(index, options) {
37
- const item = this.data.at(index);
38
- if (!item) return false;
39
- const keys = Object.keys(options);
40
- for (const key of keys) {
41
- if (key.toString().startsWith("$") || options[key] === void 0) continue;
42
- let value;
43
- if (typeof options[key] === "function") value = options[key](item[key], item, index, this.data);
44
- else if (typeof options[key] === "object") if (typeof item[key] === "string") value = this.evaluateStringOperator(index, key, options[key]);
45
- else if (typeof item[key] === "number" || typeof item[key] === "bigint" || item[key] instanceof Date) value = this.evaluateNumericalOperator(index, key, options[key]);
46
- else if (Array.isArray(item[key])) value = this.evaluateArrayOperator(index, key, options[key]);
47
- else value = this.evaluateValueOperator(index, key, options[key]);
48
- else value = item[key] === options[key];
49
- if (!value) return false;
50
- }
51
- return this.evaluateLogicalOperator(index, options);
52
- }
53
- evaluateLogicalOperator(index, options) {
54
- if (options.$NOT) {
55
- for (const option of Array.isArray(options.$NOT) ? options.$NOT : [options.$NOT]) if (this.isItemMatch(index, option)) return false;
56
- }
57
- if (options.$AND) {
58
- for (const option of Array.isArray(options.$AND) ? options.$AND : [options.$AND]) if (!this.isItemMatch(index, option)) return false;
59
- }
60
- if (options.$OR) {
61
- let hasMatch = false;
62
- for (const option of Array.isArray(options.$OR) ? options.$OR : [options.$OR]) if (this.isItemMatch(index, option)) {
63
- hasMatch = true;
64
- break;
65
- }
66
- if (!hasMatch) return false;
67
- }
68
- return true;
69
- }
70
- evaluateValueOperator(index, property, operator) {
71
- if ("equals" in operator && operator.equals !== this.data[index][property]) return false;
72
- if ("notEquals" in operator && operator.notEquals === this.data[index][property]) return false;
73
- return this.evaluateLogicalOperator(index, operator);
74
- }
75
- evaluateNumericalOperator(index, property, operator) {
76
- if (!this.evaluateValueOperator(index, property, operator)) return false;
77
- const value = Qweery.normalizeNumericalValue(this.data[index][property]);
78
- if (operator.greaterThan !== void 0 && !(value > Qweery.normalizeNumericalValue(operator.greaterThan))) return false;
79
- if (operator.greaterThanOrEqual !== void 0 && !(value >= Qweery.normalizeNumericalValue(operator.greaterThanOrEqual))) return false;
80
- if (operator.lessThan !== void 0 && !(value < Qweery.normalizeNumericalValue(operator.lessThan))) return false;
81
- if (operator.lessThanOrEqual !== void 0 && !(value <= Qweery.normalizeNumericalValue(operator.lessThanOrEqual))) return false;
82
- return true;
83
- }
84
- evaluateStringOperator(index, property, operator) {
85
- if (!this.evaluateValueOperator(index, property, operator)) return false;
86
- let value = this.data[index][property];
87
- if (operator.caseInsensitive) value = value.toLowerCase();
88
- if (operator.includes && !value.includes(operator.caseInsensitive ? operator.includes.toLowerCase() : operator.includes)) return false;
89
- if (operator.startsWith && !value.startsWith(operator.caseInsensitive ? operator.startsWith.toLowerCase() : operator.startsWith)) return false;
90
- if (operator.endsWith && !value.endsWith(operator.caseInsensitive ? operator.endsWith.toLowerCase() : operator.endsWith)) return false;
91
- if (operator.matches && !operator.matches.test(value)) return false;
92
- return true;
93
- }
94
- evaluateArrayOperator(index, property, operator) {
95
- if (!this.evaluateValueOperator(index, property, operator)) return false;
96
- const value = this.data[index][property];
97
- if ("includesEvery" in operator && operator.includesEvery?.every((v) => value.includes(v))) return true;
98
- if ("includesSome" in operator && operator.includesSome?.some((v) => value.includes(v))) return true;
99
- if ("includesNone" in operator && operator.includesNone?.every((v) => !value.includes(v))) return true;
100
- return true;
101
- }
102
168
  };
103
- (function(_Qweery) {
104
- function normalizeNumericalValue(value) {
105
- return value instanceof Date ? value.getTime() : value;
106
- }
107
- _Qweery.normalizeNumericalValue = normalizeNumericalValue;
108
- })(Qweery || (Qweery = {}));
109
169
 
110
170
  //#endregion
111
- Object.defineProperty(exports, 'Qweery', {
112
- enumerable: true,
113
- get: function () {
114
- return Qweery;
115
- }
116
- });
171
+ exports.Qweery = Qweery;
117
172
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../src/classes/Qweery.ts"],"sourcesContent":["import type { ValueOrArray } from '../helpers/types.js';\n\nexport class Qweery<T extends Qweery.Object> {\n public readonly data: T[];\n\n constructor(data: Iterable<T>) {\n this.data = Array.from(data);\n }\n\n public query(options: {\n where?: Qweery.WhereOptions<T>;\n skip?: number;\n limit?: number;\n }): T[] {\n let result = this.data.filter((_, index) => options.where ? this.isItemMatch(index, options.where) : true);\n\n if (options.skip) {\n result = result.slice(options.skip);\n }\n\n if (options.limit) {\n result = result.slice(0, options.limit);\n }\n\n return result;\n }\n\n public where(options: Qweery.WhereOptions<T>): Qweery<T> {\n return new Qweery(this.data.filter((_, index) => this.isItemMatch(index, options)));\n }\n\n public skip(count: number): Qweery<T> {\n return new Qweery(this.data.slice(count));\n }\n\n public take(count: number): Qweery<T> {\n return new Qweery(this.data.slice(0, count));\n }\n\n public count(): number {\n return this.data.length;\n }\n\n public first(): T|undefined {\n return this.data[0];\n }\n\n public last(): T|undefined {\n return this.data[this.data.length - 1];\n }\n\n public toArray(): T[] {\n return this.data;\n }\n\n private isItemMatch(index: number, options: Qweery.WhereOptions<T>): boolean {\n const item = this.data.at(index);\n if (!item) return false\n\n const keys = Object.keys(options) as (keyof T)[];\n\n for (const key of keys) {\n if (key.toString().startsWith('$') || options[key] === undefined) continue;\n\n let value: boolean;\n\n if (typeof options[key] === 'function') {\n value = options[key](item[key], item, index, this.data);\n } else if (typeof options[key] === 'object') {\n if (typeof item[key] === 'string') {\n value = this.evaluateStringOperator(\n index,\n key,\n options[key] as Qweery.WhereOptionStringOperators<T, Qweery.StringPrimitive>\n );\n } else if (\n typeof item[key] === 'number' ||\n typeof item[key] === 'bigint' ||\n item[key] instanceof Date\n ) {\n value = this.evaluateNumericalOperator(\n index,\n key,\n options[key] as Qweery.WhereOptionNumericalOperators<T, Qweery.NumericalPrimitive>\n );\n } else if (Array.isArray(item[key])) {\n value = this.evaluateArrayOperator(\n index,\n key,\n options[key] as Qweery.WhereOptionArrayOperators<T, Qweery.ArrayPrimitive>\n );\n } else {\n value = this.evaluateValueOperator(\n index,\n key,\n options[key] as Qweery.WhereOptionValueOperators<T, any>\n );\n }\n } else {\n value = item[key] === options[key];\n }\n\n if (!value) return false;\n }\n\n return this.evaluateLogicalOperator(index, options);\n }\n\n private evaluateLogicalOperator(index: number, options: Qweery.WhereOptionLogicalOperators<T>): boolean {\n let value = true;\n\n if (options.$NOT) {\n for (const option of Array.isArray(options.$NOT) ? options.$NOT : [options.$NOT]) {\n if (this.isItemMatch(index, option)) return false;\n }\n }\n\n if (options.$AND) {\n for (const option of Array.isArray(options.$AND) ? options.$AND : [options.$AND]) {\n if (!this.isItemMatch(index, option)) return false;\n }\n }\n\n if (options.$OR) {\n let hasMatch = false;\n\n for (const option of Array.isArray( options.$OR) ? options.$OR : [ options.$OR]) {\n if (this.isItemMatch(index, option)) {\n hasMatch = true;\n break;\n }\n }\n\n if (!hasMatch) return false;\n }\n\n return true;\n }\n\n private evaluateValueOperator(index: number, property: keyof T, operator: Qweery.WhereOptionValueOperators<T, any>): boolean {\n if ('equals' in operator && operator.equals !== this.data[index][property]) {\n return false;\n }\n\n if ('notEquals' in operator && operator.notEquals === this.data[index][property]) {\n return false;\n }\n\n return true && this.evaluateLogicalOperator(index, operator);\n }\n\n private evaluateNumericalOperator(index: number, property: keyof T, operator: Qweery.WhereOptionNumericalOperators<T, Qweery.NumericalPrimitive>): boolean {\n if (!this.evaluateValueOperator(index, property, operator)) return false;\n\n const value = Qweery.normalizeNumericalValue(this.data[index][property] as Qweery.NumericalPrimitive);\n\n if (operator.greaterThan !== undefined && !(value > Qweery.normalizeNumericalValue(operator.greaterThan))) {\n return false;\n }\n\n if (operator.greaterThanOrEqual !== undefined && !(value >= Qweery.normalizeNumericalValue(operator.greaterThanOrEqual))) {\n return false;\n }\n\n if (operator.lessThan !== undefined && !(value < Qweery.normalizeNumericalValue(operator.lessThan))) {\n return false;\n }\n\n if (operator.lessThanOrEqual !== undefined && !(value <= Qweery.normalizeNumericalValue(operator.lessThanOrEqual))) {\n return false;\n }\n\n return true;\n }\n\n private evaluateStringOperator(index: number, property: keyof T, operator: Qweery.WhereOptionStringOperators<T, Qweery.StringPrimitive>): boolean {\n if (!this.evaluateValueOperator(index, property, operator)) return false;\n\n let value = this.data[index][property] as Qweery.StringPrimitive;\n\n if (operator.caseInsensitive) {\n value = value.toLowerCase();\n }\n\n if (\n operator.includes &&\n !value.includes(\n operator.caseInsensitive\n ? operator.includes.toLowerCase()\n : operator.includes\n )\n ) {\n return false;\n }\n\n if (\n operator.startsWith && \n !value.startsWith(\n operator.caseInsensitive\n ? operator.startsWith.toLowerCase()\n : operator.startsWith\n )\n ) {\n return false;\n }\n\n if (\n operator.endsWith &&\n !value.endsWith(\n operator.caseInsensitive\n ? operator.endsWith.toLowerCase()\n : operator.endsWith\n )\n ) {\n return false;\n }\n\n if (operator.matches && !operator.matches.test(value)) {\n return false;\n }\n\n return true;\n }\n\n private evaluateArrayOperator(index: number, property: keyof T, operator: Qweery.WhereOptionArrayOperators<T, Qweery.ArrayPrimitive>): boolean {\n if (!this.evaluateValueOperator(index, property, operator)) return false;\n\n const value = this.data[index][property] as Qweery.ArrayPrimitive;\n\n if ('includesEvery' in operator && operator.includesEvery?.every(v => value.includes(v))) {\n return true;\n }\n\n if ('includesSome' in operator && operator.includesSome?.some(v => value.includes(v))) {\n return true;\n }\n\n if ('includesNone' in operator && operator.includesNone?.every(v => !value.includes(v))) {\n return true;\n }\n\n return true;\n }\n}\n\nexport namespace Qweery {\n export type Object = object;\n export type StringPrimitive = string;\n export type NumericalPrimitive = number|bigint|Date;\n export type ArrayPrimitive = Array<any>|ReadonlyArray<any>;\n\n export type WhereOptionKeys<T extends Object> = {\n [K in keyof T]?:\n |T[K]\n |((value: T[K], object: T, index: number, array: T[]) => boolean)\n |WhereOptionValueOperatorsType<T, T[K]>;\n }\n\n export type WhereOptionValueOperatorsType<T extends Object, V> = V extends StringPrimitive\n ? WhereOptionStringOperators<T, V>\n : V extends NumericalPrimitive\n ? WhereOptionNumericalOperators<T, V>\n : V extends ArrayPrimitive\n ? WhereOptionArrayOperators<T, V>\n : WhereOptionValueOperators<T, V>\n\n export interface WhereOptionLogicalOperators<T extends Object> {\n $AND?: ValueOrArray<WhereOptions<T>>;\n $OR?: ValueOrArray<WhereOptions<T>>;\n $NOT?: ValueOrArray<WhereOptions<T>>;\n }\n\n export interface WhereOptionValueOperators<T extends Object, V> extends WhereOptionLogicalOperators<T> {\n equals?: V;\n notEquals?: V;\n }\n\n export interface WhereOptionNumericalOperators<T extends Object, V extends NumericalPrimitive> extends WhereOptionValueOperators<T, V> {\n greaterThan?: V;\n greaterThanOrEqual?: V;\n lessThan?: V;\n lessThanOrEqual?: V;\n }\n\n export interface WhereOptionStringOperators<T extends Object, V extends StringPrimitive> extends WhereOptionValueOperators<T, V> {\n includes?: V;\n startsWith?: V;\n endsWith?: V;\n caseInsensitive?: boolean;\n matches?: RegExp;\n }\n\n export interface WhereOptionArrayOperators<T extends Object, V extends ArrayPrimitive> extends WhereOptionValueOperators<T, V> {\n includesEvery?: V[number][];\n includesSome?: V[number][];\n includesNone?: V[number][];\n }\n\n export type WhereOptions<T extends Object> = WhereOptionKeys<T> & WhereOptionLogicalOperators<T>;\n\n export function normalizeNumericalValue(value: Qweery.NumericalPrimitive): number|bigint {\n return value instanceof Date ? value.getTime() : value;\n }\n}"],"mappings":";;;AAEA,IAAa,SAAb,MAAa,OAAgC;CACzC,AAAgB;CAEhB,YAAY,MAAmB;AAC3B,OAAK,OAAO,MAAM,KAAK,KAAK;;CAGhC,AAAO,MAAM,SAIL;EACJ,IAAI,SAAS,KAAK,KAAK,QAAQ,GAAG,UAAU,QAAQ,QAAQ,KAAK,YAAY,OAAO,QAAQ,MAAM,GAAG,KAAK;AAE1G,MAAI,QAAQ,KACR,UAAS,OAAO,MAAM,QAAQ,KAAK;AAGvC,MAAI,QAAQ,MACR,UAAS,OAAO,MAAM,GAAG,QAAQ,MAAM;AAG3C,SAAO;;CAGX,AAAO,MAAM,SAA4C;AACrD,SAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,GAAG,UAAU,KAAK,YAAY,OAAO,QAAQ,CAAC,CAAC;;CAGvF,AAAO,KAAK,OAA0B;AAClC,SAAO,IAAI,OAAO,KAAK,KAAK,MAAM,MAAM,CAAC;;CAG7C,AAAO,KAAK,OAA0B;AAClC,SAAO,IAAI,OAAO,KAAK,KAAK,MAAM,GAAG,MAAM,CAAC;;CAGhD,AAAO,QAAgB;AACnB,SAAO,KAAK,KAAK;;CAGrB,AAAO,QAAqB;AACxB,SAAO,KAAK,KAAK;;CAGrB,AAAO,OAAoB;AACvB,SAAO,KAAK,KAAK,KAAK,KAAK,SAAS;;CAGxC,AAAO,UAAe;AAClB,SAAO,KAAK;;CAGhB,AAAQ,YAAY,OAAe,SAA0C;EACzE,MAAM,OAAO,KAAK,KAAK,GAAG,MAAM;AAChC,MAAI,CAAC,KAAM,QAAO;EAElB,MAAM,OAAO,OAAO,KAAK,QAAQ;AAEjC,OAAK,MAAM,OAAO,MAAM;AACpB,OAAI,IAAI,UAAU,CAAC,WAAW,IAAI,IAAI,QAAQ,SAAS,OAAW;GAElE,IAAI;AAEJ,OAAI,OAAO,QAAQ,SAAS,WACxB,SAAQ,QAAQ,KAAK,KAAK,MAAM,MAAM,OAAO,KAAK,KAAK;YAChD,OAAO,QAAQ,SAAS,SAC/B,KAAI,OAAO,KAAK,SAAS,SACrB,SAAQ,KAAK,uBACT,OACA,KACA,QAAQ,KACX;YAED,OAAO,KAAK,SAAS,YACrB,OAAO,KAAK,SAAS,YACrB,KAAK,gBAAgB,KAErB,SAAQ,KAAK,0BACT,OACA,KACA,QAAQ,KACX;YACM,MAAM,QAAQ,KAAK,KAAK,CAC/B,SAAQ,KAAK,sBACT,OACA,KACA,QAAQ,KACX;OAED,SAAQ,KAAK,sBACT,OACA,KACA,QAAQ,KACX;OAGL,SAAQ,KAAK,SAAS,QAAQ;AAGlC,OAAI,CAAC,MAAO,QAAO;;AAGvB,SAAO,KAAK,wBAAwB,OAAO,QAAQ;;CAGvD,AAAQ,wBAAwB,OAAe,SAAyD;AAGpG,MAAI,QAAQ,MACR;QAAK,MAAM,UAAW,MAAM,QAAQ,QAAQ,KAAK,GAAG,QAAQ,OAAO,CAAC,QAAQ,KAAK,CAC7E,KAAI,KAAK,YAAY,OAAO,OAAO,CAAE,QAAO;;AAIpD,MAAI,QAAQ,MACR;QAAK,MAAM,UAAU,MAAM,QAAQ,QAAQ,KAAK,GAAG,QAAQ,OAAO,CAAC,QAAQ,KAAK,CAC5E,KAAI,CAAC,KAAK,YAAY,OAAO,OAAO,CAAE,QAAO;;AAIrD,MAAI,QAAQ,KAAK;GACb,IAAI,WAAW;AAEf,QAAK,MAAM,UAAU,MAAM,QAAS,QAAQ,IAAI,GAAI,QAAQ,MAAM,CAAE,QAAQ,IAAI,CAC5E,KAAI,KAAK,YAAY,OAAO,OAAO,EAAE;AACjC,eAAW;AACX;;AAIR,OAAI,CAAC,SAAU,QAAO;;AAG1B,SAAO;;CAGX,AAAQ,sBAAsB,OAAe,UAAmB,UAA6D;AACzH,MAAI,YAAY,YAAY,SAAS,WAAW,KAAK,KAAK,OAAO,UAC7D,QAAO;AAGX,MAAI,eAAe,YAAY,SAAS,cAAc,KAAK,KAAK,OAAO,UACnE,QAAO;AAGX,SAAe,KAAK,wBAAwB,OAAO,SAAS;;CAGhE,AAAQ,0BAA0B,OAAe,UAAmB,UAAuF;AACvJ,MAAI,CAAC,KAAK,sBAAsB,OAAO,UAAU,SAAS,CAAE,QAAO;EAEnE,MAAM,QAAQ,OAAO,wBAAwB,KAAK,KAAK,OAAO,UAAuC;AAErG,MAAI,SAAS,gBAAgB,UAAa,EAAE,QAAQ,OAAO,wBAAwB,SAAS,YAAY,EACpG,QAAO;AAGX,MAAI,SAAS,uBAAuB,UAAa,EAAE,SAAS,OAAO,wBAAwB,SAAS,mBAAmB,EACnH,QAAO;AAGX,MAAI,SAAS,aAAa,UAAa,EAAE,QAAQ,OAAO,wBAAwB,SAAS,SAAS,EAC9F,QAAO;AAGX,MAAI,SAAS,oBAAoB,UAAa,EAAE,SAAS,OAAO,wBAAwB,SAAS,gBAAgB,EAC7G,QAAO;AAGX,SAAO;;CAGX,AAAQ,uBAAuB,OAAe,UAAmB,UAAiF;AAC9I,MAAI,CAAC,KAAK,sBAAsB,OAAO,UAAU,SAAS,CAAE,QAAO;EAEnE,IAAI,QAAQ,KAAK,KAAK,OAAO;AAE7B,MAAI,SAAS,gBACT,SAAQ,MAAM,aAAa;AAG/B,MACI,SAAS,YACT,CAAC,MAAM,SACH,SAAS,kBACP,SAAS,SAAS,aAAa,GAC/B,SAAS,SACd,CAED,QAAO;AAGX,MACI,SAAS,cACT,CAAC,MAAM,WACH,SAAS,kBACH,SAAS,WAAW,aAAa,GACjC,SAAS,WAClB,CAED,QAAO;AAGX,MACI,SAAS,YACT,CAAC,MAAM,SACH,SAAS,kBACH,SAAS,SAAS,aAAa,GAC/B,SAAS,SAClB,CAED,QAAO;AAGX,MAAI,SAAS,WAAW,CAAC,SAAS,QAAQ,KAAK,MAAM,CACjD,QAAO;AAGX,SAAO;;CAGX,AAAQ,sBAAsB,OAAe,UAAmB,UAA+E;AAC3I,MAAI,CAAC,KAAK,sBAAsB,OAAO,UAAU,SAAS,CAAE,QAAO;EAEnE,MAAM,QAAQ,KAAK,KAAK,OAAO;AAE/B,MAAI,mBAAmB,YAAY,SAAS,eAAe,OAAM,MAAK,MAAM,SAAS,EAAE,CAAC,CACpF,QAAO;AAGX,MAAI,kBAAkB,YAAY,SAAS,cAAc,MAAK,MAAK,MAAM,SAAS,EAAE,CAAC,CACjF,QAAO;AAGX,MAAI,kBAAkB,YAAY,SAAS,cAAc,OAAM,MAAK,CAAC,MAAM,SAAS,EAAE,CAAC,CACnF,QAAO;AAGX,SAAO;;;;CA2DJ,SAAS,wBAAwB,OAAiD;AACrF,SAAO,iBAAiB,OAAO,MAAM,SAAS,GAAG"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../src/classes/Primitive.ts","../src/classes/Where.ts","../src/classes/Qweery.ts"],"sourcesContent":["export class Primitive {\n public static satisfiesValue<T>(value: T, options: Primitive.Filters<T>): boolean {\n if (Primitive.isDefined(options.equals) && value !== options.equals) {\n return false;\n }\n\n if (Primitive.isDefined(options.notEquals) && value === options.notEquals) {\n return false;\n }\n\n return true;\n }\n\n public static statisfiesString(value: Primitive.String, options: Primitive.StringFilters<Primitive.String>): boolean {\n if (options.caseInsensitive) value = value.toLowerCase();\n\n if (!this.satisfiesValue(value, options)) {\n return false;\n }\n\n if (Primitive.isDefined(options.startsWith) && !value.startsWith(options.startsWith)) {\n return false;\n }\n\n if (Primitive.isDefined(options.endsWith) && !value.endsWith(options.endsWith)) {\n return false;\n }\n\n if (Primitive.isDefined(options.includes) && !value.includes(options.includes)) {\n return false;\n }\n\n if (Primitive.isDefined(options.matches) && !options.matches.test(value)) {\n return false;\n }\n\n return true;\n }\n\n public static statisfiesNumerical(value: Primitive.Numerical, options: Primitive.NumericalFilters<Primitive.Numerical>): boolean {\n value = Primitive.normalizeNumericalValue(value);\n\n if (Primitive.isDefined(options.equals) && value !== Primitive.normalizeNumericalValue(options.equals)) {\n return false;\n }\n\n if (Primitive.isDefined(options.notEquals) && value === Primitive.normalizeNumericalValue(options.notEquals)) {\n return false;\n }\n\n if (Primitive.isDefined(options.greaterThan) && value <= Primitive.normalizeNumericalValue(options.greaterThan)) {\n return false;\n }\n\n if (Primitive.isDefined(options.greaterThanOrEqual) && value < Primitive.normalizeNumericalValue(options.greaterThanOrEqual)) {\n return false;\n }\n\n if (Primitive.isDefined(options.lessThan) && value >= Primitive.normalizeNumericalValue(options.lessThan)) {\n return false;\n }\n\n if (Primitive.isDefined(options.lessThanOrEqual) && value > Primitive.normalizeNumericalValue(options.lessThanOrEqual)) {\n return false;\n }\n\n return true;\n }\n\n public static statisfiesArray(value: Primitive.Array, options: Primitive.ArrayFilters<Primitive.Array>): boolean {\n if (!this.satisfiesValue(value, options)) {\n return false;\n }\n\n if (Primitive.isDefined(options.includesEvery) && !options.includesEvery.every(item => value.includes(item))) {\n return false;\n }\n\n if (Primitive.isDefined(options.includesSome) && !options.includesSome.some(item => value.includes(item))) {\n return false;\n }\n\n if (Primitive.isDefined(options.includesNone) && options.includesNone.some(item => value.includes(item))) {\n return false;\n }\n\n if (Primitive.isDefined(options.length) && !Primitive.statisfiesNumerical(value.length, options.length)) {\n return false;\n }\n\n return true;\n }\n}\n\nexport namespace Primitive {\n export function normalizeNumericalValue(value: Primitive.Numerical): number|bigint {\n return value instanceof Date ? value.getTime() : value;\n }\n\n export function isNumerical(value: unknown): value is Primitive.Numerical {\n return typeof value === 'number' || typeof value === 'bigint' || value instanceof Date;\n }\n\n export function isDefined<T>(value: T): value is Exclude<T, undefined> {\n return value !== undefined;\n }\n\n export type String = string;\n export type Numerical = number|bigint|Date;\n export type Array = any[]|readonly any[];\n\n export type FilterType<V> = V extends String\n ? StringFilters<V>\n : V extends Numerical\n ? NumericalFilters<V>\n : V extends Array\n ? ArrayFilters<V>\n : Filters<V>;\n\n export interface Filters<V>{\n equals?: V;\n notEquals?: V;\n }\n\n export interface NumericalFilters<V extends Numerical> extends Filters<V> {\n greaterThan?: V;\n greaterThanOrEqual?: V;\n lessThan?: V;\n lessThanOrEqual?: V;\n }\n\n export interface StringFilters<V extends String> extends Filters<V> {\n includes?: V;\n startsWith?: V;\n endsWith?: V;\n caseInsensitive?: boolean;\n matches?: RegExp;\n }\n\n export interface ArrayFilters<V extends Array> extends Filters<V> {\n includesEvery?: V[number][];\n includesSome?: V[number][];\n includesNone?: V[number][];\n length?: NumericalFilters<number>;\n }\n}","import type { ValueOrArray } from '../helpers/types.js';\nimport { Primitive } from './Primitive.js';\nimport type { Qweery } from './Qweery.js';\n\nexport class Where<T extends Qweery.Object> {\n public readonly data: T[];\n\n public constructor(data: Iterable<T>) {\n this.data = Array.from(data);\n }\n\n public filter(options: Where.Options<T>): T[] {\n return this.data.filter((_, index) => this.satisfiesItem(options, index));\n }\n\n public satisfiesItem(options: Where.Options<T>, index: number): boolean {\n const item = this.data.at(index);\n if (!item) return false;\n\n let value = true;\n\n for (const key in options) {\n if (Where.isLogicalOperator(key)) {\n const conditions = options[key as keyof T] as ValueOrArray<Where.Options<T>>;\n\n switch (key) {\n case '$NOT':\n value = value && !(\n Array.isArray(conditions)\n ? conditions.every(condition => this.satisfiesItem(condition, index))\n : this.satisfiesItem(conditions, index)\n );\n break;\n case '$AND':\n value = value && (\n Array.isArray(conditions)\n ? conditions.every(condition => this.satisfiesItem(condition, index))\n : this.satisfiesItem(conditions, index)\n );\n break;\n case '$OR':\n value = Array.isArray(conditions)\n ? value && conditions.some(condition => this.satisfiesItem(condition, index))\n : value || this.satisfiesItem(conditions, index);\n break;\n }\n\n continue;\n }\n\n\n const filter = options[key as keyof T] as Where.Filter<T, keyof T>;\n const itemValue = item[key as keyof T];\n\n if (filter instanceof Function) {\n value = value && filter(itemValue, item, index, this.data);\n continue;\n }\n\n if (typeof filter === 'object') {\n if (typeof itemValue === 'string') {\n value = value && Primitive.statisfiesString(itemValue, filter as Primitive.StringFilters<Primitive.String>);\n continue;\n }\n\n if (Array.isArray(itemValue)) {\n value = value && Primitive.statisfiesArray(itemValue, filter as Primitive.ArrayFilters<Primitive.Array>);\n continue;\n }\n\n if (Primitive.isNumerical(itemValue)) {\n value = value && Primitive.statisfiesNumerical(itemValue, filter as Primitive.NumericalFilters<Primitive.Numerical>);\n continue;\n }\n\n value = value && Primitive.satisfiesValue(itemValue, filter as Primitive.Filters<any>);\n continue;\n }\n\n value = value && (itemValue === filter);\n }\n\n return value;\n }\n}\n\nexport namespace Where {\n export type KeyFilters<T extends Qweery.Object> = {\n [K in keyof T]?: Filter<T, K>;\n }\n\n export type Filter<T extends Qweery.Object, K extends keyof T> = \n |T[K]\n |((value: T[K], object: T, index: number, array: T[]) => boolean)\n |(Primitive.FilterType<T[K]> & LogicalOperators<T>)\n\n export interface LogicalOperators<T extends Qweery.Object> extends Partial<Record<'$AND'|'$OR'|'$NOT', ValueOrArray<Options<T>>>>{\n //\n }\n\n export type Options<T extends Qweery.Object> = KeyFilters<T> & LogicalOperators<T>;\n\n export function isLogicalOperator(value: unknown): value is keyof LogicalOperators<any> {\n return value === '$AND' || value === '$OR' || value === '$NOT';\n }\n}\n\nconst w = new Where([\n { name: 'Alice', age: 30, sports: ['Football', 'Basketball'] },\n { name: 'Bob', age: 25, sports: ['Football', 'Basketball'] },\n { name: 'Charlie', age: 35, sports: ['Football', 'Basketball'] }\n]);","import { Where } from './Where.js';\n\nexport class Qweery<T extends Qweery.Object> {\n protected readonly data: T[];\n\n constructor(data: Iterable<T>) {\n this.data = Array.from(data);\n }\n\n public query(options: {\n where?: Where.Options<T>;\n skip?: number;\n limit?: number;\n }): T[] {\n\n let result = new Where(this.data).filter(options.where || {});\n\n if (options.skip) {\n result = result.slice(options.skip);\n }\n\n if (options.limit) {\n result = result.slice(0, options.limit);\n }\n\n return result;\n }\n\n public where(options: Where.Options<T>): Qweery<T> {\n return new Qweery(new Where(this.data).filter(options || {}));\n }\n\n public skip(count: number): Qweery<T> {\n return new Qweery(this.data.slice(count));\n }\n\n public take(count: number): Qweery<T> {\n return new Qweery(this.data.slice(0, count));\n }\n\n public count(): number {\n return this.data.length;\n }\n\n public first(): T|undefined {\n return this.data[0];\n }\n\n public last(): T|undefined {\n return this.data[this.data.length - 1];\n }\n\n public toArray(): T[] {\n return this.data;\n }\n}\n\nexport namespace Qweery {\n export type Object = object;\n}"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -1,65 +1,80 @@
1
1
  //#region src/helpers/types.d.ts
2
2
  type ValueOrArray<T> = T | T[];
3
3
  //#endregion
4
- //#region src/classes/Qweery.d.ts
5
- declare class Qweery<T extends Qweery.Object> {
6
- readonly data: T[];
7
- constructor(data: Iterable<T>);
8
- query(options: {
9
- where?: Qweery.WhereOptions<T>;
10
- skip?: number;
11
- limit?: number;
12
- }): T[];
13
- where(options: Qweery.WhereOptions<T>): Qweery<T>;
14
- skip(count: number): Qweery<T>;
15
- take(count: number): Qweery<T>;
16
- count(): number;
17
- first(): T | undefined;
18
- last(): T | undefined;
19
- toArray(): T[];
20
- private isItemMatch;
21
- private evaluateLogicalOperator;
22
- private evaluateValueOperator;
23
- private evaluateNumericalOperator;
24
- private evaluateStringOperator;
25
- private evaluateArrayOperator;
4
+ //#region src/classes/Primitive.d.ts
5
+ declare class Primitive {
6
+ static satisfiesValue<T>(value: T, options: Primitive.Filters<T>): boolean;
7
+ static statisfiesString(value: Primitive.String, options: Primitive.StringFilters<Primitive.String>): boolean;
8
+ static statisfiesNumerical(value: Primitive.Numerical, options: Primitive.NumericalFilters<Primitive.Numerical>): boolean;
9
+ static statisfiesArray(value: Primitive.Array, options: Primitive.ArrayFilters<Primitive.Array>): boolean;
26
10
  }
27
- declare namespace Qweery {
28
- type Object = object;
29
- type StringPrimitive = string;
30
- type NumericalPrimitive = number | bigint | Date;
31
- type ArrayPrimitive = Array<any> | ReadonlyArray<any>;
32
- type WhereOptionKeys<T extends Object> = { [K in keyof T]?: T[K] | ((value: T[K], object: T, index: number, array: T[]) => boolean) | WhereOptionValueOperatorsType<T, T[K]> };
33
- type WhereOptionValueOperatorsType<T extends Object, V> = V extends StringPrimitive ? WhereOptionStringOperators<T, V> : V extends NumericalPrimitive ? WhereOptionNumericalOperators<T, V> : V extends ArrayPrimitive ? WhereOptionArrayOperators<T, V> : WhereOptionValueOperators<T, V>;
34
- interface WhereOptionLogicalOperators<T extends Object> {
35
- $AND?: ValueOrArray<WhereOptions<T>>;
36
- $OR?: ValueOrArray<WhereOptions<T>>;
37
- $NOT?: ValueOrArray<WhereOptions<T>>;
38
- }
39
- interface WhereOptionValueOperators<T extends Object, V> extends WhereOptionLogicalOperators<T> {
11
+ declare namespace Primitive {
12
+ function normalizeNumericalValue(value: Primitive.Numerical): number | bigint;
13
+ function isNumerical(value: unknown): value is Primitive.Numerical;
14
+ function isDefined<T>(value: T): value is Exclude<T, undefined>;
15
+ type String = string;
16
+ type Numerical = number | bigint | Date;
17
+ type Array = any[] | readonly any[];
18
+ type FilterType<V> = V extends String ? StringFilters<V> : V extends Numerical ? NumericalFilters<V> : V extends Array ? ArrayFilters<V> : Filters<V>;
19
+ interface Filters<V> {
40
20
  equals?: V;
41
21
  notEquals?: V;
42
22
  }
43
- interface WhereOptionNumericalOperators<T extends Object, V extends NumericalPrimitive> extends WhereOptionValueOperators<T, V> {
23
+ interface NumericalFilters<V extends Numerical> extends Filters<V> {
44
24
  greaterThan?: V;
45
25
  greaterThanOrEqual?: V;
46
26
  lessThan?: V;
47
27
  lessThanOrEqual?: V;
48
28
  }
49
- interface WhereOptionStringOperators<T extends Object, V extends StringPrimitive> extends WhereOptionValueOperators<T, V> {
29
+ interface StringFilters<V extends String> extends Filters<V> {
50
30
  includes?: V;
51
31
  startsWith?: V;
52
32
  endsWith?: V;
53
33
  caseInsensitive?: boolean;
54
34
  matches?: RegExp;
55
35
  }
56
- interface WhereOptionArrayOperators<T extends Object, V extends ArrayPrimitive> extends WhereOptionValueOperators<T, V> {
36
+ interface ArrayFilters<V extends Array> extends Filters<V> {
57
37
  includesEvery?: V[number][];
58
38
  includesSome?: V[number][];
59
39
  includesNone?: V[number][];
40
+ length?: NumericalFilters<number>;
60
41
  }
61
- type WhereOptions<T extends Object> = WhereOptionKeys<T> & WhereOptionLogicalOperators<T>;
62
- function normalizeNumericalValue(value: Qweery.NumericalPrimitive): number | bigint;
42
+ }
43
+ //#endregion
44
+ //#region src/classes/Where.d.ts
45
+ declare class Where<T extends Qweery.Object> {
46
+ readonly data: T[];
47
+ constructor(data: Iterable<T>);
48
+ filter(options: Where.Options<T>): T[];
49
+ satisfiesItem(options: Where.Options<T>, index: number): boolean;
50
+ }
51
+ declare namespace Where {
52
+ type KeyFilters<T extends Qweery.Object> = { [K in keyof T]?: Filter<T, K> };
53
+ type Filter<T extends Qweery.Object, K extends keyof T> = T[K] | ((value: T[K], object: T, index: number, array: T[]) => boolean) | (Primitive.FilterType<T[K]> & LogicalOperators<T>);
54
+ interface LogicalOperators<T extends Qweery.Object> extends Partial<Record<'$AND' | '$OR' | '$NOT', ValueOrArray<Options<T>>>> {}
55
+ type Options<T extends Qweery.Object> = KeyFilters<T> & LogicalOperators<T>;
56
+ function isLogicalOperator(value: unknown): value is keyof LogicalOperators<any>;
57
+ }
58
+ //#endregion
59
+ //#region src/classes/Qweery.d.ts
60
+ declare class Qweery<T extends Qweery.Object> {
61
+ protected readonly data: T[];
62
+ constructor(data: Iterable<T>);
63
+ query(options: {
64
+ where?: Where.Options<T>;
65
+ skip?: number;
66
+ limit?: number;
67
+ }): T[];
68
+ where(options: Where.Options<T>): Qweery<T>;
69
+ skip(count: number): Qweery<T>;
70
+ take(count: number): Qweery<T>;
71
+ count(): number;
72
+ first(): T | undefined;
73
+ last(): T | undefined;
74
+ toArray(): T[];
75
+ }
76
+ declare namespace Qweery {
77
+ type Object = object;
63
78
  }
64
79
  //#endregion
65
80
  export { Qweery, ValueOrArray };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/helpers/types.ts","../src/classes/Qweery.ts"],"mappings":";KAAY,YAAA,MAAkB,CAAA,GAAE,CAAA;;;cCEnB,MAAA,WAAiB,MAAA,CAAO,MAAA;EAAA,SACjB,IAAA,EAAM,CAAA;cAEV,IAAA,EAAM,QAAA,CAAS,CAAA;EAIpB,KAAA,CAAM,OAAA;IACT,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,CAAA;IAC5B,IAAA;IACA,KAAA;EAAA,IACA,CAAA;EAcG,KAAA,CAAM,OAAA,EAAS,MAAA,CAAO,YAAA,CAAa,CAAA,IAAK,MAAA,CAAO,CAAA;EAI/C,IAAA,CAAK,KAAA,WAAgB,MAAA,CAAO,CAAA;EAI5B,IAAA,CAAK,KAAA,WAAgB,MAAA,CAAO,CAAA;EAI5B,KAAA,CAAA;EAIA,KAAA,CAAA,GAAS,CAAA;EAIT,IAAA,CAAA,GAAQ,CAAA;EAIR,OAAA,CAAA,GAAW,CAAA;EAAA,QAIV,WAAA;EAAA,QAqDA,uBAAA;EAAA,QA+BA,qBAAA;EAAA,QAYA,yBAAA;EAAA,QAwBA,sBAAA;EAAA,QAiDA,qBAAA;AAAA;AAAA,kBAqBK,MAAA;EAAA,KACD,MAAA;EAAA,KACA,eAAA;EAAA,KACA,kBAAA,qBAAmC,IAAA;EAAA,KACnC,cAAA,GAAiB,KAAA,QAAW,aAAA;EAAA,KAE5B,eAAA,WAA0B,MAAA,kBACtB,CAAA,IACP,CAAA,CAAE,CAAA,MACA,KAAA,EAAO,CAAA,CAAE,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAG,KAAA,UAAe,KAAA,EAAO,CAAA,kBAChD,6BAAA,CAA8B,CAAA,EAAG,CAAA,CAAE,CAAA;EAAA,KAGhC,6BAAA,WAAwC,MAAA,OAAa,CAAA,SAAU,eAAA,GACrE,0BAAA,CAA2B,CAAA,EAAG,CAAA,IAC9B,CAAA,SAAU,kBAAA,GACN,6BAAA,CAA8B,CAAA,EAAG,CAAA,IACjC,CAAA,SAAU,cAAA,GACN,yBAAA,CAA0B,CAAA,EAAG,CAAA,IAC7B,yBAAA,CAA0B,CAAA,EAAG,CAAA;EAAA,UAE1B,2BAAA,WAAsC,MAAA;IACnD,IAAA,GAAO,YAAA,CAAa,YAAA,CAAa,CAAA;IACjC,GAAA,GAAM,YAAA,CAAa,YAAA,CAAa,CAAA;IAChC,IAAA,GAAO,YAAA,CAAa,YAAA,CAAa,CAAA;EAAA;EAAA,UAGpB,yBAAA,WAAoC,MAAA,aAAmB,2BAAA,CAA4B,CAAA;IAChG,MAAA,GAAS,CAAA;IACT,SAAA,GAAY,CAAA;EAAA;EAAA,UAGC,6BAAA,WAAwC,MAAA,YAAkB,kBAAA,UAA4B,yBAAA,CAA0B,CAAA,EAAG,CAAA;IAChI,WAAA,GAAc,CAAA;IACd,kBAAA,GAAqB,CAAA;IACrB,QAAA,GAAW,CAAA;IACX,eAAA,GAAkB,CAAA;EAAA;EAAA,UAGL,0BAAA,WAAqC,MAAA,YAAkB,eAAA,UAAyB,yBAAA,CAA0B,CAAA,EAAG,CAAA;IAC1H,QAAA,GAAW,CAAA;IACX,UAAA,GAAa,CAAA;IACb,QAAA,GAAW,CAAA;IACX,eAAA;IACA,OAAA,GAAU,MAAA;EAAA;EAAA,UAGG,yBAAA,WAAoC,MAAA,YAAkB,cAAA,UAAwB,yBAAA,CAA0B,CAAA,EAAG,CAAA;IACxH,aAAA,GAAgB,CAAA;IAChB,YAAA,GAAe,CAAA;IACf,YAAA,GAAe,CAAA;EAAA;EAAA,KAGP,YAAA,WAAuB,MAAA,IAAU,eAAA,CAAgB,CAAA,IAAK,2BAAA,CAA4B,CAAA;EAAA,SAE9E,uBAAA,CAAwB,KAAA,EAAO,MAAA,CAAO,kBAAA;AAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/helpers/types.ts","../src/classes/Primitive.ts","../src/classes/Where.ts","../src/classes/Qweery.ts"],"mappings":";KAAY,YAAA,MAAkB,CAAA,GAAE,CAAA;;;cCAnB,SAAA;EAAA,OACK,cAAA,GAAA,CAAkB,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,SAAA,CAAU,OAAA,CAAQ,CAAA;EAAA,OAYvD,gBAAA,CAAiB,KAAA,EAAO,SAAA,CAAU,MAAA,EAAQ,OAAA,EAAS,SAAA,CAAU,aAAA,CAAc,SAAA,CAAU,MAAA;EAAA,OA0BrF,mBAAA,CAAoB,KAAA,EAAO,SAAA,CAAU,SAAA,EAAW,OAAA,EAAS,SAAA,CAAU,gBAAA,CAAiB,SAAA,CAAU,SAAA;EAAA,OA8B9F,eAAA,CAAgB,KAAA,EAAO,SAAA,CAAU,KAAA,EAAO,OAAA,EAAS,SAAA,CAAU,YAAA,CAAa,SAAA,CAAU,KAAA;AAAA;AAAA,kBAyBnF,SAAA;EAAA,SACG,uBAAA,CAAwB,KAAA,EAAO,SAAA,CAAU,SAAA;EAAA,SAIzC,WAAA,CAAY,KAAA,YAAiB,KAAA,IAAS,SAAA,CAAU,SAAA;EAAA,SAIhD,SAAA,GAAA,CAAa,KAAA,EAAO,CAAA,GAAI,KAAA,IAAS,OAAA,CAAQ,CAAA;EAAA,KAI7C,MAAA;EAAA,KACA,SAAA,qBAA0B,IAAA;EAAA,KAC1B,KAAA;EAAA,KAEA,UAAA,MAAgB,CAAA,SAAU,MAAA,GAChC,aAAA,CAAc,CAAA,IACd,CAAA,SAAU,SAAA,GACN,gBAAA,CAAiB,CAAA,IACjB,CAAA,SAAU,KAAA,GACN,YAAA,CAAa,CAAA,IACb,OAAA,CAAQ,CAAA;EAAA,UAEL,OAAA;IACb,MAAA,GAAS,CAAA;IACT,SAAA,GAAY,CAAA;EAAA;EAAA,UAGC,gBAAA,WAA2B,SAAA,UAAmB,OAAA,CAAQ,CAAA;IACnE,WAAA,GAAc,CAAA;IACd,kBAAA,GAAqB,CAAA;IACrB,QAAA,GAAW,CAAA;IACX,eAAA,GAAkB,CAAA;EAAA;EAAA,UAGL,aAAA,WAAwB,MAAA,UAAgB,OAAA,CAAQ,CAAA;IAC7D,QAAA,GAAW,CAAA;IACX,UAAA,GAAa,CAAA;IACb,QAAA,GAAW,CAAA;IACX,eAAA;IACA,OAAA,GAAU,MAAA;EAAA;EAAA,UAGG,YAAA,WAAuB,KAAA,UAAe,OAAA,CAAQ,CAAA;IAC3D,aAAA,GAAgB,CAAA;IAChB,YAAA,GAAe,CAAA;IACf,YAAA,GAAe,CAAA;IACf,MAAA,GAAS,gBAAA;EAAA;AAAA;;;cC3IJ,KAAA,WAAgB,MAAA,CAAO,MAAA;EAAA,SAChB,IAAA,EAAM,CAAA;cAEH,IAAA,EAAM,QAAA,CAAS,CAAA;EAI3B,MAAA,CAAO,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,IAAK,CAAA;EAInC,aAAA,CAAc,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,GAAI,KAAA;AAAA;AAAA,kBAuEnC,KAAA;EAAA,KACD,UAAA,WAAqB,MAAA,CAAO,MAAA,kBACxB,CAAA,IAAK,MAAA,CAAO,CAAA,EAAG,CAAA;EAAA,KAGnB,MAAA,WAAiB,MAAA,CAAO,MAAA,kBAAwB,CAAA,IACvD,CAAA,CAAE,CAAA,MACA,KAAA,EAAO,CAAA,CAAE,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAG,KAAA,UAAe,KAAA,EAAO,CAAA,mBAC/C,SAAA,CAAU,UAAA,CAAW,CAAA,CAAE,CAAA,KAAM,gBAAA,CAAiB,CAAA;EAAA,UAEnC,gBAAA,WAA2B,MAAA,CAAO,MAAA,UAAgB,OAAA,CAAQ,MAAA,0BAA4B,YAAA,CAAa,OAAA,CAAQ,CAAA;EAAA,KAIhH,OAAA,WAAkB,MAAA,CAAO,MAAA,IAAU,UAAA,CAAW,CAAA,IAAK,gBAAA,CAAiB,CAAA;EAAA,SAEhE,iBAAA,CAAkB,KAAA,YAAiB,KAAA,UAAe,gBAAA;AAAA;;;cCpGzD,MAAA,WAAiB,MAAA,CAAO,MAAA;EAAA,mBACd,IAAA,EAAM,CAAA;cAEb,IAAA,EAAM,QAAA,CAAS,CAAA;EAIpB,KAAA,CAAM,OAAA;IACT,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA;IACtB,IAAA;IACA,KAAA;EAAA,IACA,CAAA;EAeG,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,IAAK,MAAA,CAAO,CAAA;EAIzC,IAAA,CAAK,KAAA,WAAgB,MAAA,CAAO,CAAA;EAI5B,IAAA,CAAK,KAAA,WAAgB,MAAA,CAAO,CAAA;EAI5B,KAAA,CAAA;EAIA,KAAA,CAAA,GAAS,CAAA;EAIT,IAAA,CAAA,GAAQ,CAAA;EAIR,OAAA,CAAA,GAAW,CAAA;AAAA;AAAA,kBAKL,MAAA;EAAA,KACD,MAAA;AAAA"}
package/dist/index.d.mts CHANGED
@@ -1,65 +1,80 @@
1
1
  //#region src/helpers/types.d.ts
2
2
  type ValueOrArray<T> = T | T[];
3
3
  //#endregion
4
- //#region src/classes/Qweery.d.ts
5
- declare class Qweery<T extends Qweery.Object> {
6
- readonly data: T[];
7
- constructor(data: Iterable<T>);
8
- query(options: {
9
- where?: Qweery.WhereOptions<T>;
10
- skip?: number;
11
- limit?: number;
12
- }): T[];
13
- where(options: Qweery.WhereOptions<T>): Qweery<T>;
14
- skip(count: number): Qweery<T>;
15
- take(count: number): Qweery<T>;
16
- count(): number;
17
- first(): T | undefined;
18
- last(): T | undefined;
19
- toArray(): T[];
20
- private isItemMatch;
21
- private evaluateLogicalOperator;
22
- private evaluateValueOperator;
23
- private evaluateNumericalOperator;
24
- private evaluateStringOperator;
25
- private evaluateArrayOperator;
4
+ //#region src/classes/Primitive.d.ts
5
+ declare class Primitive {
6
+ static satisfiesValue<T>(value: T, options: Primitive.Filters<T>): boolean;
7
+ static statisfiesString(value: Primitive.String, options: Primitive.StringFilters<Primitive.String>): boolean;
8
+ static statisfiesNumerical(value: Primitive.Numerical, options: Primitive.NumericalFilters<Primitive.Numerical>): boolean;
9
+ static statisfiesArray(value: Primitive.Array, options: Primitive.ArrayFilters<Primitive.Array>): boolean;
26
10
  }
27
- declare namespace Qweery {
28
- type Object = object;
29
- type StringPrimitive = string;
30
- type NumericalPrimitive = number | bigint | Date;
31
- type ArrayPrimitive = Array<any> | ReadonlyArray<any>;
32
- type WhereOptionKeys<T extends Object> = { [K in keyof T]?: T[K] | ((value: T[K], object: T, index: number, array: T[]) => boolean) | WhereOptionValueOperatorsType<T, T[K]> };
33
- type WhereOptionValueOperatorsType<T extends Object, V> = V extends StringPrimitive ? WhereOptionStringOperators<T, V> : V extends NumericalPrimitive ? WhereOptionNumericalOperators<T, V> : V extends ArrayPrimitive ? WhereOptionArrayOperators<T, V> : WhereOptionValueOperators<T, V>;
34
- interface WhereOptionLogicalOperators<T extends Object> {
35
- $AND?: ValueOrArray<WhereOptions<T>>;
36
- $OR?: ValueOrArray<WhereOptions<T>>;
37
- $NOT?: ValueOrArray<WhereOptions<T>>;
38
- }
39
- interface WhereOptionValueOperators<T extends Object, V> extends WhereOptionLogicalOperators<T> {
11
+ declare namespace Primitive {
12
+ function normalizeNumericalValue(value: Primitive.Numerical): number | bigint;
13
+ function isNumerical(value: unknown): value is Primitive.Numerical;
14
+ function isDefined<T>(value: T): value is Exclude<T, undefined>;
15
+ type String = string;
16
+ type Numerical = number | bigint | Date;
17
+ type Array = any[] | readonly any[];
18
+ type FilterType<V> = V extends String ? StringFilters<V> : V extends Numerical ? NumericalFilters<V> : V extends Array ? ArrayFilters<V> : Filters<V>;
19
+ interface Filters<V> {
40
20
  equals?: V;
41
21
  notEquals?: V;
42
22
  }
43
- interface WhereOptionNumericalOperators<T extends Object, V extends NumericalPrimitive> extends WhereOptionValueOperators<T, V> {
23
+ interface NumericalFilters<V extends Numerical> extends Filters<V> {
44
24
  greaterThan?: V;
45
25
  greaterThanOrEqual?: V;
46
26
  lessThan?: V;
47
27
  lessThanOrEqual?: V;
48
28
  }
49
- interface WhereOptionStringOperators<T extends Object, V extends StringPrimitive> extends WhereOptionValueOperators<T, V> {
29
+ interface StringFilters<V extends String> extends Filters<V> {
50
30
  includes?: V;
51
31
  startsWith?: V;
52
32
  endsWith?: V;
53
33
  caseInsensitive?: boolean;
54
34
  matches?: RegExp;
55
35
  }
56
- interface WhereOptionArrayOperators<T extends Object, V extends ArrayPrimitive> extends WhereOptionValueOperators<T, V> {
36
+ interface ArrayFilters<V extends Array> extends Filters<V> {
57
37
  includesEvery?: V[number][];
58
38
  includesSome?: V[number][];
59
39
  includesNone?: V[number][];
40
+ length?: NumericalFilters<number>;
60
41
  }
61
- type WhereOptions<T extends Object> = WhereOptionKeys<T> & WhereOptionLogicalOperators<T>;
62
- function normalizeNumericalValue(value: Qweery.NumericalPrimitive): number | bigint;
42
+ }
43
+ //#endregion
44
+ //#region src/classes/Where.d.ts
45
+ declare class Where<T extends Qweery.Object> {
46
+ readonly data: T[];
47
+ constructor(data: Iterable<T>);
48
+ filter(options: Where.Options<T>): T[];
49
+ satisfiesItem(options: Where.Options<T>, index: number): boolean;
50
+ }
51
+ declare namespace Where {
52
+ type KeyFilters<T extends Qweery.Object> = { [K in keyof T]?: Filter<T, K> };
53
+ type Filter<T extends Qweery.Object, K extends keyof T> = T[K] | ((value: T[K], object: T, index: number, array: T[]) => boolean) | (Primitive.FilterType<T[K]> & LogicalOperators<T>);
54
+ interface LogicalOperators<T extends Qweery.Object> extends Partial<Record<'$AND' | '$OR' | '$NOT', ValueOrArray<Options<T>>>> {}
55
+ type Options<T extends Qweery.Object> = KeyFilters<T> & LogicalOperators<T>;
56
+ function isLogicalOperator(value: unknown): value is keyof LogicalOperators<any>;
57
+ }
58
+ //#endregion
59
+ //#region src/classes/Qweery.d.ts
60
+ declare class Qweery<T extends Qweery.Object> {
61
+ protected readonly data: T[];
62
+ constructor(data: Iterable<T>);
63
+ query(options: {
64
+ where?: Where.Options<T>;
65
+ skip?: number;
66
+ limit?: number;
67
+ }): T[];
68
+ where(options: Where.Options<T>): Qweery<T>;
69
+ skip(count: number): Qweery<T>;
70
+ take(count: number): Qweery<T>;
71
+ count(): number;
72
+ first(): T | undefined;
73
+ last(): T | undefined;
74
+ toArray(): T[];
75
+ }
76
+ declare namespace Qweery {
77
+ type Object = object;
63
78
  }
64
79
  //#endregion
65
80
  export { Qweery, ValueOrArray };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/helpers/types.ts","../src/classes/Qweery.ts"],"mappings":";KAAY,YAAA,MAAkB,CAAA,GAAE,CAAA;;;cCEnB,MAAA,WAAiB,MAAA,CAAO,MAAA;EAAA,SACjB,IAAA,EAAM,CAAA;cAEV,IAAA,EAAM,QAAA,CAAS,CAAA;EAIpB,KAAA,CAAM,OAAA;IACT,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,CAAA;IAC5B,IAAA;IACA,KAAA;EAAA,IACA,CAAA;EAcG,KAAA,CAAM,OAAA,EAAS,MAAA,CAAO,YAAA,CAAa,CAAA,IAAK,MAAA,CAAO,CAAA;EAI/C,IAAA,CAAK,KAAA,WAAgB,MAAA,CAAO,CAAA;EAI5B,IAAA,CAAK,KAAA,WAAgB,MAAA,CAAO,CAAA;EAI5B,KAAA,CAAA;EAIA,KAAA,CAAA,GAAS,CAAA;EAIT,IAAA,CAAA,GAAQ,CAAA;EAIR,OAAA,CAAA,GAAW,CAAA;EAAA,QAIV,WAAA;EAAA,QAqDA,uBAAA;EAAA,QA+BA,qBAAA;EAAA,QAYA,yBAAA;EAAA,QAwBA,sBAAA;EAAA,QAiDA,qBAAA;AAAA;AAAA,kBAqBK,MAAA;EAAA,KACD,MAAA;EAAA,KACA,eAAA;EAAA,KACA,kBAAA,qBAAmC,IAAA;EAAA,KACnC,cAAA,GAAiB,KAAA,QAAW,aAAA;EAAA,KAE5B,eAAA,WAA0B,MAAA,kBACtB,CAAA,IACP,CAAA,CAAE,CAAA,MACA,KAAA,EAAO,CAAA,CAAE,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAG,KAAA,UAAe,KAAA,EAAO,CAAA,kBAChD,6BAAA,CAA8B,CAAA,EAAG,CAAA,CAAE,CAAA;EAAA,KAGhC,6BAAA,WAAwC,MAAA,OAAa,CAAA,SAAU,eAAA,GACrE,0BAAA,CAA2B,CAAA,EAAG,CAAA,IAC9B,CAAA,SAAU,kBAAA,GACN,6BAAA,CAA8B,CAAA,EAAG,CAAA,IACjC,CAAA,SAAU,cAAA,GACN,yBAAA,CAA0B,CAAA,EAAG,CAAA,IAC7B,yBAAA,CAA0B,CAAA,EAAG,CAAA;EAAA,UAE1B,2BAAA,WAAsC,MAAA;IACnD,IAAA,GAAO,YAAA,CAAa,YAAA,CAAa,CAAA;IACjC,GAAA,GAAM,YAAA,CAAa,YAAA,CAAa,CAAA;IAChC,IAAA,GAAO,YAAA,CAAa,YAAA,CAAa,CAAA;EAAA;EAAA,UAGpB,yBAAA,WAAoC,MAAA,aAAmB,2BAAA,CAA4B,CAAA;IAChG,MAAA,GAAS,CAAA;IACT,SAAA,GAAY,CAAA;EAAA;EAAA,UAGC,6BAAA,WAAwC,MAAA,YAAkB,kBAAA,UAA4B,yBAAA,CAA0B,CAAA,EAAG,CAAA;IAChI,WAAA,GAAc,CAAA;IACd,kBAAA,GAAqB,CAAA;IACrB,QAAA,GAAW,CAAA;IACX,eAAA,GAAkB,CAAA;EAAA;EAAA,UAGL,0BAAA,WAAqC,MAAA,YAAkB,eAAA,UAAyB,yBAAA,CAA0B,CAAA,EAAG,CAAA;IAC1H,QAAA,GAAW,CAAA;IACX,UAAA,GAAa,CAAA;IACb,QAAA,GAAW,CAAA;IACX,eAAA;IACA,OAAA,GAAU,MAAA;EAAA;EAAA,UAGG,yBAAA,WAAoC,MAAA,YAAkB,cAAA,UAAwB,yBAAA,CAA0B,CAAA,EAAG,CAAA;IACxH,aAAA,GAAgB,CAAA;IAChB,YAAA,GAAe,CAAA;IACf,YAAA,GAAe,CAAA;EAAA;EAAA,KAGP,YAAA,WAAuB,MAAA,IAAU,eAAA,CAAgB,CAAA,IAAK,2BAAA,CAA4B,CAAA;EAAA,SAE9E,uBAAA,CAAwB,KAAA,EAAO,MAAA,CAAO,kBAAA;AAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/helpers/types.ts","../src/classes/Primitive.ts","../src/classes/Where.ts","../src/classes/Qweery.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,3 +1,135 @@
1
+ //#region src/classes/Primitive.ts
2
+ var Primitive = class Primitive {
3
+ static satisfiesValue(value, options) {
4
+ if (Primitive.isDefined(options.equals) && value !== options.equals) return false;
5
+ if (Primitive.isDefined(options.notEquals) && value === options.notEquals) return false;
6
+ return true;
7
+ }
8
+ static statisfiesString(value, options) {
9
+ if (options.caseInsensitive) value = value.toLowerCase();
10
+ if (!this.satisfiesValue(value, options)) return false;
11
+ if (Primitive.isDefined(options.startsWith) && !value.startsWith(options.startsWith)) return false;
12
+ if (Primitive.isDefined(options.endsWith) && !value.endsWith(options.endsWith)) return false;
13
+ if (Primitive.isDefined(options.includes) && !value.includes(options.includes)) return false;
14
+ if (Primitive.isDefined(options.matches) && !options.matches.test(value)) return false;
15
+ return true;
16
+ }
17
+ static statisfiesNumerical(value, options) {
18
+ value = Primitive.normalizeNumericalValue(value);
19
+ if (Primitive.isDefined(options.equals) && value !== Primitive.normalizeNumericalValue(options.equals)) return false;
20
+ if (Primitive.isDefined(options.notEquals) && value === Primitive.normalizeNumericalValue(options.notEquals)) return false;
21
+ if (Primitive.isDefined(options.greaterThan) && value <= Primitive.normalizeNumericalValue(options.greaterThan)) return false;
22
+ if (Primitive.isDefined(options.greaterThanOrEqual) && value < Primitive.normalizeNumericalValue(options.greaterThanOrEqual)) return false;
23
+ if (Primitive.isDefined(options.lessThan) && value >= Primitive.normalizeNumericalValue(options.lessThan)) return false;
24
+ if (Primitive.isDefined(options.lessThanOrEqual) && value > Primitive.normalizeNumericalValue(options.lessThanOrEqual)) return false;
25
+ return true;
26
+ }
27
+ static statisfiesArray(value, options) {
28
+ if (!this.satisfiesValue(value, options)) return false;
29
+ if (Primitive.isDefined(options.includesEvery) && !options.includesEvery.every((item) => value.includes(item))) return false;
30
+ if (Primitive.isDefined(options.includesSome) && !options.includesSome.some((item) => value.includes(item))) return false;
31
+ if (Primitive.isDefined(options.includesNone) && options.includesNone.some((item) => value.includes(item))) return false;
32
+ if (Primitive.isDefined(options.length) && !Primitive.statisfiesNumerical(value.length, options.length)) return false;
33
+ return true;
34
+ }
35
+ };
36
+ (function(_Primitive) {
37
+ function normalizeNumericalValue(value) {
38
+ return value instanceof Date ? value.getTime() : value;
39
+ }
40
+ _Primitive.normalizeNumericalValue = normalizeNumericalValue;
41
+ function isNumerical(value) {
42
+ return typeof value === "number" || typeof value === "bigint" || value instanceof Date;
43
+ }
44
+ _Primitive.isNumerical = isNumerical;
45
+ function isDefined(value) {
46
+ return value !== void 0;
47
+ }
48
+ _Primitive.isDefined = isDefined;
49
+ })(Primitive || (Primitive = {}));
50
+
51
+ //#endregion
52
+ //#region src/classes/Where.ts
53
+ var Where = class Where {
54
+ data;
55
+ constructor(data) {
56
+ this.data = Array.from(data);
57
+ }
58
+ filter(options) {
59
+ return this.data.filter((_, index) => this.satisfiesItem(options, index));
60
+ }
61
+ satisfiesItem(options, index) {
62
+ const item = this.data.at(index);
63
+ if (!item) return false;
64
+ let value = true;
65
+ for (const key in options) {
66
+ if (Where.isLogicalOperator(key)) {
67
+ const conditions = options[key];
68
+ switch (key) {
69
+ case "$NOT":
70
+ value = value && !(Array.isArray(conditions) ? conditions.every((condition) => this.satisfiesItem(condition, index)) : this.satisfiesItem(conditions, index));
71
+ break;
72
+ case "$AND":
73
+ value = value && (Array.isArray(conditions) ? conditions.every((condition) => this.satisfiesItem(condition, index)) : this.satisfiesItem(conditions, index));
74
+ break;
75
+ case "$OR":
76
+ value = Array.isArray(conditions) ? value && conditions.some((condition) => this.satisfiesItem(condition, index)) : value || this.satisfiesItem(conditions, index);
77
+ break;
78
+ }
79
+ continue;
80
+ }
81
+ const filter = options[key];
82
+ const itemValue = item[key];
83
+ if (filter instanceof Function) {
84
+ value = value && filter(itemValue, item, index, this.data);
85
+ continue;
86
+ }
87
+ if (typeof filter === "object") {
88
+ if (typeof itemValue === "string") {
89
+ value = value && Primitive.statisfiesString(itemValue, filter);
90
+ continue;
91
+ }
92
+ if (Array.isArray(itemValue)) {
93
+ value = value && Primitive.statisfiesArray(itemValue, filter);
94
+ continue;
95
+ }
96
+ if (Primitive.isNumerical(itemValue)) {
97
+ value = value && Primitive.statisfiesNumerical(itemValue, filter);
98
+ continue;
99
+ }
100
+ value = value && Primitive.satisfiesValue(itemValue, filter);
101
+ continue;
102
+ }
103
+ value = value && itemValue === filter;
104
+ }
105
+ return value;
106
+ }
107
+ };
108
+ (function(_Where) {
109
+ function isLogicalOperator(value) {
110
+ return value === "$AND" || value === "$OR" || value === "$NOT";
111
+ }
112
+ _Where.isLogicalOperator = isLogicalOperator;
113
+ })(Where || (Where = {}));
114
+ new Where([
115
+ {
116
+ name: "Alice",
117
+ age: 30,
118
+ sports: ["Football", "Basketball"]
119
+ },
120
+ {
121
+ name: "Bob",
122
+ age: 25,
123
+ sports: ["Football", "Basketball"]
124
+ },
125
+ {
126
+ name: "Charlie",
127
+ age: 35,
128
+ sports: ["Football", "Basketball"]
129
+ }
130
+ ]);
131
+
132
+ //#endregion
1
133
  //#region src/classes/Qweery.ts
2
134
  var Qweery = class Qweery {
3
135
  data;
@@ -5,13 +137,13 @@ var Qweery = class Qweery {
5
137
  this.data = Array.from(data);
6
138
  }
7
139
  query(options) {
8
- let result = this.data.filter((_, index) => options.where ? this.isItemMatch(index, options.where) : true);
140
+ let result = new Where(this.data).filter(options.where || {});
9
141
  if (options.skip) result = result.slice(options.skip);
10
142
  if (options.limit) result = result.slice(0, options.limit);
11
143
  return result;
12
144
  }
13
145
  where(options) {
14
- return new Qweery(this.data.filter((_, index) => this.isItemMatch(index, options)));
146
+ return new Qweery(new Where(this.data).filter(options || {}));
15
147
  }
16
148
  skip(count) {
17
149
  return new Qweery(this.data.slice(count));
@@ -31,79 +163,7 @@ var Qweery = class Qweery {
31
163
  toArray() {
32
164
  return this.data;
33
165
  }
34
- isItemMatch(index, options) {
35
- const item = this.data.at(index);
36
- if (!item) return false;
37
- const keys = Object.keys(options);
38
- for (const key of keys) {
39
- if (key.toString().startsWith("$") || options[key] === void 0) continue;
40
- let value;
41
- if (typeof options[key] === "function") value = options[key](item[key], item, index, this.data);
42
- else if (typeof options[key] === "object") if (typeof item[key] === "string") value = this.evaluateStringOperator(index, key, options[key]);
43
- else if (typeof item[key] === "number" || typeof item[key] === "bigint" || item[key] instanceof Date) value = this.evaluateNumericalOperator(index, key, options[key]);
44
- else if (Array.isArray(item[key])) value = this.evaluateArrayOperator(index, key, options[key]);
45
- else value = this.evaluateValueOperator(index, key, options[key]);
46
- else value = item[key] === options[key];
47
- if (!value) return false;
48
- }
49
- return this.evaluateLogicalOperator(index, options);
50
- }
51
- evaluateLogicalOperator(index, options) {
52
- if (options.$NOT) {
53
- for (const option of Array.isArray(options.$NOT) ? options.$NOT : [options.$NOT]) if (this.isItemMatch(index, option)) return false;
54
- }
55
- if (options.$AND) {
56
- for (const option of Array.isArray(options.$AND) ? options.$AND : [options.$AND]) if (!this.isItemMatch(index, option)) return false;
57
- }
58
- if (options.$OR) {
59
- let hasMatch = false;
60
- for (const option of Array.isArray(options.$OR) ? options.$OR : [options.$OR]) if (this.isItemMatch(index, option)) {
61
- hasMatch = true;
62
- break;
63
- }
64
- if (!hasMatch) return false;
65
- }
66
- return true;
67
- }
68
- evaluateValueOperator(index, property, operator) {
69
- if ("equals" in operator && operator.equals !== this.data[index][property]) return false;
70
- if ("notEquals" in operator && operator.notEquals === this.data[index][property]) return false;
71
- return this.evaluateLogicalOperator(index, operator);
72
- }
73
- evaluateNumericalOperator(index, property, operator) {
74
- if (!this.evaluateValueOperator(index, property, operator)) return false;
75
- const value = Qweery.normalizeNumericalValue(this.data[index][property]);
76
- if (operator.greaterThan !== void 0 && !(value > Qweery.normalizeNumericalValue(operator.greaterThan))) return false;
77
- if (operator.greaterThanOrEqual !== void 0 && !(value >= Qweery.normalizeNumericalValue(operator.greaterThanOrEqual))) return false;
78
- if (operator.lessThan !== void 0 && !(value < Qweery.normalizeNumericalValue(operator.lessThan))) return false;
79
- if (operator.lessThanOrEqual !== void 0 && !(value <= Qweery.normalizeNumericalValue(operator.lessThanOrEqual))) return false;
80
- return true;
81
- }
82
- evaluateStringOperator(index, property, operator) {
83
- if (!this.evaluateValueOperator(index, property, operator)) return false;
84
- let value = this.data[index][property];
85
- if (operator.caseInsensitive) value = value.toLowerCase();
86
- if (operator.includes && !value.includes(operator.caseInsensitive ? operator.includes.toLowerCase() : operator.includes)) return false;
87
- if (operator.startsWith && !value.startsWith(operator.caseInsensitive ? operator.startsWith.toLowerCase() : operator.startsWith)) return false;
88
- if (operator.endsWith && !value.endsWith(operator.caseInsensitive ? operator.endsWith.toLowerCase() : operator.endsWith)) return false;
89
- if (operator.matches && !operator.matches.test(value)) return false;
90
- return true;
91
- }
92
- evaluateArrayOperator(index, property, operator) {
93
- if (!this.evaluateValueOperator(index, property, operator)) return false;
94
- const value = this.data[index][property];
95
- if ("includesEvery" in operator && operator.includesEvery?.every((v) => value.includes(v))) return true;
96
- if ("includesSome" in operator && operator.includesSome?.some((v) => value.includes(v))) return true;
97
- if ("includesNone" in operator && operator.includesNone?.every((v) => !value.includes(v))) return true;
98
- return true;
99
- }
100
166
  };
101
- (function(_Qweery) {
102
- function normalizeNumericalValue(value) {
103
- return value instanceof Date ? value.getTime() : value;
104
- }
105
- _Qweery.normalizeNumericalValue = normalizeNumericalValue;
106
- })(Qweery || (Qweery = {}));
107
167
 
108
168
  //#endregion
109
169
  export { Qweery };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/classes/Qweery.ts"],"sourcesContent":["import type { ValueOrArray } from '../helpers/types.js';\n\nexport class Qweery<T extends Qweery.Object> {\n public readonly data: T[];\n\n constructor(data: Iterable<T>) {\n this.data = Array.from(data);\n }\n\n public query(options: {\n where?: Qweery.WhereOptions<T>;\n skip?: number;\n limit?: number;\n }): T[] {\n let result = this.data.filter((_, index) => options.where ? this.isItemMatch(index, options.where) : true);\n\n if (options.skip) {\n result = result.slice(options.skip);\n }\n\n if (options.limit) {\n result = result.slice(0, options.limit);\n }\n\n return result;\n }\n\n public where(options: Qweery.WhereOptions<T>): Qweery<T> {\n return new Qweery(this.data.filter((_, index) => this.isItemMatch(index, options)));\n }\n\n public skip(count: number): Qweery<T> {\n return new Qweery(this.data.slice(count));\n }\n\n public take(count: number): Qweery<T> {\n return new Qweery(this.data.slice(0, count));\n }\n\n public count(): number {\n return this.data.length;\n }\n\n public first(): T|undefined {\n return this.data[0];\n }\n\n public last(): T|undefined {\n return this.data[this.data.length - 1];\n }\n\n public toArray(): T[] {\n return this.data;\n }\n\n private isItemMatch(index: number, options: Qweery.WhereOptions<T>): boolean {\n const item = this.data.at(index);\n if (!item) return false\n\n const keys = Object.keys(options) as (keyof T)[];\n\n for (const key of keys) {\n if (key.toString().startsWith('$') || options[key] === undefined) continue;\n\n let value: boolean;\n\n if (typeof options[key] === 'function') {\n value = options[key](item[key], item, index, this.data);\n } else if (typeof options[key] === 'object') {\n if (typeof item[key] === 'string') {\n value = this.evaluateStringOperator(\n index,\n key,\n options[key] as Qweery.WhereOptionStringOperators<T, Qweery.StringPrimitive>\n );\n } else if (\n typeof item[key] === 'number' ||\n typeof item[key] === 'bigint' ||\n item[key] instanceof Date\n ) {\n value = this.evaluateNumericalOperator(\n index,\n key,\n options[key] as Qweery.WhereOptionNumericalOperators<T, Qweery.NumericalPrimitive>\n );\n } else if (Array.isArray(item[key])) {\n value = this.evaluateArrayOperator(\n index,\n key,\n options[key] as Qweery.WhereOptionArrayOperators<T, Qweery.ArrayPrimitive>\n );\n } else {\n value = this.evaluateValueOperator(\n index,\n key,\n options[key] as Qweery.WhereOptionValueOperators<T, any>\n );\n }\n } else {\n value = item[key] === options[key];\n }\n\n if (!value) return false;\n }\n\n return this.evaluateLogicalOperator(index, options);\n }\n\n private evaluateLogicalOperator(index: number, options: Qweery.WhereOptionLogicalOperators<T>): boolean {\n let value = true;\n\n if (options.$NOT) {\n for (const option of Array.isArray(options.$NOT) ? options.$NOT : [options.$NOT]) {\n if (this.isItemMatch(index, option)) return false;\n }\n }\n\n if (options.$AND) {\n for (const option of Array.isArray(options.$AND) ? options.$AND : [options.$AND]) {\n if (!this.isItemMatch(index, option)) return false;\n }\n }\n\n if (options.$OR) {\n let hasMatch = false;\n\n for (const option of Array.isArray( options.$OR) ? options.$OR : [ options.$OR]) {\n if (this.isItemMatch(index, option)) {\n hasMatch = true;\n break;\n }\n }\n\n if (!hasMatch) return false;\n }\n\n return true;\n }\n\n private evaluateValueOperator(index: number, property: keyof T, operator: Qweery.WhereOptionValueOperators<T, any>): boolean {\n if ('equals' in operator && operator.equals !== this.data[index][property]) {\n return false;\n }\n\n if ('notEquals' in operator && operator.notEquals === this.data[index][property]) {\n return false;\n }\n\n return true && this.evaluateLogicalOperator(index, operator);\n }\n\n private evaluateNumericalOperator(index: number, property: keyof T, operator: Qweery.WhereOptionNumericalOperators<T, Qweery.NumericalPrimitive>): boolean {\n if (!this.evaluateValueOperator(index, property, operator)) return false;\n\n const value = Qweery.normalizeNumericalValue(this.data[index][property] as Qweery.NumericalPrimitive);\n\n if (operator.greaterThan !== undefined && !(value > Qweery.normalizeNumericalValue(operator.greaterThan))) {\n return false;\n }\n\n if (operator.greaterThanOrEqual !== undefined && !(value >= Qweery.normalizeNumericalValue(operator.greaterThanOrEqual))) {\n return false;\n }\n\n if (operator.lessThan !== undefined && !(value < Qweery.normalizeNumericalValue(operator.lessThan))) {\n return false;\n }\n\n if (operator.lessThanOrEqual !== undefined && !(value <= Qweery.normalizeNumericalValue(operator.lessThanOrEqual))) {\n return false;\n }\n\n return true;\n }\n\n private evaluateStringOperator(index: number, property: keyof T, operator: Qweery.WhereOptionStringOperators<T, Qweery.StringPrimitive>): boolean {\n if (!this.evaluateValueOperator(index, property, operator)) return false;\n\n let value = this.data[index][property] as Qweery.StringPrimitive;\n\n if (operator.caseInsensitive) {\n value = value.toLowerCase();\n }\n\n if (\n operator.includes &&\n !value.includes(\n operator.caseInsensitive\n ? operator.includes.toLowerCase()\n : operator.includes\n )\n ) {\n return false;\n }\n\n if (\n operator.startsWith && \n !value.startsWith(\n operator.caseInsensitive\n ? operator.startsWith.toLowerCase()\n : operator.startsWith\n )\n ) {\n return false;\n }\n\n if (\n operator.endsWith &&\n !value.endsWith(\n operator.caseInsensitive\n ? operator.endsWith.toLowerCase()\n : operator.endsWith\n )\n ) {\n return false;\n }\n\n if (operator.matches && !operator.matches.test(value)) {\n return false;\n }\n\n return true;\n }\n\n private evaluateArrayOperator(index: number, property: keyof T, operator: Qweery.WhereOptionArrayOperators<T, Qweery.ArrayPrimitive>): boolean {\n if (!this.evaluateValueOperator(index, property, operator)) return false;\n\n const value = this.data[index][property] as Qweery.ArrayPrimitive;\n\n if ('includesEvery' in operator && operator.includesEvery?.every(v => value.includes(v))) {\n return true;\n }\n\n if ('includesSome' in operator && operator.includesSome?.some(v => value.includes(v))) {\n return true;\n }\n\n if ('includesNone' in operator && operator.includesNone?.every(v => !value.includes(v))) {\n return true;\n }\n\n return true;\n }\n}\n\nexport namespace Qweery {\n export type Object = object;\n export type StringPrimitive = string;\n export type NumericalPrimitive = number|bigint|Date;\n export type ArrayPrimitive = Array<any>|ReadonlyArray<any>;\n\n export type WhereOptionKeys<T extends Object> = {\n [K in keyof T]?:\n |T[K]\n |((value: T[K], object: T, index: number, array: T[]) => boolean)\n |WhereOptionValueOperatorsType<T, T[K]>;\n }\n\n export type WhereOptionValueOperatorsType<T extends Object, V> = V extends StringPrimitive\n ? WhereOptionStringOperators<T, V>\n : V extends NumericalPrimitive\n ? WhereOptionNumericalOperators<T, V>\n : V extends ArrayPrimitive\n ? WhereOptionArrayOperators<T, V>\n : WhereOptionValueOperators<T, V>\n\n export interface WhereOptionLogicalOperators<T extends Object> {\n $AND?: ValueOrArray<WhereOptions<T>>;\n $OR?: ValueOrArray<WhereOptions<T>>;\n $NOT?: ValueOrArray<WhereOptions<T>>;\n }\n\n export interface WhereOptionValueOperators<T extends Object, V> extends WhereOptionLogicalOperators<T> {\n equals?: V;\n notEquals?: V;\n }\n\n export interface WhereOptionNumericalOperators<T extends Object, V extends NumericalPrimitive> extends WhereOptionValueOperators<T, V> {\n greaterThan?: V;\n greaterThanOrEqual?: V;\n lessThan?: V;\n lessThanOrEqual?: V;\n }\n\n export interface WhereOptionStringOperators<T extends Object, V extends StringPrimitive> extends WhereOptionValueOperators<T, V> {\n includes?: V;\n startsWith?: V;\n endsWith?: V;\n caseInsensitive?: boolean;\n matches?: RegExp;\n }\n\n export interface WhereOptionArrayOperators<T extends Object, V extends ArrayPrimitive> extends WhereOptionValueOperators<T, V> {\n includesEvery?: V[number][];\n includesSome?: V[number][];\n includesNone?: V[number][];\n }\n\n export type WhereOptions<T extends Object> = WhereOptionKeys<T> & WhereOptionLogicalOperators<T>;\n\n export function normalizeNumericalValue(value: Qweery.NumericalPrimitive): number|bigint {\n return value instanceof Date ? value.getTime() : value;\n }\n}"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/classes/Primitive.ts","../src/classes/Where.ts","../src/classes/Qweery.ts"],"sourcesContent":["export class Primitive {\n public static satisfiesValue<T>(value: T, options: Primitive.Filters<T>): boolean {\n if (Primitive.isDefined(options.equals) && value !== options.equals) {\n return false;\n }\n\n if (Primitive.isDefined(options.notEquals) && value === options.notEquals) {\n return false;\n }\n\n return true;\n }\n\n public static statisfiesString(value: Primitive.String, options: Primitive.StringFilters<Primitive.String>): boolean {\n if (options.caseInsensitive) value = value.toLowerCase();\n\n if (!this.satisfiesValue(value, options)) {\n return false;\n }\n\n if (Primitive.isDefined(options.startsWith) && !value.startsWith(options.startsWith)) {\n return false;\n }\n\n if (Primitive.isDefined(options.endsWith) && !value.endsWith(options.endsWith)) {\n return false;\n }\n\n if (Primitive.isDefined(options.includes) && !value.includes(options.includes)) {\n return false;\n }\n\n if (Primitive.isDefined(options.matches) && !options.matches.test(value)) {\n return false;\n }\n\n return true;\n }\n\n public static statisfiesNumerical(value: Primitive.Numerical, options: Primitive.NumericalFilters<Primitive.Numerical>): boolean {\n value = Primitive.normalizeNumericalValue(value);\n\n if (Primitive.isDefined(options.equals) && value !== Primitive.normalizeNumericalValue(options.equals)) {\n return false;\n }\n\n if (Primitive.isDefined(options.notEquals) && value === Primitive.normalizeNumericalValue(options.notEquals)) {\n return false;\n }\n\n if (Primitive.isDefined(options.greaterThan) && value <= Primitive.normalizeNumericalValue(options.greaterThan)) {\n return false;\n }\n\n if (Primitive.isDefined(options.greaterThanOrEqual) && value < Primitive.normalizeNumericalValue(options.greaterThanOrEqual)) {\n return false;\n }\n\n if (Primitive.isDefined(options.lessThan) && value >= Primitive.normalizeNumericalValue(options.lessThan)) {\n return false;\n }\n\n if (Primitive.isDefined(options.lessThanOrEqual) && value > Primitive.normalizeNumericalValue(options.lessThanOrEqual)) {\n return false;\n }\n\n return true;\n }\n\n public static statisfiesArray(value: Primitive.Array, options: Primitive.ArrayFilters<Primitive.Array>): boolean {\n if (!this.satisfiesValue(value, options)) {\n return false;\n }\n\n if (Primitive.isDefined(options.includesEvery) && !options.includesEvery.every(item => value.includes(item))) {\n return false;\n }\n\n if (Primitive.isDefined(options.includesSome) && !options.includesSome.some(item => value.includes(item))) {\n return false;\n }\n\n if (Primitive.isDefined(options.includesNone) && options.includesNone.some(item => value.includes(item))) {\n return false;\n }\n\n if (Primitive.isDefined(options.length) && !Primitive.statisfiesNumerical(value.length, options.length)) {\n return false;\n }\n\n return true;\n }\n}\n\nexport namespace Primitive {\n export function normalizeNumericalValue(value: Primitive.Numerical): number|bigint {\n return value instanceof Date ? value.getTime() : value;\n }\n\n export function isNumerical(value: unknown): value is Primitive.Numerical {\n return typeof value === 'number' || typeof value === 'bigint' || value instanceof Date;\n }\n\n export function isDefined<T>(value: T): value is Exclude<T, undefined> {\n return value !== undefined;\n }\n\n export type String = string;\n export type Numerical = number|bigint|Date;\n export type Array = any[]|readonly any[];\n\n export type FilterType<V> = V extends String\n ? StringFilters<V>\n : V extends Numerical\n ? NumericalFilters<V>\n : V extends Array\n ? ArrayFilters<V>\n : Filters<V>;\n\n export interface Filters<V>{\n equals?: V;\n notEquals?: V;\n }\n\n export interface NumericalFilters<V extends Numerical> extends Filters<V> {\n greaterThan?: V;\n greaterThanOrEqual?: V;\n lessThan?: V;\n lessThanOrEqual?: V;\n }\n\n export interface StringFilters<V extends String> extends Filters<V> {\n includes?: V;\n startsWith?: V;\n endsWith?: V;\n caseInsensitive?: boolean;\n matches?: RegExp;\n }\n\n export interface ArrayFilters<V extends Array> extends Filters<V> {\n includesEvery?: V[number][];\n includesSome?: V[number][];\n includesNone?: V[number][];\n length?: NumericalFilters<number>;\n }\n}","import type { ValueOrArray } from '../helpers/types.js';\nimport { Primitive } from './Primitive.js';\nimport type { Qweery } from './Qweery.js';\n\nexport class Where<T extends Qweery.Object> {\n public readonly data: T[];\n\n public constructor(data: Iterable<T>) {\n this.data = Array.from(data);\n }\n\n public filter(options: Where.Options<T>): T[] {\n return this.data.filter((_, index) => this.satisfiesItem(options, index));\n }\n\n public satisfiesItem(options: Where.Options<T>, index: number): boolean {\n const item = this.data.at(index);\n if (!item) return false;\n\n let value = true;\n\n for (const key in options) {\n if (Where.isLogicalOperator(key)) {\n const conditions = options[key as keyof T] as ValueOrArray<Where.Options<T>>;\n\n switch (key) {\n case '$NOT':\n value = value && !(\n Array.isArray(conditions)\n ? conditions.every(condition => this.satisfiesItem(condition, index))\n : this.satisfiesItem(conditions, index)\n );\n break;\n case '$AND':\n value = value && (\n Array.isArray(conditions)\n ? conditions.every(condition => this.satisfiesItem(condition, index))\n : this.satisfiesItem(conditions, index)\n );\n break;\n case '$OR':\n value = Array.isArray(conditions)\n ? value && conditions.some(condition => this.satisfiesItem(condition, index))\n : value || this.satisfiesItem(conditions, index);\n break;\n }\n\n continue;\n }\n\n\n const filter = options[key as keyof T] as Where.Filter<T, keyof T>;\n const itemValue = item[key as keyof T];\n\n if (filter instanceof Function) {\n value = value && filter(itemValue, item, index, this.data);\n continue;\n }\n\n if (typeof filter === 'object') {\n if (typeof itemValue === 'string') {\n value = value && Primitive.statisfiesString(itemValue, filter as Primitive.StringFilters<Primitive.String>);\n continue;\n }\n\n if (Array.isArray(itemValue)) {\n value = value && Primitive.statisfiesArray(itemValue, filter as Primitive.ArrayFilters<Primitive.Array>);\n continue;\n }\n\n if (Primitive.isNumerical(itemValue)) {\n value = value && Primitive.statisfiesNumerical(itemValue, filter as Primitive.NumericalFilters<Primitive.Numerical>);\n continue;\n }\n\n value = value && Primitive.satisfiesValue(itemValue, filter as Primitive.Filters<any>);\n continue;\n }\n\n value = value && (itemValue === filter);\n }\n\n return value;\n }\n}\n\nexport namespace Where {\n export type KeyFilters<T extends Qweery.Object> = {\n [K in keyof T]?: Filter<T, K>;\n }\n\n export type Filter<T extends Qweery.Object, K extends keyof T> = \n |T[K]\n |((value: T[K], object: T, index: number, array: T[]) => boolean)\n |(Primitive.FilterType<T[K]> & LogicalOperators<T>)\n\n export interface LogicalOperators<T extends Qweery.Object> extends Partial<Record<'$AND'|'$OR'|'$NOT', ValueOrArray<Options<T>>>>{\n //\n }\n\n export type Options<T extends Qweery.Object> = KeyFilters<T> & LogicalOperators<T>;\n\n export function isLogicalOperator(value: unknown): value is keyof LogicalOperators<any> {\n return value === '$AND' || value === '$OR' || value === '$NOT';\n }\n}\n\nconst w = new Where([\n { name: 'Alice', age: 30, sports: ['Football', 'Basketball'] },\n { name: 'Bob', age: 25, sports: ['Football', 'Basketball'] },\n { name: 'Charlie', age: 35, sports: ['Football', 'Basketball'] }\n]);","import { Where } from './Where.js';\n\nexport class Qweery<T extends Qweery.Object> {\n protected readonly data: T[];\n\n constructor(data: Iterable<T>) {\n this.data = Array.from(data);\n }\n\n public query(options: {\n where?: Where.Options<T>;\n skip?: number;\n limit?: number;\n }): T[] {\n\n let result = new Where(this.data).filter(options.where || {});\n\n if (options.skip) {\n result = result.slice(options.skip);\n }\n\n if (options.limit) {\n result = result.slice(0, options.limit);\n }\n\n return result;\n }\n\n public where(options: Where.Options<T>): Qweery<T> {\n return new Qweery(new Where(this.data).filter(options || {}));\n }\n\n public skip(count: number): Qweery<T> {\n return new Qweery(this.data.slice(count));\n }\n\n public take(count: number): Qweery<T> {\n return new Qweery(this.data.slice(0, count));\n }\n\n public count(): number {\n return this.data.length;\n }\n\n public first(): T|undefined {\n return this.data[0];\n }\n\n public last(): T|undefined {\n return this.data[this.data.length - 1];\n }\n\n public toArray(): T[] {\n return this.data;\n }\n}\n\nexport namespace Qweery {\n export type Object = object;\n}"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qweery",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "license": "MIT",
5
5
  "description": "A simple type-safe ORM like query builder for structured arrays",
6
6
  "type": "module",