@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.
- package/README.md +3 -0
- package/build/file/copy.d.ts +4 -0
- package/build/file/copy.js +7 -0
- package/build/file/copy.spec.d.ts +1 -0
- package/build/file/copy.spec.js +104 -0
- package/build/file/describe.d.ts +7 -0
- package/build/file/describe.js +9 -0
- package/build/file/fetch.d.ts +2 -0
- package/build/file/fetch.js +21 -0
- package/build/file/index.d.ts +9 -0
- package/build/file/index.js +10 -0
- package/build/file/infer.d.ts +10 -0
- package/build/file/infer.js +48 -0
- package/build/file/infer.spec.d.ts +1 -0
- package/build/file/infer.spec.js +141 -0
- package/build/file/load.d.ts +3 -0
- package/build/file/load.js +7 -0
- package/build/file/path.d.ts +2 -0
- package/build/file/path.js +17 -0
- package/build/file/save.d.ts +3 -0
- package/build/file/save.js +7 -0
- package/build/file/temp.d.ts +11 -0
- package/build/file/temp.js +23 -0
- package/build/file/validate.d.ts +6 -0
- package/build/file/validate.js +47 -0
- package/build/file/validate.spec.d.ts +1 -0
- package/build/file/validate.spec.js +180 -0
- package/build/folder/create.d.ts +1 -0
- package/build/folder/create.js +5 -0
- package/build/folder/index.d.ts +2 -0
- package/build/folder/index.js +3 -0
- package/build/folder/temp.d.ts +3 -0
- package/build/folder/temp.js +16 -0
- package/build/index.d.ts +36 -0
- package/build/index.js +35 -0
- package/build/package/index.d.ts +2 -0
- package/build/package/index.js +3 -0
- package/build/package/merge.d.ts +23 -0
- package/build/package/merge.js +12 -0
- package/build/package/path.d.ts +3 -0
- package/build/package/path.js +43 -0
- package/build/package/path.spec.d.ts +1 -0
- package/build/package/path.spec.js +56 -0
- package/build/plugin.d.ts +11 -0
- package/build/plugin.js +2 -0
- package/build/plugins/ckan/ckan/index.d.ts +1 -0
- package/build/plugins/ckan/ckan/index.js +2 -0
- package/build/plugins/ckan/ckan/request.d.ts +11 -0
- package/build/plugins/ckan/ckan/request.js +35 -0
- package/build/plugins/ckan/index.d.ts +4 -0
- package/build/plugins/ckan/index.js +5 -0
- package/build/plugins/ckan/package/Organization.d.ts +21 -0
- package/build/plugins/ckan/package/Organization.js +2 -0
- package/build/plugins/ckan/package/Package.d.ts +76 -0
- package/build/plugins/ckan/package/Package.js +2 -0
- package/build/plugins/ckan/package/Tag.d.ts +17 -0
- package/build/plugins/ckan/package/Tag.js +2 -0
- package/build/plugins/ckan/package/convert/fromCkan.d.ts +3 -0
- package/build/plugins/ckan/package/convert/fromCkan.js +63 -0
- package/build/plugins/ckan/package/convert/fromCkan.spec.d.ts +1 -0
- package/build/plugins/ckan/package/convert/fromCkan.spec.js +80 -0
- package/build/plugins/ckan/package/convert/toCkan.d.ts +22 -0
- package/build/plugins/ckan/package/convert/toCkan.js +51 -0
- package/build/plugins/ckan/package/convert/toCkan.spec.d.ts +1 -0
- package/build/plugins/ckan/package/convert/toCkan.spec.js +153 -0
- package/build/plugins/ckan/package/fixtures/ckan-package.json +308 -0
- package/build/plugins/ckan/package/index.d.ts +7 -0
- package/build/plugins/ckan/package/index.js +5 -0
- package/build/plugins/ckan/package/load.d.ts +21 -0
- package/build/plugins/ckan/package/load.js +74 -0
- package/build/plugins/ckan/package/load.spec.d.ts +1 -0
- package/build/plugins/ckan/package/load.spec.js +11 -0
- package/build/plugins/ckan/package/save.d.ts +10 -0
- package/build/plugins/ckan/package/save.js +83 -0
- package/build/plugins/ckan/package/save.spec.d.ts +1 -0
- package/build/plugins/ckan/package/save.spec.js +319 -0
- package/build/plugins/ckan/plugin.d.ts +19 -0
- package/build/plugins/ckan/plugin.js +18 -0
- package/build/plugins/ckan/plugin.spec.d.ts +1 -0
- package/build/plugins/ckan/plugin.spec.js +83 -0
- package/build/plugins/ckan/resource/Resource.d.ts +56 -0
- package/build/plugins/ckan/resource/Resource.js +2 -0
- package/build/plugins/ckan/resource/convert/fromCkan.d.ts +3 -0
- package/build/plugins/ckan/resource/convert/fromCkan.js +39 -0
- package/build/plugins/ckan/resource/convert/toCkan.d.ts +3 -0
- package/build/plugins/ckan/resource/convert/toCkan.js +20 -0
- package/build/plugins/ckan/resource/index.d.ts +3 -0
- package/build/plugins/ckan/resource/index.js +3 -0
- package/build/plugins/ckan/schema/Field.d.ts +34 -0
- package/build/plugins/ckan/schema/Field.js +2 -0
- package/build/plugins/ckan/schema/Schema.d.ts +10 -0
- package/build/plugins/ckan/schema/Schema.js +2 -0
- package/build/plugins/ckan/schema/convert/fixtures/ckan-schema.json +115 -0
- package/build/plugins/ckan/schema/convert/fromCkan.d.ts +3 -0
- package/build/plugins/ckan/schema/convert/fromCkan.js +47 -0
- package/build/plugins/ckan/schema/convert/fromCkan.spec.d.ts +1 -0
- package/build/plugins/ckan/schema/convert/fromCkan.spec.js +157 -0
- package/build/plugins/ckan/schema/convert/toCkan.d.ts +3 -0
- package/build/plugins/ckan/schema/convert/toCkan.js +50 -0
- package/build/plugins/ckan/schema/convert/toCkan.spec.d.ts +1 -0
- package/build/plugins/ckan/schema/convert/toCkan.spec.js +278 -0
- package/build/plugins/ckan/schema/index.d.ts +4 -0
- package/build/plugins/ckan/schema/index.js +3 -0
- package/build/plugins/datahub/index.d.ts +2 -0
- package/build/plugins/datahub/index.js +3 -0
- package/build/plugins/datahub/package/index.d.ts +1 -0
- package/build/plugins/datahub/package/index.js +2 -0
- package/build/plugins/datahub/package/load.d.ts +1 -0
- package/build/plugins/datahub/package/load.js +9 -0
- package/build/plugins/datahub/package/load.spec.d.ts +1 -0
- package/build/plugins/datahub/package/load.spec.js +11 -0
- package/build/plugins/datahub/plugin.d.ts +4 -0
- package/build/plugins/datahub/plugin.js +18 -0
- package/build/plugins/datahub/plugin.spec.d.ts +1 -0
- package/build/plugins/datahub/plugin.spec.js +78 -0
- package/build/plugins/descriptor/index.d.ts +1 -0
- package/build/plugins/descriptor/index.js +2 -0
- package/build/plugins/descriptor/plugin.d.ts +11 -0
- package/build/plugins/descriptor/plugin.js +29 -0
- package/build/plugins/descriptor/plugin.spec.d.ts +1 -0
- package/build/plugins/descriptor/plugin.spec.js +169 -0
- package/build/plugins/folder/index.d.ts +2 -0
- package/build/plugins/folder/index.js +3 -0
- package/build/plugins/folder/package/index.d.ts +2 -0
- package/build/plugins/folder/package/index.js +3 -0
- package/build/plugins/folder/package/load.d.ts +1 -0
- package/build/plugins/folder/package/load.js +6 -0
- package/build/plugins/folder/package/load.spec.d.ts +1 -0
- package/build/plugins/folder/package/load.spec.js +175 -0
- package/build/plugins/folder/package/save.d.ts +7 -0
- package/build/plugins/folder/package/save.js +35 -0
- package/build/plugins/folder/package/save.spec.d.ts +1 -0
- package/build/plugins/folder/package/save.spec.js +328 -0
- package/build/plugins/folder/plugin.d.ts +4 -0
- package/build/plugins/folder/plugin.js +19 -0
- package/build/plugins/folder/plugin.spec.d.ts +1 -0
- package/build/plugins/folder/plugin.spec.js +53 -0
- package/build/plugins/github/github/index.d.ts +1 -0
- package/build/plugins/github/github/index.js +2 -0
- package/build/plugins/github/github/path.d.ts +1 -0
- package/build/plugins/github/github/path.js +4 -0
- package/build/plugins/github/github/request.d.ts +15 -0
- package/build/plugins/github/github/request.js +43 -0
- package/build/plugins/github/index.d.ts +3 -0
- package/build/plugins/github/index.js +4 -0
- package/build/plugins/github/package/License.d.ts +21 -0
- package/build/plugins/github/package/License.js +2 -0
- package/build/plugins/github/package/Owner.d.ts +25 -0
- package/build/plugins/github/package/Owner.js +2 -0
- package/build/plugins/github/package/Package.d.ts +87 -0
- package/build/plugins/github/package/Package.js +2 -0
- package/build/plugins/github/package/convert/fromGithub.d.ts +3 -0
- package/build/plugins/github/package/convert/fromGithub.js +50 -0
- package/build/plugins/github/package/index.d.ts +6 -0
- package/build/plugins/github/package/index.js +4 -0
- package/build/plugins/github/package/load.d.ts +23 -0
- package/build/plugins/github/package/load.js +48 -0
- package/build/plugins/github/package/load.spec.d.ts +1 -0
- package/build/plugins/github/package/load.spec.js +15 -0
- package/build/plugins/github/package/save.d.ts +14 -0
- package/build/plugins/github/package/save.js +69 -0
- package/build/plugins/github/package/save.spec.d.ts +1 -0
- package/build/plugins/github/package/save.spec.js +566 -0
- package/build/plugins/github/plugin.d.ts +19 -0
- package/build/plugins/github/plugin.js +18 -0
- package/build/plugins/github/plugin.spec.d.ts +1 -0
- package/build/plugins/github/plugin.spec.js +73 -0
- package/build/plugins/github/resource/Resource.d.ts +29 -0
- package/build/plugins/github/resource/Resource.js +2 -0
- package/build/plugins/github/resource/convert/fromGithub.d.ts +5 -0
- package/build/plugins/github/resource/convert/fromGithub.js +24 -0
- package/build/plugins/github/resource/convert/toGithub.d.ts +3 -0
- package/build/plugins/github/resource/convert/toGithub.js +10 -0
- package/build/plugins/github/resource/index.d.ts +3 -0
- package/build/plugins/github/resource/index.js +3 -0
- package/build/plugins/zenodo/index.d.ts +3 -0
- package/build/plugins/zenodo/index.js +4 -0
- package/build/plugins/zenodo/package/Creator.d.ts +20 -0
- package/build/plugins/zenodo/package/Creator.js +2 -0
- package/build/plugins/zenodo/package/Package.d.ts +94 -0
- package/build/plugins/zenodo/package/Package.js +2 -0
- package/build/plugins/zenodo/package/convert/fromZenodo.d.ts +3 -0
- package/build/plugins/zenodo/package/convert/fromZenodo.js +43 -0
- package/build/plugins/zenodo/package/convert/toZenodo.d.ts +3 -0
- package/build/plugins/zenodo/package/convert/toZenodo.js +79 -0
- package/build/plugins/zenodo/package/index.d.ts +6 -0
- package/build/plugins/zenodo/package/index.js +5 -0
- package/build/plugins/zenodo/package/load.d.ts +23 -0
- package/build/plugins/zenodo/package/load.js +45 -0
- package/build/plugins/zenodo/package/load.spec.d.ts +1 -0
- package/build/plugins/zenodo/package/load.spec.js +15 -0
- package/build/plugins/zenodo/package/save.d.ts +13 -0
- package/build/plugins/zenodo/package/save.js +74 -0
- package/build/plugins/zenodo/package/save.spec.d.ts +1 -0
- package/build/plugins/zenodo/package/save.spec.js +524 -0
- package/build/plugins/zenodo/plugin.d.ts +19 -0
- package/build/plugins/zenodo/plugin.js +18 -0
- package/build/plugins/zenodo/plugin.spec.d.ts +1 -0
- package/build/plugins/zenodo/plugin.spec.js +78 -0
- package/build/plugins/zenodo/resource/Resource.d.ts +27 -0
- package/build/plugins/zenodo/resource/Resource.js +2 -0
- package/build/plugins/zenodo/resource/convert/fromZenodo.d.ts +10 -0
- package/build/plugins/zenodo/resource/convert/fromZenodo.js +18 -0
- package/build/plugins/zenodo/resource/convert/toZenodo.d.ts +3 -0
- package/build/plugins/zenodo/resource/convert/toZenodo.js +13 -0
- package/build/plugins/zenodo/resource/index.d.ts +3 -0
- package/build/plugins/zenodo/resource/index.js +3 -0
- package/build/plugins/zenodo/zenodo/index.d.ts +1 -0
- package/build/plugins/zenodo/zenodo/index.js +2 -0
- package/build/plugins/zenodo/zenodo/request.d.ts +12 -0
- package/build/plugins/zenodo/zenodo/request.js +36 -0
- package/build/plugins/zip/index.d.ts +2 -0
- package/build/plugins/zip/index.js +3 -0
- package/build/plugins/zip/package/index.d.ts +2 -0
- package/build/plugins/zip/package/index.js +3 -0
- package/build/plugins/zip/package/load.d.ts +1 -0
- package/build/plugins/zip/package/load.js +30 -0
- package/build/plugins/zip/package/load.spec.d.ts +1 -0
- package/build/plugins/zip/package/load.spec.js +173 -0
- package/build/plugins/zip/package/save.d.ts +5 -0
- package/build/plugins/zip/package/save.js +50 -0
- package/build/plugins/zip/package/save.spec.d.ts +1 -0
- package/build/plugins/zip/package/save.spec.js +287 -0
- package/build/plugins/zip/plugin.d.ts +11 -0
- package/build/plugins/zip/plugin.js +24 -0
- package/build/plugins/zip/plugin.spec.d.ts +1 -0
- package/build/plugins/zip/plugin.spec.js +158 -0
- package/build/resource/index.d.ts +1 -0
- package/build/resource/index.js +2 -0
- package/build/resource/save.d.ts +13 -0
- package/build/resource/save.js +53 -0
- package/build/resource/save.spec.d.ts +1 -0
- package/build/resource/save.spec.js +107 -0
- package/build/stream/concat.d.ts +3 -0
- package/build/stream/concat.js +5 -0
- package/build/stream/index.d.ts +3 -0
- package/build/stream/index.js +4 -0
- package/build/stream/load.d.ts +5 -0
- package/build/stream/load.js +46 -0
- package/build/stream/save.d.ts +5 -0
- package/build/stream/save.js +13 -0
- 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,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,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,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,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
|
+
}
|