@tdengine/websocket 3.1.9 → 3.2.1

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 (121) hide show
  1. package/lib/example/all_type_query.js +26 -22
  2. package/lib/example/all_type_stmt.js +22 -20
  3. package/lib/example/basicBatchTmq.js +14 -14
  4. package/lib/example/basicSchemaless.js +11 -11
  5. package/lib/example/basicSql.js +10 -10
  6. package/lib/example/basicStmt.js +3 -3
  7. package/lib/example/basicTmq.js +8 -9
  8. package/lib/index.d.ts +1 -1
  9. package/lib/index.d.ts.map +1 -1
  10. package/lib/index.js +1 -1
  11. package/lib/src/client/wsClient.d.ts +3 -2
  12. package/lib/src/client/wsClient.d.ts.map +1 -1
  13. package/lib/src/client/wsClient.js +66 -40
  14. package/lib/src/client/wsConnector.d.ts.map +1 -1
  15. package/lib/src/client/wsConnector.js +40 -14
  16. package/lib/src/client/wsConnectorPool.d.ts.map +1 -1
  17. package/lib/src/client/wsConnectorPool.js +29 -14
  18. package/lib/src/client/wsEventCallback.d.ts.map +1 -1
  19. package/lib/src/client/wsEventCallback.js +6 -4
  20. package/lib/src/client/wsResponse.d.ts.map +1 -1
  21. package/lib/src/client/wsResponse.js +6 -2
  22. package/lib/src/common/config.d.ts +5 -3
  23. package/lib/src/common/config.d.ts.map +1 -1
  24. package/lib/src/common/config.js +15 -5
  25. package/lib/src/common/constant.d.ts +11 -1
  26. package/lib/src/common/constant.d.ts.map +1 -1
  27. package/lib/src/common/constant.js +48 -40
  28. package/lib/src/common/log.d.ts +1 -1
  29. package/lib/src/common/log.d.ts.map +1 -1
  30. package/lib/src/common/log.js +9 -7
  31. package/lib/src/common/reqid.d.ts.map +1 -1
  32. package/lib/src/common/reqid.js +7 -7
  33. package/lib/src/common/taosResult.d.ts.map +1 -1
  34. package/lib/src/common/taosResult.js +46 -27
  35. package/lib/src/common/ut8Helper.d.ts.map +1 -1
  36. package/lib/src/common/ut8Helper.js +8 -8
  37. package/lib/src/common/utils.d.ts.map +1 -1
  38. package/lib/src/common/utils.js +17 -16
  39. package/lib/src/common/wsError.d.ts.map +1 -1
  40. package/lib/src/common/wsError.js +3 -3
  41. package/lib/src/common/wsOptions.d.ts +1 -1
  42. package/lib/src/index.d.ts +3 -3
  43. package/lib/src/index.d.ts.map +1 -1
  44. package/lib/src/sql/wsProto.d.ts.map +1 -1
  45. package/lib/src/sql/wsRows.d.ts +3 -3
  46. package/lib/src/sql/wsRows.d.ts.map +1 -1
  47. package/lib/src/sql/wsRows.js +4 -2
  48. package/lib/src/sql/wsSql.d.ts +5 -5
  49. package/lib/src/sql/wsSql.d.ts.map +1 -1
  50. package/lib/src/sql/wsSql.js +23 -15
  51. package/lib/src/stmt/FieldBindParams.d.ts +9 -0
  52. package/lib/src/stmt/FieldBindParams.d.ts.map +1 -0
  53. package/lib/src/stmt/FieldBindParams.js +13 -0
  54. package/lib/src/stmt/wsColumnInfo.d.ts +12 -0
  55. package/lib/src/stmt/wsColumnInfo.d.ts.map +1 -0
  56. package/lib/src/stmt/wsColumnInfo.js +17 -0
  57. package/lib/src/stmt/wsParams1.d.ts +14 -0
  58. package/lib/src/stmt/wsParams1.d.ts.map +1 -0
  59. package/lib/src/stmt/wsParams1.js +300 -0
  60. package/lib/src/stmt/wsParams2.d.ts +14 -0
  61. package/lib/src/stmt/wsParams2.d.ts.map +1 -0
  62. package/lib/src/stmt/wsParams2.js +203 -0
  63. package/lib/src/stmt/wsParamsBase.d.ts +45 -0
  64. package/lib/src/stmt/wsParamsBase.d.ts.map +1 -0
  65. package/lib/src/stmt/wsParamsBase.js +220 -0
  66. package/lib/src/stmt/wsProto.d.ts +13 -1
  67. package/lib/src/stmt/wsProto.d.ts.map +1 -1
  68. package/lib/src/stmt/wsProto.js +206 -2
  69. package/lib/src/stmt/wsStmt.d.ts +6 -16
  70. package/lib/src/stmt/wsStmt.d.ts.map +1 -1
  71. package/lib/src/stmt/wsStmt.js +0 -201
  72. package/lib/src/stmt/wsStmt1.d.ts +30 -0
  73. package/lib/src/stmt/wsStmt1.d.ts.map +1 -0
  74. package/lib/src/stmt/wsStmt1.js +206 -0
  75. package/lib/src/stmt/wsStmt2.d.ts +37 -0
  76. package/lib/src/stmt/wsStmt2.d.ts.map +1 -0
  77. package/lib/src/stmt/wsStmt2.js +284 -0
  78. package/lib/src/stmt/wsTableInfo.d.ts +17 -0
  79. package/lib/src/stmt/wsTableInfo.d.ts.map +1 -0
  80. package/lib/src/stmt/wsTableInfo.js +54 -0
  81. package/lib/src/tmq/config.d.ts.map +1 -1
  82. package/lib/src/tmq/config.js +2 -2
  83. package/lib/src/tmq/constant.d.ts.map +1 -1
  84. package/lib/src/tmq/constant.js +28 -28
  85. package/lib/src/tmq/tmqResponse.d.ts.map +1 -1
  86. package/lib/src/tmq/tmqResponse.js +31 -17
  87. package/lib/src/tmq/wsTmq.d.ts +2 -2
  88. package/lib/src/tmq/wsTmq.d.ts.map +1 -1
  89. package/lib/src/tmq/wsTmq.js +32 -30
  90. package/lib/test/bulkPulling/cloud.tmq.test.js +11 -11
  91. package/lib/test/bulkPulling/decimal.test.js +50 -26
  92. package/lib/test/bulkPulling/log.test.js +8 -8
  93. package/lib/test/bulkPulling/queryTables.test.js +255 -49
  94. package/lib/test/bulkPulling/schemaless.test.js +34 -34
  95. package/lib/test/bulkPulling/sql.test.js +108 -66
  96. package/lib/test/bulkPulling/stmt1.func.test.d.ts +2 -0
  97. package/lib/test/bulkPulling/stmt1.func.test.d.ts.map +1 -0
  98. package/lib/test/bulkPulling/{stmt.func.test.js → stmt1.func.test.js} +128 -116
  99. package/lib/test/bulkPulling/stmt1.type.test.d.ts +2 -0
  100. package/lib/test/bulkPulling/stmt1.type.test.d.ts.map +1 -0
  101. package/lib/test/bulkPulling/stmt1.type.test.js +399 -0
  102. package/lib/test/bulkPulling/stmt2.func.test.d.ts +2 -0
  103. package/lib/test/bulkPulling/stmt2.func.test.d.ts.map +1 -0
  104. package/lib/test/bulkPulling/stmt2.func.test.js +543 -0
  105. package/lib/test/bulkPulling/stmt2.type.test.d.ts +2 -0
  106. package/lib/test/bulkPulling/stmt2.type.test.d.ts.map +1 -0
  107. package/lib/test/bulkPulling/{stmt.type.test.js → stmt2.type.test.js} +136 -49
  108. package/lib/test/bulkPulling/tmq.test.js +225 -31
  109. package/lib/test/bulkPulling/utils.test.js +2 -2
  110. package/lib/test/bulkPulling/wsConnectPool.test.js +20 -20
  111. package/lib/test/utils.d.ts.map +1 -1
  112. package/lib/test/utils.js +130 -129
  113. package/package.json +1 -1
  114. package/readme.md +1 -0
  115. package/lib/src/stmt/wsParams.d.ts +0 -41
  116. package/lib/src/stmt/wsParams.d.ts.map +0 -1
  117. package/lib/src/stmt/wsParams.js +0 -428
  118. package/lib/test/bulkPulling/stmt.func.test.d.ts +0 -2
  119. package/lib/test/bulkPulling/stmt.func.test.d.ts.map +0 -1
  120. package/lib/test/bulkPulling/stmt.type.test.d.ts +0 -2
  121. package/lib/test/bulkPulling/stmt.type.test.d.ts.map +0 -1
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WsStmt1 = void 0;
7
+ const json_bigint_1 = __importDefault(require("json-bigint"));
8
+ const wsError_1 = require("../common/wsError");
9
+ const wsProto_1 = require("./wsProto");
10
+ const reqid_1 = require("../common/reqid");
11
+ const constant_1 = require("../common/constant");
12
+ const log_1 = __importDefault(require("../common/log"));
13
+ const wsParams1_1 = require("./wsParams1");
14
+ class WsStmt1 {
15
+ constructor(wsClient, precision) {
16
+ this._precision = constant_1.PrecisionLength["ms"];
17
+ this._wsClient = wsClient;
18
+ if (precision) {
19
+ this._precision = precision;
20
+ }
21
+ }
22
+ static async newStmt(wsClient, precision, reqId) {
23
+ try {
24
+ let wsStmt = new WsStmt1(wsClient, precision);
25
+ return await wsStmt.init(reqId);
26
+ }
27
+ catch (e) {
28
+ log_1.default.error(`WsStmt init is failed, ${e.code}, ${e.message}`);
29
+ throw e;
30
+ }
31
+ }
32
+ async prepare(sql) {
33
+ let queryMsg = {
34
+ action: "prepare",
35
+ args: {
36
+ req_id: reqid_1.ReqId.getReqID(),
37
+ sql: sql,
38
+ stmt_id: this._stmt_id,
39
+ },
40
+ };
41
+ return await this.execute(queryMsg);
42
+ }
43
+ async setTableName(tableName) {
44
+ let queryMsg = {
45
+ action: "set_table_name",
46
+ args: {
47
+ req_id: reqid_1.ReqId.getReqID(),
48
+ name: tableName,
49
+ stmt_id: this._stmt_id,
50
+ },
51
+ };
52
+ return await this.execute(queryMsg);
53
+ }
54
+ async setJsonTags(tags) {
55
+ let queryMsg = {
56
+ action: "set_tags",
57
+ args: {
58
+ req_id: reqid_1.ReqId.getReqID(),
59
+ tags: tags,
60
+ stmt_id: this._stmt_id,
61
+ },
62
+ };
63
+ return await this.execute(queryMsg);
64
+ }
65
+ newStmtParam() {
66
+ return new wsParams1_1.Stmt1BindParams(this._precision);
67
+ }
68
+ async setTags(paramsArray) {
69
+ if (!paramsArray || !this._stmt_id) {
70
+ throw new wsError_1.TaosError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "SetBinaryTags paramArray is invalid!");
71
+ }
72
+ let columnInfos = paramsArray.getParams();
73
+ if (!columnInfos) {
74
+ throw new wsError_1.TaosError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "SetBinaryTags paramArray is invalid!");
75
+ }
76
+ let reqId = BigInt(reqid_1.ReqId.getReqID());
77
+ let dataBlock = (0, wsProto_1.binaryBlockEncode)(paramsArray, 1 /* StmtBindType.STMT_TYPE_TAG */, this._stmt_id, reqId, paramsArray.getDataRows());
78
+ return await this.sendBinaryMsg(reqId, "set_tags", dataBlock);
79
+ }
80
+ async bind(paramsArray) {
81
+ if (!paramsArray || !this._stmt_id) {
82
+ throw new wsError_1.TaosError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "BinaryBind paramArray is invalid!");
83
+ }
84
+ let columnInfos = paramsArray.getParams();
85
+ if (!columnInfos) {
86
+ throw new wsError_1.TaosError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "BinaryBind paramArray is invalid!");
87
+ }
88
+ let reqId = BigInt(reqid_1.ReqId.getReqID());
89
+ let dataBlock = (0, wsProto_1.binaryBlockEncode)(paramsArray, 2 /* StmtBindType.STMT_TYPE_BIND */, this._stmt_id, reqId, paramsArray.getDataRows());
90
+ return await this.sendBinaryMsg(reqId, "bind", dataBlock);
91
+ }
92
+ async jsonBind(paramArray) {
93
+ let queryMsg = {
94
+ action: "bind",
95
+ args: {
96
+ req_id: reqid_1.ReqId.getReqID(),
97
+ columns: paramArray,
98
+ stmt_id: this._stmt_id,
99
+ },
100
+ };
101
+ return await this.execute(queryMsg);
102
+ }
103
+ async batch() {
104
+ let queryMsg = {
105
+ action: "add_batch",
106
+ args: {
107
+ req_id: reqid_1.ReqId.getReqID(),
108
+ stmt_id: this._stmt_id,
109
+ },
110
+ };
111
+ return await this.execute(queryMsg);
112
+ }
113
+ async exec() {
114
+ let queryMsg = {
115
+ action: "exec",
116
+ args: {
117
+ req_id: reqid_1.ReqId.getReqID(),
118
+ stmt_id: this._stmt_id,
119
+ },
120
+ };
121
+ return await this.execute(queryMsg);
122
+ }
123
+ async resultSet() {
124
+ throw new Error("Method not implemented.");
125
+ }
126
+ getLastAffected() {
127
+ return this.lastAffected;
128
+ }
129
+ async close() {
130
+ let queryMsg = {
131
+ action: "close",
132
+ args: {
133
+ req_id: reqid_1.ReqId.getReqID(),
134
+ stmt_id: this._stmt_id,
135
+ },
136
+ };
137
+ return await this.execute(queryMsg, false);
138
+ }
139
+ getStmtId() {
140
+ return this._stmt_id;
141
+ }
142
+ async execute(queryMsg, register = true) {
143
+ try {
144
+ if (this._wsClient.getState() <= 0) {
145
+ throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_CONNECTION_CLOSED, "websocket connect has closed!");
146
+ }
147
+ let reqMsg = json_bigint_1.default.stringify(queryMsg);
148
+ if (register) {
149
+ let result = await this._wsClient.exec(reqMsg, false);
150
+ let resp = new wsProto_1.WsStmtQueryResponse(result);
151
+ if (resp.stmt_id) {
152
+ this._stmt_id = resp.stmt_id;
153
+ }
154
+ if (resp.affected) {
155
+ this.lastAffected = resp.affected;
156
+ }
157
+ }
158
+ else {
159
+ await this._wsClient.execNoResp(reqMsg);
160
+ this._stmt_id = null;
161
+ this.lastAffected = null;
162
+ }
163
+ return;
164
+ }
165
+ catch (e) {
166
+ throw new wsError_1.TaosResultError(e.code, e.message);
167
+ }
168
+ }
169
+ async sendBinaryMsg(reqId, action, message) {
170
+ if (this._wsClient.getState() <= 0) {
171
+ throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_CONNECTION_CLOSED, "websocket connect has closed!");
172
+ }
173
+ let result = await this._wsClient.sendBinaryMsg(reqId, action, message, false);
174
+ let resp = new wsProto_1.WsStmtQueryResponse(result);
175
+ if (resp.stmt_id) {
176
+ this._stmt_id = resp.stmt_id;
177
+ }
178
+ if (resp.affected) {
179
+ this.lastAffected = resp.affected;
180
+ }
181
+ }
182
+ async init(reqId) {
183
+ if (this._wsClient) {
184
+ try {
185
+ if (this._wsClient.getState() <= 0) {
186
+ await this._wsClient.connect();
187
+ await this._wsClient.checkVersion();
188
+ }
189
+ let queryMsg = {
190
+ action: "init",
191
+ args: {
192
+ req_id: reqid_1.ReqId.getReqID(reqId),
193
+ },
194
+ };
195
+ await this.execute(queryMsg);
196
+ return this;
197
+ }
198
+ catch (e) {
199
+ log_1.default.error(`stmt init filed, ${e.code}, ${e.message}`);
200
+ throw e;
201
+ }
202
+ }
203
+ throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_CONNECTION_CLOSED, "stmt connect closed");
204
+ }
205
+ }
206
+ exports.WsStmt1 = WsStmt1;
@@ -0,0 +1,37 @@
1
+ import { WsClient } from "../client/wsClient";
2
+ import { StmtBindParams } from "./wsParamsBase";
3
+ import { WsStmt } from "./wsStmt";
4
+ import { WSRows } from "../sql/wsRows";
5
+ export declare class WsStmt2 implements WsStmt {
6
+ private _wsClient;
7
+ private _stmt_id;
8
+ private _query_id;
9
+ private _precision;
10
+ private fields?;
11
+ private lastAffected;
12
+ private _stmtTableInfo;
13
+ private _currentTableInfo;
14
+ private _stmtTableInfoList;
15
+ private _toBeBindTagCount;
16
+ private _toBeBindColCount;
17
+ private _toBeBindTableNameIndex;
18
+ private _isInsert;
19
+ private constructor();
20
+ static newStmt(wsClient: WsClient, precision?: number, reqId?: number): Promise<WsStmt>;
21
+ private init;
22
+ getStmtId(): bigint | undefined | null;
23
+ prepare(sql: string): Promise<void>;
24
+ setTableName(tableName: string): Promise<void>;
25
+ setTags(paramsArray: StmtBindParams): Promise<void>;
26
+ newStmtParam(): StmtBindParams;
27
+ bind(paramsArray: StmtBindParams): Promise<void>;
28
+ batch(): Promise<void>;
29
+ exec(): Promise<void>;
30
+ private cleanup;
31
+ getLastAffected(): number | null | undefined;
32
+ resultSet(): Promise<WSRows>;
33
+ close(): Promise<void>;
34
+ private execute;
35
+ private sendBinaryMsg;
36
+ }
37
+ //# sourceMappingURL=wsStmt2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsStmt2.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsStmt2.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAS9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,qBAAa,OAAQ,YAAW,MAAM;IAClC,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,MAAM,CAAC,CAA0C;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,uBAAuB,CAA4B;IAC3D,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO;WAYM,OAAO,CAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;YAUJ,IAAI;IA4BlB,SAAS,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIhC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCnC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9C,OAAO,CAAC,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzD,YAAY,IAAI,cAAc;IAiBxB,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+EhD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC3B,OAAO,CAAC,OAAO;IAMf,eAAe,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS;IAItC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAkB5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAWd,OAAO;YA4CP,aAAa;CA0B9B"}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WsStmt2 = void 0;
7
+ const json_bigint_1 = __importDefault(require("json-bigint"));
8
+ const constant_1 = require("../common/constant");
9
+ const log_1 = __importDefault(require("../common/log"));
10
+ const reqid_1 = require("../common/reqid");
11
+ const wsError_1 = require("../common/wsError");
12
+ const wsProto_1 = require("./wsProto");
13
+ const wsParams2_1 = require("./wsParams2");
14
+ const wsTableInfo_1 = require("./wsTableInfo");
15
+ const wsRows_1 = require("../sql/wsRows");
16
+ const FieldBindParams_1 = require("./FieldBindParams");
17
+ class WsStmt2 {
18
+ constructor(wsClient, precision) {
19
+ this._precision = constant_1.PrecisionLength["ms"];
20
+ this._isInsert = false;
21
+ this._wsClient = wsClient;
22
+ if (precision) {
23
+ this._precision = precision;
24
+ }
25
+ this._stmtTableInfo = new Map();
26
+ this._currentTableInfo = new wsTableInfo_1.TableInfo();
27
+ this._stmtTableInfoList = [];
28
+ this._toBeBindColCount = 0;
29
+ this._toBeBindTagCount = 0;
30
+ }
31
+ static async newStmt(wsClient, precision, reqId) {
32
+ try {
33
+ let wsStmt = new WsStmt2(wsClient, precision);
34
+ return await wsStmt.init(reqId);
35
+ }
36
+ catch (e) {
37
+ log_1.default.error(`WsStmt init is failed, ${e.code}, ${e.message}`);
38
+ throw e;
39
+ }
40
+ }
41
+ async init(reqId) {
42
+ if (this._wsClient) {
43
+ try {
44
+ if (this._wsClient.getState() <= 0) {
45
+ await this._wsClient.connect();
46
+ await this._wsClient.checkVersion();
47
+ }
48
+ let queryMsg = {
49
+ action: "stmt2_init",
50
+ args: {
51
+ req_id: reqid_1.ReqId.getReqID(reqId),
52
+ single_stb_insert: true,
53
+ single_table_bind_once: true,
54
+ },
55
+ };
56
+ await this.execute(queryMsg);
57
+ return this;
58
+ }
59
+ catch (e) {
60
+ log_1.default.error(`stmt init filed, ${e.code}, ${e.message}`);
61
+ throw e;
62
+ }
63
+ }
64
+ throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_CONNECTION_CLOSED, "stmt connect closed");
65
+ }
66
+ getStmtId() {
67
+ return this._stmt_id;
68
+ }
69
+ async prepare(sql) {
70
+ let queryMsg = {
71
+ action: "stmt2_prepare",
72
+ args: {
73
+ req_id: reqid_1.ReqId.getReqID(),
74
+ sql: sql,
75
+ stmt_id: this._stmt_id,
76
+ get_fields: true,
77
+ },
78
+ };
79
+ let resp = await this.execute(queryMsg);
80
+ if (this._isInsert && this.fields) {
81
+ this._precision = this.fields[0].precision
82
+ ? this.fields[0].precision
83
+ : 0;
84
+ this._toBeBindColCount = 0;
85
+ this._toBeBindTagCount = 0;
86
+ this.fields?.forEach((field, index) => {
87
+ if (field.bind_type == constant_1.FieldBindType.TAOS_FIELD_TBNAME) {
88
+ this._toBeBindTableNameIndex = index;
89
+ }
90
+ else if (field.bind_type == constant_1.FieldBindType.TAOS_FIELD_TAG) {
91
+ this._toBeBindTagCount++;
92
+ }
93
+ else if (field.bind_type == constant_1.FieldBindType.TAOS_FIELD_COL) {
94
+ this._toBeBindColCount++;
95
+ }
96
+ });
97
+ }
98
+ else {
99
+ if (resp && resp.fields_count && resp.fields_count > 0) {
100
+ this._stmtTableInfoList = [this._currentTableInfo];
101
+ this._toBeBindColCount = resp.fields_count;
102
+ }
103
+ else {
104
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "prepare No columns to bind!");
105
+ }
106
+ }
107
+ }
108
+ async setTableName(tableName) {
109
+ if (!tableName || tableName.length === 0) {
110
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "Table name cannot be empty");
111
+ }
112
+ let tableInfo = this._stmtTableInfo.get(tableName);
113
+ if (!tableInfo) {
114
+ this._currentTableInfo = new wsTableInfo_1.TableInfo(tableName);
115
+ this._stmtTableInfo.set(tableName, this._currentTableInfo);
116
+ this._stmtTableInfoList.push(this._currentTableInfo);
117
+ }
118
+ else {
119
+ this._currentTableInfo = tableInfo;
120
+ }
121
+ return Promise.resolve();
122
+ }
123
+ async setTags(paramsArray) {
124
+ if (!paramsArray || !this._stmt_id) {
125
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "SetBinaryTags paramArray is invalid!");
126
+ }
127
+ if (!this._currentTableInfo) {
128
+ this._currentTableInfo = new wsTableInfo_1.TableInfo();
129
+ this._stmtTableInfoList.push(this._currentTableInfo);
130
+ }
131
+ await this._currentTableInfo.setTags(paramsArray);
132
+ return Promise.resolve();
133
+ }
134
+ newStmtParam() {
135
+ if (this._isInsert) {
136
+ if (!this.fields || this.fields.length === 0) {
137
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "No columns to bind!");
138
+ }
139
+ return new wsParams2_1.Stmt2BindParams(this.fields.length, this._precision, this.fields);
140
+ }
141
+ return new wsParams2_1.Stmt2BindParams();
142
+ }
143
+ async bind(paramsArray) {
144
+ if (!paramsArray || !this._stmt_id || !paramsArray._fieldParams) {
145
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "Bind paramArray is invalid!");
146
+ }
147
+ if (this._isInsert &&
148
+ this.fields &&
149
+ paramsArray.getBindCount() == this.fields.length) {
150
+ const tableNameIndex = this._toBeBindTableNameIndex;
151
+ if (tableNameIndex === null || tableNameIndex === undefined) {
152
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "Table name index is null or undefined!");
153
+ }
154
+ const paramsCount = paramsArray._fieldParams[0].params.length;
155
+ for (let i = 0; i < paramsCount; i++) {
156
+ let tableName = paramsArray._fieldParams[tableNameIndex].params[i];
157
+ await this.setTableName(tableName);
158
+ for (let j = 0; j < paramsArray._fieldParams.length; j++) {
159
+ if (j == tableNameIndex) {
160
+ continue;
161
+ }
162
+ let fieldParam = paramsArray._fieldParams[j];
163
+ if (this.fields[j].bind_type == constant_1.FieldBindType.TAOS_FIELD_TAG) {
164
+ if (!this._currentTableInfo.tags) {
165
+ this._currentTableInfo.tags = new wsParams2_1.Stmt2BindParams(this._toBeBindTagCount, this._precision, this.fields);
166
+ }
167
+ this._currentTableInfo.tags.addBindFieldParams(new FieldBindParams_1.FieldBindParams([fieldParam.params[i]], fieldParam.dataType, fieldParam.typeLen, fieldParam.columnType, fieldParam.bindType));
168
+ }
169
+ else if (this.fields[j].bind_type == constant_1.FieldBindType.TAOS_FIELD_COL) {
170
+ if (!this._currentTableInfo.params) {
171
+ this._currentTableInfo.params = new wsParams2_1.Stmt2BindParams(this._toBeBindColCount, this._precision, this.fields);
172
+ }
173
+ this._currentTableInfo.params.addBindFieldParams(new FieldBindParams_1.FieldBindParams([fieldParam.params[i]], fieldParam.dataType, fieldParam.typeLen, fieldParam.columnType, fieldParam.bindType));
174
+ }
175
+ }
176
+ }
177
+ }
178
+ else {
179
+ await this._currentTableInfo.setParams(paramsArray);
180
+ }
181
+ return Promise.resolve();
182
+ }
183
+ async batch() {
184
+ Promise.resolve();
185
+ }
186
+ async exec() {
187
+ if (!this._currentTableInfo) {
188
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "table info is empty!");
189
+ }
190
+ let params = this._currentTableInfo.getParams();
191
+ if (!params) {
192
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "Bind params is empty!");
193
+ }
194
+ let reqId = BigInt(reqid_1.ReqId.getReqID());
195
+ let bytes = (0, wsProto_1.stmt2BinaryBlockEncode)(reqId, this._stmtTableInfoList, this._stmt_id, this._toBeBindTableNameIndex, this._toBeBindTagCount, this._toBeBindColCount);
196
+ await this.sendBinaryMsg(reqId, "stmt2_bind", new Uint8Array(bytes));
197
+ let execMsg = {
198
+ action: "stmt2_exec",
199
+ args: {
200
+ req_id: reqid_1.ReqId.getReqID(),
201
+ stmt_id: this._stmt_id,
202
+ },
203
+ };
204
+ await this.execute(execMsg);
205
+ this.cleanup();
206
+ }
207
+ cleanup() {
208
+ this._stmtTableInfo.clear();
209
+ this._stmtTableInfoList = [];
210
+ this._currentTableInfo = new wsTableInfo_1.TableInfo();
211
+ }
212
+ getLastAffected() {
213
+ return this.lastAffected;
214
+ }
215
+ async resultSet() {
216
+ let execMsg = {
217
+ action: "stmt2_result",
218
+ args: {
219
+ req_id: reqid_1.ReqId.getReqID(),
220
+ stmt_id: this._stmt_id,
221
+ },
222
+ };
223
+ let resp = await this.execute(execMsg);
224
+ if (!resp) {
225
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "ResultSet response is empty!");
226
+ }
227
+ return new wsRows_1.WSRows(this._wsClient, resp);
228
+ }
229
+ async close() {
230
+ let queryMsg = {
231
+ action: "stmt2_close",
232
+ args: {
233
+ req_id: reqid_1.ReqId.getReqID(),
234
+ stmt_id: this._stmt_id,
235
+ },
236
+ };
237
+ await this.execute(queryMsg);
238
+ }
239
+ async execute(stmtMsg, register = true) {
240
+ try {
241
+ if (this._wsClient.getState() <= 0) {
242
+ throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_CONNECTION_CLOSED, "websocket connect has closed!");
243
+ }
244
+ let reqMsg = json_bigint_1.default.stringify(stmtMsg);
245
+ if (register) {
246
+ let result = await this._wsClient.exec(reqMsg, false);
247
+ let resp = new wsProto_1.WsStmtQueryResponse(result);
248
+ if (resp.stmt_id) {
249
+ this._stmt_id = resp.stmt_id;
250
+ }
251
+ if (resp.affected) {
252
+ this.lastAffected = resp.affected;
253
+ }
254
+ if (resp.fields) {
255
+ this.fields = resp.fields;
256
+ }
257
+ if (resp.is_insert) {
258
+ this._isInsert = resp.is_insert;
259
+ }
260
+ return resp;
261
+ }
262
+ await this._wsClient.execNoResp(reqMsg);
263
+ this._stmt_id = null;
264
+ this.lastAffected = null;
265
+ }
266
+ catch (e) {
267
+ throw new wsError_1.TaosResultError(e.code, e.message);
268
+ }
269
+ }
270
+ async sendBinaryMsg(reqId, action, message) {
271
+ if (this._wsClient.getState() <= 0) {
272
+ throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_CONNECTION_CLOSED, "websocket connect has closed!");
273
+ }
274
+ let result = await this._wsClient.sendBinaryMsg(reqId, action, message, false);
275
+ let resp = new wsProto_1.WsStmtQueryResponse(result);
276
+ if (resp.stmt_id) {
277
+ this._stmt_id = resp.stmt_id;
278
+ }
279
+ if (resp.affected) {
280
+ this.lastAffected = resp.affected;
281
+ }
282
+ }
283
+ }
284
+ exports.WsStmt2 = WsStmt2;
@@ -0,0 +1,17 @@
1
+ import { StmtBindParams } from "./wsParamsBase";
2
+ export declare class TableInfo {
3
+ name: Uint8Array | undefined | null;
4
+ tags: StmtBindParams | undefined | null;
5
+ params?: StmtBindParams;
6
+ length: number;
7
+ textEncoder: TextEncoder;
8
+ constructor(name?: string);
9
+ getTableName(): Uint8Array | undefined | null;
10
+ getTableNameLength(): number;
11
+ getTags(): StmtBindParams | undefined | null;
12
+ getParams(): StmtBindParams | undefined | null;
13
+ setTableName(name: string): void;
14
+ setTags(paramsArray: StmtBindParams): Promise<void>;
15
+ setParams(bindParams: StmtBindParams): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=wsTableInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsTableInfo.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsTableInfo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,qBAAa,SAAS;IAClB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAK;IACnB,WAAW,cAAqB;gBACpB,IAAI,CAAC,EAAE,MAAM;IAOlB,YAAY,IAAI,UAAU,GAAG,SAAS,GAAG,IAAI;IAI7C,kBAAkB,IAAI,MAAM;IAI5B,OAAO,IAAI,cAAc,GAAG,SAAS,GAAG,IAAI;IAI5C,SAAS,IAAI,cAAc,GAAG,SAAS,GAAG,IAAI;IAI9C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWjC,OAAO,CAAC,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD,SAAS,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAS7D"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableInfo = void 0;
4
+ const wsError_1 = require("../common/wsError");
5
+ class TableInfo {
6
+ constructor(name) {
7
+ this.length = 0;
8
+ this.textEncoder = new TextEncoder();
9
+ if (name && name.length > 0) {
10
+ this.name = this.textEncoder.encode(name);
11
+ this.length = this.name.length;
12
+ }
13
+ }
14
+ getTableName() {
15
+ return this.name;
16
+ }
17
+ getTableNameLength() {
18
+ return this.length;
19
+ }
20
+ getTags() {
21
+ return this.tags;
22
+ }
23
+ getParams() {
24
+ return this.params;
25
+ }
26
+ setTableName(name) {
27
+ if (name && name.length > 0) {
28
+ this.name = this.textEncoder.encode(name);
29
+ this.length = this.name.length;
30
+ }
31
+ else {
32
+ throw new wsError_1.TaosError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "Table name is invalid!");
33
+ }
34
+ }
35
+ async setTags(paramsArray) {
36
+ if (paramsArray) {
37
+ this.tags = paramsArray;
38
+ }
39
+ else {
40
+ throw new wsError_1.TaosError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "Table tags is invalid!");
41
+ }
42
+ }
43
+ async setParams(bindParams) {
44
+ if (!this.params) {
45
+ this.params = bindParams;
46
+ }
47
+ else {
48
+ if (bindParams._fieldParams) {
49
+ this.params.mergeParams(bindParams);
50
+ }
51
+ }
52
+ }
53
+ }
54
+ exports.TableInfo = TableInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/tmq/config.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IAElB,GAAG,EAAE,GAAG,GAAG,IAAI,CAAQ;IACvB,OAAO,EAAE,GAAG,GAAG,IAAI,CAAQ;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,WAAW,EAAE,OAAO,CAAQ;IAC5B,uBAAuB,EAAE,MAAM,CAAY;IAC3C,OAAO,EAAE,MAAM,CAAQ;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAGnB,QAAQ,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;CAyDxC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/tmq/config.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IAElB,GAAG,EAAE,GAAG,GAAG,IAAI,CAAQ;IACvB,OAAO,EAAE,GAAG,GAAG,IAAI,CAAQ;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,WAAW,EAAE,OAAO,CAAQ;IAC5B,uBAAuB,EAAE,MAAM,CAAY;IAC3C,OAAO,EAAE,MAAM,CAAQ;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAEnB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;CAqDzC"}
@@ -63,8 +63,8 @@ class TmqConfig {
63
63
  this.password = this.url.password;
64
64
  }
