@cloudbase/database 1.2.3 → 1.4.1-alpha.0

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.
Files changed (220) hide show
  1. package/README.md +32 -10
  2. package/dist/commonjs/ObjectId/index.d.ts +11 -0
  3. package/dist/commonjs/ObjectId/index.js +21 -0
  4. package/dist/commonjs/aggregate.d.ts +29 -29
  5. package/dist/commonjs/aggregate.js +124 -116
  6. package/dist/commonjs/collection.d.ts +17 -17
  7. package/dist/commonjs/collection.js +72 -72
  8. package/dist/commonjs/command.d.ts +175 -175
  9. package/dist/commonjs/command.js +285 -281
  10. package/dist/commonjs/commands/logic.d.ts +24 -24
  11. package/dist/commonjs/commands/logic.js +79 -79
  12. package/dist/commonjs/commands/query.d.ts +73 -73
  13. package/dist/commonjs/commands/query.js +147 -147
  14. package/dist/commonjs/commands/update.d.ts +29 -29
  15. package/dist/commonjs/commands/update.js +49 -49
  16. package/dist/commonjs/config/app.config.d.ts +6 -6
  17. package/dist/commonjs/config/app.config.js +7 -7
  18. package/dist/commonjs/config/error.config.d.ts +3 -3
  19. package/dist/commonjs/config/error.config.js +15 -15
  20. package/dist/commonjs/const/code.d.ts +34 -34
  21. package/dist/commonjs/const/code.js +36 -36
  22. package/dist/commonjs/constant.d.ts +54 -54
  23. package/dist/commonjs/constant.js +76 -76
  24. package/dist/commonjs/document.d.ts +14 -14
  25. package/dist/commonjs/document.js +219 -219
  26. package/dist/commonjs/geo/index.d.ts +6 -6
  27. package/dist/commonjs/geo/index.js +11 -11
  28. package/dist/commonjs/geo/interface.d.ts +24 -24
  29. package/dist/commonjs/geo/interface.js +2 -2
  30. package/dist/commonjs/geo/lineString.d.ts +19 -19
  31. package/dist/commonjs/geo/lineString.js +57 -57
  32. package/dist/commonjs/geo/multiLineString.d.ts +18 -18
  33. package/dist/commonjs/geo/multiLineString.js +56 -56
  34. package/dist/commonjs/geo/multiPoint.d.ts +18 -18
  35. package/dist/commonjs/geo/multiPoint.js +50 -50
  36. package/dist/commonjs/geo/multiPolygon.d.ts +18 -18
  37. package/dist/commonjs/geo/multiPolygon.js +62 -62
  38. package/dist/commonjs/geo/point.d.ts +19 -19
  39. package/dist/commonjs/geo/point.js +43 -43
  40. package/dist/commonjs/geo/polygon.d.ts +19 -19
  41. package/dist/commonjs/geo/polygon.js +70 -70
  42. package/dist/commonjs/helper/symbol.d.ts +15 -14
  43. package/dist/commonjs/helper/symbol.js +20 -19
  44. package/dist/commonjs/index.d.ts +50 -49
  45. package/dist/commonjs/index.js +41 -39
  46. package/dist/commonjs/operator-map.d.ts +4 -4
  47. package/dist/commonjs/operator-map.js +23 -23
  48. package/dist/commonjs/query.d.ts +38 -37
  49. package/dist/commonjs/query.js +247 -247
  50. package/dist/commonjs/realtime/error.d.ts +7 -7
  51. package/dist/commonjs/realtime/error.js +11 -11
  52. package/dist/commonjs/realtime/listener.d.ts +14 -14
  53. package/dist/commonjs/realtime/listener.js +17 -17
  54. package/dist/commonjs/realtime/message.d.ts +3 -3
  55. package/dist/commonjs/realtime/message.js +10 -10
  56. package/dist/commonjs/realtime/snapshot.d.ts +16 -16
  57. package/dist/commonjs/realtime/snapshot.js +42 -42
  58. package/dist/commonjs/realtime/virtual-websocket-client.d.ts +63 -63
  59. package/dist/commonjs/realtime/virtual-websocket-client.js +736 -736
  60. package/dist/commonjs/realtime/websocket-client.d.ts +78 -78
  61. package/dist/commonjs/realtime/websocket-client.js +567 -567
  62. package/dist/commonjs/realtime/ws-event.d.ts +126 -126
  63. package/dist/commonjs/realtime/ws-event.js +139 -139
  64. package/dist/commonjs/regexp/index.d.ts +18 -18
  65. package/dist/commonjs/regexp/index.js +30 -30
  66. package/dist/commonjs/serializer/common.d.ts +11 -11
  67. package/dist/commonjs/serializer/common.js +90 -90
  68. package/dist/commonjs/serializer/datatype.d.ts +7 -7
  69. package/dist/commonjs/serializer/datatype.js +99 -96
  70. package/dist/commonjs/serializer/query.d.ts +8 -8
  71. package/dist/commonjs/serializer/query.js +254 -254
  72. package/dist/commonjs/serializer/update.d.ts +16 -16
  73. package/dist/commonjs/serializer/update.js +142 -142
  74. package/dist/commonjs/serverDate/index.d.ts +13 -13
  75. package/dist/commonjs/serverDate/index.js +23 -23
  76. package/dist/commonjs/transaction/index.d.ts +30 -30
  77. package/dist/commonjs/transaction/index.js +105 -105
  78. package/dist/commonjs/transaction.d.ts +42 -42
  79. package/dist/commonjs/transaction.js +126 -126
  80. package/dist/commonjs/typings/index.d.ts +45 -45
  81. package/dist/commonjs/typings/index.js +2 -2
  82. package/dist/commonjs/typings/realtime.d.ts +219 -219
  83. package/dist/commonjs/typings/realtime.js +2 -2
  84. package/dist/commonjs/util.d.ts +9 -9
  85. package/dist/commonjs/util.js +101 -101
  86. package/dist/commonjs/utils/error.d.ts +37 -37
  87. package/dist/commonjs/utils/error.js +55 -55
  88. package/dist/commonjs/utils/symbol.d.ts +8 -8
  89. package/dist/commonjs/utils/symbol.js +39 -39
  90. package/dist/commonjs/utils/type.d.ts +13 -13
  91. package/dist/commonjs/utils/type.js +22 -22
  92. package/dist/commonjs/utils/utils.d.ts +19 -19
  93. package/dist/commonjs/utils/utils.js +59 -59
  94. package/dist/commonjs/validate.d.ts +1 -1
  95. package/dist/commonjs/validate.js +155 -149
  96. package/dist/esm/ObjectId/index.d.ts +11 -0
  97. package/dist/esm/ObjectId/index.js +17 -0
  98. package/dist/esm/aggregate.d.ts +29 -29
  99. package/dist/esm/aggregate.js +121 -113
  100. package/dist/esm/collection.d.ts +17 -17
  101. package/dist/esm/collection.js +69 -69
  102. package/dist/esm/command.d.ts +175 -175
  103. package/dist/esm/command.js +281 -277
  104. package/dist/esm/commands/logic.d.ts +24 -24
  105. package/dist/esm/commands/logic.js +74 -74
  106. package/dist/esm/commands/query.d.ts +73 -73
  107. package/dist/esm/commands/query.js +141 -141
  108. package/dist/esm/commands/update.d.ts +29 -29
  109. package/dist/esm/commands/update.js +44 -44
  110. package/dist/esm/config/app.config.d.ts +6 -6
  111. package/dist/esm/config/app.config.js +5 -5
  112. package/dist/esm/config/error.config.d.ts +3 -3
  113. package/dist/esm/config/error.config.js +13 -13
  114. package/dist/esm/const/code.d.ts +34 -34
  115. package/dist/esm/const/code.js +34 -34
  116. package/dist/esm/constant.d.ts +54 -54
  117. package/dist/esm/constant.js +67 -67
  118. package/dist/esm/document.d.ts +14 -14
  119. package/dist/esm/document.js +216 -216
  120. package/dist/esm/geo/index.d.ts +6 -6
  121. package/dist/esm/geo/index.js +6 -6
  122. package/dist/esm/geo/interface.d.ts +24 -24
  123. package/dist/esm/geo/lineString.d.ts +19 -19
  124. package/dist/esm/geo/lineString.js +54 -54
  125. package/dist/esm/geo/multiLineString.d.ts +18 -18
  126. package/dist/esm/geo/multiLineString.js +53 -53
  127. package/dist/esm/geo/multiPoint.d.ts +18 -18
  128. package/dist/esm/geo/multiPoint.js +47 -47
  129. package/dist/esm/geo/multiPolygon.d.ts +18 -18
  130. package/dist/esm/geo/multiPolygon.js +59 -59
  131. package/dist/esm/geo/point.d.ts +19 -19
  132. package/dist/esm/geo/point.js +40 -40
  133. package/dist/esm/geo/polygon.d.ts +19 -19
  134. package/dist/esm/geo/polygon.js +67 -67
  135. package/dist/esm/helper/symbol.d.ts +15 -14
  136. package/dist/esm/helper/symbol.js +15 -14
  137. package/dist/esm/index.d.ts +50 -49
  138. package/dist/esm/index.js +35 -33
  139. package/dist/esm/operator-map.d.ts +4 -4
  140. package/dist/esm/operator-map.js +20 -20
  141. package/dist/esm/query.d.ts +38 -37
  142. package/dist/esm/query.js +244 -244
  143. package/dist/esm/realtime/error.d.ts +7 -7
  144. package/dist/esm/realtime/error.js +8 -8
  145. package/dist/esm/realtime/listener.d.ts +14 -14
  146. package/dist/esm/realtime/listener.js +14 -14
  147. package/dist/esm/realtime/message.d.ts +3 -3
  148. package/dist/esm/realtime/message.js +6 -6
  149. package/dist/esm/realtime/snapshot.d.ts +16 -16
  150. package/dist/esm/realtime/snapshot.js +39 -39
  151. package/dist/esm/realtime/virtual-websocket-client.d.ts +63 -63
  152. package/dist/esm/realtime/virtual-websocket-client.js +733 -733
  153. package/dist/esm/realtime/websocket-client.d.ts +78 -78
  154. package/dist/esm/realtime/websocket-client.js +564 -564
  155. package/dist/esm/realtime/ws-event.d.ts +126 -126
  156. package/dist/esm/realtime/ws-event.js +137 -137
  157. package/dist/esm/regexp/index.d.ts +18 -18
  158. package/dist/esm/regexp/index.js +26 -26
  159. package/dist/esm/serializer/common.d.ts +11 -11
  160. package/dist/esm/serializer/common.js +82 -82
  161. package/dist/esm/serializer/datatype.d.ts +7 -7
  162. package/dist/esm/serializer/datatype.js +95 -92
  163. package/dist/esm/serializer/query.d.ts +8 -8
  164. package/dist/esm/serializer/query.js +251 -251
  165. package/dist/esm/serializer/update.d.ts +16 -16
  166. package/dist/esm/serializer/update.js +139 -139
  167. package/dist/esm/serverDate/index.d.ts +13 -13
  168. package/dist/esm/serverDate/index.js +19 -19
  169. package/dist/esm/transaction/index.d.ts +30 -30
  170. package/dist/esm/transaction/index.js +100 -100
  171. package/dist/esm/transaction.d.ts +42 -42
  172. package/dist/esm/transaction.js +121 -121
  173. package/dist/esm/typings/index.d.ts +45 -45
  174. package/dist/esm/typings/realtime.d.ts +219 -219
  175. package/dist/esm/util.d.ts +9 -9
  176. package/dist/esm/util.js +98 -98
  177. package/dist/esm/utils/error.d.ts +37 -37
  178. package/dist/esm/utils/error.js +49 -49
  179. package/dist/esm/utils/symbol.d.ts +8 -8
  180. package/dist/esm/utils/symbol.js +36 -36
  181. package/dist/esm/utils/type.d.ts +13 -13
  182. package/dist/esm/utils/type.js +20 -20
  183. package/dist/esm/utils/utils.d.ts +19 -19
  184. package/dist/esm/utils/utils.js +55 -55
  185. package/dist/esm/validate.d.ts +1 -1
  186. package/dist/esm/validate.js +152 -146
  187. package/package.json +1 -1
  188. package/src/ObjectId/index.ts +23 -0
  189. package/src/aggregate.ts +20 -8
  190. package/src/collection.ts +2 -2
  191. package/src/command.ts +11 -7
  192. package/src/document.ts +1 -1
  193. package/src/helper/symbol.ts +2 -0
  194. package/src/index.ts +4 -0
  195. package/src/query.ts +5 -4
  196. package/src/serializer/datatype.ts +5 -1
  197. package/src/serializer/query.ts +3 -3
  198. package/src/serializer/update.ts +3 -3
  199. package/src/validate.ts +15 -1
  200. package/.DS_Store +0 -0
  201. package/dist/commonjs/decimal128/index.d.ts +0 -8
  202. package/dist/commonjs/decimal128/index.js +0 -26
  203. package/dist/commonjs/lib/util.d.ts +0 -1
  204. package/dist/commonjs/lib/util.js +0 -25
  205. package/dist/commonjs/transaction/collection.d.ts +0 -7
  206. package/dist/commonjs/transaction/collection.js +0 -46
  207. package/dist/commonjs/transaction/document.d.ts +0 -27
  208. package/dist/commonjs/transaction/document.js +0 -205
  209. package/dist/commonjs/transaction/query.d.ts +0 -5
  210. package/dist/commonjs/transaction/query.js +0 -10
  211. package/dist/esm/lib/util.d.ts +0 -1
  212. package/dist/esm/lib/util.js +0 -23
  213. package/dist/esm/transaction/collection.d.ts +0 -7
  214. package/dist/esm/transaction/collection.js +0 -44
  215. package/dist/esm/transaction/document.d.ts +0 -27
  216. package/dist/esm/transaction/document.js +0 -203
  217. package/dist/esm/transaction/query.d.ts +0 -5
  218. package/dist/esm/transaction/query.js +0 -8
  219. package/src/.DS_Store +0 -0
  220. package/src/regexp/.DS_Store +0 -0
