@scx-js/scx-data 0.2.0 → 0.2.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.
@@ -0,0 +1,39 @@
1
+ import {FieldPolicyLike} from "./FieldPolicyLike.js";
2
+ import {FieldPolicyImpl} from "./FieldPolicyImpl.js";
3
+ import {EXCLUDED} from "./FilterMode.js";
4
+
5
+ class AssignField extends FieldPolicyLike {
6
+
7
+ #fieldName;
8
+ #expression;
9
+
10
+ constructor(fieldName, expression) {
11
+ super();
12
+ if (fieldName == null) {
13
+ throw new Error("fieldName is null");
14
+ }
15
+ if (expression == null) {
16
+ throw new Error("expression is null");
17
+ }
18
+ this.#fieldName = fieldName;
19
+ this.#expression = expression;
20
+ }
21
+
22
+ fieldName() {
23
+ return this.#fieldName;
24
+ }
25
+
26
+ expression() {
27
+ return this.#expression;
28
+ }
29
+
30
+ toFieldPolicy() {
31
+ //排除 0个 就是包含所有
32
+ return new FieldPolicyImpl(EXCLUDED).assignFields(this);
33
+ }
34
+
35
+ }
36
+
37
+ export {
38
+ AssignField,
39
+ };
@@ -8,44 +8,66 @@ class FieldPolicy {
8
8
  return this;
9
9
  }
10
10
 
