vitest 0.0.136 → 0.0.140

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,94 +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
- const 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
- return stub;
48
- };
49
- stub.mockReset = () => {
50
- stub.reset();
51
- implementation = () => void 0;
52
- onceImplementations = [];
53
- return stub;
54
- };
55
- stub.mockRestore = () => {
56
- stub.mockReset();
57
- implementation = void 0;
58
- return stub;
59
- };
60
- stub.getMockImplementation = () => implementation;
61
- stub.mockImplementation = (fn2) => {
62
- implementation = fn2;
63
- return stub;
64
- };
65
- stub.mockImplementationOnce = (fn2) => {
66
- onceImplementations.push(fn2);
67
- return stub;
68
- };
69
- stub.mockReturnThis = () => stub.mockImplementation(function() {
70
- return this;
71
- });
72
- stub.mockReturnValue = (val) => stub.mockImplementation(() => val);
73
- stub.mockReturnValueOnce = (val) => stub.mockImplementationOnce(() => val);
74
- stub.mockResolvedValue = (val) => stub.mockImplementation(() => Promise.resolve(val));
75
- stub.mockResolvedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.resolve(val));
76
- stub.mockRejectedValue = (val) => stub.mockImplementation(() => Promise.reject(val));
77
- stub.mockRejectedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.reject(val));
78
- util.addProperty(stub, "mock", () => mockContext);
79
- stub.willCall(function(...args) {
80
- instances.push(this);
81
- const impl = onceImplementations.shift() || implementation || stub.getOriginal() || (() => {
82
- });
83
- return impl.apply(this, args);
84
- });
85
- spies.add(stub);
86
- return stub;
87
- }
88
- function fn(implementation) {
89
- return enhanceSpy(tinyspy.spyOn({ fn: implementation || (() => {
90
- }) }, "fn"));
91
- }
92
-
93
- export { spyOn as a, fn as f, isMockFunction as i, spies as s };
94
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC1tb2NrLTMwNjI1ODY2LmpzIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZWdyYXRpb25zL2plc3QtbW9jay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnY2hhaSdcbmltcG9ydCB0eXBlIHsgU3B5SW1wbCB9IGZyb20gJ3RpbnlzcHknXG5pbXBvcnQgKiBhcyB0aW55c3B5IGZyb20gJ3RpbnlzcHknXG5cbmludGVyZmFjZSBNb2NrUmVzdWx0UmV0dXJuPFQ+IHtcbiAgdHlwZTogJ3JldHVybidcbiAgdmFsdWU6IFRcbn1cbmludGVyZmFjZSBNb2NrUmVzdWx0SW5jb21wbGV0ZSB7XG4gIHR5cGU6ICdpbmNvbXBsZXRlJ1xuICB2YWx1ZTogdW5kZWZpbmVkXG59XG5pbnRlcmZhY2UgTW9ja1Jlc3VsdFRocm93IHtcbiAgdHlwZTogJ3Rocm93J1xuICB2YWx1ZTogYW55XG59XG5cbnR5cGUgTW9ja1Jlc3VsdDxUPiA9IE1vY2tSZXN1bHRSZXR1cm48VD4gfCBNb2NrUmVzdWx0VGhyb3cgfCBNb2NrUmVzdWx0SW5jb21wbGV0ZVxuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RNb2NrQ29tcGF0Q29udGV4dDxUQXJncywgVFJldHVybnM+IHtcbiAgY2FsbHM6IFRBcmdzW11cbiAgaW5zdGFuY2VzOiBUUmV0dXJuc1tdXG4gIC8vIFRPRE86IGRvZXNuJ3Qgd29ya1xuICBpbnZvY2F0aW9uQ2FsbE9yZGVyOiBudW1iZXJbXVxuICByZXN1bHRzOiBNb2NrUmVzdWx0PFRSZXR1cm5zPltdXG59XG5cbnR5cGUgUHJvY2VkdXJlID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcblxudHlwZSBNZXRob2RzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFByb2NlZHVyZSA/IEsgOiBuZXZlclxufVtrZXlvZiBUXSAmIHN0cmluZ1xudHlwZSBQcm9wZXJ0aWVzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFByb2NlZHVyZSA/IG5ldmVyIDogS1xufVtrZXlvZiBUXSAmIHN0cmluZ1xudHlwZSBDbGFzc2VzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueSA/IEsgOiBuZXZlclxufVtrZXlvZiBUXSAmIHN0cmluZ1xuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RNb2NrQ29tcGF0PFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybnMgPSBhbnk+IHtcbiAgZ2V0TW9ja05hbWUoKTogc3RyaW5nXG4gIG1vY2tOYW1lKG46IHN0cmluZyk6IHRoaXNcbiAgbW9jazogSmVzdE1vY2tDb21wYXRDb250ZXh0PFRBcmdzLCBUUmV0dXJucz5cbiAgbW9ja0NsZWFyKCk6IHRoaXNcbiAgbW9ja1Jlc2V0KCk6IHRoaXNcbiAgbW9ja1Jlc3RvcmUoKTogdm9pZFxuICBnZXRNb2NrSW1wbGVtZW50YXRpb24oKTogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgdW5kZWZpbmVkXG4gIG1vY2tJbXBsZW1lbnRhdGlvbihmbjogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgKCgpID0+IFByb21pc2U8VFJldHVybnM+KSk6IHRoaXNcbiAgbW9ja0ltcGxlbWVudGF0aW9uT25jZShmbjogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgKCgpID0+IFByb21pc2U8VFJldHVybnM+KSk6IHRoaXNcbiAgbW9ja1JldHVyblRoaXMoKTogdGhpc1xuICBtb2NrUmV0dXJuVmFsdWUob2JqOiBUUmV0dXJucyk6IHRoaXNcbiAgbW9ja1JldHVyblZhbHVlT25jZShvYmo6IFRSZXR1cm5zKTogdGhpc1xuICBtb2NrUmVzb2x2ZWRWYWx1ZShvYmo6IEF3YWl0ZWQ8VFJldHVybnM+KTogdGhpc1xuICBtb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uob2JqOiBBd2FpdGVkPFRSZXR1cm5zPik6IHRoaXNcbiAgbW9ja1JlamVjdGVkVmFsdWUob2JqOiBhbnkpOiB0aGlzXG4gIG1vY2tSZWplY3RlZFZhbHVlT25jZShvYmo6IGFueSk6IHRoaXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0TW9ja0NvbXBhdEZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnksIFRSZXR1cm5zID0gYW55PiBleHRlbmRzIEplc3RNb2NrQ29tcGF0PFRBcmdzLCBUUmV0dXJucz4ge1xuICAoLi4uYXJnczogVEFyZ3MpOiBUUmV0dXJuc1xufVxuXG5leHBvcnQgdHlwZSBNYXliZU1vY2tlZENvbnN0cnVjdG9yPFQ+ID0gVCBleHRlbmRzIG5ldyAoXG4gIC4uLmFyZ3M6IEFycmF5PGFueT5cbikgPT4gaW5mZXIgUlxuICA/IEplc3RNb2NrQ29tcGF0Rm48Q29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+LCBSPlxuICA6IFRcbmV4cG9ydCB0eXBlIE1vY2tlZEZ1bmN0aW9uPFQgZXh0ZW5kcyBQcm9jZWR1cmU+ID0gTW9ja1dpdGhBcmdzPFQ+ICYge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXTtcbn1cbmV4cG9ydCB0eXBlIE1vY2tlZEZ1bmN0aW9uRGVlcDxUIGV4dGVuZHMgUHJvY2VkdXJlPiA9IE1vY2tXaXRoQXJnczxUPiAmIE1vY2tlZE9iamVjdERlZXA8VD5cbmV4cG9ydCB0eXBlIE1vY2tlZE9iamVjdDxUPiA9IE1heWJlTW9ja2VkQ29uc3RydWN0b3I8VD4gJiB7XG4gIFtLIGluIE1ldGhvZHM8VD5dOiBUW0tdIGV4dGVuZHMgUHJvY2VkdXJlXG4gICAgPyBNb2NrZWRGdW5jdGlvbjxUW0tdPlxuICAgIDogVFtLXTtcbn0gJiB7W0sgaW4gUHJvcGVydGllczxUPl06IFRbS119XG5leHBvcnQgdHlwZSBNb2NrZWRPYmplY3REZWVwPFQ+ID0gTWF5YmVNb2NrZWRDb25zdHJ1Y3RvcjxUPiAmIHtcbiAgW0sgaW4gTWV0aG9kczxUPl06IFRbS10gZXh0ZW5kcyBQcm9jZWR1cmVcbiAgICA/IE1vY2tlZEZ1bmN0aW9uRGVlcDxUW0tdPlxuICAgIDogVFtLXTtcbn0gJiB7W0sgaW4gUHJvcGVydGllczxUPl06IE1heWJlTW9ja2VkRGVlcDxUW0tdPn1cblxuZXhwb3J0IHR5cGUgTWF5YmVNb2NrZWREZWVwPFQ+ID0gVCBleHRlbmRzIFByb2NlZHVyZVxuICA/IE1vY2tlZEZ1bmN0aW9uRGVlcDxUPlxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IE1vY2tlZE9iamVjdERlZXA8VD5cbiAgICA6IFRcblxuZXhwb3J0IHR5cGUgTWF5YmVNb2NrZWQ8VD4gPSBUIGV4dGVuZHMgUHJvY2VkdXJlXG4gID8gTW9ja2VkRnVuY3Rpb248VD5cbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gICAgPyBNb2NrZWRPYmplY3Q8VD5cbiAgICA6IFRcblxuZXhwb3J0IHR5cGUgRW5oYW5jZWRTcHk8VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBUUmV0dXJucyA9IGFueT4gPSBKZXN0TW9ja0NvbXBhdDxUQXJncywgVFJldHVybnM+ICYgU3B5SW1wbDxUQXJncywgVFJldHVybnM+XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ja1dpdGhBcmdzPFQgZXh0ZW5kcyBQcm9jZWR1cmU+XG4gIGV4dGVuZHMgSmVzdE1vY2tDb21wYXRGbjxQYXJhbWV0ZXJzPFQ+LCBSZXR1cm5UeXBlPFQ+PiB7XG4gIG5ldyAoLi4uYXJnczogVCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55KSA9PiBhbnkgPyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4gOiBuZXZlcik6IFRcbiAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pOiBSZXR1cm5UeXBlPFQ+XG59XG5cbmV4cG9ydCBjb25zdCBzcGllcyA9IG5ldyBTZXQ8SmVzdE1vY2tDb21wYXQ+KClcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9ja0Z1bmN0aW9uKGZuOiBhbnkpOiBmbiBpcyBFbmhhbmNlZFNweSB7XG4gIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbidcbiAgJiYgJ19faXNTcHknIGluIGZuXG4gICYmIGZuLl9faXNTcHlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNweU9uPFQsIFMgZXh0ZW5kcyBQcm9wZXJ0aWVzPFJlcXVpcmVkPFQ+Pj4oXG4gIG9iajogVCxcbiAgbWV0aG9kTmFtZTogUyxcbiAgYWNjZXNUeXBlOiAnZ2V0Jyxcbik6IEplc3RNb2NrQ29tcGF0PFtUW1NdXSwgdm9pZD5cbmV4cG9ydCBmdW5jdGlvbiBzcHlPbjxULCBHIGV4dGVuZHMgUHJvcGVydGllczxSZXF1aXJlZDxUPj4+KFxuICBvYmo6IFQsXG4gIG1ldGhvZE5hbWU6IEcsXG4gIGFjY2VzVHlwZTogJ3NldCcsXG4pOiBKZXN0TW9ja0NvbXBhdDxbXSwgVFtHXT5cbmV4cG9ydCBmdW5jdGlvbiBzcHlPbjxULCBNIGV4dGVuZHMgQ2xhc3NlczxSZXF1aXJlZDxUPj4+KFxuICBvYmplY3Q6IFQsXG4gIG1ldGhvZDogTVxuKTogUmVxdWlyZWQ8VD5bTV0gZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFJcbiAgPyBKZXN0TW9ja0NvbXBhdDxBLCBSPlxuICA6IG5ldmVyXG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgTSBleHRlbmRzIE1ldGhvZHM8UmVxdWlyZWQ8VD4+PihcbiAgb2JqOiBULFxuICBtZXRob2ROYW1lOiBNLFxuICBtb2NrPzogVFtNXVxuKTogUmVxdWlyZWQ8VD5bTV0gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgQSkgPT4gaW5mZXIgUiA/IEplc3RNb2NrQ29tcGF0PEEsIFI+IDogbmV2ZXJcbmV4cG9ydCBmdW5jdGlvbiBzcHlPbjxULCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIG9iajogVCxcbiAgbWV0aG9kOiBLLFxuICBhY2Nlc3NUeXBlPzogJ2dldCcgfCAnc2V0Jyxcbik6IEplc3RNb2NrQ29tcGF0IHtcbiAgY29uc3QgZGljdGlvbmFyeSA9IHtcbiAgICBnZXQ6ICdnZXR0ZXInLFxuICAgIHNldDogJ3NldHRlcicsXG4gIH0gYXMgY29uc3RcbiAgY29uc3Qgb2JqTWV0aG9kID0gYWNjZXNzVHlwZSA/IHsgW2RpY3Rpb25hcnlbYWNjZXNzVHlwZV1dOiBtZXRob2QgfSA6IG1ldGhvZFxuXG4gIGNvbnN0IHN0dWIgPSB0aW55c3B5LnNweU9uKG9iaiwgb2JqTWV0aG9kIGFzIGFueSlcblxuICByZXR1cm4gZW5oYW5jZVNweShzdHViKSBhcyBKZXN0TW9ja0NvbXBhdFxufVxuXG5mdW5jdGlvbiBlbmhhbmNlU3B5PFRBcmdzIGV4dGVuZHMgYW55W10sIFRSZXR1cm5zPihcbiAgc3B5OiBTcHlJbXBsPFRBcmdzLCBUUmV0dXJucz4sXG4pOiBKZXN0TW9ja0NvbXBhdDxUQXJncywgVFJldHVybnM+IHtcbiAgY29uc3Qgc3R1YiA9IHNweSBhcyB1bmtub3duIGFzIEVuaGFuY2VkU3B5PFRBcmdzLCBUUmV0dXJucz5cblxuICBsZXQgaW1wbGVtZW50YXRpb246ICgoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKSB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0IGluc3RhbmNlczogYW55W10gPSBbXVxuXG4gIGNvbnN0IG1vY2tDb250ZXh0ID0ge1xuICAgIGdldCBjYWxscygpIHtcbiAgICAgIHJldHVybiBzdHViLmNhbGxzXG4gICAgfSxcbiAgICBnZXQgaW5zdGFuY2VzKCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlc1xuICAgIH0sXG4gICAgLy8gbm90IHN1cHBvcnRlZFxuICAgIGdldCBpbnZvY2F0aW9uQ2FsbE9yZGVyKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfSxcbiAgICBnZXQgcmVzdWx0cygpIHtcbiAgICAgIHJldHVybiBzdHViLnJlc3VsdHMubWFwKChbY2FsbFR5cGUsIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gY2FsbFR5cGUgPT09ICdlcnJvcicgPyAndGhyb3cnIDogJ3JldHVybidcbiAgICAgICAgcmV0dXJuIHsgdHlwZSwgdmFsdWUgfVxuICAgICAgfSlcbiAgICB9LFxuICB9XG5cbiAgbGV0IG9uY2VJbXBsZW1lbnRhdGlvbnM6ICgoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKVtdID0gW11cblxuICBsZXQgbmFtZTogc3RyaW5nID0gKHN0dWIgYXMgYW55KS5uYW1lXG5cbiAgc3R1Yi5nZXRNb2NrTmFtZSA9ICgpID0+IG5hbWUgfHwgJ3ZpLmZuKCknXG4gIHN0dWIubW9ja05hbWUgPSAobikgPT4ge1xuICAgIG5hbWUgPSBuXG4gICAgcmV0dXJuIHN0dWJcbiAgfVxuXG4gIHN0dWIubW9ja0NsZWFyID0gKCkgPT4ge1xuICAgIHN0dWIucmVzZXQoKVxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tSZXNldCA9ICgpID0+IHtcbiAgICBzdHViLnJlc2V0KClcbiAgICBpbXBsZW1lbnRhdGlvbiA9ICgpID0+IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFRSZXR1cm5zXG4gICAgb25jZUltcGxlbWVudGF0aW9ucyA9IFtdXG4gICAgcmV0dXJuIHN0dWJcbiAgfVxuXG4gIHN0dWIubW9ja1Jlc3RvcmUgPSAoKSA9PiB7XG4gICAgc3R1Yi5tb2NrUmVzZXQoKVxuICAgIGltcGxlbWVudGF0aW9uID0gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHN0dWJcbiAgfVxuXG4gIHN0dWIuZ2V0TW9ja0ltcGxlbWVudGF0aW9uID0gKCkgPT4gaW1wbGVtZW50YXRpb25cbiAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb24gPSAoZm46ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpID0+IHtcbiAgICBpbXBsZW1lbnRhdGlvbiA9IGZuXG4gICAgcmV0dXJuIHN0dWJcbiAgfVxuXG4gIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uT25jZSA9IChmbjogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgPT4ge1xuICAgIG9uY2VJbXBsZW1lbnRhdGlvbnMucHVzaChmbilcbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrUmV0dXJuVGhpcyA9ICgpID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24odGhpczogVFJldHVybnMpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSlcblxuICBzdHViLm1vY2tSZXR1cm5WYWx1ZSA9ICh2YWw6IFRSZXR1cm5zKSA9PiBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB2YWwpXG4gIHN0dWIubW9ja1JldHVyblZhbHVlT25jZSA9ICh2YWw6IFRSZXR1cm5zKSA9PiBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4gdmFsKVxuXG4gIHN0dWIubW9ja1Jlc29sdmVkVmFsdWUgPSAodmFsOiBBd2FpdGVkPFRSZXR1cm5zPikgPT5cbiAgICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFRSZXR1cm5zKSlcblxuICBzdHViLm1vY2tSZXNvbHZlZFZhbHVlT25jZSA9ICh2YWw6IEF3YWl0ZWQ8VFJldHVybnM+KSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFRSZXR1cm5zKSlcblxuICBzdHViLm1vY2tSZWplY3RlZFZhbHVlID0gKHZhbDogdW5rbm93bikgPT5cbiAgICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlamVjdCh2YWwpKVxuXG4gIHN0dWIubW9ja1JlamVjdGVkVmFsdWVPbmNlID0gKHZhbDogdW5rbm93bikgPT5cbiAgICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4gUHJvbWlzZS5yZWplY3QodmFsKSlcblxuICB1dGlsLmFkZFByb3BlcnR5KHN0dWIsICdtb2NrJywgKCkgPT4gbW9ja0NvbnRleHQpXG5cbiAgc3R1Yi53aWxsQ2FsbChmdW5jdGlvbih0aGlzOiB1bmtub3duLCAuLi5hcmdzKSB7XG4gICAgaW5zdGFuY2VzLnB1c2godGhpcylcbiAgICBjb25zdCBpbXBsID0gb25jZUltcGxlbWVudGF0aW9ucy5zaGlmdCgpIHx8IGltcGxlbWVudGF0aW9uIHx8IHN0dWIuZ2V0T3JpZ2luYWwoKSB8fCAoKCkgPT4ge30pXG4gICAgcmV0dXJuIGltcGwuYXBwbHkodGhpcywgYXJncylcbiAgfSlcblxuICBzcGllcy5hZGQoc3R1YilcblxuICByZXR1cm4gc3R1YiBhcyBhbnlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgUiA9IGFueT4oKTogSmVzdE1vY2tDb21wYXRGbjxUQXJncywgUj5cbmV4cG9ydCBmdW5jdGlvbiBmbjxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10sIFIgPSBhbnk+KFxuICBpbXBsZW1lbnRhdGlvbjogKC4uLmFyZ3M6IFRBcmdzKSA9PiBSXG4pOiBKZXN0TW9ja0NvbXBhdEZuPFRBcmdzLCBSPlxuZXhwb3J0IGZ1bmN0aW9uIGZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgUiA9IGFueT4oXG4gIGltcGxlbWVudGF0aW9uPzogKC4uLmFyZ3M6IFRBcmdzKSA9PiBSLFxuKTogSmVzdE1vY2tDb21wYXRGbjxUQXJncywgUj4ge1xuICByZXR1cm4gZW5oYW5jZVNweSh0aW55c3B5LnNweU9uKHsgZm46IGltcGxlbWVudGF0aW9uIHx8ICgoKSA9PiB7fSkgfSwgJ2ZuJykpIGFzIHVua25vd24gYXMgSmVzdE1vY2tDb21wYXRGblxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVZLE1BQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHO0FBQ3hCLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRTtBQUNwQyxFQUFFLE9BQU8sT0FBTyxHQUFHLEtBQUssVUFBVSxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUN0RSxDQUFDO0FBQ00sU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDL0MsRUFBRSxNQUFNLFVBQVUsR0FBRztBQUNyQixJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQ2pCLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsR0FB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