@@ -1,146 +1,152 @@
1
- import { ErrorCode, WhereFilterOpList, OrderDirectionList, FieldType } from './constant';
2
- import { Util } from './util';
3
- import { ERRORS } from './const/code';
4
- import { E } from './utils/utils';
5
- import { getType } from './utils/type';
6
- import { SYMBOL_GEO_POINT } from './helper/symbol';
7
- const validOptionsKeys = ['limit', 'offset', 'projection', 'order', 'multiple', 'timeout'];
8
- export class Validate {
9
- static isGeopoint(point, degree) {
10
- if (Util.whichType(degree) !== FieldType.Number) {
11
- throw new Error('Geo Point must be number type');
12
- }
13
- const degreeAbs = Math.abs(degree);
14
- if (point === 'latitude' && degreeAbs > 90) {
15
- throw new Error('latitude should be a number ranges from -90 to 90');
16
- }
17
- else if (point === 'longitude' && degreeAbs > 180) {
18
- throw new Error('longitude should be a number ranges from -180 to 180');
19
- }
20
- return true;
21
- }
22
- static isInteger(param, num) {
23
- if (!Number.isInteger(num)) {
24
- throw new Error(param + ErrorCode.IntergerError);
25
- }
26
- return true;
27
- }
28
- static mustBeBoolean(param, bool) {
29
- if (typeof bool !== 'boolean') {
30
- throw new Error(param + ErrorCode.BooleanError);
31
- }
32
- return true;
33
- }
34
- static isProjection(param, value) {
35
- if (getType(value) !== 'object') {
36
- throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `${param} projection must be an object` }));
37
- }
38
- for (const key in value) {
39
- const subValue = value[key];
40
- if (getType(subValue) === 'number') {
41
- if (subValue !== 0 && subValue !== 1) {
42
- throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `if the value in projection is of number, it must be 0 or 1` }));
43
- }
44
- }
45
- else if (getType(subValue) === 'object') {
46
- }
47
- else {
48
- throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: 'invalid projection' }));
49
- }
50
- }
51
- return true;
52
- }
53
- static isOrder(param, value) {
54
- if (getType(value) !== 'object') {
55
- throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `${param} order must be an object` }));
56
- }
57
- for (let key in value) {
58
- const subValue = value[key];
59
- if (subValue !== 1 && subValue !== -1) {
60
- throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `order value must be 1 or -1` }));
61
- }
62
- }
63
- return true;
64
- }
65
- static isFieldOrder(direction) {
66
- if (OrderDirectionList.indexOf(direction) === -1) {
67
- throw new Error(ErrorCode.DirectionError);
68
- }
69
- return true;
70
- }
71
- static isFieldPath(path) {
72
- if (!/^[a-zA-Z0-9-_\.]/.test(path)) {
73
- throw new Error();
74
- }
75
- return true;
76
- }
77
- static isOperator(op) {
78
- if (WhereFilterOpList.indexOf(op) === -1) {
79
- throw new Error(ErrorCode.OpStrError);
80
- }
81
- return true;
82
- }
83
- static isCollName(name) {
84
- if (!/^[a-zA-Z0-9]([a-zA-Z0-9-_]){1,32}$/.test(name)) {
85
- throw new Error(ErrorCode.CollNameError);
86
- }
87
- return true;
88
- }
89
- static isDocID(docId) {
90
- if (!/^([a-fA-F0-9]){24}$/.test(docId)) {
91
- throw new Error(ErrorCode.DocIDError);
92
- }
93
- return true;
94
- }
95
- static isValidOptions(options = {}) {
96
- if (getType(options) !== 'object') {
97
- throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `options must be an object` }));
98
- }
99
- const keys = Object.keys(options);
100
- for (const index in keys) {
101
- if (validOptionsKeys.indexOf(keys[index]) < 0) {
102
- throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `${keys[index]} is invalid options key` }));
103
- }
104
- }
105
- const { limit, offset, projection, order } = options;
106
- const { multiple } = options;
107
- if (limit !== undefined) {
108
- Validate.isInteger('limit', limit);
109
- }
110
- if (offset !== undefined) {
111
- Validate.isInteger('offset', offset);
112
- }
113
- if (projection !== undefined) {
114
- Validate.isProjection('projection', projection);
115
- }
116
- if (order !== undefined) {
117
- Validate.isOrder('order', order);
118
- }
119
- if (multiple !== undefined) {
120
- Validate.mustBeBoolean('multiple', multiple);
121
- }
122
- if (options.timeout !== undefined) {
123
- Validate.isInteger('timeout', options.timeout);
124
- }
125
- return true;
126
- }
127
- static isCentersPhere(param) {
128
- if (Array.isArray(param) && param.length === 2) {
129
- if (getType(param[0]) === 'object' &&
130
- param[0]._internalType === SYMBOL_GEO_POINT &&
131
- typeof param[1] === 'number') {
132
- return true;
133
- }
134
- if (Array.isArray(param[0]) && param[0].length === 2) {
135
- const longitude = param[0][0];
136
- const latitude = param[0][1];
137
- Validate.isGeopoint('longitude', longitude);
138
- Validate.isGeopoint('latitude', latitude);
139
- if (typeof param[1] === 'number') {
140
- return true;
141
- }
142
- }
143
- }
144
- throw new Error(`${ErrorCode.CentersPhereError}`);
145
- }
146
- }
1
+ import { ErrorCode, WhereFilterOpList, OrderDirectionList, FieldType } from './constant';
2
+ import { Util } from './util';
3
+ import { ERRORS } from './const/code';
4
+ import { E } from './utils/utils';
5
+ import { getType } from './utils/type';
6
+ import { SYMBOL_GEO_POINT } from './helper/symbol';
7
+ const validOptionsKeys = ['limit', 'offset', 'projection', 'order', 'multiple', 'timeout', 'raw'];
8
+ export class Validate {
9
+ static isGeopoint(point, degree) {
10
+ if (Util.whichType(degree) !== FieldType.Number) {
11
+ throw new Error('Geo Point must be number type');
12
+ }
13
+ const degreeAbs = Math.abs(degree);
14
+ if (point === 'latitude' && degreeAbs > 90) {
15
+ throw new Error('latitude should be a number ranges from -90 to 90');
16
+ }
17
+ else if (point === 'longitude' && degreeAbs > 180) {
18
+ throw new Error('longitude should be a number ranges from -180 to 180');
19
+ }
20
+ return true;
21
+ }
22
+ static isInteger(param, num) {
23
+ if (!Number.isInteger(num)) {
24
+ throw new Error(param + ErrorCode.IntergerError);
25
+ }
26
+ return true;
27
+ }
28
+ static mustBeBoolean(param, bool) {
29
+ if (typeof bool !== 'boolean') {
30
+ throw new Error(param + ErrorCode.BooleanError);
31
+ }
32
+ return true;
33
+ }
34
+ static isProjection(param, value) {
35
+ if (getType(value) !== 'object') {
36
+ throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `${param} projection must be an object` }));
37
+ }
38
+ for (const key in value) {
39
+ const subValue = value[key];
40
+ if (getType(subValue) === 'number') {
41
+ if (subValue !== 0 && subValue !== 1) {
42
+ throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `if the value in projection is of number, it must be 0 or 1` }));
43
+ }
44
+ }
45
+ else if (getType(subValue) === 'object') {
46
+ }
47
+ else {
48
+ throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: 'invalid projection' }));
49
+ }
50
+ }
51
+ return true;
52
+ }
53
+ static isOrder(param, value) {
54
+ if (getType(value) !== 'object') {
55
+ throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `${param} order must be an object` }));
56
+ }
57
+ for (let key in value) {
58
+ const subValue = value[key];
59
+ if (subValue !== 1 && subValue !== -1) {
60
+ throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `order value must be 1 or -1` }));
61
+ }
62
+ }
63
+ return true;
64
+ }
65
+ static isFieldOrder(direction) {
66
+ if (OrderDirectionList.indexOf(direction) === -1) {
67
+ throw new Error(ErrorCode.DirectionError);
68
+ }
69
+ return true;
70
+ }
71
+ static isFieldPath(path) {
72
+ if (!/^[a-zA-Z0-9-_\.]/.test(path)) {
73
+ throw new Error();
74
+ }
75
+ return true;
76
+ }
77
+ static isOperator(op) {
78
+ if (WhereFilterOpList.indexOf(op) === -1) {
79
+ throw new Error(ErrorCode.OpStrError);
80
+ }
81
+ return true;
82
+ }
83
+ static isCollName(name) {
84
+ if (!/^[a-zA-Z0-9]([a-zA-Z0-9-_]){1,32}$/.test(name)) {
85
+ throw new Error(ErrorCode.CollNameError);
86
+ }
87
+ return true;
88
+ }
89
+ static isDocID(docId) {
90
+ if (!/^([a-fA-F0-9]){24}$/.test(docId)) {
91
+ throw new Error(ErrorCode.DocIDError);
92
+ }
93
+ return true;
94
+ }
95
+ static isValidOptions(options = {}) {
96
+ if (getType(options) !== 'object') {
97
+ throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `options must be an object` }));
98
+ }
99
+ const keys = Object.keys(options);
100
+ for (const index in keys) {
101
+ if (validOptionsKeys.indexOf(keys[index]) < 0) {
102
+ throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `${keys[index]} is invalid options key` }));
103
+ }
104
+ }
105
+ const { limit, offset, projection, order } = options;
106
+ const { multiple } = options;
107
+ if (limit !== undefined) {
108
+ Validate.isInteger('limit', limit);
109
+ }
110
+ if (offset !== undefined) {
111
+ Validate.isInteger('offset', offset);
112
+ }
113
+ if (projection !== undefined) {
114
+ Validate.isProjection('projection', projection);
115
+ }
116
+ if (order !== undefined) {
117
+ Validate.isOrder('order', order);
118
+ }
119
+ if (multiple !== undefined) {
120
+ Validate.mustBeBoolean('multiple', multiple);
121
+ }
122
+ if (options.timeout !== undefined) {
123
+ Validate.isInteger('timeout', options.timeout);
124
+ }
125
+ return true;
126
+ }
127
+ static isValidAggregation(stage) {
128
+ if (Object.keys(stage).length !== 1) {
129
+ throw E(Object.assign(Object.assign({}, ERRORS.INVALID_PARAM), { message: `aggregation stage must have one key` }));
130
+ }
131
+ return true;
132
+ }
133
+ static isCentersPhere(param) {
134
+ if (Array.isArray(param) && param.length === 2) {
135
+ if (getType(param[0]) === 'object' &&
136
+ param[0]._internalType === SYMBOL_GEO_POINT &&
137
+ typeof param[1] === 'number') {
138
+ return true;
139
+ }
140
+ if (Array.isArray(param[0]) && param[0].length === 2) {
141
+ const longitude = param[0][0];
142
+ const latitude = param[0][1];
143
+ Validate.isGeopoint('longitude', longitude);
144
+ Validate.isGeopoint('latitude', latitude);
145
+ if (typeof param[1] === 'number') {
146
+ return true;
147
+ }
148
+ }
149
+ }
150
+ throw new Error(`${ErrorCode.CentersPhereError}`);
151
+ }
152
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/database",
3
- "version": "1.2.3",
3
+ "version": "1.4.1-alpha.0",
4
4
  "description": "database for (node.)js sdk ",
