@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.
Files changed (77) hide show
  1. package/build/examples/client.js +16 -0
  2. package/build/main.js +6 -0
  3. package/build/package.json +1 -1
  4. package/build/server.js +2 -1
  5. package/build/tools/data/validate.d.ts +180 -178
  6. package/build/tools/data/validate.js +6 -3
  7. package/build/tools/data/validate.spec.js +22 -22
  8. package/build/tools/dataSchema/infer.d.ts +10 -8
  9. package/build/tools/dataSchema/infer.js +6 -3
  10. package/build/tools/dataSchema/infer.spec.js +12 -10
  11. package/build/tools/dataSchema/validate.d.ts +173 -171
  12. package/build/tools/dataSchema/validate.js +6 -3
  13. package/build/tools/dataSchema/validate.spec.js +15 -15
  14. package/build/tools/dataset/infer.d.ts +804 -802
  15. package/build/tools/dataset/infer.js +6 -3
  16. package/build/tools/dataset/infer.spec.js +18 -18
  17. package/build/tools/dataset/validate.d.ts +180 -178
  18. package/build/tools/dataset/validate.js +6 -3
  19. package/build/tools/dataset/validate.spec.js +16 -16
  20. package/build/tools/dialect/infer.d.ts +98 -96
  21. package/build/tools/dialect/infer.js +6 -3
  22. package/build/tools/dialect/infer.spec.js +16 -14
  23. package/build/tools/table/query.d.ts +10 -8
  24. package/build/tools/table/query.js +6 -3
  25. package/build/tools/table/query.spec.js +31 -31
  26. package/build/tools/table/validate.d.ts +180 -178
  27. package/build/tools/table/validate.js +6 -3
  28. package/build/tools/table/validate.spec.js +11 -11
  29. package/build/tools/tableSchema/infer.d.ts +501 -499
  30. package/build/tools/tableSchema/infer.js +7 -3
  31. package/build/tools/tableSchema/infer.spec.js +35 -33
  32. package/build/tools/tableSchema/validate.d.ts +173 -171
  33. package/build/tools/tableSchema/validate.js +6 -3
  34. package/build/tools/tableSchema/validate.spec.js +13 -13
  35. package/package.json +2 -2
  36. package/build/actions/tableSchema/asHtml.d.ts +0 -4
  37. package/build/actions/tableSchema/asHtml.js +0 -82
  38. package/build/actions/tableSchema/asHtml.spec.js +0 -356
  39. package/build/actions/tableSchema/asMarkdown.d.ts +0 -4
  40. package/build/actions/tableSchema/asMarkdown.js +0 -65
  41. package/build/actions/tableSchema/asMarkdown.spec.js +0 -133
  42. package/build/document/Document.d.ts +0 -2
  43. package/build/document/Document.js +0 -2
  44. package/build/document/index.d.ts +0 -3
  45. package/build/document/index.js +0 -3
  46. package/build/document/types/Base.d.ts +0 -3
  47. package/build/document/types/Base.js +0 -2
  48. package/build/document/types/Json.d.ts +0 -5
  49. package/build/document/types/Json.js +0 -2
  50. package/build/document/validate.d.ts +0 -5
  51. package/build/document/validate.js +0 -23
  52. package/build/document/validate.spec.d.ts +0 -1
  53. package/build/document/validate.spec.js +0 -71
  54. package/build/plugin.d.ts +0 -6
  55. package/build/plugin.js +0 -15
  56. package/build/schema/convert/toHtml.d.ts +0 -4
  57. package/build/schema/convert/toHtml.js +0 -107
  58. package/build/schema/convert/toHtml.spec.d.ts +0 -1
  59. package/build/schema/convert/toHtml.spec.js +0 -432
  60. package/build/schema/convert/toMarkdown.d.ts +0 -4
  61. package/build/schema/convert/toMarkdown.js +0 -75
  62. package/build/schema/convert/toMarkdown.spec.d.ts +0 -1
  63. package/build/schema/convert/toMarkdown.spec.js +0 -137
  64. package/build/schema/index.d.ts +0 -2
  65. package/build/schema/index.js +0 -3
  66. package/build/tableSchema/convert/toHtml.d.ts +0 -4
  67. package/build/tableSchema/convert/toHtml.js +0 -80
  68. package/build/tableSchema/convert/toHtml.spec.d.ts +0 -1
  69. package/build/tableSchema/convert/toHtml.spec.js +0 -375
  70. package/build/tableSchema/convert/toMarkdown.d.ts +0 -4
  71. package/build/tableSchema/convert/toMarkdown.js +0 -57
  72. package/build/tableSchema/convert/toMarkdown.spec.d.ts +0 -1
  73. package/build/tableSchema/convert/toMarkdown.spec.js +0 -141
  74. package/build/tableSchema/index.d.ts +0 -2
  75. package/build/tableSchema/index.js +0 -3
  76. /package/build/{actions/tableSchema/asHtml.spec.d.ts → examples/client.d.ts} +0 -0
  77. /package/build/{actions/tableSchema/asMarkdown.spec.d.ts → main.d.ts} +0 -0
