@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,53 @@
1
+ import { convertResourceToDescriptor, denormalizePath, getFilename, isRemotePath, } from "@frictionless-ts/metadata";
2
+ import invariant from "tiny-invariant";
3
+ export async function saveResourceFiles(resource, options) {
4
+ const { basepath, withRemote, withoutFolders } = options;
5
+ const descriptor = convertResourceToDescriptor(resource, { basepath });
6
+ const dedupIndexes = new Map();
7
+ const saveFile = async (path, name, index) => {
8
+ const isRemote = isRemotePath(path);
9
+ // Denormalized path always uses "/" as the path separator
10
+ let denormalizedPath = denormalizePath(path, { basepath });
11
+ const normalizedPath = path;
12
+ if (isRemote) {
13
+ if (!withRemote)
14
+ return path;
15
+ const filename = getFilename(path);
16
+ if (!filename)
17
+ return path;
18
+ denormalizedPath = filename;
19
+ }
20
+ else if (withoutFolders) {
21
+ denormalizedPath = denormalizedPath.replaceAll("/", "-");
22
+ }
23
+ const dedupIndex = dedupIndexes.get(denormalizedPath) ?? 0;
24
+ dedupIndexes.set(denormalizedPath, dedupIndex + 1);
25
+ if (dedupIndex) {
26
+ denormalizedPath = denormalizedPath.replace(/^(.*?)([^\/]+?)(\.[^\/]+(?:\.[^\/]+)*)$/, `$1$2-${dedupIndex}$3`);
27
+ }
28
+ denormalizedPath = await options.saveFile({
29
+ propertyName: name,
30
+ propertyIndex: index,
31
+ normalizedPath,
32
+ denormalizedPath,
33
+ });
34
+ return denormalizedPath;
35
+ };
36
+ if (typeof resource.path === "string") {
37
+ descriptor.path = await saveFile(resource.path, "path", 0);
38
+ }
39
+ if (Array.isArray(resource.path)) {
40
+ invariant(Array.isArray(descriptor.path), "Multipart as resource.path");
41
+ for (const [index, path] of resource.path.entries()) {
42
+ descriptor.path[index] = await saveFile(path, "path", index);
43
+ }
44
+ }
45
+ for (const name of ["dialect", "schema"]) {
46
+ const path = resource[name];
47
+ if (typeof path === "string") {
48
+ descriptor[name] = await saveFile(path, name, 0);
49
+ }
50
+ }
51
+ return descriptor;
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL3NhdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sU0FBUyxNQUFNLGdCQUFnQixDQUFBO0FBU3RDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQWtCLEVBQ2xCLE9BS0M7SUFFRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFFeEQsTUFBTSxVQUFVLEdBQUcsMkJBQTJCLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUN0RSxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUU5QyxNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxLQUFhLEVBQUUsRUFBRTtRQUNuRSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFbkMsMERBQTBEO1FBQzFELElBQUksZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDMUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFBO1FBRTNCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPLElBQUksQ0FBQTtZQUM1QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUE7WUFDMUIsZ0JBQWdCLEdBQUcsUUFBUSxDQUFBO1FBQzdCLENBQUM7YUFBTSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQzFCLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDMUQsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFFbEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FDekMseUNBQXlDLEVBQ3pDLFFBQVEsVUFBVSxJQUFJLENBQ3ZCLENBQUE7UUFDSCxDQUFDO1FBRUQsZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3hDLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLGNBQWM7WUFDZCxnQkFBZ0I7U0FDakIsQ0FBQyxDQUFBO1FBRUYsT0FBTyxnQkFBZ0IsQ0FBQTtJQUN6QixDQUFDLENBQUE7SUFFRCxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxVQUFVLENBQUMsSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLDRCQUE0QixDQUFDLENBQUE7UUFDdkUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBVSxFQUFFLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7XG4gIGNvbnZlcnRSZXNvdXJjZVRvRGVzY3JpcHRvcixcbiAgZGVub3JtYWxpemVQYXRoLFxuICBnZXRGaWxlbmFtZSxcbiAgaXNSZW1vdGVQYXRoLFxufSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgaW52YXJpYW50IGZyb20gXCJ0aW55LWludmFyaWFudFwiXG5cbmV4cG9ydCB0eXBlIFNhdmVGaWxlID0gKG9wdGlvbnM6IHtcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmdcbiAgcHJvcGVydHlJbmRleDogbnVtYmVyXG4gIG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmdcbiAgZGVub3JtYWxpemVkUGF0aDogc3RyaW5nXG59KSA9PiBQcm9taXNlPHN0cmluZz5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVSZXNvdXJjZUZpbGVzKFxuICByZXNvdXJjZTogUmVzb3VyY2UsXG4gIG9wdGlvbnM6IHtcbiAgICBzYXZlRmlsZTogU2F2ZUZpbGVcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICAgIHdpdGhSZW1vdGU/OiBib29sZWFuXG4gICAgd2l0aG91dEZvbGRlcnM/OiBib29sZWFuXG4gIH0sXG4pIHtcbiAgY29uc3QgeyBiYXNlcGF0aCwgd2l0aFJlbW90ZSwgd2l0aG91dEZvbGRlcnMgfSA9IG9wdGlvbnNcblxuICBjb25zdCBkZXNjcmlwdG9yID0gY29udmVydFJlc291cmNlVG9EZXNjcmlwdG9yKHJlc291cmNlLCB7IGJhc2VwYXRoIH0pXG4gIGNvbnN0IGRlZHVwSW5kZXhlcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KClcblxuICBjb25zdCBzYXZlRmlsZSA9IGFzeW5jIChwYXRoOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlzUmVtb3RlID0gaXNSZW1vdGVQYXRoKHBhdGgpXG5cbiAgICAvLyBEZW5vcm1hbGl6ZWQgcGF0aCBhbHdheXMgdXNlcyBcIi9cIiBhcyB0aGUgcGF0aCBzZXBhcmF0b3JcbiAgICBsZXQgZGVub3JtYWxpemVkUGF0aCA9IGRlbm9ybWFsaXplUGF0aChwYXRoLCB7IGJhc2VwYXRoIH0pXG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoXG5cbiAgICBpZiAoaXNSZW1vdGUpIHtcbiAgICAgIGlmICghd2l0aFJlbW90ZSkgcmV0dXJuIHBhdGhcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gZ2V0RmlsZW5hbWUocGF0aClcbiAgICAgIGlmICghZmlsZW5hbWUpIHJldHVybiBwYXRoXG4gICAgICBkZW5vcm1hbGl6ZWRQYXRoID0gZmlsZW5hbWVcbiAgICB9IGVsc2UgaWYgKHdpdGhvdXRGb2xkZXJzKSB7XG4gICAgICBkZW5vcm1hbGl6ZWRQYXRoID0gZGVub3JtYWxpemVkUGF0aC5yZXBsYWNlQWxsKFwiL1wiLCBcIi1cIilcbiAgICB9XG5cbiAgICBjb25zdCBkZWR1cEluZGV4ID0gZGVkdXBJbmRleGVzLmdldChkZW5vcm1hbGl6ZWRQYXRoKSA/PyAwXG4gICAgZGVkdXBJbmRleGVzLnNldChkZW5vcm1hbGl6ZWRQYXRoLCBkZWR1cEluZGV4ICsgMSlcblxuICAgIGlmIChkZWR1cEluZGV4KSB7XG4gICAgICBkZW5vcm1hbGl6ZWRQYXRoID0gZGVub3JtYWxpemVkUGF0aC5yZXBsYWNlKFxuICAgICAgICAvXiguKj8pKFteXFwvXSs/KShcXC5bXlxcL10rKD86XFwuW15cXC9dKykqKSQvLFxuICAgICAgICBgJDEkMi0ke2RlZHVwSW5kZXh9JDNgLFxuICAgICAgKVxuICAgIH1cblxuICAgIGRlbm9ybWFsaXplZFBhdGggPSBhd2FpdCBvcHRpb25zLnNhdmVGaWxlKHtcbiAgICAgIHByb3BlcnR5TmFtZTogbmFtZSxcbiAgICAgIHByb3BlcnR5SW5kZXg6IGluZGV4LFxuICAgICAgbm9ybWFsaXplZFBhdGgsXG4gICAgICBkZW5vcm1hbGl6ZWRQYXRoLFxuICAgIH0pXG5cbiAgICByZXR1cm4gZGVub3JtYWxpemVkUGF0aFxuICB9XG5cbiAgaWYgKHR5cGVvZiByZXNvdXJjZS5wYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgZGVzY3JpcHRvci5wYXRoID0gYXdhaXQgc2F2ZUZpbGUocmVzb3VyY2UucGF0aCwgXCJwYXRoXCIsIDApXG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvdXJjZS5wYXRoKSkge1xuICAgIGludmFyaWFudChBcnJheS5pc0FycmF5KGRlc2NyaXB0b3IucGF0aCksIFwiTXVsdGlwYXJ0IGFzIHJlc291cmNlLnBhdGhcIilcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgcGF0aF0gb2YgcmVzb3VyY2UucGF0aC5lbnRyaWVzKCkpIHtcbiAgICAgIGRlc2NyaXB0b3IucGF0aFtpbmRleF0gPSBhd2FpdCBzYXZlRmlsZShwYXRoLCBcInBhdGhcIiwgaW5kZXgpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIFtcImRpYWxlY3RcIiwgXCJzY2hlbWFcIl0gYXMgY29uc3QpIHtcbiAgICBjb25zdCBwYXRoID0gcmVzb3VyY2VbbmFtZV1cbiAgICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGRlc2NyaXB0b3JbbmFtZV0gPSBhd2FpdCBzYXZlRmlsZShwYXRoLCBuYW1lLCAwKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXNjcmlwdG9yXG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,107 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { saveResourceFiles } from "./save.js";
3
+ describe("saveResourceFiles", () => {
4
+ it.each([
5
+ {
6
+ description: "local path",
7
+ basepath: "data",
8
+ resource: { path: "data/table.csv" },
9
+ descriptor: { path: "table.csv" },
10
+ },
11
+ {
12
+ description: "local paths",
13
+ basepath: "data",
14
+ resource: { path: ["data/table1.csv", "data/table2.csv"] },
15
+ descriptor: { path: ["table1.csv", "table2.csv"] },
16
+ },
17
+ {
18
+ description: "local path and remote path",
19
+ basepath: "data",
20
+ resource: {
21
+ path: "data/table.csv",
22
+ schema: "https://example.com/schema.json",
23
+ },
24
+ descriptor: {
25
+ path: "table.csv",
26
+ schema: "https://example.com/schema.json",
27
+ },
28
+ },
29
+ {
30
+ description: "local path and remote path using withRemote",
31
+ basepath: "data",
32
+ withRemote: true,
33
+ resource: {
34
+ type: "table",
35
+ path: "data/table.csv",
36
+ schema: "https://example.com/schema.json",
37
+ },
38
+ descriptor: {
39
+ type: "table",
40
+ path: "table.csv",
41
+ schema: "schema.json",
42
+ },
43
+ },
44
+ {
45
+ description: "remote paths with the same filename using withRemote",
46
+ basepath: "data",
47
+ withRemote: true,
48
+ resource: {
49
+ path: [
50
+ "http://example1.com/table.csv",
51
+ "http://example2.com/table.csv",
52
+ "http://example3.com/table.csv",
53
+ "http://example4.com/table.csv.zip",
54
+ "http://example5.com/table.csv.zip",
55
+ ],
56
+ },
57
+ descriptor: {
58
+ path: [
59
+ "table.csv",
60
+ "table-1.csv",
61
+ "table-2.csv",
62
+ "table.csv.zip",
63
+ "table-1.csv.zip",
64
+ ],
65
+ },
66
+ },
67
+ {
68
+ description: "local paths in different folders",
69
+ basepath: "data",
70
+ resource: {
71
+ type: "table",
72
+ path: "data/folder1/table.csv",
73
+ schema: "data/folder2/schema.json",
74
+ },
75
+ descriptor: {
76
+ type: "table",
77
+ path: "folder1/table.csv",
78
+ schema: "folder2/schema.json",
79
+ },
80
+ },
81
+ {
82
+ description: "local paths in different folders using withoutFolders",
83
+ basepath: "data",
84
+ withoutFolders: true,
85
+ resource: {
86
+ type: "table",
87
+ path: "data/folder1/table.csv",
88
+ schema: "data/folder2/schema.json",
89
+ },
90
+ descriptor: {
91
+ type: "table",
92
+ path: "folder1-table.csv",
93
+ schema: "folder2-schema.json",
94
+ },
95
+ },
96
+ ])("$description", async ({ resource, basepath, withRemote, withoutFolders, descriptor }) => {
97
+ expect(
98
+ // @ts-ignore
99
+ await saveResourceFiles(resource, {
100
+ basepath,
101
+ withRemote,
102
+ withoutFolders,
103
+ saveFile: async (props) => props.denormalizedPath,
104
+ })).toEqual(descriptor);
105
+ });
106
+ });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVzb3VyY2Uvc2F2ZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFN0MsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ047WUFDRSxXQUFXLEVBQUUsWUFBWTtZQUN6QixRQUFRLEVBQUUsTUFBTTtZQUNoQixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDcEMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtTQUNsQztRQUNEO1lBQ0UsV0FBVyxFQUFFLGFBQWE7WUFDMUIsUUFBUSxFQUFFLE1BQU07WUFDaEIsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtZQUMxRCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQUU7U0FDbkQ7UUFDRDtZQUNFLFdBQVcsRUFBRSw0QkFBNEI7WUFDekMsUUFBUSxFQUFFLE1BQU07WUFDaEIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLE1BQU0sRUFBRSxpQ0FBaUM7YUFDMUM7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLE1BQU0sRUFBRSxpQ0FBaUM7YUFDMUM7U0FDRjtRQUNEO1lBQ0UsV0FBVyxFQUFFLDZDQUE2QztZQUMxRCxRQUFRLEVBQUUsTUFBTTtZQUNoQixVQUFVLEVBQUUsSUFBSTtZQUNoQixRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsTUFBTSxFQUFFLGlDQUFpQzthQUMxQztZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsV0FBVztnQkFDakIsTUFBTSxFQUFFLGFBQWE7YUFDdEI7U0FDRjtRQUNEO1lBQ0UsV0FBVyxFQUFFLHNEQUFzRDtZQUNuRSxRQUFRLEVBQUUsTUFBTTtZQUNoQixVQUFVLEVBQUUsSUFBSTtZQUNoQixRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFO29CQUNKLCtCQUErQjtvQkFDL0IsK0JBQStCO29CQUMvQiwrQkFBK0I7b0JBQy9CLG1DQUFtQztvQkFDbkMsbUNBQW1DO2lCQUNwQzthQUNGO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRTtvQkFDSixXQUFXO29CQUNYLGFBQWE7b0JBQ2IsYUFBYTtvQkFDYixlQUFlO29CQUNmLGlCQUFpQjtpQkFDbEI7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsa0NBQWtDO1lBQy9DLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixNQUFNLEVBQUUsMEJBQTBCO2FBQ25DO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxPQUFPO2dCQUNiLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLE1BQU0sRUFBRSxxQkFBcUI7YUFDOUI7U0FDRjtRQUNEO1lBQ0UsV0FBVyxFQUFFLHVEQUF1RDtZQUNwRSxRQUFRLEVBQUUsTUFBTTtZQUNoQixjQUFjLEVBQUUsSUFBSTtZQUNwQixRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsTUFBTSxFQUFFLDBCQUEwQjthQUNuQztZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixNQUFNLEVBQUUscUJBQXFCO2FBQzlCO1NBQ0Y7S0FDRixDQUFDLENBQ0EsY0FBYyxFQUNkLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO1FBQ3ZFLE1BQU07UUFDSixhQUFhO1FBQ2IsTUFBTSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUU7WUFDaEMsUUFBUTtZQUNSLFVBQVU7WUFDVixjQUFjO1lBQ2QsUUFBUSxFQUFFLEtBQUssRUFBQyxLQUFLLEVBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7U0FDaEQsQ0FBQyxDQUNILENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZCLENBQUMsQ0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgc2F2ZVJlc291cmNlRmlsZXMgfSBmcm9tIFwiLi9zYXZlLnRzXCJcblxuZGVzY3JpYmUoXCJzYXZlUmVzb3VyY2VGaWxlc1wiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIHBhdGhcIixcbiAgICAgIGJhc2VwYXRoOiBcImRhdGFcIixcbiAgICAgIHJlc291cmNlOiB7IHBhdGg6IFwiZGF0YS90YWJsZS5jc3ZcIiB9LFxuICAgICAgZGVzY3JpcHRvcjogeyBwYXRoOiBcInRhYmxlLmNzdlwiIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJsb2NhbCBwYXRoc1wiLFxuICAgICAgYmFzZXBhdGg6IFwiZGF0YVwiLFxuICAgICAgcmVzb3VyY2U6IHsgcGF0aDogW1wiZGF0YS90YWJsZTEuY3N2XCIsIFwiZGF0YS90YWJsZTIuY3N2XCJdIH0sXG4gICAgICBkZXNjcmlwdG9yOiB7IHBhdGg6IFtcInRhYmxlMS5jc3ZcIiwgXCJ0YWJsZTIuY3N2XCJdIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJsb2NhbCBwYXRoIGFuZCByZW1vdGUgcGF0aFwiLFxuICAgICAgYmFzZXBhdGg6IFwiZGF0YVwiLFxuICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgcGF0aDogXCJkYXRhL3RhYmxlLmNzdlwiLFxuICAgICAgICBzY2hlbWE6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9zY2hlbWEuanNvblwiLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0b3I6IHtcbiAgICAgICAgcGF0aDogXCJ0YWJsZS5jc3ZcIixcbiAgICAgICAgc2NoZW1hOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vc2NoZW1hLmpzb25cIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJsb2NhbCBwYXRoIGFuZCByZW1vdGUgcGF0aCB1c2luZyB3aXRoUmVtb3RlXCIsXG4gICAgICBiYXNlcGF0aDogXCJkYXRhXCIsXG4gICAgICB3aXRoUmVtb3RlOiB0cnVlLFxuICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgdHlwZTogXCJ0YWJsZVwiLFxuICAgICAgICBwYXRoOiBcImRhdGEvdGFibGUuY3N2XCIsXG4gICAgICAgIHNjaGVtYTogXCJodHRwczovL2V4YW1wbGUuY29tL3NjaGVtYS5qc29uXCIsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRvcjoge1xuICAgICAgICB0eXBlOiBcInRhYmxlXCIsXG4gICAgICAgIHBhdGg6IFwidGFibGUuY3N2XCIsXG4gICAgICAgIHNjaGVtYTogXCJzY2hlbWEuanNvblwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBwYXRocyB3aXRoIHRoZSBzYW1lIGZpbGVuYW1lIHVzaW5nIHdpdGhSZW1vdGVcIixcbiAgICAgIGJhc2VwYXRoOiBcImRhdGFcIixcbiAgICAgIHdpdGhSZW1vdGU6IHRydWUsXG4gICAgICByZXNvdXJjZToge1xuICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgXCJodHRwOi8vZXhhbXBsZTEuY29tL3RhYmxlLmNzdlwiLFxuICAgICAgICAgIFwiaHR0cDovL2V4YW1wbGUyLmNvbS90YWJsZS5jc3ZcIixcbiAgICAgICAgICBcImh0dHA6Ly9leGFtcGxlMy5jb20vdGFibGUuY3N2XCIsXG4gICAgICAgICAgXCJodHRwOi8vZXhhbXBsZTQuY29tL3RhYmxlLmNzdi56aXBcIixcbiAgICAgICAgICBcImh0dHA6Ly9leGFtcGxlNS5jb20vdGFibGUuY3N2LnppcFwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0b3I6IHtcbiAgICAgICAgcGF0aDogW1xuICAgICAgICAgIFwidGFibGUuY3N2XCIsXG4gICAgICAgICAgXCJ0YWJsZS0xLmNzdlwiLFxuICAgICAgICAgIFwidGFibGUtMi5jc3ZcIixcbiAgICAgICAgICBcInRhYmxlLmNzdi56aXBcIixcbiAgICAgICAgICBcInRhYmxlLTEuY3N2LnppcFwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIHBhdGhzIGluIGRpZmZlcmVudCBmb2xkZXJzXCIsXG4gICAgICBiYXNlcGF0aDogXCJkYXRhXCIsXG4gICAgICByZXNvdXJjZToge1xuICAgICAgICB0eXBlOiBcInRhYmxlXCIsXG4gICAgICAgIHBhdGg6IFwiZGF0YS9mb2xkZXIxL3RhYmxlLmNzdlwiLFxuICAgICAgICBzY2hlbWE6IFwiZGF0YS9mb2xkZXIyL3NjaGVtYS5qc29uXCIsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRvcjoge1xuICAgICAgICB0eXBlOiBcInRhYmxlXCIsXG4gICAgICAgIHBhdGg6IFwiZm9sZGVyMS90YWJsZS5jc3ZcIixcbiAgICAgICAgc2NoZW1hOiBcImZvbGRlcjIvc2NoZW1hLmpzb25cIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJsb2NhbCBwYXRocyBpbiBkaWZmZXJlbnQgZm9sZGVycyB1c2luZyB3aXRob3V0Rm9sZGVyc1wiLFxuICAgICAgYmFzZXBhdGg6IFwiZGF0YVwiLFxuICAgICAgd2l0aG91dEZvbGRlcnM6IHRydWUsXG4gICAgICByZXNvdXJjZToge1xuICAgICAgICB0eXBlOiBcInRhYmxlXCIsXG4gICAgICAgIHBhdGg6IFwiZGF0YS9mb2xkZXIxL3RhYmxlLmNzdlwiLFxuICAgICAgICBzY2hlbWE6IFwiZGF0YS9mb2xkZXIyL3NjaGVtYS5qc29uXCIsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRvcjoge1xuICAgICAgICB0eXBlOiBcInRhYmxlXCIsXG4gICAgICAgIHBhdGg6IFwiZm9sZGVyMS10YWJsZS5jc3ZcIixcbiAgICAgICAgc2NoZW1hOiBcImZvbGRlcjItc2NoZW1hLmpzb25cIixcbiAgICAgIH0sXG4gICAgfSxcbiAgXSkoXG4gICAgXCIkZGVzY3JpcHRpb25cIixcbiAgICBhc3luYyAoeyByZXNvdXJjZSwgYmFzZXBhdGgsIHdpdGhSZW1vdGUsIHdpdGhvdXRGb2xkZXJzLCBkZXNjcmlwdG9yIH0pID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBhd2FpdCBzYXZlUmVzb3VyY2VGaWxlcyhyZXNvdXJjZSwge1xuICAgICAgICAgIGJhc2VwYXRoLFxuICAgICAgICAgIHdpdGhSZW1vdGUsXG4gICAgICAgICAgd2l0aG91dEZvbGRlcnMsXG4gICAgICAgICAgc2F2ZUZpbGU6IGFzeW5jIHByb3BzID0+IHByb3BzLmRlbm9ybWFsaXplZFBhdGgsXG4gICAgICAgIH0pLFxuICAgICAgKS50b0VxdWFsKGRlc2NyaXB0b3IpXG4gICAgfSxcbiAgKVxufSlcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import type { Readable } from "node:stream";
2
+ import { default as Multistream } from "multistream";
3
+ export declare function concatFileStreams(streams: Readable[]): Multistream;
@@ -0,0 +1,5 @@
1
+ import { default as Multistream } from "multistream";
2
+ export function concatFileStreams(streams) {
3
+ return new Multistream(streams);
4
+ }
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3RyZWFtL2NvbmNhdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVwRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBbUI7SUFDbkQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiXG5pbXBvcnQgeyBkZWZhdWx0IGFzIE11bHRpc3RyZWFtIH0gZnJvbSBcIm11bHRpc3RyZWFtXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdEZpbGVTdHJlYW1zKHN0cmVhbXM6IFJlYWRhYmxlW10pIHtcbiAgcmV0dXJuIG5ldyBNdWx0aXN0cmVhbShzdHJlYW1zKVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export { concatFileStreams } from "./concat.ts";
2
+ export { loadFileStream } from "./load.ts";
3
+ export { saveFileStream } from "./save.ts";
@@ -0,0 +1,4 @@
1
+ export { concatFileStreams } from "./concat.js";
2
+ export { loadFileStream } from "./load.js";
3
+ export { saveFileStream } from "./save.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zdHJlYW0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGNvbmNhdEZpbGVTdHJlYW1zIH0gZnJvbSBcIi4vY29uY2F0LnRzXCJcbmV4cG9ydCB7IGxvYWRGaWxlU3RyZWFtIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5leHBvcnQgeyBzYXZlRmlsZVN0cmVhbSB9IGZyb20gXCIuL3NhdmUudHNcIlxuIl19
@@ -0,0 +1,5 @@
1
+ import { Readable } from "node:stream";
2
+ export declare function loadFileStream(path: string | string[], options?: {
3
+ index?: number;
4
+ maxBytes?: number;
5
+ }): Promise<Readable | import("fs").ReadStream>;
@@ -0,0 +1,46 @@
1
+ import { createReadStream } from "node:fs";
2
+ import { Readable, Transform } from "node:stream";
3
+ import { isRemotePath } from "@frictionless-ts/metadata";
4
+ export async function loadFileStream(path, options) {
5
+ const index = options?.index ?? 0;
6
+ const paths = Array.isArray(path) ? path : [path];
7
+ const indexPath = paths[index];
8
+ if (!indexPath) {
9
+ throw new Error(`Cannot stream resource ${indexPath} at index ${index}`);
10
+ }
11
+ const isRemote = isRemotePath(indexPath);
12
+ const stream = isRemote
13
+ ? await loadRemoteFileStream(indexPath, options)
14
+ : await loadLocalFileStream(indexPath, options);
15
+ return stream;
16
+ }
17
+ async function loadRemoteFileStream(path, options) {
18
+ const response = await fetch(path);
19
+ if (!response.body) {
20
+ throw new Error(`Cannot stream remote resource: ${path}`);
21
+ }
22
+ let stream = Readable.fromWeb(response.body);
23
+ if (options?.maxBytes) {
24
+ stream = limitBytesStream(stream, options.maxBytes);
25
+ }
26
+ return stream;
27
+ }
28
+ async function loadLocalFileStream(path, options) {
29
+ const end = options?.maxBytes ? options.maxBytes - 1 : undefined;
30
+ return createReadStream(path, { end });
31
+ }
32
+ function limitBytesStream(inputStream, maxBytes) {
33
+ let total = 0;
34
+ return inputStream.pipe(new Transform({
35
+ transform(chunk, _encoding, callback) {
36
+ if (total >= maxBytes) {
37
+ this.push(null);
38
+ callback();
39
+ return;
40
+ }
41
+ total += chunk.length;
42
+ callback(null, chunk);
43
+ },
44
+ }));
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3N0cmVhbS9sb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEQsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLElBQXVCLEVBQ3ZCLE9BR0M7SUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQTtJQUVqQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTlCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFNBQVMsYUFBYSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDeEMsTUFBTSxNQUFNLEdBQUcsUUFBUTtRQUNyQixDQUFDLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVqRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsb0JBQW9CLENBQ2pDLElBQVksRUFDWixPQUErQjtJQUUvQixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLElBQUksRUFBRSxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTVDLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLElBQVksRUFDWixPQUErQjtJQUUvQixNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2hFLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtBQUN4QyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxXQUFxQixFQUFFLFFBQWdCO0lBQy9ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUNiLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FDckIsSUFBSSxTQUFTLENBQUM7UUFDWixTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRO1lBQ2xDLElBQUksS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNmLFFBQVEsRUFBRSxDQUFBO2dCQUNWLE9BQU07WUFDUixDQUFDO1lBRUQsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUE7WUFDckIsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN2QixDQUFDO0tBQ0YsQ0FBQyxDQUNILENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IFJlYWRhYmxlLCBUcmFuc2Zvcm0gfSBmcm9tIFwibm9kZTpzdHJlYW1cIlxuaW1wb3J0IHsgaXNSZW1vdGVQYXRoIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEZpbGVTdHJlYW0oXG4gIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICBvcHRpb25zPzoge1xuICAgIGluZGV4PzogbnVtYmVyXG4gICAgbWF4Qnl0ZXM/OiBudW1iZXJcbiAgfSxcbikge1xuICBjb25zdCBpbmRleCA9IG9wdGlvbnM/LmluZGV4ID8/IDBcblxuICBjb25zdCBwYXRocyA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdXG4gIGNvbnN0IGluZGV4UGF0aCA9IHBhdGhzW2luZGV4XVxuXG4gIGlmICghaW5kZXhQYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3RyZWFtIHJlc291cmNlICR7aW5kZXhQYXRofSBhdCBpbmRleCAke2luZGV4fWApXG4gIH1cblxuICBjb25zdCBpc1JlbW90ZSA9IGlzUmVtb3RlUGF0aChpbmRleFBhdGgpXG4gIGNvbnN0IHN0cmVhbSA9IGlzUmVtb3RlXG4gICAgPyBhd2FpdCBsb2FkUmVtb3RlRmlsZVN0cmVhbShpbmRleFBhdGgsIG9wdGlvbnMpXG4gICAgOiBhd2FpdCBsb2FkTG9jYWxGaWxlU3RyZWFtKGluZGV4UGF0aCwgb3B0aW9ucylcblxuICByZXR1cm4gc3RyZWFtXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRSZW1vdGVGaWxlU3RyZWFtKFxuICBwYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiB7IG1heEJ5dGVzPzogbnVtYmVyIH0sXG4pIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChwYXRoKVxuICBpZiAoIXJlc3BvbnNlLmJvZHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzdHJlYW0gcmVtb3RlIHJlc291cmNlOiAke3BhdGh9YClcbiAgfVxuXG4gIGxldCBzdHJlYW0gPSBSZWFkYWJsZS5mcm9tV2ViKHJlc3BvbnNlLmJvZHkpXG5cbiAgaWYgKG9wdGlvbnM/Lm1heEJ5dGVzKSB7XG4gICAgc3RyZWFtID0gbGltaXRCeXRlc1N0cmVhbShzdHJlYW0sIG9wdGlvbnMubWF4Qnl0ZXMpXG4gIH1cblxuICByZXR1cm4gc3RyZWFtXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRMb2NhbEZpbGVTdHJlYW0oXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgbWF4Qnl0ZXM/OiBudW1iZXIgfSxcbikge1xuICBjb25zdCBlbmQgPSBvcHRpb25zPy5tYXhCeXRlcyA/IG9wdGlvbnMubWF4Qnl0ZXMgLSAxIDogdW5kZWZpbmVkXG4gIHJldHVybiBjcmVhdGVSZWFkU3RyZWFtKHBhdGgsIHsgZW5kIH0pXG59XG5cbmZ1bmN0aW9uIGxpbWl0Qnl0ZXNTdHJlYW0oaW5wdXRTdHJlYW06IFJlYWRhYmxlLCBtYXhCeXRlczogbnVtYmVyKSB7XG4gIGxldCB0b3RhbCA9IDBcbiAgcmV0dXJuIGlucHV0U3RyZWFtLnBpcGUoXG4gICAgbmV3IFRyYW5zZm9ybSh7XG4gICAgICB0cmFuc2Zvcm0oY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRvdGFsID49IG1heEJ5dGVzKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdG90YWwgKz0gY2h1bmsubGVuZ3RoXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGNodW5rKVxuICAgICAgfSxcbiAgICB9KSxcbiAgKVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ import type { Readable } from "node:stream";
2
+ export declare function saveFileStream(stream: Readable, options: {
3
+ path: string;
4
+ overwrite?: boolean;
5
+ }): Promise<void>;
@@ -0,0 +1,13 @@
1
+ import { createWriteStream } from "node:fs";
2
+ import { mkdir } from "node:fs/promises";
3
+ import { dirname } from "node:path";
4
+ import { pipeline } from "node:stream/promises";
5
+ export async function saveFileStream(stream, options) {
6
+ const { path, overwrite } = options;
7
+ // It is an equivalent to ensureDir function that won't overwrite an existing directory
8
+ await mkdir(dirname(path), { recursive: true });
9
+ await pipeline(stream,
10
+ // The "wx" flag ensures that the file won't overwrite an existing file
11
+ createWriteStream(path, { flags: overwrite ? "w" : "wx" }));
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3N0cmVhbS9zYXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFL0MsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLE1BQWdCLEVBQ2hCLE9BR0M7SUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUVuQyx1RkFBdUY7SUFDdkYsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFFL0MsTUFBTSxRQUFRLENBQ1osTUFBTTtJQUNOLHVFQUF1RTtJQUN2RSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQzNELENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0gfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB0eXBlIHsgUmVhZGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIlxuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwibm9kZTpzdHJlYW0vcHJvbWlzZXNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZUZpbGVTdHJlYW0oXG4gIHN0cmVhbTogUmVhZGFibGUsXG4gIG9wdGlvbnM6IHtcbiAgICBwYXRoOiBzdHJpbmdcbiAgICBvdmVyd3JpdGU/OiBib29sZWFuXG4gIH0sXG4pIHtcbiAgY29uc3QgeyBwYXRoLCBvdmVyd3JpdGUgfSA9IG9wdGlvbnNcblxuICAvLyBJdCBpcyBhbiBlcXVpdmFsZW50IHRvIGVuc3VyZURpciBmdW5jdGlvbiB0aGF0IHdvbid0IG92ZXJ3cml0ZSBhbiBleGlzdGluZyBkaXJlY3RvcnlcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSlcblxuICBhd2FpdCBwaXBlbGluZShcbiAgICBzdHJlYW0sXG4gICAgLy8gVGhlIFwid3hcIiBmbGFnIGVuc3VyZXMgdGhhdCB0aGUgZmlsZSB3b24ndCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgZmlsZVxuICAgIGNyZWF0ZVdyaXRlU3RyZWFtKHBhdGgsIHsgZmxhZ3M6IG92ZXJ3cml0ZSA/IFwid1wiIDogXCJ3eFwiIH0pLFxuICApXG59XG4iXX0=
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@frictionless-ts/dataset",
3
+ "type": "module",
4
+ "version": "1.0.1",
5
+ "exports": "./build/index.js",
6
+ "sideEffects": false,
7
+ "files": [
8
+ "build"
9
+ ],
10
+ "license": "MIT",
11
+ "author": "Evgeny Karev",
12
+ "repository": "https://github.com/frictionlessdata/frictionless-ts",
13
+ "description": "Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames",
14
+ "keywords": [
15
+ "frictionless",
16
+ "data",
17
+ "polars",
18
+ "dataframe",
19
+ "datapackage",
20
+ "tableschema",
21
+ "typescript",
22
+ "validation",
23
+ "quality",
24
+ "fair",
25
+ "dataset",
26
+ "ckan",
27
+ "datahub"
28
+ ],
29
+ "dependencies": {
30
+ "chardet": "^2.1.0",
31
+ "exit-hook": "^4.0.0",
32
+ "fflate": "^0.8.2",
33
+ "hasha": "^6.0.0",
34
+ "isbinaryfile": "^5.0.4",
35
+ "multistream": "^4.1.0",
36
+ "p-all": "^5.0.1",
37
+ "p-map": "^7.0.3",
38
+ "tempy": "3.1.0",
39
+ "tiny-invariant": "^1.3.3",
40
+ "@frictionless-ts/metadata": "1.0.1"
41
+ },
42
+ "devDependencies": {
43
+ "@types/multistream": "4.1.3"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc"
47
+ }
48
+ }