@nulledexp/translatable-criteria 1.2.0 → 2.0.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.
- package/README.md +89 -85
- package/dist/criteria/criteria-factory.d.ts +6 -5
- package/dist/criteria/criteria-factory.d.ts.map +1 -1
- package/dist/criteria/criteria-factory.js +8 -8
- package/dist/criteria/criteria-factory.js.map +1 -1
- package/dist/criteria/criteria-join-manager.js.map +1 -1
- package/dist/criteria/criteria.d.ts +45 -35
- package/dist/criteria/criteria.d.ts.map +1 -1
- package/dist/criteria/criteria.js +80 -69
- package/dist/criteria/criteria.js.map +1 -1
- package/dist/criteria/cursor.d.ts +15 -0
- package/dist/criteria/cursor.d.ts.map +1 -1
- package/dist/criteria/cursor.js +22 -0
- package/dist/criteria/cursor.js.map +1 -1
- package/dist/criteria/filter/filter-group.d.ts +7 -1
- package/dist/criteria/filter/filter-group.d.ts.map +1 -1
- package/dist/criteria/filter/filter-group.js +12 -3
- package/dist/criteria/filter/filter-group.js.map +1 -1
- package/dist/criteria/filter/filter.d.ts +3 -3
- package/dist/criteria/filter/filter.d.ts.map +1 -1
- package/dist/criteria/filter/filter.js +37 -14
- package/dist/criteria/filter/filter.js.map +1 -1
- package/dist/criteria/filter/types/filter-primitive.types.d.ts +16 -6
- package/dist/criteria/filter/types/filter-primitive.types.d.ts.map +1 -1
- package/dist/criteria/index.d.ts +2 -2
- package/dist/criteria/index.d.ts.map +1 -1
- package/dist/criteria/index.js.map +1 -1
- package/dist/criteria/join/inner.join-criteria.d.ts +10 -17
- package/dist/criteria/join/inner.join-criteria.d.ts.map +1 -1
- package/dist/criteria/join/inner.join-criteria.js +11 -18
- package/dist/criteria/join/inner.join-criteria.js.map +1 -1
- package/dist/criteria/join/left.join-criteria.d.ts +4 -4
- package/dist/criteria/join/left.join-criteria.d.ts.map +1 -1
- package/dist/criteria/join/left.join-criteria.js +5 -5
- package/dist/criteria/join/left.join-criteria.js.map +1 -1
- package/dist/criteria/join/outer.join-criteria.d.ts +13 -16
- package/dist/criteria/join/outer.join-criteria.d.ts.map +1 -1
- package/dist/criteria/join/outer.join-criteria.js +14 -17
- package/dist/criteria/join/outer.join-criteria.js.map +1 -1
- package/dist/criteria/order/order.d.ts +18 -1
- package/dist/criteria/order/order.d.ts.map +1 -1
- package/dist/criteria/order/order.js +21 -1
- package/dist/criteria/order/order.js.map +1 -1
- package/dist/criteria/root.criteria.d.ts +6 -16
- package/dist/criteria/root.criteria.d.ts.map +1 -1
- package/dist/criteria/root.criteria.js +4 -14
- package/dist/criteria/root.criteria.js.map +1 -1
- package/dist/criteria/translator/criteria-translator.d.ts +23 -32
- package/dist/criteria/translator/criteria-translator.d.ts.map +1 -1
- package/dist/criteria/translator/criteria-translator.js +5 -24
- package/dist/criteria/translator/criteria-translator.js.map +1 -1
- package/dist/criteria/types/criteria.interface.d.ts +35 -22
- package/dist/criteria/types/criteria.interface.d.ts.map +1 -1
- package/dist/criteria/types/criteria.interface.js.map +1 -1
- package/dist/criteria/types/join-parameter.types.d.ts +20 -4
- package/dist/criteria/types/join-parameter.types.d.ts.map +1 -1
- package/dist/criteria/types/join-utility.types.d.ts +25 -31
- package/dist/criteria/types/join-utility.types.d.ts.map +1 -1
- package/dist/criteria/types/manager.interface.d.ts +3 -3
- package/dist/criteria/types/manager.interface.d.ts.map +1 -1
- package/dist/criteria/types/operator.types.d.ts +92 -86
- package/dist/criteria/types/operator.types.d.ts.map +1 -1
- package/dist/criteria/types/operator.types.js +91 -85
- package/dist/criteria/types/operator.types.js.map +1 -1
- package/dist/criteria/types/schema.types.d.ts +107 -41
- package/dist/criteria/types/schema.types.d.ts.map +1 -1
- package/dist/criteria/types/schema.types.js +38 -11
- package/dist/criteria/types/schema.types.js.map +1 -1
- package/dist/criteria/types/visitor-interface.types.d.ts +33 -12
- package/dist/criteria/types/visitor-interface.types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -9,11 +9,8 @@ import { FilterOperator } from './types/operator.types.js';
|
|
|
9
9
|
* Concrete criteria types (e.g., RootCriteria, JoinCriteria) will extend this class.
|
|
10
10
|
*
|
|
11
11
|
* @template TSchema - The schema definition for the entity this criteria operates on.
|
|
12
|
-
* @template CurrentAlias - The selected alias for the entity from its schema.
|
|
13
12
|
*/
|
|
14
13
|
export class Criteria {
|
|
15
|
-
schema;
|
|
16
|
-
_alias;
|
|
17
14
|
_filterManager = new CriteriaFilterManager();
|
|
18
15
|
_joinManager = new CriteriaJoinManager();
|
|
19
16
|
_source_name;
|
|
@@ -30,24 +27,46 @@ export class Criteria {
|
|
|
30
27
|
* @protected
|
|
31
28
|
*/
|
|
32
29
|
_cursor;
|
|
30
|
+
_schema;
|
|
33
31
|
/**
|
|
34
32
|
* Initializes a new instance of the Criteria class.
|
|
35
|
-
* @param {TSchema} schema - The schema definition for the entity.
|
|
36
|
-
* @
|
|
37
|
-
* @throws {Error} If the provided alias is not supported by the schema.
|
|
33
|
+
* @param {ValidSchema<TSchema>} schema - The schema definition for the entity.
|
|
34
|
+
* @throws {Error} If the schema's identifier_field is not one of its defined fields.
|
|
38
35
|
* @protected
|
|
39
36
|
*/
|
|
40
|
-
constructor(schema
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
constructor(schema) {
|
|
38
|
+
if (typeof schema === 'string') {
|
|
39
|
+
throw new Error(`Invalid Schema: ${schema}`);
|
|
40
|
+
}
|
|
41
|
+
if (!schema.fields.includes(schema.identifier_field)) {
|
|
42
|
+
throw new Error(`Schema identifier_field '${String(schema.identifier_field)}' must be one of the schema's defined fields. Schema: ${schema.source_name}`);
|
|
43
|
+
}
|
|
44
|
+
this._schema = schema;
|
|
45
45
|
this._source_name = schema.source_name;
|
|
46
46
|
}
|
|
47
|
+
get schema() {
|
|
48
|
+
return { ...this._schema };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Gets the metadata associated with the root schema of this criteria.
|
|
52
|
+
* @returns {TSchema['metadata']} The metadata object from the schema, which can be undefined.
|
|
53
|
+
* @remarks This is intended primarily for use by translators.
|
|
54
|
+
*/
|
|
55
|
+
get schemaMetadata() {
|
|
56
|
+
return this.schema.metadata;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Gets the name of the identifier field for the current schema.
|
|
60
|
+
* @returns {FieldOfSchema<TSchema>} The name of the identifier field.
|
|
61
|
+
*/
|
|
62
|
+
get identifierField() {
|
|
63
|
+
return this.schema.identifier_field;
|
|
64
|
+
}
|
|
47
65
|
/**
|
|
48
66
|
* Gets the currently selected fields.
|
|
49
|
-
* If `_selectAll` is true, it returns all fields from the schema.
|
|
50
|
-
*
|
|
67
|
+
* If `_selectAll` is true (default or after `resetSelect()`), it returns all fields from the schema.
|
|
68
|
+
* If `_selectAll` is false (after `setSelect()`), it returns the fields explicitly set by the user,
|
|
69
|
+
* plus the schema's `identifier_field` (which is added implicitly by `setSelect`).
|
|
51
70
|
* @returns {Array<FieldOfSchema<TSchema>>} An array of selected field names.
|
|
52
71
|
*/
|
|
53
72
|
get select() {
|
|
@@ -58,7 +77,7 @@ export class Criteria {
|
|
|
58
77
|
}
|
|
59
78
|
/**
|
|
60
79
|
* Resets the selection to include all fields from the schema.
|
|
61
|
-
*
|
|
80
|
+
* Later calls to `get select()` will return all schema fields
|
|
62
81
|
* until `setSelect()` is called again.
|
|
63
82
|
* @returns {this} The current criteria instance for chaining.
|
|
64
83
|
*/
|
|
@@ -77,6 +96,9 @@ export class Criteria {
|
|
|
77
96
|
/**
|
|
78
97
|
* Specifies which fields to select for the entity.
|
|
79
98
|
* Calling this method sets `selectAll` to false.
|
|
99
|
+
* The schema's `identifier_field` will always be included in the selection
|
|
100
|
+
* if it's not already present in `selectFields`.
|
|
101
|
+
* If `selectFields` is empty, only the `identifier_field` will be selected.
|
|
80
102
|
* @param {Array<FieldOfSchema<TSchema>>} selectFields - An array of field names to select.
|
|
81
103
|
* @returns {this} The current criteria instance for chaining.
|
|
82
104
|
* @throws {Error} If any of the specified fields are not defined in the schema.
|
|
@@ -85,10 +107,9 @@ export class Criteria {
|
|
|
85
107
|
for (const field of selectFields) {
|
|
86
108
|
this.assetFieldOnSchema(field);
|
|
87
109
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
110
|
+
this._selectAll = false;
|
|
111
|
+
this._select = new Set(selectFields);
|
|
112
|
+
this._select.add(this.schema.identifier_field);
|
|
92
113
|
return this;
|
|
93
114
|
}
|
|
94
115
|
/**
|
|
@@ -140,7 +161,7 @@ export class Criteria {
|
|
|
140
161
|
* @returns {CurrentAlias} The alias string.
|
|
141
162
|
*/
|
|
142
163
|
get alias() {
|
|
143
|
-
return this.
|
|
164
|
+
return this.schema.alias;
|
|
144
165
|
}
|
|
145
166
|
/**
|
|
146
167
|
* Sets the maximum number of records to return (LIMIT).
|
|
@@ -186,12 +207,13 @@ export class Criteria {
|
|
|
186
207
|
* Multiple calls will append new ordering rules.
|
|
187
208
|
* @param {FieldOfSchema<TSchema>} field - The field to order by.
|
|
188
209
|
* @param {OrderDirection} direction - The direction of the ordering (ASC or DESC).
|
|
210
|
+
* @param {boolean} [nullFirst=false] - If true, null values will be ordered first.
|
|
189
211
|
* @returns {this} The current criteria instance for chaining.
|
|
190
212
|
* @throws {Error} If the specified field is not defined in the schema.
|
|
191
213
|
*/
|
|
192
|
-
orderBy(field, direction) {
|
|
214
|
+
orderBy(field, direction, nullFirst = false) {
|
|
193
215
|
this.assetFieldOnSchema(field);
|
|
194
|
-
this._orders.push(new Order(direction, field));
|
|
216
|
+
this._orders.push(new Order(direction, field, nullFirst));
|
|
195
217
|
return this;
|
|
196
218
|
}
|
|
197
219
|
/**
|
|
@@ -236,68 +258,57 @@ export class Criteria {
|
|
|
236
258
|
return this;
|
|
237
259
|
}
|
|
238
260
|
/**
|
|
239
|
-
* Adds a join to another criteria.
|
|
261
|
+
* Adds a join to another criteria. This method is fully type-safe.
|
|
262
|
+
* The `joinAlias` argument provides autocompletion for all valid relation aliases defined in the schema.
|
|
263
|
+
* The `criteriaToJoin` argument is then validated to ensure its `source_name` matches the one
|
|
264
|
+
* configured for the chosen `joinAlias`, providing clear, compile-time error messages if they mismatch.
|
|
265
|
+
*
|
|
240
266
|
* @template TJoinSchema - The schema of the entity to join.
|
|
241
|
-
* @template
|
|
242
|
-
* @
|
|
243
|
-
*
|
|
244
|
-
* @param {
|
|
245
|
-
*
|
|
246
|
-
* @param {
|
|
247
|
-
*
|
|
248
|
-
* many-to-many).
|
|
267
|
+
* @template SpecificRelationAlias - The literal type of the relation alias being used for the join.
|
|
268
|
+
* @param {SpecificRelationAlias} joinAlias - The specific alias defined in the parent schema's `relations` array for
|
|
269
|
+
* this relation.
|
|
270
|
+
* @param {JoinCriteriaType<TSchema, TJoinSchema, SpecificRelationAlias>} criteriaToJoin - The criteria instance
|
|
271
|
+
* representing the entity to join (e.g., `InnerJoinCriteria`).
|
|
272
|
+
* @param {boolean} [withSelect=true] - If true (default), the joined entity's fields will be included in the final
|
|
273
|
+
* selection. If false, the join will only be used for filtering and its fields will not be selected.
|
|
249
274
|
* @returns {this} The current criteria instance for chaining.
|
|
250
|
-
* @throws {Error} If `criteriaToJoin` is a string (which is invalid).
|
|
251
|
-
* @throws {Error} If `parent_field` in `joinParameter` (or `parent_field.reference` for pivot joins) is not defined
|
|
252
|
-
* in the parent schema.
|
|
253
|
-
* @throws {Error} If the join configuration for the given `criteriaToJoin.alias` is not found in the parent schema's
|
|
254
|
-
* `joins` array.
|
|
255
|
-
* @throws {Error} If `joinParameter` is invalid for the `relation_type` defined in the schema (e.g., using
|
|
256
|
-
* simple join input for many-to-many or vice-versa).
|
|
257
275
|
*/
|
|
258
|
-
join(criteriaToJoin,
|
|
276
|
+
join(joinAlias, criteriaToJoin, withSelect = true) {
|
|
259
277
|
if (typeof criteriaToJoin === 'string') {
|
|
260
278
|
throw new Error(`Invalid criteriaToJoin: ${criteriaToJoin}`);
|
|
261
279
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
const joinConfig = this.schema.joins.find((join) => join.alias === criteriaToJoin.alias);
|
|
266
|
-
if (!joinConfig) {
|
|
267
|
-
throw new Error(`Join configuration for alias '${String(criteriaToJoin.alias)}' not found in schema '${this.schema.source_name}'.`);
|
|
280
|
+
const relation = this.schema.relations.find((r) => r.relation_alias === joinAlias);
|
|
281
|
+
if (!relation) {
|
|
282
|
+
throw new Error(`Join configuration for '${String(joinAlias)}' not found in schema '${this.schema.source_name}'.`);
|
|
268
283
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
...joinParameter,
|
|
284
|
+
const baseParameters = {
|
|
285
|
+
with_select: withSelect,
|
|
272
286
|
parent_alias: this.alias,
|
|
273
287
|
parent_source_name: this.sourceName,
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
288
|
+
relation_alias: relation.relation_alias,
|
|
289
|
+
parent_identifier: this.identifierField,
|
|
290
|
+
relation_type: relation.relation_type,
|
|
291
|
+
join_metadata: relation.metadata ?? {},
|
|
277
292
|
parent_schema_metadata: this.schema.metadata ?? {},
|
|
278
293
|
};
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
'reference' in field);
|
|
288
|
-
};
|
|
289
|
-
if (joinConfig.relation_type === 'many_to_many') {
|
|
290
|
-
if (!isPivotFieldObject(joinParameter.parent_field) ||
|
|
291
|
-
!isPivotFieldObject(joinParameter.join_field)) {
|
|
292
|
-
throw new Error(`Invalid JoinOptions for 'many_to_many' join. Expected parent_field and join_field to be objects with 'pivot_field' and 'reference' properties. Alias: '${String(joinConfig.alias)}'`);
|
|
293
|
-
}
|
|
294
|
+
let fullJoinParameters;
|
|
295
|
+
if (relation.relation_type === 'many_to_many') {
|
|
296
|
+
fullJoinParameters = {
|
|
297
|
+
...baseParameters,
|
|
298
|
+
pivot_source_name: relation.pivot_source_name,
|
|
299
|
+
local_field: relation.local_field,
|
|
300
|
+
relation_field: relation.relation_field,
|
|
301
|
+
};
|
|
294
302
|
}
|
|
295
303
|
else {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
304
|
+
fullJoinParameters = {
|
|
305
|
+
...baseParameters,
|
|
306
|
+
local_field: relation.local_field,
|
|
307
|
+
relation_field: relation.relation_field,
|
|
308
|
+
};
|
|
300
309
|
}
|
|
310
|
+
this._joinManager.addJoin(criteriaToJoin, fullJoinParameters);
|
|
311
|
+
return this;
|
|
301
312
|
}
|
|
302
313
|
/**
|
|
303
314
|
* Gets the current cursor configuration, if set.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteria.js","sourceRoot":"","sources":["../../src/criteria/criteria.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"criteria.js","sourceRoot":"","sources":["../../src/criteria/criteria.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,13 @@ import { FilterOperator } from './types/operator.types.js';
|
|
|
11
11
|
* @template Operator - The specific comparison operator for the cursor (GREATER_THAN or LESS_THAN).
|
|
12
12
|
*/
|
|
13
13
|
export declare class Cursor<TFields extends string, Operator extends FilterOperator.GREATER_THAN | FilterOperator.LESS_THAN> {
|
|
14
|
+
/**
|
|
15
|
+
* A unique, globally incrementing ID. This is used by translators to maintain
|
|
16
|
+
* a stable sort order when merging cursor logic from multiple `Criteria`
|
|
17
|
+
* instances (e.g., a root criteria and its joins).
|
|
18
|
+
* @protected
|
|
19
|
+
*/
|
|
20
|
+
protected _sequenceId: number;
|
|
14
21
|
/**
|
|
15
22
|
* An array of one or two {@link Filter} instances that define the cursor's position.
|
|
16
23
|
* - A single filter is used for simple cursor pagination (e.g., based on `created_at`).
|
|
@@ -40,5 +47,13 @@ export declare class Cursor<TFields extends string, Operator extends FilterOpera
|
|
|
40
47
|
Omit<FilterPrimitive<TFields, Operator>, 'operator'>,
|
|
41
48
|
Omit<FilterPrimitive<TFields, Operator>, 'operator'>
|
|
42
49
|
] | readonly [Omit<FilterPrimitive<TFields, Operator>, 'operator'>], operator: Operator, order: OrderDirection);
|
|
50
|
+
/**
|
|
51
|
+
* Gets the unique sequence ID of this cursor configuration.
|
|
52
|
+
* This ID is used to maintain a stable application order when cursor
|
|
53
|
+
* logic is defined across multiple related criteria (e.g., in joins).
|
|
54
|
+
* @returns {number} The sequence ID.
|
|
55
|
+
*/
|
|
56
|
+
get sequenceId(): number;
|
|
57
|
+
get operator(): Operator;
|
|
43
58
|
}
|
|
44
59
|
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/criteria/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/criteria/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D;;;;;;;GAOG;AACH,qBAAa,MAAM,CACjB,OAAO,SAAS,MAAM,EACtB,QAAQ,SAAS,cAAc,CAAC,YAAY,GAAG,cAAc,CAAC,SAAS;IAEvE;;;;;OAKG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EACZ,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GACtD,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B;;;;;;;;;;;OAWG;gBAED,eAAe,EACX,SAAS;QACP,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,UAAU,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,UAAU,CAAC;KACrD,GACD,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,EACnE,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,cAAc;IAkCvB;;;;;OAKG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,aAEX;CACF"}
|
package/dist/criteria/cursor.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Filter } from './filter/filter.js';
|
|
2
2
|
import { OrderDirection } from './order/order.js';
|
|
3
3
|
import { FilterOperator } from './types/operator.types.js';
|
|
4
|
+
let globalCursorSequence = 0;
|
|
4
5
|
/**
|
|
5
6
|
* Represents the configuration for cursor-based pagination.
|
|
6
7
|
* A cursor defines a point in a sorted dataset from which to fetch
|
|
@@ -10,6 +11,13 @@ import { FilterOperator } from './types/operator.types.js';
|
|
|
10
11
|
* @template Operator - The specific comparison operator for the cursor (GREATER_THAN or LESS_THAN).
|
|
11
12
|
*/
|
|
12
13
|
export class Cursor {
|
|
14
|
+
/**
|
|
15
|
+
* A unique, globally incrementing ID. This is used by translators to maintain
|
|
16
|
+
* a stable sort order when merging cursor logic from multiple `Criteria`
|
|
17
|
+
* instances (e.g., a root criteria and its joins).
|
|
18
|
+
* @protected
|
|
19
|
+
*/
|
|
20
|
+
_sequenceId;
|
|
13
21
|
/**
|
|
14
22
|
* An array of one or two {@link Filter} instances that define the cursor's position.
|
|
15
23
|
* - A single filter is used for simple cursor pagination (e.g., based on `created_at`).
|
|
@@ -52,8 +60,22 @@ export class Cursor {
|
|
|
52
60
|
if (!filterArray[0]) {
|
|
53
61
|
throw new Error('Cursor filters must be defined');
|
|
54
62
|
}
|
|
63
|
+
globalCursorSequence++;
|
|
64
|
+
this._sequenceId = globalCursorSequence;
|
|
55
65
|
this.filters = filterArray;
|
|
56
66
|
this.order = order;
|
|
57
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Gets the unique sequence ID of this cursor configuration.
|
|
70
|
+
* This ID is used to maintain a stable application order when cursor
|
|
71
|
+
* logic is defined across multiple related criteria (e.g., in joins).
|
|
72
|
+
* @returns {number} The sequence ID.
|
|
73
|
+
*/
|
|
74
|
+
get sequenceId() {
|
|
75
|
+
return this._sequenceId;
|
|
76
|
+
}
|
|
77
|
+
get operator() {
|
|
78
|
+
return this.filters[0].operator;
|
|
79
|
+
}
|
|
58
80
|
}
|
|
59
81
|
//# sourceMappingURL=cursor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/criteria/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/criteria/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,IAAI,oBAAoB,GAAW,CAAC,CAAC;AACrC;;;;;;;GAOG;AACH,MAAM,OAAO,MAAM;IAIjB;;;;;OAKG;IACO,WAAW,CAAS;IAC9B;;;;;OAKG;IACM,OAAO,CAEgB;IAChC;;;;OAIG;IACM,KAAK,CAAiB;IAC/B;;;;;;;;;;;OAWG;IACH,YACE,eAKmE,EACnE,QAAkB,EAClB,KAAqB;QAErB,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,CAC9B,MAAM,CAAC,KAAK,CACb,8DAA8D,CAChE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IACE,eAAe,CAAC,MAAM,KAAK,CAAC;YAC5B,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EACtD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CACrC,CAAC,eAAe,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,CAClE,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,oBAAoB,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,WAAkC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -13,6 +13,12 @@ export declare class FilterGroup<T extends string = string> implements IFilterEx
|
|
|
13
13
|
toPrimitive(): FilterGroupPrimitive<T>;
|
|
14
14
|
addAnd(filterPrimitive: FilterPrimitive<T, FilterOperator>): FilterGroup<T>;
|
|
15
15
|
addOr(filterPrimitive: FilterPrimitive<T, FilterOperator>): FilterGroup<T>;
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Accepts a visitor and calls the appropriate visit method based on the logical operator.
|
|
18
|
+
* @param visitor The visitor implementation.
|
|
19
|
+
* @param currentAlias The alias of the current entity being processed.
|
|
20
|
+
* @param context The mutable context object for the translation.
|
|
21
|
+
*/
|
|
22
|
+
accept<TranslationContext>(visitor: ICriteriaVisitor<TranslationContext>, currentAlias: string, context: TranslationContext): void;
|
|
17
23
|
}
|
|
18
24
|
//# sourceMappingURL=filter-group.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-group.d.ts","sourceRoot":"","sources":["../../../src/criteria/filter/filter-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAChD,YAAW,iBAAiB;IAE5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAErB;gBAEU,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAYzD,IAAI,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAErE;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;
|
|
1
|
+
{"version":3,"file":"filter-group.d.ts","sourceRoot":"","sources":["../../../src/criteria/filter/filter-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAChD,YAAW,iBAAiB;IAE5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAErB;gBAEU,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAYzD,IAAI,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAErE;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;WAEa,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACnD,eAAe,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,GAClD,WAAW,CAAC,CAAC,CAAC;IAOV,WAAW,IAAI,oBAAoB,CAAC,CAAC,CAAC;IAOtC,MAAM,CACX,eAAe,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,GAClD,WAAW,CAAC,CAAC,CAAC;IAoCV,KAAK,CACV,eAAe,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,GAClD,WAAW,CAAC,CAAC,CAAC;IAmCjB;;;;;OAKG;IACI,MAAM,CAAC,kBAAkB,EAC9B,OAAO,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,EAC7C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI;CAOR"}
|
|
@@ -95,10 +95,19 @@ export class FilterGroup {
|
|
|
95
95
|
],
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Accepts a visitor and calls the appropriate visit method based on the logical operator.
|
|
100
|
+
* @param visitor The visitor implementation.
|
|
101
|
+
* @param currentAlias The alias of the current entity being processed.
|
|
102
|
+
* @param context The mutable context object for the translation.
|
|
103
|
+
*/
|
|
98
104
|
accept(visitor, currentAlias, context) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
if (this.logicalOperator === LogicalOperator.AND) {
|
|
106
|
+
visitor.visitAndGroup(this, currentAlias, context);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
visitor.visitOrGroup(this, currentAlias, context);
|
|
110
|
+
}
|
|
102
111
|
}
|
|
103
112
|
}
|
|
104
113
|
//# sourceMappingURL=filter-group.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-group.js","sourceRoot":"","sources":["../../../src/criteria/filter/filter-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAQrD,MAAM,OAAO,WAAW;IAGL,gBAAgB,CAAkB;IAClC,MAAM,CAErB;IAEF,YAAY,oBAA6C;QACvD,MAAM,eAAe,GACnB,gBAAgB,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/C,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;gBAC9B,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-group.js","sourceRoot":"","sources":["../../../src/criteria/filter/filter-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,12 @@ import type { IFilterExpression } from '../types/filter-expression.interface.js'
|
|
|
3
3
|
import type { FilterPrimitive, FilterValue } from './types/filter-primitive.types.js';
|
|
4
4
|
import type { ICriteriaVisitor } from '../types/visitor-interface.types.js';
|
|
5
5
|
export declare class Filter<T extends string, Operator extends FilterOperator> implements IFilterExpression {
|
|
6
|
-
|
|
6
|
+
protected readonly primitive: FilterPrimitive<T, Operator>;
|
|
7
7
|
constructor(primitive: FilterPrimitive<T, Operator>);
|
|
8
8
|
get field(): T;
|
|
9
9
|
get operator(): Operator;
|
|
10
10
|
get value(): FilterValue<Operator>;
|
|
11
|
-
accept<TranslationContext,
|
|
11
|
+
accept<TranslationContext, TFilterVisitorOutput extends any>(visitor: ICriteriaVisitor<TranslationContext, TFilterVisitorOutput>, currentAlias: string, context: TranslationContext): TFilterVisitorOutput;
|
|
12
12
|
toPrimitive(): FilterPrimitive<T, Operator>;
|
|
13
13
|
private isString;
|
|
14
14
|
private isNumber;
|
|
@@ -21,6 +21,6 @@ export declare class Filter<T extends string, Operator extends FilterOperator> i
|
|
|
21
21
|
private isNull;
|
|
22
22
|
private isUndefined;
|
|
23
23
|
private isPrimitiveFilterValue;
|
|
24
|
-
private
|
|
24
|
+
private isJsonValue;
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/criteria/filter/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAEZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,qBAAa,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,SAAS,cAAc,CACnE,YAAW,iBAAiB;
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/criteria/filter/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAEZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,qBAAa,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,SAAS,cAAc,CACnE,YAAW,iBAAiB;IAE5B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC/C,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAKnD,IAAI,KAAK,IAAI,CAAC,CAEb;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,CAEjC;IAEM,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,SAAS,GAAG,EAChE,OAAO,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,EACnE,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,kBAAkB,GAC1B,oBAAoB;IAIhB,WAAW,IAAI,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAIlD,OAAO,CAAC,QAAQ;IAGhB,OAAO,CAAC,QAAQ;IAGhB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,+BAA+B;IAWvC,OAAO,CAAC,iCAAiC;IA0HzC,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,WAAW;CAYpB"}
|
|
@@ -2,7 +2,7 @@ import { FilterOperator } from '../types/operator.types.js';
|
|
|
2
2
|
export class Filter {
|
|
3
3
|
primitive;
|
|
4
4
|
constructor(primitive) {
|
|
5
|
-
this.primitive = primitive;
|
|
5
|
+
this.primitive = { ...primitive };
|
|
6
6
|
this.validatePrimitiveValueForOperator(primitive.operator);
|
|
7
7
|
}
|
|
8
8
|
get field() {
|
|
@@ -14,8 +14,8 @@ export class Filter {
|
|
|
14
14
|
get value() {
|
|
15
15
|
return this.primitive.value;
|
|
16
16
|
}
|
|
17
|
-
accept(visitor, currentAlias) {
|
|
18
|
-
return visitor.visitFilter(this, currentAlias);
|
|
17
|
+
accept(visitor, currentAlias, context) {
|
|
18
|
+
return visitor.visitFilter(this, currentAlias, context);
|
|
19
19
|
}
|
|
20
20
|
toPrimitive() {
|
|
21
21
|
return this.primitive;
|
|
@@ -61,23 +61,31 @@ export class Filter {
|
|
|
61
61
|
throw new Error(`Filter value for operator ${operator} must be a string | number | boolean | Date | null type`);
|
|
62
62
|
break;
|
|
63
63
|
case FilterOperator.ARRAY_CONTAINS_ELEMENT:
|
|
64
|
+
case FilterOperator.ARRAY_NOT_CONTAINS_ELEMENT:
|
|
64
65
|
if (!this.isPrimitiveFilterValue(this.value) &&
|
|
65
66
|
!this.isValidSingleKeyObjectWithValue(this.value, (val) => this.isPrimitiveFilterValue(val))) {
|
|
66
|
-
throw new Error(
|
|
67
|
+
throw new Error(`For operator ${operator}, value must be a PrimitiveFilterValue or an object like { "path.to.array": elementValue }`);
|
|
67
68
|
}
|
|
68
69
|
break;
|
|
69
70
|
case FilterOperator.ARRAY_CONTAINS_ALL_ELEMENTS:
|
|
70
71
|
case FilterOperator.ARRAY_CONTAINS_ANY_ELEMENT:
|
|
71
72
|
case FilterOperator.ARRAY_EQUALS:
|
|
73
|
+
case FilterOperator.ARRAY_NOT_EQUALS:
|
|
74
|
+
case FilterOperator.ARRAY_EQUALS_STRICT:
|
|
75
|
+
case FilterOperator.ARRAY_NOT_EQUALS_STRICT:
|
|
76
|
+
case FilterOperator.ARRAY_NOT_CONTAINS_ALL_ELEMENTS:
|
|
77
|
+
case FilterOperator.ARRAY_NOT_CONTAINS_ANY_ELEMENT:
|
|
72
78
|
if (!this.isArrayOfPrimitives(this.value) &&
|
|
73
79
|
!this.isValidSingleKeyObjectWithValue(this.value, (val) => this.isArrayOfPrimitives(val))) {
|
|
74
|
-
throw new Error(
|
|
80
|
+
throw new Error(`For operator ${operator}, value must be an Array<Primitive> or an object like { "path.to.array": [elements] }`);
|
|
75
81
|
}
|
|
76
82
|
break;
|
|
77
83
|
case FilterOperator.IN:
|
|
78
84
|
case FilterOperator.NOT_IN:
|
|
79
85
|
case FilterOperator.SET_CONTAINS_ANY:
|
|
80
86
|
case FilterOperator.SET_CONTAINS_ALL:
|
|
87
|
+
case FilterOperator.SET_NOT_CONTAINS_ANY:
|
|
88
|
+
case FilterOperator.SET_NOT_CONTAINS_ALL:
|
|
81
89
|
if (!this.isArrayOfPrimitives(this.value))
|
|
82
90
|
throw new Error(`Filter value for operator ${operator} must be an array of string, number, boolean, Date`);
|
|
83
91
|
break;
|
|
@@ -92,13 +100,22 @@ export class Filter {
|
|
|
92
100
|
if (!this.isNull(this.value) && !this.isUndefined(this.value))
|
|
93
101
|
throw new Error(`Filter value for operator ${operator} must be null or undefined`);
|
|
94
102
|
break;
|
|
103
|
+
case FilterOperator.JSON_PATH_VALUE_EQUALS:
|
|
104
|
+
case FilterOperator.JSON_PATH_VALUE_NOT_EQUALS:
|
|
95
105
|
case FilterOperator.JSON_CONTAINS:
|
|
96
106
|
case FilterOperator.JSON_NOT_CONTAINS:
|
|
97
107
|
if (!this.isObject(this.value) ||
|
|
98
|
-
!Object.values(this.value).every((val) => this.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
108
|
+
!Object.values(this.value).every((val) => this.isJsonValue(val))) {
|
|
109
|
+
throw new Error(`Filter value for operator ${operator} must be an object where each value is a valid JSON structure (primitive, object, or array).`);
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
case FilterOperator.JSON_CONTAINS_ANY:
|
|
113
|
+
case FilterOperator.JSON_CONTAINS_ALL:
|
|
114
|
+
case FilterOperator.JSON_NOT_CONTAINS_ANY:
|
|
115
|
+
case FilterOperator.JSON_NOT_CONTAINS_ALL:
|
|
116
|
+
if (!this.isObject(this.value) ||
|
|
117
|
+
!Object.values(this.value).every((val) => Array.isArray(val) && val.every((item) => this.isJsonValue(item)))) {
|
|
118
|
+
throw new Error(`Filter value for operator ${operator} must be an object where each value is an array of valid JSON structures.`);
|
|
102
119
|
}
|
|
103
120
|
break;
|
|
104
121
|
default:
|
|
@@ -143,11 +160,17 @@ export class Filter {
|
|
|
143
160
|
value instanceof Date ||
|
|
144
161
|
this.isNull(value));
|
|
145
162
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
163
|
+
isJsonValue(value) {
|
|
164
|
+
if (this.isPrimitiveFilterValue(value)) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
if (Array.isArray(value)) {
|
|
168
|
+
return value.every((item) => this.isJsonValue(item));
|
|
169
|
+
}
|
|
170
|
+
if (this.isObject(value)) {
|
|
171
|
+
return Object.values(value).every((item) => this.isJsonValue(item));
|
|
172
|
+
}
|
|
173
|
+
return false;
|
|
151
174
|
}
|
|
152
175
|
}
|
|
153
176
|
//# sourceMappingURL=filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/criteria/filter/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAS5D,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/criteria/filter/filter.ts"],"names":[],"mappings":"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"}
|