@byted-apaas/server-sdk-node 1.0.6 → 1.0.8

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.
@@ -51,6 +51,18 @@ export interface IDB<T, mt> {
51
51
  * ```
52
52
  */
53
53
  oql(oql: string): IOql;
54
+ /**
55
+ * OQL 操作
56
+ * @param oql OQL 语句
57
+ * @param nameArgs 用于替换 OQL 语句中的占位符
58
+ * @example
59
+ * ```
60
+ * let employees = await context.db.oql("select _email from _user where _type = $user_type",{
61
+ * "user_type": "_employee",
62
+ * }).execute();
63
+ * ```
64
+ */
65
+ oql(oql: string, nameArgs: Record<string, any>): IOql;
54
66
  }
55
67
  /**
56
68
  * IDBWithCurrentObject 经由 IDBGetter 返回,是 DB 的动态增加的接口结构
@@ -43,6 +43,7 @@ export declare class DB<T, mt = metadataMap> implements IDB<T, mt> {
43
43
  * ```
44
44
  */
45
45
  oql(oql: string): IOql;
46
+ oql(oql: string, nameArgs: Record<string, any>): IOql;
46
47
  }
47
48
  export declare class DBWithCurrentObject<T, mt = metadataMap> extends DB<T, mt> implements IDB<T, mt>, IDBWithCurrentObject<T, mt> {
48
49
  /**
@@ -42,15 +42,10 @@ class DB {
42
42
  return new index_1.Transaction(this.objectApiName);
43
43
  }
44
44
  ;
45
- /**
46
- * OQL 操作
47
- * @param oql 指定 OQL 语句
48
- * @example
49
- * ```
50
- * let users = await context.db.oql("select _email from _user").execute();
51
- * ```
52
- */
53
- oql(oql) {
45
+ oql(oql, nameArgs) {
46
+ if (nameArgs) {
47
+ return new oql_1.Oql(oql, nameArgs);
48
+ }
54
49
  return new oql_1.Oql(oql);
55
50
  }
56
51
  }
@@ -56,24 +56,30 @@ class _KObjectSync {
56
56
  }
57
57
  ;
58
58
  async delete(recordOrRecordID) {
59
+ let recordID = 0;
59
60
  // 用户直接传入 record id 来进行删除的情况
60
61
  if (typeof recordOrRecordID === "number") {
61
- return await Request.GetInstance().deleteRecordBySync(this.apiName, recordOrRecordID);
62
+ recordID = recordOrRecordID;
62
63
  }
63
- // 用户传入 object 结构来进行删除的情况
64
- let record = recordOrRecordID;
65
- if (server_common_node_1.checkUtils.isObject(record)) {
66
- // 如果用户没有传入包含 id 的 record,则报错
67
- if (!record._id) {
68
- throw new server_common_node_1.exceptions.InvalidParamError("record._id is empty");
64
+ else {
65
+ // 用户传入 object 结构来进行删除的情况
66
+ let record = recordOrRecordID;
67
+ if (server_common_node_1.checkUtils.isObject(record)) {
68
+ // 如果用户没有传入包含 id 的 record,则报错
69
+ if (!record._id) {
70
+ throw new server_common_node_1.exceptions.InvalidParamError("record._id is empty");
71
+ }
72
+ recordID = record._id;
69
73
  }
74
+ }
75
+ if (recordID > 0) {
70
76
  if (this.appCtx && this.appCtx.mode == 'openSDK') {
71
77
  // request from OpenSDK
72
78
  return await (0, common_1.runCtxForOpenSDK)(this.appCtx, async () => {
73
- return await Request.GetInstance().openSDKDeleteRecordBySync(this.apiName, record._id);
79
+ return await Request.GetInstance().openSDKDeleteRecordBySync(this.apiName, recordID);
74
80
  });
75
81
  }
76
- return await Request.GetInstance().deleteRecordBySync(this.apiName, record._id);
82
+ return await Request.GetInstance().deleteRecordBySync(this.apiName, recordID);
77
83
  }
78
84
  throw new server_common_node_1.exceptions.InvalidParamError("record must be number or object");
79
85
  }
@@ -163,8 +169,7 @@ class _KObjectSync {
163
169
  return await Request.GetInstance().openSDKDeleteRecordsBySync(this.apiName, recordIDs);
164
170
  });
165
171
  }
166
- await Request.GetInstance().deleteRecordsBySync(this.apiName, recordIDs);
167
- return;
172
+ return await Request.GetInstance().deleteRecordsBySync(this.apiName, recordIDs);
168
173
  }
