crud-query-parser 1.0.0 → 1.1.0

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.
Files changed (40) hide show
  1. package/README.md +17 -1
  2. package/dist/adapters/array/index.d.mts +2 -2
  3. package/dist/adapters/array/index.d.ts +2 -2
  4. package/dist/adapters/dynamodb/index.d.mts +2 -2
  5. package/dist/adapters/dynamodb/index.d.ts +2 -2
  6. package/dist/adapters/dynamodb/index.js +1 -1
  7. package/dist/adapters/dynamodb/index.js.map +1 -1
  8. package/dist/adapters/dynamodb/index.mjs +1 -1
  9. package/dist/adapters/dynamodb/index.mjs.map +1 -1
  10. package/dist/adapters/mongodb/index.d.mts +2 -2
  11. package/dist/adapters/mongodb/index.d.ts +2 -2
  12. package/dist/adapters/sequelize/index.d.mts +190 -0
  13. package/dist/adapters/sequelize/index.d.ts +190 -0
  14. package/dist/adapters/sequelize/index.js +2 -0
  15. package/dist/adapters/sequelize/index.js.map +1 -0
  16. package/dist/adapters/sequelize/index.mjs +2 -0
  17. package/dist/adapters/sequelize/index.mjs.map +1 -0
  18. package/dist/adapters/typeorm/index.d.mts +2 -2
  19. package/dist/adapters/typeorm/index.d.ts +2 -2
  20. package/dist/{crud-request-DLo0ZuzD.d.mts → crud-request-9u0s-DnI.d.mts} +69 -0
  21. package/dist/{crud-request-DLo0ZuzD.d.ts → crud-request-9u0s-DnI.d.ts} +69 -0
  22. package/dist/{crud-request-where.builder-CqbP5LT9.d.ts → crud-request-where.builder-Cq0DKiuS.d.ts} +1 -1
  23. package/dist/{crud-request-where.builder-CBx-JZhl.d.mts → crud-request-where.builder-D_V4JtjY.d.mts} +1 -1
  24. package/dist/filters/index.d.mts +1 -1
  25. package/dist/filters/index.d.ts +1 -1
  26. package/dist/helpers/express/index.d.mts +2 -2
  27. package/dist/helpers/express/index.d.ts +2 -2
  28. package/dist/helpers/nestjs/index.d.mts +2 -2
  29. package/dist/helpers/nestjs/index.d.ts +2 -2
  30. package/dist/index.d.mts +5 -5
  31. package/dist/index.d.ts +5 -5
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.mjs.map +1 -1
  34. package/dist/parsers/crud/index.d.mts +3 -3
  35. package/dist/parsers/crud/index.d.ts +3 -3
  36. package/dist/{query-adapter-CZhPC1aq.d.ts → query-adapter-CZ_oD6Ui.d.ts} +1 -1
  37. package/dist/{query-adapter-sgeUb8CV.d.mts → query-adapter-HqVhBKtl.d.mts} +1 -1
  38. package/dist/{request-parser-Cr3cxMRw.d.ts → request-parser-C-cBNlki.d.ts} +1 -1
  39. package/dist/{request-parser-DzuXbRsB.d.mts → request-parser-DYVGG34f.d.mts} +1 -1
  40. package/package.json +21 -2
@@ -36,28 +36,97 @@ interface CrudRequestWhereField {
36
36
  }
37
37
  type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;
38
38
  declare enum CrudRequestWhereOperator {
39
+ /**
40
+ * Equals (`==`) (accepts string, number, boolean and Date)
41
+ */
39
42
  EQ = "eq",
43
+ /**
44
+ * Not Equals (`!=`) (accepts string, number, boolean and Date)
45
+ */
40
46
  NEQ = "neq",
47
+ /**
48
+ * Greater than (`>`) (accepts string, number, boolean and Date)
49
+ */
41
50
  GT = "gt",
51
+ /**
52
+ * Greater than or equal (`>=`) (accepts string, number, boolean and Date)
53
+ */
42
54
  GTE = "gte",
55
+ /**
56
+ * Less than (`<`) (accepts string, number, boolean and Date)
57
+ */
43
58
  LT = "lt",
59
+ /**
60
+ * Less than or equal (`<=`) (accepts string, number, boolean and Date)
61
+ */
44
62
  LTE = "lte",
63
+ /**
64
+ * Starts with (accepts string)
65
+ */
45
66
  STARTS = "starts",
67
+ /**
68
+ * Ends with (accepts string)
69
+ */
46
70
  ENDS = "ends",
71
+ /**
72
+ * Contains (accepts string)
73
+ */
47
74
  CONTAINS = "contains",
75
+ /**
76
+ * Not contains (accepts string)
77
+ */
48
78
  NOT_CONTAINS = "not_contains",
79
+ /**
80
+ * Includes (accepts an array of string, number, boolean or Date)
81
+ */
49
82
  IN = "in",
83
+ /**
84
+ * Not includes (accepts an array of string, number, boolean or Date)
85
+ */
50
86
  NOT_IN = "not_in",
87
+ /**
88
+ * Between (`value >= arr[0] && value <= arr[1]`) (accepts an array of two values being string, number or Date)
89
+ */
51
90
  BETWEEN = "between",
91
+ /**
92
+ * Is `null` (the value must be `null`, `undefined` or `true`)
93
+ */
52
94
  IS_NULL = "is_null",
95
+ /**
96
+ * Is not `null` (the value must be `null`, `undefined` or `true`)
97
+ */
53
98
  NOT_NULL = "not_null",
99
+ /**
100
+ * Equals (case-insensitive) (`==`) (accepts string)
101
+ */
54
102
  EQ_LOWER = "eq_lower",
103
+ /**
104
+ * Not equals (case-insensitive) (`!=`) (accepts string)
105
+ */
55
106
  NEQ_LOWER = "neq_lower",
107
+ /**
108
+ * Starts with (case-insensitive) (accepts string)
109
+ */
56
110
  STARTS_LOWER = "starts_lower",
111
+ /**
112
+ * Ends with (case-insensitive) (accepts string)
113
+ */
57
114
  ENDS_LOWER = "ends_lower",
115
+ /**
116
+ * Contains (case-insensitive) (accepts string)
117
+ */
58
118
  CONTAINS_LOWER = "contains_lower",
119
+ /**
120
+ * Not contains (case-insensitive) (accepts string)
121
+ */
59
122
  NOT_CONTAINS_LOWER = "not_contains_lower",
123
+ /**
124
+ * Includes (case-insensitive) (accepts an array of strings)
125
+ */
60
126
  IN_LOWER = "in_lower",
127
+ /**
128
+ * Not includes (case-insensitive) (accepts an array of strings)
129
+ */
61
130
  NOT_IN_LOWER = "not_in_lower"
62
131
  }
63
132
 
@@ -36,28 +36,97 @@ interface CrudRequestWhereField {
36
36
  }
37
37
  type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;
