specmatic 2.23.4 → 2.27.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/.github/workflows/test.yml +1 -1
- package/.github/workflows/update-specmatic-version-and-publish.yml +41 -0
- package/README.md +28 -0
- package/dist/bin/command.line.js +27 -2
- package/dist/common/runner.d.ts +1 -1
- package/dist/common/runner.js +6 -4
- package/dist/core/index.js +26 -31
- package/dist/core/shutdownUtils.js +7 -10
- package/package.json +6 -4
- package/specmatic.jar +0 -0
- package/src/bin/__tests__/command.line.ts +89 -4
- package/src/bin/command.line.ts +16 -1
- package/src/common/runner.ts +4 -4
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: Update Specmatic Version and Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
specmatic-core-version:
|
|
7
|
+
description: Specmatic Core Version
|
|
8
|
+
required: false
|
|
9
|
+
type: string
|
|
10
|
+
default: ''
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
update-specmatic-version-and-publish:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
if: ${{ github.event.inputs.specmatic-core-version != '' }}
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout code
|
|
18
|
+
uses: actions/checkout@v4
|
|
19
|
+
- name: Configure git cli
|
|
20
|
+
run: |
|
|
21
|
+
git config --global user.email "github-service-account@specmatic.io"
|
|
22
|
+
git config --global user.name "Specmatic GitHub Service Account"
|
|
23
|
+
|
|
24
|
+
- name: Update specmaticVersion in package.json
|
|
25
|
+
run: |
|
|
26
|
+
SPEC_VERSION="${{ github.event.inputs.specmatic-core-version }}"
|
|
27
|
+
jq ".specmaticVersion = \"$SPEC_VERSION\"" package.json > package.tmp.json && mv package.tmp.json package.json
|
|
28
|
+
|
|
29
|
+
- name: Commit and push changes
|
|
30
|
+
run: |
|
|
31
|
+
git add package.json
|
|
32
|
+
git commit -m "chore: bump specmaticVersion to ${{ github.event.inputs.specmatic-core-version }}"
|
|
33
|
+
git push
|
|
34
|
+
|
|
35
|
+
- name: Trigger publish workflow
|
|
36
|
+
uses: peter-evans/workflow-dispatch@v1
|
|
37
|
+
with:
|
|
38
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
39
|
+
repository: ${{ github.repository }}
|
|
40
|
+
workflow: publish.yml
|
|
41
|
+
ref: ${{ github.ref }}
|
package/README.md
CHANGED
|
@@ -22,6 +22,7 @@ This node module is a thin wrapper over the [specmatic executable jar](https://s
|
|
|
22
22
|
- [IDE Support](#ide-support)
|
|
23
23
|
- [Jest Framework](#jest-framework)
|
|
24
24
|
- [Logging](#logging)
|
|
25
|
+
- [Environment Variables](#environment-variables)
|
|
25
26
|
- [Known Issues](#known-issues)
|
|
26
27
|
- [1. Node 17/18 - Connection Refused error when connecting to stub](#1-node-1718---connection-refused-error-when-connecting-to-stub)
|
|
27
28
|
- [2. Error "ReferenceError: setImmediate is not defined"](#2-error-referenceerror-setimmediate-is-not-defined)
|
|
@@ -119,6 +120,33 @@ By default only warning and error messages are displayed. You can configure the
|
|
|
119
120
|
|
|
120
121
|
logLevel accepts all values supported by [winston logger](https://github.com/winstonjs/winston#logging-levels)
|
|
121
122
|
|
|
123
|
+
## Environment Variables
|
|
124
|
+
|
|
125
|
+
Specmatic Node supports several environment variables to customize the Java runtime behavior:
|
|
126
|
+
|
|
127
|
+
### JAVA_OPTS
|
|
128
|
+
|
|
129
|
+
You can pass JVM options to the Specmatic Java process using the `JAVA_OPTS` environment variable. The parser supports:
|
|
130
|
+
- Quoted arguments with spaces: `JAVA_OPTS='-Xmx1024m -Dmy.prop="value with spaces"'`
|
|
131
|
+
- Single and double quotes: `JAVA_OPTS="-Dmy.prop='single quotes' -Dother=\"double quotes\""`
|
|
132
|
+
- Escaped characters: `JAVA_OPTS='-Dpath=C:\\Windows\\Temp'`
|
|
133
|
+
- Complex expressions with special characters
|
|
134
|
+
|
|
135
|
+
Example:
|
|
136
|
+
```bash
|
|
137
|
+
export JAVA_OPTS='-Xmx2048m -Dfile.encoding=UTF-8 -Djava.io.tmpdir="/tmp/specmatic"'
|
|
138
|
+
npm run test
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Dealing with https proxies
|
|
142
|
+
|
|
143
|
+
If your network requires the use of a proxy server to access external resources, you may need to configure your proxy settings using `JAVA_OPTS`.
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
export JAVA_OPTS='-Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=3128 -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=3128'
|
|
147
|
+
npm run
|
|
148
|
+
```
|
|
149
|
+
|
|
122
150
|
## Known Issues
|
|
123
151
|
|
|
124
152
|
### 1. Node 17/18 - Connection Refused error when connecting to stub
|
package/dist/bin/command.line.js
CHANGED
|
@@ -4,11 +4,36 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
+
var _shellQuote = require("shell-quote");
|
|
7
8
|
var _logger = _interopRequireDefault(require("../common/logger"));
|
|
8
9
|
var _runner = require("../common/runner");
|
|
9
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
11
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
12
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
13
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
10
14
|
var callSpecmaticCli = function callSpecmaticCli(argsv) {
|
|
11
15
|
var args = argsv || process.argv.slice(2);
|
|
16
|
+
|
|
17
|
+
// Parse JAVA_OPTS and take only string arguments from the beginning until we hit a non-string
|
|
18
|
+
var parsedArgs = (0, _shellQuote.parse)(process.env.JAVA_OPTS || '');
|
|
19
|
+
var jvmArgs = [];
|
|
20
|
+
var _iterator = _createForOfIteratorHelper(parsedArgs),
|
|
21
|
+
_step;
|
|
22
|
+
try {
|
|
23
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
24
|
+
var arg = _step.value;
|
|
25
|
+
if (typeof arg === 'string') {
|
|
26
|
+
jvmArgs.push(arg);
|
|
27
|
+
} else {
|
|
28
|
+
// Stop processing when we encounter a non-string (shell operator, comment, etc.)
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
} catch (err) {
|
|
33
|
+
_iterator.e(err);
|
|
34
|
+
} finally {
|
|
35
|
+
_iterator.f();
|
|
36
|
+
}
|
|
12
37
|
(0, _runner.callCore)(args, function (err) {
|
|
13
38
|
if (err) {
|
|
14
39
|
_logger["default"].info('CLI: Finished with non zero exit code: ', err.code);
|
|
@@ -19,7 +44,7 @@ var callSpecmaticCli = function callSpecmaticCli(argsv) {
|
|
|
19
44
|
}
|
|
20
45
|
}, function (message) {
|
|
21
46
|
console.log("".concat(message));
|
|
22
|
-
});
|
|
47
|
+
}, jvmArgs);
|
|
23
48
|
};
|
|
24
49
|
var _default = exports["default"] = callSpecmaticCli;
|
|
25
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2hlbGxRdW90ZSIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ydW5uZXIiLCJlIiwiX19lc01vZHVsZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJjYWxsU3BlY21hdGljQ2xpIiwiYXJnc3YiLCJhcmdzIiwicHJvY2VzcyIsImFyZ3YiLCJwYXJzZWRBcmdzIiwicGFyc2UiLCJlbnYiLCJKQVZBX09QVFMiLCJqdm1BcmdzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJhcmciLCJwdXNoIiwiZXJyIiwiY2FsbENvcmUiLCJsb2dnZXIiLCJpbmZvIiwiY29kZSIsImV4aXRDb2RlIiwibWVzc2FnZSIsImNvbnNvbGUiLCJsb2ciLCJjb25jYXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2NvbW1hbmQubGluZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vY29tbW9uL2xvZ2dlcidcbmltcG9ydCB7IGNhbGxDb3JlfSBmcm9tICcuLi9jb21tb24vcnVubmVyJ1xuXG5jb25zdCBjYWxsU3BlY21hdGljQ2xpID0gKGFyZ3N2Pzogc3RyaW5nW10pID0+IHtcbiAgICBjb25zdCBhcmdzID0gYXJnc3YgfHwgcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuXG4gICAgLy8gUGFyc2UgSkFWQV9PUFRTIGFuZCB0YWtlIG9ubHkgc3RyaW5nIGFyZ3VtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgdW50aWwgd2UgaGl0IGEgbm9uLXN0cmluZ1xuICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBwYXJzZShwcm9jZXNzLmVudi5KQVZBX09QVFMgfHwgJycpO1xuICAgIGNvbnN0IGp2bUFyZ3M6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBhcmcgb2YgcGFyc2VkQXJncykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGp2bUFyZ3MucHVzaChhcmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU3RvcCBwcm9jZXNzaW5nIHdoZW4gd2UgZW5jb3VudGVyIGEgbm9uLXN0cmluZyAoc2hlbGwgb3BlcmF0b3IsIGNvbW1lbnQsIGV0Yy4pXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxDb3JlKFxuICAgICAgICBhcmdzLFxuICAgICAgICAoZXJyPzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NMSTogRmluaXNoZWQgd2l0aCBub24gemVybyBleGl0IGNvZGU6ICcsIGVyci5jb2RlKVxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBlcnIuY29kZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnQ0xJOiBGaW5pc2hlZCcpXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHttZXNzYWdlfWApXG4gICAgICAgIH0sXG4gICAgICAgIGp2bUFyZ3NcbiAgICApO1xufVxuXG5l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
|
package/dist/common/runner.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ChildProcess } from 'child_process';
|
|
2
|
-
declare const callCore: (args: (string | number)[], done: (error: any) => void, onOutput: (message: string, error: boolean) => void) => ChildProcess;
|
|
2
|
+
declare const callCore: (args: (string | number)[], done: (error: any) => void, onOutput: (message: string, error: boolean) => void, jvmArgs?: string[]) => ChildProcess;
|
|
3
3
|
export { callCore };
|
package/dist/common/runner.js
CHANGED
|
@@ -16,13 +16,15 @@ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Sym
|
|
|
16
16
|
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
17
17
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
18
18
|
var callCore = exports.callCore = function callCore(args, done, onOutput) {
|
|
19
|
+
var jvmArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
19
20
|
var rootPath = _path["default"].resolve(__dirname, '..', '..');
|
|
20
21
|
var specmaticJarPath = _path["default"].resolve(rootPath, _config.specmaticCoreJarName);
|
|
21
|
-
return callJar(specmaticJarPath, args, done, onOutput);
|
|
22
|
+
return callJar(specmaticJarPath, args, done, onOutput, jvmArgs);
|
|
22
23
|
};
|
|
23
24
|
function callJar(jarPath, args, done, onOutput) {
|
|
24
25
|
var _javaProcess$stdout, _javaProcess$stderr;
|
|
25
|
-
var
|
|
26
|
+
var jvmArgs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|
27
|
+
var argsList = _toConsumableArray(jvmArgs);
|
|
26
28
|
if (process.env['endpointsAPI']) {
|
|
27
29
|
argsList.push("-DendpointsAPI=\"".concat(process.env['endpointsAPI'], "\""));
|
|
28
30
|
}
|
|
@@ -30,7 +32,7 @@ function callJar(jarPath, args, done, onOutput) {
|
|
|
30
32
|
argsList.push.apply(argsList, _toConsumableArray(args.map(function (arg) {
|
|
31
33
|
return String(arg);
|
|
32
34
|
})));
|
|
33
|
-
var prettyPrintedCLIArgs = ["java"].concat(argsList).map(function (arg) {
|
|
35
|
+
var prettyPrintedCLIArgs = ["java"].concat(_toConsumableArray(argsList)).map(function (arg) {
|
|
34
36
|
return JSON.stringify(arg);
|
|
35
37
|
}).join(' ');
|
|
36
38
|
_logger["default"].info("CLI: Running command: ".concat(prettyPrintedCLIArgs));
|
|
@@ -55,4 +57,4 @@ function callJar(jarPath, args, done, onOutput) {
|
|
|
55
57
|
});
|
|
56
58
|
return javaProcess;
|
|
57
59
|
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbmZpZyIsIl9sb2dnZXIiLCJfY2hpbGRfcHJvY2VzcyIsImUiLCJfX2VzTW9kdWxlIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpc0FycmF5IiwibGVuZ3RoIiwibiIsImNhbGxDb3JlIiwiZXhwb3J0cyIsImFyZ3MiLCJkb25lIiwib25PdXRwdXQiLCJqdm1BcmdzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwicm9vdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsInNwZWNtYXRpY0phclBhdGgiLCJzcGVjbWF0aWNDb3JlSmFyTmFtZSIsImNhbGxKYXIiLCJqYXJQYXRoIiwiX2phdmFQcm9jZXNzJHN0ZG91dCIsIl9qYXZhUHJvY2VzcyRzdGRlcnIiLCJhcmdzTGlzdCIsInByb2Nlc3MiLCJlbnYiLCJwdXNoIiwiY29uY2F0IiwiYXBwbHkiLCJtYXAiLCJhcmciLCJTdHJpbmciLCJwcmV0dHlQcmludGVkQ0xJQXJncyIsIkpTT04iLCJzdHJpbmdpZnkiLCJqb2luIiwibG9nZ2VyIiwiaW5mbyIsImphdmFQcm9jZXNzIiwic3Bhd24iLCJzdGRpbyIsInN0ZGVyciIsInNoZWxsIiwic3Rkb3V0Iiwib24iLCJkYXRhIiwiY29kZSIsIkVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi9ydW5uZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4ZWNTaCBmcm9tICdleGVjLXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3BlY21hdGljQ29yZUphck5hbWUgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJztcbmltcG9ydCB7IENoaWxkUHJvY2VzcywgZXhlYywgc3Bhd24sIFNwYXduT3B0aW9ucyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCBjYWxsQ29yZSA9IChhcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCBkb25lOiAoZXJyb3I6IGFueSkgPT4gdm9pZCwgb25PdXRwdXQ6IChtZXNzYWdlOiBzdHJpbmcsIGVycm9yOiBib29sZWFuKSA9PiB2b2lkLCBqdm1BcmdzOiBzdHJpbmdbXSA9IFtdKTogQ2hpbGRQcm9jZXNzID0+IHtcbiAgICBjb25zdCByb290UGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xuICAgIGNvbnN0IHNwZWNtYXRpY0phclBhdGggPSBwYXRoLnJlc29sdmUocm9vdFBhdGgsIHNwZWNtYXRpY0NvcmVKYXJOYW1lKTtcbiAgICByZXR1cm4gY2FsbEphcihzcGVjbWF0aWNKYXJQYXRoLCBhcmdzLCBkb25lLCBvbk91dHB1dCwganZtQXJncyk7XG59O1xuXG5mdW5jdGlvbiBjYWxsSmFyKGphclBhdGg6IHN0cmluZywgYXJnczogKHN0cmluZyB8IG51bWJlcilbXSwgZG9uZTogKGVycm9yOiBhbnkpID0+IHZvaWQsIG9uT3V0cHV0OiAobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogYm9vbGVhbikgPT4gdm9pZCwganZtQXJnczogc3RyaW5nW10gPSBbXSk6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgYXJnc0xpc3Q6IHN0cmluZ1tdID0gWy4uLmp2bUFyZ3NdO1xuICAgIGlmIChwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ10pIHtcbiAgICAgICAgYXJnc0xpc3QucHVzaChgLURlbmRwb2ludHNBUEk9XCIke3Byb2Nlc3MuZW52WydlbmRwb2ludHNBUEknXX1cImApO1xuICAgIH1cbiAgICBhcmdzTGlzdC5wdXNoKC4uLlsnLWphcicsIGphclBhdGhdKTtcbiAgICBhcmdzTGlzdC5wdXNoKC4uLmFyZ3MubWFwKGFyZyA9PiBTdHJpbmcoYXJnKSkpO1xuICAgIGNvbnN0IHByZXR0eVByaW50ZWRDTElBcmdzID0gW2BqYXZhYCwgLi4uYXJnc0xpc3RdLm1hcChhcmcgPT4gSlNPTi5zdHJpbmdpZnkoYXJnKSkuam9pbignICcpO1xuXG4gICAgbG9nZ2VyLmluZm8oYENMSTogUnVubmluZyBjb21tYW5kOiAke3ByZXR0eVByaW50ZWRDTElBcmdzfWApO1xuICAgIGNvbnN0IGphdmFQcm9jZXNzOiBDaGlsZFByb2Nlc3MgPSBzcGF3bignamF2YScsIGFyZ3NMaXN0LCB7IHN0ZGlvOiAncGlwZScsIHN0ZGVycjogJ3BpcGUnLCBzaGVsbDogZmFsc2UsIGVudjogcHJvY2Vzcy5lbnYgfSBhcyBTcGF3bk9wdGlvbnMpO1xuICAgIGphdmFQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YTogU3RyaW5nKSB7XG4gICAgICAgIG9uT3V0cHV0KGAke2RhdGF9YCwgZmFsc2UpO1xuICAgIH0pO1xuICAgIGphdmFQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YTogU3RyaW5nKSB7XG4gICAgICAgIG9uT3V0cHV0KGAke2RhdGF9YCwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgamF2YVByb2Nlc3Mub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGNvZGU6bnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgICAgICBkb25lKG5ldyBFcnJvcignQ29tbWFuZCBleGl0ZWQgd2l0aCBub24gemVybyBjb2RlOiAnICsgY29kZSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb25lKG51bGwpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJu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
|
package/dist/core/index.js
CHANGED
|
@@ -15,7 +15,8 @@ var _http = _interopRequireDefault(require("http"));
|
|
|
15
15
|
var _shutdownUtils = require("./shutdownUtils");
|
|
16
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
17
17
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
18
|
-
function
|
|
18
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
19
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
19
20
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
20
21
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
21
22
|
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
@@ -61,9 +62,8 @@ var startStub = exports.startStub = function startStub(host, port, args) {
|
|
|
61
62
|
}, function (message, error) {
|
|
62
63
|
if (!error) {
|
|
63
64
|
if (message.indexOf(freePortMessage) > -1) {
|
|
64
|
-
var _parsedPort;
|
|
65
65
|
_logger["default"].info("Stub: ".concat(message));
|
|
66
|
-
parsedPort =
|
|
66
|
+
parsedPort = parsedPort !== null && parsedPort !== void 0 ? parsedPort : message.split("".concat(freePortMessage, ":"))[1].trim();
|
|
67
67
|
} else if (message.indexOf(stubServingMessage) > -1) {
|
|
68
68
|
_logger["default"].info("Stub: ".concat(message));
|
|
69
69
|
var stubInfo = message.split(stubServingMessage);
|
|
@@ -118,11 +118,11 @@ function parseStubOutput(stubInfo, parsedPort, javaProcess) {
|
|
|
118
118
|
return new Stub(host, Number.parseInt(finalPort), finalUrl, javaProcess);
|
|
119
119
|
}
|
|
120
120
|
var stopStub = exports.stopStub = /*#__PURE__*/function () {
|
|
121
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/
|
|
121
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(stub) {
|
|
122
122
|
var _javaProcess$stdout, _javaProcess$stderr;
|
|
123
123
|
var javaProcess;
|
|
124
|
-
return
|
|
125
|
-
while (1) switch (_context.
|
|
124
|
+
return _regenerator().w(function (_context) {
|
|
125
|
+
while (1) switch (_context.n) {
|
|
126
126
|
case 0:
|
|
127
127
|
_logger["default"].debug("Stub: Stopping server at ".concat(stub.url));
|
|
128
128
|
javaProcess = stub.process;
|
|
@@ -130,14 +130,13 @@ var stopStub = exports.stopStub = /*#__PURE__*/function () {
|
|
|
130
130
|
(_javaProcess$stderr = javaProcess.stderr) === null || _javaProcess$stderr === void 0 || _javaProcess$stderr.removeAllListeners();
|
|
131
131
|
javaProcess.removeAllListeners('close');
|
|
132
132
|
_logger["default"].debug('Trying to stop stub process gracefully ...');
|
|
133
|
-
_context.
|
|
133
|
+
_context.n = 1;
|
|
134
134
|
return (0, _shutdownUtils.gracefulShutdown)(javaProcess);
|
|
135
|
-
case
|
|
135
|
+
case 1:
|
|
136
136
|
_logger["default"].debug('Completed graceful termination of the stub process');
|
|
137
137
|
_logger["default"].info("Stub: Stopped server at ".concat(stub.url));
|
|
138
|
-
case
|
|
139
|
-
|
|
140
|
-
return _context.stop();
|
|
138
|
+
case 2:
|
|
139
|
+
return _context.a(2);
|
|
141
140
|
}
|
|
142
141
|
}, _callee);
|
|
143
142
|
}));
|
|
@@ -146,30 +145,29 @@ var stopStub = exports.stopStub = /*#__PURE__*/function () {
|
|
|
146
145
|
};
|
|
147
146
|
}();
|
|
148
147
|
var testWithApiCoverage = exports.testWithApiCoverage = /*#__PURE__*/function () {
|
|
149
|
-
var _ref3 = _asyncToGenerator(/*#__PURE__*/
|
|
150
|
-
return
|
|
151
|
-
while (1) switch (_context3.
|
|
148
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(expressApp, host, port, contractPath, args) {
|
|
149
|
+
return _regenerator().w(function (_context3) {
|
|
150
|
+
while (1) switch (_context3.n) {
|
|
152
151
|
case 0:
|
|
153
|
-
return _context3.
|
|
154
|
-
var _ref4 = _asyncToGenerator(/*#__PURE__*/
|
|
152
|
+
return _context3.a(2, new Promise(/*#__PURE__*/function () {
|
|
153
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(resolve, _reject) {
|
|
155
154
|
var apiCoverageServer, results;
|
|
156
|
-
return
|
|
157
|
-
while (1) switch (_context2.
|
|
155
|
+
return _regenerator().w(function (_context2) {
|
|
156
|
+
while (1) switch (_context2.n) {
|
|
158
157
|
case 0:
|
|
159
|
-
_context2.
|
|
158
|
+
_context2.n = 1;
|
|
160
159
|
return startApiCoverageServer(expressApp);
|
|
161
|
-
case
|
|
162
|
-
apiCoverageServer = _context2.
|
|
163
|
-
_context2.
|
|
160
|
+
case 1:
|
|
161
|
+
apiCoverageServer = _context2.v;
|
|
162
|
+
_context2.n = 2;
|
|
164
163
|
return test(host, port, contractPath, args);
|
|
165
|
-
case
|
|
166
|
-
results = _context2.
|
|
164
|
+
case 2:
|
|
165
|
+
results = _context2.v;
|
|
167
166
|
apiCoverageServer.close(function () {
|
|
168
167
|
resolve(results);
|
|
169
168
|
});
|
|
170
|
-
case
|
|
171
|
-
|
|
172
|
-
return _context2.stop();
|
|
169
|
+
case 3:
|
|
170
|
+
return _context2.a(2);
|
|
173
171
|
}
|
|
174
172
|
}, _callee2);
|
|
175
173
|
}));
|
|
@@ -177,9 +175,6 @@ var testWithApiCoverage = exports.testWithApiCoverage = /*#__PURE__*/function ()
|
|
|
177
175
|
return _ref4.apply(this, arguments);
|
|
178
176
|
};
|
|
179
177
|
}()));
|
|
180
|
-
case 1:
|
|
181
|
-
case "end":
|
|
182
|
-
return _context3.stop();
|
|
183
178
|
}
|
|
184
179
|
}, _callee3);
|
|
185
180
|
}));
|
|
@@ -355,4 +350,4 @@ var convertEndpointToSpringSyntax = function convertEndpointToSpringSyntax(path)
|
|
|
355
350
|
var removeRegexFromPath = function removeRegexFromPath(path) {
|
|
356
351
|
return path.replace(/\([^()]*\)/g, '');
|
|
357
352
|
};
|
|
358
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2Zhc3RYbWxQYXJzZXIiLCJfZnMiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9leHByZXNzTGlzdEVuZHBvaW50cyIsIl9odHRwIiwiX3NodXRkb3duVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsIk9iamVjdCIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImlzQXJyYXkiLCJfZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJmcmVlUG9ydE1lc3NhZ2UiLCJzdHViU2VydmluZ01lc3NhZ2UiLCJTdHViIiwiZXhwb3J0cyIsImhvc3QiLCJwb3J0IiwidXJsIiwicHJvY2VzcyIsInN0YXJ0U3R1YiIsImFyZ3MiLCJjbWQiLCJjb25jYXQiLCJtYXAiLCJsb2dnZXIiLCJpbmZvIiwiZGVidWciLCJwYXJzZWRQb3J0IiwicmVqZWN0IiwiamF2YVByb2Nlc3MiLCJjYWxsQ29yZSIsImVyciIsImVycm9yIiwibWVzc2FnZSIsImluZGV4T2YiLCJfcGFyc2VkUG9ydCIsInNwbGl0IiwidHJpbSIsInN0dWJJbmZvIiwic3R1YiIsInBhcnNlU3R1Yk91dHB1dCIsImV4dHJhY3RFcnJvck1lc3NhZ2UiLCJfcmVmIiwidXJsSW5mbyIsImV4ZWMiLCJwcm90b2NvbCIsInJlZ2V4UG9ydCIsInBhdGgiLCJkZWZhdWx0UG9ydCIsInVuZGVmaW5lZCIsImZpbmFsUG9ydCIsInBvcnROdW1iZXIiLCJwYXJzZUludCIsImZpbmFsVXJsIiwic3RvcFN0dWIiLCJfcmVmMiIsIl9jYWxsZWUiLCJfamF2YVByb2Nlc3Mkc3Rkb3V0IiwiX2phdmFQcm9jZXNzJHN0ZGVyciIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJzdGRvdXQiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdGRlcnIiLCJncmFjZWZ1bFNodXRkb3duIiwiX3giLCJ0ZXN0V2l0aEFwaUNvdmVyYWdlIiwiX3JlZjMiLCJfY2FsbGVlMyIsImV4cHJlc3NBcHAiLCJjb250cmFjdFBhdGgiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlamVjdCIsImFwaUNvdmVyYWdlU2VydmVyIiwicmVzdWx0cyIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIiLCJjbG9zZSIsIl94NyIsIl94OCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsInNwZWNzUGF0aCIsInJlcG9ydERpciIsImZzIiwicm1TeW5jIiwicmVjdXJzaXZlIiwiZm9yY2UiLCJ0ZXN0Q2FzZXMiLCJwYXJzZUp1bml0WE1MIiwidG90YWwiLCJmYWlsdXJlIiwiZmlsdGVyIiwidGVzdGNhc2UiLCJzdWNjZXNzIiwicmVzdWx0IiwiY29uc29sZSIsImxvZyIsInNob3dUZXN0UmVzdWx0cyIsInRlc3RGbiIsIm5hbWVUZW1wQXJyIiwicmVwbGFjZSIsInNraXBwZWQiLCJzZXRFeHBlY3RhdGlvbnMiLCJzdHViUGF0aCIsInN0dWJTZXJ2ZXJCYXNlVXJsIiwic3R1YlJlc3BvbnNlIiwic2V0RXhwZWN0YXRpb25Kc29uIiwiYXhpb3MiLCJwb3N0IiwicmVzcG9uc2UiLCJkYXRhIiwiX2VyciRyZXNwb25zZSIsInNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSIsImhlYWRlcnMiLCJlcnJvclRleHQiLCJwcmludEphclZlcnNpb24iLCJhcHAiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwiX3JlcSIsInJlcyIsIndyaXRlSGVhZCIsImVuZFBvaW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJleHRyYWN0RW5kUG9pbnRzIiwiZW5kIiwib24iLCJsaXN0ZW4iLCJhZGRyZXNzIiwiZW52IiwicmVwb3J0UGF0aCIsInJlYWRGaWxlU3luYyIsInBhcnNlciIsIlhNTFBhcnNlciIsInJlc3VsdFhtbCIsInBhcnNlIiwidGVzdHN1aXRlIiwibGlzdEVuZFBvaW50cyIsImRldGFpbHMiLCJsaXN0RXhwcmVzc0VuZHBvaW50cyIsImFwaURldGFpbCIsIm1ldGhvZHMiLCJzcHJpbmdBY3R1YXRvclBheWxvYWQiLCJjb250ZXh0cyIsImFwcGxpY2F0aW9uIiwibWFwcGluZ3MiLCJkaXNwYXRjaGVyU2VydmxldHMiLCJkaXNwYXRjaGVyU2VydmxldCIsInNvcnQiLCJyZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnMiLCJwYXR0ZXJucyIsImNvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4IiwicmVtb3ZlUmVnZXhGcm9tUGF0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgWE1MUGFyc2VyIH0gZnJvbSAnZmFzdC14bWwtcGFyc2VyJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJ1xuaW1wb3J0IHsgY2FsbENvcmUgfSBmcm9tICcuLi9jb21tb24vcnVubmVyJ1xuaW1wb3J0IGxpc3RFeHByZXNzRW5kcG9pbnRzIGZyb20gJy4uL2xpYi9leHByZXNzLWxpc3QtZW5kcG9pbnRzJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBBZGRyZXNzSW5mbyB9IGZyb20gJ25ldCdcbmltcG9ydCB7IGdyYWNlZnVsU2h1dGRvd24gfSBmcm9tICcuL3NodXRkb3duVXRpbHMnXG5cbmNvbnN0IGZyZWVQb3J0TWVzc2FnZSA9ICdGcmVlIHBvcnQgZm91bmQnXG5jb25zdCBzdHViU2VydmluZ01lc3NhZ2UgPSAnc2VydmluZyBlbmRwb2ludHMgZnJvbSBzcGVjcydcblxuZXhwb3J0IGNsYXNzIFN0dWIge1xuICAgIGhvc3Q6IHN0cmluZ1xuICAgIHBvcnQ6IG51bWJlclxuICAgIHVybDogc3RyaW5nXG4gICAgcHJvY2VzczogQ2hpbGRQcm9jZXNzXG4gICAgY29uc3RydWN0b3IoaG9zdDogc3RyaW5nLCBwb3J0OiBudW1iZXIsIHVybDogc3RyaW5nLCBwcm9jZXNzOiBDaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5ob3N0ID0gaG9zdFxuICAgICAgICB0aGlzLnBvcnQgPSBwb3J0XG4gICAgICAgIHRoaXMudXJsID0gdXJsXG4gICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3NcbiAgICB9XG59XG5cbmNvbnN0IHN0YXJ0U3R1YiA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBhcmdzPzogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8U3R1Yj4gPT4ge1xuICAgIHZhciBjbWQgPSBbYHN0dWJgXVxuICAgIGlmIChob3N0KSBjbWQgLnB1c2goYC0taG9zdD0ke2hvc3R9YClcbiAgICBpZiAocG9ydCkgY21kIC5wdXNoKGAtLXBvcnQ9JHtwb3J0fWApXG4gICAgaWYgKGFyZ3MpIGNtZCAucHVzaCguLi5hcmdzLm1hcChhcmcgPT4gU3RyaW5nKGFyZykpKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1N0dWI6IFN0YXJ0aW5nIHNlcnZlcicpXG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBFeGVjdXRpbmcgXCIke2NtZH1cImApXG4gICAgbGV0IHBhcnNlZFBvcnQ6IHN0cmluZyB8IG51bGwgPSBwb3J0ID09IG51bGwgfHwgcG9ydCA9PT0gMCA/IG51bGwgOiBTdHJpbmcocG9ydCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBqYXZhUHJvY2VzcyA9IGNhbGxDb3JlKFxuICAgICAgICAgICAgY21kLFxuICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFN0dWI6IEV4aXRlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChtZXNzYWdlLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5kZXhPZihmcmVlUG9ydE1lc3NhZ2UpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFBvcnQgPSBwYXJzZWRQb3J0ID8/IG1lc3NhZ2Uuc3BsaXQoYCR7ZnJlZVBvcnRNZXNzYWdlfTpgKVsxXS50cmltKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLmluZGV4T2Yoc3R1YlNlcnZpbmdNZXNzYWdlKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHViSW5mbyA9IG1lc3NhZ2Uuc3BsaXQoc3R1YlNlcnZpbmdNZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmxlbmd0aCA8IDIpIHJlamVjdCgnQ2Fubm90IGRldGVybWluZSB1cmwgZnJvbSBzdHViIG91dHB1dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R1YiA9IHBhcnNlU3R1Yk91dHB1dChzdHViSW5mbywgcGFyc2VkUG9ydCwgamF2YVByb2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3R1Yik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJlamVjdChleHRyYWN0RXJyb3JNZXNzYWdlKGUpKTsgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5kZXhPZignQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVycm9yTWVzc2FnZShlcnJvcjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKGVycm9yKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHViT3V0cHV0KFxuICAgIHN0dWJJbmZvOiBzdHJpbmdbXSxcbiAgICBwYXJzZWRQb3J0OiBzdHJpbmcgfCBudWxsLFxuICAgIGphdmFQcm9jZXNzOiBDaGlsZFByb2Nlc3Ncbik6IFN0dWIge1xuICAgIGNvbnN0IHVybCA9IHN0dWJJbmZvWzBdLnRyaW0oKTtcbiAgICBjb25zdCB1cmxJbmZvID0gL1xcYiguKj8pOlxcL1xcLyguKj8pOj8oWzAtOV0rKT8oXFwvLiopPyQvLmV4ZWModXJsKTtcblxuICAgIGlmICh1cmxJbmZvID09PSBudWxsIHx8ICF1cmxJbmZvWzFdIHx8ICF1cmxJbmZvWzJdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgaG9zdCBhbmQgcG9ydCBmcm9tIHN0dWIgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSB1cmxJbmZvWzFdO1xuICAgIGNvbnN0IGhvc3QgPSB1cmxJbmZvWzJdO1xuICAgIGNvbnN0IHJlZ2V4UG9ydCA9IHVybEluZm9bM107XG4gICAgY29uc3QgcGF0aCA9IHVybEluZm9bNF0gfHwgXCJcIjtcbiAgICBjb25zdCBkZWZhdWx0UG9ydCA9IHByb3RvY29sID09PSAnaHR0cCcgPyAnODAnIDogcHJvdG9jb2wgPT09ICdodHRwcycgPyAnNDQzJyA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBmaW5hbFBvcnQgPSBwYXJzZWRQb3J0ID8/IHJlZ2V4UG9ydCA/PyBkZWZhdWx0UG9ydDtcblxuICAgIGlmICghZmluYWxQb3J0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgcG9ydCBmcm9tIHN0dWIgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9ydE51bWJlciA9IE51bWJlci5wYXJzZUludChmaW5hbFBvcnQsIDEwKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBvcnROdW1iZXIpIHx8IHBvcnROdW1iZXIgPD0gMCB8fCBwb3J0TnVtYmVyID4gNjU1MzUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3J0OiAke2ZpbmFsUG9ydH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5hbFVybCA9IGAke3Byb3RvY29sfTovLyR7aG9zdH06JHtmaW5hbFBvcnR9JHtwYXRofWA7XG4gICAgcmV0dXJuIG5ldyBTdHViKGhvc3QsIE51bWJlci5wYXJzZUludChmaW5hbFBvcnQpLCBmaW5hbFVybCwgamF2YVByb2Nlc3MpO1xufVxuXG5jb25zdCBzdG9wU3R1YiA9IGFzeW5jIChzdHViOiBTdHViKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBTdG9wcGluZyBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxuICAgIGNvbnN0IGphdmFQcm9jZXNzID0gc3R1Yi5wcm9jZXNzXG4gICAgamF2YVByb2Nlc3Muc3Rkb3V0Py5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgIGphdmFQcm9jZXNzLnN0ZGVycj8ucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICBqYXZhUHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJylcbiAgICBsb2dnZXIuZGVidWcoJ1RyeWluZyB0byBzdG9wIHN0dWIgcHJvY2VzcyBncmFjZWZ1bGx5IC4uLicpXG4gICAgYXdhaXQgZ3JhY2VmdWxTaHV0ZG93bihqYXZhUHJvY2VzcylcbiAgICBsb2dnZXIuZGVidWcoJ0NvbXBsZXRlZCBncmFjZWZ1bCB0ZXJtaW5hdGlvbiBvZiB0aGUgc3R1YiBwcm9jZXNzJylcbiAgICBsb2dnZXIuaW5mbyhgU3R1YjogU3RvcHBlZCBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxufVxuXG5jb25zdCB0ZXN0V2l0aEFwaUNvdmVyYWdlID0gYXN5bmMgKFxuICAgIGV4cHJlc3NBcHA6IGFueSxcbiAgICBob3N0Pzogc3RyaW5nLFxuICAgIHBvcnQ/OiBudW1iZXIsXG4gICAgY29udHJhY3RQYXRoPzogc3RyaW5nLFxuICAgIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4pOiBQcm9taXNlPHsgW2s6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBhcGlDb3ZlcmFnZVNlcnZlciA9IGF3YWl0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIoZXhwcmVzc0FwcClcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRlc3QoaG9zdCwgcG9ydCwgY29udHJhY3RQYXRoLCBhcmdzKVxuICAgICAgICBhcGlDb3ZlcmFnZVNlcnZlci5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgdGVzdCA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBjb250cmFjdFBhdGg/OiBzdHJpbmcsIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx7IFtrOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IHNwZWNzUGF0aCA9IHBhdGgucmVzb2x2ZShjb250cmFjdFBhdGggKyAnJylcblxuICAgIGNvbnN0IGNtZCA9IFtgdGVzdGBdXG4gICAgaWYgKGNvbnRyYWN0UGF0aCkgY21kLnB1c2goc3BlY3NQYXRoKVxuICAgIGNtZC5wdXNoKCctLWp1bml0UmVwb3J0RGlyPWRpc3QvdGVzdC1yZXBvcnQnKVxuICAgIGlmIChob3N0KSBjbWQucHVzaChgLS1ob3N0PSR7aG9zdH1gKVxuICAgIGlmIChwb3J0KSBjbWQucHVzaChgLS1wb3J0PSR7cG9ydH1gKVxuICAgIGlmIChhcmdzKSBjbWQucHVzaCguLi5hcmdzLm1hcChhcmcgPT4gU3RyaW5nKGFyZykpKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1Rlc3Q6IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgVGVzdDogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgY29uc3QgcmVwb3J0RGlyID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0JylcbiAgICBmcy5ybVN5bmMocmVwb3J0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICBjYWxsQ29yZShcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIGxvZ2dlci5lcnJvcihgVGVzdDogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSB0ZXN0Q2FzZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbHVyZSA9IHRlc3RDYXNlcy5maWx0ZXIoKHRlc3RjYXNlOiB7IFtpZDogc3RyaW5nXTogYW55IH0pID0+IHRlc3RjYXNlWydmYWlsdXJlJ10gfHwgdGVzdGNhc2VbJ3NraXBwZWQnXSkubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IHRvdGFsIC0gZmFpbHVyZVxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7IHRvdGFsLCBzdWNjZXNzLCBmYWlsdXJlIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdBUEkgQ09WRVJBR0UgU1VNTUFSWScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSkgLy9Mb2cgYWx3YXlzIGZvciBhbGwgbG9nIGxldmVsc1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcltlcnJvciA/ICdlcnJvcicgOiAnZGVidWcnXShgVGVzdDogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuY29uc3Qgc2hvd1Rlc3RSZXN1bHRzID0gKHRlc3RGbjogKG5hbWU6IHN0cmluZywgY2I6ICgpID0+IHZvaWQpID0+IHZvaWQpID0+IHtcbiAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgdGVzdENhc2VzLm1hcChmdW5jdGlvbiAodGVzdGNhc2U6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICB2YXIgbmFtZSA9ICdObyBOYW1lJ1xuICAgICAgICBpZiAodGVzdGNhc2VbJ3N5c3RlbS1vdXQnXSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZVRlbXBBcnIgPSB0ZXN0Y2FzZVsnc3lzdGVtLW91dCddXG4gICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJycpXG4gICAgICAgICAgICAgICAgLnNwbGl0KC9kaXNwbGF5LW5hbWU6LipTY2VuYXJpbzogLylcbiAgICAgICAgICAgIGlmIChuYW1lVGVtcEFyci5sZW5ndGggPiAxKSBuYW1lID0gbmFtZVRlbXBBcnJbMV0udHJpbSgpXG4gICAgICAgIH1cbiAgICAgICAgdGVzdEZuKG5hbWUsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0Y2FzZS5mYWlsdXJlIHx8IHRlc3RjYXNlLnNraXBwZWQpIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBwYXNzJylcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbnMgPSAoc3R1YlBhdGg6IHN0cmluZywgc3R1YlNlcnZlckJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzdHViUmVzcG9uc2UgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShzdHViUGF0aCkpXG4gICAgcmV0dXJuIHNldEV4cGVjdGF0aW9uSnNvbihzdHViUmVzcG9uc2UsIHN0dWJTZXJ2ZXJCYXNlVXJsKVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbkpzb24gPSAoc3R1YlJlc3BvbnNlOiBhbnksIHN0dWJTZXJ2ZXJCYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgc3R1YlNlcnZlckJhc2VVcmwgPSBzdHViU2VydmVyQmFzZVVybCB8fCAnaHR0cDovL2xvY2FsaG9zdDo5MDAwJ1xuXG4gICAgbG9nZ2VyLmluZm8oYFNldCBFeHBlY3RhdGlvbnM6IFN0dWIgdXJsIGlzICR7c3R1YlNlcnZlckJhc2VVcmx9YClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zXG4gICAgICAgICAgICAucG9zdChgJHtzdHViU2VydmVyQmFzZVVybH0vX3NwZWNtYXRpYy9leHBlY3RhdGlvbnNgLCBzdHViUmVzcG9uc2UpXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBTZXQgRXhwZWN0YXRpb25zOiAke3Jlc3BvbnNlLmRhdGF9YClcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU2V0IEV4cGVjdGF0aW9uczogRmluaXNoZWQnKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UgPSBgU2V0IEV4cGVjdGF0aW9uczogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YFxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXNwb25zZSBkYXRhIGlzIGluIHRleHQgZm9ybWF0XG4gICAgICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIucmVzcG9uc2U/LmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAndGV4dC9wbGFpbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBhIGNoZWNrIHRvIGhhbmRsZSB0ZXh0IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IHR5cGVvZiBlcnIucmVzcG9uc2UuZGF0YSA9PT0gJ3N0cmluZycgPyBlcnIucmVzcG9uc2UuZGF0YSA6IFwiRXJyb3IgdGV4dCBub3QgYXZhaWxhYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UgKz0gYCAtICR7ZXJyb3JUZXh0fWA7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSB0ZXh0IGVycm9yIG1lc3NhZ2UuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgcmVqZWN0KHNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSlcbiAgICAgICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgcHJpbnRKYXJWZXJzaW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGNtZCA9IFtgLS12ZXJzaW9uYF1cbiAgICBsb2dnZXIuaW5mbygnUHJpbnQgSmFyIFZlcnNpb246IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgUHJpbnQgSmFyIFZlcnNpb246IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIGNhbGxDb3JlKFxuICAgICAgICBjbWQsXG4gICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgbG9nZ2VyLmVycm9yKGBQcmludCBKYXIgVmVyc2lvbjogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgfSxcbiAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIGxvZ2dlci5lcnJvcihgUHJpbnQgSmFyIFZlcnNpb246ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgZWxzZSBjb25zb2xlLmxvZyhgJHttZXNzYWdlfWApXG4gICAgICAgIH1cbiAgICApXG59XG5cbmNvbnN0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIgPSAoZXhwcmVzc0FwcDogYW55KTogUHJvbWlzZTxodHRwLlNlcnZlcj4gPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgUmVnaXN0ZXJpbmcgQVBJIGVuZHBvaW50IGZvciBjb3ZlcmFnZWApXG4gICAgbGV0IGFwcCA9IGh0dHAuY3JlYXRlU2VydmVyKChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9KVxuICAgICAgICBjb25zdCBlbmRQb2ludHMgPSBKU09OLnN0cmluZ2lmeShleHRyYWN0RW5kUG9pbnRzKGV4cHJlc3NBcHApKVxuICAgICAgICBsb2dnZXIuZGVidWcoYEVuZHBvaW50czogJHtlbmRQb2ludHN9YClcbiAgICAgICAgcmVzLmVuZChlbmRQb2ludHMpXG4gICAgfSlcbiAgICByZXR1cm4gbmV3IFByb21pc2U8aHR0cC5TZXJ2ZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXBwLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHN0YXJ0aW5nIGVuZCBwb2ludHMgc2VydmVyIGZvciBhcGkgY292ZXJhZ2UnLCBlcnIpXG4gICAgICAgICAgICByZWplY3QoJ0Vycm9yIHdoaWxlIHN0YXJ0aW5nIGVuZCBwb2ludHMgc2VydmVyIGZvciBhcGkgY292ZXJhZ2UnKVxuICAgICAgICB9KVxuICAgICAgICBhcHAubGlzdGVuKHsgaG9zdDogJzEyNy4wLjAuMScsIHBvcnQ6IDAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IGFwcC5hZGRyZXNzKCkgYXMgQWRkcmVzc0luZm8gfCBudWxsXG4gICAgICAgICAgICBwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ10gPSBgaHR0cDovLyR7YWRkcmVzcz8uYWRkcmVzc306JHthZGRyZXNzPy5wb3J0fWBcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBFbmRwb2ludHMgQVBJIHJlZ2lzdGVyZWQgYXQgJHtwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ119YClcbiAgICAgICAgICAgIHJlc29sdmUoYXBwKVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHBhcnNlSnVuaXRYTUwgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVwb3J0UGF0aCA9IHBhdGgucmVzb2x2ZSgnZGlzdC90ZXN0LXJlcG9ydC9URVNULWp1bml0LWp1cGl0ZXIueG1sJylcbiAgICB2YXIgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhyZXBvcnRQYXRoKVxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBYTUxQYXJzZXIoKVxuICAgIHZhciByZXN1bHRYbWwgPSBwYXJzZXIucGFyc2UoZGF0YSlcbiAgICByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlID0gQXJyYXkuaXNBcnJheShyZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlKSA/IHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UgOiBbcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZV1cbiAgICByZXR1cm4gcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZVxufVxuXG5jb25zdCBsaXN0RW5kUG9pbnRzID0gKGV4cHJlc3NBcHA6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9PiB7XG4gICAgY29uc3QgZGV0YWlscyA9IGxpc3RFeHByZXNzRW5kcG9pbnRzKGV4cHJlc3NBcHApXG4gICAgbGV0IGVuZFBvaW50czogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge31cbiAgICBkZXRhaWxzLm1hcChhcGlEZXRhaWwgPT4ge1xuICAgICAgICBlbmRQb2ludHNbYXBpRGV0YWlsLnBhdGhdID0gYXBpRGV0YWlsLm1ldGhvZHNcbiAgICB9KVxuICAgIGRlbGV0ZSBlbmRQb2ludHNbJyonXVxuICAgIHJldHVybiBlbmRQb2ludHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVuZFBvaW50cyhleHByZXNzQXBwOiBhbnkpIHtcbiAgICBsZXQgZW5kUG9pbnRzID0gbGlzdEVuZFBvaW50cyhleHByZXNzQXBwKVxuICAgIGxldCBzcHJpbmdBY3R1YXRvclBheWxvYWQgPSB7XG4gICAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbjoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJTZXJ2bGV0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlclNlcnZsZXQ6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH1cbiAgICBPYmplY3Qua2V5cyhlbmRQb2ludHMpXG4gICAgICAgIC5zb3J0KClcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIHNwcmluZ0FjdHVhdG9yUGF5bG9hZC5jb250ZXh0cy5hcHBsaWNhdGlvbi5tYXBwaW5ncy5kaXNwYXRjaGVyU2VydmxldHMuZGlzcGF0Y2hlclNlcnZsZXQucHVzaCh7XG4gICAgICAgICAgICAgICAgZGV0YWlsczoge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHM6IGVuZFBvaW50c1twYXRoXS5zb3J0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuczogW2NvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4KHBhdGgpXS5tYXAocmVtb3ZlUmVnZXhGcm9tUGF0aClcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSBhcyBuZXZlcilcbiAgICAgICAgfSlcbiAgICByZXR1cm4gc3ByaW5nQWN0dWF0b3JQYXlsb2FkXG59XG5cbmNvbnN0IGNvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4ID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzooW14vXSspL2csICd7JDF9JykucmVwbGFjZSgvXFxcXC9nLCAnJylcbn1cblxuY29uc3QgcmVtb3ZlUmVnZXhGcm9tUGF0aCA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXChbXigpXSpcXCkvZywgJycpXG59XG5cbmV4cG9ydCB7IHN0YXJ0U3R1Yiwgc3RvcFN0dWIsIHRlc3QsIHRlc3RXaXRoQXBpQ292ZXJhZ2UsIHNldEV4cGVjdGF0aW9ucywgc2V0RXhwZWN0YXRpb25Kc29uLCBwcmludEphclZlcnNpb24sIHNob3dUZXN0UmVzdWx0cyB9XG5leHBvcnQgeyBzdGFydEFwaUNvdmVyYWdlU2VydmVyIH1cbiJdLCJtYXBwaW5ncyI6Ijs7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SCxTQUFTLEVBQUk7SUFDckJuQixTQUFTLENBQUNtQixTQUFTLENBQUN0RyxJQUFJLENBQUMsR0FBR3NHLFNBQVMsQ0FBQ0MsT0FBTztFQUNqRCxDQUFDLENBQUM7RUFDRixPQUFPcEIsU0FBUyxDQUFDLEdBQUcsQ0FBQztFQUNyQixPQUFPQSxTQUFTO0FBQ3BCLENBQUM7QUFFRCxTQUFTRyxnQkFBZ0JBLENBQUNoRSxVQUFlLEVBQUU7RUFDdkMsSUFBSTZELFNBQVMsR0FBR2dCLGFBQWEsQ0FBQzdFLFVBQVUsQ0FBQztFQUN6QyxJQUFJa0YscUJBQXFCLEdBQUc7SUFDeEJDLFFBQVEsRUFBRTtNQUNOQyxXQUFXLEVBQUU7UUFDVEMsUUFBUSxFQUFFO1VBQ05DLGtCQUFrQixFQUFFO1lBQ2hCQyxpQkFBaUIsRUFBRTtVQUN2QjtRQUNKO01BQ0o7SUFDSjtFQUNKLENBQUM7RUFDRHpRLE1BQU0sQ0FBQ2dGLElBQUksQ0FBQytKLFNBQVMsQ0FBQyxDQUNqQjJCLElBQUksQ0FBQyxDQUFDLENBQ050SSxHQUFHLENBQUMsVUFBQXdCLElBQUksRUFBSTtJQUNUd0cscUJBQXFCLENBQUNDLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDQyxRQUFRLENBQUNDLGtCQUFrQixDQUFDQyxpQkFBaUIsQ0FBQ3hNLElBQUksQ0FBQztNQUMxRitMLE9BQU8sRUFBRTtRQUNMVyx3QkFBd0IsRUFBRTtVQUN0QlIsT0FBTyxFQUFFcEIsU0FBUyxDQUFDbkYsSUFBSSxDQUFDLENBQUM4RyxJQUFJLENBQUMsQ0FBQztVQUMvQkUsUUFBUSxFQUFFLENBQUNDLDZCQUE2QixDQUFDakgsSUFBSSxDQUFDLENBQUMsQ0FBQ3hCLEdBQUcsQ0FBQzBJLG1CQUFtQjtRQUMzRTtNQUNKO0lBQ0osQ0FBVSxDQUFDO0VBQ2YsQ0FBQyxDQUFDO0VBQ04sT0FBT1YscUJBQXFCO0FBQ2hDO0FBRUEsSUFBTVMsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FBSWpILElBQVksRUFBSztFQUNwRCxPQUFPQSxJQUFJLENBQUM2RCxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDQSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUMvRCxDQUFDO0FBRUQsSUFBTXFELG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUlsSCxJQUFZLEVBQUs7RUFDMUMsT0FBT0EsSUFBSSxDQUFDNkQsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7QUFDMUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
353
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2Zhc3RYbWxQYXJzZXIiLCJfZnMiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9leHByZXNzTGlzdEVuZHBvaW50cyIsIl9odHRwIiwiX3NodXRkb3duVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvciIsInQiLCJyIiwibiIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJpc0FycmF5IiwiX2RlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiZnJlZVBvcnRNZXNzYWdlIiwic3R1YlNlcnZpbmdNZXNzYWdlIiwiU3R1YiIsImV4cG9ydHMiLCJob3N0IiwicG9ydCIsInVybCIsInByb2Nlc3MiLCJzdGFydFN0dWIiLCJhcmdzIiwiY21kIiwicHVzaCIsImNvbmNhdCIsIm1hcCIsImFyZyIsImxvZ2dlciIsImluZm8iLCJkZWJ1ZyIsInBhcnNlZFBvcnQiLCJyZWplY3QiLCJqYXZhUHJvY2VzcyIsImNhbGxDb3JlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5kZXhPZiIsInNwbGl0IiwidHJpbSIsInN0dWJJbmZvIiwic3R1YiIsInBhcnNlU3R1Yk91dHB1dCIsImV4dHJhY3RFcnJvck1lc3NhZ2UiLCJFcnJvciIsIl9yZWYiLCJ1cmxJbmZvIiwiZXhlYyIsInByb3RvY29sIiwicmVnZXhQb3J0IiwicGF0aCIsImRlZmF1bHRQb3J0IiwidW5kZWZpbmVkIiwiZmluYWxQb3J0IiwicG9ydE51bWJlciIsInBhcnNlSW50IiwiaXNOYU4iLCJmaW5hbFVybCIsInN0b3BTdHViIiwiX3JlZjIiLCJfY2FsbGVlIiwiX2phdmFQcm9jZXNzJHN0ZG91dCIsIl9qYXZhUHJvY2VzcyRzdGRlcnIiLCJfY29udGV4dCIsInN0ZG91dCIsInJlbW92ZUFsbExpc3RlbmVycyIsInN0ZGVyciIsImdyYWNlZnVsU2h1dGRvd24iLCJfeCIsInRlc3RXaXRoQXBpQ292ZXJhZ2UiLCJfcmVmMyIsIl9jYWxsZWUzIiwiZXhwcmVzc0FwcCIsImNvbnRyYWN0UGF0aCIsIl9jb250ZXh0MyIsIl9yZWY0IiwiX2NhbGxlZTIiLCJfcmVqZWN0IiwiYXBpQ292ZXJhZ2VTZXJ2ZXIiLCJyZXN1bHRzIiwiX2NvbnRleHQyIiwic3RhcnRBcGlDb3ZlcmFnZVNlcnZlciIsImNsb3NlIiwiX3g3IiwiX3g4IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2Iiwic3BlY3NQYXRoIiwicmVwb3J0RGlyIiwiZnMiLCJybVN5bmMiLCJyZWN1cnNpdmUiLCJmb3JjZSIsInRlc3RDYXNlcyIsInBhcnNlSnVuaXRYTUwiLCJ0b3RhbCIsImZhaWx1cmUiLCJmaWx0ZXIiLCJ0ZXN0Y2FzZSIsInN1Y2Nlc3MiLCJyZXN1bHQiLCJjb25zb2xlIiwibG9nIiwic2hvd1Rlc3RSZXN1bHRzIiwidGVzdEZuIiwibmFtZVRlbXBBcnIiLCJyZXBsYWNlIiwic2tpcHBlZCIsInNldEV4cGVjdGF0aW9ucyIsInN0dWJQYXRoIiwic3R1YlNlcnZlckJhc2VVcmwiLCJzdHViUmVzcG9uc2UiLCJzZXRFeHBlY3RhdGlvbkpzb24iLCJheGlvcyIsInBvc3QiLCJyZXNwb25zZSIsImRhdGEiLCJfZXJyJHJlc3BvbnNlIiwic2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlIiwiaGVhZGVycyIsImVycm9yVGV4dCIsInByaW50SmFyVmVyc2lvbiIsImFwcCIsImh0dHAiLCJjcmVhdGVTZXJ2ZXIiLCJfcmVxIiwicmVzIiwid3JpdGVIZWFkIiwiZW5kUG9pbnRzIiwiSlNPTiIsInN0cmluZ2lmeSIsImV4dHJhY3RFbmRQb2ludHMiLCJlbmQiLCJvbiIsImxpc3RlbiIsImFkZHJlc3MiLCJlbnYiLCJyZXBvcnRQYXRoIiwicmVhZEZpbGVTeW5jIiwicGFyc2VyIiwiWE1MUGFyc2VyIiwicmVzdWx0WG1sIiwicGFyc2UiLCJ0ZXN0c3VpdGUiLCJsaXN0RW5kUG9pbnRzIiwiZGV0YWlscyIsImxpc3RFeHByZXNzRW5kcG9pbnRzIiwiYXBpRGV0YWlsIiwibWV0aG9kcyIsInNwcmluZ0FjdHVhdG9yUGF5bG9hZCIsImNvbnRleHRzIiwiYXBwbGljYXRpb24iLCJtYXBwaW5ncyIsImRpc3BhdGNoZXJTZXJ2bGV0cyIsImRpc3BhdGNoZXJTZXJ2bGV0Iiwia2V5cyIsInNvcnQiLCJyZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnMiLCJwYXR0ZXJucyIsImNvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4IiwicmVtb3ZlUmVnZXhGcm9tUGF0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgWE1MUGFyc2VyIH0gZnJvbSAnZmFzdC14bWwtcGFyc2VyJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJ1xuaW1wb3J0IHsgY2FsbENvcmUgfSBmcm9tICcuLi9jb21tb24vcnVubmVyJ1xuaW1wb3J0IGxpc3RFeHByZXNzRW5kcG9pbnRzIGZyb20gJy4uL2xpYi9leHByZXNzLWxpc3QtZW5kcG9pbnRzJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBBZGRyZXNzSW5mbyB9IGZyb20gJ25ldCdcbmltcG9ydCB7IGdyYWNlZnVsU2h1dGRvd24gfSBmcm9tICcuL3NodXRkb3duVXRpbHMnXG5cbmNvbnN0IGZyZWVQb3J0TWVzc2FnZSA9ICdGcmVlIHBvcnQgZm91bmQnXG5jb25zdCBzdHViU2VydmluZ01lc3NhZ2UgPSAnc2VydmluZyBlbmRwb2ludHMgZnJvbSBzcGVjcydcblxuZXhwb3J0IGNsYXNzIFN0dWIge1xuICAgIGhvc3Q6IHN0cmluZ1xuICAgIHBvcnQ6IG51bWJlclxuICAgIHVybDogc3RyaW5nXG4gICAgcHJvY2VzczogQ2hpbGRQcm9jZXNzXG4gICAgY29uc3RydWN0b3IoaG9zdDogc3RyaW5nLCBwb3J0OiBudW1iZXIsIHVybDogc3RyaW5nLCBwcm9jZXNzOiBDaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5ob3N0ID0gaG9zdFxuICAgICAgICB0aGlzLnBvcnQgPSBwb3J0XG4gICAgICAgIHRoaXMudXJsID0gdXJsXG4gICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3NcbiAgICB9XG59XG5cbmNvbnN0IHN0YXJ0U3R1YiA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBhcmdzPzogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8U3R1Yj4gPT4ge1xuICAgIHZhciBjbWQgPSBbYHN0dWJgXVxuICAgIGlmIChob3N0KSBjbWQgLnB1c2goYC0taG9zdD0ke2hvc3R9YClcbiAgICBpZiAocG9ydCkgY21kIC5wdXNoKGAtLXBvcnQ9JHtwb3J0fWApXG4gICAgaWYgKGFyZ3MpIGNtZCAucHVzaCguLi5hcmdzLm1hcChhcmcgPT4gU3RyaW5nKGFyZykpKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1N0dWI6IFN0YXJ0aW5nIHNlcnZlcicpXG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBFeGVjdXRpbmcgXCIke2NtZH1cImApXG4gICAgbGV0IHBhcnNlZFBvcnQ6IHN0cmluZyB8IG51bGwgPSBwb3J0ID09IG51bGwgfHwgcG9ydCA9PT0gMCA/IG51bGwgOiBTdHJpbmcocG9ydCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBqYXZhUHJvY2VzcyA9IGNhbGxDb3JlKFxuICAgICAgICAgICAgY21kLFxuICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFN0dWI6IEV4aXRlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChtZXNzYWdlLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5kZXhPZihmcmVlUG9ydE1lc3NhZ2UpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFBvcnQgPSBwYXJzZWRQb3J0ID8/IG1lc3NhZ2Uuc3BsaXQoYCR7ZnJlZVBvcnRNZXNzYWdlfTpgKVsxXS50cmltKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLmluZGV4T2Yoc3R1YlNlcnZpbmdNZXNzYWdlKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHViSW5mbyA9IG1lc3NhZ2Uuc3BsaXQoc3R1YlNlcnZpbmdNZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmxlbmd0aCA8IDIpIHJlamVjdCgnQ2Fubm90IGRldGVybWluZSB1cmwgZnJvbSBzdHViIG91dHB1dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R1YiA9IHBhcnNlU3R1Yk91dHB1dChzdHViSW5mbywgcGFyc2VkUG9ydCwgamF2YVByb2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3R1Yik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJlamVjdChleHRyYWN0RXJyb3JNZXNzYWdlKGUpKTsgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5kZXhPZignQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVycm9yTWVzc2FnZShlcnJvcjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKGVycm9yKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHViT3V0cHV0KFxuICAgIHN0dWJJbmZvOiBzdHJpbmdbXSxcbiAgICBwYXJzZWRQb3J0OiBzdHJpbmcgfCBudWxsLFxuICAgIGphdmFQcm9jZXNzOiBDaGlsZFByb2Nlc3Ncbik6IFN0dWIge1xuICAgIGNvbnN0IHVybCA9IHN0dWJJbmZvWzBdLnRyaW0oKTtcbiAgICBjb25zdCB1cmxJbmZvID0gL1xcYiguKj8pOlxcL1xcLyguKj8pOj8oWzAtOV0rKT8oXFwvLiopPyQvLmV4ZWModXJsKTtcblxuICAgIGlmICh1cmxJbmZvID09PSBudWxsIHx8ICF1cmxJbmZvWzFdIHx8ICF1cmxJbmZvWzJdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgaG9zdCBhbmQgcG9ydCBmcm9tIHN0dWIgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSB1cmxJbmZvWzFdO1xuICAgIGNvbnN0IGhvc3QgPSB1cmxJbmZvWzJdO1xuICAgIGNvbnN0IHJlZ2V4UG9ydCA9IHVybEluZm9bM107XG4gICAgY29uc3QgcGF0aCA9IHVybEluZm9bNF0gfHwgXCJcIjtcbiAgICBjb25zdCBkZWZhdWx0UG9ydCA9IHByb3RvY29sID09PSAnaHR0cCcgPyAnODAnIDogcHJvdG9jb2wgPT09ICdodHRwcycgPyAnNDQzJyA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBmaW5hbFBvcnQgPSBwYXJzZWRQb3J0ID8/IHJlZ2V4UG9ydCA/PyBkZWZhdWx0UG9ydDtcblxuICAgIGlmICghZmluYWxQb3J0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgcG9ydCBmcm9tIHN0dWIgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9ydE51bWJlciA9IE51bWJlci5wYXJzZUludChmaW5hbFBvcnQsIDEwKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBvcnROdW1iZXIpIHx8IHBvcnROdW1iZXIgPD0gMCB8fCBwb3J0TnVtYmVyID4gNjU1MzUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3J0OiAke2ZpbmFsUG9ydH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5hbFVybCA9IGAke3Byb3RvY29sfTovLyR7aG9zdH06JHtmaW5hbFBvcnR9JHtwYXRofWA7XG4gICAgcmV0dXJuIG5ldyBTdHViKGhvc3QsIE51bWJlci5wYXJzZUludChmaW5hbFBvcnQpLCBmaW5hbFVybCwgamF2YVByb2Nlc3MpO1xufVxuXG5jb25zdCBzdG9wU3R1YiA9IGFzeW5jIChzdHViOiBTdHViKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBTdG9wcGluZyBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxuICAgIGNvbnN0IGphdmFQcm9jZXNzID0gc3R1Yi5wcm9jZXNzXG4gICAgamF2YVByb2Nlc3Muc3Rkb3V0Py5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgIGphdmFQcm9jZXNzLnN0ZGVycj8ucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICBqYXZhUHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJylcbiAgICBsb2dnZXIuZGVidWcoJ1RyeWluZyB0byBzdG9wIHN0dWIgcHJvY2VzcyBncmFjZWZ1bGx5IC4uLicpXG4gICAgYXdhaXQgZ3JhY2VmdWxTaHV0ZG93bihqYXZhUHJvY2VzcylcbiAgICBsb2dnZXIuZGVidWcoJ0NvbXBsZXRlZCBncmFjZWZ1bCB0ZXJtaW5hdGlvbiBvZiB0aGUgc3R1YiBwcm9jZXNzJylcbiAgICBsb2dnZXIuaW5mbyhgU3R1YjogU3RvcHBlZCBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxufVxuXG5jb25zdCB0ZXN0V2l0aEFwaUNvdmVyYWdlID0gYXN5bmMgKFxuICAgIGV4cHJlc3NBcHA6IGFueSxcbiAgICBob3N0Pzogc3RyaW5nLFxuICAgIHBvcnQ/OiBudW1iZXIsXG4gICAgY29udHJhY3RQYXRoPzogc3RyaW5nLFxuICAgIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4pOiBQcm9taXNlPHsgW2s6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBhcGlDb3ZlcmFnZVNlcnZlciA9IGF3YWl0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIoZXhwcmVzc0FwcClcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRlc3QoaG9zdCwgcG9ydCwgY29udHJhY3RQYXRoLCBhcmdzKVxuICAgICAgICBhcGlDb3ZlcmFnZVNlcnZlci5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgdGVzdCA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBjb250cmFjdFBhdGg/OiBzdHJpbmcsIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx7IFtrOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IHNwZWNzUGF0aCA9IHBhdGgucmVzb2x2ZShjb250cmFjdFBhdGggKyAnJylcblxuICAgIGNvbnN0IGNtZCA9IFtgdGVzdGBdXG4gICAgaWYgKGNvbnRyYWN0UGF0aCkgY21kLnB1c2goc3BlY3NQYXRoKVxuICAgIGNtZC5wdXNoKCctLWp1bml0UmVwb3J0RGlyPWRpc3QvdGVzdC1yZXBvcnQnKVxuICAgIGlmIChob3N0KSBjbWQucHVzaChgLS1ob3N0PSR7aG9zdH1gKVxuICAgIGlmIChwb3J0KSBjbWQucHVzaChgLS1wb3J0PSR7cG9ydH1gKVxuICAgIGlmIChhcmdzKSBjbWQucHVzaCguLi5hcmdzLm1hcChhcmcgPT4gU3RyaW5nKGFyZykpKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1Rlc3Q6IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgVGVzdDogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgY29uc3QgcmVwb3J0RGlyID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0JylcbiAgICBmcy5ybVN5bmMocmVwb3J0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICBjYWxsQ29yZShcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIGxvZ2dlci5lcnJvcihgVGVzdDogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSB0ZXN0Q2FzZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbHVyZSA9IHRlc3RDYXNlcy5maWx0ZXIoKHRlc3RjYXNlOiB7IFtpZDogc3RyaW5nXTogYW55IH0pID0+IHRlc3RjYXNlWydmYWlsdXJlJ10gfHwgdGVzdGNhc2VbJ3NraXBwZWQnXSkubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IHRvdGFsIC0gZmFpbHVyZVxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7IHRvdGFsLCBzdWNjZXNzLCBmYWlsdXJlIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdBUEkgQ09WRVJBR0UgU1VNTUFSWScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSkgLy9Mb2cgYWx3YXlzIGZvciBhbGwgbG9nIGxldmVsc1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcltlcnJvciA/ICdlcnJvcicgOiAnZGVidWcnXShgVGVzdDogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuY29uc3Qgc2hvd1Rlc3RSZXN1bHRzID0gKHRlc3RGbjogKG5hbWU6IHN0cmluZywgY2I6ICgpID0+IHZvaWQpID0+IHZvaWQpID0+IHtcbiAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgdGVzdENhc2VzLm1hcChmdW5jdGlvbiAodGVzdGNhc2U6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICB2YXIgbmFtZSA9ICdObyBOYW1lJ1xuICAgICAgICBpZiAodGVzdGNhc2VbJ3N5c3RlbS1vdXQnXSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZVRlbXBBcnIgPSB0ZXN0Y2FzZVsnc3lzdGVtLW91dCddXG4gICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJycpXG4gICAgICAgICAgICAgICAgLnNwbGl0KC9kaXNwbGF5LW5hbWU6LipTY2VuYXJpbzogLylcbiAgICAgICAgICAgIGlmIChuYW1lVGVtcEFyci5sZW5ndGggPiAxKSBuYW1lID0gbmFtZVRlbXBBcnJbMV0udHJpbSgpXG4gICAgICAgIH1cbiAgICAgICAgdGVzdEZuKG5hbWUsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0Y2FzZS5mYWlsdXJlIHx8IHRlc3RjYXNlLnNraXBwZWQpIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBwYXNzJylcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbnMgPSAoc3R1YlBhdGg6IHN0cmluZywgc3R1YlNlcnZlckJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzdHViUmVzcG9uc2UgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShzdHViUGF0aCkpXG4gICAgcmV0dXJuIHNldEV4cGVjdGF0aW9uSnNvbihzdHViUmVzcG9uc2UsIHN0dWJTZXJ2ZXJCYXNlVXJsKVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbkpzb24gPSAoc3R1YlJlc3BvbnNlOiBhbnksIHN0dWJTZXJ2ZXJCYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgc3R1YlNlcnZlckJhc2VVcmwgPSBzdHViU2VydmVyQmFzZVVybCB8fCAnaHR0cDovL2xvY2FsaG9zdDo5MDAwJ1xuXG4gICAgbG9nZ2VyLmluZm8oYFNldCBFeHBlY3RhdGlvbnM6IFN0dWIgdXJsIGlzICR7c3R1YlNlcnZlckJhc2VVcmx9YClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zXG4gICAgICAgICAgICAucG9zdChgJHtzdHViU2VydmVyQmFzZVVybH0vX3NwZWNtYXRpYy9leHBlY3RhdGlvbnNgLCBzdHViUmVzcG9uc2UpXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBTZXQgRXhwZWN0YXRpb25zOiAke3Jlc3BvbnNlLmRhdGF9YClcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU2V0IEV4cGVjdGF0aW9uczogRmluaXNoZWQnKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UgPSBgU2V0IEV4cGVjdGF0aW9uczogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YFxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXNwb25zZSBkYXRhIGlzIGluIHRleHQgZm9ybWF0XG4gICAgICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIucmVzcG9uc2U/LmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAndGV4dC9wbGFpbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBhIGNoZWNrIHRvIGhhbmRsZSB0ZXh0IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IHR5cGVvZiBlcnIucmVzcG9uc2UuZGF0YSA9PT0gJ3N0cmluZycgPyBlcnIucmVzcG9uc2UuZGF0YSA6IFwiRXJyb3IgdGV4dCBub3QgYXZhaWxhYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UgKz0gYCAtICR7ZXJyb3JUZXh0fWA7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSB0ZXh0IGVycm9yIG1lc3NhZ2UuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgcmVqZWN0KHNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSlcbiAgICAgICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgcHJpbnRKYXJWZXJzaW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGNtZCA9IFtgLS12ZXJzaW9uYF1cbiAgICBsb2dnZXIuaW5mbygnUHJpbnQgSmFyIFZlcnNpb246IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgUHJpbnQgSmFyIFZlcnNpb246IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIGNhbGxDb3JlKFxuICAgICAgICBjbWQsXG4gICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgbG9nZ2VyLmVycm9yKGBQcmludCBKYXIgVmVyc2lvbjogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgfSxcbiAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIGxvZ2dlci5lcnJvcihgUHJpbnQgSmFyIFZlcnNpb246ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgZWxzZSBjb25zb2xlLmxvZyhgJHttZXNzYWdlfWApXG4gICAgICAgIH1cbiAgICApXG59XG5cbmNvbnN0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIgPSAoZXhwcmVzc0FwcDogYW55KTogUHJvbWlzZTxodHRwLlNlcnZlcj4gPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgUmVnaXN0ZXJpbmcgQVBJIGVuZHBvaW50IGZvciBjb3ZlcmFnZWApXG4gICAgbGV0IGFwcCA9IGh0dHAuY3JlYXRlU2VydmVyKChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9KVxuICAgICAgICBjb25zdCBlbmRQb2ludHMgPSBKU09OLnN0cmluZ2lmeShleHRyYWN0RW5kUG9pbnRzKGV4cHJlc3NBcHApKVxuICAgICAgICBsb2dnZXIuZGVidWcoYEVuZHBvaW50czogJHtlbmRQb2ludHN9YClcbiAgICAgICAgcmVzLmVuZChlbmRQb2ludHMpXG4gICAgfSlcbiAgICByZXR1cm4gbmV3IFByb21pc2U8aHR0cC5TZXJ2ZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXBwLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHN0YXJ0aW5nIGVuZCBwb2ludHMgc2VydmVyIGZvciBhcGkgY292ZXJhZ2UnLCBlcnIpXG4gICAgICAgICAgICByZWplY3QoJ0Vycm9yIHdoaWxlIHN0YXJ0aW5nIGVuZCBwb2ludHMgc2VydmVyIGZvciBhcGkgY292ZXJhZ2UnKVxuICAgICAgICB9KVxuICAgICAgICBhcHAubGlzdGVuKHsgaG9zdDogJzEyNy4wLjAuMScsIHBvcnQ6IDAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IGFwcC5hZGRyZXNzKCkgYXMgQWRkcmVzc0luZm8gfCBudWxsXG4gICAgICAgICAgICBwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ10gPSBgaHR0cDovLyR7YWRkcmVzcz8uYWRkcmVzc306JHthZGRyZXNzPy5wb3J0fWBcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBFbmRwb2ludHMgQVBJIHJlZ2lzdGVyZWQgYXQgJHtwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ119YClcbiAgICAgICAgICAgIHJlc29sdmUoYXBwKVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHBhcnNlSnVuaXRYTUwgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVwb3J0UGF0aCA9IHBhdGgucmVzb2x2ZSgnZGlzdC90ZXN0LXJlcG9ydC9URVNULWp1bml0LWp1cGl0ZXIueG1sJylcbiAgICB2YXIgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhyZXBvcnRQYXRoKVxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBYTUxQYXJzZXIoKVxuICAgIHZhciByZXN1bHRYbWwgPSBwYXJzZXIucGFyc2UoZGF0YSlcbiAgICByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlID0gQXJyYXkuaXNBcnJheShyZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlKSA/IHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UgOiBbcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZV1cbiAgICByZXR1cm4gcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZVxufVxuXG5jb25zdCBsaXN0RW5kUG9pbnRzID0gKGV4cHJlc3NBcHA6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9PiB7XG4gICAgY29uc3QgZGV0YWlscyA9IGxpc3RFeHByZXNzRW5kcG9pbnRzKGV4cHJlc3NBcHApXG4gICAgbGV0IGVuZFBvaW50czogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge31cbiAgICBkZXRhaWxzLm1hcChhcGlEZXRhaWwgPT4ge1xuICAgICAgICBlbmRQb2ludHNbYXBpRGV0YWlsLnBhdGhdID0gYXBpRGV0YWlsLm1ldGhvZHNcbiAgICB9KVxuICAgIGRlbGV0ZSBlbmRQb2ludHNbJyonXVxuICAgIHJldHVybiBlbmRQb2ludHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVuZFBvaW50cyhleHByZXNzQXBwOiBhbnkpIHtcbiAgICBsZXQgZW5kUG9pbnRzID0gbGlzdEVuZFBvaW50cyhleHByZXNzQXBwKVxuICAgIGxldCBzcHJpbmdBY3R1YXRvclBheWxvYWQgPSB7XG4gICAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbjoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJTZXJ2bGV0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlclNlcnZsZXQ6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH1cbiAgICBPYmplY3Qua2V5cyhlbmRQb2ludHMpXG4gICAgICAgIC5zb3J0KClcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIHNwcmluZ0FjdHVhdG9yUGF5bG9hZC5jb250ZXh0cy5hcHBsaWNhdGlvbi5tYXBwaW5ncy5kaXNwYXRjaGVyU2VydmxldHMuZGlzcGF0Y2hlclNlcnZsZXQucHVzaCh7XG4gICAgICAgICAgICAgICAgZGV0YWlsczoge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHM6IGVuZFBvaW50c1twYXRoXS5zb3J0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuczogW2NvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4KHBhdGgpXS5tYXAocmVtb3ZlUmVnZXhGcm9tUGF0aClcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSBhcyBuZXZlcilcbiAgICAgICAgfSlcbiAgICByZXR1cm4gc3ByaW5nQWN0dWF0b3JQYXlsb2FkXG59XG5cbmNvbnN0IGNvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4ID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzooW14vXSspL2csICd7JDF9JykucmVwbGFjZSgvXFxcXC9nLCAnJylcbn1cblxuY29uc3QgcmVtb3ZlUmVnZXhGcm9tUGF0aCA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXChbXigpXSpcXCkvZywgJycpXG59XG5cbmV4cG9ydCB7IHN0YXJ0U3R1Yiwgc3RvcFN0dWIsIHRlc3QsIHRlc3RXaXRoQXBpQ292ZXJhZ2UsIHNldEV4cGVjdGF0aW9ucywgc2V0RXhwZWN0YXRpb25Kc29uLCBwcmludEphclZlcnNpb24sIHNob3dUZXN0UmVzdWx0cyB9XG5leHBvcnQgeyBzdGFydEFwaUNvdmVyYWdlU2VydmVyIH1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsR0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0scUJBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLEtBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFRLGNBQUEsR0FBQVIsT0FBQTtBQUFrRCxTQUFBRCx1QkFBQVUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUsUUFBQUMsQ0FBQSxzQ0FBQUQsT0FBQSx3QkFBQUUsTUFBQSx1QkFBQUEsTUFBQSxDQUFBQyxRQUFBLGFBQUFGLENBQUEsa0JBQUFBLENBQUEsZ0JBQUFBLENBQUEsV0FBQUEsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRCxDQUFBLENBQUFHLFdBQUEsS0FBQUYsTUFBQSxJQUFBRCxDQUFBLEtBQUFDLE1B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
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.gracefulShutdown = void 0;
|
|
8
7
|
var _logger = _interopRequireDefault(require("../common/logger"));
|
|
9
8
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
10
|
-
function
|
|
9
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
10
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
11
11
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
12
12
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
13
13
|
var kill = require('tree-kill');
|
|
14
14
|
var gracefulShutdown = exports.gracefulShutdown = /*#__PURE__*/function () {
|
|
15
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/
|
|
16
|
-
return
|
|
17
|
-
while (1) switch (_context.
|
|
15
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(javaProcess) {
|
|
16
|
+
return _regenerator().w(function (_context) {
|
|
17
|
+
while (1) switch (_context.n) {
|
|
18
18
|
case 0:
|
|
19
|
-
return _context.
|
|
19
|
+
return _context.a(2, new Promise(function (resolve, reject) {
|
|
20
20
|
_logger["default"].info('Sending SIGTERM to stop stub process');
|
|
21
21
|
kill(javaProcess.pid, 'SIGTERM', function (err) {
|
|
22
22
|
if (err) {
|
|
@@ -28,9 +28,6 @@ var gracefulShutdown = exports.gracefulShutdown = /*#__PURE__*/function () {
|
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
30
|
}));
|
|
31
|
-
case 1:
|
|
32
|
-
case "end":
|
|
33
|
-
return _context.stop();
|
|
34
31
|
}
|
|
35
32
|
}, _callee);
|
|
36
33
|
}));
|
|
@@ -38,4 +35,4 @@ var gracefulShutdown = exports.gracefulShutdown = /*#__PURE__*/function () {
|
|
|
38
35
|
return _ref.apply(this, arguments);
|
|
39
36
|
};
|
|
40
37
|
}();
|
|
41
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsImtpbGwiLCJncmFjZWZ1bFNodXRkb3duIiwiZXhwb3J0cyIsIl9yZWYiLCJfY2FsbGVlIiwiamF2YVByb2Nlc3MiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicmVqZWN0IiwibG9nZ2VyIiwiaW5mbyIsInBpZCIsImVyciIsImRlYnVnIiwiX3giXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9zaHV0ZG93blV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IG5vZGVQcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgdGVybWluYXRlIGZyb20gJ3Rlcm1pbmF0ZS9wcm9taXNlJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vY29tbW9uL2xvZ2dlcidcbmNvbnN0IGtpbGwgPSByZXF1aXJlKCd0cmVlLWtpbGwnKTtcblxuZXhwb3J0IGNvbnN0IGdyYWNlZnVsU2h1dGRvd24gPSBhc3luYyBmdW5jdGlvbiAoamF2YVByb2Nlc3M6IENoaWxkUHJvY2Vzcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdTZW5kaW5nIFNJR1RFUk0gdG8gc3RvcCBzdHViIHByb2Nlc3MnKVxuICAgICAgICBraWxsKGphdmFQcm9jZXNzLnBpZCwgJ1NJR1RFUk0nLCAoZXJyOkVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZihlcnIpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBzZW5kIFNJR1RFUk0gdG8gc3R1YiBwcm9jZXNzIHRyZWU6JywgZXJyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnU0lHVEVSTSBzZW50IHN1Y2Nlc3NmdWxseSB0byBzdHViIHByb2Nlc3MgdHJlZScpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUFxQyxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUsb0JBQUEsa0JBRnJDLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBRixDQUFBLFNBQUFHLENBQUEsRUFBQUgsQ0FBQSxPQUFBSSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFILENBQUEsRUFBQUksQ0FBQSxJQUFBRCxDQUFBLENBQUFILENBQUEsSUFBQUksQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFB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
|
|
38
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsIl9yZWdlbmVyYXRvciIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJraWxsIiwiZ3JhY2VmdWxTaHV0ZG93biIsImV4cG9ydHMiLCJfcmVmIiwiX2NhbGxlZSIsImphdmFQcm9jZXNzIiwiX2NvbnRleHQiLCJyZWplY3QiLCJsb2dnZXIiLCJpbmZvIiwicGlkIiwiZXJyIiwiZGVidWciLCJfeCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3NodXRkb3duVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgbm9kZVByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB0ZXJtaW5hdGUgZnJvbSAndGVybWluYXRlL3Byb21pc2UnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJ1xuY29uc3Qga2lsbCA9IHJlcXVpcmUoJ3RyZWUta2lsbCcpO1xuXG5leHBvcnQgY29uc3QgZ3JhY2VmdWxTaHV0ZG93biA9IGFzeW5jIGZ1bmN0aW9uIChqYXZhUHJvY2VzczogQ2hpbGRQcm9jZXNzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1NlbmRpbmcgU0lHVEVSTSB0byBzdG9wIHN0dWIgcHJvY2VzcycpXG4gICAgICAgIGtpbGwoamF2YVByb2Nlc3MucGlkLCAnU0lHVEVSTScsIChlcnI6RXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmKGVycikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIHNlbmQgU0lHVEVSTSB0byBzdHViIHByb2Nlc3MgdHJlZTonLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdTSUdURVJNIHNlbnQgc3VjY2Vzc2Z1bGx5IHRvIHN0dWIgcHJvY2VzcyB0cmVlJyk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBcUMsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUFBLFNBQUFFLGFBQUEsSUFGckMsdUtBQUFGLENBQUEsRUFBQUcsQ0FBQSxFQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFB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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specmatic",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"specmaticVersion": "2.
|
|
3
|
+
"version": "2.27.0",
|
|
4
|
+
"specmaticVersion": "2.27.0",
|
|
5
5
|
"description": "Node wrapper for Specmatic",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"scripts": {
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"logLevel": "debug"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"axios": "^1.7.7",
|
|
48
47
|
"fast-xml-parser": "^4.5.0",
|
|
48
|
+
"shell-quote": "^1.8.3",
|
|
49
49
|
"terminate": "^2.8.0",
|
|
50
50
|
"tree-kill": "^1.2.2",
|
|
51
51
|
"winston": "^3.14.2"
|
|
@@ -60,11 +60,13 @@
|
|
|
60
60
|
"@types/jest": "^29.5.13",
|
|
61
61
|
"@types/jest-when": "^3.5.5",
|
|
62
62
|
"@types/node": "^22.7.2",
|
|
63
|
+
"@types/shell-quote": "^1.7.5",
|
|
63
64
|
"@types/supertest": "^6.0.2",
|
|
65
|
+
"axios": "^1.12.2",
|
|
64
66
|
"express": "^4.21.0",
|
|
65
67
|
"jest": "^29.7.0",
|
|
66
68
|
"jest-extended": "^6.0.0",
|
|
67
|
-
"jest-mock-extended": "^
|
|
69
|
+
"jest-mock-extended": "^4.0.0",
|
|
68
70
|
"jest-when": "^3.6.0",
|
|
69
71
|
"rimraf": "^6.0.1",
|
|
70
72
|
"supertest": "^7.0.0",
|
package/specmatic.jar
CHANGED
|
Binary file
|
|
@@ -8,6 +8,7 @@ import { Readable } from 'stream';
|
|
|
8
8
|
|
|
9
9
|
jest.mock('child_process');
|
|
10
10
|
|
|
11
|
+
const mockSpawn = spawn as jest.MockedFunction<typeof spawn>;
|
|
11
12
|
const javaProcessMock = jestMock<ChildProcess>();
|
|
12
13
|
const readableMock = jestMock<Readable>();
|
|
13
14
|
javaProcessMock.stdout = readableMock;
|
|
@@ -18,12 +19,96 @@ beforeEach(() => {
|
|
|
18
19
|
});
|
|
19
20
|
|
|
20
21
|
test('passes arguments to the jar', async () => {
|
|
21
|
-
|
|
22
|
+
mockSpawn.mockReturnValue(javaProcessMock);
|
|
22
23
|
|
|
23
24
|
jest.spyOn(fs, 'existsSync').mockReturnValue(true);
|
|
24
|
-
const testArgs = ['test', '--testBaseURL', 'http://localhost:9000', `--filter=PATH='/todos/add' || STATUS='404'`, '--foo=bar', 1, 2];
|
|
25
|
+
const testArgs = ['test', '--testBaseURL', 'http://localhost:9000', `--filter=PATH='/todos/add' || STATUS='404'`, '--foo=bar', '1', '2'];
|
|
25
26
|
callSpecmaticCli(testArgs);
|
|
26
27
|
const specmaticJarPath = path.resolve(__dirname, '..', '..', '..', specmaticCoreJarName);
|
|
27
|
-
expect(
|
|
28
|
-
expect(
|
|
28
|
+
expect(mockSpawn.mock.calls[0][0]).toBe(`java`);
|
|
29
|
+
expect(mockSpawn.mock.calls[0][1]).toEqual([`-jar`, path.resolve(specmaticJarPath), `test`, `--testBaseURL`, `http://localhost:9000`, `--filter=PATH='/todos/add' || STATUS='404'`, `--foo=bar`, `1`, `2`]);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('parses JAVA_OPTS and stops at shell operators', async () => {
|
|
33
|
+
mockSpawn.mockReturnValue(javaProcessMock);
|
|
34
|
+
jest.spyOn(fs, 'existsSync').mockReturnValue(true);
|
|
35
|
+
|
|
36
|
+
// Set JAVA_OPTS with shell operators
|
|
37
|
+
const originalJavaOpts = process.env.JAVA_OPTS;
|
|
38
|
+
process.env.JAVA_OPTS = '-Xmx1024m -Dtest=value > output.log';
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
callSpecmaticCli(['test']);
|
|
42
|
+
const specmaticJarPath = path.resolve(__dirname, '..', '..', '..', specmaticCoreJarName);
|
|
43
|
+
|
|
44
|
+
// Should only include JVM args before the shell operator
|
|
45
|
+
expect(mockSpawn.mock.calls[0][1]).toEqual([
|
|
46
|
+
'-Xmx1024m',
|
|
47
|
+
'-Dtest=value',
|
|
48
|
+
'-jar',
|
|
49
|
+
path.resolve(specmaticJarPath),
|
|
50
|
+
'test'
|
|
51
|
+
]);
|
|
52
|
+
} finally {
|
|
53
|
+
// Restore original JAVA_OPTS
|
|
54
|
+
if (originalJavaOpts !== undefined) {
|
|
55
|
+
process.env.JAVA_OPTS = originalJavaOpts;
|
|
56
|
+
} else {
|
|
57
|
+
delete process.env.JAVA_OPTS;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test('parses JAVA_OPTS with quotes and stops at comments', async () => {
|
|
63
|
+
mockSpawn.mockReturnValue(javaProcessMock);
|
|
64
|
+
jest.spyOn(fs, 'existsSync').mockReturnValue(true);
|
|
65
|
+
|
|
66
|
+
const originalJavaOpts = process.env.JAVA_OPTS;
|
|
67
|
+
process.env.JAVA_OPTS = '-Xmx512m -Dmy.prop="quoted value" # this is a comment';
|
|
68
|
+
|
|
69
|
+
try {
|
|
70
|
+
callSpecmaticCli(['test']);
|
|
71
|
+
const specmaticJarPath = path.resolve(__dirname, '..', '..', '..', specmaticCoreJarName);
|
|
72
|
+
|
|
73
|
+
// Should only include JVM args before the comment
|
|
74
|
+
expect(mockSpawn.mock.calls[0][1]).toEqual([
|
|
75
|
+
'-Xmx512m',
|
|
76
|
+
'-Dmy.prop=quoted value',
|
|
77
|
+
'-jar',
|
|
78
|
+
path.resolve(specmaticJarPath),
|
|
79
|
+
'test'
|
|
80
|
+
]);
|
|
81
|
+
} finally {
|
|
82
|
+
if (originalJavaOpts !== undefined) {
|
|
83
|
+
process.env.JAVA_OPTS = originalJavaOpts;
|
|
84
|
+
} else {
|
|
85
|
+
delete process.env.JAVA_OPTS;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test('handles empty JAVA_OPTS', async () => {
|
|
91
|
+
mockSpawn.mockReturnValue(javaProcessMock);
|
|
92
|
+
jest.spyOn(fs, 'existsSync').mockReturnValue(true);
|
|
93
|
+
|
|
94
|
+
const originalJavaOpts = process.env.JAVA_OPTS;
|
|
95
|
+
process.env.JAVA_OPTS = '';
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
callSpecmaticCli(['test']);
|
|
99
|
+
const specmaticJarPath = path.resolve(__dirname, '..', '..', '..', specmaticCoreJarName);
|
|
100
|
+
|
|
101
|
+
// Should only include the jar and test args (no JVM args)
|
|
102
|
+
expect(mockSpawn.mock.calls[0][1]).toEqual([
|
|
103
|
+
'-jar',
|
|
104
|
+
path.resolve(specmaticJarPath),
|
|
105
|
+
'test'
|
|
106
|
+
]);
|
|
107
|
+
} finally {
|
|
108
|
+
if (originalJavaOpts !== undefined) {
|
|
109
|
+
process.env.JAVA_OPTS = originalJavaOpts;
|
|
110
|
+
} else {
|
|
111
|
+
delete process.env.JAVA_OPTS;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
29
114
|
});
|
package/src/bin/command.line.ts
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
|
+
import { parse } from 'shell-quote';
|
|
1
2
|
import logger from '../common/logger'
|
|
2
3
|
import { callCore} from '../common/runner'
|
|
3
4
|
|
|
4
5
|
const callSpecmaticCli = (argsv?: string[]) => {
|
|
5
6
|
const args = argsv || process.argv.slice(2);
|
|
7
|
+
|
|
8
|
+
// Parse JAVA_OPTS and take only string arguments from the beginning until we hit a non-string
|
|
9
|
+
const parsedArgs = parse(process.env.JAVA_OPTS || '');
|
|
10
|
+
const jvmArgs: string[] = [];
|
|
11
|
+
for (const arg of parsedArgs) {
|
|
12
|
+
if (typeof arg === 'string') {
|
|
13
|
+
jvmArgs.push(arg);
|
|
14
|
+
} else {
|
|
15
|
+
// Stop processing when we encounter a non-string (shell operator, comment, etc.)
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
6
20
|
callCore(
|
|
7
21
|
args,
|
|
8
22
|
(err?: any) => {
|
|
@@ -16,7 +30,8 @@ const callSpecmaticCli = (argsv?: string[]) => {
|
|
|
16
30
|
},
|
|
17
31
|
message => {
|
|
18
32
|
console.log(`${message}`)
|
|
19
|
-
}
|
|
33
|
+
},
|
|
34
|
+
jvmArgs
|
|
20
35
|
);
|
|
21
36
|
}
|
|
22
37
|
|
package/src/common/runner.ts
CHANGED
|
@@ -4,14 +4,14 @@ import { specmaticCoreJarName } from '../config';
|
|
|
4
4
|
import logger from '../common/logger';
|
|
5
5
|
import { ChildProcess, exec, spawn, SpawnOptions } from 'child_process';
|
|
6
6
|
|
|
7
|
-
const callCore = (args: (string | number)[], done: (error: any) => void, onOutput: (message: string, error: boolean) => void): ChildProcess => {
|
|
7
|
+
const callCore = (args: (string | number)[], done: (error: any) => void, onOutput: (message: string, error: boolean) => void, jvmArgs: string[] = []): ChildProcess => {
|
|
8
8
|
const rootPath = path.resolve(__dirname, '..', '..');
|
|
9
9
|
const specmaticJarPath = path.resolve(rootPath, specmaticCoreJarName);
|
|
10
|
-
return callJar(specmaticJarPath, args, done, onOutput);
|
|
10
|
+
return callJar(specmaticJarPath, args, done, onOutput, jvmArgs);
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
function callJar(jarPath: string, args: (string | number)[], done: (error: any) => void, onOutput: (message: string, error: boolean) => void) {
|
|
14
|
-
const argsList: string[] = [];
|
|
13
|
+
function callJar(jarPath: string, args: (string | number)[], done: (error: any) => void, onOutput: (message: string, error: boolean) => void, jvmArgs: string[] = []): ChildProcess {
|
|
14
|
+
const argsList: string[] = [...jvmArgs];
|
|
15
15
|
if (process.env['endpointsAPI']) {
|
|
16
16
|
argsList.push(`-DendpointsAPI="${process.env['endpointsAPI']}"`);
|
|
17
17
|
}
|