@opensumi/ide-connection 2.27.3-next-1706520813.0 → 2.27.3-rc-1706687185.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.
Files changed (158) hide show
  1. package/lib/browser/ws-channel-handler.d.ts +9 -7
  2. package/lib/browser/ws-channel-handler.d.ts.map +1 -1
  3. package/lib/browser/ws-channel-handler.js +65 -64
  4. package/lib/browser/ws-channel-handler.js.map +1 -1
  5. package/lib/common/connect.d.ts +6 -57
  6. package/lib/common/connect.d.ts.map +1 -1
  7. package/lib/common/connect.js +9 -168
  8. package/lib/common/connect.js.map +1 -1
  9. package/lib/common/connection/buffers.d.ts +55 -0
  10. package/lib/common/connection/buffers.d.ts.map +1 -0
  11. package/lib/common/connection/buffers.js +244 -0
  12. package/lib/common/connection/buffers.js.map +1 -0
  13. package/lib/common/connection/drivers/base.d.ts +9 -0
  14. package/lib/common/connection/drivers/base.d.ts.map +1 -0
  15. package/lib/common/connection/drivers/base.js +11 -0
  16. package/lib/common/connection/drivers/base.js.map +1 -0
  17. package/lib/common/connection/drivers/empty.d.ts +8 -0
  18. package/lib/common/connection/drivers/empty.d.ts.map +1 -0
  19. package/lib/common/connection/drivers/empty.js +21 -0
  20. package/lib/common/connection/drivers/empty.js.map +1 -0
  21. package/lib/common/connection/drivers/index.d.ts +6 -0
  22. package/lib/common/connection/drivers/index.d.ts.map +1 -0
  23. package/lib/common/connection/drivers/index.js +9 -0
  24. package/lib/common/connection/drivers/index.js.map +1 -0
  25. package/lib/common/connection/drivers/node-message-port.d.ts +12 -0
  26. package/lib/common/connection/drivers/node-message-port.d.ts.map +1 -0
  27. package/lib/common/connection/drivers/node-message-port.js +31 -0
  28. package/lib/common/connection/drivers/node-message-port.js.map +1 -0
  29. package/lib/common/connection/drivers/reconnecting-websocket.d.ts +15 -0
  30. package/lib/common/connection/drivers/reconnecting-websocket.d.ts.map +1 -0
  31. package/lib/common/connection/drivers/reconnecting-websocket.js +83 -0
  32. package/lib/common/connection/drivers/reconnecting-websocket.js.map +1 -0
  33. package/lib/common/connection/drivers/socket.d.ts +17 -0
  34. package/lib/common/connection/drivers/socket.d.ts.map +1 -0
  35. package/lib/common/connection/drivers/socket.js +56 -0
  36. package/lib/common/connection/drivers/socket.js.map +1 -0
  37. package/lib/common/connection/drivers/stream-decoder.d.ts +67 -0
  38. package/lib/common/connection/drivers/stream-decoder.d.ts.map +1 -0
  39. package/lib/common/connection/drivers/stream-decoder.js +171 -0
  40. package/lib/common/connection/drivers/stream-decoder.js.map +1 -0
  41. package/lib/common/connection/drivers/utils.d.ts +12 -0
  42. package/lib/common/connection/drivers/utils.d.ts.map +1 -0
  43. package/lib/common/connection/drivers/utils.js +49 -0
  44. package/lib/common/connection/drivers/utils.js.map +1 -0
  45. package/lib/common/connection/drivers/ws-websocket.d.ts +11 -0
  46. package/lib/common/connection/drivers/ws-websocket.d.ts.map +1 -0
  47. package/lib/common/connection/drivers/ws-websocket.js +31 -0
  48. package/lib/common/connection/drivers/ws-websocket.js.map +1 -0
  49. package/lib/common/connection/index.d.ts +2 -0
  50. package/lib/common/connection/index.d.ts.map +1 -0
  51. package/lib/common/connection/index.js +5 -0
  52. package/lib/common/connection/index.js.map +1 -0
  53. package/lib/common/connection/types.d.ts +7 -0
  54. package/lib/common/connection/types.d.ts.map +1 -0
  55. package/lib/common/connection/types.js +3 -0
  56. package/lib/common/connection/types.js.map +1 -0
  57. package/lib/common/constants.d.ts +2 -0
  58. package/lib/common/constants.d.ts.map +1 -0
  59. package/lib/common/constants.js +5 -0
  60. package/lib/common/constants.js.map +1 -0
  61. package/lib/common/{rpcProtocol.d.ts → ext-rpc-protocol.d.ts} +10 -11
  62. package/lib/common/ext-rpc-protocol.d.ts.map +1 -0
  63. package/lib/common/{rpcProtocol.js → ext-rpc-protocol.js} +22 -19
  64. package/lib/common/ext-rpc-protocol.js.map +1 -0
  65. package/lib/common/index.d.ts +2 -1
  66. package/lib/common/index.d.ts.map +1 -1
  67. package/lib/common/index.js +2 -1
  68. package/lib/common/index.js.map +1 -1
  69. package/lib/common/proxy/base.d.ts +22 -0
  70. package/lib/common/proxy/base.d.ts.map +1 -0
  71. package/lib/common/proxy/base.js +47 -0
  72. package/lib/common/proxy/base.js.map +1 -0
  73. package/lib/common/proxy/index.d.ts +8 -0
  74. package/lib/common/proxy/index.d.ts.map +1 -0
  75. package/lib/common/proxy/index.js +12 -0
  76. package/lib/common/proxy/index.js.map +1 -0
  77. package/lib/common/proxy/legacy.d.ts +23 -0
  78. package/lib/common/proxy/legacy.d.ts.map +1 -0
  79. package/lib/common/proxy/legacy.js +183 -0
  80. package/lib/common/proxy/legacy.js.map +1 -0
  81. package/lib/common/rpc-service/center.d.ts +20 -0
  82. package/lib/common/rpc-service/center.d.ts.map +1 -0
  83. package/lib/common/rpc-service/center.js +100 -0
  84. package/lib/common/rpc-service/center.js.map +1 -0
  85. package/lib/common/rpc-service/index.d.ts +3 -0
  86. package/lib/common/rpc-service/index.d.ts.map +1 -0
  87. package/lib/common/rpc-service/index.js +6 -0
  88. package/lib/common/rpc-service/index.js.map +1 -0
  89. package/lib/common/rpc-service/stub.d.ts +15 -0
  90. package/lib/common/rpc-service/stub.d.ts.map +1 -0
  91. package/lib/common/rpc-service/stub.js +48 -0
  92. package/lib/common/rpc-service/stub.js.map +1 -0
  93. package/lib/common/types.d.ts +15 -0
  94. package/lib/common/types.d.ts.map +1 -0
  95. package/lib/common/types.js +9 -0
  96. package/lib/common/types.js.map +1 -0
  97. package/lib/common/utils.d.ts +4 -2
  98. package/lib/common/utils.d.ts.map +1 -1
  99. package/lib/common/utils.js +32 -9
  100. package/lib/common/utils.js.map +1 -1
  101. package/lib/common/ws-channel.d.ts +104 -27
  102. package/lib/common/ws-channel.d.ts.map +1 -1
  103. package/lib/common/ws-channel.js +96 -27
  104. package/lib/common/ws-channel.js.map +1 -1
  105. package/lib/node/common-channel-handler.d.ts +18 -16
  106. package/lib/node/common-channel-handler.d.ts.map +1 -1
  107. package/lib/node/common-channel-handler.js +42 -59
  108. package/lib/node/common-channel-handler.js.map +1 -1
  109. package/lib/node/index.d.ts +0 -3
  110. package/lib/node/index.d.ts.map +1 -1
  111. package/lib/node/index.js +0 -5
  112. package/lib/node/index.js.map +1 -1
  113. package/lib/node/ws.d.ts +1 -1
  114. package/lib/node/ws.d.ts.map +1 -1
  115. package/lib/node/ws.js +2 -0
  116. package/lib/node/ws.js.map +1 -1
  117. package/package.json +9 -7
  118. package/src/browser/ws-channel-handler.ts +82 -70
  119. package/src/common/connect.ts +7 -193
  120. package/src/common/connection/buffers.ts +284 -0
  121. package/src/common/connection/drivers/base.ts +15 -0
  122. package/src/common/connection/drivers/empty.ts +19 -0
  123. package/src/common/connection/drivers/index.ts +5 -0
  124. package/src/common/connection/drivers/node-message-port.ts +33 -0
  125. package/src/common/connection/drivers/reconnecting-websocket.ts +86 -0
  126. package/src/common/connection/drivers/socket.ts +62 -0
  127. package/src/common/connection/drivers/stream-decoder.ts +196 -0
  128. package/src/common/connection/drivers/utils.ts +52 -0
  129. package/src/common/connection/drivers/ws-websocket.ts +31 -0
  130. package/src/common/connection/index.ts +1 -0
  131. package/src/common/connection/types.ts +7 -0
  132. package/src/common/constants.ts +1 -0
  133. package/src/common/{rpcProtocol.ts → ext-rpc-protocol.ts} +43 -31
  134. package/src/common/index.ts +2 -1
  135. package/src/common/proxy/base.ts +67 -0
  136. package/src/common/proxy/index.ts +10 -0
  137. package/src/common/proxy/legacy.ts +200 -0
  138. package/src/common/rpc-service/center.ts +124 -0
  139. package/src/common/rpc-service/index.ts +2 -0
  140. package/src/common/rpc-service/stub.ts +49 -0
  141. package/src/common/types.ts +17 -0
  142. package/src/common/utils.ts +31 -8
  143. package/src/common/ws-channel.ts +175 -48
  144. package/src/node/common-channel-handler.ts +68 -80
  145. package/src/node/index.ts +0 -5
  146. package/src/node/ws.ts +3 -1
  147. package/lib/common/proxy.d.ts +0 -47
  148. package/lib/common/proxy.d.ts.map +0 -1
  149. package/lib/common/proxy.js +0 -272
  150. package/lib/common/proxy.js.map +0 -1
  151. package/lib/common/rpcProtocol.d.ts.map +0 -1
  152. package/lib/common/rpcProtocol.js.map +0 -1
  153. package/lib/node/connect.d.ts +0 -4
  154. package/lib/node/connect.d.ts.map +0 -1
  155. package/lib/node/connect.js +0 -9
  156. package/lib/node/connect.js.map +0 -1
  157. package/src/common/proxy.ts +0 -303
  158. package/src/node/connect.ts +0 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/common/proxy/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAkC,MAAM,UAAU,CAAC;AAE5E,UAAU,eAAe;IACvB,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,8BAAsB,SAAS,CAAC,CAAC,SAAS,eAAe;IAUpC,MAAM,CAAC;IAT1B,SAAS,CAAC,YAAY,EAAE,GAAG,CAAM;IAEjC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAExB,SAAS,CAAC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAwB;IAEnE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;gBAEjB,MAAM,CAAC,4BAAgB,EAAE,MAAM,CAAC,EAAE,OAAO;IAK5D,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAUlD,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI;IAWpB,aAAa,CAAC,OAAO,EAAE,cAAc;IAkB5C,QAAQ,CAAC,cAAc,IAAI,GAAG;IAE9B,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;CACrH"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProxyBase = void 0;