@@ -8,9 +8,13 @@ export const inferTableSchemaTool = createTool({
8
8
  resource: Resource.describe("The table resource to infer schema from"),
9
9
  options: InferTableSchemaOptions.optional().describe("Schema inference options"),
10
10
  }),
11
- outputSchema: TableSchema.optional(),
11
+ outputSchema: z.object({
12
+ schema: TableSchema.optional(),
13
+ }),
12
14
  execute: async (input) => {
13
- return await inferTableSchema(input.resource, input.options);
15
+ const schema = await inferTableSchema(input.resource, input.options);
16
+ console.log(schema);
17
+ return { schema };
14
18
  },
15
19
  });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90b29scy90YWJsZVNjaGVtYS9pbmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFFdkIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0lBQzdDLEVBQUUsRUFBRSxvQkFBb0I7SUFDeEIsV0FBVyxFQUNULDZHQUE2RztJQUMvRyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyx5Q0FBeUMsQ0FBQztRQUN0RSxPQUFPLEVBQUUsdUJBQXVCLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUNsRCwwQkFBMEIsQ0FDM0I7S0FDRixDQUFDO0lBQ0YsWUFBWSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBQyxLQUFLLEVBQUMsRUFBRTtRQUNyQixPQUFPLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDOUQsQ0FBQztDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluZmVyVGFibGVTY2hlbWFPcHRpb25zLFxuICBpbmZlclRhYmxlU2NoZW1hLFxuICBSZXNvdXJjZSxcbiAgVGFibGVTY2hlbWEsXG59IGZyb20gXCJAZmFpcnNwZWMvbGlicmFyeVwiXG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBjb25zdCBpbmZlclRhYmxlU2NoZW1hVG9vbCA9IGNyZWF0ZVRvb2woe1xuICBpZDogXCJpbmZlci10YWJsZS1zY2hlbWFcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJJbmZlciBhIHRhYmxlIHNjaGVtYSBmcm9tIHRhYmxlIHJlc291cmNlIGRhdGEuIEFuYWx5emVzIHRoZSBkYXRhIHRvIGRldGVybWluZSBjb2x1bW4gdHlwZXMgYW5kIGNvbnN0cmFpbnRzLlwiLFxuICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgIHJlc291cmNlOiBSZXNvdXJjZS5kZXNjcmliZShcIlRoZSB0YWJsZSByZXNvdXJjZSB0byBpbmZlciBzY2hlbWEgZnJvbVwiKSxcbiAgICBvcHRpb25zOiBJbmZlclRhYmxlU2NoZW1hT3B0aW9ucy5vcHRpb25hbCgpLmRlc2NyaWJlKFxuICAgICAgXCJTY2hlbWEgaW5mZXJlbmNlIG9wdGlvbnNcIixcbiAgICApLFxuICB9KSxcbiAgb3V0cHV0U2NoZW1hOiBUYWJsZVNjaGVtYS5vcHRpb25hbCgpLFxuICBleGVjdXRlOiBhc3luYyBpbnB1dCA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGluZmVyVGFibGVTY2hlbWEoaW5wdXQucmVzb3VyY2UsIGlucHV0Lm9wdGlvbnMpXG4gIH0sXG59KVxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90b29scy90YWJsZVNjaGVtYS9pbmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFFdkIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0lBQzdDLEVBQUUsRUFBRSxvQkFBb0I7SUFDeEIsV0FBVyxFQUNULDZHQUE2RztJQUMvRyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyx5Q0FBeUMsQ0FBQztRQUN0RSxPQUFPLEVBQUUsdUJBQXVCLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUNsRCwwQkFBMEIsQ0FDM0I7S0FDRixDQUFDO0lBQ0YsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUU7S0FDL0IsQ0FBQztJQUNGLE9BQU8sRUFBRSxLQUFLLEVBQUMsS0FBSyxFQUFDLEVBQUU7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNwRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25CLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5mZXJUYWJsZVNjaGVtYU9wdGlvbnMsXG4gIGluZmVyVGFibGVTY2hlbWEsXG4gIFJlc291cmNlLFxuICBUYWJsZVNjaGVtYSxcbn0gZnJvbSBcIkBmYWlyc3BlYy9saWJyYXJ5XCJcbmltcG9ydCB7IGNyZWF0ZVRvb2wgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3Rvb2xzXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGNvbnN0IGluZmVyVGFibGVTY2hlbWFUb29sID0gY3JlYXRlVG9vbCh7XG4gIGlkOiBcImluZmVyLXRhYmxlLXNjaGVtYVwiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIkluZmVyIGEgdGFibGUgc2NoZW1hIGZyb20gdGFibGUgcmVzb3VyY2UgZGF0YS4gQW5hbHl6ZXMgdGhlIGRhdGEgdG8gZGV0ZXJtaW5lIGNvbHVtbiB0eXBlcyBhbmQgY29uc3RyYWludHMuXCIsXG4gIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgcmVzb3VyY2U6IFJlc291cmNlLmRlc2NyaWJlKFwiVGhlIHRhYmxlIHJlc291cmNlIHRvIGluZmVyIHNjaGVtYSBmcm9tXCIpLFxuICAgIG9wdGlvbnM6IEluZmVyVGFibGVTY2hlbWFPcHRpb25zLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgICBcIlNjaGVtYSBpbmZlcmVuY2Ugb3B0aW9uc1wiLFxuICAgICksXG4gIH0pLFxuICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICBzY2hlbWE6IFRhYmxlU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pLFxuICBleGVjdXRlOiBhc3luYyBpbnB1dCA9PiB7XG4gICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgaW5mZXJUYWJsZVNjaGVtYShpbnB1dC5yZXNvdXJjZSwgaW5wdXQub3B0aW9ucylcbiAgICBjb25zb2xlLmxvZyhzY2hlbWEpXG4gICAgcmV0dXJuIHsgc2NoZW1hIH1cbiAgfSxcbn0pXG4iXX0=
