@fairspec/agent 0.9.2 → 0.10.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.
@@ -11,16 +11,16 @@ describe("inferTableSchemaTool", () => {
11
11
  });
12
12
  it("infers schema from CSV file", async () => {
13
13
  const path = await writeTempFile("id,name,age\n1,alice,30\n2,bob,25");
14
- const resource = { data: path, dialect: { format: "csv" } };
14
+ const resource = { data: path, fileDialect: { format: "csv" } };
15
15
  const result = await inferTableSchemaTool.execute?.({
16
16
  resource,
17
17
  }, {});
18
18
  expect.assert(result);
19
19
  expect.assert(!("error" in result));
20
- expect(result.schema?.properties).toBeDefined();
21
- expect(result.schema?.properties?.id?.type).toBe("integer");
22
- expect(result.schema?.properties?.name?.type).toBe("string");
23
- expect(result.schema?.properties?.age?.type).toBe("integer");
20
+ expect(result.tableSchema?.properties).toBeDefined();
21
+ expect(result.tableSchema?.properties?.id?.type).toBe("integer");
22
+ expect(result.tableSchema?.properties?.name?.type).toBe("string");
23
+ expect(result.tableSchema?.properties?.age?.type).toBe("integer");
24
24
  });
25
25
  it("infers schema from inline object data", async () => {
26
26
  const resource = {
@@ -34,10 +34,10 @@ describe("inferTableSchemaTool", () => {
34
34
  }, {});
35
35
  expect.assert(result);
36
36
  expect.assert(!("error" in result));
37
- expect(result.schema?.properties).toBeDefined();
38
- expect(result.schema?.properties?.id?.type).toBe("integer");
39
- expect(result.schema?.properties?.name?.type).toBe("string");
40
- expect(result.schema?.properties?.age?.type).toBe("integer");
37
+ expect(result.tableSchema?.properties).toBeDefined();
38
+ expect(result.tableSchema?.properties?.id?.type).toBe("integer");
39
+ expect(result.tableSchema?.properties?.name?.type).toBe("string");
40
+ expect(result.tableSchema?.properties?.age?.type).toBe("integer");
41
41
  });
42
42
  it("infers different field types correctly", async () => {
43
43
  const resource = {
@@ -51,11 +51,11 @@ describe("inferTableSchemaTool", () => {
51
51
  }, {});
52
52
  expect.assert(result);
53
53
  expect.assert(!("error" in result));
54
- expect(result.schema?.properties).toBeDefined();
55
- expect(result.schema?.properties?.id?.type).toBe("integer");
56
- expect(result.schema?.properties?.name?.type).toBe("string");
57
- expect(result.schema?.properties?.score?.type).toBe("number");
58
- expect(result.schema?.properties?.active?.type).toBe("boolean");
54
+ expect(result.tableSchema?.properties).toBeDefined();
55
+ expect(result.tableSchema?.properties?.id?.type).toBe("integer");
56
+ expect(result.tableSchema?.properties?.name?.type).toBe("string");
57
+ expect(result.tableSchema?.properties?.score?.type).toBe("number");
58
+ expect(result.tableSchema?.properties?.active?.type).toBe("boolean");
59
59
  });
60
60
  it("infers date fields from strings", async () => {
61
61
  const resource = {
@@ -69,11 +69,11 @@ describe("inferTableSchemaTool", () => {
69
69
  }, {});
70
70
  expect.assert(result);
71
71
  expect.assert(!("error" in result));
72
- expect(result.schema?.properties).toBeDefined();
73
- expect(result.schema?.properties?.id?.type).toBe("integer");
74
- expect(result.schema?.properties?.name?.type).toBe("string");
75
- expect(result.schema?.properties?.created?.type).toBe("string");
76
- expect(result.schema?.properties?.created?.format).toBe("date");
72
+ expect(result.tableSchema?.properties).toBeDefined();
73
+ expect(result.tableSchema?.properties?.id?.type).toBe("integer");
74
+ expect(result.tableSchema?.properties?.name?.type).toBe("string");
75
+ expect(result.tableSchema?.properties?.created?.type).toBe("string");
76
+ expect(result.tableSchema?.properties?.created?.format).toBe("date");
77
77
  });
78
78
  it("respects sampleRows option", async () => {
79
79
  const resource = {
@@ -88,9 +88,9 @@ describe("inferTableSchemaTool", () => {
88
88
  }, {});
89
89
  expect.assert(result);
90
90
  expect.assert(!("error" in result));
91
- expect(result.schema?.properties).toBeDefined();
92
- expect(result.schema?.properties?.id?.type).toBe("integer");
93
- expect(result.schema?.properties?.name?.type).toBe("string");
91
+ expect(result.tableSchema?.properties).toBeDefined();
92
+ expect(result.tableSchema?.properties?.id?.type).toBe("integer");
93
+ expect(result.tableSchema?.properties?.name?.type).toBe("string");
94
94
  });
95
95
  it("handles empty data", async () => {
96
96
  const resource = {
@@ -101,7 +101,7 @@ describe("inferTableSchemaTool", () => {
101
101
  }, {});
102
102
  expect.assert(result);
103
103
  expect.assert(!("error" in result));
104
- expect(result.schema).toBeUndefined();
104
+ expect(result.tableSchema).toBeUndefined();
105
105
  });
106
106
  it("handles single row data", async () => {
107
107
  const resource = {
@@ -112,9 +112,9 @@ describe("inferTableSchemaTool", () => {
112
112
  }, {});
113
113
  expect.assert(result);
114
114
  expect.assert(!("error" in result));
115
- expect(result.schema?.properties).toBeDefined();
116
- expect(result.schema?.properties?.id?.type).toBe("integer");
117
- expect(result.schema?.properties?.name?.type).toBe("string");
115
+ expect(result.tableSchema?.properties).toBeDefined();
116
+ expect(result.tableSchema?.properties?.id?.type).toBe("integer");
117
+ expect(result.tableSchema?.properties?.name?.type).toBe("string");
118
118
  });
119
119
  it("respects columnTypes option", async () => {
120
120
  const resource = {
@@ -129,9 +129,9 @@ describe("inferTableSchemaTool", () => {
129
129
  }, {});
130
130
  expect.assert(result);
131
131
  expect.assert(!("error" in result));
132
- expect(result.schema?.properties).toBeDefined();
133
- expect(result.schema?.properties?.id?.type).toBe("integer");
134
- expect(result.schema?.properties?.value?.type).toBe("integer");
132
+ expect(result.tableSchema?.properties).toBeDefined();
133
+ expect(result.tableSchema?.properties?.id?.type).toBe("integer");
134
+ expect(result.tableSchema?.properties?.value?.type).toBe("integer");
135
135
  });
136
136
  it("handles time fields", async () => {
137
137
  const resource = {
@@ -145,10 +145,10 @@ describe("inferTableSchemaTool", () => {
145
145
  }, {});
146
146
  expect.assert(result);
147
147
  expect.assert(!("error" in result));
148
- expect(result.schema?.properties).toBeDefined();
149
- expect(result.schema?.properties?.id?.type).toBe("integer");
150
- expect(result.schema?.properties?.time?.type).toBe("string");
151
- expect(result.schema?.properties?.time?.format).toBe("time");
148
+ expect(result.tableSchema?.properties).toBeDefined();
149
+ expect(result.tableSchema?.properties?.id?.type).toBe("integer");
150
+ expect(result.tableSchema?.properties?.time?.type).toBe("string");
151
+ expect(result.tableSchema?.properties?.time?.format).toBe("time");
152
152
  });
153
153
  });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rvb2xzL3RhYmxlU2NoZW1hL2luZmVyLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtJQUNwQyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtRQUMxRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDckQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ3JELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN0RCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzdELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sYUFBYSxDQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFDckUsTUFBTSxRQUFRLEdBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFBO1FBRXJFLE1BQU0sTUFBTSxHQUFHLE1BQU0sb0JB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LElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM5RCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gXCJAZmFpcnNwZWMvbGlicmFyeVwiXG5pbXBvcnQgeyB3cml0ZVRlbXBGaWxlIH0gZnJvbSBcIkBmYWlyc3BlYy9saWJyYXJ5XCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBpbmZlclRhYmxlU2NoZW1hVG9vbCB9IGZyb20gXCIuL2luZmVyLnRzXCJcblxuZGVzY3JpYmUoXCJpbmZlclRhYmxlU2NoZW1hVG9vbFwiLCAoKSA9PiB7XG4gIGl0KFwidmFsaWRhdGVzIHRvb2wgc3RydWN0dXJlXCIsICgpID0+IHtcbiAgICBleHBlY3QoaW5mZXJUYWJsZVNjaGVtYVRvb2wuaWQpLnRvQmUoXCJpbmZlci10YWJsZS1zY2hlbWFcIilcbiAgICBleHBlY3QoaW5mZXJUYWJsZVNjaGVtYVRvb2wuZGVzY3JpcHRpb24pLnRvQmVUcnV0aHkoKVxuICAgIGV4cGVjdChpbmZlclRhYmxlU2NoZW1hVG9vbC5pbnB1dFNjaGVtYSkudG9CZVRydXRoeSgpXG4gICAgZXhwZWN0KGluZmVyVGFibGVTY2hlbWFUb29sLm91dHB1dFNjaGVtYSkudG9CZVRydXRoeSgpXG4gICAgZXhwZWN0KGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGUpLnRvQmVUeXBlT2YoXCJmdW5jdGlvblwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIHNjaGVtYSBmcm9tIENTViBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkLG5hbWUsYWdlXFxuMSxhbGljZSwzMFxcbjIsYm9iLDI1XCIpXG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0geyBkYXRhOiBwYXRoLCBkaWFsZWN0OiB7IGZvcm1hdDogXCJjc3ZcIiB9IH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYT8ucHJvcGVydGllcz8uaWQ/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/Lm5hbWU/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYT8ucHJvcGVydGllcz8uYWdlPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIHNjaGVtYSBmcm9tIGlubGluZSBvYmplY3QgZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGlkOiAxLCBuYW1lOiBcImFsaWNlXCIsIGFnZTogMzAgfSxcbiAgICAgICAgeyBpZDogMiwgbmFtZTogXCJib2JcIiwgYWdlOiAyNSB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LmFnZT8udHlwZSkudG9CZShcImludGVnZXJcIilcbiAgfSlcblxuICBpdChcImluZmVycyBkaWZmZXJlbnQgZmllbGQgdHlwZXMgY29ycmVjdGx5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7XG4gICAgICBkYXRhOiBbXG4gICAgICAgIHsgaWQ6IDEsIG5hbWU6IFwiYWxpY2VcIiwgc2NvcmU6IDk1LjUsIGFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgICB7IGlkOiAyLCBuYW1lOiBcImJvYlwiLCBzY29yZTogODcuMywgYWN0aXZlOiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LnNjb3JlPy50eXBlKS50b0JlKFwibnVtYmVyXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LmFjdGl2ZT8udHlwZSkudG9CZShcImJvb2xlYW5cIilcbiAgfSlcblxuICBpdChcImluZmVycyBkYXRlIGZpZWxkcyBmcm9tIHN0cmluZ3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiLCBjcmVhdGVkOiBcIjIwMjQtMDEtMDFcIiB9LFxuICAgICAgICB7IGlkOiAyLCBuYW1lOiBcImJvYlwiLCBjcmVhdGVkOiBcIjIwMjQtMDEtMDJcIiB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LmNyZWF0ZWQ/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYT8ucHJvcGVydGllcz8uY3JlYXRlZD8uZm9ybWF0KS50b0JlKFwiZGF0ZVwiKVxuICB9KVxuXG4gIGl0KFwicmVzcGVjdHMgc2FtcGxlUm93cyBvcHRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IEFycmF5LmZyb20oeyBsZW5ndGg6IDEwMDAgfSwgKF8sIGkpID0+ICh7XG4gICAgICAgIGlkOiBpLFxuICAgICAgICBuYW1lOiBgdXNlciR7aX1gLFxuICAgICAgfSkpLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIG9wdGlvbnM6IHsgc2FtcGxlUm93czogMTAgfSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYT8ucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzPy5pZD8udHlwZSkudG9CZShcImludGVnZXJcIilcbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYT8ucHJvcGVydGllcz8ubmFtZT8udHlwZSkudG9CZShcInN0cmluZ1wiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBlbXB0eSBkYXRhXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7XG4gICAgICBkYXRhOiBbXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHNpbmdsZSByb3cgZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW3sgaWQ6IDEsIG5hbWU6IFwiYWxpY2VcIiB9XSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hPy5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gIH0pXG5cbiAgaXQoXCJyZXNwZWN0cyBjb2x1bW5UeXBlcyBvcHRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBpZDogXCIxMjNcIiwgdmFsdWU6IFwiNDU2XCIgfSxcbiAgICAgICAgeyBpZDogXCI3ODlcIiwgdmFsdWU6IFwiMDEyXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgb3B0aW9uczogeyBjb2x1bW5UeXBlczogeyBpZDogXCJpbnRlZ2VyXCIsIHZhbHVlOiBcImludGVnZXJcIiB9IH0sXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYT8ucHJvcGVydGllcz8uaWQ/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LnZhbHVlPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyB0aW1lIGZpZWxkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGlkOiAxLCB0aW1lOiBcIjE0OjMwOjAwXCIgfSxcbiAgICAgICAgeyBpZDogMiwgdGltZTogXCIwOToxNTozMFwiIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYT8ucHJvcGVydGllcz8uaWQ/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5zY2hlbWE/LnByb3BlcnRpZXM/LnRpbWU/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgICBleHBlY3QocmVzdWx0LnNjaGVtYT8ucHJvcGVydGllcz8udGltZT8uZm9ybWF0KS50b0JlKFwidGltZVwiKVxuICB9KVxufSlcbiJdfQ==
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rvb2xzL3RhYmxlU2NoZW1hL2luZmVyLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtJQUNwQyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtRQUMxRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDckQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ3JELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN0RCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzdELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sYUFBYSxDQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFDckUsTUFBTSxRQUFRLEdBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFBO1FBRXpFLE1BQU0sTUFBTSxHQUFHLE1BQU0sb0JB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LElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNqRSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNuRSxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gXCJAZmFpcnNwZWMvbGlicmFyeVwiXG5pbXBvcnQgeyB3cml0ZVRlbXBGaWxlIH0gZnJvbSBcIkBmYWlyc3BlYy9saWJyYXJ5XCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBpbmZlclRhYmxlU2NoZW1hVG9vbCB9IGZyb20gXCIuL2luZmVyLnRzXCJcblxuZGVzY3JpYmUoXCJpbmZlclRhYmxlU2NoZW1hVG9vbFwiLCAoKSA9PiB7XG4gIGl0KFwidmFsaWRhdGVzIHRvb2wgc3RydWN0dXJlXCIsICgpID0+IHtcbiAgICBleHBlY3QoaW5mZXJUYWJsZVNjaGVtYVRvb2wuaWQpLnRvQmUoXCJpbmZlci10YWJsZS1zY2hlbWFcIilcbiAgICBleHBlY3QoaW5mZXJUYWJsZVNjaGVtYVRvb2wuZGVzY3JpcHRpb24pLnRvQmVUcnV0aHkoKVxuICAgIGV4cGVjdChpbmZlclRhYmxlU2NoZW1hVG9vbC5pbnB1dFNjaGVtYSkudG9CZVRydXRoeSgpXG4gICAgZXhwZWN0KGluZmVyVGFibGVTY2hlbWFUb29sLm91dHB1dFNjaGVtYSkudG9CZVRydXRoeSgpXG4gICAgZXhwZWN0KGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGUpLnRvQmVUeXBlT2YoXCJmdW5jdGlvblwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIHNjaGVtYSBmcm9tIENTViBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkLG5hbWUsYWdlXFxuMSxhbGljZSwzMFxcbjIsYm9iLDI1XCIpXG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0geyBkYXRhOiBwYXRoLCBmaWxlRGlhbGVjdDogeyBmb3JtYXQ6IFwiY3N2XCIgfSB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5pZD8udHlwZSkudG9CZShcImludGVnZXJcIilcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC50YWJsZVNjaGVtYT8ucHJvcGVydGllcz8uYWdlPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIHNjaGVtYSBmcm9tIGlubGluZSBvYmplY3QgZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGlkOiAxLCBuYW1lOiBcImFsaWNlXCIsIGFnZTogMzAgfSxcbiAgICAgICAgeyBpZDogMiwgbmFtZTogXCJib2JcIiwgYWdlOiAyNSB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5pZD8udHlwZSkudG9CZShcImludGVnZXJcIilcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC50YWJsZVNjaGVtYT8ucHJvcGVydGllcz8uYWdlPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIGRpZmZlcmVudCBmaWVsZCB0eXBlcyBjb3JyZWN0bHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiLCBzY29yZTogOTUuNSwgYWN0aXZlOiB0cnVlIH0sXG4gICAgICAgIHsgaWQ6IDIsIG5hbWU6IFwiYm9iXCIsIHNjb3JlOiA4Ny4zLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC50YWJsZVNjaGVtYT8ucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/Lm5hbWU/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5zY29yZT8udHlwZSkudG9CZShcIm51bWJlclwiKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/LmFjdGl2ZT8udHlwZSkudG9CZShcImJvb2xlYW5cIilcbiAgfSlcblxuICBpdChcImluZmVycyBkYXRlIGZpZWxkcyBmcm9tIHN0cmluZ3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiLCBjcmVhdGVkOiBcIjIwMjQtMDEtMDFcIiB9LFxuICAgICAgICB7IGlkOiAyLCBuYW1lOiBcImJvYlwiLCBjcmVhdGVkOiBcIjIwMjQtMDEtMDJcIiB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5pZD8udHlwZSkudG9CZShcImludGVnZXJcIilcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC50YWJsZVNjaGVtYT8ucHJvcGVydGllcz8uY3JlYXRlZD8udHlwZSkudG9CZShcInN0cmluZ1wiKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/LmNyZWF0ZWQ/LmZvcm1hdCkudG9CZShcImRhdGVcIilcbiAgfSlcblxuICBpdChcInJlc3BlY3RzIHNhbXBsZVJvd3Mgb3B0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7XG4gICAgICBkYXRhOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMDAwIH0sIChfLCBpKSA9PiAoe1xuICAgICAgICBpZDogaSxcbiAgICAgICAgbmFtZTogYHVzZXIke2l9YCxcbiAgICAgIH0pKSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICBvcHRpb25zOiB7IHNhbXBsZVJvd3M6IDEwIH0sXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC50YWJsZVNjaGVtYT8ucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/Lm5hbWU/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgZW1wdHkgZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW10sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG4gICAgZXhwZWN0KHJlc3VsdC50YWJsZVNjaGVtYSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHNpbmdsZSByb3cgZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW3sgaWQ6IDEsIG5hbWU6IFwiYWxpY2VcIiB9XSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5pZD8udHlwZSkudG9CZShcImludGVnZXJcIilcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gIH0pXG5cbiAgaXQoXCJyZXNwZWN0cyBjb2x1bW5UeXBlcyBvcHRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBpZDogXCIxMjNcIiwgdmFsdWU6IFwiNDU2XCIgfSxcbiAgICAgICAgeyBpZDogXCI3ODlcIiwgdmFsdWU6IFwiMDEyXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgb3B0aW9uczogeyBjb2x1bW5UeXBlczogeyBpZDogXCJpbnRlZ2VyXCIsIHZhbHVlOiBcImludGVnZXJcIiB9IH0sXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC50YWJsZVNjaGVtYT8ucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/LnZhbHVlPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyB0aW1lIGZpZWxkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGlkOiAxLCB0aW1lOiBcIjE0OjMwOjAwXCIgfSxcbiAgICAgICAgeyBpZDogMiwgdGltZTogXCIwOToxNTozMFwiIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC50YWJsZVNjaGVtYT8ucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQudGFibGVTY2hlbWE/LnByb3BlcnRpZXM/LnRpbWU/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgICBleHBlY3QocmVzdWx0LnRhYmxlU2NoZW1hPy5wcm9wZXJ0aWVzPy50aW1lPy5mb3JtYXQpLnRvQmUoXCJ0aW1lXCIpXG4gIH0pXG59KVxuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fairspec/agent",
3
3
  "type": "module",
4
- "version": "0.9.2",
4
+ "version": "0.10.0",
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.9.2"
33
+ "@fairspec/library": "0.10.0"
34
34
  },
35
35
  "scripts": {
36
36
  "build": "tsc",
@@ -1,19 +0,0 @@
1
- import { Dialect, InferDialectOptions, inferDialect, Resource, } from "@fairspec/library";
2
- import { createTool } from "@mastra/core/tools";
3
- import { z } from "zod";
4
- export const inferDialectTool = createTool({
5
- id: "infer-dialect",
6
- description: "Infer the dialect (format and format-specific properties) from a resource. Analyzes the data to determine CSV delimiters, JSON structure, etc.",
7
- inputSchema: z.object({
8
- resource: Resource.describe("The resource to infer dialect from"),
9
- options: InferDialectOptions.optional().describe("Dialect inference options"),
10
- }),
11
- outputSchema: z.object({
12
- dialect: Dialect.optional(),
13
- }),
14
- execute: async (input) => {
15
- const dialect = await inferDialect(input.resource, input.options);
16
- return { dialect };
17
- },
18
- });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90b29scy9kaWFsZWN0L2luZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxPQUFPLEVBQ1AsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixRQUFRLEdBQ1QsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDL0MsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUV2QixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7SUFDekMsRUFBRSxFQUFFLGVBQWU7SUFDbkIsV0FBVyxFQUNULGdKQUFnSjtJQUNsSixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxvQ0FBb0MsQ0FBQztRQUNqRSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUM5QywyQkFBMkIsQ0FDNUI7S0FDRixDQUFDO0lBQ0YsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUU7S0FDNUIsQ0FBQztJQUNGLE9BQU8sRUFBRSxLQUFLLEVBQUMsS0FBSyxFQUFDLEVBQUU7UUFDckIsTUFBTSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ3BCLENBQUM7Q0FDRixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaWFsZWN0LFxuICBJbmZlckRpYWxlY3RPcHRpb25zLFxuICBpbmZlckRpYWxlY3QsXG4gIFJlc291cmNlLFxufSBmcm9tIFwiQGZhaXJzcGVjL2xpYnJhcnlcIlxuaW1wb3J0IHsgY3JlYXRlVG9vbCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvdG9vbHNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgY29uc3QgaW5mZXJEaWFsZWN0VG9vbCA9IGNyZWF0ZVRvb2woe1xuICBpZDogXCJpbmZlci1kaWFsZWN0XCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiSW5mZXIgdGhlIGRpYWxlY3QgKGZvcm1hdCBhbmQgZm9ybWF0LXNwZWNpZmljIHByb3BlcnRpZXMpIGZyb20gYSByZXNvdXJjZS4gQW5hbHl6ZXMgdGhlIGRhdGEgdG8gZGV0ZXJtaW5lIENTViBkZWxpbWl0ZXJzLCBKU09OIHN0cnVjdHVyZSwgZXRjLlwiLFxuICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgIHJlc291cmNlOiBSZXNvdXJjZS5kZXNjcmliZShcIlRoZSByZXNvdXJjZSB0byBpbmZlciBkaWFsZWN0IGZyb21cIiksXG4gICAgb3B0aW9uczogSW5mZXJEaWFsZWN0T3B0aW9ucy5vcHRpb25hbCgpLmRlc2NyaWJlKFxuICAgICAgXCJEaWFsZWN0IGluZmVyZW5jZSBvcHRpb25zXCIsXG4gICAgKSxcbiAgfSksXG4gIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgIGRpYWxlY3Q6IERpYWxlY3Qub3B0aW9uYWwoKSxcbiAgfSksXG4gIGV4ZWN1dGU6IGFzeW5jIGlucHV0ID0+IHtcbiAgICBjb25zdCBkaWFsZWN0ID0gYXdhaXQgaW5mZXJEaWFsZWN0KGlucHV0LnJlc291cmNlLCBpbnB1dC5vcHRpb25zKVxuICAgIHJldHVybiB7IGRpYWxlY3QgfVxuICB9LFxufSlcbiJdfQ==
@@ -1,140 +0,0 @@
1
- import { writeTempFile } from "@fairspec/library";
2
- import { describe, expect, it } from "vitest";
3
- import { inferDialectTool } from "./infer.js";
4
- describe("inferDialectTool", () => {
5
- it("validates tool structure", () => {
6
- expect(inferDialectTool.id).toBe("infer-dialect");
7
- expect(inferDialectTool.description).toBeTruthy();
8
- expect(inferDialectTool.inputSchema).toBeTruthy();
9
- expect(inferDialectTool.outputSchema).toBeTruthy();
10
- expect(inferDialectTool.execute).toBeTypeOf("function");
11
- });
12
- it("infers CSV format", async () => {
13
- const path = await writeTempFile("id,name,age\n1,alice,25\n2,bob,30");
14
- const resource = { data: path, dialect: { format: "csv" } };
15
- const result = await inferDialectTool.execute?.({
16
- resource,
17
- }, {});
18
- expect.assert(result);
19
- expect.assert(!("error" in result));
20
- expect(result.dialect).toEqual({
21
- format: "csv",
22
- delimiter: ",",
23
- headerRows: [1],
24
- lineTerminator: "\n",
25
- });
26
- });
27
- it("infers TSV format", async () => {
28
- const path = await writeTempFile("id\tname\tage\n1\talice\t25\n2\tbob\t30");
29
- const resource = { data: path, dialect: { format: "csv" } };
30
- const result = await inferDialectTool.execute?.({
31
- resource,
32
- }, {});
33
- expect.assert(result);
34
- expect.assert(!("error" in result));
35
- expect(result.dialect).toEqual({
36
- format: "tsv",
37
- headerRows: [1],
38
- lineTerminator: "\n",
39
- });
40
- });
41
- it("infers JSON format with array of objects", async () => {
42
- const path = await writeTempFile(JSON.stringify([{ id: 1, name: "alice" }]));
43
- const resource = { data: path, dialect: { format: "json" } };
44
- const result = await inferDialectTool.execute?.({
45
- resource,
46
- }, {});
47
- expect.assert(result);
48
- expect.assert(!("error" in result));
49
- expect(result.dialect).toEqual({
50
- format: "json",
51
- rowType: "object",
52
- });
53
- });
54
- it("infers JSON format with array of arrays", async () => {
55
- const path = await writeTempFile(JSON.stringify([
56
- [1, "alice"],
57
- [2, "bob"],
58
- ]));
59
- const resource = { data: path, dialect: { format: "json" } };
60
- const result = await inferDialectTool.execute?.({
61
- resource,
62
- }, {});
63
- expect.assert(result);
64
- expect.assert(!("error" in result));
65
- expect(result.dialect?.format).toBe("json");
66
- expect(result.dialect).toHaveProperty("rowType");
67
- });
68
- it("infers JSONL format", async () => {
69
- const path = await writeTempFile('{"id":1,"name":"alice"}\n{"id":2,"name":"bob"}');
70
- const resource = { data: path, dialect: { format: "jsonl" } };
71
- const result = await inferDialectTool.execute?.({
72
- resource,
73
- }, {});
74
- expect.assert(result);
75
- expect.assert(!("error" in result));
76
- expect(result.dialect?.format).toBe("jsonl");
77
- });
78
- it("infers CSV with different delimiter", async () => {
79
- const path = await writeTempFile("id;name;age\n1;alice;25\n2;bob;30");
80
- const resource = { data: path, dialect: { format: "csv" } };
81
- const result = await inferDialectTool.execute?.({
82
- resource,
83
- }, {});
84
- expect.assert(result);
85
- expect.assert(!("error" in result));
86
- expect(result.dialect).toMatchObject({
87
- format: "csv",
88
- delimiter: ";",
89
- });
90
- });
91
- it("infers CSV without headers", async () => {
92
- const path = await writeTempFile("1,alice,25\n2,bob,30");
93
- const resource = { data: path, dialect: { format: "csv" } };
94
- const result = await inferDialectTool.execute?.({
95
- resource,
96
- }, {});
97
- expect.assert(result);
98
- expect.assert(!("error" in result));
99
- expect(result.dialect?.format).toBe("csv");
100
- expect(result.dialect).toHaveProperty("delimiter");
101
- });
102
- it("returns undefined for inline data", async () => {
103
- const resource = {
104
- data: [{ id: 1 }],
105
- };
106
- const result = await inferDialectTool.execute?.({
107
- resource,
108
- }, {});
109
- expect.assert(result);
110
- expect.assert(!("error" in result));
111
- expect(result.dialect).toBeUndefined();
112
- });
113
- it("respects sampleBytes option", async () => {
114
- const largeData = Array.from({ length: 1000 }, (_, i) => `${i},row${i}`).join("\n");
115
- const path = await writeTempFile(`id,name\n${largeData}`);
116
- const resource = { data: path, dialect: { format: "csv" } };
117
- const result = await inferDialectTool.execute?.({
118
- resource,
119
- options: { sampleBytes: 1000 },
120
- }, {});
121
- expect.assert(result);
122
- expect.assert(!("error" in result));
123
- expect(result.dialect?.format).toBe("csv");
124
- });
125
- it("infers dialect with provided format hint", async () => {
126
- const path = await writeTempFile("id,name\n1,alice\n2,bob");
127
- const resource = {
128
- data: path,
129
- dialect: { format: "csv" },
130
- };
131
- const result = await inferDialectTool.execute?.({
132
- resource,
133
- }, {});
134
- expect.assert(result);
135
- expect.assert(!("error" in result));
136
- expect(result.dialect?.format).toBe("csv");
137
- expect(result.dialect).toHaveProperty("delimiter");
138
- });
139
- });
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rvb2xzL2RpYWxlY3QvaW5mZXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUU3QyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNqRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDakQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNsRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3pELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sYUFBYSxDQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFDckUsTUFBTSxRQUFRLEdBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFBO1FBRXJFLE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLENB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Q0FBQTtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hELE1BQU0sSUFBSSxHQUFHLE1BQU0sYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUE7UUFDM0QsTUFBTSxRQUFRLEdBQWE7WUFDekIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1NBQzNCLENBQUE7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUM3QztZQUNFLFFBQVE7U0FDVCxFQUNELEVBQUUsQ0FDSCxDQUFBO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDcEQsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ3N2RGlhbGVjdCwgUmVzb3VyY2UgfSBmcm9tIFwiQGZhaXJzcGVjL2xpYnJhcnlcIlxuaW1wb3J0IHsgd3JpdGVUZW1wRmlsZSB9IGZyb20gXCJAZmFpcnNwZWMvbGlicmFyeVwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgaW5mZXJEaWFsZWN0VG9vbCB9IGZyb20gXCIuL2luZmVyLnRzXCJcblxuZGVzY3JpYmUoXCJpbmZlckRpYWxlY3RUb29sXCIsICgpID0+IHtcbiAgaXQoXCJ2YWxpZGF0ZXMgdG9vbCBzdHJ1Y3R1cmVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChpbmZlckRpYWxlY3RUb29sLmlkKS50b0JlKFwiaW5mZXItZGlhbGVjdFwiKVxuICAgIGV4cGVjdChpbmZlckRpYWxlY3RUb29sLmRlc2NyaXB0aW9uKS50b0JlVHJ1dGh5KClcbiAgICBleHBlY3QoaW5mZXJEaWFsZWN0VG9vbC5pbnB1dFNjaGVtYSkudG9CZVRydXRoeSgpXG4gICAgZXhwZWN0KGluZmVyRGlhbGVjdFRvb2wub3V0cHV0U2NoZW1hKS50b0JlVHJ1dGh5KClcbiAgICBleHBlY3QoaW5mZXJEaWFsZWN0VG9vbC5leGVjdXRlKS50b0JlVHlwZU9mKFwiZnVuY3Rpb25cIilcbiAgfSlcblxuICBpdChcImluZmVycyBDU1YgZm9ybWF0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkLG5hbWUsYWdlXFxuMSxhbGljZSwyNVxcbjIsYm9iLDMwXCIpXG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0geyBkYXRhOiBwYXRoLCBkaWFsZWN0OiB7IGZvcm1hdDogXCJjc3ZcIiB9IH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyRGlhbGVjdFRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LmRpYWxlY3QpLnRvRXF1YWw8Q3N2RGlhbGVjdD4oe1xuICAgICAgZm9ybWF0OiBcImNzdlwiLFxuICAgICAgZGVsaW1pdGVyOiBcIixcIixcbiAgICAgIGhlYWRlclJvd3M6IFsxXSxcbiAgICAgIGxpbmVUZXJtaW5hdG9yOiBcIlxcblwiLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgVFNWIGZvcm1hdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IHdyaXRlVGVtcEZpbGUoXCJpZFxcdG5hbWVcXHRhZ2VcXG4xXFx0YWxpY2VcXHQyNVxcbjJcXHRib2JcXHQzMFwiKVxuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHsgZGF0YTogcGF0aCwgZGlhbGVjdDogeyBmb3JtYXQ6IFwiY3N2XCIgfSB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlckRpYWxlY3RUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5kaWFsZWN0KS50b0VxdWFsKHtcbiAgICAgIGZvcm1hdDogXCJ0c3ZcIixcbiAgICAgIGhlYWRlclJvd3M6IFsxXSxcbiAgICAgIGxpbmVUZXJtaW5hdG9yOiBcIlxcblwiLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgSlNPTiBmb3JtYXQgd2l0aCBhcnJheSBvZiBvYmplY3RzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShKU09OLnN0cmluZ2lmeShbeyBpZDogMSwgbmFtZTogXCJhbGljZVwiIH1dKSlcbiAgICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7IGRhdGE6IHBhdGgsIGRpYWxlY3Q6IHsgZm9ybWF0OiBcImpzb25cIiB9IH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyRGlhbGVjdFRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LmRpYWxlY3QpLnRvRXF1YWwoe1xuICAgICAgZm9ybWF0OiBcImpzb25cIixcbiAgICAgIHJvd1R5cGU6IFwib2JqZWN0XCIsXG4gICAgfSlcbiAgfSlcblxuICBpdChcImluZmVycyBKU09OIGZvcm1hdCB3aXRoIGFycmF5IG9mIGFycmF5c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IHdyaXRlVGVtcEZpbGUoXG4gICAgICBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgIFsxLCBcImFsaWNlXCJdLFxuICAgICAgICBbMiwgXCJib2JcIl0sXG4gICAgICBdKSxcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0geyBkYXRhOiBwYXRoLCBkaWFsZWN0OiB7IGZvcm1hdDogXCJqc29uXCIgfSB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlckRpYWxlY3RUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5kaWFsZWN0Py5mb3JtYXQpLnRvQmUoXCJqc29uXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5kaWFsZWN0KS50b0hhdmVQcm9wZXJ0eShcInJvd1R5cGVcIilcbiAgfSlcblxuICBpdChcImluZmVycyBKU09OTCBmb3JtYXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFxuICAgICAgJ3tcImlkXCI6MSxcIm5hbWVcIjpcImFsaWNlXCJ9XFxue1wiaWRcIjoyLFwibmFtZVwiOlwiYm9iXCJ9JyxcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0geyBkYXRhOiBwYXRoLCBkaWFsZWN0OiB7IGZvcm1hdDogXCJqc29ubFwiIH0gfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJEaWFsZWN0VG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQuZGlhbGVjdD8uZm9ybWF0KS50b0JlKFwianNvbmxcIilcbiAgfSlcblxuICBpdChcImluZmVycyBDU1Ygd2l0aCBkaWZmZXJlbnQgZGVsaW1pdGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkO25hbWU7YWdlXFxuMTthbGljZTsyNVxcbjI7Ym9iOzMwXCIpXG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0geyBkYXRhOiBwYXRoLCBkaWFsZWN0OiB7IGZvcm1hdDogXCJjc3ZcIiB9IH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyRGlhbGVjdFRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LmRpYWxlY3QpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgZm9ybWF0OiBcImNzdlwiLFxuICAgICAgZGVsaW1pdGVyOiBcIjtcIixcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIENTViB3aXRob3V0IGhlYWRlcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFwiMSxhbGljZSwyNVxcbjIsYm9iLDMwXCIpXG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0geyBkYXRhOiBwYXRoLCBkaWFsZWN0OiB7IGZvcm1hdDogXCJjc3ZcIiB9IH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyRGlhbGVjdFRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LmRpYWxlY3Q/LmZvcm1hdCkudG9CZShcImNzdlwiKVxuICAgIGV4cGVjdChyZXN1bHQuZGlhbGVjdCkudG9IYXZlUHJvcGVydHkoXCJkZWxpbWl0ZXJcIilcbiAgfSlcblxuICBpdChcInJldHVybnMgdW5kZWZpbmVkIGZvciBpbmxpbmUgZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW3sgaWQ6IDEgfV0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJEaWFsZWN0VG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQuZGlhbGVjdCkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJyZXNwZWN0cyBzYW1wbGVCeXRlcyBvcHRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGxhcmdlRGF0YSA9IEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogMTAwMCB9LFxuICAgICAgKF8sIGkpID0+IGAke2l9LHJvdyR7aX1gLFxuICAgICkuam9pbihcIlxcblwiKVxuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKGBpZCxuYW1lXFxuJHtsYXJnZURhdGF9YClcbiAgICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7IGRhdGE6IHBhdGgsIGRpYWxlY3Q6IHsgZm9ybWF0OiBcImNzdlwiIH0gfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJEaWFsZWN0VG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICBvcHRpb25zOiB7IHNhbXBsZUJ5dGVzOiAxMDAwIH0sXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5kaWFsZWN0Py5mb3JtYXQpLnRvQmUoXCJjc3ZcIilcbiAgfSlcblxuICBpdChcImluZmVycyBkaWFsZWN0IHdpdGggcHJvdmlkZWQgZm9ybWF0IGhpbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFwiaWQsbmFtZVxcbjEsYWxpY2VcXG4yLGJvYlwiKVxuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IHBhdGgsXG4gICAgICBkaWFsZWN0OiB7IGZvcm1hdDogXCJjc3ZcIiB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyRGlhbGVjdFRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LmRpYWxlY3Q/LmZvcm1hdCkudG9CZShcImNzdlwiKVxuICAgIGV4cGVjdChyZXN1bHQuZGlhbGVjdCkudG9IYXZlUHJvcGVydHkoXCJkZWxpbWl0ZXJcIilcbiAgfSlcbn0pXG4iXX0=