@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,87 @@
1
+ import type { GithubResource } from "../resource/index.ts";
2
+ import type { GithubLicense } from "./License.ts";
3
+ import type { GithubOwner } from "./Owner.ts";
4
+ /**
5
+ * Github repository as a package
6
+ */
7
+ export interface GithubPackage {
8
+ /**
9
+ * Repository identifier
10
+ */
11
+ id: number;
12
+ /**
13
+ * Repository name
14
+ */
15
+ name: string;
16
+ /**
17
+ * Repository full name (owner/name)
18
+ */
19
+ full_name: string;
20
+ /**
21
+ * Repository owner
22
+ */
23
+ owner: GithubOwner;
24
+ /**
25
+ * Repository description
26
+ */
27
+ description: string | null;
28
+ /**
29
+ * Repository creation date
30
+ */
31
+ created_at: string;
32
+ /**
33
+ * Repository update date
34
+ */
35
+ updated_at: string;
36
+ /**
37
+ * Repository homepage URL
38
+ */
39
+ homepage: string | null;
40
+ /**
41
+ * Repository size in KB
42
+ */
43
+ size: number;
44
+ /**
45
+ * Repository stars count
46
+ */
47
+ stargazers_count: number;
48
+ /**
49
+ * Repository watchers count
50
+ */
51
+ watchers_count: number;
52
+ /**
53
+ * Repository language
54
+ */
55
+ language: string | null;
56
+ /**
57
+ * Repository license
58
+ */
59
+ license: GithubLicense | null;
60
+ /**
61
+ * Repository default branch
62
+ */
63
+ default_branch: string;
64
+ /**
65
+ * Repository topics
66
+ */
67
+ topics: string[];
68
+ /**
69
+ * Repository is private
70
+ */
71
+ private: boolean;
72
+ /**
73
+ * Repository is archived
74
+ */
75
+ archived: boolean;
76
+ /**
77
+ * Repository URLs
78
+ */
79
+ html_url: string;
80
+ git_url: string;
81
+ ssh_url: string;
82
+ clone_url: string;
83
+ /**
84
+ * Repository resources
85
+ */
86
+ resources?: GithubResource[];
87
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvZ2l0aHViL3BhY2thZ2UvUGFja2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHaXRodWJSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IEdpdGh1YkxpY2Vuc2UgfSBmcm9tIFwiLi9MaWNlbnNlLnRzXCJcbmltcG9ydCB0eXBlIHsgR2l0aHViT3duZXIgfSBmcm9tIFwiLi9Pd25lci50c1wiXG5cbi8qKlxuICogR2l0aHViIHJlcG9zaXRvcnkgYXMgYSBwYWNrYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViUGFja2FnZSB7XG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IGlkZW50aWZpZXJcbiAgICovXG4gIGlkOiBudW1iZXJcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSBuYW1lXG4gICAqL1xuICBuYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSBmdWxsIG5hbWUgKG93bmVyL25hbWUpXG4gICAqL1xuICBmdWxsX25hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IG93bmVyXG4gICAqL1xuICBvd25lcjogR2l0aHViT3duZXJcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSBkZXNjcmlwdGlvblxuICAgKi9cbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGxcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSBjcmVhdGlvbiBkYXRlXG4gICAqL1xuICBjcmVhdGVkX2F0OiBzdHJpbmdcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSB1cGRhdGUgZGF0ZVxuICAgKi9cbiAgdXBkYXRlZF9hdDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgaG9tZXBhZ2UgVVJMXG4gICAqL1xuICBob21lcGFnZTogc3RyaW5nIHwgbnVsbFxuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IHNpemUgaW4gS0JcbiAgICovXG4gIHNpemU6IG51bWJlclxuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IHN0YXJzIGNvdW50XG4gICAqL1xuICBzdGFyZ2F6ZXJzX2NvdW50OiBudW1iZXJcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSB3YXRjaGVycyBjb3VudFxuICAgKi9cbiAgd2F0Y2hlcnNfY291bnQ6IG51bWJlclxuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IGxhbmd1YWdlXG4gICAqL1xuICBsYW5ndWFnZTogc3RyaW5nIHwgbnVsbFxuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IGxpY2Vuc2VcbiAgICovXG4gIGxpY2Vuc2U6IEdpdGh1YkxpY2Vuc2UgfCBudWxsXG5cbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgZGVmYXVsdCBicmFuY2hcbiAgICovXG4gIGRlZmF1bHRfYnJhbmNoOiBzdHJpbmdcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSB0b3BpY3NcbiAgICovXG4gIHRvcGljczogc3RyaW5nW11cblxuICAvKipcbiAgICogUmVwb3NpdG9yeSBpcyBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgaXMgYXJjaGl2ZWRcbiAgICovXG4gIGFyY2hpdmVkOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgVVJMc1xuICAgKi9cbiAgaHRtbF91cmw6IHN0cmluZ1xuICBnaXRfdXJsOiBzdHJpbmdcbiAgc3NoX3VybDogc3RyaW5nXG4gIGNsb25lX3VybDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgcmVzb3VyY2VzXG4gICAqL1xuICByZXNvdXJjZXM/OiBHaXRodWJSZXNvdXJjZVtdXG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import type { Package } from "@frictionless-ts/metadata";
2
+ import type { GithubPackage } from "../Package.ts";
3
+ export declare function convertPackageFromGithub(githubPackage: GithubPackage): Package;
@@ -0,0 +1,50 @@
1
+ import { convertResourceFromGithub } from "../../resource/index.js";
2
+ export function convertPackageFromGithub(githubPackage) {
3
+ const datapackage = {
4
+ name: githubPackage.name,
5
+ resources: [],
6
+ };
7
+ if (githubPackage.description) {
8
+ datapackage.description = githubPackage.description;
9
+ }
10
+ datapackage.title = githubPackage.full_name;
11
+ if (githubPackage.homepage) {
12
+ datapackage.homepage = githubPackage.homepage;
13
+ }
14
+ if (githubPackage.license) {
15
+ const license = {
16
+ name: githubPackage.license.spdx_id || githubPackage.license.key,
17
+ };
18
+ if (githubPackage.license.name) {
19
+ license.title = githubPackage.license.name;
20
+ }
21
+ if (githubPackage.license.url) {
22
+ license.path = githubPackage.license.url;
23
+ }
24
+ datapackage.licenses = [license];
25
+ }
26
+ if (githubPackage.owner) {
27
+ const contributor = {
28
+ title: githubPackage.owner.login,
29
+ role: githubPackage.owner.type === "Organization" ? "publisher" : "author",
30
+ path: githubPackage.owner.html_url,
31
+ };
32
+ datapackage.contributors = [contributor];
33
+ }
34
+ if (githubPackage.resources && githubPackage.resources.length > 0) {
35
+ datapackage.resources = githubPackage.resources
36
+ .filter(resource => !resource.path.startsWith("."))
37
+ .filter(resource => resource.type === "blob")
38
+ .map(resource => convertResourceFromGithub(resource, {
39
+ defaultBranch: githubPackage.default_branch,
40
+ }));
41
+ }
42
+ if (githubPackage.topics && githubPackage.topics.length > 0) {
43
+ datapackage.keywords = githubPackage.topics;
44
+ }
45
+ if (githubPackage.created_at) {
46
+ datapackage.created = githubPackage.created_at;
47
+ }
48
+ return datapackage;
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUdpdGh1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BsdWdpbnMvZ2l0aHViL3BhY2thZ2UvY29udmVydC9mcm9tR2l0aHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBR25FLE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsYUFBNEI7SUFFNUIsTUFBTSxXQUFXLEdBQVk7UUFDM0IsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1FBQ3hCLFNBQVMsRUFBRSxFQUFFO0tBQ2QsQ0FBQTtJQUVELElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQTtJQUNyRCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFBO0lBRTNDLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLFdBQVcsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQVk7WUFDdkIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRztTQUNqRSxDQUFBO1FBRUQsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUE7UUFDNUMsQ0FBQztRQUVELElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFBO1FBQzFDLENBQUM7UUFFRCxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLE1BQU0sV0FBVyxHQUFnQjtZQUMvQixLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQ2hDLElBQUksRUFDRixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUN0RSxJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRO1NBQ25DLENBQUE7UUFFRCxXQUFXLENBQUMsWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxXQUFXLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTO2FBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7YUFDNUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ2QseUJBQXlCLENBQUMsUUFBUSxFQUFFO1lBQ2xDLGFBQWEsRUFBRSxhQUFhLENBQUMsY0FBYztTQUM1QyxDQUFDLENBQ0gsQ0FBQTtJQUNMLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUQsV0FBVyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFBO0lBQzdDLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixXQUFXLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUE7SUFDaEQsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnRyaWJ1dG9yLCBMaWNlbnNlLCBQYWNrYWdlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgY29udmVydFJlc291cmNlRnJvbUdpdGh1YiB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IEdpdGh1YlBhY2thZ2UgfSBmcm9tIFwiLi4vUGFja2FnZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGFja2FnZUZyb21HaXRodWIoXG4gIGdpdGh1YlBhY2thZ2U6IEdpdGh1YlBhY2thZ2UsXG4pOiBQYWNrYWdlIHtcbiAgY29uc3QgZGF0YXBhY2thZ2U6IFBhY2thZ2UgPSB7XG4gICAgbmFtZTogZ2l0aHViUGFja2FnZS5uYW1lLFxuICAgIHJlc291cmNlczogW10sXG4gIH1cblxuICBpZiAoZ2l0aHViUGFja2FnZS5kZXNjcmlwdGlvbikge1xuICAgIGRhdGFwYWNrYWdlLmRlc2NyaXB0aW9uID0gZ2l0aHViUGFja2FnZS5kZXNjcmlwdGlvblxuICB9XG5cbiAgZGF0YXBhY2thZ2UudGl0bGUgPSBnaXRodWJQYWNrYWdlLmZ1bGxfbmFtZVxuXG4gIGlmIChnaXRodWJQYWNrYWdlLmhvbWVwYWdlKSB7XG4gICAgZGF0YXBhY2thZ2UuaG9tZXBhZ2UgPSBnaXRodWJQYWNrYWdlLmhvbWVwYWdlXG4gIH1cblxuICBpZiAoZ2l0aHViUGFja2FnZS5saWNlbnNlKSB7XG4gICAgY29uc3QgbGljZW5zZTogTGljZW5zZSA9IHtcbiAgICAgIG5hbWU6IGdpdGh1YlBhY2thZ2UubGljZW5zZS5zcGR4X2lkIHx8IGdpdGh1YlBhY2thZ2UubGljZW5zZS5rZXksXG4gICAgfVxuXG4gICAgaWYgKGdpdGh1YlBhY2thZ2UubGljZW5zZS5uYW1lKSB7XG4gICAgICBsaWNlbnNlLnRpdGxlID0gZ2l0aHViUGFja2FnZS5saWNlbnNlLm5hbWVcbiAgICB9XG5cbiAgICBpZiAoZ2l0aHViUGFja2FnZS5saWNlbnNlLnVybCkge1xuICAgICAgbGljZW5zZS5wYXRoID0gZ2l0aHViUGFja2FnZS5saWNlbnNlLnVybFxuICAgIH1cblxuICAgIGRhdGFwYWNrYWdlLmxpY2Vuc2VzID0gW2xpY2Vuc2VdXG4gIH1cblxuICBpZiAoZ2l0aHViUGFja2FnZS5vd25lcikge1xuICAgIGNvbnN0IGNvbnRyaWJ1dG9yOiBDb250cmlidXRvciA9IHtcbiAgICAgIHRpdGxlOiBnaXRodWJQYWNrYWdlLm93bmVyLmxvZ2luLFxuICAgICAgcm9sZTpcbiAgICAgICAgZ2l0aHViUGFja2FnZS5vd25lci50eXBlID09PSBcIk9yZ2FuaXphdGlvblwiID8gXCJwdWJsaXNoZXJcIiA6IFwiYXV0aG9yXCIsXG4gICAgICBwYXRoOiBnaXRodWJQYWNrYWdlLm93bmVyLmh0bWxfdXJsLFxuICAgIH1cblxuICAgIGRhdGFwYWNrYWdlLmNvbnRyaWJ1dG9ycyA9IFtjb250cmlidXRvcl1cbiAgfVxuXG4gIGlmIChnaXRodWJQYWNrYWdlLnJlc291cmNlcyAmJiBnaXRodWJQYWNrYWdlLnJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgZGF0YXBhY2thZ2UucmVzb3VyY2VzID0gZ2l0aHViUGFja2FnZS5yZXNvdXJjZXNcbiAgICAgIC5maWx0ZXIocmVzb3VyY2UgPT4gIXJlc291cmNlLnBhdGguc3RhcnRzV2l0aChcIi5cIikpXG4gICAgICAuZmlsdGVyKHJlc291cmNlID0+IHJlc291cmNlLnR5cGUgPT09IFwiYmxvYlwiKVxuICAgICAgLm1hcChyZXNvdXJjZSA9PlxuICAgICAgICBjb252ZXJ0UmVzb3VyY2VGcm9tR2l0aHViKHJlc291cmNlLCB7XG4gICAgICAgICAgZGVmYXVsdEJyYW5jaDogZ2l0aHViUGFja2FnZS5kZWZhdWx0X2JyYW5jaCxcbiAgICAgICAgfSksXG4gICAgICApXG4gIH1cblxuICBpZiAoZ2l0aHViUGFja2FnZS50b3BpY3MgJiYgZ2l0aHViUGFja2FnZS50b3BpY3MubGVuZ3RoID4gMCkge1xuICAgIGRhdGFwYWNrYWdlLmtleXdvcmRzID0gZ2l0aHViUGFja2FnZS50b3BpY3NcbiAgfVxuXG4gIGlmIChnaXRodWJQYWNrYWdlLmNyZWF0ZWRfYXQpIHtcbiAgICBkYXRhcGFja2FnZS5jcmVhdGVkID0gZ2l0aHViUGFja2FnZS5jcmVhdGVkX2F0XG4gIH1cblxuICByZXR1cm4gZGF0YXBhY2thZ2Vcbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export type { GithubPackage } from "./Package.ts";
2
+ export type { GithubOwner } from "./Owner.ts";
3
+ export type { GithubLicense } from "./License.ts";
4
+ export { loadPackageFromGithub } from "./load.ts";
5
+ export { savePackageToGithub } from "./save.ts";
6
+ export { convertPackageFromGithub } from "./convert/fromGithub.ts";
@@ -0,0 +1,4 @@
1
+ export { loadPackageFromGithub } from "./load.js";
2
+ export { savePackageToGithub } from "./save.js";
3
+ export { convertPackageFromGithub } from "./convert/fromGithub.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9wYWNrYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IEdpdGh1YlBhY2thZ2UgfSBmcm9tIFwiLi9QYWNrYWdlLnRzXCJcbmV4cG9ydCB0eXBlIHsgR2l0aHViT3duZXIgfSBmcm9tIFwiLi9Pd25lci50c1wiXG5leHBvcnQgdHlwZSB7IEdpdGh1YkxpY2Vuc2UgfSBmcm9tIFwiLi9MaWNlbnNlLnRzXCJcbmV4cG9ydCB7IGxvYWRQYWNrYWdlRnJvbUdpdGh1YiB9IGZyb20gXCIuL2xvYWQudHNcIlxuZXhwb3J0IHsgc2F2ZVBhY2thZ2VUb0dpdGh1YiB9IGZyb20gXCIuL3NhdmUudHNcIlxuZXhwb3J0IHsgY29udmVydFBhY2thZ2VGcm9tR2l0aHViIH0gZnJvbSBcIi4vY29udmVydC9mcm9tR2l0aHViLnRzXCJcbiJdfQ==
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Load a package from a Github repository
3
+ * @param props Object containing the URL to the Github repository
4
+ * @returns Package object
5
+ */
6
+ export declare function loadPackageFromGithub(repoUrl: 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,48 @@
1
+ import { mergePackages } from "../../../package/index.js";
2
+ import { makeGithubApiRequest } from "../github/index.js";
3
+ import { convertPackageFromGithub } from "./convert/fromGithub.js";
4
+ /**
5
+ * Load a package from a Github repository
6
+ * @param props Object containing the URL to the Github repository
7
+ * @returns Package object
8
+ */
9
+ export async function loadPackageFromGithub(repoUrl, options) {
10
+ const { apiKey } = options ?? {};
11
+ // Extract owner and repo from URL
12
+ const { owner, repo } = extractRepositoryInfo(repoUrl);
13
+ if (!owner || !repo) {
14
+ throw new Error(`Failed to extract repository info from URL: ${repoUrl}`);
15
+ }
16
+ const githubPackage = await makeGithubApiRequest({
17
+ endpoint: `/repos/${owner}/${repo}`,
18
+ apiKey,
19
+ });
20
+ const ref = githubPackage.default_branch;
21
+ githubPackage.resources = (await makeGithubApiRequest({
22
+ endpoint: `/repos/${owner}/${repo}/git/trees/${ref}?recursive=1`,
23
+ apiKey,
24
+ })).tree;
25
+ const systemPackage = convertPackageFromGithub(githubPackage);
26
+ const userPackagePath = systemPackage.resources
27
+ .filter(resource => resource["github:key"] === "datapackage.json")
28
+ .map(resource => resource["github:url"])
29
+ .at(0);
30
+ const datapackage = await mergePackages({ systemPackage, userPackagePath });
31
+ datapackage.resources = datapackage.resources.map(resource => {
32
+ // TODO: remove these keys completely
33
+ return { ...resource, "github:key": undefined, "github:url": undefined };
34
+ });
35
+ return datapackage;
36
+ }
37
+ /**
38
+ * Extract repository owner and name from URL
39
+ *
40
+ * Examples:
41
+ * - https://github.com/owner/repo
42
+ */
43
+ function extractRepositoryInfo(repoUrl) {
44
+ const url = new URL(repoUrl);
45
+ const [owner, repo] = url.pathname.split("/").filter(Boolean);
46
+ return { owner, repo };
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvZ2l0aHViL3BhY2thZ2UvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFHekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFFbEU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLE9BQWUsRUFDZixPQUVDO0lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUE7SUFFaEMsa0NBQWtDO0lBQ2xDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdEQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sb0JBQW9CLENBQWdCO1FBQzlELFFBQVEsRUFBRSxVQUFVLEtBQUssSUFBSSxJQUFJLEVBQUU7UUFDbkMsTUFBTTtLQUNQLENBQUMsQ0FBQTtJQUVGLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUE7SUFDeEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUN4QixNQUFNLG9CQUFvQixDQUE2QjtRQUNyRCxRQUFRLEVBQUUsVUFBVSxLQUFLLElBQUksSUFBSSxjQUFjLEdBQUcsY0FBYztRQUNoRSxNQUFNO0tBQ1AsQ0FBQyxDQUNILENBQUMsSUFBSSxDQUFBO0lBRU4sTUFBTSxhQUFhLEdBQUcsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDN0QsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLFNBQVM7U0FDNUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLGtCQUFrQixDQUFDO1NBQ2pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN2QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFUixNQUFNLFdBQVcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFBO0lBQzNFLFdBQVcsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDM0QscUNBQXFDO1FBQ3JDLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FBQTtJQUMxRSxDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMscUJBQXFCLENBQUMsT0FBZTtJQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM1QixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFBO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZVBhY2thZ2VzIH0gZnJvbSBcIi4uLy4uLy4uL3BhY2thZ2UvaW5kZXgudHNcIlxuaW1wb3J0IHsgbWFrZUdpdGh1YkFwaVJlcXVlc3QgfSBmcm9tIFwiLi4vZ2l0aHViL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgR2l0aHViUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBHaXRodWJQYWNrYWdlIH0gZnJvbSBcIi4vUGFja2FnZS50c1wiXG5pbXBvcnQgeyBjb252ZXJ0UGFja2FnZUZyb21HaXRodWIgfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21HaXRodWIudHNcIlxuXG4vKipcbiAqIExvYWQgYSBwYWNrYWdlIGZyb20gYSBHaXRodWIgcmVwb3NpdG9yeVxuICogQHBhcmFtIHByb3BzIE9iamVjdCBjb250YWluaW5nIHRoZSBVUkwgdG8gdGhlIEdpdGh1YiByZXBvc2l0b3J5XG4gKiBAcmV0dXJucyBQYWNrYWdlIG9iamVjdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBhY2thZ2VGcm9tR2l0aHViKFxuICByZXBvVXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiB7XG4gICAgYXBpS2V5Pzogc3RyaW5nXG4gIH0sXG4pIHtcbiAgY29uc3QgeyBhcGlLZXkgfSA9IG9wdGlvbnMgPz8ge31cblxuICAvLyBFeHRyYWN0IG93bmVyIGFuZCByZXBvIGZyb20gVVJMXG4gIGNvbnN0IHsgb3duZXIsIHJlcG8gfSA9IGV4dHJhY3RSZXBvc2l0b3J5SW5mbyhyZXBvVXJsKVxuICBpZiAoIW93bmVyIHx8ICFyZXBvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZXh0cmFjdCByZXBvc2l0b3J5IGluZm8gZnJvbSBVUkw6ICR7cmVwb1VybH1gKVxuICB9XG5cbiAgY29uc3QgZ2l0aHViUGFja2FnZSA9IGF3YWl0IG1ha2VHaXRodWJBcGlSZXF1ZXN0PEdpdGh1YlBhY2thZ2U+KHtcbiAgICBlbmRwb2ludDogYC9yZXBvcy8ke293bmVyfS8ke3JlcG99YCxcbiAgICBhcGlLZXksXG4gIH0pXG5cbiAgY29uc3QgcmVmID0gZ2l0aHViUGFja2FnZS5kZWZhdWx0X2JyYW5jaFxuICBnaXRodWJQYWNrYWdlLnJlc291cmNlcyA9IChcbiAgICBhd2FpdCBtYWtlR2l0aHViQXBpUmVxdWVzdDx7IHRyZWU6IEdpdGh1YlJlc291cmNlW10gfT4oe1xuICAgICAgZW5kcG9pbnQ6IGAvcmVwb3MvJHtvd25lcn0vJHtyZXBvfS9naXQvdHJlZXMvJHtyZWZ9P3JlY3Vyc2l2ZT0xYCxcbiAgICAgIGFwaUtleSxcbiAgICB9KVxuICApLnRyZWVcblxuICBjb25zdCBzeXN0ZW1QYWNrYWdlID0gY29udmVydFBhY2thZ2VGcm9tR2l0aHViKGdpdGh1YlBhY2thZ2UpXG4gIGNvbnN0IHVzZXJQYWNrYWdlUGF0aCA9IHN5c3RlbVBhY2thZ2UucmVzb3VyY2VzXG4gICAgLmZpbHRlcihyZXNvdXJjZSA9PiByZXNvdXJjZVtcImdpdGh1YjprZXlcIl0gPT09IFwiZGF0YXBhY2thZ2UuanNvblwiKVxuICAgIC5tYXAocmVzb3VyY2UgPT4gcmVzb3VyY2VbXCJnaXRodWI6dXJsXCJdKVxuICAgIC5hdCgwKVxuXG4gIGNvbnN0IGRhdGFwYWNrYWdlID0gYXdhaXQgbWVyZ2VQYWNrYWdlcyh7IHN5c3RlbVBhY2thZ2UsIHVzZXJQYWNrYWdlUGF0aCB9KVxuICBkYXRhcGFja2FnZS5yZXNvdXJjZXMgPSBkYXRhcGFja2FnZS5yZXNvdXJjZXMubWFwKHJlc291cmNlID0+IHtcbiAgICAvLyBUT0RPOiByZW1vdmUgdGhlc2Uga2V5cyBjb21wbGV0ZWx5XG4gICAgcmV0dXJuIHsgLi4ucmVzb3VyY2UsIFwiZ2l0aHViOmtleVwiOiB1bmRlZmluZWQsIFwiZ2l0aHViOnVybFwiOiB1bmRlZmluZWQgfVxuICB9KVxuXG4gIHJldHVybiBkYXRhcGFja2FnZVxufVxuXG4vKipcbiAqIEV4dHJhY3QgcmVwb3NpdG9yeSBvd25lciBhbmQgbmFtZSBmcm9tIFVSTFxuICpcbiAqIEV4YW1wbGVzOlxuICogLSBodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwb1xuICovXG5mdW5jdGlvbiBleHRyYWN0UmVwb3NpdG9yeUluZm8ocmVwb1VybDogc3RyaW5nKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocmVwb1VybClcbiAgY29uc3QgW293bmVyLCByZXBvXSA9IHVybC5wYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pXG4gIHJldHVybiB7IG93bmVyLCByZXBvIH1cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { useRecording } from "vitest-polly";
3
+ import { loadPackageFromGithub } from "./load.js";
4
+ useRecording();
5
+ describe("loadPackageFromGithub", () => {
6
+ it("should load a package", async () => {
7
+ const datapackage = await loadPackageFromGithub("https://github.com/roll/data");
8
+ expect(datapackage).toMatchSnapshot();
9
+ });
10
+ it("should merge datapackage.json if present", async () => {
11
+ const datapackage = await loadPackageFromGithub("https://github.com/roll/currency-codes");
12
+ expect(datapackage).toMatchSnapshot();
13
+ });
14
+ });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2lucy9naXRodWIvcGFja2FnZS9sb2FkLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWpELFlBQVksRUFBRSxDQUFBO0FBRWQsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxxQkFBcUIsQ0FDN0MsOEJBQThCLENBQy9CLENBQUE7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDdkMsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDeEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxxQkFBcUIsQ0FDN0Msd0NBQXdDLENBQ3pDLENBQUE7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDdkMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyB1c2VSZWNvcmRpbmcgfSBmcm9tIFwidml0ZXN0LXBvbGx5XCJcbmltcG9ydCB7IGxvYWRQYWNrYWdlRnJvbUdpdGh1YiB9IGZyb20gXCIuL2xvYWQudHNcIlxuXG51c2VSZWNvcmRpbmcoKVxuXG5kZXNjcmliZShcImxvYWRQYWNrYWdlRnJvbUdpdGh1YlwiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIGxvYWQgYSBwYWNrYWdlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhcGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUdpdGh1YihcbiAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tL3JvbGwvZGF0YVwiLFxuICAgIClcblxuICAgIGV4cGVjdChkYXRhcGFja2FnZSkudG9NYXRjaFNuYXBzaG90KClcbiAgfSlcblxuICBpdChcInNob3VsZCBtZXJnZSBkYXRhcGFja2FnZS5qc29uIGlmIHByZXNlbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRhdGFwYWNrYWdlID0gYXdhaXQgbG9hZFBhY2thZ2VGcm9tR2l0aHViKFxuICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vcm9sbC9jdXJyZW5jeS1jb2Rlc1wiLFxuICAgIClcblxuICAgIGV4cGVjdChkYXRhcGFja2FnZSkudG9NYXRjaFNuYXBzaG90KClcbiAgfSlcbn0pXG4iXX0=
@@ -0,0 +1,14 @@
1
+ import type { Package } from "@frictionless-ts/metadata";
2
+ /**
3
+ * Save a package to a Github repository
4
+ * @param options Object containing the package to save and Github details
5
+ * @returns Object with the repository URL
6
+ */
7
+ export declare function savePackageToGithub(dataPackage: Package, options: {
8
+ apiKey: string;
9
+ repo: string;
10
+ org?: string;
11
+ }): Promise<{
12
+ path: string;
13
+ repoUrl: string;
14
+ }>;
@@ -0,0 +1,69 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { buffer } from "node:stream/consumers";
3
+ import { stringifyDescriptor } from "@frictionless-ts/metadata";
4
+ import { convertPackageToDescriptor } from "@frictionless-ts/metadata";
5
+ import { getPackageBasepath } from "../../../package/index.js";
6
+ import { saveResourceFiles } from "../../../resource/index.js";
7
+ import { loadFileStream } from "../../../stream/index.js";
8
+ import { makeGithubApiRequest } from "../github/index.js";
9
+ /**
10
+ * Save a package to a Github repository
11
+ * @param options Object containing the package to save and Github details
12
+ * @returns Object with the repository URL
13
+ */
14
+ export async function savePackageToGithub(dataPackage, options) {
15
+ const { apiKey, org, repo } = options;
16
+ const basepath = getPackageBasepath(dataPackage);
17
+ const githubPackage = await makeGithubApiRequest({
18
+ endpoint: org ? `/orgs/${org}/repos` : "/user/repos",
19
+ payload: { name: repo, auto_init: true },
20
+ method: "POST",
21
+ apiKey,
22
+ });
23
+ const resourceDescriptors = [];
24
+ for (const resource of dataPackage.resources) {
25
+ if (!resource.path)
26
+ continue;
27
+ resourceDescriptors.push(await saveResourceFiles(resource, {
28
+ basepath,
29
+ withRemote: false,
30
+ saveFile: async (options) => {
31
+ const stream = await loadFileStream(options.normalizedPath);
32
+ const payload = {
33
+ path: options.denormalizedPath,
34
+ content: Buffer.from(await buffer(stream)).toString("base64"),
35
+ message: `Added file "${options.denormalizedPath}"`,
36
+ };
37
+ await makeGithubApiRequest({
38
+ endpoint: `/repos/${githubPackage.owner.login}/${repo}/contents/${options.denormalizedPath}`,
39
+ method: "PUT",
40
+ payload,
41
+ apiKey,
42
+ });
43
+ return options.denormalizedPath;
44
+ },
45
+ }));
46
+ }
47
+ const descriptor = {
48
+ ...convertPackageToDescriptor(dataPackage, { basepath }),
49
+ resources: resourceDescriptors,
50
+ };
51
+ for (const denormalizedPath of ["datapackage.json"]) {
52
+ const payload = {
53
+ path: denormalizedPath,
54
+ message: `Added file "${denormalizedPath}"`,
55
+ content: Buffer.from(stringifyDescriptor(descriptor)).toString("base64"),
56
+ };
57
+ await makeGithubApiRequest({
58
+ endpoint: `/repos/${githubPackage.owner.login}/${repo}/contents/${denormalizedPath}`,
59
+ method: "PUT",
60
+ payload,
61
+ apiKey,
62
+ });
63
+ }
64
+ return {
65
+ path: `https://raw.githubusercontent.com/${githubPackage.owner.login}/${repo}/refs/heads/main/dataPackage.json`,
66
+ repoUrl: githubPackage.html_url,
67
+ };
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvZ2l0aHViL3BhY2thZ2Uvc2F2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFHekQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLFdBQW9CLEVBQ3BCLE9BSUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDckMsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFaEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxvQkFBb0IsQ0FBZ0I7UUFDOUQsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUNwRCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7UUFDeEMsTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNO0tBQ1AsQ0FBQyxDQUFBO0lBRUYsTUFBTSxtQkFBbUIsR0FBaUIsRUFBRSxDQUFBO0lBQzVDLEtBQUssTUFBTSxRQUFRLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUFFLFNBQVE7UUFFNUIsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixNQUFNLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtZQUNoQyxRQUFRO1lBQ1IsVUFBVSxFQUFFLEtBQUs7WUFDakIsUUFBUSxFQUFFLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO2dCQUUzRCxNQUFNLE9BQU8sR0FBRztvQkFDZCxJQUFJLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtvQkFDOUIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO29CQUM3RCxPQUFPLEVBQUUsZUFBZSxPQUFPLENBQUMsZ0JBQWdCLEdBQUc7aUJBQ3BELENBQUE7Z0JBRUQsTUFBTSxvQkFBb0IsQ0FBQztvQkFDekIsUUFBUSxFQUFFLFVBQVUsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxhQUFhLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDNUYsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsT0FBTztvQkFDUCxNQUFNO2lCQUNQLENBQUMsQ0FBQTtnQkFFRixPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQTtZQUNqQyxDQUFDO1NBQ0YsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUc7UUFDakIsR0FBRywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN4RCxTQUFTLEVBQUUsbUJBQW1CO0tBQy9CLENBQUE7SUFFRCxLQUFLLE1BQU0sZ0JBQWdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLE9BQU8sRUFBRSxlQUFlLGdCQUFnQixHQUFHO1lBQzNDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUN6RSxDQUFBO1FBRUQsTUFBTSxvQkFBb0IsQ0FBQztZQUN6QixRQUFRLEVBQUUsVUFBVSxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLGFBQWEsZ0JBQWdCLEVBQUU7WUFDcEYsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPO1lBQ1AsTUFBTTtTQUNQLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLHFDQUFxQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLG1DQUFtQztRQUMvRyxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVE7S0FDaEMsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwibm9kZTpidWZmZXJcIlxuaW1wb3J0IHsgYnVmZmVyIH0gZnJvbSBcIm5vZGU6c3RyZWFtL2NvbnN1bWVyc1wiXG5pbXBvcnQgdHlwZSB7IERlc2NyaXB0b3IsIFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgeyBzdHJpbmdpZnlEZXNjcmlwdG9yIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgY29udmVydFBhY2thZ2VUb0Rlc2NyaXB0b3IgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgeyBnZXRQYWNrYWdlQmFzZXBhdGggfSBmcm9tIFwiLi4vLi4vLi4vcGFja2FnZS9pbmRleC50c1wiXG5pbXBvcnQgeyBzYXZlUmVzb3VyY2VGaWxlcyB9IGZyb20gXCIuLi8uLi8uLi9yZXNvdXJjZS9pbmRleC50c1wiXG5pbXBvcnQgeyBsb2FkRmlsZVN0cmVhbSB9IGZyb20gXCIuLi8uLi8uLi9zdHJlYW0vaW5kZXgudHNcIlxuaW1wb3J0IHsgbWFrZUdpdGh1YkFwaVJlcXVlc3QgfSBmcm9tIFwiLi4vZ2l0aHViL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgR2l0aHViUGFja2FnZSB9IGZyb20gXCIuL1BhY2thZ2UudHNcIlxuXG4vKipcbiAqIFNhdmUgYSBwYWNrYWdlIHRvIGEgR2l0aHViIHJlcG9zaXRvcnlcbiAqIEBwYXJhbSBvcHRpb25zIE9iamVjdCBjb250YWluaW5nIHRoZSBwYWNrYWdlIHRvIHNhdmUgYW5kIEdpdGh1YiBkZXRhaWxzXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCB0aGUgcmVwb3NpdG9yeSBVUkxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVQYWNrYWdlVG9HaXRodWIoXG4gIGRhdGFQYWNrYWdlOiBQYWNrYWdlLFxuICBvcHRpb25zOiB7XG4gICAgYXBpS2V5OiBzdHJpbmdcbiAgICByZXBvOiBzdHJpbmdcbiAgICBvcmc/OiBzdHJpbmdcbiAgfSxcbikge1xuICBjb25zdCB7IGFwaUtleSwgb3JnLCByZXBvIH0gPSBvcHRpb25zXG4gIGNvbnN0IGJhc2VwYXRoID0gZ2V0UGFja2FnZUJhc2VwYXRoKGRhdGFQYWNrYWdlKVxuXG4gIGNvbnN0IGdpdGh1YlBhY2thZ2UgPSBhd2FpdCBtYWtlR2l0aHViQXBpUmVxdWVzdDxHaXRodWJQYWNrYWdlPih7XG4gICAgZW5kcG9pbnQ6IG9yZyA/IGAvb3Jncy8ke29yZ30vcmVwb3NgIDogXCIvdXNlci9yZXBvc1wiLFxuICAgIHBheWxvYWQ6IHsgbmFtZTogcmVwbywgYXV0b19pbml0OiB0cnVlIH0sXG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBhcGlLZXksXG4gIH0pXG5cbiAgY29uc3QgcmVzb3VyY2VEZXNjcmlwdG9yczogRGVzY3JpcHRvcltdID0gW11cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBkYXRhUGFja2FnZS5yZXNvdXJjZXMpIHtcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIGNvbnRpbnVlXG5cbiAgICByZXNvdXJjZURlc2NyaXB0b3JzLnB1c2goXG4gICAgICBhd2FpdCBzYXZlUmVzb3VyY2VGaWxlcyhyZXNvdXJjZSwge1xuICAgICAgICBiYXNlcGF0aCxcbiAgICAgICAgd2l0aFJlbW90ZTogZmFsc2UsXG4gICAgICAgIHNhdmVGaWxlOiBhc3luYyBvcHRpb25zID0+IHtcbiAgICAgICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBsb2FkRmlsZVN0cmVhbShvcHRpb25zLm5vcm1hbGl6ZWRQYXRoKVxuXG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMuZGVub3JtYWxpemVkUGF0aCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKGF3YWl0IGJ1ZmZlcihzdHJlYW0pKS50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBZGRlZCBmaWxlIFwiJHtvcHRpb25zLmRlbm9ybWFsaXplZFBhdGh9XCJgLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IG1ha2VHaXRodWJBcGlSZXF1ZXN0KHtcbiAgICAgICAgICAgIGVuZHBvaW50OiBgL3JlcG9zLyR7Z2l0aHViUGFja2FnZS5vd25lci5sb2dpbn0vJHtyZXBvfS9jb250ZW50cy8ke29wdGlvbnMuZGVub3JtYWxpemVkUGF0aH1gLFxuICAgICAgICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVub3JtYWxpemVkUGF0aFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKVxuICB9XG5cbiAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAuLi5jb252ZXJ0UGFja2FnZVRvRGVzY3JpcHRvcihkYXRhUGFja2FnZSwgeyBiYXNlcGF0aCB9KSxcbiAgICByZXNvdXJjZXM6IHJlc291cmNlRGVzY3JpcHRvcnMsXG4gIH1cblxuICBmb3IgKGNvbnN0IGRlbm9ybWFsaXplZFBhdGggb2YgW1wiZGF0YXBhY2thZ2UuanNvblwiXSkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBwYXRoOiBkZW5vcm1hbGl6ZWRQYXRoLFxuICAgICAgbWVzc2FnZTogYEFkZGVkIGZpbGUgXCIke2Rlbm9ybWFsaXplZFBhdGh9XCJgLFxuICAgICAgY29udGVudDogQnVmZmVyLmZyb20oc3RyaW5naWZ5RGVzY3JpcHRvcihkZXNjcmlwdG9yKSkudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgfVxuXG4gICAgYXdhaXQgbWFrZUdpdGh1YkFwaVJlcXVlc3Qoe1xuICAgICAgZW5kcG9pbnQ6IGAvcmVwb3MvJHtnaXRodWJQYWNrYWdlLm93bmVyLmxvZ2lufS8ke3JlcG99L2NvbnRlbnRzLyR7ZGVub3JtYWxpemVkUGF0aH1gLFxuICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgcGF5bG9hZCxcbiAgICAgIGFwaUtleSxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tLyR7Z2l0aHViUGFja2FnZS5vd25lci5sb2dpbn0vJHtyZXBvfS9yZWZzL2hlYWRzL21haW4vZGF0YVBhY2thZ2UuanNvbmAsXG4gICAgcmVwb1VybDogZ2l0aHViUGFja2FnZS5odG1sX3VybCxcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export {};