@frictionless-ts/dataset 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 (242) hide show
  1. package/README.md +3 -0
  2. package/build/file/copy.d.ts +4 -0
  3. package/build/file/copy.js +7 -0
  4. package/build/file/copy.spec.d.ts +1 -0
  5. package/build/file/copy.spec.js +104 -0
  6. package/build/file/describe.d.ts +7 -0
  7. package/build/file/describe.js +9 -0
  8. package/build/file/fetch.d.ts +2 -0
  9. package/build/file/fetch.js +21 -0
  10. package/build/file/index.d.ts +9 -0
  11. package/build/file/index.js +10 -0
  12. package/build/file/infer.d.ts +10 -0
  13. package/build/file/infer.js +48 -0
  14. package/build/file/infer.spec.d.ts +1 -0
  15. package/build/file/infer.spec.js +141 -0
  16. package/build/file/load.d.ts +3 -0
  17. package/build/file/load.js +7 -0
  18. package/build/file/path.d.ts +2 -0
  19. package/build/file/path.js +17 -0
  20. package/build/file/save.d.ts +3 -0
  21. package/build/file/save.js +7 -0
  22. package/build/file/temp.d.ts +11 -0
  23. package/build/file/temp.js +23 -0
  24. package/build/file/validate.d.ts +6 -0
  25. package/build/file/validate.js +47 -0
  26. package/build/file/validate.spec.d.ts +1 -0
  27. package/build/file/validate.spec.js +180 -0
  28. package/build/folder/create.d.ts +1 -0
  29. package/build/folder/create.js +5 -0
  30. package/build/folder/index.d.ts +2 -0
  31. package/build/folder/index.js +3 -0
  32. package/build/folder/temp.d.ts +3 -0
  33. package/build/folder/temp.js +16 -0
  34. package/build/index.d.ts +36 -0
  35. package/build/index.js +35 -0
  36. package/build/package/index.d.ts +2 -0
  37. package/build/package/index.js +3 -0
  38. package/build/package/merge.d.ts +23 -0
  39. package/build/package/merge.js +12 -0
  40. package/build/package/path.d.ts +3 -0
  41. package/build/package/path.js +43 -0
  42. package/build/package/path.spec.d.ts +1 -0
  43. package/build/package/path.spec.js +56 -0
  44. package/build/plugin.d.ts +11 -0
  45. package/build/plugin.js +2 -0
  46. package/build/plugins/ckan/ckan/index.d.ts +1 -0
  47. package/build/plugins/ckan/ckan/index.js +2 -0
  48. package/build/plugins/ckan/ckan/request.d.ts +11 -0
  49. package/build/plugins/ckan/ckan/request.js +35 -0
  50. package/build/plugins/ckan/index.d.ts +4 -0
  51. package/build/plugins/ckan/index.js +5 -0
  52. package/build/plugins/ckan/package/Organization.d.ts +21 -0
  53. package/build/plugins/ckan/package/Organization.js +2 -0
  54. package/build/plugins/ckan/package/Package.d.ts +76 -0
  55. package/build/plugins/ckan/package/Package.js +2 -0
  56. package/build/plugins/ckan/package/Tag.d.ts +17 -0
  57. package/build/plugins/ckan/package/Tag.js +2 -0
  58. package/build/plugins/ckan/package/convert/fromCkan.d.ts +3 -0
  59. package/build/plugins/ckan/package/convert/fromCkan.js +63 -0
  60. package/build/plugins/ckan/package/convert/fromCkan.spec.d.ts +1 -0
  61. package/build/plugins/ckan/package/convert/fromCkan.spec.js +80 -0
  62. package/build/plugins/ckan/package/convert/toCkan.d.ts +22 -0
  63. package/build/plugins/ckan/package/convert/toCkan.js +51 -0
  64. package/build/plugins/ckan/package/convert/toCkan.spec.d.ts +1 -0
  65. package/build/plugins/ckan/package/convert/toCkan.spec.js +153 -0
  66. package/build/plugins/ckan/package/fixtures/ckan-package.json +308 -0
  67. package/build/plugins/ckan/package/index.d.ts +7 -0
  68. package/build/plugins/ckan/package/index.js +5 -0
  69. package/build/plugins/ckan/package/load.d.ts +21 -0
  70. package/build/plugins/ckan/package/load.js +74 -0
  71. package/build/plugins/ckan/package/load.spec.d.ts +1 -0
  72. package/build/plugins/ckan/package/load.spec.js +11 -0
  73. package/build/plugins/ckan/package/save.d.ts +10 -0
  74. package/build/plugins/ckan/package/save.js +83 -0
  75. package/build/plugins/ckan/package/save.spec.d.ts +1 -0
  76. package/build/plugins/ckan/package/save.spec.js +319 -0
  77. package/build/plugins/ckan/plugin.d.ts +19 -0
  78. package/build/plugins/ckan/plugin.js +18 -0
  79. package/build/plugins/ckan/plugin.spec.d.ts +1 -0
  80. package/build/plugins/ckan/plugin.spec.js +83 -0
  81. package/build/plugins/ckan/resource/Resource.d.ts +56 -0
  82. package/build/plugins/ckan/resource/Resource.js +2 -0
  83. package/build/plugins/ckan/resource/convert/fromCkan.d.ts +3 -0
  84. package/build/plugins/ckan/resource/convert/fromCkan.js +39 -0
  85. package/build/plugins/ckan/resource/convert/toCkan.d.ts +3 -0
  86. package/build/plugins/ckan/resource/convert/toCkan.js +20 -0
  87. package/build/plugins/ckan/resource/index.d.ts +3 -0
  88. package/build/plugins/ckan/resource/index.js +3 -0
  89. package/build/plugins/ckan/schema/Field.d.ts +34 -0
  90. package/build/plugins/ckan/schema/Field.js +2 -0
  91. package/build/plugins/ckan/schema/Schema.d.ts +10 -0
  92. package/build/plugins/ckan/schema/Schema.js +2 -0
  93. package/build/plugins/ckan/schema/convert/fixtures/ckan-schema.json +115 -0
  94. package/build/plugins/ckan/schema/convert/fromCkan.d.ts +3 -0
  95. package/build/plugins/ckan/schema/convert/fromCkan.js +47 -0
  96. package/build/plugins/ckan/schema/convert/fromCkan.spec.d.ts +1 -0
  97. package/build/plugins/ckan/schema/convert/fromCkan.spec.js +157 -0
  98. package/build/plugins/ckan/schema/convert/toCkan.d.ts +3 -0
  99. package/build/plugins/ckan/schema/convert/toCkan.js +50 -0
  100. package/build/plugins/ckan/schema/convert/toCkan.spec.d.ts +1 -0
  101. package/build/plugins/ckan/schema/convert/toCkan.spec.js +278 -0
  102. package/build/plugins/ckan/schema/index.d.ts +4 -0
  103. package/build/plugins/ckan/schema/index.js +3 -0
  104. package/build/plugins/datahub/index.d.ts +2 -0
  105. package/build/plugins/datahub/index.js +3 -0
  106. package/build/plugins/datahub/package/index.d.ts +1 -0
  107. package/build/plugins/datahub/package/index.js +2 -0
  108. package/build/plugins/datahub/package/load.d.ts +1 -0
  109. package/build/plugins/datahub/package/load.js +9 -0
  110. package/build/plugins/datahub/package/load.spec.d.ts +1 -0
  111. package/build/plugins/datahub/package/load.spec.js +11 -0
  112. package/build/plugins/datahub/plugin.d.ts +4 -0
  113. package/build/plugins/datahub/plugin.js +18 -0
  114. package/build/plugins/datahub/plugin.spec.d.ts +1 -0
  115. package/build/plugins/datahub/plugin.spec.js +78 -0
  116. package/build/plugins/descriptor/index.d.ts +1 -0
  117. package/build/plugins/descriptor/index.js +2 -0
  118. package/build/plugins/descriptor/plugin.d.ts +11 -0
  119. package/build/plugins/descriptor/plugin.js +29 -0
  120. package/build/plugins/descriptor/plugin.spec.d.ts +1 -0
  121. package/build/plugins/descriptor/plugin.spec.js +169 -0
  122. package/build/plugins/folder/index.d.ts +2 -0
  123. package/build/plugins/folder/index.js +3 -0
  124. package/build/plugins/folder/package/index.d.ts +2 -0
  125. package/build/plugins/folder/package/index.js +3 -0
  126. package/build/plugins/folder/package/load.d.ts +1 -0
  127. package/build/plugins/folder/package/load.js +6 -0
  128. package/build/plugins/folder/package/load.spec.d.ts +1 -0
  129. package/build/plugins/folder/package/load.spec.js +175 -0
  130. package/build/plugins/folder/package/save.d.ts +7 -0
  131. package/build/plugins/folder/package/save.js +35 -0
  132. package/build/plugins/folder/package/save.spec.d.ts +1 -0
  133. package/build/plugins/folder/package/save.spec.js +328 -0
  134. package/build/plugins/folder/plugin.d.ts +4 -0
  135. package/build/plugins/folder/plugin.js +19 -0
  136. package/build/plugins/folder/plugin.spec.d.ts +1 -0
  137. package/build/plugins/folder/plugin.spec.js +53 -0
  138. package/build/plugins/github/github/index.d.ts +1 -0
  139. package/build/plugins/github/github/index.js +2 -0
  140. package/build/plugins/github/github/path.d.ts +1 -0
  141. package/build/plugins/github/github/path.js +4 -0
  142. package/build/plugins/github/github/request.d.ts +15 -0
  143. package/build/plugins/github/github/request.js +43 -0
  144. package/build/plugins/github/index.d.ts +3 -0
  145. package/build/plugins/github/index.js +4 -0
  146. package/build/plugins/github/package/License.d.ts +21 -0
  147. package/build/plugins/github/package/License.js +2 -0
  148. package/build/plugins/github/package/Owner.d.ts +25 -0
  149. package/build/plugins/github/package/Owner.js +2 -0
  150. package/build/plugins/github/package/Package.d.ts +87 -0
  151. package/build/plugins/github/package/Package.js +2 -0
  152. package/build/plugins/github/package/convert/fromGithub.d.ts +3 -0
  153. package/build/plugins/github/package/convert/fromGithub.js +50 -0
  154. package/build/plugins/github/package/index.d.ts +6 -0
  155. package/build/plugins/github/package/index.js +4 -0
  156. package/build/plugins/github/package/load.d.ts +23 -0
  157. package/build/plugins/github/package/load.js +48 -0
  158. package/build/plugins/github/package/load.spec.d.ts +1 -0
  159. package/build/plugins/github/package/load.spec.js +15 -0
  160. package/build/plugins/github/package/save.d.ts +14 -0
  161. package/build/plugins/github/package/save.js +69 -0
  162. package/build/plugins/github/package/save.spec.d.ts +1 -0
  163. package/build/plugins/github/package/save.spec.js +566 -0
  164. package/build/plugins/github/plugin.d.ts +19 -0
  165. package/build/plugins/github/plugin.js +18 -0
  166. package/build/plugins/github/plugin.spec.d.ts +1 -0
  167. package/build/plugins/github/plugin.spec.js +73 -0
  168. package/build/plugins/github/resource/Resource.d.ts +29 -0
  169. package/build/plugins/github/resource/Resource.js +2 -0
  170. package/build/plugins/github/resource/convert/fromGithub.d.ts +5 -0
  171. package/build/plugins/github/resource/convert/fromGithub.js +24 -0
  172. package/build/plugins/github/resource/convert/toGithub.d.ts +3 -0
  173. package/build/plugins/github/resource/convert/toGithub.js +10 -0
  174. package/build/plugins/github/resource/index.d.ts +3 -0
  175. package/build/plugins/github/resource/index.js +3 -0
  176. package/build/plugins/zenodo/index.d.ts +3 -0
  177. package/build/plugins/zenodo/index.js +4 -0
  178. package/build/plugins/zenodo/package/Creator.d.ts +20 -0
  179. package/build/plugins/zenodo/package/Creator.js +2 -0
  180. package/build/plugins/zenodo/package/Package.d.ts +94 -0
  181. package/build/plugins/zenodo/package/Package.js +2 -0
  182. package/build/plugins/zenodo/package/convert/fromZenodo.d.ts +3 -0
  183. package/build/plugins/zenodo/package/convert/fromZenodo.js +43 -0
  184. package/build/plugins/zenodo/package/convert/toZenodo.d.ts +3 -0
  185. package/build/plugins/zenodo/package/convert/toZenodo.js +79 -0
  186. package/build/plugins/zenodo/package/index.d.ts +6 -0
  187. package/build/plugins/zenodo/package/index.js +5 -0
  188. package/build/plugins/zenodo/package/load.d.ts +23 -0
  189. package/build/plugins/zenodo/package/load.js +45 -0
  190. package/build/plugins/zenodo/package/load.spec.d.ts +1 -0
  191. package/build/plugins/zenodo/package/load.spec.js +15 -0
  192. package/build/plugins/zenodo/package/save.d.ts +13 -0
  193. package/build/plugins/zenodo/package/save.js +74 -0
  194. package/build/plugins/zenodo/package/save.spec.d.ts +1 -0
  195. package/build/plugins/zenodo/package/save.spec.js +524 -0
  196. package/build/plugins/zenodo/plugin.d.ts +19 -0
  197. package/build/plugins/zenodo/plugin.js +18 -0
  198. package/build/plugins/zenodo/plugin.spec.d.ts +1 -0
  199. package/build/plugins/zenodo/plugin.spec.js +78 -0
  200. package/build/plugins/zenodo/resource/Resource.d.ts +27 -0
  201. package/build/plugins/zenodo/resource/Resource.js +2 -0
  202. package/build/plugins/zenodo/resource/convert/fromZenodo.d.ts +10 -0
  203. package/build/plugins/zenodo/resource/convert/fromZenodo.js +18 -0
  204. package/build/plugins/zenodo/resource/convert/toZenodo.d.ts +3 -0
  205. package/build/plugins/zenodo/resource/convert/toZenodo.js +13 -0
  206. package/build/plugins/zenodo/resource/index.d.ts +3 -0
  207. package/build/plugins/zenodo/resource/index.js +3 -0
  208. package/build/plugins/zenodo/zenodo/index.d.ts +1 -0
  209. package/build/plugins/zenodo/zenodo/index.js +2 -0
  210. package/build/plugins/zenodo/zenodo/request.d.ts +12 -0
  211. package/build/plugins/zenodo/zenodo/request.js +36 -0
  212. package/build/plugins/zip/index.d.ts +2 -0
  213. package/build/plugins/zip/index.js +3 -0
  214. package/build/plugins/zip/package/index.d.ts +2 -0
  215. package/build/plugins/zip/package/index.js +3 -0
  216. package/build/plugins/zip/package/load.d.ts +1 -0
  217. package/build/plugins/zip/package/load.js +30 -0
  218. package/build/plugins/zip/package/load.spec.d.ts +1 -0
  219. package/build/plugins/zip/package/load.spec.js +173 -0
  220. package/build/plugins/zip/package/save.d.ts +5 -0
  221. package/build/plugins/zip/package/save.js +50 -0
  222. package/build/plugins/zip/package/save.spec.d.ts +1 -0
  223. package/build/plugins/zip/package/save.spec.js +287 -0
  224. package/build/plugins/zip/plugin.d.ts +11 -0
  225. package/build/plugins/zip/plugin.js +24 -0
  226. package/build/plugins/zip/plugin.spec.d.ts +1 -0
  227. package/build/plugins/zip/plugin.spec.js +158 -0
  228. package/build/resource/index.d.ts +1 -0
  229. package/build/resource/index.js +2 -0
  230. package/build/resource/save.d.ts +13 -0
  231. package/build/resource/save.js +53 -0
  232. package/build/resource/save.spec.d.ts +1 -0
  233. package/build/resource/save.spec.js +107 -0
  234. package/build/stream/concat.d.ts +3 -0
  235. package/build/stream/concat.js +5 -0
  236. package/build/stream/index.d.ts +3 -0
  237. package/build/stream/index.js +4 -0
  238. package/build/stream/load.d.ts +5 -0
  239. package/build/stream/load.js +46 -0
  240. package/build/stream/save.d.ts +5 -0
  241. package/build/stream/save.js +13 -0
  242. package/package.json +48 -0