@@ -17,10 +17,10 @@ describe("inferTableSchemaTool", () => {
17
17
  }, {});
18
18
  expect.assert(result);
19
19
  expect.assert(!("error" in result));
20
- expect(result.properties).toBeDefined();
21
- expect(result.properties?.id?.type).toBe("integer");
22
- expect(result.properties?.name?.type).toBe("string");
23
- expect(result.properties?.age?.type).toBe("integer");
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");
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.properties).toBeDefined();
38
- expect(result.properties?.id?.type).toBe("integer");
39
- expect(result.properties?.name?.type).toBe("string");
40
- expect(result.properties?.age?.type).toBe("integer");
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");
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.properties).toBeDefined();
55
- expect(result.properties?.id?.type).toBe("integer");
56
- expect(result.properties?.name?.type).toBe("string");
57
- expect(result.properties?.score?.type).toBe("number");
58
- expect(result.properties?.active?.type).toBe("boolean");
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");
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.properties).toBeDefined();
73
- expect(result.properties?.id?.type).toBe("integer");
74
- expect(result.properties?.name?.type).toBe("string");
75
- expect(result.properties?.created?.type).toBe("string");
76
- expect(result.properties?.created?.format).toBe("date");
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");
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.properties).toBeDefined();
92
- expect(result.properties?.id?.type).toBe("integer");
93
- expect(result.properties?.name?.type).toBe("string");
91
+ expect(result.schema?.properties).toBeDefined();
92
+ expect(result.schema?.properties?.id?.type).toBe("integer");
93
+ expect(result.schema?.properties?.name?.type).toBe("string");
94
94
  });
