@cloudbase/wx-cloud-client-sdk 1.0.0 → 1.2.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.
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # 微信云开发客户端 SDK
2
+
3
+ ## 使用
4
+
5
+ [初始化 SDK](https://docs.cloudbase.net/model/init-sdk)
6
+
7
+ ## 参考文档
8
+
9
+ [类型声明](https://docs.cloudbase.net/model/sdk-reference/globals)
@@ -1,2 +1,10 @@
1
- import { MethodResponse, CallDataSourceParams } from '../types';
2
- export declare const callDataSource: ({ dataSourceName, methodName, params, realMethodName, callFunction, }: CallDataSourceParams) => Promise<MethodResponse<any>>;
1
+ import { MethodResponse, CallDataSourceParams, RunMysqlCommandParams } from '../types';
2
+ export declare const enum EQUERY_PARAM_TYPE {
3
+ ARRAY = "ARRAY",
4
+ BOOLEAN = "BOOLEAN",
5
+ NUMBER = "NUMBER",
6
+ OBJECT = "OBJECT",
7
+ STRING = "STRING"
8
+ }
9
+ export declare const callDataSource: ({ dataSourceName, methodName, params, realMethodName, callFunction, envType, mode, }: CallDataSourceParams) => Promise<MethodResponse<any>>;
10
+ export declare const runMysqlCommand: ({ sql, params, config, callFunction, unsafe }: RunMysqlCommandParams) => Promise<MethodResponse<any>>;
@@ -10,6 +10,7 @@ export interface Model {
10
10
  updateBy?: Relation;
11
11
  _openid?: string;
12
12
  }
13
+ export declare type EnvType = 'prod' | 'pre';
13
14
  /**
14
15
  * 模型方法的定义
15
16
  * =====================================================================
@@ -48,6 +49,10 @@ export interface DataModelMethods<T> {
48
49
  */
49
50
  create: (params: {
50
51
  data: T;
52
+ /**
53
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
54
+ */
55
+ envType?: EnvType;
51
56
  }) => Promise<MethodResponse<CreateResponse<T>>>;
52
57
  /**
53
58
  * 创建多条数据的方法。
@@ -64,6 +69,10 @@ export interface DataModelMethods<T> {
64
69
  */
65
70
  createMany: (params: {
66
71
  data: T[];
72
+ /**
73
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
74
+ */
75
+ envType?: EnvType;
67
76
  }) => Promise<MethodResponse<CreateManyResponse<T>>>;
68
77
  /**
69
78
  * 更新单条数据的方法。
@@ -86,6 +95,10 @@ export interface DataModelMethods<T> {
86
95
  update: (params: {
87
96
  data: T;
88
97
  filter: FilterParams<T>;
98
+ /**
99
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
100
+ */
101
+ envType?: EnvType;
89
102
  }) => Promise<MethodResponse<UpdateResponse<T>>>;
90
103
  /**
91
104
  * 创建或者更新的方法
@@ -112,6 +125,10 @@ export interface DataModelMethods<T> {
112
125
  update: T;
113
126
  create: T;
114
127
  filter: FilterParams<T>;
128
+ /**
129
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
130
+ */
131
+ envType?: EnvType;
115
132
  }) => Promise<MethodResponse<UpsertResponse<T>>>;
116
133
  /**
117
134
  * 更新多条数据的方法。
@@ -134,6 +151,10 @@ export interface DataModelMethods<T> {
134
151
  updateMany: (params: {
135
152
  data: T;
136
153
  filter: FilterParams<T>;
154
+ /**
155
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
156
+ */
157
+ envType?: EnvType;
137
158
  }) => Promise<MethodResponse<CreateManyResponse<T>>>;
138
159
  /**
139
160
  * 删除单条数据的方法。
@@ -155,6 +176,10 @@ export interface DataModelMethods<T> {
155
176
  */
156
177
  delete: (params: {
157
178
  filter: FilterParams<T>;
179
+ /**
180
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
181
+ */
182
+ envType?: EnvType;
158
183
  }) => Promise<MethodResponse<DeleteResponse<T>>>;
159
184
  /**
160
185
  * 删除多条数据的方法。
@@ -173,6 +198,10 @@ export interface DataModelMethods<T> {
173
198
  */
174
199
  deleteMany: (params: {
175
200
  filter: FilterParams<T>;
201
+ /**
202
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
203
+ */
204
+ envType?: EnvType;
176
205
  }) => Promise<MethodResponse<DeleteManyResponse<T>>>;
177
206
  /**
178
207
  * 获取单条数据的方法。
@@ -195,6 +224,10 @@ export interface DataModelMethods<T> {
195
224
  get: (params: {
196
225
  filter: FilterParams<T>;
197
226
  select?: SelectParams<T>;
227
+ /**
228
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
229
+ */
230
+ envType?: EnvType;
198
231
  }) => Promise<MethodResponse<T>>;
199
232
  /**
200
233
  * 获取多条数据的方法。
@@ -243,6 +276,10 @@ export interface DataModelMethods<T> {
243
276
  * 排序参数,当前仅支持最多 3 字段排序
244
277
  */
245
278
  orderBy?: OrderByParams[];