38
38
  declare enum CrudRequestWhereOperator {
39
+ /**
40
+ * Equals (`==`) (accepts string, number, boolean and Date)
41
+ */
39
42
  EQ = "eq",
43
+ /**
44
+ * Not Equals (`!=`) (accepts string, number, boolean and Date)
45
+ */
40
46
  NEQ = "neq",
47
+ /**
48
+ * Greater than (`>`) (accepts string, number, boolean and Date)
49
+ */
41
50
  GT = "gt",
51
+ /**
52
+ * Greater than or equal (`>=`) (accepts string, number, boolean and Date)
53
+ */
42
54
  GTE = "gte",
55
+ /**
56
+ * Less than (`<`) (accepts string, number, boolean and Date)
57
+ */
43
58
  LT = "lt",
59
+ /**
60
+ * Less than or equal (`<=`) (accepts string, number, boolean and Date)
61
+ */
44
62
  LTE = "lte",
63
+ /**
64
+ * Starts with (accepts string)
65
+ */
45
66
  STARTS = "starts",
67
+ /**
68
+ * Ends with (accepts string)
69
+ */
46
70
  ENDS = "ends",
71
+ /**
72
+ * Contains (accepts string)
73
+ */
47
74
  CONTAINS = "contains",
75
+ /**
76
+ * Not contains (accepts string)
77
+ */
48
78
  NOT_CONTAINS = "not_contains",
79
+ /**
80
+ * Includes (accepts an array of string, number, boolean or Date)
81
+ */
49
82
  IN = "in",
83
+ /**
84
+ * Not includes (accepts an array of string, number, boolean or Date)
85
+ */
50
86
  NOT_IN = "not_in",
87
+ /**
88
+ * Between (`value >= arr[0] && value <= arr[1]`) (accepts an array of two values being string, number or Date)
89
+ */
51
90
  BETWEEN = "between",
91
+ /**
92
+ * Is `null` (the value must be `null`, `undefined` or `true`)
93
+ */
52
94
  IS_NULL = "is_null",
95
+ /**
96
+ * Is not `null` (the value must be `null`, `undefined` or `true`)
97
+ */
53
98
  NOT_NULL = "not_null",
99
+ /**
100
+ * Equals (case-insensitive) (`==`) (accepts string)
101
+ */
54
102
  EQ_LOWER = "eq_lower",
103
+ /**
104
+ * Not equals (case-insensitive) (`!=`) (accepts string)
105
+ */
55
106
  NEQ_LOWER = "neq_lower",
107
+ /**
108
+ * Starts with (case-insensitive) (accepts string)
109
+ */
56
110
  STARTS_LOWER = "starts_lower",
111
+ /**
112
+ * Ends with (case-insensitive) (accepts string)
113
+ */
57
114
  ENDS_LOWER = "ends_lower",
115
+ /**
116
+ * Contains (case-insensitive) (accepts string)
117
+ */
58
118
  CONTAINS_LOWER = "contains_lower",
119
+ /**
120
+ * Not contains (case-insensitive) (accepts string)
121
+ */
59
122
  NOT_CONTAINS_LOWER = "not_contains_lower",
123
+ /**
124
+ * Includes (case-insensitive) (accepts an array of strings)
125
+ */
60
126
  IN_LOWER = "in_lower",
127
+ /**
128
+ * Not includes (case-insensitive) (accepts an array of strings)
129
+ */
61
130
  NOT_IN_LOWER = "not_in_lower"
62
131
  }
63
132
 
@@ -1,4 +1,4 @@
1
- import { e as CrudRequestWhereAND, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, d as CrudRequestWhere } from './crud-request-DLo0ZuzD.js';
1
+ import { e as CrudRequestWhereAND, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, d as CrudRequestWhere } from './crud-request-9u0s-DnI.js';
2
2
 
