@decaf-ts/core 0.5.27 → 0.5.29

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.
@@ -0,0 +1,155 @@
1
+ import { QueryAssist } from "./types";
2
+ /**
3
+ * @description
4
+ * Utility class to build query objects from repository method names.
5
+ *
6
+ * @summary
7
+ * The `MethodQueryBuilder` class parses method names that follow a specific naming convention
8
+ * (e.g., `findByNameAndAgeOrderByCountryAsc`) and converts them into structured query objects
9
+ * (`QueryAssist`). It extracts clauses such as `select`, `where`, `groupBy`, `orderBy`, `limit`,
10
+ * and `offset`, ensuring that developers can declare repository queries using expressive method names.
11
+ *
12
+ * @param methodName {string} - The repository method name to parse and convert into a query.
13
+ * @param values {any[]} - The values corresponding to method parameters used for query conditions.
14
+ *
15
+ * @return {QueryAssist} A structured query object describing the parsed action, select, where,
16
+ * groupBy, orderBy, limit, and offset clauses.
17
+ *
18
+ * @class
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const query = MethodQueryBuilder.build(
23
+ * "findByNameAndAgeOrderByCountryAsc",
24
+ * "John",
25
+ * 25,
26
+ * [["country", "ASC"]]
27
+ * );
28
+ *
29
+ * console.log(query);
30
+ * // {
31
+ * // action: "find",
32
+ * // select: undefined,
33
+ * // where: { ... },
34
+ * // groupBy: undefined,
35
+ * // orderBy: [["country", "ASC"]],
36
+ * // limit: undefined,
37
+ * // offset: undefined
38
+ * // }
39
+ * ```
40
+ *
41
+ * @mermaid
42
+ * sequenceDiagram
43
+ * participant Repo as Repository Method
44
+ * participant MQB as MethodQueryBuilder
45
+ * participant Query as QueryAssist
46
+ *
47
+ * Repo->>MQB: build(methodName, ...values)
48
+ * MQB->>MQB: extractCore(methodName)
49
+ * MQB->>MQB: extractSelect(methodName)
50
+ * MQB->>MQB: extractGroupBy(methodName)
51
+ * MQB->>MQB: buildWhere(core, values)
52
+ * MQB->>MQB: extractOrderLimitOffset(core, values)
53
+ * MQB->>Query: return structured QueryAssist object
54
+ */
55
+ export declare class MethodQueryBuilder {
56
+ /**
57
+ * @description
58
+ * Builds a `QueryAssist` object by parsing a repository method name and values.
59
+ *
60
+ * @summary
61
+ * The method validates the method name, extracts clauses (core, select, groupBy, where,
62
+ * orderBy, limit, and offset), and assembles them into a structured query object
63
+ * that can be executed against a data source.
64
+ *
65
+ * @param methodName {string} - The repository method name that encodes query information.
66
+ * @param values {any[]} - The values corresponding to conditions and extra clauses.
67
+ *
68
+ * @return {QueryAssist} A structured query object representing the parsed query.
69
+ */
70
+ static build(methodName: string, ...values: any[]): QueryAssist;
71
+ /**
72
+ * @description
73
+ * Extracts the core part of the method name after `findBy` and before any special clauses.
74
+ *
75
+ * @summary
76
+ * Removes prefixes and detects delimiters (`Then`, `OrderBy`, `GroupBy`, `Limit`, `Offset`)
77
+ * to isolate the main conditional part of the query.
78
+ *
79
+ * @param methodName {string} - The method name to parse.
80
+ *
81
+ * @return {string} The extracted core string used for building conditions.
82
+ */
83
+ private static extractCore;
84
+ /**
85
+ * @description
86
+ * Extracts the select clause from a method name.
87
+ *
88
+ * @summary
89
+ * Detects the `Select` keyword in the method name, isolates the fields following it,
90
+ * and returns them as an array of lowercase-first strings.
91
+ *
92
+ * @param methodName {string} - The method name to parse.
93
+ *
94
+ * @return {string[] | undefined} An array of selected fields or `undefined` if no select clause exists.
95
+ */
96
+ private static extractSelect;
97
+ /**
98
+ * @description
99
+ * Extracts the group by clause from a method name.
100
+ *
101
+ * @summary
102
+ * Detects the `GroupBy` keyword in the method name, isolates the fields following it,
103
+ * and returns them as an array of lowercase-first strings.
104
+ *
105
+ * @param methodName {string} - The method name to parse.
106
+ *
107
+ * @return {string[] | undefined} An array of group by fields or `undefined` if no group by clause exists.
108
+ */
109
+ private static extractGroupBy;
110
+ /**
111
+ * @description
112
+ * Builds the `where` condition object based on the parsed core string and parameter values.
113
+ *
114
+ * @summary
115
+ * Splits the core string by logical operators (`And`, `Or`), parses each token into a field
116
+ * and operator, and combines them into a `Condition` object using the provided values.
117
+ *
118
+ * @param core {string} - The extracted core string from the method name.
119
+ * @param values {any[]} - The values corresponding to the conditions.
120
+ *
121
+ * @return {Condition<any>} A structured condition object representing the query's where clause.
122
+ */
123
+ private static buildWhere;
124
+ /**
125
+ * @description
126
+ * Parses a field name and operator from a string token.
127
+ *
128
+ * @summary
129
+ * Identifies the operator suffix (if present) and returns a descriptor containing the field
130
+ * name in lowercase-first format along with the operator.
131
+ *
132
+ * @param str {string} - The token string to parse.
133
+ *
134
+ * @return {FilterDescriptor} An object containing the field name and operator.
135
+ */
136
+ private static parseFieldAndOperator;
137
+ /**
138
+ * @description
139
+ * Extracts `orderBy`, `limit`, and `offset` clauses from method arguments.
140
+ *
141
+ * @summary
142
+ * Determines the number of condition arguments, then checks the remaining arguments
143
+ * to resolve sorting, limiting, and pagination.
144
+ *
145
+ * @param core {string} - The extracted core string from the method name.
146
+ * @param values {any[]} - The values corresponding to method arguments, including conditions and extras.
147
+ *
148
+ * @return {{
149
+ * orderBy?: OrderBySelector<any>[];
150
+ * limit?: number;
151
+ * offset?: number;
152
+ * }} An object containing orderBy, limit, and offset values if present.
153
+ */
154
+ private static extractOrderLimitOffset;
155
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.query = query;
4
+ const MethodQueryBuilder_1 = require("./MethodQueryBuilder.cjs");
5
+ const errors_1 = require("./errors.cjs");
6
+ function query(options = {}) {
7
+ return (target, propertyKey, descriptor) => {
8
+ // const originalMethod = descriptor.value;
9
+ const methodName = propertyKey.toString();
10
+ descriptor.value = function (...args) {
11
+ const { select, where, groupBy, orderBy, limit, offset } = MethodQueryBuilder_1.MethodQueryBuilder.build(methodName, ...args);
12
+ let stmt = this.select(select);
13
+ if (where)
14
+ stmt = stmt.where(where);
15
+ // if (orderBy) stmt = stmt.orderBy(orderBy[0]);
16
+ if (groupBy) {
17
+ // group by not implemented yet
18
+ /* stmt = stmt.groupBy(groupBy); */
19
+ }
20
+ // allow limit and offset by default
21
+ const { allowLimit, allowOffset, allowOrderBy, throws } = {
22
+ allowLimit: true,
23
+ allowOrderBy: true,
24
+ allowOffset: true,
25
+ throws: true,
26
+ ...options,
27
+ };
28
+ const params = [
29
+ // keep the order to ensure the expected behavior
30
+ { key: "orderBy", value: (orderBy || [])[0], allowed: allowOrderBy }, // orderBy only supports one sentence
31
+ { key: "limit", value: limit, allowed: allowLimit },
32
+ { key: "offset", value: offset, allowed: allowOffset },
33
+ ];
34
+ for (const param of params) {
35
+ if (param.value !== undefined) {
36
+ if (!param.allowed && throws) {
37
+ throw new errors_1.QueryError(`${param.key[0].toUpperCase() + param.key.slice(1)} is not allowed for this query`);
38
+ }
39
+ else if (param.allowed) {
40
+ stmt = stmt[param.key](param.value);
41
+ }
42
+ }
43
+ }
44
+ return stmt.execute();
45
+ };
46
+ };
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsc0JBbURDO0FBdERELGlFQUEwRDtBQUMxRCx5Q0FBc0M7QUFFdEMsU0FBZ0IsS0FBSyxDQUFDLFVBQXdCLEVBQUU7SUFDOUMsT0FBTyxDQUNMLE1BQWMsRUFDZCxXQUE0QixFQUM1QixVQUF3QyxFQUNILEVBQUU7UUFDdkMsMkNBQTJDO1FBQzNDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxJQUFXO1lBQ3pDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUN0RCx1Q0FBa0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFaEQsSUFBSSxJQUFJLEdBQUksSUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQVEsQ0FBQztZQUMvQyxJQUFJLEtBQUs7Z0JBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsZ0RBQWdEO1lBQ2hELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osK0JBQStCO2dCQUMvQixtQ0FBbUM7WUFDckMsQ0FBQztZQUVELG9DQUFvQztZQUNwQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUc7Z0JBQ3hELFVBQVUsRUFBRSxJQUFJO2dCQUNoQixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLEdBQUcsT0FBTzthQUNLLENBQUM7WUFFbEIsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsaURBQWlEO2dCQUNqRCxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxxQ0FBcUM7Z0JBQzNHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7Z0JBQ25ELEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUU7YUFDdkQsQ0FBQztZQUVGLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzNCLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQzdCLE1BQU0sSUFBSSxtQkFBVSxDQUNsQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUNuRixDQUFDO29CQUNKLENBQUM7eUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3pCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeU9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTWV0aG9kUXVlcnlCdWlsZGVyIH0gZnJvbSBcIi4vTWV0aG9kUXVlcnlCdWlsZGVyXCI7XG5pbXBvcnQgeyBRdWVyeUVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeShvcHRpb25zOiBRdWVyeU9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gKFxuICAgIHRhcmdldDogb2JqZWN0LFxuICAgIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wsXG4gICAgZGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55PlxuICApOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+IHwgdm9pZCA9PiB7XG4gICAgLy8gY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleS50b1N0cmluZygpO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0LCB3aGVyZSwgZ3JvdXBCeSwgb3JkZXJCeSwgbGltaXQsIG9mZnNldCB9ID1cbiAgICAgICAgTWV0aG9kUXVlcnlCdWlsZGVyLmJ1aWxkKG1ldGhvZE5hbWUsIC4uLmFyZ3MpO1xuXG4gICAgICBsZXQgc3RtdCA9ICh0aGlzIGFzIGFueSkuc2VsZWN0KHNlbGVjdCkgYXMgYW55O1xuICAgICAgaWYgKHdoZXJlKSBzdG10ID0gc3RtdC53aGVyZSh3aGVyZSk7XG4gICAgICAvLyBpZiAob3JkZXJCeSkgc3RtdCA9IHN0bXQub3JkZXJCeShvcmRlckJ5WzBdKTtcbiAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgIC8vIGdyb3VwIGJ5IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiAgICAgICAgLyogc3RtdCA9IHN0bXQuZ3JvdXBCeShncm91cEJ5KTsgKi9cbiAgICAgIH1cblxuICAgICAgLy8gYWxsb3cgbGltaXQgYW5kIG9mZnNldCBieSBkZWZhdWx0XG4gICAgICBjb25zdCB7IGFsbG93TGltaXQsIGFsbG93T2Zmc2V0LCBhbGxvd09yZGVyQnksIHRocm93cyB9ID0ge1xuICAgICAgICBhbGxvd0xpbWl0OiB0cnVlLFxuICAgICAgICBhbGxvd09yZGVyQnk6IHRydWUsXG4gICAgICAgIGFsbG93T2Zmc2V0OiB0cnVlLFxuICAgICAgICB0aHJvd3M6IHRydWUsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9IGFzIFF1ZXJ5T3B0aW9ucztcblxuICAgICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgICAvLyBrZWVwIHRoZSBvcmRlciB0byBlbnN1cmUgdGhlIGV4cGVjdGVkIGJlaGF2aW9yXG4gICAgICAgIHsga2V5OiBcIm9yZGVyQnlcIiwgdmFsdWU6IChvcmRlckJ5IHx8IFtdKVswXSwgYWxsb3dlZDogYWxsb3dPcmRlckJ5IH0sIC8vIG9yZGVyQnkgb25seSBzdXBwb3J0cyBvbmUgc2VudGVuY2VcbiAgICAgICAgeyBrZXk6IFwibGltaXRcIiwgdmFsdWU6IGxpbWl0LCBhbGxvd2VkOiBhbGxvd0xpbWl0IH0sXG4gICAgICAgIHsga2V5OiBcIm9mZnNldFwiLCB2YWx1ZTogb2Zmc2V0LCBhbGxvd2VkOiBhbGxvd09mZnNldCB9LFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbXMpIHtcbiAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoIXBhcmFtLmFsbG93ZWQgJiYgdGhyb3dzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICAgICAgYCR7cGFyYW0ua2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBwYXJhbS5rZXkuc2xpY2UoMSl9IGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHF1ZXJ5YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLmFsbG93ZWQpIHtcbiAgICAgICAgICAgIHN0bXQgPSBzdG10W3BhcmFtLmtleV0ocGFyYW0udmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RtdC5leGVjdXRlKCk7XG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import { QueryOptions } from "./types";
2
+ export declare function query(options?: QueryOptions): (target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<any>) => TypedPropertyDescriptor<any> | void;
@@ -21,4 +21,8 @@ __exportStar(require("./options.cjs"), exports);
21
21
  __exportStar(require("./Paginator.cjs"), exports);
22
22
  __exportStar(require("./selectors.cjs"), exports);
23
23
  __exportStar(require("./Statement.cjs"), exports);
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVlcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUE0QjtBQUM1QixrREFBNEI7QUFDNUIsK0NBQXlCO0FBQ3pCLGdEQUEwQjtBQUMxQixrREFBNEI7QUFDNUIsa0RBQTRCO0FBQzVCLGtEQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0NvbmRpdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29wdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1BhZ2luYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2VsZWN0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TdGF0ZW1lbnRcIjtcbiJdfQ==
24
+ __exportStar(require("./decorators.cjs"), exports);
25
+ __exportStar(require("./MethodQueryBuilder.cjs"), exports);
26
+ __exportStar(require("./types.cjs"), exports);
27
+ __exportStar(require("./utils.cjs"), exports);
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVlcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUE0QjtBQUM1QixrREFBNEI7QUFDNUIsK0NBQXlCO0FBQ3pCLGdEQUEwQjtBQUMxQixrREFBNEI7QUFDNUIsa0RBQTRCO0FBQzVCLGtEQUE0QjtBQUM1QixtREFBNkI7QUFDN0IsMkRBQXFDO0FBQ3JDLDhDQUF3QjtBQUN4Qiw4Q0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9Db25kaXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vcHRpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9QYWdpbmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vU3RhdGVtZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9NZXRob2RRdWVyeUJ1aWxkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuIl19
@@ -5,3 +5,7 @@ export * from "./options";
5
5
  export * from "./Paginator";
6
6
  export * from "./selectors";
7
7
  export * from "./Statement";
8
+ export * from "./decorators";
9
+ export * from "./MethodQueryBuilder";
10
+ export * from "./types";
11
+ export * from "./utils";
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryClause = void 0;
4
+ /**
5
+ * @description
6
+ * Enumeration of supported query clauses for building method-based queries.
7
+ *
8
+ * @summary
9
+ * The `QueryClause` enum defines string literals that represent
10
+ * different segments of a query (e.g., `findBy`, `Select`, `And`, `Or`).
11
+ *
12
+ * @enum QueryClause
13
+ * @memberOf module:query
14
+ */
15
+ var QueryClause;
16
+ (function (QueryClause) {
17
+ QueryClause["FIND_BY"] = "findBy";
18
+ QueryClause["SELECT"] = "Select";
19
+ QueryClause["AND"] = "And";
20
+ QueryClause["OR"] = "Or";
21
+ QueryClause["GROUP_BY"] = "GroupBy";
22
+ QueryClause["ORDER_BY"] = "OrderBy";
23
+ QueryClause["THEN"] = "Then";
24
+ QueryClause["THEN_BY"] = "ThenBy";
25
+ })(QueryClause || (exports.QueryClause = QueryClause = {}));
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVlcnkvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkNBOzs7Ozs7Ozs7O0dBVUc7QUFDSCxJQUFZLFdBU1g7QUFURCxXQUFZLFdBQVc7SUFDckIsaUNBQWtCLENBQUE7SUFDbEIsZ0NBQWlCLENBQUE7SUFDakIsMEJBQVcsQ0FBQTtJQUNYLHdCQUFTLENBQUE7SUFDVCxtQ0FBb0IsQ0FBQTtJQUNwQixtQ0FBb0IsQ0FBQTtJQUNwQiw0QkFBYSxDQUFBO0lBQ2IsaUNBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQVRXLFdBQVcsMkJBQVgsV0FBVyxRQVN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCIuL0NvbmRpdGlvblwiO1xuaW1wb3J0IHsgT3JkZXJCeVNlbGVjdG9yIH0gZnJvbSBcIi4vc2VsZWN0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBxdWVyeSBidWlsZGluZyBiZWhhdmlvci5cbiAqXG4gKiBAc3VtbWFyeVxuICogVGhlIGBRdWVyeU9wdGlvbnNgIHR5cGUgZGVmaW5lcyBmbGFncyB0aGF0IGRldGVybWluZSB3aGV0aGVyIGNlcnRhaW4gY2xhdXNlc1xuICogKGxpbWl0LCBvZmZzZXQsIG9yZGVyIGJ5KSBhcmUgcGVybWl0dGVkLCBhcyB3ZWxsIGFzIHdoZXRoZXIgdmlvbGF0aW9uc1xuICogc2hvdWxkIHRocm93IGFuIGVycm9yIGR1cmluZyBxdWVyeSBjb25zdHJ1Y3Rpb24uXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpxdWVyeVxuICovXG5leHBvcnQgdHlwZSBRdWVyeU9wdGlvbnMgPSB7XG4gIGFsbG93TGltaXQ/OiBib29sZWFuO1xuICBhbGxvd09mZnNldD86IGJvb2xlYW47XG4gIGFsbG93T3JkZXJCeT86IGJvb2xlYW47XG4gIHRocm93cz86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogU3RydWN0dXJlZCBxdWVyeSBvYmplY3QgcmVwcmVzZW50aW5nIHBhcnNlZCBxdWVyeSBjbGF1c2VzLlxuICpcbiAqIEBzdW1tYXJ5XG4gKiBUaGUgYFF1ZXJ5QXNzaXN0YCBpbnRlcmZhY2UgZGVmaW5lcyB0aGUgc3RhbmRhcmQgc3RydWN0dXJlIHJldHVybmVkXG4gKiBieSBxdWVyeSBidWlsZGVycy4gSXQgaW5jbHVkZXMgYWN0aW9ucyBzdWNoIGFzIGZpbmQsIG9wdGlvbmFsIGNsYXVzZXNcbiAqIGxpa2Ugc2VsZWN0LCBncm91cEJ5LCBhbmQgb3JkZXJCeSwgYW5kIHBhZ2luYXRpb24gY29udHJvbHMgKGxpbWl0LCBvZmZzZXQpLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSBlbnRpdHkgb3IgcmVjb3JkIHR5cGUgdGhhdCBjb25kaXRpb25zIG1heSBhcHBseSB0by5cbiAqXG4gKiBAaW50ZXJmYWNlIFF1ZXJ5QXNzaXN0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnF1ZXJ5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlBc3Npc3Qge1xuICBhY3Rpb246IFwiZmluZFwiO1xuICBzZWxlY3Q6IHVuZGVmaW5lZCB8IHN0cmluZ1tdO1xuICB3aGVyZTogQ29uZGl0aW9uPGFueT47XG4gIGdyb3VwQnk/OiBzdHJpbmdbXTtcbiAgb3JkZXJCeT86IE9yZGVyQnlTZWxlY3Rvcjxhbnk+W107XG4gIGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIG9mZnNldDogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogRW51bWVyYXRpb24gb2Ygc3VwcG9ydGVkIHF1ZXJ5IGNsYXVzZXMgZm9yIGJ1aWxkaW5nIG1ldGhvZC1iYXNlZCBxdWVyaWVzLlxuICpcbiAqIEBzdW1tYXJ5XG4gKiBUaGUgYFF1ZXJ5Q2xhdXNlYCBlbnVtIGRlZmluZXMgc3RyaW5nIGxpdGVyYWxzIHRoYXQgcmVwcmVzZW50XG4gKiBkaWZmZXJlbnQgc2VnbWVudHMgb2YgYSBxdWVyeSAoZS5nLiwgYGZpbmRCeWAsIGBTZWxlY3RgLCBgQW5kYCwgYE9yYCkuXG4gKlxuICogQGVudW0gUXVlcnlDbGF1c2VcbiAqIEBtZW1iZXJPZiBtb2R1bGU6cXVlcnlcbiAqL1xuZXhwb3J0IGVudW0gUXVlcnlDbGF1c2Uge1xuICBGSU5EX0JZID0gXCJmaW5kQnlcIixcbiAgU0VMRUNUID0gXCJTZWxlY3RcIixcbiAgQU5EID0gXCJBbmRcIixcbiAgT1IgPSBcIk9yXCIsXG4gIEdST1VQX0JZID0gXCJHcm91cEJ5XCIsXG4gIE9SREVSX0JZID0gXCJPcmRlckJ5XCIsXG4gIFRIRU4gPSBcIlRoZW5cIixcbiAgVEhFTl9CWSA9IFwiVGhlbkJ5XCIsXG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBGdW5jdGlvbiBzaWduYXR1cmUgZm9yIHBhcnNpbmcgb3BlcmF0b3JzIGluIHF1ZXJ5IGJ1aWxkaW5nLlxuICpcbiAqIEBzdW1tYXJ5XG4gKiBUaGUgYE9wZXJhdG9yUGFyc2VyYCB0eXBlIHJlcHJlc2VudHMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZmllbGQgbmFtZVxuICogYW5kIGFyZ3VtZW50cywgdGhlbiBwcm9kdWNlcyBhIGBDb25kaXRpb25gIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGluIGEgcXVlcnkuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdGhlIGNvbmRpdGlvbiByZXN1bHQuXG4gKlxuICogQHBhcmFtIGZpZWxkIHtzdHJpbmd9IC0gVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGJlaW5nIHBhcnNlZC5cbiAqIEBwYXJhbSBhcmdzIHthbnlbXX0gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3Igb3BlcmF0b3IgZXZhbHVhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtDb25kaXRpb248YW55Pn0gQSBjb25kaXRpb24gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIG9wZXJhdG9yLlxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6cXVlcnlcbiAqL1xuZXhwb3J0IHR5cGUgT3BlcmF0b3JQYXJzZXIgPSAoZmllbGQ6IHN0cmluZywgLi4uYXJnczogYW55KSA9PiBDb25kaXRpb248YW55PjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIERlc2NyaXB0b3IgZm9yIGZpZWxkcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBvcGVyYXRvcnMgaW4gcXVlcnkgcGFyc2luZy5cbiAqXG4gKiBAc3VtbWFyeVxuICogVGhlIGBGaWx0ZXJEZXNjcmlwdG9yYCBpbnRlcmZhY2UgZGVmaW5lcyB0aGUgc3RydWN0dXJlIHVzZWQgd2hlbiBwYXJzaW5nXG4gKiBtZXRob2Qgc2VnbWVudHMgaW50byBmaWx0ZXJhYmxlIGZpZWxkcyBhbmQgYXNzb2NpYXRlZCBvcGVyYXRvcnMuXG4gKlxuICogQGludGVyZmFjZSBGaWx0ZXJEZXNjcmlwdG9yXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnF1ZXJ5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyRGVzY3JpcHRvciB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG9wZXJhdG9yPzogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,96 @@
1
+ import { Condition } from "./Condition";
2
+ import { OrderBySelector } from "./selectors";
3
+ /**
4
+ * @description
5
+ * Options for configuring query building behavior.
6
+ *
7
+ * @summary
8
+ * The `QueryOptions` type defines flags that determine whether certain clauses
9
+ * (limit, offset, order by) are permitted, as well as whether violations
10
+ * should throw an error during query construction.
11
+ *
12
+ * @memberOf module:query
13
+ */
14
+ export type QueryOptions = {
15
+ allowLimit?: boolean;
16
+ allowOffset?: boolean;
17
+ allowOrderBy?: boolean;
18
+ throws?: boolean;
19
+ };
20
+ /**
21
+ * @description
22
+ * Structured query object representing parsed query clauses.
23
+ *
24
+ * @summary
25
+ * The `QueryAssist` interface defines the standard structure returned
26
+ * by query builders. It includes actions such as find, optional clauses
27
+ * like select, groupBy, and orderBy, and pagination controls (limit, offset).
28
+ *
29
+ * @template T The entity or record type that conditions may apply to.
30
+ *
31
+ * @interface QueryAssist
32
+ * @memberOf module:query
33
+ */
34
+ export interface QueryAssist {
35
+ action: "find";
36
+ select: undefined | string[];
37
+ where: Condition<any>;
38
+ groupBy?: string[];
39
+ orderBy?: OrderBySelector<any>[];
40
+ limit: number | undefined;
41
+ offset: number | undefined;
42
+ }
43
+ /**
44
+ * @description
45
+ * Enumeration of supported query clauses for building method-based queries.
46
+ *
47
+ * @summary
48
+ * The `QueryClause` enum defines string literals that represent
49
+ * different segments of a query (e.g., `findBy`, `Select`, `And`, `Or`).
50
+ *
51
+ * @enum QueryClause
52
+ * @memberOf module:query
53
+ */
54
+ export declare enum QueryClause {
55
+ FIND_BY = "findBy",
56
+ SELECT = "Select",
57
+ AND = "And",
58
+ OR = "Or",
59
+ GROUP_BY = "GroupBy",
60
+ ORDER_BY = "OrderBy",
61
+ THEN = "Then",
62
+ THEN_BY = "ThenBy"
63
+ }
64
+ /**
65
+ * @description
66
+ * Function signature for parsing operators in query building.
67
+ *
68
+ * @summary
69
+ * The `OperatorParser` type represents a function that takes a field name
70
+ * and arguments, then produces a `Condition` object that can be used in a query.
71
+ *
72
+ * @template T The type of the condition result.
73
+ *
74
+ * @param field {string} - The name of the field being parsed.
75
+ * @param args {any[]} - Additional arguments for operator evaluation.
76
+ *
77
+ * @return {Condition<any>} A condition object representing the parsed operator.
78
+ *
79
+ * @memberOf module:query
80
+ */
81
+ export type OperatorParser = (field: string, ...args: any) => Condition<any>;
82
+ /**
83
+ * @description
84
+ * Descriptor for fields and their associated operators in query parsing.
85
+ *
86
+ * @summary
87
+ * The `FilterDescriptor` interface defines the structure used when parsing
88
+ * method segments into filterable fields and associated operators.
89
+ *
90
+ * @interface FilterDescriptor
91
+ * @memberOf module:query
92
+ */
93
+ export interface FilterDescriptor {
94
+ field: string;
95
+ operator?: string;
96
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperatorsMap = void 0;
4
+ const Condition_1 = require("./Condition.cjs");
5
+ /**
6
+ * @description
7
+ * Map of supported operators to their corresponding parser functions.
8
+ *
9
+ * @summary
10
+ * The `OperatorsMap` defines a collection of operator names as keys
11
+ * (such as `Equals`, `LessThan`, `Between`, etc.), each mapped to a
12
+ * function that constructs a `Condition` object for that operator.
13
+ * These functions translate query clauses into concrete condition
14
+ * builders, enabling dynamic query construction from method names.
15
+ *
16
+ * @template T The type of the field values used in conditions.
17
+ *
18
+ * @param f {string} - The field name the condition applies to.
19
+ * @param v1 {any} - The value to compare the field against or the lower bound value for range-based operators.
20
+ * @param v2 {any} - The upper bound value for range-based operators.
21
+ *
22
+ * @return {Condition<any>} A condition object representing the operator applied to the field.
23
+ *
24
+ * @function OperatorsMap
25
+ *
26
+ * @mermaid
27
+ * sequenceDiagram
28
+ * participant Client as Caller
29
+ * participant Map as OperatorsMap
30
+ * participant Parser as OperatorParser
31
+ * participant Cond as Condition
32
+ *
33
+ * Client->>Map: Request operator parser ("Between", field, v1, v2)
34
+ * Map->>Parser: Call corresponding operator function
35
+ * Parser->>Cond: Condition.attribute(field)
36
+ * Cond-->>Parser: Condition instance
37
+ * Parser->>Cond: Apply gte(v1)
38
+ * Parser->>Cond: Apply and(lte(v2))
39
+ * Parser-->>Client: Return built Condition
40
+ *
41
+ * @memberOf module:query
42
+ */
43
+ exports.OperatorsMap = {
44
+ Equals: (f, v) => Condition_1.Condition.attribute(f).eq(v),
45
+ Diff: (f, v) => Condition_1.Condition.attribute(f).dif(v),
46
+ LessThan: (f, v) => Condition_1.Condition.attribute(f).lt(v),
47
+ LessThanEqual: (f, v) => Condition_1.Condition.attribute(f).lte(v),
48
+ GreaterThan: (f, v) => Condition_1.Condition.attribute(f).gt(v),
49
+ GreaterThanEqual: (f, v) => Condition_1.Condition.attribute(f).gte(v),
50
+ Between: (f, v1, v2) => Condition_1.Condition.attribute(f).gte(v1).and(Condition_1.Condition.attribute(f).lte(v2)),
51
+ In: (f, v) => Condition_1.Condition.attribute(f).in(v),
52
+ Matches: (f, v) => Condition_1.Condition.attribute(f).regexp(v),
53
+ };
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVlcnkvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBQXdDO0FBR3hDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBQ1UsUUFBQSxZQUFZLEdBQW1DO0lBQzFELE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMscUJBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxxQkFBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMscUJBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekQsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUNyQixxQkFBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLHFCQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxxQkFBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Q0FDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCIuL0NvbmRpdGlvblwiO1xuaW1wb3J0IHsgT3BlcmF0b3JQYXJzZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogTWFwIG9mIHN1cHBvcnRlZCBvcGVyYXRvcnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBwYXJzZXIgZnVuY3Rpb25zLlxuICpcbiAqIEBzdW1tYXJ5XG4gKiBUaGUgYE9wZXJhdG9yc01hcGAgZGVmaW5lcyBhIGNvbGxlY3Rpb24gb2Ygb3BlcmF0b3IgbmFtZXMgYXMga2V5c1xuICogKHN1Y2ggYXMgYEVxdWFsc2AsIGBMZXNzVGhhbmAsIGBCZXR3ZWVuYCwgZXRjLiksIGVhY2ggbWFwcGVkIHRvIGFcbiAqIGZ1bmN0aW9uIHRoYXQgY29uc3RydWN0cyBhIGBDb25kaXRpb25gIG9iamVjdCBmb3IgdGhhdCBvcGVyYXRvci5cbiAqIFRoZXNlIGZ1bmN0aW9ucyB0cmFuc2xhdGUgcXVlcnkgY2xhdXNlcyBpbnRvIGNvbmNyZXRlIGNvbmRpdGlvblxuICogYnVpbGRlcnMsIGVuYWJsaW5nIGR5bmFtaWMgcXVlcnkgY29uc3RydWN0aW9uIGZyb20gbWV0aG9kIG5hbWVzLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHRoZSBmaWVsZCB2YWx1ZXMgdXNlZCBpbiBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSBmIHtzdHJpbmd9IC0gVGhlIGZpZWxkIG5hbWUgdGhlIGNvbmRpdGlvbiBhcHBsaWVzIHRvLlxuICogQHBhcmFtIHYxIHthbnl9IC0gVGhlIHZhbHVlIHRvIGNvbXBhcmUgdGhlIGZpZWxkIGFnYWluc3Qgb3IgdGhlIGxvd2VyIGJvdW5kIHZhbHVlIGZvciByYW5nZS1iYXNlZCBvcGVyYXRvcnMuXG4gKiBAcGFyYW0gdjIge2FueX0gLSBUaGUgdXBwZXIgYm91bmQgdmFsdWUgZm9yIHJhbmdlLWJhc2VkIG9wZXJhdG9ycy5cbiAqXG4gKiBAcmV0dXJuIHtDb25kaXRpb248YW55Pn0gQSBjb25kaXRpb24gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgb3BlcmF0b3IgYXBwbGllZCB0byB0aGUgZmllbGQuXG4gKlxuICogQGZ1bmN0aW9uIE9wZXJhdG9yc01hcFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50IGFzIENhbGxlclxuICogICBwYXJ0aWNpcGFudCBNYXAgYXMgT3BlcmF0b3JzTWFwXG4gKiAgIHBhcnRpY2lwYW50IFBhcnNlciBhcyBPcGVyYXRvclBhcnNlclxuICogICBwYXJ0aWNpcGFudCBDb25kIGFzIENvbmRpdGlvblxuICpcbiAqICAgQ2xpZW50LT4+TWFwOiBSZXF1ZXN0IG9wZXJhdG9yIHBhcnNlciAoXCJCZXR3ZWVuXCIsIGZpZWxkLCB2MSwgdjIpXG4gKiAgIE1hcC0+PlBhcnNlcjogQ2FsbCBjb3JyZXNwb25kaW5nIG9wZXJhdG9yIGZ1bmN0aW9uXG4gKiAgIFBhcnNlci0+PkNvbmQ6IENvbmRpdGlvbi5hdHRyaWJ1dGUoZmllbGQpXG4gKiAgIENvbmQtLT4+UGFyc2VyOiBDb25kaXRpb24gaW5zdGFuY2VcbiAqICAgUGFyc2VyLT4+Q29uZDogQXBwbHkgZ3RlKHYxKVxuICogICBQYXJzZXItPj5Db25kOiBBcHBseSBhbmQobHRlKHYyKSlcbiAqICAgUGFyc2VyLS0+PkNsaWVudDogUmV0dXJuIGJ1aWx0IENvbmRpdGlvblxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6cXVlcnlcbiAqL1xuZXhwb3J0IGNvbnN0IE9wZXJhdG9yc01hcDogUmVjb3JkPHN0cmluZywgT3BlcmF0b3JQYXJzZXI+ID0ge1xuICBFcXVhbHM6IChmLCB2KSA9PiBDb25kaXRpb24uYXR0cmlidXRlKGYpLmVxKHYpLFxuICBEaWZmOiAoZiwgdikgPT4gQ29uZGl0aW9uLmF0dHJpYnV0ZShmKS5kaWYodiksXG4gIExlc3NUaGFuOiAoZiwgdikgPT4gQ29uZGl0aW9uLmF0dHJpYnV0ZShmKS5sdCh2KSxcbiAgTGVzc1RoYW5FcXVhbDogKGYsIHYpID0+IENvbmRpdGlvbi5hdHRyaWJ1dGUoZikubHRlKHYpLFxuICBHcmVhdGVyVGhhbjogKGYsIHYpID0+IENvbmRpdGlvbi5hdHRyaWJ1dGUoZikuZ3QodiksXG4gIEdyZWF0ZXJUaGFuRXF1YWw6IChmLCB2KSA9PiBDb25kaXRpb24uYXR0cmlidXRlKGYpLmd0ZSh2KSxcbiAgQmV0d2VlbjogKGYsIHYxLCB2MikgPT5cbiAgICBDb25kaXRpb24uYXR0cmlidXRlKGYpLmd0ZSh2MSkuYW5kKENvbmRpdGlvbi5hdHRyaWJ1dGUoZikubHRlKHYyKSksXG4gIEluOiAoZiwgdikgPT4gQ29uZGl0aW9uLmF0dHJpYnV0ZShmKS5pbih2KSxcbiAgTWF0Y2hlczogKGYsIHYpID0+IENvbmRpdGlvbi5hdHRyaWJ1dGUoZikucmVnZXhwKHYpLFxufTtcbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { OperatorParser } from "./types";
2
+ /**
3
+ * @description
4
+ * Map of supported operators to their corresponding parser functions.
5
+ *
6
+ * @summary
7
+ * The `OperatorsMap` defines a collection of operator names as keys
8
+ * (such as `Equals`, `LessThan`, `Between`, etc.), each mapped to a
9
+ * function that constructs a `Condition` object for that operator.
10
+ * These functions translate query clauses into concrete condition
11
+ * builders, enabling dynamic query construction from method names.
12
+ *
13
+ * @template T The type of the field values used in conditions.
14
+ *
15
+ * @param f {string} - The field name the condition applies to.
16
+ * @param v1 {any} - The value to compare the field against or the lower bound value for range-based operators.
17
+ * @param v2 {any} - The upper bound value for range-based operators.
18
+ *
19
+ * @return {Condition<any>} A condition object representing the operator applied to the field.
20
+ *
21
+ * @function OperatorsMap
22
+ *
23
+ * @mermaid
24
+ * sequenceDiagram
25
+ * participant Client as Caller
26
+ * participant Map as OperatorsMap
27
+ * participant Parser as OperatorParser
28
+ * participant Cond as Condition
29
+ *
30
+ * Client->>Map: Request operator parser ("Between", field, v1, v2)
31
+ * Map->>Parser: Call corresponding operator function
32
+ * Parser->>Cond: Condition.attribute(field)
33
+ * Cond-->>Parser: Condition instance
34
+ * Parser->>Cond: Apply gte(v1)
35
+ * Parser->>Cond: Apply and(lte(v2))
36
+ * Parser-->>Client: Return built Condition
37
+ *
38
+ * @memberOf module:query
39
+ */
40
+ export declare const OperatorsMap: Record<string, OperatorParser>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decaf-ts/core",
3
- "version": "0.5.27",
3
+ "version": "0.5.29",
4
4
  "description": "Core persistence module for the decaf framework",
5
5
  "type": "module",
6
6
  "exports": {