@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,58 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import fs from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ const assetsDir = join(import.meta.dirname, "..", "assets");
5
+ const files = (await fs.readdir(assetsDir)).filter(file => file.endsWith(".json"));
6
+ console.log(`Found ${files.length} JSON files in the assets directory`);
7
+ for (const file of files) {
8
+ const filePath = join(assetsDir, file);
9
+ console.log(`Processing ${file}...`);
10
+ const content = await readFile(filePath, "utf8");
11
+ const profile = JSON.parse(content);
12
+ let modified = false;
13
+ const pruneProperties = (obj) => {
14
+ if ("description" in obj) {
15
+ if (!isObject(obj.description)) {
16
+ obj.description = undefined;
17
+ modified = true;
18
+ }
19
+ }
20
+ if ("context" in obj) {
21
+ if (!isObject(obj.context)) {
22
+ obj.context = undefined;
23
+ modified = true;
24
+ }
25
+ }
26
+ if ("examples" in obj) {
27
+ if (!isObject(obj.examples)) {
28
+ obj.examples = undefined;
29
+ modified = true;
30
+ }
31
+ }
32
+ for (const key in obj) {
33
+ if (isObject(obj[key])) {
34
+ pruneProperties(obj[key]);
35
+ }
36
+ else if (Array.isArray(obj[key])) {
37
+ for (const item of obj[key]) {
38
+ if (isObject(item)) {
39
+ pruneProperties(item);
40
+ }
41
+ }
42
+ }
43
+ }
44
+ };
45
+ pruneProperties(profile);
46
+ if (modified) {
47
+ await writeFile(filePath, JSON.stringify(profile, null, 2), "utf8");
48
+ console.log(`Updated ${file} - removed non-object descriptions and examples`);
49
+ }
50
+ else {
51
+ console.log(`No changes needed for ${file}`);
52
+ }
53
+ }
54
+ console.log("Pruning completed successfully!");
55
+ function isObject(value) {
56
+ return !!(value && typeof value === "object" && !Array.isArray(value));
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQG1pbmlmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2ZpbGUvQG1pbmlmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUMzRCxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUN2QixDQUFBO0FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssQ0FBQyxNQUFNLHFDQUFxQyxDQUFDLENBQUE7QUFFdkUsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxDQUFBO0lBRXBDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRW5DLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQTtJQUVwQixNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQTRCLEVBQVEsRUFBRTtRQUM3RCxJQUFJLGFBQWEsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUMvQixHQUFHLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQTtnQkFDM0IsUUFBUSxHQUFHLElBQUksQ0FBQTtZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO2dCQUN2QixRQUFRLEdBQUcsSUFBSSxDQUFBO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUE7Z0JBQ3hCLFFBQVEsR0FBRyxJQUFJLENBQUE7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUE0QixDQUFDLENBQUE7WUFDdEQsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkIsZUFBZSxDQUFDLElBQStCLENBQUMsQ0FBQTtvQkFDbEQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFeEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE1BQU0sU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FDVCxXQUFXLElBQUksaURBQWlELENBQ2pFLENBQUE7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLElBQUksRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztBQUNILENBQUM7QUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7QUFFOUMsU0FBUyxRQUFRLENBQUMsS0FBVTtJQUMxQixPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIlxuXG5jb25zdCBhc3NldHNEaXIgPSBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCJhc3NldHNcIilcbmNvbnN0IGZpbGVzID0gKGF3YWl0IGZzLnJlYWRkaXIoYXNzZXRzRGlyKSkuZmlsdGVyKGZpbGUgPT5cbiAgZmlsZS5lbmRzV2l0aChcIi5qc29uXCIpLFxuKVxuXG5jb25zb2xlLmxvZyhgRm91bmQgJHtmaWxlcy5sZW5ndGh9IEpTT04gZmlsZXMgaW4gdGhlIGFzc2V0cyBkaXJlY3RvcnlgKVxuXG5mb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBqb2luKGFzc2V0c0RpciwgZmlsZSlcbiAgY29uc29sZS5sb2coYFByb2Nlc3NpbmcgJHtmaWxlfS4uLmApXG5cbiAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCBcInV0ZjhcIilcbiAgY29uc3QgcHJvZmlsZSA9IEpTT04ucGFyc2UoY29udGVudClcblxuICBsZXQgbW9kaWZpZWQgPSBmYWxzZVxuXG4gIGNvbnN0IHBydW5lUHJvcGVydGllcyA9IChvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCA9PiB7XG4gICAgaWYgKFwiZGVzY3JpcHRpb25cIiBpbiBvYmopIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqLmRlc2NyaXB0aW9uKSkge1xuICAgICAgICBvYmouZGVzY3JpcHRpb24gPSB1bmRlZmluZWRcbiAgICAgICAgbW9kaWZpZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFwiY29udGV4dFwiIGluIG9iaikge1xuICAgICAgaWYgKCFpc09iamVjdChvYmouY29udGV4dCkpIHtcbiAgICAgICAgb2JqLmNvbnRleHQgPSB1bmRlZmluZWRcbiAgICAgICAgbW9kaWZpZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFwiZXhhbXBsZXNcIiBpbiBvYmopIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqLmV4YW1wbGVzKSkge1xuICAgICAgICBvYmouZXhhbXBsZXMgPSB1bmRlZmluZWRcbiAgICAgICAgbW9kaWZpZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoaXNPYmplY3Qob2JqW2tleV0pKSB7XG4gICAgICAgIHBydW5lUHJvcGVydGllcyhvYmpba2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmpba2V5XSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9ialtrZXldKSB7XG4gICAgICAgICAgaWYgKGlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICBwcnVuZVByb3BlcnRpZXMoaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcnVuZVByb3BlcnRpZXMocHJvZmlsZSlcblxuICBpZiAobW9kaWZpZWQpIHtcbiAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHByb2ZpbGUsIG51bGwsIDIpLCBcInV0ZjhcIilcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBVcGRhdGVkICR7ZmlsZX0gLSByZW1vdmVkIG5vbi1vYmplY3QgZGVzY3JpcHRpb25zIGFuZCBleGFtcGxlc2AsXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKGBObyBjaGFuZ2VzIG5lZWRlZCBmb3IgJHtmaWxlfWApXG4gIH1cbn1cblxuY29uc29sZS5sb2coXCJQcnVuaW5nIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhXCIpXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ import type { JsonSchema } from "../json/index.ts";
2
+ export type Profile = JsonSchema;
3
+ export type ProfileType = "dialect" | "package" | "resource" | "schema";
4
+ export type ProfileRegistry = {
5
+ type: ProfileType;
6
+ path: string;
7
+ version: string;
8
+ profile: Profile;
9
+ }[];
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2ZpbGUvUHJvZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBKc29uU2NoZW1hIH0gZnJvbSBcIi4uL2pzb24vaW5kZXgudHNcIlxuXG5leHBvcnQgdHlwZSBQcm9maWxlID0gSnNvblNjaGVtYVxuZXhwb3J0IHR5cGUgUHJvZmlsZVR5cGUgPSBcImRpYWxlY3RcIiB8IFwicGFja2FnZVwiIHwgXCJyZXNvdXJjZVwiIHwgXCJzY2hlbWFcIlxuZXhwb3J0IHR5cGUgUHJvZmlsZVJlZ2lzdHJ5ID0ge1xuICB0eXBlOiBQcm9maWxlVHlwZVxuICBwYXRoOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG4gIHByb2ZpbGU6IFByb2ZpbGVcbn1bXVxuIl19
@@ -0,0 +1,6 @@
1
+ import type { JsonSchema } from "../json/index.ts";
2
+ import type { ProfileType } from "./Profile.ts";
3
+ export declare function assertProfile(jsonSchema: JsonSchema, options?: {
4
+ path?: string;
5
+ type?: ProfileType;
6
+ }): Promise<import("../index.ts").Descriptor>;
@@ -0,0 +1,36 @@
1
+ import { profileRegistry } from "./registry.js";
2
+ // TODO: It should narrow to JSON Schema
3
+ export async function assertProfile(jsonSchema, options) {
4
+ const errors = [];
5
+ if (!checkProfileType(jsonSchema, options)) {
6
+ errors.push({
7
+ message: `Profile at ${options?.path} is not a valid ${options?.type} profile`,
8
+ });
9
+ }
10
+ // TODO: Improve consolidated error message
11
+ if (errors.length) {
12
+ throw new Error(`Profile at path ${options?.path} is invalid`);
13
+ }
14
+ return jsonSchema;
15
+ }
16
+ function checkProfileType(jsonSchema, options) {
17
+ if (!options?.path || !options?.type) {
18
+ return true;
19
+ }
20
+ // This type official profiles
21
+ const typeProfiles = Object.values(profileRegistry).filter(profile => profile.type === options.type);
22
+ for (const typeProfile of typeProfiles) {
23
+ // The profile itself is from the official registry
24
+ if (options.path === typeProfile.path)
25
+ return true;
26
+ // The profile extends one of the official profiles
27
+ if (Array.isArray(jsonSchema.allOf)) {
28
+ for (const ref of Object.values(jsonSchema.allOf)) {
29
+ if (ref === typeProfile.path)
30
+ return true;
31
+ }
32
+ }
33
+ }
34
+ return false;
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcHJvZmlsZS9hc3NlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUvQyx3Q0FBd0M7QUFFeEMsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQ2pDLFVBQXNCLEVBQ3RCLE9BR0M7SUFFRCxNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFBO0lBRXhDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsT0FBTyxFQUFFLGNBQWMsT0FBTyxFQUFFLElBQUksbUJBQW1CLE9BQU8sRUFBRSxJQUFJLFVBQVU7U0FDL0UsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELDJDQUEyQztJQUMzQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixPQUFPLEVBQUUsSUFBSSxhQUFhLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsT0FBTyxVQUFxQixDQUFBO0FBQzlCLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixVQUFzQixFQUN0QixPQUdDO0lBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsOEJBQThCO0lBQzlCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUN4RCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FDekMsQ0FBQTtJQUVELEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsbURBQW1EO1FBQ25ELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRWxELG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLEdBQUcsS0FBSyxXQUFXLENBQUMsSUFBSTtvQkFBRSxPQUFPLElBQUksQ0FBQTtZQUMzQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEpzb25TY2hlbWEgfSBmcm9tIFwiLi4vanNvbi9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFByb2ZpbGUgfSBmcm9tIFwiLi9Qcm9maWxlLnRzXCJcbmltcG9ydCB0eXBlIHsgUHJvZmlsZVR5cGUgfSBmcm9tIFwiLi9Qcm9maWxlLnRzXCJcbmltcG9ydCB7IHByb2ZpbGVSZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LnRzXCJcblxuLy8gVE9ETzogSXQgc2hvdWxkIG5hcnJvdyB0byBKU09OIFNjaGVtYVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0UHJvZmlsZShcbiAganNvblNjaGVtYTogSnNvblNjaGVtYSxcbiAgb3B0aW9ucz86IHtcbiAgICBwYXRoPzogc3RyaW5nXG4gICAgdHlwZT86IFByb2ZpbGVUeXBlXG4gIH0sXG4pIHtcbiAgY29uc3QgZXJyb3JzOiB7IG1lc3NhZ2U6IHN0cmluZyB9W10gPSBbXVxuXG4gIGlmICghY2hlY2tQcm9maWxlVHlwZShqc29uU2NoZW1hLCBvcHRpb25zKSkge1xuICAgIGVycm9ycy5wdXNoKHtcbiAgICAgIG1lc3NhZ2U6IGBQcm9maWxlIGF0ICR7b3B0aW9ucz8ucGF0aH0gaXMgbm90IGEgdmFsaWQgJHtvcHRpb25zPy50eXBlfSBwcm9maWxlYCxcbiAgICB9KVxuICB9XG5cbiAgLy8gVE9ETzogSW1wcm92ZSBjb25zb2xpZGF0ZWQgZXJyb3IgbWVzc2FnZVxuICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUHJvZmlsZSBhdCBwYXRoICR7b3B0aW9ucz8ucGF0aH0gaXMgaW52YWxpZGApXG4gIH1cblxuICByZXR1cm4ganNvblNjaGVtYSBhcyBQcm9maWxlXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvZmlsZVR5cGUoXG4gIGpzb25TY2hlbWE6IEpzb25TY2hlbWEsXG4gIG9wdGlvbnM/OiB7XG4gICAgcGF0aD86IHN0cmluZ1xuICAgIHR5cGU/OiBQcm9maWxlVHlwZVxuICB9LFxuKSB7XG4gIGlmICghb3B0aW9ucz8ucGF0aCB8fCAhb3B0aW9ucz8udHlwZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBUaGlzIHR5cGUgb2ZmaWNpYWwgcHJvZmlsZXNcbiAgY29uc3QgdHlwZVByb2ZpbGVzID0gT2JqZWN0LnZhbHVlcyhwcm9maWxlUmVnaXN0cnkpLmZpbHRlcihcbiAgICBwcm9maWxlID0+IHByb2ZpbGUudHlwZSA9PT0gb3B0aW9ucy50eXBlLFxuICApXG5cbiAgZm9yIChjb25zdCB0eXBlUHJvZmlsZSBvZiB0eXBlUHJvZmlsZXMpIHtcbiAgICAvLyBUaGUgcHJvZmlsZSBpdHNlbGYgaXMgZnJvbSB0aGUgb2ZmaWNpYWwgcmVnaXN0cnlcbiAgICBpZiAob3B0aW9ucy5wYXRoID09PSB0eXBlUHJvZmlsZS5wYXRoKSByZXR1cm4gdHJ1ZVxuXG4gICAgLy8gVGhlIHByb2ZpbGUgZXh0ZW5kcyBvbmUgb2YgdGhlIG9mZmljaWFsIHByb2ZpbGVzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoanNvblNjaGVtYS5hbGxPZikpIHtcbiAgICAgIGZvciAoY29uc3QgcmVmIG9mIE9iamVjdC52YWx1ZXMoanNvblNjaGVtYS5hbGxPZikpIHtcbiAgICAgICAgaWYgKHJlZiA9PT0gdHlwZVByb2ZpbGUucGF0aCkgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,115 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { assertProfile } from "./assert.js";
3
+ describe("assertProfile", () => {
4
+ it("returns profile for valid descriptor without options", async () => {
5
+ const descriptor = {
6
+ name: "test",
7
+ };
8
+ const profile = await assertProfile(descriptor);
9
+ expect(profile).toEqual(descriptor);
10
+ });
11
+ it("throws error for custom profile path with mismatched type", async () => {
12
+ const descriptor = {
13
+ name: "test",
14
+ };
15
+ await expect(assertProfile(descriptor, {
16
+ path: "custom-profile.json",
17
+ type: "package",
18
+ })).rejects.toThrow("Profile at path custom-profile.json is invalid");
19
+ });
20
+ it("returns profile for official profile path", async () => {
21
+ const descriptor = {
22
+ name: "test",
23
+ };
24
+ const profile = await assertProfile(descriptor, {
25
+ path: "https://datapackage.org/profiles/1.0/datapackage.json",
26
+ type: "package",
27
+ });
28
+ expect(profile).toEqual(descriptor);
29
+ });
30
+ it("returns profile when path matches alternate official profile", async () => {
31
+ const descriptor = {
32
+ name: "test",
33
+ };
34
+ const profile = await assertProfile(descriptor, {
35
+ path: "https://specs.frictionlessdata.io/schemas/data-package.json",
36
+ type: "package",
37
+ });
38
+ expect(profile).toEqual(descriptor);
39
+ });
40
+ it("throws error when profile path does not match the specified type", async () => {
41
+ const descriptor = {
42
+ name: "test",
43
+ };
44
+ await expect(assertProfile(descriptor, {
45
+ path: "https://datapackage.org/profiles/1.0/tableschema.json",
46
+ type: "package",
47
+ })).rejects.toThrow("Profile at path https://datapackage.org/profiles/1.0/tableschema.json is invalid");
48
+ });
49
+ it("returns profile when only path is provided", async () => {
50
+ const descriptor = {
51
+ name: "test",
52
+ };
53
+ const profile = await assertProfile(descriptor, {
54
+ path: "custom-profile.json",
55
+ });
56
+ expect(profile).toEqual(descriptor);
57
+ });
58
+ it("returns profile when only type is provided", async () => {
59
+ const descriptor = {
60
+ name: "test",
61
+ };
62
+ const profile = await assertProfile(descriptor, {
63
+ type: "package",
64
+ });
65
+ expect(profile).toEqual(descriptor);
66
+ });
67
+ it("returns profile when descriptor extends official profile via allOf", async () => {
68
+ const descriptor = {
69
+ name: "test",
70
+ allOf: ["https://datapackage.org/profiles/1.0/datapackage.json"],
71
+ };
72
+ const profile = await assertProfile(descriptor, {
73
+ path: "custom-profile.json",
74
+ type: "package",
75
+ });
76
+ expect(profile).toEqual(descriptor);
77
+ });
78
+ it("throws error when custom profile does not extend matching official profile", async () => {
79
+ const descriptor = {
80
+ name: "test",
81
+ allOf: ["https://datapackage.org/profiles/1.0/tableschema.json"],
82
+ };
83
+ await expect(assertProfile(descriptor, {
84
+ path: "custom-profile.json",
85
+ type: "package",
86
+ })).rejects.toThrow("Profile at path custom-profile.json is invalid");
87
+ });
88
+ it("validates different profile types correctly", async () => {
89
+ const descriptorDialect = {
90
+ delimiter: ",",
91
+ };
92
+ const profileDialect = await assertProfile(descriptorDialect, {
93
+ path: "https://datapackage.org/profiles/1.0/tabledialect.json",
94
+ type: "dialect",
95
+ });
96
+ expect(profileDialect).toEqual(descriptorDialect);
97
+ const descriptorResource = {
98
+ name: "test-resource",
99
+ };
100
+ const profileResource = await assertProfile(descriptorResource, {
101
+ path: "https://datapackage.org/profiles/1.0/dataresource.json",
102
+ type: "resource",
103
+ });
104
+ expect(profileResource).toEqual(descriptorResource);
105
+ const descriptorSchema = {
106
+ fields: [],
107
+ };
108
+ const profileSchema = await assertProfile(descriptorSchema, {
109
+ path: "https://datapackage.org/profiles/1.0/tableschema.json",
110
+ type: "schema",
111
+ });
112
+ expect(profileSchema).toEqual(descriptorSchema);
113
+ });
114
+ });
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wcm9maWxlL2Fzc2VydC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTNDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRSxNQUFNLFVBQVUsR0FBRztZQUNqQixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUE7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUUvQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pFLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLElBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQTtRQUVELE1BQU0sTUFBTSxDQUNWLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDeEIsSUFBSSxFQUFFLHFCQUFxQjtZQUMzQixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDckUsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekQsTUFBTSxVQUFVLEdBQUc7WUFDakIsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFBO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsVUFBVSxFQUFFO1lBQzlDLElBQUksRUFBRSx1REFBdUQ7WUFDN0QsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM1RSxNQUFNLFVBQVUsR0FBRztZQUNqQixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUE7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDOUMsSUFBSSxFQUFFLDZEQUE2RDtZQUNuRSxJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQUE7UUFFRixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hGLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLElBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQTtRQUVELE1BQU0sTUFBTSxDQUNWLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDeEIsSUFBSSxFQUFFLHVEQUF1RDtZQUM3RCxJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUNmLGtGQUFrRixDQUNuRixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUQsTUFBTSxVQUFVLEdBQUc7WUFDakIsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFBO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsVUFBVSxFQUFFO1lBQzlDLElBQUksRUFBRSxxQkFBcUI7U0FDNUIsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRCxNQUFNLFVBQVUsR0FBRztZQUNqQixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUE7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDOUMsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsRixNQUFNLFVBQVUsR0FBRztZQUNqQixJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxDQUFDLHVEQUF1RCxDQUFDO1NBQ2pFLENBQUE7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDOUMsSUFBSSxFQUFFLHFCQUFxQjtZQUMzQixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQUE7UUFFRixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFGLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLENBQUMsdURBQXVELENBQUM7U0FDakUsQ0FBQTtRQUVELE1BQU0sTUFBTSxDQUNWLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDeEIsSUFBSSxFQUFFLHFCQUFxQjtZQUMzQixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDckUsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0QsTUFBTSxpQkFBaUIsR0FBRztZQUN4QixTQUFTLEVBQUUsR0FBRztTQUNmLENBQUE7UUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRTtZQUM1RCxJQUFJLEVBQUUsd0RBQXdEO1lBQzlELElBQUksRUFBRSxTQUFTO1NBQ2hCLENBQUMsQ0FBQTtRQUVGLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUVqRCxNQUFNLGtCQUFrQixHQUFHO1lBQ3pCLElBQUksRUFBRSxlQUFlO1NBQ3RCLENBQUE7UUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRTtZQUM5RCxJQUFJLEVBQUUsd0RBQXdEO1lBQzlELElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUMsQ0FBQTtRQUVGLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUVuRCxNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQTtRQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sYUFBYSxDQUFDLGdCQUFnQixFQUFFO1lBQzFELElBQUksRUFBRSx1REFBdUQ7WUFDN0QsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDLENBQUE7UUFFRixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDakQsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBhc3NlcnRQcm9maWxlIH0gZnJvbSBcIi4vYXNzZXJ0LnRzXCJcblxuZGVzY3JpYmUoXCJhc3NlcnRQcm9maWxlXCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIHByb2ZpbGUgZm9yIHZhbGlkIGRlc2NyaXB0b3Igd2l0aG91dCBvcHRpb25zXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0XCIsXG4gICAgfVxuXG4gICAgY29uc3QgcHJvZmlsZSA9IGF3YWl0IGFzc2VydFByb2ZpbGUoZGVzY3JpcHRvcilcblxuICAgIGV4cGVjdChwcm9maWxlKS50b0VxdWFsKGRlc2NyaXB0b3IpXG4gIH0pXG5cbiAgaXQoXCJ0aHJvd3MgZXJyb3IgZm9yIGN1c3RvbSBwcm9maWxlIHBhdGggd2l0aCBtaXNtYXRjaGVkIHR5cGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB7XG4gICAgICBuYW1lOiBcInRlc3RcIixcbiAgICB9XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBhc3NlcnRQcm9maWxlKGRlc2NyaXB0b3IsIHtcbiAgICAgICAgcGF0aDogXCJjdXN0b20tcHJvZmlsZS5qc29uXCIsXG4gICAgICAgIHR5cGU6IFwicGFja2FnZVwiLFxuICAgICAgfSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coXCJQcm9maWxlIGF0IHBhdGggY3VzdG9tLXByb2ZpbGUuanNvbiBpcyBpbnZhbGlkXCIpXG4gIH0pXG5cbiAgaXQoXCJyZXR1cm5zIHByb2ZpbGUgZm9yIG9mZmljaWFsIHByb2ZpbGUgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAgIG5hbWU6IFwidGVzdFwiLFxuICAgIH1cblxuICAgIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCBhc3NlcnRQcm9maWxlKGRlc2NyaXB0b3IsIHtcbiAgICAgIHBhdGg6IFwiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMS4wL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICAgIHR5cGU6IFwicGFja2FnZVwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QocHJvZmlsZSkudG9FcXVhbChkZXNjcmlwdG9yKVxuICB9KVxuXG4gIGl0KFwicmV0dXJucyBwcm9maWxlIHdoZW4gcGF0aCBtYXRjaGVzIGFsdGVybmF0ZSBvZmZpY2lhbCBwcm9maWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0XCIsXG4gICAgfVxuXG4gICAgY29uc3QgcHJvZmlsZSA9IGF3YWl0IGFzc2VydFByb2ZpbGUoZGVzY3JpcHRvciwge1xuICAgICAgcGF0aDogXCJodHRwczovL3NwZWNzLmZyaWN0aW9ubGVzc2RhdGEuaW8vc2NoZW1hcy9kYXRhLXBhY2thZ2UuanNvblwiLFxuICAgICAgdHlwZTogXCJwYWNrYWdlXCIsXG4gICAgfSlcblxuICAgIGV4cGVjdChwcm9maWxlKS50b0VxdWFsKGRlc2NyaXB0b3IpXG4gIH0pXG5cbiAgaXQoXCJ0aHJvd3MgZXJyb3Igd2hlbiBwcm9maWxlIHBhdGggZG9lcyBub3QgbWF0Y2ggdGhlIHNwZWNpZmllZCB0eXBlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0XCIsXG4gICAgfVxuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgYXNzZXJ0UHJvZmlsZShkZXNjcmlwdG9yLCB7XG4gICAgICAgIHBhdGg6IFwiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMS4wL3RhYmxlc2NoZW1hLmpzb25cIixcbiAgICAgICAgdHlwZTogXCJwYWNrYWdlXCIsXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdyhcbiAgICAgIFwiUHJvZmlsZSBhdCBwYXRoIGh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzEuMC90YWJsZXNjaGVtYS5qc29uIGlzIGludmFsaWRcIixcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJyZXR1cm5zIHByb2ZpbGUgd2hlbiBvbmx5IHBhdGggaXMgcHJvdmlkZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB7XG4gICAgICBuYW1lOiBcInRlc3RcIixcbiAgICB9XG5cbiAgICBjb25zdCBwcm9maWxlID0gYXdhaXQgYXNzZXJ0UHJvZmlsZShkZXNjcmlwdG9yLCB7XG4gICAgICBwYXRoOiBcImN1c3RvbS1wcm9maWxlLmpzb25cIixcbiAgICB9KVxuXG4gICAgZXhwZWN0KHByb2ZpbGUpLnRvRXF1YWwoZGVzY3JpcHRvcilcbiAgfSlcblxuICBpdChcInJldHVybnMgcHJvZmlsZSB3aGVuIG9ubHkgdHlwZSBpcyBwcm92aWRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAgIG5hbWU6IFwidGVzdFwiLFxuICAgIH1cblxuICAgIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCBhc3NlcnRQcm9maWxlKGRlc2NyaXB0b3IsIHtcbiAgICAgIHR5cGU6IFwicGFja2FnZVwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QocHJvZmlsZSkudG9FcXVhbChkZXNjcmlwdG9yKVxuICB9KVxuXG4gIGl0KFwicmV0dXJucyBwcm9maWxlIHdoZW4gZGVzY3JpcHRvciBleHRlbmRzIG9mZmljaWFsIHByb2ZpbGUgdmlhIGFsbE9mXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0XCIsXG4gICAgICBhbGxPZjogW1wiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMS4wL2RhdGFwYWNrYWdlLmpzb25cIl0sXG4gICAgfVxuXG4gICAgY29uc3QgcHJvZmlsZSA9IGF3YWl0IGFzc2VydFByb2ZpbGUoZGVzY3JpcHRvciwge1xuICAgICAgcGF0aDogXCJjdXN0b20tcHJvZmlsZS5qc29uXCIsXG4gICAgICB0eXBlOiBcInBhY2thZ2VcIixcbiAgICB9KVxuXG4gICAgZXhwZWN0KHByb2ZpbGUpLnRvRXF1YWwoZGVzY3JpcHRvcilcbiAgfSlcblxuICBpdChcInRocm93cyBlcnJvciB3aGVuIGN1c3RvbSBwcm9maWxlIGRvZXMgbm90IGV4dGVuZCBtYXRjaGluZyBvZmZpY2lhbCBwcm9maWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0XCIsXG4gICAgICBhbGxPZjogW1wiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMS4wL3RhYmxlc2NoZW1hLmpzb25cIl0sXG4gICAgfVxuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgYXNzZXJ0UHJvZmlsZShkZXNjcmlwdG9yLCB7XG4gICAgICAgIHBhdGg6IFwiY3VzdG9tLXByb2ZpbGUuanNvblwiLFxuICAgICAgICB0eXBlOiBcInBhY2thZ2VcIixcbiAgICAgIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KFwiUHJvZmlsZSBhdCBwYXRoIGN1c3RvbS1wcm9maWxlLmpzb24gaXMgaW52YWxpZFwiKVxuICB9KVxuXG4gIGl0KFwidmFsaWRhdGVzIGRpZmZlcmVudCBwcm9maWxlIHR5cGVzIGNvcnJlY3RseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvckRpYWxlY3QgPSB7XG4gICAgICBkZWxpbWl0ZXI6IFwiLFwiLFxuICAgIH1cblxuICAgIGNvbnN0IHByb2ZpbGVEaWFsZWN0ID0gYXdhaXQgYXNzZXJ0UHJvZmlsZShkZXNjcmlwdG9yRGlhbGVjdCwge1xuICAgICAgcGF0aDogXCJodHRwczovL2RhdGFwYWNrYWdlLm9yZy9wcm9maWxlcy8xLjAvdGFibGVkaWFsZWN0Lmpzb25cIixcbiAgICAgIHR5cGU6IFwiZGlhbGVjdFwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QocHJvZmlsZURpYWxlY3QpLnRvRXF1YWwoZGVzY3JpcHRvckRpYWxlY3QpXG5cbiAgICBjb25zdCBkZXNjcmlwdG9yUmVzb3VyY2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcmVzb3VyY2VcIixcbiAgICB9XG5cbiAgICBjb25zdCBwcm9maWxlUmVzb3VyY2UgPSBhd2FpdCBhc3NlcnRQcm9maWxlKGRlc2NyaXB0b3JSZXNvdXJjZSwge1xuICAgICAgcGF0aDogXCJodHRwczovL2RhdGFwYWNrYWdlLm9yZy9wcm9maWxlcy8xLjAvZGF0YXJlc291cmNlLmpzb25cIixcbiAgICAgIHR5cGU6IFwicmVzb3VyY2VcIixcbiAgICB9KVxuXG4gICAgZXhwZWN0KHByb2ZpbGVSZXNvdXJjZSkudG9FcXVhbChkZXNjcmlwdG9yUmVzb3VyY2UpXG5cbiAgICBjb25zdCBkZXNjcmlwdG9yU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICB9XG5cbiAgICBjb25zdCBwcm9maWxlU2NoZW1hID0gYXdhaXQgYXNzZXJ0UHJvZmlsZShkZXNjcmlwdG9yU2NoZW1hLCB7XG4gICAgICBwYXRoOiBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzEuMC90YWJsZXNjaGVtYS5qc29uXCIsXG4gICAgICB0eXBlOiBcInNjaGVtYVwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QocHJvZmlsZVNjaGVtYSkudG9FcXVhbChkZXNjcmlwdG9yU2NoZW1hKVxuICB9KVxufSlcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export type { Profile } from "./Profile.ts";
2
+ export { validateDescriptor } from "./validate.ts";
@@ -0,0 +1,2 @@
1
+ export { validateDescriptor } from "./validate.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wcm9maWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgUHJvZmlsZSB9IGZyb20gXCIuL1Byb2ZpbGUudHNcIlxuZXhwb3J0IHsgdmFsaWRhdGVEZXNjcmlwdG9yIH0gZnJvbSBcIi4vdmFsaWRhdGUudHNcIlxuIl19
@@ -0,0 +1,4 @@
1
+ import type { ProfileType } from "./Profile.ts";
2
+ export declare function loadProfile(path: string, options?: {
3
+ type?: ProfileType;
4
+ }): Promise<import("../index.ts").Descriptor>;
@@ -0,0 +1,12 @@
1
+ import { loadJsonSchema } from "../json/index.js";
2
+ import { assertProfile } from "./assert.js";
3
+ import { profileRegistry } from "./registry.js";
4
+ export async function loadProfile(path, options) {
5
+ const profile = profileRegistry.find(profile => profile.path === path)?.profile;
6
+ if (profile) {
7
+ return profile;
8
+ }
9
+ const jsonSchema = await loadJsonSchema(path, { onlyRemote: true });
10
+ return await assertProfile(jsonSchema, { path, type: options?.type });
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2ZpbGUvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRS9DLE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUMvQixJQUFZLEVBQ1osT0FBZ0M7SUFFaEMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFBO0lBQy9FLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDbkUsT0FBTyxNQUFNLGFBQWEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkSnNvblNjaGVtYSB9IGZyb20gXCIuLi9qc29uL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgUHJvZmlsZVR5cGUgfSBmcm9tIFwiLi9Qcm9maWxlLnRzXCJcbmltcG9ydCB7IGFzc2VydFByb2ZpbGUgfSBmcm9tIFwiLi9hc3NlcnQudHNcIlxuaW1wb3J0IHsgcHJvZmlsZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkudHNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFByb2ZpbGUoXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgdHlwZT86IFByb2ZpbGVUeXBlIH0sXG4pIHtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2ZpbGVSZWdpc3RyeS5maW5kKHByb2ZpbGUgPT4gcHJvZmlsZS5wYXRoID09PSBwYXRoKT8ucHJvZmlsZVxuICBpZiAocHJvZmlsZSkge1xuICAgIHJldHVybiBwcm9maWxlXG4gIH1cblxuICBjb25zdCBqc29uU2NoZW1hID0gYXdhaXQgbG9hZEpzb25TY2hlbWEocGF0aCwgeyBvbmx5UmVtb3RlOiB0cnVlIH0pXG4gIHJldHVybiBhd2FpdCBhc3NlcnRQcm9maWxlKGpzb25TY2hlbWEsIHsgcGF0aCwgdHlwZTogb3B0aW9ucz8udHlwZSB9KVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ import type { ProfileRegistry } from "./Profile.ts";
2
+ export declare const profileRegistry: ProfileRegistry;
@@ -0,0 +1,83 @@
1
+ import dialect_1_0 from "../assets/dialect-1.0.json" with { type: "json" };
2
+ import dialect_2_0 from "../assets/dialect-2.0.json" with { type: "json" };
3
+ import package_1_0 from "../assets/package-1.0.json" with { type: "json" };
4
+ import package_2_0 from "../assets/package-2.0.json" with { type: "json" };
5
+ import resource_1_0 from "../assets/resource-1.0.json" with { type: "json" };
6
+ import resource_2_0 from "../assets/resource-2.0.json" with { type: "json" };
7
+ import schema_1_0 from "../assets/schema-1.0.json" with { type: "json" };
8
+ import schema_2_0 from "../assets/schema-2.0.json" with { type: "json" };
9
+ export const profileRegistry = [
10
+ {
11
+ type: "dialect",
12
+ path: "https://specs.frictionlessdata.io/schemas/csv-dialect.json",
13
+ version: "1.0",
14
+ profile: dialect_1_0,
15
+ },
16
+ {
17
+ type: "dialect",
18
+ path: "https://datapackage.org/profiles/1.0/tabledialect.json",
19
+ version: "1.0",
20
+ profile: dialect_1_0,
21
+ },
22
+ {
23
+ type: "dialect",
24
+ path: "https://datapackage.org/profiles/2.0/tabledialect.json",
25
+ version: "2.0",
26
+ profile: dialect_2_0,
27
+ },
28
+ {
29
+ type: "package",
30
+ path: "https://specs.frictionlessdata.io/schemas/data-package.json",
31
+ version: "1.0",
32
+ profile: package_1_0,
33
+ },
34
+ {
35
+ type: "package",
36
+ path: "https://datapackage.org/profiles/1.0/datapackage.json",
37
+ version: "1.0",
38
+ profile: package_1_0,
39
+ },
40
+ {
41
+ type: "package",
42
+ path: "https://datapackage.org/profiles/2.0/datapackage.json",
43
+ version: "2.0",
44
+ profile: package_2_0,
45
+ },
46
+ {
47
+ type: "resource",
48
+ path: "https://specs.frictionlessdata.io/schemas/data-resource.json",
49
+ version: "1.0",
50
+ profile: resource_1_0,
51
+ },
52
+ {
53
+ type: "resource",
54
+ path: "https://datapackage.org/profiles/1.0/dataresource.json",
55
+ version: "1.0",
56
+ profile: resource_1_0,
57
+ },
58
+ {
59
+ type: "resource",
60
+ path: "https://datapackage.org/profiles/2.0/dataresource.json",
61
+ version: "2.0",
62
+ profile: resource_2_0,
63
+ },
64
+ {
65
+ type: "schema",
66
+ path: "https://specs.frictionlessdata.io/schemas/table-schema.json",
67
+ version: "1.0",
68
+ profile: schema_1_0,
69
+ },
70
+ {
71
+ type: "schema",
72
+ path: "https://datapackage.org/profiles/1.0/tableschema.json",
73
+ version: "1.0",
74
+ profile: schema_1_0,
75
+ },
76
+ {
77
+ type: "schema",
78
+ path: "https://datapackage.org/profiles/2.0/tableschema.json",
79
+ version: "2.0",
80
+ profile: schema_2_0,
81
+ },
82
+ ];
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wcm9maWxlL3JlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sV0FBVyxNQUFNLDRCQUE0QixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQzFFLE9BQU8sV0FBVyxNQUFNLDRCQUE0QixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQzFFLE9BQU8sV0FBVyxNQUFNLDRCQUE0QixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQzFFLE9BQU8sV0FBVyxNQUFNLDRCQUE0QixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQzFFLE9BQU8sWUFBWSxNQUFNLDZCQUE2QixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQzVFLE9BQU8sWUFBWSxNQUFNLDZCQUE2QixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQzVFLE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQ3hFLE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBR3hFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBb0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLElBQUksRUFBRSw0REFBNEQ7UUFDbEUsT0FBTyxFQUFFLEtBQUs7UUFDZCxPQUFPLEVBQUUsV0FBVztLQUNyQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixJQUFJLEVBQUUsd0RBQXdEO1FBQzlELE9BQU8sRUFBRSxLQUFLO1FBQ2QsT0FBTyxFQUFFLFdBQVc7S0FDckI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFLHdEQUF3RDtRQUM5RCxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxXQUFXO0tBQ3JCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLElBQUksRUFBRSw2REFBNkQ7UUFDbkUsT0FBTyxFQUFFLEtBQUs7UUFDZCxPQUFPLEVBQUUsV0FBVztLQUNyQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixJQUFJLEVBQUUsdURBQXVEO1FBQzdELE9BQU8sRUFBRSxLQUFLO1FBQ2QsT0FBTyxFQUFFLFdBQVc7S0FDckI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFLHVEQUF1RDtRQUM3RCxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxXQUFXO0tBQ3JCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtRQUNoQixJQUFJLEVBQUUsOERBQThEO1FBQ3BFLE9BQU8sRUFBRSxLQUFLO1FBQ2QsT0FBTyxFQUFFLFlBQVk7S0FDdEI7SUFDRDtRQUNFLElBQUksRUFBRSxVQUFVO1FBQ2hCLElBQUksRUFBRSx3REFBd0Q7UUFDOUQsT0FBTyxFQUFFLEtBQUs7UUFDZCxPQUFPLEVBQUUsWUFBWTtLQUN0QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLHdEQUF3RDtRQUM5RCxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxZQUFZO0tBQ3RCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRSw2REFBNkQ7UUFDbkUsT0FBTyxFQUFFLEtBQUs7UUFDZCxPQUFPLEVBQUUsVUFBVTtLQUNwQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsdURBQXVEO1FBQzdELE9BQU8sRUFBRSxLQUFLO1FBQ2QsT0FBTyxFQUFFLFVBQVU7S0FDcEI7SUFDRDtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBSSxFQUFFLHVEQUF1RDtRQUM3RCxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxVQUFVO0tBQ3BCO0NBQ0YsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkaWFsZWN0XzFfMCBmcm9tIFwiLi4vYXNzZXRzL2RpYWxlY3QtMS4wLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfVxuaW1wb3J0IGRpYWxlY3RfMl8wIGZyb20gXCIuLi9hc3NldHMvZGlhbGVjdC0yLjAuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9XG5pbXBvcnQgcGFja2FnZV8xXzAgZnJvbSBcIi4uL2Fzc2V0cy9wYWNrYWdlLTEuMC5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH1cbmltcG9ydCBwYWNrYWdlXzJfMCBmcm9tIFwiLi4vYXNzZXRzL3BhY2thZ2UtMi4wLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfVxuaW1wb3J0IHJlc291cmNlXzFfMCBmcm9tIFwiLi4vYXNzZXRzL3Jlc291cmNlLTEuMC5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH1cbmltcG9ydCByZXNvdXJjZV8yXzAgZnJvbSBcIi4uL2Fzc2V0cy9yZXNvdXJjZS0yLjAuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9XG5pbXBvcnQgc2NoZW1hXzFfMCBmcm9tIFwiLi4vYXNzZXRzL3NjaGVtYS0xLjAuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9XG5pbXBvcnQgc2NoZW1hXzJfMCBmcm9tIFwiLi4vYXNzZXRzL3NjaGVtYS0yLjAuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9XG5pbXBvcnQgdHlwZSB7IFByb2ZpbGVSZWdpc3RyeSB9IGZyb20gXCIuL1Byb2ZpbGUudHNcIlxuXG5leHBvcnQgY29uc3QgcHJvZmlsZVJlZ2lzdHJ5OiBQcm9maWxlUmVnaXN0cnkgPSBbXG4gIHtcbiAgICB0eXBlOiBcImRpYWxlY3RcIixcbiAgICBwYXRoOiBcImh0dHBzOi8vc3BlY3MuZnJpY3Rpb25sZXNzZGF0YS5pby9zY2hlbWFzL2Nzdi1kaWFsZWN0Lmpzb25cIixcbiAgICB2ZXJzaW9uOiBcIjEuMFwiLFxuICAgIHByb2ZpbGU6IGRpYWxlY3RfMV8wLFxuICB9LFxuICB7XG4gICAgdHlwZTogXCJkaWFsZWN0XCIsXG4gICAgcGF0aDogXCJodHRwczovL2RhdGFwYWNrYWdlLm9yZy9wcm9maWxlcy8xLjAvdGFibGVkaWFsZWN0Lmpzb25cIixcbiAgICB2ZXJzaW9uOiBcIjEuMFwiLFxuICAgIHByb2ZpbGU6IGRpYWxlY3RfMV8wLFxuICB9LFxuICB7XG4gICAgdHlwZTogXCJkaWFsZWN0XCIsXG4gICAgcGF0aDogXCJodHRwczovL2RhdGFwYWNrYWdlLm9yZy9wcm9maWxlcy8yLjAvdGFibGVkaWFsZWN0Lmpzb25cIixcbiAgICB2ZXJzaW9uOiBcIjIuMFwiLFxuICAgIHByb2ZpbGU6IGRpYWxlY3RfMl8wLFxuICB9LFxuICB7XG4gICAgdHlwZTogXCJwYWNrYWdlXCIsXG4gICAgcGF0aDogXCJodHRwczovL3NwZWNzLmZyaWN0aW9ubGVzc2RhdGEuaW8vc2NoZW1hcy9kYXRhLXBhY2thZ2UuanNvblwiLFxuICAgIHZlcnNpb246IFwiMS4wXCIsXG4gICAgcHJvZmlsZTogcGFja2FnZV8xXzAsXG4gIH0sXG4gIHtcbiAgICB0eXBlOiBcInBhY2thZ2VcIixcbiAgICBwYXRoOiBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzEuMC9kYXRhcGFja2FnZS5qc29uXCIsXG4gICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICBwcm9maWxlOiBwYWNrYWdlXzFfMCxcbiAgfSxcbiAge1xuICAgIHR5cGU6IFwicGFja2FnZVwiLFxuICAgIHBhdGg6IFwiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMi4wL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICB2ZXJzaW9uOiBcIjIuMFwiLFxuICAgIHByb2ZpbGU6IHBhY2thZ2VfMl8wLFxuICB9LFxuICB7XG4gICAgdHlwZTogXCJyZXNvdXJjZVwiLFxuICAgIHBhdGg6IFwiaHR0cHM6Ly9zcGVjcy5mcmljdGlvbmxlc3NkYXRhLmlvL3NjaGVtYXMvZGF0YS1yZXNvdXJjZS5qc29uXCIsXG4gICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICBwcm9maWxlOiByZXNvdXJjZV8xXzAsXG4gIH0sXG4gIHtcbiAgICB0eXBlOiBcInJlc291cmNlXCIsXG4gICAgcGF0aDogXCJodHRwczovL2RhdGFwYWNrYWdlLm9yZy9wcm9maWxlcy8xLjAvZGF0YXJlc291cmNlLmpzb25cIixcbiAgICB2ZXJzaW9uOiBcIjEuMFwiLFxuICAgIHByb2ZpbGU6IHJlc291cmNlXzFfMCxcbiAgfSxcbiAge1xuICAgIHR5cGU6IFwicmVzb3VyY2VcIixcbiAgICBwYXRoOiBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzIuMC9kYXRhcmVzb3VyY2UuanNvblwiLFxuICAgIHZlcnNpb246IFwiMi4wXCIsXG4gICAgcHJvZmlsZTogcmVzb3VyY2VfMl8wLFxuICB9LFxuICB7XG4gICAgdHlwZTogXCJzY2hlbWFcIixcbiAgICBwYXRoOiBcImh0dHBzOi8vc3BlY3MuZnJpY3Rpb25sZXNzZGF0YS5pby9zY2hlbWFzL3RhYmxlLXNjaGVtYS5qc29uXCIsXG4gICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICBwcm9maWxlOiBzY2hlbWFfMV8wLFxuICB9LFxuICB7XG4gICAgdHlwZTogXCJzY2hlbWFcIixcbiAgICBwYXRoOiBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzEuMC90YWJsZXNjaGVtYS5qc29uXCIsXG4gICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICBwcm9maWxlOiBzY2hlbWFfMV8wLFxuICB9LFxuICB7XG4gICAgdHlwZTogXCJzY2hlbWFcIixcbiAgICBwYXRoOiBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzIuMC90YWJsZXNjaGVtYS5qc29uXCIsXG4gICAgdmVyc2lvbjogXCIyLjBcIixcbiAgICBwcm9maWxlOiBzY2hlbWFfMl8wLFxuICB9LFxuXVxuIl19
@@ -0,0 +1,2 @@
1
+ import type { Profile } from "./Profile.ts";
2
+ export declare function resolveProfile(profile: Profile | string): Promise<import("../index.ts").Descriptor>;
@@ -0,0 +1,8 @@
1
+ import { loadProfile } from "./load.js";
2
+ export async function resolveProfile(profile) {
3
+ if (typeof profile !== "string") {
4
+ return profile;
5
+ }
6
+ return await loadProfile(profile);
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2ZpbGUvcmVzb2x2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXZDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLE9BQXlCO0lBQzVELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELE9BQU8sTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvZmlsZSB9IGZyb20gXCIuL1Byb2ZpbGUudHNcIlxuaW1wb3J0IHsgbG9hZFByb2ZpbGUgfSBmcm9tIFwiLi9sb2FkLnRzXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQcm9maWxlKHByb2ZpbGU6IFByb2ZpbGUgfCBzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBwcm9maWxlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHByb2ZpbGVcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBsb2FkUHJvZmlsZShwcm9maWxlKVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ import type { Descriptor } from "../descriptor/index.ts";
2
+ import type { MetadataError } from "../error/index.ts";
3
+ import type { Profile } from "./Profile.ts";
4
+ export declare function validateDescriptor(descriptor: Descriptor, options: {
5
+ profile: Profile | string;
6
+ }): Promise<{
7
+ errors: MetadataError[];
8
+ valid: boolean;
9
+ }>;
@@ -0,0 +1,12 @@
1
+ import { inspectJsonValue } from "../json/index.js";
2
+ import { createReport } from "../report/index.js";
3
+ import { resolveProfile } from "./resolve.js";
4
+ export async function validateDescriptor(descriptor, options) {
5
+ const profile = await resolveProfile(options.profile);
6
+ const errors = await inspectJsonValue(descriptor, { jsonSchema: profile });
7
+ return createReport(errors.map(error => ({
8
+ type: "metadata",
9
+ ...error,
10
+ })));
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wcm9maWxlL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTdDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLFVBQXNCLEVBQ3RCLE9BRUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUUxRSxPQUFPLFlBQVksQ0FDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsR0FBRyxLQUFLO0tBQ1QsQ0FBQyxDQUFDLENBQ0osQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERlc2NyaXB0b3IgfSBmcm9tIFwiLi4vZGVzY3JpcHRvci9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IE1ldGFkYXRhRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3IvaW5kZXgudHNcIlxuaW1wb3J0IHsgaW5zcGVjdEpzb25WYWx1ZSB9IGZyb20gXCIuLi9qc29uL2luZGV4LnRzXCJcbmltcG9ydCB7IGNyZWF0ZVJlcG9ydCB9IGZyb20gXCIuLi9yZXBvcnQvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBQcm9maWxlIH0gZnJvbSBcIi4vUHJvZmlsZS50c1wiXG5pbXBvcnQgeyByZXNvbHZlUHJvZmlsZSB9IGZyb20gXCIuL3Jlc29sdmUudHNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVEZXNjcmlwdG9yKFxuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBvcHRpb25zOiB7XG4gICAgcHJvZmlsZTogUHJvZmlsZSB8IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCByZXNvbHZlUHJvZmlsZShvcHRpb25zLnByb2ZpbGUpXG4gIGNvbnN0IGVycm9ycyA9IGF3YWl0IGluc3BlY3RKc29uVmFsdWUoZGVzY3JpcHRvciwgeyBqc29uU2NoZW1hOiBwcm9maWxlIH0pXG5cbiAgcmV0dXJuIGNyZWF0ZVJlcG9ydDxNZXRhZGF0YUVycm9yPihcbiAgICBlcnJvcnMubWFwKGVycm9yID0+ICh7XG4gICAgICB0eXBlOiBcIm1ldGFkYXRhXCIsXG4gICAgICAuLi5lcnJvcixcbiAgICB9KSksXG4gIClcbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import type { FrictionlessError } from "../error/index.ts";
2
+ export interface Report<T extends FrictionlessError = FrictionlessError> {
3
+ valid: boolean;
4
+ errors: T[];
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVwb3J0L1JlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGcmljdGlvbmxlc3NFcnJvciB9IGZyb20gXCIuLi9lcnJvci9pbmRleC50c1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0PFQgZXh0ZW5kcyBGcmljdGlvbmxlc3NFcnJvciA9IEZyaWN0aW9ubGVzc0Vycm9yPiB7XG4gIHZhbGlkOiBib29sZWFuXG4gIGVycm9yczogVFtdXG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ import type { FrictionlessError } from "../error/index.ts";
2
+ export declare function createReport<T = FrictionlessError>(errors?: T[], options?: {
3
+ maxErrors?: number;
4
+ }): {
5
+ errors: T[];
6
+ valid: boolean;
7
+ };
@@ -0,0 +1,6 @@
1
+ export function createReport(errors, options) {
2
+ errors = (errors ?? []).slice(0, options?.maxErrors);
3
+ const valid = errors.length === 0;
4
+ return { errors, valid };
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVwb3J0L2NyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUFZLEVBQ1osT0FBZ0M7SUFFaEMsTUFBTSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFBO0lBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUE7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRnJpY3Rpb25sZXNzRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3IvaW5kZXgudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVwb3J0PFQgPSBGcmljdGlvbmxlc3NFcnJvcj4oXG4gIGVycm9ycz86IFRbXSxcbiAgb3B0aW9ucz86IHsgbWF4RXJyb3JzPzogbnVtYmVyIH0sXG4pIHtcbiAgZXJyb3JzID0gKGVycm9ycyA/PyBbXSkuc2xpY2UoMCwgb3B0aW9ucz8ubWF4RXJyb3JzKVxuICBjb25zdCB2YWxpZCA9IGVycm9ycy5sZW5ndGggPT09IDBcblxuICByZXR1cm4geyBlcnJvcnMsIHZhbGlkIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export type { Report } from "./Report.ts";
2
+ export { createReport } from "./create.ts";
@@ -0,0 +1,2 @@
1
+ export { createReport } from "./create.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXBvcnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgUmVwb3J0IH0gZnJvbSBcIi4vUmVwb3J0LnRzXCJcbmV4cG9ydCB7IGNyZWF0ZVJlcG9ydCB9IGZyb20gXCIuL2NyZWF0ZS50c1wiXG4iXX0=
@@ -0,0 +1,18 @@
1
+ /**
2
+ * License information
3
+ */
4
+ export interface License {
5
+ /**
6
+ * The name of the license
7
+ * @example "MIT", "Apache-2.0"
8
+ */
9
+ name?: string;
10
+ /**
11
+ * A URL to the license text
12
+ */
13
+ path?: string;
14
+ /**
15
+ * Human-readable title of the license
16
+ */
17
+ title?: string;
18
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGljZW5zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL0xpY2Vuc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGljZW5zZSBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpY2Vuc2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2VcbiAgICogQGV4YW1wbGUgXCJNSVRcIiwgXCJBcGFjaGUtMi4wXCJcbiAgICovXG4gIG5hbWU/OiBzdHJpbmdcblxuICAvKipcbiAgICogQSBVUkwgdG8gdGhlIGxpY2Vuc2UgdGV4dFxuICAgKi9cbiAgcGF0aD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSB0aXRsZSBvZiB0aGUgbGljZW5zZVxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmdcbn1cbiJdfQ==
@@ -0,0 +1,93 @@
1
+ import type { Dialect } from "../dialect/index.ts";
2
+ import type { Metadata } from "../metadata/index.ts";
3
+ import type { Profile } from "../profile/index.ts";
4
+ import type { Schema } from "../schema/index.ts";
5
+ import type { License } from "./License.ts";
6
+ import type { Source } from "./Source.ts";
7
+ /**
8
+ * Data Resource interface built on top of the Data Package standard and Polars DataFrames
9
+ * @see https://datapackage.org/standard/data-resource/
10
+ */
11
+ export interface Resource extends Metadata {
12
+ /**
13
+ * JSON schema profile URL for validation
14
+ */
15
+ $schema?: string;
16
+ /**
17
+ * Unique resource identifier
18
+ * Should use lowercase alphanumeric characters, periods, hyphens, and underscores
19
+ */
20
+ name: string;
21
+ /**
22
+ * A reference to the data itself, can be a path URL or array of paths
23
+ * Either path or data must be provided
24
+ */
25
+ path?: string | string[];
26
+ /**
27
+ * Inline data content instead of referencing an external file
28
+ * Either path or data must be provided
29
+ */
30
+ data?: unknown | unknown[][] | Record<string, unknown>[];
31
+ /**
32
+ * The resource type
33
+ * @example "table"
34
+ */
35
+ type?: "table";
36
+ /**
37
+ * The file format
38
+ * @example "csv", "json", "xlsx"
39
+ */
40
+ format?: string;
41
+ /**
42
+ * The media type of the resource
43
+ * @example "text/csv", "application/json"
44
+ */
45
+ mediatype?: string;
46
+ /**
47
+ * Character encoding of the resource
48
+ * @default "utf-8"
49
+ */
50
+ encoding?: string;
51
+ /**
52
+ * Human-readable title
53
+ */
54
+ title?: string;
55
+ /**
56
+ * A description of the resource
57
+ */
58
+ description?: string;
59
+ /**
60
+ * Size of the file in bytes
61
+ */
62
+ bytes?: number;
63
+ /**
64
+ * Hash of the resource data
65
+ */
66
+ hash?: string;
67
+ /**
68
+ * Data sources
69
+ */
70
+ sources?: Source[];
71
+ /**
72
+ * License information
73
+ */
74
+ licenses?: License[];
75
+ /**
76
+ * Table dialect specification
77
+ * Describes delimiters, quote characters, etc.
78
+ * @see https://datapackage.org/standard/table-dialect/
79
+ */
80
+ dialect?: string | Dialect;
81
+ /**
82
+ * Schema for the tabular data
83
+ * Describes fields in the table, constraints, etc.
84
+ * @see https://datapackage.org/standard/table-schema/
85
+ */
86
+ schema?: string | Schema;
87
+ /**
88
+ * Schema for the json data
89
+ * Describes fields in the json, constraints, etc.
90
+ * @see https://json-schema.org/
91
+ */
92
+ jsonSchema?: string | Profile;
93
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS9SZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEaWFsZWN0IH0gZnJvbSBcIi4uL2RpYWxlY3QvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBNZXRhZGF0YSB9IGZyb20gXCIuLi9tZXRhZGF0YS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFByb2ZpbGUgfSBmcm9tIFwiLi4vcHJvZmlsZS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFNjaGVtYSB9IGZyb20gXCIuLi9zY2hlbWEvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBMaWNlbnNlIH0gZnJvbSBcIi4vTGljZW5zZS50c1wiXG5pbXBvcnQgdHlwZSB7IFNvdXJjZSB9IGZyb20gXCIuL1NvdXJjZS50c1wiXG5cbi8qKlxuICogRGF0YSBSZXNvdXJjZSBpbnRlcmZhY2UgYnVpbHQgb24gdG9wIG9mIHRoZSBEYXRhIFBhY2thZ2Ugc3RhbmRhcmQgYW5kIFBvbGFycyBEYXRhRnJhbWVzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3N0YW5kYXJkL2RhdGEtcmVzb3VyY2UvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2UgZXh0ZW5kcyBNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBKU09OIHNjaGVtYSBwcm9maWxlIFVSTCBmb3IgdmFsaWRhdGlvblxuICAgKi9cbiAgJHNjaGVtYT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgcmVzb3VyY2UgaWRlbnRpZmllclxuICAgKiBTaG91bGQgdXNlIGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgcGVyaW9kcywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzXG4gICAqL1xuICBuYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgaXRzZWxmLCBjYW4gYmUgYSBwYXRoIFVSTCBvciBhcnJheSBvZiBwYXRoc1xuICAgKiBFaXRoZXIgcGF0aCBvciBkYXRhIG11c3QgYmUgcHJvdmlkZWRcbiAgICovXG4gIHBhdGg/OiBzdHJpbmcgfCBzdHJpbmdbXVxuXG4gIC8qKlxuICAgKiBJbmxpbmUgZGF0YSBjb250ZW50IGluc3RlYWQgb2YgcmVmZXJlbmNpbmcgYW4gZXh0ZXJuYWwgZmlsZVxuICAgKiBFaXRoZXIgcGF0aCBvciBkYXRhIG11c3QgYmUgcHJvdmlkZWRcbiAgICovXG4gIGRhdGE/OiB1bmtub3duIHwgdW5rbm93bltdW10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdXG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSB0eXBlXG4gICAqIEBleGFtcGxlIFwidGFibGVcIlxuICAgKi9cbiAgdHlwZT86IFwidGFibGVcIlxuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBmb3JtYXRcbiAgICogQGV4YW1wbGUgXCJjc3ZcIiwgXCJqc29uXCIsIFwieGxzeFwiXG4gICAqL1xuICBmb3JtYXQ/OiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIG1lZGlhIHR5cGUgb2YgdGhlIHJlc291cmNlXG4gICAqIEBleGFtcGxlIFwidGV4dC9jc3ZcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICovXG4gIG1lZGlhdHlwZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIHJlc291cmNlXG4gICAqIEBkZWZhdWx0IFwidXRmLThcIlxuICAgKi9cbiAgZW5jb2Rpbmc/OiBzdHJpbmdcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgdGl0bGVcbiAgICovXG4gIHRpdGxlPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBTaXplIG9mIHRoZSBmaWxlIGluIGJ5dGVzXG4gICAqL1xuICBieXRlcz86IG51bWJlclxuXG4gIC8qKlxuICAgKiBIYXNoIG9mIHRoZSByZXNvdXJjZSBkYXRhXG4gICAqL1xuICBoYXNoPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIERhdGEgc291cmNlc1xuICAgKi9cbiAgc291cmNlcz86IFNvdXJjZVtdXG5cbiAgLyoqXG4gICAqIExpY2Vuc2UgaW5mb3JtYXRpb25cbiAgICovXG4gIGxpY2Vuc2VzPzogTGljZW5zZVtdXG5cbiAgLyoqXG4gICAqIFRhYmxlIGRpYWxlY3Qgc3BlY2lmaWNhdGlvblxuICAgKiBEZXNjcmliZXMgZGVsaW1pdGVycywgcXVvdGUgY2hhcmFjdGVycywgZXRjLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3N0YW5kYXJkL3RhYmxlLWRpYWxlY3QvXG4gICAqL1xuICBkaWFsZWN0Pzogc3RyaW5nIHwgRGlhbGVjdFxuXG4gIC8qKlxuICAgKiBTY2hlbWEgZm9yIHRoZSB0YWJ1bGFyIGRhdGFcbiAgICogRGVzY3JpYmVzIGZpZWxkcyBpbiB0aGUgdGFibGUsIGNvbnN0cmFpbnRzLCBldGMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvc3RhbmRhcmQvdGFibGUtc2NoZW1hL1xuICAgKi9cbiAgc2NoZW1hPzogc3RyaW5nIHwgU2NoZW1hXG5cbiAgLyoqXG4gICAqIFNjaGVtYSBmb3IgdGhlIGpzb24gZGF0YVxuICAgKiBEZXNjcmliZXMgZmllbGRzIGluIHRoZSBqc29uLCBjb25zdHJhaW50cywgZXRjLlxuICAgKiBAc2VlIGh0dHBzOi8vanNvbi1zY2hlbWEub3JnL1xuICAgKi9cbiAganNvblNjaGVtYT86IHN0cmluZyB8IFByb2ZpbGVcbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Source information
3
+ */
4
+ export interface Source {
5
+ /**
6
+ * Human-readable title of the source
7
+ */
8
+ title?: string;
9
+ /**
10
+ * URL or path to the source
11
+ */
12
+ path?: string;
13
+ /**
14
+ * Email contact for the source
15
+ */
16
+ email?: string;
17
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVzb3VyY2UvU291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNvdXJjZSBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZSB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSB0aXRsZSBvZiB0aGUgc291cmNlXG4gICAqL1xuICB0aXRsZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBVUkwgb3IgcGF0aCB0byB0aGUgc291cmNlXG4gICAqL1xuICBwYXRoPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEVtYWlsIGNvbnRhY3QgZm9yIHRoZSBzb3VyY2VcbiAgICovXG4gIGVtYWlsPzogc3RyaW5nXG59XG4iXX0=