@cloudbase/database 1.4.3 → 1.5.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 (196) hide show
  1. package/dist/commonjs/ObjectId/index.d.ts +1 -1
  2. package/dist/commonjs/ObjectId/index.js +16 -9
  3. package/dist/commonjs/aggregate.js +126 -75
  4. package/dist/commonjs/collection.d.ts +3 -2
  5. package/dist/commonjs/collection.js +131 -58
  6. package/dist/commonjs/command.d.ts +5 -5
  7. package/dist/commonjs/command.js +181 -154
  8. package/dist/commonjs/commands/logic.js +30 -20
  9. package/dist/commonjs/commands/query.d.ts +1 -1
  10. package/dist/commonjs/commands/query.js +85 -65
  11. package/dist/commonjs/commands/update.js +9 -7
  12. package/dist/commonjs/config/error.config.js +1 -0
  13. package/dist/commonjs/const/code.js +1 -0
  14. package/dist/commonjs/constant.d.ts +7 -7
  15. package/dist/commonjs/constant.js +13 -11
  16. package/dist/commonjs/document.d.ts +10 -6
  17. package/dist/commonjs/document.js +305 -193
  18. package/dist/commonjs/geo/index.js +20 -9
  19. package/dist/commonjs/geo/lineString.d.ts +1 -1
  20. package/dist/commonjs/geo/lineString.js +62 -33
  21. package/dist/commonjs/geo/multiLineString.d.ts +1 -1
  22. package/dist/commonjs/geo/multiLineString.js +71 -32
  23. package/dist/commonjs/geo/multiPoint.d.ts +1 -1
  24. package/dist/commonjs/geo/multiPoint.js +58 -29
  25. package/dist/commonjs/geo/multiPolygon.d.ts +1 -1
  26. package/dist/commonjs/geo/multiPolygon.js +96 -36
  27. package/dist/commonjs/geo/point.d.ts +1 -1
  28. package/dist/commonjs/geo/point.js +30 -23
  29. package/dist/commonjs/geo/polygon.d.ts +1 -1
  30. package/dist/commonjs/geo/polygon.js +78 -39
  31. package/dist/commonjs/helper/symbol.js +17 -5
  32. package/dist/commonjs/index.d.ts +8 -2
  33. package/dist/commonjs/index.js +73 -20
  34. package/dist/commonjs/lib/util.d.ts +1 -0
  35. package/dist/commonjs/lib/util.js +26 -0
  36. package/dist/commonjs/operator-map.js +7 -6
  37. package/dist/commonjs/query.d.ts +8 -4
  38. package/dist/commonjs/query.js +308 -201
  39. package/dist/commonjs/regexp/index.d.ts +1 -1
  40. package/dist/commonjs/regexp/index.js +16 -9
  41. package/dist/commonjs/serializer/common.d.ts +2 -2
  42. package/dist/commonjs/serializer/common.js +59 -22
  43. package/dist/commonjs/serializer/datatype.d.ts +2 -2
  44. package/dist/commonjs/serializer/datatype.js +58 -21
  45. package/dist/commonjs/serializer/query.d.ts +1 -1
  46. package/dist/commonjs/serializer/query.js +137 -127
  47. package/dist/commonjs/serializer/update.d.ts +1 -1
  48. package/dist/commonjs/serializer/update.js +83 -78
  49. package/dist/commonjs/serverDate/index.d.ts +1 -1
  50. package/dist/commonjs/serverDate/index.js +16 -9
  51. package/dist/commonjs/transaction/collection.d.ts +7 -0
  52. package/dist/commonjs/transaction/collection.js +49 -0
  53. package/dist/commonjs/transaction/document.d.ts +27 -0
  54. package/dist/commonjs/transaction/document.js +205 -0
  55. package/dist/commonjs/transaction/index.js +196 -86
  56. package/dist/commonjs/transaction/query.d.ts +43 -0
  57. package/dist/commonjs/transaction/query.js +261 -0
  58. package/dist/commonjs/typings/index.d.ts +4 -4
  59. package/dist/commonjs/typings/realtime.d.ts +16 -16
  60. package/dist/commonjs/util.js +123 -92
  61. package/dist/commonjs/utils/error.d.ts +2 -1
  62. package/dist/commonjs/utils/error.js +74 -38
  63. package/dist/commonjs/utils/symbol.js +33 -14
  64. package/dist/commonjs/utils/type.d.ts +1 -1
  65. package/dist/commonjs/utils/type.js +25 -13
  66. package/dist/commonjs/utils/utils.d.ts +4 -1
  67. package/dist/commonjs/utils/utils.js +93 -22
  68. package/dist/commonjs/validate.js +79 -63
  69. package/dist/esm/ObjectId/index.d.ts +1 -1
  70. package/dist/esm/ObjectId/index.js +15 -8
  71. package/dist/esm/aggregate.js +118 -66
  72. package/dist/esm/collection.d.ts +3 -2
  73. package/dist/esm/collection.js +125 -52
  74. package/dist/esm/command.d.ts +5 -5
  75. package/dist/esm/command.js +175 -147
  76. package/dist/esm/commands/logic.js +30 -20
  77. package/dist/esm/commands/query.d.ts +1 -1
  78. package/dist/esm/commands/query.js +91 -71
  79. package/dist/esm/commands/update.js +8 -6
  80. package/dist/esm/config/error.config.js +1 -1
  81. package/dist/esm/const/code.js +1 -1
  82. package/dist/esm/constant.d.ts +7 -7
  83. package/dist/esm/constant.js +12 -11
  84. package/dist/esm/document.d.ts +10 -6
  85. package/dist/esm/document.js +297 -185
  86. package/dist/esm/geo/interface.js +1 -0
  87. package/dist/esm/geo/lineString.d.ts +1 -1
  88. package/dist/esm/geo/lineString.js +57 -28
  89. package/dist/esm/geo/multiLineString.d.ts +1 -1
  90. package/dist/esm/geo/multiLineString.js +66 -27
  91. package/dist/esm/geo/multiPoint.d.ts +1 -1
  92. package/dist/esm/geo/multiPoint.js +53 -24
  93. package/dist/esm/geo/multiPolygon.d.ts +1 -1
  94. package/dist/esm/geo/multiPolygon.js +91 -31
  95. package/dist/esm/geo/point.d.ts +1 -1
  96. package/dist/esm/geo/point.js +26 -19
  97. package/dist/esm/geo/polygon.d.ts +1 -1
  98. package/dist/esm/geo/polygon.js +73 -34
  99. package/dist/esm/helper/symbol.js +13 -13
  100. package/dist/esm/index.d.ts +8 -2
  101. package/dist/esm/index.js +62 -9
  102. package/dist/esm/lib/util.d.ts +1 -0
  103. package/dist/esm/lib/util.js +22 -0
  104. package/dist/esm/operator-map.js +4 -4
  105. package/dist/esm/query.d.ts +8 -4
  106. package/dist/esm/query.js +299 -192
  107. package/dist/esm/regexp/index.d.ts +1 -1
  108. package/dist/esm/regexp/index.js +15 -8
  109. package/dist/esm/serializer/common.d.ts +2 -2
  110. package/dist/esm/serializer/common.js +49 -13
  111. package/dist/esm/serializer/datatype.d.ts +2 -2
  112. package/dist/esm/serializer/datatype.js +44 -8
  113. package/dist/esm/serializer/query.d.ts +1 -1
  114. package/dist/esm/serializer/query.js +112 -102
  115. package/dist/esm/serializer/update.d.ts +1 -1
  116. package/dist/esm/serializer/update.js +69 -64
  117. package/dist/esm/serverDate/index.d.ts +1 -1
  118. package/dist/esm/serverDate/index.js +15 -8
  119. package/dist/esm/transaction/collection.d.ts +7 -0
  120. package/dist/esm/transaction/collection.js +46 -0
  121. package/dist/esm/transaction/document.d.ts +27 -0
  122. package/dist/esm/transaction/document.js +202 -0
  123. package/dist/esm/transaction/index.js +191 -81
  124. package/dist/esm/transaction/query.d.ts +43 -0
  125. package/dist/esm/transaction/query.js +258 -0
  126. package/dist/esm/typings/index.d.ts +4 -4
  127. package/dist/esm/typings/index.js +1 -0
  128. package/dist/esm/typings/realtime.d.ts +16 -16
  129. package/dist/esm/typings/realtime.js +1 -0
  130. package/dist/esm/util.js +121 -90
  131. package/dist/esm/utils/error.d.ts +2 -1
  132. package/dist/esm/utils/error.js +70 -35
  133. package/dist/esm/utils/symbol.js +33 -14
  134. package/dist/esm/utils/type.d.ts +1 -1
  135. package/dist/esm/utils/type.js +12 -12
  136. package/dist/esm/utils/utils.d.ts +4 -1
  137. package/dist/esm/utils/utils.js +78 -16
  138. package/dist/esm/validate.js +65 -49
  139. package/jest.config.js +14 -0
  140. package/package.json +14 -10
  141. package/src/aggregate.ts +1 -5
  142. package/src/collection.ts +15 -2
  143. package/src/document.ts +45 -34
  144. package/src/index.ts +51 -4
  145. package/src/query.ts +33 -29
  146. package/src/serializer/query.ts +18 -6
  147. package/src/transaction/index.ts +1 -1
  148. package/src/typings/index.ts +0 -4
  149. package/src/utils/utils.ts +46 -0
  150. package/src/validate.ts +3 -6
  151. package/tests/gateway-contract.test.ts +180 -0
  152. package/tests/index.test.ts +283 -0
  153. package/tests/transaction-query.test.ts +207 -0
  154. package/tsconfig.esm.json +4 -2
  155. package/tsconfig.json +16 -6
  156. package/tsconfig.test.json +15 -0
  157. package/dist/commonjs/realtime/error.d.ts +0 -7
  158. package/dist/commonjs/realtime/error.js +0 -11
  159. package/dist/commonjs/realtime/listener.d.ts +0 -14
  160. package/dist/commonjs/realtime/listener.js +0 -17
  161. package/dist/commonjs/realtime/message.d.ts +0 -3
  162. package/dist/commonjs/realtime/message.js +0 -10
  163. package/dist/commonjs/realtime/snapshot.d.ts +0 -16
  164. package/dist/commonjs/realtime/snapshot.js +0 -42
  165. package/dist/commonjs/realtime/virtual-websocket-client.d.ts +0 -63
  166. package/dist/commonjs/realtime/virtual-websocket-client.js +0 -736
  167. package/dist/commonjs/realtime/websocket-client.d.ts +0 -78
  168. package/dist/commonjs/realtime/websocket-client.js +0 -567
  169. package/dist/commonjs/realtime/ws-event.d.ts +0 -126
  170. package/dist/commonjs/realtime/ws-event.js +0 -139
  171. package/dist/commonjs/transaction.d.ts +0 -42
  172. package/dist/commonjs/transaction.js +0 -126
  173. package/dist/esm/realtime/error.d.ts +0 -7
  174. package/dist/esm/realtime/error.js +0 -8
  175. package/dist/esm/realtime/listener.d.ts +0 -14
  176. package/dist/esm/realtime/listener.js +0 -14
  177. package/dist/esm/realtime/message.d.ts +0 -3
  178. package/dist/esm/realtime/message.js +0 -6
  179. package/dist/esm/realtime/snapshot.d.ts +0 -16
  180. package/dist/esm/realtime/snapshot.js +0 -39
  181. package/dist/esm/realtime/virtual-websocket-client.d.ts +0 -63
  182. package/dist/esm/realtime/virtual-websocket-client.js +0 -733
  183. package/dist/esm/realtime/websocket-client.d.ts +0 -78
  184. package/dist/esm/realtime/websocket-client.js +0 -564
  185. package/dist/esm/realtime/ws-event.d.ts +0 -126
  186. package/dist/esm/realtime/ws-event.js +0 -137
  187. package/dist/esm/transaction.d.ts +0 -42
  188. package/dist/esm/transaction.js +0 -121
  189. package/src/realtime/error.ts +0 -19
  190. package/src/realtime/listener.ts +0 -35
  191. package/src/realtime/message.ts +0 -14
  192. package/src/realtime/snapshot.ts +0 -60
  193. package/src/realtime/virtual-websocket-client.ts +0 -1195
  194. package/src/realtime/websocket-client.ts +0 -995
  195. package/src/realtime/ws-event.ts +0 -163
  196. package/src/transaction.ts +0 -190
