qweery 0.0.3 → 0.0.4
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/dist/index.cjs +11 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -4
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +6 -4
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +11 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -141,9 +141,19 @@ var Qweery = class Qweery {
|
|
|
141
141
|
query(options) {
|
|
142
142
|
let result = new Where(this.data).filter(options.where || {});
|
|
143
143
|
if (options.skip) result = result.slice(options.skip);
|
|
144
|
-
if (options.
|
|
144
|
+
if (options.take) result = result.slice(0, options.take);
|
|
145
|
+
if (options.select?.length) result = result.map((item) => options.select.reduce((acc, key) => {
|
|
146
|
+
acc[key] = item[key];
|
|
147
|
+
return acc;
|
|
148
|
+
}, {}));
|
|
145
149
|
return result;
|
|
146
150
|
}
|
|
151
|
+
select(...keys) {
|
|
152
|
+
return new Qweery(keys.length ? this.data.map((item) => keys.reduce((acc, key) => {
|
|
153
|
+
acc[key] = item[key];
|
|
154
|
+
return acc;
|
|
155
|
+
}, {})) : this.data);
|
|
156
|
+
}
|
|
147
157
|
where(options) {
|
|
148
158
|
return new Qweery(new Where(this.data).filter(options || {}));
|
|
149
159
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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<K extends keyof T>(options: {\n select?: K[];\n where?: Where.Options<Pick<T, K>>;\n skip?: number;\n take?: number;\n }): Pick<T, K>[] {\n\n let result = new Where<Pick<T, K>>(this.data).filter(options.where || {});\n\n if (options.skip) {\n result = result.slice(options.skip);\n }\n\n if (options.take) {\n result = result.slice(0, options.take);\n }\n\n if (options.select?.length) {\n result = result.map(\n item => options.select!.reduce((acc, key) => {\n acc[key] = item[key];\n return acc;\n }, {} as Pick<T, K>)\n );\n }\n\n return result;\n }\n\n public select<K extends keyof T>(...keys: K[]): Qweery<Pick<T, K>> {\n return new Qweery(\n keys.length\n ? this.data.map(\n item => keys.reduce((acc, key) => {\n acc[key] = item[key];\n return acc;\n }, {} as Pick<T, K>)\n )\n : this.data\n );\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":";;;AAAA,IAAa,YAAb,MAAa,UAAU;CACnB,OAAc,eAAkB,OAAU,SAAwC;AAC9E,MAAI,UAAU,UAAU,QAAQ,OAAO,IAAI,UAAU,QAAQ,OACzD,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,UAAU,IAAI,UAAU,QAAQ,UAC5D,QAAO;AAGX,SAAO;;CAGX,OAAc,iBAAiB,OAAyB,SAA6D;AACjH,MAAI,QAAQ,gBAAiB,SAAQ,MAAM,aAAa;AAExD,MAAI,CAAC,KAAK,eAAe,OAAO,QAAQ,CACpC,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,WAAW,IAAI,CAAC,MAAM,WAAW,QAAQ,WAAW,CAChF,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,SAAS,IAAI,CAAC,MAAM,SAAS,QAAQ,SAAS,CAC1E,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,SAAS,IAAI,CAAC,MAAM,SAAS,QAAQ,SAAS,CAC1E,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,QAAQ,IAAI,CAAC,QAAQ,QAAQ,KAAK,MAAM,CACpE,QAAO;AAGX,SAAO;;CAGX,OAAc,oBAAoB,OAA4B,SAAmE;AAC7H,UAAQ,UAAU,wBAAwB,MAAM;AAEhD,MAAI,UAAU,UAAU,QAAQ,OAAO,IAAI,UAAU,UAAU,wBAAwB,QAAQ,OAAO,CAClG,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,UAAU,IAAI,UAAU,UAAU,wBAAwB,QAAQ,UAAU,CACxG,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,YAAY,IAAI,SAAS,UAAU,wBAAwB,QAAQ,YAAY,CAC3G,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,mBAAmB,IAAI,QAAQ,UAAU,wBAAwB,QAAQ,mBAAmB,CACxH,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,SAAS,IAAI,SAAS,UAAU,wBAAwB,QAAQ,SAAS,CACrG,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,gBAAgB,IAAI,QAAQ,UAAU,wBAAwB,QAAQ,gBAAgB,CAClH,QAAO;AAGX,SAAO;;CAGX,OAAc,gBAAgB,OAAwB,SAA2D;AAC7G,MAAI,CAAC,KAAK,eAAe,OAAO,QAAQ,CACpC,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,cAAc,IAAI,CAAC,QAAQ,cAAc,OAAM,SAAQ,MAAM,SAAS,KAAK,CAAC,CACxG,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,aAAa,IAAI,CAAC,QAAQ,aAAa,MAAK,SAAQ,MAAM,SAAS,KAAK,CAAC,CACrG,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,aAAa,IAAI,QAAQ,aAAa,MAAK,SAAQ,MAAM,SAAS,KAAK,CAAC,CACpG,QAAO;AAGX,MAAI,UAAU,UAAU,QAAQ,OAAO,IAAI,CAAC,UAAU,oBAAoB,MAAM,QAAQ,QAAQ,OAAO,CACnG,QAAO;AAGX,SAAO;;;;CAKJ,SAAS,wBAAwB,OAA2C;AAC/E,SAAO,iBAAiB,OAAO,MAAM,SAAS,GAAG;;;CAG9C,SAAS,YAAY,OAA8C;AACtE,SAAO,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,iBAAiB;;;CAG/E,SAAS,UAAa,OAA0C;AACnE,SAAO,UAAU;;;;;;;ACpGzB,IAAa,QAAb,MAAa,MAA+B;CACxC,AAAgB;CAEhB,AAAO,YAAY,MAAmB;AAClC,OAAK,OAAO,MAAM,KAAK,KAAK;;CAGhC,AAAO,OAAO,SAAgC;AAC1C,SAAO,KAAK,KAAK,QAAQ,GAAG,UAAU,KAAK,cAAc,SAAS,MAAM,CAAC;;CAG7E,AAAO,cAAc,SAA2B,OAAwB;EACpE,MAAM,OAAO,KAAK,KAAK,GAAG,MAAM;AAChC,MAAI,CAAC,KAAM,QAAO;EAElB,IAAI,QAAQ;AAEZ,OAAK,MAAM,OAAO,SAAS;AACvB,OAAI,MAAM,kBAAkB,IAAI,EAAE;IAC9B,MAAM,aAAa,QAAQ;AAE3B,YAAQ,KAAR;KACI,KAAK;AACD,cAAQ,SAAS,EACb,MAAM,QAAQ,WAAW,GACnB,WAAW,OAAM,cAAa,KAAK,cAAc,WAAW,MAAM,CAAC,GACnE,KAAK,cAAc,YAAY,MAAM;AAE/C;KACJ,KAAK;AACD,cAAQ,UACJ,MAAM,QAAQ,WAAW,GACnB,WAAW,OAAM,cAAa,KAAK,cAAc,WAAW,MAAM,CAAC,GACnE,KAAK,cAAc,YAAY,MAAM;AAE/C;KACJ,KAAK;AACD,cAAQ,MAAM,QAAQ,WAAW,GAC3B,SAAS,WAAW,MAAK,cAAa,KAAK,cAAc,WAAW,MAAM,CAAC,GAC3E,SAAS,KAAK,cAAc,YAAY,MAAM;AACpD;;AAGR;;GAIJ,MAAM,SAAS,QAAQ;GACvB,MAAM,YAAY,KAAK;AAEvB,OAAI,kBAAkB,UAAU;AAC5B,YAAQ,SAAS,OAAO,WAAW,MAAM,OAAO,KAAK,KAAK;AAC1D;;AAGJ,OAAI,OAAO,WAAW,UAAU;AAC5B,QAAI,OAAO,cAAc,UAAU;AAC/B,aAAQ,SAAS,UAAU,iBAAiB,WAAW,OAAoD;AAC3G;;AAGJ,QAAI,MAAM,QAAQ,UAAU,EAAE;AAC1B,aAAQ,SAAS,UAAU,gBAAgB,WAAW,OAAkD;AACxG;;AAGJ,QAAI,UAAU,YAAY,UAAU,EAAE;AAClC,aAAQ,SAAS,UAAU,oBAAoB,WAAW,OAA0D;AACpH;;AAGJ,YAAQ,SAAS,UAAU,eAAe,WAAW,OAAiC;AACtF;;AAGJ,WAAQ,SAAU,cAAc;;AAGpC,SAAO;;;;CAoBJ,SAAS,kBAAkB,OAAsD;AACpF,SAAO,UAAU,UAAU,UAAU,SAAS,UAAU;;;;AAItD,IAAI,MAAM;CAChB;EAAE,MAAM;EAAS,KAAK;EAAI,QAAQ,CAAC,YAAY,aAAa;EAAE;CAC9D;EAAE,MAAM;EAAO,KAAK;EAAI,QAAQ,CAAC,YAAY,aAAa;EAAE;CAC5D;EAAE,MAAM;EAAW,KAAK;EAAI,QAAQ,CAAC,YAAY,aAAa;EAAE;CACnE,CAAC;;;;AC7GF,IAAa,SAAb,MAAa,OAAgC;CACzC,AAAmB;CAEnB,YAAY,MAAmB;AAC3B,OAAK,OAAO,MAAM,KAAK,KAAK;;CAGhC,AAAO,MAAyB,SAKf;EAEb,IAAI,SAAS,IAAI,MAAkB,KAAK,KAAK,CAAC,OAAO,QAAQ,SAAS,EAAE,CAAC;AAEzE,MAAI,QAAQ,KACR,UAAS,OAAO,MAAM,QAAQ,KAAK;AAGvC,MAAI,QAAQ,KACR,UAAS,OAAO,MAAM,GAAG,QAAQ,KAAK;AAG1C,MAAI,QAAQ,QAAQ,OAChB,UAAS,OAAO,KACZ,SAAQ,QAAQ,OAAQ,QAAQ,KAAK,QAAQ;AACzC,OAAI,OAAO,KAAK;AAChB,UAAO;KACR,EAAE,CAAe,CACvB;AAGL,SAAO;;CAGX,AAAO,OAA0B,GAAG,MAA+B;AAC/D,SAAO,IAAI,OACP,KAAK,SACH,KAAK,KAAK,KACR,SAAQ,KAAK,QAAQ,KAAK,QAAQ;AAC9B,OAAI,OAAO,KAAK;AAChB,UAAO;KACR,EAAE,CAAe,CACvB,GACC,KAAK,KACV;;CAGL,AAAO,MAAM,SAAsC;AAC/C,SAAO,IAAI,OAAO,IAAI,MAAM,KAAK,KAAK,CAAC,OAAO,WAAW,EAAE,CAAC,CAAC;;CAGjE,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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -60,11 +60,13 @@ declare namespace Where {
|
|
|
60
60
|
declare class Qweery<T extends Qweery.Object> {
|
|
61
61
|
protected readonly data: T[];
|
|
62
62
|
constructor(data: Iterable<T>);
|
|
63
|
-
query(options: {
|
|
64
|
-
|
|
63
|
+
query<K extends keyof T>(options: {
|
|
64
|
+
select?: K[];
|
|
65
|
+
where?: Where.Options<Pick<T, K>>;
|
|
65
66
|
skip?: number;
|
|
66
|
-
|
|
67
|
-
}): T[];
|
|
67
|
+
take?: number;
|
|
68
|
+
}): Pick<T, K>[];
|
|
69
|
+
select<K extends keyof T>(...keys: K[]): Qweery<Pick<T, K>>;
|
|
68
70
|
where(options: Where.Options<T>): Qweery<T>;
|
|
69
71
|
skip(count: number): Qweery<T>;
|
|
70
72
|
take(count: number): Qweery<T>;
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":"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
|
|
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":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -60,11 +60,13 @@ declare namespace Where {
|
|
|
60
60
|
declare class Qweery<T extends Qweery.Object> {
|
|
61
61
|
protected readonly data: T[];
|
|
62
62
|
constructor(data: Iterable<T>);
|
|
63
|
-
query(options: {
|
|
64
|
-
|
|
63
|
+
query<K extends keyof T>(options: {
|
|
64
|
+
select?: K[];
|
|
65
|
+
where?: Where.Options<Pick<T, K>>;
|
|
65
66
|
skip?: number;
|
|
66
|
-
|
|
67
|
-
}): T[];
|
|
67
|
+
take?: number;
|
|
68
|
+
}): Pick<T, K>[];
|
|
69
|
+
select<K extends keyof T>(...keys: K[]): Qweery<Pick<T, K>>;
|
|
68
70
|
where(options: Where.Options<T>): Qweery<T>;
|
|
69
71
|
skip(count: number): Qweery<T>;
|
|
70
72
|
take(count: number): Qweery<T>;
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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
|
|
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
|
@@ -139,9 +139,19 @@ var Qweery = class Qweery {
|
|
|
139
139
|
query(options) {
|
|
140
140
|
let result = new Where(this.data).filter(options.where || {});
|
|
141
141
|
if (options.skip) result = result.slice(options.skip);
|
|
142
|
-
if (options.
|
|
142
|
+
if (options.take) result = result.slice(0, options.take);
|
|
143
|
+
if (options.select?.length) result = result.map((item) => options.select.reduce((acc, key) => {
|
|
144
|
+
acc[key] = item[key];
|
|
145
|
+
return acc;
|
|
146
|
+
}, {}));
|
|
143
147
|
return result;
|
|
144
148
|
}
|
|
149
|
+
select(...keys) {
|
|
150
|
+
return new Qweery(keys.length ? this.data.map((item) => keys.reduce((acc, key) => {
|
|
151
|
+
acc[key] = item[key];
|
|
152
|
+
return acc;
|
|
153
|
+
}, {})) : this.data);
|
|
154
|
+
}
|
|
145
155
|
where(options) {
|
|
146
156
|
return new Qweery(new Where(this.data).filter(options || {}));
|
|
147
157
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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<K extends keyof T>(options: {\n select?: K[];\n where?: Where.Options<Pick<T, K>>;\n skip?: number;\n take?: number;\n }): Pick<T, K>[] {\n\n let result = new Where<Pick<T, K>>(this.data).filter(options.where || {});\n\n if (options.skip) {\n result = result.slice(options.skip);\n }\n\n if (options.take) {\n result = result.slice(0, options.take);\n }\n\n if (options.select?.length) {\n result = result.map(\n item => options.select!.reduce((acc, key) => {\n acc[key] = item[key];\n return acc;\n }, {} as Pick<T, K>)\n );\n }\n\n return result;\n }\n\n public select<K extends keyof T>(...keys: K[]): Qweery<Pick<T, K>> {\n return new Qweery(\n keys.length\n ? this.data.map(\n item => keys.reduce((acc, key) => {\n acc[key] = item[key];\n return acc;\n }, {} as Pick<T, K>)\n )\n : this.data\n );\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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"}
|