@sdkgen/node-runtime 0.0.0-dev.20230106165109 → 0.0.0-dev.20230109111624
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/dist/spec/error.spec.js +3 -4
- package/dist/spec/rest/rest.spec.js +24 -24
- package/dist/spec/runtime/errors.spec.js +15 -14
- package/dist/spec/runtime/middleware.spec.js +15 -14
- package/dist/spec/simple/legacyNodeClient.js +6 -32
- package/dist/spec/simple/simple.spec.js +27 -28
- package/dist/spec/types.js +27 -28
- package/dist/spec/types.spec.js +54 -55
- package/dist/src/api-config.js +4 -8
- package/dist/src/context.js +2 -2
- package/dist/src/encode-decode.js +12 -50
- package/dist/src/error.js +4 -9
- package/dist/src/execute.js +12 -14
- package/dist/src/http-client.js +25 -27
- package/dist/src/http-server.js +160 -170
- package/dist/src/index.js +8 -18
- package/dist/src/new-interface.js +200 -0
- package/dist/src/swagger.js +126 -115
- package/dist/src/test-wrapper.js +25 -23
- package/dist/src/utils.js +2 -5
- package/package.json +26 -22
- package/dist/spec/error.spec.d.ts +0 -1
- package/dist/spec/rest/rest.spec.d.ts +0 -1
- package/dist/spec/runtime/errors.spec.d.ts +0 -1
- package/dist/spec/runtime/middleware.spec.d.ts +0 -1
- package/dist/spec/simple/legacyNodeClient.d.ts +0 -17
- package/dist/spec/simple/simple.spec.d.ts +0 -1
- package/dist/spec/types.d.ts +0 -1
- package/dist/spec/types.spec.d.ts +0 -1
- package/dist/src/api-config.d.ts +0 -15
- package/dist/src/context.d.ts +0 -38
- package/dist/src/encode-decode.d.ts +0 -32
- package/dist/src/error.d.ts +0 -18
- package/dist/src/execute.d.ts +0 -3
- package/dist/src/http-client.d.ts +0 -17
- package/dist/src/http-server.d.ts +0 -37
- package/dist/src/index.d.ts +0 -7
- package/dist/src/swagger.d.ts +0 -2
- package/dist/src/test-wrapper.d.ts +0 -3
- package/dist/src/utils.d.ts +0 -6
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/src/http-client.js
CHANGED
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SdkgenHttpClient = void 0;
|
|
4
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
2
|
/* eslint-disable prefer-promise-reject-errors */
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class SdkgenHttpClient {
|
|
3
|
+
import { randomBytes } from "crypto";
|
|
4
|
+
import { request as httpRequest } from "http";
|
|
5
|
+
import { request as httpsRequest } from "https";
|
|
6
|
+
import { hostname } from "os";
|
|
7
|
+
import { URL } from "url";
|
|
8
|
+
import { decode, encode } from "./encode-decode.js";
|
|
9
|
+
import { has } from "./utils.js";
|
|
10
|
+
export class SdkgenHttpClient {
|
|
14
11
|
constructor(baseUrl, astJson, errClasses) {
|
|
15
12
|
this.astJson = astJson;
|
|
16
13
|
this.errClasses = errClasses;
|
|
17
14
|
this.extra = new Map();
|
|
18
|
-
this.baseUrl = new
|
|
15
|
+
this.baseUrl = new URL(baseUrl);
|
|
19
16
|
}
|
|
20
17
|
async makeRequest(ctx, functionName, args) {
|
|
21
|
-
var _a, _b, _c, _d;
|
|
22
18
|
const func = this.astJson.functionTable[functionName];
|
|
23
19
|
if (!func) {
|
|
24
20
|
throw new Error(`Unknown function ${functionName}`);
|
|
@@ -28,11 +24,14 @@ class SdkgenHttpClient {
|
|
|
28
24
|
extra[key] = value;
|
|
29
25
|
}
|
|
30
26
|
const requestBody = JSON.stringify({
|
|
31
|
-
args:
|
|
32
|
-
deviceInfo:
|
|
33
|
-
extra:
|
|
27
|
+
args: encode(this.astJson.typeTable, `${functionName}.args`, func.args, args),
|
|
28
|
+
deviceInfo: ctx?.request?.deviceInfo ?? { id: hostname(), type: "node" },
|
|
29
|
+
extra: {
|
|
30
|
+
...extra,
|
|
31
|
+
...ctx?.request?.extra,
|
|
32
|
+
},
|
|
34
33
|
name: functionName,
|
|
35
|
-
requestId:
|
|
34
|
+
requestId: ctx?.request?.id ? ctx.request.id + randomBytes(6).toString("hex") : randomBytes(16).toString("hex"),
|
|
36
35
|
version: 3,
|
|
37
36
|
});
|
|
38
37
|
const options = {
|
|
@@ -45,7 +44,7 @@ class SdkgenHttpClient {
|
|
|
45
44
|
},
|
|
46
45
|
};
|
|
47
46
|
const encodedRet = await new Promise((resolve, reject) => {
|
|
48
|
-
const req = (this.baseUrl.protocol === "http:" ?
|
|
47
|
+
const req = (this.baseUrl.protocol === "http:" ? httpRequest : httpsRequest)(options, res => {
|
|
49
48
|
let data = "";
|
|
50
49
|
res.on("data", chunk => {
|
|
51
50
|
data += chunk;
|
|
@@ -53,11 +52,11 @@ class SdkgenHttpClient {
|
|
|
53
52
|
res.on("end", () => {
|
|
54
53
|
try {
|
|
55
54
|
const response = JSON.parse(data);
|
|
56
|
-
if (
|
|
55
|
+
if (has(response, "error") && response.error) {
|
|
57
56
|
reject(response.error);
|
|
58
57
|
}
|
|
59
58
|
else {
|
|
60
|
-
resolve(
|
|
59
|
+
resolve(has(response, "result") ? response.result : null);
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
catch (error) {
|
|
@@ -77,15 +76,14 @@ class SdkgenHttpClient {
|
|
|
77
76
|
req.write(requestBody);
|
|
78
77
|
req.end();
|
|
79
78
|
}).catch((error) => {
|
|
80
|
-
|
|
81
|
-
if ((0, utils_1.has)(error, "type") && (0, utils_1.has)(error, "message") && typeof error.type === "string" && typeof error.message === "string") {
|
|
79
|
+
if (has(error, "type") && has(error, "message") && typeof error.type === "string" && typeof error.message === "string") {
|
|
82
80
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
83
|
-
const errClass =
|
|
81
|
+
const errClass = this.errClasses[error.type] ?? this.errClasses.Fatal;
|
|
84
82
|
const errType = errClass.name;
|
|
85
83
|
const errorJson = this.astJson.errors.find(err => (Array.isArray(err) ? err[0] === errType : err === errType));
|
|
86
84
|
let newError;
|
|
87
|
-
if (errorJson && Array.isArray(errorJson) &&
|
|
88
|
-
newError = new errClass(error.message,
|
|
85
|
+
if (errorJson && Array.isArray(errorJson) && has(error, "data")) {
|
|
86
|
+
newError = new errClass(error.message, decode(this.astJson.typeTable, `${errClass.name}.data`, errorJson[1], error.data));
|
|
89
87
|
}
|
|
90
88
|
else {
|
|
91
89
|
newError = new errClass(error.message, undefined);
|
|
@@ -99,7 +97,7 @@ class SdkgenHttpClient {
|
|
|
99
97
|
throw error;
|
|
100
98
|
}
|
|
101
99
|
});
|
|
102
|
-
return
|
|
100
|
+
return decode(this.astJson.typeTable, `${functionName}.ret`, func.ret, encodedRet);
|
|
103
101
|
}
|
|
104
102
|
}
|
|
105
|
-
exports.SdkgenHttpClient = SdkgenHttpClient;
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELGlEQUFpRDtBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWhELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQztBQU0xQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNakMsTUFBTSxPQUFPLGdCQUFnQjtJQUszQixZQUFZLE9BQWUsRUFBVSxPQUE4QixFQUFVLFVBQXNCO1FBQTlELFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUZuRyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFHakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFnQyxFQUFFLFlBQW9CLEVBQUUsSUFBYTtRQUNyRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsWUFBWSxFQUFFLENBQUMsQ0FBQztTQUNyRDtRQUVELE1BQU0sS0FBSyxHQUE0QixF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QUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBRS9HLElBQUksUUFBUSxDQUFDO2dCQUViLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDL0QsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDM0g7cUJBQU07b0JBQ0wsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQ25EO2dCQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO29CQUNqQixRQUF3QyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7aUJBQzFEO2dCQUVELE1BQU0sUUFBUSxDQUFDO2FBQ2hCO2lCQUFNO2dCQUNMLE1BQU0sS0FBSyxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsWUFBWSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzICovXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IHJlcXVlc3QgYXMgaHR0cFJlcXVlc3QgfSBmcm9tIFwiaHR0cFwiO1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBodHRwc1JlcXVlc3QgfSBmcm9tIFwiaHR0cHNcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdE9wdGlvbnMgfSBmcm9tIFwiaHR0cHNcIjtcbmltcG9ydCB7IGhvc3RuYW1lIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5cbmltcG9ydCB0eXBlIHsgQXN0SnNvbiB9IGZyb20gXCJAc2RrZ2VuL3BhcnNlclwiO1xuaW1wb3J0IHR5cGUgeyBQYXJ0aWFsRGVlcCB9IGZyb20gXCJ0eXBlLWZlc3RcIjtcblxuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dC5qc1wiO1xuaW1wb3J0IHsgZGVjb2RlLCBlbmNvZGUgfSBmcm9tIFwiLi9lbmNvZGUtZGVjb2RlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNka2dlbkVycm9yLCBTZGtnZW5FcnJvcldpdGhEYXRhIH0gZnJvbSBcIi4vZXJyb3IuanNcIjtcbmltcG9ydCB0eXBlIHsgRGVlcFJlYWRvbmx5IH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7IGhhcyB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmludGVyZmFjZSBFcnJDbGFzc2VzIHtcbiAgW2NsYXNzTmFtZTogc3RyaW5nXTogKG5ldyAobWVzc2FnZTogc3RyaW5nLCBkYXRhOiBhbnkpID0+IFNka2dlbkVycm9yV2l0aERhdGE8YW55PikgfCAobmV3IChtZXNzYWdlOiBzdHJpbmcpID0+IFNka2dlbkVycm9yKSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNka2dlbkh0dHBDbGllbnQge1xuICBwcml2YXRlIGJhc2VVcmw6IFVSTDtcblxuICBleHRyYSA9IG5ldyBNYXA8c3RyaW5nLCB1bmtub3duPigpO1xuXG4gIGNvbnN0cnVjdG9yKGJhc2VVcmw6IHN0cmluZywgcHJpdmF0ZSBhc3RKc29uOiBEZWVwUmVhZG9ubHk8QXN0SnNvbj4sIHByaXZhdGUgZXJyQ2xhc3NlczogRXJyQ2xhc3Nlcykge1xuICAgIHRoaXMuYmFzZVVybCA9IG5ldyBVUkwoYmFzZVVybCk7XG4gIH1cblxuICBhc3luYyBtYWtlUmVxdWVzdChjdHg6IFBhcnRpYWxEZWVwPENvbnRleHQ+IHwgbnVsbCwgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmFzdEpzb24uZnVuY3Rpb25UYWJsZVtmdW5jdGlvbk5hbWVdO1xuXG4gICAgaWYgKCFmdW5jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0cmE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmV4dHJhKSB7XG4gICAgICBleHRyYVtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBhcmdzOiBlbmNvZGUodGhpcy5hc3RKc29uLnR5cGVUYWJsZSwgYCR7ZnVuY3Rpb25OYW1lfS5hcmdzYCwgZnVuYy5hcmdzLCBhcmdzKSxcbiAgICAgIGRldmljZUluZm86IGN0eD8ucmVxdWVzdD8uZGV2aWNlSW5mbyA/PyB7IGlkOiBob3N0bmFtZSgpLCB0eXBlOiBcIm5vZGVcIiB9LFxuICAgICAgZXh0cmE6IHtcbiAgICAgICAgLi4uZXh0cmEsXG4gICAgICAgIC4uLmN0eD8ucmVxdWVzdD8uZXh0cmEsXG4gICAgICB9LFxuICAgICAgbmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgcmVxdWVzdElkOiBjdHg/LnJlcXVlc3Q/LmlkID8gY3R4LnJlcXVlc3QuaWQgKyByYW5kb21CeXRlcyg2KS50b1N0cmluZyhcImhleFwiKSA6IHJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImhleFwiKSxcbiAgICAgIHZlcnNpb246IDMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhvc3RuYW1lOiB0aGlzLmJhc2VVcmwuaG9zdG5hbWUsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgcGF0aDogdGhpcy5iYXNlVXJsLnBhdGhuYW1lLFxuICAgICAgcG9ydDogdGhpcy5iYXNlVXJsLnBvcnQsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vc2RrZ2VuXCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBlbmNvZGVkUmV0ID0gYXdhaXQgbmV3IFByb21pc2U8dW5rbm93bj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gKHRoaXMuYmFzZVVybC5wcm90b2NvbCA9PT0gXCJodHRwOlwiID8gaHR0cFJlcXVlc3QgOiBodHRwc1JlcXVlc3QpKG9wdGlvbnMsIHJlcyA9PiB7XG4gICAgICAgIGxldCBkYXRhID0gXCJcIjtcblxuICAgICAgICByZXMub24oXCJkYXRhXCIsIGNodW5rID0+IHtcbiAgICAgICAgICBkYXRhICs9IGNodW5rO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpIGFzIG9iamVjdDtcblxuICAgICAgICAgICAgaWYgKGhhcyhyZXNwb25zZSwgXCJlcnJvclwiKSAmJiByZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShoYXMocmVzcG9uc2UsIFwicmVzdWx0XCIpID8gcmVzcG9uc2UucmVzdWx0IDogbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdCh7IG1lc3NhZ2U6IGAke2Vycm9yfWAsIHR5cGU6IFwiRmF0YWxcIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXMub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KHsgbWVzc2FnZTogYCR7ZXJyb3J9YCwgdHlwZTogXCJGYXRhbFwiIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzLm9uKFwiYWJvcnRlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KHsgbWVzc2FnZTogXCJSZXF1ZXN0IGFib3J0ZWRcIiwgdHlwZTogXCJGYXRhbFwiIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgIHJlamVjdCh7IG1lc3NhZ2U6IGAke2Vycm9yfWAsIHR5cGU6IFwiRmF0YWxcIiB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXEud3JpdGUocmVxdWVzdEJvZHkpO1xuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pLmNhdGNoKChlcnJvcjogb2JqZWN0KSA9PiB7XG4gICAgICBpZiAoaGFzKGVycm9yLCBcInR5cGVcIikgJiYgaGFzKGVycm9yLCBcIm1lc3NhZ2VcIikgJiYgdHlwZW9mIGVycm9yLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgY29uc3QgZXJyQ2xhc3MgPSB0aGlzLmVyckNsYXNzZXNbZXJyb3IudHlwZV0gPz8gdGhpcy5lcnJDbGFzc2VzLkZhdGFsITtcbiAgICAgICAgY29uc3QgZXJyVHlwZSA9IGVyckNsYXNzLm5hbWU7XG5cbiAgICAgICAgY29uc3QgZXJyb3JKc29uID0gdGhpcy5hc3RKc29uLmVycm9ycy5maW5kKGVyciA9PiAoQXJyYXkuaXNBcnJheShlcnIpID8gZXJyWzBdID09PSBlcnJUeXBlIDogZXJyID09PSBlcnJUeXBlKSk7XG5cbiAgICAgICAgbGV0IG5ld0Vycm9yO1xuXG4gICAgICAgIGlmIChlcnJvckpzb24gJiYgQXJyYXkuaXNBcnJheShlcnJvckpzb24pICYmIGhhcyhlcnJvciwgXCJkYXRhXCIpKSB7XG4gICAgICAgICAgbmV3RXJyb3IgPSBuZXcgZXJyQ2xhc3MoZXJyb3IubWVzc2FnZSwgZGVjb2RlKHRoaXMuYXN0SnNvbi50eXBlVGFibGUsIGAke2VyckNsYXNzLm5hbWV9LmRhdGFgLCBlcnJvckpzb25bMV0sIGVycm9yLmRhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdFcnJvciA9IG5ldyBlcnJDbGFzcyhlcnJvci5tZXNzYWdlLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuZXdFcnJvci50eXBlKSB7XG4gICAgICAgICAgKG5ld0Vycm9yIGFzIHVua25vd24gYXMgeyB0eXBlOiBzdHJpbmcgfSkudHlwZSA9IGVyclR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXdFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlY29kZSh0aGlzLmFzdEpzb24udHlwZVRhYmxlLCBgJHtmdW5jdGlvbk5hbWV9LnJldGAsIGZ1bmMucmV0LCBlbmNvZGVkUmV0KTtcbiAgfVxufVxuIl19
|