@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,8 @@
1
+ import type { Descriptor } from "../descriptor/index.ts";
2
+ import type { Resource } from "./Resource.ts";
3
+ /**
4
+ * Assert a Resource descriptor (JSON Object) against its profile
5
+ */
6
+ export declare function assertResource(source: Descriptor | Resource, options?: {
7
+ basepath?: string;
8
+ }): Promise<Resource>;
@@ -0,0 +1,12 @@
1
+ import { validateResourceMetadata } from "./validate.js";
2
+ /**
3
+ * Assert a Resource descriptor (JSON Object) against its profile
4
+ */
5
+ export async function assertResource(source, options) {
6
+ const report = await validateResourceMetadata(source, options);
7
+ if (!report.resource) {
8
+ throw new Error(`Resource "${JSON.stringify(source).slice(0, 100)}" is not valid`);
9
+ }
10
+ return report.resource;
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVzb3VyY2UvYXNzZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV4RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxNQUE2QixFQUM3QixPQUVDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUNiLGFBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FDbEUsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUE7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVzY3JpcHRvciB9IGZyb20gXCIuLi9kZXNjcmlwdG9yL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5pbXBvcnQgeyB2YWxpZGF0ZVJlc291cmNlTWV0YWRhdGEgfSBmcm9tIFwiLi92YWxpZGF0ZS50c1wiXG5cbi8qKlxuICogQXNzZXJ0IGEgUmVzb3VyY2UgZGVzY3JpcHRvciAoSlNPTiBPYmplY3QpIGFnYWluc3QgaXRzIHByb2ZpbGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydFJlc291cmNlKFxuICBzb3VyY2U6IERlc2NyaXB0b3IgfCBSZXNvdXJjZSxcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IHJlcG9ydCA9IGF3YWl0IHZhbGlkYXRlUmVzb3VyY2VNZXRhZGF0YShzb3VyY2UsIG9wdGlvbnMpXG5cbiAgaWYgKCFyZXBvcnQucmVzb3VyY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVzb3VyY2UgXCIke0pTT04uc3RyaW5naWZ5KHNvdXJjZSkuc2xpY2UoMCwgMTAwKX1cIiBpcyBub3QgdmFsaWRgLFxuICAgIClcbiAgfVxuXG4gIHJldHVybiByZXBvcnQucmVzb3VyY2Vcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { describe, expect, expectTypeOf, it } from "vitest";
2
+ import { assertResource } from "./assert.js";
3
+ describe("assertResource", () => {
4
+ it("returns typed resource when valid", async () => {
5
+ const descriptor = {
6
+ name: "example-resource",
7
+ path: "data.csv",
8
+ format: "csv",
9
+ encoding: "utf-8",
10
+ };
11
+ const resource = await assertResource(descriptor);
12
+ expectTypeOf(resource).toEqualTypeOf();
13
+ expect(resource).toEqual(descriptor);
14
+ });
15
+ it("throws Error when resource is invalid", async () => {
16
+ const invalidResource = {
17
+ name: 123,
18
+ path: true,
19
+ };
20
+ await expect(assertResource(invalidResource)).rejects.toThrow(Error);
21
+ });
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS9hc3NlcnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFNUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtJQUM5QixFQUFFLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakQsTUFBTSxVQUFVLEdBQUc7WUFDakIsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxPQUFPO1NBQ2xCLENBQUE7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVqRCxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFZLENBQUE7UUFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN0QyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRCxNQUFNLGVBQWUsR0FBRztZQUN0QixJQUFJLEVBQUUsR0FBRztZQUNULElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQTtRQUVELE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEUsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGV4cGVjdFR5cGVPZiwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5pbXBvcnQgeyBhc3NlcnRSZXNvdXJjZSB9IGZyb20gXCIuL2Fzc2VydC50c1wiXG5cbmRlc2NyaWJlKFwiYXNzZXJ0UmVzb3VyY2VcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgdHlwZWQgcmVzb3VyY2Ugd2hlbiB2YWxpZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAgIG5hbWU6IFwiZXhhbXBsZS1yZXNvdXJjZVwiLFxuICAgICAgcGF0aDogXCJkYXRhLmNzdlwiLFxuICAgICAgZm9ybWF0OiBcImNzdlwiLFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IGF3YWl0IGFzc2VydFJlc291cmNlKGRlc2NyaXB0b3IpXG5cbiAgICBleHBlY3RUeXBlT2YocmVzb3VyY2UpLnRvRXF1YWxUeXBlT2Y8UmVzb3VyY2U+KClcbiAgICBleHBlY3QocmVzb3VyY2UpLnRvRXF1YWwoZGVzY3JpcHRvcilcbiAgfSlcblxuICBpdChcInRocm93cyBFcnJvciB3aGVuIHJlc291cmNlIGlzIGludmFsaWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGludmFsaWRSZXNvdXJjZSA9IHtcbiAgICAgIG5hbWU6IDEyMyxcbiAgICAgIHBhdGg6IHRydWUsXG4gICAgfVxuXG4gICAgYXdhaXQgZXhwZWN0KGFzc2VydFJlc291cmNlKGludmFsaWRSZXNvdXJjZSkpLnJlamVjdHMudG9UaHJvdyhFcnJvcilcbiAgfSlcbn0pXG4iXX0=
@@ -0,0 +1,4 @@
1
+ import type { Descriptor } from "../../descriptor/index.ts";
2
+ export declare function convertResourceFromDescriptor(descriptor: Descriptor, options?: {
3
+ basepath?: string;
4
+ }): Descriptor;
@@ -0,0 +1,69 @@
1
+ import { isDescriptor } from "../../descriptor/index.js";
2
+ import { convertDialectFromDescriptor } from "../../dialect/index.js";
3
+ import { isRemotePath, normalizePath } from "../../path/index.js";
4
+ import { convertSchemaFromDescriptor } from "../../schema/index.js";
5
+ export function convertResourceFromDescriptor(descriptor, options) {
6
+ descriptor = globalThis.structuredClone(descriptor);
7
+ convertProfile(descriptor);
8
+ convertUrl(descriptor);
9
+ convertType(descriptor);
10
+ convertPaths(descriptor, options);
11
+ convertDialect(descriptor);
12
+ convertSchema(descriptor);
13
+ return descriptor;
14
+ }
15
+ function convertProfile(descriptor) {
16
+ const remoteProfile = typeof descriptor.profile === "string" && isRemotePath(descriptor.profile)
17
+ ? descriptor.profile
18
+ : undefined;
19
+ descriptor.$schema = descriptor.$schema ?? remoteProfile;
20
+ }
21
+ function convertUrl(descriptor) {
22
+ const url = descriptor.url;
23
+ if (!url) {
24
+ return;
25
+ }
26
+ if (!descriptor.path) {
27
+ descriptor.path = descriptor.url;
28
+ descriptor.url = undefined;
29
+ }
30
+ }
31
+ function convertType(descriptor) {
32
+ const type = descriptor.type;
33
+ if (!type) {
34
+ return;
35
+ }
36
+ if (typeof type !== "string") {
37
+ descriptor.type = undefined;
38
+ console.warn(`Ignoring v2.0 incompatible resource type: ${type}`);
39
+ }
40
+ }
41
+ function convertPaths(descriptor, options) {
42
+ const basepath = options?.basepath;
43
+ if (typeof descriptor.path === "string") {
44
+ descriptor.path = normalizePath(descriptor.path, { basepath });
45
+ }
46
+ if (Array.isArray(descriptor.path)) {
47
+ for (const [index, path] of descriptor.path.entries()) {
48
+ descriptor.path[index] = normalizePath(path, { basepath });
49
+ }
50
+ }
51
+ for (const name of ["dialect", "schema"]) {
52
+ if (typeof descriptor[name] === "string") {
53
+ descriptor[name] = normalizePath(descriptor[name], {
54
+ basepath,
55
+ });
56
+ }
57
+ }
58
+ }
59
+ function convertDialect(descriptor) {
60
+ if (isDescriptor(descriptor.dialect)) {
61
+ descriptor.dialect = convertDialectFromDescriptor(descriptor.dialect);
62
+ }
63
+ }
64
+ function convertSchema(descriptor) {
65
+ if (isDescriptor(descriptor.schema)) {
66
+ descriptor.schema = convertSchemaFromDescriptor(descriptor.schema);
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbURlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9yZXNvdXJjZS9jb252ZXJ0L2Zyb21EZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUV4RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRW5FLE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsVUFBc0IsRUFDdEIsT0FFQztJQUVELFVBQVUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRW5ELGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxQixVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdEIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZCLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFakMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzFCLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUV6QixPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsVUFBc0I7SUFDNUMsTUFBTSxhQUFhLEdBQ2pCLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDeEUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPO1FBQ3BCLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFFZixVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFBO0FBQzFELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxVQUFzQjtJQUN4QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFBO0lBQzFCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUE7UUFDaEMsVUFBVSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxVQUFzQjtJQUN6QyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFBO0lBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixVQUFVLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsVUFBc0IsRUFBRSxPQUErQjtJQUMzRSxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFBO0lBRWxDLElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN0RCxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQVUsRUFBRSxDQUFDO1FBQ2xELElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pELFFBQVE7YUFDVCxDQUFDLENBQUE7UUFDSixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxVQUFzQjtJQUM1QyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxVQUFVLENBQUMsT0FBTyxHQUFHLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN2RSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFVBQXNCO0lBQzNDLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3BDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsMkJBQTJCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2Rlc2NyaXB0b3IvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2Rlc2NyaXB0b3IvaW5kZXgudHNcIlxuaW1wb3J0IHsgY29udmVydERpYWxlY3RGcm9tRGVzY3JpcHRvciB9IGZyb20gXCIuLi8uLi9kaWFsZWN0L2luZGV4LnRzXCJcbmltcG9ydCB7IGlzUmVtb3RlUGF0aCwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCIuLi8uLi9wYXRoL2luZGV4LnRzXCJcbmltcG9ydCB7IGNvbnZlcnRTY2hlbWFGcm9tRGVzY3JpcHRvciB9IGZyb20gXCIuLi8uLi9zY2hlbWEvaW5kZXgudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJlc291cmNlRnJvbURlc2NyaXB0b3IoXG4gIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IsXG4gIG9wdGlvbnM/OiB7XG4gICAgYmFzZXBhdGg/OiBzdHJpbmdcbiAgfSxcbikge1xuICBkZXNjcmlwdG9yID0gZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUoZGVzY3JpcHRvcilcblxuICBjb252ZXJ0UHJvZmlsZShkZXNjcmlwdG9yKVxuICBjb252ZXJ0VXJsKGRlc2NyaXB0b3IpXG4gIGNvbnZlcnRUeXBlKGRlc2NyaXB0b3IpXG4gIGNvbnZlcnRQYXRocyhkZXNjcmlwdG9yLCBvcHRpb25zKVxuXG4gIGNvbnZlcnREaWFsZWN0KGRlc2NyaXB0b3IpXG4gIGNvbnZlcnRTY2hlbWEoZGVzY3JpcHRvcilcblxuICByZXR1cm4gZGVzY3JpcHRvclxufVxuXG5mdW5jdGlvbiBjb252ZXJ0UHJvZmlsZShkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGNvbnN0IHJlbW90ZVByb2ZpbGUgPVxuICAgIHR5cGVvZiBkZXNjcmlwdG9yLnByb2ZpbGUgPT09IFwic3RyaW5nXCIgJiYgaXNSZW1vdGVQYXRoKGRlc2NyaXB0b3IucHJvZmlsZSlcbiAgICAgID8gZGVzY3JpcHRvci5wcm9maWxlXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gIGRlc2NyaXB0b3IuJHNjaGVtYSA9IGRlc2NyaXB0b3IuJHNjaGVtYSA/PyByZW1vdGVQcm9maWxlXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRVcmwoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBjb25zdCB1cmwgPSBkZXNjcmlwdG9yLnVybFxuICBpZiAoIXVybCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFkZXNjcmlwdG9yLnBhdGgpIHtcbiAgICBkZXNjcmlwdG9yLnBhdGggPSBkZXNjcmlwdG9yLnVybFxuICAgIGRlc2NyaXB0b3IudXJsID0gdW5kZWZpbmVkXG4gIH1cbn1cblxuZnVuY3Rpb24gY29udmVydFR5cGUoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBjb25zdCB0eXBlID0gZGVzY3JpcHRvci50eXBlXG4gIGlmICghdHlwZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgZGVzY3JpcHRvci50eXBlID0gdW5kZWZpbmVkXG4gICAgY29uc29sZS53YXJuKGBJZ25vcmluZyB2Mi4wIGluY29tcGF0aWJsZSByZXNvdXJjZSB0eXBlOiAke3R5cGV9YClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aHMoZGVzY3JpcHRvcjogRGVzY3JpcHRvciwgb3B0aW9ucz86IHsgYmFzZXBhdGg/OiBzdHJpbmcgfSkge1xuICBjb25zdCBiYXNlcGF0aCA9IG9wdGlvbnM/LmJhc2VwYXRoXG5cbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICBkZXNjcmlwdG9yLnBhdGggPSBub3JtYWxpemVQYXRoKGRlc2NyaXB0b3IucGF0aCwgeyBiYXNlcGF0aCB9KVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGVzY3JpcHRvci5wYXRoKSkge1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBwYXRoXSBvZiBkZXNjcmlwdG9yLnBhdGguZW50cmllcygpKSB7XG4gICAgICBkZXNjcmlwdG9yLnBhdGhbaW5kZXhdID0gbm9ybWFsaXplUGF0aChwYXRoLCB7IGJhc2VwYXRoIH0pXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIFtcImRpYWxlY3RcIiwgXCJzY2hlbWFcIl0gYXMgY29uc3QpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3JbbmFtZV0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGRlc2NyaXB0b3JbbmFtZV0gPSBub3JtYWxpemVQYXRoKGRlc2NyaXB0b3JbbmFtZV0sIHtcbiAgICAgICAgYmFzZXBhdGgsXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlhbGVjdChkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGlmIChpc0Rlc2NyaXB0b3IoZGVzY3JpcHRvci5kaWFsZWN0KSkge1xuICAgIGRlc2NyaXB0b3IuZGlhbGVjdCA9IGNvbnZlcnREaWFsZWN0RnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvci5kaWFsZWN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRTY2hlbWEoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBpZiAoaXNEZXNjcmlwdG9yKGRlc2NyaXB0b3Iuc2NoZW1hKSkge1xuICAgIGRlc2NyaXB0b3Iuc2NoZW1hID0gY29udmVydFNjaGVtYUZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3Iuc2NoZW1hKVxuICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import type { Descriptor } from "../../descriptor/index.ts";
2
+ import type { Resource } from "../Resource.ts";
3
+ export declare function convertResourceToDescriptor(resource: Resource, options?: {
4
+ basepath?: string;
5
+ }): Descriptor;
@@ -0,0 +1,36 @@
1
+ import { convertDialectToDescriptor } from "../../dialect/index.js";
2
+ import { denormalizePath } from "../../path/index.js";
3
+ import { convertSchemaToDescriptor } from "../../schema/index.js";
4
+ export function convertResourceToDescriptor(resource, options) {
5
+ resource = globalThis.structuredClone(resource);
6
+ convertPaths(resource, options);
7
+ const dialect = convertDialect(resource);
8
+ const schema = convertSchema(resource);
9
+ return { ...resource, dialect, schema };
10
+ }
11
+ function convertPaths(resource, options) {
12
+ const basepath = options?.basepath;
13
+ if (resource.path) {
14
+ resource.path = Array.isArray(resource.path)
15
+ ? resource.path.map(path => denormalizePath(path, { basepath }))
16
+ : denormalizePath(resource.path, { basepath });
17
+ }
18
+ for (const name of ["dialect", "schema"]) {
19
+ if (typeof resource[name] === "string") {
20
+ resource[name] = denormalizePath(resource[name], { basepath });
21
+ }
22
+ }
23
+ }
24
+ function convertDialect(resource) {
25
+ if (!resource.dialect || typeof resource.dialect === "string") {
26
+ return resource.dialect;
27
+ }
28
+ return convertDialectToDescriptor(resource.dialect);
29
+ }
30
+ function convertSchema(resource) {
31
+ if (!resource.schema || typeof resource.schema === "string") {
32
+ return resource.schema;
33
+ }
34
+ return convertSchemaToDescriptor(resource.schema);
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9EZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcmVzb3VyY2UvY29udmVydC90b0Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBR2pFLE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsUUFBa0IsRUFDbEIsT0FFQztJQUVELFFBQVEsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRS9DLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFL0IsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUV0QyxPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsQ0FBQTtBQUN2RCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLFFBQWtCLEVBQ2xCLE9BRUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFBO0lBRWxDLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFVLEVBQUUsQ0FBQztRQUNsRCxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUNoRSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxRQUFrQjtJQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFBO0lBQ3pCLENBQUM7SUFFRCxPQUFPLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNyRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsUUFBa0I7SUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksT0FBTyxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQTtJQUN4QixDQUFDO0lBRUQsT0FBTyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVzY3JpcHRvciB9IGZyb20gXCIuLi8uLi9kZXNjcmlwdG9yL2luZGV4LnRzXCJcbmltcG9ydCB7IGNvbnZlcnREaWFsZWN0VG9EZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2RpYWxlY3QvaW5kZXgudHNcIlxuaW1wb3J0IHsgZGVub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4uLy4uL3BhdGgvaW5kZXgudHNcIlxuaW1wb3J0IHsgY29udmVydFNjaGVtYVRvRGVzY3JpcHRvciB9IGZyb20gXCIuLi8uLi9zY2hlbWEvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gXCIuLi9SZXNvdXJjZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmVzb3VyY2VUb0Rlc2NyaXB0b3IoXG4gIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIHJlc291cmNlID0gZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUocmVzb3VyY2UpXG5cbiAgY29udmVydFBhdGhzKHJlc291cmNlLCBvcHRpb25zKVxuXG4gIGNvbnN0IGRpYWxlY3QgPSBjb252ZXJ0RGlhbGVjdChyZXNvdXJjZSlcbiAgY29uc3Qgc2NoZW1hID0gY29udmVydFNjaGVtYShyZXNvdXJjZSlcblxuICByZXR1cm4geyAuLi5yZXNvdXJjZSwgZGlhbGVjdCwgc2NoZW1hIH0gYXMgRGVzY3JpcHRvclxufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aHMoXG4gIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IGJhc2VwYXRoID0gb3B0aW9ucz8uYmFzZXBhdGhcblxuICBpZiAocmVzb3VyY2UucGF0aCkge1xuICAgIHJlc291cmNlLnBhdGggPSBBcnJheS5pc0FycmF5KHJlc291cmNlLnBhdGgpXG4gICAgICA/IHJlc291cmNlLnBhdGgubWFwKHBhdGggPT4gZGVub3JtYWxpemVQYXRoKHBhdGgsIHsgYmFzZXBhdGggfSkpXG4gICAgICA6IGRlbm9ybWFsaXplUGF0aChyZXNvdXJjZS5wYXRoLCB7IGJhc2VwYXRoIH0pXG4gIH1cblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgW1wiZGlhbGVjdFwiLCBcInNjaGVtYVwiXSBhcyBjb25zdCkge1xuICAgIGlmICh0eXBlb2YgcmVzb3VyY2VbbmFtZV0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJlc291cmNlW25hbWVdID0gZGVub3JtYWxpemVQYXRoKHJlc291cmNlW25hbWVdLCB7IGJhc2VwYXRoIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREaWFsZWN0KHJlc291cmNlOiBSZXNvdXJjZSkge1xuICBpZiAoIXJlc291cmNlLmRpYWxlY3QgfHwgdHlwZW9mIHJlc291cmNlLmRpYWxlY3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UuZGlhbGVjdFxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnREaWFsZWN0VG9EZXNjcmlwdG9yKHJlc291cmNlLmRpYWxlY3QpXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRTY2hlbWEocmVzb3VyY2U6IFJlc291cmNlKSB7XG4gIGlmICghcmVzb3VyY2Uuc2NoZW1hIHx8IHR5cGVvZiByZXNvdXJjZS5zY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcmVzb3VyY2Uuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY29udmVydFNjaGVtYVRvRGVzY3JpcHRvcihyZXNvdXJjZS5zY2hlbWEpXG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import type { Resource } from "./Resource.ts";
2
+ export declare function isRemoteResource(resource: Resource): boolean;
@@ -0,0 +1,6 @@
1
+ import { isRemotePath } from "../path/index.js";
2
+ export function isRemoteResource(resource) {
3
+ const path = Array.isArray(resource.path) ? resource.path[0] : resource.path;
4
+ return path ? isRemotePath(path) : false;
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRy9DLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUFrQjtJQUNqRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtJQUM1RSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUmVtb3RlUGF0aCB9IGZyb20gXCIuLi9wYXRoL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbW90ZVJlc291cmNlKHJlc291cmNlOiBSZXNvdXJjZSkge1xuICBjb25zdCBwYXRoID0gQXJyYXkuaXNBcnJheShyZXNvdXJjZS5wYXRoKSA/IHJlc291cmNlLnBhdGhbMF0gOiByZXNvdXJjZS5wYXRoXG4gIHJldHVybiBwYXRoID8gaXNSZW1vdGVQYXRoKHBhdGgpIDogZmFsc2Vcbn1cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ export type { Resource } from "./Resource.ts";
2
+ export { inferName, inferFormat } from "./infer.ts";
3
+ export { assertResource } from "./assert.ts";
4
+ export { loadResourceDescriptor } from "./load.ts";
5
+ export { saveResourceDescriptor } from "./save.ts";
6
+ export { validateResourceMetadata } from "./validate.ts";
7
+ export { convertResourceFromDescriptor } from "./convert/fromDescriptor.ts";
8
+ export { convertResourceToDescriptor } from "./convert/toDescriptor.ts";
9
+ export { isRemoteResource } from "./helpers.ts";
10
+ export type { Source } from "./Source.ts";
11
+ export type { License } from "./License.ts";
@@ -0,0 +1,9 @@
1
+ export { inferName, inferFormat } from "./infer.js";
2
+ export { assertResource } from "./assert.js";
3
+ export { loadResourceDescriptor } from "./load.js";
4
+ export { saveResourceDescriptor } from "./save.js";
5
+ export { validateResourceMetadata } from "./validate.js";
6
+ export { convertResourceFromDescriptor } from "./convert/fromDescriptor.js";
7
+ export { convertResourceToDescriptor } from "./convert/toDescriptor.js";
8
+ export { isRemoteResource } from "./helpers.js";
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5leHBvcnQgeyBpbmZlck5hbWUsIGluZmVyRm9ybWF0IH0gZnJvbSBcIi4vaW5mZXIudHNcIlxuZXhwb3J0IHsgYXNzZXJ0UmVzb3VyY2UgfSBmcm9tIFwiLi9hc3NlcnQudHNcIlxuZXhwb3J0IHsgbG9hZFJlc291cmNlRGVzY3JpcHRvciB9IGZyb20gXCIuL2xvYWQudHNcIlxuZXhwb3J0IHsgc2F2ZVJlc291cmNlRGVzY3JpcHRvciB9IGZyb20gXCIuL3NhdmUudHNcIlxuZXhwb3J0IHsgdmFsaWRhdGVSZXNvdXJjZU1ldGFkYXRhIH0gZnJvbSBcIi4vdmFsaWRhdGUudHNcIlxuZXhwb3J0IHsgY29udmVydFJlc291cmNlRnJvbURlc2NyaXB0b3IgfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21EZXNjcmlwdG9yLnRzXCJcbmV4cG9ydCB7IGNvbnZlcnRSZXNvdXJjZVRvRGVzY3JpcHRvciB9IGZyb20gXCIuL2NvbnZlcnQvdG9EZXNjcmlwdG9yLnRzXCJcbmV4cG9ydCB7IGlzUmVtb3RlUmVzb3VyY2UgfSBmcm9tIFwiLi9oZWxwZXJzLnRzXCJcbmV4cG9ydCB0eXBlIHsgU291cmNlIH0gZnJvbSBcIi4vU291cmNlLnRzXCJcbmV4cG9ydCB0eXBlIHsgTGljZW5zZSB9IGZyb20gXCIuL0xpY2Vuc2UudHNcIlxuIl19
@@ -0,0 +1,3 @@
1
+ import type { Resource } from "./Resource.ts";
2
+ export declare function inferName(resource: Partial<Resource>): string;
3
+ export declare function inferFormat(resource: Partial<Resource>): string | undefined;
@@ -0,0 +1,35 @@
1
+ import { getFilename, getFormat, getName, getProtocol } from "../path/index.js";
2
+ export function inferName(resource) {
3
+ let name = resource.name;
4
+ if (!name) {
5
+ const path = Array.isArray(resource.path) ? resource.path[0] : resource.path;
6
+ if (path) {
7
+ const filename = getFilename(path);
8
+ name = getName(filename);
9
+ }
10
+ }
11
+ return name ?? "resource";
12
+ }
13
+ export function inferFormat(resource) {
14
+ let format = resource.format;
15
+ if (!format) {
16
+ if (resource.path) {
17
+ const path = Array.isArray(resource.path)
18
+ ? resource.path[0]
19
+ : resource.path;
20
+ if (path) {
21
+ const protocol = getProtocol(path);
22
+ if (DATABASE_PROTOCOLS.includes(protocol)) {
23
+ format = protocol;
24
+ }
25
+ else {
26
+ const filename = getFilename(path);
27
+ format = getFormat(filename);
28
+ }
29
+ }
30
+ }
31
+ }
32
+ return format;
33
+ }
34
+ const DATABASE_PROTOCOLS = ["postgresql", "mysql", "sqlite"];
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS9pbmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFHL0UsTUFBTSxVQUFVLFNBQVMsQ0FBQyxRQUEyQjtJQUNuRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFBO0lBRXhCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFBO1FBQzVFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxJQUFJLFVBQVUsQ0FBQTtBQUMzQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxRQUEyQjtJQUNyRCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFBO0lBRTVCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtZQUVqQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFFbEMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDMUMsTUFBTSxHQUFHLFFBQVEsQ0FBQTtnQkFDbkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDbEMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDOUIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RmlsZW5hbWUsIGdldEZvcm1hdCwgZ2V0TmFtZSwgZ2V0UHJvdG9jb2wgfSBmcm9tIFwiLi4vcGF0aC9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIi4vUmVzb3VyY2UudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJOYW1lKHJlc291cmNlOiBQYXJ0aWFsPFJlc291cmNlPikge1xuICBsZXQgbmFtZSA9IHJlc291cmNlLm5hbWVcblxuICBpZiAoIW5hbWUpIHtcbiAgICBjb25zdCBwYXRoID0gQXJyYXkuaXNBcnJheShyZXNvdXJjZS5wYXRoKSA/IHJlc291cmNlLnBhdGhbMF0gOiByZXNvdXJjZS5wYXRoXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gZ2V0RmlsZW5hbWUocGF0aClcbiAgICAgIG5hbWUgPSBnZXROYW1lKGZpbGVuYW1lKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lID8/IFwicmVzb3VyY2VcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJGb3JtYXQocmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+KSB7XG4gIGxldCBmb3JtYXQgPSByZXNvdXJjZS5mb3JtYXRcblxuICBpZiAoIWZvcm1hdCkge1xuICAgIGlmIChyZXNvdXJjZS5wYXRoKSB7XG4gICAgICBjb25zdCBwYXRoID0gQXJyYXkuaXNBcnJheShyZXNvdXJjZS5wYXRoKVxuICAgICAgICA/IHJlc291cmNlLnBhdGhbMF1cbiAgICAgICAgOiByZXNvdXJjZS5wYXRoXG5cbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gZ2V0UHJvdG9jb2wocGF0aClcblxuICAgICAgICBpZiAoREFUQUJBU0VfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKSkge1xuICAgICAgICAgIGZvcm1hdCA9IHByb3RvY29sXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBnZXRGaWxlbmFtZShwYXRoKVxuICAgICAgICAgIGZvcm1hdCA9IGdldEZvcm1hdChmaWxlbmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtYXRcbn1cblxuY29uc3QgREFUQUJBU0VfUFJPVE9DT0xTID0gW1wicG9zdGdyZXNxbFwiLCBcIm15c3FsXCIsIFwic3FsaXRlXCJdXG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,103 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { inferFormat, inferName } from "./infer.js";
3
+ describe("inferName", () => {
4
+ it("returns existing name when provided", () => {
5
+ const resource = { name: "existing-name" };
6
+ expect(inferName(resource)).toBe("existing-name");
7
+ });
8
+ it("infers name from single string path", () => {
9
+ const resource = { path: "/data/users.csv" };
10
+ expect(inferName(resource)).toBe("users");
11
+ });
12
+ it("infers name from first path in array", () => {
13
+ const resource = { path: ["/data/users.csv", "/data/backup.csv"] };
14
+ expect(inferName(resource)).toBe("users");
15
+ });
16
+ it("infers name from URL path", () => {
17
+ const resource = { path: "https://example.com/data/products.json" };
18
+ expect(inferName(resource)).toBe("products");
19
+ });
20
+ it("returns default name when no path or name", () => {
21
+ const resource = {};
22
+ expect(inferName(resource)).toBe("resource");
23
+ });
24
+ it("returns default name when path has no filename", () => {
25
+ const resource = { path: "/data/folder/" };
26
+ expect(inferName(resource)).toBe("resource");
27
+ });
28
+ it("handles complex filename with multiple dots", () => {
29
+ const resource = { path: "/data/file.backup.csv" };
30
+ expect(inferName(resource)).toBe("file");
31
+ });
32
+ it("slugifies filename with spaces and special characters", () => {
33
+ const resource = { path: "/data/My Data File!.csv" };
34
+ expect(inferName(resource)).toBe("my-data-file");
35
+ });
36
+ });
37
+ describe("inferFormat", () => {
38
+ it("returns existing format when provided", () => {
39
+ const resource = { format: "json" };
40
+ expect(inferFormat(resource)).toBe("json");
41
+ });
42
+ it("infers format from single string path", () => {
43
+ const resource = { path: "/data/users.csv" };
44
+ expect(inferFormat(resource)).toBe("csv");
45
+ });
46
+ it("infers format from first path in array", () => {
47
+ const resource = { path: ["/data/users.xlsx", "/data/backup.csv"] };
48
+ expect(inferFormat(resource)).toBe("xlsx");
49
+ });
50
+ it("infers format from URL path", () => {
51
+ const resource = { path: "https://example.com/data/products.json" };
52
+ expect(inferFormat(resource)).toBe("json");
53
+ });
54
+ it("returns lowercase format", () => {
55
+ const resource = { path: "/data/file.CSV" };
56
+ expect(inferFormat(resource)).toBe("csv");
57
+ });
58
+ it("handles multiple extensions", () => {
59
+ const resource = { path: "/data/file.tar.gz" };
60
+ expect(inferFormat(resource)).toBe("gz");
61
+ });
62
+ it("returns undefined when no path", () => {
63
+ const resource = {};
64
+ expect(inferFormat(resource)).toBeUndefined();
65
+ });
66
+ it("returns undefined when path has no extension", () => {
67
+ const resource = { path: "/data/file" };
68
+ expect(inferFormat(resource)).toBeUndefined();
69
+ });
70
+ it("returns undefined when filename cannot be determined", () => {
71
+ const resource = { path: "/data/folder/" };
72
+ expect(inferFormat(resource)).toBeUndefined();
73
+ });
74
+ it("infers postgresql protocol from connection string", () => {
75
+ const resource = {
76
+ path: "postgresql://user:password@localhost:5432/database",
77
+ };
78
+ expect(inferFormat(resource)).toBe("postgresql");
79
+ });
80
+ it("infers mysql protocol from connection string", () => {
81
+ const resource = { path: "mysql://user:password@localhost:3306/database" };
82
+ expect(inferFormat(resource)).toBe("mysql");
83
+ });
84
+ it("infers sqlite protocol from file path", () => {
85
+ const resource = { path: "sqlite:///path/to/database.db" };
86
+ expect(inferFormat(resource)).toBe("sqlite");
87
+ });
88
+ it("infers sqlite protocol with file scheme", () => {
89
+ const resource = { path: "sqlite://localhost/path/to/database.db" };
90
+ expect(inferFormat(resource)).toBe("sqlite");
91
+ });
92
+ it("handles postgres protocol with ssl parameters", () => {
93
+ const resource = {
94
+ path: "postgresql://user:pass@host:5432/db?sslmode=require",
95
+ };
96
+ expect(inferFormat(resource)).toBe("postgresql");
97
+ });
98
+ it("handles mysql protocol with options", () => {
99
+ const resource = { path: "mysql://user:pass@host:3306/db?charset=utf8" };
100
+ expect(inferFormat(resource)).toBe("mysql");
101
+ });
102
+ });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL2luZmVyLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRW5ELFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQ3pCLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUE7UUFDMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNuRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQTtRQUM1QyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzNDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQTtRQUNsRSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzNDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxNQUFNLFFBQVEsR0FBRyxFQUFFLElBQUks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dGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgaW5mZXJGb3JtYXQsIGluZmVyTmFtZSB9IGZyb20gXCIuL2luZmVyLnRzXCJcblxuZGVzY3JpYmUoXCJpbmZlck5hbWVcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgZXhpc3RpbmcgbmFtZSB3aGVuIHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgbmFtZTogXCJleGlzdGluZy1uYW1lXCIgfVxuICAgIGV4cGVjdChpbmZlck5hbWUocmVzb3VyY2UpKS50b0JlKFwiZXhpc3RpbmctbmFtZVwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIG5hbWUgZnJvbSBzaW5nbGUgc3RyaW5nIHBhdGhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL3VzZXJzLmNzdlwiIH1cbiAgICBleHBlY3QoaW5mZXJOYW1lKHJlc291cmNlKSkudG9CZShcInVzZXJzXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgbmFtZSBmcm9tIGZpcnN0IHBhdGggaW4gYXJyYXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBbXCIvZGF0YS91c2Vycy5jc3ZcIiwgXCIvZGF0YS9iYWNrdXAuY3N2XCJdIH1cbiAgICBleHBlY3QoaW5mZXJOYW1lKHJlc291cmNlKSkudG9CZShcInVzZXJzXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgbmFtZSBmcm9tIFVSTCBwYXRoXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL2RhdGEvcHJvZHVjdHMuanNvblwiIH1cbiAgICBleHBlY3QoaW5mZXJOYW1lKHJlc291cmNlKSkudG9CZShcInByb2R1Y3RzXCIpXG4gIH0pXG5cbiAgaXQoXCJyZXR1cm5zIGRlZmF1bHQgbmFtZSB3aGVuIG5vIHBhdGggb3IgbmFtZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7fVxuICAgIGV4cGVjdChpbmZlck5hbWUocmVzb3VyY2UpKS50b0JlKFwicmVzb3VyY2VcIilcbiAgfSlcblxuICBpdChcInJldHVybnMgZGVmYXVsdCBuYW1lIHdoZW4gcGF0aCBoYXMgbm8gZmlsZW5hbWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL2ZvbGRlci9cIiB9XG4gICAgZXhwZWN0KGluZmVyTmFtZShyZXNvdXJjZSkpLnRvQmUoXCJyZXNvdXJjZVwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBjb21wbGV4IGZpbGVuYW1lIHdpdGggbXVsdGlwbGUgZG90c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IFwiL2RhdGEvZmlsZS5iYWNrdXAuY3N2XCIgfVxuICAgIGV4cGVjdChpbmZlck5hbWUocmVzb3VyY2UpKS50b0JlKFwiZmlsZVwiKVxuICB9KVxuXG4gIGl0KFwic2x1Z2lmaWVzIGZpbGVuYW1lIHdpdGggc3BhY2VzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL015IERhdGEgRmlsZSEuY3N2XCIgfVxuICAgIGV4cGVjdChpbmZlck5hbWUocmVzb3VyY2UpKS50b0JlKFwibXktZGF0YS1maWxlXCIpXG4gIH0pXG59KVxuXG5kZXNjcmliZShcImluZmVyRm9ybWF0XCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIGV4aXN0aW5nIGZvcm1hdCB3aGVuIHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgZm9ybWF0OiBcImpzb25cIiB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZShcImpzb25cIilcbiAgfSlcblxuICBpdChcImluZmVycyBmb3JtYXQgZnJvbSBzaW5nbGUgc3RyaW5nIHBhdGhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL3VzZXJzLmNzdlwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwiY3N2XCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgZm9ybWF0IGZyb20gZmlyc3QgcGF0aCBpbiBhcnJheVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IFtcIi9kYXRhL3VzZXJzLnhsc3hcIiwgXCIvZGF0YS9iYWNrdXAuY3N2XCJdIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwieGxzeFwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIGZvcm1hdCBmcm9tIFVSTCBwYXRoXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL2RhdGEvcHJvZHVjdHMuanNvblwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwianNvblwiKVxuICB9KVxuXG4gIGl0KFwicmV0dXJucyBsb3dlcmNhc2UgZm9ybWF0XCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCIvZGF0YS9maWxlLkNTVlwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwiY3N2XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIG11bHRpcGxlIGV4dGVuc2lvbnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL2ZpbGUudGFyLmd6XCIgfVxuICAgIGV4cGVjdChpbmZlckZvcm1hdChyZXNvdXJjZSkpLnRvQmUoXCJnelwiKVxuICB9KVxuXG4gIGl0KFwicmV0dXJucyB1bmRlZmluZWQgd2hlbiBubyBwYXRoXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHt9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJyZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHBhdGggaGFzIG5vIGV4dGVuc2lvblwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IFwiL2RhdGEvZmlsZVwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlVW5kZWZpbmVkKClcbiAgfSlcblxuICBpdChcInJldHVybnMgdW5kZWZpbmVkIHdoZW4gZmlsZW5hbWUgY2Fubm90IGJlIGRldGVybWluZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL2ZvbGRlci9cIiB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgcG9zdGdyZXNxbCBwcm90b2NvbCBmcm9tIGNvbm5lY3Rpb24gc3RyaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHtcbiAgICAgIHBhdGg6IFwicG9zdGdyZXNxbDovL3VzZXI6cGFzc3dvcmRAbG9jYWxob3N0OjU0MzIvZGF0YWJhc2VcIixcbiAgICB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZShcInBvc3RncmVzcWxcIilcbiAgfSlcblxuICBpdChcImluZmVycyBteXNxbCBwcm90b2NvbCBmcm9tIGNvbm5lY3Rpb24gc3RyaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCJteXNxbDovL3VzZXI6cGFzc3dvcmRAbG9jYWxob3N0OjMzMDYvZGF0YWJhc2VcIiB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZShcIm15c3FsXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgc3FsaXRlIHByb3RvY29sIGZyb20gZmlsZSBwYXRoXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCJzcWxpdGU6Ly8vcGF0aC90by9kYXRhYmFzZS5kYlwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwic3FsaXRlXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgc3FsaXRlIHByb3RvY29sIHdpdGggZmlsZSBzY2hlbWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcInNxbGl0ZTovL2xvY2FsaG9zdC9wYXRoL3RvL2RhdGFiYXNlLmRiXCIgfVxuICAgIGV4cGVjdChpbmZlckZvcm1hdChyZXNvdXJjZSkpLnRvQmUoXCJzcWxpdGVcIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgcG9zdGdyZXMgcHJvdG9jb2wgd2l0aCBzc2wgcGFyYW1ldGVyc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7XG4gICAgICBwYXRoOiBcInBvc3RncmVzcWw6Ly91c2VyOnBhc3NAaG9zdDo1NDMyL2RiP3NzbG1vZGU9cmVxdWlyZVwiLFxuICAgIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwicG9zdGdyZXNxbFwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBteXNxbCBwcm90b2NvbCB3aXRoIG9wdGlvbnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIm15c3FsOi8vdXNlcjpwYXNzQGhvc3Q6MzMwNi9kYj9jaGFyc2V0PXV0ZjhcIiB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZShcIm15c3FsXCIpXG4gIH0pXG59KVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Load a Resource descriptor (JSON Object) from a file or URL
3
+ * Ensures the descriptor is valid against its profile
4
+ */
5
+ export declare function loadResourceDescriptor(path: string): Promise<import("./Resource.ts").Resource>;
@@ -0,0 +1,14 @@
1
+ import { loadDescriptor } from "../descriptor/index.js";
2
+ import { resolveBasepath } from "../path/index.js";
3
+ import { assertResource } from "./assert.js";
4
+ /**
5
+ * Load a Resource descriptor (JSON Object) from a file or URL
6
+ * Ensures the descriptor is valid against its profile
7
+ */
8
+ export async function loadResourceDescriptor(path) {
9
+ const basepath = await resolveBasepath(path);
10
+ const descriptor = await loadDescriptor(path);
11
+ const resource = await assertResource(descriptor, { basepath });
12
+ return resource;
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTVDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBWTtJQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM3QyxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkRGVzY3JpcHRvciB9IGZyb20gXCIuLi9kZXNjcmlwdG9yL2luZGV4LnRzXCJcbmltcG9ydCB7IHJlc29sdmVCYXNlcGF0aCB9IGZyb20gXCIuLi9wYXRoL2luZGV4LnRzXCJcbmltcG9ydCB7IGFzc2VydFJlc291cmNlIH0gZnJvbSBcIi4vYXNzZXJ0LnRzXCJcblxuLyoqXG4gKiBMb2FkIGEgUmVzb3VyY2UgZGVzY3JpcHRvciAoSlNPTiBPYmplY3QpIGZyb20gYSBmaWxlIG9yIFVSTFxuICogRW5zdXJlcyB0aGUgZGVzY3JpcHRvciBpcyB2YWxpZCBhZ2FpbnN0IGl0cyBwcm9maWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUmVzb3VyY2VEZXNjcmlwdG9yKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBiYXNlcGF0aCA9IGF3YWl0IHJlc29sdmVCYXNlcGF0aChwYXRoKVxuICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgbG9hZERlc2NyaXB0b3IocGF0aClcbiAgY29uc3QgcmVzb3VyY2UgPSBhd2FpdCBhc3NlcnRSZXNvdXJjZShkZXNjcmlwdG9yLCB7IGJhc2VwYXRoIH0pXG4gIHJldHVybiByZXNvdXJjZVxufVxuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import { join, relative } from "node:path";
2
+ import { describe, expect, expectTypeOf, it } from "vitest";
3
+ import { loadResourceDescriptor } from "./load.js";
4
+ describe("loadResourceDescriptor", async () => {
5
+ const getFixturePath = (name) => relative(process.cwd(), join(import.meta.dirname, "fixtures", name));
6
+ const descriptor = {
7
+ name: "name",
8
+ path: "table.csv",
9
+ };
10
+ it("loads a resource from a local file path", async () => {
11
+ const resource = await loadResourceDescriptor(getFixturePath("resource.json"));
12
+ expectTypeOf(resource).toEqualTypeOf();
13
+ expect(resource).toEqual({
14
+ ...descriptor,
15
+ path: getFixturePath("table.csv"),
16
+ });
17
+ });
18
+ it("throws an error when resource is invalid", async () => {
19
+ await expect(loadResourceDescriptor(getFixturePath("resource-invalid.json"))).rejects.toThrow();
20
+ });
21
+ });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVzb3VyY2UvbG9hZC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWxELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM1QyxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3RDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRXRFLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFLFdBQVc7S0FDbEIsQ0FBQTtJQUVELEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLHNCQUFzQixDQUMzQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQ2hDLENBQUE7UUFFRCxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFZLENBQUE7UUFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN2QixHQUFHLFVBQVU7WUFDYixJQUFJLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQztTQUNsQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4RCxNQUFNLE1BQU0sQ0FDVixzQkFBc0IsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUNoRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNyQixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiwgcmVsYXRpdmUgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGV4cGVjdFR5cGVPZiwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5pbXBvcnQgeyBsb2FkUmVzb3VyY2VEZXNjcmlwdG9yIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5cbmRlc2NyaWJlKFwibG9hZFJlc291cmNlRGVzY3JpcHRvclwiLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGdldEZpeHR1cmVQYXRoID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiZml4dHVyZXNcIiwgbmFtZSkpXG5cbiAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBwYXRoOiBcInRhYmxlLmNzdlwiLFxuICB9XG5cbiAgaXQoXCJsb2FkcyBhIHJlc291cmNlIGZyb20gYSBsb2NhbCBmaWxlIHBhdGhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0gYXdhaXQgbG9hZFJlc291cmNlRGVzY3JpcHRvcihcbiAgICAgIGdldEZpeHR1cmVQYXRoKFwicmVzb3VyY2UuanNvblwiKSxcbiAgICApXG5cbiAgICBleHBlY3RUeXBlT2YocmVzb3VyY2UpLnRvRXF1YWxUeXBlT2Y8UmVzb3VyY2U+KClcbiAgICBleHBlY3QocmVzb3VyY2UpLnRvRXF1YWwoe1xuICAgICAgLi4uZGVzY3JpcHRvcixcbiAgICAgIHBhdGg6IGdldEZpeHR1cmVQYXRoKFwidGFibGUuY3N2XCIpLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJ0aHJvd3MgYW4gZXJyb3Igd2hlbiByZXNvdXJjZSBpcyBpbnZhbGlkXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBsb2FkUmVzb3VyY2VEZXNjcmlwdG9yKGdldEZpeHR1cmVQYXRoKFwicmVzb3VyY2UtaW52YWxpZC5qc29uXCIpKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygpXG4gIH0pXG59KVxuIl19
@@ -0,0 +1,9 @@
1
+ import type { Resource } from "./Resource.ts";
2
+ /**
3
+ * Save a Resource to a file path
4
+ * Works in Node.js environments
5
+ */
6
+ export declare function saveResourceDescriptor(resource: Resource, options: {
7
+ path: string;
8
+ overwrite?: boolean;
9
+ }): Promise<void>;
@@ -0,0 +1,18 @@
1
+ import { saveDescriptor } from "../descriptor/index.js";
2
+ import { getBasepath } from "../path/index.js";
3
+ import { convertResourceToDescriptor } from "./convert/toDescriptor.js";
4
+ const CURRENT_PROFILE = "https://datapackage.org/profiles/2.0/dataresource.json";
5
+ /**
6
+ * Save a Resource to a file path
7
+ * Works in Node.js environments
8
+ */
9
+ export async function saveResourceDescriptor(resource, options) {
10
+ const basepath = getBasepath(options.path);
11
+ const descriptor = convertResourceToDescriptor(resource, { basepath });
12
+ descriptor.$schema = descriptor.$schema ?? CURRENT_PROFILE;
13
+ await saveDescriptor(descriptor, {
14
+ path: options.path,
15
+ overwrite: options.overwrite,
16
+ });
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL3NhdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUV2RSxNQUFNLGVBQWUsR0FBRyx3REFBd0QsQ0FBQTtBQUVoRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxRQUFrQixFQUNsQixPQUdDO0lBRUQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUxQyxNQUFNLFVBQVUsR0FBRywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUE7SUFFMUQsTUFBTSxjQUFjLENBQUMsVUFBVSxFQUFFO1FBQy9CLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7S0FDN0IsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNhdmVEZXNjcmlwdG9yIH0gZnJvbSBcIi4uL2Rlc2NyaXB0b3IvaW5kZXgudHNcIlxuaW1wb3J0IHsgZ2V0QmFzZXBhdGggfSBmcm9tIFwiLi4vcGF0aC9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIi4vUmVzb3VyY2UudHNcIlxuaW1wb3J0IHsgY29udmVydFJlc291cmNlVG9EZXNjcmlwdG9yIH0gZnJvbSBcIi4vY29udmVydC90b0Rlc2NyaXB0b3IudHNcIlxuXG5jb25zdCBDVVJSRU5UX1BST0ZJTEUgPSBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzIuMC9kYXRhcmVzb3VyY2UuanNvblwiXG5cbi8qKlxuICogU2F2ZSBhIFJlc291cmNlIHRvIGEgZmlsZSBwYXRoXG4gKiBXb3JrcyBpbiBOb2RlLmpzIGVudmlyb25tZW50c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVJlc291cmNlRGVzY3JpcHRvcihcbiAgcmVzb3VyY2U6IFJlc291cmNlLFxuICBvcHRpb25zOiB7XG4gICAgcGF0aDogc3RyaW5nXG4gICAgb3ZlcndyaXRlPzogYm9vbGVhblxuICB9LFxuKSB7XG4gIGNvbnN0IGJhc2VwYXRoID0gZ2V0QmFzZXBhdGgob3B0aW9ucy5wYXRoKVxuXG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBjb252ZXJ0UmVzb3VyY2VUb0Rlc2NyaXB0b3IocmVzb3VyY2UsIHsgYmFzZXBhdGggfSlcbiAgZGVzY3JpcHRvci4kc2NoZW1hID0gZGVzY3JpcHRvci4kc2NoZW1hID8/IENVUlJFTlRfUFJPRklMRVxuXG4gIGF3YWl0IHNhdmVEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIHtcbiAgICBwYXRoOiBvcHRpb25zLnBhdGgsXG4gICAgb3ZlcndyaXRlOiBvcHRpb25zLm92ZXJ3cml0ZSxcbiAgfSlcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};