@fairspec/agent 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +9 -0
- package/README.md +3 -0
- package/build/actions/tableSchema/asHtml.d.ts +4 -0
- package/build/actions/tableSchema/asHtml.js +82 -0
- package/build/actions/tableSchema/asHtml.spec.d.ts +1 -0
- package/build/actions/tableSchema/asHtml.spec.js +356 -0
- package/build/actions/tableSchema/asMarkdown.d.ts +4 -0
- package/build/actions/tableSchema/asMarkdown.js +65 -0
- package/build/actions/tableSchema/asMarkdown.spec.d.ts +1 -0
- package/build/actions/tableSchema/asMarkdown.spec.js +133 -0
- package/build/document/Document.d.ts +2 -0
- package/build/document/Document.js +2 -0
- package/build/document/index.d.ts +3 -0
- package/build/document/index.js +3 -0
- package/build/document/types/Base.d.ts +3 -0
- package/build/document/types/Base.js +2 -0
- package/build/document/types/Json.d.ts +5 -0
- package/build/document/types/Json.js +2 -0
- package/build/document/validate.d.ts +5 -0
- package/build/document/validate.js +23 -0
- package/build/document/validate.spec.d.ts +1 -0
- package/build/document/validate.spec.js +71 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +2 -0
- package/build/package.json +39 -0
- package/build/plugin.d.ts +6 -0
- package/build/plugin.js +15 -0
- package/build/schema/convert/toHtml.d.ts +4 -0
- package/build/schema/convert/toHtml.js +107 -0
- package/build/schema/convert/toHtml.spec.d.ts +1 -0
- package/build/schema/convert/toHtml.spec.js +432 -0
- package/build/schema/convert/toMarkdown.d.ts +4 -0
- package/build/schema/convert/toMarkdown.js +75 -0
- package/build/schema/convert/toMarkdown.spec.d.ts +1 -0
- package/build/schema/convert/toMarkdown.spec.js +137 -0
- package/build/schema/index.d.ts +2 -0
- package/build/schema/index.js +3 -0
- package/build/server.d.ts +2 -0
- package/build/server.js +29 -0
- package/build/tableSchema/convert/toHtml.d.ts +4 -0
- package/build/tableSchema/convert/toHtml.js +80 -0
- package/build/tableSchema/convert/toHtml.spec.d.ts +1 -0
- package/build/tableSchema/convert/toHtml.spec.js +375 -0
- package/build/tableSchema/convert/toMarkdown.d.ts +4 -0
- package/build/tableSchema/convert/toMarkdown.js +57 -0
- package/build/tableSchema/convert/toMarkdown.spec.d.ts +1 -0
- package/build/tableSchema/convert/toMarkdown.spec.js +141 -0
- package/build/tableSchema/index.d.ts +2 -0
- package/build/tableSchema/index.js +3 -0
- package/build/tools/data/validate.d.ts +971 -0
- package/build/tools/data/validate.js +15 -0
- package/build/tools/data/validate.spec.d.ts +1 -0
- package/build/tools/data/validate.spec.js +228 -0
- package/build/tools/dataSchema/infer.d.ts +797 -0
- package/build/tools/dataSchema/infer.js +15 -0
- package/build/tools/dataSchema/infer.spec.d.ts +1 -0
- package/build/tools/dataSchema/infer.spec.js +215 -0
- package/build/tools/dataSchema/validate.d.ts +177 -0
- package/build/tools/dataSchema/validate.js +17 -0
- package/build/tools/dataSchema/validate.spec.d.ts +1 -0
- package/build/tools/dataSchema/validate.spec.js +148 -0
- package/build/tools/dataset/infer.d.ts +1985 -0
- package/build/tools/dataset/infer.js +15 -0
- package/build/tools/dataset/infer.spec.d.ts +1 -0
- package/build/tools/dataset/infer.spec.js +181 -0
- package/build/tools/dataset/validate.d.ts +1168 -0
- package/build/tools/dataset/validate.js +17 -0
- package/build/tools/dataset/validate.spec.d.ts +1 -0
- package/build/tools/dataset/validate.spec.js +212 -0
- package/build/tools/dialect/infer.d.ts +889 -0
- package/build/tools/dialect/infer.js +16 -0
- package/build/tools/dialect/infer.spec.d.ts +1 -0
- package/build/tools/dialect/infer.spec.js +138 -0
- package/build/tools/table/query.d.ts +798 -0
- package/build/tools/table/query.js +24 -0
- package/build/tools/table/query.spec.d.ts +1 -0
- package/build/tools/table/query.spec.js +138 -0
- package/build/tools/table/validate.d.ts +999 -0
- package/build/tools/table/validate.js +16 -0
- package/build/tools/table/validate.spec.d.ts +1 -0
- package/build/tools/table/validate.spec.js +106 -0
- package/build/tools/tableSchema/infer.d.ts +1316 -0
- package/build/tools/tableSchema/infer.js +16 -0
- package/build/tools/tableSchema/infer.spec.d.ts +1 -0
- package/build/tools/tableSchema/infer.spec.js +152 -0
- package/build/tools/tableSchema/validate.d.ts +177 -0
- package/build/tools/tableSchema/validate.js +17 -0
- package/build/tools/tableSchema/validate.spec.d.ts +1 -0
- package/build/tools/tableSchema/validate.spec.js +121 -0
- package/package.json +39 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { convertTableSchemaToHtml } from "./toHtml.js";
|
|
3
|
+
describe("convertTableSchemaToHtml", () => {
|
|
4
|
+
it("converts a simple schema to html table", () => {
|
|
5
|
+
const schema = {
|
|
6
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
7
|
+
properties: {
|
|
8
|
+
id: {
|
|
9
|
+
type: "integer",
|
|
10
|
+
title: "Identifier",
|
|
11
|
+
description: "Unique identifier",
|
|
12
|
+
},
|
|
13
|
+
name: {
|
|
14
|
+
type: "string",
|
|
15
|
+
title: "Name",
|
|
16
|
+
description: "Person name",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
const result = convertTableSchemaToHtml(schema);
|
|
21
|
+
expect(result).toContain("<h2>Columns</h2>");
|
|
22
|
+
expect(result).toContain("<table>");
|
|
23
|
+
expect(result).toContain("<th>Name</th>");
|
|
24
|
+
expect(result).toContain("<th>Definition</th>");
|
|
25
|
+
expect(result).toContain("<th>Type</th>");
|
|
26
|
+
expect(result).toContain("<strong>id?</strong>");
|
|
27
|
+
expect(result).toContain("<strong>name?</strong>");
|
|
28
|
+
expect(result).toContain("<p>Unique identifier</p>");
|
|
29
|
+
expect(result).toContain("<p>Person name</p>");
|
|
30
|
+
expect(result).toContain("<code>integer</code>");
|
|
31
|
+
expect(result).toContain("<code>string</code>");
|
|
32
|
+
});
|
|
33
|
+
it("handles column constraints", () => {
|
|
34
|
+
const schema = {
|
|
35
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
36
|
+
properties: {
|
|
37
|
+
age: {
|
|
38
|
+
type: "integer",
|
|
39
|
+
minimum: 0,
|
|
40
|
+
maximum: 120,
|
|
41
|
+
},
|
|
42
|
+
email: {
|
|
43
|
+
type: "string",
|
|
44
|
+
pattern: "^[a-z]+@[a-z]+\\.[a-z]+$",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ["age", "email"],
|
|
48
|
+
};
|
|
49
|
+
const result = convertTableSchemaToHtml(schema);
|
|
50
|
+
expect(result).toContain("<strong>Constraints</strong>");
|
|
51
|
+
expect(result).toContain("minimum:");
|
|
52
|
+
expect(result).toContain("<code>0</code>");
|
|
53
|
+
expect(result).toContain("maximum:");
|
|
54
|
+
expect(result).toContain("<code>120</code>");
|
|
55
|
+
expect(result).toContain("pattern:");
|
|
56
|
+
});
|
|
57
|
+
it("handles required field indicator", () => {
|
|
58
|
+
const schema = {
|
|
59
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
60
|
+
properties: {
|
|
61
|
+
requiredField: {
|
|
62
|
+
type: "string",
|
|
63
|
+
},
|
|
64
|
+
optionalField: {
|
|
65
|
+
type: "string",
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
required: ["requiredField"],
|
|
69
|
+
};
|
|
70
|
+
const result = convertTableSchemaToHtml(schema);
|
|
71
|
+
expect(result).toContain("<strong>requiredField</strong>");
|
|
72
|
+
expect(result).not.toContain("requiredField?");
|
|
73
|
+
expect(result).toContain("<strong>optionalField?</strong>");
|
|
74
|
+
});
|
|
75
|
+
it("handles empty properties object", () => {
|
|
76
|
+
const schema = {
|
|
77
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
78
|
+
properties: {},
|
|
79
|
+
};
|
|
80
|
+
const result = convertTableSchemaToHtml(schema);
|
|
81
|
+
expect(result).toContain("<h2>Columns</h2>");
|
|
82
|
+
expect(result).toContain("<table>");
|
|
83
|
+
expect(result).toContain("</table>");
|
|
84
|
+
});
|
|
85
|
+
it("escapes HTML special characters", () => {
|
|
86
|
+
const schema = {
|
|
87
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
88
|
+
properties: {
|
|
89
|
+
field: {
|
|
90
|
+
type: "string",
|
|
91
|
+
description: "Description with <script>alert('xss')</script>",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
const result = convertTableSchemaToHtml(schema);
|
|
96
|
+
expect(result).toContain("Description with <script>alert('xss')</script>");
|
|
97
|
+
});
|
|
98
|
+
it("handles columns with enum constraints", () => {
|
|
99
|
+
const schema = {
|
|
100
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
101
|
+
properties: {
|
|
102
|
+
status: {
|
|
103
|
+
type: "string",
|
|
104
|
+
enum: ["active", "inactive", "pending"],
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
const result = convertTableSchemaToHtml(schema);
|
|
109
|
+
expect(result).toContain("enum:");
|
|
110
|
+
expect(result).toContain("<code>active, inactive, pending</code>");
|
|
111
|
+
});
|
|
112
|
+
it("handles multiple constraint types", () => {
|
|
113
|
+
const schema = {
|
|
114
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
115
|
+
properties: {
|
|
116
|
+
username: {
|
|
117
|
+
type: "string",
|
|
118
|
+
minLength: 3,
|
|
119
|
+
maxLength: 20,
|
|
120
|
+
pattern: "^[a-zA-Z0-9_]+$",
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
required: ["username"],
|
|
124
|
+
};
|
|
125
|
+
const result = convertTableSchemaToHtml(schema);
|
|
126
|
+
expect(result).toContain("minLength:");
|
|
127
|
+
expect(result).toContain("<code>3</code>");
|
|
128
|
+
expect(result).toContain("maxLength:");
|
|
129
|
+
expect(result).toContain("<code>20</code>");
|
|
130
|
+
expect(result).toContain("pattern:");
|
|
131
|
+
});
|
|
132
|
+
it("handles different column types", () => {
|
|
133
|
+
const schema = {
|
|
134
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
135
|
+
properties: {
|
|
136
|
+
field1: { type: "string" },
|
|
137
|
+
field2: { type: "integer" },
|
|
138
|
+
field3: { type: "number" },
|
|
139
|
+
field4: { type: "boolean" },
|
|
140
|
+
field5: { type: "string", format: "date-time" },
|
|
141
|
+
field6: { type: "array" },
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
const result = convertTableSchemaToHtml(schema);
|
|
145
|
+
expect(result).toContain("<code>string</code>");
|
|
146
|
+
expect(result).toContain("<code>integer</code>");
|
|
147
|
+
expect(result).toContain("<code>number</code>");
|
|
148
|
+
expect(result).toContain("<code>boolean</code>");
|
|
149
|
+
expect(result).toContain("<code>array</code>");
|
|
150
|
+
});
|
|
151
|
+
it("sanitizes IDs for anchors", () => {
|
|
152
|
+
const schema = {
|
|
153
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
154
|
+
properties: {
|
|
155
|
+
"field-with-dashes": {
|
|
156
|
+
type: "string",
|
|
157
|
+
},
|
|
158
|
+
"Field With Spaces": {
|
|
159
|
+
type: "string",
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
const result = convertTableSchemaToHtml(schema);
|
|
164
|
+
expect(result).toContain('id="field-with-dashes"');
|
|
165
|
+
expect(result).toContain('id="field-with-spaces"');
|
|
166
|
+
});
|
|
167
|
+
it("does not include top-level html tags", () => {
|
|
168
|
+
const schema = {
|
|
169
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
170
|
+
properties: {
|
|
171
|
+
field1: { type: "string" },
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
const result = convertTableSchemaToHtml(schema);
|
|
175
|
+
expect(result).not.toContain("<!DOCTYPE");
|
|
176
|
+
expect(result).not.toContain("<html>");
|
|
177
|
+
expect(result).not.toContain("<head>");
|
|
178
|
+
expect(result).not.toContain("<body>");
|
|
179
|
+
expect(result).not.toContain("<style>");
|
|
180
|
+
});
|
|
181
|
+
it("handles column without description", () => {
|
|
182
|
+
const schema = {
|
|
183
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
184
|
+
properties: {
|
|
185
|
+
field1: {
|
|
186
|
+
type: "string",
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
const result = convertTableSchemaToHtml(schema);
|
|
191
|
+
expect(result).toContain("<strong>field1?</strong>");
|
|
192
|
+
expect(result).toContain("<code>string</code>");
|
|
193
|
+
});
|
|
194
|
+
it("uses frontmatter when frontmatter option is true", () => {
|
|
195
|
+
const schema = {
|
|
196
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
197
|
+
properties: {
|
|
198
|
+
field1: {
|
|
199
|
+
type: "string",
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
const result = convertTableSchemaToHtml(schema, { frontmatter: true });
|
|
204
|
+
expect(result).toContain("---");
|
|
205
|
+
expect(result).toContain("title: Table Schema");
|
|
206
|
+
});
|
|
207
|
+
it("handles schema with primary key", () => {
|
|
208
|
+
const schema = {
|
|
209
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
210
|
+
properties: {
|
|
211
|
+
id: {
|
|
212
|
+
type: "integer",
|
|
213
|
+
},
|
|
214
|
+
name: {
|
|
215
|
+
type: "string",
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
primaryKey: ["id"],
|
|
219
|
+
};
|
|
220
|
+
const result = convertTableSchemaToHtml(schema);
|
|
221
|
+
expect(result).toContain("<h2>Primary Key</h2>");
|
|
222
|
+
expect(result).toContain("<code>id</code>");
|
|
223
|
+
});
|
|
224
|
+
it("handles schema with composite primary key", () => {
|
|
225
|
+
const schema = {
|
|
226
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
227
|
+
properties: {
|
|
228
|
+
user_id: {
|
|
229
|
+
type: "integer",
|
|
230
|
+
},
|
|
231
|
+
project_id: {
|
|
232
|
+
type: "integer",
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
primaryKey: ["user_id", "project_id"],
|
|
236
|
+
};
|
|
237
|
+
const result = convertTableSchemaToHtml(schema);
|
|
238
|
+
expect(result).toContain("<h2>Primary Key</h2>");
|
|
239
|
+
expect(result).toContain("<code>user_id, project_id</code>");
|
|
240
|
+
});
|
|
241
|
+
it("handles schema with foreign keys", () => {
|
|
242
|
+
const schema = {
|
|
243
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
244
|
+
properties: {
|
|
245
|
+
user_id: {
|
|
246
|
+
type: "integer",
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
foreignKeys: [
|
|
250
|
+
{
|
|
251
|
+
columns: ["user_id"],
|
|
252
|
+
reference: {
|
|
253
|
+
resource: "users",
|
|
254
|
+
columns: ["id"],
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
};
|
|
259
|
+
const result = convertTableSchemaToHtml(schema);
|
|
260
|
+
expect(result).toContain("<h2>Foreign Keys</h2>");
|
|
261
|
+
expect(result).toContain("<th>Columns</th>");
|
|
262
|
+
expect(result).toContain("<th>Reference Resource</th>");
|
|
263
|
+
expect(result).toContain("<th>Reference Columns</th>");
|
|
264
|
+
expect(result).toContain("<code>user_id</code>");
|
|
265
|
+
expect(result).toContain("<code>users</code>");
|
|
266
|
+
expect(result).toContain("<code>id</code>");
|
|
267
|
+
});
|
|
268
|
+
it("handles schema with multiple foreign keys", () => {
|
|
269
|
+
const schema = {
|
|
270
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
271
|
+
properties: {
|
|
272
|
+
user_id: {
|
|
273
|
+
type: "integer",
|
|
274
|
+
},
|
|
275
|
+
project_id: {
|
|
276
|
+
type: "integer",
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
foreignKeys: [
|
|
280
|
+
{
|
|
281
|
+
columns: ["user_id"],
|
|
282
|
+
reference: {
|
|
283
|
+
resource: "users",
|
|
284
|
+
columns: ["id"],
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
columns: ["project_id"],
|
|
289
|
+
reference: {
|
|
290
|
+
resource: "projects",
|
|
291
|
+
columns: ["id"],
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
],
|
|
295
|
+
};
|
|
296
|
+
const result = convertTableSchemaToHtml(schema);
|
|
297
|
+
expect(result).toContain("<h2>Foreign Keys</h2>");
|
|
298
|
+
expect(result).toContain("<code>user_id</code>");
|
|
299
|
+
expect(result).toContain("<code>users</code>");
|
|
300
|
+
expect(result).toContain("<code>project_id</code>");
|
|
301
|
+
expect(result).toContain("<code>projects</code>");
|
|
302
|
+
});
|
|
303
|
+
it("handles foreign key without resource specified", () => {
|
|
304
|
+
const schema = {
|
|
305
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
306
|
+
properties: {
|
|
307
|
+
parent_id: {
|
|
308
|
+
type: "integer",
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
foreignKeys: [
|
|
312
|
+
{
|
|
313
|
+
columns: ["parent_id"],
|
|
314
|
+
reference: {
|
|
315
|
+
columns: ["id"],
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
};
|
|
320
|
+
const result = convertTableSchemaToHtml(schema);
|
|
321
|
+
expect(result).toContain("<h2>Foreign Keys</h2>");
|
|
322
|
+
expect(result).toContain("<code>parent_id</code>");
|
|
323
|
+
expect(result).toContain("<code>-</code>");
|
|
324
|
+
expect(result).toContain("<code>id</code>");
|
|
325
|
+
});
|
|
326
|
+
it("does not render primary key or foreign keys sections when not present", () => {
|
|
327
|
+
const schema = {
|
|
328
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
329
|
+
properties: {
|
|
330
|
+
field1: {
|
|
331
|
+
type: "string",
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
};
|
|
335
|
+
const result = convertTableSchemaToHtml(schema);
|
|
336
|
+
expect(result).not.toContain("<h2>Primary Key</h2>");
|
|
337
|
+
expect(result).not.toContain("<h2>Foreign Keys</h2>");
|
|
338
|
+
});
|
|
339
|
+
it("handles string categories", () => {
|
|
340
|
+
const schema = {
|
|
341
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
342
|
+
properties: {
|
|
343
|
+
status: {
|
|
344
|
+
type: "string",
|
|
345
|
+
categories: ["active", "inactive"],
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
const result = convertTableSchemaToHtml(schema);
|
|
350
|
+
expect(result).toContain("<strong>Categories</strong>");
|
|
351
|
+
expect(result).toContain("<code>active</code>");
|
|
352
|
+
expect(result).toContain("<code>inactive</code>");
|
|
353
|
+
});
|
|
354
|
+
it("handles integer categories with labels", () => {
|
|
355
|
+
const schema = {
|
|
356
|
+
$schema: "https://fairspec.org/profiles/latest/table.json",
|
|
357
|
+
properties: {
|
|
358
|
+
level: {
|
|
359
|
+
type: "integer",
|
|
360
|
+
categories: [
|
|
361
|
+
{ value: 1, label: "Beginner" },
|
|
362
|
+
{ value: 2, label: "Advanced" },
|
|
363
|
+
],
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
};
|
|
367
|
+
const result = convertTableSchemaToHtml(schema);
|
|
368
|
+
expect(result).toContain("<strong>Categories</strong>");
|
|
369
|
+
expect(result).toContain("<code>1</code>");
|
|
370
|
+
expect(result).toContain(" - Beginner");
|
|
371
|
+
expect(result).toContain("<code>2</code>");
|
|
372
|
+
expect(result).toContain(" - Advanced");
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9IdG1sLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90YWJsZVNjaGVtYS9jb252ZXJ0L3RvSHRtbC5zcGVjLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sYUFBYyxDQUFBO0FBRXZELFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDeEMsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLE1BQU0sR0FBZ0I7WUFDMUIsT0FBTyxFQUFFLGlEQUFpRDtZQUMxRCxVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFO29CQUNGLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxZQUFZO29CQUNuQixXQUFXLEVBQUUsbUJBQW1CO2lCQUNqQztnQkFDRCxJQUFJLEVBQUU7b0JBQ0osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLE1BQU07b0JBQ2IsV0FBVyxFQUFFLGFBQWE7aUJBQzNCO2FBQ0Y7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6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LGFBQWEsQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRhYmxlU2NoZW1hIH0gZnJvbSBcIkBmYWlyc3BlYy9tZXRhZGF0YVwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgY29udmVydFRhYmxlU2NoZW1hVG9IdG1sIH0gZnJvbSBcIi4vdG9IdG1sLnRzeFwiXG5cbmRlc2NyaWJlKFwiY29udmVydFRhYmxlU2NoZW1hVG9IdG1sXCIsICgpID0+IHtcbiAgaXQoXCJjb252ZXJ0cyBhIHNpbXBsZSBzY2hlbWEgdG8gaHRtbCB0YWJsZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgICRzY2hlbWE6IFwiaHR0cHM6Ly9mYWlyc3BlYy5vcmcvcHJvZmlsZXMvbGF0ZXN0L3RhYmxlLmpzb25cIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgICB0aXRsZTogXCJJZGVudGlmaWVyXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVW5pcXVlIGlkZW50aWZpZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZToge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgdGl0bGU6IFwiTmFtZVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBlcnNvbiBuYW1lXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8aDI+Q29sdW1uczwvaDI+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHRhYmxlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjx0aD5OYW1lPC90aD5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8dGg+RGVmaW5pdGlvbjwvdGg+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHRoPlR5cGU8L3RoPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxzdHJvbmc+aWQ/PC9zdHJvbmc+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHN0cm9uZz5uYW1lPzwvc3Ryb25nPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxwPlVuaXF1ZSBpZGVudGlmaWVyPC9wPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxwPlBlcnNvbiBuYW1lPC9wPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmludGVnZXI8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+c3RyaW5nPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBjb2x1bW4gY29uc3RyYWludHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZmFpcnNwZWMub3JnL3Byb2ZpbGVzL2xhdGVzdC90YWJsZS5qc29uXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGFnZToge1xuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuXG4gICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICBtYXhpbXVtOiAxMjAsXG4gICAgICAgIH0sXG4gICAgICAgIGVtYWlsOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBwYXR0ZXJuOiBcIl5bYS16XStAW2Etel0rXFxcXC5bYS16XSskXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFtcImFnZVwiLCBcImVtYWlsXCJdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8c3Ryb25nPkNvbnN0cmFpbnRzPC9zdHJvbmc+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwibWluaW11bTpcIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT4wPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIm1heGltdW06XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+MTIwPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcInBhdHRlcm46XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHJlcXVpcmVkIGZpZWxkIGluZGljYXRvclwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgICRzY2hlbWE6IFwiaHR0cHM6Ly9mYWlyc3BlYy5vcmcvcHJvZmlsZXMvbGF0ZXN0L3RhYmxlLmpzb25cIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgcmVxdWlyZWRGaWVsZDoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbmFsRmllbGQ6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbXCJyZXF1aXJlZEZpZWxkXCJdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8c3Ryb25nPnJlcXVpcmVkRmllbGQ8L3N0cm9uZz5cIilcbiAgICBleHBlY3QocmVzdWx0KS5ub3QudG9Db250YWluKFwicmVxdWlyZWRGaWVsZD9cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8c3Ryb25nPm9wdGlvbmFsRmllbGQ/PC9zdHJvbmc+XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGVtcHR5IHByb3BlcnRpZXMgb2JqZWN0XCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvdGFibGUuanNvblwiLFxuICAgICAgcHJvcGVydGllczoge30sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRhYmxlU2NoZW1hVG9IdG1sKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxoMj5Db2x1bW5zPC9oMj5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8dGFibGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPC90YWJsZT5cIilcbiAgfSlcblxuICBpdChcImVzY2FwZXMgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZmFpcnNwZWMub3JnL3Byb2ZpbGVzL2xhdGVzdC90YWJsZS5qc29uXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGZpZWxkOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJEZXNjcmlwdGlvbiB3aXRoIDxzY3JpcHQ+YWxlcnQoJ3hzcycpPC9zY3JpcHQ+XCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXG4gICAgICBcIkRlc2NyaXB0aW9uIHdpdGggJmx0O3NjcmlwdCZndDthbGVydCgmI3gyNzt4c3MmI3gyNzspJmx0Oy9zY3JpcHQmZ3Q7XCIsXG4gICAgKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBjb2x1bW5zIHdpdGggZW51bSBjb25zdHJhaW50c1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgICRzY2hlbWE6IFwiaHR0cHM6Ly9mYWlyc3BlYy5vcmcvcHJvZmlsZXMvbGF0ZXN0L3RhYmxlLmpzb25cIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBlbnVtOiBbXCJhY3RpdmVcIiwgXCJpbmFjdGl2ZVwiLCBcInBlbmRpbmdcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJlbnVtOlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmFjdGl2ZSwgaW5hY3RpdmUsIHBlbmRpbmc8L2NvZGU+XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIG11bHRpcGxlIGNvbnN0cmFpbnQgdHlwZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZmFpcnNwZWMub3JnL3Byb2ZpbGVzL2xhdGVzdC90YWJsZS5qc29uXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBtaW5MZW5ndGg6IDMsXG4gICAgICAgICAgbWF4TGVuZ3RoOiAyMCxcbiAgICAgICAgICBwYXR0ZXJuOiBcIl5bYS16QS1aMC05X10rJFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbXCJ1c2VybmFtZVwiXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VGFibGVTY2hlbWFUb0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwibWluTGVuZ3RoOlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPjM8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwibWF4TGVuZ3RoOlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPjIwPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcInBhdHRlcm46XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGRpZmZlcmVudCBjb2x1bW4gdHlwZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZmFpcnNwZWMub3JnL3Byb2ZpbGVzL2xhdGVzdC90YWJsZS5qc29uXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGZpZWxkMTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIGZpZWxkMjogeyB0eXBlOiBcImludGVnZXJcIiB9LFxuICAgICAgICBmaWVsZDM6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICBmaWVsZDQ6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgZmllbGQ1OiB7IHR5cGU6IFwic3RyaW5nXCIsIGZvcm1hdDogXCJkYXRlLXRpbWVcIiB9LFxuICAgICAgICBmaWVsZDY6IHsgdHlwZTogXCJhcnJheVwiIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5zdHJpbmc8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+aW50ZWdlcjwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5udW1iZXI8L2NvZGU+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+Ym9vbGVhbjwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5hcnJheTwvY29kZT5cIilcbiAgfSlcblxuICBpdChcInNhbml0aXplcyBJRHMgZm9yIGFuY2hvcnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZmFpcnNwZWMub3JnL3Byb2ZpbGVzL2xhdGVzdC90YWJsZS5qc29uXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFwiZmllbGQtd2l0aC1kYXNoZXNcIjoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiRmllbGQgV2l0aCBTcGFjZXNcIjoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oJ2lkPVwiZmllbGQtd2l0aC1kYXNoZXNcIicpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKCdpZD1cImZpZWxkLXdpdGgtc3BhY2VzXCInKVxuICB9KVxuXG4gIGl0KFwiZG9lcyBub3QgaW5jbHVkZSB0b3AtbGV2ZWwgaHRtbCB0YWdzXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvdGFibGUuanNvblwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZDE6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VGFibGVTY2hlbWFUb0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihcIjwhRE9DVFlQRVwiKVxuICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0NvbnRhaW4oXCI8aHRtbD5cIilcbiAgICBleHBlY3QocmVzdWx0KS5ub3QudG9Db250YWluKFwiPGhlYWQ+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihcIjxib2R5PlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0NvbnRhaW4oXCI8c3R5bGU+XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGNvbHVtbiB3aXRob3V0IGRlc2NyaXB0aW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvdGFibGUuanNvblwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZDE6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VGFibGVTY2hlbWFUb0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHN0cm9uZz5maWVsZDE/PC9zdHJvbmc+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+c3RyaW5nPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwidXNlcyBmcm9udG1hdHRlciB3aGVuIGZyb250bWF0dGVyIG9wdGlvbiBpcyB0cnVlXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvdGFibGUuanNvblwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZDE6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VGFibGVTY2hlbWFUb0h0bWwoc2NoZW1hLCB7IGZyb250bWF0dGVyOiB0cnVlIH0pXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCItLS1cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJ0aXRsZTogVGFibGUgU2NoZW1hXCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHNjaGVtYSB3aXRoIHByaW1hcnkga2V5XCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvdGFibGUuanNvblwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDoge1xuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHByaW1hcnlLZXk6IFtcImlkXCJdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8aDI+UHJpbWFyeSBLZXk8L2gyPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmlkPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBzY2hlbWEgd2l0aCBjb21wb3NpdGUgcHJpbWFyeSBrZXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZmFpcnNwZWMub3JnL3Byb2ZpbGVzL2xhdGVzdC90YWJsZS5qc29uXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVzZXJfaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcblxuICAgICAgICB9LFxuICAgICAgICBwcm9qZWN0X2lkOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG5cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwcmltYXJ5S2V5OiBbXCJ1c2VyX2lkXCIsIFwicHJvamVjdF9pZFwiXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VGFibGVTY2hlbWFUb0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGgyPlByaW1hcnkgS2V5PC9oMj5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT51c2VyX2lkLCBwcm9qZWN0X2lkPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBzY2hlbWEgd2l0aCBmb3JlaWduIGtleXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZmFpcnNwZWMub3JnL3Byb2ZpbGVzL2xhdGVzdC90YWJsZS5qc29uXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVzZXJfaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcblxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGZvcmVpZ25LZXlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb2x1bW5zOiBbXCJ1c2VyX2lkXCJdLFxuICAgICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgICAgcmVzb3VyY2U6IFwidXNlcnNcIixcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcImlkXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8aDI+Rm9yZWlnbiBLZXlzPC9oMj5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8dGg+Q29sdW1uczwvdGg+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHRoPlJlZmVyZW5jZSBSZXNvdXJjZTwvdGg+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPHRoPlJlZmVyZW5jZSBDb2x1bW5zPC90aD5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT51c2VyX2lkPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPnVzZXJzPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmlkPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBzY2hlbWEgd2l0aCBtdWx0aXBsZSBmb3JlaWduIGtleXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogVGFibGVTY2hlbWEgPSB7XG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZmFpcnNwZWMub3JnL3Byb2ZpbGVzL2xhdGVzdC90YWJsZS5qc29uXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVzZXJfaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcblxuICAgICAgICB9LFxuICAgICAgICBwcm9qZWN0X2lkOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG5cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBmb3JlaWduS2V5czogW1xuICAgICAgICB7XG4gICAgICAgICAgY29sdW1uczogW1widXNlcl9pZFwiXSxcbiAgICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICAgIHJlc291cmNlOiBcInVzZXJzXCIsXG4gICAgICAgICAgICBjb2x1bW5zOiBbXCJpZFwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29sdW1uczogW1wicHJvamVjdF9pZFwiXSxcbiAgICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICAgIHJlc291cmNlOiBcInByb2plY3RzXCIsXG4gICAgICAgICAgICBjb2x1bW5zOiBbXCJpZFwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VGFibGVTY2hlbWFUb0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGgyPkZvcmVpZ24gS2V5czwvaDI+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+dXNlcl9pZDwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT51c2VyczwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5wcm9qZWN0X2lkPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPnByb2plY3RzPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBmb3JlaWduIGtleSB3aXRob3V0IHJlc291cmNlIHNwZWNpZmllZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgICRzY2hlbWE6IFwiaHR0cHM6Ly9mYWlyc3BlYy5vcmcvcHJvZmlsZXMvbGF0ZXN0L3RhYmxlLmpzb25cIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgcGFyZW50X2lkOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG5cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBmb3JlaWduS2V5czogW1xuICAgICAgICB7XG4gICAgICAgICAgY29sdW1uczogW1wicGFyZW50X2lkXCJdLFxuICAgICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgICAgY29sdW1uczogW1wiaWRcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRhYmxlU2NoZW1hVG9IdG1sKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxoMj5Gb3JlaWduIEtleXM8L2gyPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPnBhcmVudF9pZDwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT4tPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmlkPC9jb2RlPlwiKVxuICB9KVxuXG4gIGl0KFwiZG9lcyBub3QgcmVuZGVyIHByaW1hcnkga2V5IG9yIGZvcmVpZ24ga2V5cyBzZWN0aW9ucyB3aGVuIG5vdCBwcmVzZW50XCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvdGFibGUuanNvblwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZDE6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VGFibGVTY2hlbWFUb0h0bWwoc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihcIjxoMj5QcmltYXJ5IEtleTwvaDI+XCIpXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihcIjxoMj5Gb3JlaWduIEtleXM8L2gyPlwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBzdHJpbmcgY2F0ZWdvcmllc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBUYWJsZVNjaGVtYSA9IHtcbiAgICAgICRzY2hlbWE6IFwiaHR0cHM6Ly9mYWlyc3BlYy5vcmcvcHJvZmlsZXMvbGF0ZXN0L3RhYmxlLmpzb25cIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJhY3RpdmVcIiwgXCJpbmFjdGl2ZVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRhYmxlU2NoZW1hVG9IdG1sKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxzdHJvbmc+Q2F0ZWdvcmllczwvc3Ryb25nPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIjxjb2RlPmFjdGl2ZTwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT5pbmFjdGl2ZTwvY29kZT5cIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgaW50ZWdlciBjYXRlZ29yaWVzIHdpdGggbGFiZWxzXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFRhYmxlU2NoZW1hID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvdGFibGUuanNvblwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsZXZlbDoge1xuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuXG4gICAgICAgICAgY2F0ZWdvcmllczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogMSwgbGFiZWw6IFwiQmVnaW5uZXJcIiB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogMiwgbGFiZWw6IFwiQWR2YW5jZWRcIiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUYWJsZVNjaGVtYVRvSHRtbChzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8c3Ryb25nPkNhdGVnb3JpZXM8L3N0cm9uZz5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCI8Y29kZT4xPC9jb2RlPlwiKVxuICAgIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihcIiAtIEJlZ2lubmVyXCIpXG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiPGNvZGU+MjwvY29kZT5cIilcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCIgLSBBZHZhbmNlZFwiKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function convertTableSchemaToMarkdown(schema, options) {
|
|
2
|
+
const rows = [];
|
|
3
|
+
rows.push("");
|
|
4
|
+
rows.push("## Columns");
|
|
5
|
+
rows.push("");
|
|
6
|
+
rows.push("| Name | Type | Title | Description | Constraints |");
|
|
7
|
+
rows.push("|------|------|-------|-------------|-------------|");
|
|
8
|
+
const columns = Object.entries(schema.properties);
|
|
9
|
+
const required = schema.required || [];
|
|
10
|
+
for (const [name, column] of columns) {
|
|
11
|
+
const type = column.type || "any";
|
|
12
|
+
const title = column.title || "";
|
|
13
|
+
const description = column.description || "";
|
|
14
|
+
const constraints = [];
|
|
15
|
+
if (required.includes(name)) {
|
|
16
|
+
constraints.push("required");
|
|
17
|
+
}
|
|
18
|
+
if ("minimum" in column && column.minimum !== undefined) {
|
|
19
|
+
constraints.push(`min: ${column.minimum}`);
|
|
20
|
+
}
|
|
21
|
+
if ("maximum" in column && column.maximum !== undefined) {
|
|
22
|
+
constraints.push(`max: ${column.maximum}`);
|
|
23
|
+
}
|
|
24
|
+
if ("minLength" in column && column.minLength !== undefined) {
|
|
25
|
+
constraints.push(`minLength: ${column.minLength}`);
|
|
26
|
+
}
|
|
27
|
+
if ("maxLength" in column && column.maxLength !== undefined) {
|
|
28
|
+
constraints.push(`maxLength: ${column.maxLength}`);
|
|
29
|
+
}
|
|
30
|
+
if ("pattern" in column && column.pattern) {
|
|
31
|
+
constraints.push(`pattern: ${column.pattern}`);
|
|
32
|
+
}
|
|
33
|
+
if ("enum" in column && column.enum) {
|
|
34
|
+
constraints.push(`enum: ${column.enum.join(", ")}`);
|
|
35
|
+
}
|
|
36
|
+
const constraintsStr = constraints.join(", ");
|
|
37
|
+
const escapedName = escapeMarkdown(name);
|
|
38
|
+
const escapedTitle = escapeMarkdown(title);
|
|
39
|
+
const escapedDescription = escapeMarkdown(description);
|
|
40
|
+
const escapedConstraints = escapeMarkdown(constraintsStr);
|
|
41
|
+
rows.push(`| ${escapedName} | ${type} | ${escapedTitle} | ${escapedDescription} | ${escapedConstraints} |`);
|
|
42
|
+
}
|
|
43
|
+
let markdown = `${rows.join("\n")}\n`;
|
|
44
|
+
if (options?.frontmatter) {
|
|
45
|
+
const header = [];
|
|
46
|
+
header.push("---");
|
|
47
|
+
header.push("title: Table Schema");
|
|
48
|
+
header.push("---");
|
|
49
|
+
header.push("");
|
|
50
|
+
markdown = header.join("\n") + markdown;
|
|
51
|
+
}
|
|
52
|
+
return markdown;
|
|
53
|
+
}
|
|
54
|
+
function escapeMarkdown(text) {
|
|
55
|
+
return text.replace(/\n/g, " ");
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9NYXJrZG93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RhYmxlU2NoZW1hL2NvbnZlcnQvdG9NYXJrZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsNEJBQTRCLENBQzFDLE1BQW1CLEVBQ25CLE9BQW1DO0lBRW5DLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQTtJQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFBO0lBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMscURBQXFELENBQUMsQ0FBQTtJQUVoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNqRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtJQUV0QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUE7UUFDakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUE7UUFDaEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUE7UUFFNUMsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFBO1FBRWhDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVCLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDOUIsQ0FBQztRQUVELElBQUksU0FBUyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hELFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUM1QyxDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEQsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzVDLENBQUM7UUFDRCxJQUFJLFdBQVcsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1RCxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDcEQsQ0FBQztRQUNELElBQUksV0FBVyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVELFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDaEQsQ0FBQztRQUNELElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNyRCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU3QyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRXpELElBQUksQ0FBQyxJQUFJLENBQ1AsS0FBSyxXQUFXLE1BQU0sSUFBSSxNQUFNLFlBQVksTUFBTSxrQkFBa0IsTUFBTSxrQkFBa0IsSUFBSSxDQUNqRyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBRXJDLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQTtRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUE7SUFDekMsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFZO0lBQ2xDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVGFibGVTY2hlbWEgfSBmcm9tIFwiQGZhaXJzcGVjL21ldGFkYXRhXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUYWJsZVNjaGVtYVRvTWFya2Rvd24oXG4gIHNjaGVtYTogVGFibGVTY2hlbWEsXG4gIG9wdGlvbnM/OiB7IGZyb250bWF0dGVyPzogYm9vbGVhbiB9LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgcm93czogc3RyaW5nW10gPSBbXVxuXG4gIHJvd3MucHVzaChcIlwiKVxuICByb3dzLnB1c2goXCIjIyBDb2x1bW5zXCIpXG4gIHJvd3MucHVzaChcIlwiKVxuICByb3dzLnB1c2goXCJ8IE5hbWUgfCBUeXBlIHwgVGl0bGUgfCBEZXNjcmlwdGlvbiB8IENvbnN0cmFpbnRzIHxcIilcbiAgcm93cy5wdXNoKFwifC0tLS0tLXwtLS0tLS18LS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18XCIpXG5cbiAgY29uc3QgY29sdW1ucyA9IE9iamVjdC5lbnRyaWVzKHNjaGVtYS5wcm9wZXJ0aWVzKVxuICBjb25zdCByZXF1aXJlZCA9IHNjaGVtYS5yZXF1aXJlZCB8fCBbXVxuXG4gIGZvciAoY29uc3QgW25hbWUsIGNvbHVtbl0gb2YgY29sdW1ucykge1xuICAgIGNvbnN0IHR5cGUgPSBjb2x1bW4udHlwZSB8fCBcImFueVwiXG4gICAgY29uc3QgdGl0bGUgPSBjb2x1bW4udGl0bGUgfHwgXCJcIlxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gY29sdW1uLmRlc2NyaXB0aW9uIHx8IFwiXCJcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzOiBzdHJpbmdbXSA9IFtdXG5cbiAgICBpZiAocmVxdWlyZWQuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goXCJyZXF1aXJlZFwiKVxuICAgIH1cblxuICAgIGlmIChcIm1pbmltdW1cIiBpbiBjb2x1bW4gJiYgY29sdW1uLm1pbmltdW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3RyYWludHMucHVzaChgbWluOiAke2NvbHVtbi5taW5pbXVtfWApXG4gICAgfVxuICAgIGlmIChcIm1heGltdW1cIiBpbiBjb2x1bW4gJiYgY29sdW1uLm1heGltdW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3RyYWludHMucHVzaChgbWF4OiAke2NvbHVtbi5tYXhpbXVtfWApXG4gICAgfVxuICAgIGlmIChcIm1pbkxlbmd0aFwiIGluIGNvbHVtbiAmJiBjb2x1bW4ubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goYG1pbkxlbmd0aDogJHtjb2x1bW4ubWluTGVuZ3RofWApXG4gICAgfVxuICAgIGlmIChcIm1heExlbmd0aFwiIGluIGNvbHVtbiAmJiBjb2x1bW4ubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goYG1heExlbmd0aDogJHtjb2x1bW4ubWF4TGVuZ3RofWApXG4gICAgfVxuICAgIGlmIChcInBhdHRlcm5cIiBpbiBjb2x1bW4gJiYgY29sdW1uLnBhdHRlcm4pIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goYHBhdHRlcm46ICR7Y29sdW1uLnBhdHRlcm59YClcbiAgICB9XG4gICAgaWYgKFwiZW51bVwiIGluIGNvbHVtbiAmJiBjb2x1bW4uZW51bSkge1xuICAgICAgY29uc3RyYWludHMucHVzaChgZW51bTogJHtjb2x1bW4uZW51bS5qb2luKFwiLCBcIil9YClcbiAgICB9XG5cbiAgICBjb25zdCBjb25zdHJhaW50c1N0ciA9IGNvbnN0cmFpbnRzLmpvaW4oXCIsIFwiKVxuXG4gICAgY29uc3QgZXNjYXBlZE5hbWUgPSBlc2NhcGVNYXJrZG93bihuYW1lKVxuICAgIGNvbnN0IGVzY2FwZWRUaXRsZSA9IGVzY2FwZU1hcmtkb3duKHRpdGxlKVxuICAgIGNvbnN0IGVzY2FwZWREZXNjcmlwdGlvbiA9IGVzY2FwZU1hcmtkb3duKGRlc2NyaXB0aW9uKVxuICAgIGNvbnN0IGVzY2FwZWRDb25zdHJhaW50cyA9IGVzY2FwZU1hcmtkb3duKGNvbnN0cmFpbnRzU3RyKVxuXG4gICAgcm93cy5wdXNoKFxuICAgICAgYHwgJHtlc2NhcGVkTmFtZX0gfCAke3R5cGV9IHwgJHtlc2NhcGVkVGl0bGV9IHwgJHtlc2NhcGVkRGVzY3JpcHRpb259IHwgJHtlc2NhcGVkQ29uc3RyYWludHN9IHxgLFxuICAgIClcbiAgfVxuXG4gIGxldCBtYXJrZG93biA9IGAke3Jvd3Muam9pbihcIlxcblwiKX1cXG5gXG5cbiAgaWYgKG9wdGlvbnM/LmZyb250bWF0dGVyKSB7XG4gICAgY29uc3QgaGVhZGVyOiBzdHJpbmdbXSA9IFtdXG4gICAgaGVhZGVyLnB1c2goXCItLS1cIilcbiAgICBoZWFkZXIucHVzaChcInRpdGxlOiBUYWJsZSBTY2hlbWFcIilcbiAgICBoZWFkZXIucHVzaChcIi0tLVwiKVxuICAgIGhlYWRlci5wdXNoKFwiXCIpXG4gICAgbWFya2Rvd24gPSBoZWFkZXIuam9pbihcIlxcblwiKSArIG1hcmtkb3duXG4gIH1cblxuICByZXR1cm4gbWFya2Rvd25cbn1cblxuZnVuY3Rpb24gZXNjYXBlTWFya2Rvd24odGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFxuL2csIFwiIFwiKVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|