@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.
Files changed (312) hide show
  1. package/README.md +3 -0
  2. package/build/assets/dialect-1.0.json +58 -0
  3. package/build/assets/dialect-2.0.json +98 -0
  4. package/build/assets/package-1.0.json +1517 -0
  5. package/build/assets/package-2.0.json +2168 -0
  6. package/build/assets/resource-1.0.json +1353 -0
  7. package/build/assets/resource-2.0.json +1987 -0
  8. package/build/assets/schema-1.0.json +1126 -0
  9. package/build/assets/schema-2.0.json +1715 -0
  10. package/build/descriptor/Descriptor.d.ts +2 -0
  11. package/build/descriptor/Descriptor.js +4 -0
  12. package/build/descriptor/index.d.ts +6 -0
  13. package/build/descriptor/index.js +6 -0
  14. package/build/descriptor/load.d.ts +8 -0
  15. package/build/descriptor/load.js +36 -0
  16. package/build/descriptor/load.spec.d.ts +1 -0
  17. package/build/descriptor/load.spec.js +44 -0
  18. package/build/descriptor/process/parse.d.ts +2 -0
  19. package/build/descriptor/process/parse.js +8 -0
  20. package/build/descriptor/process/stringify.d.ts +2 -0
  21. package/build/descriptor/process/stringify.js +4 -0
  22. package/build/descriptor/save.d.ts +9 -0
  23. package/build/descriptor/save.js +19 -0
  24. package/build/descriptor/save.spec.d.ts +1 -0
  25. package/build/descriptor/save.spec.js +99 -0
  26. package/build/dialect/Dialect.d.ts +89 -0
  27. package/build/dialect/Dialect.js +2 -0
  28. package/build/dialect/assert.d.ts +6 -0
  29. package/build/dialect/assert.js +12 -0
  30. package/build/dialect/assert.spec.d.ts +1 -0
  31. package/build/dialect/assert.spec.js +22 -0
  32. package/build/dialect/convert/fromDescriptor.d.ts +2 -0
  33. package/build/dialect/convert/fromDescriptor.js +20 -0
  34. package/build/dialect/convert/toDescriptor.d.ts +3 -0
  35. package/build/dialect/convert/toDescriptor.js +5 -0
  36. package/build/dialect/index.d.ts +8 -0
  37. package/build/dialect/index.js +8 -0
  38. package/build/dialect/load.d.ts +5 -0
  39. package/build/dialect/load.js +12 -0
  40. package/build/dialect/load.spec.d.ts +1 -0
  41. package/build/dialect/load.spec.js +18 -0
  42. package/build/dialect/resolve.d.ts +2 -0
  43. package/build/dialect/resolve.js +11 -0
  44. package/build/dialect/save.d.ts +9 -0
  45. package/build/dialect/save.js +16 -0
  46. package/build/dialect/save.spec.d.ts +1 -0
  47. package/build/dialect/save.spec.js +52 -0
  48. package/build/dialect/validate.d.ts +10 -0
  49. package/build/dialect/validate.js +25 -0
  50. package/build/dialect/validate.spec.d.ts +1 -0
  51. package/build/dialect/validate.spec.js +28 -0
  52. package/build/error/Bound.d.ts +4 -0
  53. package/build/error/Bound.js +2 -0
  54. package/build/error/Error.d.ts +3 -0
  55. package/build/error/Error.js +2 -0
  56. package/build/error/Unbound.d.ts +6 -0
  57. package/build/error/Unbound.js +2 -0
  58. package/build/error/index.d.ts +16 -0
  59. package/build/error/index.js +2 -0
  60. package/build/error/types/Base.d.ts +3 -0
  61. package/build/error/types/Base.js +2 -0
  62. package/build/error/types/Bytes.d.ts +6 -0
  63. package/build/error/types/Bytes.js +2 -0
  64. package/build/error/types/Cell.d.ts +56 -0
  65. package/build/error/types/Cell.js +2 -0
  66. package/build/error/types/Data.d.ts +5 -0
  67. package/build/error/types/Data.js +2 -0
  68. package/build/error/types/Document.d.ts +7 -0
  69. package/build/error/types/Document.js +2 -0
  70. package/build/error/types/Encoding.d.ts +6 -0
  71. package/build/error/types/Encoding.js +2 -0
  72. package/build/error/types/Field.d.ts +15 -0
  73. package/build/error/types/Field.js +2 -0
  74. package/build/error/types/Fields.d.ts +11 -0
  75. package/build/error/types/Fields.js +2 -0
  76. package/build/error/types/File.d.ts +4 -0
  77. package/build/error/types/File.js +2 -0
  78. package/build/error/types/ForeignKey.d.ts +7 -0
  79. package/build/error/types/ForeignKey.js +2 -0
  80. package/build/error/types/Hash.d.ts +6 -0
  81. package/build/error/types/Hash.js +2 -0
  82. package/build/error/types/Metadata.d.ts +9 -0
  83. package/build/error/types/Metadata.js +2 -0
  84. package/build/error/types/Row.d.ts +9 -0
  85. package/build/error/types/Row.js +2 -0
  86. package/build/error/types/Table.d.ts +6 -0
  87. package/build/error/types/Table.js +2 -0
  88. package/build/field/Field.d.ts +5 -0
  89. package/build/field/Field.js +2 -0
  90. package/build/field/Type.d.ts +2 -0
  91. package/build/field/Type.js +2 -0
  92. package/build/field/convert/fromDescriptor.d.ts +2 -0
  93. package/build/field/convert/fromDescriptor.js +61 -0
  94. package/build/field/convert/fromDescriptor.spec.d.ts +1 -0
  95. package/build/field/convert/fromDescriptor.spec.js +241 -0
  96. package/build/field/convert/toDescriptor.d.ts +3 -0
  97. package/build/field/convert/toDescriptor.js +5 -0
  98. package/build/field/convert/toDescriptor.spec.d.ts +1 -0
  99. package/build/field/convert/toDescriptor.spec.js +291 -0
  100. package/build/field/index.d.ts +5 -0
  101. package/build/field/index.js +3 -0
  102. package/build/field/types/Any.d.ts +20 -0
  103. package/build/field/types/Any.js +2 -0
  104. package/build/field/types/Array.d.ts +32 -0
  105. package/build/field/types/Array.js +2 -0
  106. package/build/field/types/Base.d.ts +60 -0
  107. package/build/field/types/Base.js +2 -0
  108. package/build/field/types/Boolean.d.ts +28 -0
  109. package/build/field/types/Boolean.js +2 -0
  110. package/build/field/types/Date.d.ts +43 -0
  111. package/build/field/types/Date.js +2 -0
  112. package/build/field/types/Datetime.d.ts +43 -0
  113. package/build/field/types/Datetime.js +2 -0
  114. package/build/field/types/Duration.d.ts +28 -0
  115. package/build/field/types/Duration.js +2 -0
  116. package/build/field/types/Geojson.d.ts +30 -0
  117. package/build/field/types/Geojson.js +2 -0
  118. package/build/field/types/Geopoint.d.ts +27 -0
  119. package/build/field/types/Geopoint.js +2 -0
  120. package/build/field/types/Integer.d.ts +57 -0
  121. package/build/field/types/Integer.js +2 -0
  122. package/build/field/types/List.d.ts +36 -0
  123. package/build/field/types/List.js +2 -0
  124. package/build/field/types/Number.d.ts +48 -0
  125. package/build/field/types/Number.js +2 -0
  126. package/build/field/types/Object.d.ts +32 -0
  127. package/build/field/types/Object.js +2 -0
  128. package/build/field/types/String.d.ts +51 -0
  129. package/build/field/types/String.js +2 -0
  130. package/build/field/types/Time.d.ts +43 -0
  131. package/build/field/types/Time.js +2 -0
  132. package/build/field/types/Year.d.ts +36 -0
  133. package/build/field/types/Year.js +2 -0
  134. package/build/field/types/Yearmonth.d.ts +36 -0
  135. package/build/field/types/Yearmonth.js +2 -0
  136. package/build/field/types/index.d.ts +16 -0
  137. package/build/field/types/index.js +17 -0
  138. package/build/index.d.ts +112 -0
  139. package/build/index.js +32 -0
  140. package/build/json/Schema.d.ts +2 -0
  141. package/build/json/Schema.js +2 -0
  142. package/build/json/Value.d.ts +1 -0
  143. package/build/json/Value.js +2 -0
  144. package/build/json/ajv.d.ts +2 -0
  145. package/build/json/ajv.js +10 -0
  146. package/build/json/assert.d.ts +2 -0
  147. package/build/json/assert.js +10 -0
  148. package/build/json/cache.d.ts +2 -0
  149. package/build/json/cache.js +5 -0
  150. package/build/json/index.d.ts +5 -0
  151. package/build/json/index.js +4 -0
  152. package/build/json/inspect/schema.d.ts +4 -0
  153. package/build/json/inspect/schema.js +10 -0
  154. package/build/json/inspect/schema.spec.d.ts +1 -0
  155. package/build/json/inspect/schema.spec.js +132 -0
  156. package/build/json/inspect/value.d.ts +11 -0
  157. package/build/json/inspect/value.js +21 -0
  158. package/build/json/inspect/value.spec.d.ts +1 -0
  159. package/build/json/inspect/value.spec.js +121 -0
  160. package/build/json/load.d.ts +3 -0
  161. package/build/json/load.js +13 -0
  162. package/build/json/resolve.d.ts +2 -0
  163. package/build/json/resolve.js +11 -0
  164. package/build/metadata/Metadata.d.ts +3 -0
  165. package/build/metadata/Metadata.js +2 -0
  166. package/build/metadata/index.d.ts +1 -0
  167. package/build/metadata/index.js +2 -0
  168. package/build/package/Contributor.d.ts +21 -0
  169. package/build/package/Contributor.js +2 -0
  170. package/build/package/Package.d.ts +64 -0
  171. package/build/package/Package.js +2 -0
  172. package/build/package/assert.d.ts +8 -0
  173. package/build/package/assert.js +12 -0
  174. package/build/package/assert.spec.d.ts +1 -0
  175. package/build/package/assert.spec.js +26 -0
  176. package/build/package/convert/fromDescriptor.d.ts +4 -0
  177. package/build/package/convert/fromDescriptor.js +36 -0
  178. package/build/package/convert/toDescriptor.d.ts +5 -0
  179. package/build/package/convert/toDescriptor.js +7 -0
  180. package/build/package/index.d.ts +8 -0
  181. package/build/package/index.js +7 -0
  182. package/build/package/load.d.ts +5 -0
  183. package/build/package/load.js +14 -0
  184. package/build/package/load.spec.d.ts +1 -0
  185. package/build/package/load.spec.js +28 -0
  186. package/build/package/save.d.ts +9 -0
  187. package/build/package/save.js +18 -0
  188. package/build/package/save.spec.d.ts +1 -0
  189. package/build/package/save.spec.js +311 -0
  190. package/build/package/validate.d.ts +12 -0
  191. package/build/package/validate.js +27 -0
  192. package/build/package/validate.spec.d.ts +1 -0
  193. package/build/package/validate.spec.js +41 -0
  194. package/build/path/basepath.d.ts +2 -0
  195. package/build/path/basepath.js +25 -0
  196. package/build/path/basepath.spec.d.ts +1 -0
  197. package/build/path/basepath.spec.js +55 -0
  198. package/build/path/denormalize.d.ts +3 -0
  199. package/build/path/denormalize.js +29 -0
  200. package/build/path/denormalize.spec.d.ts +1 -0
  201. package/build/path/denormalize.spec.js +45 -0
  202. package/build/path/index.d.ts +5 -0
  203. package/build/path/index.js +6 -0
  204. package/build/path/normalize.d.ts +6 -0
  205. package/build/path/normalize.js +54 -0
  206. package/build/path/normalize.spec.d.ts +1 -0
  207. package/build/path/normalize.spec.js +71 -0
  208. package/build/path/path.d.ts +5 -0
  209. package/build/path/path.js +48 -0
  210. package/build/path/path.spec.d.ts +1 -0
  211. package/build/path/path.spec.js +111 -0
  212. package/build/platform/index.d.ts +1 -0
  213. package/build/platform/index.js +2 -0
  214. package/build/platform/node.d.ts +130 -0
  215. package/build/platform/node.js +10 -0
  216. package/build/platform/node.spec.d.ts +1 -0
  217. package/build/platform/node.spec.js +16 -0
  218. package/build/profile/@minify.d.ts +1 -0
  219. package/build/profile/@minify.js +58 -0
  220. package/build/profile/Profile.d.ts +9 -0
  221. package/build/profile/Profile.js +2 -0
  222. package/build/profile/assert.d.ts +6 -0
  223. package/build/profile/assert.js +36 -0
  224. package/build/profile/assert.spec.d.ts +1 -0
  225. package/build/profile/assert.spec.js +115 -0
  226. package/build/profile/index.d.ts +2 -0
  227. package/build/profile/index.js +2 -0
  228. package/build/profile/load.d.ts +4 -0
  229. package/build/profile/load.js +12 -0
  230. package/build/profile/registry.d.ts +2 -0
  231. package/build/profile/registry.js +83 -0
  232. package/build/profile/resolve.d.ts +2 -0
  233. package/build/profile/resolve.js +8 -0
  234. package/build/profile/validate.d.ts +9 -0
  235. package/build/profile/validate.js +12 -0
  236. package/build/report/Report.d.ts +5 -0
  237. package/build/report/Report.js +2 -0
  238. package/build/report/create.d.ts +7 -0
  239. package/build/report/create.js +6 -0
  240. package/build/report/index.d.ts +2 -0
  241. package/build/report/index.js +2 -0
  242. package/build/resource/License.d.ts +18 -0
  243. package/build/resource/License.js +2 -0
  244. package/build/resource/Resource.d.ts +93 -0
  245. package/build/resource/Resource.js +2 -0
  246. package/build/resource/Source.d.ts +17 -0
  247. package/build/resource/Source.js +2 -0
  248. package/build/resource/assert.d.ts +8 -0
  249. package/build/resource/assert.js +12 -0
  250. package/build/resource/assert.spec.d.ts +1 -0
  251. package/build/resource/assert.spec.js +23 -0
  252. package/build/resource/convert/fromDescriptor.d.ts +4 -0
  253. package/build/resource/convert/fromDescriptor.js +69 -0
  254. package/build/resource/convert/toDescriptor.d.ts +5 -0
  255. package/build/resource/convert/toDescriptor.js +36 -0
  256. package/build/resource/helpers.d.ts +2 -0
  257. package/build/resource/helpers.js +6 -0
  258. package/build/resource/index.d.ts +11 -0
  259. package/build/resource/index.js +9 -0
  260. package/build/resource/infer.d.ts +3 -0
  261. package/build/resource/infer.js +35 -0
  262. package/build/resource/infer.spec.d.ts +1 -0
  263. package/build/resource/infer.spec.js +103 -0
  264. package/build/resource/load.d.ts +5 -0
  265. package/build/resource/load.js +14 -0
  266. package/build/resource/load.spec.d.ts +1 -0
  267. package/build/resource/load.spec.js +22 -0
  268. package/build/resource/save.d.ts +9 -0
  269. package/build/resource/save.js +18 -0
  270. package/build/resource/save.spec.d.ts +1 -0
  271. package/build/resource/save.spec.js +170 -0
  272. package/build/resource/validate.d.ts +13 -0
  273. package/build/resource/validate.js +57 -0
  274. package/build/resource/validate.spec.d.ts +1 -0
  275. package/build/resource/validate.spec.js +30 -0
  276. package/build/schema/ForeignKey.d.ts +23 -0
  277. package/build/schema/ForeignKey.js +2 -0
  278. package/build/schema/Schema.d.ts +56 -0
  279. package/build/schema/Schema.js +2 -0
  280. package/build/schema/assert.d.ts +6 -0
  281. package/build/schema/assert.js +12 -0
  282. package/build/schema/assert.spec.d.ts +1 -0
  283. package/build/schema/assert.spec.js +34 -0
  284. package/build/schema/convert/fromDescriptor.d.ts +2 -0
  285. package/build/schema/convert/fromDescriptor.js +70 -0
  286. package/build/schema/convert/fromJsonSchema.d.ts +3 -0
  287. package/build/schema/convert/fromJsonSchema.js +105 -0
  288. package/build/schema/convert/fromJsonSchema.spec.d.ts +1 -0
  289. package/build/schema/convert/fromJsonSchema.spec.js +156 -0
  290. package/build/schema/convert/toDescriptor.d.ts +3 -0
  291. package/build/schema/convert/toDescriptor.js +5 -0
  292. package/build/schema/convert/toJsonSchema.d.ts +3 -0
  293. package/build/schema/convert/toJsonSchema.js +173 -0
  294. package/build/schema/convert/toJsonSchema.spec.d.ts +1 -0
  295. package/build/schema/convert/toJsonSchema.spec.js +403 -0
  296. package/build/schema/index.d.ts +11 -0
  297. package/build/schema/index.js +10 -0
  298. package/build/schema/load.d.ts +5 -0
  299. package/build/schema/load.js +12 -0
  300. package/build/schema/load.spec.d.ts +1 -0
  301. package/build/schema/load.spec.js +55 -0
  302. package/build/schema/resolve.d.ts +2 -0
  303. package/build/schema/resolve.js +11 -0
  304. package/build/schema/save.d.ts +9 -0
  305. package/build/schema/save.js +16 -0
  306. package/build/schema/save.spec.d.ts +1 -0
  307. package/build/schema/save.spec.js +58 -0
  308. package/build/schema/validate.d.ts +10 -0
  309. package/build/schema/validate.js +25 -0
  310. package/build/schema/validate.spec.d.ts +1 -0
  311. package/build/schema/validate.spec.js +41 -0
  312. 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,5 @@
1
+ /**
2
+ * Load a Schema descriptor (JSON Object) from a file or URL
3
+ * Ensures the descriptor is valid against its profile
4
+ */
5
+ export declare function loadSchema(path: string): Promise<import("./Schema.ts").Schema>;
@@ -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,2 @@
1
+ import type { Schema } from "./Schema.ts";
2
+ export declare function resolveSchema(schema?: Schema | string): Promise<Schema | undefined>;
@@ -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,9 @@
1
+ import type { Schema } from "./Schema.ts";
2
+ /**
3
+ * Save a Schema to a file path
4
+ * Works in Node.js environments
5
+ */
6
+ export declare function saveSchema(schema: Schema, options: {
7
+ path: string;
8
+ overwrite?: boolean;
9
+ }): Promise<void>;
@@ -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 {};