@byted-apaas/server-sdk-node 0.0.2-beta.2 → 0.0.2-beta.3
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/LICENSE +7 -0
- package/NOTICE +3 -0
- package/application/application.js +0 -1
- package/application/function/function.js +0 -1
- package/application/impl/common.js +0 -1
- package/application/impl/impl.js +2 -2
- package/constants/constants.js +2 -1
- package/context/context.js +2 -1
- package/context/db/db.js +2 -1
- package/context/db/impl/IObject.js +2 -1
- package/context/db/impl/db.js +0 -1
- package/context/db/impl/object.js +2 -1
- package/context/db/impl/oql/ioql.js +2 -1
- package/context/db/impl/oql/oql.js +2 -1
- package/context/db/impl/order.js +2 -1
- package/context/db/impl/propertiesStore.js +2 -1
- package/context/db/impl/queryBuilder.js +2 -1
- package/context/db/impl/transaction/index.js +2 -1
- package/context/db/impl/transaction/operation.js +0 -1
- package/context/db/impl/transaction.js +2 -1
- package/context/globalConfig/globalConfig.js +2 -1
- package/context/metadata/components/common.js +2 -1
- package/context/metadata/components/components.js +2 -1
- package/context/metadata/components/desktop/list.js +0 -1
- package/context/metadata/components/desktop/recordDetail.js +2 -1
- package/context/metadata/components/mobile/list.js +2 -1
- package/context/metadata/metadata.js +2 -1
- package/context/metadata/objects/fields.js +2 -1
- package/context/metadata/objects/fields.util.js +0 -1
- package/context/metadata/objects/objects.js +2 -1
- package/context/metadata/types/common.js +2 -1
- package/context/metadata/types/components.js +2 -1
- package/context/metadata/types/objects.js +2 -1
- package/context/msg/msg.js +2 -1
- package/context/resources/IResources.js +0 -1
- package/context/resources/impl/resources.js +2 -1
- package/context/tasks/tasks.js +0 -1
- package/data/index.js +0 -1
- package/hooks/api.js +0 -1
- package/hooks/hooks.js +0 -1
- package/kunlun/kunlun.js +2 -1
- package/kunlun/operator/IOperator.js +2 -1
- package/kunlun/operator/impl/expression.js +2 -1
- package/kunlun/operator/impl/logic.js +2 -1
- package/kunlun/operator/impl/logicV2.js +0 -1
- package/kunlun/operator/impl/operator.js +2 -1
- package/kunlun/operator/impl/operatorV2.js +0 -1
- package/lib/core.js +2 -1
- package/package.json +3 -14
- package/request/common.js +0 -1
- package/request/constants.js +0 -1
- package/request/faasinfra.js +0 -1
- package/request/innerapi.js +2 -1
- package/request/interface.js +2 -1
- package/request/openapi.js +2 -1
- package/types/types.js +2 -1
- package/LICENSE.md +0 -0
- package/application/application.js.map +0 -1
- package/application/application.ts +0 -40
- package/application/function/function.js.map +0 -1
- package/application/function/function.ts +0 -37
- package/application/impl/common.js.map +0 -1
- package/application/impl/common.ts +0 -50
- package/application/impl/impl.js.map +0 -1
- package/application/impl/impl.ts +0 -48
- package/constants/constants.js.map +0 -1
- package/constants/constants.ts +0 -12
- package/context/context.js.map +0 -1
- package/context/context.ts +0 -127
- package/context/db/db.js.map +0 -1
- package/context/db/db.ts +0 -77
- package/context/db/impl/IObject.js.map +0 -1
- package/context/db/impl/IObject.ts +0 -244
- package/context/db/impl/db.js.map +0 -1
- package/context/db/impl/db.ts +0 -95
- package/context/db/impl/object.js.map +0 -1
- package/context/db/impl/object.ts +0 -628
- package/context/db/impl/oql/ioql.js.map +0 -1
- package/context/db/impl/oql/ioql.ts +0 -6
- package/context/db/impl/oql/oql.js.map +0 -1
- package/context/db/impl/oql/oql.ts +0 -22
- package/context/db/impl/order.js.map +0 -1
- package/context/db/impl/order.ts +0 -16
- package/context/db/impl/propertiesStore.js.map +0 -1
- package/context/db/impl/propertiesStore.ts +0 -28
- package/context/db/impl/queryBuilder.js.map +0 -1
- package/context/db/impl/queryBuilder.ts +0 -103
- package/context/db/impl/transaction/index.js.map +0 -1
- package/context/db/impl/transaction/index.ts +0 -337
- package/context/db/impl/transaction/operation.js.map +0 -1
- package/context/db/impl/transaction/operation.ts +0 -72
- package/context/db/impl/transaction.js.map +0 -1
- package/context/db/impl/transaction.ts +0 -76
- package/context/globalConfig/globalConfig.js.map +0 -1
- package/context/globalConfig/globalConfig.ts +0 -11
- package/context/metadata/components/common.js.map +0 -1
- package/context/metadata/components/common.ts +0 -19
- package/context/metadata/components/components.js.map +0 -1
- package/context/metadata/components/components.ts +0 -19
- package/context/metadata/components/desktop/list.js.map +0 -1
- package/context/metadata/components/desktop/list.ts +0 -457
- package/context/metadata/components/desktop/recordDetail.js.map +0 -1
- package/context/metadata/components/desktop/recordDetail.ts +0 -64
- package/context/metadata/components/mobile/list.js.map +0 -1
- package/context/metadata/components/mobile/list.ts +0 -176
- package/context/metadata/metadata.js.map +0 -1
- package/context/metadata/metadata.ts +0 -175
- package/context/metadata/objects/fields.js.map +0 -1
- package/context/metadata/objects/fields.ts +0 -454
- package/context/metadata/objects/fields.util.js.map +0 -1
- package/context/metadata/objects/fields.util.ts +0 -360
- package/context/metadata/objects/objects.js.map +0 -1
- package/context/metadata/objects/objects.ts +0 -27
- package/context/metadata/types/common.js.map +0 -1
- package/context/metadata/types/common.ts +0 -10
- package/context/metadata/types/components.js.map +0 -1
- package/context/metadata/types/components.ts +0 -105
- package/context/metadata/types/objects.js.map +0 -1
- package/context/metadata/types/objects.ts +0 -251
- package/context/msg/msg.js.map +0 -1
- package/context/msg/msg.ts +0 -49
- package/context/resources/IResources.js.map +0 -1
- package/context/resources/IResources.ts +0 -73
- package/context/resources/impl/resources.js.map +0 -1
- package/context/resources/impl/resources.ts +0 -170
- package/context/tasks/tasks.js.map +0 -1
- package/context/tasks/tasks.ts +0 -159
- package/data/index.js.map +0 -1
- package/data/index.ts +0 -30
- package/hooks/api.js.map +0 -1
- package/hooks/api.ts +0 -341
- package/hooks/hooks.js.map +0 -1
- package/hooks/hooks.ts +0 -100
- package/kunlun/kunlun.js.map +0 -1
- package/kunlun/kunlun.ts +0 -69
- package/kunlun/operator/IOperator.js.map +0 -1
- package/kunlun/operator/IOperator.ts +0 -163
- package/kunlun/operator/impl/expression.js.map +0 -1
- package/kunlun/operator/impl/expression.ts +0 -71
- package/kunlun/operator/impl/logic.js.map +0 -1
- package/kunlun/operator/impl/logic.ts +0 -595
- package/kunlun/operator/impl/logicV2.js.map +0 -1
- package/kunlun/operator/impl/logicV2.ts +0 -254
- package/kunlun/operator/impl/operator.js.map +0 -1
- package/kunlun/operator/impl/operator.ts +0 -255
- package/kunlun/operator/impl/operatorV2.js.map +0 -1
- package/kunlun/operator/impl/operatorV2.ts +0 -249
- package/lib/core.js.map +0 -1
- package/lib/core.ts +0 -4
- package/request/common.js.map +0 -1
- package/request/common.ts +0 -91
- package/request/constants.js.map +0 -1
- package/request/constants.ts +0 -25
- package/request/faasinfra.js.map +0 -1
- package/request/faasinfra.ts +0 -393
- package/request/innerapi.js.map +0 -1
- package/request/innerapi.ts +0 -1645
- package/request/interface.js.map +0 -1
- package/request/interface.ts +0 -166
- package/request/openapi.js.map +0 -1
- package/request/openapi.ts +0 -1220
- package/types/types.js.map +0 -1
- package/types/types.ts +0 -105
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import {AppCtx} from "../application";
|
|
2
|
-
|
|
3
|
-
import {GetInstance} from "../../request/interface"
|
|
4
|
-
import * as nodeClsCtx from "@byted-apaas/server-common-node/utils/nodeClsCtx";
|
|
5
|
-
import * as utils from "@byted-apaas/server-common-node/utils/utils";
|
|
6
|
-
import {InvalidParamError} from "@byted-apaas/server-common-node/utils/exceptions";
|
|
7
|
-
import {setModeForOpenSDK} from "@byted-apaas/server-common-node/utils/utils";
|
|
8
|
-
import {runCtxForOpenSDK} from "../impl/common";
|
|
9
|
-
|
|
10
|
-
const crypto = require("crypto")
|
|
11
|
-
|
|
12
|
-
export interface IFunction {
|
|
13
|
-
/**
|
|
14
|
-
* 调用函数
|
|
15
|
-
* @param params 函数入参
|
|
16
|
-
*/
|
|
17
|
-
invoke(params: Record<string, any>): Promise<any>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export class Function implements IFunction {
|
|
21
|
-
appCtx: AppCtx
|
|
22
|
-
apiName: string
|
|
23
|
-
|
|
24
|
-
constructor(appCtx: AppCtx, apiName: string) {
|
|
25
|
-
this.appCtx = appCtx
|
|
26
|
-
this.apiName = apiName;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async invoke(params: Record<string, any>): Promise<any> {
|
|
30
|
-
return await runCtxForOpenSDK(this.appCtx, async () => {
|
|
31
|
-
return await GetInstance().invokeFuncWithAuth({
|
|
32
|
-
APIName: this.apiName,
|
|
33
|
-
isInvokeByAPIName: true
|
|
34
|
-
}, params);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":";;;AACA,qEAAqE;AACrE,+EAA+E;AAC/E,iFAAmF;AAEnF,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE1B,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAAiB;IACpE,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;QACrC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACpB,MAAM,IAAI,8BAAiB,CAAC,iCAAiC,CAAC,CAAC;SAClE;QACD,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACrC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACvC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,QAAQ,MAAM,CAAC,GAAG,EAAE;gBAChB,aAAa;gBACb,KAAK,gBAAgB;oBACjB,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC5B,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpB,MAAM;gBACV,aAAa;gBACb,KAAK,YAAY;oBACb,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACxB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpB,MAAM;gBACV,KAAK,SAAS;oBACV,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACxB,MAAM;gBACV,KAAK,MAAM;oBACP,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACrB,MAAM;gBACV,KAAK,QAAQ;oBACT,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACvB,MAAM;gBACV;oBACI,MAAM,IAAI,8BAAiB,CAAC,kCAAkC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;aACnF;YACD,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACnC,KAAK,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;gBACnB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D;YACD,OAAO,MAAM,OAAO,EAAE,CAAC;QAC3B,CAAC,CACJ,CAAA;KACJ;IACD,OAAO,MAAM,OAAO,EAAE,CAAC;AAC3B,CAAC;AA1CD,4CA0CC"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import {AppCtx} from "../application";
|
|
2
|
-
import * as utils from "@byted-apaas/server-common-node/utils/utils";
|
|
3
|
-
import * as nodeClsCtx from "@byted-apaas/server-common-node/utils/nodeClsCtx";
|
|
4
|
-
import {InvalidParamError} from "@byted-apaas/server-common-node/utils/exceptions";
|
|
5
|
-
|
|
6
|
-
const crypto = require("crypto");
|
|
7
|
-
|
|
8
|
-
export async function runCtxForOpenSDK(appCtx: AppCtx, promise: Function): Promise<any> {
|
|
9
|
-
if (appCtx && appCtx.mode === "openSDK") {
|
|
10
|
-
if (!appCtx.credential) {
|
|
11
|
-
throw new InvalidParamError(`credential is empty for openSDK`);
|
|
12
|
-
}
|
|
13
|
-
return nodeClsCtx.getReqCtx().run(async () => {
|
|
14
|
-
utils.setModeForOpenSDK(appCtx.mode);
|
|
15
|
-
utils.setCredential(appCtx.credential);
|
|
16
|
-
utils.setDebugType(appCtx.debugType);
|
|
17
|
-
switch (appCtx.env) {
|
|
18
|
-
// @ts-ignore
|
|
19
|
-
case "developmentboe":
|
|
20
|
-
utils.setEnv('development');
|
|
21
|
-
utils.setBoe("boe");
|
|
22
|
-
break;
|
|
23
|
-
// @ts-ignore
|
|
24
|
-
case "stagingboe":
|
|
25
|
-
utils.setEnv('staging');
|
|
26
|
-
utils.setBoe("boe");
|
|
27
|
-
break;
|
|
28
|
-
case "staging":
|
|
29
|
-
utils.setEnv('staging');
|
|
30
|
-
break;
|
|
31
|
-
case "gray":
|
|
32
|
-
utils.setEnv("gray");
|
|
33
|
-
break;
|
|
34
|
-
case "online":
|
|
35
|
-
utils.setEnv("online");
|
|
36
|
-
break;
|
|
37
|
-
default:
|
|
38
|
-
throw new InvalidParamError(`platformEnvType is invalid for ${appCtx.env}`);
|
|
39
|
-
}
|
|
40
|
-
utils.setInvokeFuncName("openSDK");
|
|
41
|
-
utils.setTenant(await appCtx.credential.getTenantInfo());
|
|
42
|
-
if (!utils.getLogID()) {
|
|
43
|
-
utils.setLogID(crypto.randomBytes(16).toString('hex'));
|
|
44
|
-
}
|
|
45
|
-
return await promise();
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
}
|
|
49
|
-
return await promise();
|
|
50
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"impl.js","sourceRoot":"","sources":["impl.ts"],"names":[],"mappings":";;;AACA,sFAAoF;AACpF,iDAAuD;AACvD,gFAA2E;AAC3E,mDAAyD;AAEzD,iDAAmD;AAGnD,sEAAyE;AAGzE,MAAa,WAAW;IAMpB,YAAY,QAAgB,EAAE,YAAoB;QAC9C,IAAI,CAAC,MAAM,GAAG;YACV,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,IAAI,0BAAa,CAAC,QAAQ,EAAE,YAAY,CAAC;YACrD,SAAS,EAAE,GAAG;YACd,GAAG,EAAE,QAAQ;SAChB,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,kBAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,6BAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,WAAI,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,IAAI,EAAE;YAClC,OAAO,MAAM,IAAA,sBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAA;IACL,CAAC;IAED,aAAa,CAAC,QAAgB;QAC1B,OAAO,IAAI,mBAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,GAAG,CAAC,eAAgC;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,eAAe,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW;IACX,cAAc;QACV,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAnCD,kCAmCC"}
|
package/application/impl/impl.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import {ITool, IToolsExtra} from "@byted-apaas/server-common-node/kunlun/tool/Itool";
|
|
2
|
-
import {AppCredential} from "@byted-apaas/server-common-node/credential/credential";
|
|
3
|
-
import {ApplicationDB} from "../../context/db/impl/db";
|
|
4
|
-
import {Tool} from "@byted-apaas/server-common-node/kunlun/tool/impl/tool";
|
|
5
|
-
import {Function, IFunction} from "../function/function";
|
|
6
|
-
import {AppCtx, IApplication} from "../application";
|
|
7
|
-
import {getTenantInfo} from "../../request/common";
|
|
8
|
-
import {_IOpenSDKResources} from "../../context/resources/IResources";
|
|
9
|
-
import {IDBSync} from "../../context/db/db";
|
|
10
|
-
import {_OpenSDKResources} from "../../context/resources/impl/resources";
|
|
11
|
-
import {PlatformEnvType} from "@byted-apaas/server-common-node/constants/constants";
|
|
12
|
-
|
|
13
|
-
export class Application implements IApplication {
|
|
14
|
-
private appCtx: AppCtx;
|
|
15
|
-
data: IDBSync;
|
|
16
|
-
resources: _IOpenSDKResources;
|
|
17
|
-
tools: ITool & IToolsExtra;
|
|
18
|
-
|
|
19
|
-
constructor(clientID: string, clientSecret: string) {
|
|
20
|
-
this.appCtx = {
|
|
21
|
-
mode: "openSDK",
|
|
22
|
-
credential: new AppCredential(clientID, clientSecret),
|
|
23
|
-
debugType: "0",
|
|
24
|
-
env: "online"
|
|
25
|
-
}
|
|
26
|
-
this.data = new ApplicationDB(this.appCtx);
|
|
27
|
-
this.resources = new _OpenSDKResources(this.appCtx);
|
|
28
|
-
this.tools = new Tool();
|
|
29
|
-
this.tools.getTenantInfo = async () => {
|
|
30
|
-
return await getTenantInfo(this.appCtx);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
cloudfunction(funcName: string): IFunction {
|
|
35
|
-
return new Function(this.appCtx, funcName);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
env(platformEnvType: PlatformEnvType): IApplication {
|
|
39
|
-
this.appCtx.env = platformEnvType;
|
|
40
|
-
return this;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// 设置本地调试模式
|
|
44
|
-
localDebugMode(): IApplication {
|
|
45
|
-
this.appCtx.debugType = "2";
|
|
46
|
-
return this;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACvB,GAAG,EAAE,sCAAsC;CAC9C,CAAA;AAEY,QAAA,cAAc,GAAG;IAC1B,UAAU,EAAE,sBAAsB;IAClC,QAAQ,EAAE,UAAU;CACvB,CAAA;AAEY,QAAA,eAAe,GAAG;IAC3B,QAAQ,EAAE,GAAG;CAChB,CAAA"}
|
package/constants/constants.ts
DELETED
package/context/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["context.ts"],"names":[],"mappings":";;;AAIA,wEAA0E;AAE1E,gBAAgB;AAEhB,MAAa,OAAuB,SAAQ,4BAAgB;IAcxD;;;OAGG;IACH,QAAQ,CAAC,QAAY;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAWD;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAuB,OAAY;QAC3C,OAAO,IAAI,CAAC;IAChB,CAAC;IAAA,CAAC;CAwBL;AA7DD,0BA6DC"}
|
package/context/context.ts
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { _Resources } from "./resources/impl/resources";
|
|
2
|
-
import { Tasks } from "./tasks/tasks";
|
|
3
|
-
import { Message } from "./msg/msg";
|
|
4
|
-
import { IDBGetter } from "./db/db";
|
|
5
|
-
import { Context as CommonContext } from '@byted-apaas/server-common-node'
|
|
6
|
-
import { IMetaData } from "./metadata/metadata";
|
|
7
|
-
// TODO MERGE cf
|
|
8
|
-
|
|
9
|
-
export class Context<T, mt, cf, gv> extends CommonContext<T> implements IContext<T, mt, cf, gv> {
|
|
10
|
-
/**
|
|
11
|
-
* 操作数据库中的记录数据
|
|
12
|
-
*/
|
|
13
|
-
db: IDBGetter<T, mt>;
|
|
14
|
-
/**
|
|
15
|
-
* 元数据读写
|
|
16
|
-
*/
|
|
17
|
-
metadata: IMetaData<mt>;
|
|
18
|
-
/**
|
|
19
|
-
* 静态资源类操作
|
|
20
|
-
*/
|
|
21
|
-
resources: _Resources;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* 全局函数
|
|
25
|
-
* @param funcName 函数名
|
|
26
|
-
*/
|
|
27
|
-
function(funcName: cf): { invoke: (params: any) => Promise<any>; } {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 任务操作
|
|
33
|
-
*/
|
|
34
|
-
tasks: Tasks<cf>;
|
|
35
|
-
/**
|
|
36
|
-
* 向消息中心推送及更新消息
|
|
37
|
-
*/
|
|
38
|
-
msg: Message;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* 根据 apiName 获取对应的全局变量
|
|
42
|
-
* @param apiName 全局变量的 API Name
|
|
43
|
-
*/
|
|
44
|
-
async getVar<Key extends keyof gv>(apiName: Key): Promise<gv[Key]> {
|
|
45
|
-
return null;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
// /**
|
|
49
|
-
// * 微服务
|
|
50
|
-
// * @param apiName 微服务的名称
|
|
51
|
-
// */
|
|
52
|
-
// microservice(apiName: string): {
|
|
53
|
-
// /**
|
|
54
|
-
// * 同步调用微服务
|
|
55
|
-
// * @param path 请求路径,如:/ping
|
|
56
|
-
// * @param method 请求方法,默认为 GET
|
|
57
|
-
// * @param params 请求参数,默认为 undefined
|
|
58
|
-
// */
|
|
59
|
-
// invoke: (path: string, method?: string, params?: any) => Promise<any>;
|
|
60
|
-
// /**
|
|
61
|
-
// * 异步调用微服务
|
|
62
|
-
// * @param path 请求路径,如:/ping
|
|
63
|
-
// * @param method 请求方法,默认为 GET
|
|
64
|
-
// * @param params 请求参数,默认为 undefined
|
|
65
|
-
// */
|
|
66
|
-
// invokeAsync: (path: string, method?: string, params?: any) => Promise<any>;
|
|
67
|
-
// } {
|
|
68
|
-
// return undefined;
|
|
69
|
-
// };
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export interface IContext<T, mt = {}, cf = "", gv = {}> {
|
|
73
|
-
/**
|
|
74
|
-
* 操作数据库中的记录数据
|
|
75
|
-
*/
|
|
76
|
-
db: IDBGetter<T, mt>;
|
|
77
|
-
/**
|
|
78
|
-
* 元数据读写
|
|
79
|
-
*/
|
|
80
|
-
metadata: IMetaData<mt>;
|
|
81
|
-
/**
|
|
82
|
-
* 静态资源类操作
|
|
83
|
-
*/
|
|
84
|
-
resources: _Resources;
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* 全局函数
|
|
88
|
-
* @param funcName 函数名
|
|
89
|
-
*/
|
|
90
|
-
function(funcName: cf): { invoke: (params: any) => Promise<any>; };
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* 任务操作
|
|
94
|
-
*/
|
|
95
|
-
tasks: Tasks<cf>;
|
|
96
|
-
/**
|
|
97
|
-
* 向消息中心推送及更新消息
|
|
98
|
-
*/
|
|
99
|
-
msg: Message;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* 根据 apiName 获取对应的全局变量
|
|
103
|
-
* @param apiName 全局变量的 API Name
|
|
104
|
-
*/
|
|
105
|
-
getVar<Key extends keyof gv>(apiName: Key): Promise<gv[Key]>;
|
|
106
|
-
|
|
107
|
-
// /**
|
|
108
|
-
// * 微服务
|
|
109
|
-
// * @param apiName 微服务的名称
|
|
110
|
-
// */
|
|
111
|
-
// microservice(apiName: string): {
|
|
112
|
-
// /**
|
|
113
|
-
// * 同步调用微服务
|
|
114
|
-
// * @param path 请求路径,如:/ping
|
|
115
|
-
// * @param method 请求方法,默认为 GET
|
|
116
|
-
// * @param params 请求参数,默认为 undefined
|
|
117
|
-
// */
|
|
118
|
-
// invoke: (path: string, method?: string, params?: any) => Promise<any>;
|
|
119
|
-
// /**
|
|
120
|
-
// * 异步调用微服务
|
|
121
|
-
// * @param path 请求路径,如:/ping
|
|
122
|
-
// * @param method 请求方法,默认为 GET
|
|
123
|
-
// * @param params 请求参数,默认为 undefined
|
|
124
|
-
// */
|
|
125
|
-
// invokeAsync: (path: string, method?: string, params?: any) => Promise<any>;
|
|
126
|
-
// };
|
|
127
|
-
}
|
package/context/db/db.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["db.ts"],"names":[],"mappings":""}
|
package/context/db/db.ts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { currentObjApiName } from '../../data'
|
|
2
|
-
import { _IKAllEndpoint, _IKSyncEndpoint, _IKQuery } from './impl/IObject';
|
|
3
|
-
import { ITransactionGetter } from './impl/transaction';
|
|
4
|
-
import { IOql } from './impl/oql/ioql';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* - IDBGetter 是声明 DB interface 的顶级入口,在使用时应该避免直接使用 IDB 和 IDBWithCurrentObject
|
|
8
|
-
* 应该直接使用 IDBGetter。
|
|
9
|
-
* - 目前 IDBGetter 支持的是 currentObject 方法的动态声明,使用泛型实现,期望传入的 T 是 Context 结构。
|
|
10
|
-
* - 如果 Context 有 objectApiName 属性,则拥有 .db.currentObject 和 .db.transaction.currentObject
|
|
11
|
-
*/
|
|
12
|
-
export type IDBGetter<T, mt> = T extends { 'objectApiName': string } ? IDB<T, mt> & IDBWithCurrentObject<{}, mt> : IDB<{}, mt>;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* IDB 经由 IDBGetter 返回,是 DB 的基础接口结构
|
|
16
|
-
*/
|
|
17
|
-
export interface IDB<T, mt> {
|
|
18
|
-
/**
|
|
19
|
-
* 操作指定对象的记录数据
|
|
20
|
-
* @param objectApiName 指定对象的 ApiName
|
|
21
|
-
* @example
|
|
22
|
-
* ```
|
|
23
|
-
* context.db.object("_user").where({
|
|
24
|
-
* gender: "male"
|
|
25
|
-
* }).find()
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
object<T extends keyof mt>(objectApiName: T): _IKAllEndpoint<mt[T]> & _IKQuery<mt[T]>;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* 创建一个新的空事务
|
|
32
|
-
* @example
|
|
33
|
-
* ```
|
|
34
|
-
* let tx = context.db.newTransaction();
|
|
35
|
-
* let user = tx.object("_user").registerCreate({
|
|
36
|
-
* _name: new kunlun.type.Multilingual({ zh: "用户1", en: "user1" }),
|
|
37
|
-
* });
|
|
38
|
-
* let contract = tx.object("contract").registerCreate({
|
|
39
|
-
* _name: new kunlun.type.Multilingual({ zh: "用户1的合同", en: "user1's contract" }),
|
|
40
|
-
* user: {id: user._id}
|
|
41
|
-
* });
|
|
42
|
-
* await tx.commit();
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
newTransaction(): ITransactionGetter<T, mt>;
|
|
46
|
-
/**
|
|
47
|
-
* OQL 操作
|
|
48
|
-
* @param oql OQL 语句
|
|
49
|
-
* @example
|
|
50
|
-
* ```
|
|
51
|
-
* let users = await context.db.oql("select _email from _user").execute();
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
oql(oql: string): IOql;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* IDBWithCurrentObject 经由 IDBGetter 返回,是 DB 的动态增加的接口结构
|
|
59
|
-
*/
|
|
60
|
-
export interface IDBWithCurrentObject<T, mt> {
|
|
61
|
-
/**
|
|
62
|
-
* 无需入参,操作当前对象的记录数据
|
|
63
|
-
*/
|
|
64
|
-
// @ts-ignore
|
|
65
|
-
currentObject(): _IKAllEndpoint<mt[currentObjApiName]> & _IKQuery<mt[currentObjApiName]>;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* IDBSync 仅包含同步调用接口,当前应用场景为 OpenSDK
|
|
70
|
-
*/
|
|
71
|
-
export interface IDBSync<mt = Record<string, never>> {
|
|
72
|
-
/**
|
|
73
|
-
* 操作指定对象的记录数据
|
|
74
|
-
* @param objectApiName 指定对象的 ApiName
|
|
75
|
-
*/
|
|
76
|
-
object(objectApiName: string): _IKSyncEndpoint<mt> & _IKQuery<mt>;
|
|
77
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IObject.js","sourceRoot":"","sources":["IObject.ts"],"names":[],"mappings":";;AAEsF,CAAC"}
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { _Cond, _Record, _WhereCond } from '../../../types/types'
|
|
2
|
-
|
|
3
|
-
export interface _IKAllEndpoint<T> extends _IKSyncEndpoint<T>, _IKAsyncEndpoint<T> { };
|
|
4
|
-
|
|
5
|
-
export interface _IKSyncEndpoint<T> {
|
|
6
|
-
/**
|
|
7
|
-
* 创建记录
|
|
8
|
-
* @param recordMap 用于创建的一条记录
|
|
9
|
-
* @paramExample {_name: "John", age: 19, gender: "male"}
|
|
10
|
-
* @example
|
|
11
|
-
* ```
|
|
12
|
-
* context.db.object("_department").create({
|
|
13
|
-
* _name: new kunlun.type.Multilingual({ zh: "部门" }),
|
|
14
|
-
* _manager: { _id: 1660000000 },
|
|
15
|
-
* _status: "_active"
|
|
16
|
-
* })
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
create(recordMap: _Cond<T>): Promise<{ _id: number }>;
|
|
20
|
-
/**
|
|
21
|
-
* 删除记录
|
|
22
|
-
* @param recordID 用于删除的一条记录的 ID
|
|
23
|
-
* @example
|
|
24
|
-
* ```
|
|
25
|
-
* context.db.object("_user").delete(123456789123)
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
delete(recordID: number): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* 删除记录
|
|
31
|
-
* @param record 用于删除的一条完整记录
|
|
32
|
-
* @example
|
|
33
|
-
* ```
|
|
34
|
-
* context.db.object("_user").delete(context.targetRecord.original)
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
delete(record: _Cond<T>): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* 指定 _id 后,更新对应记录
|
|
40
|
-
* @param _id 主键
|
|
41
|
-
* @param recordMap 用于更新的一条记录
|
|
42
|
-
* @paramExample {_name: "John", age: 19, gender: "male"}
|
|
43
|
-
* @example
|
|
44
|
-
* ```
|
|
45
|
-
* context.db.object("_user").update(1660000000, {
|
|
46
|
-
* gender: "male"
|
|
47
|
-
* })
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
update(_id: number, recordMap: _Cond<T>): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* 指定 _id 后,更新对应记录
|
|
53
|
-
* @param recordMap 用于更新的一条记录,需对 _id 赋值
|
|
54
|
-
* @paramExample {_id: 1660000000, _name: "John", age: 19, gender: "male"}
|
|
55
|
-
* @example
|
|
56
|
-
* ```
|
|
57
|
-
* context.db.object("_user").update({
|
|
58
|
-
* _id: 1660000000,
|
|
59
|
-
* gender: "male"
|
|
60
|
-
* })
|
|
61
|
-
* ```
|
|
62
|
-
*/
|
|
63
|
-
update(recordMap: _Cond<T>): Promise<void>;
|
|
64
|
-
/**
|
|
65
|
-
* 批量创建记录
|
|
66
|
-
* @param recordMapList 多条用于创建的记录数据组成的数组
|
|
67
|
-
* @paramExample [{_name: "John", age: 19, gender: "male"}, {_name: "Alis", age: 16, gender: "female"}]
|
|
68
|
-
*/
|
|
69
|
-
batchCreate(recordMapList: _Cond<T>[]): Promise<number[]>;
|
|
70
|
-
/**
|
|
71
|
-
* 批量删除记录
|
|
72
|
-
* @param recordIdList 多个用于删除的记录 ID 组成的数组
|
|
73
|
-
* @paramExample [1001, 1002, 1003]
|
|
74
|
-
*/
|
|
75
|
-
batchDelete(recordIdList: number[]): Promise<void>;
|
|
76
|
-
/**
|
|
77
|
-
* 批量删除记录
|
|
78
|
-
* @param recordList 多条用于删除的记录数据组成的数组,记录数据需对 _id 赋值
|
|
79
|
-
* @paramExample [{_id: 1001, _name: "John", gender: "male"}, {_id: 1002, _name: "Alis", gender: "female"}]
|
|
80
|
-
*/
|
|
81
|
-
batchDelete(recordList: _Cond<T>[]): Promise<void>;
|
|
82
|
-
/**
|
|
83
|
-
* 根据 _id 批量更新记录
|
|
84
|
-
* @param recordMapList 多条用于更新的记录数据组成的数组,记录数据需对 _id 赋值
|
|
85
|
-
* @paramExample [{_id: 1001, _name: "John", gender: "male"}, {_id: 1002, _name: "Alis", gender: "female"}]
|
|
86
|
-
*/
|
|
87
|
-
batchUpdate(recordMapList: _Cond<T>[]): Promise<void>;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface _IKAsyncEndpoint<T> {
|
|
91
|
-
/**
|
|
92
|
-
* 批量创建记录(为异步任务)
|
|
93
|
-
* @param recordMapList 用于创建的多条记录
|
|
94
|
-
* @paramExample [{_name: "John", age: 19, gender: "male"}, {_name: "Alis", age: 16, gender: "female"}]
|
|
95
|
-
*/
|
|
96
|
-
batchCreateAsync(recordMapList: _Cond<T>[]): Promise<{ taskID: number }>;
|
|
97
|
-
/**
|
|
98
|
-
* 批量删除记录(为异步任务)
|
|
99
|
-
* @param recordIDList 用于删除的多条记录的 ID 列表
|
|
100
|
-
*/
|
|
101
|
-
batchDeleteAsync(recordIDList: number[]): Promise<{ taskID: number }>;
|
|
102
|
-
/**
|
|
103
|
-
* 批量删除记录(为异步任务)
|
|
104
|
-
* @param recordList 用于删除的多条完整记录的列表
|
|
105
|
-
*/
|
|
106
|
-
batchDeleteAsync(recordList: _Cond<T>[]): Promise<{ taskID: number }>;
|
|
107
|
-
/**
|
|
108
|
-
* 根据 _id 批量更新记录(为异步任务)
|
|
109
|
-
* @param recordMapList 用于更新的多条记录,需对 _id 赋值
|
|
110
|
-
* @paramExample [{_id: 1001, _name: "John", gender: "male"}, {_id: 1002, _name: "Alis", gender: "female"}]
|
|
111
|
-
*/
|
|
112
|
-
batchUpdateAsync(recordMapList: _Cond<T>[]): Promise<{ taskID: number }>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export interface _IKQuery<T> {
|
|
116
|
-
/**
|
|
117
|
-
* 无需入参,返回全部符合条件的记录
|
|
118
|
-
* @example
|
|
119
|
-
* ```
|
|
120
|
-
* context.db.object("_user").where({
|
|
121
|
-
* gender: "male"
|
|
122
|
-
* }).findAll()
|
|
123
|
-
* ```
|
|
124
|
-
*/
|
|
125
|
-
findAll(): Promise<_Record<T>[]>;
|
|
126
|
-
/**
|
|
127
|
-
* 无需入参,返回符合条件的记录,单次返回 200 条
|
|
128
|
-
* @example
|
|
129
|
-
* ```
|
|
130
|
-
* context.db.object("_user").where({
|
|
131
|
-
* gender: "male"
|
|
132
|
-
* }).find()
|
|
133
|
-
* ```
|
|
134
|
-
*/
|
|
135
|
-
find(): Promise<_Record<T>[]>;
|
|
136
|
-
/**
|
|
137
|
-
* 无需入参,返回排在第一位的记录
|
|
138
|
-
* @example
|
|
139
|
-
* ```
|
|
140
|
-
* context.db.object("_user").where({
|
|
141
|
-
* gender: "male"
|
|
142
|
-
* }).findOne()
|
|
143
|
-
* ```
|
|
144
|
-
*/
|
|
145
|
-
findOne(): Promise<_Record<T>>;
|
|
146
|
-
/**
|
|
147
|
-
* 根据指定字段升序排序(a -> z, 0 -> 9)
|
|
148
|
-
* @param fieldApiNames 排序依据的字段数组,按先后顺序确定优先级
|
|
149
|
-
* @example
|
|
150
|
-
* ```
|
|
151
|
-
* context.db.object("_user").orderBy(["_email", "_phoneNumber"]).find()
|
|
152
|
-
* ```
|
|
153
|
-
*/
|
|
154
|
-
orderBy<K extends keyof T>(fieldApiNames: K[]): _IKQuery<T>;
|
|
155
|
-
/**
|
|
156
|
-
* 根据指定字段升序排序(a -> z, 0 -> 9)
|
|
157
|
-
* @param fieldApiNames 排序依据的字段,按先后顺序确定优先级,用逗号分隔
|
|
158
|
-
* @example
|
|
159
|
-
* ```
|
|
160
|
-
* context.db.object("_user").orderBy("_email", "_phoneNumber").find()
|
|
161
|
-
* ```
|
|
162
|
-
*/
|
|
163
|
-
orderBy<K extends keyof T>(...fieldApiNames: K[]): _IKQuery<T>;
|
|
164
|
-
/**
|
|
165
|
-
* 根据指定字段降序排序(z -> a, 9 -> 0)
|
|
166
|
-
* @param fieldApiNames 排序依据的字段数组,按先后顺序确定优先级
|
|
167
|
-
* @example
|
|
168
|
-
* ```
|
|
169
|
-
* context.db.object("_user").orderByDesc("_email", "_phoneNumber").find()
|
|
170
|
-
* ```
|
|
171
|
-
*/
|
|
172
|
-
orderByDesc<K extends keyof T>(fieldApiNames: K[]): _IKQuery<T>;
|
|
173
|
-
/**
|
|
174
|
-
* 根据指定字段降序排序(z -> a, 9 -> 0)
|
|
175
|
-
* @param fieldApiNames 排序依据的字段,按先后顺序确定优先级,用逗号分隔
|
|
176
|
-
* @example
|
|
177
|
-
* ```
|
|
178
|
-
* context.db.object("_user").orderByDesc("_email", "_phoneNumber").find()
|
|
179
|
-
* ```
|
|
180
|
-
*/
|
|
181
|
-
orderByDesc<K extends keyof T>(...fieldApiNames: K[]): _IKQuery<T>;
|
|
182
|
-
/**
|
|
183
|
-
* 指定需返回的字段
|
|
184
|
-
* @param fieldApiNames 需返回的字段数组
|
|
185
|
-
* @example
|
|
186
|
-
* ```
|
|
187
|
-
* context.db.object("_user").select(["_name", "_email"]).find()
|
|
188
|
-
* ```
|
|
189
|
-
*/
|
|
190
|
-
select<K extends keyof T>(fieldApiNames: K[]): _IKQuery<T>;
|
|
191
|
-
/**
|
|
192
|
-
* 指定需返回的字段
|
|
193
|
-
* @param fieldApiNames 需返回的字段,用逗号分隔
|
|
194
|
-
* @example
|
|
195
|
-
* ```
|
|
196
|
-
* context.db.object("_user").select("_name", "_email").find()
|
|
197
|
-
* ```
|
|
198
|
-
*/
|
|
199
|
-
select<K extends keyof T>(...fieldApiNames: K[]): _IKQuery<T>;
|
|
200
|
-
/**
|
|
201
|
-
* 设置查询条件
|
|
202
|
-
* @param conditionMap 对字段赋值以指定查询筛选条件
|
|
203
|
-
* @paramExample {gender: "male"}
|
|
204
|
-
* @example
|
|
205
|
-
* ```
|
|
206
|
-
* context.db.object("_user").where({
|
|
207
|
-
* gender: "male"
|
|
208
|
-
* }).find()
|
|
209
|
-
* ```
|
|
210
|
-
*/
|
|
211
|
-
where(conditionMap: _WhereCond<T>): _IKQuery<T>;
|
|
212
|
-
/**
|
|
213
|
-
* 设置查询条件
|
|
214
|
-
*/
|
|
215
|
-
where(): _IKQuery<T>;
|
|
216
|
-
/**
|
|
217
|
-
* 指定分页查询的数量
|
|
218
|
-
* @param limit 分页查询的数量
|
|
219
|
-
* @paramExample 10
|
|
220
|
-
* @example
|
|
221
|
-
* ```
|
|
222
|
-
* context.db.object("_user").limit(10)
|
|
223
|
-
* ```
|
|
224
|
-
*/
|
|
225
|
-
limit(limit: number): _IKQuery<T>;
|
|
226
|
-
/**
|
|
227
|
-
* 指定分页查询的偏移量
|
|
228
|
-
* @param offset 分页查询的偏移量
|
|
229
|
-
* @paramExample 0
|
|
230
|
-
* @example
|
|
231
|
-
* ```
|
|
232
|
-
* context.db.object("_user").offset(0)
|
|
233
|
-
* ```
|
|
234
|
-
*/
|
|
235
|
-
offset(offset: number): _IKQuery<T>;
|
|
236
|
-
/**
|
|
237
|
-
* 指定条件的行数
|
|
238
|
-
* @example
|
|
239
|
-
* ```
|
|
240
|
-
* context.db.object("_user").count()
|
|
241
|
-
* ```
|
|
242
|
-
*/
|
|
243
|
-
count(): Promise<number>;
|
|
244
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["db.ts"],"names":[],"mappings":";;;AAAA,qCAAwD;AAKxD,wEAA4D;AAC5D,+CAAiD;AAEjD,mCAAgC;AAGhC,MAAa,EAAE;IAGX,YAAY,aAAsB;QAC9B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACtC,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAqB,aAAgB;QACvC,OAAO,IAAI,iBAAQ,CAAQ,aAAuB,CAAC,CAAA;IACvD,CAAC;IAAA,CAAC;IAEF;;;;;;;;;;;;;;OAcG;IACH,cAAc;QACV,OAAO,IAAI,mBAAW,CAAC,IAAI,CAAC,aAAa,CAAyC,CAAA;IACtF,CAAC;IAAA,CAAC;IAEF;;;;;;;OAOG;IACH,GAAG,CAAC,GAAW;QACX,OAAO,IAAI,SAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;CACJ;AAnDD,gBAmDC;AAED,MAAa,mBAAyC,SAAQ,EAAS;IACnE;;OAEG;IACH,aAAa;IACb,aAAa;QACT,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,MAAM,IAAI,+BAAU,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;SACxE;QACD,OAAO,IAAI,iBAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAAA,CAAC;IAEF,YAAY,aAAqB;QAC7B,KAAK,CAAC,aAAa,CAAC,CAAA;IACxB,CAAC;CACJ;AAfD,kDAeC;AAED;;GAEG;AACH,MAAa,aAAa;IAGtB,YAAY,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,MAAM,CAAC,aAAqB;QACxB,OAAO,IAAI,4BAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;CACJ;AAVD,sCAUC"}
|