@fairspec/agent 0.9.0 → 0.9.2
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/build/examples/client.js +16 -0
- package/build/main.js +6 -0
- package/build/package.json +1 -1
- package/build/server.js +2 -1
- package/build/tools/data/validate.d.ts +180 -178
- package/build/tools/data/validate.js +6 -3
- package/build/tools/data/validate.spec.js +22 -22
- package/build/tools/dataSchema/infer.d.ts +10 -8
- package/build/tools/dataSchema/infer.js +6 -3
- package/build/tools/dataSchema/infer.spec.js +12 -10
- package/build/tools/dataSchema/validate.d.ts +173 -171
- package/build/tools/dataSchema/validate.js +6 -3
- package/build/tools/dataSchema/validate.spec.js +15 -15
- package/build/tools/dataset/infer.d.ts +804 -802
- package/build/tools/dataset/infer.js +6 -3
- package/build/tools/dataset/infer.spec.js +18 -18
- package/build/tools/dataset/validate.d.ts +180 -178
- package/build/tools/dataset/validate.js +6 -3
- package/build/tools/dataset/validate.spec.js +16 -16
- package/build/tools/dialect/infer.d.ts +98 -96
- package/build/tools/dialect/infer.js +6 -3
- package/build/tools/dialect/infer.spec.js +16 -14
- package/build/tools/table/query.d.ts +10 -8
- package/build/tools/table/query.js +6 -3
- package/build/tools/table/query.spec.js +31 -31
- package/build/tools/table/validate.d.ts +180 -178
- package/build/tools/table/validate.js +6 -3
- package/build/tools/table/validate.spec.js +11 -11
- package/build/tools/tableSchema/infer.d.ts +501 -499
- package/build/tools/tableSchema/infer.js +7 -3
- package/build/tools/tableSchema/infer.spec.js +35 -33
- package/build/tools/tableSchema/validate.d.ts +173 -171
- package/build/tools/tableSchema/validate.js +6 -3
- package/build/tools/tableSchema/validate.spec.js +13 -13
- package/package.json +2 -2
- package/build/actions/tableSchema/asHtml.d.ts +0 -4
- package/build/actions/tableSchema/asHtml.js +0 -82
- package/build/actions/tableSchema/asHtml.spec.js +0 -356
- package/build/actions/tableSchema/asMarkdown.d.ts +0 -4
- package/build/actions/tableSchema/asMarkdown.js +0 -65
- package/build/actions/tableSchema/asMarkdown.spec.js +0 -133
- package/build/document/Document.d.ts +0 -2
- package/build/document/Document.js +0 -2
- package/build/document/index.d.ts +0 -3
- package/build/document/index.js +0 -3
- package/build/document/types/Base.d.ts +0 -3
- package/build/document/types/Base.js +0 -2
- package/build/document/types/Json.d.ts +0 -5
- package/build/document/types/Json.js +0 -2
- package/build/document/validate.d.ts +0 -5
- package/build/document/validate.js +0 -23
- package/build/document/validate.spec.d.ts +0 -1
- package/build/document/validate.spec.js +0 -71
- package/build/plugin.d.ts +0 -6
- package/build/plugin.js +0 -15
- package/build/schema/convert/toHtml.d.ts +0 -4
- package/build/schema/convert/toHtml.js +0 -107
- package/build/schema/convert/toHtml.spec.d.ts +0 -1
- package/build/schema/convert/toHtml.spec.js +0 -432
- package/build/schema/convert/toMarkdown.d.ts +0 -4
- package/build/schema/convert/toMarkdown.js +0 -75
- package/build/schema/convert/toMarkdown.spec.d.ts +0 -1
- package/build/schema/convert/toMarkdown.spec.js +0 -137
- package/build/schema/index.d.ts +0 -2
- package/build/schema/index.js +0 -3
- package/build/tableSchema/convert/toHtml.d.ts +0 -4
- package/build/tableSchema/convert/toHtml.js +0 -80
- package/build/tableSchema/convert/toHtml.spec.d.ts +0 -1
- package/build/tableSchema/convert/toHtml.spec.js +0 -375
- package/build/tableSchema/convert/toMarkdown.d.ts +0 -4
- package/build/tableSchema/convert/toMarkdown.js +0 -57
- package/build/tableSchema/convert/toMarkdown.spec.d.ts +0 -1
- package/build/tableSchema/convert/toMarkdown.spec.js +0 -141
- package/build/tableSchema/index.d.ts +0 -2
- package/build/tableSchema/index.js +0 -3
- /package/build/{actions/tableSchema/asHtml.spec.d.ts → examples/client.d.ts} +0 -0
- /package/build/{actions/tableSchema/asMarkdown.spec.d.ts → main.d.ts} +0 -0
|
@@ -21,8 +21,8 @@ describe("validateTableSchemaTool", () => {
|
|
|
21
21
|
}, {});
|
|
22
22
|
expect.assert(result);
|
|
23
23
|
expect.assert(!("error" in result));
|
|
24
|
-
expect(result.valid).toBe(true);
|
|
25
|
-
expect(result.errors).toHaveLength(0);
|
|
24
|
+
expect(result.report.valid).toBe(true);
|
|
25
|
+
expect(result.report.errors).toHaveLength(0);
|
|
26
26
|
});
|
|
27
27
|
it("detects invalid table schema", async () => {
|
|
28
28
|
const descriptor = {
|
|
@@ -37,8 +37,8 @@ describe("validateTableSchemaTool", () => {
|
|
|
37
37
|
}, {});
|
|
38
38
|
expect.assert(result);
|
|
39
39
|
expect.assert(!("error" in result));
|
|
40
|
-
expect(result.valid).toBe(false);
|
|
41
|
-
expect(result.errors.length).toBeGreaterThan(0);
|
|
40
|
+
expect(result.report.valid).toBe(false);
|
|
41
|
+
expect(result.report.errors.length).toBeGreaterThan(0);
|
|
42
42
|
});
|
|
43
43
|
it("validates table schema from file path", async () => {
|
|
44
44
|
const descriptor = {
|
|
@@ -56,8 +56,8 @@ describe("validateTableSchemaTool", () => {
|
|
|
56
56
|
}, {});
|
|
57
57
|
expect.assert(result);
|
|
58
58
|
expect.assert(!("error" in result));
|
|
59
|
-
expect(result.valid).toBe(true);
|
|
60
|
-
expect(result.errors).toHaveLength(0);
|
|
59
|
+
expect(result.report.valid).toBe(true);
|
|
60
|
+
expect(result.report.errors).toHaveLength(0);
|
|
61
61
|
});
|
|
62
62
|
it("detects invalid table schema from file path", async () => {
|
|
63
63
|
const descriptor = {
|
|
@@ -75,8 +75,8 @@ describe("validateTableSchemaTool", () => {
|
|
|
75
75
|
}, {});
|
|
76
76
|
expect.assert(result);
|
|
77
77
|
expect.assert(!("error" in result));
|
|
78
|
-
expect(result.valid).toBe(false);
|
|
79
|
-
expect(result.errors.length).toBeGreaterThan(0);
|
|
78
|
+
expect(result.report.valid).toBe(false);
|
|
79
|
+
expect(result.report.errors.length).toBeGreaterThan(0);
|
|
80
80
|
});
|
|
81
81
|
it("validates minimal valid descriptor", async () => {
|
|
82
82
|
const descriptor = {
|
|
@@ -87,8 +87,8 @@ describe("validateTableSchemaTool", () => {
|
|
|
87
87
|
}, {});
|
|
88
88
|
expect.assert(result);
|
|
89
89
|
expect.assert(!("error" in result));
|
|
90
|
-
expect(result.valid).toBe(true);
|
|
91
|
-
expect(result.errors).toHaveLength(0);
|
|
90
|
+
expect(result.report.valid).toBe(true);
|
|
91
|
+
expect(result.report.errors).toHaveLength(0);
|
|
92
92
|
});
|
|
93
93
|
it("validates schema with field constraints", async () => {
|
|
94
94
|
const descriptor = {
|
|
@@ -114,8 +114,8 @@ describe("validateTableSchemaTool", () => {
|
|
|
114
114
|
}, {});
|
|
115
115
|
expect.assert(result);
|
|
116
116
|
expect.assert(!("error" in result));
|
|
117
|
-
expect(result.valid).toBe(true);
|
|
118
|
-
expect(result.errors).toHaveLength(0);
|
|
117
|
+
expect(result.report.valid).toBe(true);
|
|
118
|
+
expect(result.report.errors).toHaveLength(0);
|
|
119
119
|
});
|
|
120
120
|
});
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rvb2xzL3RhYmxlU2NoZW1hL3ZhbGlkYXRlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdkQsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUNoRSxNQUFNLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDeEQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ3hELE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN6RCxNQUFNLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2hFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sVUFBVSxHQUFlO1lBQzdCLFVBQVUsRUFBRTtnQkFDVixFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBa0IsRUFBRTtnQkFDaEMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQWlCLEVBQUU7YUFDbEM7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSx1QkFB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O29CQUN4QixXQUFXLEVBQUU7d0JBQ1gsUUFBUSxFQUFFLElBQUk7d0JBQ2QsT0FBTyxFQUFFLENBQUM7cUJBQ1g7aUJBQ0Y7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRSxRQUFpQjtvQkFDdkIsTUFBTSxFQUFFLE9BQWdCO29CQUN4QixXQUFXLEVBQUU7d0JBQ1gsUUFBUSxFQUFFLElBQUk7cUJBQ2Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUE7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxDQUNwRDtZQUNFLE1BQU0sRUFBRSxVQUFVO1NBQ25CLEVBQ0QsRUFBRSxDQUNILENBQUE7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBRW5DLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERlc2NyaXB0b3IgfSBmcm9tIFwiQGZhaXJzcGVjL2xpYnJhcnlcIlxuaW1wb3J0IHsgd3JpdGVUZW1wRmlsZSB9IGZyb20gXCJAZmFpcnNwZWMvbGlicmFyeVwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgdmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wgfSBmcm9tIFwiLi92YWxpZGF0ZS50c1wiXG5cbmRlc2NyaWJlKFwidmFsaWRhdGVUYWJsZVNjaGVtYVRvb2xcIiwgKCkgPT4ge1xuICBpdChcInZhbGlkYXRlcyB0b29sIHN0cnVjdHVyZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHZhbGlkYXRlVGFibGVTY2hlbWFUb29sLmlkKS50b0JlKFwidmFsaWRhdGUtdGFibGUtc2NoZW1hXCIpXG4gICAgZXhwZWN0KHZhbGlkYXRlVGFibGVTY2hlbWFUb29sLmRlc2NyaXB0aW9uKS50b0JlVHJ1dGh5KClcbiAgICBleHBlY3QodmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wuaW5wdXRTY2hlbWEpLnRvQmVUcnV0aHkoKVxuICAgIGV4cGVjdCh2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbC5vdXRwdXRTY2hlbWEpLnRvQmVUcnV0aHkoKVxuICAgIGV4cGVjdCh2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbC5leGVjdXRlKS50b0JlVHlwZU9mKFwiZnVuY3Rpb25cIilcbiAgfSlcblxuICBpdChcInZhbGlkYXRlcyBhIHZhbGlkIHRhYmxlIHNjaGVtYSBkZXNjcmlwdG9yXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogeyB0eXBlOiBcImludGVnZXJcIiBhcyBjb25zdCB9LFxuICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgYXMgY29uc3QgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICBzb3VyY2U6IGRlc2NyaXB0b3IsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC52YWxpZCkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMClcbiAgfSlcblxuICBpdChcImRldGVjdHMgaW52YWxpZCB0YWJsZSBzY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3I6IERlc2NyaXB0b3IgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlkOiB7XG4gICAgICAgICAgdHlwZTogMTIzIGFzIHVua25vd24gYXMgXCJpbnRlZ2VyXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZhbGlkYXRlVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgc291cmNlOiBkZXNjcmlwdG9yLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQudmFsaWQpLnRvQmUoZmFsc2UpXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMClcbiAgfSlcblxuICBpdChcInZhbGlkYXRlcyB0YWJsZSBzY2hlbWEgZnJvbSBmaWxlIHBhdGhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlkOiB7IHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIG5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBhZ2U6IHsgdHlwZTogXCJpbnRlZ2VyXCIgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKEpTT04uc3RyaW5naWZ5KGRlc2NyaXB0b3IpLCB7XG4gICAgICBmb3JtYXQ6IFwianNvblwiLFxuICAgIH0pXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHNvdXJjZTogcGF0aCxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LnZhbGlkKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKVxuICB9KVxuXG4gIGl0KFwiZGV0ZWN0cyBpbnZhbGlkIHRhYmxlIHNjaGVtYSBmcm9tIGZpbGUgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcIm5vdC1hLXZhbGlkLXR5cGVcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKEpTT04uc3RyaW5naWZ5KGRlc2NyaXB0b3IpLCB7XG4gICAgICBmb3JtYXQ6IFwianNvblwiLFxuICAgIH0pXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHNvdXJjZTogcGF0aCxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LnZhbGlkKS50b0JlKGZhbHNlKVxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApXG4gIH0pXG5cbiAgaXQoXCJ2YWxpZGF0ZXMgbWluaW1hbCB2YWxpZCBkZXNjcmlwdG9yXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yID0ge1xuICAgICAgcHJvcGVydGllczoge30sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICBzb3VyY2U6IGRlc2NyaXB0b3IsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC52YWxpZCkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMClcbiAgfSlcblxuICBpdChcInZhbGlkYXRlcyBzY2hlbWEgd2l0aCBmaWVsZCBjb25zdHJhaW50c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvcjogRGVzY3JpcHRvciA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIiBhcyBjb25zdCxcbiAgICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVtYWlsOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIiBhcyBjb25zdCxcbiAgICAgICAgICBmb3JtYXQ6IFwiZW1haWxcIiBhcyBjb25zdCxcbiAgICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICBzb3VyY2U6IGRlc2NyaXB0b3IsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC52YWxpZCkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMClcbiAgfSlcbn0pXG4iXX0=
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rvb2xzL3RhYmxlU2NoZW1hL3ZhbGlkYXRlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdkQsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUNoRSxNQUFNLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDeEQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ3hELE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN6RCxNQUFNLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2hFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sVUFBVSxHQUFlO1lBQzdCLFVBQVUsRUFBRTtnQkFDVixFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBa0IsRUFBRTtnQkFDaEMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQWlCLEVBQUU7YUFDbEM7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FDcEQ7WUFDRSxNQUFNLEVBQUUsVUFBVTtTQUNuQixFQUNELEVBQUUsQ0FDSCxDQUFBO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzVDLE1BQU0sVUFBVSxHQUFlO1lBQzdCLFVBQVUsRUFBRTtnQkFDVixFQUFFLEVBQUU7b0JBQ0YsSUFBSSxFQUFFLEdBQTJCO2lCQUNsQzthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQ3BEO1lBQ0UsTUFBTSxFQUFFLFVBQVU7U0FDbkIsRUFDRCxFQUFFLENBQ0gsQ0FBQTtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDeEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckQsTUFBTSxVQUFVLEdBQUc7WUFDakIsVUFBVSxFQUFFO2dCQUNWLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQ3ZCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQ3hCLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7YUFDekI7U0FDRixDQUFBO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMzRCxNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQTtRQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQ3BEO1lBQ0UsTUFBTSxFQUFFLElBQUk7U0FDYixFQUNELEVBQUUsQ0FDSCxDQUFBO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNELE1BQU0sVUFBVSxHQUFHO1lBQ2pCLFVBQVUsRUFBRTtnQkFDVixFQUFFLEVBQUU7b0JBQ0YsSUFBSSxFQUFFLGtCQUFrQjtpQkFDekI7YUFDRjtTQUNGLENBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzNELE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFBO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FDcEQ7WUFDRSxNQUFNLEVBQUUsSUFBSTtTQUNiLEVBQ0QsRUFBRSxDQUNILENBQUE7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBRW5DLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2xELE1BQU0sVUFBVSxHQUFlO1lBQzdCLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQ3BEO1lBQ0UsTUFBTSxFQUFFLFVBQVU7U0FDbkIsRUFDRCxFQUFFLENBQ0gsQ0FBQTtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5QyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLFVBQVUsR0FBZTtZQUM3QixVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFO29CQUNGLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsV0FBVyxFQUFFO3dCQUNYLFFBQVEsRUFBRSxJQUFJO3dCQUNkLE9BQU8sRUFBRSxDQUFDO3FCQUNYO2lCQUNGO2dCQUNELEtBQUssRUFBRTtvQkFDTCxJQUFJLEVBQUUsUUFBaUI7b0JBQ3ZCLE1BQU0sRUFBRSxPQUFnQjtvQkFDeEIsV0FBVyxFQUFFO3dCQUNYLFFBQVEsRUFBRSxJQUFJO3FCQUNmO2lCQUNGO2FBQ0Y7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FDcEQ7WUFDRSxNQUFNLEVBQUUsVUFBVTtTQUNuQixFQUNELEVBQUUsQ0FDSCxDQUFBO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERlc2NyaXB0b3IgfSBmcm9tIFwiQGZhaXJzcGVjL2xpYnJhcnlcIlxuaW1wb3J0IHsgd3JpdGVUZW1wRmlsZSB9IGZyb20gXCJAZmFpcnNwZWMvbGlicmFyeVwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgdmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wgfSBmcm9tIFwiLi92YWxpZGF0ZS50c1wiXG5cbmRlc2NyaWJlKFwidmFsaWRhdGVUYWJsZVNjaGVtYVRvb2xcIiwgKCkgPT4ge1xuICBpdChcInZhbGlkYXRlcyB0b29sIHN0cnVjdHVyZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHZhbGlkYXRlVGFibGVTY2hlbWFUb29sLmlkKS50b0JlKFwidmFsaWRhdGUtdGFibGUtc2NoZW1hXCIpXG4gICAgZXhwZWN0KHZhbGlkYXRlVGFibGVTY2hlbWFUb29sLmRlc2NyaXB0aW9uKS50b0JlVHJ1dGh5KClcbiAgICBleHBlY3QodmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wuaW5wdXRTY2hlbWEpLnRvQmVUcnV0aHkoKVxuICAgIGV4cGVjdCh2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbC5vdXRwdXRTY2hlbWEpLnRvQmVUcnV0aHkoKVxuICAgIGV4cGVjdCh2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbC5leGVjdXRlKS50b0JlVHlwZU9mKFwiZnVuY3Rpb25cIilcbiAgfSlcblxuICBpdChcInZhbGlkYXRlcyBhIHZhbGlkIHRhYmxlIHNjaGVtYSBkZXNjcmlwdG9yXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogeyB0eXBlOiBcImludGVnZXJcIiBhcyBjb25zdCB9LFxuICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgYXMgY29uc3QgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICBzb3VyY2U6IGRlc2NyaXB0b3IsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5yZXBvcnQudmFsaWQpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QocmVzdWx0LnJlcG9ydC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKVxuICB9KVxuXG4gIGl0KFwiZGV0ZWN0cyBpbnZhbGlkIHRhYmxlIHNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvcjogRGVzY3JpcHRvciA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiAxMjMgYXMgdW5rbm93biBhcyBcImludGVnZXJcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICBzb3VyY2U6IGRlc2NyaXB0b3IsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5yZXBvcnQudmFsaWQpLnRvQmUoZmFsc2UpXG4gICAgZXhwZWN0KHJlc3VsdC5yZXBvcnQuZXJyb3JzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApXG4gIH0pXG5cbiAgaXQoXCJ2YWxpZGF0ZXMgdGFibGUgc2NoZW1hIGZyb20gZmlsZSBwYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogeyB0eXBlOiBcImludGVnZXJcIiB9LFxuICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgYWdlOiB7IHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShKU09OLnN0cmluZ2lmeShkZXNjcmlwdG9yKSwge1xuICAgICAgZm9ybWF0OiBcImpzb25cIixcbiAgICB9KVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICBzb3VyY2U6IHBhdGgsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5yZXBvcnQudmFsaWQpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QocmVzdWx0LnJlcG9ydC5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKVxuICB9KVxuXG4gIGl0KFwiZGV0ZWN0cyBpbnZhbGlkIHRhYmxlIHNjaGVtYSBmcm9tIGZpbGUgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcIm5vdC1hLXZhbGlkLXR5cGVcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKEpTT04uc3RyaW5naWZ5KGRlc2NyaXB0b3IpLCB7XG4gICAgICBmb3JtYXQ6IFwianNvblwiLFxuICAgIH0pXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHNvdXJjZTogcGF0aCxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LnJlcG9ydC52YWxpZCkudG9CZShmYWxzZSlcbiAgICBleHBlY3QocmVzdWx0LnJlcG9ydC5lcnJvcnMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMClcbiAgfSlcblxuICBpdChcInZhbGlkYXRlcyBtaW5pbWFsIHZhbGlkIGRlc2NyaXB0b3JcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3I6IERlc2NyaXB0b3IgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHNvdXJjZTogZGVzY3JpcHRvcixcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LnJlcG9ydC52YWxpZCkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChyZXN1bHQucmVwb3J0LmVycm9ycykudG9IYXZlTGVuZ3RoKDApXG4gIH0pXG5cbiAgaXQoXCJ2YWxpZGF0ZXMgc2NoZW1hIHdpdGggZmllbGQgY29uc3RyYWludHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3I6IERlc2NyaXB0b3IgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlkOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIgYXMgY29uc3QsXG4gICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlbWFpbDoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIgYXMgY29uc3QsXG4gICAgICAgICAgZm9ybWF0OiBcImVtYWlsXCIgYXMgY29uc3QsXG4gICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZhbGlkYXRlVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgc291cmNlOiBkZXNjcmlwdG9yLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQucmVwb3J0LnZhbGlkKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KHJlc3VsdC5yZXBvcnQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMClcbiAgfSlcbn0pXG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fairspec/agent",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.2",
|
|
5
5
|
"exports": "./build/index.js",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"files": [
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@mastra/core": "^1.2.0",
|
|
31
31
|
"@mastra/mcp": "^1.0.0",
|
|
32
32
|
"zod": "^4.2.1",
|
|
33
|
-
"@fairspec/library": "0.
|
|
33
|
+
"@fairspec/library": "0.9.2"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "tsc",
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { getColumns } from "@fairspec/metadata";
|
|
3
|
-
import { prettify } from "htmlfy";
|
|
4
|
-
import { renderToStaticMarkup } from "react-dom/server";
|
|
5
|
-
export function renderTableSchemaAsHtml(schema, options) {
|
|
6
|
-
let html = prettify(renderToStaticMarkup(_jsx(SchemaTable, { schema: schema })));
|
|
7
|
-
if (options?.frontmatter) {
|
|
8
|
-
if (schema.title) {
|
|
9
|
-
html = `---\ntitle: ${schema.title}\n---\n\n${html}`;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
return html;
|
|
13
|
-
}
|
|
14
|
-
function SchemaTable(props) {
|
|
15
|
-
const { schema } = props;
|
|
16
|
-
return (_jsxs(_Fragment, { children: [schema.primaryKey && _jsx(PrimaryKey, { fields: schema.primaryKey }), schema.foreignKeys && schema.foreignKeys.length > 0 && (_jsx(ForeignKeys, { foreignKeys: schema.foreignKeys })), _jsx(FieldsTable, { schema: schema })] }));
|
|
17
|
-
}
|
|
18
|
-
function FieldsTable(props) {
|
|
19
|
-
const { schema } = props;
|
|
20
|
-
const columns = getColumns(schema);
|
|
21
|
-
const required = schema.required ?? [];
|
|
22
|
-
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Columns" }), _jsxs("table", { children: [_jsxs("colgroup", { children: [_jsx("col", { width: "20%" }), _jsx("col", { width: "65%" }), _jsx("col", { width: "15%" })] }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Name" }), _jsx("th", { children: "Definition" }), _jsx("th", { children: "Type" })] }) }), _jsx("tbody", { children: columns.map(column => (_jsx(FieldRow, { column: column, isRequired: required.includes(column.name) }, column.name))) })] })] }));
|
|
23
|
-
}
|
|
24
|
-
function FieldRow(props) {
|
|
25
|
-
const { column, isRequired } = props;
|
|
26
|
-
const { name, type, property } = column;
|
|
27
|
-
const columnDescription = property.description ?? "";
|
|
28
|
-
const constraints = extractConstraints(property);
|
|
29
|
-
return (_jsxs("tr", { children: [_jsx("td", { id: sanitizeId(name), children: _jsx("code", { children: _jsxs("strong", { children: [name, !isRequired && "?"] }) }) }), _jsxs("td", { children: [columnDescription && _jsx("p", { children: columnDescription }), constraints.length > 0 && (_jsx(ConstraintsList, { constraints: constraints })), "categories" in property && property.categories !== undefined && (_jsx(CategoriesList, { categories: property.categories }))] }), _jsx("td", { children: _jsx("code", { children: type }) })] }));
|
|
30
|
-
}
|
|
31
|
-
function ConstraintsList(props) {
|
|
32
|
-
const { constraints } = props;
|
|
33
|
-
return (_jsxs(_Fragment, { children: [_jsx("strong", { children: "Constraints" }), _jsx("ul", { children: constraints.map((constraint, index) => (_jsxs("li", { children: [constraint.name, ": ", _jsx("code", { children: constraint.value })] }, index))) })] }));
|
|
34
|
-
}
|
|
35
|
-
function CategoriesList(props) {
|
|
36
|
-
const { categories } = props;
|
|
37
|
-
return (_jsxs(_Fragment, { children: [_jsx("strong", { children: "Categories" }), _jsx("ul", { children: categories.map((category, index) => {
|
|
38
|
-
const value = typeof category === "object" ? category.value : category;
|
|
39
|
-
const label = typeof category === "object" ? category.label : undefined;
|
|
40
|
-
return (_jsxs("li", { children: [_jsx("code", { children: String(value) }), label && ` - ${label}`] }, index));
|
|
41
|
-
}) })] }));
|
|
42
|
-
}
|
|
43
|
-
function extractConstraints(property) {
|
|
44
|
-
const constraints = [];
|
|
45
|
-
if ("minimum" in property && property.minimum !== undefined) {
|
|
46
|
-
constraints.push({ name: "minimum", value: String(property.minimum) });
|
|
47
|
-
}
|
|
48
|
-
if ("maximum" in property && property.maximum !== undefined) {
|
|
49
|
-
constraints.push({ name: "maximum", value: String(property.maximum) });
|
|
50
|
-
}
|
|
51
|
-
if ("minLength" in property && property.minLength !== undefined) {
|
|
52
|
-
constraints.push({ name: "minLength", value: String(property.minLength) });
|
|
53
|
-
}
|
|
54
|
-
if ("maxLength" in property && property.maxLength !== undefined) {
|
|
55
|
-
constraints.push({ name: "maxLength", value: String(property.maxLength) });
|
|
56
|
-
}
|
|
57
|
-
if ("pattern" in property && property.pattern) {
|
|
58
|
-
constraints.push({ name: "pattern", value: property.pattern });
|
|
59
|
-
}
|
|
60
|
-
if ("enum" in property && property.enum) {
|
|
61
|
-
const enumValues = property.enum.map(v => String(v)).join(", ");
|
|
62
|
-
constraints.push({ name: "enum", value: enumValues });
|
|
63
|
-
}
|
|
64
|
-
return constraints;
|
|
65
|
-
}
|
|
66
|
-
function PrimaryKey(props) {
|
|
67
|
-
const { fields } = props;
|
|
68
|
-
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Primary Key" }), _jsx("p", { children: _jsx("code", { children: fields.join(", ") }) })] }));
|
|
69
|
-
}
|
|
70
|
-
function ForeignKeys(props) {
|
|
71
|
-
const { foreignKeys } = props;
|
|
72
|
-
if (!foreignKeys)
|
|
73
|
-
return null;
|
|
74
|
-
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Foreign Keys" }), _jsxs("table", { children: [_jsxs("colgroup", { children: [_jsx("col", { width: "40%" }), _jsx("col", { width: "30%" }), _jsx("col", { width: "30%" })] }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Columns" }), _jsx("th", { children: "Reference Resource" }), _jsx("th", { children: "Reference Columns" })] }) }), _jsx("tbody", { children: foreignKeys.map((fk, index) => (_jsxs("tr", { children: [_jsx("td", { children: _jsx("code", { children: fk.columns.join(", ") }) }), _jsx("td", { children: _jsx("code", { children: fk.reference.resource || "-" }) }), _jsx("td", { children: _jsx("code", { children: fk.reference.columns.join(", ") }) })] }, index))) })] })] }));
|
|
75
|
-
}
|
|
76
|
-
function sanitizeId(text) {
|
|
77
|
-
return text
|
|
78
|
-
.toLowerCase()
|
|
79
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
80
|
-
.replace(/^-|-$/g, "");
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNIdG1sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWN0aW9ucy90YWJsZVNjaGVtYS9hc0h0bWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV2RCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQW1CLEVBQ25CLE9BQW1DO0lBRW5DLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFDLFdBQVcsSUFBQyxNQUFNLEVBQUUsTUFBTSxHQUFJLENBQUMsQ0FBQyxDQUFBO0lBRTFFLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLElBQUksR0FBRyxlQUFlLE1BQU0sQ0FBQyxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUE4QjtJQUNqRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRXhCLE9BQU8sQ0FDTCw4QkFDRyxNQUFNLENBQUMsVUFBVSxJQUFJLEtBQUMsVUFBVSxJQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxHQUFJLEVBQzlELE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQ3RELEtBQUMsV0FBVyxJQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFJLENBQ2pELEVBQ0QsS0FBQyxXQUFXLElBQUMsTUFBTSxFQUFFLE1BQU0sR0FBSSxJQUM5QixDQUNK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LEVBQ3JCLDRCQUNFLCtCQUNFLGNBQUssS0FBSyxFQUFDLEtBQUssR0FBRyxFQUNuQixjQUFLLEtBQUssRUFBQyxLQUFLLEdBQUcsRUFDbkIsY0FBSyxLQUFLLEVBQUMsS0FBSyxHQUFHLElBQ1YsRUFDWCwwQkFDRSx5QkFDRSxtQ0FBZ0IsRUFDaEIsOENBQTJCLEVBQzNCLDZDQUEwQixJQUN2QixHQUNDLEVBQ1IsMEJBQ0csV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQzlCLHlCQUNFLHVCQUNFLHlCQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFRLEdBQ2pDLEVBQ0wsdUJBQ0UseUJBQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksR0FBRyxHQUFRLEdBQ3hDLEVBQ0wsdUJBQ0UseUJBQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFRLEdBQzNDLEtBVEUsS0FBSyxDQVVULENBQ04sQ0FBQyxHQUNJLElBQ0YsSUFDUCxDQUNKLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBWTtJQUM5QixPQUFPLElBQUk7U0FDUixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztTQUMzQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbHVtbiwgVGFibGVTY2hlbWEgfSBmcm9tIFwiQGZhaXJzcGVjL21ldGFkYXRhXCJcbmltcG9ydCB7IGdldENvbHVtbnMgfSBmcm9tIFwiQGZhaXJzcGVjL21ldGFkYXRhXCJcbmltcG9ydCB7IHByZXR0aWZ5IH0gZnJvbSBcImh0bWxmeVwiXG5pbXBvcnQgeyByZW5kZXJUb1N0YXRpY01hcmt1cCB9IGZyb20gXCJyZWFjdC1kb20vc2VydmVyXCJcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRhYmxlU2NoZW1hQXNIdG1sKFxuICBzY2hlbWE6IFRhYmxlU2NoZW1hLFxuICBvcHRpb25zPzogeyBmcm9udG1hdHRlcj86IGJvb2xlYW4gfSxcbik6IHN0cmluZyB7XG4gIGxldCBodG1sID0gcHJldHRpZnkocmVuZGVyVG9TdGF0aWNNYXJrdXAoPFNjaGVtYVRhYmxlIHNjaGVtYT17c2NoZW1hfSAvPikpXG5cbiAgaWYgKG9wdGlvbnM/LmZyb250bWF0dGVyKSB7XG4gICAgaWYgKHNjaGVtYS50aXRsZSkge1xuICAgICAgaHRtbCA9IGAtLS1cXG50aXRsZTogJHtzY2hlbWEudGl0bGV9XFxuLS0tXFxuXFxuJHtodG1sfWBcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaHRtbFxufVxuXG5mdW5jdGlvbiBTY2hlbWFUYWJsZShwcm9wczogeyBzY2hlbWE6IFRhYmxlU2NoZW1hIH0pIHtcbiAgY29uc3QgeyBzY2hlbWEgfSA9IHByb3BzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3NjaGVtYS5wcmltYXJ5S2V5ICYmIDxQcmltYXJ5S2V5IGZpZWxkcz17c2NoZW1hLnByaW1hcnlLZXl9IC8+fVxuICAgICAge3NjaGVtYS5mb3JlaWduS2V5cyAmJiBzY2hlbWEuZm9yZWlnbktleXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxGb3JlaWduS2V5cyBmb3JlaWduS2V5cz17c2NoZW1hLmZvcmVpZ25LZXlzfSAvPlxuICAgICAgKX1cbiAgICAgIDxGaWVsZHNUYWJsZSBzY2hlbWE9e3NjaGVtYX0gLz5cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBGaWVsZHNUYWJsZShwcm9wczogeyBzY2hlbWE6IFRhYmxlU2NoZW1hIH0pIHtcbiAgY29uc3QgeyBzY2hlbWEgfSA9IHByb3BzXG4gIGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zKHNjaGVtYSlcbiAgY29uc3QgcmVxdWlyZWQgPSBzY2hlbWEucmVxdWlyZWQgPz8gW11cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8aDI+Q29sdW1uczwvaDI+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDxjb2xncm91cD5cbiAgICAgICAgICA8Y29sIHdpZHRoPVwiMjAlXCIgLz5cbiAgICAgICAgICA8Y29sIHdpZHRoPVwiNjUlXCIgLz5cbiAgICAgICAgICA8Y29sIHdpZHRoPVwiMTUlXCIgLz5cbiAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cbiAgICAgICAgICAgIDx0aD5EZWZpbml0aW9uPC90aD5cbiAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAge2NvbHVtbnMubWFwKGNvbHVtbiA9PiAoXG4gICAgICAgICAgICA8RmllbGRSb3dcbiAgICAgICAgICAgICAga2V5PXtjb2x1bW4ubmFtZX1cbiAgICAgICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3JlcXVpcmVkLmluY2x1ZGVzKGNvbHVtbi5uYW1lKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIEZpZWxkUm93KHByb3BzOiB7IGNvbHVtbjogQ29sdW1uOyBpc1JlcXVpcmVkOiBib29sZWFuIH0pIHtcbiAgY29uc3QgeyBjb2x1bW4sIGlzUmVxdWlyZWQgfSA9IHByb3BzXG4gIGNvbnN0IHsgbmFtZSwgdHlwZSwgcHJvcGVydHkgfSA9IGNvbHVtblxuICBjb25zdCBjb2x1bW5EZXNjcmlwdGlvbiA9IHByb3BlcnR5LmRlc2NyaXB0aW9uID8/IFwiXCJcblxuICBjb25zdCBjb25zdHJhaW50cyA9IGV4dHJhY3RDb25zdHJhaW50cyhwcm9wZXJ0eSlcblxuICByZXR1cm4gKFxuICAgIDx0cj5cbiAgICAgIDx0ZCBpZD17c2FuaXRpemVJZChuYW1lKX0+XG4gICAgICAgIDxjb2RlPlxuICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICB7bmFtZX1cbiAgICAgICAgICAgIHshaXNSZXF1aXJlZCAmJiBcIj9cIn1cbiAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgPC9jb2RlPlxuICAgICAgPC90ZD5cbiAgICAgIDx0ZD5cbiAgICAgICAge2NvbHVtbkRlc2NyaXB0aW9uICYmIDxwPntjb2x1bW5EZXNjcmlwdGlvbn08L3A+fVxuICAgICAgICB7Y29uc3RyYWludHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPENvbnN0cmFpbnRzTGlzdCBjb25zdHJhaW50cz17Y29uc3RyYWludHN9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHtcImNhdGVnb3JpZXNcIiBpbiBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jYXRlZ29yaWVzICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgIDxDYXRlZ29yaWVzTGlzdCBjYXRlZ29yaWVzPXtwcm9wZXJ0eS5jYXRlZ29yaWVzfSAvPlxuICAgICAgICApfVxuICAgICAgPC90ZD5cbiAgICAgIDx0ZD5cbiAgICAgICAgPGNvZGU+e3R5cGV9PC9jb2RlPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbnN0cmFpbnRzTGlzdChwcm9wczogeyBjb25zdHJhaW50czogQ29uc3RyYWludFtdIH0pIHtcbiAgY29uc3QgeyBjb25zdHJhaW50cyB9ID0gcHJvcHNcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHN0cm9uZz5Db25zdHJhaW50czwvc3Ryb25nPlxuICAgICAgPHVsPlxuICAgICAgICB7Y29uc3RyYWludHMubWFwKChjb25zdHJhaW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxsaSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgIHtjb25zdHJhaW50Lm5hbWV9OiA8Y29kZT57Y29uc3RyYWludC52YWx1ZX08L2NvZGU+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKSl9XG4gICAgICA8L3VsPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhdGVnb3JpZXNMaXN0KHByb3BzOiB7IGNhdGVnb3JpZXM6IGFueVtdIH0pIHtcbiAgY29uc3QgeyBjYXRlZ29yaWVzIH0gPSBwcm9wc1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8c3Ryb25nPkNhdGVnb3JpZXM8L3N0cm9uZz5cbiAgICAgIDx1bD5cbiAgICAgICAge2NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBjYXRlZ29yeSA9PT0gXCJvYmplY3RcIiA/IGNhdGVnb3J5LnZhbHVlIDogY2F0ZWdvcnlcbiAgICAgICAgICBjb25zdCBsYWJlbCA9XG4gICAgICAgICAgICB0eXBlb2YgY2F0ZWdvcnkgPT09IFwib2JqZWN0XCIgPyBjYXRlZ29yeS5sYWJlbCA6IHVuZGVmaW5lZFxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8bGkga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgIDxjb2RlPntTdHJpbmcodmFsdWUpfTwvY29kZT5cbiAgICAgICAgICAgICAge2xhYmVsICYmIGAgLSAke2xhYmVsfWB9XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDb25zdHJhaW50cyhwcm9wZXJ0eTogQ29sdW1uW1wicHJvcGVydHlcIl0pOiBDb25zdHJhaW50W10ge1xuICBjb25zdCBjb25zdHJhaW50czogQ29uc3RyYWludFtdID0gW11cblxuICBpZiAoXCJtaW5pbXVtXCIgaW4gcHJvcGVydHkgJiYgcHJvcGVydHkubWluaW11bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwibWluaW11bVwiLCB2YWx1ZTogU3RyaW5nKHByb3BlcnR5Lm1pbmltdW0pIH0pXG4gIH1cbiAgaWYgKFwibWF4aW11bVwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5Lm1heGltdW0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0cmFpbnRzLnB1c2goeyBuYW1lOiBcIm1heGltdW1cIiwgdmFsdWU6IFN0cmluZyhwcm9wZXJ0eS5tYXhpbXVtKSB9KVxuICB9XG4gIGlmIChcIm1pbkxlbmd0aFwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5Lm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwibWluTGVuZ3RoXCIsIHZhbHVlOiBTdHJpbmcocHJvcGVydHkubWluTGVuZ3RoKSB9KVxuICB9XG4gIGlmIChcIm1heExlbmd0aFwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5Lm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwibWF4TGVuZ3RoXCIsIHZhbHVlOiBTdHJpbmcocHJvcGVydHkubWF4TGVuZ3RoKSB9KVxuICB9XG4gIGlmIChcInBhdHRlcm5cIiBpbiBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5wYXR0ZXJuKSB7XG4gICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwicGF0dGVyblwiLCB2YWx1ZTogcHJvcGVydHkucGF0dGVybiB9KVxuICB9XG4gIGlmIChcImVudW1cIiBpbiBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lbnVtKSB7XG4gICAgY29uc3QgZW51bVZhbHVlcyA9IHByb3BlcnR5LmVudW0ubWFwKHYgPT4gU3RyaW5nKHYpKS5qb2luKFwiLCBcIilcbiAgICBjb25zdHJhaW50cy5wdXNoKHsgbmFtZTogXCJlbnVtXCIsIHZhbHVlOiBlbnVtVmFsdWVzIH0pXG4gIH1cblxuICByZXR1cm4gY29uc3RyYWludHNcbn1cblxuZnVuY3Rpb24gUHJpbWFyeUtleShwcm9wczogeyBmaWVsZHM6IHN0cmluZ1tdIH0pIHtcbiAgY29uc3QgeyBmaWVsZHMgfSA9IHByb3BzXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxoMj5QcmltYXJ5IEtleTwvaDI+XG4gICAgICA8cD5cbiAgICAgICAgPGNvZGU+e2ZpZWxkcy5qb2luKFwiLCBcIil9PC9jb2RlPlxuICAgICAgPC9wPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIEZvcmVpZ25LZXlzKHByb3BzOiB7IGZvcmVpZ25LZXlzOiBUYWJsZVNjaGVtYVtcImZvcmVpZ25LZXlzXCJdIH0pIHtcbiAgY29uc3QgeyBmb3JlaWduS2V5cyB9ID0gcHJvcHNcbiAgaWYgKCFmb3JlaWduS2V5cykgcmV0dXJuIG51bGxcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8aDI+Rm9yZWlnbiBLZXlzPC9oMj5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPGNvbGdyb3VwPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCI0MCVcIiAvPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCIzMCVcIiAvPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCIzMCVcIiAvPlxuICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPkNvbHVtbnM8L3RoPlxuICAgICAgICAgICAgPHRoPlJlZmVyZW5jZSBSZXNvdXJjZTwvdGg+XG4gICAgICAgICAgICA8dGg+UmVmZXJlbmNlIENvbHVtbnM8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICB7Zm9yZWlnbktleXMubWFwKChmaywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDx0ciBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxjb2RlPntmay5jb2x1bW5zLmpvaW4oXCIsIFwiKX08L2NvZGU+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8Y29kZT57ZmsucmVmZXJlbmNlLnJlc291cmNlIHx8IFwiLVwifTwvY29kZT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxjb2RlPntmay5yZWZlcmVuY2UuY29sdW1ucy5qb2luKFwiLCBcIil9PC9jb2RlPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC8+XG4gIClcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVJZCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgLnJlcGxhY2UoL14tfC0kL2csIFwiXCIpXG59XG5cbmludGVyZmFjZSBDb25zdHJhaW50IHtcbiAgbmFtZTogc3RyaW5nXG4gIHZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==
|