279
+ /**
280
+ * 请求数据的环境类型,默认是 prod,可选值有 prod 和 pre
281
+ */
282
+ envType?: EnvType;
246
283
  }) => Promise<MethodResponse<{
247
284
  records: T[];
248
285
  total?: number;
@@ -543,6 +580,47 @@ declare type RelationKeys<T> = T extends any ? {
543
580
  * @hidden
544
581
  */
545
582
  export declare type Relation = string;
583
+ export interface SQLCommandParams {
584
+ /**
585
+ * 超时时间,默认是 5s,最大不超过 15s
586
+ */
587
+ timeout?: number;
588
+ }
589
+ /**
590
+ * 运行原生SQL的ORM客户端接口
591
+ */
592
+ export interface OrmRawQueryClient {
593
+ $runSQL?: (
594
+ /**
595
+ * sql 语句
596
+ */
597
+ sql: string,
598
+ /**
599
+ * sql 模版变量
600
+ */
601
+ params?: Record<string, any>,
602
+ /**
603
+ * 配置
604
+ */
605
+ config?: SQLCommandParams) => Promise<MethodResponse<{
606
+ executeResultList: Record<string, any>[];
607
+ total: number;
608
+ backendExecute: string;
609
+ }>>;
610
+ $runSQLRaw?: (
611
+ /**
612
+ * sql 语句
613
+ */
614
+ sql: string,
615
+ /**
616
+ * 配置
617
+ */
618
+ config?: SQLCommandParams) => Promise<MethodResponse<{
619
+ executeResultList: Record<string, any>[];
620
+ total: number;
621
+ backendExecute: string;
622
+ }>>;
623
+ }
546
624
  /**
547
625
  * ORM客户端接口,包含不同模型名称到其操作方法的映射。
548
626
  * @hidden
@@ -558,7 +636,7 @@ export interface CallDataSourceParams {
558
636
  /**
559
637
  * 数据源的名称,标识调用的数据源。
560
638
  */
561
- dataSourceName: string;
639
+ dataSourceName?: string;
562
640
  /**
563
641
  * 方法名称,标识要调用的数据源中的具体方法。
564
642
  */
@@ -575,6 +653,25 @@ export interface CallDataSourceParams {
575
653
  * 调用函数的方法,用于执行实际的云函数调用。
576
654
  */
577
655
  callFunction: CallFunction;
656
+ /**
657
+ * 环境类型,标识当前的环境类型,可选值为`prod`和`pre`。
658
+ */
659
+ envType?: EnvType;
660
+ /**
661
+ * @deprecated 使用 dataSourceName 替代。
662
+ */
663
+ mode?: string;
664
+ }
665
+ /**
666
+ * 调用runMySQLCoommand 参数的结构定义,用于封装调用云函数时所需的参数。
667
+ * @hidden
668
+ */
669
+ export interface RunMysqlCommandParams {
670
+ sql: string;
671
+ params?: Record<string, any>;
672
+ callFunction: CallFunction;
673
+ config?: any;
674
+ unsafe?: boolean;
578
675
  }
579
676
  /**
580
677
  * 云函数调用接口,包含调用函数和认证信息。
@@ -589,7 +686,7 @@ export declare type CloudBaseInstance = {
589
686
  * @hidden
590
687
  */
591
688
  export interface ExtendedCloudBaseInstance extends CloudBaseInstance {
592
- models: OrmClient;
689
+ models: OrmClient & OrmRawQueryClient;
593
690
  }
594
691
  /**
595
692
  * 云函数调用方法定义。
@@ -599,13 +696,6 @@ export interface ExtendedCloudBaseInstance extends CloudBaseInstance {
599
696
  */
600
697
  export declare type CallFunction = (args: {
601
698
  name: string;
602
- data: {
603
- dataSourceName: string;
604
- methodName: string;
605
- params: Record<string, any>;
606
- 'x-sdk-version'?: string;
607
- userAgent?: string;
608
- referrer?: string;
609
- };
699
+ data: Record<string, any>;
610
700
  }) => Promise<any>;
611
701
  export {};
package/lib/utils.d.ts CHANGED
@@ -8,3 +8,4 @@ export declare function getReferrer(): any;
8
8
  /** 获取用户UA, 小程序中使用 getSystemInfo 替代 */
9
9
  export declare function getUserAgent(): any;
10
10
  export declare const VERSION: string | undefined;
11
+ export declare function getRandomString(): string;
@@ -143,23 +143,23 @@ function getUserAgent() {
143
143
  return ua_1;
144
144
  }
145
145
  }
146
- var VERSION = "1.0.0";
146
+ var VERSION = "1.2.0";
147
147
 
148
148
  var callDataSource = function (_a) {
149
- var dataSourceName = _a.dataSourceName, methodName = _a.methodName, params = _a.params, realMethodName = _a.realMethodName, callFunction = _a.callFunction;
149
+ var dataSourceName = _a.dataSourceName, methodName = _a.methodName, params = _a.params, realMethodName = _a.realMethodName, callFunction = _a.callFunction, _b = _a.envType, envType = _b === void 0 ? 'prod' : _b, mode = _a.mode;
150
150
  return __awaiter(void 0, void 0, void 0, function () {
151
- var result, response, error_1;
152
- var _b, _c;
153
- return __generator(this, function (_d) {
154
- switch (_d.label) {
151
+ var result, response, requestId, error_1;
152
+ var _c, _d;
153
+ return __generator(this, function (_e) {
154
+ switch (_e.label) {
155
155
  case 0:
156
156
  result = {
157
157
  data: {},
158
158
  requestId: ''
159
159
  };
160
- _d.label = 1;
160
+ _e.label = 1;
161
161
  case 1:
162
- _d.trys.push([1, 3, , 4]);
162
+ _e.trys.push([1, 3, , 4]);
163
163
  return [4 /*yield*/, callFunction({
164
164
  name: 'lowcode-datasource',
165
165
  data: {
@@ -168,30 +168,36 @@ var callDataSource = function (_a) {
168
168
  params: params,
169
169
  userAgent: getUserAgent(),
170
170
  referrer: getReferrer(),
171
- 'x-sdk-version': VERSION
171
+ 'x-sdk-version': VERSION,
172
+ /**
173
+ * todo 移除此字段
174
+ */
175
+ envType: envType,
176
+ mode: mode
172
177
  }
173
178
  })];
174
179
  case 2:
175
- response = _d.sent();
180
+ response = _e.sent();
181
+ requestId = ((_c = response === null || response === void 0 ? void 0 : response.result) === null || _c === void 0 ? void 0 : _c.requestId) || (response === null || response === void 0 ? void 0 : response.requestId) || (response === null || response === void 0 ? void 0 : response.requestID);
176
182
  if (response === null || response === void 0 ? void 0 : response.result.code) {
177
- throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(response === null || response === void 0 ? void 0 : response.result.message, "\n\u3010\u64CD\u4F5C\u3011\u8C03\u7528 ").concat(dataSourceName, ".").concat(realMethodName, "\n\u3010\u8BF7\u6C42ID\u3011").concat((response === null || response === void 0 ? void 0 : response.requestId) || 'N/A'), {
183
+ throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(response === null || response === void 0 ? void 0 : response.result.message, "\n\u3010\u64CD\u4F5C\u3011\u8C03\u7528 models.").concat(dataSourceName ? "".concat(dataSourceName, ".") : "").concat(realMethodName, "\n\u3010\u9519\u8BEF\u7801\u3011").concat(response === null || response === void 0 ? void 0 : response.result.code, "\n\u3010\u8BF7\u6C42ID\u3011").concat(requestId || 'N/A'), {
178
184
  code: response === null || response === void 0 ? void 0 : response.result.code,
179
- requestId: response === null || response === void 0 ? void 0 : response.requestId
185
+ requestId: requestId
180
186
  });
181
187
  }
182
188
  else {
183
- result.data = ((_b = response === null || response === void 0 ? void 0 : response.result) === null || _b === void 0 ? void 0 : _b.data) || {};
184
- result.requestId = ((_c = response === null || response === void 0 ? void 0 : response.result) === null || _c === void 0 ? void 0 : _c.requestId) || '';
189
+ result.data = ((_d = response === null || response === void 0 ? void 0 : response.result) === null || _d === void 0 ? void 0 : _d.data) || {};
190
+ result.requestId = requestId;
185
191
  }
186
192
  return [3 /*break*/, 4];
187
193
  case 3:
188
- error_1 = _d.sent();
194
+ error_1 = _e.sent();
189
195
  if (error_1.name === 'WxCloudSDKError') {
190
196
  throw error_1;
191
197
  }
192
198
  else {
193
199
  console.log(error_1);
194
- throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(error_1.message, "\n \u3010\u64CD\u4F5C\u3011\u8C03\u7528 ").concat(dataSourceName, ".").concat(realMethodName, "\n \u3010\u8BF7\u6C42ID\u3011N/A"), {
200
+ throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(error_1.message, "\n \u3010\u64CD\u4F5C\u3011\u8C03\u7528 models.").concat(dataSourceName ? "".concat(dataSourceName, ".") : "").concat(realMethodName, "\n \u3010\u8BF7\u6C42ID\u3011N/A"), {
195
201
  code: 'UnknownError',
196
202
  originError: error_1
197
203
  });
@@ -201,6 +207,63 @@ var callDataSource = function (_a) {
201
207
  });
202
208
  });
203
209
  };
210
+ var runMysqlCommand = function (_a) {
211
+ var sql = _a.sql, params = _a.params, config = _a.config, callFunction = _a.callFunction, _b = _a.unsafe, unsafe = _b === void 0 ? false : _b;
212
+ return __awaiter(void 0, void 0, void 0, function () {
213
+ return __generator(this, function (_c) {
214
+ return [2 /*return*/, callDataSource({
215
+ realMethodName: '$runSQL',
216
+ methodName: 'callWedaApi',
217
+ params: {
218
+ action: 'RunMysqlCommand',
219
+ data: {
220
+ sqlTemplate: sql,
221
+ config: config,
222
+ parameter: unsafe
223
+ ? ''
224
+ : Object.entries(params || {}).reduce(function (list, _a) {
225
+ var key = _a[0], value = _a[1];
226
+ if (value !== undefined) {
227
+ var type = "OBJECT" /* EQUERY_PARAM_TYPE.OBJECT */;
228
+ var typeofValue = typeof value;
229
+ switch (typeofValue) {
230
+ case 'boolean': {
231
+ type = "BOOLEAN" /* EQUERY_PARAM_TYPE.BOOLEAN */;
232
+ break;
233
+ }
234
+ case 'number': {
235
+ type = "NUMBER" /* EQUERY_PARAM_TYPE.NUMBER */;
236
+ break;
237
+ }
238
+ case 'string': {
239
+ type = "STRING" /* EQUERY_PARAM_TYPE.STRING */;
240
+ break;
241
+ }
242
+ default: {
243
+ if (Array.isArray(value)) {
244
+ type = "ARRAY" /* EQUERY_PARAM_TYPE.ARRAY */;
245
+ }
246
+ else {
247
+ type = "OBJECT" /* EQUERY_PARAM_TYPE.OBJECT */;
248
+ }
249
+ }
250
+ }
251
+ list.push({
252
+ key: key,
253
+ type: type,
254
+ value: type === "STRING" /* EQUERY_PARAM_TYPE.STRING */ ? value : JSON.stringify(value)
255
+ });
256
+ }
257
+ return list;
258
+ }, []) || []
259
+ }
260
+ },
261
+ callFunction: callFunction,
262
+ mode: 'sdk'
263
+ })];
264
+ });
265
+ });
266
+ };
204
267
 
205
268
  var CRUD_METHODS = {
206
269
  create: {
@@ -271,7 +334,8 @@ var generateClientByDataSourceName = function (dataSourceName, callFunction) {
271
334
  dataSourceName: dataSourceName,
272
335
  methodName: operation.methodName,
273
336
  realMethodName: methodName,
274
- params: effectiveParams
337
+ params: effectiveParams,
338
+ envType: params === null || params === void 0 ? void 0 : params.envType
275
339
  })];
276
340
  case 1:
277
341
  rawData = _b.sent();
@@ -288,9 +352,50 @@ var generateClientByDataSourceName = function (dataSourceName, callFunction) {
288
352
  };
289
353
  // 使用 TypeScript 的 Proxy 来定义一个动态的客户端
290
354
  var generateClient = function (callFunction) {
355
+ var rawQueryClient = {
356
+ $runSQL: function (sql, params, config) {
357
+ return __awaiter(this, void 0, void 0, function () {
358
+ var res;
359
+ return __generator(this, function (_a) {
360
+ switch (_a.label) {
361
+ case 0: return [4 /*yield*/, runMysqlCommand({
362
+ sql: sql,
363
+ params: params,
364
+ config: __assign(__assign({}, config), { preparedStatements: true }),
365
+ callFunction: callFunction
366
+ })];
367
+ case 1:
368
+ res = _a.sent();
369
+ return [2 /*return*/, res];
370
+ }
371
+ });
372
+ });
373
+ },
374
+ $runSQLRaw: function (sql, config) {
375
+ return __awaiter(this, void 0, void 0, function () {
376
+ var res;
377
+ return __generator(this, function (_a) {
378
+ switch (_a.label) {
379
+ case 0: return [4 /*yield*/, runMysqlCommand({
380
+ sql: sql,
381
+ params: [],
382
+ config: __assign(__assign({}, config), { preparedStatements: false }),
383
+ callFunction: callFunction
384
+ })];
385
+ case 1:
386
+ res = _a.sent();
387
+ return [2 /*return*/, res];
388
+ }
389
+ });
390
+ });
391
+ }
392
+ };
291
393
  return new Proxy({}, {
292
394
  get: function (target, prop) {
293
395
  if (typeof prop === 'string') {
396
+ if (rawQueryClient.hasOwnProperty(prop)) {
397
+ return rawQueryClient[prop];
398
+ }
294
399
  // 返回一个函数,这个函数接受任意参数并返回一个 Promise
295
400
  return generateClientByDataSourceName(prop, callFunction);
296
401
  }
@@ -141,23 +141,23 @@ function getUserAgent() {
141
141
  return ua_1;
142
142
  }
143
143
  }
144
- var VERSION = "1.0.0";
144
+ var VERSION = "1.2.0";
145
145
 
146
146
  var callDataSource = function (_a) {
147
- var dataSourceName = _a.dataSourceName, methodName = _a.methodName, params = _a.params, realMethodName = _a.realMethodName, callFunction = _a.callFunction;
147
+ var dataSourceName = _a.dataSourceName, methodName = _a.methodName, params = _a.params, realMethodName = _a.realMethodName, callFunction = _a.callFunction, _b = _a.envType, envType = _b === void 0 ? 'prod' : _b, mode = _a.mode;
148
148
  return __awaiter(void 0, void 0, void 0, function () {
149
- var result, response, error_1;
150
- var _b, _c;
151
- return __generator(this, function (_d) {
152
- switch (_d.label) {
149
+ var result, response, requestId, error_1;
150
+ var _c, _d;
151
+ return __generator(this, function (_e) {
152
+ switch (_e.label) {
153
153
  case 0:
154
154
  result = {
155
155
  data: {},
156
156
  requestId: ''
157
157
  };
158
- _d.label = 1;
158
+ _e.label = 1;
159
159
  case 1:
160
- _d.trys.push([1, 3, , 4]);
160
+ _e.trys.push([1, 3, , 4]);
161
161
  return [4 /*yield*/, callFunction({
162
162
  name: 'lowcode-datasource',
163
163
  data: {
@@ -166,30 +166,36 @@ var callDataSource = function (_a) {
166
166
  params: params,
167
167
  userAgent: getUserAgent(),
168
168
  referrer: getReferrer(),
169
- 'x-sdk-version': VERSION
169
+ 'x-sdk-version': VERSION,
170
+ /**
171
+ * todo 移除此字段
172
+ */
173
+ envType: envType,
174
+ mode: mode
170
175
  }
171
176
  })];
172
177
  case 2:
173
- response = _d.sent();
178
+ response = _e.sent();
179
+ requestId = ((_c = response === null || response === void 0 ? void 0 : response.result) === null || _c === void 0 ? void 0 : _c.requestId) || (response === null || response === void 0 ? void 0 : response.requestId) || (response === null || response === void 0 ? void 0 : response.requestID);
174
180
  if (response === null || response === void 0 ? void 0 : response.result.code) {
175
- throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(response === null || response === void 0 ? void 0 : response.result.message, "\n\u3010\u64CD\u4F5C\u3011\u8C03\u7528 ").concat(dataSourceName, ".").concat(realMethodName, "\n\u3010\u8BF7\u6C42ID\u3011").concat((response === null || response === void 0 ? void 0 : response.requestId) || 'N/A'), {
181
+ throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(response === null || response === void 0 ? void 0 : response.result.message, "\n\u3010\u64CD\u4F5C\u3011\u8C03\u7528 models.").concat(dataSourceName ? "".concat(dataSourceName, ".") : "").concat(realMethodName, "\n\u3010\u9519\u8BEF\u7801\u3011").concat(response === null || response === void 0 ? void 0 : response.result.code, "\n\u3010\u8BF7\u6C42ID\u3011").concat(requestId || 'N/A'), {
176
182
  code: response === null || response === void 0 ? void 0 : response.result.code,
177
- requestId: response === null || response === void 0 ? void 0 : response.requestId
183
+ requestId: requestId
178
184
  });
179
185
  }
180
186
  else {
181
- result.data = ((_b = response === null || response === void 0 ? void 0 : response.result) === null || _b === void 0 ? void 0 : _b.data) || {};
182
- result.requestId = ((_c = response === null || response === void 0 ? void 0 : response.result) === null || _c === void 0 ? void 0 : _c.requestId) || '';
187
+ result.data = ((_d = response === null || response === void 0 ? void 0 : response.result) === null || _d === void 0 ? void 0 : _d.data) || {};
188
+ result.requestId = requestId;
183
189
  }
184
190
  return [3 /*break*/, 4];
185
191
  case 3:
186
- error_1 = _d.sent();
192
+ error_1 = _e.sent();
187
193
  if (error_1.name === 'WxCloudSDKError') {
188
194
  throw error_1;
189
195
  }
190
196
  else {
191
197
  console.log(error_1);
192
- throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(error_1.message, "\n \u3010\u64CD\u4F5C\u3011\u8C03\u7528 ").concat(dataSourceName, ".").concat(realMethodName, "\n \u3010\u8BF7\u6C42ID\u3011N/A"), {
198
+ throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(error_1.message, "\n \u3010\u64CD\u4F5C\u3011\u8C03\u7528 models.").concat(dataSourceName ? "".concat(dataSourceName, ".") : "").concat(realMethodName, "\n \u3010\u8BF7\u6C42ID\u3011N/A"), {
193
199
  code: 'UnknownError',
194
200
  originError: error_1
195
201
  });
@@ -199,6 +205,63 @@ var callDataSource = function (_a) {
199
205
  });
200
206
  });
201
207
  };
208
+ var runMysqlCommand = function (_a) {
209
+ var sql = _a.sql, params = _a.params, config = _a.config, callFunction = _a.callFunction, _b = _a.unsafe, unsafe = _b === void 0 ? false : _b;
210
+ return __awaiter(void 0, void 0, void 0, function () {
211
+ return __generator(this, function (_c) {
212
+ return [2 /*return*/, callDataSource({
213
+ realMethodName: '$runSQL',
214
+ methodName: 'callWedaApi',
215
+ params: {
216
+ action: 'RunMysqlCommand',
217
+ data: {
218
+ sqlTemplate: sql,
219
+ config: config,
220
+ parameter: unsafe
221
+ ? ''
222
+ : Object.entries(params || {}).reduce(function (list, _a) {
223
+ var key = _a[0], value = _a[1];
224
+ if (value !== undefined) {
225
+ var type = "OBJECT" /* EQUERY_PARAM_TYPE.OBJECT */;
226
+ var typeofValue = typeof value;
227
+ switch (typeofValue) {
228
+ case 'boolean': {
229
+ type = "BOOLEAN" /* EQUERY_PARAM_TYPE.BOOLEAN */;
230
+ break;
231
+ }
232
+ case 'number': {
233
+ type = "NUMBER" /* EQUERY_PARAM_TYPE.NUMBER */;
234
+ break;
235
+ }
236
+ case 'string': {
237
+ type = "STRING" /* EQUERY_PARAM_TYPE.STRING */;
238
+ break;
239
+ }
240
+ default: {
241
+ if (Array.isArray(value)) {
242
+ type = "ARRAY" /* EQUERY_PARAM_TYPE.ARRAY */;
243
+ }
244
+ else {
245
+ type = "OBJECT" /* EQUERY_PARAM_TYPE.OBJECT */;
246
+ }
247
+ }
248
+ }
249
+ list.push({
250
+ key: key,
251
+ type: type,
252
+ value: type === "STRING" /* EQUERY_PARAM_TYPE.STRING */ ? value : JSON.stringify(value)
253
+ });
254
+ }
255
+ return list;
256
+ }, []) || []
257
+ }
258
+ },
259
+ callFunction: callFunction,
260
+ mode: 'sdk'
261
+ })];
262
+ });
263
+ });
264
+ };
202
265
 
203
266
  var CRUD_METHODS = {
204
267
  create: {
@@ -269,7 +332,8 @@ var generateClientByDataSourceName = function (dataSourceName, callFunction) {
269
332
  dataSourceName: dataSourceName,
270
333
  methodName: operation.methodName,
271
334
  realMethodName: methodName,
272
- params: effectiveParams
335
+ params: effectiveParams,
336
+ envType: params === null || params === void 0 ? void 0 : params.envType
273
337
  })];
274
338
  case 1:
275
339
  rawData = _b.sent();
@@ -286,9 +350,50 @@ var generateClientByDataSourceName = function (dataSourceName, callFunction) {
286
350
  };
287
351
  // 使用 TypeScript 的 Proxy 来定义一个动态的客户端
288
352
  var generateClient = function (callFunction) {
353
+ var rawQueryClient = {
354
+ $runSQL: function (sql, params, config) {
355
+ return __awaiter(this, void 0, void 0, function () {
356
+ var res;
357
+ return __generator(this, function (_a) {
358
+ switch (_a.label) {
359
+ case 0: return [4 /*yield*/, runMysqlCommand({
360
+ sql: sql,
361
+ params: params,
362
+ config: __assign(__assign({}, config), { preparedStatements: true }),
363
+ callFunction: callFunction
364
+ })];
365
+ case 1:
366
+ res = _a.sent();
367
+ return [2 /*return*/, res];
368
+ }
369
+ });
370
+ });
371
+ },
372
+ $runSQLRaw: function (sql, config) {
373
+ return __awaiter(this, void 0, void 0, function () {
374
+ var res;
375
+ return __generator(this, function (_a) {
376
+ switch (_a.label) {
377
+ case 0: return [4 /*yield*/, runMysqlCommand({
378
+ sql: sql,
379
+ params: [],
380
+ config: __assign(__assign({}, config), { preparedStatements: false }),
381
+ callFunction: callFunction
382
+ })];
383
+ case 1:
384
+ res = _a.sent();
385
+ return [2 /*return*/, res];
386
+ }
387
+ });
388
+ });
389
+ }
390
+ };
289
391
  return new Proxy({}, {
290
392
  get: function (target, prop) {
291
393
  if (typeof prop === 'string') {
394
+ if (rawQueryClient.hasOwnProperty(prop)) {
395
+ return rawQueryClient[prop];
396
+ }
292
397
  // 返回一个函数,这个函数接受任意参数并返回一个 Promise
293
398
  return generateClientByDataSourceName(prop, callFunction);
294
399
  }
@@ -147,23 +147,23 @@
147
147
  return ua_1;
148
148
  }
149
149
  }
150
- var VERSION = "1.0.0";
150
+ var VERSION = "1.2.0";
151
151
 
152
152
  var callDataSource = function (_a) {
153
- var dataSourceName = _a.dataSourceName, methodName = _a.methodName, params = _a.params, realMethodName = _a.realMethodName, callFunction = _a.callFunction;
153
+ var dataSourceName = _a.dataSourceName, methodName = _a.methodName, params = _a.params, realMethodName = _a.realMethodName, callFunction = _a.callFunction, _b = _a.envType, envType = _b === void 0 ? 'prod' : _b, mode = _a.mode;
154
154
  return __awaiter(void 0, void 0, void 0, function () {
155
- var result, response, error_1;
156
- var _b, _c;
157
- return __generator(this, function (_d) {
158
- switch (_d.label) {
155
+ var result, response, requestId, error_1;
156
+ var _c, _d;
157
+ return __generator(this, function (_e) {
158
+ switch (_e.label) {
159
159
  case 0:
160
160
  result = {
161
161
  data: {},
162
162
  requestId: ''
163
163
  };
164
- _d.label = 1;
164
+ _e.label = 1;
165
165
  case 1:
166
- _d.trys.push([1, 3, , 4]);
166
+ _e.trys.push([1, 3, , 4]);
167
167
  return [4 /*yield*/, callFunction({
168
168
  name: 'lowcode-datasource',
169
169
  data: {
@@ -172,30 +172,36 @@
172
172
  params: params,
173
173
  userAgent: getUserAgent(),
174
174
  referrer: getReferrer(),
175
- 'x-sdk-version': VERSION
175
+ 'x-sdk-version': VERSION,
176
+ /**
177
+ * todo 移除此字段
178
+ */
179
+ envType: envType,
180
+ mode: mode
176
181
  }
177
182
  })];
178
183
  case 2:
179
- response = _d.sent();
184
+ response = _e.sent();
185
+ requestId = ((_c = response === null || response === void 0 ? void 0 : response.result) === null || _c === void 0 ? void 0 : _c.requestId) || (response === null || response === void 0 ? void 0 : response.requestId) || (response === null || response === void 0 ? void 0 : response.requestID);
180
186
  if (response === null || response === void 0 ? void 0 : response.result.code) {
181
- throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(response === null || response === void 0 ? void 0 : response.result.message, "\n\u3010\u64CD\u4F5C\u3011\u8C03\u7528 ").concat(dataSourceName, ".").concat(realMethodName, "\n\u3010\u8BF7\u6C42ID\u3011").concat((response === null || response === void 0 ? void 0 : response.requestId) || 'N/A'), {
187
+ throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(response === null || response === void 0 ? void 0 : response.result.message, "\n\u3010\u64CD\u4F5C\u3011\u8C03\u7528 models.").concat(dataSourceName ? "".concat(dataSourceName, ".") : "").concat(realMethodName, "\n\u3010\u9519\u8BEF\u7801\u3011").concat(response === null || response === void 0 ? void 0 : response.result.code, "\n\u3010\u8BF7\u6C42ID\u3011").concat(requestId || 'N/A'), {
182
188
  code: response === null || response === void 0 ? void 0 : response.result.code,
183
- requestId: response === null || response === void 0 ? void 0 : response.requestId
189
+ requestId: requestId
184
190
  });
185
191
  }
186
192
  else {
187
- result.data = ((_b = response === null || response === void 0 ? void 0 : response.result) === null || _b === void 0 ? void 0 : _b.data) || {};
188
- result.requestId = ((_c = response === null || response === void 0 ? void 0 : response.result) === null || _c === void 0 ? void 0 : _c.requestId) || '';
193
+ result.data = ((_d = response === null || response === void 0 ? void 0 : response.result) === null || _d === void 0 ? void 0 : _d.data) || {};
194
+ result.requestId = requestId;
189
195
  }
190
196
  return [3 /*break*/, 4];
191
197
  case 3:
192
- error_1 = _d.sent();
198
+ error_1 = _e.sent();
193
199
  if (error_1.name === 'WxCloudSDKError') {
194
200
  throw error_1;
195
201
  }
196
202
  else {
197
203
  console.log(error_1);
198
- throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(error_1.message, "\n \u3010\u64CD\u4F5C\u3011\u8C03\u7528 ").concat(dataSourceName, ".").concat(realMethodName, "\n \u3010\u8BF7\u6C42ID\u3011N/A"), {
204
+ throw new WxCloudSDKError("\u3010\u9519\u8BEF\u3011".concat(error_1.message, "\n \u3010\u64CD\u4F5C\u3011\u8C03\u7528 models.").concat(dataSourceName ? "".concat(dataSourceName, ".") : "").concat(realMethodName, "\n \u3010\u8BF7\u6C42ID\u3011N/A"), {
199
205
  code: 'UnknownError',
200
206
  originError: error_1
201
207
  });
@@ -205,6 +211,63 @@
205
211
  });
206
212
  });
207
213
  };
214
+ var runMysqlCommand = function (_a) {
215
+ var sql = _a.sql, params = _a.params, config = _a.config, callFunction = _a.callFunction, _b = _a.unsafe, unsafe = _b === void 0 ? false : _b;
216
+ return __awaiter(void 0, void 0, void 0, function () {
217
+ return __generator(this, function (_c) {
218
+ return [2 /*return*/, callDataSource({
219
+ realMethodName: '$runSQL',
220
+ methodName: 'callWedaApi',
221
+ params: {
222
+ action: 'RunMysqlCommand',
223
+ data: {
224
+ sqlTemplate: sql,
225
+ config: config,
226
+ parameter: unsafe
227
+ ? ''
228
+ : Object.entries(params || {}).reduce(function (list, _a) {
229
+ var key = _a[0], value = _a[1];
230
+ if (value !== undefined) {
231
+ var type = "OBJECT" /* EQUERY_PARAM_TYPE.OBJECT */;
232
+ var typeofValue = typeof value;
233
+ switch (typeofValue) {
234
+ case 'boolean': {
235
+ type = "BOOLEAN" /* EQUERY_PARAM_TYPE.BOOLEAN */;
236
+ break;
237
+ }
238
+ case 'number': {
239
+ type = "NUMBER" /* EQUERY_PARAM_TYPE.NUMBER */;
240
+ break;
241
+ }
242
+ case 'string': {
243
+ type = "STRING" /* EQUERY_PARAM_TYPE.STRING */;
244
+ break;
245
+ }
246
+ default: {
247
+ if (Array.isArray(value)) {
248
+ type = "ARRAY" /* EQUERY_PARAM_TYPE.ARRAY */;
249
+ }
250
+ else {
251
+ type = "OBJECT" /* EQUERY_PARAM_TYPE.OBJECT */;
252
+ }
253
+ }
254
+ }
255
+ list.push({
256
+ key: key,
257
+ type: type,
258
+ value: type === "STRING" /* EQUERY_PARAM_TYPE.STRING */ ? value : JSON.stringify(value)
259
+ });
260
+ }
261
+ return list;
262
+ }, []) || []
263
+ }
264
+ },
265
+ callFunction: callFunction,
266
+ mode: 'sdk'
267
+ })];
268
+ });
269
+ });
270
+ };
208
271
 
209
272
  var CRUD_METHODS = {
210
273
  create: {
@@ -275,7 +338,8 @@
275
338
  dataSourceName: dataSourceName,
276
339
  methodName: operation.methodName,
277
340
  realMethodName: methodName,
278
- params: effectiveParams
341
+ params: effectiveParams,
342
+ envType: params === null || params === void 0 ? void 0 : params.envType
279
343
  })];
280
344
  case 1:
281
345
  rawData = _b.sent();
@@ -292,9 +356,50 @@
292
356
  };
293
357
  // 使用 TypeScript 的 Proxy 来定义一个动态的客户端
294
358
  var generateClient = function (callFunction) {
359
+ var rawQueryClient = {
360
+ $runSQL: function (sql, params, config) {
361
+ return __awaiter(this, void 0, void 0, function () {
362
+ var res;
363
+ return __generator(this, function (_a) {
364
+ switch (_a.label) {
365
+ case 0: return [4 /*yield*/, runMysqlCommand({
366
+ sql: sql,
367
+ params: params,
368
+ config: __assign(__assign({}, config), { preparedStatements: true }),
369
+ callFunction: callFunction
370
+ })];
371
+ case 1:
372
+ res = _a.sent();
373
+ return [2 /*return*/, res];
374
+ }
375
+ });
376
+ });
377
+ },
378
+ $runSQLRaw: function (sql, config) {
379
+ return __awaiter(this, void 0, void 0, function () {
380
+ var res;
381
+ return __generator(this, function (_a) {
382
+ switch (_a.label) {
383
+ case 0: return [4 /*yield*/, runMysqlCommand({
384
+ sql: sql,
385
+ params: [],
386
+ config: __assign(__assign({}, config), { preparedStatements: false }),
387
+ callFunction: callFunction
388
+ })];
389
+ case 1:
390
+ res = _a.sent();
391
+ return [2 /*return*/, res];
392
+ }
393
+ });
394
+ });
395
+ }
396
+ };
295
397
  return new Proxy({}, {
296
398
  get: function (target, prop) {
297
399
  if (typeof prop === 'string') {
400
+ if (rawQueryClient.hasOwnProperty(prop)) {
401
+ return rawQueryClient[prop];
402
+ }
298
403
  // 返回一个函数,这个函数接受任意参数并返回一个 Promise
299
404
  return generateClientByDataSourceName(prop, callFunction);
300
405
  }
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@cloudbase/wx-cloud-client-sdk",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
4
7
  "description": "wx cloud client sdk",
5
8
  "main": "lib/wxCloudClientSDK.cjs.js",
6
9
  "module": "lib/wxCloudClientSDK.esm.js",
@@ -12,20 +15,27 @@
12
15
  "scripts": {
13
16
  "clean": "npx rimraf lib/*",
14
17
  "build": "npm run clean && rollup -c",
18
+ "test": "jest",
19
+ "test:coverage": "jest --coverage",
15
20
  "develop": "parcel demo/index.html",
16
21
  "sync-dts": "cd demo && tcb model sync-dts --envId=lowcode-4gs26nnz095f6f4d",
17
22
  "build-demo": "npx rimraf dist/* && parcel build demo/index.html --public-url ./",
18
23
  "publish": "npm publish --access public",
19
24
  "publish-demo": "tcb hosting deploy dist wx-cloud-client-sdk-demo -e lowcode-4gs26nnz095f6f4d",
20
- "docs": "npx rimraf docs/* && typedoc --options typedoc.json"
25
+ "docs": "typedoc --options typedoc.json",
26
+ "deploy": "node ./scripts/deploy.mjs"
21
27
  },
22
28
  "devDependencies": {
23
29
  "@rollup/plugin-commonjs": "^25.0.8",
24
30
  "@rollup/plugin-node-resolve": "^15.2.3",
25
31
  "@rollup/plugin-replace": "^5.0.7",
26
32
  "@rollup/plugin-typescript": "^11.1.6",
33
+ "@tcwd/dev-tools": "^1.0.1",
34
+ "jest": "^29.7.0",
35
+ "jest-environment-jsdom": "^29.7.0",
27
36
  "parcel-bundler": "1.6.1",
28
37
  "rollup": "^4.18.0",
38
+ "ts-jest": "^29.2.2",
29
39
  "typedoc": "^0.25.13",
30
40
  "typedoc-plugin-markdown": "^4.0.3",
31
41
  "typescript": "4.4.4"