95
95
  it("handles empty data", async () => {
96
96
  const resource = {
@@ -99,7 +99,9 @@ describe("inferTableSchemaTool", () => {
99
99
  const result = await inferTableSchemaTool.execute?.({
100
100
  resource,
101
101
  }, {});
102
- expect(result).toBeUndefined();
102
+ expect.assert(result);
103
+ expect.assert(!("error" in result));
104
+ expect(result.schema).toBeUndefined();
103
105
  });
104
106
  it("handles single row data", async () => {
105
107
  const resource = {
@@ -110,9 +112,9 @@ describe("inferTableSchemaTool", () => {
110
112
  }, {});
111
113
  expect.assert(result);
112
114
  expect.assert(!("error" in result));
113
- expect(result.properties).toBeDefined();
114
- expect(result.properties?.id?.type).toBe("integer");
115
- expect(result.properties?.name?.type).toBe("string");
115
+ expect(result.schema?.properties).toBeDefined();
116
+ expect(result.schema?.properties?.id?.type).toBe("integer");
117
+ expect(result.schema?.properties?.name?.type).toBe("string");
116
118
  });
117
119
  it("respects columnTypes option", async () => {
118
120
  const resource = {
@@ -127,9 +129,9 @@ describe("inferTableSchemaTool", () => {
127
129
  }, {});
128
130
  expect.assert(result);
129
131
  expect.assert(!("error" in result));
130
- expect(result.properties).toBeDefined();
131
- expect(result.properties?.id?.type).toBe("integer");
132
- expect(result.properties?.value?.type).toBe("integer");
132
+ expect(result.schema?.properties).toBeDefined();
133
+ expect(result.schema?.properties?.id?.type).toBe("integer");
134
+ expect(result.schema?.properties?.value?.type).toBe("integer");
133
135
  });
134
136
  it("handles time fields", async () => {
135
137
  const resource = {
@@ -143,10 +145,10 @@ describe("inferTableSchemaTool", () => {
143
145
  }, {});
144
146
  expect.assert(result);
145
147
  expect.assert(!("error" in result));
146
- expect(result.properties).toBeDefined();
147
- expect(result.properties?.id?.type).toBe("integer");
148
- expect(result.properties?.time?.type).toBe("string");
149
- expect(result.properties?.time?.format).toBe("time");
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");
150
152
  });
151
153
  });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rvb2xzL3RhYmxlU2NoZW1hL2luZmVyLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtJQUNwQyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtRQUMxRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDckQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ3JELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN0RCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzdELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sYUFBYSxDQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFDckUsTUFBTSxRQUFRLEdBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFBO1FBRXJFLE1BQU0sTUFBTSxHQUFHLE1BQU0sb0JB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QUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUMzQixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTthQUM1QjtTQUNGLENBQUE7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxDQUNqRDtZQUNFLFFBQVE7U0FDVCxFQUNELEVBQUUsQ0FDSCxDQUFBO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVuQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDbkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIkBmYWlyc3BlYy9saWJyYXJ5XCJcbmltcG9ydCB7IHdyaXRlVGVtcEZpbGUgfSBmcm9tIFwiQGZhaXJzcGVjL2xpYnJhcnlcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IGluZmVyVGFibGVTY2hlbWFUb29sIH0gZnJvbSBcIi4vaW5mZXIudHNcIlxuXG5kZXNjcmliZShcImluZmVyVGFibGVTY2hlbWFUb29sXCIsICgpID0+IHtcbiAgaXQoXCJ2YWxpZGF0ZXMgdG9vbCBzdHJ1Y3R1cmVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChpbmZlclRhYmxlU2NoZW1hVG9vbC5pZCkudG9CZShcImluZmVyLXRhYmxlLXNjaGVtYVwiKVxuICAgIGV4cGVjdChpbmZlclRhYmxlU2NoZW1hVG9vbC5kZXNjcmlwdGlvbikudG9CZVRydXRoeSgpXG4gICAgZXhwZWN0KGluZmVyVGFibGVTY2hlbWFUb29sLmlucHV0U2NoZW1hKS50b0JlVHJ1dGh5KClcbiAgICBleHBlY3QoaW5mZXJUYWJsZVNjaGVtYVRvb2wub3V0cHV0U2NoZW1hKS50b0JlVHJ1dGh5KClcbiAgICBleHBlY3QoaW5mZXJUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZSkudG9CZVR5cGVPZihcImZ1bmN0aW9uXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgc2NoZW1hIGZyb20gQ1NWIGZpbGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFwiaWQsbmFtZSxhZ2VcXG4xLGFsaWNlLDMwXFxuMixib2IsMjVcIilcbiAgICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7IGRhdGE6IHBhdGgsIGRpYWxlY3Q6IHsgZm9ybWF0OiBcImNzdlwiIH0gfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcz8ubmFtZT8udHlwZSkudG9CZShcInN0cmluZ1wiKVxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcz8uYWdlPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIHNjaGVtYSBmcm9tIGlubGluZSBvYmplY3QgZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGlkOiAxLCBuYW1lOiBcImFsaWNlXCIsIGFnZTogMzAgfSxcbiAgICAgICAgeyBpZDogMiwgbmFtZTogXCJib2JcIiwgYWdlOiAyNSB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcz8uaWQ/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5hZ2U/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgZGlmZmVyZW50IGZpZWxkIHR5cGVzIGNvcnJlY3RseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGlkOiAxLCBuYW1lOiBcImFsaWNlXCIsIHNjb3JlOiA5NS41LCBhY3RpdmU6IHRydWUgfSxcbiAgICAgICAgeyBpZDogMiwgbmFtZTogXCJib2JcIiwgc2NvcmU6IDg3LjMsIGFjdGl2ZTogZmFsc2UgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApXG5cbiAgICBleHBlY3QuYXNzZXJ0KHJlc3VsdClcbiAgICBleHBlY3QuYXNzZXJ0KCEoXCJlcnJvclwiIGluIHJlc3VsdCkpXG5cbiAgICBleHBlY3QocmVzdWx0LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnByb3BlcnRpZXM/LmlkPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcz8ubmFtZT8udHlwZSkudG9CZShcInN0cmluZ1wiKVxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcz8uc2NvcmU/LnR5cGUpLnRvQmUoXCJudW1iZXJcIilcbiAgICBleHBlY3QocmVzdWx0LnByb3BlcnRpZXM/LmFjdGl2ZT8udHlwZSkudG9CZShcImJvb2xlYW5cIilcbiAgfSlcblxuICBpdChcImluZmVycyBkYXRlIGZpZWxkcyBmcm9tIHN0cmluZ3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiLCBjcmVhdGVkOiBcIjIwMjQtMDEtMDFcIiB9LFxuICAgICAgICB7IGlkOiAyLCBuYW1lOiBcImJvYlwiLCBjcmVhdGVkOiBcIjIwMjQtMDEtMDJcIiB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcz8uaWQ/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5jcmVhdGVkPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5jcmVhdGVkPy5mb3JtYXQpLnRvQmUoXCJkYXRlXCIpXG4gIH0pXG5cbiAgaXQoXCJyZXNwZWN0cyBzYW1wbGVSb3dzIG9wdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogQXJyYXkuZnJvbSh7IGxlbmd0aDogMTAwMCB9LCAoXywgaSkgPT4gKHtcbiAgICAgICAgaWQ6IGksXG4gICAgICAgIG5hbWU6IGB1c2VyJHtpfWAsXG4gICAgICB9KSksXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgb3B0aW9uczogeyBzYW1wbGVSb3dzOiAxMCB9LFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcz8uaWQ/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGVtcHR5IGRhdGFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IFtdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHNpbmdsZSByb3cgZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW3sgaWQ6IDEsIG5hbWU6IFwiYWxpY2VcIiB9XSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclRhYmxlU2NoZW1hVG9vbC5leGVjdXRlPy4oXG4gICAgICB7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgIClcblxuICAgIGV4cGVjdC5hc3NlcnQocmVzdWx0KVxuICAgIGV4cGVjdC5hc3NlcnQoIShcImVycm9yXCIgaW4gcmVzdWx0KSlcblxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQucHJvcGVydGllcz8uaWQ/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5uYW1lPy50eXBlKS50b0JlKFwic3RyaW5nXCIpXG4gIH0pXG5cbiAgaXQoXCJyZXNwZWN0cyBjb2x1bW5UeXBlcyBvcHRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZSA9IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBpZDogXCIxMjNcIiwgdmFsdWU6IFwiNDU2XCIgfSxcbiAgICAgICAgeyBpZDogXCI3ODlcIiwgdmFsdWU6IFwiMDEyXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJUYWJsZVNjaGVtYVRvb2wuZXhlY3V0ZT8uKFxuICAgICAge1xuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgb3B0aW9uczogeyBjb2x1bW5UeXBlczogeyBpZDogXCJpbnRlZ2VyXCIsIHZhbHVlOiBcImludGVnZXJcIiB9IH0sXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5pZD8udHlwZSkudG9CZShcImludGVnZXJcIilcbiAgICBleHBlY3QocmVzdWx0LnByb3BlcnRpZXM/LnZhbHVlPy50eXBlKS50b0JlKFwiaW50ZWdlclwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyB0aW1lIGZpZWxkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGlkOiAxLCB0aW1lOiBcIjE0OjMwOjAwXCIgfSxcbiAgICAgICAgeyBpZDogMiwgdGltZTogXCIwOToxNTozMFwiIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyVGFibGVTY2hlbWFUb29sLmV4ZWN1dGU/LihcbiAgICAgIHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKVxuXG4gICAgZXhwZWN0LmFzc2VydChyZXN1bHQpXG4gICAgZXhwZWN0LmFzc2VydCghKFwiZXJyb3JcIiBpbiByZXN1bHQpKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5wcm9wZXJ0aWVzPy5pZD8udHlwZSkudG9CZShcImludGVnZXJcIilcbiAgICBleHBlY3QocmVzdWx0LnByb3BlcnRpZXM/LnRpbWU/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgICBleHBlY3QocmVzdWx0LnByb3BlcnRpZXM/LnRpbWU/LmZvcm1hdCkudG9CZShcInRpbWVcIilcbiAgfSlcbn0pXG4iXX0=
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==
@@ -1,177 +1,179 @@
1
1
  export declare const validateTableSchemaTool: import("@mastra/core/tools").Tool<{
2
2
  source: string | Record<string, unknown>;
3
3
  }, {
4
- valid: boolean;
5
- errors: ({
6
- type: "metadata";
7
- message: string;
8
- jsonPointer: string;
9
- resourceName?: string | undefined;
10
- } | {
11
- type: "resource/missing";
12
- referencingResourceName: string;
13
- resourceName?: string | undefined;
14
- } | {
15
- type: "resource/type";
16
- expectedResourceType: "data" | "table";
17
- resourceName?: string | undefined;
18
- referencingResourceName?: string | undefined;
19
- } | {
20
- type: "column/missing";
21
- columnName: string;
22
- resourceName?: string | undefined;
23
- } | {
24
- type: "column/type";
25
- columnName: string;
26
- expectedColumnType: "string" | "number" | "boolean" | "object" | "unknown" | "date" | "array" | "url" | "integer" | "categorical" | "list" | "date-time" | "time" | "base64" | "hex" | "email" | "duration" | "wkt" | "wkb" | "decimal" | "geojson" | "topojson";
27
- actualColumnType: "string" | "number" | "boolean" | "object" | "unknown" | "date" | "array" | "url" | "integer" | "categorical" | "list" | "date-time" | "time" | "base64" | "hex" | "email" | "duration" | "wkt" | "wkb" | "decimal" | "geojson" | "topojson";
28
- resourceName?: string | undefined;
29
- } | {
30
- type: "row/primaryKey";
31
- rowNumber: number;
32
- columnNames: string[];
33
- resourceName?: string | undefined;
34
- } | {
35
- type: "row/uniqueKey";
36
- rowNumber: number;
37
- columnNames: string[];
38
- resourceName?: string | undefined;
39
- } | {
40
- columnName: string;
41
- rowNumber: number;
42
- cell: string;
43
- type: "cell/type";
44
- columnType: "string" | "number" | "boolean" | "object" | "unknown" | "date" | "array" | "url" | "integer" | "categorical" | "list" | "date-time" | "time" | "base64" | "hex" | "email" | "duration" | "wkt" | "wkb" | "decimal" | "geojson" | "topojson";
45
- resourceName?: string | undefined;
46
- } | {
47
- columnName: string;
48
- rowNumber: number;
49
- cell: string;
50
- type: "cell/required";
51
- resourceName?: string | undefined;
52
- } | {
53
- columnName: string;
54
- rowNumber: number;
55
- cell: string;
56
- type: "cell/minimum";
57
- minimum: string;
58
- resourceName?: string | undefined;
59
- } | {
60
- columnName: string;
61
- rowNumber: number;
62
- cell: string;
63
- type: "cell/maximum";
64
- maximum: string;
65
- resourceName?: string | undefined;
66
- } | {
67
- columnName: string;
68
- rowNumber: number;
69
- cell: string;
70
- type: "cell/exclusiveMinimum";
71
- minimum: string;
72
- resourceName?: string | undefined;
73
- } | {
74
- columnName: string;
75
- rowNumber: number;
76
- cell: string;
77
- type: "cell/exclusiveMaximum";
78
- maximum: string;
79
- resourceName?: string | undefined;
80
- } | {
81
- columnName: string;
82
- rowNumber: number;
83
- cell: string;
84
- type: "cell/multipleOf";
85
- multipleOf: number;
86
- resourceName?: string | undefined;
87
- } | {
88
- columnName: string;
89
- rowNumber: number;
90
- cell: string;
91
- type: "cell/minLength";
92
- minLength: number;
93
- resourceName?: string | undefined;
94
- } | {
95
- columnName: string;
96
- rowNumber: number;
97
- cell: string;
98
- type: "cell/maxLength";
99
- maxLength: number;
100
- resourceName?: string | undefined;
101
- } | {
102
- columnName: string;
103
- rowNumber: number;
104
- cell: string;
105
- type: "cell/minItems";
106
- minItems: number;
107
- resourceName?: string | undefined;
108
- } | {
109
- columnName: string;
110
- rowNumber: number;
111
- cell: string;
112
- type: "cell/maxItems";
113
- maxItems: number;
114
- resourceName?: string | undefined;
115
- } | {
116
- columnName: string;
117
- rowNumber: number;
118
- cell: string;
119
- type: "cell/pattern";
120
- pattern: string;
121
- resourceName?: string | undefined;
122
- } | {
123
- columnName: string;
124
- rowNumber: number;
125
- cell: string;
126
- type: "cell/unique";
127
- resourceName?: string | undefined;
128
- } | {
129
- columnName: string;
130
- rowNumber: number;
131
- cell: string;
132
- type: "cell/const";
133
- const: string;
134
- resourceName?: string | undefined;
135
- } | {
136
- columnName: string;
137
- rowNumber: number;
138
- cell: string;
139
- type: "cell/enum";
140
- enum: string[];
141
- resourceName?: string | undefined;
142
- } | {
143
- columnName: string;
144
- rowNumber: number;
145
- cell: string;
146
- type: "cell/json";
147
- message: string;
148
- jsonPointer: string;
149
- resourceName?: string | undefined;
150
- } | {
151
- type: "foreignKey";
152
- foreignKey: {
153
- columns: string[];
154
- reference: {
4
+ report: {
5
+ valid: boolean;
6
+ errors: ({
7
+ type: "metadata";
8
+ message: string;
9
+ jsonPointer: string;
10
+ resourceName?: string | undefined;
11
+ } | {
12
+ type: "resource/missing";
13
+ referencingResourceName: string;
14
+ resourceName?: string | undefined;
15
+ } | {
16
+ type: "resource/type";
17
+ expectedResourceType: "data" | "table";
18
+ resourceName?: string | undefined;
19
+ referencingResourceName?: string | undefined;
20
+ } | {
21
+ type: "column/missing";
22
+ columnName: string;
23
+ resourceName?: string | undefined;
24
+ } | {
25
+ type: "column/type";
26
+ columnName: string;
27
+ expectedColumnType: "string" | "number" | "boolean" | "object" | "unknown" | "date" | "array" | "base64" | "integer" | "categorical" | "date-time" | "decimal" | "duration" | "email" | "geojson" | "hex" | "list" | "time" | "topojson" | "url" | "wkb" | "wkt";
28
+ actualColumnType: "string" | "number" | "boolean" | "object" | "unknown" | "date" | "array" | "base64" | "integer" | "categorical" | "date-time" | "decimal" | "duration" | "email" | "geojson" | "hex" | "list" | "time" | "topojson" | "url" | "wkb" | "wkt";
29
+ resourceName?: string | undefined;
30
+ } | {
31
+ type: "row/primaryKey";
32
+ rowNumber: number;
33
+ columnNames: string[];
34
+ resourceName?: string | undefined;
35
+ } | {
36
+ type: "row/uniqueKey";
37
+ rowNumber: number;
38
+ columnNames: string[];
39
+ resourceName?: string | undefined;
40
+ } | {
41
+ columnName: string;
42
+ rowNumber: number;
43
+ cell: string;
44
+ type: "cell/type";
45
+ columnType: "string" | "number" | "boolean" | "object" | "unknown" | "date" | "array" | "base64" | "integer" | "categorical" | "date-time" | "decimal" | "duration" | "email" | "geojson" | "hex" | "list" | "time" | "topojson" | "url" | "wkb" | "wkt";
46
+ resourceName?: string | undefined;
47
+ } | {
48
+ columnName: string;
49
+ rowNumber: number;
50
+ cell: string;
51
+ type: "cell/required";
52
+ resourceName?: string | undefined;
53
+ } | {
54
+ columnName: string;
55
+ rowNumber: number;
56
+ cell: string;
57
+ type: "cell/minimum";
58
+ minimum: string;
59
+ resourceName?: string | undefined;
60
+ } | {
61
+ columnName: string;
62
+ rowNumber: number;
63
+ cell: string;
64
+ type: "cell/maximum";
65
+ maximum: string;
66
+ resourceName?: string | undefined;
67
+ } | {
68
+ columnName: string;
69
+ rowNumber: number;
70
+ cell: string;
71
+ type: "cell/exclusiveMinimum";
72
+ minimum: string;
73
+ resourceName?: string | undefined;
74
+ } | {
75
+ columnName: string;
76
+ rowNumber: number;
77
+ cell: string;
78
+ type: "cell/exclusiveMaximum";
79
+ maximum: string;
80
+ resourceName?: string | undefined;
81
+ } | {
82
+ columnName: string;
83
+ rowNumber: number;
84
+ cell: string;
85
+ type: "cell/multipleOf";
86
+ multipleOf: number;
87
+ resourceName?: string | undefined;
88
+ } | {
89
+ columnName: string;
90
+ rowNumber: number;
91
+ cell: string;
92
+ type: "cell/minLength";
93
+ minLength: number;
94
+ resourceName?: string | undefined;
95
+ } | {
96
+ columnName: string;
97
+ rowNumber: number;
98
+ cell: string;
99
+ type: "cell/maxLength";
100
+ maxLength: number;
101
+ resourceName?: string | undefined;
102
+ } | {
103
+ columnName: string;
104
+ rowNumber: number;
105
+ cell: string;
106
+ type: "cell/minItems";
107
+ minItems: number;
108
+ resourceName?: string | undefined;
109
+ } | {
110
+ columnName: string;
111
+ rowNumber: number;
112
+ cell: string;
113
+ type: "cell/maxItems";
114
+ maxItems: number;
115
+ resourceName?: string | undefined;
116
+ } | {
117
+ columnName: string;
118
+ rowNumber: number;
119
+ cell: string;
120
+ type: "cell/pattern";
121
+ pattern: string;
122
+ resourceName?: string | undefined;
123
+ } | {
124
+ columnName: string;
125
+ rowNumber: number;
126
+ cell: string;
127
+ type: "cell/unique";
128
+ resourceName?: string | undefined;
129
+ } | {
130
+ columnName: string;
131
+ rowNumber: number;
132
+ cell: string;
133
+ type: "cell/const";
134
+ const: string;
135
+ resourceName?: string | undefined;
136
+ } | {
137
+ columnName: string;
138
+ rowNumber: number;
139
+ cell: string;
140
+ type: "cell/enum";
141
+ enum: string[];
142
+ resourceName?: string | undefined;
143
+ } | {
144
+ columnName: string;
145
+ rowNumber: number;
146
+ cell: string;
147
+ type: "cell/json";
148
+ message: string;
149
+ jsonPointer: string;
150
+ resourceName?: string | undefined;
151
+ } | {
152
+ type: "foreignKey";
153
+ foreignKey: {
155
154
  columns: string[];
156
- resource?: string | undefined;
155
+ reference: {
156
+ columns: string[];
157
+ resource?: string | undefined;
158
+ };
157
159
  };
158
- };
159
- cells: string[];
160
- resourceName?: string | undefined;
161
- } | {
162
- type: "data";
163
- message: string;
164
- jsonPointer: string;
165
- resourceName?: string | undefined;
166
- } | {
167
- type: "file/textual";
168
- resourceName?: string | undefined;
169
- actualEncoding?: string | undefined;
170
- } | {
171
- type: "file/integrity";
172
- hashType: string;
173
- expectedHash: string;
174
- actualHash: string;
175
- resourceName?: string | undefined;
176
- })[];
160
+ cells: string[];
161
+ resourceName?: string | undefined;
162
+ } | {
163
+ type: "data";
164
+ message: string;
165
+ jsonPointer: string;
166
+ resourceName?: string | undefined;
167
+ } | {
168
+ type: "file/textual";
169
+ resourceName?: string | undefined;
170
+ actualEncoding?: string | undefined;
171
+ } | {
172
+ type: "file/integrity";
173
+ hashType: string;
174
+ expectedHash: string;
175
+ actualHash: string;
176
+ resourceName?: string | undefined;
177
+ })[];
178
+ };
177
179
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "validate-table-schema", unknown>;
@@ -9,9 +9,12 @@ export const validateTableSchemaTool = createTool({
9
9
  .union([Descriptor, z.string()])
10
10
  .describe("The table schema to validate (descriptor object or file path)"),
11
11
  }),
12
- outputSchema: Report,
12
+ outputSchema: z.object({
13
+ report: Report,
14
+ }),
13
15
  execute: async (input) => {
14
- return await validateTableSchema(input.source);
16
+ const report = await validateTableSchema(input.source);
17
+ return { report };
15
18
  },
16
19
  });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90b29scy90YWJsZVNjaGVtYS92YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQztJQUNoRCxFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLFdBQVcsRUFDVCx3SEFBd0g7SUFDMUgsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEIsTUFBTSxFQUFFLENBQUM7YUFDTixLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDL0IsUUFBUSxDQUNQLCtEQUErRCxDQUNoRTtLQUNKLENBQUM7SUFDRixZQUFZLEVBQUUsTUFBTTtJQUNwQixPQUFPLEVBQUUsS0FBSyxFQUFDLEtBQUssRUFBQyxFQUFFO1FBQ3JCLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDaEQsQ0FBQztDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IsIFJlcG9ydCwgdmFsaWRhdGVUYWJsZVNjaGVtYSB9IGZyb20gXCJAZmFpcnNwZWMvbGlicmFyeVwiXG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRhYmxlU2NoZW1hVG9vbCA9IGNyZWF0ZVRvb2woe1xuICBpZDogXCJ2YWxpZGF0ZS10YWJsZS1zY2hlbWFcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJWYWxpZGF0ZSBhIHRhYmxlIHNjaGVtYSBhZ2FpbnN0IHRoZSBGYWlyc3BlYyBUYWJsZSBTY2hlbWEgc3BlY2lmaWNhdGlvbi4gUmV0dXJucyB2YWxpZGF0aW9uIHJlcG9ydCB3aXRoIGVycm9ycyBpZiBhbnkuXCIsXG4gIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgc291cmNlOiB6XG4gICAgICAudW5pb24oW0Rlc2NyaXB0b3IsIHouc3RyaW5nKCldKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIlRoZSB0YWJsZSBzY2hlbWEgdG8gdmFsaWRhdGUgKGRlc2NyaXB0b3Igb2JqZWN0IG9yIGZpbGUgcGF0aClcIixcbiAgICAgICksXG4gIH0pLFxuICBvdXRwdXRTY2hlbWE6IFJlcG9ydCxcbiAgZXhlY3V0ZTogYXN5bmMgaW5wdXQgPT4ge1xuICAgIHJldHVybiBhd2FpdCB2YWxpZGF0ZVRhYmxlU2NoZW1hKGlucHV0LnNvdXJjZSlcbiAgfSxcbn0pXG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90b29scy90YWJsZVNjaGVtYS92YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQztJQUNoRCxFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLFdBQVcsRUFDVCx3SEFBd0g7SUFDMUgsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEIsTUFBTSxFQUFFLENBQUM7YUFDTixLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDL0IsUUFBUSxDQUNQLCtEQUErRCxDQUNoRTtLQUNKLENBQUM7SUFDRixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNyQixNQUFNLEVBQUUsTUFBTTtLQUNmLENBQUM7SUFDRixPQUFPLEVBQUUsS0FBSyxFQUFDLEtBQUssRUFBQyxFQUFFO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciwgUmVwb3J0LCB2YWxpZGF0ZVRhYmxlU2NoZW1hIH0gZnJvbSBcIkBmYWlyc3BlYy9saWJyYXJ5XCJcbmltcG9ydCB7IGNyZWF0ZVRvb2wgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3Rvb2xzXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGFibGVTY2hlbWFUb29sID0gY3JlYXRlVG9vbCh7XG4gIGlkOiBcInZhbGlkYXRlLXRhYmxlLXNjaGVtYVwiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIlZhbGlkYXRlIGEgdGFibGUgc2NoZW1hIGFnYWluc3QgdGhlIEZhaXJzcGVjIFRhYmxlIFNjaGVtYSBzcGVjaWZpY2F0aW9uLiBSZXR1cm5zIHZhbGlkYXRpb24gcmVwb3J0IHdpdGggZXJyb3JzIGlmIGFueS5cIixcbiAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICBzb3VyY2U6IHpcbiAgICAgIC51bmlvbihbRGVzY3JpcHRvciwgei5zdHJpbmcoKV0pXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiVGhlIHRhYmxlIHNjaGVtYSB0byB2YWxpZGF0ZSAoZGVzY3JpcHRvciBvYmplY3Qgb3IgZmlsZSBwYXRoKVwiLFxuICAgICAgKSxcbiAgfSksXG4gIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgIHJlcG9ydDogUmVwb3J0LFxuICB9KSxcbiAgZXhlY3V0ZTogYXN5bmMgaW5wdXQgPT4ge1xuICAgIGNvbnN0IHJlcG9ydCA9IGF3YWl0IHZhbGlkYXRlVGFibGVTY2hlbWEoaW5wdXQuc291cmNlKVxuICAgIHJldHVybiB7IHJlcG9ydCB9XG4gIH0sXG59KVxuIl19