65
65
  this.sql_url = new URL(this.url);
66
- this.sql_url.pathname = '/ws';
67
- this.url.pathname = '/rest/tmq';
66
+ this.sql_url.pathname = "/ws";
67
+ this.url.pathname = "/rest/tmq";
68
68
  }
69
69
  }
70
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/tmq/constant.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACrB,OAAc,QAAQ,EAAE,MAAM,CAAc;IAE5C,OAAc,SAAS,EAAE,MAAM,CAAe;IAE9C;;OAEG;IACH,OAAc,kBAAkB,EAAE,MAAM,CAAwB;IAEhE;;OAEG;IACH,OAAc,uBAAuB,EAAE,MAAM,CAA6B;IAE1E;;OAEG;IACH,OAAc,iBAAiB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;IACH,OAAc,mBAAmB,EAAE,MAAM,CAAyB;IAElE;;OAEG;IACH,OAAc,iBAAiB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;IACH,OAAc,kBAAkB,EAAE,MAAM,CAAwB;IAEhE;;OAEG;IACH,OAAc,2BAA2B,EAAE,MAAM,CAAiC;IAElF;;OAEG;IACH,OAAc,UAAU,EAAE,MAAM,CAAmB;IAEnD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;;;OAIG;IACH,OAAc,MAAM,EAAE,MAAM,CAAY;IAExC;;;;OAIG;IACH,OAAc,eAAe,EAAE,MAAM,CAAwB;IAE7D;;;OAGG;IACH,OAAc,uBAAuB,EAAE,MAAM,CAAwB;CAExE;AAED,qBAAa,cAAc;IACvB,OAAc,SAAS,EAAE,MAAM,CAAe;IAC9C,OAAc,IAAI,EAAE,MAAM,CAAU;IACpC,OAAc,QAAQ,EAAE,MAAM,CAAe;IAC7C,OAAc,aAAa,EAAE,MAAM,CAAqB;IACxD,OAAc,MAAM,EAAE,MAAM,CAAY;IACxC,OAAc,WAAW,EAAE,MAAM,CAAiB;IAClD,OAAc,kBAAkB,EAAE,MAAM,CAAgB;IACxD,OAAc,IAAI,EAAE,MAAM,CAAU;IACpC,OAAc,YAAY,EAAE,MAAM,CAAmB;IACrD,OAAc,SAAS,EAAE,MAAM,CAAe;IAC9C,OAAc,QAAQ,EAAE,MAAM,CAAc;IAC5C,OAAc,UAAU,EAAE,MAAM,CAAiB;IACjD,OAAc,WAAW,EAAE,MAAM,CAAK;CACzC;AAED,qBAAa,YAAY;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;;CAItB;AAED,qBAAa,gBAAgB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,EAAG,MAAM,CAAC;IACf,KAAK,EAAG,MAAM,CAAA;IACd,IAAI,EAAG,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;;CAWjB"}
1
+ {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/tmq/constant.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACrB,OAAc,QAAQ,EAAE,MAAM,CAAc;IAE5C,OAAc,SAAS,EAAE,MAAM,CAAe;IAE9C;;OAEG;IACH,OAAc,kBAAkB,EAAE,MAAM,CAAwB;IAEhE;;OAEG;IACH,OAAc,uBAAuB,EAAE,MAAM,CAA6B;IAE1E;;OAEG;IACH,OAAc,iBAAiB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;IACH,OAAc,mBAAmB,EAAE,MAAM,CAAyB;IAElE;;OAEG;IACH,OAAc,iBAAiB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;IACH,OAAc,kBAAkB,EAAE,MAAM,CAAwB;IAEhE;;OAEG;IACH,OAAc,2BAA2B,EAAE,MAAM,CACf;IAElC;;OAEG;IACH,OAAc,UAAU,EAAE,MAAM,CAAmB;IAEnD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;;;OAIG;IACH,OAAc,MAAM,EAAE,MAAM,CAAY;IAExC;;;;OAIG;IACH,OAAc,eAAe,EAAE,MAAM,CAAwB;IAE7D;;;OAGG;IACH,OAAc,uBAAuB,EAAE,MAAM,CAAwB;CACxE;AAED,qBAAa,cAAc;IACvB,OAAc,SAAS,EAAE,MAAM,CAAe;IAC9C,OAAc,IAAI,EAAE,MAAM,CAAU;IACpC,OAAc,QAAQ,EAAE,MAAM,CAAe;IAC7C,OAAc,aAAa,EAAE,MAAM,CAAqB;IACxD,OAAc,MAAM,EAAE,MAAM,CAAY;IACxC,OAAc,WAAW,EAAE,MAAM,CAAiB;IAClD,OAAc,kBAAkB,EAAE,MAAM,CAAgB;IACxD,OAAc,IAAI,EAAE,MAAM,CAAU;IACpC,OAAc,YAAY,EAAE,MAAM,CAAmB;IACrD,OAAc,SAAS,EAAE,MAAM,CAAe;IAC9C,OAAc,QAAQ,EAAE,MAAM,CAAc;IAC5C,OAAc,UAAU,EAAE,MAAM,CAAiB;IACjD,OAAc,WAAW,EAAE,MAAM,CAAK;CACzC;AAED,qBAAa,YAAY;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;;CAItB;AAED,qBAAa,gBAAgB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;;CAUjB"}