@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,7 +1,7 @@
1
1
  {
2
2
  "name": "@fairspec/agent",
3
3
  "type": "module",
4
- "version": "0.0.0-dev",
4
+ "version": "0.9.1",
5
5
  "exports": "./build/index.js",
6
6
  "sideEffects": false,
7
7
  "files": [
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fairspec/agent",
3
3
  "type": "module",
4
- "version": "0.9.0",
4
+ "version": "0.9.1",
5
5
  "exports": "./build/index.js",
6
6
  "sideEffects": false,
7
7
  "files": [
@@ -30,7 +30,7 @@
30
30
  "@mastra/core": "^1.2.0",
31
31
  "@mastra/mcp": "^1.0.0",
32
32
  "zod": "^4.2.1",
33
- "@fairspec/library": "0.0.0-dev"
33
+ "@fairspec/library": "0.9.1"
34
34
  },
35
35
  "scripts": {
36
36
  "build": "tsc",
@@ -1,4 +0,0 @@
1
- import type { TableSchema } from "@fairspec/metadata";
2
- export declare function renderTableSchemaAsHtml(schema: TableSchema, options?: {
3
- frontmatter?: boolean;
4
- }): string;
@@ -1,82 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getColumns } from "@fairspec/metadata";
3
- import { prettify } from "htmlfy";
4
- import { renderToStaticMarkup } from "react-dom/server";
5
- export function renderTableSchemaAsHtml(schema, options) {
6
- let html = prettify(renderToStaticMarkup(_jsx(SchemaTable, { schema: schema })));
7
- if (options?.frontmatter) {
8
- if (schema.title) {
9
- html = `---\ntitle: ${schema.title}\n---\n\n${html}`;
10
- }
11
- }
12
- return html;
13
- }
14
- function SchemaTable(props) {
15
- const { schema } = props;
16
- return (_jsxs(_Fragment, { children: [schema.primaryKey && _jsx(PrimaryKey, { fields: schema.primaryKey }), schema.foreignKeys && schema.foreignKeys.length > 0 && (_jsx(ForeignKeys, { foreignKeys: schema.foreignKeys })), _jsx(FieldsTable, { schema: schema })] }));
17
- }
18
- function FieldsTable(props) {
19
- const { schema } = props;
20
- const columns = getColumns(schema);
21
- const required = schema.required ?? [];
22
- return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Columns" }), _jsxs("table", { children: [_jsxs("colgroup", { children: [_jsx("col", { width: "20%" }), _jsx("col", { width: "65%" }), _jsx("col", { width: "15%" })] }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Name" }), _jsx("th", { children: "Definition" }), _jsx("th", { children: "Type" })] }) }), _jsx("tbody", { children: columns.map(column => (_jsx(FieldRow, { column: column, isRequired: required.includes(column.name) }, column.name))) })] })] }));
23
- }
24
- function FieldRow(props) {
25
- const { column, isRequired } = props;
26
- const { name, type, property } = column;
27
- const columnDescription = property.description ?? "";
28
- const constraints = extractConstraints(property);
29
- return (_jsxs("tr", { children: [_jsx("td", { id: sanitizeId(name), children: _jsx("code", { children: _jsxs("strong", { children: [name, !isRequired && "?"] }) }) }), _jsxs("td", { children: [columnDescription && _jsx("p", { children: columnDescription }), constraints.length > 0 && (_jsx(ConstraintsList, { constraints: constraints })), "categories" in property && property.categories !== undefined && (_jsx(CategoriesList, { categories: property.categories }))] }), _jsx("td", { children: _jsx("code", { children: type }) })] }));
30
- }
31
- function ConstraintsList(props) {
32
- const { constraints } = props;
33
- return (_jsxs(_Fragment, { children: [_jsx("strong", { children: "Constraints" }), _jsx("ul", { children: constraints.map((constraint, index) => (_jsxs("li", { children: [constraint.name, ": ", _jsx("code", { children: constraint.value })] }, index))) })] }));
34
- }
35
- function CategoriesList(props) {
36
- const { categories } = props;
37
- return (_jsxs(_Fragment, { children: [_jsx("strong", { children: "Categories" }), _jsx("ul", { children: categories.map((category, index) => {
38
- const value = typeof category === "object" ? category.value : category;
39
- const label = typeof category === "object" ? category.label : undefined;
40
- return (_jsxs("li", { children: [_jsx("code", { children: String(value) }), label && ` - ${label}`] }, index));
41
- }) })] }));
42
- }
43
- function extractConstraints(property) {
44
- const constraints = [];
45
- if ("minimum" in property && property.minimum !== undefined) {
46
- constraints.push({ name: "minimum", value: String(property.minimum) });
47
- }
48
- if ("maximum" in property && property.maximum !== undefined) {
49
- constraints.push({ name: "maximum", value: String(property.maximum) });
50
- }
51
- if ("minLength" in property && property.minLength !== undefined) {
52
- constraints.push({ name: "minLength", value: String(property.minLength) });
53
- }
54
- if ("maxLength" in property && property.maxLength !== undefined) {
55
- constraints.push({ name: "maxLength", value: String(property.maxLength) });
56
- }
57
- if ("pattern" in property && property.pattern) {
58
- constraints.push({ name: "pattern", value: property.pattern });
59
- }
60
- if ("enum" in property && property.enum) {
61
- const enumValues = property.enum.map(v => String(v)).join(", ");
62
- constraints.push({ name: "enum", value: enumValues });
63
- }
64
- return constraints;
65
- }
66
- function PrimaryKey(props) {
67
- const { fields } = props;
68
- return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Primary Key" }), _jsx("p", { children: _jsx("code", { children: fields.join(", ") }) })] }));
69
- }
70
- function ForeignKeys(props) {
71
- const { foreignKeys } = props;
72
- if (!foreignKeys)
73
- return null;
74
- return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Foreign Keys" }), _jsxs("table", { children: [_jsxs("colgroup", { children: [_jsx("col", { width: "40%" }), _jsx("col", { width: "30%" }), _jsx("col", { width: "30%" })] }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Columns" }), _jsx("th", { children: "Reference Resource" }), _jsx("th", { children: "Reference Columns" })] }) }), _jsx("tbody", { children: foreignKeys.map((fk, index) => (_jsxs("tr", { children: [_jsx("td", { children: _jsx("code", { children: fk.columns.join(", ") }) }), _jsx("td", { children: _jsx("code", { children: fk.reference.resource || "-" }) }), _jsx("td", { children: _jsx("code", { children: fk.reference.columns.join(", ") }) })] }, index))) })] })] }));
75
- }
76
- function sanitizeId(text) {
77
- return text
78
- .toLowerCase()
79
- .replace(/[^a-z0-9]+/g, "-")
80
- .replace(/^-|-$/g, "");
81
- }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNIdG1sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWN0aW9ucy90YWJsZVNjaGVtYS9hc0h0bWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV2RCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQW1CLEVBQ25CLE9BQW1DO0lBRW5DLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFDLFdBQVcsSUFBQyxNQUFNLEVBQUUsTUFBTSxHQUFJLENBQUMsQ0FBQyxDQUFBO0lBRTFFLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLElBQUksR0FBRyxlQUFlLE1BQU0sQ0FBQyxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUE4QjtJQUNqRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRXhCLE9BQU8sQ0FDTCw4QkFDRyxNQUFNLENBQUMsVUFBVSxJQUFJLEtBQUMsVUFBVSxJQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxHQUFJLEVBQzlELE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQ3RELEtBQUMsV0FBVyxJQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFJLENBQ2pELEVBQ0QsS0FBQyxXQUFXLElBQUMsTUFBTSxFQUFFLE1BQU0sR0FBSSxJQUM5QixDQUNK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LEVBQ3JCLDRCQUNFLCtCQUNFLGNBQUssS0FBSyxFQUFDLEtBQUssR0FBRyxFQUNuQixjQUFLLEtBQUssRUFBQyxLQUFLLEdBQUcsRUFDbkIsY0FBSyxLQUFLLEVBQUMsS0FBSyxHQUFHLElBQ1YsRUFDWCwwQkFDRSx5QkFDRSxtQ0FBZ0IsRUFDaEIsOENBQTJCLEVBQzNCLDZDQUEwQixJQUN2QixHQUNDLEVBQ1IsMEJBQ0csV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQzlCLHlCQUNFLHVCQUNFLHlCQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFRLEdBQ2pDLEVBQ0wsdUJBQ0UseUJBQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksR0FBRyxHQUFRLEdBQ3hDLEVBQ0wsdUJBQ0UseUJBQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFRLEdBQzNDLEtBVEUsS0FBSyxDQVVULENBQ04sQ0FBQyxHQUNJLElBQ0YsSUFDUCxDQUNKLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBWTtJQUM5QixPQUFPLElBQUk7U0FDUixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztTQUMzQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbHVtbiwgVGFibGVTY2hlbWEgfSBmcm9tIFwiQGZhaXJzcGVjL21ldGFkYXRhXCJcbmltcG9ydCB7IGdldENvbHVtbnMgfSBmcm9tIFwiQGZhaXJzcGVjL21ldGFkYXRhXCJcbmltcG9ydCB7IHByZXR0aWZ5IH0gZnJvbSBcImh0bWxmeVwiXG5pbXBvcnQgeyByZW5kZXJUb1N0YXRpY01hcmt1cCB9IGZyb20gXCJyZWFjdC1kb20vc2VydmVyXCJcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRhYmxlU2NoZW1hQXNIdG1sKFxuICBzY2hlbWE6IFRhYmxlU2NoZW1hLFxuICBvcHRpb25zPzogeyBmcm9udG1hdHRlcj86IGJvb2xlYW4gfSxcbik6IHN0cmluZyB7XG4gIGxldCBodG1sID0gcHJldHRpZnkocmVuZGVyVG9TdGF0aWNNYXJrdXAoPFNjaGVtYVRhYmxlIHNjaGVtYT17c2NoZW1hfSAvPikpXG5cbiAgaWYgKG9wdGlvbnM/LmZyb250bWF0dGVyKSB7XG4gICAgaWYgKHNjaGVtYS50aXRsZSkge1xuICAgICAgaHRtbCA9IGAtLS1cXG50aXRsZTogJHtzY2hlbWEudGl0bGV9XFxuLS0tXFxuXFxuJHtodG1sfWBcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaHRtbFxufVxuXG5mdW5jdGlvbiBTY2hlbWFUYWJsZShwcm9wczogeyBzY2hlbWE6IFRhYmxlU2NoZW1hIH0pIHtcbiAgY29uc3QgeyBzY2hlbWEgfSA9IHByb3BzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3NjaGVtYS5wcmltYXJ5S2V5ICYmIDxQcmltYXJ5S2V5IGZpZWxkcz17c2NoZW1hLnByaW1hcnlLZXl9IC8+fVxuICAgICAge3NjaGVtYS5mb3JlaWduS2V5cyAmJiBzY2hlbWEuZm9yZWlnbktleXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxGb3JlaWduS2V5cyBmb3JlaWduS2V5cz17c2NoZW1hLmZvcmVpZ25LZXlzfSAvPlxuICAgICAgKX1cbiAgICAgIDxGaWVsZHNUYWJsZSBzY2hlbWE9e3NjaGVtYX0gLz5cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBGaWVsZHNUYWJsZShwcm9wczogeyBzY2hlbWE6IFRhYmxlU2NoZW1hIH0pIHtcbiAgY29uc3QgeyBzY2hlbWEgfSA9IHByb3BzXG4gIGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zKHNjaGVtYSlcbiAgY29uc3QgcmVxdWlyZWQgPSBzY2hlbWEucmVxdWlyZWQgPz8gW11cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8aDI+Q29sdW1uczwvaDI+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDxjb2xncm91cD5cbiAgICAgICAgICA8Y29sIHdpZHRoPVwiMjAlXCIgLz5cbiAgICAgICAgICA8Y29sIHdpZHRoPVwiNjUlXCIgLz5cbiAgICAgICAgICA8Y29sIHdpZHRoPVwiMTUlXCIgLz5cbiAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cbiAgICAgICAgICAgIDx0aD5EZWZpbml0aW9uPC90aD5cbiAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAge2NvbHVtbnMubWFwKGNvbHVtbiA9PiAoXG4gICAgICAgICAgICA8RmllbGRSb3dcbiAgICAgICAgICAgICAga2V5PXtjb2x1bW4ubmFtZX1cbiAgICAgICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3JlcXVpcmVkLmluY2x1ZGVzKGNvbHVtbi5uYW1lKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIEZpZWxkUm93KHByb3BzOiB7IGNvbHVtbjogQ29sdW1uOyBpc1JlcXVpcmVkOiBib29sZWFuIH0pIHtcbiAgY29uc3QgeyBjb2x1bW4sIGlzUmVxdWlyZWQgfSA9IHByb3BzXG4gIGNvbnN0IHsgbmFtZSwgdHlwZSwgcHJvcGVydHkgfSA9IGNvbHVtblxuICBjb25zdCBjb2x1bW5EZXNjcmlwdGlvbiA9IHByb3BlcnR5LmRlc2NyaXB0aW9uID8/IFwiXCJcblxuICBjb25zdCBjb25zdHJhaW50cyA9IGV4dHJhY3RDb25zdHJhaW50cyhwcm9wZXJ0eSlcblxuICByZXR1cm4gKFxuICAgIDx0cj5cbiAgICAgIDx0ZCBpZD17c2FuaXRpemVJZChuYW1lKX0+XG4gICAgICAgIDxjb2RlPlxuICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICB7bmFtZX1cbiAgICAgICAgICAgIHshaXNSZXF1aXJlZCAmJiBcIj9cIn1cbiAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgPC9jb2RlPlxuICAgICAgPC90ZD5cbiAgICAgIDx0ZD5cbiAgICAgICAge2NvbHVtbkRlc2NyaXB0aW9uICYmIDxwPntjb2x1bW5EZXNjcmlwdGlvbn08L3A+fVxuICAgICAgICB7Y29uc3RyYWludHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPENvbnN0cmFpbnRzTGlzdCBjb25zdHJhaW50cz17Y29uc3RyYWludHN9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHtcImNhdGVnb3JpZXNcIiBpbiBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jYXRlZ29yaWVzICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgIDxDYXRlZ29yaWVzTGlzdCBjYXRlZ29yaWVzPXtwcm9wZXJ0eS5jYXRlZ29yaWVzfSAvPlxuICAgICAgICApfVxuICAgICAgPC90ZD5cbiAgICAgIDx0ZD5cbiAgICAgICAgPGNvZGU+e3R5cGV9PC9jb2RlPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbnN0cmFpbnRzTGlzdChwcm9wczogeyBjb25zdHJhaW50czogQ29uc3RyYWludFtdIH0pIHtcbiAgY29uc3QgeyBjb25zdHJhaW50cyB9ID0gcHJvcHNcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHN0cm9uZz5Db25zdHJhaW50czwvc3Ryb25nPlxuICAgICAgPHVsPlxuICAgICAgICB7Y29uc3RyYWludHMubWFwKChjb25zdHJhaW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxsaSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgIHtjb25zdHJhaW50Lm5hbWV9OiA8Y29kZT57Y29uc3RyYWludC52YWx1ZX08L2NvZGU+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKSl9XG4gICAgICA8L3VsPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhdGVnb3JpZXNMaXN0KHByb3BzOiB7IGNhdGVnb3JpZXM6IGFueVtdIH0pIHtcbiAgY29uc3QgeyBjYXRlZ29yaWVzIH0gPSBwcm9wc1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8c3Ryb25nPkNhdGVnb3JpZXM8L3N0cm9uZz5cbiAgICAgIDx1bD5cbiAgICAgICAge2NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBjYXRlZ29yeSA9PT0gXCJvYmplY3RcIiA/IGNhdGVnb3J5LnZhbHVlIDogY2F0ZWdvcnlcbiAgICAgICAgICBjb25zdCBsYWJlbCA9XG4gICAgICAgICAgICB0eXBlb2YgY2F0ZWdvcnkgPT09IFwib2JqZWN0XCIgPyBjYXRlZ29yeS5sYWJlbCA6IHVuZGVmaW5lZFxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8bGkga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgIDxjb2RlPntTdHJpbmcodmFsdWUpfTwvY29kZT5cbiAgICAgICAgICAgICAge2xhYmVsICYmIGAgLSAke2xhYmVsfWB9XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDb25zdHJhaW50cyhwcm9wZXJ0eTogQ29sdW1uW1wicHJvcGVydHlcIl0pOiBDb25zdHJhaW50W10ge1xuICBjb25zdCBjb25zdHJhaW50czogQ29uc3RyYWludFtdID0gW11cblxuICBpZiAoXCJtaW5pbXVtXCIgaW4gcHJvcGVydHkgJiYgcHJvcGVydHkubWluaW11bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwibWluaW11bVwiLCB2YWx1ZTogU3RyaW5nKHByb3BlcnR5Lm1pbmltdW0pIH0pXG4gIH1cbiAgaWYgKFwibWF4aW11bVwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5Lm1heGltdW0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0cmFpbnRzLnB1c2goeyBuYW1lOiBcIm1heGltdW1cIiwgdmFsdWU6IFN0cmluZyhwcm9wZXJ0eS5tYXhpbXVtKSB9KVxuICB9XG4gIGlmIChcIm1pbkxlbmd0aFwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5Lm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwibWluTGVuZ3RoXCIsIHZhbHVlOiBTdHJpbmcocHJvcGVydHkubWluTGVuZ3RoKSB9KVxuICB9XG4gIGlmIChcIm1heExlbmd0aFwiIGluIHByb3BlcnR5ICYmIHByb3BlcnR5Lm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwibWF4TGVuZ3RoXCIsIHZhbHVlOiBTdHJpbmcocHJvcGVydHkubWF4TGVuZ3RoKSB9KVxuICB9XG4gIGlmIChcInBhdHRlcm5cIiBpbiBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5wYXR0ZXJuKSB7XG4gICAgY29uc3RyYWludHMucHVzaCh7IG5hbWU6IFwicGF0dGVyblwiLCB2YWx1ZTogcHJvcGVydHkucGF0dGVybiB9KVxuICB9XG4gIGlmIChcImVudW1cIiBpbiBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lbnVtKSB7XG4gICAgY29uc3QgZW51bVZhbHVlcyA9IHByb3BlcnR5LmVudW0ubWFwKHYgPT4gU3RyaW5nKHYpKS5qb2luKFwiLCBcIilcbiAgICBjb25zdHJhaW50cy5wdXNoKHsgbmFtZTogXCJlbnVtXCIsIHZhbHVlOiBlbnVtVmFsdWVzIH0pXG4gIH1cblxuICByZXR1cm4gY29uc3RyYWludHNcbn1cblxuZnVuY3Rpb24gUHJpbWFyeUtleShwcm9wczogeyBmaWVsZHM6IHN0cmluZ1tdIH0pIHtcbiAgY29uc3QgeyBmaWVsZHMgfSA9IHByb3BzXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxoMj5QcmltYXJ5IEtleTwvaDI+XG4gICAgICA8cD5cbiAgICAgICAgPGNvZGU+e2ZpZWxkcy5qb2luKFwiLCBcIil9PC9jb2RlPlxuICAgICAgPC9wPlxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIEZvcmVpZ25LZXlzKHByb3BzOiB7IGZvcmVpZ25LZXlzOiBUYWJsZVNjaGVtYVtcImZvcmVpZ25LZXlzXCJdIH0pIHtcbiAgY29uc3QgeyBmb3JlaWduS2V5cyB9ID0gcHJvcHNcbiAgaWYgKCFmb3JlaWduS2V5cykgcmV0dXJuIG51bGxcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8aDI+Rm9yZWlnbiBLZXlzPC9oMj5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPGNvbGdyb3VwPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCI0MCVcIiAvPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCIzMCVcIiAvPlxuICAgICAgICAgIDxjb2wgd2lkdGg9XCIzMCVcIiAvPlxuICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPkNvbHVtbnM8L3RoPlxuICAgICAgICAgICAgPHRoPlJlZmVyZW5jZSBSZXNvdXJjZTwvdGg+XG4gICAgICAgICAgICA8dGg+UmVmZXJlbmNlIENvbHVtbnM8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICB7Zm9yZWlnbktleXMubWFwKChmaywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDx0ciBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxjb2RlPntmay5jb2x1bW5zLmpvaW4oXCIsIFwiKX08L2NvZGU+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8Y29kZT57ZmsucmVmZXJlbmNlLnJlc291cmNlIHx8IFwiLVwifTwvY29kZT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxjb2RlPntmay5yZWZlcmVuY2UuY29sdW1ucy5qb2luKFwiLCBcIil9PC9jb2RlPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC8+XG4gIClcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVJZCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgLnJlcGxhY2UoL14tfC0kL2csIFwiXCIpXG59XG5cbmludGVyZmFjZSBDb25zdHJhaW50IHtcbiAgbmFtZTogc3RyaW5nXG4gIHZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==
@@ -1 +0,0 @@
1
- export {};
@@ -1,356 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { renderTableSchemaAsHtml } from "./asHtml.js";
3
- describe("renderTableSchemaAsHtml", () => {
4
- it("converts a simple schema to html 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 = renderTableSchemaAsHtml(schema);
20
- expect(result).toContain("<h2>Columns</h2>");
21
- expect(result).toContain("<table>");
22
- expect(result).toContain("<th>Name</th>");
23
- expect(result).toContain("<th>Definition</th>");
24
- expect(result).toContain("<th>Type</th>");
25
- expect(result).toContain("<strong>id?</strong>");
26
- expect(result).toContain("<strong>name?</strong>");
27
- expect(result).toContain("<p>Unique identifier</p>");
28
- expect(result).toContain("<p>Person name</p>");
29
- expect(result).toContain("<code>integer</code>");
30
- expect(result).toContain("<code>string</code>");
31
- });
32
- it("handles column constraints", () => {
33
- const schema = {
34
- properties: {
35
- age: {
36
- type: "integer",
37
- minimum: 0,
38
- maximum: 120,
39
- },
40
- email: {
41
- type: "string",
42
- pattern: "^[a-z]+@[a-z]+\\.[a-z]+$",
43
- },
44
- },
45
- required: ["age", "email"],
46
- };
47
- const result = renderTableSchemaAsHtml(schema);
48
- expect(result).toContain("<strong>Constraints</strong>");
49
- expect(result).toContain("minimum:");
50
- expect(result).toContain("<code>0</code>");
51
- expect(result).toContain("maximum:");
52
- expect(result).toContain("<code>120</code>");
53
- expect(result).toContain("pattern:");
54
- });
55
- it("handles required field indicator", () => {
56
- const schema = {
57
- properties: {
58
- requiredField: {
59
- type: "string",
60
- },
61
- optionalField: {
62
- type: "string",
63
- },
64
- },
65
- required: ["requiredField"],
66
- };
67
- const result = renderTableSchemaAsHtml(schema);
68
- expect(result).toContain("<strong>requiredField</strong>");
69
- expect(result).not.toContain("requiredField?");
70
- expect(result).toContain("<strong>optionalField?</strong>");
71
- });
72
- it("handles empty properties object", () => {
73
- const schema = {
74
- properties: {},
75
- };
76
- const result = renderTableSchemaAsHtml(schema);
77
- expect(result).toContain("<h2>Columns</h2>");
78
- expect(result).toContain("<table>");
79
- expect(result).toContain("</table>");
80
- });
81
- it("escapes HTML special characters", () => {
82
- const schema = {
83
- properties: {
84
- field: {
85
- type: "string",
86
- description: "Description with <script>alert('xss')</script>",
87
- },
88
- },
89
- };
90
- const result = renderTableSchemaAsHtml(schema);
91
- expect(result).toContain("Description with &lt;script&gt;alert(&#x27;xss&#x27;)&lt;/script&gt;");
92
- });
93
- it("handles columns with enum constraints", () => {
94
- const schema = {
95
- properties: {
96
- status: {
97
- type: "string",
98
- enum: ["active", "inactive", "pending"],
99
- },
100
- },
101
- };
102
- const result = renderTableSchemaAsHtml(schema);
103
- expect(result).toContain("enum:");
104
- expect(result).toContain("<code>active, inactive, pending</code>");
105
- });
106
- it("handles multiple constraint types", () => {
107
- const schema = {
108
- properties: {
109
- username: {
110
- type: "string",
111
- minLength: 3,
112
- maxLength: 20,
113
- pattern: "^[a-zA-Z0-9_]+$",
114
- },
115
- },
116
- required: ["username"],
117
- };
118
- const result = renderTableSchemaAsHtml(schema);
119
- expect(result).toContain("minLength:");
120
- expect(result).toContain("<code>3</code>");
121
- expect(result).toContain("maxLength:");
122
- expect(result).toContain("<code>20</code>");
123
- expect(result).toContain("pattern:");
124
- });
125
- it("handles different column types", () => {
126
- const schema = {
127
- properties: {
128
- field1: { type: "string" },
129
- field2: { type: "integer" },
130
- field3: { type: "number" },
131
- field4: { type: "boolean" },
132
- field5: { type: "string", format: "date-time" },
133
- field6: { type: "array" },
134
- },
135
- };
136
- const result = renderTableSchemaAsHtml(schema);
137
- expect(result).toContain("<code>string</code>");
138
- expect(result).toContain("<code>integer</code>");
139
- expect(result).toContain("<code>number</code>");
140
- expect(result).toContain("<code>boolean</code>");
141
- expect(result).toContain("<code>array</code>");
142
- });
143
- it("sanitizes IDs for anchors", () => {
144
- const schema = {
145
- properties: {
146
- "field-with-dashes": {
147
- type: "string",
148
- },
149
- "Field With Spaces": {
150
- type: "string",
151
- },
152
- },
153
- };
154
- const result = renderTableSchemaAsHtml(schema);
155
- expect(result).toContain('id="field-with-dashes"');
156
- expect(result).toContain('id="field-with-spaces"');
157
- });
158
- it("does not include top-level html tags", () => {
159
- const schema = {
160
- properties: {
161
- field1: { type: "string" },
162
- },
163
- };
164
- const result = renderTableSchemaAsHtml(schema);
165
- expect(result).not.toContain("<!DOCTYPE");
166
- expect(result).not.toContain("<html>");
167
- expect(result).not.toContain("<head>");
168
- expect(result).not.toContain("<body>");
169
- expect(result).not.toContain("<style>");
170
- });
171
- it("handles column without description", () => {
172
- const schema = {
173
- properties: {
174
- field1: {
175
- type: "string",
176
- },
177
- },
178
- };
179
- const result = renderTableSchemaAsHtml(schema);
180
- expect(result).toContain("<strong>field1?</strong>");
181
- expect(result).toContain("<code>string</code>");
182
- });
183
- it("uses frontmatter when frontmatter option is true", () => {
184
- const schema = {
185
- title: "Table Schema",
186
- properties: {
187
- field1: {
188
- type: "string",
189
- },
190
- },
191
- };
192
- const result = renderTableSchemaAsHtml(schema, { frontmatter: true });
193
- expect(result).toContain("---");
194
- expect(result).toContain("title: Table Schema");
195
- });
196
- it("handles schema with primary key", () => {
197
- const schema = {
198
- properties: {
199
- id: {
200
- type: "integer",
201
- },
202
- name: {
203
- type: "string",
204
- },
205
- },
206
- primaryKey: ["id"],
207
- };
208
- const result = renderTableSchemaAsHtml(schema);
209
- expect(result).toContain("<h2>Primary Key</h2>");
210
- expect(result).toContain("<code>id</code>");
211
- });
212
- it("handles schema with composite primary key", () => {
213
- const schema = {
214
- properties: {
215
- user_id: {
216
- type: "integer",
217
- },
218
- project_id: {
219
- type: "integer",
220
- },
221
- },
222
- primaryKey: ["user_id", "project_id"],
223
- };
224
- const result = renderTableSchemaAsHtml(schema);
225
- expect(result).toContain("<h2>Primary Key</h2>");
226
- expect(result).toContain("<code>user_id, project_id</code>");
227
- });
228
- it("handles schema with foreign keys", () => {
229
- const schema = {
230
- properties: {
231
- user_id: {
232
- type: "integer",
233
- },
234
- },
235
- foreignKeys: [
236
- {
237
- columns: ["user_id"],
238
- reference: {
239
- resource: "users",
240
- columns: ["id"],
241
- },
242
- },
243
- ],
244
- };
245
- const result = renderTableSchemaAsHtml(schema);
246
- expect(result).toContain("<h2>Foreign Keys</h2>");
247
- expect(result).toContain("<th>Columns</th>");
248
- expect(result).toContain("<th>Reference Resource</th>");
249
- expect(result).toContain("<th>Reference Columns</th>");
250
- expect(result).toContain("<code>user_id</code>");
251
- expect(result).toContain("<code>users</code>");
252
- expect(result).toContain("<code>id</code>");
253
- });
254
- it("handles schema with multiple foreign keys", () => {
255
- const schema = {
256
- properties: {
257
- user_id: {
258
- type: "integer",
259
- },
260
- project_id: {
261
- type: "integer",
262
- },
263
- },
264
- foreignKeys: [
265
- {
266
- columns: ["user_id"],
267
- reference: {
268
- resource: "users",
269
- columns: ["id"],
270
- },
271
- },
272
- {
273
- columns: ["project_id"],
274
- reference: {
275
- resource: "projects",
276
- columns: ["id"],
277
- },
278
- },
279
- ],
280
- };
281
- const result = renderTableSchemaAsHtml(schema);
282
- expect(result).toContain("<h2>Foreign Keys</h2>");
283
- expect(result).toContain("<code>user_id</code>");
284
- expect(result).toContain("<code>users</code>");
285
- expect(result).toContain("<code>project_id</code>");
286
- expect(result).toContain("<code>projects</code>");
287
- });
288
- it("handles foreign key without resource specified", () => {
289
- const schema = {
290
- properties: {
291
- parent_id: {
292
- type: "integer",
293
- },
294
- },
295
- foreignKeys: [
296
- {
297
- columns: ["parent_id"],
298
- reference: {
299
- columns: ["id"],
300
- },
301
- },
302
- ],
303
- };
304
- const result = renderTableSchemaAsHtml(schema);
305
- expect(result).toContain("<h2>Foreign Keys</h2>");
306
- expect(result).toContain("<code>parent_id</code>");
307
- expect(result).toContain("<code>-</code>");
308
- expect(result).toContain("<code>id</code>");
309
- });
310
- it("does not render primary key or foreign keys sections when not present", () => {
311
- const schema = {
312
- properties: {
313
- field1: {
314
- type: "string",
315
- },
316
- },
317
- };
318
- const result = renderTableSchemaAsHtml(schema);
319
- expect(result).not.toContain("<h2>Primary Key</h2>");
320
- expect(result).not.toContain("<h2>Foreign Keys</h2>");
321
- });
322
- it("handles string categories", () => {
323
- const schema = {
324
- properties: {
325
- status: {
326
- type: "string",
327
- categories: ["active", "inactive"],
328
- },
329
- },
330
- };
331
- const result = renderTableSchemaAsHtml(schema);
332
- expect(result).toContain("<strong>Categories</strong>");
333
- expect(result).toContain("<code>active</code>");
334
- expect(result).toContain("<code>inactive</code>");
335
- });
336
- it("handles integer categories with labels", () => {
337
- const schema = {
338
- properties: {
339
- level: {
340
- type: "integer",
341
- categories: [
342
- { value: 1, label: "Beginner" },
343
- { value: 2, label: "Advanced" },
344
- ],
345
- },
346
- },
347
- };
348
- const result = renderTableSchemaAsHtml(schema);
349
- expect(result).toContain("<strong>Categories</strong>");
350
- expect(result).toContain("<code>1</code>");
351
- expect(result).toContain(" - Beginner");
352
- expect(result).toContain("<code>2</code>");
353
- expect(result).toContain(" - Advanced");
354
- });
355
- });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNIdG1sLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hY3Rpb25zL3RhYmxlU2NoZW1hL2FzSHRtbC5zcGVjLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYyxDQUFBO0FBRXRELFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7SUFDdkMsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLE1BQU0sR0FBZ0I7WUFDMUIsVUFBVSxFQUFFO2dCQUNWLEVBQUUsRUFBRTtvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsWUFBWTtvQkFDbkIsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxNQUFNO29CQUNiLFdBQVcsRUFBRSxhQUFhO2lCQUMzQjthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxD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QUVGLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxNQUFNLEdBQWdCO1lBQzFCLFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFLFNBQVM7b0JBRWYsVUFBVSxFQUFFO3dCQUNWLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO3dCQUMvQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtxQkFDaEM7aUJBQ0Y7YUFDRjtTQUNGLENBQUE7UUFFRCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU5QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLENBQUE7UUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVGFibGVTY2hlbWEgfSBmcm9tIFwiQGZhaXJzcGVjL21ldGFkYXRhXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbCB9IGZyb20gXCIuL2FzSHRtbC50c3hcIlxuXG5kZXNjcmliZShcInJlbmRlclRhYmxlU2NoZW1hQXNIdG1sXCIsICgpID0+IHtcbiAgaXQoXCJjb252ZXJ0cyBhIHNpbXBsZSBzY2hlbWEgdG8gaHRtbCB0YWJsZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgICB0aXRsZTogXCJJZGVudGlmaWVyXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVW5pcXVlIGlkZW50aWZpZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZToge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgdGl0bGU6IFwiTmFtZVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBlcnNvbiBuYW1lXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclRhYmxlU2NoZW1hQXNIdG1sKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxoMj5Db2x1bW5zPC9oMj5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8dGFibGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHRoPk5hbWU8L3RoPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjx0aD5EZWZpbml0aW9uPC90aD5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8dGg+VHlwZTwvdGg+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHN0cm9uZz5pZD88L3N0cm9uZz5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8c3Ryb25nPm5hbWU/PC9zdHJvbmc+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHA+VW5pcXVlIGlkZW50aWZpZXI8L3A+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHA+UGVyc29uIG5hbWU8L3A+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+aW50ZWdlcjwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5zdHJpbmc8L2NvZGU+XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGNvbHVtbiBjb25zdHJhaW50c1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWdlOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG5cbiAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgIG1heGltdW06IDEyMCxcbiAgICAgICAgfSxcbiAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIHBhdHRlcm46IFwiXlthLXpdK0BbYS16XStcXFxcLlthLXpdKyRcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogW1wiYWdlXCIsIFwiZW1haWxcIl0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHN0cm9uZz5Db25zdHJhaW50czwvc3Ryb25nPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIm1pbmltdW06XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+MDwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJtYXhpbXVtOlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPjEyMDwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJwYXR0ZXJuOlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyByZXF1aXJlZCBmaWVsZCBpbmRpY2F0b3JcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHJlcXVpcmVkRmllbGQ6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25hbEZpZWxkOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogW1wicmVxdWlyZWRGaWVsZFwiXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8c3Ryb25nPnJlcXVpcmVkRmllbGQ8L3N0cm9uZz5cIilcbiAgICBleHBlY3QocmVzdWx0KS5ub3QudG9Db250YWluKFwicmVxdWlyZWRGaWVsZD9cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8c3Ryb25nPm9wdGlvbmFsRmllbGQ/PC9zdHJvbmc+XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGVtcHR5IHByb3BlcnRpZXMgb2JqZWN0XCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgcHJvcGVydGllczoge30sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGgyPkNvbHVtbnM8L2gyPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjx0YWJsZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8L3RhYmxlPlwiKVxuICB9KVxuXG4gIGl0KFwiZXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVyc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZmllbGQ6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRlc2NyaXB0aW9uIHdpdGggPHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD5cIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFxuICAgICAgXCJEZXNjcmlwdGlvbiB3aXRoICZsdDtzY3JpcHQmZ3Q7YWxlcnQoJiN4Mjc7eHNzJiN4Mjc7KSZsdDsvc2NyaXB0Jmd0O1wiLFxuICAgIClcbiAgfSlcblxuICBpdChcImhhbmRsZXMgY29sdW1ucyB3aXRoIGVudW0gY29uc3RyYWludHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHN0YXR1czoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZW51bTogW1wiYWN0aXZlXCIsIFwiaW5hY3RpdmVcIiwgXCJwZW5kaW5nXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJlbnVtOlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmFjdGl2ZSwgaW5hY3RpdmUsIHBlbmRpbmc8L2NvZGU+XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIG11bHRpcGxlIGNvbnN0cmFpbnQgdHlwZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBtaW5MZW5ndGg6IDMsXG4gICAgICAgICAgbWF4TGVuZ3RoOiAyMCxcbiAgICAgICAgICBwYXR0ZXJuOiBcIl5bYS16QS1aMC05X10rJFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbXCJ1c2VybmFtZVwiXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJtaW5MZW5ndGg6XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+MzwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJtYXhMZW5ndGg6XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+MjA8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwicGF0dGVybjpcIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgZGlmZmVyZW50IGNvbHVtbiB0eXBlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZmllbGQxOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgZmllbGQyOiB7IHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIGZpZWxkMzogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgIGZpZWxkNDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICBmaWVsZDU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZm9ybWF0OiBcImRhdGUtdGltZVwiIH0sXG4gICAgICAgIGZpZWxkNjogeyB0eXBlOiBcImFycmF5XCIgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+c3RyaW5nPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmludGVnZXI8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+bnVtYmVyPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmJvb2xlYW48L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+YXJyYXk8L2NvZGU+XCIpXG4gIH0pXG5cbiAgaXQoXCJzYW5pdGl6ZXMgSURzIGZvciBhbmNob3JzXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBcImZpZWxkLXdpdGgtZGFzaGVzXCI6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgICBcIkZpZWxkIFdpdGggU3BhY2VzXCI6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oJ2lkPVwiZmllbGQtd2l0aC1kYXNoZXNcIicpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKCdpZD1cImZpZWxkLXdpdGgtc3BhY2VzXCInKVxuICB9KVxuXG4gIGl0KFwiZG9lcyBub3QgaW5jbHVkZSB0b3AtbGV2ZWwgaHRtbCB0YWdzXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZDE6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS5ub3QudG9Db250YWluKFwiPCFET0NUWVBFXCIpXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihcIjxodG1sPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0NvbnRhaW4oXCI8aGVhZD5cIilcbiAgICBleHBlY3QocmVzdWx0KS5ub3QudG9Db250YWluKFwiPGJvZHk+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihcIjxzdHlsZT5cIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgY29sdW1uIHdpdGhvdXQgZGVzY3JpcHRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGZpZWxkMToge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclRhYmxlU2NoZW1hQXNIdG1sKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxzdHJvbmc+ZmllbGQxPzwvc3Ryb25nPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPnN0cmluZzwvY29kZT5cIilcbiAgfSlcblxuICBpdChcInVzZXMgZnJvbnRtYXR0ZXIgd2hlbiBmcm9udG1hdHRlciBvcHRpb24gaXMgdHJ1ZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHRpdGxlOiBcIlRhYmxlIFNjaGVtYVwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZDE6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbChzY2hlbWEsIHsgZnJvbnRtYXR0ZXI6IHRydWUgfSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIi0tLVwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcInRpdGxlOiBUYWJsZSBTY2hlbWFcIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgc2NoZW1hIHdpdGggcHJpbWFyeSBrZXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlkOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHByaW1hcnlLZXk6IFtcImlkXCJdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclRhYmxlU2NoZW1hQXNIdG1sKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxoMj5QcmltYXJ5IEtleTwvaDI+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+aWQ8L2NvZGU+XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHNjaGVtYSB3aXRoIGNvbXBvc2l0ZSBwcmltYXJ5IGtleVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdXNlcl9pZDoge1xuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICB9LFxuICAgICAgICBwcm9qZWN0X2lkOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcHJpbWFyeUtleTogW1widXNlcl9pZFwiLCBcInByb2plY3RfaWRcIl0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGgyPlByaW1hcnkgS2V5PC9oMj5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT51c2VyX2lkLCBwcm9qZWN0X2lkPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBzY2hlbWEgd2l0aCBmb3JlaWduIGtleXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVzZXJfaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBmb3JlaWduS2V5czogW1xuICAgICAgICB7XG4gICAgICAgICAgY29sdW1uczogW1widXNlcl9pZFwiXSxcbiAgICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICAgIHJlc291cmNlOiBcInVzZXJzXCIsXG4gICAgICAgICAgICBjb2x1bW5zOiBbXCJpZFwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8aDI+Rm9yZWlnbiBLZXlzPC9oMj5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8dGg+Q29sdW1uczwvdGg+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHRoPlJlZmVyZW5jZSBSZXNvdXJjZTwvdGg+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHRoPlJlZmVyZW5jZSBDb2x1bW5zPC90aD5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT51c2VyX2lkPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPnVzZXJzPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmlkPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBzY2hlbWEgd2l0aCBtdWx0aXBsZSBmb3JlaWduIGtleXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVzZXJfaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAgcHJvamVjdF9pZDoge1xuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGZvcmVpZ25LZXlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb2x1bW5zOiBbXCJ1c2VyX2lkXCJdLFxuICAgICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgICAgcmVzb3VyY2U6IFwidXNlcnNcIixcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcImlkXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb2x1bW5zOiBbXCJwcm9qZWN0X2lkXCJdLFxuICAgICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgICAgcmVzb3VyY2U6IFwicHJvamVjdHNcIixcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcImlkXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclRhYmxlU2NoZW1hQXNIdG1sKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxoMj5Gb3JlaWduIEtleXM8L2gyPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPnVzZXJfaWQ8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+dXNlcnM8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+cHJvamVjdF9pZDwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5wcm9qZWN0czwvY29kZT5cIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgZm9yZWlnbiBrZXkgd2l0aG91dCByZXNvdXJjZSBzcGVjaWZpZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHBhcmVudF9pZDoge1xuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGZvcmVpZ25LZXlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb2x1bW5zOiBbXCJwYXJlbnRfaWRcIl0sXG4gICAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXCJpZFwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUYWJsZVNjaGVtYUFzSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8aDI+Rm9yZWlnbiBLZXlzPC9oMj5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5wYXJlbnRfaWQ8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+LTwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5pZDwvY29kZT5cIilcbiAgfSlcblxuICBpdChcImRvZXMgbm90IHJlbmRlciBwcmltYXJ5IGtleSBvciBmb3JlaWduIGtleXMgc2VjdGlvbnMgd2hlbiBub3QgcHJlc2VudFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZmllbGQxOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihcIjxoMj5QcmltYXJ5IEtleTwvaDI+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihcIjxoMj5Gb3JlaWduIEtleXM8L2gyPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBzdHJpbmcgY2F0ZWdvcmllc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJhY3RpdmVcIiwgXCJpbmFjdGl2ZVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHN0cm9uZz5DYXRlZ29yaWVzPC9zdHJvbmc+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+YWN0aXZlPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmluYWN0aXZlPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBpbnRlZ2VyIGNhdGVnb3JpZXMgd2l0aCBsYWJlbHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGxldmVsOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG5cbiAgICAgICAgICBjYXRlZ29yaWVzOiBbXG4gICAgICAgICAgICB7IHZhbHVlOiAxLCBsYWJlbDogXCJCZWdpbm5lclwiIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAyLCBsYWJlbDogXCJBZHZhbmNlZFwiIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyVGFibGVTY2hlbWFBc0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHN0cm9uZz5DYXRlZ29yaWVzPC9zdHJvbmc+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+MTwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCIgLSBCZWdpbm5lclwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPjI8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiIC0gQWR2YW5jZWRcIilcbiAgfSlcbn0pXG4iXX0=
@@ -1,4 +0,0 @@
1
- import type { TableSchema } from "@fairspec/metadata";
2
- export declare function renderTableSchemaAsMarkdown(schema: TableSchema, options?: {
3
- frontmatter?: boolean;
4
- }): string;