169
174
  async batchUpdate(recordMapList) {
170
175
  // 参数校验、组装
@@ -184,13 +189,11 @@ class _KObjectSync {
184
189
  }
185
190
  if (this.appCtx && this.appCtx.mode == 'openSDK') {
186
191
  // request from OpenSDK
187
- await (0, common_1.runCtxForOpenSDK)(this.appCtx, async () => {
188
- return await Request.GetInstance().openSDKUpdateRecordsBySync(this.apiName, recordMap);
192
+ return await (0, common_1.runCtxForOpenSDK)(this.appCtx, async () => {
193
+ return await Request.GetInstance().openSDKUpdateRecordsBySync(this.apiName, recordMapList);
189
194
  });
190
- return;
191
195
  }
192
- await Request.GetInstance().updateRecordsBySync(this.apiName, recordMap);
193
- return;
196
+ return await Request.GetInstance().updateRecordsBySync(this.apiName, recordMap);
194
197
  }
195
198
  ;
196
199
  }
@@ -4,5 +4,6 @@ export declare class Oql implements IOql {
4
4
  params: any[];
5
5
  namedParams: Record<string, any>;
6
6
  constructor(oql: string);
7
+ constructor(oql: string, namedArgs: Record<string, any>);
7
8
  execute(): Promise<any[]>;
8
9
  }
@@ -5,10 +5,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.Oql = void 0;
6
6
  const Request = require("../../../../request/interface");
7
7
  class Oql {
8
- constructor(oql) {
8
+ constructor(oql, namedArgs) {
9
9
  this.oql = oql;
10
10
  this.params = [];
11
11
  this.namedParams = {};
12
+ this.params = [];
13
+ if (namedArgs) {
14
+ this.namedParams = namedArgs;
15
+ }
12
16
  }
13
17
  async execute() {
14
18
  let records = await Request.GetInstance().oql(this.oql, this.params, this.namedParams);
package/hooks/api.js CHANGED
@@ -88,8 +88,41 @@ function getFunctionSync(context, logger) {
88
88
  };
89
89
  }
90
90
  return {
91
- // 多语言函数开发, 走远端
92
91
  invoke: async (params) => {
92
+ // 非微服务场景
93
+ if (!utils.isMicroservice()) {
94
+ let func = undefined;
95
+ let requireFunc = utils.getRequireFunc();
96
+ if (requireFunc) {
97
+ try {
98
+ func = requireFunc(funcName);
99
+ }
100
+ catch (e) {
101
+ }
102
+ }
103
+ if (func) {
104
+ // 本地调用
105
+ let loopMasks = [funcName];
106
+ let reqCtx = nodeCls.get("loopCtx");
107
+ if (reqCtx && reqCtx.loopMasks && Array.isArray(reqCtx.loopMasks)) {
108
+ if (reqCtx.loopMasks.includes(funcName)) {
109
+ throw new exceptions.InvalidParamError(`Task execution forms a loop.`);
110
+ }
111
+ loopMasks.push(...reqCtx.loopMasks);
112
+ }
113
+ // 修改 source 全局函数
114
+ let ctx = nodeCls.create("loopCtx");
115
+ ctx.loopMasks = loopMasks;
116
+ return await ctx.run(async () => {
117
+ const dynCtx = nodeClsCtx.getDynCtx();
118
+ dynCtx.source = functionSources.globalFunction;
119
+ return await dynCtx.run(async () => {
120
+ return await common.hooks.invoke(func, params, context, logger);
121
+ });
122
+ });
123
+ }
124
+ }
125
+ // 远程调用 微服务 | 函数找不到
93
126
  return await Request.GetInstance().invokeFuncSync({
94
127
  APIName: funcName,
95
128
  isInvokeByAPIName: true
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@byted-apaas/server-sdk-node",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "aPaaS Server SDK",
5
5
  "author": "zhouwexin <zhouwexin@bytedance.com>",
6
6
  "homepage": "",
@@ -12,7 +12,7 @@
12
12
  "pre-build": "rm -rf build && tsc"
13
13
  },
14
14
  "dependencies": {
15
- "@byted-apaas/server-common-node": "^1.0.8",
15
+ "@byted-apaas/server-common-node": "^1.0.11",
16
16
  "@jorgeferrero/stream-to-buffer": "^2.0.6",
17
17
  "dayjs": "^1.9.6",
18
18
  "form-data": "^3.0.0",
@@ -767,7 +767,7 @@ async function oql(oql, args, namedArgs) {
767
767
  const queryData = JSON.stringify({
768
768
  "query": oql,
769
769
  "args": args,
770
- "named_args": namedArgs,
770
+ "namedArgs": namedArgs,
771
771
  "compat": true
772
772
  });
773
773
  // 2. prepare args
@@ -582,7 +582,7 @@ async function openSDKCreateRecordsBySync(objectApiName, records) {
582
582
  let urlPath = options._reqPath.replace(replaceKeys.namespace, await (0, common_1.getNamespaceForOpenAndFaaSSDK)());
583
583
  urlPath = urlPath.replace(replaceKeys.objectApiName, objectApiName);
584
584
  // 2.请求
585
- options.json = records;
585
+ options.json = { records: records };
586
586
  return await openapi.doRequest(null, urlPath, options);
587
587
  }
588
588
  ;
@@ -592,7 +592,7 @@ async function openSDKUpdateRecordsBySync(objectApiName, records) {
592
592
  let urlPath = options._reqPath.replace(replaceKeys.namespace, await (0, common_1.getNamespaceForOpenAndFaaSSDK)());
593
593
  urlPath = urlPath.replace(replaceKeys.objectApiName, objectApiName);
594
594
  // 2.请求
595
- options.json = records;
595
+ options.json = { records: records };
596
596
  return await openapi.doRequest(null, urlPath, options);
597
597
  }
598
598
  ;
@@ -602,7 +602,7 @@ async function openSDKDeleteRecordsBySync(objectApiName, recordIDs) {
602
602
  let urlPath = options._reqPath.replace(replaceKeys.namespace, await (0, common_1.getNamespaceForOpenAndFaaSSDK)());
603
603
  urlPath = urlPath.replace(replaceKeys.objectApiName, objectApiName);
604
604
  // 2.请求
605
- options.json = recordIDs;
605
+ options.json = { _ids: recordIDs };
606
606
  return await openapi.doRequest(null, urlPath, options);
607
607
  }
608
608
  ;