@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.
@@ -1 +0,0 @@
1
- export {};
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VyaWFsaXphdGlvbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQXlFO0FBRXpFLG9DQUF1QztBQUN2Qyw0Q0FBNkM7QUFDN0Msd0RBSThCO0FBRTlCLE1BQU0sUUFBUSxHQUFrQixFQUFFLElBQUksRUFBRSxvQkFBYSxFQUFFLENBQUM7QUFDeEQsTUFBTSxZQUFZLEdBQWtCO0lBQ2xDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxvQkFBYSxDQUFDLE9BQU8sRUFBRTtDQUMzQyxDQUFDO0FBQ0YsTUFBTSxXQUFXLEdBQWtCO0lBQ2pDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxvQkFBYSxDQUFDLE1BQU0sRUFBRTtDQUMxQyxDQUFDO0FBQ0YsTUFBTSxXQUFXLEdBQWtCO0lBQ2pDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxvQkFBYSxDQUFDLE1BQU0sRUFBRTtDQUMxQyxDQUFDO0FBQ0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBRXpCLE1BQU0sVUFBVSxHQUFpQyxJQUFJO0tBQ2xELEVBQUUsRUFBRTtLQUNKLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sSUFBSSxHQUFtQjtJQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDakQsVUFBVTtJQUNWLE9BQU8sRUFBRSxJQUFJLHFCQUFXLENBQUMsVUFBVSxDQUFDO0lBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztDQUM1QyxDQUFDO0FBRUYsUUFBUSxrQkFBeUIsR0FBRyxFQUFFO0lBQ3BDLE1BQU0sYUFBYSxHQUFHLDJCQUFXLGlCQUF3QixDQUFDO0lBQzFELE1BQU0sV0FBVztRQUFqQjtZQUNtQixnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUsvQyxDQUFDO1FBSFEsTUFBTTtZQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO0tBQ0Y7SUFFRCxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNqQixJQUFJLENBQUMsT0FBK0IsQ0FBQyxrQkFBa0IsQ0FDdEQsQ0FBQyxDQUFNLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0IsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUNGLENBQUM7UUFDRixJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7WUFDbkMsTUFBTSxDQUNKLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQ3hFLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsTUFBTSxDQUNKLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQzNELENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxlQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDbEIsTUFBTSxDQUNKLGFBQWEsQ0FBQyxTQUFTLENBQ3JCLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUNoQyxRQUFRLEVBQ1IsSUFBSSxDQUNMLENBQ0YsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLHdCQUE0QixHQUFHLEVBQUU7SUFDdkMsTUFBTSxnQkFBZ0IsR0FBRywyQkFBVyx1QkFBMkIsQ0FBQztJQUVoRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtRQUMxQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQzdCLE1BQU0sQ0FDSixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FDekQsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBRXJCLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQ3hCLE1BQU0sQ0FDSixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FDcEQsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBRXJCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUMxRCxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsR0FBRztZQUNsQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ3pFO2dCQUNFLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxXQUFXO2dCQUNqQixXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUN4QztZQUNELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtTQUNwRSxDQUFDO1FBQ0YsS0FBSyxNQUFNLE9BQU8sSUFBSSxXQUFXLEVBQUU7WUFDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUMxQixJQUFJLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO29CQUN6QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsZ0JBQWdCLENBQUMsV0FBVyxDQUMxQixFQUFFLGFBQWEsRUFBRSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUN0QyxPQUFPLENBQUMsSUFBSSxFQUNaLElBQUksQ0FDTCxDQUNGLENBQUMsT0FBTyxDQUFDLGNBQWMsT0FBTyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxDQUFDO2dCQUVILEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLFlBQVksVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQ2xDLE1BQU0sQ0FDSixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQzdELENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZCO2dCQUVELE1BQU0sYUFBYSxHQUFHLFdBQVc7cUJBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDO3FCQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7cUJBQ3pCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBTyxDQUFDLENBQUM7Z0JBQzVELEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO29CQUN4QyxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FDcEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDL0QsQ0FBQyxPQUFPLENBQ1AsY0FBYyxPQUFPLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQy9DLFlBQVksQ0FDYixLQUFLLE9BQU8sWUFBWSxHQUFHLENBQzdCLENBQUMsQ0FBQztpQkFDTjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0FOT05JQ0FMX0FOWSwgT3B0aW9uYWxWYWx1ZSwgUHJpbWl0aXZlVHlwZSB9IGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQgeyBUT0tFTl9SRUYgfSBmcm9tICcuLi9saWIvYXBpJztcbmltcG9ydCB7IE9iamVjdFRhYmxlIH0gZnJvbSAnLi4vbGliL29iamVjdHMnO1xuaW1wb3J0IHtcbiAgU2VyaWFsaXphdGlvbkNsYXNzLFxuICBTZXJpYWxpemVySG9zdCxcbiAgU0VSSUFMSVpFUlMsXG59IGZyb20gJy4uL2xpYi9zZXJpYWxpemF0aW9uJztcblxuY29uc3QgVFlQRV9BTlk6IE9wdGlvbmFsVmFsdWUgPSB7IHR5cGU6IENBTk9OSUNBTF9BTlkgfTtcbmNvbnN0IFRZUEVfQk9PTEVBTjogT3B0aW9uYWxWYWx1ZSA9IHtcbiAgdHlwZTogeyBwcmltaXRpdmU6IFByaW1pdGl2ZVR5cGUuQm9vbGVhbiB9LFxufTtcbmNvbnN0IFRZUEVfTlVNQkVSOiBPcHRpb25hbFZhbHVlID0ge1xuICB0eXBlOiB7IHByaW1pdGl2ZTogUHJpbWl0aXZlVHlwZS5OdW1iZXIgfSxcbn07XG5jb25zdCBUWVBFX1NUUklORzogT3B0aW9uYWxWYWx1ZSA9IHtcbiAgdHlwZTogeyBwcmltaXRpdmU6IFByaW1pdGl2ZVR5cGUuU3RyaW5nIH0sXG59O1xuY29uc3QgVFlQRV9WT0lEID0gJ3ZvaWQnO1xuXG5jb25zdCBsb29rdXBUeXBlOiBTZXJpYWxpemVySG9zdFsnbG9va3VwVHlwZSddID0gamVzdFxuICAuZm4oKVxuICAubW9ja05hbWUoJ2hvc3QubG9va3VwVHlwZScpO1xuY29uc3QgaG9zdDogU2VyaWFsaXplckhvc3QgPSB7XG4gIGRlYnVnOiBqZXN0LmZuKCkubW9ja05hbWUoJ2hvc3QuZGVidWcnKSxcbiAgZmluZFN5bWJvbDogamVzdC5mbigpLm1vY2tOYW1lKCdob3N0LmZpbmRTeW1ib2wnKSxcbiAgbG9va3VwVHlwZSxcbiAgb2JqZWN0czogbmV3IE9iamVjdFRhYmxlKGxvb2t1cFR5cGUpLFxuICByZWN1cnNlOiBqZXN0LmZuKCkubW9ja05hbWUoJ2hvc3QucmVjdXJzZScpLFxufTtcblxuZGVzY3JpYmUoU2VyaWFsaXphdGlvbkNsYXNzLkFueSwgKCkgPT4ge1xuICBjb25zdCBhbnlTZXJpYWxpemVyID0gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLkFueV07XG4gIGNsYXNzIFByaXZhdGVUeXBlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJhbmRvbVZhbHVlID0gTWF0aC5yYW5kb20oKTtcblxuICAgIHB1YmxpYyByYW5kb20oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYW5kb21WYWx1ZTtcbiAgICB9XG4gIH1cblxuICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgKGhvc3QucmVjdXJzZSBhcyBqZXN0Lk1vY2s8YW55LCBhbnk+KS5tb2NrSW1wbGVtZW50YXRpb24oXG4gICAgICAoeDogYW55LCB0eXBlOiBPcHRpb25hbFZhbHVlKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlKS50b0VxdWFsKFRZUEVfQU5ZKTtcbiAgICAgICAgcmV0dXJuIGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHgsIHR5cGUsIGhvc3QpO1xuICAgICAgfSxcbiAgICApO1xuICAgIGRvbmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoYW55U2VyaWFsaXplci5zZXJpYWxpemUsICgpID0+IHtcbiAgICB0ZXN0KCdieS12YWx1ZSBvYmplY3QgbGl0ZXJhbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgYW55U2VyaWFsaXplci5zZXJpYWxpemUoeyBsaXRlcmFsOiB7IGludGVnZXI6IDEzMzcgfSB9LCBUWVBFX0FOWSwgaG9zdCksXG4gICAgICApLnRvRXF1YWwoeyBsaXRlcmFsOiB7IGludGVnZXI6IDEzMzcgfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ25vbi1leHBvcnRlZCB0eXBlIGluc3RhbmNlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgUHJpdmF0ZVR5cGUoKSwgVFlQRV9BTlksIGhvc3QpLFxuICAgICAgKS50b0VxdWFsKHsgW1RPS0VOX1JFRl06ICdPYmplY3RAMTAwMDAnIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYXJyYXlzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShcbiAgICAgICAgICBbeyBsaXRlcmFsOiB7IGludGVnZXI6IDEzMzcgfSB9XSxcbiAgICAgICAgICBUWVBFX0FOWSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApLFxuICAgICAgKS50b0VxdWFsKFt7IGxpdGVyYWw6IHsgaW50ZWdlcjogMTMzNyB9IH1dKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhciwgKCkgPT4ge1xuICBjb25zdCBzY2FsYXJTZXJpYWxpemVyID0gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhcl07XG5cbiAgZGVzY3JpYmUoc2NhbGFyU2VyaWFsaXplci5kZXNlcmlhbGl6ZSwgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCd2b2lkJywgKCkgPT4ge1xuICAgICAgdGVzdCgnYWNjZXB0cyB1bmRlZmluZWQnLCAoKSA9PlxuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgc2NhbGFyU2VyaWFsaXplci5kZXNlcmlhbGl6ZSh1bmRlZmluZWQsIFRZUEVfVk9JRCwgaG9zdCksXG4gICAgICAgICkudG9CZVVuZGVmaW5lZCgpKTtcblxuICAgICAgdGVzdCgnYWNjZXB0cyBudWxsJywgKCkgPT5cbiAgICAgICAgZXhwZWN0KFxuICAgICAgICAgIHNjYWxhclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobnVsbCwgVFlQRV9WT0lELCBob3N0KSxcbiAgICAgICAgKS50b0JlVW5kZWZpbmVkKCkpO1xuXG4gICAgICB0ZXN0KCdyZWplY3RzIGFueSB2YWx1ZScsICgpID0+XG4gICAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICAgIHNjYWxhclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoJ25vdGhpbmchJywgVFlQRV9WT0lELCBob3N0KSxcbiAgICAgICAgKS50b1Rocm93KC9FbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlLykpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NhbGFyVHlwZXMgPSBbXG4gICAgICB7IG5hbWU6ICdzdHJpbmcnLCB0eXBlOiBUWVBFX1NUUklORywgdmFsaWRWYWx1ZXM6IFsnVGhpcyBpcyBhIHN0cmluZyEnXSB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdHlwZTogVFlQRV9OVU1CRVIsXG4gICAgICAgIHZhbGlkVmFsdWVzOiBbLTEzMzcsIDAsIE51bWJlci5FUFNJTE9OXSxcbiAgICAgIH0sXG4gICAgICB7IG5hbWU6ICdib29sZWFuJywgdHlwZTogVFlQRV9CT09MRUFOLCB2YWxpZFZhbHVlczogW3RydWUsIGZhbHNlXSB9LFxuICAgIF07XG4gICAgZm9yIChjb25zdCBleGFtcGxlIG9mIHNjYWxhclR5cGVzKSB7XG4gICAgICBkZXNjcmliZShleGFtcGxlLm5hbWUsICgpID0+IHtcbiAgICAgICAgdGVzdCgnZmFpbHMgd2hlbiBwcm92aWRlZCBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICBzY2FsYXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKFxuICAgICAgICAgICAgICB7ICd0aGlzIGlzIG5vdCc6IGBhICR7ZXhhbXBsZS5uYW1lfWAgfSxcbiAgICAgICAgICAgICAgZXhhbXBsZS50eXBlLFxuICAgICAgICAgICAgICBob3N0LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLnRvVGhyb3coYEV4cGVjdGVkIGEgJHtleGFtcGxlLm5hbWV9LCBnb3Qge2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkVmFsdWUgb2YgZXhhbXBsZS52YWxpZFZhbHVlcykge1xuICAgICAgICAgIHRlc3QoYGFjY2VwdHM6ICR7dmFsaWRWYWx1ZX1gLCAoKSA9PlxuICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICBzY2FsYXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKHZhbGlkVmFsdWUsIGV4YW1wbGUudHlwZSwgaG9zdCksXG4gICAgICAgICAgICApLnRvQmUodmFsaWRWYWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlcyA9IHNjYWxhclR5cGVzXG4gICAgICAgICAgLmZpbHRlcigodCkgPT4gdC5uYW1lICE9PSBleGFtcGxlLm5hbWUpXG4gICAgICAgICAgLm1hcCgodCkgPT4gdC52YWxpZFZhbHVlcylcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGVsdCkgPT4gWy4uLmFjYywgLi4uZWx0XSwgbmV3IEFycmF5PGFueT4oKSk7XG4gICAgICAgIGZvciAoY29uc3QgaW52YWxpZFZhbHVlIG9mIGludmFsaWRWYWx1ZXMpIHtcbiAgICAgICAgICB0ZXN0KGByZWplY3RzOiAke2ludmFsaWRWYWx1ZX1gLCAoKSA9PlxuICAgICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICAgIHNjYWxhclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoaW52YWxpZFZhbHVlLCBleGFtcGxlLnR5cGUsIGhvc3QpLFxuICAgICAgICAgICAgKS50b1Rocm93KFxuICAgICAgICAgICAgICBgRXhwZWN0ZWQgYSAke2V4YW1wbGUubmFtZX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIGludmFsaWRWYWx1ZSxcbiAgICAgICAgICAgICAgKX0gKCR7dHlwZW9mIGludmFsaWRWYWx1ZX0pYCxcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufSk7XG4iXX0=