@frictionless-ts/metadata 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/build/assets/dialect-1.0.json +58 -0
- package/build/assets/dialect-2.0.json +98 -0
- package/build/assets/package-1.0.json +1517 -0
- package/build/assets/package-2.0.json +2168 -0
- package/build/assets/resource-1.0.json +1353 -0
- package/build/assets/resource-2.0.json +1987 -0
- package/build/assets/schema-1.0.json +1126 -0
- package/build/assets/schema-2.0.json +1715 -0
- package/build/descriptor/Descriptor.d.ts +2 -0
- package/build/descriptor/Descriptor.js +4 -0
- package/build/descriptor/index.d.ts +6 -0
- package/build/descriptor/index.js +6 -0
- package/build/descriptor/load.d.ts +8 -0
- package/build/descriptor/load.js +36 -0
- package/build/descriptor/load.spec.d.ts +1 -0
- package/build/descriptor/load.spec.js +44 -0
- package/build/descriptor/process/parse.d.ts +2 -0
- package/build/descriptor/process/parse.js +8 -0
- package/build/descriptor/process/stringify.d.ts +2 -0
- package/build/descriptor/process/stringify.js +4 -0
- package/build/descriptor/save.d.ts +9 -0
- package/build/descriptor/save.js +19 -0
- package/build/descriptor/save.spec.d.ts +1 -0
- package/build/descriptor/save.spec.js +99 -0
- package/build/dialect/Dialect.d.ts +89 -0
- package/build/dialect/Dialect.js +2 -0
- package/build/dialect/assert.d.ts +6 -0
- package/build/dialect/assert.js +12 -0
- package/build/dialect/assert.spec.d.ts +1 -0
- package/build/dialect/assert.spec.js +22 -0
- package/build/dialect/convert/fromDescriptor.d.ts +2 -0
- package/build/dialect/convert/fromDescriptor.js +20 -0
- package/build/dialect/convert/toDescriptor.d.ts +3 -0
- package/build/dialect/convert/toDescriptor.js +5 -0
- package/build/dialect/index.d.ts +8 -0
- package/build/dialect/index.js +8 -0
- package/build/dialect/load.d.ts +5 -0
- package/build/dialect/load.js +12 -0
- package/build/dialect/load.spec.d.ts +1 -0
- package/build/dialect/load.spec.js +18 -0
- package/build/dialect/resolve.d.ts +2 -0
- package/build/dialect/resolve.js +11 -0
- package/build/dialect/save.d.ts +9 -0
- package/build/dialect/save.js +16 -0
- package/build/dialect/save.spec.d.ts +1 -0
- package/build/dialect/save.spec.js +52 -0
- package/build/dialect/validate.d.ts +10 -0
- package/build/dialect/validate.js +25 -0
- package/build/dialect/validate.spec.d.ts +1 -0
- package/build/dialect/validate.spec.js +28 -0
- package/build/error/Bound.d.ts +4 -0
- package/build/error/Bound.js +2 -0
- package/build/error/Error.d.ts +3 -0
- package/build/error/Error.js +2 -0
- package/build/error/Unbound.d.ts +6 -0
- package/build/error/Unbound.js +2 -0
- package/build/error/index.d.ts +16 -0
- package/build/error/index.js +2 -0
- package/build/error/types/Base.d.ts +3 -0
- package/build/error/types/Base.js +2 -0
- package/build/error/types/Bytes.d.ts +6 -0
- package/build/error/types/Bytes.js +2 -0
- package/build/error/types/Cell.d.ts +56 -0
- package/build/error/types/Cell.js +2 -0
- package/build/error/types/Data.d.ts +5 -0
- package/build/error/types/Data.js +2 -0
- package/build/error/types/Document.d.ts +7 -0
- package/build/error/types/Document.js +2 -0
- package/build/error/types/Encoding.d.ts +6 -0
- package/build/error/types/Encoding.js +2 -0
- package/build/error/types/Field.d.ts +15 -0
- package/build/error/types/Field.js +2 -0
- package/build/error/types/Fields.d.ts +11 -0
- package/build/error/types/Fields.js +2 -0
- package/build/error/types/File.d.ts +4 -0
- package/build/error/types/File.js +2 -0
- package/build/error/types/ForeignKey.d.ts +7 -0
- package/build/error/types/ForeignKey.js +2 -0
- package/build/error/types/Hash.d.ts +6 -0
- package/build/error/types/Hash.js +2 -0
- package/build/error/types/Metadata.d.ts +9 -0
- package/build/error/types/Metadata.js +2 -0
- package/build/error/types/Row.d.ts +9 -0
- package/build/error/types/Row.js +2 -0
- package/build/error/types/Table.d.ts +6 -0
- package/build/error/types/Table.js +2 -0
- package/build/field/Field.d.ts +5 -0
- package/build/field/Field.js +2 -0
- package/build/field/Type.d.ts +2 -0
- package/build/field/Type.js +2 -0
- package/build/field/convert/fromDescriptor.d.ts +2 -0
- package/build/field/convert/fromDescriptor.js +61 -0
- package/build/field/convert/fromDescriptor.spec.d.ts +1 -0
- package/build/field/convert/fromDescriptor.spec.js +241 -0
- package/build/field/convert/toDescriptor.d.ts +3 -0
- package/build/field/convert/toDescriptor.js +5 -0
- package/build/field/convert/toDescriptor.spec.d.ts +1 -0
- package/build/field/convert/toDescriptor.spec.js +291 -0
- package/build/field/index.d.ts +5 -0
- package/build/field/index.js +3 -0
- package/build/field/types/Any.d.ts +20 -0
- package/build/field/types/Any.js +2 -0
- package/build/field/types/Array.d.ts +32 -0
- package/build/field/types/Array.js +2 -0
- package/build/field/types/Base.d.ts +60 -0
- package/build/field/types/Base.js +2 -0
- package/build/field/types/Boolean.d.ts +28 -0
- package/build/field/types/Boolean.js +2 -0
- package/build/field/types/Date.d.ts +43 -0
- package/build/field/types/Date.js +2 -0
- package/build/field/types/Datetime.d.ts +43 -0
- package/build/field/types/Datetime.js +2 -0
- package/build/field/types/Duration.d.ts +28 -0
- package/build/field/types/Duration.js +2 -0
- package/build/field/types/Geojson.d.ts +30 -0
- package/build/field/types/Geojson.js +2 -0
- package/build/field/types/Geopoint.d.ts +27 -0
- package/build/field/types/Geopoint.js +2 -0
- package/build/field/types/Integer.d.ts +57 -0
- package/build/field/types/Integer.js +2 -0
- package/build/field/types/List.d.ts +36 -0
- package/build/field/types/List.js +2 -0
- package/build/field/types/Number.d.ts +48 -0
- package/build/field/types/Number.js +2 -0
- package/build/field/types/Object.d.ts +32 -0
- package/build/field/types/Object.js +2 -0
- package/build/field/types/String.d.ts +51 -0
- package/build/field/types/String.js +2 -0
- package/build/field/types/Time.d.ts +43 -0
- package/build/field/types/Time.js +2 -0
- package/build/field/types/Year.d.ts +36 -0
- package/build/field/types/Year.js +2 -0
- package/build/field/types/Yearmonth.d.ts +36 -0
- package/build/field/types/Yearmonth.js +2 -0
- package/build/field/types/index.d.ts +16 -0
- package/build/field/types/index.js +17 -0
- package/build/index.d.ts +112 -0
- package/build/index.js +32 -0
- package/build/json/Schema.d.ts +2 -0
- package/build/json/Schema.js +2 -0
- package/build/json/Value.d.ts +1 -0
- package/build/json/Value.js +2 -0
- package/build/json/ajv.d.ts +2 -0
- package/build/json/ajv.js +10 -0
- package/build/json/assert.d.ts +2 -0
- package/build/json/assert.js +10 -0
- package/build/json/cache.d.ts +2 -0
- package/build/json/cache.js +5 -0
- package/build/json/index.d.ts +5 -0
- package/build/json/index.js +4 -0
- package/build/json/inspect/schema.d.ts +4 -0
- package/build/json/inspect/schema.js +10 -0
- package/build/json/inspect/schema.spec.d.ts +1 -0
- package/build/json/inspect/schema.spec.js +132 -0
- package/build/json/inspect/value.d.ts +11 -0
- package/build/json/inspect/value.js +21 -0
- package/build/json/inspect/value.spec.d.ts +1 -0
- package/build/json/inspect/value.spec.js +121 -0
- package/build/json/load.d.ts +3 -0
- package/build/json/load.js +13 -0
- package/build/json/resolve.d.ts +2 -0
- package/build/json/resolve.js +11 -0
- package/build/metadata/Metadata.d.ts +3 -0
- package/build/metadata/Metadata.js +2 -0
- package/build/metadata/index.d.ts +1 -0
- package/build/metadata/index.js +2 -0
- package/build/package/Contributor.d.ts +21 -0
- package/build/package/Contributor.js +2 -0
- package/build/package/Package.d.ts +64 -0
- package/build/package/Package.js +2 -0
- package/build/package/assert.d.ts +8 -0
- package/build/package/assert.js +12 -0
- package/build/package/assert.spec.d.ts +1 -0
- package/build/package/assert.spec.js +26 -0
- package/build/package/convert/fromDescriptor.d.ts +4 -0
- package/build/package/convert/fromDescriptor.js +36 -0
- package/build/package/convert/toDescriptor.d.ts +5 -0
- package/build/package/convert/toDescriptor.js +7 -0
- package/build/package/index.d.ts +8 -0
- package/build/package/index.js +7 -0
- package/build/package/load.d.ts +5 -0
- package/build/package/load.js +14 -0
- package/build/package/load.spec.d.ts +1 -0
- package/build/package/load.spec.js +28 -0
- package/build/package/save.d.ts +9 -0
- package/build/package/save.js +18 -0
- package/build/package/save.spec.d.ts +1 -0
- package/build/package/save.spec.js +311 -0
- package/build/package/validate.d.ts +12 -0
- package/build/package/validate.js +27 -0
- package/build/package/validate.spec.d.ts +1 -0
- package/build/package/validate.spec.js +41 -0
- package/build/path/basepath.d.ts +2 -0
- package/build/path/basepath.js +25 -0
- package/build/path/basepath.spec.d.ts +1 -0
- package/build/path/basepath.spec.js +55 -0
- package/build/path/denormalize.d.ts +3 -0
- package/build/path/denormalize.js +29 -0
- package/build/path/denormalize.spec.d.ts +1 -0
- package/build/path/denormalize.spec.js +45 -0
- package/build/path/index.d.ts +5 -0
- package/build/path/index.js +6 -0
- package/build/path/normalize.d.ts +6 -0
- package/build/path/normalize.js +54 -0
- package/build/path/normalize.spec.d.ts +1 -0
- package/build/path/normalize.spec.js +71 -0
- package/build/path/path.d.ts +5 -0
- package/build/path/path.js +48 -0
- package/build/path/path.spec.d.ts +1 -0
- package/build/path/path.spec.js +111 -0
- package/build/platform/index.d.ts +1 -0
- package/build/platform/index.js +2 -0
- package/build/platform/node.d.ts +130 -0
- package/build/platform/node.js +10 -0
- package/build/platform/node.spec.d.ts +1 -0
- package/build/platform/node.spec.js +16 -0
- package/build/profile/@minify.d.ts +1 -0
- package/build/profile/@minify.js +58 -0
- package/build/profile/Profile.d.ts +9 -0
- package/build/profile/Profile.js +2 -0
- package/build/profile/assert.d.ts +6 -0
- package/build/profile/assert.js +36 -0
- package/build/profile/assert.spec.d.ts +1 -0
- package/build/profile/assert.spec.js +115 -0
- package/build/profile/index.d.ts +2 -0
- package/build/profile/index.js +2 -0
- package/build/profile/load.d.ts +4 -0
- package/build/profile/load.js +12 -0
- package/build/profile/registry.d.ts +2 -0
- package/build/profile/registry.js +83 -0
- package/build/profile/resolve.d.ts +2 -0
- package/build/profile/resolve.js +8 -0
- package/build/profile/validate.d.ts +9 -0
- package/build/profile/validate.js +12 -0
- package/build/report/Report.d.ts +5 -0
- package/build/report/Report.js +2 -0
- package/build/report/create.d.ts +7 -0
- package/build/report/create.js +6 -0
- package/build/report/index.d.ts +2 -0
- package/build/report/index.js +2 -0
- package/build/resource/License.d.ts +18 -0
- package/build/resource/License.js +2 -0
- package/build/resource/Resource.d.ts +93 -0
- package/build/resource/Resource.js +2 -0
- package/build/resource/Source.d.ts +17 -0
- package/build/resource/Source.js +2 -0
- package/build/resource/assert.d.ts +8 -0
- package/build/resource/assert.js +12 -0
- package/build/resource/assert.spec.d.ts +1 -0
- package/build/resource/assert.spec.js +23 -0
- package/build/resource/convert/fromDescriptor.d.ts +4 -0
- package/build/resource/convert/fromDescriptor.js +69 -0
- package/build/resource/convert/toDescriptor.d.ts +5 -0
- package/build/resource/convert/toDescriptor.js +36 -0
- package/build/resource/helpers.d.ts +2 -0
- package/build/resource/helpers.js +6 -0
- package/build/resource/index.d.ts +11 -0
- package/build/resource/index.js +9 -0
- package/build/resource/infer.d.ts +3 -0
- package/build/resource/infer.js +35 -0
- package/build/resource/infer.spec.d.ts +1 -0
- package/build/resource/infer.spec.js +103 -0
- package/build/resource/load.d.ts +5 -0
- package/build/resource/load.js +14 -0
- package/build/resource/load.spec.d.ts +1 -0
- package/build/resource/load.spec.js +22 -0
- package/build/resource/save.d.ts +9 -0
- package/build/resource/save.js +18 -0
- package/build/resource/save.spec.d.ts +1 -0
- package/build/resource/save.spec.js +170 -0
- package/build/resource/validate.d.ts +13 -0
- package/build/resource/validate.js +57 -0
- package/build/resource/validate.spec.d.ts +1 -0
- package/build/resource/validate.spec.js +30 -0
- package/build/schema/ForeignKey.d.ts +23 -0
- package/build/schema/ForeignKey.js +2 -0
- package/build/schema/Schema.d.ts +56 -0
- package/build/schema/Schema.js +2 -0
- package/build/schema/assert.d.ts +6 -0
- package/build/schema/assert.js +12 -0
- package/build/schema/assert.spec.d.ts +1 -0
- package/build/schema/assert.spec.js +34 -0
- package/build/schema/convert/fromDescriptor.d.ts +2 -0
- package/build/schema/convert/fromDescriptor.js +70 -0
- package/build/schema/convert/fromJsonSchema.d.ts +3 -0
- package/build/schema/convert/fromJsonSchema.js +105 -0
- package/build/schema/convert/fromJsonSchema.spec.d.ts +1 -0
- package/build/schema/convert/fromJsonSchema.spec.js +156 -0
- package/build/schema/convert/toDescriptor.d.ts +3 -0
- package/build/schema/convert/toDescriptor.js +5 -0
- package/build/schema/convert/toJsonSchema.d.ts +3 -0
- package/build/schema/convert/toJsonSchema.js +173 -0
- package/build/schema/convert/toJsonSchema.spec.d.ts +1 -0
- package/build/schema/convert/toJsonSchema.spec.js +403 -0
- package/build/schema/index.d.ts +11 -0
- package/build/schema/index.js +10 -0
- package/build/schema/load.d.ts +5 -0
- package/build/schema/load.js +12 -0
- package/build/schema/load.spec.d.ts +1 -0
- package/build/schema/load.spec.js +55 -0
- package/build/schema/resolve.d.ts +2 -0
- package/build/schema/resolve.js +11 -0
- package/build/schema/save.d.ts +9 -0
- package/build/schema/save.js +16 -0
- package/build/schema/save.spec.d.ts +1 -0
- package/build/schema/save.spec.js +58 -0
- package/build/schema/validate.d.ts +10 -0
- package/build/schema/validate.js +25 -0
- package/build/schema/validate.spec.d.ts +1 -0
- package/build/schema/validate.spec.js +41 -0
- package/package.json +37 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export function convertSchemaFromJsonSchema(jsonSchema) {
|
|
2
|
+
const fields = [];
|
|
3
|
+
const requiredFields = new Set(Array.isArray(jsonSchema.required) ? jsonSchema.required : []);
|
|
4
|
+
for (const [name, property] of Object.entries(jsonSchema.properties || {})) {
|
|
5
|
+
if (typeof property === "boolean") {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
const field = convertPropertyToField(name, property, requiredFields.has(name));
|
|
9
|
+
if (field) {
|
|
10
|
+
fields.push(field);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const schema = {
|
|
14
|
+
fields,
|
|
15
|
+
};
|
|
16
|
+
if (typeof jsonSchema.title === "string") {
|
|
17
|
+
schema.title = jsonSchema.title;
|
|
18
|
+
}
|
|
19
|
+
if (typeof jsonSchema.description === "string") {
|
|
20
|
+
schema.description = jsonSchema.description;
|
|
21
|
+
}
|
|
22
|
+
return schema;
|
|
23
|
+
}
|
|
24
|
+
function convertPropertyToField(name, property, isRequired) {
|
|
25
|
+
if (typeof property === "boolean") {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const baseField = {
|
|
29
|
+
name,
|
|
30
|
+
title: property.title,
|
|
31
|
+
description: property.description,
|
|
32
|
+
constraints: isRequired ? { required: true } : undefined,
|
|
33
|
+
};
|
|
34
|
+
switch (property.type) {
|
|
35
|
+
case "string":
|
|
36
|
+
return {
|
|
37
|
+
...baseField,
|
|
38
|
+
type: "string",
|
|
39
|
+
constraints: {
|
|
40
|
+
...baseField.constraints,
|
|
41
|
+
minLength: property.minLength,
|
|
42
|
+
maxLength: property.maxLength,
|
|
43
|
+
pattern: property.pattern,
|
|
44
|
+
enum: property.enum,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
case "number":
|
|
48
|
+
return {
|
|
49
|
+
...baseField,
|
|
50
|
+
type: "number",
|
|
51
|
+
constraints: {
|
|
52
|
+
...baseField.constraints,
|
|
53
|
+
minimum: property.minimum,
|
|
54
|
+
maximum: property.maximum,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
case "integer":
|
|
58
|
+
return {
|
|
59
|
+
...baseField,
|
|
60
|
+
type: "integer",
|
|
61
|
+
constraints: {
|
|
62
|
+
...baseField.constraints,
|
|
63
|
+
minimum: property.minimum,
|
|
64
|
+
maximum: property.maximum,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
case "boolean":
|
|
68
|
+
return {
|
|
69
|
+
...baseField,
|
|
70
|
+
type: "boolean",
|
|
71
|
+
};
|
|
72
|
+
case "array":
|
|
73
|
+
return {
|
|
74
|
+
...baseField,
|
|
75
|
+
type: "array",
|
|
76
|
+
constraints: {
|
|
77
|
+
...baseField.constraints,
|
|
78
|
+
minLength: property.minItems,
|
|
79
|
+
maxLength: property.maxItems,
|
|
80
|
+
jsonSchema: property.items,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
case "object":
|
|
84
|
+
return {
|
|
85
|
+
...baseField,
|
|
86
|
+
type: "object",
|
|
87
|
+
constraints: {
|
|
88
|
+
...baseField.constraints,
|
|
89
|
+
jsonSchema: property,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
default:
|
|
93
|
+
if (Array.isArray(property.type)) {
|
|
94
|
+
const nonNullType = property.type.find(t => t !== "null");
|
|
95
|
+
if (nonNullType) {
|
|
96
|
+
return convertPropertyToField(name, { ...property, type: nonNullType }, isRequired);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
...baseField,
|
|
101
|
+
type: "string",
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUpzb25TY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zY2hlbWEvY29udmVydC9mcm9tSnNvblNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLFVBQVUsMkJBQTJCLENBQUMsVUFBdUI7SUFDakUsTUFBTSxNQUFNLEdBQVksRUFBRSxDQUFBO0lBQzFCLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUM5RCxDQUFBO0lBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzNFLElBQUksT0FBTyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEMsU0FBUTtRQUNWLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxzQkFBc0IsQ0FDbEMsSUFBSSxFQUNKLFFBQVEsRUFDUixjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUN6QixDQUFBO1FBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBc0Q7UUFDaEUsTUFBTTtLQUNQLENBQUE7SUFFRCxJQUFJLE9BQU8sVUFBVSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUE7SUFDakMsQ0FBQztJQUVELElBQUksT0FBTyxVQUFVLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxX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QkFDWixJQUFJLEVBQUUsUUFBUTthQUNOLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIlxuaW1wb3J0IHR5cGUgeyBGaWVsZCB9IGZyb20gXCIuLi8uLi9maWVsZC9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFNjaGVtYSB9IGZyb20gXCIuLi9TY2hlbWEudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNjaGVtYUZyb21Kc29uU2NoZW1hKGpzb25TY2hlbWE6IEpTT05TY2hlbWE3KTogU2NoZW1hIHtcbiAgY29uc3QgZmllbGRzOiBGaWVsZFtdID0gW11cbiAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBuZXcgU2V0KFxuICAgIEFycmF5LmlzQXJyYXkoanNvblNjaGVtYS5yZXF1aXJlZCkgPyBqc29uU2NoZW1hLnJlcXVpcmVkIDogW10sXG4gIClcblxuICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9wZXJ0eV0gb2YgT2JqZWN0LmVudHJpZXMoanNvblNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9KSkge1xuICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gY29udmVydFByb3BlcnR5VG9GaWVsZChcbiAgICAgIG5hbWUsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHJlcXVpcmVkRmllbGRzLmhhcyhuYW1lKSxcbiAgICApXG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICBmaWVsZHMucHVzaChmaWVsZClcbiAgICB9XG4gIH1cblxuICBjb25zdCBzY2hlbWE6IFNjaGVtYSAmIHsgdGl0bGU/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH0gPSB7XG4gICAgZmllbGRzLFxuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uU2NoZW1hLnRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgc2NoZW1hLnRpdGxlID0ganNvblNjaGVtYS50aXRsZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uU2NoZW1hLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgc2NoZW1hLmRlc2NyaXB0aW9uID0ganNvblNjaGVtYS5kZXNjcmlwdGlvblxuICB9XG5cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlUb0ZpZWxkKFxuICBuYW1lOiBzdHJpbmcsXG4gIHByb3BlcnR5OiBKU09OU2NoZW1hNyxcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbik6IEZpZWxkIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGJhc2VGaWVsZCA9IHtcbiAgICBuYW1lLFxuICAgIHRpdGxlOiBwcm9wZXJ0eS50aXRsZSxcbiAgICBkZXNjcmlwdGlvbjogcHJvcGVydHkuZGVzY3JpcHRpb24sXG4gICAgY29uc3RyYWludHM6IGlzUmVxdWlyZWQgPyB7IHJlcXVpcmVkOiB0cnVlIH0gOiB1bmRlZmluZWQsXG4gIH1cblxuICBzd2l0Y2ggKHByb3BlcnR5LnR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlRmllbGQsXG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgLi4uYmFzZUZpZWxkLmNvbnN0cmFpbnRzLFxuICAgICAgICAgIG1pbkxlbmd0aDogcHJvcGVydHkubWluTGVuZ3RoLFxuICAgICAgICAgIG1heExlbmd0aDogcHJvcGVydHkubWF4TGVuZ3RoLFxuICAgICAgICAgIHBhdHRlcm46IHByb3BlcnR5LnBhdHRlcm4sXG4gICAgICAgICAgZW51bTogcHJvcGVydHkuZW51bSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgRmllbGRcblxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VGaWVsZCxcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAuLi5iYXNlRmllbGQuY29uc3RyYWludHMsXG4gICAgICAgICAgbWluaW11bTogcHJvcGVydHkubWluaW11bSxcbiAgICAgICAgICBtYXhpbXVtOiBwcm9wZXJ0eS5tYXhpbXVtLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBGaWVsZFxuXG4gICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VGaWVsZCxcbiAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgLi4uYmFzZUZpZWxkLmNvbnN0cmFpbnRzLFxuICAgICAgICAgIG1pbmltdW06IHByb3BlcnR5Lm1pbmltdW0sXG4gICAgICAgICAgbWF4aW11bTogcHJvcGVydHkubWF4aW11bSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgRmllbGRcblxuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlRmllbGQsXG4gICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSBhcyBGaWVsZFxuXG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlRmllbGQsXG4gICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAuLi5iYXNlRmllbGQuY29uc3RyYWludHMsXG4gICAgICAgICAgbWluTGVuZ3RoOiBwcm9wZXJ0eS5taW5JdGVtcyxcbiAgICAgICAgICBtYXhMZW5ndGg6IHByb3BlcnR5Lm1heEl0ZW1zLFxuICAgICAgICAgIGpzb25TY2hlbWE6IHByb3BlcnR5Lml0ZW1zIGFzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgIH0sXG4gICAgICB9IGFzIEZpZWxkXG5cbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlRmllbGQsXG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgLi4uYmFzZUZpZWxkLmNvbnN0cmFpbnRzLFxuICAgICAgICAgIGpzb25TY2hlbWE6IHByb3BlcnR5IGFzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgIH0sXG4gICAgICB9IGFzIEZpZWxkXG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkudHlwZSkpIHtcbiAgICAgICAgY29uc3Qgbm9uTnVsbFR5cGUgPSBwcm9wZXJ0eS50eXBlLmZpbmQodCA9PiB0ICE9PSBcIm51bGxcIilcbiAgICAgICAgaWYgKG5vbk51bGxUeXBlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnZlcnRQcm9wZXJ0eVRvRmllbGQoXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgeyAuLi5wcm9wZXJ0eSwgdHlwZTogbm9uTnVsbFR5cGUgfSxcbiAgICAgICAgICAgIGlzUmVxdWlyZWQsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VGaWVsZCxcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0gYXMgRmllbGRcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { convertSchemaFromJsonSchema } from "./fromJsonSchema.js";
|
|
3
|
+
describe("convertSchemaFromJsonSchema", () => {
|
|
4
|
+
it("converts JSONSchema object to Table Schema", () => {
|
|
5
|
+
const jsonSchema = {
|
|
6
|
+
type: "object",
|
|
7
|
+
title: "User Schema",
|
|
8
|
+
description: "Schema for user data",
|
|
9
|
+
required: ["id", "name"],
|
|
10
|
+
properties: {
|
|
11
|
+
id: {
|
|
12
|
+
type: "integer",
|
|
13
|
+
title: "User ID",
|
|
14
|
+
description: "Unique identifier",
|
|
15
|
+
minimum: 1,
|
|
16
|
+
},
|
|
17
|
+
name: {
|
|
18
|
+
type: "string",
|
|
19
|
+
title: "Full Name",
|
|
20
|
+
maxLength: 100,
|
|
21
|
+
},
|
|
22
|
+
email: {
|
|
23
|
+
type: "string",
|
|
24
|
+
pattern: "^[^@]+@[^@]+\\.[^@]+$",
|
|
25
|
+
},
|
|
26
|
+
age: {
|
|
27
|
+
type: "integer",
|
|
28
|
+
minimum: 0,
|
|
29
|
+
maximum: 150,
|
|
30
|
+
},
|
|
31
|
+
isActive: {
|
|
32
|
+
type: "boolean",
|
|
33
|
+
},
|
|
34
|
+
tags: {
|
|
35
|
+
type: "array",
|
|
36
|
+
minItems: 0,
|
|
37
|
+
maxItems: 10,
|
|
38
|
+
},
|
|
39
|
+
metadata: {
|
|
40
|
+
type: "object",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
const tableSchema = convertSchemaFromJsonSchema(jsonSchema);
|
|
45
|
+
expect(tableSchema.title).toBe("User Schema");
|
|
46
|
+
expect(tableSchema.description).toBe("Schema for user data");
|
|
47
|
+
expect(tableSchema.fields).toHaveLength(7);
|
|
48
|
+
const idField = tableSchema.fields.find(f => f.name === "id");
|
|
49
|
+
expect(idField).toEqual({
|
|
50
|
+
name: "id",
|
|
51
|
+
type: "integer",
|
|
52
|
+
title: "User ID",
|
|
53
|
+
description: "Unique identifier",
|
|
54
|
+
constraints: {
|
|
55
|
+
required: true,
|
|
56
|
+
minimum: 1,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
const nameField = tableSchema.fields.find(f => f.name === "name");
|
|
60
|
+
expect(nameField).toEqual({
|
|
61
|
+
name: "name",
|
|
62
|
+
type: "string",
|
|
63
|
+
title: "Full Name",
|
|
64
|
+
constraints: {
|
|
65
|
+
required: true,
|
|
66
|
+
maxLength: 100,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
const emailField = tableSchema.fields.find(f => f.name === "email");
|
|
70
|
+
expect(emailField).toEqual({
|
|
71
|
+
name: "email",
|
|
72
|
+
type: "string",
|
|
73
|
+
constraints: {
|
|
74
|
+
pattern: "^[^@]+@[^@]+\\.[^@]+$",
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
const ageField = tableSchema.fields.find(f => f.name === "age");
|
|
78
|
+
expect(ageField).toEqual({
|
|
79
|
+
name: "age",
|
|
80
|
+
type: "integer",
|
|
81
|
+
constraints: {
|
|
82
|
+
minimum: 0,
|
|
83
|
+
maximum: 150,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
const isActiveField = tableSchema.fields.find(f => f.name === "isActive");
|
|
87
|
+
expect(isActiveField).toEqual({
|
|
88
|
+
name: "isActive",
|
|
89
|
+
type: "boolean",
|
|
90
|
+
});
|
|
91
|
+
const tagsField = tableSchema.fields.find(f => f.name === "tags");
|
|
92
|
+
expect(tagsField).toEqual({
|
|
93
|
+
name: "tags",
|
|
94
|
+
type: "array",
|
|
95
|
+
constraints: {
|
|
96
|
+
minLength: 0,
|
|
97
|
+
maxLength: 10,
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
const metadataField = tableSchema.fields.find(f => f.name === "metadata");
|
|
101
|
+
expect(metadataField).toEqual({
|
|
102
|
+
name: "metadata",
|
|
103
|
+
type: "object",
|
|
104
|
+
constraints: {
|
|
105
|
+
jsonSchema: {
|
|
106
|
+
type: "object",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
it("handles union types by picking first non-null type", () => {
|
|
112
|
+
const jsonSchema = {
|
|
113
|
+
type: "object",
|
|
114
|
+
properties: {
|
|
115
|
+
nullableString: {
|
|
116
|
+
type: ["string", "null"],
|
|
117
|
+
},
|
|
118
|
+
multiType: {
|
|
119
|
+
type: ["number", "string"],
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
const tableSchema = convertSchemaFromJsonSchema(jsonSchema);
|
|
124
|
+
const nullableField = tableSchema.fields.find(f => f.name === "nullableString");
|
|
125
|
+
expect(nullableField?.type).toBe("string");
|
|
126
|
+
const multiField = tableSchema.fields.find(f => f.name === "multiType");
|
|
127
|
+
expect(multiField?.type).toBe("number");
|
|
128
|
+
});
|
|
129
|
+
it("defaults to string type for unknown types", () => {
|
|
130
|
+
const jsonSchema = {
|
|
131
|
+
type: "object",
|
|
132
|
+
properties: {
|
|
133
|
+
unknownField: {},
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
const tableSchema = convertSchemaFromJsonSchema(jsonSchema);
|
|
137
|
+
const unknownField = tableSchema.fields.find(f => f.name === "unknownField");
|
|
138
|
+
expect(unknownField?.type).toBe("string");
|
|
139
|
+
});
|
|
140
|
+
it("skips boolean schema properties", () => {
|
|
141
|
+
const jsonSchema = {
|
|
142
|
+
type: "object",
|
|
143
|
+
properties: {
|
|
144
|
+
validField: {
|
|
145
|
+
type: "string",
|
|
146
|
+
},
|
|
147
|
+
booleanSchema: true,
|
|
148
|
+
falseBooleanSchema: false,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
const tableSchema = convertSchemaFromJsonSchema(jsonSchema);
|
|
152
|
+
expect(tableSchema.fields).toHaveLength(1);
|
|
153
|
+
expect(tableSchema.fields[0]?.name).toBe("validField");
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUpzb25TY2hlbWEuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NjaGVtYS9jb252ZXJ0L2Zyb21Kc29uU2NoZW1hLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRWpFLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7SUFDM0MsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxNQUFNLFVBQVUsR0FBZ0I7WUFDOUIsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsYUFBYTtZQUNwQixXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7WUFDeEIsVUFBVSxFQUFFO2dCQUNWLEVBQUUsRUFBRTtvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsU0FBUztvQkFDaEIsV0FBVyxFQUFFLG1CQUFtQjtvQkFDaEMsT0FBTyxFQUFFLENBQUM7aUJBQ1g7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxXQUFXO29CQUNsQixTQUFTLEVBQUUsR0FBRztpQkFDZjtnQkFDRCxLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFLHVCQUF1QjtpQkFDakM7Z0JBQ0QsR0FBRyxFQUFFO29CQUNILElBQUksRUFBRSxTQUFTO29CQUNmLE9BQU8sRUFBRSxDQUFDO29CQUNWLE9BQU8sRUFBRSxHQUFHO2lCQUNiO2dCQUNELFFBQVEsRUFBRTtvQkFDUixJQUFJLEVBQUUsU0FBUztpQkFDaEI7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxPQUFPO29C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SSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3hELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBjb252ZXJ0U2NoZW1hRnJvbUpzb25TY2hlbWEgfSBmcm9tIFwiLi9mcm9tSnNvblNjaGVtYS50c1wiXG5cbmRlc2NyaWJlKFwiY29udmVydFNjaGVtYUZyb21Kc29uU2NoZW1hXCIsICgpID0+IHtcbiAgaXQoXCJjb252ZXJ0cyBKU09OU2NoZW1hIG9iamVjdCB0byBUYWJsZSBTY2hlbWFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGpzb25TY2hlbWE6IEpTT05TY2hlbWE3ID0ge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHRpdGxlOiBcIlVzZXIgU2NoZW1hXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTY2hlbWEgZm9yIHVzZXIgZGF0YVwiLFxuICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwibmFtZVwiXSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgICB0aXRsZTogXCJVc2VyIElEXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVW5pcXVlIGlkZW50aWZpZXJcIixcbiAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICB0aXRsZTogXCJGdWxsIE5hbWVcIixcbiAgICAgICAgICBtYXhMZW5ndGg6IDEwMCxcbiAgICAgICAgfSxcbiAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIHBhdHRlcm46IFwiXlteQF0rQFteQF0rXFxcXC5bXkBdKyRcIixcbiAgICAgICAgfSxcbiAgICAgICAgYWdlOiB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICBtYXhpbXVtOiAxNTAsXG4gICAgICAgIH0sXG4gICAgICAgIGlzQWN0aXZlOiB7XG4gICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgbWluSXRlbXM6IDAsXG4gICAgICAgICAgbWF4SXRlbXM6IDEwLFxuICAgICAgICB9LFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlU2NoZW1hID0gY29udmVydFNjaGVtYUZyb21Kc29uU2NoZW1hKGpzb25TY2hlbWEpXG5cbiAgICBleHBlY3QodGFibGVTY2hlbWEudGl0bGUpLnRvQmUoXCJVc2VyIFNjaGVtYVwiKVxuICAgIGV4cGVjdCh0YWJsZVNjaGVtYS5kZXNjcmlwdGlvbikudG9CZShcIlNjaGVtYSBmb3IgdXNlciBkYXRhXCIpXG4gICAgZXhwZWN0KHRhYmxlU2NoZW1hLmZpZWxkcykudG9IYXZlTGVuZ3RoKDcpXG5cbiAgICBjb25zdCBpZEZpZWxkID0gdGFibGVTY2hlbWEuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IFwiaWRcIilcbiAgICBleHBlY3QoaWRGaWVsZCkudG9FcXVhbCh7XG4gICAgICBuYW1lOiBcImlkXCIsXG4gICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgIHRpdGxlOiBcIlVzZXIgSURcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlVuaXF1ZSBpZGVudGlmaWVyXCIsXG4gICAgICBjb25zdHJhaW50czoge1xuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgbWluaW11bTogMSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGNvbnN0IG5hbWVGaWVsZCA9IHRhYmxlU2NoZW1hLmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBcIm5hbWVcIilcbiAgICBleHBlY3QobmFtZUZpZWxkKS50b0VxdWFsKHtcbiAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHRpdGxlOiBcIkZ1bGwgTmFtZVwiLFxuICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG1heExlbmd0aDogMTAwLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgY29uc3QgZW1haWxGaWVsZCA9IHRhYmxlU2NoZW1hLmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBcImVtYWlsXCIpXG4gICAgZXhwZWN0KGVtYWlsRmllbGQpLnRvRXF1YWwoe1xuICAgICAgbmFtZTogXCJlbWFpbFwiLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgIHBhdHRlcm46IFwiXlteQF0rQFteQF0rXFxcXC5bXkBdKyRcIixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGNvbnN0IGFnZUZpZWxkID0gdGFibGVTY2hlbWEuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IFwiYWdlXCIpXG4gICAgZXhwZWN0KGFnZUZpZWxkKS50b0VxdWFsKHtcbiAgICAgIG5hbWU6IFwiYWdlXCIsXG4gICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgIG1heGltdW06IDE1MCxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGNvbnN0IGlzQWN0aXZlRmllbGQgPSB0YWJsZVNjaGVtYS5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gXCJpc0FjdGl2ZVwiKVxuICAgIGV4cGVjdChpc0FjdGl2ZUZpZWxkKS50b0VxdWFsKHtcbiAgICAgIG5hbWU6IFwiaXNBY3RpdmVcIixcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0pXG5cbiAgICBjb25zdCB0YWdzRmllbGQgPSB0YWJsZVNjaGVtYS5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gXCJ0YWdzXCIpXG4gICAgZXhwZWN0KHRhZ3NGaWVsZCkudG9FcXVhbCh7XG4gICAgICBuYW1lOiBcInRhZ3NcIixcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgIG1pbkxlbmd0aDogMCxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMCxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGNvbnN0IG1ldGFkYXRhRmllbGQgPSB0YWJsZVNjaGVtYS5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gXCJtZXRhZGF0YVwiKVxuICAgIGV4cGVjdChtZXRhZGF0YUZpZWxkKS50b0VxdWFsKHtcbiAgICAgIG5hbWU6IFwibWV0YWRhdGFcIixcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjb25zdHJhaW50czoge1xuICAgICAgICBqc29uU2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfSlcblxuICBpdChcImhhbmRsZXMgdW5pb24gdHlwZXMgYnkgcGlja2luZyBmaXJzdCBub24tbnVsbCB0eXBlXCIsICgpID0+IHtcbiAgICBjb25zdCBqc29uU2NoZW1hOiBKU09OU2NoZW1hNyA9IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG51bGxhYmxlU3RyaW5nOiB7XG4gICAgICAgICAgdHlwZTogW1wic3RyaW5nXCIsIFwibnVsbFwiXSxcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlUeXBlOiB7XG4gICAgICAgICAgdHlwZTogW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZVNjaGVtYSA9IGNvbnZlcnRTY2hlbWFGcm9tSnNvblNjaGVtYShqc29uU2NoZW1hKVxuXG4gICAgY29uc3QgbnVsbGFibGVGaWVsZCA9IHRhYmxlU2NoZW1hLmZpZWxkcy5maW5kKFxuICAgICAgZiA9PiBmLm5hbWUgPT09IFwibnVsbGFibGVTdHJpbmdcIixcbiAgICApXG4gICAgZXhwZWN0KG51bGxhYmxlRmllbGQ/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcblxuICAgIGNvbnN0IG11bHRpRmllbGQgPSB0YWJsZVNjaGVtYS5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gXCJtdWx0aVR5cGVcIilcbiAgICBleHBlY3QobXVsdGlGaWVsZD8udHlwZSkudG9CZShcIm51bWJlclwiKVxuICB9KVxuXG4gIGl0KFwiZGVmYXVsdHMgdG8gc3RyaW5nIHR5cGUgZm9yIHVua25vd24gdHlwZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGpzb25TY2hlbWE6IEpTT05TY2hlbWE3ID0ge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdW5rbm93bkZpZWxkOiB7fSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgdGFibGVTY2hlbWEgPSBjb252ZXJ0U2NoZW1hRnJvbUpzb25TY2hlbWEoanNvblNjaGVtYSlcblxuICAgIGNvbnN0IHVua25vd25GaWVsZCA9IHRhYmxlU2NoZW1hLmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBcInVua25vd25GaWVsZFwiKVxuICAgIGV4cGVjdCh1bmtub3duRmllbGQ/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgfSlcblxuICBpdChcInNraXBzIGJvb2xlYW4gc2NoZW1hIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGpzb25TY2hlbWE6IEpTT05TY2hlbWE3ID0ge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmFsaWRGaWVsZDoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2xlYW5TY2hlbWE6IHRydWUsXG4gICAgICAgIGZhbHNlQm9vbGVhblNjaGVtYTogZmFsc2UsXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlU2NoZW1hID0gY29udmVydFNjaGVtYUZyb21Kc29uU2NoZW1hKGpzb25TY2hlbWEpXG5cbiAgICBleHBlY3QodGFibGVTY2hlbWEuZmllbGRzKS50b0hhdmVMZW5ndGgoMSlcbiAgICBleHBlY3QodGFibGVTY2hlbWEuZmllbGRzWzBdPy5uYW1lKS50b0JlKFwidmFsaWRGaWVsZFwiKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export function convertSchemaToDescriptor(schema) {
|
|
2
|
+
schema = globalThis.structuredClone(schema);
|
|
3
|
+
return schema;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9EZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2NoZW1hL2NvbnZlcnQvdG9EZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxNQUFjO0lBQ3RELE1BQU0sR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTNDLE9BQU8sTUFBK0IsQ0FBQTtBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2Rlc2NyaXB0b3IvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBTY2hlbWEgfSBmcm9tIFwiLi4vU2NoZW1hLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTY2hlbWFUb0Rlc2NyaXB0b3Ioc2NoZW1hOiBTY2hlbWEpIHtcbiAgc2NoZW1hID0gZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUoc2NoZW1hKVxuXG4gIHJldHVybiBzY2hlbWEgYXMgdW5rbm93biBhcyBEZXNjcmlwdG9yXG59XG4iXX0=
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
export function convertSchemaToJsonSchema(schema) {
|
|
2
|
+
const properties = {};
|
|
3
|
+
const required = [];
|
|
4
|
+
for (const field of schema.fields) {
|
|
5
|
+
const property = convertFieldToProperty(field);
|
|
6
|
+
if (property) {
|
|
7
|
+
properties[field.name] = property;
|
|
8
|
+
if (field.constraints?.required) {
|
|
9
|
+
required.push(field.name);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const jsonSchema = {
|
|
14
|
+
$schema: "http://json-schema.org/draft-07/schema",
|
|
15
|
+
type: "object",
|
|
16
|
+
properties,
|
|
17
|
+
};
|
|
18
|
+
if (required.length > 0) {
|
|
19
|
+
jsonSchema.required = required;
|
|
20
|
+
}
|
|
21
|
+
if (schema.title) {
|
|
22
|
+
jsonSchema.title = schema.title;
|
|
23
|
+
}
|
|
24
|
+
if (schema.description) {
|
|
25
|
+
jsonSchema.description = schema.description;
|
|
26
|
+
}
|
|
27
|
+
return jsonSchema;
|
|
28
|
+
}
|
|
29
|
+
function convertFieldToProperty(field) {
|
|
30
|
+
const baseProperty = {};
|
|
31
|
+
if (field.title) {
|
|
32
|
+
baseProperty.title = field.title;
|
|
33
|
+
}
|
|
34
|
+
if (field.description) {
|
|
35
|
+
baseProperty.description = field.description;
|
|
36
|
+
}
|
|
37
|
+
switch (field.type) {
|
|
38
|
+
case "string": {
|
|
39
|
+
const property = {
|
|
40
|
+
...baseProperty,
|
|
41
|
+
type: "string",
|
|
42
|
+
};
|
|
43
|
+
if (field.constraints?.minLength !== undefined) {
|
|
44
|
+
property.minLength = field.constraints.minLength;
|
|
45
|
+
}
|
|
46
|
+
if (field.constraints?.maxLength !== undefined) {
|
|
47
|
+
property.maxLength = field.constraints.maxLength;
|
|
48
|
+
}
|
|
49
|
+
if (field.constraints?.pattern) {
|
|
50
|
+
property.pattern = field.constraints.pattern;
|
|
51
|
+
}
|
|
52
|
+
if (field.constraints?.enum) {
|
|
53
|
+
property.enum = field.constraints.enum;
|
|
54
|
+
}
|
|
55
|
+
return property;
|
|
56
|
+
}
|
|
57
|
+
case "number": {
|
|
58
|
+
const property = {
|
|
59
|
+
...baseProperty,
|
|
60
|
+
type: "number",
|
|
61
|
+
};
|
|
62
|
+
if (field.constraints?.minimum !== undefined &&
|
|
63
|
+
typeof field.constraints.minimum === "number") {
|
|
64
|
+
property.minimum = field.constraints.minimum;
|
|
65
|
+
}
|
|
66
|
+
if (field.constraints?.maximum !== undefined &&
|
|
67
|
+
typeof field.constraints.maximum === "number") {
|
|
68
|
+
property.maximum = field.constraints.maximum;
|
|
69
|
+
}
|
|
70
|
+
return property;
|
|
71
|
+
}
|
|
72
|
+
case "integer": {
|
|
73
|
+
const property = {
|
|
74
|
+
...baseProperty,
|
|
75
|
+
type: "integer",
|
|
76
|
+
};
|
|
77
|
+
if (field.constraints?.minimum !== undefined &&
|
|
78
|
+
typeof field.constraints.minimum === "number") {
|
|
79
|
+
property.minimum = field.constraints.minimum;
|
|
80
|
+
}
|
|
81
|
+
if (field.constraints?.maximum !== undefined &&
|
|
82
|
+
typeof field.constraints.maximum === "number") {
|
|
83
|
+
property.maximum = field.constraints.maximum;
|
|
84
|
+
}
|
|
85
|
+
return property;
|
|
86
|
+
}
|
|
87
|
+
case "boolean": {
|
|
88
|
+
return {
|
|
89
|
+
...baseProperty,
|
|
90
|
+
type: "boolean",
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
case "array": {
|
|
94
|
+
const property = {
|
|
95
|
+
...baseProperty,
|
|
96
|
+
type: "array",
|
|
97
|
+
};
|
|
98
|
+
if (field.constraints?.minLength !== undefined) {
|
|
99
|
+
property.minItems = field.constraints.minLength;
|
|
100
|
+
}
|
|
101
|
+
if (field.constraints?.maxLength !== undefined) {
|
|
102
|
+
property.maxItems = field.constraints.maxLength;
|
|
103
|
+
}
|
|
104
|
+
if (field.constraints?.jsonSchema) {
|
|
105
|
+
property.items = field.constraints.jsonSchema;
|
|
106
|
+
}
|
|
107
|
+
return property;
|
|
108
|
+
}
|
|
109
|
+
case "object": {
|
|
110
|
+
const property = {
|
|
111
|
+
...baseProperty,
|
|
112
|
+
type: "object",
|
|
113
|
+
};
|
|
114
|
+
if (field.constraints?.jsonSchema) {
|
|
115
|
+
return {
|
|
116
|
+
...property,
|
|
117
|
+
...field.constraints.jsonSchema,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return property;
|
|
121
|
+
}
|
|
122
|
+
case "date":
|
|
123
|
+
return {
|
|
124
|
+
...baseProperty,
|
|
125
|
+
type: "string",
|
|
126
|
+
format: "date",
|
|
127
|
+
};
|
|
128
|
+
case "datetime":
|
|
129
|
+
return {
|
|
130
|
+
...baseProperty,
|
|
131
|
+
type: "string",
|
|
132
|
+
format: "date-time",
|
|
133
|
+
};
|
|
134
|
+
case "time":
|
|
135
|
+
return {
|
|
136
|
+
...baseProperty,
|
|
137
|
+
type: "string",
|
|
138
|
+
format: "time",
|
|
139
|
+
};
|
|
140
|
+
case "year":
|
|
141
|
+
case "yearmonth":
|
|
142
|
+
case "duration":
|
|
143
|
+
return {
|
|
144
|
+
...baseProperty,
|
|
145
|
+
type: "string",
|
|
146
|
+
format: field.type,
|
|
147
|
+
};
|
|
148
|
+
case "geopoint":
|
|
149
|
+
return {
|
|
150
|
+
...baseProperty,
|
|
151
|
+
type: "string",
|
|
152
|
+
format: "geopoint",
|
|
153
|
+
};
|
|
154
|
+
case "geojson":
|
|
155
|
+
return {
|
|
156
|
+
...baseProperty,
|
|
157
|
+
type: "object",
|
|
158
|
+
format: "geojson",
|
|
159
|
+
};
|
|
160
|
+
case "list":
|
|
161
|
+
return {
|
|
162
|
+
...baseProperty,
|
|
163
|
+
type: "array",
|
|
164
|
+
format: "list",
|
|
165
|
+
};
|
|
166
|
+
default:
|
|
167
|
+
return {
|
|
168
|
+
...baseProperty,
|
|
169
|
+
type: "string",
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9Kc29uU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2NoZW1hL2NvbnZlcnQvdG9Kc29uU2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxNQUFjO0lBQ3RELE1BQU0sVUFBVSxHQUFnQyxFQUFFLENBQUE7SUFDbEQsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFBO0lBRTdCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzlDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQTtZQUVqQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFnQjtRQUM5QixPQUFPLEVBQUUsd0NBQXdDO1FBQ2pELElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVTtLQUNYLENBQUE7SUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsVUFBVSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsVUFBVSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFBO0lBQzdDLENBQUM7SUFFRCxPQUFP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QUssTUFBTTtZQUNULE9BQU87Z0JBQ0wsR0FBRyxZQUFZO2dCQUNmLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFBRSxNQUFNO2FBQ2YsQ0FBQTtRQUVILEtBQUssVUFBVTtZQUNiLE9BQU87Z0JBQ0wsR0FBRyxZQUFZO2dCQUNmLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFBRSxXQUFXO2FBQ3BCLENBQUE7UUFFSCxLQUFLLE1BQU07WUFDVCxPQUFPO2dCQUNMLEdBQUcsWUFBWTtnQkFDZixJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUUsTUFBTTthQUNmLENBQUE7UUFFSCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssVUFBVTtZQUNiLE9BQU87Z0JBQ0wsR0FBRyxZQUFZO2dCQUNmLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSTthQUNuQixDQUFBO1FBRUgsS0FBSyxVQUFVO1lBQ2IsT0FBTztnQkFDTCxHQUFHLFlBQVk7Z0JBQ2YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsTUFBTSxFQUFFLFVBQVU7YUFDbkIsQ0FBQTtRQUVILEtBQUssU0FBUztZQUNaLE9BQU87Z0JBQ0wsR0FBRyxZQUFZO2dCQUNmLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFBRSxTQUFTO2FBQ2xCLENBQUE7UUFFSCxLQUFLLE1BQU07WUFDVCxPQUFPO2dCQUNMLEdBQUcsWUFBWTtnQkFDZixJQUFJLEVBQUUsT0FBTztnQkFDYixNQUFNLEVBQUUsTUFBTTthQUNmLENBQUE7UUFFSDtZQUNFLE9BQU87Z0JBQ0wsR0FBRyxZQUFZO2dCQUNmLElBQUksRUFBRSxRQUFRO2FBQ2YsQ0FBQTtJQUNMLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNyB9IGZyb20gXCJqc29uLXNjaGVtYVwiXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSBcIi4uLy4uL2ZpZWxkL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgU2NoZW1hIH0gZnJvbSBcIi4uL1NjaGVtYS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U2NoZW1hVG9Kc29uU2NoZW1hKHNjaGVtYTogU2NoZW1hKTogSlNPTlNjaGVtYTcge1xuICBjb25zdCBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBKU09OU2NoZW1hNz4gPSB7fVxuICBjb25zdCByZXF1aXJlZDogc3RyaW5nW10gPSBbXVxuXG4gIGZvciAoY29uc3QgZmllbGQgb2Ygc2NoZW1hLmZpZWxkcykge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gY29udmVydEZpZWxkVG9Qcm9wZXJ0eShmaWVsZClcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHByb3BlcnRpZXNbZmllbGQubmFtZV0gPSBwcm9wZXJ0eVxuXG4gICAgICBpZiAoZmllbGQuY29uc3RyYWludHM/LnJlcXVpcmVkKSB7XG4gICAgICAgIHJlcXVpcmVkLnB1c2goZmllbGQubmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBqc29uU2NoZW1hOiBKU09OU2NoZW1hNyA9IHtcbiAgICAkc2NoZW1hOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBwcm9wZXJ0aWVzLFxuICB9XG5cbiAgaWYgKHJlcXVpcmVkLmxlbmd0aCA+IDApIHtcbiAgICBqc29uU2NoZW1hLnJlcXVpcmVkID0gcmVxdWlyZWRcbiAgfVxuXG4gIGlmIChzY2hlbWEudGl0bGUpIHtcbiAgICBqc29uU2NoZW1hLnRpdGxlID0gc2NoZW1hLnRpdGxlXG4gIH1cblxuICBpZiAoc2NoZW1hLmRlc2NyaXB0aW9uKSB7XG4gICAganNvblNjaGVtYS5kZXNjcmlwdGlvbiA9IHNjaGVtYS5kZXNjcmlwdGlvblxuICB9XG5cbiAgcmV0dXJuIGpzb25TY2hlbWFcbn1cblxuZnVuY3Rpb24gY29udmVydEZpZWxkVG9Qcm9wZXJ0eShmaWVsZDogRmllbGQpOiBKU09OU2NoZW1hNyB8IG51bGwge1xuICBjb25zdCBiYXNlUHJvcGVydHk6IFBhcnRpYWw8SlNPTlNjaGVtYTc+ID0ge31cblxuICBpZiAoZmllbGQudGl0bGUpIHtcbiAgICBiYXNlUHJvcGVydHkudGl0bGUgPSBmaWVsZC50aXRsZVxuICB9XG5cbiAgaWYgKGZpZWxkLmRlc2NyaXB0aW9uKSB7XG4gICAgYmFzZVByb3BlcnR5LmRlc2NyaXB0aW9uID0gZmllbGQuZGVzY3JpcHRpb25cbiAgfVxuXG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjoge1xuICAgICAgY29uc3QgcHJvcGVydHk6IEpTT05TY2hlbWE3ID0ge1xuICAgICAgICAuLi5iYXNlUHJvcGVydHksXG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5jb25zdHJhaW50cz8ubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcGVydHkubWluTGVuZ3RoID0gZmllbGQuY29uc3RyYWludHMubWluTGVuZ3RoXG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuY29uc3RyYWludHM/Lm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BlcnR5Lm1heExlbmd0aCA9IGZpZWxkLmNvbnN0cmFpbnRzLm1heExlbmd0aFxuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmNvbnN0cmFpbnRzPy5wYXR0ZXJuKSB7XG4gICAgICAgIHByb3BlcnR5LnBhdHRlcm4gPSBmaWVsZC5jb25zdHJhaW50cy5wYXR0ZXJuXG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuY29uc3RyYWludHM/LmVudW0pIHtcbiAgICAgICAgcHJvcGVydHkuZW51bSA9IGZpZWxkLmNvbnN0cmFpbnRzLmVudW1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BlcnR5XG4gICAgfVxuXG4gICAgY2FzZSBcIm51bWJlclwiOiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eTogSlNPTlNjaGVtYTcgPSB7XG4gICAgICAgIC4uLmJhc2VQcm9wZXJ0eSxcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5jb25zdHJhaW50cz8ubWluaW11bSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5jb25zdHJhaW50cy5taW5pbXVtID09PSBcIm51bWJlclwiXG4gICAgICApIHtcbiAgICAgICAgcHJvcGVydHkubWluaW11bSA9IGZpZWxkLmNvbnN0cmFpbnRzLm1pbmltdW1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuY29uc3RyYWludHM/Lm1heGltdW0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgZmllbGQuY29uc3RyYWludHMubWF4aW11bSA9PT0gXCJudW1iZXJcIlxuICAgICAgKSB7XG4gICAgICAgIHByb3BlcnR5Lm1heGltdW0gPSBmaWVsZC5jb25zdHJhaW50cy5tYXhpbXVtXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9wZXJ0eVxuICAgIH1cblxuICAgIGNhc2UgXCJpbnRlZ2VyXCI6IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5OiBKU09OU2NoZW1hNyA9IHtcbiAgICAgICAgLi4uYmFzZVByb3BlcnR5LFxuICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5jb25zdHJhaW50cz8ubWluaW11bSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5jb25zdHJhaW50cy5taW5pbXVtID09PSBcIm51bWJlclwiXG4gICAgICApIHtcbiAgICAgICAgcHJvcGVydHkubWluaW11bSA9IGZpZWxkLmNvbnN0cmFpbnRzLm1pbmltdW1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuY29uc3RyYWludHM/Lm1heGltdW0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgZmllbGQuY29uc3RyYWludHMubWF4aW11bSA9PT0gXCJudW1iZXJcIlxuICAgICAgKSB7XG4gICAgICAgIHByb3BlcnR5Lm1heGltdW0gPSBmaWVsZC5jb25zdHJhaW50cy5tYXhpbXVtXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9wZXJ0eVxuICAgIH1cblxuICAgIGNhc2UgXCJib29sZWFuXCI6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VQcm9wZXJ0eSxcbiAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSBcImFycmF5XCI6IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5OiBKU09OU2NoZW1hNyA9IHtcbiAgICAgICAgLi4uYmFzZVByb3BlcnR5LFxuICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5jb25zdHJhaW50cz8ubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcGVydHkubWluSXRlbXMgPSBmaWVsZC5jb25zdHJhaW50cy5taW5MZW5ndGhcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5jb25zdHJhaW50cz8ubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcGVydHkubWF4SXRlbXMgPSBmaWVsZC5jb25zdHJhaW50cy5tYXhMZW5ndGhcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5jb25zdHJhaW50cz8uanNvblNjaGVtYSkge1xuICAgICAgICBwcm9wZXJ0eS5pdGVtcyA9IGZpZWxkLmNvbnN0cmFpbnRzLmpzb25TY2hlbWFcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BlcnR5XG4gICAgfVxuXG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eTogSlNPTlNjaGVtYTcgPSB7XG4gICAgICAgIC4uLmJhc2VQcm9wZXJ0eSxcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLmNvbnN0cmFpbnRzPy5qc29uU2NoZW1hKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJvcGVydHksXG4gICAgICAgICAgLi4uZmllbGQuY29uc3RyYWludHMuanNvblNjaGVtYSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvcGVydHlcbiAgICB9XG5cbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZVByb3BlcnR5LFxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZGF0ZVwiLFxuICAgICAgfVxuXG4gICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlUHJvcGVydHksXG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJkYXRlLXRpbWVcIixcbiAgICAgIH1cblxuICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlUHJvcGVydHksXG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ0aW1lXCIsXG4gICAgICB9XG5cbiAgICBjYXNlIFwieWVhclwiOlxuICAgIGNhc2UgXCJ5ZWFybW9udGhcIjpcbiAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VQcm9wZXJ0eSxcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBmaWVsZC50eXBlLFxuICAgICAgfVxuXG4gICAgY2FzZSBcImdlb3BvaW50XCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlUHJvcGVydHksXG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJnZW9wb2ludFwiLFxuICAgICAgfVxuXG4gICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VQcm9wZXJ0eSxcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgZm9ybWF0OiBcImdlb2pzb25cIixcbiAgICAgIH1cblxuICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlUHJvcGVydHksXG4gICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgZm9ybWF0OiBcImxpc3RcIixcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlUHJvcGVydHksXG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|