@fairspec/agent 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/build/examples/client.js +16 -0
  2. package/build/main.js +6 -0
  3. package/build/package.json +1 -1
  4. package/build/server.js +2 -1
  5. package/build/tools/data/validate.d.ts +180 -178
  6. package/build/tools/data/validate.js +6 -3
  7. package/build/tools/data/validate.spec.js +22 -22
  8. package/build/tools/dataSchema/infer.d.ts +10 -8
  9. package/build/tools/dataSchema/infer.js +6 -3
  10. package/build/tools/dataSchema/infer.spec.js +12 -10
  11. package/build/tools/dataSchema/validate.d.ts +173 -171
  12. package/build/tools/dataSchema/validate.js +6 -3
  13. package/build/tools/dataSchema/validate.spec.js +15 -15
  14. package/build/tools/dataset/infer.d.ts +804 -802
  15. package/build/tools/dataset/infer.js +6 -3
  16. package/build/tools/dataset/infer.spec.js +18 -18
  17. package/build/tools/dataset/validate.d.ts +180 -178
  18. package/build/tools/dataset/validate.js +6 -3
  19. package/build/tools/dataset/validate.spec.js +16 -16
  20. package/build/tools/dialect/infer.d.ts +98 -96
  21. package/build/tools/dialect/infer.js +6 -3
  22. package/build/tools/dialect/infer.spec.js +16 -14
  23. package/build/tools/table/query.d.ts +10 -8
  24. package/build/tools/table/query.js +6 -3
  25. package/build/tools/table/query.spec.js +31 -31
  26. package/build/tools/table/validate.d.ts +180 -178
  27. package/build/tools/table/validate.js +6 -3
  28. package/build/tools/table/validate.spec.js +11 -11
  29. package/build/tools/tableSchema/infer.d.ts +501 -499
  30. package/build/tools/tableSchema/infer.js +7 -3
  31. package/build/tools/tableSchema/infer.spec.js +35 -33
  32. package/build/tools/tableSchema/validate.d.ts +173 -171
  33. package/build/tools/tableSchema/validate.js +6 -3
  34. package/build/tools/tableSchema/validate.spec.js +13 -13
  35. package/package.json +2 -2
  36. package/build/actions/tableSchema/asHtml.d.ts +0 -4
  37. package/build/actions/tableSchema/asHtml.js +0 -82
  38. package/build/actions/tableSchema/asHtml.spec.js +0 -356
  39. package/build/actions/tableSchema/asMarkdown.d.ts +0 -4
  40. package/build/actions/tableSchema/asMarkdown.js +0 -65
  41. package/build/actions/tableSchema/asMarkdown.spec.js +0 -133
  42. package/build/document/Document.d.ts +0 -2
  43. package/build/document/Document.js +0 -2
  44. package/build/document/index.d.ts +0 -3
  45. package/build/document/index.js +0 -3
  46. package/build/document/types/Base.d.ts +0 -3
  47. package/build/document/types/Base.js +0 -2
  48. package/build/document/types/Json.d.ts +0 -5
  49. package/build/document/types/Json.js +0 -2
  50. package/build/document/validate.d.ts +0 -5
  51. package/build/document/validate.js +0 -23
  52. package/build/document/validate.spec.d.ts +0 -1
  53. package/build/document/validate.spec.js +0 -71
  54. package/build/plugin.d.ts +0 -6
  55. package/build/plugin.js +0 -15
  56. package/build/schema/convert/toHtml.d.ts +0 -4
  57. package/build/schema/convert/toHtml.js +0 -107
  58. package/build/schema/convert/toHtml.spec.d.ts +0 -1
  59. package/build/schema/convert/toHtml.spec.js +0 -432
  60. package/build/schema/convert/toMarkdown.d.ts +0 -4
  61. package/build/schema/convert/toMarkdown.js +0 -75
  62. package/build/schema/convert/toMarkdown.spec.d.ts +0 -1
  63. package/build/schema/convert/toMarkdown.spec.js +0 -137
  64. package/build/schema/index.d.ts +0 -2
  65. package/build/schema/index.js +0 -3
  66. package/build/tableSchema/convert/toHtml.d.ts +0 -4
  67. package/build/tableSchema/convert/toHtml.js +0 -80
  68. package/build/tableSchema/convert/toHtml.spec.d.ts +0 -1
  69. package/build/tableSchema/convert/toHtml.spec.js +0 -375
  70. package/build/tableSchema/convert/toMarkdown.d.ts +0 -4
  71. package/build/tableSchema/convert/toMarkdown.js +0 -57
  72. package/build/tableSchema/convert/toMarkdown.spec.d.ts +0 -1
  73. package/build/tableSchema/convert/toMarkdown.spec.js +0 -141
  74. package/build/tableSchema/index.d.ts +0 -2
  75. package/build/tableSchema/index.js +0 -3
  76. /package/build/{actions/tableSchema/asHtml.spec.d.ts → examples/client.d.ts} +0 -0
  77. /package/build/{actions/tableSchema/asMarkdown.spec.d.ts → main.d.ts} +0 -0
@@ -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;
@@ -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,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;