@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.
Files changed (41) hide show
  1. package/dist/spec/error.spec.js +3 -4
  2. package/dist/spec/rest/rest.spec.js +24 -24
  3. package/dist/spec/runtime/errors.spec.js +15 -14
  4. package/dist/spec/runtime/middleware.spec.js +15 -14
  5. package/dist/spec/simple/legacyNodeClient.js +6 -32
  6. package/dist/spec/simple/simple.spec.js +27 -28
  7. package/dist/spec/types.js +27 -28
  8. package/dist/spec/types.spec.js +54 -55
  9. package/dist/src/api-config.js +4 -8
  10. package/dist/src/context.js +2 -2
  11. package/dist/src/encode-decode.js +12 -50
  12. package/dist/src/error.js +4 -9
  13. package/dist/src/execute.js +12 -14
  14. package/dist/src/http-client.js +25 -27
  15. package/dist/src/http-server.js +160 -170
  16. package/dist/src/index.js +8 -18
  17. package/dist/src/new-interface.js +200 -0
  18. package/dist/src/swagger.js +126 -115
  19. package/dist/src/test-wrapper.js +25 -23
  20. package/dist/src/utils.js +2 -5
  21. package/package.json +26 -22
  22. package/dist/spec/error.spec.d.ts +0 -1
  23. package/dist/spec/rest/rest.spec.d.ts +0 -1
  24. package/dist/spec/runtime/errors.spec.d.ts +0 -1
  25. package/dist/spec/runtime/middleware.spec.d.ts +0 -1
  26. package/dist/spec/simple/legacyNodeClient.d.ts +0 -17
  27. package/dist/spec/simple/simple.spec.d.ts +0 -1
  28. package/dist/spec/types.d.ts +0 -1
  29. package/dist/spec/types.spec.d.ts +0 -1
  30. package/dist/src/api-config.d.ts +0 -15
  31. package/dist/src/context.d.ts +0 -38
  32. package/dist/src/encode-decode.d.ts +0 -32
  33. package/dist/src/error.d.ts +0 -18
  34. package/dist/src/execute.d.ts +0 -3
  35. package/dist/src/http-client.d.ts +0 -17
  36. package/dist/src/http-server.d.ts +0 -37
  37. package/dist/src/index.d.ts +0 -7
  38. package/dist/src/swagger.d.ts +0 -2
  39. package/dist/src/test-wrapper.d.ts +0 -3
  40. package/dist/src/utils.d.ts +0 -6
  41. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -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
- const crypto_1 = require("crypto");
7
- const http_1 = require("http");
8
- const https_1 = require("https");
9
- const os_1 = require("os");
10
- const url_1 = require("url");
11
- const encode_decode_1 = require("./encode-decode");
12
- const utils_1 = require("./utils");
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 url_1.URL(baseUrl);
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: (0, encode_decode_1.encode)(this.astJson.typeTable, `${functionName}.args`, func.args, args),
32
- deviceInfo: (_b = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.request) === null || _a === void 0 ? void 0 : _a.deviceInfo) !== null && _b !== void 0 ? _b : { id: (0, os_1.hostname)(), type: "node" },
33
- extra: Object.assign(Object.assign({}, extra), (_c = ctx === null || ctx === void 0 ? void 0 : ctx.request) === null || _c === void 0 ? void 0 : _c.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: ((_d = ctx === null || ctx === void 0 ? void 0 : ctx.request) === null || _d === void 0 ? void 0 : _d.id) ? ctx.request.id + (0, crypto_1.randomBytes)(6).toString("hex") : (0, crypto_1.randomBytes)(16).toString("hex"),
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:" ? http_1.request : https_1.request)(options, res => {
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 ((0, utils_1.has)(response, "error") && response.error) {
55
+ if (has(response, "error") && response.error) {
57
56
  reject(response.error);
58
57
  }
59
58
  else {
60
- resolve((0, utils_1.has)(response, "result") ? response.result : null);
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
- var _a;
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 = (_a = this.errClasses[error.type]) !== null && _a !== void 0 ? _a : this.errClasses.Fatal;
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) && (0, utils_1.has)(error, "data")) {
88
- newError = new errClass(error.message, (0, encode_decode_1.decode)(this.astJson.typeTable, `${errClass.name}.data`, errorJson[1], error.data));
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 (0, encode_decode_1.decode)(this.astJson.typeTable, `${functionName}.ret`, func.ret, encodedRet);
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