vitest 0.0.142 → 0.1.14

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,95 +0,0 @@
1
- import { util } from 'chai';
2
- import * as tinyspy from 'tinyspy';
3
-
4
- const spies = new Set();
5
- function isMockFunction(fn2) {
6
- return typeof fn2 === "function" && "__isSpy" in fn2 && fn2.__isSpy;
7
- }
8
- function spyOn(obj, method, accessType) {
9
- const dictionary = {
10
- get: "getter",
11
- set: "setter"
12
- };
13
- const objMethod = accessType ? { [dictionary[accessType]]: method } : method;
14
- const stub = tinyspy.spyOn(obj, objMethod);
15
- return enhanceSpy(stub);
16
- }
17
- function enhanceSpy(spy) {
18
- const stub = spy;
19
- let implementation;
20
- let instances = [];
21
- const mockContext = {
22
- get calls() {
23
- return stub.calls;
24
- },
25
- get instances() {
26
- return instances;
27
- },
28
- get invocationCallOrder() {
29
- return [];
30
- },
31
- get results() {
32
- return stub.results.map(([callType, value]) => {
33
- const type = callType === "error" ? "throw" : "return";
34
- return { type, value };
35
- });
36
- }
37
- };
38
- let onceImplementations = [];
39
- let name = stub.name;
40
- stub.getMockName = () => name || "vi.fn()";
41
- stub.mockName = (n) => {
42
- name = n;
43
- return stub;
44
- };
45
- stub.mockClear = () => {
46
- stub.reset();
47
- instances = [];
48
- return stub;
49
- };
50
- stub.mockReset = () => {
51
- stub.mockClear();
52
- implementation = () => void 0;
53
- onceImplementations = [];
54
- return stub;
55
- };
56
- stub.mockRestore = () => {
57
- stub.mockReset();
58
- implementation = void 0;
59
- return stub;
60
- };
61
- stub.getMockImplementation = () => implementation;
62
- stub.mockImplementation = (fn2) => {
63
- implementation = fn2;
64
- return stub;
65
- };
66
- stub.mockImplementationOnce = (fn2) => {
67
- onceImplementations.push(fn2);
68
- return stub;
69
- };
70
- stub.mockReturnThis = () => stub.mockImplementation(function() {
71
- return this;
72
- });
73
- stub.mockReturnValue = (val) => stub.mockImplementation(() => val);
74
- stub.mockReturnValueOnce = (val) => stub.mockImplementationOnce(() => val);
75
- stub.mockResolvedValue = (val) => stub.mockImplementation(() => Promise.resolve(val));
76
- stub.mockResolvedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.resolve(val));
77
- stub.mockRejectedValue = (val) => stub.mockImplementation(() => Promise.reject(val));
78
- stub.mockRejectedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.reject(val));
79
- util.addProperty(stub, "mock", () => mockContext);
80
- stub.willCall(function(...args) {
81
- instances.push(this);
82
- const impl = onceImplementations.shift() || implementation || stub.getOriginal() || (() => {
83
- });
84
- return impl.apply(this, args);
85
- });
86
- spies.add(stub);
87
- return stub;
88
- }
89
- function fn(implementation) {
90
- return enhanceSpy(tinyspy.spyOn({ fn: implementation || (() => {
91
- }) }, "fn"));
92
- }
93
-
94
- export { spyOn as a, fn as f, isMockFunction as i, spies as s };
95
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC1tb2NrLTZjNjI5OTQ0LmpzIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZWdyYXRpb25zL2plc3QtbW9jay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnY2hhaSdcbmltcG9ydCB0eXBlIHsgU3B5SW1wbCB9IGZyb20gJ3RpbnlzcHknXG5pbXBvcnQgKiBhcyB0aW55c3B5IGZyb20gJ3RpbnlzcHknXG5cbmludGVyZmFjZSBNb2NrUmVzdWx0UmV0dXJuPFQ+IHtcbiAgdHlwZTogJ3JldHVybidcbiAgdmFsdWU6IFRcbn1cbmludGVyZmFjZSBNb2NrUmVzdWx0SW5jb21wbGV0ZSB7XG4gIHR5cGU6ICdpbmNvbXBsZXRlJ1xuICB2YWx1ZTogdW5kZWZpbmVkXG59XG5pbnRlcmZhY2UgTW9ja1Jlc3VsdFRocm93IHtcbiAgdHlwZTogJ3Rocm93J1xuICB2YWx1ZTogYW55XG59XG5cbnR5cGUgTW9ja1Jlc3VsdDxUPiA9IE1vY2tSZXN1bHRSZXR1cm48VD4gfCBNb2NrUmVzdWx0VGhyb3cgfCBNb2NrUmVzdWx0SW5jb21wbGV0ZVxuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RNb2NrQ29tcGF0Q29udGV4dDxUQXJncywgVFJldHVybnM+IHtcbiAgY2FsbHM6IFRBcmdzW11cbiAgaW5zdGFuY2VzOiBUUmV0dXJuc1tdXG4gIC8vIFRPRE86IGRvZXNuJ3Qgd29ya1xuICBpbnZvY2F0aW9uQ2FsbE9yZGVyOiBudW1iZXJbXVxuICByZXN1bHRzOiBNb2NrUmVzdWx0PFRSZXR1cm5zPltdXG59XG5cbnR5cGUgUHJvY2VkdXJlID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcblxudHlwZSBNZXRob2RzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFByb2NlZHVyZSA/IEsgOiBuZXZlclxufVtrZXlvZiBUXSAmIHN0cmluZ1xudHlwZSBQcm9wZXJ0aWVzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFByb2NlZHVyZSA/IG5ldmVyIDogS1xufVtrZXlvZiBUXSAmIHN0cmluZ1xudHlwZSBDbGFzc2VzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueSA/IEsgOiBuZXZlclxufVtrZXlvZiBUXSAmIHN0cmluZ1xuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RNb2NrQ29tcGF0PFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybnMgPSBhbnk+IHtcbiAgZ2V0TW9ja05hbWUoKTogc3RyaW5nXG4gIG1vY2tOYW1lKG46IHN0cmluZyk6IHRoaXNcbiAgbW9jazogSmVzdE1vY2tDb21wYXRDb250ZXh0PFRBcmdzLCBUUmV0dXJucz5cbiAgbW9ja0NsZWFyKCk6IHRoaXNcbiAgbW9ja1Jlc2V0KCk6IHRoaXNcbiAgbW9ja1Jlc3RvcmUoKTogdm9pZFxuICBnZXRNb2NrSW1wbGVtZW50YXRpb24oKTogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgdW5kZWZpbmVkXG4gIG1vY2tJbXBsZW1lbnRhdGlvbihmbjogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgKCgpID0+IFByb21pc2U8VFJldHVybnM+KSk6IHRoaXNcbiAgbW9ja0ltcGxlbWVudGF0aW9uT25jZShmbjogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgKCgpID0+IFByb21pc2U8VFJldHVybnM+KSk6IHRoaXNcbiAgbW9ja1JldHVyblRoaXMoKTogdGhpc1xuICBtb2NrUmV0dXJuVmFsdWUob2JqOiBUUmV0dXJucyk6IHRoaXNcbiAgbW9ja1JldHVyblZhbHVlT25jZShvYmo6IFRSZXR1cm5zKTogdGhpc1xuICBtb2NrUmVzb2x2ZWRWYWx1ZShvYmo6IEF3YWl0ZWQ8VFJldHVybnM+KTogdGhpc1xuICBtb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uob2JqOiBBd2FpdGVkPFRSZXR1cm5zPik6IHRoaXNcbiAgbW9ja1JlamVjdGVkVmFsdWUob2JqOiBhbnkpOiB0aGlzXG4gIG1vY2tSZWplY3RlZFZhbHVlT25jZShvYmo6IGFueSk6IHRoaXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0TW9ja0NvbXBhdEZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnksIFRSZXR1cm5zID0gYW55PiBleHRlbmRzIEplc3RNb2NrQ29tcGF0PFRBcmdzLCBUUmV0dXJucz4ge1xuICAoLi4uYXJnczogVEFyZ3MpOiBUUmV0dXJuc1xufVxuXG5leHBvcnQgdHlwZSBNYXliZU1vY2tlZENvbnN0cnVjdG9yPFQ+ID0gVCBleHRlbmRzIG5ldyAoXG4gIC4uLmFyZ3M6IEFycmF5PGFueT5cbikgPT4gaW5mZXIgUlxuICA/IEplc3RNb2NrQ29tcGF0Rm48Q29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+LCBSPlxuICA6IFRcbmV4cG9ydCB0eXBlIE1vY2tlZEZ1bmN0aW9uPFQgZXh0ZW5kcyBQcm9jZWR1cmU+ID0gTW9ja1dpdGhBcmdzPFQ+ICYge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXTtcbn1cbmV4cG9ydCB0eXBlIE1vY2tlZEZ1bmN0aW9uRGVlcDxUIGV4dGVuZHMgUHJvY2VkdXJlPiA9IE1vY2tXaXRoQXJnczxUPiAmIE1vY2tlZE9iamVjdERlZXA8VD5cbmV4cG9ydCB0eXBlIE1vY2tlZE9iamVjdDxUPiA9IE1heWJlTW9ja2VkQ29uc3RydWN0b3I8VD4gJiB7XG4gIFtLIGluIE1ldGhvZHM8VD5dOiBUW0tdIGV4dGVuZHMgUHJvY2VkdXJlXG4gICAgPyBNb2NrZWRGdW5jdGlvbjxUW0tdPlxuICAgIDogVFtLXTtcbn0gJiB7IFtLIGluIFByb3BlcnRpZXM8VD5dOiBUW0tdIH1cbmV4cG9ydCB0eXBlIE1vY2tlZE9iamVjdERlZXA8VD4gPSBNYXliZU1vY2tlZENvbnN0cnVjdG9yPFQ+ICYge1xuICBbSyBpbiBNZXRob2RzPFQ+XTogVFtLXSBleHRlbmRzIFByb2NlZHVyZVxuICAgID8gTW9ja2VkRnVuY3Rpb25EZWVwPFRbS10+XG4gICAgOiBUW0tdO1xufSAmIHsgW0sgaW4gUHJvcGVydGllczxUPl06IE1heWJlTW9ja2VkRGVlcDxUW0tdPiB9XG5cbmV4cG9ydCB0eXBlIE1heWJlTW9ja2VkRGVlcDxUPiA9IFQgZXh0ZW5kcyBQcm9jZWR1cmVcbiAgPyBNb2NrZWRGdW5jdGlvbkRlZXA8VD5cbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gICAgPyBNb2NrZWRPYmplY3REZWVwPFQ+XG4gICAgOiBUXG5cbmV4cG9ydCB0eXBlIE1heWJlTW9ja2VkPFQ+ID0gVCBleHRlbmRzIFByb2NlZHVyZVxuICA/IE1vY2tlZEZ1bmN0aW9uPFQ+XG4gIDogVCBleHRlbmRzIG9iamVjdFxuICAgID8gTW9ja2VkT2JqZWN0PFQ+XG4gICAgOiBUXG5cbmV4cG9ydCB0eXBlIEVuaGFuY2VkU3B5PFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybnMgPSBhbnk+ID0gSmVzdE1vY2tDb21wYXQ8VEFyZ3MsIFRSZXR1cm5zPiAmIFNweUltcGw8VEFyZ3MsIFRSZXR1cm5zPlxuXG5leHBvcnQgaW50ZXJmYWNlIE1vY2tXaXRoQXJnczxUIGV4dGVuZHMgUHJvY2VkdXJlPlxuICBleHRlbmRzIEplc3RNb2NrQ29tcGF0Rm48UGFyYW1ldGVyczxUPiwgUmV0dXJuVHlwZTxUPj4ge1xuICBuZXcgKC4uLmFyZ3M6IFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueSkgPT4gYW55ID8gQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IDogbmV2ZXIpOiBUXG4gICguLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KTogUmV0dXJuVHlwZTxUPlxufVxuXG5leHBvcnQgY29uc3Qgc3BpZXMgPSBuZXcgU2V0PEplc3RNb2NrQ29tcGF0PigpXG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vY2tGdW5jdGlvbihmbjogYW55KTogZm4gaXMgRW5oYW5jZWRTcHkge1xuICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nXG4gICYmICdfX2lzU3B5JyBpbiBmblxuICAmJiBmbi5fX2lzU3B5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcHlPbjxULCBTIGV4dGVuZHMgUHJvcGVydGllczxSZXF1aXJlZDxUPj4+KFxuICBvYmo6IFQsXG4gIG1ldGhvZE5hbWU6IFMsXG4gIGFjY2VzVHlwZTogJ2dldCcsXG4pOiBKZXN0TW9ja0NvbXBhdDxbVFtTXV0sIHZvaWQ+XG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgRyBleHRlbmRzIFByb3BlcnRpZXM8UmVxdWlyZWQ8VD4+PihcbiAgb2JqOiBULFxuICBtZXRob2ROYW1lOiBHLFxuICBhY2Nlc1R5cGU6ICdzZXQnLFxuKTogSmVzdE1vY2tDb21wYXQ8W10sIFRbR10+XG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgTSBleHRlbmRzIENsYXNzZXM8UmVxdWlyZWQ8VD4+PihcbiAgb2JqZWN0OiBULFxuICBtZXRob2Q6IE1cbik6IFJlcXVpcmVkPFQ+W01dIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSXG4gID8gSmVzdE1vY2tDb21wYXQ8QSwgUj5cbiAgOiBuZXZlclxuZXhwb3J0IGZ1bmN0aW9uIHNweU9uPFQsIE0gZXh0ZW5kcyBNZXRob2RzPFJlcXVpcmVkPFQ+Pj4oXG4gIG9iajogVCxcbiAgbWV0aG9kTmFtZTogTSxcbiAgbW9jaz86IFRbTV1cbik6IFJlcXVpcmVkPFQ+W01dIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFIgPyBKZXN0TW9ja0NvbXBhdDxBLCBSPiA6IG5ldmVyXG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIG1ldGhvZDogSyxcbiAgYWNjZXNzVHlwZT86ICdnZXQnIHwgJ3NldCcsXG4pOiBKZXN0TW9ja0NvbXBhdCB7XG4gIGNvbnN0IGRpY3Rpb25hcnkgPSB7XG4gICAgZ2V0OiAnZ2V0dGVyJyxcbiAgICBzZXQ6ICdzZXR0ZXInLFxuICB9IGFzIGNvbnN0XG4gIGNvbnN0IG9iak1ldGhvZCA9IGFjY2Vzc1R5cGUgPyB7IFtkaWN0aW9uYXJ5W2FjY2Vzc1R5cGVdXTogbWV0aG9kIH0gOiBtZXRob2RcblxuICBjb25zdCBzdHViID0gdGlueXNweS5zcHlPbihvYmosIG9iak1ldGhvZCBhcyBhbnkpXG5cbiAgcmV0dXJuIGVuaGFuY2VTcHkoc3R1YikgYXMgSmVzdE1vY2tDb21wYXRcbn1cblxuZnVuY3Rpb24gZW5oYW5jZVNweTxUQXJncyBleHRlbmRzIGFueVtdLCBUUmV0dXJucz4oXG4gIHNweTogU3B5SW1wbDxUQXJncywgVFJldHVybnM+LFxuKTogSmVzdE1vY2tDb21wYXQ8VEFyZ3MsIFRSZXR1cm5zPiB7XG4gIGNvbnN0IHN0dWIgPSBzcHkgYXMgdW5rbm93biBhcyBFbmhhbmNlZFNweTxUQXJncywgVFJldHVybnM+XG5cbiAgbGV0IGltcGxlbWVudGF0aW9uOiAoKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgfCB1bmRlZmluZWRcblxuICBsZXQgaW5zdGFuY2VzOiBhbnlbXSA9IFtdXG5cbiAgY29uc3QgbW9ja0NvbnRleHQgPSB7XG4gICAgZ2V0IGNhbGxzKCkge1xuICAgICAgcmV0dXJuIHN0dWIuY2FsbHNcbiAgICB9LFxuICAgIGdldCBpbnN0YW5jZXMoKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2VzXG4gICAgfSxcbiAgICAvLyBub3Qgc3VwcG9ydGVkXG4gICAgZ2V0IGludm9jYXRpb25DYWxsT3JkZXIoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuICAgIGdldCByZXN1bHRzKCkge1xuICAgICAgcmV0dXJuIHN0dWIucmVzdWx0cy5tYXAoKFtjYWxsVHlwZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBjYWxsVHlwZSA9PT0gJ2Vycm9yJyA/ICd0aHJvdycgOiAncmV0dXJuJ1xuICAgICAgICByZXR1cm4geyB0eXBlLCB2YWx1ZSB9XG4gICAgICB9KVxuICAgIH0sXG4gIH1cblxuICBsZXQgb25jZUltcGxlbWVudGF0aW9uczogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpW10gPSBbXVxuXG4gIGxldCBuYW1lOiBzdHJpbmcgPSAoc3R1YiBhcyBhbnkpLm5hbWVcblxuICBzdHViLmdldE1vY2tOYW1lID0gKCkgPT4gbmFtZSB8fCAndmkuZm4oKSdcbiAgc3R1Yi5tb2NrTmFtZSA9IChuKSA9PiB7XG4gICAgbmFtZSA9IG5cbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrQ2xlYXIgPSAoKSA9PiB7XG4gICAgc3R1Yi5yZXNldCgpXG4gICAgaW5zdGFuY2VzID0gW11cbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrUmVzZXQgPSAoKSA9PiB7XG4gICAgc3R1Yi5tb2NrQ2xlYXIoKVxuICAgIGltcGxlbWVudGF0aW9uID0gKCkgPT4gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVFJldHVybnNcbiAgICBvbmNlSW1wbGVtZW50YXRpb25zID0gW11cbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrUmVzdG9yZSA9ICgpID0+IHtcbiAgICBzdHViLm1vY2tSZXNldCgpXG4gICAgaW1wbGVtZW50YXRpb24gPSB1bmRlZmluZWRcbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5nZXRNb2NrSW1wbGVtZW50YXRpb24gPSAoKSA9PiBpbXBsZW1lbnRhdGlvblxuICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbiA9IChmbjogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgPT4ge1xuICAgIGltcGxlbWVudGF0aW9uID0gZm5cbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb25PbmNlID0gKGZuOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKSA9PiB7XG4gICAgb25jZUltcGxlbWVudGF0aW9ucy5wdXNoKGZuKVxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tSZXR1cm5UaGlzID0gKCkgPT5cbiAgICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbih0aGlzOiBUUmV0dXJucykge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9KVxuXG4gIHN0dWIubW9ja1JldHVyblZhbHVlID0gKHZhbDogVFJldHVybnMpID0+IHN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHZhbClcbiAgc3R1Yi5tb2NrUmV0dXJuVmFsdWVPbmNlID0gKHZhbDogVFJldHVybnMpID0+IHN0dWIubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiB2YWwpXG5cbiAgc3R1Yi5tb2NrUmVzb2x2ZWRWYWx1ZSA9ICh2YWw6IEF3YWl0ZWQ8VFJldHVybnM+KSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZSh2YWwgYXMgVFJldHVybnMpKVxuXG4gIHN0dWIubW9ja1Jlc29sdmVkVmFsdWVPbmNlID0gKHZhbDogQXdhaXRlZDxUUmV0dXJucz4pID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IFByb21pc2UucmVzb2x2ZSh2YWwgYXMgVFJldHVybnMpKVxuXG4gIHN0dWIubW9ja1JlamVjdGVkVmFsdWUgPSAodmFsOiB1bmtub3duKSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVqZWN0KHZhbCkpXG5cbiAgc3R1Yi5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UgPSAodmFsOiB1bmtub3duKSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiBQcm9taXNlLnJlamVjdCh2YWwpKVxuXG4gIHV0aWwuYWRkUHJvcGVydHkoc3R1YiwgJ21vY2snLCAoKSA9PiBtb2NrQ29udGV4dClcblxuICBzdHViLndpbGxDYWxsKGZ1bmN0aW9uKHRoaXM6IHVua25vd24sIC4uLmFyZ3MpIHtcbiAgICBpbnN0YW5jZXMucHVzaCh0aGlzKVxuICAgIGNvbnN0IGltcGwgPSBvbmNlSW1wbGVtZW50YXRpb25zLnNoaWZ0KCkgfHwgaW1wbGVtZW50YXRpb24gfHwgc3R1Yi5nZXRPcmlnaW5hbCgpIHx8ICgoKSA9PiB7fSlcbiAgICByZXR1cm4gaW1wbC5hcHBseSh0aGlzLCBhcmdzKVxuICB9KVxuXG4gIHNwaWVzLmFkZChzdHViKVxuXG4gIHJldHVybiBzdHViIGFzIGFueVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm48VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBSID0gYW55PigpOiBKZXN0TW9ja0NvbXBhdEZuPFRBcmdzLCBSPlxuZXhwb3J0IGZ1bmN0aW9uIGZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgUiA9IGFueT4oXG4gIGltcGxlbWVudGF0aW9uOiAoLi4uYXJnczogVEFyZ3MpID0+IFJcbik6IEplc3RNb2NrQ29tcGF0Rm48VEFyZ3MsIFI+XG5leHBvcnQgZnVuY3Rpb24gZm48VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBSID0gYW55PihcbiAgaW1wbGVtZW50YXRpb24/OiAoLi4uYXJnczogVEFyZ3MpID0+IFIsXG4pOiBKZXN0TW9ja0NvbXBhdEZuPFRBcmdzLCBSPiB7XG4gIHJldHVybiBlbmhhbmNlU3B5KHRpbnlzcHkuc3B5T24oeyBmbjogaW1wbGVtZW50YXRpb24gfHwgKCgpID0+IHt9KSB9LCAnZm4nKSkgYXMgdW5rbm93biBhcyBKZXN0TW9ja0NvbXBhdEZuXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRVksTUFBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUc7QUFDeEIsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFO0FBQ3BDLEVBQUUsT0FBTyxPQUFPLEdBQUcsS0FBSyxVQUFVLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ3RFLENBQUM7QUFDTSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxFQUFFLE1BQU0sVUFBVSxHQUFHO0FBQ3JCLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFB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