3
3
  /**
4
4
  * A helper class that makes it easier to create a CrudRequestWhere
@@ -1,4 +1,4 @@
1
- import { e as CrudRequestWhereAND, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, d as CrudRequestWhere } from './crud-request-DLo0ZuzD.mjs';
1
+ import { e as CrudRequestWhereAND, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, d as CrudRequestWhere } from './crud-request-9u0s-DnI.mjs';
2
2
 
3
3
  /**
4
4
  * A helper class that makes it easier to create a CrudRequestWhere
@@ -1,4 +1,4 @@
1
- import { C as CrudRequest, d as CrudRequestWhere } from '../crud-request-DLo0ZuzD.mjs';
1
+ import { C as CrudRequest, d as CrudRequestWhere } from '../crud-request-9u0s-DnI.mjs';
2
2
 
3
3
  /**
4
4
  * Ensures a condition is always applied to the query
@@ -1,4 +1,4 @@
1
- import { C as CrudRequest, d as CrudRequestWhere } from '../crud-request-DLo0ZuzD.js';
1
+ import { C as CrudRequest, d as CrudRequestWhere } from '../crud-request-9u0s-DnI.js';
2
2
 
3
3
  /**
4
4
  * Ensures a condition is always applied to the query
@@ -1,6 +1,6 @@
1
1
  import { RequestHandler } from 'express';
2
- import { a as RequestParser } from '../../request-parser-DzuXbRsB.mjs';
3
- import { C as CrudRequest } from '../../crud-request-DLo0ZuzD.mjs';
2
+ import { a as RequestParser } from '../../request-parser-DYVGG34f.mjs';
3
+ import { C as CrudRequest } from '../../crud-request-9u0s-DnI.mjs';
4
4
 
5
5
  interface Type<T> extends Function {
6
6
  new (...args: any[]): T;
@@ -1,6 +1,6 @@
1
1
  import { RequestHandler } from 'express';
2
- import { a as RequestParser } from '../../request-parser-Cr3cxMRw.js';
3
- import { C as CrudRequest } from '../../crud-request-DLo0ZuzD.js';
2
+ import { a as RequestParser } from '../../request-parser-C-cBNlki.js';
3
+ import { C as CrudRequest } from '../../crud-request-9u0s-DnI.js';
4
4
 
5
5
  interface Type<T> extends Function {
6
6
  new (...args: any[]): T;
@@ -1,7 +1,7 @@
1
1
  import * as _nestjs_common from '@nestjs/common';
2
2
  import { Type } from '@nestjs/common';
3
- import { a as RequestParser } from '../../request-parser-DzuXbRsB.mjs';
4
- import '../../crud-request-DLo0ZuzD.mjs';
3
+ import { a as RequestParser } from '../../request-parser-DYVGG34f.mjs';
4
+ import '../../crud-request-9u0s-DnI.mjs';
5
5
 
6
6
  declare const CRUD_QUERY_PARSER = "crud-query-parser";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import * as _nestjs_common from '@nestjs/common';
2
2
  import { Type } from '@nestjs/common';
3
- import { a as RequestParser } from '../../request-parser-Cr3cxMRw.js';
4
- import '../../crud-request-DLo0ZuzD.js';
3
+ import { a as RequestParser } from '../../request-parser-C-cBNlki.js';
4
+ import '../../crud-request-9u0s-DnI.js';
5
5
 
6
6
  declare const CRUD_QUERY_PARSER = "crud-query-parser";
7
7
 
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
- export { G as GetManyResult, Q as QueryAdapter } from './query-adapter-sgeUb8CV.mjs';
2
- export { R as RequestParamValue, a as RequestParser } from './request-parser-DzuXbRsB.mjs';
3
- import { C as CrudRequest } from './crud-request-DLo0ZuzD.mjs';
4
- export { a as CrudRequestFields, c as CrudRequestOrder, b as CrudRequestRelation, d as CrudRequestWhere, e as CrudRequestWhereAND, g as CrudRequestWhereField, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, F as FieldPath, P as ParsedRequestSelect } from './crud-request-DLo0ZuzD.mjs';
5
- export { C as CrudRequestWhereBuilder } from './crud-request-where.builder-CBx-JZhl.mjs';
1
+ export { G as GetManyResult, Q as QueryAdapter } from './query-adapter-HqVhBKtl.mjs';
2
+ export { R as RequestParamValue, a as RequestParser } from './request-parser-DYVGG34f.mjs';
3
+ import { C as CrudRequest } from './crud-request-9u0s-DnI.mjs';
4
+ export { a as CrudRequestFields, c as CrudRequestOrder, b as CrudRequestRelation, d as CrudRequestWhere, e as CrudRequestWhereAND, g as CrudRequestWhereField, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, F as FieldPath, P as ParsedRequestSelect } from './crud-request-9u0s-DnI.mjs';
5
+ export { C as CrudRequestWhereBuilder } from './crud-request-where.builder-D_V4JtjY.mjs';
6
6
 
7
7
  /**
8
8
  * Creates a CrudRequest object, filling required missing properties with empty values
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { G as GetManyResult, Q as QueryAdapter } from './query-adapter-CZhPC1aq.js';
2
- export { R as RequestParamValue, a as RequestParser } from './request-parser-Cr3cxMRw.js';
3
- import { C as CrudRequest } from './crud-request-DLo0ZuzD.js';
4
- export { a as CrudRequestFields, c as CrudRequestOrder, b as CrudRequestRelation, d as CrudRequestWhere, e as CrudRequestWhereAND, g as CrudRequestWhereField, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, F as FieldPath, P as ParsedRequestSelect } from './crud-request-DLo0ZuzD.js';
5
- export { C as CrudRequestWhereBuilder } from './crud-request-where.builder-CqbP5LT9.js';
1
+ export { G as GetManyResult, Q as QueryAdapter } from './query-adapter-CZ_oD6Ui.js';
2
+ export { R as RequestParamValue, a as RequestParser } from './request-parser-C-cBNlki.js';
3
+ import { C as CrudRequest } from './crud-request-9u0s-DnI.js';
4
+ export { a as CrudRequestFields, c as CrudRequestOrder, b as CrudRequestRelation, d as CrudRequestWhere, e as CrudRequestWhereAND, g as CrudRequestWhereField, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, F as FieldPath, P as ParsedRequestSelect } from './crud-request-9u0s-DnI.js';
5
+ export { C as CrudRequestWhereBuilder } from './crud-request-where.builder-Cq0DKiuS.js';
6
6
 
7
7
  /**
8
8
  * Creates a CrudRequest object, filling required missing properties with empty values
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/models/crud-request-where.ts","../src/utils/functions.ts","../src/utils/where.ts","../src/utils/crud-request-where.builder.ts","../src/utils/objects.ts"],"sourcesContent":["// Models\r\nexport * from './models/query-adapter';\r\nexport * from './models/request-parser';\r\n\r\nexport * from './models/get-many-result';\r\nexport * from './models/field-path';\r\nexport * from './models/crud-request';\r\nexport * from './models/crud-request-where';\r\n\r\n// Utilities\r\nexport * from './utils/crud-request-where.builder';\r\nexport { createCrudRequest } from './utils/objects';\r\n\r\n","import { FieldPath } from './field-path';\r\n\r\nexport type CrudRequestWhere = CrudRequestWhereAND | CrudRequestWhereOR | CrudRequestWhereField;\r\n\r\nexport interface CrudRequestWhereAND {\r\n field?: never;\r\n or?: never;\r\n and: CrudRequestWhere[];\r\n}\r\n\r\nexport interface CrudRequestWhereOR {\r\n field?: never;\r\n or: CrudRequestWhere[];\r\n and?: never;\r\n}\r\n\r\nexport interface CrudRequestWhereField {\r\n\r\n /**\r\n * Field path\r\n *\r\n * For post.category.name, this would be [\"post\", \"category\", \"name\"]\r\n */\r\n field: FieldPath;\r\n\r\n /**\r\n * The operator of the comparison\r\n */\r\n operator: CrudRequestWhereOperator;\r\n\r\n /**\r\n * The value to compare\r\n */\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[];\r\n\r\n or?: never;\r\n and?: never;\r\n}\r\n\r\nexport type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;\r\n\r\nexport enum CrudRequestWhereOperator {\r\n EQ = 'eq',\r\n NEQ = 'neq',\r\n GT = 'gt',\r\n GTE = 'gte',\r\n LT = 'lt',\r\n LTE = 'lte',\r\n STARTS = 'starts',\r\n ENDS = 'ends',\r\n CONTAINS = 'contains',\r\n NOT_CONTAINS = 'not_contains',\r\n IN = 'in',\r\n NOT_IN = 'not_in',\r\n BETWEEN = 'between',\r\n IS_NULL = 'is_null',\r\n NOT_NULL = 'not_null',\r\n EQ_LOWER = 'eq_lower',\r\n NEQ_LOWER = 'neq_lower',\r\n STARTS_LOWER = 'starts_lower',\r\n ENDS_LOWER = 'ends_lower',\r\n CONTAINS_LOWER = 'contains_lower',\r\n NOT_CONTAINS_LOWER = 'not_contains_lower',\r\n IN_LOWER = 'in_lower',\r\n NOT_IN_LOWER = 'not_in_lower',\r\n}\r\n","export function ensurePrimitive(fieldName: string, data: any): number | string | boolean | Date {\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number or boolean`);\r\n}\r\n\r\nexport function ensurePrimitiveOrNull(fieldName: string, data: any): number | string | boolean | Date | undefined | null {\r\n if (data === null || data === undefined)\r\n return data;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureString(fieldName: string, data: any): string {\r\n if (typeof data === 'string')\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureEmpty(fieldName: string, data: any) {\r\n if (isValid(data) && data !== true)\r\n throw new Error(`${fieldName} must be true, null or undefined`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function getOffset(offset: number | undefined, limit?: number, page?: number): number {\r\n return offset ?? (limit && page ? limit * (page - 1) : 0);\r\n}\r\n\r\nexport interface Type<T> extends Function { new (... args: any[]): T; }\r\n\r\nexport function createInstance<T extends object>(clazzOrInstance: T | Type<T> | undefined): T | undefined {\r\n if (typeof clazzOrInstance === 'function')\r\n return new clazzOrInstance();\r\n\r\n if (typeof clazzOrInstance === 'object')\r\n return clazzOrInstance as T;\r\n\r\n return undefined;\r\n}\r\n\r\nexport function escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","import { CrudRequestWhereField, CrudRequestWhereOperator } from '../models/crud-request-where';\r\nimport { ensureArray, ensureEmpty, ensurePrimitiveOrNull } from './functions';\r\n\r\nexport enum WhereOperatorValueType {\r\n PRIMITIVE = 'primitive',\r\n ARRAY = 'array',\r\n EMPTY = 'empty'\r\n}\r\n\r\nconst operatorValueTypes: Record<CrudRequestWhereOperator, WhereOperatorValueType> = {\r\n [CrudRequestWhereOperator.EQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.NOT_IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.BETWEEN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.IS_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.NOT_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.EQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n};\r\n\r\nexport function validateWhereField(where: CrudRequestWhereField): void {\r\n const type = operatorValueTypes[where.operator];\r\n const name = 'The value of the operator ' + where.operator;\r\n\r\n if (type === WhereOperatorValueType.PRIMITIVE) {\r\n ensurePrimitiveOrNull(name, where.value);\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.ARRAY) {\r\n const items = ensureArray(name, where.value);\r\n\r\n items.forEach(item => ensurePrimitiveOrNull(name + ' children', item));\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.EMPTY) {\r\n ensureEmpty(name, where.value);\r\n\r\n return;\r\n }\r\n}\r\n","import {\r\n CrudRequestWhere,\r\n CrudRequestWhereAND,\r\n CrudRequestWhereField,\r\n CrudRequestWhereOperator,\r\n CrudRequestWhereOR,\r\n CrudRequestWhereValueType\r\n} from '../models/crud-request-where';\r\nimport { validateWhereField } from './where';\r\n\r\n/**\r\n * A helper class that makes it easier to create a CrudRequestWhere\r\n */\r\nexport class CrudRequestWhereBuilder {\r\n\r\n constructor(\r\n private readonly where: CrudRequestWhereAND | CrudRequestWhereOR = { and: [] },\r\n private readonly parent?: CrudRequestWhereBuilder,\r\n ) { }\r\n\r\n /**\r\n * Adds an AND bracket\r\n */\r\n public addAnd(): CrudRequestWhereBuilder {\r\n if (!this.where.or) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereAND = { and: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.or.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds an OR bracket\r\n */\r\n public addOr(): CrudRequestWhereBuilder {\r\n if (!this.where.and) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereOR = { or: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.and.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds a field comparison\r\n *\r\n * @param field The field path\r\n * @param operator The comparison operator\r\n * @param value The value to compare\r\n */\r\n public addField(\r\n field: string[],\r\n operator: CrudRequestWhereOperator,\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[],\r\n ): CrudRequestWhereBuilder {\r\n const whereField: CrudRequestWhereField = {\r\n field,\r\n operator,\r\n value,\r\n };\r\n\r\n validateWhereField(whereField);\r\n\r\n if (this.where.and) {\r\n this.where.and.push(whereField);\r\n } else if (this.where.or) {\r\n this.where.or.push(whereField);\r\n } else {\r\n throw new Error('Invalid where');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Constructs the final where condition\r\n */\r\n public build(): CrudRequestWhere {\r\n if (this.parent) {\r\n return this.parent.build();\r\n }\r\n\r\n return this.where;\r\n }\r\n\r\n}\r\n","import { GetManyResult } from '../models/get-many-result';\r\nimport { CrudRequest } from '../models/crud-request';\r\n\r\n/**\r\n * Creates a CrudRequest object, filling required missing properties with empty values\r\n */\r\nexport function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest {\r\n return {\r\n select: [],\r\n relations: [],\r\n order: [],\r\n where: { and: [] },\r\n ...crudRequest,\r\n };\r\n}\r\n\r\n/**\r\n * Creates a GetManyResult object\r\n *\r\n * @param data The entity list to be returned\r\n * @param total The total amount of entities in the database\r\n * @param offset The offset used for querying\r\n * @param limit The limit used for querying\r\n */\r\nexport function createGetManyResult<T>(data: T[], total: number, offset: number, limit?: number): GetManyResult<T> {\r\n const count = data.length;\r\n const actualLimit = limit ?? total;\r\n const page = actualLimit > 0 ? Math.floor(offset / actualLimit) + 1 : 1;\r\n const pageCount = actualLimit > 0 ? Math.ceil(total / actualLimit) : 0;\r\n\r\n return {\r\n data,\r\n count,\r\n total,\r\n page,\r\n pageCount,\r\n };\r\n}\r\n"],"mappings":"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","names":["src_exports","__export","CrudRequestWhereBuilder","CrudRequestWhereOperator","createCrudRequest","__toCommonJS","CrudRequestWhereOperator","ensurePrimitiveOrNull","fieldName","data","__name","ensureArray","fieldName","data","minLength","__name","ensureEmpty","isValid","value","operatorValueTypes","validateWhereField","where","type","name","ensurePrimitiveOrNull","ensureArray","item","ensureEmpty","__name","CrudRequestWhereBuilder","_CrudRequestWhereBuilder","where","parent","__name","inside","builder","field","operator","value","whereField","validateWhereField","createCrudRequest","crudRequest","__name"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/models/crud-request-where.ts","../src/utils/functions.ts","../src/utils/where.ts","../src/utils/crud-request-where.builder.ts","../src/utils/objects.ts"],"sourcesContent":["// Models\r\nexport * from './models/query-adapter';\r\nexport * from './models/request-parser';\r\n\r\nexport * from './models/get-many-result';\r\nexport * from './models/field-path';\r\nexport * from './models/crud-request';\r\nexport * from './models/crud-request-where';\r\n\r\n// Utilities\r\nexport * from './utils/crud-request-where.builder';\r\nexport { createCrudRequest } from './utils/objects';\r\n\r\n","import { FieldPath } from './field-path';\r\n\r\nexport type CrudRequestWhere = CrudRequestWhereAND | CrudRequestWhereOR | CrudRequestWhereField;\r\n\r\nexport interface CrudRequestWhereAND {\r\n field?: never;\r\n or?: never;\r\n and: CrudRequestWhere[];\r\n}\r\n\r\nexport interface CrudRequestWhereOR {\r\n field?: never;\r\n or: CrudRequestWhere[];\r\n and?: never;\r\n}\r\n\r\nexport interface CrudRequestWhereField {\r\n\r\n /**\r\n * Field path\r\n *\r\n * For post.category.name, this would be [\"post\", \"category\", \"name\"]\r\n */\r\n field: FieldPath;\r\n\r\n /**\r\n * The operator of the comparison\r\n */\r\n operator: CrudRequestWhereOperator;\r\n\r\n /**\r\n * The value to compare\r\n */\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[];\r\n\r\n or?: never;\r\n and?: never;\r\n}\r\n\r\nexport type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;\r\n\r\nexport enum CrudRequestWhereOperator {\r\n /**\r\n * Equals (`==`) (accepts string, number, boolean and Date)\r\n */\r\n EQ = 'eq',\r\n\r\n /**\r\n * Not Equals (`!=`) (accepts string, number, boolean and Date)\r\n */\r\n NEQ = 'neq',\r\n\r\n /**\r\n * Greater than (`>`) (accepts string, number, boolean and Date)\r\n */\r\n GT = 'gt',\r\n\r\n /**\r\n * Greater than or equal (`>=`) (accepts string, number, boolean and Date)\r\n */\r\n GTE = 'gte',\r\n\r\n /**\r\n * Less than (`<`) (accepts string, number, boolean and Date)\r\n */\r\n LT = 'lt',\r\n\r\n /**\r\n * Less than or equal (`<=`) (accepts string, number, boolean and Date)\r\n */\r\n LTE = 'lte',\r\n\r\n /**\r\n * Starts with (accepts string)\r\n */\r\n STARTS = 'starts',\r\n\r\n /**\r\n * Ends with (accepts string)\r\n */\r\n ENDS = 'ends',\r\n\r\n /**\r\n * Contains (accepts string)\r\n */\r\n CONTAINS = 'contains',\r\n\r\n /**\r\n * Not contains (accepts string)\r\n */\r\n NOT_CONTAINS = 'not_contains',\r\n\r\n /**\r\n * Includes (accepts an array of string, number, boolean or Date)\r\n */\r\n IN = 'in',\r\n\r\n /**\r\n * Not includes (accepts an array of string, number, boolean or Date)\r\n */\r\n NOT_IN = 'not_in',\r\n\r\n /**\r\n * Between (`value >= arr[0] && value <= arr[1]`) (accepts an array of two values being string, number or Date)\r\n */\r\n BETWEEN = 'between',\r\n\r\n /**\r\n * Is `null` (the value must be `null`, `undefined` or `true`)\r\n */\r\n IS_NULL = 'is_null',\r\n\r\n /**\r\n * Is not `null` (the value must be `null`, `undefined` or `true`)\r\n */\r\n NOT_NULL = 'not_null',\r\n\r\n /**\r\n * Equals (case-insensitive) (`==`) (accepts string)\r\n */\r\n EQ_LOWER = 'eq_lower',\r\n\r\n /**\r\n * Not equals (case-insensitive) (`!=`) (accepts string)\r\n */\r\n NEQ_LOWER = 'neq_lower',\r\n\r\n /**\r\n * Starts with (case-insensitive) (accepts string)\r\n */\r\n STARTS_LOWER = 'starts_lower',\r\n\r\n /**\r\n * Ends with (case-insensitive) (accepts string)\r\n */\r\n ENDS_LOWER = 'ends_lower',\r\n\r\n /**\r\n * Contains (case-insensitive) (accepts string)\r\n */\r\n CONTAINS_LOWER = 'contains_lower',\r\n\r\n /**\r\n * Not contains (case-insensitive) (accepts string)\r\n */\r\n NOT_CONTAINS_LOWER = 'not_contains_lower',\r\n\r\n /**\r\n * Includes (case-insensitive) (accepts an array of strings)\r\n */\r\n IN_LOWER = 'in_lower',\r\n\r\n /**\r\n * Not includes (case-insensitive) (accepts an array of strings)\r\n */\r\n NOT_IN_LOWER = 'not_in_lower',\r\n}\r\n","export function ensurePrimitive(fieldName: string, data: any): number | string | boolean | Date {\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number or boolean`);\r\n}\r\n\r\nexport function ensurePrimitiveOrNull(fieldName: string, data: any): number | string | boolean | Date | undefined | null {\r\n if (data === null || data === undefined)\r\n return data;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureString(fieldName: string, data: any): string {\r\n if (typeof data === 'string')\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureEmpty(fieldName: string, data: any) {\r\n if (isValid(data) && data !== true)\r\n throw new Error(`${fieldName} must be true, null or undefined`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function getOffset(offset: number | undefined, limit?: number, page?: number): number {\r\n return offset ?? (limit && page ? limit * (page - 1) : 0);\r\n}\r\n\r\nexport interface Type<T> extends Function { new (... args: any[]): T; }\r\n\r\nexport function createInstance<T extends object>(clazzOrInstance: T | Type<T> | undefined): T | undefined {\r\n if (typeof clazzOrInstance === 'function')\r\n return new clazzOrInstance();\r\n\r\n if (typeof clazzOrInstance === 'object')\r\n return clazzOrInstance as T;\r\n\r\n return undefined;\r\n}\r\n\r\nexport function escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","import { CrudRequestWhereField, CrudRequestWhereOperator } from '../models/crud-request-where';\r\nimport { ensureArray, ensureEmpty, ensurePrimitiveOrNull } from './functions';\r\n\r\nexport enum WhereOperatorValueType {\r\n PRIMITIVE = 'primitive',\r\n ARRAY = 'array',\r\n EMPTY = 'empty'\r\n}\r\n\r\nconst operatorValueTypes: Record<CrudRequestWhereOperator, WhereOperatorValueType> = {\r\n [CrudRequestWhereOperator.EQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.NOT_IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.BETWEEN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.IS_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.NOT_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.EQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n};\r\n\r\nexport function validateWhereField(where: CrudRequestWhereField): void {\r\n const type = operatorValueTypes[where.operator];\r\n const name = 'The value of the operator ' + where.operator;\r\n\r\n if (type === WhereOperatorValueType.PRIMITIVE) {\r\n ensurePrimitiveOrNull(name, where.value);\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.ARRAY) {\r\n const items = ensureArray(name, where.value);\r\n\r\n items.forEach(item => ensurePrimitiveOrNull(name + ' children', item));\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.EMPTY) {\r\n ensureEmpty(name, where.value);\r\n\r\n return;\r\n }\r\n}\r\n","import {\r\n CrudRequestWhere,\r\n CrudRequestWhereAND,\r\n CrudRequestWhereField,\r\n CrudRequestWhereOperator,\r\n CrudRequestWhereOR,\r\n CrudRequestWhereValueType\r\n} from '../models/crud-request-where';\r\nimport { validateWhereField } from './where';\r\n\r\n/**\r\n * A helper class that makes it easier to create a CrudRequestWhere\r\n */\r\nexport class CrudRequestWhereBuilder {\r\n\r\n constructor(\r\n private readonly where: CrudRequestWhereAND | CrudRequestWhereOR = { and: [] },\r\n private readonly parent?: CrudRequestWhereBuilder,\r\n ) { }\r\n\r\n /**\r\n * Adds an AND bracket\r\n */\r\n public addAnd(): CrudRequestWhereBuilder {\r\n if (!this.where.or) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereAND = { and: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.or.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds an OR bracket\r\n */\r\n public addOr(): CrudRequestWhereBuilder {\r\n if (!this.where.and) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereOR = { or: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.and.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds a field comparison\r\n *\r\n * @param field The field path\r\n * @param operator The comparison operator\r\n * @param value The value to compare\r\n */\r\n public addField(\r\n field: string[],\r\n operator: CrudRequestWhereOperator,\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[],\r\n ): CrudRequestWhereBuilder {\r\n const whereField: CrudRequestWhereField = {\r\n field,\r\n operator,\r\n value,\r\n };\r\n\r\n validateWhereField(whereField);\r\n\r\n if (this.where.and) {\r\n this.where.and.push(whereField);\r\n } else if (this.where.or) {\r\n this.where.or.push(whereField);\r\n } else {\r\n throw new Error('Invalid where');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Constructs the final where condition\r\n */\r\n public build(): CrudRequestWhere {\r\n if (this.parent) {\r\n return this.parent.build();\r\n }\r\n\r\n return this.where;\r\n }\r\n\r\n}\r\n","import { GetManyResult } from '../models/get-many-result';\r\nimport { CrudRequest } from '../models/crud-request';\r\n\r\n/**\r\n * Creates a CrudRequest object, filling required missing properties with empty values\r\n */\r\nexport function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest {\r\n return {\r\n select: [],\r\n relations: [],\r\n order: [],\r\n where: { and: [] },\r\n ...crudRequest,\r\n };\r\n}\r\n\r\n/**\r\n * Creates a GetManyResult object\r\n *\r\n * @param data The entity list to be returned\r\n * @param total The total amount of entities in the database\r\n * @param offset The offset used for querying\r\n * @param limit The limit used for querying\r\n */\r\nexport function createGetManyResult<T>(data: T[], total: number, offset: number, limit?: number): GetManyResult<T> {\r\n const count = data.length;\r\n const actualLimit = limit ?? total;\r\n const page = actualLimit > 0 ? Math.floor(offset / actualLimit) + 1 : 1;\r\n const pageCount = actualLimit > 0 ? Math.ceil(total / actualLimit) : 0;\r\n\r\n return {\r\n data,\r\n count,\r\n total,\r\n page,\r\n pageCount,\r\n };\r\n}\r\n"],"mappings":"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","names":["src_exports","__export","CrudRequestWhereBuilder","CrudRequestWhereOperator","createCrudRequest","__toCommonJS","CrudRequestWhereOperator","ensurePrimitiveOrNull","fieldName","data","__name","ensureArray","fieldName","data","minLength","__name","ensureEmpty","isValid","value","operatorValueTypes","validateWhereField","where","type","name","ensurePrimitiveOrNull","ensureArray","item","ensureEmpty","__name","CrudRequestWhereBuilder","_CrudRequestWhereBuilder","where","parent","__name","inside","builder","field","operator","value","whereField","validateWhereField","createCrudRequest","crudRequest","__name"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/models/crud-request-where.ts","../src/utils/functions.ts","../src/utils/where.ts","../src/utils/crud-request-where.builder.ts","../src/utils/objects.ts"],"sourcesContent":["import { FieldPath } from './field-path';\r\n\r\nexport type CrudRequestWhere = CrudRequestWhereAND | CrudRequestWhereOR | CrudRequestWhereField;\r\n\r\nexport interface CrudRequestWhereAND {\r\n field?: never;\r\n or?: never;\r\n and: CrudRequestWhere[];\r\n}\r\n\r\nexport interface CrudRequestWhereOR {\r\n field?: never;\r\n or: CrudRequestWhere[];\r\n and?: never;\r\n}\r\n\r\nexport interface CrudRequestWhereField {\r\n\r\n /**\r\n * Field path\r\n *\r\n * For post.category.name, this would be [\"post\", \"category\", \"name\"]\r\n */\r\n field: FieldPath;\r\n\r\n /**\r\n * The operator of the comparison\r\n */\r\n operator: CrudRequestWhereOperator;\r\n\r\n /**\r\n * The value to compare\r\n */\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[];\r\n\r\n or?: never;\r\n and?: never;\r\n}\r\n\r\nexport type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;\r\n\r\nexport enum CrudRequestWhereOperator {\r\n EQ = 'eq',\r\n NEQ = 'neq',\r\n GT = 'gt',\r\n GTE = 'gte',\r\n LT = 'lt',\r\n LTE = 'lte',\r\n STARTS = 'starts',\r\n ENDS = 'ends',\r\n CONTAINS = 'contains',\r\n NOT_CONTAINS = 'not_contains',\r\n IN = 'in',\r\n NOT_IN = 'not_in',\r\n BETWEEN = 'between',\r\n IS_NULL = 'is_null',\r\n NOT_NULL = 'not_null',\r\n EQ_LOWER = 'eq_lower',\r\n NEQ_LOWER = 'neq_lower',\r\n STARTS_LOWER = 'starts_lower',\r\n ENDS_LOWER = 'ends_lower',\r\n CONTAINS_LOWER = 'contains_lower',\r\n NOT_CONTAINS_LOWER = 'not_contains_lower',\r\n IN_LOWER = 'in_lower',\r\n NOT_IN_LOWER = 'not_in_lower',\r\n}\r\n","export function ensurePrimitive(fieldName: string, data: any): number | string | boolean | Date {\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number or boolean`);\r\n}\r\n\r\nexport function ensurePrimitiveOrNull(fieldName: string, data: any): number | string | boolean | Date | undefined | null {\r\n if (data === null || data === undefined)\r\n return data;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureString(fieldName: string, data: any): string {\r\n if (typeof data === 'string')\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureEmpty(fieldName: string, data: any) {\r\n if (isValid(data) && data !== true)\r\n throw new Error(`${fieldName} must be true, null or undefined`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function getOffset(offset: number | undefined, limit?: number, page?: number): number {\r\n return offset ?? (limit && page ? limit * (page - 1) : 0);\r\n}\r\n\r\nexport interface Type<T> extends Function { new (... args: any[]): T; }\r\n\r\nexport function createInstance<T extends object>(clazzOrInstance: T | Type<T> | undefined): T | undefined {\r\n if (typeof clazzOrInstance === 'function')\r\n return new clazzOrInstance();\r\n\r\n if (typeof clazzOrInstance === 'object')\r\n return clazzOrInstance as T;\r\n\r\n return undefined;\r\n}\r\n\r\nexport function escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","import { CrudRequestWhereField, CrudRequestWhereOperator } from '../models/crud-request-where';\r\nimport { ensureArray, ensureEmpty, ensurePrimitiveOrNull } from './functions';\r\n\r\nexport enum WhereOperatorValueType {\r\n PRIMITIVE = 'primitive',\r\n ARRAY = 'array',\r\n EMPTY = 'empty'\r\n}\r\n\r\nconst operatorValueTypes: Record<CrudRequestWhereOperator, WhereOperatorValueType> = {\r\n [CrudRequestWhereOperator.EQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.NOT_IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.BETWEEN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.IS_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.NOT_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.EQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n};\r\n\r\nexport function validateWhereField(where: CrudRequestWhereField): void {\r\n const type = operatorValueTypes[where.operator];\r\n const name = 'The value of the operator ' + where.operator;\r\n\r\n if (type === WhereOperatorValueType.PRIMITIVE) {\r\n ensurePrimitiveOrNull(name, where.value);\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.ARRAY) {\r\n const items = ensureArray(name, where.value);\r\n\r\n items.forEach(item => ensurePrimitiveOrNull(name + ' children', item));\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.EMPTY) {\r\n ensureEmpty(name, where.value);\r\n\r\n return;\r\n }\r\n}\r\n","import {\r\n CrudRequestWhere,\r\n CrudRequestWhereAND,\r\n CrudRequestWhereField,\r\n CrudRequestWhereOperator,\r\n CrudRequestWhereOR,\r\n CrudRequestWhereValueType\r\n} from '../models/crud-request-where';\r\nimport { validateWhereField } from './where';\r\n\r\n/**\r\n * A helper class that makes it easier to create a CrudRequestWhere\r\n */\r\nexport class CrudRequestWhereBuilder {\r\n\r\n constructor(\r\n private readonly where: CrudRequestWhereAND | CrudRequestWhereOR = { and: [] },\r\n private readonly parent?: CrudRequestWhereBuilder,\r\n ) { }\r\n\r\n /**\r\n * Adds an AND bracket\r\n */\r\n public addAnd(): CrudRequestWhereBuilder {\r\n if (!this.where.or) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereAND = { and: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.or.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds an OR bracket\r\n */\r\n public addOr(): CrudRequestWhereBuilder {\r\n if (!this.where.and) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereOR = { or: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.and.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds a field comparison\r\n *\r\n * @param field The field path\r\n * @param operator The comparison operator\r\n * @param value The value to compare\r\n */\r\n public addField(\r\n field: string[],\r\n operator: CrudRequestWhereOperator,\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[],\r\n ): CrudRequestWhereBuilder {\r\n const whereField: CrudRequestWhereField = {\r\n field,\r\n operator,\r\n value,\r\n };\r\n\r\n validateWhereField(whereField);\r\n\r\n if (this.where.and) {\r\n this.where.and.push(whereField);\r\n } else if (this.where.or) {\r\n this.where.or.push(whereField);\r\n } else {\r\n throw new Error('Invalid where');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Constructs the final where condition\r\n */\r\n public build(): CrudRequestWhere {\r\n if (this.parent) {\r\n return this.parent.build();\r\n }\r\n\r\n return this.where;\r\n }\r\n\r\n}\r\n","import { GetManyResult } from '../models/get-many-result';\r\nimport { CrudRequest } from '../models/crud-request';\r\n\r\n/**\r\n * Creates a CrudRequest object, filling required missing properties with empty values\r\n */\r\nexport function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest {\r\n return {\r\n select: [],\r\n relations: [],\r\n order: [],\r\n where: { and: [] },\r\n ...crudRequest,\r\n };\r\n}\r\n\r\n/**\r\n * Creates a GetManyResult object\r\n *\r\n * @param data The entity list to be returned\r\n * @param total The total amount of entities in the database\r\n * @param offset The offset used for querying\r\n * @param limit The limit used for querying\r\n */\r\nexport function createGetManyResult<T>(data: T[], total: number, offset: number, limit?: number): GetManyResult<T> {\r\n const count = data.length;\r\n const actualLimit = limit ?? total;\r\n const page = actualLimit > 0 ? Math.floor(offset / actualLimit) + 1 : 1;\r\n const pageCount = actualLimit > 0 ? Math.ceil(total / actualLimit) : 0;\r\n\r\n return {\r\n data,\r\n count,\r\n total,\r\n page,\r\n pageCount,\r\n };\r\n}\r\n"],"mappings":"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","names":["CrudRequestWhereOperator","ensurePrimitiveOrNull","fieldName","data","__name","ensureArray","fieldName","data","minLength","__name","ensureEmpty","isValid","value","operatorValueTypes","validateWhereField","where","type","name","ensurePrimitiveOrNull","ensureArray","item","ensureEmpty","__name","CrudRequestWhereBuilder","_CrudRequestWhereBuilder","where","parent","__name","inside","builder","field","operator","value","whereField","validateWhereField","createCrudRequest","crudRequest","__name"]}
1
+ {"version":3,"sources":["../src/models/crud-request-where.ts","../src/utils/functions.ts","../src/utils/where.ts","../src/utils/crud-request-where.builder.ts","../src/utils/objects.ts"],"sourcesContent":["import { FieldPath } from './field-path';\r\n\r\nexport type CrudRequestWhere = CrudRequestWhereAND | CrudRequestWhereOR | CrudRequestWhereField;\r\n\r\nexport interface CrudRequestWhereAND {\r\n field?: never;\r\n or?: never;\r\n and: CrudRequestWhere[];\r\n}\r\n\r\nexport interface CrudRequestWhereOR {\r\n field?: never;\r\n or: CrudRequestWhere[];\r\n and?: never;\r\n}\r\n\r\nexport interface CrudRequestWhereField {\r\n\r\n /**\r\n * Field path\r\n *\r\n * For post.category.name, this would be [\"post\", \"category\", \"name\"]\r\n */\r\n field: FieldPath;\r\n\r\n /**\r\n * The operator of the comparison\r\n */\r\n operator: CrudRequestWhereOperator;\r\n\r\n /**\r\n * The value to compare\r\n */\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[];\r\n\r\n or?: never;\r\n and?: never;\r\n}\r\n\r\nexport type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;\r\n\r\nexport enum CrudRequestWhereOperator {\r\n /**\r\n * Equals (`==`) (accepts string, number, boolean and Date)\r\n */\r\n EQ = 'eq',\r\n\r\n /**\r\n * Not Equals (`!=`) (accepts string, number, boolean and Date)\r\n */\r\n NEQ = 'neq',\r\n\r\n /**\r\n * Greater than (`>`) (accepts string, number, boolean and Date)\r\n */\r\n GT = 'gt',\r\n\r\n /**\r\n * Greater than or equal (`>=`) (accepts string, number, boolean and Date)\r\n */\r\n GTE = 'gte',\r\n\r\n /**\r\n * Less than (`<`) (accepts string, number, boolean and Date)\r\n */\r\n LT = 'lt',\r\n\r\n /**\r\n * Less than or equal (`<=`) (accepts string, number, boolean and Date)\r\n */\r\n LTE = 'lte',\r\n\r\n /**\r\n * Starts with (accepts string)\r\n */\r\n STARTS = 'starts',\r\n\r\n /**\r\n * Ends with (accepts string)\r\n */\r\n ENDS = 'ends',\r\n\r\n /**\r\n * Contains (accepts string)\r\n */\r\n CONTAINS = 'contains',\r\n\r\n /**\r\n * Not contains (accepts string)\r\n */\r\n NOT_CONTAINS = 'not_contains',\r\n\r\n /**\r\n * Includes (accepts an array of string, number, boolean or Date)\r\n */\r\n IN = 'in',\r\n\r\n /**\r\n * Not includes (accepts an array of string, number, boolean or Date)\r\n */\r\n NOT_IN = 'not_in',\r\n\r\n /**\r\n * Between (`value >= arr[0] && value <= arr[1]`) (accepts an array of two values being string, number or Date)\r\n */\r\n BETWEEN = 'between',\r\n\r\n /**\r\n * Is `null` (the value must be `null`, `undefined` or `true`)\r\n */\r\n IS_NULL = 'is_null',\r\n\r\n /**\r\n * Is not `null` (the value must be `null`, `undefined` or `true`)\r\n */\r\n NOT_NULL = 'not_null',\r\n\r\n /**\r\n * Equals (case-insensitive) (`==`) (accepts string)\r\n */\r\n EQ_LOWER = 'eq_lower',\r\n\r\n /**\r\n * Not equals (case-insensitive) (`!=`) (accepts string)\r\n */\r\n NEQ_LOWER = 'neq_lower',\r\n\r\n /**\r\n * Starts with (case-insensitive) (accepts string)\r\n */\r\n STARTS_LOWER = 'starts_lower',\r\n\r\n /**\r\n * Ends with (case-insensitive) (accepts string)\r\n */\r\n ENDS_LOWER = 'ends_lower',\r\n\r\n /**\r\n * Contains (case-insensitive) (accepts string)\r\n */\r\n CONTAINS_LOWER = 'contains_lower',\r\n\r\n /**\r\n * Not contains (case-insensitive) (accepts string)\r\n */\r\n NOT_CONTAINS_LOWER = 'not_contains_lower',\r\n\r\n /**\r\n * Includes (case-insensitive) (accepts an array of strings)\r\n */\r\n IN_LOWER = 'in_lower',\r\n\r\n /**\r\n * Not includes (case-insensitive) (accepts an array of strings)\r\n */\r\n NOT_IN_LOWER = 'not_in_lower',\r\n}\r\n","export function ensurePrimitive(fieldName: string, data: any): number | string | boolean | Date {\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number or boolean`);\r\n}\r\n\r\nexport function ensurePrimitiveOrNull(fieldName: string, data: any): number | string | boolean | Date | undefined | null {\r\n if (data === null || data === undefined)\r\n return data;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureString(fieldName: string, data: any): string {\r\n if (typeof data === 'string')\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureEmpty(fieldName: string, data: any) {\r\n if (isValid(data) && data !== true)\r\n throw new Error(`${fieldName} must be true, null or undefined`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function getOffset(offset: number | undefined, limit?: number, page?: number): number {\r\n return offset ?? (limit && page ? limit * (page - 1) : 0);\r\n}\r\n\r\nexport interface Type<T> extends Function { new (... args: any[]): T; }\r\n\r\nexport function createInstance<T extends object>(clazzOrInstance: T | Type<T> | undefined): T | undefined {\r\n if (typeof clazzOrInstance === 'function')\r\n return new clazzOrInstance();\r\n\r\n if (typeof clazzOrInstance === 'object')\r\n return clazzOrInstance as T;\r\n\r\n return undefined;\r\n}\r\n\r\nexport function escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","import { CrudRequestWhereField, CrudRequestWhereOperator } from '../models/crud-request-where';\r\nimport { ensureArray, ensureEmpty, ensurePrimitiveOrNull } from './functions';\r\n\r\nexport enum WhereOperatorValueType {\r\n PRIMITIVE = 'primitive',\r\n ARRAY = 'array',\r\n EMPTY = 'empty'\r\n}\r\n\r\nconst operatorValueTypes: Record<CrudRequestWhereOperator, WhereOperatorValueType> = {\r\n [CrudRequestWhereOperator.EQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.NOT_IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.BETWEEN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.IS_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.NOT_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.EQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n};\r\n\r\nexport function validateWhereField(where: CrudRequestWhereField): void {\r\n const type = operatorValueTypes[where.operator];\r\n const name = 'The value of the operator ' + where.operator;\r\n\r\n if (type === WhereOperatorValueType.PRIMITIVE) {\r\n ensurePrimitiveOrNull(name, where.value);\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.ARRAY) {\r\n const items = ensureArray(name, where.value);\r\n\r\n items.forEach(item => ensurePrimitiveOrNull(name + ' children', item));\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.EMPTY) {\r\n ensureEmpty(name, where.value);\r\n\r\n return;\r\n }\r\n}\r\n","import {\r\n CrudRequestWhere,\r\n CrudRequestWhereAND,\r\n CrudRequestWhereField,\r\n CrudRequestWhereOperator,\r\n CrudRequestWhereOR,\r\n CrudRequestWhereValueType\r\n} from '../models/crud-request-where';\r\nimport { validateWhereField } from './where';\r\n\r\n/**\r\n * A helper class that makes it easier to create a CrudRequestWhere\r\n */\r\nexport class CrudRequestWhereBuilder {\r\n\r\n constructor(\r\n private readonly where: CrudRequestWhereAND | CrudRequestWhereOR = { and: [] },\r\n private readonly parent?: CrudRequestWhereBuilder,\r\n ) { }\r\n\r\n /**\r\n * Adds an AND bracket\r\n */\r\n public addAnd(): CrudRequestWhereBuilder {\r\n if (!this.where.or) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereAND = { and: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.or.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds an OR bracket\r\n */\r\n public addOr(): CrudRequestWhereBuilder {\r\n if (!this.where.and) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereOR = { or: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.and.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds a field comparison\r\n *\r\n * @param field The field path\r\n * @param operator The comparison operator\r\n * @param value The value to compare\r\n */\r\n public addField(\r\n field: string[],\r\n operator: CrudRequestWhereOperator,\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[],\r\n ): CrudRequestWhereBuilder {\r\n const whereField: CrudRequestWhereField = {\r\n field,\r\n operator,\r\n value,\r\n };\r\n\r\n validateWhereField(whereField);\r\n\r\n if (this.where.and) {\r\n this.where.and.push(whereField);\r\n } else if (this.where.or) {\r\n this.where.or.push(whereField);\r\n } else {\r\n throw new Error('Invalid where');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Constructs the final where condition\r\n */\r\n public build(): CrudRequestWhere {\r\n if (this.parent) {\r\n return this.parent.build();\r\n }\r\n\r\n return this.where;\r\n }\r\n\r\n}\r\n","import { GetManyResult } from '../models/get-many-result';\r\nimport { CrudRequest } from '../models/crud-request';\r\n\r\n/**\r\n * Creates a CrudRequest object, filling required missing properties with empty values\r\n */\r\nexport function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest {\r\n return {\r\n select: [],\r\n relations: [],\r\n order: [],\r\n where: { and: [] },\r\n ...crudRequest,\r\n };\r\n}\r\n\r\n/**\r\n * Creates a GetManyResult object\r\n *\r\n * @param data The entity list to be returned\r\n * @param total The total amount of entities in the database\r\n * @param offset The offset used for querying\r\n * @param limit The limit used for querying\r\n */\r\nexport function createGetManyResult<T>(data: T[], total: number, offset: number, limit?: number): GetManyResult<T> {\r\n const count = data.length;\r\n const actualLimit = limit ?? total;\r\n const page = actualLimit > 0 ? Math.floor(offset / actualLimit) + 1 : 1;\r\n const pageCount = actualLimit > 0 ? Math.ceil(total / actualLimit) : 0;\r\n\r\n return {\r\n data,\r\n count,\r\n total,\r\n page,\r\n pageCount,\r\n };\r\n}\r\n"],"mappings":"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","names":["CrudRequestWhereOperator","ensurePrimitiveOrNull","fieldName","data","__name","ensureArray","fieldName","data","minLength","__name","ensureEmpty","isValid","value","operatorValueTypes","validateWhereField","where","type","name","ensurePrimitiveOrNull","ensureArray","item","ensureEmpty","__name","CrudRequestWhereBuilder","_CrudRequestWhereBuilder","where","parent","__name","inside","builder","field","operator","value","whereField","validateWhereField","createCrudRequest","crudRequest","__name"]}
@@ -1,6 +1,6 @@
1
- import { a as RequestParser, O as OpenAPIParameter, R as RequestParamValue } from '../../request-parser-DzuXbRsB.mjs';
2
- import { C as CrudRequest, P as ParsedRequestSelect, b as CrudRequestRelation, c as CrudRequestOrder } from '../../crud-request-DLo0ZuzD.mjs';
3
- import { C as CrudRequestWhereBuilder } from '../../crud-request-where.builder-CBx-JZhl.mjs';
1
+ import { a as RequestParser, O as OpenAPIParameter, R as RequestParamValue } from '../../request-parser-DYVGG34f.mjs';
2
+ import { C as CrudRequest, P as ParsedRequestSelect, b as CrudRequestRelation, c as CrudRequestOrder } from '../../crud-request-9u0s-DnI.mjs';
3
+ import { C as CrudRequestWhereBuilder } from '../../crud-request-where.builder-D_V4JtjY.mjs';
4
4
 
5
5
  interface CrudRequestParserOptions {
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { a as RequestParser, O as OpenAPIParameter, R as RequestParamValue } from '../../request-parser-Cr3cxMRw.js';
2
- import { C as CrudRequest, P as ParsedRequestSelect, b as CrudRequestRelation, c as CrudRequestOrder } from '../../crud-request-DLo0ZuzD.js';
3
- import { C as CrudRequestWhereBuilder } from '../../crud-request-where.builder-CqbP5LT9.js';
1
+ import { a as RequestParser, O as OpenAPIParameter, R as RequestParamValue } from '../../request-parser-C-cBNlki.js';
2
+ import { C as CrudRequest, P as ParsedRequestSelect, b as CrudRequestRelation, c as CrudRequestOrder } from '../../crud-request-9u0s-DnI.js';
3
+ import { C as CrudRequestWhereBuilder } from '../../crud-request-where.builder-Cq0DKiuS.js';
4
4
 
5
5
  interface CrudRequestParserOptions {
6
6
  /**
@@ -1,4 +1,4 @@
1
- import { C as CrudRequest } from './crud-request-DLo0ZuzD.js';
1
+ import { C as CrudRequest } from './crud-request-9u0s-DnI.js';
2
2
 
3
3
  interface GetManyResult<T> {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { C as CrudRequest } from './crud-request-DLo0ZuzD.mjs';
1
+ import { C as CrudRequest } from './crud-request-9u0s-DnI.mjs';
2
2
 
3
3
  interface GetManyResult<T> {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { C as CrudRequest } from './crud-request-DLo0ZuzD.js';
1
+ import { C as CrudRequest } from './crud-request-9u0s-DnI.js';
2
2
 
3
3
  interface OpenAPIParameter {
4
4
  name: string;
@@ -1,4 +1,4 @@
1
- import { C as CrudRequest } from './crud-request-DLo0ZuzD.mjs';
1
+ import { C as CrudRequest } from './crud-request-9u0s-DnI.mjs';
2
2
 
3
3
  interface OpenAPIParameter {
4
4
  name: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crud-query-parser",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Parses HTTP requests and converts them into database queries",
5
5
  "keywords": [
6
6
  "crud",
@@ -11,6 +11,7 @@
11
11
  "mongodb",
12
12
  "mongoose",
13
13
  "dynamodb",
14
+ "sequelize",
14
15
  "typeorm",
15
16
  "nestjs",
16
17
  "express"
@@ -30,6 +31,7 @@
30
31
  "sample:dynamodb": "ts-node ./samples/dynamodb/index.ts",
31
32
  "sample:mongodb": "ts-node ./samples/mongodb/index.ts",
32
33
  "sample:mongoose": "ts-node ./samples/mongoose/index.ts",
34
+ "sample:sequelize": "ts-node ./samples/sequelize/index.ts",
33
35
  "sample:typeorm": "ts-node ./samples/typeorm/index.ts"
34
36
  },
35
37
  "tsup": {
@@ -38,6 +40,7 @@
38
40
  "src/adapters/array/index.ts",
39
41
  "src/adapters/dynamodb/index.ts",
40
42
  "src/adapters/mongodb/index.ts",
43
+ "src/adapters/sequelize/index.ts",
41
44
  "src/adapters/typeorm/index.ts",
42
45
  "src/parsers/crud/index.ts",
43
46
  "src/helpers/express/index.ts",
@@ -106,6 +109,16 @@
106
109
  "types": "./dist/adapters/mongodb/index.d.ts"
107
110
  }
108
111
  },
112
+ "./adapters/sequelize": {
113
+ "import": {
114
+ "default": "./dist/adapters/sequelize/index.mjs",
115
+ "types": "./dist/adapters/sequelize/index.d.mts"
116
+ },
117
+ "require": {
118
+ "default": "./dist/adapters/sequelize/index.js",
119
+ "types": "./dist/adapters/sequelize/index.d.ts"
120
+ }
121
+ },
109
122
  "./adapters/typeorm": {
110
123
  "import": {
111
124
  "default": "./dist/adapters/typeorm/index.mjs",
@@ -164,6 +177,7 @@
164
177
  "@nestjs/swagger": ">=7.0.0",
165
178
  "mongodb": ">=5.0.0",
166
179
  "mongoose": ">=8.0.0",
180
+ "sequelize": "6.x.x",
167
181
  "typeorm": "0.2.x || 0.3.x"
168
182
  },
169
183
  "peerDependenciesMeta": {
@@ -185,6 +199,9 @@
185
199
  "mongoose": {
186
200
  "optional": true
187
201
  },
202
+ "sequelize": {
203
+ "optional": true
204
+ },
188
205
  "typeorm": {
189
206
  "optional": true
190
207
  }
@@ -200,8 +217,10 @@
200
217
  "@vitest/coverage-v8": "^2.1.8",
201
218
  "better-sqlite3": "^9.6.0",
202
219
  "mongodb": "^5.9.2",
203
- "mongoose": "^8.8.4",
220
+ "mongoose": "^8.9.5",
204
221
  "reflect-metadata": "^0.2.2",
222
+ "sequelize": "^6.37.5",
223
+ "sqlite3": "^5.1.7",
205
224
  "ts-node": "^10.9.2",
206
225
  "tsup": "^8.1.0",
207
226
  "typeorm": "^0.3.20",