@nlabs/rip-hunter 2.6.1 → 2.6.3
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/package.json +2 -2
- package/tsconfig.json +0 -1
- package/lib/index.test.js +0 -145
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nlabs/rip-hunter",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.3",
|
|
4
4
|
"description": "JS utilities for AJAX and GraphQL",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"lodash": "4.17.21"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@nlabs/fetch-mock": "1.0.
|
|
52
|
+
"@nlabs/fetch-mock": "1.0.2",
|
|
53
53
|
"@types/jest": "29.5.0",
|
|
54
54
|
"@types/node": "18.15.7",
|
|
55
55
|
"eslint": "8.36.0",
|
package/tsconfig.json
CHANGED
package/lib/index.test.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
var import_fetch_mock = require("@nlabs/fetch-mock");
|
|
2
|
-
var import__ = require(".");
|
|
3
|
-
describe("rip-hunter", () => {
|
|
4
|
-
const fetchMock = new import_fetch_mock.FetchMock();
|
|
5
|
-
const url = "http://www.test.com/graphql";
|
|
6
|
-
describe("#toGql", () => {
|
|
7
|
-
it("should convert a string to GQL", () => {
|
|
8
|
-
const str = "test";
|
|
9
|
-
const gql = (0, import__.toGql)(str);
|
|
10
|
-
return expect('"test"').toEqual(gql);
|
|
11
|
-
});
|
|
12
|
-
it("should convert a number to GQL", () => {
|
|
13
|
-
const num = 123;
|
|
14
|
-
const gql = (0, import__.toGql)(num);
|
|
15
|
-
return expect(123).toEqual(gql);
|
|
16
|
-
});
|
|
17
|
-
it("should convert a JSON object to GQL", () => {
|
|
18
|
-
const obj = { prop: "test" };
|
|
19
|
-
const gql = (0, import__.toGql)(obj);
|
|
20
|
-
return expect('{prop: "test"}').toEqual(gql);
|
|
21
|
-
});
|
|
22
|
-
it("should convert an array to GQL", () => {
|
|
23
|
-
const array = [{ prop: "test" }];
|
|
24
|
-
const gql = (0, import__.toGql)(array);
|
|
25
|
-
return expect('[{prop: "test"}]').toEqual(gql);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
describe("#graphqlQuery", () => {
|
|
29
|
-
const query = "query { app { ping } }";
|
|
30
|
-
const data = { hello: "world" };
|
|
31
|
-
const errors = [{ message: "test_error", name: "Test Error" }];
|
|
32
|
-
it("should get a successful response from a query", (done) => {
|
|
33
|
-
fetchMock.postOnce(url, {
|
|
34
|
-
body: { data },
|
|
35
|
-
headers: new Headers({ "Content-Type": "application/json" }),
|
|
36
|
-
sendAsJson: true,
|
|
37
|
-
status: 200
|
|
38
|
-
});
|
|
39
|
-
(0, import__.graphqlQuery)(url, { query }).then((results) => {
|
|
40
|
-
expect(results.hello).toEqual("world");
|
|
41
|
-
done();
|
|
42
|
-
}).catch(done);
|
|
43
|
-
});
|
|
44
|
-
it("should send a token", (done) => {
|
|
45
|
-
const token = "test_token";
|
|
46
|
-
fetchMock.postOnce(url, {
|
|
47
|
-
body: { data },
|
|
48
|
-
headers: new Headers({ "Content-Type": "application/json" }),
|
|
49
|
-
sendAsJson: true,
|
|
50
|
-
status: 200
|
|
51
|
-
}, { overwriteRoutes: true });
|
|
52
|
-
(0, import__.graphqlQuery)(url, { query }, { token }).then(() => {
|
|
53
|
-
const opts = fetchMock.lastOptions();
|
|
54
|
-
expect(opts.headers.get("Authorization")).toEqual(`Bearer ${token}`);
|
|
55
|
-
done();
|
|
56
|
-
}).catch(done);
|
|
57
|
-
});
|
|
58
|
-
it("should get an error from a query", (done) => {
|
|
59
|
-
fetchMock.postOnce(url, {
|
|
60
|
-
body: { errors },
|
|
61
|
-
headers: new Headers({ "Content-Type": "application/json" }),
|
|
62
|
-
sendAsJson: true,
|
|
63
|
-
status: 200
|
|
64
|
-
}, { overwriteRoutes: true });
|
|
65
|
-
(0, import__.graphqlQuery)(url, { query }).then(() => {
|
|
66
|
-
expect(false).toEqual(true);
|
|
67
|
-
done();
|
|
68
|
-
}).catch((error) => {
|
|
69
|
-
expect(error.errors[0]).toEqual("test_error");
|
|
70
|
-
done();
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
describe("#graphqlQuery mutation", () => {
|
|
75
|
-
const query = "mutation { app { ping } }";
|
|
76
|
-
const data = { hello: "world" };
|
|
77
|
-
const errors = [{ message: "test_error", name: "Test Error" }];
|
|
78
|
-
it("should get a successful response from a query", (done) => {
|
|
79
|
-
fetchMock.postOnce(url, {
|
|
80
|
-
body: { data },
|
|
81
|
-
headers: new Headers({ "Content-Type": "application/json" }),
|
|
82
|
-
sendAsJson: true,
|
|
83
|
-
status: 200
|
|
84
|
-
}, { overwriteRoutes: true });
|
|
85
|
-
(0, import__.graphqlQuery)(url, { query }).then((results) => {
|
|
86
|
-
expect(results.hello).toEqual("world");
|
|
87
|
-
done();
|
|
88
|
-
}).catch(done);
|
|
89
|
-
});
|
|
90
|
-
it("should send a token", (done) => {
|
|
91
|
-
const token = "test_token";
|
|
92
|
-
fetchMock.postOnce(url, {
|
|
93
|
-
body: { data },
|
|
94
|
-
headers: new Headers({ "Content-Type": "application/json" }),
|
|
95
|
-
sendAsJson: true,
|
|
96
|
-
status: 200
|
|
97
|
-
}, { overwriteRoutes: true });
|
|
98
|
-
(0, import__.graphqlQuery)(url, { query }, { token }).then(() => {
|
|
99
|
-
const opts = fetchMock.lastOptions();
|
|
100
|
-
expect(opts.headers.get("Authorization")).toEqual(`Bearer ${token}`);
|
|
101
|
-
done();
|
|
102
|
-
}).catch(done);
|
|
103
|
-
});
|
|
104
|
-
it("should get an error from a query", (done) => {
|
|
105
|
-
fetchMock.postOnce(url, {
|
|
106
|
-
body: { errors },
|
|
107
|
-
headers: new Headers({ "Content-Type": "application/json" }),
|
|
108
|
-
sendAsJson: true,
|
|
109
|
-
status: 200
|
|
110
|
-
}, { overwriteRoutes: true });
|
|
111
|
-
(0, import__.graphqlQuery)(url, { query }).then(() => {
|
|
112
|
-
expect(false).toEqual(true);
|
|
113
|
-
done();
|
|
114
|
-
}).catch((error) => {
|
|
115
|
-
expect(error.errors[0]).toEqual("test_error");
|
|
116
|
-
done();
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
describe(".ajax", () => {
|
|
121
|
-
const gql = "{ app { ping } }";
|
|
122
|
-
it("should be able to post", (done) => {
|
|
123
|
-
fetchMock.postOnce(url, {
|
|
124
|
-
body: { test: "demo" },
|
|
125
|
-
headers: new Headers({ "Content-Type": "application/json" }),
|
|
126
|
-
sendAsJson: true,
|
|
127
|
-
status: 200
|
|
128
|
-
}, { overwriteRoutes: true });
|
|
129
|
-
(0, import__.ajax)(url, "post", gql).then((response) => {
|
|
130
|
-
expect(response.test).toEqual("demo");
|
|
131
|
-
done();
|
|
132
|
-
}).catch((error) => {
|
|
133
|
-
expect(error).toEqual(false);
|
|
134
|
-
done();
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
describe(".removeSpaces", () => {
|
|
139
|
-
it("should remove extra spacing except within quotes", () => {
|
|
140
|
-
const str = 'test{ method: {id: "hello world"}';
|
|
141
|
-
expect((0, import__.removeSpaces)(str)).toEqual('test{method:{id:"hello world"}');
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRlc3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7RmV0Y2hNb2NrfSBmcm9tICdAbmxhYnMvZmV0Y2gtbW9jayc7XG5cbmltcG9ydCB7YWpheCwgZ3JhcGhxbFF1ZXJ5LCByZW1vdmVTcGFjZXMsIHRvR3FsfSBmcm9tICcuJztcbmltcG9ydCB7QXBpRXJyb3J9IGZyb20gJy4vZXJyb3JzL0FwaUVycm9yJztcblxuZGVzY3JpYmUoJ3JpcC1odW50ZXInLCAoKSA9PiB7XG4gIGNvbnN0IGZldGNoTW9jayA9IG5ldyBGZXRjaE1vY2soKTtcbiAgY29uc3QgdXJsID0gJ2h0dHA6Ly93d3cudGVzdC5jb20vZ3JhcGhxbCc7XG5cbiAgZGVzY3JpYmUoJyN0b0dxbCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgdG8gR1FMJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSAndGVzdCc7XG4gICAgICBjb25zdCBncWw6IHN0cmluZyA9IHRvR3FsKHN0cik7XG4gICAgICByZXR1cm4gZXhwZWN0KCdcInRlc3RcIicpLnRvRXF1YWwoZ3FsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBhIG51bWJlciB0byBHUUwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBudW06IG51bWJlciA9IDEyMztcbiAgICAgIGNvbnN0IGdxbDogc3RyaW5nID0gdG9HcWwobnVtKTtcbiAgICAgIHJldHVybiBleHBlY3QoMTIzKS50b0VxdWFsKGdxbCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBKU09OIG9iamVjdCB0byBHUUwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmo6IG9iamVjdCA9IHtwcm9wOiAndGVzdCd9O1xuICAgICAgY29uc3QgZ3FsOiBzdHJpbmcgPSB0b0dxbChvYmopO1xuICAgICAgcmV0dXJuIGV4cGVjdCgne3Byb3A6IFwidGVzdFwifScpLnRvRXF1YWwoZ3FsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBhbiBhcnJheSB0byBHUUwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheTogb2JqZWN0W10gPSBbe3Byb3A6ICd0ZXN0J31dO1xuICAgICAgY29uc3QgZ3FsOiBzdHJpbmcgPSB0b0dxbChhcnJheSk7XG4gICAgICByZXR1cm4gZXhwZWN0KCdbe3Byb3A6IFwidGVzdFwifV0nKS50b0VxdWFsKGdxbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcjZ3JhcGhxbFF1ZXJ5JywgKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSAncXVlcnkgeyBhcHAgeyBwaW5nIH0gfSc7XG4gICAgY29uc3QgZGF0YTogb2JqZWN0ID0ge2hlbGxvOiAnd29ybGQnfTtcbiAgICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbe21lc3NhZ2U6ICd0ZXN0X2Vycm9yJywgbmFtZTogJ1Rlc3QgRXJyb3InfV07XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHF1ZXJ5JywgKGRvbmUpID0+IHtcbiAgICAgIGZldGNoTW9jay5wb3N0T25jZSh1cmwsIHtcbiAgICAgICAgYm9keToge2RhdGF9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgICBzZW5kQXNKc29uOiB0cnVlLFxuICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgfSk7XG5cbiAgICAgIGdyYXBocWxRdWVyeSh1cmwsIHtxdWVyeX0pXG4gICAgICAgIC50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdHMuaGVsbG8pLnRvRXF1YWwoJ3dvcmxkJyk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgYSB0b2tlbicsIChkb25lKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbjogc3RyaW5nID0gJ3Rlc3RfdG9rZW4nO1xuICAgICAgZmV0Y2hNb2NrLnBvc3RPbmNlKHVybCwge1xuICAgICAgICBib2R5OiB7ZGF0YX0sXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSksXG4gICAgICAgIHNlbmRBc0pzb246IHRydWUsXG4gICAgICAgIHN0YXR1czogMjAwXG4gICAgICB9LCB7b3ZlcndyaXRlUm91dGVzOiB0cnVlfSk7XG5cbiAgICAgIGdyYXBocWxRdWVyeSh1cmwsIHtxdWVyeX0sIHt0b2tlbn0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRzID0gZmV0Y2hNb2NrLmxhc3RPcHRpb25zKCk7XG4gICAgICAgICAgZXhwZWN0KG9wdHMuaGVhZGVycy5nZXQoJ0F1dGhvcml6YXRpb24nKSkudG9FcXVhbChgQmVhcmVyICR7dG9rZW59YCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhbiBlcnJvciBmcm9tIGEgcXVlcnknLCAoZG9uZSkgPT4ge1xuICAgICAgZmV0Y2hNb2NrLnBvc3RPbmNlKHVybCwge1xuICAgICAgICBib2R5OiB7ZXJyb3JzfSxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9KSxcbiAgICAgICAgc2VuZEFzSnNvbjogdHJ1ZSxcbiAgICAgICAgc3RhdHVzOiAyMDBcbiAgICAgIH0sIHtvdmVyd3JpdGVSb3V0ZXM6IHRydWV9KTtcblxuICAgICAgZ3JhcGhxbFF1ZXJ5KHVybCwge3F1ZXJ5fSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGV4cGVjdChmYWxzZSkudG9FcXVhbCh0cnVlKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEFwaUVycm9yKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KGVycm9yLmVycm9yc1swXSkudG9FcXVhbCgndGVzdF9lcnJvcicpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcjZ3JhcGhxbFF1ZXJ5IG11dGF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSAnbXV0YXRpb24geyBhcHAgeyBwaW5nIH0gfSc7XG4gICAgY29uc3QgZGF0YTogb2JqZWN0ID0ge2hlbGxvOiAnd29ybGQnfTtcbiAgICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbe21lc3NhZ2U6ICd0ZXN0X2Vycm9yJywgbmFtZTogJ1Rlc3QgRXJyb3InfV07XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHF1ZXJ5JywgKGRvbmUpID0+IHtcbiAgICAgIGZldGNoTW9jay5wb3N0T25jZSh1cmwsIHtcbiAgICAgICAgYm9keToge2RhdGF9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgICBzZW5kQXNKc29uOiB0cnVlLFxuICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgfSwge292ZXJ3cml0ZVJvdXRlczogdHJ1ZX0pO1xuXG4gICAgICBncmFwaHFsUXVlcnkodXJsLCB7cXVlcnl9KVxuICAgICAgICAudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHRzLmhlbGxvKS50b0VxdWFsKCd3b3JsZCcpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIGEgdG9rZW4nLCAoZG9uZSkgPT4ge1xuICAgICAgY29uc3QgdG9rZW46IHN0cmluZyA9ICd0ZXN0X3Rva2VuJztcbiAgICAgIGZldGNoTW9jay5wb3N0T25jZSh1cmwsIHtcbiAgICAgICAgYm9keToge2RhdGF9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgICBzZW5kQXNKc29uOiB0cnVlLFxuICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgfSwge292ZXJ3cml0ZVJvdXRlczogdHJ1ZX0pO1xuXG4gICAgICBncmFwaHFsUXVlcnkodXJsLCB7cXVlcnl9LCB7dG9rZW59KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0cyA9IGZldGNoTW9jay5sYXN0T3B0aW9ucygpO1xuICAgICAgICAgIGV4cGVjdChvcHRzLmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJykpLnRvRXF1YWwoYEJlYXJlciAke3Rva2VufWApO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gZXJyb3IgZnJvbSBhIHF1ZXJ5JywgKGRvbmUpID0+IHtcbiAgICAgIGZldGNoTW9jay5wb3N0T25jZSh1cmwsIHtcbiAgICAgICAgYm9keToge2Vycm9yc30sXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSksXG4gICAgICAgIHNlbmRBc0pzb246IHRydWUsXG4gICAgICAgIHN0YXR1czogMjAwXG4gICAgICB9LCB7b3ZlcndyaXRlUm91dGVzOiB0cnVlfSk7XG5cbiAgICAgIGdyYXBocWxRdWVyeSh1cmwsIHtxdWVyeX0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBleHBlY3QoZmFsc2UpLnRvRXF1YWwodHJ1ZSk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBBcGlFcnJvcikgPT4ge1xuICAgICAgICAgIGV4cGVjdChlcnJvci5lcnJvcnNbMF0pLnRvRXF1YWwoJ3Rlc3RfZXJyb3InKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnLmFqYXgnLCAoKSA9PiB7XG4gICAgY29uc3QgZ3FsOiBzdHJpbmcgPSAneyBhcHAgeyBwaW5nIH0gfSc7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gcG9zdCcsIChkb25lKSA9PiB7XG4gICAgICBmZXRjaE1vY2sucG9zdE9uY2UodXJsLCB7XG4gICAgICAgIGJvZHk6IHt0ZXN0OiAnZGVtbyd9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgICBzZW5kQXNKc29uOiB0cnVlLFxuICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgfSwge292ZXJ3cml0ZVJvdXRlczogdHJ1ZX0pO1xuXG4gICAgICBhamF4KHVybCwgJ3Bvc3QnLCBncWwpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXNwb25zZS50ZXN0KS50b0VxdWFsKCdkZW1vJyk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBBcGlFcnJvcikgPT4ge1xuICAgICAgICAgIGV4cGVjdChlcnJvcikudG9FcXVhbChmYWxzZSk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJy5yZW1vdmVTcGFjZXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgZXh0cmEgc3BhY2luZyBleGNlcHQgd2l0aGluIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gJ3Rlc3R7IG1ldGhvZDoge2lkOiBcImhlbGxvIHdvcmxkXCJ9JztcbiAgICAgIGV4cGVjdChyZW1vdmVTcGFjZXMoc3RyKSkudG9FcXVhbCgndGVzdHttZXRob2Q6e2lkOlwiaGVsbG8gd29ybGRcIn0nKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBLHdCQUF3QjtBQUV4QixlQUFzRDtBQUd0RCxTQUFTLGNBQWMsTUFBTTtBQUMzQixRQUFNLFlBQVksSUFBSSw0QkFBVTtBQUNoQyxRQUFNLE1BQU07QUFFWixXQUFTLFVBQVUsTUFBTTtBQUN2QixPQUFHLGtDQUFrQyxNQUFNO0FBQ3pDLFlBQU0sTUFBYztBQUNwQixZQUFNLFVBQWMsZ0JBQU0sR0FBRztBQUM3QixhQUFPLE9BQU8sUUFBUSxFQUFFLFFBQVEsR0FBRztBQUFBLElBQ3JDLENBQUM7QUFFRCxPQUFHLGtDQUFrQyxNQUFNO0FBQ3pDLFlBQU0sTUFBYztBQUNwQixZQUFNLFVBQWMsZ0JBQU0sR0FBRztBQUM3QixhQUFPLE9BQU8sR0FBRyxFQUFFLFFBQVEsR0FBRztBQUFBLElBQ2hDLENBQUM7QUFFRCxPQUFHLHVDQUF1QyxNQUFNO0FBQzlDLFlBQU0sTUFBYyxFQUFDLE1BQU0sT0FBTTtBQUNqQyxZQUFNLFVBQWMsZ0JBQU0sR0FBRztBQUM3QixhQUFPLE9BQU8sZ0JBQWdCLEVBQUUsUUFBUSxHQUFHO0FBQUEsSUFDN0MsQ0FBQztBQUVELE9BQUcsa0NBQWtDLE1BQU07QUFDekMsWUFBTSxRQUFrQixDQUFDLEVBQUMsTUFBTSxPQUFNLENBQUM7QUFDdkMsWUFBTSxVQUFjLGdCQUFNLEtBQUs7QUFDL0IsYUFBTyxPQUFPLGtCQUFrQixFQUFFLFFBQVEsR0FBRztBQUFBLElBQy9DLENBQUM7QUFBQSxFQUNILENBQUM7QUFFRCxXQUFTLGlCQUFpQixNQUFNO0FBQzlCLFVBQU0sUUFBZ0I7QUFDdEIsVUFBTSxPQUFlLEVBQUMsT0FBTyxRQUFPO0FB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
|