@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,403 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { convertSchemaToJsonSchema } from "./toJsonSchema.js";
|
|
3
|
+
describe("convertSchemaToJsonSchema", () => {
|
|
4
|
+
it("converts Table Schema to JSONSchema object", () => {
|
|
5
|
+
const tableSchema = {
|
|
6
|
+
title: "User Schema",
|
|
7
|
+
description: "Schema for user data",
|
|
8
|
+
fields: [
|
|
9
|
+
{
|
|
10
|
+
name: "id",
|
|
11
|
+
type: "integer",
|
|
12
|
+
title: "User ID",
|
|
13
|
+
description: "Unique identifier",
|
|
14
|
+
constraints: {
|
|
15
|
+
required: true,
|
|
16
|
+
minimum: 1,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "name",
|
|
21
|
+
type: "string",
|
|
22
|
+
title: "Full Name",
|
|
23
|
+
constraints: {
|
|
24
|
+
required: true,
|
|
25
|
+
maxLength: 100,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "email",
|
|
30
|
+
type: "string",
|
|
31
|
+
constraints: {
|
|
32
|
+
pattern: "^[^@]+@[^@]+\\.[^@]+$",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "age",
|
|
37
|
+
type: "integer",
|
|
38
|
+
constraints: {
|
|
39
|
+
minimum: 0,
|
|
40
|
+
maximum: 150,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "isActive",
|
|
45
|
+
type: "boolean",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "tags",
|
|
49
|
+
type: "array",
|
|
50
|
+
constraints: {
|
|
51
|
+
minLength: 0,
|
|
52
|
+
maxLength: 10,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "metadata",
|
|
57
|
+
type: "object",
|
|
58
|
+
constraints: {
|
|
59
|
+
jsonSchema: {
|
|
60
|
+
type: "object",
|
|
61
|
+
properties: {
|
|
62
|
+
category: { type: "string" },
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
70
|
+
expect(jsonSchema.title).toBe("User Schema");
|
|
71
|
+
expect(jsonSchema.description).toBe("Schema for user data");
|
|
72
|
+
expect(jsonSchema.type).toBe("object");
|
|
73
|
+
expect(jsonSchema.required).toEqual(["id", "name"]);
|
|
74
|
+
expect(Object.keys(jsonSchema.properties || {})).toHaveLength(7);
|
|
75
|
+
expect(jsonSchema.properties?.id).toEqual({
|
|
76
|
+
type: "integer",
|
|
77
|
+
title: "User ID",
|
|
78
|
+
description: "Unique identifier",
|
|
79
|
+
minimum: 1,
|
|
80
|
+
});
|
|
81
|
+
expect(jsonSchema.properties?.name).toEqual({
|
|
82
|
+
type: "string",
|
|
83
|
+
title: "Full Name",
|
|
84
|
+
maxLength: 100,
|
|
85
|
+
});
|
|
86
|
+
expect(jsonSchema.properties?.email).toEqual({
|
|
87
|
+
type: "string",
|
|
88
|
+
pattern: "^[^@]+@[^@]+\\.[^@]+$",
|
|
89
|
+
});
|
|
90
|
+
expect(jsonSchema.properties?.age).toEqual({
|
|
91
|
+
type: "integer",
|
|
92
|
+
minimum: 0,
|
|
93
|
+
maximum: 150,
|
|
94
|
+
});
|
|
95
|
+
expect(jsonSchema.properties?.isActive).toEqual({
|
|
96
|
+
type: "boolean",
|
|
97
|
+
});
|
|
98
|
+
expect(jsonSchema.properties?.tags).toEqual({
|
|
99
|
+
type: "array",
|
|
100
|
+
minItems: 0,
|
|
101
|
+
maxItems: 10,
|
|
102
|
+
});
|
|
103
|
+
expect(jsonSchema.properties?.metadata).toEqual({
|
|
104
|
+
type: "object",
|
|
105
|
+
properties: {
|
|
106
|
+
category: { type: "string" },
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
it("handles string field types with various constraints", () => {
|
|
111
|
+
const tableSchema = {
|
|
112
|
+
fields: [
|
|
113
|
+
{
|
|
114
|
+
name: "basicString",
|
|
115
|
+
type: "string",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "constrainedString",
|
|
119
|
+
type: "string",
|
|
120
|
+
constraints: {
|
|
121
|
+
minLength: 5,
|
|
122
|
+
maxLength: 50,
|
|
123
|
+
pattern: "^[A-Z]",
|
|
124
|
+
enum: ["Option1", "Option2", "Option3"],
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
130
|
+
expect(jsonSchema.properties?.basicString).toEqual({
|
|
131
|
+
type: "string",
|
|
132
|
+
});
|
|
133
|
+
expect(jsonSchema.properties?.constrainedString).toEqual({
|
|
134
|
+
type: "string",
|
|
135
|
+
minLength: 5,
|
|
136
|
+
maxLength: 50,
|
|
137
|
+
pattern: "^[A-Z]",
|
|
138
|
+
enum: ["Option1", "Option2", "Option3"],
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
it("handles numeric field types", () => {
|
|
142
|
+
const tableSchema = {
|
|
143
|
+
fields: [
|
|
144
|
+
{
|
|
145
|
+
name: "simpleNumber",
|
|
146
|
+
type: "number",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: "constrainedNumber",
|
|
150
|
+
type: "number",
|
|
151
|
+
constraints: {
|
|
152
|
+
minimum: 0.1,
|
|
153
|
+
maximum: 99.9,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: "simpleInteger",
|
|
158
|
+
type: "integer",
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: "constrainedInteger",
|
|
162
|
+
type: "integer",
|
|
163
|
+
constraints: {
|
|
164
|
+
minimum: 1,
|
|
165
|
+
maximum: 100,
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
171
|
+
expect(jsonSchema.properties?.simpleNumber).toEqual({
|
|
172
|
+
type: "number",
|
|
173
|
+
});
|
|
174
|
+
expect(jsonSchema.properties?.constrainedNumber).toEqual({
|
|
175
|
+
type: "number",
|
|
176
|
+
minimum: 0.1,
|
|
177
|
+
maximum: 99.9,
|
|
178
|
+
});
|
|
179
|
+
expect(jsonSchema.properties?.simpleInteger).toEqual({
|
|
180
|
+
type: "integer",
|
|
181
|
+
});
|
|
182
|
+
expect(jsonSchema.properties?.constrainedInteger).toEqual({
|
|
183
|
+
type: "integer",
|
|
184
|
+
minimum: 1,
|
|
185
|
+
maximum: 100,
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
it("handles array and object field types", () => {
|
|
189
|
+
const tableSchema = {
|
|
190
|
+
fields: [
|
|
191
|
+
{
|
|
192
|
+
name: "simpleArray",
|
|
193
|
+
type: "array",
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: "constrainedArray",
|
|
197
|
+
type: "array",
|
|
198
|
+
constraints: {
|
|
199
|
+
minLength: 1,
|
|
200
|
+
maxLength: 5,
|
|
201
|
+
jsonSchema: {
|
|
202
|
+
type: "string",
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: "simpleObject",
|
|
208
|
+
type: "object",
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
name: "constrainedObject",
|
|
212
|
+
type: "object",
|
|
213
|
+
constraints: {
|
|
214
|
+
jsonSchema: {
|
|
215
|
+
type: "object",
|
|
216
|
+
properties: {
|
|
217
|
+
nested: { type: "string" },
|
|
218
|
+
},
|
|
219
|
+
required: ["nested"],
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
};
|
|
225
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
226
|
+
expect(jsonSchema.properties?.simpleArray).toEqual({
|
|
227
|
+
type: "array",
|
|
228
|
+
});
|
|
229
|
+
expect(jsonSchema.properties?.constrainedArray).toEqual({
|
|
230
|
+
type: "array",
|
|
231
|
+
minItems: 1,
|
|
232
|
+
maxItems: 5,
|
|
233
|
+
items: {
|
|
234
|
+
type: "string",
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
expect(jsonSchema.properties?.simpleObject).toEqual({
|
|
238
|
+
type: "object",
|
|
239
|
+
});
|
|
240
|
+
expect(jsonSchema.properties?.constrainedObject).toEqual({
|
|
241
|
+
type: "object",
|
|
242
|
+
properties: {
|
|
243
|
+
nested: { type: "string" },
|
|
244
|
+
},
|
|
245
|
+
required: ["nested"],
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
it("handles date and time field types", () => {
|
|
249
|
+
const tableSchema = {
|
|
250
|
+
fields: [
|
|
251
|
+
{
|
|
252
|
+
name: "dateField",
|
|
253
|
+
type: "date",
|
|
254
|
+
title: "Date Field",
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
name: "datetimeField",
|
|
258
|
+
type: "datetime",
|
|
259
|
+
description: "DateTime Field",
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
name: "timeField",
|
|
263
|
+
type: "time",
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: "yearField",
|
|
267
|
+
type: "year",
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: "yearmonthField",
|
|
271
|
+
type: "yearmonth",
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: "durationField",
|
|
275
|
+
type: "duration",
|
|
276
|
+
},
|
|
277
|
+
],
|
|
278
|
+
};
|
|
279
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
280
|
+
expect(jsonSchema.properties?.dateField).toEqual({
|
|
281
|
+
type: "string",
|
|
282
|
+
format: "date",
|
|
283
|
+
title: "Date Field",
|
|
284
|
+
});
|
|
285
|
+
expect(jsonSchema.properties?.datetimeField).toEqual({
|
|
286
|
+
type: "string",
|
|
287
|
+
format: "date-time",
|
|
288
|
+
description: "DateTime Field",
|
|
289
|
+
});
|
|
290
|
+
expect(jsonSchema.properties?.timeField).toEqual({
|
|
291
|
+
type: "string",
|
|
292
|
+
format: "time",
|
|
293
|
+
});
|
|
294
|
+
expect(jsonSchema.properties?.yearField).toEqual({
|
|
295
|
+
type: "string",
|
|
296
|
+
format: "year",
|
|
297
|
+
});
|
|
298
|
+
expect(jsonSchema.properties?.yearmonthField).toEqual({
|
|
299
|
+
type: "string",
|
|
300
|
+
format: "yearmonth",
|
|
301
|
+
});
|
|
302
|
+
expect(jsonSchema.properties?.durationField).toEqual({
|
|
303
|
+
type: "string",
|
|
304
|
+
format: "duration",
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
it("handles geospatial field types", () => {
|
|
308
|
+
const tableSchema = {
|
|
309
|
+
fields: [
|
|
310
|
+
{
|
|
311
|
+
name: "geopointField",
|
|
312
|
+
type: "geopoint",
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: "geojsonField",
|
|
316
|
+
type: "geojson",
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
};
|
|
320
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
321
|
+
expect(jsonSchema.properties?.geopointField).toEqual({
|
|
322
|
+
type: "string",
|
|
323
|
+
format: "geopoint",
|
|
324
|
+
});
|
|
325
|
+
expect(jsonSchema.properties?.geojsonField).toEqual({
|
|
326
|
+
type: "object",
|
|
327
|
+
format: "geojson",
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
it("handles special field types", () => {
|
|
331
|
+
const tableSchema = {
|
|
332
|
+
fields: [
|
|
333
|
+
{
|
|
334
|
+
name: "listField",
|
|
335
|
+
type: "list",
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
name: "anyField",
|
|
339
|
+
type: "any",
|
|
340
|
+
},
|
|
341
|
+
],
|
|
342
|
+
};
|
|
343
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
344
|
+
expect(jsonSchema.properties?.listField).toEqual({
|
|
345
|
+
type: "array",
|
|
346
|
+
format: "list",
|
|
347
|
+
});
|
|
348
|
+
expect(jsonSchema.properties?.anyField).toEqual({
|
|
349
|
+
type: "string",
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
it("handles schema without title and description", () => {
|
|
353
|
+
const tableSchema = {
|
|
354
|
+
fields: [
|
|
355
|
+
{
|
|
356
|
+
name: "field1",
|
|
357
|
+
type: "string",
|
|
358
|
+
},
|
|
359
|
+
],
|
|
360
|
+
};
|
|
361
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
362
|
+
expect(jsonSchema.title).toBeUndefined();
|
|
363
|
+
expect(jsonSchema.description).toBeUndefined();
|
|
364
|
+
expect(jsonSchema.type).toBe("object");
|
|
365
|
+
expect(jsonSchema.properties?.field1).toEqual({
|
|
366
|
+
type: "string",
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
it("handles schema with no required fields", () => {
|
|
370
|
+
const tableSchema = {
|
|
371
|
+
fields: [
|
|
372
|
+
{
|
|
373
|
+
name: "optionalField1",
|
|
374
|
+
type: "string",
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
name: "optionalField2",
|
|
378
|
+
type: "integer",
|
|
379
|
+
},
|
|
380
|
+
],
|
|
381
|
+
};
|
|
382
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
383
|
+
expect(jsonSchema.required).toBeUndefined();
|
|
384
|
+
expect(jsonSchema.properties?.optionalField1).toEqual({
|
|
385
|
+
type: "string",
|
|
386
|
+
});
|
|
387
|
+
expect(jsonSchema.properties?.optionalField2).toEqual({
|
|
388
|
+
type: "integer",
|
|
389
|
+
});
|
|
390
|
+
});
|
|
391
|
+
it("handles empty schema", () => {
|
|
392
|
+
const tableSchema = {
|
|
393
|
+
fields: [],
|
|
394
|
+
};
|
|
395
|
+
const jsonSchema = convertSchemaToJsonSchema(tableSchema);
|
|
396
|
+
expect(jsonSchema.type).toBe("object");
|
|
397
|
+
expect(jsonSchema.properties).toEqual({});
|
|
398
|
+
expect(jsonSchema.required).toBeUndefined();
|
|
399
|
+
expect(jsonSchema.title).toBeUndefined();
|
|
400
|
+
expect(jsonSchema.description).toBeUndefined();
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9Kc29uU2NoZW1hLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zY2hlbWEvY29udmVydC90b0pzb25TY2hlbWEuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFN0QsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtJQUN6QyxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1FBQ3BELE1BQU0sV0FBVyxHQUFzRDtZQUNyRSxLQUFLLEVBQUUsYUFBYTtZQUNwQixXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxJQUFJLEVBQUUsSUFBSTtvQkFDVixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsU0FBUztvQkFDaEIsV0FBVyxFQUFFLG1CQUFtQjtvQkFDaEMsV0FBVyxFQUFFO3dCQUNYLFFBQVEsRUFBRSxJQUFJO3dCQUNkLE9BQU8sRUFBRSxDQUFDO3FCQUNYO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxXQUFXO29CQUNsQixXQUFXLEVBQUU7d0JBQ1gsUUFBUSxFQUFFLElBQUk7d0JBQ2QsU0FBUyxFQUFFLEdBQUc7cUJBQ2Y7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFO3dCQUNYLE9BQU8sRUFBRSx1QkFBdUI7cUJBQ2pDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxLQUFLO29CQUNYLElBQUksRUFBRSxTQUFTO29CQUNmLFdBQVcsRUFBRTt3QkFDWCxPQUFPLEVBQUUsQ0FBQzt3QkFDVixP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QVUsR0FBRyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV6RCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN0QyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN6QyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQzNDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUNoRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB0eXBlIHsgU2NoZW1hIH0gZnJvbSBcIi4uL1NjaGVtYS50c1wiXG5pbXBvcnQgeyBjb252ZXJ0U2NoZW1hVG9Kc29uU2NoZW1hIH0gZnJvbSBcIi4vdG9Kc29uU2NoZW1hLnRzXCJcblxuZGVzY3JpYmUoXCJjb252ZXJ0U2NoZW1hVG9Kc29uU2NoZW1hXCIsICgpID0+IHtcbiAgaXQoXCJjb252ZXJ0cyBUYWJsZSBTY2hlbWEgdG8gSlNPTlNjaGVtYSBvYmplY3RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlU2NoZW1hOiBTY2hlbWEgJiB7IHRpdGxlPzogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9ID0ge1xuICAgICAgdGl0bGU6IFwiVXNlciBTY2hlbWFcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNjaGVtYSBmb3IgdXNlciBkYXRhXCIsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgICB0aXRsZTogXCJVc2VyIElEXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVW5pcXVlIGlkZW50aWZpZXJcIixcbiAgICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIHRpdGxlOiBcIkZ1bGwgTmFtZVwiLFxuICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIG1heExlbmd0aDogMTAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgcGF0dGVybjogXCJeW15AXStAW15AXStcXFxcLlteQF0rJFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImFnZVwiLFxuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgbWF4aW11bTogMTUwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlzQWN0aXZlXCIsXG4gICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRhZ3NcIixcbiAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIG1pbkxlbmd0aDogMCxcbiAgICAgICAgICAgIG1heExlbmd0aDogMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibWV0YWRhdGFcIixcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICBqc29uU2NoZW1hOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IGpzb25TY2hlbWEgPSBjb252ZXJ0U2NoZW1hVG9Kc29uU2NoZW1hKHRhYmxlU2NoZW1hKVxuXG4gICAgZXhwZWN0KGpzb25TY2hlbWEudGl0bGUpLnRvQmUoXCJVc2VyIFNjaGVtYVwiKVxuICAgIGV4cGVjdChqc29uU2NoZW1hLmRlc2NyaXB0aW9uKS50b0JlKFwiU2NoZW1hIGZvciB1c2VyIGRhdGFcIilcbiAgICBleHBlY3QoanNvblNjaGVtYS50eXBlKS50b0JlKFwib2JqZWN0XCIpXG4gICAgZXhwZWN0KGpzb25TY2hlbWEucmVxdWlyZWQpLnRvRXF1YWwoW1wiaWRcIiwgXCJuYW1lXCJdKVxuICAgIGV4cGVjdChPYmplY3Qua2V5cyhqc29uU2NoZW1hLnByb3BlcnRpZXMgfHwge30pKS50b0hhdmVMZW5ndGgoNylcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LmlkKS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgdGl0bGU6IFwiVXNlciBJRFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVW5pcXVlIGlkZW50aWZpZXJcIixcbiAgICAgIG1pbmltdW06IDEsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/Lm5hbWUpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHRpdGxlOiBcIkZ1bGwgTmFtZVwiLFxuICAgICAgbWF4TGVuZ3RoOiAxMDAsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LmVtYWlsKS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBwYXR0ZXJuOiBcIl5bXkBdK0BbXkBdK1xcXFwuW15AXSskXCIsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LmFnZSkudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgIG1pbmltdW06IDAsXG4gICAgICBtYXhpbXVtOiAxNTAsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LmlzQWN0aXZlKS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy50YWdzKS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIG1pbkl0ZW1zOiAwLFxuICAgICAgbWF4SXRlbXM6IDEwLFxuICAgIH0pXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy5tZXRhZGF0YSkudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBjYXRlZ29yeTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICB9LFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHN0cmluZyBmaWVsZCB0eXBlcyB3aXRoIHZhcmlvdXMgY29uc3RyYWludHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlU2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiYmFzaWNTdHJpbmdcIixcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjb25zdHJhaW5lZFN0cmluZ1wiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIG1pbkxlbmd0aDogNSxcbiAgICAgICAgICAgIG1heExlbmd0aDogNTAsXG4gICAgICAgICAgICBwYXR0ZXJuOiBcIl5bQS1aXVwiLFxuICAgICAgICAgICAgZW51bTogW1wiT3B0aW9uMVwiLCBcIk9wdGlvbjJcIiwgXCJPcHRpb24zXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IGpzb25TY2hlbWEgPSBjb252ZXJ0U2NoZW1hVG9Kc29uU2NoZW1hKHRhYmxlU2NoZW1hKVxuXG4gICAgZXhwZWN0KChqc29uU2NoZW1hLnByb3BlcnRpZXMgYXMgYW55KT8uYmFzaWNTdHJpbmcpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICB9KVxuXG4gICAgZXhwZWN0KChqc29uU2NoZW1hLnByb3BlcnRpZXMgYXMgYW55KT8uY29uc3RyYWluZWRTdHJpbmcpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIG1pbkxlbmd0aDogNSxcbiAgICAgIG1heExlbmd0aDogNTAsXG4gICAgICBwYXR0ZXJuOiBcIl5bQS1aXVwiLFxuICAgICAgZW51bTogW1wiT3B0aW9uMVwiLCBcIk9wdGlvbjJcIiwgXCJPcHRpb24zXCJdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIG51bWVyaWMgZmllbGQgdHlwZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlU2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2ltcGxlTnVtYmVyXCIsXG4gICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY29uc3RyYWluZWROdW1iZXJcIixcbiAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICBtaW5pbXVtOiAwLjEsXG4gICAgICAgICAgICBtYXhpbXVtOiA5OS45LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNpbXBsZUludGVnZXJcIixcbiAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY29uc3RyYWluZWRJbnRlZ2VyXCIsXG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgICBtYXhpbXVtOiAxMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QganNvblNjaGVtYSA9IGNvbnZlcnRTY2hlbWFUb0pzb25TY2hlbWEodGFibGVTY2hlbWEpXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy5zaW1wbGVOdW1iZXIpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICB9KVxuXG4gICAgZXhwZWN0KChqc29uU2NoZW1hLnByb3BlcnRpZXMgYXMgYW55KT8uY29uc3RyYWluZWROdW1iZXIpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIG1pbmltdW06IDAuMSxcbiAgICAgIG1heGltdW06IDk5LjksXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LnNpbXBsZUludGVnZXIpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LmNvbnN0cmFpbmVkSW50ZWdlcikudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgIG1pbmltdW06IDEsXG4gICAgICBtYXhpbXVtOiAxMDAsXG4gICAgfSlcbiAgfSlcblxuICBpdChcImhhbmRsZXMgYXJyYXkgYW5kIG9iamVjdCBmaWVsZCB0eXBlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGVTY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaW1wbGVBcnJheVwiLFxuICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY29uc3RyYWluZWRBcnJheVwiLFxuICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiA1LFxuICAgICAgICAgICAganNvblNjaGVtYToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaW1wbGVPYmplY3RcIixcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjb25zdHJhaW5lZE9iamVjdFwiLFxuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIGpzb25TY2hlbWE6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIG5lc3RlZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbXCJuZXN0ZWRcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IGpzb25TY2hlbWEgPSBjb252ZXJ0U2NoZW1hVG9Kc29uU2NoZW1hKHRhYmxlU2NoZW1hKVxuXG4gICAgZXhwZWN0KChqc29uU2NoZW1hLnByb3BlcnRpZXMgYXMgYW55KT8uc2ltcGxlQXJyYXkpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy5jb25zdHJhaW5lZEFycmF5KS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgbWF4SXRlbXM6IDUsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgZXhwZWN0KChqc29uU2NoZW1hLnByb3BlcnRpZXMgYXMgYW55KT8uc2ltcGxlT2JqZWN0KS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LmNvbnN0cmFpbmVkT2JqZWN0KS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5lc3RlZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFtcIm5lc3RlZFwiXSxcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBkYXRlIGFuZCB0aW1lIGZpZWxkIHR5cGVzXCIsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZVNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRhdGVGaWVsZFwiLFxuICAgICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAgIHRpdGxlOiBcIkRhdGUgRmllbGRcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZGF0ZXRpbWVGaWVsZFwiLFxuICAgICAgICAgIHR5cGU6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJEYXRlVGltZSBGaWVsZFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0aW1lRmllbGRcIixcbiAgICAgICAgICB0eXBlOiBcInRpbWVcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwieWVhckZpZWxkXCIsXG4gICAgICAgICAgdHlwZTogXCJ5ZWFyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInllYXJtb250aEZpZWxkXCIsXG4gICAgICAgICAgdHlwZTogXCJ5ZWFybW9udGhcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZHVyYXRpb25GaWVsZFwiLFxuICAgICAgICAgIHR5cGU6IFwiZHVyYXRpb25cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QganNvblNjaGVtYSA9IGNvbnZlcnRTY2hlbWFUb0pzb25TY2hlbWEodGFibGVTY2hlbWEpXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy5kYXRlRmllbGQpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGZvcm1hdDogXCJkYXRlXCIsXG4gICAgICB0aXRsZTogXCJEYXRlIEZpZWxkXCIsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LmRhdGV0aW1lRmllbGQpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGZvcm1hdDogXCJkYXRlLXRpbWVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRhdGVUaW1lIEZpZWxkXCIsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LnRpbWVGaWVsZCkudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZm9ybWF0OiBcInRpbWVcIixcbiAgICB9KVxuXG4gICAgZXhwZWN0KChqc29uU2NoZW1hLnByb3BlcnRpZXMgYXMgYW55KT8ueWVhckZpZWxkKS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBmb3JtYXQ6IFwieWVhclwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy55ZWFybW9udGhGaWVsZCkudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZm9ybWF0OiBcInllYXJtb250aFwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy5kdXJhdGlvbkZpZWxkKS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBmb3JtYXQ6IFwiZHVyYXRpb25cIixcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBnZW9zcGF0aWFsIGZpZWxkIHR5cGVzXCIsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZVNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImdlb3BvaW50RmllbGRcIixcbiAgICAgICAgICB0eXBlOiBcImdlb3BvaW50XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImdlb2pzb25GaWVsZFwiLFxuICAgICAgICAgIHR5cGU6IFwiZ2VvanNvblwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBqc29uU2NoZW1hID0gY29udmVydFNjaGVtYVRvSnNvblNjaGVtYSh0YWJsZVNjaGVtYSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/Lmdlb3BvaW50RmllbGQpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGZvcm1hdDogXCJnZW9wb2ludFwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy5nZW9qc29uRmllbGQpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGZvcm1hdDogXCJnZW9qc29uXCIsXG4gICAgfSlcbiAgfSlcblxuICBpdChcImhhbmRsZXMgc3BlY2lhbCBmaWVsZCB0eXBlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGVTY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJsaXN0RmllbGRcIixcbiAgICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiYW55RmllbGRcIixcbiAgICAgICAgICB0eXBlOiBcImFueVwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBqc29uU2NoZW1hID0gY29udmVydFNjaGVtYVRvSnNvblNjaGVtYSh0YWJsZVNjaGVtYSlcblxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/Lmxpc3RGaWVsZCkudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBmb3JtYXQ6IFwibGlzdFwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy5hbnlGaWVsZCkudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHNjaGVtYSB3aXRob3V0IHRpdGxlIGFuZCBkZXNjcmlwdGlvblwiLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGVTY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJmaWVsZDFcIixcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBqc29uU2NoZW1hID0gY29udmVydFNjaGVtYVRvSnNvblNjaGVtYSh0YWJsZVNjaGVtYSlcblxuICAgIGV4cGVjdChqc29uU2NoZW1hLnRpdGxlKS50b0JlVW5kZWZpbmVkKClcbiAgICBleHBlY3QoanNvblNjaGVtYS5kZXNjcmlwdGlvbikudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KGpzb25TY2hlbWEudHlwZSkudG9CZShcIm9iamVjdFwiKVxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/LmZpZWxkMSkudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIHNjaGVtYSB3aXRoIG5vIHJlcXVpcmVkIGZpZWxkc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGVTY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJvcHRpb25hbEZpZWxkMVwiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm9wdGlvbmFsRmllbGQyXCIsXG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IGpzb25TY2hlbWEgPSBjb252ZXJ0U2NoZW1hVG9Kc29uU2NoZW1hKHRhYmxlU2NoZW1hKVxuXG4gICAgZXhwZWN0KGpzb25TY2hlbWEucmVxdWlyZWQpLnRvQmVVbmRlZmluZWQoKVxuICAgIGV4cGVjdCgoanNvblNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueSk/Lm9wdGlvbmFsRmllbGQxKS50b0VxdWFsKHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgfSlcbiAgICBleHBlY3QoKGpzb25TY2hlbWEucHJvcGVydGllcyBhcyBhbnkpPy5vcHRpb25hbEZpZWxkMikudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBlbXB0eSBzY2hlbWFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlU2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgIH1cblxuICAgIGNvbnN0IGpzb25TY2hlbWEgPSBjb252ZXJ0U2NoZW1hVG9Kc29uU2NoZW1hKHRhYmxlU2NoZW1hKVxuXG4gICAgZXhwZWN0KGpzb25TY2hlbWEudHlwZSkudG9CZShcIm9iamVjdFwiKVxuICAgIGV4cGVjdChqc29uU2NoZW1hLnByb3BlcnRpZXMpLnRvRXF1YWwoe30pXG4gICAgZXhwZWN0KGpzb25TY2hlbWEucmVxdWlyZWQpLnRvQmVVbmRlZmluZWQoKVxuICAgIGV4cGVjdChqc29uU2NoZW1hLnRpdGxlKS50b0JlVW5kZWZpbmVkKClcbiAgICBleHBlY3QoanNvblNjaGVtYS5kZXNjcmlwdGlvbikudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type { Schema } from "./Schema.ts";
|
|
2
|
+
export type { ForeignKey } from "./ForeignKey.ts";
|
|
3
|
+
export { assertSchema } from "./assert.ts";
|
|
4
|
+
export { loadSchema } from "./load.ts";
|
|
5
|
+
export { saveSchema } from "./save.ts";
|
|
6
|
+
export { validateSchema } from "./validate.ts";
|
|
7
|
+
export { convertSchemaFromDescriptor } from "./convert/fromDescriptor.ts";
|
|
8
|
+
export { convertSchemaToDescriptor } from "./convert/toDescriptor.ts";
|
|
9
|
+
export { convertSchemaFromJsonSchema } from "./convert/fromJsonSchema.ts";
|
|
10
|
+
export { convertSchemaToJsonSchema } from "./convert/toJsonSchema.ts";
|
|
11
|
+
export { resolveSchema } from "./resolve.ts";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { assertSchema } from "./assert.js";
|
|
2
|
+
export { loadSchema } from "./load.js";
|
|
3
|
+
export { saveSchema } from "./save.js";
|
|
4
|
+
export { validateSchema } from "./validate.js";
|
|
5
|
+
export { convertSchemaFromDescriptor } from "./convert/fromDescriptor.js";
|
|
6
|
+
export { convertSchemaToDescriptor } from "./convert/toDescriptor.js";
|
|
7
|
+
export { convertSchemaFromJsonSchema } from "./convert/fromJsonSchema.js";
|
|
8
|
+
export { convertSchemaToJsonSchema } from "./convert/toJsonSchema.js";
|
|
9
|
+
export { resolveSchema } from "./resolve.js";
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zY2hlbWEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBTY2hlbWEgfSBmcm9tIFwiLi9TY2hlbWEudHNcIlxuZXhwb3J0IHR5cGUgeyBGb3JlaWduS2V5IH0gZnJvbSBcIi4vRm9yZWlnbktleS50c1wiXG5leHBvcnQgeyBhc3NlcnRTY2hlbWEgfSBmcm9tIFwiLi9hc3NlcnQudHNcIlxuZXhwb3J0IHsgbG9hZFNjaGVtYSB9IGZyb20gXCIuL2xvYWQudHNcIlxuZXhwb3J0IHsgc2F2ZVNjaGVtYSB9IGZyb20gXCIuL3NhdmUudHNcIlxuZXhwb3J0IHsgdmFsaWRhdGVTY2hlbWEgfSBmcm9tIFwiLi92YWxpZGF0ZS50c1wiXG5leHBvcnQgeyBjb252ZXJ0U2NoZW1hRnJvbURlc2NyaXB0b3IgfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21EZXNjcmlwdG9yLnRzXCJcbmV4cG9ydCB7IGNvbnZlcnRTY2hlbWFUb0Rlc2NyaXB0b3IgfSBmcm9tIFwiLi9jb252ZXJ0L3RvRGVzY3JpcHRvci50c1wiXG5leHBvcnQgeyBjb252ZXJ0U2NoZW1hRnJvbUpzb25TY2hlbWEgfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21Kc29uU2NoZW1hLnRzXCJcbmV4cG9ydCB7IGNvbnZlcnRTY2hlbWFUb0pzb25TY2hlbWEgfSBmcm9tIFwiLi9jb252ZXJ0L3RvSnNvblNjaGVtYS50c1wiXG5leHBvcnQgeyByZXNvbHZlU2NoZW1hIH0gZnJvbSBcIi4vcmVzb2x2ZS50c1wiXG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { loadDescriptor } from "../descriptor/index.js";
|
|
2
|
+
import { assertSchema } from "./assert.js";
|
|
3
|
+
/**
|
|
4
|
+
* Load a Schema descriptor (JSON Object) from a file or URL
|
|
5
|
+
* Ensures the descriptor is valid against its profile
|
|
6
|
+
*/
|
|
7
|
+
export async function loadSchema(path) {
|
|
8
|
+
const descriptor = await loadDescriptor(path);
|
|
9
|
+
const schema = await assertSchema(descriptor);
|
|
10
|
+
return schema;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NjaGVtYS9sb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTFDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQVk7SUFDM0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDN0MsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZERlc2NyaXB0b3IgfSBmcm9tIFwiLi4vZGVzY3JpcHRvci9pbmRleC50c1wiXG5pbXBvcnQgeyBhc3NlcnRTY2hlbWEgfSBmcm9tIFwiLi9hc3NlcnQudHNcIlxuXG4vKipcbiAqIExvYWQgYSBTY2hlbWEgZGVzY3JpcHRvciAoSlNPTiBPYmplY3QpIGZyb20gYSBmaWxlIG9yIFVSTFxuICogRW5zdXJlcyB0aGUgZGVzY3JpcHRvciBpcyB2YWxpZCBhZ2FpbnN0IGl0cyBwcm9maWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU2NoZW1hKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgbG9hZERlc2NyaXB0b3IocGF0aClcbiAgY29uc3Qgc2NoZW1hID0gYXdhaXQgYXNzZXJ0U2NoZW1hKGRlc2NyaXB0b3IpXG4gIHJldHVybiBzY2hlbWFcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { describe, expect, expectTypeOf, it } from "vitest";
|
|
3
|
+
import { loadSchema } from "./load.js";
|
|
4
|
+
describe("loadSchema", () => {
|
|
5
|
+
const getFixturePath = (name) => join(import.meta.dirname, "fixtures", name);
|
|
6
|
+
const expectedSchema = {
|
|
7
|
+
fields: [
|
|
8
|
+
{
|
|
9
|
+
name: "id",
|
|
10
|
+
type: "integer",
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: "name",
|
|
14
|
+
type: "string",
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
it("loads a schema from a local file path", async () => {
|
|
19
|
+
const schema = await loadSchema(getFixturePath("schema.json"));
|
|
20
|
+
expectTypeOf(schema).toEqualTypeOf();
|
|
21
|
+
expect(schema).toEqual(expectedSchema);
|
|
22
|
+
});
|
|
23
|
+
it("throws an error when schema is invalid", async () => {
|
|
24
|
+
await expect(loadSchema(getFixturePath("schema-invalid.json"))).rejects.toThrow();
|
|
25
|
+
});
|
|
26
|
+
it("loads a full schema with all features", async () => {
|
|
27
|
+
const schema = await loadSchema(getFixturePath("schema-full.json"));
|
|
28
|
+
expectTypeOf(schema).toEqualTypeOf();
|
|
29
|
+
expect(schema).toBeDefined();
|
|
30
|
+
expect(schema.$schema).toBe("https://datapackage.org/profiles/2.0/tableschema.json");
|
|
31
|
+
expect(schema.name).toBe("users");
|
|
32
|
+
expect(schema.title).toBe("User Data Schema");
|
|
33
|
+
expect(schema.description).toBe("A comprehensive schema for user data");
|
|
34
|
+
expect(schema.fields).toHaveLength(9);
|
|
35
|
+
expect(schema.fields[0]?.name).toBe("id");
|
|
36
|
+
expect(schema.fields[0]?.type).toBe("integer");
|
|
37
|
+
expect(schema.fields[0]?.constraints?.required).toBe(true);
|
|
38
|
+
expect(schema.fields[0]?.constraints?.unique).toBe(true);
|
|
39
|
+
expect(schema.fields[1]?.name).toBe("email");
|
|
40
|
+
expect(schema.fields[1]?.type).toBe("string");
|
|
41
|
+
expect(schema.fields[1]?.format).toBe("email");
|
|
42
|
+
expect(schema.fields[6]?.name).toBe("created_at");
|
|
43
|
+
expect(schema.fields[6]?.type).toBe("datetime");
|
|
44
|
+
expect(schema.primaryKey).toEqual(["id"]);
|
|
45
|
+
expect(schema.uniqueKeys).toHaveLength(2);
|
|
46
|
+
expect(schema.uniqueKeys?.[0]).toEqual(["email"]);
|
|
47
|
+
expect(schema.uniqueKeys?.[1]).toEqual(["name", "department_id"]);
|
|
48
|
+
expect(schema.foreignKeys).toHaveLength(1);
|
|
49
|
+
expect(schema.foreignKeys?.[0]?.fields).toEqual(["department_id"]);
|
|
50
|
+
expect(schema.foreignKeys?.[0]?.reference?.resource).toBe("departments");
|
|
51
|
+
expect(schema.foreignKeys?.[0]?.reference?.fields).toEqual(["id"]);
|
|
52
|
+
expect(schema.missingValues).toEqual(["", "NA", "N/A", "null"]);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2NoZW1hL2xvYWQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV0QyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUMxQixNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDN0MsTUFBTSxjQUFjLEdBQUc7UUFDckIsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLFNBQVM7YUFDaEI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0Y7S0FDRixDQUFBO0lBRUQsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1FBRTlELFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQVUsQ0FBQTtRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RELE1BQU0sTUFBTSxDQUNWLFVBQVUsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUNsRCxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNyQixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBO1FBRW5FLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQVUsQ0FBQTtRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3pCLHVEQUF1RCxDQUN4RCxDQUFBO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO1FBRXZFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXhELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXpDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQTtRQUVqRSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFbEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ2pFLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBleHBlY3RUeXBlT2YsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgdHlwZSB7IFNjaGVtYSB9IGZyb20gXCIuL1NjaGVtYS50c1wiXG5pbXBvcnQgeyBsb2FkU2NoZW1hIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5cbmRlc2NyaWJlKFwibG9hZFNjaGVtYVwiLCAoKSA9PiB7XG4gIGNvbnN0IGdldEZpeHR1cmVQYXRoID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiZml4dHVyZXNcIiwgbmFtZSlcbiAgY29uc3QgZXhwZWN0ZWRTY2hlbWEgPSB7XG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfVxuXG4gIGl0KFwibG9hZHMgYSBzY2hlbWEgZnJvbSBhIGxvY2FsIGZpbGUgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgbG9hZFNjaGVtYShnZXRGaXh0dXJlUGF0aChcInNjaGVtYS5qc29uXCIpKVxuXG4gICAgZXhwZWN0VHlwZU9mKHNjaGVtYSkudG9FcXVhbFR5cGVPZjxTY2hlbWE+KClcbiAgICBleHBlY3Qoc2NoZW1hKS50b0VxdWFsKGV4cGVjdGVkU2NoZW1hKVxuICB9KVxuXG4gIGl0KFwidGhyb3dzIGFuIGVycm9yIHdoZW4gc2NoZW1hIGlzIGludmFsaWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGxvYWRTY2hlbWEoZ2V0Rml4dHVyZVBhdGgoXCJzY2hlbWEtaW52YWxpZC5qc29uXCIpKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygpXG4gIH0pXG5cbiAgaXQoXCJsb2FkcyBhIGZ1bGwgc2NoZW1hIHdpdGggYWxsIGZlYXR1cmVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCBsb2FkU2NoZW1hKGdldEZpeHR1cmVQYXRoKFwic2NoZW1hLWZ1bGwuanNvblwiKSlcblxuICAgIGV4cGVjdFR5cGVPZihzY2hlbWEpLnRvRXF1YWxUeXBlT2Y8U2NoZW1hPigpXG4gICAgZXhwZWN0KHNjaGVtYSkudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChzY2hlbWEuJHNjaGVtYSkudG9CZShcbiAgICAgIFwiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMi4wL3RhYmxlc2NoZW1hLmpzb25cIixcbiAgICApXG4gICAgZXhwZWN0KHNjaGVtYS5uYW1lKS50b0JlKFwidXNlcnNcIilcbiAgICBleHBlY3Qoc2NoZW1hLnRpdGxlKS50b0JlKFwiVXNlciBEYXRhIFNjaGVtYVwiKVxuICAgIGV4cGVjdChzY2hlbWEuZGVzY3JpcHRpb24pLnRvQmUoXCJBIGNvbXByZWhlbnNpdmUgc2NoZW1hIGZvciB1c2VyIGRhdGFcIilcblxuICAgIGV4cGVjdChzY2hlbWEuZmllbGRzKS50b0hhdmVMZW5ndGgoOSlcbiAgICBleHBlY3Qoc2NoZW1hLmZpZWxkc1swXT8ubmFtZSkudG9CZShcImlkXCIpXG4gICAgZXhwZWN0KHNjaGVtYS5maWVsZHNbMF0/LnR5cGUpLnRvQmUoXCJpbnRlZ2VyXCIpXG4gICAgZXhwZWN0KHNjaGVtYS5maWVsZHNbMF0/LmNvbnN0cmFpbnRzPy5yZXF1aXJlZCkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChzY2hlbWEuZmllbGRzWzBdPy5jb25zdHJhaW50cz8udW5pcXVlKS50b0JlKHRydWUpXG5cbiAgICBleHBlY3Qoc2NoZW1hLmZpZWxkc1sxXT8ubmFtZSkudG9CZShcImVtYWlsXCIpXG4gICAgZXhwZWN0KHNjaGVtYS5maWVsZHNbMV0/LnR5cGUpLnRvQmUoXCJzdHJpbmdcIilcbiAgICBleHBlY3Qoc2NoZW1hLmZpZWxkc1sxXT8uZm9ybWF0KS50b0JlKFwiZW1haWxcIilcblxuICAgIGV4cGVjdChzY2hlbWEuZmllbGRzWzZdPy5uYW1lKS50b0JlKFwiY3JlYXRlZF9hdFwiKVxuICAgIGV4cGVjdChzY2hlbWEuZmllbGRzWzZdPy50eXBlKS50b0JlKFwiZGF0ZXRpbWVcIilcblxuICAgIGV4cGVjdChzY2hlbWEucHJpbWFyeUtleSkudG9FcXVhbChbXCJpZFwiXSlcblxuICAgIGV4cGVjdChzY2hlbWEudW5pcXVlS2V5cykudG9IYXZlTGVuZ3RoKDIpXG4gICAgZXhwZWN0KHNjaGVtYS51bmlxdWVLZXlzPy5bMF0pLnRvRXF1YWwoW1wiZW1haWxcIl0pXG4gICAgZXhwZWN0KHNjaGVtYS51bmlxdWVLZXlzPy5bMV0pLnRvRXF1YWwoW1wibmFtZVwiLCBcImRlcGFydG1lbnRfaWRcIl0pXG5cbiAgICBleHBlY3Qoc2NoZW1hLmZvcmVpZ25LZXlzKS50b0hhdmVMZW5ndGgoMSlcbiAgICBleHBlY3Qoc2NoZW1hLmZvcmVpZ25LZXlzPy5bMF0/LmZpZWxkcykudG9FcXVhbChbXCJkZXBhcnRtZW50X2lkXCJdKVxuICAgIGV4cGVjdChzY2hlbWEuZm9yZWlnbktleXM/LlswXT8ucmVmZXJlbmNlPy5yZXNvdXJjZSkudG9CZShcImRlcGFydG1lbnRzXCIpXG4gICAgZXhwZWN0KHNjaGVtYS5mb3JlaWduS2V5cz8uWzBdPy5yZWZlcmVuY2U/LmZpZWxkcykudG9FcXVhbChbXCJpZFwiXSlcblxuICAgIGV4cGVjdChzY2hlbWEubWlzc2luZ1ZhbHVlcykudG9FcXVhbChbXCJcIiwgXCJOQVwiLCBcIk4vQVwiLCBcIm51bGxcIl0pXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { loadSchema } from "../schema/index.js";
|
|
2
|
+
export async function resolveSchema(schema) {
|
|
3
|
+
if (!schema) {
|
|
4
|
+
return undefined;
|
|
5
|
+
}
|
|
6
|
+
if (typeof schema !== "string") {
|
|
7
|
+
return schema;
|
|
8
|
+
}
|
|
9
|
+
return await loadSchema(schema);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NjaGVtYS9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUcvQyxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxNQUF3QjtJQUMxRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRCxPQUFPLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkU2NoZW1hIH0gZnJvbSBcIi4uL3NjaGVtYS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFNjaGVtYSB9IGZyb20gXCIuL1NjaGVtYS50c1wiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYT86IFNjaGVtYSB8IHN0cmluZykge1xuICBpZiAoIXNjaGVtYSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2NoZW1hICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHNjaGVtYVxuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGxvYWRTY2hlbWEoc2NoZW1hKVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { saveDescriptor } from "../descriptor/index.js";
|
|
2
|
+
import { convertSchemaToDescriptor } from "./convert/toDescriptor.js";
|
|
3
|
+
const CURRENT_PROFILE = "https://datapackage.org/profiles/2.0/tableschema.json";
|
|
4
|
+
/**
|
|
5
|
+
* Save a Schema to a file path
|
|
6
|
+
* Works in Node.js environments
|
|
7
|
+
*/
|
|
8
|
+
export async function saveSchema(schema, options) {
|
|
9
|
+
const descriptor = convertSchemaToDescriptor(schema);
|
|
10
|
+
descriptor.$schema = descriptor.$schema ?? CURRENT_PROFILE;
|
|
11
|
+
await saveDescriptor(descriptor, {
|
|
12
|
+
path: options.path,
|
|
13
|
+
overwrite: options.overwrite,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NjaGVtYS9zYXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUV2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUVyRSxNQUFNLGVBQWUsR0FBRyx1REFBdUQsQ0FBQTtBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FDOUIsTUFBYyxFQUNkLE9BR0M7SUFFRCxNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNwRCxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFBO0lBRTFELE1BQU0sY0FBYyxDQUFDLFVBQVUsRUFBRTtRQUMvQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0tBQzdCLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzYXZlRGVzY3JpcHRvciB9IGZyb20gXCIuLi9kZXNjcmlwdG9yL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgU2NoZW1hIH0gZnJvbSBcIi4vU2NoZW1hLnRzXCJcbmltcG9ydCB7IGNvbnZlcnRTY2hlbWFUb0Rlc2NyaXB0b3IgfSBmcm9tIFwiLi9jb252ZXJ0L3RvRGVzY3JpcHRvci50c1wiXG5cbmNvbnN0IENVUlJFTlRfUFJPRklMRSA9IFwiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMi4wL3RhYmxlc2NoZW1hLmpzb25cIlxuXG4vKipcbiAqIFNhdmUgYSBTY2hlbWEgdG8gYSBmaWxlIHBhdGhcbiAqIFdvcmtzIGluIE5vZGUuanMgZW52aXJvbm1lbnRzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlU2NoZW1hKFxuICBzY2hlbWE6IFNjaGVtYSxcbiAgb3B0aW9uczoge1xuICAgIHBhdGg6IHN0cmluZ1xuICAgIG92ZXJ3cml0ZT86IGJvb2xlYW5cbiAgfSxcbikge1xuICBjb25zdCBkZXNjcmlwdG9yID0gY29udmVydFNjaGVtYVRvRGVzY3JpcHRvcihzY2hlbWEpXG4gIGRlc2NyaXB0b3IuJHNjaGVtYSA9IGRlc2NyaXB0b3IuJHNjaGVtYSA/PyBDVVJSRU5UX1BST0ZJTEVcblxuICBhd2FpdCBzYXZlRGVzY3JpcHRvcihkZXNjcmlwdG9yLCB7XG4gICAgcGF0aDogb3B0aW9ucy5wYXRoLFxuICAgIG92ZXJ3cml0ZTogb3B0aW9ucy5vdmVyd3JpdGUsXG4gIH0pXG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|