@fairspec/agent 0.9.0 → 0.9.1

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 (44) hide show
  1. package/build/package.json +1 -1
  2. package/package.json +2 -2
  3. package/build/actions/tableSchema/asHtml.d.ts +0 -4
  4. package/build/actions/tableSchema/asHtml.js +0 -82
  5. package/build/actions/tableSchema/asHtml.spec.d.ts +0 -1
  6. package/build/actions/tableSchema/asHtml.spec.js +0 -356
  7. package/build/actions/tableSchema/asMarkdown.d.ts +0 -4
  8. package/build/actions/tableSchema/asMarkdown.js +0 -65
  9. package/build/actions/tableSchema/asMarkdown.spec.d.ts +0 -1
  10. package/build/actions/tableSchema/asMarkdown.spec.js +0 -133
  11. package/build/document/Document.d.ts +0 -2
  12. package/build/document/Document.js +0 -2
  13. package/build/document/index.d.ts +0 -3
  14. package/build/document/index.js +0 -3
  15. package/build/document/types/Base.d.ts +0 -3
  16. package/build/document/types/Base.js +0 -2
  17. package/build/document/types/Json.d.ts +0 -5
  18. package/build/document/types/Json.js +0 -2
  19. package/build/document/validate.d.ts +0 -5
  20. package/build/document/validate.js +0 -23
  21. package/build/document/validate.spec.d.ts +0 -1
  22. package/build/document/validate.spec.js +0 -71
  23. package/build/plugin.d.ts +0 -6
  24. package/build/plugin.js +0 -15
  25. package/build/schema/convert/toHtml.d.ts +0 -4
  26. package/build/schema/convert/toHtml.js +0 -107
  27. package/build/schema/convert/toHtml.spec.d.ts +0 -1
  28. package/build/schema/convert/toHtml.spec.js +0 -432
  29. package/build/schema/convert/toMarkdown.d.ts +0 -4
  30. package/build/schema/convert/toMarkdown.js +0 -75
  31. package/build/schema/convert/toMarkdown.spec.d.ts +0 -1
  32. package/build/schema/convert/toMarkdown.spec.js +0 -137
  33. package/build/schema/index.d.ts +0 -2
  34. package/build/schema/index.js +0 -3
  35. package/build/tableSchema/convert/toHtml.d.ts +0 -4
  36. package/build/tableSchema/convert/toHtml.js +0 -80
  37. package/build/tableSchema/convert/toHtml.spec.d.ts +0 -1
  38. package/build/tableSchema/convert/toHtml.spec.js +0 -375
  39. package/build/tableSchema/convert/toMarkdown.d.ts +0 -4
  40. package/build/tableSchema/convert/toMarkdown.js +0 -57
  41. package/build/tableSchema/convert/toMarkdown.spec.d.ts +0 -1
  42. package/build/tableSchema/convert/toMarkdown.spec.js +0 -141
  43. package/build/tableSchema/index.d.ts +0 -2
  44. package/build/tableSchema/index.js +0 -3
