oak-domain 3.0.4 → 4.0.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/lib/actions/action.d.ts +16 -16
- package/lib/actions/action.js +17 -17
- package/lib/actions/relation.d.ts +5 -5
- package/lib/actions/relation.js +25 -25
- package/lib/base-app-domain/ActionAuth/Schema.d.ts +186 -186
- package/lib/base-app-domain/ActionAuth/Storage.js +39 -39
- package/lib/base-app-domain/ActionDefDict.d.ts +8 -8
- package/lib/base-app-domain/ActionDefDict.js +9 -9
- package/lib/base-app-domain/EntityDict.d.ts +28 -28
- package/lib/base-app-domain/I18n/Schema.d.ts +129 -129
- package/lib/base-app-domain/I18n/Schema.js +2 -2
- package/lib/base-app-domain/I18n/Storage.d.ts +3 -3
- package/lib/base-app-domain/I18n/Storage.js +59 -59
- package/lib/base-app-domain/Modi/Action.d.ts +10 -10
- package/lib/base-app-domain/Modi/Action.js +14 -14
- package/lib/base-app-domain/Modi/Schema.d.ts +136 -136
- package/lib/base-app-domain/Modi/Storage.js +63 -63
- package/lib/base-app-domain/ModiEntity/Schema.d.ts +384 -384
- package/lib/base-app-domain/ModiEntity/Storage.js +30 -30
- package/lib/base-app-domain/Oper/Schema.d.ts +153 -153
- package/lib/base-app-domain/Oper/Storage.js +38 -38
- package/lib/base-app-domain/OperEntity/Schema.d.ts +373 -373
- package/lib/base-app-domain/OperEntity/Storage.js +30 -30
- package/lib/base-app-domain/Path/Schema.d.ts +149 -149
- package/lib/base-app-domain/Path/Schema.js +2 -2
- package/lib/base-app-domain/Path/Storage.d.ts +3 -3
- package/lib/base-app-domain/Path/Storage.js +54 -54
- package/lib/base-app-domain/Relation/Schema.d.ts +188 -188
- package/lib/base-app-domain/Relation/Storage.js +54 -54
- package/lib/base-app-domain/Relation.d.ts +2 -2
- package/lib/base-app-domain/Relation.js +4 -4
- package/lib/base-app-domain/RelationAuth/Schema.d.ts +214 -214
- package/lib/base-app-domain/RelationAuth/Storage.js +44 -44
- package/lib/base-app-domain/Storage.js +31 -31
- package/lib/base-app-domain/User/Action.d.ts +10 -10
- package/lib/base-app-domain/User/Action.js +12 -12
- package/lib/base-app-domain/User/Schema.d.ts +210 -210
- package/lib/base-app-domain/User/Storage.js +33 -33
- package/lib/base-app-domain/UserEntityClaim/Schema.d.ts +264 -264
- package/lib/base-app-domain/UserEntityClaim/Schema.js +2 -2
- package/lib/base-app-domain/UserEntityClaim/Storage.d.ts +3 -3
- package/lib/base-app-domain/UserEntityClaim/Storage.js +37 -37
- package/lib/base-app-domain/UserEntityGrant/Action.d.ts +5 -5
- package/lib/base-app-domain/UserEntityGrant/Action.js +5 -5
- package/lib/base-app-domain/UserEntityGrant/Schema.d.ts +131 -131
- package/lib/base-app-domain/UserEntityGrant/Storage.js +25 -25
- package/lib/base-app-domain/UserRelation/Schema.d.ts +208 -208
- package/lib/base-app-domain/UserRelation/Storage.js +56 -56
- package/lib/base-app-domain/_SubQuery.d.ts +142 -142
- package/lib/base-app-domain/index.d.ts +4 -4
- package/lib/base-app-domain/index.js +7 -7
- package/lib/checkers/index.d.ts +5 -5
- package/lib/checkers/index.js +13 -13
- package/lib/compiler/entities.d.ts +2 -0
- package/lib/compiler/entities.js +7 -0
- package/lib/compiler/env.d.ts +13 -14
- package/lib/compiler/env.js +45 -48
- package/lib/compiler/localeBuilder.d.ts +27 -22
- package/lib/compiler/localeBuilder.js +184 -173
- package/lib/compiler/schemalBuilder.d.ts +27 -27
- package/lib/compiler/schemalBuilder.js +3569 -3569
- package/lib/entities/ActionAuth.d.ts +10 -10
- package/lib/entities/ActionAuth.js +31 -31
- package/lib/entities/I18n.d.ts +9 -9
- package/lib/entities/I18n.js +36 -37
- package/lib/entities/Modi.js +49 -49
- package/lib/entities/ModiEntity.js +18 -18
- package/lib/entities/Oper.js +21 -21
- package/lib/entities/OperEntity.js +18 -18
- package/lib/entities/Path.d.ts +8 -8
- package/lib/entities/Path.js +35 -35
- package/lib/entities/Relation.d.ts +8 -8
- package/lib/entities/Relation.js +35 -35
- package/lib/entities/RelationAuth.d.ts +8 -8
- package/lib/entities/RelationAuth.js +34 -34
- package/lib/entities/User.js +31 -31
- package/lib/entities/UserEntityClaim.d.ts +13 -13
- package/lib/entities/UserEntityClaim.js +17 -17
- package/lib/entities/UserEntityGrant.d.ts +9 -9
- package/lib/entities/UserEntityGrant.js +15 -15
- package/lib/entities/UserRelation.d.ts +10 -10
- package/lib/entities/UserRelation.js +38 -38
- package/lib/index.d.ts +23 -23
- package/lib/index.js +37 -37
- package/lib/store/AsyncRowStore.d.ts +60 -59
- package/lib/store/AsyncRowStore.js +118 -116
- package/lib/store/CascadeStore.d.ts +104 -103
- package/lib/store/CascadeStore.js +1688 -1662
- package/lib/store/RelationAuth.d.ts +96 -96
- package/lib/store/RelationAuth.js +1336 -1334
- package/lib/store/SyncRowStore.d.ts +29 -29
- package/lib/store/SyncRowStore.js +50 -50
- package/lib/store/TriggerExecutor.d.ts +38 -38
- package/lib/store/TriggerExecutor.js +459 -459
- package/lib/store/actionAuth.d.ts +4 -4
- package/lib/store/actionAuth.js +25 -25
- package/lib/store/actionDef.d.ts +10 -10
- package/lib/store/actionDef.js +278 -278
- package/lib/store/checker.d.ts +26 -26
- package/lib/store/checker.js +487 -487
- package/lib/store/filter.d.ts +85 -122
- package/lib/store/filter.js +1651 -1623
- package/lib/store/modi.d.ts +13 -13
- package/lib/store/modi.js +254 -254
- package/lib/store/relation.d.ts +12 -12
- package/lib/store/relation.js +67 -67
- package/lib/timers/oper.d.ts +18 -18
- package/lib/timers/oper.js +57 -57
- package/lib/timers/vaccum.d.ts +20 -20
- package/lib/timers/vaccum.js +111 -111
- package/lib/triggers/index.d.ts +5 -5
- package/lib/triggers/index.js +8 -8
- package/lib/types/Action.d.ts +20 -20
- package/lib/types/AppLoader.d.ts +17 -17
- package/lib/types/AppLoader.js +10 -10
- package/lib/types/Auth.d.ts +70 -70
- package/lib/types/Cluster.d.ts +5 -0
- package/lib/types/Cluster.js +2 -0
- package/lib/types/Connector.d.ts +38 -38
- package/lib/types/Connector.js +2 -2
- package/lib/types/DataType.d.ts +25 -25
- package/lib/types/DataType.js +6 -6
- package/lib/types/Demand.d.ts +88 -88
- package/lib/types/Demand.js +10 -10
- package/lib/types/Endpoint.d.ts +11 -11
- package/lib/types/Entity.d.ts +203 -202
- package/lib/types/Entity.js +15 -15
- package/lib/types/EntityDesc.d.ts +9 -9
- package/lib/types/EntityDesc.js +2 -2
- package/lib/types/Environment.d.ts +88 -57
- package/lib/types/Environment.js +2 -2
- package/lib/types/Exception.d.ts +147 -147
- package/lib/types/Exception.js +406 -406
- package/lib/types/Expression.d.ts +163 -163
- package/lib/types/Expression.js +397 -394
- package/lib/types/Geo.d.ts +18 -18
- package/lib/types/Locale.d.ts +25 -25
- package/lib/types/Logger.d.ts +6 -6
- package/lib/types/Polyfill.d.ts +24 -24
- package/lib/types/Port.d.ts +18 -18
- package/lib/types/RowStore.d.ts +18 -18
- package/lib/types/RowStore.js +33 -33
- package/lib/types/Storage.d.ts +58 -58
- package/lib/types/Style.d.ts +11 -11
- package/lib/types/Timer.d.ts +14 -14
- package/lib/types/Trigger.d.ts +124 -124
- package/lib/types/Trigger.js +58 -58
- package/lib/types/Watcher.d.ts +19 -19
- package/lib/types/index.d.ts +26 -25
- package/lib/types/index.js +29 -28
- package/lib/types/schema/DataTypes.d.ts +34 -34
- package/lib/utils/SimpleConnector.d.ts +64 -64
- package/lib/utils/SimpleConnector.js +206 -206
- package/lib/utils/assert.d.ts +5 -5
- package/lib/utils/assert.js +9 -9
- package/lib/utils/concurrent.d.ts +15 -15
- package/lib/utils/concurrent.js +63 -63
- package/lib/utils/date.js +18 -18
- package/lib/utils/{url.d.ts → domain.d.ts} +1 -1
- package/lib/utils/{url.js → domain.js} +11 -13
- package/lib/utils/geo.js +24 -24
- package/lib/utils/lodash.d.ts +24 -22
- package/lib/utils/lodash.js +46 -42
- package/lib/utils/mask.js +34 -34
- package/lib/utils/money.d.ts +6 -6
- package/lib/utils/money.js +51 -51
- package/lib/utils/projection.d.ts +4 -4
- package/lib/utils/projection.js +15 -15
- package/lib/utils/random/random.js +19 -19
- package/lib/utils/random/random.mp.js +14 -14
- package/lib/utils/random/random.native.d.ts +1 -0
- package/lib/utils/random/random.native.js +14 -0
- package/lib/utils/random/random.web.js +11 -11
- package/lib/utils/string.d.ts +28 -28
- package/lib/utils/string.js +69 -69
- package/lib/utils/url/index.d.ts +7 -0
- package/lib/utils/url/index.js +8 -0
- package/lib/utils/url/index.mp.d.ts +4 -0
- package/lib/utils/url/index.mp.js +8 -0
- package/lib/utils/url/index.native.d.ts +12 -0
- package/lib/utils/url/index.native.js +7 -0
- package/lib/utils/url/index.web.d.ts +12 -0
- package/lib/utils/url/index.web.js +7 -0
- package/lib/utils/uuid.d.ts +17 -17
- package/lib/utils/uuid.js +218 -218
- package/lib/utils/validator.d.ts +26 -26
- package/lib/utils/validator.js +131 -131
- package/lib/utils/version.js +21 -21
- package/package.json +51 -49
- package/src/entities/ActionAuth.ts +41 -41
- package/src/entities/I18n.ts +45 -46
- package/src/entities/Modi.ts +69 -69
- package/src/entities/ModiEntity.ts +26 -26
- package/src/entities/Oper.ts +32 -32
- package/src/entities/OperEntity.ts +27 -27
- package/src/entities/Path.ts +43 -43
- package/src/entities/Relation.ts +43 -43
- package/src/entities/RelationAuth.ts +44 -44
- package/src/entities/User.ts +48 -48
- package/src/entities/UserEntityClaim.ts +29 -29
- package/src/entities/UserEntityGrant.ts +24 -24
- package/src/entities/UserRelation.ts +50 -50
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { IncomingHttpHeaders } from "http";
|
|
3
|
-
import { SyncContext } from '../store/SyncRowStore';
|
|
4
|
-
import { Connector, EntityDict, OakException, OpRecord } from "../types";
|
|
5
|
-
type ServerOption = {
|
|
6
|
-
protocol: string;
|
|
7
|
-
hostname: string;
|
|
8
|
-
port?: number;
|
|
9
|
-
apiPath?: string;
|
|
10
|
-
};
|
|
11
|
-
export declare class SimpleConnector<ED extends EntityDict, FrontCxt extends SyncContext<ED>> implements Connector<ED, FrontCxt> {
|
|
12
|
-
static ASPECT_ROUTER: string;
|
|
13
|
-
static BRIDGE_ROUTER: string;
|
|
14
|
-
static SUBSCRIBE_ROUTER: string;
|
|
15
|
-
static SUBSCRIBE_POINT_ROUTER: string;
|
|
16
|
-
static ENDPOINT_ROUTER: string;
|
|
17
|
-
private serverAspectUrl;
|
|
18
|
-
private serverBridgeUrl;
|
|
19
|
-
private serverSubscribePointUrl;
|
|
20
|
-
private option;
|
|
21
|
-
private makeException;
|
|
22
|
-
constructor(option: ServerOption, makeException: (exceptionData: any) => OakException<ED>);
|
|
23
|
-
callAspect(name: string, params: any, context: FrontCxt): Promise<{
|
|
24
|
-
result: any;
|
|
25
|
-
opRecords: any;
|
|
26
|
-
message: string | null;
|
|
27
|
-
} | {
|
|
28
|
-
result: ArrayBuffer;
|
|
29
|
-
message: string | null;
|
|
30
|
-
opRecords?: undefined;
|
|
31
|
-
}>;
|
|
32
|
-
getRouter(): string;
|
|
33
|
-
getSubscribeRouter(): string;
|
|
34
|
-
getSubscribePointRouter(): string;
|
|
35
|
-
getSubscribePoint(): Promise<{
|
|
36
|
-
url: any;
|
|
37
|
-
path: any;
|
|
38
|
-
}>;
|
|
39
|
-
getEndpointRouter(): string;
|
|
40
|
-
parseRequestHeaders(headers: IncomingHttpHeaders): {
|
|
41
|
-
contextString: string | undefined;
|
|
42
|
-
aspectName: string;
|
|
43
|
-
};
|
|
44
|
-
serializeResult(result: any, opRecords: OpRecord<ED>[], headers: IncomingHttpHeaders, body: any, message?: string): Promise<{
|
|
45
|
-
body: any;
|
|
46
|
-
headers?: Record<string, any> | undefined;
|
|
47
|
-
}>;
|
|
48
|
-
serializeException(exception: OakException<ED>, headers: IncomingHttpHeaders, body: any): {
|
|
49
|
-
body: any;
|
|
50
|
-
headers?: Record<string, any> | undefined;
|
|
51
|
-
};
|
|
52
|
-
getBridgeRouter(): string;
|
|
53
|
-
/**
|
|
54
|
-
* 通过本地服务器桥接访问外部资源的url
|
|
55
|
-
* @param url
|
|
56
|
-
* @param headers
|
|
57
|
-
*/
|
|
58
|
-
makeBridgeUrl(url: string, headers?: Record<string, string>): string;
|
|
59
|
-
parseBridgeRequestQuery(urlParams: string): {
|
|
60
|
-
url: string;
|
|
61
|
-
headers?: Record<string, string> | undefined;
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
export {};
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IncomingHttpHeaders } from "http";
|
|
3
|
+
import { SyncContext } from '../store/SyncRowStore';
|
|
4
|
+
import { Connector, EntityDict, OakException, OpRecord } from "../types";
|
|
5
|
+
type ServerOption = {
|
|
6
|
+
protocol: string;
|
|
7
|
+
hostname: string;
|
|
8
|
+
port?: number;
|
|
9
|
+
apiPath?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare class SimpleConnector<ED extends EntityDict, FrontCxt extends SyncContext<ED>> implements Connector<ED, FrontCxt> {
|
|
12
|
+
static ASPECT_ROUTER: string;
|
|
13
|
+
static BRIDGE_ROUTER: string;
|
|
14
|
+
static SUBSCRIBE_ROUTER: string;
|
|
15
|
+
static SUBSCRIBE_POINT_ROUTER: string;
|
|
16
|
+
static ENDPOINT_ROUTER: string;
|
|
17
|
+
private serverAspectUrl;
|
|
18
|
+
private serverBridgeUrl;
|
|
19
|
+
private serverSubscribePointUrl;
|
|
20
|
+
private option;
|
|
21
|
+
private makeException;
|
|
22
|
+
constructor(option: ServerOption, makeException: (exceptionData: any) => OakException<ED>);
|
|
23
|
+
callAspect(name: string, params: any, context: FrontCxt): Promise<{
|
|
24
|
+
result: any;
|
|
25
|
+
opRecords: any;
|
|
26
|
+
message: string | null;
|
|
27
|
+
} | {
|
|
28
|
+
result: ArrayBuffer;
|
|
29
|
+
message: string | null;
|
|
30
|
+
opRecords?: undefined;
|
|
31
|
+
}>;
|
|
32
|
+
getRouter(): string;
|
|
33
|
+
getSubscribeRouter(): string;
|
|
34
|
+
getSubscribePointRouter(): string;
|
|
35
|
+
getSubscribePoint(): Promise<{
|
|
36
|
+
url: any;
|
|
37
|
+
path: any;
|
|
38
|
+
}>;
|
|
39
|
+
getEndpointRouter(): string;
|
|
40
|
+
parseRequestHeaders(headers: IncomingHttpHeaders): {
|
|
41
|
+
contextString: string | undefined;
|
|
42
|
+
aspectName: string;
|
|
43
|
+
};
|
|
44
|
+
serializeResult(result: any, opRecords: OpRecord<ED>[], headers: IncomingHttpHeaders, body: any, message?: string): Promise<{
|
|
45
|
+
body: any;
|
|
46
|
+
headers?: Record<string, any> | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
serializeException(exception: OakException<ED>, headers: IncomingHttpHeaders, body: any): {
|
|
49
|
+
body: any;
|
|
50
|
+
headers?: Record<string, any> | undefined;
|
|
51
|
+
};
|
|
52
|
+
getBridgeRouter(): string;
|
|
53
|
+
/**
|
|
54
|
+
* 通过本地服务器桥接访问外部资源的url
|
|
55
|
+
* @param url
|
|
56
|
+
* @param headers
|
|
57
|
+
*/
|
|
58
|
+
makeBridgeUrl(url: string, headers?: Record<string, string>): string;
|
|
59
|
+
parseBridgeRequestQuery(urlParams: string): {
|
|
60
|
+
url: string;
|
|
61
|
+
headers?: Record<string, string> | undefined;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export {};
|
|
@@ -1,206 +1,206 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SimpleConnector = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
6
|
-
const stream_1 = require("stream");
|
|
7
|
-
const url_1 = tslib_1.__importDefault(require("url"));
|
|
8
|
-
const types_1 = require("../types");
|
|
9
|
-
function makeContentTypeAndBody(data) {
|
|
10
|
-
if (process.env.OAK_PLATFORM !== 'wechatMp') {
|
|
11
|
-
if (data instanceof FormData) {
|
|
12
|
-
return {
|
|
13
|
-
// contentType: 'multipart/form-data',
|
|
14
|
-
body: data,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return {
|
|
19
|
-
contentType: 'application/json',
|
|
20
|
-
body: JSON.stringify(data),
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
class SimpleConnector {
|
|
24
|
-
static ASPECT_ROUTER = '/aspect';
|
|
25
|
-
static BRIDGE_ROUTER = '/bridge';
|
|
26
|
-
static SUBSCRIBE_ROUTER = '/subscribe';
|
|
27
|
-
static SUBSCRIBE_POINT_ROUTER = '/subscribePoint';
|
|
28
|
-
static ENDPOINT_ROUTER = '/endpoint';
|
|
29
|
-
serverAspectUrl;
|
|
30
|
-
serverBridgeUrl;
|
|
31
|
-
serverSubscribePointUrl;
|
|
32
|
-
option;
|
|
33
|
-
makeException;
|
|
34
|
-
constructor(option, makeException) {
|
|
35
|
-
this.option = option;
|
|
36
|
-
const { protocol, hostname, port, apiPath } = option;
|
|
37
|
-
let serverUrl = `${protocol}//${hostname}`;
|
|
38
|
-
if (typeof port === 'number') {
|
|
39
|
-
serverUrl += `:${port}`;
|
|
40
|
-
}
|
|
41
|
-
if (apiPath) {
|
|
42
|
-
(0, assert_1.default)(apiPath.startsWith('/'), 'apiPath前缀必须存在/');
|
|
43
|
-
serverUrl += apiPath;
|
|
44
|
-
}
|
|
45
|
-
this.serverAspectUrl = `${serverUrl}${SimpleConnector.ASPECT_ROUTER}`;
|
|
46
|
-
this.serverBridgeUrl = `${serverUrl}${SimpleConnector.BRIDGE_ROUTER}`;
|
|
47
|
-
this.serverSubscribePointUrl = `${serverUrl}${SimpleConnector.SUBSCRIBE_POINT_ROUTER}`;
|
|
48
|
-
this.makeException = makeException;
|
|
49
|
-
}
|
|
50
|
-
async callAspect(name, params, context) {
|
|
51
|
-
const cxtStr = context.toString();
|
|
52
|
-
const { contentType, body } = makeContentTypeAndBody(params);
|
|
53
|
-
let response;
|
|
54
|
-
try {
|
|
55
|
-
response = await global.fetch(this.serverAspectUrl, {
|
|
56
|
-
method: 'POST',
|
|
57
|
-
headers: Object.assign({
|
|
58
|
-
'oak-cxt': cxtStr,
|
|
59
|
-
'oak-aspect': name,
|
|
60
|
-
}, contentType && {
|
|
61
|
-
'Content-Type': contentType,
|
|
62
|
-
}),
|
|
63
|
-
body,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
// fetch返回异常一定是网络异常
|
|
68
|
-
throw new types_1.OakNetworkException();
|
|
69
|
-
}
|
|
70
|
-
if (response.status > 299) {
|
|
71
|
-
const err = new types_1.OakServerProxyException(`网络请求返回status是${response.status}`);
|
|
72
|
-
throw err;
|
|
73
|
-
}
|
|
74
|
-
const message = response.headers.get('oak-message');
|
|
75
|
-
const responseType = response.headers.get('Content-Type') ||
|
|
76
|
-
response.headers.get('content-type');
|
|
77
|
-
if (responseType?.toLocaleLowerCase().match(/application\/json/i)) {
|
|
78
|
-
const { exception, result, opRecords } = await response.json();
|
|
79
|
-
if (exception) {
|
|
80
|
-
throw this.makeException(exception);
|
|
81
|
-
}
|
|
82
|
-
return {
|
|
83
|
-
result,
|
|
84
|
-
opRecords,
|
|
85
|
-
message,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
else if (responseType
|
|
89
|
-
?.toLocaleLowerCase()
|
|
90
|
-
.match(/application\/octet-stream/i)) {
|
|
91
|
-
const result = await response.arrayBuffer();
|
|
92
|
-
return {
|
|
93
|
-
result,
|
|
94
|
-
message,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
throw new Error(`尚不支持的content-type类型${responseType}`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
getRouter() {
|
|
102
|
-
return SimpleConnector.ASPECT_ROUTER;
|
|
103
|
-
}
|
|
104
|
-
getSubscribeRouter() {
|
|
105
|
-
return SimpleConnector.SUBSCRIBE_ROUTER;
|
|
106
|
-
}
|
|
107
|
-
getSubscribePointRouter() {
|
|
108
|
-
return SimpleConnector.SUBSCRIBE_POINT_ROUTER;
|
|
109
|
-
}
|
|
110
|
-
async getSubscribePoint() {
|
|
111
|
-
let response;
|
|
112
|
-
try {
|
|
113
|
-
response = await global.fetch(this.serverSubscribePointUrl);
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
throw new types_1.OakNetworkException();
|
|
117
|
-
}
|
|
118
|
-
if (response.status > 299) {
|
|
119
|
-
const err = new types_1.OakServerProxyException(`网络请求返回status是${response.status}`);
|
|
120
|
-
throw err;
|
|
121
|
-
}
|
|
122
|
-
const message = response.headers.get('oak-message');
|
|
123
|
-
const responseType = response.headers.get('Content-Type') ||
|
|
124
|
-
response.headers.get('content-type');
|
|
125
|
-
if (responseType?.toLocaleLowerCase().match(/application\/json/i)) {
|
|
126
|
-
const { url, path, port, namespace } = await response.json();
|
|
127
|
-
let url2 = url || `${this.option.protocol}//${this.option.hostname}`;
|
|
128
|
-
(0, assert_1.default)(port);
|
|
129
|
-
url2 += `:${port}`;
|
|
130
|
-
if (namespace) {
|
|
131
|
-
url2 += namespace;
|
|
132
|
-
}
|
|
133
|
-
return {
|
|
134
|
-
url: url2,
|
|
135
|
-
path,
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
throw new Error(`尚不支持的content-type类型${responseType}`);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
getEndpointRouter() {
|
|
143
|
-
return SimpleConnector.ENDPOINT_ROUTER;
|
|
144
|
-
}
|
|
145
|
-
parseRequestHeaders(headers) {
|
|
146
|
-
const { 'oak-cxt': oakCxtStr, 'oak-aspect': aspectName } = headers;
|
|
147
|
-
(0, assert_1.default)(typeof oakCxtStr === 'string' || oakCxtStr === undefined);
|
|
148
|
-
(0, assert_1.default)(typeof aspectName === 'string');
|
|
149
|
-
return {
|
|
150
|
-
contextString: oakCxtStr,
|
|
151
|
-
aspectName,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
async serializeResult(result, opRecords, headers, body, message) {
|
|
155
|
-
if (result instanceof stream_1.Stream || result instanceof Buffer) {
|
|
156
|
-
return {
|
|
157
|
-
body: result,
|
|
158
|
-
headers: {
|
|
159
|
-
'oak-message': message,
|
|
160
|
-
},
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
return {
|
|
164
|
-
body: {
|
|
165
|
-
result,
|
|
166
|
-
opRecords,
|
|
167
|
-
},
|
|
168
|
-
headers: {
|
|
169
|
-
'oak-message': message,
|
|
170
|
-
},
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
serializeException(exception, headers, body) {
|
|
174
|
-
return {
|
|
175
|
-
body: {
|
|
176
|
-
exception: exception.toString(),
|
|
177
|
-
},
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
getBridgeRouter() {
|
|
181
|
-
return SimpleConnector.BRIDGE_ROUTER;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* 通过本地服务器桥接访问外部资源的url
|
|
185
|
-
* @param url
|
|
186
|
-
* @param headers
|
|
187
|
-
*/
|
|
188
|
-
makeBridgeUrl(url, headers) {
|
|
189
|
-
// if (process.env.PROD !== 'true') {
|
|
190
|
-
// console.warn('在development下无法通过bridge访问资源,将直接访问,可能失败', url);
|
|
191
|
-
// return url;
|
|
192
|
-
// }
|
|
193
|
-
const encodeUrl = encodeURIComponent(url);
|
|
194
|
-
return `${this.serverBridgeUrl}?url=${encodeUrl}`;
|
|
195
|
-
}
|
|
196
|
-
parseBridgeRequestQuery(urlParams) {
|
|
197
|
-
const search = new url_1.default.URLSearchParams(urlParams);
|
|
198
|
-
const url = search.get('url');
|
|
199
|
-
const headers = search.get('headers');
|
|
200
|
-
return {
|
|
201
|
-
url,
|
|
202
|
-
headers: headers && JSON.parse(headers),
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
exports.SimpleConnector = SimpleConnector;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SimpleConnector = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
6
|
+
const stream_1 = require("stream");
|
|
7
|
+
const url_1 = tslib_1.__importDefault(require("url"));
|
|
8
|
+
const types_1 = require("../types");
|
|
9
|
+
function makeContentTypeAndBody(data) {
|
|
10
|
+
if (process.env.OAK_PLATFORM !== 'wechatMp') {
|
|
11
|
+
if (data instanceof FormData) {
|
|
12
|
+
return {
|
|
13
|
+
// contentType: 'multipart/form-data',
|
|
14
|
+
body: data,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
contentType: 'application/json',
|
|
20
|
+
body: JSON.stringify(data),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
class SimpleConnector {
|
|
24
|
+
static ASPECT_ROUTER = '/aspect';
|
|
25
|
+
static BRIDGE_ROUTER = '/bridge';
|
|
26
|
+
static SUBSCRIBE_ROUTER = '/subscribe';
|
|
27
|
+
static SUBSCRIBE_POINT_ROUTER = '/subscribePoint';
|
|
28
|
+
static ENDPOINT_ROUTER = '/endpoint';
|
|
29
|
+
serverAspectUrl;
|
|
30
|
+
serverBridgeUrl;
|
|
31
|
+
serverSubscribePointUrl;
|
|
32
|
+
option;
|
|
33
|
+
makeException;
|
|
34
|
+
constructor(option, makeException) {
|
|
35
|
+
this.option = option;
|
|
36
|
+
const { protocol, hostname, port, apiPath } = option;
|
|
37
|
+
let serverUrl = `${protocol}//${hostname}`;
|
|
38
|
+
if (typeof port === 'number') {
|
|
39
|
+
serverUrl += `:${port}`;
|
|
40
|
+
}
|
|
41
|
+
if (apiPath) {
|
|
42
|
+
(0, assert_1.default)(apiPath.startsWith('/'), 'apiPath前缀必须存在/');
|
|
43
|
+
serverUrl += apiPath;
|
|
44
|
+
}
|
|
45
|
+
this.serverAspectUrl = `${serverUrl}${SimpleConnector.ASPECT_ROUTER}`;
|
|
46
|
+
this.serverBridgeUrl = `${serverUrl}${SimpleConnector.BRIDGE_ROUTER}`;
|
|
47
|
+
this.serverSubscribePointUrl = `${serverUrl}${SimpleConnector.SUBSCRIBE_POINT_ROUTER}`;
|
|
48
|
+
this.makeException = makeException;
|
|
49
|
+
}
|
|
50
|
+
async callAspect(name, params, context) {
|
|
51
|
+
const cxtStr = context.toString();
|
|
52
|
+
const { contentType, body } = makeContentTypeAndBody(params);
|
|
53
|
+
let response;
|
|
54
|
+
try {
|
|
55
|
+
response = await global.fetch(this.serverAspectUrl, {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: Object.assign({
|
|
58
|
+
'oak-cxt': cxtStr,
|
|
59
|
+
'oak-aspect': name,
|
|
60
|
+
}, contentType && {
|
|
61
|
+
'Content-Type': contentType,
|
|
62
|
+
}),
|
|
63
|
+
body,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
// fetch返回异常一定是网络异常
|
|
68
|
+
throw new types_1.OakNetworkException();
|
|
69
|
+
}
|
|
70
|
+
if (response.status > 299) {
|
|
71
|
+
const err = new types_1.OakServerProxyException(`网络请求返回status是${response.status}`);
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
const message = response.headers.get('oak-message');
|
|
75
|
+
const responseType = response.headers.get('Content-Type') ||
|
|
76
|
+
response.headers.get('content-type');
|
|
77
|
+
if (responseType?.toLocaleLowerCase().match(/application\/json/i)) {
|
|
78
|
+
const { exception, result, opRecords } = await response.json();
|
|
79
|
+
if (exception) {
|
|
80
|
+
throw this.makeException(exception);
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
result,
|
|
84
|
+
opRecords,
|
|
85
|
+
message,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
else if (responseType
|
|
89
|
+
?.toLocaleLowerCase()
|
|
90
|
+
.match(/application\/octet-stream/i)) {
|
|
91
|
+
const result = await response.arrayBuffer();
|
|
92
|
+
return {
|
|
93
|
+
result,
|
|
94
|
+
message,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw new Error(`尚不支持的content-type类型${responseType}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
getRouter() {
|
|
102
|
+
return SimpleConnector.ASPECT_ROUTER;
|
|
103
|
+
}
|
|
104
|
+
getSubscribeRouter() {
|
|
105
|
+
return SimpleConnector.SUBSCRIBE_ROUTER;
|
|
106
|
+
}
|
|
107
|
+
getSubscribePointRouter() {
|
|
108
|
+
return SimpleConnector.SUBSCRIBE_POINT_ROUTER;
|
|
109
|
+
}
|
|
110
|
+
async getSubscribePoint() {
|
|
111
|
+
let response;
|
|
112
|
+
try {
|
|
113
|
+
response = await global.fetch(this.serverSubscribePointUrl);
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
throw new types_1.OakNetworkException();
|
|
117
|
+
}
|
|
118
|
+
if (response.status > 299) {
|
|
119
|
+
const err = new types_1.OakServerProxyException(`网络请求返回status是${response.status}`);
|
|
120
|
+
throw err;
|
|
121
|
+
}
|
|
122
|
+
const message = response.headers.get('oak-message');
|
|
123
|
+
const responseType = response.headers.get('Content-Type') ||
|
|
124
|
+
response.headers.get('content-type');
|
|
125
|
+
if (responseType?.toLocaleLowerCase().match(/application\/json/i)) {
|
|
126
|
+
const { url, path, port, namespace } = await response.json();
|
|
127
|
+
let url2 = url || `${this.option.protocol}//${this.option.hostname}`;
|
|
128
|
+
(0, assert_1.default)(port);
|
|
129
|
+
url2 += `:${port}`;
|
|
130
|
+
if (namespace) {
|
|
131
|
+
url2 += namespace;
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
url: url2,
|
|
135
|
+
path,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
throw new Error(`尚不支持的content-type类型${responseType}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
getEndpointRouter() {
|
|
143
|
+
return SimpleConnector.ENDPOINT_ROUTER;
|
|
144
|
+
}
|
|
145
|
+
parseRequestHeaders(headers) {
|
|
146
|
+
const { 'oak-cxt': oakCxtStr, 'oak-aspect': aspectName } = headers;
|
|
147
|
+
(0, assert_1.default)(typeof oakCxtStr === 'string' || oakCxtStr === undefined);
|
|
148
|
+
(0, assert_1.default)(typeof aspectName === 'string');
|
|
149
|
+
return {
|
|
150
|
+
contextString: oakCxtStr,
|
|
151
|
+
aspectName,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
async serializeResult(result, opRecords, headers, body, message) {
|
|
155
|
+
if (result instanceof stream_1.Stream || result instanceof Buffer) {
|
|
156
|
+
return {
|
|
157
|
+
body: result,
|
|
158
|
+
headers: {
|
|
159
|
+
'oak-message': message,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
body: {
|
|
165
|
+
result,
|
|
166
|
+
opRecords,
|
|
167
|
+
},
|
|
168
|
+
headers: {
|
|
169
|
+
'oak-message': message,
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
serializeException(exception, headers, body) {
|
|
174
|
+
return {
|
|
175
|
+
body: {
|
|
176
|
+
exception: exception.toString(),
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
getBridgeRouter() {
|
|
181
|
+
return SimpleConnector.BRIDGE_ROUTER;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 通过本地服务器桥接访问外部资源的url
|
|
185
|
+
* @param url
|
|
186
|
+
* @param headers
|
|
187
|
+
*/
|
|
188
|
+
makeBridgeUrl(url, headers) {
|
|
189
|
+
// if (process.env.PROD !== 'true') {
|
|
190
|
+
// console.warn('在development下无法通过bridge访问资源,将直接访问,可能失败', url);
|
|
191
|
+
// return url;
|
|
192
|
+
// }
|
|
193
|
+
const encodeUrl = encodeURIComponent(url);
|
|
194
|
+
return `${this.serverBridgeUrl}?url=${encodeUrl}`;
|
|
195
|
+
}
|
|
196
|
+
parseBridgeRequestQuery(urlParams) {
|
|
197
|
+
const search = new url_1.default.URLSearchParams(urlParams);
|
|
198
|
+
const url = search.get('url');
|
|
199
|
+
const headers = search.get('headers');
|
|
200
|
+
return {
|
|
201
|
+
url,
|
|
202
|
+
headers: headers && JSON.parse(headers),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.SimpleConnector = SimpleConnector;
|
package/lib/utils/assert.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 防止assert打包体积过大,从这里引用
|
|
3
|
-
*/
|
|
4
|
-
import assert from 'assert';
|
|
5
|
-
export { assert, };
|
|
1
|
+
/**
|
|
2
|
+
* 防止assert打包体积过大,从这里引用
|
|
3
|
+
*/
|
|
4
|
+
import assert from 'assert';
|
|
5
|
+
export { assert, };
|
package/lib/utils/assert.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.assert = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
/**
|
|
6
|
-
* 防止assert打包体积过大,从这里引用
|
|
7
|
-
*/
|
|
8
|
-
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
9
|
-
exports.assert = assert_1.default;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assert = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* 防止assert打包体积过大,从这里引用
|
|
7
|
+
*/
|
|
8
|
+
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
9
|
+
exports.assert = assert_1.default;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
type Mode = 'S' | 'X';
|
|
2
|
-
/**
|
|
3
|
-
* 模拟一个读写锁,用于同步。
|
|
4
|
-
* 注意,千万不要发生自己等自己
|
|
5
|
-
*/
|
|
6
|
-
export declare class RWLock {
|
|
7
|
-
private readNumber;
|
|
8
|
-
private writeNumber;
|
|
9
|
-
private readWaiter;
|
|
10
|
-
private writeWaiter;
|
|
11
|
-
constructor();
|
|
12
|
-
acquire(mode: Mode): Promise<void>;
|
|
13
|
-
release(): void;
|
|
14
|
-
}
|
|
15
|
-
export {};
|
|
1
|
+
type Mode = 'S' | 'X';
|
|
2
|
+
/**
|
|
3
|
+
* 模拟一个读写锁,用于同步。
|
|
4
|
+
* 注意,千万不要发生自己等自己
|
|
5
|
+
*/
|
|
6
|
+
export declare class RWLock {
|
|
7
|
+
private readNumber;
|
|
8
|
+
private writeNumber;
|
|
9
|
+
private readWaiter;
|
|
10
|
+
private writeWaiter;
|
|
11
|
+
constructor();
|
|
12
|
+
acquire(mode: Mode): Promise<void>;
|
|
13
|
+
release(): void;
|
|
14
|
+
}
|
|
15
|
+
export {};
|