@decaf-ts/core 0.5.28 → 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,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.28",
3
+ "version": "0.5.29",
4
4
  "description": "Core persistence module for the decaf framework",
5
5
  "type": "module",
6
6
  "exports": {