@@ -1,65 +0,0 @@
1
- import { getColumns } from "@fairspec/metadata";
2
- export function renderTableSchemaAsMarkdown(schema, options) {
3
- const rows = [];
4
- rows.push("");
5
- rows.push("## Columns");
6
- rows.push("");
7
- rows.push("| Name | Type | Title | Description | Constraints |");
8
- rows.push("|------|------|-------|-------------|-------------|");
9
- const columns = getColumns(schema);
10
- const required = schema.required ?? [];
11
- for (const column of columns) {
12
- const { name, type, property } = column;
13
- const title = property.title ?? "";
14
- const description = property.description ?? "";
15
- const constraints = [];
16
- if (required.includes(name)) {
17
- constraints.push("required");
18
- }
19
- constraints.push(...extractConstraints(property));
20
- const constraintsStr = constraints.join(", ");
21
- const escapedName = escapeMarkdown(name);
22
- const escapedTitle = escapeMarkdown(title);
23
- const escapedDescription = escapeMarkdown(description);
24
- const escapedConstraints = escapeMarkdown(constraintsStr);
25
- rows.push(`| ${escapedName} | ${type} | ${escapedTitle} | ${escapedDescription} | ${escapedConstraints} |`);
26
- }
27
- let markdown = `${rows.join("\n")}\n`;
28
- if (options?.frontmatter) {
29
- const header = [];
30
- header.push("---");
31
- if (schema.title) {
32
- header.push(`title: ${schema.title}`);
33
- }
34
- header.push("---");
35
- header.push("");
36
- markdown = header.join("\n") + markdown;
37
- }
38
- return markdown;
39
- }
40
- function escapeMarkdown(text) {
41
- return text.replace(/\n/g, " ");
42
- }
43
- function extractConstraints(property) {
44
- const constraints = [];
45
- if ("minimum" in property && property.minimum !== undefined) {
46
- constraints.push(`min: ${property.minimum}`);
47
- }
48
- if ("maximum" in property && property.maximum !== undefined) {
49
- constraints.push(`max: ${property.maximum}`);
50
- }
51
- if ("minLength" in property && property.minLength !== undefined) {
52
- constraints.push(`minLength: ${property.minLength}`);
53
- }
54
- if ("maxLength" in property && property.maxLength !== undefined) {
55
- constraints.push(`maxLength: ${property.maxLength}`);
56
- }
57
- if ("pattern" in property && property.pattern) {
58
- constraints.push(`pattern: ${property.pattern}`);
59
- }
60
- if ("enum" in property && property.enum) {
61
- constraints.push(`enum: ${property.enum.join(", ")}`);
62
- }
63
- return constraints;
64
- }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNNYXJrZG93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FjdGlvbnMvdGFibGVTY2hlbWEvYXNNYXJrZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFL0MsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxNQUFtQixFQUNuQixPQUFtQztJQUVuQyxNQUFNLElBQUksR0FBYSxFQUFFLENBQUE7SUFFekIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNiLElBQUksQ0FBQyxJQUFJLENBQUMscURBQXFELENBQUMsQ0FBQTtJQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxDQUFDLENBQUE7SUFFaEUsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFBO0lBRXRDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFBO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFBO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFBO1FBRTlDLE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQTtRQUVoQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QixXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzlCLENBQUM7UUFFRCxX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QUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29sdW1uLCBUYWJsZVNjaGVtYSB9IGZyb20gXCJAZmFpcnNwZWMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgZ2V0Q29sdW1ucyB9IGZyb20gXCJAZmFpcnNwZWMvbWV0YWRhdGFcIlxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVGFibGVTY2hlbWFBc01hcmtkb3duKFxuICBzY2hlbWE6IFRhYmxlU2NoZW1hLFxuICBvcHRpb25zPzogeyBmcm9udG1hdHRlcj86IGJvb2xlYW4gfSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHJvd3M6IHN0cmluZ1tdID0gW11cblxuICByb3dzLnB1c2goXCJcIilcbiAgcm93cy5wdXNoKFwiIyMgQ29sdW1uc1wiKVxuICByb3dzLnB1c2goXCJcIilcbiAgcm93cy5wdXNoKFwifCBOYW1lIHwgVHlwZSB8IFRpdGxlIHwgRGVzY3JpcHRpb24gfCBDb25zdHJhaW50cyB8XCIpXG4gIHJvd3MucHVzaChcInwtLS0tLS18LS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfFwiKVxuXG4gIGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zKHNjaGVtYSlcbiAgY29uc3QgcmVxdWlyZWQgPSBzY2hlbWEucmVxdWlyZWQgPz8gW11cblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgY29uc3QgeyBuYW1lLCB0eXBlLCBwcm9wZXJ0eSB9ID0gY29sdW1uXG4gICAgY29uc3QgdGl0bGUgPSBwcm9wZXJ0eS50aXRsZSA/PyBcIlwiXG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA/PyBcIlwiXG5cbiAgICBjb25zdCBjb25zdHJhaW50czogc3RyaW5nW10gPSBbXVxuXG4gICAgaWYgKHJlcXVpcmVkLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKFwicmVxdWlyZWRcIilcbiAgICB9XG5cbiAgICBjb25zdHJhaW50cy5wdXNoKC4uLmV4dHJhY3RDb25zdHJhaW50cyhwcm9wZXJ0eSkpXG5cbiAgICBjb25zdCBjb25zdHJhaW50c1N0ciA9IGNvbnN0cmFpbnRzLmpvaW4oXCIsIFwiKVxuXG4gICAgY29uc3QgZXNjYXBlZE5hbWUgPSBlc2NhcGVNYXJrZG93bihuYW1lKVxuICAgIGNvbnN0IGVzY2FwZWRUaXRsZSA9IGVzY2FwZU1hcmtkb3duKHRpdGxlKVxuICAgIGNvbnN0IGVzY2FwZWREZXNjcmlwdGlvbiA9IGVzY2FwZU1hcmtkb3duKGRlc2NyaXB0aW9uKVxuICAgIGNvbnN0IGVzY2FwZWRDb25zdHJhaW50cyA9IGVzY2FwZU1hcmtkb3duKGNvbnN0cmFpbnRzU3RyKVxuXG4gICAgcm93cy5wdXNoKFxuICAgICAgYHwgJHtlc2NhcGVkTmFtZX0gfCAke3R5cGV9IHwgJHtlc2NhcGVkVGl0bGV9IHwgJHtlc2NhcGVkRGVzY3JpcHRpb259IHwgJHtlc2NhcGVkQ29uc3RyYWludHN9IHxgLFxuICAgIClcbiAgfVxuXG4gIGxldCBtYXJrZG93biA9IGAke3Jvd3Muam9pbihcIlxcblwiKX1cXG5gXG5cbiAgaWYgKG9wdGlvbnM/LmZyb250bWF0dGVyKSB7XG4gICAgY29uc3QgaGVhZGVyOiBzdHJpbmdbXSA9IFtdXG4gICAgaGVhZGVyLnB1c2goXCItLS1cIilcbiAgICBpZiAoc2NoZW1hLnRpdGxlKSB7XG4gICAgICBoZWFkZXIucHVzaChgdGl0bGU6ICR7c2NoZW1hLnRpdGxlfWApXG4gICAgfVxuICAgIGhlYWRlci5wdXNoKFwiLS0tXCIpXG4gICAgaGVhZGVyLnB1c2goXCJcIilcbiAgICBtYXJrZG93biA9IGhlYWRlci5qb2luKFwiXFxuXCIpICsgbWFya2Rvd25cbiAgfVxuXG4gIHJldHVybiBtYXJrZG93blxufVxuXG5mdW5jdGlvbiBlc2NhcGVNYXJrZG93bih0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDb25zdHJhaW50cyhwcm9wZXJ0eTogQ29sdW1uW1wicHJvcGVydHlcIl0pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzOiBzdHJpbmdbXSA9IFtdXG5cbiAgaWYgKFwibWluaW11bVwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5Lm1pbmltdW0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0cmFpbnRzLnB1c2goYG1pbjogJHtwcm9wZXJ0eS5taW5pbXVtfWApXG4gIH1cbiAgaWYgKFwibWF4aW11bVwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5Lm1heGltdW0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0cmFpbnRzLnB1c2goYG1heDogJHtwcm9wZXJ0eS5tYXhpbXVtfWApXG4gIH1cbiAgaWYgKFwibWluTGVuZ3RoXCIgaW4gcHJvcGVydHkgJiYgcHJvcGVydHkubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdHJhaW50cy5wdXNoKGBtaW5MZW5ndGg6ICR7cHJvcGVydHkubWluTGVuZ3RofWApXG4gIH1cbiAgaWYgKFwibWF4TGVuZ3RoXCIgaW4gcHJvcGVydHkgJiYgcHJvcGVydHkubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdHJhaW50cy5wdXNoKGBtYXhMZW5ndGg6ICR7cHJvcGVydHkubWF4TGVuZ3RofWApXG4gIH1cbiAgaWYgKFwicGF0dGVyblwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5LnBhdHRlcm4pIHtcbiAgICBjb25zdHJhaW50cy5wdXNoKGBwYXR0ZXJuOiAke3Byb3BlcnR5LnBhdHRlcm59YClcbiAgfVxuICBpZiAoXCJlbnVtXCIgaW4gcHJvcGVydHkgJiYgcHJvcGVydHkuZW51bSkge1xuICAgIGNvbnN0cmFpbnRzLnB1c2goYGVudW06ICR7cHJvcGVydHkuZW51bS5qb2luKFwiLCBcIil9YClcbiAgfVxuXG4gIHJldHVybiBjb25zdHJhaW50c1xufVxuIl19
@@ -1 +0,0 @@
1
- export {};
@@ -1,133 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { renderTableSchemaAsMarkdown } from "./asMarkdown.js";
3
- describe("renderTableSchemaAsMarkdown", () => {
4
- it("converts a simple schema to markdown table", () => {
5
- const schema = {
6
- properties: {
7
- id: {
8
- type: "integer",
9
- title: "Identifier",
10
- description: "Unique identifier",
11
- },
12
- name: {
13
- type: "string",
14
- title: "Name",
15
- description: "Person name",
16
- },
17
- },
18
- };
19
- const result = renderTableSchemaAsMarkdown(schema);
20
- expect(result).toContain("| Name | Type | Title | Description | Constraints |");
21
- expect(result).toContain("| id | integer | Identifier | Unique identifier |");
22
- expect(result).toContain("| name | string | Name | Person name |");
23
- });
24
- it("handles column constraints", () => {
25
- const schema = {
26
- properties: {
27
- age: {
28
- type: "integer",
29
- minimum: 0,
30
- maximum: 120,
31
- },
32
- email: {
33
- type: "string",
34
- pattern: "^[a-z]+@[a-z]+\\.[a-z]+$",
35
- },
36
- },
37
- required: ["age", "email"],
38
- };
39
- const result = renderTableSchemaAsMarkdown(schema);
40
- expect(result).toContain("required");
41
- expect(result).toContain("min: 0");
42
- expect(result).toContain("max: 120");
43
- expect(result).toContain("pattern:");
44
- });
45
- it("handles empty properties object", () => {
46
- const schema = {
47
- properties: {},
48
- };
49
- const result = renderTableSchemaAsMarkdown(schema);
50
- expect(result).toContain("| Name | Type | Title | Description | Constraints |");
51
- });
52
- it("handles pipe characters in column values", () => {
53
- const schema = {
54
- properties: {
55
- field: {
56
- type: "string",
57
- description: "Description with pipe character",
58
- },
59
- },
60
- };
61
- const result = renderTableSchemaAsMarkdown(schema);
62
- expect(result).toContain("Description with pipe character");
63
- });
64
- it("handles columns with enum constraints", () => {
65
- const schema = {
66
- properties: {
67
- status: {
68
- type: "string",
69
- enum: ["active", "inactive", "pending"],
70
- },
71
- },
72
- };
73
- const result = renderTableSchemaAsMarkdown(schema);
74
- expect(result).toContain("enum: active, inactive, pending");
75
- });
76
- it("uses frontmatter when frontmatter option is true", () => {
77
- const schema = {
78
- title: "Table Schema",
79
- properties: {
80
- field1: {
81
- type: "string",
82
- },
83
- },
84
- };
85
- const result = renderTableSchemaAsMarkdown(schema, { frontmatter: true });
86
- expect(result).toContain("---");
87
- expect(result).toContain("title: Table Schema");
88
- });
89
- it("does not use frontmatter when option is false or not provided", () => {
90
- const schema = {
91
- properties: {
92
- field1: {
93
- type: "string",
94
- },
95
- },
96
- };
97
- const result = renderTableSchemaAsMarkdown(schema, { frontmatter: false });
98
- expect(result).not.toContain("title: Table Schema");
99
- expect(result.startsWith("\n## Columns")).toBe(true);
100
- });
101
- it("handles multiple constraint types", () => {
102
- const schema = {
103
- properties: {
104
- username: {
105
- type: "string",
106
- minLength: 3,
107
- maxLength: 20,
108
- pattern: "^[a-zA-Z0-9_]+$",
109
- },
110
- },
111
- required: ["username"],
112
- };
113
- const result = renderTableSchemaAsMarkdown(schema);
114
- expect(result).toContain("required");
115
- expect(result).toContain("minLength: 3");
116
- expect(result).toContain("maxLength: 20");
117
- expect(result).toContain("pattern:");
118
- });
119
- it("handles columns with newlines in descriptions", () => {
120
- const schema = {
121
- properties: {
122
- field: {
123
- type: "string",
124
- description: "Description with\nnewline",
125
- },
126
- },
127
- };
128
- const result = renderTableSchemaAsMarkdown(schema);
129
- expect(result).toContain("Description with newline");
130
- expect(result).not.toContain("Description with\nnewline");
131
- });
132
- });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNNYXJrZG93bi5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWN0aW9ucy90YWJsZVNjaGVtYS9hc01hcmtkb3duLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTdELFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7SUFDM0MsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxNQUFNLE1BQU0sR0FBZ0I7WUFDMUIsVUFBVSxFQUFFO2dCQUNWLEVBQUUsRUFBRTtvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsWUFBWTtvQkFDbkIsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxNQUFNO29CQUNiLFdBQVcsRUFBRSxhQUFhO2lCQUMzQjthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRWxELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQ3RCLHFEQUFxRCxDQUN0RCxDQUFBO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FDdEIsbURBQW1ELENBQ3BELENBQUE7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLHdDQUF3QyxDQUFDLENBQUE7SUFDcEUsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFnQjtZQUMxQixVQUFVLEVBQUU7Z0JBQ1YsR0FBRyxFQUFFO29CQUNILElBQUksRUFB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LENBQUE7UUFFRCxNQUFNLE1BQU0sR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUVsRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtJQUMzRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUYWJsZVNjaGVtYSB9IGZyb20gXCJAZmFpcnNwZWMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IHJlbmRlclRhYmxlU2NoZW1hQXNNYXJrZG93biB9IGZyb20gXCIuL2FzTWFya2Rvd24udHNcIlxuXG5kZXNjcmliZShcInJlbmRlclRhYmxlU2NoZW1hQXNNYXJrZG93blwiLCAoKSA9PiB7XG4gIGl0KFwiY29udmVydHMgYSBzaW1wbGUgc2NoZW1hIHRvIG1hcmtkb3duIHRhYmxlXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDoge1xuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIHRpdGxlOiBcIklkZW50aWZpZXJcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJVbmlxdWUgaWRlbnRpZmllclwiLFxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICB0aXRsZTogXCJOYW1lXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiUGVyc29uIG5hbWVcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc01hcmtkb3duKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcbiAgICAgIFwifCBOYW1lIHwgVHlwZSB8IFRpdGxlIHwgRGVzY3JpcHRpb24gfCBDb25zdHJhaW50cyB8XCIsXG4gICAgKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcbiAgICAgIFwifCBpZCB8IGludGVnZXIgfCBJZGVudGlmaWVyIHwgVW5pcXVlIGlkZW50aWZpZXIgfFwiLFxuICAgIClcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJ8IG5hbWUgfCBzdHJpbmcgfCBOYW1lIHwgUGVyc29uIG5hbWUgfFwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBjb2x1bW4gY29uc3RyYWludHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGFnZToge1xuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgbWF4aW11bTogMTIwLFxuICAgICAgICB9LFxuICAgICAgICBlbWFpbDoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgcGF0dGVybjogXCJeW2Etel0rQFthLXpdK1xcXFwuW2Etel0rJFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbXCJhZ2VcIiwgXCJlbWFpbFwiXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzTWFya2Rvd24oc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwicmVxdWlyZWRcIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJtaW46IDBcIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJtYXg6IDEyMFwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcInBhdHRlcm46XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGVtcHR5IHByb3BlcnRpZXMgb2JqZWN0XCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgcHJvcGVydGllczoge30sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc01hcmtkb3duKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcbiAgICAgIFwifCBOYW1lIHwgVHlwZSB8IFRpdGxlIHwgRGVzY3JpcHRpb24gfCBDb25zdHJhaW50cyB8XCIsXG4gICAgKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBwaXBlIGNoYXJhY3RlcnMgaW4gY29sdW1uIHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZmllbGQ6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRlc2NyaXB0aW9uIHdpdGggcGlwZSBjaGFyYWN0ZXJcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc01hcmtkb3duKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIkRlc2NyaXB0aW9uIHdpdGggcGlwZSBjaGFyYWN0ZXJcIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgY29sdW1ucyB3aXRoIGVudW0gY29uc3RyYWludHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHN0YXR1czoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZW51bTogW1wiYWN0aXZlXCIsIFwiaW5hY3RpdmVcIiwgXCJwZW5kaW5nXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzTWFya2Rvd24oc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiZW51bTogYWN0aXZlLCBpbmFjdGl2ZSwgcGVuZGluZ1wiKVxuICB9KVxuXG4gIGl0KFwidXNlcyBmcm9udG1hdHRlciB3aGVuIGZyb250bWF0dGVyIG9wdGlvbiBpcyB0cnVlXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgdGl0bGU6IFwiVGFibGUgU2NoZW1hXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGZpZWxkMToge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclRhYmxlU2NoZW1hQXNNYXJrZG93bihzY2hlbWEsIHsgZnJvbnRtYXR0ZXI6IHRydWUgfSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIi0tLVwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcInRpdGxlOiBUYWJsZSBTY2hlbWFcIilcbiAgfSlcblxuICBpdChcImRvZXMgbm90IHVzZSBmcm9udG1hdHRlciB3aGVuIG9wdGlvbiBpcyBmYWxzZSBvciBub3QgcHJvdmlkZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGZpZWxkMToge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclRhYmxlU2NoZW1hQXNNYXJrZG93bihzY2hlbWEsIHsgZnJvbnRtYXR0ZXI6IGZhbHNlIH0pXG5cbiAgICBleHBlY3QocmVzdWx0KS5ub3QudG9Db250YWluKFwidGl0bGU6IFRhYmxlIFNjaGVtYVwiKVxuICAgIGV4cGVjdChyZXN1bHQuc3RhcnRzV2l0aChcIlxcbiMjIENvbHVtbnNcIikpLnRvQmUodHJ1ZSlcbiAgfSlcblxuICBpdChcImhhbmRsZXMgbXVsdGlwbGUgY29uc3RyYWludCB0eXBlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIG1pbkxlbmd0aDogMyxcbiAgICAgICAgICBtYXhMZW5ndGg6IDIwLFxuICAgICAgICAgIHBhdHRlcm46IFwiXlthLXpBLVowLTlfXSskXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFtcInVzZXJuYW1lXCJdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclRhYmxlU2NoZW1hQXNNYXJrZG93bihzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJyZXF1aXJlZFwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIm1pbkxlbmd0aDogM1wiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIm1heExlbmd0aDogMjBcIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJwYXR0ZXJuOlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBjb2x1bW5zIHdpdGggbmV3bGluZXMgaW4gZGVzY3JpcHRpb25zXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZDoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiRGVzY3JpcHRpb24gd2l0aFxcbm5ld2xpbmVcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc01hcmtkb3duKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIkRlc2NyaXB0aW9uIHdpdGggbmV3bGluZVwiKVxuICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0NvbnRhaW4oXCJEZXNjcmlwdGlvbiB3aXRoXFxubmV3bGluZVwiKVxuICB9KVxufSlcbiJdfQ==
@@ -1,2 +0,0 @@
1
- import type { JsonDocument } from "./types/Json.ts";
2
- export type Document = JsonDocument;
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kb2N1bWVudC9Eb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBKc29uRG9jdW1lbnQgfSBmcm9tIFwiLi90eXBlcy9Kc29uLnRzXCJcblxuZXhwb3J0IHR5cGUgRG9jdW1lbnQgPSBKc29uRG9jdW1lbnRcbiJdfQ==
@@ -1,3 +0,0 @@
1
- export type { Document } from "./Document.ts";
2
- export * from "./types/Json.ts";
3
- export { validateDocument } from "./validate.ts";
@@ -1,3 +0,0 @@
1
- export * from "./types/Json.js";
2
- export { validateDocument } from "./validate.js";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kb2N1bWVudC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgRG9jdW1lbnQgfSBmcm9tIFwiLi9Eb2N1bWVudC50c1wiXG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9Kc29uLnRzXCJcbmV4cG9ydCB7IHZhbGlkYXRlRG9jdW1lbnQgfSBmcm9tIFwiLi92YWxpZGF0ZS50c1wiXG4iXX0=
@@ -1,3 +0,0 @@
1
- export interface BaseDocument {
2
- type: string;
3
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RvY3VtZW50L3R5cGVzL0Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQmFzZURvY3VtZW50IHtcbiAgdHlwZTogc3RyaW5nXG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- import type { BaseDocument } from "./Base.ts";
2
- export interface JsonDocument extends BaseDocument {
3
- type: "json";
4
- data: Record<string, any>;
5
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSnNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RvY3VtZW50L3R5cGVzL0pzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmFzZURvY3VtZW50IH0gZnJvbSBcIi4vQmFzZS50c1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkRvY3VtZW50IGV4dGVuZHMgQmFzZURvY3VtZW50IHtcbiAgdHlwZTogXCJqc29uXCJcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PlxufVxuIl19
@@ -1,5 +0,0 @@
1
- import type { Resource } from "@fairspec/metadata";
2
- export declare function validateDocument(resource: Partial<Resource>): Promise<{
3
- errors: import("@fairspec/metadata").FrictionlessError[];
4
- valid: boolean;
5
- }>;
@@ -1,23 +0,0 @@
1
- import { createReport, inspectJsonValue, resolveJsonSchema, } from "@fairspec/metadata";
2
- export async function validateDocument(resource) {
3
- if (resource.jsonSchema) {
4
- const jsonSchema = await resolveJsonSchema(resource.jsonSchema);
5
- if (!resource.data) {
6
- return createReport([
7
- {
8
- type: "data",
9
- message: `missing ${resource.name} data`,
10
- },
11
- ]);
12
- }
13
- if (jsonSchema) {
14
- const errors = await inspectJsonValue(resource.data, { jsonSchema });
15
- return createReport(errors.map(error => ({
16
- type: "document/json",
17
- ...error,
18
- })));
19
- }
20
- }
21
- return createReport();
22
- }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kb2N1bWVudC92YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsR0FDbEIsTUFBTSxvQkFBb0IsQ0FBQTtBQUUzQixNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFFBQTJCO0lBQ2hFLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRS9ELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsT0FBTyxZQUFZLENBQVk7Z0JBQzdCO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSxXQUFXLFFBQVEsQ0FBQyxJQUFJLE9BQU87aUJBQ3pDO2FBQ0YsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1lBRXBFLE9BQU8sWUFBWSxDQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEdBQUcsS0FBSzthQUNULENBQUMsQ0FBQyxDQUNKLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sWUFBWSxFQUFFLENBQUE7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0YUVycm9yLCBKc29uRG9jdW1lbnRFcnJvciwgUmVzb3VyY2UgfSBmcm9tIFwiQGZhaXJzcGVjL21ldGFkYXRhXCJcbmltcG9ydCB7XG4gIGNyZWF0ZVJlcG9ydCxcbiAgaW5zcGVjdEpzb25WYWx1ZSxcbiAgcmVzb2x2ZUpzb25TY2hlbWEsXG59IGZyb20gXCJAZmFpcnNwZWMvbWV0YWRhdGFcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVEb2N1bWVudChyZXNvdXJjZTogUGFydGlhbDxSZXNvdXJjZT4pIHtcbiAgaWYgKHJlc291cmNlLmpzb25TY2hlbWEpIHtcbiAgICBjb25zdCBqc29uU2NoZW1hID0gYXdhaXQgcmVzb2x2ZUpzb25TY2hlbWEocmVzb3VyY2UuanNvblNjaGVtYSlcblxuICAgIGlmICghcmVzb3VyY2UuZGF0YSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlcG9ydDxEYXRhRXJyb3I+KFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiZGF0YVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBtaXNzaW5nICR7cmVzb3VyY2UubmFtZX0gZGF0YWAsXG4gICAgICAgIH0sXG4gICAgICBdKVxuICAgIH1cblxuICAgIGlmIChqc29uU2NoZW1hKSB7XG4gICAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCBpbnNwZWN0SnNvblZhbHVlKHJlc291cmNlLmRhdGEsIHsganNvblNjaGVtYSB9KVxuXG4gICAgICByZXR1cm4gY3JlYXRlUmVwb3J0PEpzb25Eb2N1bWVudEVycm9yPihcbiAgICAgICAgZXJyb3JzLm1hcChlcnJvciA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwiZG9jdW1lbnQvanNvblwiLFxuICAgICAgICAgIC4uLmVycm9yLFxuICAgICAgICB9KSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVJlcG9ydCgpXG59XG4iXX0=
@@ -1 +0,0 @@
1
- export {};
@@ -1,71 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { validateDocument } from "./validate.js";
3
- describe("validateDocument", () => {
4
- it("should return valid report when data matches jsonSchema", async () => {
5
- const resource = {
6
- name: "test-document",
7
- data: {
8
- name: "test-package",
9
- version: "1.0.0",
10
- },
11
- jsonSchema: {
12
- type: "object",
13
- required: ["name", "version"],
14
- properties: {
15
- name: { type: "string" },
16
- version: { type: "string" },
17
- },
18
- },
19
- };
20
- const report = await validateDocument(resource);
21
- expect(report.valid).toBe(true);
22
- expect(report.errors).toEqual([]);
23
- });
24
- it("should return error when data is missing with jsonSchema", async () => {
25
- const resource = {
26
- name: "test-document",
27
- jsonSchema: {
28
- type: "object",
29
- required: ["name"],
30
- properties: {
31
- name: { type: "string" },
32
- },
33
- },
34
- };
35
- const report = await validateDocument(resource);
36
- expect(report.valid).toBe(false);
37
- expect(report.errors).toEqual([
38
- {
39
- type: "data",
40
- message: "missing test-document data",
41
- },
42
- ]);
43
- });
44
- it("should return validation errors when data does not match jsonSchema", async () => {
45
- const resource = {
46
- name: "test-document",
47
- data: {
48
- name: "test-package",
49
- version: 123,
50
- },
51
- jsonSchema: {
52
- type: "object",
53
- required: ["name", "version"],
54
- properties: {
55
- name: { type: "string" },
56
- version: { type: "string" },
57
- },
58
- },
59
- };
60
- const report = await validateDocument(resource);
61
- expect(report.valid).toBe(false);
62
- expect(report.errors).toEqual([
63
- {
64
- type: "document/json",
65
- pointer: "/version",
66
- message: "must be string",
67
- },
68
- ]);
69
- });
70
- });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2RvY3VtZW50L3ZhbGlkYXRlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVoRCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RSxNQUFNLFFBQVEsR0FBRztZQUNmLElBQUksRUFBRSxlQUFlO1lBQ3JCLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsY0FBYztnQkFDcEIsT0FBTyxFQUFFLE9BQU87YUFDakI7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztnQkFDN0IsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQ3hCLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7aUJBQzVCO2FBQ0Y7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUUvQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4RSxNQUFNLFFBQVEsR0FBRztZQUNmLElBQUksRUFBRSxlQUFlO1lBQ3JCLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2lCQUN6QjthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDNUI7Z0JBQ0UsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLDRCQUE0QjthQUN0QztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ25GLE1BQU0sUUFBUSxHQUFHO1lBQ2YsSUFBSSxFQUFFLGVBQWU7WUFDckIsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxjQUFjO2dCQUNwQixPQUFPLEVBQUUsR0FBRzthQUNiO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7Z0JBQzdCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO29CQUN4QixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2lCQUM1QjthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDNUI7Z0JBQ0UsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixPQUFPLEVBQUUsZ0JBQWdCO2FBQzFCO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyB2YWxpZGF0ZURvY3VtZW50IH0gZnJvbSBcIi4vdmFsaWRhdGUudHNcIlxuXG5kZXNjcmliZShcInZhbGlkYXRlRG9jdW1lbnRcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCByZXR1cm4gdmFsaWQgcmVwb3J0IHdoZW4gZGF0YSBtYXRjaGVzIGpzb25TY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LWRvY3VtZW50XCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICAgIH0sXG4gICAgICBqc29uU2NoZW1hOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwidmVyc2lvblwiXSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHZlcnNpb246IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXBvcnQgPSBhd2FpdCB2YWxpZGF0ZURvY3VtZW50KHJlc291cmNlKVxuXG4gICAgZXhwZWN0KHJlcG9ydC52YWxpZCkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChyZXBvcnQuZXJyb3JzKS50b0VxdWFsKFtdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHJldHVybiBlcnJvciB3aGVuIGRhdGEgaXMgbWlzc2luZyB3aXRoIGpzb25TY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LWRvY3VtZW50XCIsXG4gICAgICBqc29uU2NoZW1hOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCJdLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlcG9ydCA9IGF3YWl0IHZhbGlkYXRlRG9jdW1lbnQocmVzb3VyY2UpXG5cbiAgICBleHBlY3QocmVwb3J0LnZhbGlkKS50b0JlKGZhbHNlKVxuICAgIGV4cGVjdChyZXBvcnQuZXJyb3JzKS50b0VxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJkYXRhXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwibWlzc2luZyB0ZXN0LWRvY3VtZW50IGRhdGFcIixcbiAgICAgIH0sXG4gICAgXSlcbiAgfSlcblxuICBpdChcInNob3VsZCByZXR1cm4gdmFsaWRhdGlvbiBlcnJvcnMgd2hlbiBkYXRhIGRvZXMgbm90IG1hdGNoIGpzb25TY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LWRvY3VtZW50XCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICAgIHZlcnNpb246IDEyMyxcbiAgICAgIH0sXG4gICAgICBqc29uU2NoZW1hOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwidmVyc2lvblwiXSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHZlcnNpb246IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXBvcnQgPSBhd2FpdCB2YWxpZGF0ZURvY3VtZW50KHJlc291cmNlKVxuXG4gICAgZXhwZWN0KHJlcG9ydC52YWxpZCkudG9CZShmYWxzZSlcbiAgICBleHBlY3QocmVwb3J0LmVycm9ycykudG9FcXVhbChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZG9jdW1lbnQvanNvblwiLFxuICAgICAgICBwb2ludGVyOiBcIi92ZXJzaW9uXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwibXVzdCBiZSBzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgXSlcbiAgfSlcbn0pXG4iXX0=
package/build/plugin.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import type { MetadataPlugin, TableSchema } from "@fairspec/metadata";
2
- export declare class ExtensionPlugin implements MetadataPlugin {
3
- renderTableSchemaAs(tableSchema: TableSchema, options: {
4
- format: string;
5
- }): string | undefined;
6
- }
package/build/plugin.js DELETED
@@ -1,15 +0,0 @@
1
- import { renderTableSchemaAsHtml } from "./actions/tableSchema/asHtml.js";
2
- import { renderTableSchemaAsMarkdown } from "./actions/tableSchema/asMarkdown.js";
3
- export class ExtensionPlugin {
4
- renderTableSchemaAs(tableSchema, options) {
5
- switch (options.format) {
6
- case "markdown":
7
- return renderTableSchemaAsMarkdown(tableSchema);
8
- case "html":
9
- return renderTableSchemaAsHtml(tableSchema);
10
- default:
11
- return undefined;
12
- }
13
- }
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFrQyxDQUFBO0FBQzFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBRWpGLE1BQU0sT0FBTyxlQUFlO0lBQzFCLG1CQUFtQixDQUFDLFdBQXdCLEVBQUUsT0FBMkI7UUFDdkUsUUFBUSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sMkJBQTJCLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDakQsS0FBSyxNQUFNO2dCQUNULE9BQU8sdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDN0M7Z0JBQ0UsT0FBTyxTQUFTLENBQUE7UUFDcEIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWV0YWRhdGFQbHVnaW4sIFRhYmxlU2NoZW1hIH0gZnJvbSBcIkBmYWlyc3BlYy9tZXRhZGF0YVwiXG5pbXBvcnQgeyByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbCB9IGZyb20gXCIuL2FjdGlvbnMvdGFibGVTY2hlbWEvYXNIdG1sLnRzeFwiXG5pbXBvcnQgeyByZW5kZXJUYWJsZVNjaGVtYUFzTWFya2Rvd24gfSBmcm9tIFwiLi9hY3Rpb25zL3RhYmxlU2NoZW1hL2FzTWFya2Rvd24udHNcIlxuXG5leHBvcnQgY2xhc3MgRXh0ZW5zaW9uUGx1Z2luIGltcGxlbWVudHMgTWV0YWRhdGFQbHVnaW4ge1xuICByZW5kZXJUYWJsZVNjaGVtYUFzKHRhYmxlU2NoZW1hOiBUYWJsZVNjaGVtYSwgb3B0aW9uczogeyBmb3JtYXQ6IHN0cmluZyB9KSB7XG4gICAgc3dpdGNoIChvcHRpb25zLmZvcm1hdCkge1xuICAgICAgY2FzZSBcIm1hcmtkb3duXCI6XG4gICAgICAgIHJldHVybiByZW5kZXJUYWJsZVNjaGVtYUFzTWFya2Rvd24odGFibGVTY2hlbWEpXG4gICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICByZXR1cm4gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwodGFibGVTY2hlbWEpXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,4 +0,0 @@
1
- import type { Schema } from "@fairspec/metadata";
2
- export declare function convertSchemaToHtml(schema: Schema, options?: {
3
- frontmatter?: boolean;
4
- }): string;
@@ -1,107 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { prettify } from "htmlfy";
3
- import { renderToStaticMarkup } from "react-dom/server";
4
- export function convertSchemaToHtml(schema, options) {
5
- let html = prettify(renderToStaticMarkup(_jsx(SchemaTable, { schema: schema, withTitle: !options?.frontmatter })));
6
- if (options?.frontmatter) {
7
- if (schema.title) {
8
- html = `---\ntitle: ${schema.title}\n---\n\n${html}`;
9
- }
10
- }
11
- return html;
12
- }
13
- function SchemaTable(props) {
14
- const { schema, withTitle } = props;
15
- const title = withTitle ? schema.title : undefined;
16
- return (_jsxs(_Fragment, { children: [_jsx(SchemaHeader, { title: title, description: schema.description }), schema.primaryKey && _jsx(PrimaryKey, { fields: schema.primaryKey }), schema.foreignKeys && schema.foreignKeys.length > 0 && (_jsx(ForeignKeys, { foreignKeys: schema.foreignKeys })), _jsx(FieldsTable, { fields: schema.fields })] }));
17
- }
18
- function SchemaHeader(props) {
19
- const { title, description } = props;
20
- return (_jsxs(_Fragment, { children: [title && _jsx("h1", { id: sanitizeId(title), children: title }), description && _jsx("p", { children: description })] }));
21
- }
22
- function FieldsTable(props) {
23
- const { fields } = props;
24
- return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Fields" }), _jsxs("table", { children: [_jsxs("colgroup", { children: [_jsx("col", { width: "20%" }), _jsx("col", { width: "65%" }), _jsx("col", { width: "15%" })] }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Name" }), _jsx("th", { children: "Definition" }), _jsx("th", { children: "Type" })] }) }), _jsx("tbody", { children: fields.map((field, index) => (_jsx(FieldRow, { field: field }, index))) })] })] }));
25
- }
26
- function FieldRow(props) {
27
- const { field } = props;
28
- const fieldName = field.name || "";
29
- const fieldType = field.type || "any";
30
- const fieldDescription = field.description || "";
31
- let isRequired = false;
32
- if ("constraints" in field && field.constraints) {
33
- const c = field.constraints;
34
- if (c.required) {
35
- isRequired = true;
36
- }
37
- }
38
- const constraints = extractConstraints(field);
39
- return (_jsxs("tr", { children: [_jsx("td", { id: sanitizeId(fieldName), children: _jsx("code", { children: _jsxs("strong", { children: [fieldName, !isRequired && "?"] }) }) }), _jsxs("td", { children: [fieldDescription && _jsx("p", { children: fieldDescription }), constraints.length > 0 && (_jsx(ConstraintsList, { constraints: constraints })), (field.type === "string" || field.type === "integer") &&
40
- "categories" in field &&
41
- field.categories !== undefined && (_jsx(CategoriesList, { categories: field.categories })), field.examples !== undefined && (_jsx(ExamplesList, { examples: field.examples }))] }), _jsx("td", { children: _jsx("code", { children: fieldType }) })] }));
42
- }
43
- function ConstraintsList(props) {
44
- const { constraints } = props;
45
- return (_jsxs(_Fragment, { children: [_jsx("strong", { children: "Constraints" }), _jsx("ul", { children: constraints.map((constraint, index) => (_jsxs("li", { children: [constraint.name, ": ", _jsx("code", { children: constraint.value })] }, index))) })] }));
46
- }
47
- function ExamplesList(props) {
48
- const { examples } = props;
49
- return (_jsxs(_Fragment, { children: [_jsx("strong", { children: "Examples" }), _jsx("ul", { children: examples.map((example, index) => (_jsx("li", { children: _jsx("code", { children: String(example) }) }, index))) })] }));
50
- }
51
- function CategoriesList(props) {
52
- const { categories } = props;
53
- return (_jsxs(_Fragment, { children: [_jsx("strong", { children: "Categories" }), _jsx("ul", { children: categories.map((category, index) => {
54
- const value = typeof category === "object" ? category.value : category;
55
- const label = typeof category === "object" ? category.label : undefined;
56
- return (_jsxs("li", { children: [_jsx("code", { children: String(value) }), label && ` - ${label}`] }, index));
57
- }) })] }));
58
- }
59
- function extractConstraints(field) {
60
- const constraints = [];
61
- if ("constraints" in field && field.constraints) {
62
- const c = field.constraints;
63
- if (c.required) {
64
- constraints.push({ name: "required", value: "true" });
65
- }
66
- if (c.unique) {
67
- constraints.push({ name: "unique", value: "true" });
68
- }
69
- if (c.minimum !== undefined) {
70
- constraints.push({ name: "minimum", value: String(c.minimum) });
71
- }
72
- if (c.maximum !== undefined) {
73
- constraints.push({ name: "maximum", value: String(c.maximum) });
74
- }
75
- if (c.minLength !== undefined) {
76
- constraints.push({ name: "minLength", value: String(c.minLength) });
77
- }
78
- if (c.maxLength !== undefined) {
79
- constraints.push({ name: "maxLength", value: String(c.maxLength) });
80
- }
81
- if (c.pattern) {
82
- constraints.push({ name: "pattern", value: c.pattern });
83
- }
84
- if (c.enum) {
85
- const enumValues = c.enum.map((v) => String(v)).join(", ");
86
- constraints.push({ name: "enum", value: enumValues });
87
- }
88
- }
89
- return constraints;
90
- }
91
- function PrimaryKey(props) {
92
- const { fields } = props;
93
- return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Primary Key" }), _jsx("p", { children: _jsx("code", { children: fields.join(", ") }) })] }));
94
- }
95
- function ForeignKeys(props) {
96
- const { foreignKeys } = props;
97
- if (!foreignKeys)
98
- return null;
99
- return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Foreign Keys" }), _jsxs("table", { children: [_jsxs("colgroup", { children: [_jsx("col", { width: "40%" }), _jsx("col", { width: "30%" }), _jsx("col", { width: "30%" })] }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Fields" }), _jsx("th", { children: "Reference Resource" }), _jsx("th", { children: "Reference Fields" })] }) }), _jsx("tbody", { children: foreignKeys.map((fk, index) => (_jsxs("tr", { children: [_jsx("td", { children: _jsx("code", { children: fk.fields.join(", ") }) }), _jsx("td", { children: _jsx("code", { children: fk.reference.resource || "-" }) }), _jsx("td", { children: _jsx("code", { children: fk.reference.fields.join(", ") }) })] }, index))) })] })] }));
100
- }
101
- function sanitizeId(text) {
102
- return text
103
- .toLowerCase()
104
- .replace(/[^a-z0-9]+/g, "-")
105
- .replace(/^-|-$/g, "");
106
- }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9IdG1sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2NoZW1hL2NvbnZlcnQvdG9IdG1sLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV2RCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLE1BQWMsRUFDZCxPQUFtQztJQUVuQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQ2pCLG9CQUFvQixDQUNsQixLQUFDLFdBQVcsSUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLEdBQUksQ0FDbEUsQ0FDRixDQUFBO0lBRUQsSUFBSSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxHQUFHLGVBQWUsTUFBTSxDQUFDLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQTtRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQThDO0lBQ2pFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRWxELE9BQU8sQ0FDTCw4QkFDRSxLQUFDLFlBQVksSUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFJLEVBQzlELE1BQU0sQ0FBQyxVQUFVLElBQUksS0FBQyxVQUFVLElBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUksRUFDOUQsTUFBTSxDQUFDLFdBQVcsSUFB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ZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIFNjaGVtYSB9IGZyb20gXCJAZmFpcnNwZWMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgcHJldHRpZnkgfSBmcm9tIFwiaHRtbGZ5XCJcbmltcG9ydCB7IHJlbmRlclRvU3RhdGljTWFya3VwIH0gZnJvbSBcInJlYWN0LWRvbS9zZXJ2ZXJcIlxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNjaGVtYVRvSHRtbChcbiAgc2NoZW1hOiBTY2hlbWEsXG4gIG9wdGlvbnM/OiB7IGZyb250bWF0dGVyPzogYm9vbGVhbiB9LFxuKTogc3RyaW5nIHtcbiAgbGV0IGh0bWwgPSBwcmV0dGlmeShcbiAgICByZW5kZXJUb1N0YXRpY01hcmt1cChcbiAgICAgIDxTY2hlbWFUYWJsZSBzY2hlbWE9e3NjaGVtYX0gd2l0aFRpdGxlPXshb3B0aW9ucz8uZnJvbnRtYXR0ZXJ9IC8+LFxuICAgICksXG4gIClcblxuICBpZiAob3B0aW9ucz8uZnJvbnRtYXR0ZXIpIHtcbiAgICBpZiAoc2NoZW1hLnRpdGxlKSB7XG4gICAgICBodG1sID0gYC0tLVxcbnRpdGxlOiAke3NjaGVtYS50aXRsZX1cXG4tLS1cXG5cXG4ke2h0bWx9YFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBodG1sXG59XG5cbmZ1bmN0aW9uIFNjaGVtYVRhYmxlKHByb3BzOiB7IHNjaGVtYTogU2NoZW1hOyB3aXRoVGl0bGU/OiBib29sZWFuIH0pIHtcbiAgY29uc3QgeyBzY2hlbWEsIHdpdGhUaXRsZSB9ID0gcHJvcHNcbiAgY29uc3QgdGl0bGUgPSB3aXRoVGl0bGUgPyBzY2hlbWEudGl0bGUgOiB1bmRlZmluZWRcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2NoZW1hSGVhZGVyIHRpdGxlPXt0aXRsZX0gZGVzY3JpcHRpb249e3NjaGVtYS5kZXNjcmlwdGlvbn0gLz5cbiAgICAgIHtzY2hlbWEucHJpbWFyeUtleSAmJiA8UHJpbWFyeUtleSBmaWVsZHM9e3NjaGVtYS5wcmltYXJ5S2V5fSAvPn1cbiAgICAgIHtzY2hlbWEuZm9yZWlnbktleXMgJiYgc2NoZW1hLmZvcmVpZ25LZXlzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Rm9yZWlnbktleXMgZm9yZWlnbktleXM9e3NjaGVtYS5mb3JlaWduS2V5c30gLz5cbiAgICAgICl9XG4gICAgICA8RmllbGRzVGFibGUgZmllbGRzPXtzY2hlbWEuZmllbGRzfSAvPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIFNjaGVtYUhlYWRlcihwcm9wczogeyB0aXRsZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfSkge1xuICBjb25zdCB7IHRpdGxlLCBkZXNjcmlwdGlvbiB9ID0gcHJvcHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7dGl0bGUgJiYgPGgxIGlkPXtzYW5pdGl6ZUlkKHRpdGxlKX0+e3RpdGxlfTwvaDE+fVxuICAgICAge2Rlc2NyaXB0aW9uICYmIDxwPntkZXNjcmlwdGlvbn08L3A+fVxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIEZpZWxkc1RhYmxlKHByb3BzOiB7IGZpZWxkczogRmllbGRbXSB9KSB7XG4gIGNvbnN0IHsgZmllbGRzIH0gPSBwcm9wc1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8aDI+RmllbGRzPC9oMj5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPGNvbGdyb3VwPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCIyMCVcIiAvPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCI2NSVcIiAvPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCIxNSVcIiAvPlxuICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgICAgPHRoPkRlZmluaXRpb248L3RoPlxuICAgICAgICAgICAgPHRoPlR5cGU8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICB7ZmllbGRzLm1hcCgoZmllbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8RmllbGRSb3cga2V5PXtpbmRleH0gZmllbGQ9e2ZpZWxkfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBGaWVsZFJvdyhwcm9wczogeyBmaWVsZDogRmllbGQgfSkge1xuICBjb25zdCB7IGZpZWxkIH0gPSBwcm9wc1xuICBjb25zdCBmaWVsZE5hbWUgPSBmaWVsZC5uYW1lIHx8IFwiXCJcbiAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZSB8fCBcImFueVwiXG4gIGNvbnN0IGZpZWxkRGVzY3JpcHRpb24gPSBmaWVsZC5kZXNjcmlwdGlvbiB8fCBcIlwiXG5cbiAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZVxuICBpZiAoXCJjb25zdHJhaW50c1wiIGluIGZpZWxkICYmIGZpZWxkLmNvbnN0cmFpbnRzKSB7XG4gICAgY29uc3QgYyA9IGZpZWxkLmNvbnN0cmFpbnRzIGFzIGFueVxuICAgIGlmIChjLnJlcXVpcmVkKSB7XG4gICAgICBpc1JlcXVpcmVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbnN0cmFpbnRzID0gZXh0cmFjdENvbnN0cmFpbnRzKGZpZWxkKVxuXG4gIHJldHVybiAoXG4gICAgPHRyPlxuICAgICAgPHRkIGlkPXtzYW5pdGl6ZUlkKGZpZWxkTmFtZSl9PlxuICAgICAgICA8Y29kZT5cbiAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAge2ZpZWxkTmFtZX1cbiAgICAgICAgICAgIHshaXNSZXF1aXJlZCAmJiBcIj9cIn1cbiAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgPC9jb2RlPlxuICAgICAgPC90ZD5cbiAgICAgIDx0ZD5cbiAgICAgICAge2ZpZWxkRGVzY3JpcHRpb24gJiYgPHA+e2ZpZWxkRGVzY3JpcHRpb259PC9wPn1cbiAgICAgICAge2NvbnN0cmFpbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxDb25zdHJhaW50c0xpc3QgY29uc3RyYWludHM9e2NvbnN0cmFpbnRzfSAvPlxuICAgICAgICApfVxuICAgICAgICB7KGZpZWxkLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgZmllbGQudHlwZSA9PT0gXCJpbnRlZ2VyXCIpICYmXG4gICAgICAgICAgXCJjYXRlZ29yaWVzXCIgaW4gZmllbGQgJiZcbiAgICAgICAgICBmaWVsZC5jYXRlZ29yaWVzICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgPENhdGVnb3JpZXNMaXN0IGNhdGVnb3JpZXM9e2ZpZWxkLmNhdGVnb3JpZXN9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge2ZpZWxkLmV4YW1wbGVzICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgIDxFeGFtcGxlc0xpc3QgZXhhbXBsZXM9e2ZpZWxkLmV4YW1wbGVzfSAvPlxuICAgICAgICApfVxuICAgICAgPC90ZD5cbiAgICAgIDx0ZD5cbiAgICAgICAgPGNvZGU+e2ZpZWxkVHlwZX08L2NvZGU+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uc3RyYWludHNMaXN0KHByb3BzOiB7IGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W10gfSkge1xuICBjb25zdCB7IGNvbnN0cmFpbnRzIH0gPSBwcm9wc1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8c3Ryb25nPkNvbnN0cmFpbnRzPC9zdHJvbmc+XG4gICAgICA8dWw+XG4gICAgICAgIHtjb25zdHJhaW50cy5tYXAoKGNvbnN0cmFpbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGxpIGtleT17aW5kZXh9PlxuICAgICAgICAgICAge2NvbnN0cmFpbnQubmFtZX06IDxjb2RlPntjb25zdHJhaW50LnZhbHVlfTwvY29kZT5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICApKX1cbiAgICAgIDwvdWw+XG4gICAgPC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRXhhbXBsZXNMaXN0KHByb3BzOiB7IGV4YW1wbGVzOiBhbnlbXSB9KSB7XG4gIGNvbnN0IHsgZXhhbXBsZXMgfSA9IHByb3BzXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz5cbiAgICAgIDx1bD5cbiAgICAgICAge2V4YW1wbGVzLm1hcCgoZXhhbXBsZSwgaW5kZXgpID0+IChcbiAgICAgICAgICA8bGkga2V5PXtpbmRleH0+XG4gICAgICAgICAgICA8Y29kZT57U3RyaW5nKGV4YW1wbGUpfTwvY29kZT5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICApKX1cbiAgICAgIDwvdWw+XG4gICAgPC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2F0ZWdvcmllc0xpc3QocHJvcHM6IHtcbiAgY2F0ZWdvcmllczpcbiAgICB8IHN0cmluZ1tdXG4gICAgfCBudW1iZXJbXVxuICAgIHwgQXJyYXk8eyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyOyBsYWJlbDogc3RyaW5nIH0+XG59KSB7XG4gIGNvbnN0IHsgY2F0ZWdvcmllcyB9ID0gcHJvcHNcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHN0cm9uZz5DYXRlZ29yaWVzPC9zdHJvbmc+XG4gICAgICA8dWw+XG4gICAgICAgIHtjYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgY2F0ZWdvcnkgPT09IFwib2JqZWN0XCIgPyBjYXRlZ29yeS52YWx1ZSA6IGNhdGVnb3J5XG4gICAgICAgICAgY29uc3QgbGFiZWwgPVxuICAgICAgICAgICAgdHlwZW9mIGNhdGVnb3J5ID09PSBcIm9iamVjdFwiID8gY2F0ZWdvcnkubGFiZWwgOiB1bmRlZmluZWRcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGxpIGtleT17aW5kZXh9PlxuICAgICAgICAgICAgICA8Y29kZT57U3RyaW5nKHZhbHVlKX08L2NvZGU+XG4gICAgICAgICAgICAgIHtsYWJlbCAmJiBgIC0gJHtsYWJlbH1gfVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0Q29uc3RyYWludHMoZmllbGQ6IEZpZWxkKTogQ29uc3RyYWludFtdIHtcbiAgY29uc3QgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXSA9IFtdXG5cbiAgaWYgKFwiY29uc3RyYWludHNcIiBpbiBmaWVsZCAmJiBmaWVsZC5jb25zdHJhaW50cykge1xuICAgIGNvbnN0IGMgPSBmaWVsZC5jb25zdHJhaW50cyBhcyBhbnlcblxuICAgIGlmIChjLnJlcXVpcmVkKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKHsgbmFtZTogXCJyZXF1aXJlZFwiLCB2YWx1ZTogXCJ0cnVlXCIgfSlcbiAgICB9XG4gICAgaWYgKGMudW5pcXVlKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKHsgbmFtZTogXCJ1bmlxdWVcIiwgdmFsdWU6IFwidHJ1ZVwiIH0pXG4gICAgfVxuICAgIGlmIChjLm1pbmltdW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwibWluaW11bVwiLCB2YWx1ZTogU3RyaW5nKGMubWluaW11bSkgfSlcbiAgICB9XG4gICAgaWYgKGMubWF4aW11bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKHsgbmFtZTogXCJtYXhpbXVtXCIsIHZhbHVlOiBTdHJpbmcoYy5tYXhpbXVtKSB9KVxuICAgIH1cbiAgICBpZiAoYy5taW5MZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwibWluTGVuZ3RoXCIsIHZhbHVlOiBTdHJpbmcoYy5taW5MZW5ndGgpIH0pXG4gICAgfVxuICAgIGlmIChjLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKHsgbmFtZTogXCJtYXhMZW5ndGhcIiwgdmFsdWU6IFN0cmluZyhjLm1heExlbmd0aCkgfSlcbiAgICB9XG4gICAgaWYgKGMucGF0dGVybikge1xuICAgICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwicGF0dGVyblwiLCB2YWx1ZTogYy5wYXR0ZXJuIH0pXG4gICAgfVxuICAgIGlmIChjLmVudW0pIHtcbiAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSBjLmVudW0ubWFwKCh2OiBhbnkpID0+IFN0cmluZyh2KSkuam9pbihcIiwgXCIpXG4gICAgICBjb25zdHJhaW50cy5wdXNoKHsgbmFtZTogXCJlbnVtXCIsIHZhbHVlOiBlbnVtVmFsdWVzIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzXG59XG5cbmZ1bmN0aW9uIFByaW1hcnlLZXkocHJvcHM6IHsgZmllbGRzOiBzdHJpbmdbXSB9KSB7XG4gIGNvbnN0IHsgZmllbGRzIH0gPSBwcm9wc1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8aDI+UHJpbWFyeSBLZXk8L2gyPlxuICAgICAgPHA+XG4gICAgICAgIDxjb2RlPntmaWVsZHMuam9pbihcIiwgXCIpfTwvY29kZT5cbiAgICAgIDwvcD5cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBGb3JlaWduS2V5cyhwcm9wczogeyBmb3JlaWduS2V5czogU2NoZW1hW1wiZm9yZWlnbktleXNcIl0gfSkge1xuICBjb25zdCB7IGZvcmVpZ25LZXlzIH0gPSBwcm9wc1xuICBpZiAoIWZvcmVpZ25LZXlzKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxoMj5Gb3JlaWduIEtleXM8L2gyPlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8Y29sZ3JvdXA+XG4gICAgICAgICAgPGNvbCB3aWR0aD1cIjQwJVwiIC8+XG4gICAgICAgICAgPGNvbCB3aWR0aD1cIjMwJVwiIC8+XG4gICAgICAgICAgPGNvbCB3aWR0aD1cIjMwJVwiIC8+XG4gICAgICAgIDwvY29sZ3JvdXA+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGg+RmllbGRzPC90aD5cbiAgICAgICAgICAgIDx0aD5SZWZlcmVuY2UgUmVzb3VyY2U8L3RoPlxuICAgICAgICAgICAgPHRoPlJlZmVyZW5jZSBGaWVsZHM8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICB7Zm9yZWlnbktleXMubWFwKChmaywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDx0ciBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxjb2RlPntmay5maWVsZHMuam9pbihcIiwgXCIpfTwvY29kZT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxjb2RlPntmay5yZWZlcmVuY2UucmVzb3VyY2UgfHwgXCItXCJ9PC9jb2RlPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPGNvZGU+e2ZrLnJlZmVyZW5jZS5maWVsZHMuam9pbihcIiwgXCIpfTwvY29kZT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIHNhbml0aXplSWQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiLVwiKVxuICAgIC5yZXBsYWNlKC9eLXwtJC9nLCBcIlwiKVxufVxuXG5pbnRlcmZhY2UgQ29uc3RyYWludCB7XG4gIG5hbWU6IHN0cmluZ1xuICB2YWx1ZTogc3RyaW5nXG59XG4iXX0=
@@ -1 +0,0 @@
1
- export {};