4
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
5
+ const utils_1 = require("../utils");
6
+ class ProxyBase {
7
+ constructor(target, logger) {
8
+ this.target = target;
9
+ this.proxyService = {};
10
+ this.connectionPromise = new ide_core_common_1.Deferred();
11
+ this.logger = logger || console;
12
+ }
13
+ // capture messages for opensumi devtools
14
+ capture(message) {
15
+ const capturer = (0, utils_1.getCapturer)();
16
+ if ((0, ide_core_common_1.isDefined)(capturer)) {
17
+ capturer(Object.assign(Object.assign({}, message), { engine: this.engine }));
18
+ }
19
+ }
20
+ listen(connection) {
21
+ this.connection = connection;
22
+ if (this.target) {
23
+ this.listenService(this.target);
24
+ }
25
+ connection.listen();
26
+ this.connectionPromise.resolve();
27
+ }
28
+ listenService(service) {
29
+ if (this.connection) {
30
+ this.bindOnRequest(service, (service, prop) => {
31
+ this.proxyService[prop] = service[prop].bind(service);
32
+ });
33
+ }
34
+ else {
35
+ if (!this.target) {
36
+ this.target = {};
37
+ }
38
+ const methods = (0, utils_1.getServiceMethods)(service);
39
+ for (const method of methods) {
40
+ // `getServiceMethods` ensure that method is a function
41
+ this.target[method] = service[method].bind(service);
42
+ }
43
+ }
44
+ }
45
+ }
46
+ exports.ProxyBase = ProxyBase;
47
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/common/proxy/base.ts"],"names":[],"mappings":";;;AAAA,+DAAgE;AAGhE,oCAA4E;AAM5E,MAAsB,SAAS;IAU7B,YAAmB,MAAuB,EAAE,MAAgB;QAAzC,WAAM,GAAN,MAAM,CAAiB;QAThC,iBAAY,GAAQ,EAAE,CAAC;QAKvB,sBAAiB,GAAmB,IAAI,0BAAQ,EAAQ,CAAC;QAKjE,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC;IAClC,CAAC;IAED,yCAAyC;IAC/B,OAAO,CAAC,OAAyB;QACzC,MAAM,QAAQ,GAAG,IAAA,mBAAW,GAAE,CAAC;QAC/B,IAAI,IAAA,2BAAS,EAAC,QAAQ,CAAC,EAAE;YACvB,QAAQ,iCACH,OAAO,KACV,MAAM,EAAE,IAAI,CAAC,MAAM,IACnB,CAAC;SACJ;IACH,CAAC;IAED,MAAM,CAAC,UAAa;QAClB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACjC;QAED,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAEM,aAAa,CAAC,OAAuB;QAC1C,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;gBAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,MAAM,GAAG,EAAS,CAAC;aACzB;YAED,MAAM,OAAO,GAAG,IAAA,yBAAiB,EAAC,OAAO,CAAC,CAAC;YAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,uDAAuD;gBACtD,IAAI,CAAC,MAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC/D;SACF;IACH,CAAC;CAKF;AAzDD,8BAyDC"}
@@ -0,0 +1,8 @@
1
+ export * from './legacy';
2
+ export declare abstract class RPCService<T = any> {
3
+ rpcClient?: T[];
4
+ rpcRegistered?: boolean;
5
+ register?(): () => Promise<T>;
6
+ get client(): T | undefined;
7
+ }
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/proxy/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AAEzB,8BAAsB,UAAU,CAAC,CAAC,GAAG,GAAG;IACtC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC;IAC7B,IAAI,MAAM,kBAET;CACF"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RPCService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ tslib_1.__exportStar(require("./legacy"), exports);
6
+ class RPCService {
7
+ get client() {
8
+ return this.rpcClient ? this.rpcClient[0] : undefined;
9
+ }
10
+ }
11
+ exports.RPCService = RPCService;
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/proxy/index.ts"],"names":[],"mappings":";;;;AAAA,mDAAyB;AAEzB,MAAsB,UAAU;IAI9B,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;CACF;AAPD,gCAOC"}
@@ -0,0 +1,23 @@
1
+ import { MessageConnection } from '@opensumi/vscode-jsonrpc';
2
+ import { IRPCServiceMap } from '../types';
3
+ import { ProxyBase } from './base';
4
+ export declare class ProxyLegacy extends ProxyBase<MessageConnection> {
5
+ engine: "legacy";
6
+ getInvokeProxy(): any;
7
+ get(target: any, p: PropertyKey): (...args: any[]) => Promise<any>;
8
+ protected bindOnRequest(service: IRPCServiceMap, cb?: ((service: IRPCServiceMap, prop: string) => void) | undefined): void;
9
+ /**
10
+ * 对于纯数组参数的情况,收到请求/通知后做展开操作
11
+ * 因为在通信层会为每个 rpc 调用添加一个 CancellationToken 参数
12
+ * 如果参数本身是数组, 在方法中如果使用 spread 运算符获取参数(...args),则会出现 [...args, MutableToken] 这种情况
13
+ * 所以发送请求时将这类参数统一再用数组包了一层,形如 [[...args]], 参考 {@link ProxyLegacy.get get} 方法
14
+ * 此时接收到的数组类参数固定长度为 2,且最后一项一定是 MutableToken
15
+ * @param args
16
+ * @returns args
17
+ */
18
+ private serializeArguments;
19
+ private onRequest;
20
+ private onNotification;
21
+ listen(connection: MessageConnection): void;
22
+ }
23
+ //# sourceMappingURL=legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../../src/common/proxy/legacy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAOnC,qBAAa,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC3D,MAAM,WAAqB;IAEpB,cAAc,IAAI,GAAG;IAIrB,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,aAEb,GAAG,EAAE;IA0D9B,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS;IAiDnH;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;YAaZ,SAAS;IAmBvB,OAAO,CAAC,cAAc;IAQtB,MAAM,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;CAoB5C"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProxyLegacy = void 0;
4
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
5
+ const constants_1 = require("../constants");
6
+ const utils_1 = require("../utils");
7
+ const base_1 = require("./base");
8
+ class ProxyLegacy extends base_1.ProxyBase {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.engine = 'legacy';
12
+ }
13
+ getInvokeProxy() {
14
+ return new Proxy(this, this);
15
+ }
16
+ get(target, p) {
17
+ const prop = p.toString();
18
+ return async (...args) => {
19
+ await this.connectionPromise.promise;
20
+ let isSingleArray = false;
21
+ if (args.length === 1 && Array.isArray(args[0])) {
22
+ isSingleArray = true;
23
+ }
24
+ // 调用方法为 on 开头时,作为单项通知
25
+ if (prop.startsWith('on')) {
26
+ if (isSingleArray) {
27
+ this.connection.sendNotification(prop, [...args]);
28
+ }
29
+ else {
30
+ this.connection.sendNotification(prop, ...args);
31
+ }
32
+ this.capture({ type: utils_1.MessageType.SendNotification, serviceMethod: prop, arguments: args });
33
+ }
34
+ else {
35
+ let requestResult;
36
+ // generate a unique requestId to associate request and requestResult
37
+ const requestId = (0, ide_core_common_1.uuid)();
38
+ if (isSingleArray) {
39
+ requestResult = this.connection.sendRequest(prop, [...args]);
40
+ }
41
+ else {
42
+ requestResult = this.connection.sendRequest(prop, ...args);
43
+ }
44
+ this.capture({ type: utils_1.MessageType.SendRequest, requestId, serviceMethod: prop, arguments: args });
45
+ const result = await requestResult;
46
+ if (result.error) {
47
+ const error = new Error(result.data.message);
48
+ if (result.data.stack) {
49
+ error.stack = result.data.stack;
50
+ }
51
+ this.capture({
52
+ type: utils_1.MessageType.RequestResult,
53
+ status: utils_1.ResponseStatus.Fail,
54
+ requestId,
55
+ serviceMethod: prop,
56
+ error: result.data,
57
+ });
58
+ throw error;
59
+ }
60
+ else {
61
+ this.capture({
62
+ type: utils_1.MessageType.RequestResult,
63
+ status: utils_1.ResponseStatus.Success,
64
+ requestId,
65
+ serviceMethod: prop,
66
+ data: result.data,
67
+ });
68
+ return result.data;
69
+ }
70
+ }
71
+ };
72
+ }
73
+ bindOnRequest(service, cb) {
74
+ if (this.connection) {
75
+ const connection = this.connection;
76
+ const methods = (0, utils_1.getServiceMethods)(service);
77
+ methods.forEach((method) => {
78
+ if (method.startsWith('on')) {
79
+ connection.onNotification(method, (...args) => {
80
+ this.onNotification(method, ...args);
81
+ this.capture({ type: utils_1.MessageType.OnNotification, serviceMethod: method, arguments: args });
82
+ });
83
+ }
84
+ else {
85
+ connection.onRequest(method, (...args) => {
86
+ const requestId = (0, ide_core_common_1.uuid)();
87
+ const result = this.onRequest(method, ...args);
88
+ this.capture({ type: utils_1.MessageType.OnRequest, requestId, serviceMethod: method, arguments: args });
89
+ result
90
+ .then((result) => {
91
+ this.capture({
92
+ type: utils_1.MessageType.OnRequestResult,
93
+ status: utils_1.ResponseStatus.Success,
94
+ requestId,
95
+ serviceMethod: method,
96
+ data: result.data,
97
+ });
98
+ })
99
+ .catch((err) => {
100
+ this.capture({
101
+ type: utils_1.MessageType.OnRequestResult,
102
+ status: utils_1.ResponseStatus.Fail,
103
+ requestId,
104
+ serviceMethod: method,
105
+ error: err.data,
106
+ });
107
+ });
108
+ return result;
109
+ });
110
+ }
111
+ if (cb) {
112
+ cb(service, method);
113
+ }
114
+ });
115
+ }
116
+ }
117
+ /**
118
+ * 对于纯数组参数的情况,收到请求/通知后做展开操作
119
+ * 因为在通信层会为每个 rpc 调用添加一个 CancellationToken 参数
120
+ * 如果参数本身是数组, 在方法中如果使用 spread 运算符获取参数(...args),则会出现 [...args, MutableToken] 这种情况
121
+ * 所以发送请求时将这类参数统一再用数组包了一层,形如 [[...args]], 参考 {@link ProxyLegacy.get get} 方法
122
+ * 此时接收到的数组类参数固定长度为 2,且最后一项一定是 MutableToken
123
+ * @param args
124
+ * @returns args
125
+ */
126
+ serializeArguments(args) {
127
+ const maybeCancellationToken = args[args.length - 1];
128
+ if (args.length === 2 &&
129
+ Array.isArray(args[0]) &&
130
+ Object.prototype.hasOwnProperty.call(maybeCancellationToken, '_isCancelled')) {
131
+ return [...args[0], maybeCancellationToken];
132
+ }
133
+ return args;
134
+ }
135
+ async onRequest(prop, ...args) {
136
+ try {
137
+ const result = await this.proxyService[prop](...this.serializeArguments(args));
138
+ return {
139
+ error: false,
140
+ data: result,
141
+ };
142
+ }
143
+ catch (e) {
144
+ return {
145
+ error: true,
146
+ data: {
147
+ message: e.message,
148
+ stack: e.stack,
149
+ },
150
+ };
151
+ }
152
+ }
153
+ onNotification(prop, ...args) {
154
+ try {
155
+ this.proxyService[prop](...this.serializeArguments(args));
156
+ }
157
+ catch (e) {
158
+ this.logger.warn('notification', e);
159
+ }
160
+ }
161
+ listen(connection) {
162
+ super.listen(connection);
163
+ connection.onRequest((method) => {
164
+ if (!this.proxyService[method]) {
165
+ const requestId = (0, ide_core_common_1.uuid)();
166
+ this.capture({ type: utils_1.MessageType.OnRequest, requestId, serviceMethod: method });
167
+ const result = {
168
+ data: constants_1.METHOD_NOT_REGISTERED,
169
+ };
170
+ this.capture({
171
+ type: utils_1.MessageType.OnRequestResult,
172
+ status: utils_1.ResponseStatus.Fail,
173
+ requestId,
174
+ serviceMethod: method,
175
+ error: result.data,
176
+ });
177
+ return result;
178
+ }
179
+ });
180
+ }
181
+ }
182
+ exports.ProxyLegacy = ProxyLegacy;
183
+ //# sourceMappingURL=legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../src/common/proxy/legacy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { IBench, ILogger, RPCServiceMethod, ServiceType } from '../types';
2
+ import { WSChannel } from '../ws-channel';
3
+ export declare class RPCServiceCenter {
4
+ private bench?;
5
+ uid: string;
6
+ private invokers;
7
+ private connection;
8
+ private serviceMethodMap;
9
+ private connectionDeferred;
10
+ private logger;
11
+ constructor(bench?: IBench | undefined, logger?: ILogger);
12
+ registerService(serviceName: string, type: ServiceType): void;
13
+ ready(): Promise<void>;
14
+ setChannel(channel: WSChannel): {
15
+ dispose: () => void;
16
+ };
17
+ onRequest(serviceName: string, _name: string, method: RPCServiceMethod): void;
18
+ broadcast(serviceName: string, _name: string, ...args: any[]): Promise<any>;
19
+ }
20
+ //# sourceMappingURL=center.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"center.d.ts","sourceRoot":"","sources":["../../../src/common/rpc-service/center.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAkB,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1F,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAyB1C,qBAAa,gBAAgB;IAWf,OAAO,CAAC,KAAK,CAAC;IAVnB,GAAG,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,UAAU,CAAwB;IAE1C,OAAO,CAAC,gBAAgB,CAAsD;IAE9E,OAAO,CAAC,kBAAkB,CAAwB;IAClD,OAAO,CAAC,MAAM,CAAU;gBAEJ,KAAK,CAAC,oBAAQ,EAAE,MAAM,CAAC,EAAE,OAAO;IAKpD,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IAQ7D,KAAK;IAIL,UAAU,CAAC,OAAO,EAAE,SAAS;;;IA0B7B,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB;IAWhE,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;CA2BlF"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RPCServiceCenter = void 0;
4
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
5
+ const constants_1 = require("../constants");
6
+ const proxy_1 = require("../proxy");
7
+ const types_1 = require("../types");
8
+ const utils_1 = require("../utils");
9
+ const safeProcess = typeof process === 'undefined' ? { pid: 'mock' } : process;
10
+ const defaultReservedWordSet = new Set(['then']);
11
+ class Invoker {
12
+ setLegacyProxy(proxy) {
13
+ this.legacyProxy = proxy;
14
+ this.legacyInvokeProxy = proxy.getInvokeProxy();
15
+ }
16
+ invoke(name, ...args) {
17
+ if (defaultReservedWordSet.has(name) || typeof name === 'symbol') {
18
+ return Promise.resolve();
19
+ }
20
+ return this.legacyInvokeProxy[name](...args);
21
+ }
22
+ }
23
+ class RPCServiceCenter {
24
+ constructor(bench, logger) {
25
+ this.bench = bench;
26
+ this.invokers = [];
27
+ this.connection = [];
28
+ this.serviceMethodMap = { client: undefined };
29
+ this.connectionDeferred = new ide_core_common_1.Deferred();
30
+ this.uid = 'RPCServiceCenter:' + safeProcess.pid;
31
+ this.logger = logger || console;
32
+ }
33
+ registerService(serviceName, type) {
34
+ if (type === types_1.ServiceType.Service) {
35
+ if (this.bench) {
36
+ this.bench.registerService(serviceName);
37
+ }
38
+ }
39
+ }
40
+ ready() {
41
+ return this.connectionDeferred.promise;
42
+ }
43
+ setChannel(channel) {
44
+ if (!this.connection.length) {
45
+ this.connectionDeferred.resolve();
46
+ }
47
+ this.connection.push(channel);
48
+ const index = this.connection.length - 1;
49
+ const rpcProxy = new proxy_1.ProxyLegacy(this.serviceMethodMap, this.logger);
50
+ const connection = channel.createMessageConnection();
51
+ rpcProxy.listen(connection);
52
+ const invoker = new Invoker();
53
+ invoker.setLegacyProxy(rpcProxy);
54
+ this.invokers.push(invoker);
55
+ return {
56
+ dispose: () => {
57
+ this.connection.splice(index, 1);
58
+ this.invokers.splice(index, 1);
59
+ connection.dispose();
60
+ },
61
+ };
62
+ }
63
+ onRequest(serviceName, _name, method) {
64
+ const name = (0, utils_1.getMethodName)(serviceName, _name);
65
+ if (!this.connection.length) {
66
+ this.serviceMethodMap[name] = method;
67
+ }
68
+ else {
69
+ this.invokers.forEach((proxy) => {
70
+ proxy.legacyProxy.listenService({ [name]: method });
71
+ });
72
+ }
73
+ }
74
+ async broadcast(serviceName, _name, ...args) {
75
+ const name = (0, utils_1.getMethodName)(serviceName, _name);
76
+ const broadcastResult = await Promise.all(this.invokers.map((proxy) => proxy.invoke(name, ...args)));
77
+ const doubtfulResult = [];
78
+ const result = [];
79
+ for (const i of broadcastResult) {
80
+ if (i === constants_1.METHOD_NOT_REGISTERED) {
81
+ doubtfulResult.push(i);
82
+ }
83
+ else {
84
+ result.push(i);
85
+ }
86
+ }
87
+ if (doubtfulResult.length > 0) {
88
+ this.logger.warn(`broadcast rpc \`${name}\` getting doubtful responses: ${doubtfulResult.join(',')}`);
89
+ }
90
+ if (result.length === 0) {
91
+ throw new Error(`broadcast rpc \`${name}\` error: no remote service can handle this call`);
92
+ }
93
+ // FIXME: this is an unreasonable design, if remote service only returned doubtful result, we will return an empty array.
94
+ // but actually we should throw an error to tell user that no remote service can handle this call.
95
+ // or just return `undefined`.
96
+ return result.length === 1 ? result[0] : result;
97
+ }
98
+ }
99
+ exports.RPCServiceCenter = RPCServiceCenter;
100
+ //# sourceMappingURL=center.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"center.js","sourceRoot":"","sources":["../../../src/common/rpc-service/center.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './stub';
2
+ export * from './center';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/rpc-service/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./stub"), exports);
5
+ tslib_1.__exportStar(require("./center"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/rpc-service/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,mDAAyB"}
@@ -0,0 +1,15 @@
1
+ import { RPCServiceMethod, ServiceType } from '../types';
2
+ import { RPCServiceCenter } from './center';
3
+ export declare class RPCServiceStub {
4
+ private serviceName;
5
+ private center;
6
+ private type;
7
+ constructor(serviceName: string, center: RPCServiceCenter, type: ServiceType);
8
+ ready(): Promise<void>;
9
+ on(name: string, method: RPCServiceMethod): void;
10
+ onRequestService(service: any): void;
11
+ onRequest(name: string, method: RPCServiceMethod): void;
12
+ broadcast(name: string, ...args: any[]): Promise<any>;
13
+ getProxy: <T>() => T extends void ? RPCServiceStub : RPCServiceStub & T;
14
+ }
15
+ //# sourceMappingURL=stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.d.ts","sourceRoot":"","sources":["../../../src/common/rpc-service/stub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,qBAAa,cAAc;IACb,OAAO,CAAC,WAAW;IAAU,OAAO,CAAC,MAAM;IAAoB,OAAO,CAAC,IAAI;gBAAnE,WAAW,EAAE,MAAM,EAAU,MAAM,EAAE,gBAAgB,EAAU,IAAI,EAAE,WAAW;IAI9F,KAAK;IAIX,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB;IAIzC,gBAAgB,CAAC,OAAO,EAAE,GAAG;IAO7B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB;IAIhD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIrD,QAAQ,gEAcH;CACN"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RPCServiceStub = void 0;
4
+ const utils_1 = require("../utils");
5
+ class RPCServiceStub {
6
+ constructor(serviceName, center, type) {
7
+ this.serviceName = serviceName;
8
+ this.center = center;
9
+ this.type = type;
10
+ this.getProxy = () => new Proxy(this, {
11
+ // 调用方
12
+ get: (target, prop) => {
13
+ if (!target[prop]) {
14
+ if (typeof prop === 'symbol') {
15
+ return Promise.resolve();
16
+ }
17
+ else {
18
+ return (...args) => this.ready().then(() => this.broadcast(prop, ...args));
19
+ }
20
+ }
21
+ else {
22
+ return target[prop];
23
+ }
24
+ },
25
+ });
26
+ this.center.registerService(serviceName, this.type);
27
+ }
28
+ async ready() {
29
+ return this.center.ready();
30
+ }
31
+ on(name, method) {
32
+ this.onRequest(name, method);
33
+ }
34
+ onRequestService(service) {
35
+ const methods = (0, utils_1.getServiceMethods)(service);
36
+ for (const method of methods) {
37
+ this.onRequest(method, service[method].bind(service));
38
+ }
39
+ }
40
+ onRequest(name, method) {
41
+ this.center.onRequest(this.serviceName, name, method);
42
+ }
43
+ broadcast(name, ...args) {
44
+ return this.center.broadcast(this.serviceName, name, ...args);
45
+ }
46
+ }
47
+ exports.RPCServiceStub = RPCServiceStub;
48
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.js","sourceRoot":"","sources":["../../../src/common/rpc-service/stub.ts"],"names":[],"mappings":";;;AACA,oCAA6C;AAI7C,MAAa,cAAc;IACzB,YAAoB,WAAmB,EAAU,MAAwB,EAAU,IAAiB;QAAhF,gBAAW,GAAX,WAAW,CAAQ;QAAU,WAAM,GAAN,MAAM,CAAkB;QAAU,SAAI,GAAJ,IAAI,CAAa;QA2BpG,aAAQ,GAAG,GAAM,EAAE,CACjB,IAAI,KAAK,CAAuD,IAAW,EAAE;YAC3E,MAAM;YACN,GAAG,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;gBAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACjB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;wBAC5B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;qBAC1B;yBAAM;wBACL,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;qBACnF;iBACF;qBAAM;oBACL,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;iBACrB;YACH,CAAC;SACF,CAAC,CAAC;QAxCH,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,MAAwB;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB,CAAC,OAAY;QAC3B,MAAM,OAAO,GAAG,IAAA,yBAAiB,EAAC,OAAO,CAAC,CAAC;QAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SACvD;IACH,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,MAAwB;QAC9C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,GAAG,IAAW;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAChE,CAAC;CAiBF;AA3CD,wCA2CC"}
@@ -0,0 +1,15 @@
1
+ export interface ILogger {
2
+ log(...args: any[]): void;
3
+ warn(...args: any[]): void;
4
+ error(...args: any[]): void;
5
+ }
6
+ export type RPCServiceMethod = (...args: any[]) => any;
7
+ export type IRPCServiceMap = Record<string, RPCServiceMethod>;
8
+ export declare enum ServiceType {
9
+ Service = 0,
10
+ Stub = 1
11
+ }
12
+ export interface IBench {
13
+ registerService: (service: string) => void;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AACvD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAE9D,oBAAY,WAAW;IACrB,OAAO,IAAA;IACP,IAAI,IAAA;CACL;AAED,MAAM,WAAW,MAAM;IACrB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServiceType = void 0;
4
+ var ServiceType;
5
+ (function (ServiceType) {
6
+ ServiceType[ServiceType["Service"] = 0] = "Service";
7
+ ServiceType[ServiceType["Stub"] = 1] = "Stub";
8
+ })(ServiceType = exports.ServiceType || (exports.ServiceType = {}));
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":";;;AASA,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,6CAAI,CAAA;AACN,CAAC,EAHW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAGtB"}
@@ -38,7 +38,9 @@ export interface WSCloseInfo {
38
38
  };
39
39
  connectInfo: ConnectionInfo;
40
40
  }
41
- export declare function stringify(obj: any): string;
42
- export declare function parse(input: string, reviver?: (this: any, key: string, value: any) => any): any;
43
41
  export declare function getCapturer(): any;
42
+ export declare function getServiceMethods(service: any): string[];
43
+ export declare function getNotificationName(serviceName: string, name: string): string;
44
+ export declare function getRequestName(serviceName: string, name: string): string;
45
+ export declare function getMethodName(serviceName: string, name: string): string;
44
46
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,iCAAiC,EAAE,GAAG,CAAC;KACxC;CACF;AAED,oBAAY,WAAW;IACrB,gBAAgB,qBAAqB;IACrC,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,eAAe,oBAAoB;CACpC;AAED,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,WAAW,EAAE,cAAc,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE1C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAE/F;AAED,wBAAgB,WAAW,QAK1B"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,iCAAiC,EAAE,GAAG,CAAC;KACxC;CACF;AAED,oBAAY,WAAW;IACrB,gBAAgB,qBAAqB;IACrC,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,eAAe,oBAAoB;CACpC;AAED,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,WAAW,EAAE,cAAc,CAAC;CAC7B;AAED,wBAAgB,WAAW,QAK1B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,CAkBxD;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAEpE;AACD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAE/D;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAE9D"}