@jsii/kernel 1.56.0 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api.d.ts +1 -0
- package/lib/api.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -1
- package/lib/kernel.d.ts +1 -0
- package/lib/kernel.js +1 -1
- package/lib/objects.d.ts +1 -0
- package/lib/objects.js +1 -1
- package/lib/on-exit.d.ts +1 -0
- package/lib/on-exit.js +1 -1
- package/{test → lib}/recording.d.ts +2 -1
- package/lib/recording.js +73 -0
- package/lib/serialization.d.ts +1 -0
- package/lib/serialization.js +1 -1
- package/package.json +8 -8
- package/test/kernel.test.d.ts +0 -1
- package/test/kernel.test.js +0 -1805
- package/test/objects.test.d.ts +0 -1
- package/test/objects.test.js +0 -20
- package/test/recording.js +0 -73
- package/test/serialization.test.d.ts +0 -1
- package/test/serialization.test.js +0 -93
package/test/objects.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/test/objects.test.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const objects_1 = require("../lib/objects");
|
|
4
|
-
const mockResolve = jest.fn();
|
|
5
|
-
test('can spread registered objects without consequences', () => {
|
|
6
|
-
const subject = new objects_1.ObjectTable(mockResolve);
|
|
7
|
-
const obj = { foo: 'bar', baz: 1337 };
|
|
8
|
-
const objRef = subject.registerObject(obj, 'Object');
|
|
9
|
-
const copy = { ...obj, foo: undefined, baz: undefined };
|
|
10
|
-
const copyRef = subject.registerObject(copy, 'Object');
|
|
11
|
-
expect(objRef).not.toEqual(copyRef);
|
|
12
|
-
});
|
|
13
|
-
test('registered objects have clean JSON.Stringify', () => {
|
|
14
|
-
const subject = new objects_1.ObjectTable(mockResolve);
|
|
15
|
-
const obj = { foo: 'bar', baz: 1337 };
|
|
16
|
-
const expected = JSON.stringify(obj);
|
|
17
|
-
subject.registerObject(obj, 'Object');
|
|
18
|
-
expect(JSON.stringify(obj)).toEqual(expected);
|
|
19
|
-
});
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib2JqZWN0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNENBQTZDO0FBRTdDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUU5QixJQUFJLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO0lBQzlELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU3QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXJELE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDeEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO0lBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU3QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RUYWJsZSB9IGZyb20gJy4uL2xpYi9vYmplY3RzJztcblxuY29uc3QgbW9ja1Jlc29sdmUgPSBqZXN0LmZuKCk7XG5cbnRlc3QoJ2NhbiBzcHJlYWQgcmVnaXN0ZXJlZCBvYmplY3RzIHdpdGhvdXQgY29uc2VxdWVuY2VzJywgKCkgPT4ge1xuICBjb25zdCBzdWJqZWN0ID0gbmV3IE9iamVjdFRhYmxlKG1vY2tSZXNvbHZlKTtcblxuICBjb25zdCBvYmogPSB7IGZvbzogJ2JhcicsIGJhejogMTMzNyB9O1xuICBjb25zdCBvYmpSZWYgPSBzdWJqZWN0LnJlZ2lzdGVyT2JqZWN0KG9iaiwgJ09iamVjdCcpO1xuXG4gIGNvbnN0IGNvcHkgPSB7IC4uLm9iaiwgZm9vOiB1bmRlZmluZWQsIGJhejogdW5kZWZpbmVkIH07XG4gIGNvbnN0IGNvcHlSZWYgPSBzdWJqZWN0LnJlZ2lzdGVyT2JqZWN0KGNvcHksICdPYmplY3QnKTtcblxuICBleHBlY3Qob2JqUmVmKS5ub3QudG9FcXVhbChjb3B5UmVmKTtcbn0pO1xuXG50ZXN0KCdyZWdpc3RlcmVkIG9iamVjdHMgaGF2ZSBjbGVhbiBKU09OLlN0cmluZ2lmeScsICgpID0+IHtcbiAgY29uc3Qgc3ViamVjdCA9IG5ldyBPYmplY3RUYWJsZShtb2NrUmVzb2x2ZSk7XG5cbiAgY29uc3Qgb2JqID0geyBmb286ICdiYXInLCBiYXo6IDEzMzcgfTtcbiAgY29uc3QgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShvYmopO1xuXG4gIHN1YmplY3QucmVnaXN0ZXJPYmplY3Qob2JqLCAnT2JqZWN0Jyk7XG5cbiAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iaikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xufSk7XG4iXX0=
|
package/test/recording.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.recordInteraction = exports.closeRecording = void 0;
|
|
4
|
-
const fs = require("fs-extra");
|
|
5
|
-
const lib_1 = require("../lib");
|
|
6
|
-
async function closeRecording(kernel) {
|
|
7
|
-
const logfile = kernel.logfile;
|
|
8
|
-
if (!logfile) {
|
|
9
|
-
return Promise.resolve();
|
|
10
|
-
}
|
|
11
|
-
logfile.end();
|
|
12
|
-
return new Promise((ok) => {
|
|
13
|
-
logfile.once('finish', () => {
|
|
14
|
-
ok();
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
exports.closeRecording = closeRecording;
|
|
19
|
-
/**
|
|
20
|
-
* Start recording all interaction with the kernel object.
|
|
21
|
-
*
|
|
22
|
-
* This method installs a proxy function for each public API in the kernel (methods that do not
|
|
23
|
-
* start with '_') and records input requests and output requests into JSON stream files.
|
|
24
|
-
*
|
|
25
|
-
* @param kernel The kernel object to record.
|
|
26
|
-
* @param inputLog Input log stream
|
|
27
|
-
* @param outputLog Output log stream.
|
|
28
|
-
*/
|
|
29
|
-
function recordInteraction(kernel, inputOutputLogPath) {
|
|
30
|
-
const logfile = fs.createWriteStream(inputOutputLogPath);
|
|
31
|
-
kernel.logfile = logfile;
|
|
32
|
-
Object.entries(Object.getOwnPropertyDescriptors(lib_1.Kernel.prototype))
|
|
33
|
-
.filter(([p, v]) => !p.startsWith('_') && typeof v.value === 'function')
|
|
34
|
-
.forEach(([api, old]) => {
|
|
35
|
-
Object.defineProperty(kernel, api, {
|
|
36
|
-
...old,
|
|
37
|
-
value(...args) {
|
|
38
|
-
logInput({ api, ...args[0] });
|
|
39
|
-
try {
|
|
40
|
-
const ret = old.value.apply(this, args);
|
|
41
|
-
// if this is an async function, wait for the promised value.
|
|
42
|
-
if (typeof (ret === null || ret === void 0 ? void 0 : ret.then) === 'function') {
|
|
43
|
-
return new Promise((ok, fail) => {
|
|
44
|
-
return ret
|
|
45
|
-
.then((value) => {
|
|
46
|
-
logOutput({ ok: value });
|
|
47
|
-
ok(value);
|
|
48
|
-
})
|
|
49
|
-
.catch((err) => {
|
|
50
|
-
logOutput({ error: err.message });
|
|
51
|
-
fail(err);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
logOutput({ ok: ret });
|
|
56
|
-
return ret;
|
|
57
|
-
}
|
|
58
|
-
catch (e) {
|
|
59
|
-
logOutput({ error: e.message });
|
|
60
|
-
throw e;
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
function logInput(obj) {
|
|
66
|
-
logfile.write(`> ${JSON.stringify(obj)}\n`);
|
|
67
|
-
}
|
|
68
|
-
function logOutput(obj) {
|
|
69
|
-
logfile.write(`< ${JSON.stringify(obj)}\n`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
exports.recordInteraction = recordInteraction;
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVjb3JkaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQixnQ0FBZ0M7QUFFekIsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUFjO0lBQ2pELE1BQU0sT0FBTyxHQUFvQixNQUFjLENBQUMsT0FBTyxDQUFDO0lBQ3hELElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDWixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMxQjtJQUVELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVkLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDMUIsRUFBRSxFQUFFLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWJELHdDQWFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsTUFBYyxFQUFFLGtCQUEwQjtJQUMxRSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN4RCxNQUFjLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUVsQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxZQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDL0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO1NBQ3ZFLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ2pDLEdBQUcsR0FBRztZQUNOLEtBQUssQ0FBQyxHQUFHLElBQVc7Z0JBQ2xCLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlCLElBQUk7b0JBQ0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUV4Qyw2REFBNkQ7b0JBQzdELElBQUksUUFBTyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSxDQUFBLEtBQUssVUFBVSxFQUFFO3dCQUNuQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFOzRCQUM5QixPQUFPLEdBQUc7aUNBQ1AsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0NBQ25CLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dDQUN6QixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ1osQ0FBQyxDQUFDO2lDQUNELEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dDQUNsQixTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0NBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDWixDQUFDLENBQUMsQ0FBQzt3QkFDUCxDQUFDLENBQUMsQ0FBQztxQkFDSjtvQkFFRCxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDdkIsT0FBTyxHQUFHLENBQUM7aUJBQ1o7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxNQUFNLENBQUMsQ0FBQztpQkFDVDtZQUNILENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVMLFNBQVMsUUFBUSxDQUFDLEdBQVE7UUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFRO1FBQ3pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0FBQ0gsQ0FBQztBQTlDRCw4Q0E4Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5cbmltcG9ydCB7IEtlcm5lbCB9IGZyb20gJy4uL2xpYic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVJlY29yZGluZyhrZXJuZWw6IEtlcm5lbCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBsb2dmaWxlOiBmcy5Xcml0ZVN0cmVhbSA9IChrZXJuZWwgYXMgYW55KS5sb2dmaWxlO1xuICBpZiAoIWxvZ2ZpbGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBsb2dmaWxlLmVuZCgpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHtcbiAgICBsb2dmaWxlLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIG9rKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHJlY29yZGluZyBhbGwgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsIG9iamVjdC5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpbnN0YWxscyBhIHByb3h5IGZ1bmN0aW9uIGZvciBlYWNoIHB1YmxpYyBBUEkgaW4gdGhlIGtlcm5lbCAobWV0aG9kcyB0aGF0IGRvIG5vdFxuICogc3RhcnQgd2l0aCAnXycpIGFuZCByZWNvcmRzIGlucHV0IHJlcXVlc3RzIGFuZCBvdXRwdXQgcmVxdWVzdHMgaW50byBKU09OIHN0cmVhbSBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ga2VybmVsIFRoZSBrZXJuZWwgb2JqZWN0IHRvIHJlY29yZC5cbiAqIEBwYXJhbSBpbnB1dExvZyBJbnB1dCBsb2cgc3RyZWFtXG4gKiBAcGFyYW0gb3V0cHV0TG9nIE91dHB1dCBsb2cgc3RyZWFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkSW50ZXJhY3Rpb24oa2VybmVsOiBLZXJuZWwsIGlucHV0T3V0cHV0TG9nUGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZ2ZpbGUgPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShpbnB1dE91dHB1dExvZ1BhdGgpO1xuICAoa2VybmVsIGFzIGFueSkubG9nZmlsZSA9IGxvZ2ZpbGU7XG5cbiAgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoS2VybmVsLnByb3RvdHlwZSkpXG4gICAgLmZpbHRlcigoW3AsIHZdKSA9PiAhcC5zdGFydHNXaXRoKCdfJykgJiYgdHlwZW9mIHYudmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICAgLmZvckVhY2goKFthcGksIG9sZF0pID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXJuZWwsIGFwaSwge1xuICAgICAgICAuLi5vbGQsXG4gICAgICAgIHZhbHVlKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgICAgbG9nSW5wdXQoeyBhcGksIC4uLmFyZ3NbMF0gfSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IG9sZC52YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBhc3luYyBmdW5jdGlvbiwgd2FpdCBmb3IgdGhlIHByb21pc2VkIHZhbHVlLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXQ/LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChvaywgZmFpbCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRcbiAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ091dHB1dCh7IG9rOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgb2sodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nT3V0cHV0KHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgICAgICAgICBmYWlsKGVycik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZ091dHB1dCh7IG9rOiByZXQgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZ091dHB1dCh7IGVycm9yOiBlLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIGxvZ0lucHV0KG9iajogYW55KSB7XG4gICAgbG9nZmlsZS53cml0ZShgPiAke0pTT04uc3RyaW5naWZ5KG9iail9XFxuYCk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2dPdXRwdXQob2JqOiBhbnkpIHtcbiAgICBsb2dmaWxlLndyaXRlKGA8ICR7SlNPTi5zdHJpbmdpZnkob2JqKX1cXG5gKTtcbiAgfVxufVxuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const spec_1 = require("@jsii/spec");
|
|
4
|
-
const api_1 = require("../lib/api");
|
|
5
|
-
const objects_1 = require("../lib/objects");
|
|
6
|
-
const serialization_1 = require("../lib/serialization");
|
|
7
|
-
const TYPE_ANY = { type: spec_1.CANONICAL_ANY };
|
|
8
|
-
const TYPE_BOOLEAN = {
|
|
9
|
-
type: { primitive: spec_1.PrimitiveType.Boolean },
|
|
10
|
-
};
|
|
11
|
-
const TYPE_NUMBER = {
|
|
12
|
-
type: { primitive: spec_1.PrimitiveType.Number },
|
|
13
|
-
};
|
|
14
|
-
const TYPE_STRING = {
|
|
15
|
-
type: { primitive: spec_1.PrimitiveType.String },
|
|
16
|
-
};
|
|
17
|
-
const TYPE_VOID = 'void';
|
|
18
|
-
const lookupType = jest
|
|
19
|
-
.fn()
|
|
20
|
-
.mockName('host.lookupType');
|
|
21
|
-
const host = {
|
|
22
|
-
debug: jest.fn().mockName('host.debug'),
|
|
23
|
-
findSymbol: jest.fn().mockName('host.findSymbol'),
|
|
24
|
-
lookupType,
|
|
25
|
-
objects: new objects_1.ObjectTable(lookupType),
|
|
26
|
-
recurse: jest.fn().mockName('host.recurse'),
|
|
27
|
-
};
|
|
28
|
-
describe("Any" /* Any */, () => {
|
|
29
|
-
const anySerializer = serialization_1.SERIALIZERS["Any" /* Any */];
|
|
30
|
-
class PrivateType {
|
|
31
|
-
constructor() {
|
|
32
|
-
this.randomValue = Math.random();
|
|
33
|
-
}
|
|
34
|
-
random() {
|
|
35
|
-
return this.randomValue;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
beforeEach((done) => {
|
|
39
|
-
host.recurse.mockImplementation((x, type) => {
|
|
40
|
-
expect(type).toEqual(TYPE_ANY);
|
|
41
|
-
return anySerializer.serialize(x, type, host);
|
|
42
|
-
});
|
|
43
|
-
done();
|
|
44
|
-
});
|
|
45
|
-
describe(anySerializer.serialize, () => {
|
|
46
|
-
test('by-value object literal', () => {
|
|
47
|
-
expect(anySerializer.serialize({ literal: { integer: 1337 } }, TYPE_ANY, host)).toEqual({ literal: { integer: 1337 } });
|
|
48
|
-
});
|
|
49
|
-
test('non-exported type instance', () => {
|
|
50
|
-
expect(anySerializer.serialize(new PrivateType(), TYPE_ANY, host)).toEqual({ [api_1.TOKEN_REF]: 'Object@10000' });
|
|
51
|
-
});
|
|
52
|
-
test('arrays', () => {
|
|
53
|
-
expect(anySerializer.serialize([{ literal: { integer: 1337 } }], TYPE_ANY, host)).toEqual([{ literal: { integer: 1337 } }]);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
describe("Scalar" /* Scalar */, () => {
|
|
58
|
-
const scalarSerializer = serialization_1.SERIALIZERS["Scalar" /* Scalar */];
|
|
59
|
-
describe(scalarSerializer.deserialize, () => {
|
|
60
|
-
describe('void', () => {
|
|
61
|
-
test('accepts undefined', () => expect(scalarSerializer.deserialize(undefined, TYPE_VOID, host)).toBeUndefined());
|
|
62
|
-
test('accepts null', () => expect(scalarSerializer.deserialize(null, TYPE_VOID, host)).toBeUndefined());
|
|
63
|
-
test('rejects any value', () => expect(() => scalarSerializer.deserialize('nothing!', TYPE_VOID, host)).toThrow(/Encountered unexpected `void` type/));
|
|
64
|
-
});
|
|
65
|
-
const scalarTypes = [
|
|
66
|
-
{ name: 'string', type: TYPE_STRING, validValues: ['This is a string!'] },
|
|
67
|
-
{
|
|
68
|
-
name: 'number',
|
|
69
|
-
type: TYPE_NUMBER,
|
|
70
|
-
validValues: [-1337, 0, Number.EPSILON],
|
|
71
|
-
},
|
|
72
|
-
{ name: 'boolean', type: TYPE_BOOLEAN, validValues: [true, false] },
|
|
73
|
-
];
|
|
74
|
-
for (const example of scalarTypes) {
|
|
75
|
-
describe(example.name, () => {
|
|
76
|
-
test('fails when provided an object', () => {
|
|
77
|
-
expect(() => scalarSerializer.deserialize({ 'this is not': `a ${example.name}` }, example.type, host)).toThrow(`Expected a ${example.name}, got {`);
|
|
78
|
-
});
|
|
79
|
-
for (const validValue of example.validValues) {
|
|
80
|
-
test(`accepts: ${validValue}`, () => expect(scalarSerializer.deserialize(validValue, example.type, host)).toBe(validValue));
|
|
81
|
-
}
|
|
82
|
-
const invalidValues = scalarTypes
|
|
83
|
-
.filter((t) => t.name !== example.name)
|
|
84
|
-
.map((t) => t.validValues)
|
|
85
|
-
.reduce((acc, elt) => [...acc, ...elt], new Array());
|
|
86
|
-
for (const invalidValue of invalidValues) {
|
|
87
|
-
test(`rejects: ${invalidValue}`, () => expect(() => scalarSerializer.deserialize(invalidValue, example.type, host)).toThrow(`Expected a ${example.name}, got ${JSON.stringify(invalidValue)} (${typeof invalidValue})`));
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VyaWFsaXphdGlvbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQXlFO0FBRXpFLG9DQUF1QztBQUN2Qyw0Q0FBNkM7QUFDN0Msd0RBSThCO0FBRTlCLE1BQU0sUUFBUSxHQUFrQixFQUFFLElBQUksRUFBRSxvQkFBYSxFQUFFLENBQUM7QUFDeEQsTUFBTSxZQUFZLEdBQWtCO0lBQ2xDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxvQkFBYSxDQUFDLE9BQU8sRUFBRTtDQUMzQyxDQUFDO0FBQ0YsTUFBTSxXQUFXLEdBQWtCO0lBQ2pDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxvQkFBYSxDQUFDLE1BQU0sRUFBRTtDQUMxQyxDQUFDO0FBQ0YsTUFBTSxXQUFXLEdBQWtCO0lBQ2pDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxvQkFBYSxDQUFDLE1BQU0sRUFBRTtDQUMxQyxDQUFDO0FBQ0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBRXpCLE1BQU0sVUFBVSxHQUFpQyxJQUFJO0tBQ2xELEVBQUUsRUFBRTtLQUNKLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sSUFBSSxHQUFtQjtJQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDakQsVUFBVTtJQUNWLE9BQU8sRUFBRSxJQUFJLHFCQUFXLENBQUMsVUFBVSxDQUFDO0lBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztDQUM1QyxDQUFDO0FBRUYsUUFBUSxrQkFBeUIsR0FBRyxFQUFFO0lBQ3BDLE1BQU0sYUFBYSxHQUFH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QUM7aUJBQ3ZCO2dCQUVELE1BQU0sYUFBYSxHQUFHLFdBQVc7cUJBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDO3FCQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7cUJBQ3pCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBTyxDQUFDLENBQUM7Z0JBQzVELEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO29CQUN4QyxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FDcEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDL0QsQ0FBQyxPQUFPLENBQ1AsY0FBYyxPQUFPLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQy9DLFlBQVksQ0FDYixLQUFLLE9BQU8sWUFBWSxHQUFHLENBQzdCLENBQUMsQ0FBQztpQkFDTjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0FOT05JQ0FMX0FOWSwgT3B0aW9uYWxWYWx1ZSwgUHJpbWl0aXZlVHlwZSB9IGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQgeyBUT0tFTl9SRUYgfSBmcm9tICcuLi9saWIvYXBpJztcbmltcG9ydCB7IE9iamVjdFRhYmxlIH0gZnJvbSAnLi4vbGliL29iamVjdHMnO1xuaW1wb3J0IHtcbiAgU2VyaWFsaXphdGlvbkNsYXNzLFxuICBTZXJpYWxpemVySG9zdCxcbiAgU0VSSUFMSVpFUlMsXG59IGZyb20gJy4uL2xpYi9zZXJpYWxpemF0aW9uJztcblxuY29uc3QgVFlQRV9BTlk6IE9wdGlvbmFsVmFsdWUgPSB7IHR5cGU6IENBTk9OSUNBTF9BTlkgfTtcbmNvbnN0IFRZUEVfQk9PTEVBTjogT3B0aW9uYWxWYWx1ZSA9IHtcbiAgdHlwZTogeyBwcmltaXRpdmU6IFByaW1pdGl2ZVR5cGUuQm9vbGVhbiB9LFxufTtcbmNvbnN0IFRZUEVfTlVNQkVSOiBPcHRpb25hbFZhbHVlID0ge1xuICB0eXBlOiB7IHByaW1pdGl2ZTogUHJpbWl0aXZlVHlwZS5OdW1iZXIgfSxcbn07XG5jb25zdCBUWVBFX1NUUklORzogT3B0aW9uYWxWYWx1ZSA9IHtcbiAgdHlwZTogeyBwcmltaXRpdmU6IFByaW1pdGl2ZVR5cGUuU3RyaW5nIH0sXG59O1xuY29uc3QgVFlQRV9WT0lEID0gJ3ZvaWQnO1xuXG5jb25zdCBsb29rdXBUeXBlOiBTZXJpYWxpemVySG9zdFsnbG9va3VwVHlwZSddID0gamVzdFxuICAuZm4oKVxuICAubW9ja05hbWUoJ2hvc3QubG9va3VwVHlwZScpO1xuY29uc3QgaG9zdDogU2VyaWFsaXplckhvc3QgPSB7XG4gIGRlYnVnOiBqZXN0LmZuKCkubW9ja05hbWUoJ2hvc3QuZGVidWcnKSxcbiAgZmluZFN5bWJvbDogamVzdC5mbigpLm1vY2tOYW1lKCdob3N0LmZpbmRTeW1ib2wnKSxcbiAgbG9va3VwVHlwZSxcbiAgb2JqZWN0czogbmV3IE9iamVjdFRhYmxlKGxvb2t1cFR5cGUpLFxuICByZWN1cnNlOiBqZXN0LmZuKCkubW9ja05hbWUoJ2hvc3QucmVjdXJzZScpLFxufTtcblxuZGVzY3JpYmUoU2VyaWFsaXphdGlvbkNsYXNzLkFueSwgKCkgPT4ge1xuICBjb25zdCBhbnlTZXJpYWxpemVyID0gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLkFueV07XG4gIGNsYXNzIFByaXZhdGVUeXBlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJhbmRvbVZhbHVlID0gTWF0aC5yYW5kb20oKTtcblxuICAgIHB1YmxpYyByYW5kb20oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYW5kb21WYWx1ZTtcbiAgICB9XG4gIH1cblxuICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgKGhvc3QucmVjdXJzZSBhcyBqZXN0Lk1vY2s8YW55LCBhbnk+KS5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICAoeDogYW55LCB0eXBlOiBPcHRpb25hbFZhbHVlKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlKS50b0VxdWFsKFRZUEVfQU5ZKTtcbiAgICAgICAgcmV0dXJuIGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHgsIHR5cGUsIGhvc3QpO1xuICAgICAgfSxcbiAgICApO1xuICAgIGRvbmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoYW55U2VyaWFsaXplci5zZXJpYWxpemUsICgpID0+IHtcbiAgICB0ZXN0KCdieS12YWx1ZSBvYmplY3QgbGl0ZXJhbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgYW55U2VyaWFsaXplci5zZXJpYWxpemUoeyBsaXRlcmFsOiB7IGludGVnZXI6IDEzMzcgfSB9LCBUWVBFX0FOWSwgaG9zdCksXG4gICAgICApLnRvRXF1YWwoeyBsaXRlcmFsOiB7IGludGVnZXI6IDEzMzcgfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ25vbi1leHBvcnRlZCB0eXBlIGluc3RhbmNlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgUHJpdmF0ZVR5cGUoKSwgVFlQRV9BTlksIGhvc3QpLFxuICAgICAgKS50b0VxdWFsKHsgW1RPS0VOX1JFRl06ICdPYmplY3RAMTAwMDAnIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYXJyYXlzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShcbiAgICAgICAgICBbeyBsaXRlcmFsOiB7IGludGVnZXI6IDEzMzcgfSB9XSxcbiAgICAgICAgICBUWVBFX0FOWSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApLFxuICAgICAgKS50b0VxdWFsKFt7IGxpdGVyYWw6IHsgaW50ZWdlcjogMTMzNyB9IH1dKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhciwgKCkgPT4ge1xuICBjb25zdCBzY2FsYXJTZXJpYWxpemVyID0gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhcl07XG5cbiAgZGVzY3JpYmUoc2NhbGFyU2VyaWFsaXplci5kZXNlcmlhbGl6ZSwgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCd2b2lkJywgKCkgPT4ge1xuICAgICAgdGVzdCgnYWNjZXB0cyB1bmRlZmluZWQnLCAoKSA9PlxuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgc2NhbGFyU2VyaWFsaXplci5kZXNlcmlhbGl6ZSh1bmRlZmluZWQsIFRZUEVfVk9JRCwgaG9zdCksXG4gICAgICAgICkudG9CZVVuZGVmaW5lZCgpKTtcblxuICAgICAgdGVzdCgnYWNjZXB0cyBudWxsJywgKCkgPT5cbiAgICAgICAgZXhwZWN0KFxuICAgICAgICAgIHNjYWxhclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobnVsbCwgVFlQRV9WT0lELCBob3N0KSxcbiAgICAgICAgKS50b0JlVW5kZWZpbmVkKCkpO1xuXG4gICAgICB0ZXN0KCdyZWplY3RzIGFueSB2YWx1ZScsICgpID0+XG4gICAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICAgIHNjYWxhclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoJ25vdGhpbmchJywgVFlQRV9WT0lELCBob3N0KSxcbiAgICAgICAgKS50b1Rocm93KC9FbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlLykpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NhbGFyVHlwZXMgPSBbXG4gICAgICB7IG5hbWU6ICdzdHJpbmcnLCB0eXBlOiBUWVBFX1NUUklORywgdmFsaWRWYWx1ZXM6IFsnVGhpcyBpcyBhIHN0cmluZyEnXSB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdHlwZTogVFlQRV9OVU1CRVIsXG4gICAgICAgIHZhbGlkVmFsdWVzOiBbLTEzMzcsIDAsIE51bWJlci5FUFNJTE9OXSxcbiAgICAgIH0sXG4gICAgICB7IG5hbWU6ICdib29sZWFuJywgdHlwZTogVFlQRV9CT09MRUFOLCB2YWxpZFZhbHVlczogW3RydWUsIGZhbHNlXSB9LFxuICAgIF07XG4gICAgZm9yIChjb25zdCBleGFtcGxlIG9mIHNjYWxhclR5cGVzKSB7XG4gICAgICBkZXNjcmliZShleGFtcGxlLm5hbWUsICgpID0+IHtcbiAgICAgICAgdGVzdCgnZmFpbHMgd2hlbiBwcm92aWRlZCBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICBzY2FsYXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKFxuICAgICAgICAgICAgICB7ICd0aGlzIGlzIG5vdCc6IGBhICR7ZXhhbXBsZS5uYW1lfWAgfSxcbiAgICAgICAgICAgICAgZXhhbXBsZS50eXBlLFxuICAgICAgICAgICAgICBob3N0LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLnRvVGhyb3coYEV4cGVjdGVkIGEgJHtleGFtcGxlLm5hbWV9LCBnb3Qge2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkVmFsdWUgb2YgZXhhbXBsZS52YWxpZFZhbHVlcykge1xuICAgICAgICAgIHRlc3QoYGFjY2VwdHM6ICR7dmFsaWRWYWx1ZX1gLCAoKSA9PlxuICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICBzY2FsYXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKHZhbGlkVmFsdWUsIGV4YW1wbGUudHlwZSwgaG9zdCksXG4gICAgICAgICAgICApLnRvQmUodmFsaWRWYWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlcyA9IHNjYWxhclR5cGVzXG4gICAgICAgICAgLmZpbHRlcigodCkgPT4gdC5uYW1lICE9PSBleGFtcGxlLm5hbWUpXG4gICAgICAgICAgLm1hcCgodCkgPT4gdC52YWxpZFZhbHVlcylcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGVsdCkgPT4gWy4uLmFjYywgLi4uZWx0XSwgbmV3IEFycmF5PGFueT4oKSk7XG4gICAgICAgIGZvciAoY29uc3QgaW52YWxpZFZhbHVlIG9mIGludmFsaWRWYWx1ZXMpIHtcbiAgICAgICAgICB0ZXN0KGByZWplY3RzOiAke2ludmFsaWRWYWx1ZX1gLCAoKSA9PlxuICAgICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICAgIHNjYWxhclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoaW52YWxpZFZhbHVlLCBleGFtcGxlLnR5cGUsIGhvc3QpLFxuICAgICAgICAgICAgKS50b1Rocm93KFxuICAgICAgICAgICAgICBgRXhwZWN0ZWQgYSAke2V4YW1wbGUubmFtZX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIGludmFsaWRWYWx1ZSxcbiAgICAgICAgICAgICAgKX0gKCR7dHlwZW9mIGludmFsaWRWYWx1ZX0pYCxcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufSk7XG4iXX0=
|