@@ -0,0 +1,19 @@
1
+ import type { DatasetPlugin } from "../../plugin.ts";
2
+ export declare class GithubPlugin implements DatasetPlugin {
3
+ loadPackage(source: string): Promise<{
4
+ [x: `${string}:${string}`]: any;
5
+ $schema?: string;
6
+ resources: import("@frictionless-ts/metadata").Resource[];
7
+ name?: string;
8
+ title?: string;
9
+ description?: string;
10
+ homepage?: string;
11
+ version?: string;
12
+ licenses?: import("@frictionless-ts/metadata").License[];
13
+ contributors?: import("@frictionless-ts/metadata").Contributor[];
14
+ sources?: import("@frictionless-ts/metadata").Source[];
15
+ keywords?: string[];
16
+ created?: string;
17
+ image?: string;
18
+ } | undefined>;
19
+ }
@@ -0,0 +1,18 @@
1
+ import { isRemotePath } from "@frictionless-ts/metadata";
2
+ import { loadPackageFromGithub } from "./package/load.js";
3
+ export class GithubPlugin {
4
+ async loadPackage(source) {
5
+ const isGithub = getIsGithub(source);
6
+ if (!isGithub)
7
+ return undefined;
8
+ const dataPackage = await loadPackageFromGithub(source);
9
+ return dataPackage;
10
+ }
11
+ }
12
+ function getIsGithub(path) {
13
+ const isRemote = isRemotePath(path);
14
+ if (!isRemote)
15
+ return false;
16
+ return new URL(path).hostname === "github.com";
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2lucy9naXRodWIvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUV4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUV6RCxNQUFNLE9BQU8sWUFBWTtJQUN2QixLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFL0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2RCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0NBQ0Y7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNuQyxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTNCLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQTtBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNSZW1vdGVQYXRoIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHR5cGUgeyBEYXRhc2V0UGx1Z2luIH0gZnJvbSBcIi4uLy4uL3BsdWdpbi50c1wiXG5pbXBvcnQgeyBsb2FkUGFja2FnZUZyb21HaXRodWIgfSBmcm9tIFwiLi9wYWNrYWdlL2xvYWQudHNcIlxuXG5leHBvcnQgY2xhc3MgR2l0aHViUGx1Z2luIGltcGxlbWVudHMgRGF0YXNldFBsdWdpbiB7XG4gIGFzeW5jIGxvYWRQYWNrYWdlKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNHaXRodWIgPSBnZXRJc0dpdGh1Yihzb3VyY2UpXG4gICAgaWYgKCFpc0dpdGh1YikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgZGF0YVBhY2thZ2UgPSBhd2FpdCBsb2FkUGFja2FnZUZyb21HaXRodWIoc291cmNlKVxuICAgIHJldHVybiBkYXRhUGFja2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldElzR2l0aHViKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBpc1JlbW90ZSA9IGlzUmVtb3RlUGF0aChwYXRoKVxuICBpZiAoIWlzUmVtb3RlKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gbmV3IFVSTChwYXRoKS5ob3N0bmFtZSA9PT0gXCJnaXRodWIuY29tXCJcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,73 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import * as packageModule from "./package/load.js";
3
+ import { GithubPlugin } from "./plugin.js";
4
+ vi.mock("./package/load.ts", () => ({
5
+ loadPackageFromGithub: vi.fn(),
6
+ }));
7
+ describe("GithubPlugin", () => {
8
+ let plugin;
9
+ let mockLoadPackageFromGithub;
10
+ beforeEach(() => {
11
+ plugin = new GithubPlugin();
12
+ mockLoadPackageFromGithub = vi.mocked(packageModule.loadPackageFromGithub);
13
+ vi.clearAllMocks();
14
+ });
15
+ describe("loadPackage", () => {
16
+ it("should load package from github.com url", async () => {
17
+ const mockPackage = {
18
+ name: "test-package",
19
+ resources: [{ name: "test", data: [] }],
20
+ };
21
+ mockLoadPackageFromGithub.mockResolvedValue(mockPackage);
22
+ const result = await plugin.loadPackage("https://github.com/owner/repo/data");
23
+ expect(mockLoadPackageFromGithub).toHaveBeenCalledWith("https://github.com/owner/repo/data");
24
+ expect(result).toEqual(mockPackage);
25
+ });
26
+ it("should return undefined for non-github urls", async () => {
27
+ const result = await plugin.loadPackage("https://example.com/data");
28
+ expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
29
+ expect(result).toBeUndefined();
30
+ });
31
+ it("should return undefined for local paths", async () => {
32
+ const result = await plugin.loadPackage("./data");
33
+ expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
34
+ expect(result).toBeUndefined();
35
+ });
36
+ it("should return undefined for zenodo urls", async () => {
37
+ const result = await plugin.loadPackage("https://zenodo.org/record/123");
38
+ expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
39
+ expect(result).toBeUndefined();
40
+ });
41
+ it("should handle github urls with paths", async () => {
42
+ const mockPackage = {
43
+ name: "test-package",
44
+ resources: [{ name: "test", data: [] }],
45
+ };
46
+ mockLoadPackageFromGithub.mockResolvedValue(mockPackage);
47
+ const result = await plugin.loadPackage("https://github.com/owner/repo/tree/main/data");
48
+ expect(mockLoadPackageFromGithub).toHaveBeenCalledWith("https://github.com/owner/repo/tree/main/data");
49
+ expect(result).toEqual(mockPackage);
50
+ });
51
+ it("should handle github urls with query parameters", async () => {
52
+ const mockPackage = {
53
+ name: "test-package",
54
+ resources: [{ name: "test", data: [] }],
55
+ };
56
+ mockLoadPackageFromGithub.mockResolvedValue(mockPackage);
57
+ const result = await plugin.loadPackage("https://github.com/owner/repo?tab=readme");
58
+ expect(mockLoadPackageFromGithub).toHaveBeenCalledWith("https://github.com/owner/repo?tab=readme");
59
+ expect(result).toEqual(mockPackage);
60
+ });
61
+ it("should return undefined for http non-github urls", async () => {
62
+ const result = await plugin.loadPackage("http://example.com/data");
63
+ expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
64
+ expect(result).toBeUndefined();
65
+ });
66
+ it("should return undefined for gitlab urls", async () => {
67
+ const result = await plugin.loadPackage("https://gitlab.com/owner/repo");
68
+ expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
69
+ expect(result).toBeUndefined();
70
+ });
71
+ });
72
+ });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9wbHVnaW4uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3RCxPQUFPLEtBQUssYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFMUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0IsQ0FBQyxDQUFDLENBQUE7QUFFSCxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtJQUM1QixJQUFJLE1BQW9CLENBQUE7SUFDeEIsSUFBSSx5QkFBbUQsQ0FBQTtJQUV2RCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7UUFDM0IseUJBQXlCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUMxRSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDcEIsQ0FBQyxDQUFDLENBQUE7SUFFRixRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxXQUFXLEdBQVk7Z0JBQzNCLElBQUksRUFBRSxjQUFjO2dCQUNwQixTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3hDLENBQUE7WUFDRCx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUV4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQ3JDLG9DQUFvQyxDQUNyQyxDQUFBO1lBRUQsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsb0JBQW9CLENBQ3BELG9DQUFvQyxDQUNyQyxDQUFBO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNyQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUVuRSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRWpELE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3hELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQTtZQUV4RSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDcEQsTUFBTSxXQUFXLEdBQVk7Z0JBQzNCLElBQUksRUFBRSxjQUFjO2dCQUNwQixTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3hDLENBQUE7WUFDRCx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUV4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQ3JDLDhDQUE4QyxDQUMvQyxDQUFBO1lBRUQsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsb0JBQW9CLENBQ3BELDhDQUE4QyxDQUMvQyxDQUFBO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNyQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMvRCxNQUFNLFdBQVcsR0FBWTtnQkFDM0IsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDeEMsQ0FBQTtZQUNELHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRXhELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FDckMsMENBQTBDLENBQzNDLENBQUE7WUFFRCxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxvQkFBb0IsQ0FDcEQsMENBQTBDLENBQzNDLENBQUE7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3JDLENBQUMsQ0FBQyxDQUFBO1FBRUYsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1lBRWxFLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3hELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQTtZQUV4RSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHZpIH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgKiBhcyBwYWNrYWdlTW9kdWxlIGZyb20gXCIuL3BhY2thZ2UvbG9hZC50c1wiXG5pbXBvcnQgeyBHaXRodWJQbHVnaW4gfSBmcm9tIFwiLi9wbHVnaW4udHNcIlxuXG52aS5tb2NrKFwiLi9wYWNrYWdlL2xvYWQudHNcIiwgKCkgPT4gKHtcbiAgbG9hZFBhY2thZ2VGcm9tR2l0aHViOiB2aS5mbigpLFxufSkpXG5cbmRlc2NyaWJlKFwiR2l0aHViUGx1Z2luXCIsICgpID0+IHtcbiAgbGV0IHBsdWdpbjogR2l0aHViUGx1Z2luXG4gIGxldCBtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj5cblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBwbHVnaW4gPSBuZXcgR2l0aHViUGx1Z2luKClcbiAgICBtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViID0gdmkubW9ja2VkKHBhY2thZ2VNb2R1bGUubG9hZFBhY2thZ2VGcm9tR2l0aHViKVxuICAgIHZpLmNsZWFyQWxsTW9ja3MoKVxuICB9KVxuXG4gIGRlc2NyaWJlKFwibG9hZFBhY2thZ2VcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSBmcm9tIGdpdGh1Yi5jb20gdXJsXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgICByZXNvdXJjZXM6IFt7IG5hbWU6IFwidGVzdFwiLCBkYXRhOiBbXSB9XSxcbiAgICAgIH1cbiAgICAgIG1vY2tMb2FkUGFja2FnZUZyb21HaXRodWIubW9ja1Jlc29sdmVkVmFsdWUobW9ja1BhY2thZ2UpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcbiAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwby9kYXRhXCIsXG4gICAgICApXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwby9kYXRhXCIsXG4gICAgICApXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tQYWNrYWdlKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBub24tZ2l0aHViIHVybHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9kYXRhXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgbG9jYWwgcGF0aHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFwiLi9kYXRhXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgemVub2RvIHVybHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFwiaHR0cHM6Ly96ZW5vZG8ub3JnL3JlY29yZC8xMjNcIilcblxuICAgICAgZXhwZWN0KG1vY2tMb2FkUGFja2FnZUZyb21HaXRodWIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgZ2l0aHViIHVybHMgd2l0aCBwYXRoc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgICAgcmVzb3VyY2VzOiBbeyBuYW1lOiBcInRlc3RcIiwgZGF0YTogW10gfV0sXG4gICAgICB9XG4gICAgICBtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViLm1vY2tSZXNvbHZlZFZhbHVlKG1vY2tQYWNrYWdlKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXG4gICAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tL293bmVyL3JlcG8vdHJlZS9tYWluL2RhdGFcIixcbiAgICAgIClcblxuICAgICAgZXhwZWN0KG1vY2tMb2FkUGFja2FnZUZyb21HaXRodWIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBcImh0dHBzOi8vZ2l0aHViLmNvbS9vd25lci9yZXBvL3RyZWUvbWFpbi9kYXRhXCIsXG4gICAgICApXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tQYWNrYWdlKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgZ2l0aHViIHVybHMgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgICByZXNvdXJjZXM6IFt7IG5hbWU6IFwidGVzdFwiLCBkYXRhOiBbXSB9XSxcbiAgICAgIH1cbiAgICAgIG1vY2tMb2FkUGFja2FnZUZyb21HaXRodWIubW9ja1Jlc29sdmVkVmFsdWUobW9ja1BhY2thZ2UpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcbiAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwbz90YWI9cmVhZG1lXCIsXG4gICAgICApXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwbz90YWI9cmVhZG1lXCIsXG4gICAgICApXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tQYWNrYWdlKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBodHRwIG5vbi1naXRodWIgdXJsc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXCJodHRwOi8vZXhhbXBsZS5jb20vZGF0YVwiKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRnJvbUdpdGh1Yikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGdpdGxhYiB1cmxzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcImh0dHBzOi8vZ2l0bGFiLmNvbS9vd25lci9yZXBvXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuICB9KVxufSlcbiJdfQ==
@@ -0,0 +1,29 @@
1
+ /**
2
+ * GitHub repository file content
3
+ */
4
+ export interface GithubResource {
5
+ /**
6
+ * File path within repository
7
+ */
8
+ path: string;
9
+ /**
10
+ * File mode e.g. `100755`
11
+ */
12
+ mode: string;
13
+ /**
14
+ * File type e.g. `blob`
15
+ */
16
+ type: string;
17
+ /**
18
+ * File size in bytes
19
+ */
20
+ size: number;
21
+ /**
22
+ * File SHA-1
23
+ */
24
+ sha: string;
25
+ /**
26
+ * File url on GitHub API
27
+ */
28
+ url: string;
29
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9yZXNvdXJjZS9SZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXRIdWIgcmVwb3NpdG9yeSBmaWxlIGNvbnRlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRodWJSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBGaWxlIHBhdGggd2l0aGluIHJlcG9zaXRvcnlcbiAgICovXG4gIHBhdGg6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBGaWxlIG1vZGUgZS5nLiBgMTAwNzU1YFxuICAgKi9cbiAgbW9kZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZpbGUgdHlwZSBlLmcuIGBibG9iYFxuICAgKi9cbiAgdHlwZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlc1xuICAgKi9cbiAgc2l6ZTogbnVtYmVyXG5cbiAgLyoqXG4gICAqIEZpbGUgU0hBLTFcbiAgICovXG4gIHNoYTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZpbGUgdXJsIG9uIEdpdEh1YiBBUElcbiAgICovXG4gIHVybDogc3RyaW5nXG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import type { Resource } from "@frictionless-ts/metadata";
2
+ import type { GithubResource } from "../Resource.ts";
3
+ export declare function convertResourceFromGithub(githubResource: GithubResource, options: {
4
+ defaultBranch: string;
5
+ }): Resource;
@@ -0,0 +1,24 @@
1
+ import { getFilename, getFormat, getName } from "@frictionless-ts/metadata";
2
+ export function convertResourceFromGithub(githubResource, options) {
3
+ const path = convertPath({
4
+ ...githubResource,
5
+ ref: options.defaultBranch,
6
+ });
7
+ const filename = getFilename(path);
8
+ const resource = {
9
+ path,
10
+ name: getName(filename) ?? githubResource.sha,
11
+ bytes: githubResource.size,
12
+ hash: `sha1:${githubResource.sha}`,
13
+ format: getFormat(filename),
14
+ "github:key": githubResource.path,
15
+ "github:url": path,
16
+ };
17
+ return resource;
18
+ }
19
+ function convertPath(options) {
20
+ const url = new URL(options.url);
21
+ const [owner, repo] = url.pathname.split("/").slice(2);
22
+ return `https://raw.githubusercontent.com/${owner}/${repo}/refs/heads/${options.ref}/${options.path}`;
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUdpdGh1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BsdWdpbnMvZ2l0aHViL3Jlc291cmNlL2NvbnZlcnQvZnJvbUdpdGh1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUczRSxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLGNBQThCLEVBQzlCLE9BRUM7SUFFRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUM7UUFDdkIsR0FBRyxjQUFjO1FBQ2pCLEdBQUcsRUFBRSxPQUFPLENBQUMsYUFBYTtLQUMzQixDQUFDLENBQUE7SUFFRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsTUFBTSxRQUFRLEdBQWE7UUFDekIsSUFBSTtRQUNKLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksY0FBYyxDQUFDLEdBQUc7UUFDN0MsS0FBSyxFQUFFLGNBQWMsQ0FBQyxJQUFJO1FBQzFCLElBQUksRUFBRSxRQUFRLGNBQWMsQ0FBQyxHQUFHLEVBQUU7UUFDbEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDM0IsWUFBWSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1FBQ2pDLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUE7SUFFRCxPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsT0FJcEI7SUFDQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDaEMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdEQsT0FBTyxxQ0FBcUMsS0FBSyxJQUFJLElBQUksZUFBZSxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUN2RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IGdldEZpbGVuYW1lLCBnZXRGb3JtYXQsIGdldE5hbWUgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IEdpdGh1YlJlc291cmNlIH0gZnJvbSBcIi4uL1Jlc291cmNlLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSZXNvdXJjZUZyb21HaXRodWIoXG4gIGdpdGh1YlJlc291cmNlOiBHaXRodWJSZXNvdXJjZSxcbiAgb3B0aW9uczoge1xuICAgIGRlZmF1bHRCcmFuY2g6IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IHBhdGggPSBjb252ZXJ0UGF0aCh7XG4gICAgLi4uZ2l0aHViUmVzb3VyY2UsXG4gICAgcmVmOiBvcHRpb25zLmRlZmF1bHRCcmFuY2gsXG4gIH0pXG5cbiAgY29uc3QgZmlsZW5hbWUgPSBnZXRGaWxlbmFtZShwYXRoKVxuICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7XG4gICAgcGF0aCxcbiAgICBuYW1lOiBnZXROYW1lKGZpbGVuYW1lKSA/PyBnaXRodWJSZXNvdXJjZS5zaGEsXG4gICAgYnl0ZXM6IGdpdGh1YlJlc291cmNlLnNpemUsXG4gICAgaGFzaDogYHNoYTE6JHtnaXRodWJSZXNvdXJjZS5zaGF9YCxcbiAgICBmb3JtYXQ6IGdldEZvcm1hdChmaWxlbmFtZSksXG4gICAgXCJnaXRodWI6a2V5XCI6IGdpdGh1YlJlc291cmNlLnBhdGgsXG4gICAgXCJnaXRodWI6dXJsXCI6IHBhdGgsXG4gIH1cblxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZnVuY3Rpb24gY29udmVydFBhdGgob3B0aW9uczoge1xuICB1cmw6IHN0cmluZ1xuICByZWY6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRpb25zLnVybClcbiAgY29uc3QgW293bmVyLCByZXBvXSA9IHVybC5wYXRobmFtZS5zcGxpdChcIi9cIikuc2xpY2UoMilcbiAgcmV0dXJuIGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vJHtvd25lcn0vJHtyZXBvfS9yZWZzL2hlYWRzLyR7b3B0aW9ucy5yZWZ9LyR7b3B0aW9ucy5wYXRofWBcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import type { Resource } from "@frictionless-ts/metadata";
2
+ import type { GithubResource } from "../Resource.ts";
3
+ export declare function convertResourceToGithub(resource: Resource): Partial<GithubResource>;
@@ -0,0 +1,10 @@
1
+ export function convertResourceToGithub(resource) {
2
+ if (!resource.path && !resource.name) {
3
+ return {};
4
+ }
5
+ const githubResource = {
6
+ path: resource.name,
7
+ };
8
+ return githubResource;
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9HaXRodWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9yZXNvdXJjZS9jb252ZXJ0L3RvR2l0aHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsUUFBa0I7SUFFbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQTRCO1FBQzlDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtLQUNwQixDQUFBO0lBRUQsT0FBTyxjQUFjLENBQUE7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IEdpdGh1YlJlc291cmNlIH0gZnJvbSBcIi4uL1Jlc291cmNlLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSZXNvdXJjZVRvR2l0aHViKFxuICByZXNvdXJjZTogUmVzb3VyY2UsXG4pOiBQYXJ0aWFsPEdpdGh1YlJlc291cmNlPiB7XG4gIGlmICghcmVzb3VyY2UucGF0aCAmJiAhcmVzb3VyY2UubmFtZSkge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgY29uc3QgZ2l0aHViUmVzb3VyY2U6IFBhcnRpYWw8R2l0aHViUmVzb3VyY2U+ID0ge1xuICAgIHBhdGg6IHJlc291cmNlLm5hbWUsXG4gIH1cblxuICByZXR1cm4gZ2l0aHViUmVzb3VyY2Vcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export type { GithubResource } from "./Resource.ts";
2
+ export { convertResourceFromGithub } from "./convert/fromGithub.ts";
3
+ export { convertResourceToGithub } from "./convert/toGithub.ts";
@@ -0,0 +1,3 @@
1
+ export { convertResourceFromGithub } from "./convert/fromGithub.js";
2
+ export { convertResourceToGithub } from "./convert/toGithub.js";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9yZXNvdXJjZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNuRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgR2l0aHViUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5leHBvcnQgeyBjb252ZXJ0UmVzb3VyY2VGcm9tR2l0aHViIH0gZnJvbSBcIi4vY29udmVydC9mcm9tR2l0aHViLnRzXCJcbmV4cG9ydCB7IGNvbnZlcnRSZXNvdXJjZVRvR2l0aHViIH0gZnJvbSBcIi4vY29udmVydC90b0dpdGh1Yi50c1wiXG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from "./package/index.ts";
2
+ export * from "./resource/index.ts";
3
+ export * from "./plugin.ts";
@@ -0,0 +1,4 @@
1
+ export * from "./package/index.js";
2
+ export * from "./resource/index.js";
3
+ export * from "./plugin.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL3plbm9kby9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYyxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9wYWNrYWdlL2luZGV4LnRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Jlc291cmNlL2luZGV4LnRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BsdWdpbi50c1wiXG4iXX0=
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Zenodo Creator interface
3
+ */
4
+ export interface ZenodoCreator {
5
+ /**
6
+ * Creator name (format: Family name, Given names)
7
+ */
8
+ name: string;
9
+ /**
10
+ * Creator affiliation
11
+ */
12
+ affiliation?: string;
13
+ /**
14
+ * Creator identifiers (e.g., ORCID)
15
+ */
16
+ identifiers?: Array<{
17
+ identifier: string;
18
+ scheme: string;
19
+ }>;
20
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvemVub2RvL3BhY2thZ2UvQ3JlYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBaZW5vZG8gQ3JlYXRvciBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaZW5vZG9DcmVhdG9yIHtcbiAgLyoqXG4gICAqIENyZWF0b3IgbmFtZSAoZm9ybWF0OiBGYW1pbHkgbmFtZSwgR2l2ZW4gbmFtZXMpXG4gICAqL1xuICBuYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogQ3JlYXRvciBhZmZpbGlhdGlvblxuICAgKi9cbiAgYWZmaWxpYXRpb24/OiBzdHJpbmdcblxuICAvKipcbiAgICogQ3JlYXRvciBpZGVudGlmaWVycyAoZS5nLiwgT1JDSUQpXG4gICAqL1xuICBpZGVudGlmaWVycz86IEFycmF5PHtcbiAgICBpZGVudGlmaWVyOiBzdHJpbmdcbiAgICBzY2hlbWU6IHN0cmluZ1xuICB9PlxufVxuIl19
@@ -0,0 +1,94 @@
1
+ import type { ZenodoResource } from "../resource/index.ts";
2
+ import type { ZenodoCreator } from "./Creator.ts";
3
+ /**
4
+ * Zenodo Deposit interface
5
+ */
6
+ export interface ZenodoPackage {
7
+ /**
8
+ * Deposit identifier
9
+ */
10
+ id: number;
11
+ /**
12
+ * Deposit URL
13
+ */
14
+ links: {
15
+ self: string;
16
+ html: string;
17
+ files: string;
18
+ bucket: string;
19
+ publish?: string;
20
+ discard?: string;
21
+ edit?: string;
22
+ };
23
+ /**
24
+ * Deposit metadata
25
+ */
26
+ metadata: {
27
+ /**
28
+ * Title of the deposit
29
+ */
30
+ title: string;
31
+ /**
32
+ * Description of the deposit
33
+ */
34
+ description: string;
35
+ /**
36
+ * Upload type, e.g., "dataset"
37
+ */
38
+ upload_type: string;
39
+ /**
40
+ * Publication date in ISO format (YYYY-MM-DD)
41
+ */
42
+ publication_date?: string;
43
+ /**
44
+ * Creators of the deposit
45
+ */
46
+ creators: ZenodoCreator[];
47
+ /**
48
+ * Access right, e.g., "open", "embargoed", "restricted", "closed"
49
+ */
50
+ access_right?: string;
51
+ /**
52
+ * License identifier
53
+ */
54
+ license?: string;
55
+ /**
56
+ * DOI of the deposit
57
+ */
58
+ doi?: string;
59
+ /**
60
+ * Keywords/tags
61
+ */
62
+ keywords?: string[];
63
+ /**
64
+ * Related identifiers (e.g., DOIs of related works)
65
+ */
66
+ related_identifiers?: Array<{
67
+ identifier: string;
68
+ relation: string;
69
+ scheme: string;
70
+ }>;
71
+ /**
72
+ * Communities the deposit belongs to
73
+ */
74
+ communities?: Array<{
75
+ identifier: string;
76
+ }>;
77
+ /**
78
+ * Version of the deposit
79
+ */
80
+ version?: string;
81
+ };
82
+ /**
83
+ * Files associated with the deposit
84
+ */
85
+ files: ZenodoResource[];
86
+ /**
87
+ * State of the deposit
88
+ */
89
+ state: "unsubmitted" | "inprogress" | "done";
90
+ /**
91
+ * Submitted flag
92
+ */
93
+ submitted: boolean;
94
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvemVub2RvL3BhY2thZ2UvUGFja2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBaZW5vZG9SZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFplbm9kb0NyZWF0b3IgfSBmcm9tIFwiLi9DcmVhdG9yLnRzXCJcblxuLyoqXG4gKiBaZW5vZG8gRGVwb3NpdCBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaZW5vZG9QYWNrYWdlIHtcbiAgLyoqXG4gICAqIERlcG9zaXQgaWRlbnRpZmllclxuICAgKi9cbiAgaWQ6IG51bWJlclxuXG4gIC8qKlxuICAgKiBEZXBvc2l0IFVSTFxuICAgKi9cbiAgbGlua3M6IHtcbiAgICBzZWxmOiBzdHJpbmdcbiAgICBodG1sOiBzdHJpbmdcbiAgICBmaWxlczogc3RyaW5nXG4gICAgYnVja2V0OiBzdHJpbmdcbiAgICBwdWJsaXNoPzogc3RyaW5nXG4gICAgZGlzY2FyZD86IHN0cmluZ1xuICAgIGVkaXQ/OiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBvc2l0IG1ldGFkYXRhXG4gICAqL1xuICBtZXRhZGF0YToge1xuICAgIC8qKlxuICAgICAqIFRpdGxlIG9mIHRoZSBkZXBvc2l0XG4gICAgICovXG4gICAgdGl0bGU6IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpcHRpb24gb2YgdGhlIGRlcG9zaXRcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBVcGxvYWQgdHlwZSwgZS5nLiwgXCJkYXRhc2V0XCJcbiAgICAgKi9cbiAgICB1cGxvYWRfdHlwZTogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQdWJsaWNhdGlvbiBkYXRlIGluIElTTyBmb3JtYXQgKFlZWVktTU0tREQpXG4gICAgICovXG4gICAgcHVibGljYXRpb25fZGF0ZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRvcnMgb2YgdGhlIGRlcG9zaXRcbiAgICAgKi9cbiAgICBjcmVhdG9yczogWmVub2RvQ3JlYXRvcltdXG5cbiAgICAvKipcbiAgICAgKiBBY2Nlc3MgcmlnaHQsIGUuZy4sIFwib3BlblwiLCBcImVtYmFyZ29lZFwiLCBcInJlc3RyaWN0ZWRcIiwgXCJjbG9zZWRcIlxuICAgICAqL1xuICAgIGFjY2Vzc19yaWdodD86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogTGljZW5zZSBpZGVudGlmaWVyXG4gICAgICovXG4gICAgbGljZW5zZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogRE9JIG9mIHRoZSBkZXBvc2l0XG4gICAgICovXG4gICAgZG9pPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBLZXl3b3Jkcy90YWdzXG4gICAgICovXG4gICAga2V5d29yZHM/OiBzdHJpbmdbXVxuXG4gICAgLyoqXG4gICAgICogUmVsYXRlZCBpZGVudGlmaWVycyAoZS5nLiwgRE9JcyBvZiByZWxhdGVkIHdvcmtzKVxuICAgICAqL1xuICAgIHJlbGF0ZWRfaWRlbnRpZmllcnM/OiBBcnJheTx7XG4gICAgICBpZGVudGlmaWVyOiBzdHJpbmdcbiAgICAgIHJlbGF0aW9uOiBzdHJpbmdcbiAgICAgIHNjaGVtZTogc3RyaW5nXG4gICAgfT5cblxuICAgIC8qKlxuICAgICAqIENvbW11bml0aWVzIHRoZSBkZXBvc2l0IGJlbG9uZ3MgdG9cbiAgICAgKi9cbiAgICBjb21tdW5pdGllcz86IEFycmF5PHtcbiAgICAgIGlkZW50aWZpZXI6IHN0cmluZ1xuICAgIH0+XG5cbiAgICAvKipcbiAgICAgKiBWZXJzaW9uIG9mIHRoZSBkZXBvc2l0XG4gICAgICovXG4gICAgdmVyc2lvbj86IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVwb3NpdFxuICAgKi9cbiAgZmlsZXM6IFplbm9kb1Jlc291cmNlW11cblxuICAvKipcbiAgICogU3RhdGUgb2YgdGhlIGRlcG9zaXRcbiAgICovXG4gIHN0YXRlOiBcInVuc3VibWl0dGVkXCIgfCBcImlucHJvZ3Jlc3NcIiB8IFwiZG9uZVwiXG5cbiAgLyoqXG4gICAqIFN1Ym1pdHRlZCBmbGFnXG4gICAqL1xuICBzdWJtaXR0ZWQ6IGJvb2xlYW5cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import type { Package } from "@frictionless-ts/metadata";
2
+ import type { ZenodoPackage } from "../Package.ts";
3
+ export declare function convertPackageFromZenodo(zenodoPackage: ZenodoPackage): Package;
@@ -0,0 +1,43 @@
1
+ import { convertResourceFromZenodo } from "../../resource/index.js";
2
+ export function convertPackageFromZenodo(zenodoPackage) {
3
+ const datapackage = {
4
+ name: `record-${zenodoPackage.id}`,
5
+ resources: [],
6
+ };
7
+ const metadata = zenodoPackage.metadata;
8
+ datapackage.title = metadata.title;
9
+ datapackage.description = metadata.description;
10
+ if (metadata.version) {
11
+ datapackage.version = metadata.version;
12
+ }
13
+ if (zenodoPackage.files && zenodoPackage.files.length > 0) {
14
+ datapackage.resources = zenodoPackage.files.map(zenodoResource => convertResourceFromZenodo(zenodoResource));
15
+ }
16
+ if (metadata.license) {
17
+ const license = {
18
+ name: metadata.license,
19
+ };
20
+ datapackage.licenses = [license];
21
+ }
22
+ if (metadata.creators && metadata.creators.length > 0) {
23
+ const contributors = metadata.creators.map(creator => {
24
+ const contributor = {
25
+ title: creator.name,
26
+ role: "author",
27
+ };
28
+ if (creator.affiliation) {
29
+ contributor.path = creator.affiliation;
30
+ }
31
+ return contributor;
32
+ });
33
+ datapackage.contributors = contributors;
34
+ }
35
+ if (metadata.keywords && metadata.keywords.length > 0) {
36
+ datapackage.keywords = metadata.keywords;
37
+ }
38
+ if (metadata.publication_date) {
39
+ datapackage.created = metadata.publication_date;
40
+ }
41
+ return datapackage;
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbVplbm9kby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BsdWdpbnMvemVub2RvL3BhY2thZ2UvY29udmVydC9mcm9tWmVub2RvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBR25FLE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsYUFBNEI7SUFFNUIsTUFBTSxXQUFXLEdBQVk7UUFDM0IsSUFBSSxFQUFFLFVBQVUsYUFBYSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxTQUFTLEVBQUUsRUFBRTtLQUNkLENBQUE7SUFFRCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFBO0lBRXZDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQTtJQUNsQyxXQUFXLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUE7SUFFOUMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsV0FBVyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFBO0lBQ3hDLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUQsV0FBVyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUMvRCx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsQ0FDMUMsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixNQUFNLE9BQU8sR0FBWTtZQUN2QixJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU87U0FDdkIsQ0FBQTtRQUNELFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFrQixRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsRSxNQUFNLFdBQVcsR0FBZ0I7Z0JBQy9CLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbkIsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFBO1lBRUQsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3hCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQTtZQUN4QyxDQUFDO1lBRUQsT0FBTyxXQUFXLENBQUE7UUFDcEIsQ0FBQyxDQUFDLENBQUE7UUFFRixXQUFXLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUN6QyxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RELFdBQVcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixXQUFXLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udHJpYnV0b3IsIExpY2Vuc2UsIFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgeyBjb252ZXJ0UmVzb3VyY2VGcm9tWmVub2RvIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgWmVub2RvUGFja2FnZSB9IGZyb20gXCIuLi9QYWNrYWdlLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRQYWNrYWdlRnJvbVplbm9kbyhcbiAgemVub2RvUGFja2FnZTogWmVub2RvUGFja2FnZSxcbik6IFBhY2thZ2Uge1xuICBjb25zdCBkYXRhcGFja2FnZTogUGFja2FnZSA9IHtcbiAgICBuYW1lOiBgcmVjb3JkLSR7emVub2RvUGFja2FnZS5pZH1gLFxuICAgIHJlc291cmNlczogW10sXG4gIH1cblxuICBjb25zdCBtZXRhZGF0YSA9IHplbm9kb1BhY2thZ2UubWV0YWRhdGFcblxuICBkYXRhcGFja2FnZS50aXRsZSA9IG1ldGFkYXRhLnRpdGxlXG4gIGRhdGFwYWNrYWdlLmRlc2NyaXB0aW9uID0gbWV0YWRhdGEuZGVzY3JpcHRpb25cblxuICBpZiAobWV0YWRhdGEudmVyc2lvbikge1xuICAgIGRhdGFwYWNrYWdlLnZlcnNpb24gPSBtZXRhZGF0YS52ZXJzaW9uXG4gIH1cblxuICBpZiAoemVub2RvUGFja2FnZS5maWxlcyAmJiB6ZW5vZG9QYWNrYWdlLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhcGFja2FnZS5yZXNvdXJjZXMgPSB6ZW5vZG9QYWNrYWdlLmZpbGVzLm1hcCh6ZW5vZG9SZXNvdXJjZSA9PlxuICAgICAgY29udmVydFJlc291cmNlRnJvbVplbm9kbyh6ZW5vZG9SZXNvdXJjZSksXG4gICAgKVxuICB9XG5cbiAgaWYgKG1ldGFkYXRhLmxpY2Vuc2UpIHtcbiAgICBjb25zdCBsaWNlbnNlOiBMaWNlbnNlID0ge1xuICAgICAgbmFtZTogbWV0YWRhdGEubGljZW5zZSxcbiAgICB9XG4gICAgZGF0YXBhY2thZ2UubGljZW5zZXMgPSBbbGljZW5zZV1cbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5jcmVhdG9ycyAmJiBtZXRhZGF0YS5jcmVhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY29udHJpYnV0b3JzOiBDb250cmlidXRvcltdID0gbWV0YWRhdGEuY3JlYXRvcnMubWFwKGNyZWF0b3IgPT4ge1xuICAgICAgY29uc3QgY29udHJpYnV0b3I6IENvbnRyaWJ1dG9yID0ge1xuICAgICAgICB0aXRsZTogY3JlYXRvci5uYW1lLFxuICAgICAgICByb2xlOiBcImF1dGhvclwiLFxuICAgICAgfVxuXG4gICAgICBpZiAoY3JlYXRvci5hZmZpbGlhdGlvbikge1xuICAgICAgICBjb250cmlidXRvci5wYXRoID0gY3JlYXRvci5hZmZpbGlhdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udHJpYnV0b3JcbiAgICB9KVxuXG4gICAgZGF0YXBhY2thZ2UuY29udHJpYnV0b3JzID0gY29udHJpYnV0b3JzXG4gIH1cblxuICBpZiAobWV0YWRhdGEua2V5d29yZHMgJiYgbWV0YWRhdGEua2V5d29yZHMubGVuZ3RoID4gMCkge1xuICAgIGRhdGFwYWNrYWdlLmtleXdvcmRzID0gbWV0YWRhdGEua2V5d29yZHNcbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5wdWJsaWNhdGlvbl9kYXRlKSB7XG4gICAgZGF0YXBhY2thZ2UuY3JlYXRlZCA9IG1ldGFkYXRhLnB1YmxpY2F0aW9uX2RhdGVcbiAgfVxuXG4gIHJldHVybiBkYXRhcGFja2FnZVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ import type { Package } from "@frictionless-ts/metadata";
2
+ import type { ZenodoPackage } from "../Package.ts";
3
+ export declare function convertPackageToZenodo(dataPackage: Package): Partial<ZenodoPackage>;
@@ -0,0 +1,79 @@
1
+ export function convertPackageToZenodo(dataPackage) {
2
+ const metadata = {
3
+ upload_type: "dataset",
4
+ };
5
+ if (dataPackage.title) {
6
+ metadata.title = dataPackage.title;
7
+ }
8
+ if (dataPackage.description) {
9
+ metadata.description = dataPackage.description;
10
+ }
11
+ else if (dataPackage.title) {
12
+ metadata.description = dataPackage.title;
13
+ }
14
+ else {
15
+ metadata.description = "Dataset created with @frictionless-ts/zenodo";
16
+ }
17
+ if (dataPackage.version) {
18
+ metadata.version = dataPackage.version;
19
+ }
20
+ if (dataPackage.licenses && dataPackage.licenses.length > 0) {
21
+ const license = dataPackage.licenses[0];
22
+ if (license?.name) {
23
+ metadata.license = license.name;
24
+ }
25
+ }
26
+ if (dataPackage.contributors && dataPackage.contributors.length > 0) {
27
+ const creators = [];
28
+ const authors = dataPackage.contributors.filter(c => c.role === "author");
29
+ if (authors.length > 0) {
30
+ authors.forEach(author => {
31
+ const creator = {
32
+ name: author.title,
33
+ };
34
+ if (author.path) {
35
+ creator.affiliation = author.path;
36
+ }
37
+ creators.push(creator);
38
+ });
39
+ }
40
+ else {
41
+ const firstContributor = dataPackage.contributors[0];
42
+ if (firstContributor) {
43
+ const creator = {
44
+ name: firstContributor.title,
45
+ };
46
+ if (firstContributor.path) {
47
+ creator.affiliation = firstContributor.path;
48
+ }
49
+ creators.push(creator);
50
+ }
51
+ }
52
+ if (creators.length > 0) {
53
+ metadata.creators = creators;
54
+ }
55
+ else {
56
+ metadata.creators = [
57
+ {
58
+ name: "Unknown Author",
59
+ affiliation: "Unknown Affiliation",
60
+ },
61
+ ];
62
+ }
63
+ }
64
+ else {
65
+ metadata.creators = [
66
+ {
67
+ name: "Unknown Author",
68
+ affiliation: "Unknown Affiliation",
69
+ },
70
+ ];
71
+ }
72
+ if (dataPackage.keywords && dataPackage.keywords.length > 0) {
73
+ metadata.keywords = dataPackage.keywords;
74
+ }
75
+ return {
76
+ metadata: metadata,
77
+ };
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9aZW5vZG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wbHVnaW5zL3plbm9kby9wYWNrYWdlL2NvbnZlcnQvdG9aZW5vZG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxXQUFvQjtJQUVwQixNQUFNLFFBQVEsR0FBdUM7UUFDbkQsV0FBVyxFQUFFLFNBQVM7S0FDdkIsQ0FBQTtJQUVELElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsUUFBUSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFBO0lBQ2hELENBQUM7U0FBTSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUE7SUFDMUMsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLENBQUMsV0FBVyxHQUFHLDhDQUE4QyxDQUFBO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUE7SUFDeEMsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFlBQVksSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxNQUFNLFFBQVEsR0FBb0IsRUFBRSxDQUFBO1FBRXBDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQTtRQUN6RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxPQUFPLEdBQWtCO29CQUM3QixJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUs7aUJBQ25CLENBQUE7Z0JBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQTtnQkFDbkMsQ0FBQztnQkFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3hCLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDcEQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQixNQUFNLE9BQU8sR0FBa0I7b0JBQzdCLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO2lCQUM3QixDQUFBO2dCQUVELElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFBO2dCQUM3QyxDQUFDO2dCQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDeEIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsUUFBUSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsUUFBUSxHQUFHO2dCQUNsQjtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixXQUFXLEVBQUUscUJBQXFCO2lCQUNuQzthQUNGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLENBQUMsUUFBUSxHQUFHO1lBQ2xCO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLFdBQVcsRUFBRSxxQkFBcUI7YUFDbkM7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxRQUFRLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUE7SUFDMUMsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLEVBQUUsUUFBcUM7S0FDaEQsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFplbm9kb0NyZWF0b3IgfSBmcm9tIFwiLi4vQ3JlYXRvci50c1wiXG5pbXBvcnQgdHlwZSB7IFplbm9kb1BhY2thZ2UgfSBmcm9tIFwiLi4vUGFja2FnZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGFja2FnZVRvWmVub2RvKFxuICBkYXRhUGFja2FnZTogUGFja2FnZSxcbik6IFBhcnRpYWw8WmVub2RvUGFja2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YTogUGFydGlhbDxaZW5vZG9QYWNrYWdlW1wibWV0YWRhdGFcIl0+ID0ge1xuICAgIHVwbG9hZF90eXBlOiBcImRhdGFzZXRcIixcbiAgfVxuXG4gIGlmIChkYXRhUGFja2FnZS50aXRsZSkge1xuICAgIG1ldGFkYXRhLnRpdGxlID0gZGF0YVBhY2thZ2UudGl0bGVcbiAgfVxuXG4gIGlmIChkYXRhUGFja2FnZS5kZXNjcmlwdGlvbikge1xuICAgIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZGF0YVBhY2thZ2UuZGVzY3JpcHRpb25cbiAgfSBlbHNlIGlmIChkYXRhUGFja2FnZS50aXRsZSkge1xuICAgIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZGF0YVBhY2thZ2UudGl0bGVcbiAgfSBlbHNlIHtcbiAgICBtZXRhZGF0YS5kZXNjcmlwdGlvbiA9IFwiRGF0YXNldCBjcmVhdGVkIHdpdGggQGZyaWN0aW9ubGVzcy10cy96ZW5vZG9cIlxuICB9XG5cbiAgaWYgKGRhdGFQYWNrYWdlLnZlcnNpb24pIHtcbiAgICBtZXRhZGF0YS52ZXJzaW9uID0gZGF0YVBhY2thZ2UudmVyc2lvblxuICB9XG5cbiAgaWYgKGRhdGFQYWNrYWdlLmxpY2Vuc2VzICYmIGRhdGFQYWNrYWdlLmxpY2Vuc2VzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsaWNlbnNlID0gZGF0YVBhY2thZ2UubGljZW5zZXNbMF1cbiAgICBpZiAobGljZW5zZT8ubmFtZSkge1xuICAgICAgbWV0YWRhdGEubGljZW5zZSA9IGxpY2Vuc2UubmFtZVxuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhUGFja2FnZS5jb250cmlidXRvcnMgJiYgZGF0YVBhY2thZ2UuY29udHJpYnV0b3JzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjcmVhdG9yczogWmVub2RvQ3JlYXRvcltdID0gW11cblxuICAgIGNvbnN0IGF1dGhvcnMgPSBkYXRhUGFja2FnZS5jb250cmlidXRvcnMuZmlsdGVyKGMgPT4gYy5yb2xlID09PSBcImF1dGhvclwiKVxuICAgIGlmIChhdXRob3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGF1dGhvcnMuZm9yRWFjaChhdXRob3IgPT4ge1xuICAgICAgICBjb25zdCBjcmVhdG9yOiBaZW5vZG9DcmVhdG9yID0ge1xuICAgICAgICAgIG5hbWU6IGF1dGhvci50aXRsZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdXRob3IucGF0aCkge1xuICAgICAgICAgIGNyZWF0b3IuYWZmaWxpYXRpb24gPSBhdXRob3IucGF0aFxuICAgICAgICB9XG5cbiAgICAgICAgY3JlYXRvcnMucHVzaChjcmVhdG9yKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RDb250cmlidXRvciA9IGRhdGFQYWNrYWdlLmNvbnRyaWJ1dG9yc1swXVxuICAgICAgaWYgKGZpcnN0Q29udHJpYnV0b3IpIHtcbiAgICAgICAgY29uc3QgY3JlYXRvcjogWmVub2RvQ3JlYXRvciA9IHtcbiAgICAgICAgICBuYW1lOiBmaXJzdENvbnRyaWJ1dG9yLnRpdGxlLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0Q29udHJpYnV0b3IucGF0aCkge1xuICAgICAgICAgIGNyZWF0b3IuYWZmaWxpYXRpb24gPSBmaXJzdENvbnRyaWJ1dG9yLnBhdGhcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWF0b3JzLnB1c2goY3JlYXRvcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3JlYXRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgbWV0YWRhdGEuY3JlYXRvcnMgPSBjcmVhdG9yc1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhZGF0YS5jcmVhdG9ycyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiVW5rbm93biBBdXRob3JcIixcbiAgICAgICAgICBhZmZpbGlhdGlvbjogXCJVbmtub3duIEFmZmlsaWF0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG1ldGFkYXRhLmNyZWF0b3JzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcIlVua25vd24gQXV0aG9yXCIsXG4gICAgICAgIGFmZmlsaWF0aW9uOiBcIlVua25vd24gQWZmaWxpYXRpb25cIixcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgaWYgKGRhdGFQYWNrYWdlLmtleXdvcmRzICYmIGRhdGFQYWNrYWdlLmtleXdvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBtZXRhZGF0YS5rZXl3b3JkcyA9IGRhdGFQYWNrYWdlLmtleXdvcmRzXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSBhcyBaZW5vZG9QYWNrYWdlW1wibWV0YWRhdGFcIl0sXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export type { ZenodoPackage } from "./Package.ts";
2
+ export type { ZenodoCreator } from "./Creator.ts";
3
+ export { loadPackageFromZenodo } from "./load.ts";
4
+ export { savePackageToZenodo } from "./save.ts";
5
+ export { convertPackageFromZenodo } from "./convert/fromZenodo.ts";
6
+ export { convertPackageToZenodo } from "./convert/toZenodo.ts";
@@ -0,0 +1,5 @@
1
+ export { loadPackageFromZenodo } from "./load.js";
2
+ export { savePackageToZenodo } from "./save.js";
3
+ export { convertPackageFromZenodo } from "./convert/fromZenodo.js";
4
+ export { convertPackageToZenodo } from "./convert/toZenodo.js";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL3plbm9kby9wYWNrYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IFplbm9kb1BhY2thZ2UgfSBmcm9tIFwiLi9QYWNrYWdlLnRzXCJcbmV4cG9ydCB0eXBlIHsgWmVub2RvQ3JlYXRvciB9IGZyb20gXCIuL0NyZWF0b3IudHNcIlxuZXhwb3J0IHsgbG9hZFBhY2thZ2VGcm9tWmVub2RvIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5leHBvcnQgeyBzYXZlUGFja2FnZVRvWmVub2RvIH0gZnJvbSBcIi4vc2F2ZS50c1wiXG5leHBvcnQgeyBjb252ZXJ0UGFja2FnZUZyb21aZW5vZG8gfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21aZW5vZG8udHNcIlxuZXhwb3J0IHsgY29udmVydFBhY2thZ2VUb1plbm9kbyB9IGZyb20gXCIuL2NvbnZlcnQvdG9aZW5vZG8udHNcIlxuIl19
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Load a package from a Zenodo deposit
3
+ * @param props Object containing the URL to the Zenodo deposit
4
+ * @returns Package object
5
+ */
6
+ export declare function loadPackageFromZenodo(datasetUrl: string, options?: {
7
+ apiKey?: string;
8
+ }): Promise<{
9
+ [x: `${string}:${string}`]: any;
10
+ $schema?: string;
11
+ resources: import("@frictionless-ts/metadata").Resource[];
12
+ name?: string;
13
+ title?: string;
14
+ description?: string;
15
+ homepage?: string;
16
+ version?: string;
17
+ licenses?: import("@frictionless-ts/metadata").License[];
18
+ contributors?: import("@frictionless-ts/metadata").Contributor[];
19
+ sources?: import("@frictionless-ts/metadata").Source[];
20
+ keywords?: string[];
21
+ created?: string;
22
+ image?: string;
23
+ }>;
@@ -0,0 +1,45 @@
1
+ import { mergePackages } from "../../../package/index.js";
2
+ import { makeZenodoApiRequest } from "../zenodo/index.js";
3
+ import { convertPackageFromZenodo } from "./convert/fromZenodo.js";
4
+ /**
5
+ * Load a package from a Zenodo deposit
6
+ * @param props Object containing the URL to the Zenodo deposit
7
+ * @returns Package object
8
+ */
9
+ export async function loadPackageFromZenodo(datasetUrl, options) {
10
+ const { apiKey } = options ?? {};
11
+ const sandbox = new URL(datasetUrl).host === "sandbox.zenodo.org";
12
+ const recordId = extractRecordId(datasetUrl);
13
+ if (!recordId) {
14
+ throw new Error(`Failed to extract record ID from URL: ${datasetUrl}`);
15
+ }
16
+ const zenodoPackage = await makeZenodoApiRequest({
17
+ endpoint: `/records/${recordId}`,
18
+ apiKey,
19
+ sandbox,
20
+ });
21
+ const systemPackage = convertPackageFromZenodo(zenodoPackage);
22
+ const userPackagePath = systemPackage.resources
23
+ .filter(resource => resource["zenodo:key"] === "datapackage.json")
24
+ .map(resource => resource["zenodo:url"])
25
+ .at(0);
26
+ const datapackage = await mergePackages({ systemPackage, userPackagePath });
27
+ datapackage.resources = datapackage.resources.map(resource => {
28
+ // TODO: remove these keys completely
29
+ return { ...resource, "zenodo:key": undefined, "zenodo:url": undefined };
30
+ });
31
+ return datapackage;
32
+ }
33
+ /**
34
+ * Extract deposit ID from URL
35
+ *
36
+ * Examples:
37
+ * - https://zenodo.org/records/1234567
38
+ * - https://sandbox.zenodo.org/records/1234567
39
+ */
40
+ function extractRecordId(datasetUrl) {
41
+ const url = new URL(datasetUrl);
42
+ const pathParts = url.pathname.split("/").filter(Boolean);
43
+ return pathParts.at(-1);
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvemVub2RvL3BhY2thZ2UvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFFbEU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLFVBQWtCLEVBQ2xCLE9BRUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUE7SUFFakUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzVDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLFVBQVUsRUFBRSxDQUFDLENBQUE7SUFDeEUsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sb0JBQW9CLENBQWdCO1FBQzlELFFBQVEsRUFBRSxZQUFZLFFBQVEsRUFBRTtRQUNoQyxNQUFNO1FBQ04sT0FBTztLQUNSLENBQUMsQ0FBQTtJQUVGLE1BQU0sYUFBYSxHQUFHLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzdELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxTQUFTO1NBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxrQkFBa0IsQ0FBQztTQUNqRSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRVIsTUFBTSxXQUFXLEdBQUcsTUFBTSxhQUFhLENBQUMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQTtJQUMzRSxXQUFXLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzNELHFDQUFxQztRQUNyQyxPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUE7SUFDMUUsQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLFdBQVcsQ0FBQTtBQUNwQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxlQUFlLENBQUMsVUFBa0I7SUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDL0IsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3pELE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZVBhY2thZ2VzIH0gZnJvbSBcIi4uLy4uLy4uL3BhY2thZ2UvaW5kZXgudHNcIlxuaW1wb3J0IHsgbWFrZVplbm9kb0FwaVJlcXVlc3QgfSBmcm9tIFwiLi4vemVub2RvL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgWmVub2RvUGFja2FnZSB9IGZyb20gXCIuL1BhY2thZ2UudHNcIlxuaW1wb3J0IHsgY29udmVydFBhY2thZ2VGcm9tWmVub2RvIH0gZnJvbSBcIi4vY29udmVydC9mcm9tWmVub2RvLnRzXCJcblxuLyoqXG4gKiBMb2FkIGEgcGFja2FnZSBmcm9tIGEgWmVub2RvIGRlcG9zaXRcbiAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgVVJMIHRvIHRoZSBaZW5vZG8gZGVwb3NpdFxuICogQHJldHVybnMgUGFja2FnZSBvYmplY3RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQYWNrYWdlRnJvbVplbm9kbyhcbiAgZGF0YXNldFVybDogc3RyaW5nLFxuICBvcHRpb25zPzoge1xuICAgIGFwaUtleT86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IHsgYXBpS2V5IH0gPSBvcHRpb25zID8/IHt9XG4gIGNvbnN0IHNhbmRib3ggPSBuZXcgVVJMKGRhdGFzZXRVcmwpLmhvc3QgPT09IFwic2FuZGJveC56ZW5vZG8ub3JnXCJcblxuICBjb25zdCByZWNvcmRJZCA9IGV4dHJhY3RSZWNvcmRJZChkYXRhc2V0VXJsKVxuICBpZiAoIXJlY29yZElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZXh0cmFjdCByZWNvcmQgSUQgZnJvbSBVUkw6ICR7ZGF0YXNldFVybH1gKVxuICB9XG5cbiAgY29uc3QgemVub2RvUGFja2FnZSA9IGF3YWl0IG1ha2VaZW5vZG9BcGlSZXF1ZXN0PFplbm9kb1BhY2thZ2U+KHtcbiAgICBlbmRwb2ludDogYC9yZWNvcmRzLyR7cmVjb3JkSWR9YCxcbiAgICBhcGlLZXksXG4gICAgc2FuZGJveCxcbiAgfSlcblxuICBjb25zdCBzeXN0ZW1QYWNrYWdlID0gY29udmVydFBhY2thZ2VGcm9tWmVub2RvKHplbm9kb1BhY2thZ2UpXG4gIGNvbnN0IHVzZXJQYWNrYWdlUGF0aCA9IHN5c3RlbVBhY2thZ2UucmVzb3VyY2VzXG4gICAgLmZpbHRlcihyZXNvdXJjZSA9PiByZXNvdXJjZVtcInplbm9kbzprZXlcIl0gPT09IFwiZGF0YXBhY2thZ2UuanNvblwiKVxuICAgIC5tYXAocmVzb3VyY2UgPT4gcmVzb3VyY2VbXCJ6ZW5vZG86dXJsXCJdKVxuICAgIC5hdCgwKVxuXG4gIGNvbnN0IGRhdGFwYWNrYWdlID0gYXdhaXQgbWVyZ2VQYWNrYWdlcyh7IHN5c3RlbVBhY2thZ2UsIHVzZXJQYWNrYWdlUGF0aCB9KVxuICBkYXRhcGFja2FnZS5yZXNvdXJjZXMgPSBkYXRhcGFja2FnZS5yZXNvdXJjZXMubWFwKHJlc291cmNlID0+IHtcbiAgICAvLyBUT0RPOiByZW1vdmUgdGhlc2Uga2V5cyBjb21wbGV0ZWx5XG4gICAgcmV0dXJuIHsgLi4ucmVzb3VyY2UsIFwiemVub2RvOmtleVwiOiB1bmRlZmluZWQsIFwiemVub2RvOnVybFwiOiB1bmRlZmluZWQgfVxuICB9KVxuXG4gIHJldHVybiBkYXRhcGFja2FnZVxufVxuXG4vKipcbiAqIEV4dHJhY3QgZGVwb3NpdCBJRCBmcm9tIFVSTFxuICpcbiAqIEV4YW1wbGVzOlxuICogLSBodHRwczovL3plbm9kby5vcmcvcmVjb3Jkcy8xMjM0NTY3XG4gKiAtIGh0dHBzOi8vc2FuZGJveC56ZW5vZG8ub3JnL3JlY29yZHMvMTIzNDU2N1xuICovXG5mdW5jdGlvbiBleHRyYWN0UmVjb3JkSWQoZGF0YXNldFVybDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChkYXRhc2V0VXJsKVxuICBjb25zdCBwYXRoUGFydHMgPSB1cmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKVxuICByZXR1cm4gcGF0aFBhcnRzLmF0KC0xKVxufVxuIl19
@@ -0,0 +1 @@
1
+ export {};