5
5
  "main": "dist/commonjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -0,0 +1,23 @@
1
+ import { SYMBOL_OBJECTID } from '../helper/symbol'
2
+
3
+ export class ObjectId {
4
+ id: string
5
+
6
+ constructor({ id = '' } = {}) {
7
+ this.id = id
8
+ }
9
+
10
+ get _internalType() {
11
+ return SYMBOL_OBJECTID
12
+ }
13
+
14
+ parse() {
15
+ return {
16
+ $oid: this.id
17
+ }
18
+ }
19
+ }
20
+
21
+ export function ObjectIdConstructor(opt) {
22
+ return new ObjectId(opt)
23
+ }
package/src/aggregate.ts CHANGED
@@ -3,21 +3,31 @@ import { EJSON } from 'bson'
3
3
  import { QuerySerializer } from './serializer/query'
4
4
  import { stringifyByEJSON } from './utils/utils'
5
5
  import { getType } from './utils/type'
6
+ import { Validate } from './validate'
7
+ import { Point } from './geo/point'
6
8
 
7
- const EARTH_RADIUS = 6378100
9
+ // const EARTH_RADIUS = 6378100
8
10
 
9
11
  export default class Aggregation {
10
12
  _db: any
11
13
  _request: any
12
14
  _stages: any[]
13
15
  _collectionName: string
14
- constructor(db?, collectionName?) {
16
+ constructor(db?, collectionName?, rawPipeline?) {
15
17
  this._stages = []
16
18
 
17
19
  if (db && collectionName) {
18
20
  this._db = db
19
21
  this._request = new Db.reqClass(this._db.config)
20
22
  this._collectionName = collectionName
23
+
24
+ if (rawPipeline && rawPipeline.length > 0) {
25
+ rawPipeline.forEach((stage) => {
26
+ Validate.isValidAggregation(stage)
27
+ const stageName = Object.keys(stage)[0]
28
+ this._pipe(stageName, stage[stageName], true)
29
+ })
30
+ }
21
31
  }
22
32
  }
23
33
 
@@ -52,7 +62,7 @@ export default class Aggregation {
52
62
  })
53
63
  }