11
- filterMode() {
11
+ getFilterMode() {
12
12
  }
13
13
 
14
- fieldNames() {
14
+ getFieldNames() {
15
15
  }
16
16
 
17
17
  clearFieldNames() {
18
+ return this;
18
19
  }
19
20
 
20
- ignoreNull(ignoreNullValue) {
21
+ virtualFields(...virtualFields) {
21
22
  return this;
22
23
  }
23
24
 
24
- ignoreNull_() {
25
+ getVirtualFields() {
25
26
  }
26
27
 
27
- ignoreNull__(fieldName, ignoreNullValue) {
28
+ clearVirtualFields() {
29
+ return this;
28
30
  }
29
31
 
30
- removeIgnoreNull(fieldName) {
32
+ virtualField(virtualFieldName, expression) {
33
+ return this;
31
34
  }
32
35
 
33
- ignoreNulls() {
36
+ ignoreNull(ignoreNull) {
37
+ return this;
34
38
  }
35
39
 
36
- clearIgnoreNulls() {
40
+ ignoreNull_(fieldName, ignoreNull) {
41
+ return this;
42
+ }
43
+
44
+ assignFields(...assignFields) {
45
+ return this;
46
+ }
47
+
48
+ getIgnoreNull() {
49
+ }
50
+
51
+ getIgnoreNulls() {
37
52
  }
38
53
 
39
- expression(fieldName, expression) {
54
+ getAssignFields() {
40
55
  }
41
56
 
42
- expressions() {
57
+ clearIgnoreNulls() {
58
+ return this;
43
59
  }
44
60
 
45
- removeExpression(fieldName) {
61
+ clearAssignFields() {
62
+ return this;
46
63
  }
47
64
 
48
- clearExpressions() {
65
+ removeIgnoreNull(fieldName) {
66
+ return this;
67
+ }
68
+
69
+ assignField(fieldName, expression) {
70
+ return this;
49
71
  }
50
72
 
51
73
  }
@@ -1,5 +1,7 @@
1
1
  import {FieldPolicyImpl} from "./FieldPolicyImpl.js";
2
2
  import {EXCLUDED, INCLUDED} from "./FilterMode.js";
3
+ import {AssignField} from "./AssignField.js";
4
+ import {VirtualField} from "./VirtualField.js";
3
5
 
4
6
  function includeAll() {
5
7
  return new FieldPolicyImpl(EXCLUDED);
@@ -9,34 +11,31 @@ function excludeAll() {
9
11
  return new FieldPolicyImpl(INCLUDED);
10
12
  }
11
13
 
12
- /**
13
- *
14
- * @param fieldNames
15
- * @return {FieldPolicy}
16
- */
17
14
  function include(...fieldNames) {
18
15
  return excludeAll().include(...fieldNames);
19
16
  }
20
17
 
21
- /**
22
- *
23
- * @param fieldNames
24
- * @return {FieldPolicy}
25
- */
26
18
  function exclude(...fieldNames) {
27
19
  return includeAll().exclude(...fieldNames);
28
20
  }
29
21
 
22
+ /// 默认包含所有
30
23
  function ignoreNull(ignoreNull) {
31
24
  return includeAll().ignoreNull(ignoreNull);
32
25
  }
33
26
 
34
- function ignoreNull__(fieldName, ignoreNull) {
35
- return includeAll().ignoreNull__(fieldName, ignoreNull);
27
+ /// 默认包含所有
28
+ function ignoreNull_(fieldName, ignoreNull) {
29
+ return includeAll().ignoreNull_(fieldName, ignoreNull);
36
30
  }
37
31
 
38
- function expression(fieldName, expression) {
39
- return includeAll().expression(fieldName, expression);
32
+ /// 默认包含所有
33
+ function assignField(fieldName, expression) {
34
+ return new AssignField(fieldName, expression);
35
+ }
36
+
37
+ function virtualField(virtualFieldName, expression) {
38
+ return new VirtualField(virtualFieldName, expression);
40
39
  }
41
40
 
42
41
  export {
@@ -45,6 +44,7 @@ export {
45
44
  include,
46
45
  exclude,
47
46
  ignoreNull,
48
- ignoreNull__,
49
- expression,
47
+ ignoreNull_,
48
+ assignField,
49
+ virtualField,
50
50
  };
@@ -1,46 +1,48 @@
1
1
  import {EXCLUDED, INCLUDED} from "./FilterMode.js";
2
2
  import {FieldPolicy} from "./FieldPolicy.js";
3
+ import {AssignField} from "./AssignField.js";
4
+ import {VirtualField} from "./VirtualField.js";
3
5
 
4
6
  class FieldPolicyImpl extends FieldPolicy {
5
7
 
6
8
  #filterMode;
7
9
  #fieldNames;
8
- #expressions;
9
10
  #ignoreNulls;
11
+ #virtualFields;
12
+ #assignFields;
10
13
  #ignoreNull;
11
14
 
12
15
  constructor(filterMode) {
13
16
  super();
14
17
  this.#filterMode = filterMode;
15
18
  this.#fieldNames = new Set();
16
- this.#expressions = new Map();
19
+ this.#virtualFields = [];
20
+ this.#assignFields = [];
17
21
  this.#ignoreNulls = new Map();
18
22
  this.#ignoreNull = true;
19
23
  }
20
24
 
21
25
  include(...fieldNames) {
22
26
  if (this.#filterMode === INCLUDED) {
23
- this.addFieldNames(...fieldNames);
27
+ return this.addFieldNames(...fieldNames);
24
28
  } else if (this.#filterMode === EXCLUDED) {
25
- this.removeFieldNames(...fieldNames);
29
+ return this.removeFieldNames(...fieldNames);
26
30
  }
27
- return this;
28
31
  }
29
32
 
30
33
  exclude(...fieldNames) {
31
- if (this.#filterMode === EXCLUDED) {
32
- this.addFieldNames(...fieldNames);
33
- } else if (this.#filterMode === INCLUDED) {
34
- this.removeFieldNames(...fieldNames);
34
+ if (this.#filterMode === INCLUDED) {
35
+ return this.removeFieldNames(...fieldNames);
36
+ } else if (this.#filterMode === EXCLUDED) {
37
+ return this.addFieldNames(...fieldNames);
35
38
  }
36
- return this;
37
39
  }
38
40
 
39
- filterMode() {
41
+ getFilterMode() {
40
42
  return this.#filterMode;
41
43
  }
42
44
 
43
- fieldNames() {
45
+ getFieldNames() {
44
46
  return Array.from(this.#fieldNames);
45
47
  }
46
48
 
@@ -49,64 +51,83 @@ class FieldPolicyImpl extends FieldPolicy {
49
51
  return this;
50
52
  }
51
53
 
52
- ignoreNull(ignoreNullValue) {
53
- this.#ignoreNull = ignoreNullValue;
54
+ addFieldNames(...fieldNames) {
55
+ for (const name of fieldNames) {
56
+ this.#fieldNames.add(name);
57
+ }
54
58
  return this;
55
59
  }
56
60
 
57
- ignoreNull_() {
58
- return this.#ignoreNull;
61
+ removeFieldNames(...fieldNames) {
62
+ for (const name of fieldNames) {
63
+ this.#fieldNames.delete(name);
64
+ }
65
+ return this;
59
66
  }
60
67
 
61
- ignoreNull__(fieldName, ignoreNull) {
62
- this.#ignoreNulls.set(fieldName, ignoreNull);
68
+ virtualFields(...virtualFields) {
69
+ this.#virtualFields = [...virtualFields];
63
70
  return this;
64
71
  }
65
72
 
66
- removeIgnoreNull(fieldName) {
67
- this.#ignoreNulls.delete(fieldName);
73
+ getVirtualFields() {
74
+ return this.#virtualFields;
75
+ }
76
+
77
+ clearVirtualFields() {
78
+ this.#virtualFields = [];
68
79
  return this;
69
80
  }
70
81
 
71
- ignoreNulls() {
72
- return this.#ignoreNulls;
82
+ virtualField(name, expression) {
83
+ this.#virtualFields.push(new VirtualField(name, expression));
84
+ return this;
73
85
  }
74
86
 
75
- clearIgnoreNulls() {
76
- this.#ignoreNulls.clear();
87
+ ignoreNull(ignoreNull) {
88
+ this.#ignoreNull = ignoreNull;
77
89
  return this;
78
90
  }
79
91
 
80
- expression(fieldName, expression) {
81
- this.#expressions.set(fieldName, expression);
92
+ ignoreNull_(fieldName, ignoreNull) {
93
+ this.#ignoreNulls.set(fieldName, ignoreNull);
82
94
  return this;
83
95
  }
84
96
 
85
- expressions() {
86
- return this.#expressions;
97
+ assignFields(...assignFields) {
98
+ this.#assignFields = [...assignFields];
99
+ return this;
100
+ }
101
+
102
+ getIgnoreNull() {
103
+ return this.#ignoreNull;
104
+ }
105
+
106
+ getIgnoreNulls() {
107
+ return Object.fromEntries(this.#ignoreNulls);
108
+ }
109
+
110
+ getAssignFields() {
111
+ return this.#assignFields;
87
112
  }
88
113
 
89
- removeExpression(fieldName) {
90
- this.#expressions.delete(fieldName);
114
+ clearIgnoreNulls() {
115
+ this.#ignoreNulls.clear();
91
116
  return this;
92
117
  }
93
118
 
94
- clearExpressions() {
95
- this.#expressions.clear();
119
+ clearAssignFields() {
120
+ this.#assignFields = [];
96
121
  return this;
97
122
  }
98
123
 
99
- addFieldNames(...fieldNames) {
100
- for (let fieldName of fieldNames) {
101
- this.#fieldNames.add(fieldName);
102
- }
124
+ removeIgnoreNull(fieldName) {
125
+ this.#ignoreNulls.delete(fieldName);
103
126
  return this;
104
127
  }
105
128
 
106
- removeFieldNames(...fieldNames) {
107
- for (let fieldName of fieldNames) {
108
- this.#fieldNames.delete(fieldName);
109
- }
129
+ assignField(fieldName, expression) {
130
+ this.#assignFields.push(new AssignField(fieldName, expression));
110
131
  return this;
111
132
  }
112
133
 
@@ -0,0 +1,111 @@
1
+ import {FieldPolicy} from "./FieldPolicy.js";
2
+
3
+ class FieldPolicyLike extends FieldPolicy {
4
+
5
+ #fieldPolicy;
6
+
7
+ fieldPolicy() {
8
+ if (this.#fieldPolicy == null) {
9
+ this.#fieldPolicy = this.toFieldPolicy();
10
+ }
11
+ return this.#fieldPolicy;
12
+ }
13
+
14
+ include(...fieldNames) {
15
+ this.fieldPolicy().include(...fieldNames);
16
+ return this;
17
+ }
18
+
19
+ exclude(...fieldNames) {
20
+ this.fieldPolicy().exclude(...fieldNames);
21
+ return this;
22
+ }
23
+
24
+ getFilterMode() {
25
+ return this.fieldPolicy().getFilterMode();
26
+ }
27
+
28
+ getFieldNames() {
29
+ return this.fieldPolicy().getFieldNames();
30
+ }
31
+
32
+ clearFieldNames() {
33
+ this.fieldPolicy().clearFieldNames();
34
+ return this;
35
+ }
36
+
37
+ virtualFields(...virtualFields) {
38
+ this.fieldPolicy().virtualFields(...virtualFields);
39
+ return this;
40
+ }
41
+
42
+ getVirtualFields() {
43
+ return this.fieldPolicy().getVirtualFields();
44
+ }
45
+
46
+ clearVirtualFields() {
47
+ this.fieldPolicy().clearVirtualFields();
48
+ return this;
49
+ }
50
+
51
+ virtualField(virtualFieldName, expression) {
52
+ this.fieldPolicy().virtualField(virtualFieldName, expression);
53
+ return this;
54
+ }
55
+
56
+ ignoreNull(ignoreNull) {
57
+ this.fieldPolicy().ignoreNull(ignoreNull);
58
+ return this;
59
+ }
60
+
61
+ ignoreNull_(fieldName, ignoreNull) {
62
+ this.fieldPolicy().ignoreNull_(fieldName, ignoreNull);
63
+ return this;
64
+ }
65
+
66
+ assignFields(...assignFields) {
67
+ this.fieldPolicy().assignFields(...assignFields);
68
+ return this;
69
+ }
70
+
71
+ getIgnoreNull() {
72
+ return this.fieldPolicy().getIgnoreNull();
73
+ }
74
+
75
+ getIgnoreNulls() {
76
+ return this.fieldPolicy().getIgnoreNulls();
77
+ }
78
+
79
+ getAssignFields() {
80
+ return this.fieldPolicy().getAssignFields();
81
+ }
82
+
83
+ clearIgnoreNulls() {
84
+ this.fieldPolicy().clearIgnoreNulls();
85
+ return this;
86
+ }
87
+
88
+ clearAssignFields() {
89
+ this.fieldPolicy().clearAssignFields();
90
+ return this;
91
+ }
92
+
93
+ removeIgnoreNull(fieldName) {
94
+ this.fieldPolicy().removeIgnoreNull(fieldName);
95
+ return this;
96
+ }
97
+
98
+ assignField(fieldName, expression) {
99
+ this.fieldPolicy().assignField(fieldName, expression);
100
+ return this;
101
+ }
102
+
103
+ toFieldPolicy() {
104
+
105
+ }
106
+
107
+ }
108
+
109
+ export {
110
+ FieldPolicyLike,
111
+ };
@@ -0,0 +1,39 @@
1
+ import {FieldPolicyLike} from "./FieldPolicyLike.js";
2
+ import {FieldPolicyImpl} from "./FieldPolicyImpl.js";
3
+ import {EXCLUDED} from "./FilterMode.js";
4
+
5
+ class VirtualField extends FieldPolicyLike {
6
+
7
+ #virtualFieldName;
8
+ #expression;
9
+
10
+ constructor(virtualFieldName, expression) {
11
+ super();
12
+ if (virtualFieldName == null) {
13
+ throw new Error("virtualFieldName is null");
14
+ }
15
+ if (expression == null) {
16
+ throw new Error("expression is null");
17
+ }
18
+ this.#virtualFieldName = virtualFieldName;
19
+ this.#expression = expression;
20
+ }
21
+
22
+ virtualFieldName() {
23
+ return this.#virtualFieldName;
24
+ }
25
+
26
+ expression() {
27
+ return this.#expression;
28
+ }
29
+
30
+ toFieldPolicy() {
31
+ //排除 0个 就是包含所有
32
+ return new FieldPolicyImpl(EXCLUDED).virtualFields(this);
33
+ }
34
+
35
+ }
36
+
37
+ export {
38
+ VirtualField,
39
+ };
@@ -12,11 +12,36 @@ class FieldPolicySerializer {
12
12
  serializeFieldPolicy(fieldPolicy) {
13
13
  return {
14
14
  "@type": "FieldPolicy",
15
- "filterMode": fieldPolicy.filterMode(),
16
- "fieldNames": fieldPolicy.fieldNames(),
17
- "ignoreNull": fieldPolicy.ignoreNull_(),
18
- "ignoreNulls": fieldPolicy.ignoreNulls(),
19
- "expressions": fieldPolicy.expressions(),
15
+ "filterMode": fieldPolicy.getFilterMode(),
16
+ "fieldNames": fieldPolicy.getFieldNames(),
17
+ "virtualFields": this.serializeVirtualFields(fieldPolicy.getVirtualFields()),
18
+ "ignoreNull": fieldPolicy.getIgnoreNull(),
19
+ "ignoreNulls": fieldPolicy.getIgnoreNulls(),
20
+ "assignFields": this.serializeAssignFields(fieldPolicy.getAssignFields()),
21
+ };
22
+ }
23
+
24
+ serializeVirtualFields(v) {
25
+ return v.map(s => this.serializeVirtualField(s));
26
+ }
27
+
28
+ serializeVirtualField(v) {
29
+ return {
30
+ "@type": "VirtualField",
31
+ "expression": v.expression(),
32
+ "virtualFieldName": v.virtualFieldName(),
33
+ };
34
+ }
35
+
36
+ serializeAssignFields(v) {
37
+ return v.map(s => this.serializeAssignField(s));
38
+ }
39
+
40
+ serializeAssignField(v) {
41
+ return {
42
+ "@type": "AssignField",
43
+ "fieldName": v.fieldName(),
44
+ "expression": v.expression(),
20
45
  };
21
46
  }
22
47
 
package/index.js CHANGED
@@ -1,13 +1,12 @@
1
1
  export * from "./field_policy/serializer/FieldPolicySerializer.js";
2
+ export * from "./field_policy/AssignField.js";
2
3
  export * from "./field_policy/FieldPolicy.js";
3
4
  export * from "./field_policy/FieldPolicyBuilder.js";
4
5
  export * from "./field_policy/FieldPolicyImpl.js";
6
+ export * from "./field_policy/FieldPolicyLike.js";
5
7
  export * from "./field_policy/FilterMode.js";
6
- export * from "./query/serializer/GroupBySerializer.js";
7
- export * from "./query/serializer/OrderBySerializer.js";
8
+ export * from "./field_policy/VirtualField.js";
8
9
  export * from "./query/serializer/QuerySerializer.js";
9
- export * from "./query/serializer/WhereSerializer.js";
10
- export * from "./query/GroupBy.js";
11
10
  export * from "./query/Junction.js";
12
11
  export * from "./query/And.js";
13
12
  export * from "./query/Or.js";
@@ -18,7 +17,7 @@ export * from "./query/Query.js";
18
17
  export * from "./query/QueryBuilder.js";
19
18
  export * from "./query/QueryImpl.js";
20
19
  export * from "./query/QueryLike.js";
21
- export * from "./query/QueryOption.js";
22
- export * from "./query/Where.js";
20
+ export * from "./query/BuildControl.js";
21
+ export * from "./query/Condition.js";
23
22
  export * from "./query/WhereClause.js";
24
- export * from "./query/WhereType.js";
23
+ export * from "./query/ConditionType.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scx-js/scx-data",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "SCX Data",
5
5
  "license": "MIT",
6
6
  "author": "scx567888",
@@ -11,6 +11,6 @@
11
11
  "url": "https://github.com/scx567888/scx-js.git"
12
12
  },
13
13
  "dependencies": {
14
- "@scx-js/scx-common": "0.2.0"
14
+ "@scx-js/scx-common": "0.2.2"
15
15
  }
16
16
  }
@@ -0,0 +1,45 @@
1
+ class BuildControl {
2
+
3
+ #value;
4
+
5
+ constructor(value) {
6
+ this.#value = value;
7
+ }
8
+
9
+ }
10
+
11
+ const SKIP_IF_NULL = new BuildControl("SKIP_IF_NULL");
12
+ const SKIP_IF_EMPTY_LIST = new BuildControl("SKIP_IF_EMPTY_LIST");
13
+ const SKIP_IF_EMPTY_STRING = new BuildControl("SKIP_IF_EMPTY_STRING");
14
+ const SKIP_IF_BLANK_STRING = new BuildControl("SKIP_IF_BLANK_STRING");
15
+ const USE_EXPRESSION = new BuildControl("USE_EXPRESSION");
16
+ const USE_EXPRESSION_VALUE = new BuildControl("USE_EXPRESSION_VALUE");
17
+
18
+
19
+ function checkUseExpression(...controls) {
20
+ for (let control of controls) {
21
+ if (control === USE_EXPRESSION) {
22
+ return true;
23
+ }
24
+ }
25
+ return false;
26
+ }
27
+
28
+ function checkUseExpressionValue(...controls) {
29
+ for (let control of controls) {
30
+ if (control === USE_EXPRESSION_VALUE) {
31
+ return true;
32
+ }
33
+ }
34
+ return false;
35
+ }
36
+
37
+ export {
38
+ BuildControl,
39
+ SKIP_IF_NULL,
40
+ SKIP_IF_EMPTY_LIST,
41
+ SKIP_IF_BLANK_STRING,
42
+ SKIP_IF_EMPTY_STRING,
43
+ checkUseExpression,
44
+ checkUseExpressionValue,
45
+ };