electrodb 2.10.0 → 2.10.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/src/filters.js CHANGED
@@ -1,111 +1,109 @@
1
1
  const e = require("./errors");
2
- const {MethodTypes, ExpressionTypes} = require("./types");
2
+ const { MethodTypes, ExpressionTypes } = require("./types");
3
3
 
4
4
  class FilterFactory {
5
- constructor(attributes = {}, filterTypes = {}) {
6
- this.attributes = { ...attributes };
7
- this.filters = {
8
- ...filterTypes,
9
- };
10
- }
5
+ constructor(attributes = {}, filterTypes = {}) {
6
+ this.attributes = { ...attributes };
7
+ this.filters = {
8
+ ...filterTypes,
9
+ };
10
+ }
11
11
 
12
- getExpressionType(methodType) {
13
- switch (methodType) {
14
- case MethodTypes.put:
15
- case MethodTypes.create:
16
- case MethodTypes.update:
17
- case MethodTypes.patch:
18
- case MethodTypes.delete:
19
- case MethodTypes.get:
20
- case MethodTypes.upsert:
21
- return ExpressionTypes.ConditionExpression
22
- default:
23
- return ExpressionTypes.FilterExpression
24
- }
25
- }
12
+ getExpressionType(methodType) {
13
+ switch (methodType) {
14
+ case MethodTypes.put:
15
+ case MethodTypes.create:
16
+ case MethodTypes.update:
17
+ case MethodTypes.patch:
18
+ case MethodTypes.delete:
19
+ case MethodTypes.get:
20
+ case MethodTypes.upsert:
21
+ return ExpressionTypes.ConditionExpression;
22
+ default:
23
+ return ExpressionTypes.FilterExpression;
24
+ }
25
+ }
26
26
 
27
- _buildFilterAttributes(setName, setValue) {
28
- let attributes = {};
29
- for (let [name, attribute] of Object.entries(this.attributes)) {
30
- let filterAttribute = {};
31
- for (let [type, {template}] of Object.entries(this.filters)) {
32
- Object.defineProperty(filterAttribute, type, {
33
- get: () => {
34
- return (...values) => {
35
- let {prop} = setName({}, name, attribute.field);
36
- let attrValues = [];
37
- for (let value of values) {
38
- if (template.length > 1) {
39
- attrValues.push(
40
- setValue(name, value, name)
41
- );
42
- }
43
- }
44
- let expression = template({}, attribute, prop, ...attrValues);
45
- return expression.trim();
46
- };
47
- },
48
- });
49
- }
50
- attributes[name] = filterAttribute;
51
- }
52
- return attributes;
53
- }
27
+ _buildFilterAttributes(setName, setValue) {
28
+ let attributes = {};
29
+ for (let [name, attribute] of Object.entries(this.attributes)) {
30
+ let filterAttribute = {};
31
+ for (let [type, { template }] of Object.entries(this.filters)) {
32
+ Object.defineProperty(filterAttribute, type, {
33
+ get: () => {
34
+ return (...values) => {
35
+ let { prop } = setName({}, name, attribute.field);
36
+ let attrValues = [];
37
+ for (let value of values) {
38
+ if (template.length > 1) {
39
+ attrValues.push(setValue(name, value, name));
40
+ }
41
+ }
42
+ let expression = template({}, attribute, prop, ...attrValues);
43
+ return expression.trim();
44
+ };
45
+ },
46
+ });
47
+ }
48
+ attributes[name] = filterAttribute;
49
+ }
50
+ return attributes;
51
+ }
54
52
 
55
- buildClause(filterFn) {
56
- return (entity, state, ...params) => {
57
- const type = this.getExpressionType(state.query.method);
58
- const builder = state.query.filter[type];
59
- let setName = (paths, name, value) => builder.setName(paths, name, value);
60
- let setValue = (name, value, path) => builder.setValue(name, value, path);
61
- let attributes = this._buildFilterAttributes(
62
- setName,
63
- setValue,
64
- );
65
- const expression = filterFn(attributes, ...params);
66
- if (typeof expression !== "string") {
67
- throw new e.ElectroError(e.ErrorCodes.InvalidFilter, "Invalid filter response. Expected result to be of type string");
68
- }
69
- builder.add(expression);
70
- return state;
71
- };
72
- }
53
+ buildClause(filterFn) {
54
+ return (entity, state, ...params) => {
55
+ const type = this.getExpressionType(state.query.method);
56
+ const builder = state.query.filter[type];
57
+ let setName = (paths, name, value) => builder.setName(paths, name, value);
58
+ let setValue = (name, value, path) => builder.setValue(name, value, path);
59
+ let attributes = this._buildFilterAttributes(setName, setValue);
60
+ const expression = filterFn(attributes, ...params);
61
+ if (typeof expression !== "string") {
62
+ throw new e.ElectroError(
63
+ e.ErrorCodes.InvalidFilter,
64
+ "Invalid filter response. Expected result to be of type string",
65
+ );
66
+ }
67
+ builder.add(expression);
68
+ return state;
69
+ };
70
+ }
73
71
 
74
- injectFilterClauses(clauses = {}, filters = {}) {
75
- let injected = { ...clauses };
76
- let filterParents = Object.entries(injected)
77
- .filter(clause => {
78
- let [name, { children }] = clause;
79
- return children.find(child => ['go', 'commit'].includes(child));
80
- })
81
- .map(([name]) => name);
82
- let modelFilters = Object.keys(filters);
83
- let filterChildren = [];
84
- for (let [name, filter] of Object.entries(filters)) {
85
- filterChildren.push(name);
86
- injected[name] = {
87
- name: name,
88
- action: this.buildClause(filter),
89
- children: ["params", "go", "commit", "filter", ...modelFilters],
90
- };
91
- }
92
- filterChildren.push("filter");
93
- injected["filter"] = {
94
- name: "filter",
95
- action: (entity, state, fn) => {
96
- return this.buildClause(fn)(entity, state);
97
- },
98
- children: ["params", "go", "commit", "filter", ...modelFilters],
99
- };
100
- for (let parent of filterParents) {
101
- injected[parent] = { ...injected[parent] };
102
- injected[parent].children = [
103
- ...filterChildren,
104
- ...injected[parent].children,
105
- ];
106
- }
107
- return injected;
108
- }
72
+ injectFilterClauses(clauses = {}, filters = {}) {
73
+ let injected = { ...clauses };
74
+ let filterParents = Object.entries(injected)
75
+ .filter((clause) => {
76
+ let [name, { children }] = clause;
77
+ return children.find((child) => ["go", "commit"].includes(child));
78
+ })
79
+ .map(([name]) => name);
80
+ let modelFilters = Object.keys(filters);
81
+ let filterChildren = [];
82
+ for (let [name, filter] of Object.entries(filters)) {
83
+ filterChildren.push(name);
84
+ injected[name] = {
85
+ name: name,
86
+ action: this.buildClause(filter),
87
+ children: ["params", "go", "commit", "filter", ...modelFilters],
88
+ };
89
+ }
90
+ filterChildren.push("filter");
91
+ injected["filter"] = {
92
+ name: "filter",
93
+ action: (entity, state, fn) => {
94
+ return this.buildClause(fn)(entity, state);
95
+ },
96
+ children: ["params", "go", "commit", "filter", ...modelFilters],
97
+ };
98
+ for (let parent of filterParents) {
99
+ injected[parent] = { ...injected[parent] };
100
+ injected[parent].children = [
101
+ ...filterChildren,
102
+ ...injected[parent].children,
103
+ ];
104
+ }
105
+ return injected;
106
+ }
109
107
  }
110
108
 
111
109
  module.exports = { FilterFactory };