@@ -4,17 +4,18 @@ import { getType, isArray } from '../utils/type';
4
4
  import { operatorToString } from '../operator-map';
5
5
  import { flattenQueryObject, encodeInternalDataType, mergeConditionAfterEncode } from './common';
6
6
  import { stringifyByEJSON } from '../utils/utils';
7
- export class UpdateSerializer {
8
- constructor() { }
9
- static encode(query) {
10
- const stringifier = new UpdateSerializer();
11
- return stringifier.encodeUpdate(query);
7
+ var UpdateSerializer = (function () {
8
+ function UpdateSerializer() {
12
9
  }
13
- static encodeEJSON(query, raw) {
14
- const stringifier = new UpdateSerializer();
10
+ UpdateSerializer.encode = function (query) {
11
+ var stringifier = new UpdateSerializer();
12
+ return stringifier.encodeUpdate(query);
13
+ };
14
+ UpdateSerializer.encodeEJSON = function (query, raw) {
15
+ var stringifier = new UpdateSerializer();
15
16
  return stringifyByEJSON(raw ? query : stringifier.encodeUpdate(query));
16
- }
17
- encodeUpdate(query) {
17
+ };
18
+ UpdateSerializer.prototype.encodeUpdate = function (query) {
18
19
  if (isUpdateCommand(query)) {
19
20
  return this.encodeUpdateCommand(query);
20
21
  }
@@ -24,8 +25,8 @@ export class UpdateSerializer {
24
25
  else {
25
26
  return query;
26
27
  }
27
- }
28
- encodeUpdateCommand(query) {
28
+ };
29
+ UpdateSerializer.prototype.encodeUpdateCommand = function (query) {
29
30
  if (query.fieldName === SYMBOL_UNSET_FIELD_NAME) {
30
31
  throw new Error('Cannot encode a comparison command with unset field name');
31
32
  }
@@ -43,31 +44,33 @@ export class UpdateSerializer {
43
44
  return this.encodeFieldUpdateCommand(query);
44
45
  }
45
46
  }
46
- }
47
- encodeFieldUpdateCommand(query) {
48
- const $op = operatorToString(query.operator);
47
+ };
48
+ UpdateSerializer.prototype.encodeFieldUpdateCommand = function (query) {
49
+ var _a, _b, _c, _d;
50
+ var $op = operatorToString(query.operator);
49
51
  switch (query.operator) {
50
52
  case UPDATE_COMMANDS_LITERAL.REMOVE: {
51
- return {
52
- [$op]: {
53
- [query.fieldName]: ''
54
- }
55
- };
53
+ return _a = {},
54
+ _a[$op] = (_b = {},
55
+ _b[query.fieldName] = '',
56
+ _b),
57
+ _a;
56
58
  }
57
59
  default: {
58
- return {
59
- [$op]: {
60
- [query.fieldName]: query.operands[0]
61
- }
62
- };
60
+ return _c = {},
61
+ _c[$op] = (_d = {},
62
+ _d[query.fieldName] = query.operands[0],
63
+ _d),
64
+ _c;
63
65
  }
64
66
  }
65
- }
66
- encodeArrayUpdateCommand(query) {
67
- const $op = operatorToString(query.operator);
67
+ };
68
+ UpdateSerializer.prototype.encodeArrayUpdateCommand = function (query) {
69
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
70
+ var $op = operatorToString(query.operator);
68
71
  switch (query.operator) {
69
72
  case UPDATE_COMMANDS_LITERAL.PUSH: {
70
- let modifiers;
73
+ var modifiers = void 0;
71
74
  if (isArray(query.operands)) {
72
75
  modifiers = {
73
76
  $each: query.operands.map(encodeInternalDataType)
@@ -76,64 +79,66 @@ export class UpdateSerializer {
76
79
  else {
77
80
  modifiers = query.operands;
78
81
  }
79
- return {
80
- [$op]: {
81
- [query.fieldName]: modifiers
82
- }
83
- };
82
+ return _a = {},
83
+ _a[$op] = (_b = {},
84
+ _b[query.fieldName] = modifiers,
85
+ _b),
86
+ _a;
84
87
  }
85
88
  case UPDATE_COMMANDS_LITERAL.UNSHIFT: {
86
- const modifiers = {
89
+ var modifiers = {
87
90
  $each: query.operands.map(encodeInternalDataType),
88
91
  $position: 0
89
92
  };
90
- return {
91
- [$op]: {
92
- [query.fieldName]: modifiers
93
- }
94
- };
93
+ return _c = {},
94
+ _c[$op] = (_d = {},
95
+ _d[query.fieldName] = modifiers,
96
+ _d),
97
+ _c;
95
98
  }
96
99
  case UPDATE_COMMANDS_LITERAL.POP: {
97
- return {
98
- [$op]: {
99
- [query.fieldName]: 1
100
- }
101
- };
100
+ return _e = {},
101
+ _e[$op] = (_f = {},
102
+ _f[query.fieldName] = 1,
103
+ _f),
104
+ _e;
102
105
  }
103
106
  case UPDATE_COMMANDS_LITERAL.SHIFT: {
104
- return {
105
- [$op]: {
106
- [query.fieldName]: -1
107
- }
108
- };
107
+ return _g = {},
108
+ _g[$op] = (_h = {},
109
+ _h[query.fieldName] = -1,
110
+ _h),
111
+ _g;
109
112
  }
110
113
  default: {
111
- return {
112
- [$op]: {
113
- [query.fieldName]: encodeInternalDataType(query.operands)
114
- }
115
- };
114
+ return _j = {},
115
+ _j[$op] = (_k = {},
116
+ _k[query.fieldName] = encodeInternalDataType(query.operands),
117
+ _k),
118
+ _j;
116
119
  }
117
120
  }
118
- }
119
- encodeUpdateObject(query) {
120
- const flattened = flattenQueryObject(query);
121
- for (const key in flattened) {
121
+ };
122
+ UpdateSerializer.prototype.encodeUpdateObject = function (query) {
123
+ var flattened = flattenQueryObject(query);
124
+ for (var key in flattened) {
122
125
  if (/^\$/.test(key))
123
126
  continue;
124
- let val = flattened[key];
127
+ var val = flattened[key];
125
128
  if (isUpdateCommand(val)) {
126
129
  flattened[key] = val._setFieldName(key);
127
- const condition = this.encodeUpdateCommand(flattened[key]);
130
+ var condition = this.encodeUpdateCommand(flattened[key]);
128
131
  mergeConditionAfterEncode(flattened, condition, key);
129
132
  }
130
133
  else {
131
134
  flattened[key] = val = encodeInternalDataType(val);
132
- const $setCommand = new UpdateCommand(UPDATE_COMMANDS_LITERAL.SET, [val], key);
133
- const condition = this.encodeUpdateCommand($setCommand);
135
+ var $setCommand = new UpdateCommand(UPDATE_COMMANDS_LITERAL.SET, [val], key);
136
+ var condition = this.encodeUpdateCommand($setCommand);
134
137
  mergeConditionAfterEncode(flattened, condition, key);
135
138
  }
136
139
  }
137
140
  return flattened;
138
- }
139
- }
141
+ };
142
+ return UpdateSerializer;
143
+ }());
144
+ export { UpdateSerializer };
@@ -3,7 +3,7 @@ export declare class ServerDate {
3
3
  constructor({ offset }?: {
4
4
  offset?: number;
5
5
  });
6
- readonly _internalType: import("../utils/symbol").InternalSymbol;
6
+ get _internalType(): import("../utils/symbol").InternalSymbol;
7
7
  parse(): {
8
8
  $tcb_server_date: {
9
9
  offset: number;
@@ -1,19 +1,26 @@
1
1
  import { SYMBOL_SERVER_DATE } from '../helper/symbol';
2
- export class ServerDate {
3
- constructor({ offset = 0 } = {}) {
2
+ var ServerDate = (function () {
3
+ function ServerDate(_a) {
4
+ var _b = _a === void 0 ? {} : _a, _c = _b.offset, offset = _c === void 0 ? 0 : _c;
4
5
  this.offset = offset;
5
6
  }
6
- get _internalType() {
7
- return SYMBOL_SERVER_DATE;
8
- }
9
- parse() {
7
+ Object.defineProperty(ServerDate.prototype, "_internalType", {
8
+ get: function () {
9
+ return SYMBOL_SERVER_DATE;
10
+ },
11
+ enumerable: false,
12
+ configurable: true
13
+ });
14
+ ServerDate.prototype.parse = function () {
10
15
  return {
11
16
  $tcb_server_date: {
12
17
  offset: this.offset
13
18
  }
14
19
  };
15
- }
16
- }
20
+ };
21
+ return ServerDate;
22
+ }());
23
+ export { ServerDate };
17
24
  export function ServerDateConstructor(opt) {
18
25
  return new ServerDate(opt);
19
26
  }
@@ -0,0 +1,7 @@
1
+ import { DocumentReference } from './document';
2
+ import { Query } from './query';
3
+ export declare class CollectionReference extends Query {
4
+ get name(): string;
5
+ doc(docID?: string | number): DocumentReference;
6
+ add(data: any): Promise<any>;
7
+ }
@@ -0,0 +1,46 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ import { DocumentReference } from './document';
17
+ import { Query } from './query';
18
+ var CollectionReference = (function (_super) {
19
+ __extends(CollectionReference, _super);
20
+ function CollectionReference(transaction, coll) {
21
+ return _super.call(this, transaction, coll) || this;
22
+ }
23
+ Object.defineProperty(CollectionReference.prototype, "name", {
24
+ get: function () {
25
+ return this._coll;
26
+ },
27
+ enumerable: false,
28
+ configurable: true
29
+ });
30
+ CollectionReference.prototype.doc = function (docID) {
31
+ if (typeof docID !== 'string' && typeof docID !== 'number') {
32
+ throw new Error('docId必须为字符串或数字');
33
+ }
34
+ return new DocumentReference(this._transaction, this._coll, docID);
35
+ };
36
+ CollectionReference.prototype.add = function (data) {
37
+ var docID;
38
+ if (data._id !== undefined) {
39
+ docID = data._id;
40
+ }
41
+ var docRef = new DocumentReference(this._transaction, this._coll, docID);
42
+ return docRef.create(data);
43
+ };
44
+ return CollectionReference;
45
+ }(Query));
46
+ export { CollectionReference };
@@ -0,0 +1,27 @@
1
+ interface GetResult {
2
+ requestId: string;
3
+ data: any;
4
+ }
5
+ interface UpdateResult {
6
+ requestId: string;
7
+ updated: number;
8
+ }
9
+ type JsonString = string;
10
+ interface SetResult extends UpdateResult {
11
+ upserted: JsonString;
12
+ }
13
+ interface DeleteResult {
14
+ requestId: string;
15
+ deleted: number | string;
16
+ }
17
+ export declare class DocumentReference {
18
+ readonly id: string | number;
19
+ private _transaction;
20
+ private _transactionId;
21
+ create(data: any): Promise<any>;
22
+ get(): Promise<GetResult>;
23
+ set(data: Object): Promise<SetResult>;
24
+ update(data: Object): Promise<UpdateResult>;
25
+ delete(): Promise<DeleteResult>;
26
+ }
27
+ export {};
@@ -0,0 +1,202 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { EJSON } from 'bson';
49
+ import { ERRORS } from '../const/code';
50
+ import { UpdateSerializer } from '../serializer/update';
51
+ import { serialize } from '../serializer/datatype';
52
+ import { Util } from '../util';
53
+ var GET_DOC = 'database.getInTransaction';
54
+ var UPDATE_DOC = 'database.updateDocInTransaction';
55
+ var DELETE_DOC = 'database.deleteDocInTransaction';
56
+ var INSERT_DOC = 'database.insertDocInTransaction';
57
+ var DocumentReference = (function () {
58
+ function DocumentReference(transaction, coll, docID) {
59
+ this._coll = coll;
60
+ this.id = docID;
61
+ this._transaction = transaction;
62
+ this._request = this._transaction.getRequestMethod();
63
+ this._transactionId = this._transaction.getTransactionId();
64
+ }
65
+ DocumentReference.prototype.create = function (data) {
66
+ return __awaiter(this, void 0, void 0, function () {
67
+ var params, res, inserted, ok;
68
+ return __generator(this, function (_a) {
69
+ switch (_a.label) {
70
+ case 0:
71
+ params = {
72
+ collectionName: this._coll,
73
+ transactionId: this._transactionId,
74
+ data: EJSON.stringify(serialize(data), { relaxed: false })
75
+ };
76
+ if (this.id) {
77
+ params['_id'] = this.id;
78
+ }
79
+ return [4, this._request.send(INSERT_DOC, params)];
80
+ case 1:
81
+ res = _a.sent();
82
+ if (res.code) {
83
+ throw res;
84
+ }
85
+ inserted = EJSON.parse(res.inserted);
86
+ ok = EJSON.parse(res.ok);
87
+ if (ok == 1 && inserted == 1) {
88
+ return [2, __assign(__assign({}, res), { ok: ok, inserted: inserted })];
89
+ }
90
+ else {
91
+ throw new Error(ERRORS.INSERT_DOC_FAIL.message);
92
+ }
93
+ return [2];
94
+ }
95
+ });
96
+ });
97
+ };
98
+ DocumentReference.prototype.get = function () {
99
+ return __awaiter(this, void 0, void 0, function () {
100
+ var param, res;
101
+ return __generator(this, function (_a) {
102
+ switch (_a.label) {
103
+ case 0:
104
+ param = {
105
+ collectionName: this._coll,
106
+ transactionId: this._transactionId,
107
+ query: {
108
+ _id: { $eq: this.id }
109
+ }
110
+ };
111
+ return [4, this._request.send(GET_DOC, param)];
112
+ case 1:
113
+ res = _a.sent();
114
+ if (res.code)
115
+ throw res;
116
+ return [2, {
117
+ data: res.data !== 'null' ? Util.formatField(EJSON.parse(res.data)) : EJSON.parse(res.data),
118
+ requestId: res.requestId
119
+ }];
120
+ }
121
+ });
122
+ });
123
+ };
124
+ DocumentReference.prototype.set = function (data) {
125
+ return __awaiter(this, void 0, void 0, function () {
126
+ var param, res;
127
+ return __generator(this, function (_a) {
128
+ switch (_a.label) {
129
+ case 0:
130
+ param = {
131
+ collectionName: this._coll,
132
+ transactionId: this._transactionId,
133
+ query: {
134
+ _id: { $eq: this.id }
135
+ },
136
+ data: EJSON.stringify(serialize(data), { relaxed: false }),
137
+ upsert: true
138
+ };
139
+ return [4, this._request.send(UPDATE_DOC, param)];
140
+ case 1:
141
+ res = _a.sent();
142
+ if (res.code)
143
+ throw res;
144
+ return [2, __assign(__assign({}, res), { updated: EJSON.parse(res.updated), upserted: res.upserted
145
+ ? JSON.parse(res.upserted)
146
+ : null })];
147
+ }
148
+ });
149
+ });
150
+ };
151
+ DocumentReference.prototype.update = function (data) {
152
+ return __awaiter(this, void 0, void 0, function () {
153
+ var param, res;
154
+ return __generator(this, function (_a) {
155
+ switch (_a.label) {
156
+ case 0:
157
+ param = {
158
+ collectionName: this._coll,
159
+ transactionId: this._transactionId,
160
+ query: {
161
+ _id: { $eq: this.id }
162
+ },
163
+ data: EJSON.stringify(UpdateSerializer.encode(data), {
164
+ relaxed: false
165
+ })
166
+ };
167
+ return [4, this._request.send(UPDATE_DOC, param)];
168
+ case 1:
169
+ res = _a.sent();
170
+ if (res.code)
171
+ throw res;
172
+ return [2, __assign(__assign({}, res), { updated: EJSON.parse(res.updated) })];
173
+ }
174
+ });
175
+ });
176
+ };
177
+ DocumentReference.prototype.delete = function () {
178
+ return __awaiter(this, void 0, void 0, function () {
179
+ var param, res;
180
+ return __generator(this, function (_a) {
181
+ switch (_a.label) {
182
+ case 0:
183
+ param = {
184
+ collectionName: this._coll,
185
+ transactionId: this._transactionId,
186
+ query: {
187
+ _id: { $eq: this.id }
188
+ }
189
+ };
190
+ return [4, this._request.send(DELETE_DOC, param)];
191
+ case 1:
192
+ res = _a.sent();
193
+ if (res.code)
194
+ throw res;
195
+ return [2, __assign(__assign({}, res), { deleted: EJSON.parse(res.deleted) })];
196
+ }
197
+ });
198
+ });
199
+ };
200
+ return DocumentReference;
201
+ }());
202
+ export { DocumentReference };