qast 1.2.0 → 2.0.2
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/LICENSE +22 -22
- package/README.md +775 -520
- package/README.zh-CN.md +520 -0
- package/dist/adapters/drizzle.d.ts +66 -0
- package/dist/adapters/drizzle.d.ts.map +1 -0
- package/dist/adapters/drizzle.js +222 -0
- package/dist/adapters/drizzle.js.map +1 -0
- package/dist/adapters/knex.d.ts +22 -0
- package/dist/adapters/knex.d.ts.map +1 -0
- package/dist/adapters/knex.js +158 -0
- package/dist/adapters/knex.js.map +1 -0
- package/dist/adapters/mongoose.d.ts +15 -0
- package/dist/adapters/mongoose.d.ts.map +1 -0
- package/dist/adapters/mongoose.js +153 -0
- package/dist/adapters/mongoose.js.map +1 -0
- package/dist/adapters/prisma.d.ts +5 -2
- package/dist/adapters/prisma.d.ts.map +1 -1
- package/dist/adapters/prisma.js +102 -4
- package/dist/adapters/prisma.js.map +1 -1
- package/dist/adapters/sequelize.d.ts +26 -8
- package/dist/adapters/sequelize.d.ts.map +1 -1
- package/dist/adapters/sequelize.js +168 -7
- package/dist/adapters/sequelize.js.map +1 -1
- package/dist/adapters/typeorm.d.ts +32 -2
- package/dist/adapters/typeorm.d.ts.map +1 -1
- package/dist/adapters/typeorm.js +169 -3
- package/dist/adapters/typeorm.js.map +1 -1
- package/dist/builder/query-builder.d.ts +139 -0
- package/dist/builder/query-builder.d.ts.map +1 -0
- package/dist/builder/query-builder.js +320 -0
- package/dist/builder/query-builder.js.map +1 -0
- package/dist/errors.d.ts +18 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +130 -10
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +77 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +124 -16
- package/dist/index.js.map +1 -1
- package/dist/integrations/express.d.ts +14 -0
- package/dist/integrations/express.d.ts.map +1 -0
- package/dist/integrations/express.js +33 -0
- package/dist/integrations/express.js.map +1 -0
- package/dist/integrations/fastify.d.ts +17 -0
- package/dist/integrations/fastify.d.ts.map +1 -0
- package/dist/integrations/fastify.js +35 -0
- package/dist/integrations/fastify.js.map +1 -0
- package/dist/integrations/hono.d.ts +14 -0
- package/dist/integrations/hono.d.ts.map +1 -0
- package/dist/integrations/hono.js +30 -0
- package/dist/integrations/hono.js.map +1 -0
- package/dist/integrations/nestjs.d.ts +23 -0
- package/dist/integrations/nestjs.d.ts.map +1 -0
- package/dist/integrations/nestjs.js +137 -0
- package/dist/integrations/nestjs.js.map +1 -0
- package/dist/parser/parser.d.ts +15 -7
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +117 -15
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +11 -1
- package/dist/parser/tokenizer.d.ts.map +1 -1
- package/dist/parser/tokenizer.js +67 -10
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/validator.d.ts +39 -0
- package/dist/parser/validator.d.ts.map +1 -1
- package/dist/parser/validator.js +144 -3
- package/dist/parser/validator.js.map +1 -1
- package/dist/types/ast.d.ts +59 -3
- package/dist/types/ast.d.ts.map +1 -1
- package/dist/types/ast.js +21 -0
- package/dist/types/ast.js.map +1 -1
- package/dist/utils/ast-utils.d.ts +43 -0
- package/dist/utils/ast-utils.d.ts.map +1 -0
- package/dist/utils/ast-utils.js +205 -0
- package/dist/utils/ast-utils.js.map +1 -0
- package/dist/utils/cache.d.ts +47 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +132 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/serializer.d.ts +6 -0
- package/dist/utils/serializer.d.ts.map +1 -0
- package/dist/utils/serializer.js +140 -0
- package/dist/utils/serializer.js.map +1 -0
- package/package.json +124 -84
package/dist/parser/tokenizer.js
CHANGED
|
@@ -16,16 +16,57 @@ var TokenType;
|
|
|
16
16
|
TokenType["BRACKET_OPEN"] = "BRACKET_OPEN";
|
|
17
17
|
TokenType["BRACKET_CLOSE"] = "BRACKET_CLOSE";
|
|
18
18
|
TokenType["COMMA"] = "COMMA";
|
|
19
|
+
TokenType["NOT"] = "NOT";
|
|
20
|
+
TokenType["BETWEEN"] = "BETWEEN";
|
|
21
|
+
TokenType["AND_KEYWORD"] = "AND_KEYWORD";
|
|
22
|
+
TokenType["IS_NULL"] = "IS_NULL";
|
|
23
|
+
TokenType["IS_NOT_NULL"] = "IS_NOT_NULL";
|
|
24
|
+
TokenType["ORDER_BY"] = "ORDER_BY";
|
|
25
|
+
TokenType["LIMIT"] = "LIMIT";
|
|
26
|
+
TokenType["OFFSET"] = "OFFSET";
|
|
27
|
+
TokenType["ASC"] = "ASC";
|
|
28
|
+
TokenType["DESC"] = "DESC";
|
|
19
29
|
TokenType["EOF"] = "EOF";
|
|
20
30
|
})(TokenType || (exports.TokenType = TokenType = {}));
|
|
21
31
|
/**
|
|
22
|
-
* Supported operators
|
|
32
|
+
* Supported operators (ordered by length to match longer operators first)
|
|
23
33
|
*/
|
|
24
|
-
const OPERATORS = [
|
|
34
|
+
const OPERATORS = [
|
|
35
|
+
'startsWith',
|
|
36
|
+
'endsWith',
|
|
37
|
+
'notIn',
|
|
38
|
+
'contains',
|
|
39
|
+
'matches',
|
|
40
|
+
'regex',
|
|
41
|
+
'like',
|
|
42
|
+
'gte',
|
|
43
|
+
'lte',
|
|
44
|
+
'eq',
|
|
45
|
+
'ne',
|
|
46
|
+
'gt',
|
|
47
|
+
'lt',
|
|
48
|
+
'in',
|
|
49
|
+
];
|
|
25
50
|
/**
|
|
26
51
|
* Logical operators
|
|
27
52
|
*/
|
|
28
53
|
const LOGICAL_OPS = ['and', 'or'];
|
|
54
|
+
/**
|
|
55
|
+
* Keywords that need special handling
|
|
56
|
+
*/
|
|
57
|
+
const KEYWORDS = {
|
|
58
|
+
not: TokenType.NOT,
|
|
59
|
+
between: TokenType.BETWEEN,
|
|
60
|
+
and: TokenType.AND_KEYWORD,
|
|
61
|
+
orderBy: TokenType.ORDER_BY,
|
|
62
|
+
'order-by': TokenType.ORDER_BY,
|
|
63
|
+
limit: TokenType.LIMIT,
|
|
64
|
+
offset: TokenType.OFFSET,
|
|
65
|
+
asc: TokenType.ASC,
|
|
66
|
+
desc: TokenType.DESC,
|
|
67
|
+
isNull: TokenType.IS_NULL,
|
|
68
|
+
isNotNull: TokenType.IS_NOT_NULL,
|
|
69
|
+
};
|
|
29
70
|
/**
|
|
30
71
|
* Tokenizer for QAST query strings
|
|
31
72
|
*/
|
|
@@ -65,12 +106,12 @@ class Tokenizer {
|
|
|
65
106
|
return this.input[this.position + 1];
|
|
66
107
|
}
|
|
67
108
|
/**
|
|
68
|
-
* Read an identifier (field name)
|
|
109
|
+
* Read an identifier (field name, supports nested fields with dots)
|
|
69
110
|
*/
|
|
70
111
|
readIdentifier() {
|
|
71
112
|
const start = this.position;
|
|
72
113
|
while (this.currentChar !== null &&
|
|
73
|
-
(/\w/.test(this.currentChar) || this.currentChar === '_')) {
|
|
114
|
+
(/\w/.test(this.currentChar) || this.currentChar === '_' || this.currentChar === '.')) {
|
|
74
115
|
this.advance();
|
|
75
116
|
}
|
|
76
117
|
return this.input.substring(start, this.position);
|
|
@@ -239,22 +280,38 @@ class Tokenizer {
|
|
|
239
280
|
};
|
|
240
281
|
}
|
|
241
282
|
const position = this.position;
|
|
242
|
-
// Check for operators (
|
|
243
|
-
|
|
283
|
+
// Check for operators first (before keywords to avoid conflicts like "not" vs "notIn")
|
|
284
|
+
// Operators are checked first because they are more specific (longer matches)
|
|
285
|
+
const peekAhead = this.input.substring(this.position).toLowerCase();
|
|
244
286
|
for (const op of OPERATORS) {
|
|
245
|
-
|
|
246
|
-
|
|
287
|
+
const opLower = op.toLowerCase();
|
|
288
|
+
if (peekAhead.startsWith(opLower) && !/\w/.test(peekAhead[opLower.length] ?? '')) {
|
|
289
|
+
// Advance by the actual operator length in the input (case-insensitive match)
|
|
290
|
+
this.position += opLower.length;
|
|
247
291
|
this.currentChar = this.position < this.input.length ? this.input[this.position] : null;
|
|
248
292
|
return {
|
|
249
293
|
type: TokenType.OPERATOR,
|
|
250
|
-
value: op,
|
|
294
|
+
value: op, // Return the canonical operator name from OPERATORS array
|
|
295
|
+
position,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Check for keywords (after operators to avoid conflicts)
|
|
300
|
+
for (const [keyword, tokenType] of Object.entries(KEYWORDS)) {
|
|
301
|
+
const keywordLower = keyword.toLowerCase();
|
|
302
|
+
if (peekAhead.startsWith(keywordLower) && !/\w/.test(this.input[this.position + keywordLower.length] ?? '')) {
|
|
303
|
+
this.position += keywordLower.length;
|
|
304
|
+
this.currentChar = this.position < this.input.length ? this.input[this.position] : null;
|
|
305
|
+
return {
|
|
306
|
+
type: tokenType,
|
|
307
|
+
value: keyword,
|
|
251
308
|
position,
|
|
252
309
|
};
|
|
253
310
|
}
|
|
254
311
|
}
|
|
255
312
|
// Check for logical operators
|
|
256
313
|
for (const logicalOp of LOGICAL_OPS) {
|
|
257
|
-
if (peekAhead.
|
|
314
|
+
if (peekAhead.startsWith(logicalOp) && !/\w/.test(peekAhead[logicalOp.length] ?? '')) {
|
|
258
315
|
this.position += logicalOp.length;
|
|
259
316
|
this.currentChar = this.position < this.input.length ? this.input[this.position] : null;
|
|
260
317
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/parser/tokenizer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/parser/tokenizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,43 @@ export declare function extractFields(ast: QastNode): string[];
|
|
|
15
15
|
* Extract all operators used in an AST
|
|
16
16
|
*/
|
|
17
17
|
export declare function extractOperators(ast: QastNode): Operator[];
|
|
18
|
+
/**
|
|
19
|
+
* Sanitize field name to prevent injection attacks
|
|
20
|
+
*/
|
|
21
|
+
export declare function sanitizeFieldName(field: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Query cost estimation
|
|
24
|
+
*/
|
|
25
|
+
export interface QueryCost {
|
|
26
|
+
estimatedComplexity: number;
|
|
27
|
+
depth: number;
|
|
28
|
+
nodeCount: number;
|
|
29
|
+
fieldCount: number;
|
|
30
|
+
operatorCount: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Estimate query cost for rate limiting and resource management
|
|
34
|
+
*/
|
|
35
|
+
export declare function estimateQueryCost(ast: QastNode): QueryCost;
|
|
36
|
+
/**
|
|
37
|
+
* Rate limiting helper - simple in-memory rate limiter
|
|
38
|
+
*/
|
|
39
|
+
export declare class RateLimiter {
|
|
40
|
+
private requests;
|
|
41
|
+
private windowMs;
|
|
42
|
+
private maxRequests;
|
|
43
|
+
constructor(maxRequests?: number, windowMs?: number);
|
|
44
|
+
/**
|
|
45
|
+
* Check if request is allowed
|
|
46
|
+
*/
|
|
47
|
+
isAllowed(identifier: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Reset rate limiter for an identifier
|
|
50
|
+
*/
|
|
51
|
+
reset(identifier: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Clear all rate limit data
|
|
54
|
+
*/
|
|
55
|
+
clear(): void;
|
|
56
|
+
}
|
|
18
57
|
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/parser/validator.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/parser/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAMR,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACT,MAAM,cAAc,CAAC;AAUtB;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAE9E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAmBvF;AAuKD;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,EAAE,CAIrD;AAoBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAI1D;AA8CD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,CAe1D;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAAY,EAAE,QAAQ,GAAE,MAAc;IAM/D;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAkBtC;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/parser/validator.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RateLimiter = void 0;
|
|
3
4
|
exports.validateQuery = validateQuery;
|
|
4
5
|
exports.validateQueryComplexity = validateQueryComplexity;
|
|
5
6
|
exports.extractFields = extractFields;
|
|
6
7
|
exports.extractOperators = extractOperators;
|
|
8
|
+
exports.sanitizeFieldName = sanitizeFieldName;
|
|
9
|
+
exports.estimateQueryCost = estimateQueryCost;
|
|
7
10
|
const errors_1 = require("../errors");
|
|
8
11
|
const ast_1 = require("../types/ast");
|
|
9
12
|
/**
|
|
@@ -59,6 +62,21 @@ function validateValueLimits(node, options) {
|
|
|
59
62
|
validateValueLimits(node.left, options);
|
|
60
63
|
validateValueLimits(node.right, options);
|
|
61
64
|
}
|
|
65
|
+
else if ((0, ast_1.isNotNode)(node)) {
|
|
66
|
+
validateValueLimits(node.operand, options);
|
|
67
|
+
}
|
|
68
|
+
else if ((0, ast_1.isBetweenNode)(node)) {
|
|
69
|
+
// Validate between values
|
|
70
|
+
if (options.maxStringLength !== undefined) {
|
|
71
|
+
if (typeof node.min === 'string' && node.min.length > options.maxStringLength) {
|
|
72
|
+
throw new errors_1.ValidationError(`String value for field '${node.field}' in between clause has ${node.min.length} characters - maximum allowed is ${options.maxStringLength}`, node.field);
|
|
73
|
+
}
|
|
74
|
+
if (typeof node.max === 'string' && node.max.length > options.maxStringLength) {
|
|
75
|
+
throw new errors_1.ValidationError(`String value for field '${node.field}' in between clause has ${node.max.length} characters - maximum allowed is ${options.maxStringLength}`, node.field);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// NullCheckNode has no values to validate
|
|
62
80
|
}
|
|
63
81
|
/**
|
|
64
82
|
* Recursively validate a node
|
|
@@ -70,6 +88,15 @@ function validateNode(node, whitelist) {
|
|
|
70
88
|
else if ((0, ast_1.isLogicalNode)(node)) {
|
|
71
89
|
validateLogicalNode(node, whitelist);
|
|
72
90
|
}
|
|
91
|
+
else if ((0, ast_1.isNotNode)(node)) {
|
|
92
|
+
validateNotNode(node, whitelist);
|
|
93
|
+
}
|
|
94
|
+
else if ((0, ast_1.isBetweenNode)(node)) {
|
|
95
|
+
validateBetweenNode(node, whitelist);
|
|
96
|
+
}
|
|
97
|
+
else if ((0, ast_1.isNullCheckNode)(node)) {
|
|
98
|
+
validateNullCheckNode(node, whitelist);
|
|
99
|
+
}
|
|
73
100
|
}
|
|
74
101
|
/**
|
|
75
102
|
* Validate a comparison node
|
|
@@ -88,10 +115,41 @@ function validateComparisonNode(node, whitelist) {
|
|
|
88
115
|
}
|
|
89
116
|
}
|
|
90
117
|
// Validate operator-value combination
|
|
91
|
-
if (node.op === 'in' && !Array.isArray(node.value)) {
|
|
92
|
-
throw new errors_1.ValidationError(`Operator '
|
|
118
|
+
if ((node.op === 'in' || node.op === 'notIn') && !Array.isArray(node.value)) {
|
|
119
|
+
throw new errors_1.ValidationError(`Operator '${node.op}' requires an array value, got ${typeof node.value}`, node.field, node.op);
|
|
93
120
|
}
|
|
94
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Validate a NOT node
|
|
124
|
+
*/
|
|
125
|
+
function validateNotNode(node, whitelist) {
|
|
126
|
+
validateNode(node.operand, whitelist);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Validate a BETWEEN node
|
|
130
|
+
*/
|
|
131
|
+
function validateBetweenNode(node, whitelist) {
|
|
132
|
+
// Validate field
|
|
133
|
+
if (whitelist.allowedFields && whitelist.allowedFields.length > 0) {
|
|
134
|
+
if (!whitelist.allowedFields.includes(node.field)) {
|
|
135
|
+
throw new errors_1.ValidationError(`Field '${node.field}' is not allowed. Allowed fields: ${whitelist.allowedFields.join(', ')}`, node.field);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Validate operator (between is always allowed if fields are allowed)
|
|
139
|
+
// No operator validation needed for between
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Validate a NULL_CHECK node
|
|
143
|
+
*/
|
|
144
|
+
function validateNullCheckNode(node, whitelist) {
|
|
145
|
+
// Validate field
|
|
146
|
+
if (whitelist.allowedFields && whitelist.allowedFields.length > 0) {
|
|
147
|
+
if (!whitelist.allowedFields.includes(node.field)) {
|
|
148
|
+
throw new errors_1.ValidationError(`Field '${node.field}' is not allowed. Allowed fields: ${whitelist.allowedFields.join(', ')}`, node.field);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// No operator validation needed for null checks
|
|
152
|
+
}
|
|
95
153
|
/**
|
|
96
154
|
* Validate a logical node
|
|
97
155
|
*/
|
|
@@ -119,6 +177,15 @@ function extractFieldsRecursive(node, fields) {
|
|
|
119
177
|
extractFieldsRecursive(node.left, fields);
|
|
120
178
|
extractFieldsRecursive(node.right, fields);
|
|
121
179
|
}
|
|
180
|
+
else if ((0, ast_1.isNotNode)(node)) {
|
|
181
|
+
extractFieldsRecursive(node.operand, fields);
|
|
182
|
+
}
|
|
183
|
+
else if ((0, ast_1.isBetweenNode)(node)) {
|
|
184
|
+
fields.push(node.field);
|
|
185
|
+
}
|
|
186
|
+
else if ((0, ast_1.isNullCheckNode)(node)) {
|
|
187
|
+
fields.push(node.field);
|
|
188
|
+
}
|
|
122
189
|
}
|
|
123
190
|
/**
|
|
124
191
|
* Extract all operators used in an AST
|
|
@@ -139,12 +206,16 @@ function extractOperatorsRecursive(node, operators) {
|
|
|
139
206
|
extractOperatorsRecursive(node.left, operators);
|
|
140
207
|
extractOperatorsRecursive(node.right, operators);
|
|
141
208
|
}
|
|
209
|
+
else if ((0, ast_1.isNotNode)(node)) {
|
|
210
|
+
extractOperatorsRecursive(node.operand, operators);
|
|
211
|
+
}
|
|
212
|
+
// BetweenNode and NullCheckNode don't have operators in the Operator type
|
|
142
213
|
}
|
|
143
214
|
/**
|
|
144
215
|
* Compute depth and node count for a query AST
|
|
145
216
|
*/
|
|
146
217
|
function computeComplexity(node) {
|
|
147
|
-
if ((0, ast_1.isComparisonNode)(node)) {
|
|
218
|
+
if ((0, ast_1.isComparisonNode)(node) || (0, ast_1.isBetweenNode)(node) || (0, ast_1.isNullCheckNode)(node)) {
|
|
148
219
|
return { depth: 1, nodes: 1 };
|
|
149
220
|
}
|
|
150
221
|
if ((0, ast_1.isLogicalNode)(node)) {
|
|
@@ -155,7 +226,77 @@ function computeComplexity(node) {
|
|
|
155
226
|
nodes: 1 + left.nodes + right.nodes,
|
|
156
227
|
};
|
|
157
228
|
}
|
|
229
|
+
if ((0, ast_1.isNotNode)(node)) {
|
|
230
|
+
const operand = computeComplexity(node.operand);
|
|
231
|
+
return {
|
|
232
|
+
depth: 1 + operand.depth,
|
|
233
|
+
nodes: 1 + operand.nodes,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
158
236
|
// Fallback (should not happen with current QastNode types)
|
|
159
237
|
return { depth: 1, nodes: 1 };
|
|
160
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Sanitize field name to prevent injection attacks
|
|
241
|
+
*/
|
|
242
|
+
function sanitizeFieldName(field) {
|
|
243
|
+
// Remove any characters that aren't alphanumeric, underscore, or dot (for nested fields)
|
|
244
|
+
return field.replace(/[^a-zA-Z0-9_.]/g, '');
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Estimate query cost for rate limiting and resource management
|
|
248
|
+
*/
|
|
249
|
+
function estimateQueryCost(ast) {
|
|
250
|
+
const stats = computeComplexity(ast);
|
|
251
|
+
const fields = extractFields(ast);
|
|
252
|
+
const operators = extractOperators(ast);
|
|
253
|
+
// Simple cost estimation: depth * nodes + field diversity penalty
|
|
254
|
+
const estimatedComplexity = stats.depth * stats.nodes + fields.length * 2;
|
|
255
|
+
return {
|
|
256
|
+
estimatedComplexity,
|
|
257
|
+
depth: stats.depth,
|
|
258
|
+
nodeCount: stats.nodes,
|
|
259
|
+
fieldCount: fields.length,
|
|
260
|
+
operatorCount: operators.length,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Rate limiting helper - simple in-memory rate limiter
|
|
265
|
+
*/
|
|
266
|
+
class RateLimiter {
|
|
267
|
+
constructor(maxRequests = 100, windowMs = 60000) {
|
|
268
|
+
this.requests = new Map();
|
|
269
|
+
this.windowMs = windowMs;
|
|
270
|
+
this.maxRequests = maxRequests;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Check if request is allowed
|
|
274
|
+
*/
|
|
275
|
+
isAllowed(identifier) {
|
|
276
|
+
const now = Date.now();
|
|
277
|
+
const userRequests = this.requests.get(identifier) || [];
|
|
278
|
+
// Remove old requests outside the window
|
|
279
|
+
const recentRequests = userRequests.filter(timestamp => now - timestamp < this.windowMs);
|
|
280
|
+
if (recentRequests.length >= this.maxRequests) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
// Add current request
|
|
284
|
+
recentRequests.push(now);
|
|
285
|
+
this.requests.set(identifier, recentRequests);
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Reset rate limiter for an identifier
|
|
290
|
+
*/
|
|
291
|
+
reset(identifier) {
|
|
292
|
+
this.requests.delete(identifier);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Clear all rate limit data
|
|
296
|
+
*/
|
|
297
|
+
clear() {
|
|
298
|
+
this.requests.clear();
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
exports.RateLimiter = RateLimiter;
|
|
161
302
|
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/parser/validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/parser/validator.ts"],"names":[],"mappings":"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"}
|
package/dist/types/ast.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Supported comparison operators
|
|
3
3
|
*/
|
|
4
|
-
export type Operator = 'eq' | 'ne' | 'gt' | 'lt' | 'gte' | 'lte' | 'in' | 'contains' | 'startsWith' | 'endsWith';
|
|
4
|
+
export type Operator = 'eq' | 'ne' | 'gt' | 'lt' | 'gte' | 'lte' | 'in' | 'notIn' | 'contains' | 'startsWith' | 'endsWith' | 'like' | 'regex' | 'matches';
|
|
5
5
|
/**
|
|
6
6
|
* Supported value types in comparisons
|
|
7
7
|
*/
|
|
@@ -10,6 +10,10 @@ export type QastValue = string | number | boolean | null | string[] | number[];
|
|
|
10
10
|
* Logical operator type
|
|
11
11
|
*/
|
|
12
12
|
export type LogicalOperator = 'AND' | 'OR';
|
|
13
|
+
/**
|
|
14
|
+
* Sort direction
|
|
15
|
+
*/
|
|
16
|
+
export type SortDirection = 'asc' | 'desc';
|
|
13
17
|
/**
|
|
14
18
|
* Comparison node representing a field comparison operation
|
|
15
19
|
*/
|
|
@@ -28,9 +32,49 @@ export interface LogicalNode {
|
|
|
28
32
|
right: QastNode;
|
|
29
33
|
}
|
|
30
34
|
/**
|
|
31
|
-
*
|
|
35
|
+
* NOT node representing a logical NOT operation
|
|
36
|
+
*/
|
|
37
|
+
export interface NotNode {
|
|
38
|
+
type: 'NOT';
|
|
39
|
+
operand: QastNode;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Between node representing a range comparison
|
|
43
|
+
*/
|
|
44
|
+
export interface BetweenNode {
|
|
45
|
+
type: 'BETWEEN';
|
|
46
|
+
field: string;
|
|
47
|
+
min: number | string;
|
|
48
|
+
max: number | string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Null check node representing isNull or isNotNull operations
|
|
52
|
+
*/
|
|
53
|
+
export interface NullCheckNode {
|
|
54
|
+
type: 'NULL_CHECK';
|
|
55
|
+
field: string;
|
|
56
|
+
isNull: boolean;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Order by specification
|
|
32
60
|
*/
|
|
33
|
-
export
|
|
61
|
+
export interface OrderByClause {
|
|
62
|
+
field: string;
|
|
63
|
+
direction: SortDirection;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Root AST node type - can be a comparison, logical operation, NOT, BETWEEN, or NULL_CHECK
|
|
67
|
+
*/
|
|
68
|
+
export type QastNode = LogicalNode | ComparisonNode | NotNode | BetweenNode | NullCheckNode;
|
|
69
|
+
/**
|
|
70
|
+
* Complete query AST with filter, sorting, and pagination
|
|
71
|
+
*/
|
|
72
|
+
export interface QueryAST {
|
|
73
|
+
filter: QastNode;
|
|
74
|
+
orderBy?: OrderByClause[];
|
|
75
|
+
limit?: number;
|
|
76
|
+
offset?: number;
|
|
77
|
+
}
|
|
34
78
|
/**
|
|
35
79
|
* Type guard to check if a node is a ComparisonNode
|
|
36
80
|
*/
|
|
@@ -39,6 +83,18 @@ export declare function isComparisonNode(node: QastNode): node is ComparisonNode
|
|
|
39
83
|
* Type guard to check if a node is a LogicalNode
|
|
40
84
|
*/
|
|
41
85
|
export declare function isLogicalNode(node: QastNode): node is LogicalNode;
|
|
86
|
+
/**
|
|
87
|
+
* Type guard to check if a node is a NotNode
|
|
88
|
+
*/
|
|
89
|
+
export declare function isNotNode(node: QastNode): node is NotNode;
|
|
90
|
+
/**
|
|
91
|
+
* Type guard to check if a node is a BetweenNode
|
|
92
|
+
*/
|
|
93
|
+
export declare function isBetweenNode(node: QastNode): node is BetweenNode;
|
|
94
|
+
/**
|
|
95
|
+
* Type guard to check if a node is a NullCheckNode
|
|
96
|
+
*/
|
|
97
|
+
export declare function isNullCheckNode(node: QastNode): node is NullCheckNode;
|
|
42
98
|
/**
|
|
43
99
|
* Options for parsing queries
|
|
44
100
|
*/
|
package/dist/types/ast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/types/ast.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/types/ast.ts"],"names":[],"mappings":"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"}
|
package/dist/types/ast.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isComparisonNode = isComparisonNode;
|
|
4
4
|
exports.isLogicalNode = isLogicalNode;
|
|
5
|
+
exports.isNotNode = isNotNode;
|
|
6
|
+
exports.isBetweenNode = isBetweenNode;
|
|
7
|
+
exports.isNullCheckNode = isNullCheckNode;
|
|
5
8
|
/**
|
|
6
9
|
* Type guard to check if a node is a ComparisonNode
|
|
7
10
|
*/
|
|
@@ -14,4 +17,22 @@ function isComparisonNode(node) {
|
|
|
14
17
|
function isLogicalNode(node) {
|
|
15
18
|
return node.type === 'AND' || node.type === 'OR';
|
|
16
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Type guard to check if a node is a NotNode
|
|
22
|
+
*/
|
|
23
|
+
function isNotNode(node) {
|
|
24
|
+
return node.type === 'NOT';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Type guard to check if a node is a BetweenNode
|
|
28
|
+
*/
|
|
29
|
+
function isBetweenNode(node) {
|
|
30
|
+
return node.type === 'BETWEEN';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Type guard to check if a node is a NullCheckNode
|
|
34
|
+
*/
|
|
35
|
+
function isNullCheckNode(node) {
|
|
36
|
+
return node.type === 'NULL_CHECK';
|
|
37
|
+
}
|
|
17
38
|
//# sourceMappingURL=ast.js.map
|
package/dist/types/ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/types/ast.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/types/ast.ts"],"names":[],"mappings":";;AA0GA,4CAEC;AAKD,sCAEC;AAKD,8BAEC;AAKD,sCAEC;AAKD,0CAEC;AAjCD;;GAEG;AACH,SAAgB,gBAAgB,CAAC,IAAc;IAC7C,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,IAAc;IAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,IAAc;IACtC,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,IAAc;IAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,IAAc;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { QastNode } from '../types/ast';
|
|
2
|
+
/**
|
|
3
|
+
* Deep clone an AST node
|
|
4
|
+
*/
|
|
5
|
+
export declare function cloneAST(node: QastNode): QastNode;
|
|
6
|
+
/**
|
|
7
|
+
* Merge two queries with a logical operator
|
|
8
|
+
*/
|
|
9
|
+
export declare function mergeQueries(left: QastNode, right: QastNode, op: 'AND' | 'OR'): QastNode;
|
|
10
|
+
/**
|
|
11
|
+
* Query statistics
|
|
12
|
+
*/
|
|
13
|
+
export interface QueryStats {
|
|
14
|
+
depth: number;
|
|
15
|
+
nodeCount: number;
|
|
16
|
+
comparisonCount: number;
|
|
17
|
+
logicalCount: number;
|
|
18
|
+
notCount: number;
|
|
19
|
+
betweenCount: number;
|
|
20
|
+
nullCheckCount: number;
|
|
21
|
+
fields: string[];
|
|
22
|
+
operators: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get statistics about a query AST
|
|
26
|
+
*/
|
|
27
|
+
export declare function getQueryStats(node: QastNode): QueryStats;
|
|
28
|
+
/**
|
|
29
|
+
* Query difference result
|
|
30
|
+
*/
|
|
31
|
+
export interface QueryDiff {
|
|
32
|
+
identical: boolean;
|
|
33
|
+
differences: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Compare two queries and return differences
|
|
37
|
+
*/
|
|
38
|
+
export declare function diffQueries(left: QastNode, right: QastNode): QueryDiff;
|
|
39
|
+
/**
|
|
40
|
+
* Optimize an AST by simplifying redundant expressions
|
|
41
|
+
*/
|
|
42
|
+
export declare function optimizeAST(node: QastNode): QastNode;
|
|
43
|
+
//# sourceMappingURL=ast-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-utils.d.ts","sourceRoot":"","sources":["../../src/utils/ast-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAkCjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,EACf,EAAE,EAAE,KAAK,GAAG,IAAI,GACf,QAAQ,CAMV;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CA+CxD;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,SAAS,CA8CtE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CA6CpD"}
|