54
64
 
55
- _pipe(stage, param) {
65
+ _pipe(stage, param, raw = false) {
56
66
  // 区分param是否为字符串
57
67
  let transformParam = ''
58
68
  if (getType(param) === 'object') {
@@ -62,7 +72,7 @@ export default class Aggregation {
62
72
  }
63
73
 
64
74
  this._stages.push({
65
- stageKey: `$${stage}`,
75
+ stageKey: raw ? stage : `$${stage}`,
66
76
  stageValue: transformParam
67
77
  })
68
78
  return this
@@ -88,12 +98,14 @@ export default class Aggregation {
88
98
  if (param.query) {
89
99
  param.query = QuerySerializer.encode(param.query)
90
100
  }
91
-
101
+
92
102
  // 判断是否有 distanceMultiplier 参数
93
103
  if (param.distanceMultiplier && typeof (param.distanceMultiplier) === 'number') {
94
- param.distanceMultiplier = param.distanceMultiplier * EARTH_RADIUS
95
- } else {
96
- param.distanceMultiplier = EARTH_RADIUS
104
+ param.distanceMultiplier = param.distanceMultiplier
105
+ }
106
+
107
+ if(param.near) {
108
+ param.near = new Point(param.near.longitude, param.near.latitude).toJSON()
97
109
  }
98
110
  return this._pipe('geoNear', param)
99
111
  }
package/src/collection.ts CHANGED
@@ -127,8 +127,8 @@ export class CollectionReference extends Query {
127
127
  // }
128
128
  }
129
129
 
130
- aggregate() {
131
- return new Aggregation(this._db, this._coll)
130
+ aggregate(rawPipeline : object[] = []) {
131
+ return new Aggregation(this._db, this._coll, (this._apiOptions.raw || false) ? rawPipeline : [])
132
132
  }
133
133
 
134
134
  /**
package/src/command.ts CHANGED
@@ -55,8 +55,12 @@ export const Command = {
55
55
  return new QueryCommand(QUERY_COMMANDS_LITERAL.SIZE, [val])
56
56
  },
57
57
 
58
- mod(val: number[]) {
59
- return new QueryCommand(QUERY_COMMANDS_LITERAL.MOD, [val])
58
+ mod() {
59
+ if (arguments.length == 1)
60
+ return new QueryCommand(QUERY_COMMANDS_LITERAL.MOD, [arguments[0]])
61
+ if (arguments.length == 2)
62
+ return new QueryCommand(QUERY_COMMANDS_LITERAL.MOD, [[arguments[0], arguments[1]]])
63
+ return new QueryCommand(QUERY_COMMANDS_LITERAL.MOD, arguments)
60
64
  },
61
65
 
62
66
  geoNear(val: any) {
@@ -190,11 +194,11 @@ export const Command = {
190
194
  values:
191
195
  | string
192
196
  | {
193
- search: string
194
- language?: string
195
- caseSensitive?: boolean
196
- diacriticSensitive: boolean
197
- }
197
+ search: string
198
+ language?: string
199
+ caseSensitive?: boolean
200
+ diacriticSensitive: boolean
201
+ }
198
202
  ) {
199
203
  if (isString(values)) {
200
204
  return {
package/src/document.ts CHANGED
@@ -245,7 +245,7 @@ export class DocumentReference {
245
245
  const param = {
246
246
  collectionName: this._coll,
247
247
  transactionId: this._transactionId,
248
- data: UpdateSerializer.encodeEJSON(data),
248
+ data: UpdateSerializer.encodeEJSON(data, this._apiOptions.raw || false),
249
249
  query,
250
250
  queryType: QueryType.DOC,
251
251
  multi: false,
@@ -17,3 +17,5 @@ export const SYMBOL_GEO_MULTI_POLYGON = InternalSymbol.for('SYMBOL_GEO_MULTI_POL
17
17
  export const SYMBOL_SERVER_DATE = InternalSymbol.for('SERVER_DATE')
18
18
 
19
19
  export const SYMBOL_REGEXP = InternalSymbol.for('REGEXP')
20
+
21
+ export const SYMBOL_OBJECTID = InternalSymbol.for('OBJECTID')
package/src/index.ts CHANGED
@@ -5,6 +5,7 @@ import { Command } from './command'
5
5
  import { ServerDateConstructor } from './serverDate/index'
6
6
  import { RegExpConstructor } from './regexp/index'
7
7
  import { startTransaction, runTransaction } from './transaction/index'
8
+ import { ObjectIdConstructor } from './ObjectId/index'
8
9
 
9
10
  /**
10
11
  * 地理位置类型
@@ -59,6 +60,8 @@ export class Db {
59
60
 
60
61
  serverDate: any
61
62
 
63
+ ObjectId: any
64
+
62
65
  startTransaction: any
63
66
 
64
67
  runTransaction: any
@@ -95,6 +98,7 @@ export class Db {
95
98
  this.serverDate = ServerDateConstructor
96
99
  this.command = Command
97
100
  this.RegExp = RegExpConstructor
101
+ this.ObjectId = ObjectIdConstructor
98
102
  this.startTransaction = startTransaction
99
103
  this.runTransaction = runTransaction
100
104
  }
package/src/query.ts CHANGED
@@ -25,6 +25,7 @@ interface GetRes {
25
25
 
26
26
  interface BaseOption {
27
27
  timeout?: number // 接口调用超时设置
28
+ raw?: boolean // 原生语句查询
28
29
  }
29
30
 
30
31
  export interface QueryOption extends BaseOption {
@@ -303,11 +304,11 @@ export class Query {
303
304
  if (keys.length && !checkFlag) {
304
305
  throw Error(ErrorCode.QueryParamValueError)
305
306
  }
306
-
307
+
307
308
  return new Query(
308
309
  this._db,
309
310
  this._coll,
310
- QuerySerializer.encodeEJSON(query),
311
+ QuerySerializer.encodeEJSON(query, this._apiOptions.raw || false),
311
312
  this._apiOptions,
312
313
  this._transactionId
313
314
  // this._fieldOrders,
@@ -414,7 +415,7 @@ export class Query {
414
415
  multi,
415
416
  merge: true,
416
417
  upsert: false,
417
- data: UpdateSerializer.encodeEJSON(data)
418
+ data: UpdateSerializer.encodeEJSON(data, this._apiOptions.raw || false)
418
419
  }
419
420
 
420
421
  if (this._fieldFilters) {
@@ -545,7 +546,7 @@ export class Query {
545
546
  let param: any = {
546
547
  collectionName: this._coll,
547
548
  queryType: QueryType.WHERE,
548
- data: UpdateSerializer.encodeEJSON(data)
549
+ data: UpdateSerializer.encodeEJSON(data, false)
549
550
  }
550
551
 
551
552
  if (this._transactionId) {
@@ -1,5 +1,5 @@
1
1
  // transpile internal data type
2
- import { SYMBOL_GEO_POINT, SYMBOL_SERVER_DATE, SYMBOL_REGEXP } from '../helper/symbol'
2
+ import { SYMBOL_GEO_POINT, SYMBOL_SERVER_DATE, SYMBOL_OBJECTID, SYMBOL_REGEXP } from '../helper/symbol'
3
3
  import {
4
4
  getType,
5
5
  isObject,
@@ -13,6 +13,7 @@ import { Point } from '../geo/index'
13
13
  import { ServerDate } from '../serverDate/index'
14
14
  import { RegExp } from '../regexp/index'
15
15
  import { LogicCommand } from '../commands/logic'
16
+ import { ObjectId } from '../ObjectId/index'
16
17
 
17
18
  export type IQueryCondition = Record<string, any> | LogicCommand
18
19
 
@@ -36,6 +37,9 @@ function serializeHelper(val: any, visited: object[]): Record<string, any> {
36
37
  case SYMBOL_REGEXP: {
37
38
  return (val as RegExp).parse()
38
39
  }
40
+ case SYMBOL_OBJECTID: {
41
+ return (val as ObjectId).parse()
42
+ }
39
43
  default: {
40
44
  return val.toJSON ? val.toJSON() : val
41
45
  }
@@ -24,10 +24,10 @@ export class QuerySerializer {
24
24
  return encoder.encodeQuery(query)
25
25
  }
26
26
 
27
- static encodeEJSON(query: IQueryCondition | QueryCommand | LogicCommand): string {
27
+ static encodeEJSON(query: IQueryCondition | QueryCommand | LogicCommand, raw: boolean): string {
28
28
  const encoder = new QueryEncoder()
29
-
30
- return stringifyByEJSON(encoder.encodeQuery(query))
29
+
30
+ return stringifyByEJSON(raw ? query : encoder.encodeQuery(query))
31
31
  }
32
32
  }
33
33
 
@@ -25,10 +25,10 @@ export class UpdateSerializer {
25
25
  return stringifier.encodeUpdate(query)
26
26
  }
27
27
 
28
- static encodeEJSON(query: IQueryCondition | UpdateCommand): string {
28
+ static encodeEJSON(query: IQueryCondition | UpdateCommand, raw: boolean): string {
29
29
  const stringifier = new UpdateSerializer()
30
-
31
- return stringifyByEJSON(stringifier.encodeUpdate(query))
30
+
31
+ return stringifyByEJSON(raw ? query : stringifier.encodeUpdate(query))
32
32
  }
33
33
 
34
34
  encodeUpdate(query: IQueryCondition | UpdateCommand): IUpdateCondition {
package/src/validate.ts CHANGED
@@ -16,7 +16,7 @@ import { CenterSphere } from './typings'
16
16
 
17
17
  import { SYMBOL_GEO_POINT } from './helper/symbol'
18
18
 
19
- const validOptionsKeys = ['limit', 'offset', 'projection', 'order', 'multiple', 'timeout']
19
+ const validOptionsKeys = ['limit', 'offset', 'projection', 'order', 'multiple', 'timeout', 'raw']
20
20
 
21
21
  /**
22
22
  * 校验模块
@@ -228,6 +228,20 @@ export class Validate {
228
228
  return true
229
229
  }
230
230
 
231
+ /**
232
+ *
233
+ * @static
234
+ * @param {StageName:{}|string} stage
235
+ * @returns {Boolean}
236
+ * @memberof Validate
237
+ */
238
+ static isValidAggregation(stage: object): Boolean {
239
+ if (Object.keys(stage).length !== 1) {
240
+ throw E({ ...ERRORS.INVALID_PARAM, message: `aggregation stage must have one key` })
241
+ }
242
+ return true
243
+ }
244
+
231
245
  /**
232
246
  *
233
247
  * @static
package/.DS_Store DELETED
Binary file
@@ -1,8 +0,0 @@
1
- export declare class Decimal128Type {
2
- readonly decimalStr: string;
3
- constructor(decimalStr?: string);
4
- readonly _internalType: import("../utils/symbol").InternalSymbol;
5
- parse(): any;
6
- toJSON(): any;
7
- }
8
- export declare function Decimal128TypeConstructor(decimalStr: any): Decimal128Type;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const bson_1 = require("bson");
4
- const symbol_1 = require("../helper/symbol");
5
- class Decimal128Type {
6
- constructor(decimalStr = '') {
7
- if (typeof decimalStr !== 'string') {
8
- throw new TypeError(`Decimal128Type 入参必须为 string!`);
9
- }
10
- this.decimalStr = decimalStr;
11
- }
12
- get _internalType() {
13
- return symbol_1.SYMBOL_DECIMAL128;
14
- }
15
- parse() {
16
- return bson_1.Decimal128.fromString(this.decimalStr);
17
- }
18
- toJSON() {
19
- return bson_1.Decimal128.fromString(this.decimalStr);
20
- }
21
- }
22
- exports.Decimal128Type = Decimal128Type;
23
- function Decimal128TypeConstructor(decimalStr) {
24
- return new Decimal128Type(decimalStr);
25
- }
26
- exports.Decimal128TypeConstructor = Decimal128TypeConstructor;
@@ -1 +0,0 @@
1
- export declare const createPromiseCallback: () => any;