@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,19 @@
|
|
|
1
|
+
import type { DatasetPlugin } from "../../plugin.ts";
|
|
2
|
+
export declare class GithubPlugin implements DatasetPlugin {
|
|
3
|
+
loadPackage(source: string): Promise<{
|
|
4
|
+
[x: `${string}:${string}`]: any;
|
|
5
|
+
$schema?: string;
|
|
6
|
+
resources: import("@frictionless-ts/metadata").Resource[];
|
|
7
|
+
name?: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
homepage?: string;
|
|
11
|
+
version?: string;
|
|
12
|
+
licenses?: import("@frictionless-ts/metadata").License[];
|
|
13
|
+
contributors?: import("@frictionless-ts/metadata").Contributor[];
|
|
14
|
+
sources?: import("@frictionless-ts/metadata").Source[];
|
|
15
|
+
keywords?: string[];
|
|
16
|
+
created?: string;
|
|
17
|
+
image?: string;
|
|
18
|
+
} | undefined>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isRemotePath } from "@frictionless-ts/metadata";
|
|
2
|
+
import { loadPackageFromGithub } from "./package/load.js";
|
|
3
|
+
export class GithubPlugin {
|
|
4
|
+
async loadPackage(source) {
|
|
5
|
+
const isGithub = getIsGithub(source);
|
|
6
|
+
if (!isGithub)
|
|
7
|
+
return undefined;
|
|
8
|
+
const dataPackage = await loadPackageFromGithub(source);
|
|
9
|
+
return dataPackage;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function getIsGithub(path) {
|
|
13
|
+
const isRemote = isRemotePath(path);
|
|
14
|
+
if (!isRemote)
|
|
15
|
+
return false;
|
|
16
|
+
return new URL(path).hostname === "github.com";
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2lucy9naXRodWIvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUV4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUV6RCxNQUFNLE9BQU8sWUFBWTtJQUN2QixLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFL0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2RCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0NBQ0Y7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNuQyxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTNCLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQTtBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNSZW1vdGVQYXRoIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHR5cGUgeyBEYXRhc2V0UGx1Z2luIH0gZnJvbSBcIi4uLy4uL3BsdWdpbi50c1wiXG5pbXBvcnQgeyBsb2FkUGFja2FnZUZyb21HaXRodWIgfSBmcm9tIFwiLi9wYWNrYWdlL2xvYWQudHNcIlxuXG5leHBvcnQgY2xhc3MgR2l0aHViUGx1Z2luIGltcGxlbWVudHMgRGF0YXNldFBsdWdpbiB7XG4gIGFzeW5jIGxvYWRQYWNrYWdlKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNHaXRodWIgPSBnZXRJc0dpdGh1Yihzb3VyY2UpXG4gICAgaWYgKCFpc0dpdGh1YikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgZGF0YVBhY2thZ2UgPSBhd2FpdCBsb2FkUGFja2FnZUZyb21HaXRodWIoc291cmNlKVxuICAgIHJldHVybiBkYXRhUGFja2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldElzR2l0aHViKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBpc1JlbW90ZSA9IGlzUmVtb3RlUGF0aChwYXRoKVxuICBpZiAoIWlzUmVtb3RlKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gbmV3IFVSTChwYXRoKS5ob3N0bmFtZSA9PT0gXCJnaXRodWIuY29tXCJcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import * as packageModule from "./package/load.js";
|
|
3
|
+
import { GithubPlugin } from "./plugin.js";
|
|
4
|
+
vi.mock("./package/load.ts", () => ({
|
|
5
|
+
loadPackageFromGithub: vi.fn(),
|
|
6
|
+
}));
|
|
7
|
+
describe("GithubPlugin", () => {
|
|
8
|
+
let plugin;
|
|
9
|
+
let mockLoadPackageFromGithub;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
plugin = new GithubPlugin();
|
|
12
|
+
mockLoadPackageFromGithub = vi.mocked(packageModule.loadPackageFromGithub);
|
|
13
|
+
vi.clearAllMocks();
|
|
14
|
+
});
|
|
15
|
+
describe("loadPackage", () => {
|
|
16
|
+
it("should load package from github.com url", async () => {
|
|
17
|
+
const mockPackage = {
|
|
18
|
+
name: "test-package",
|
|
19
|
+
resources: [{ name: "test", data: [] }],
|
|
20
|
+
};
|
|
21
|
+
mockLoadPackageFromGithub.mockResolvedValue(mockPackage);
|
|
22
|
+
const result = await plugin.loadPackage("https://github.com/owner/repo/data");
|
|
23
|
+
expect(mockLoadPackageFromGithub).toHaveBeenCalledWith("https://github.com/owner/repo/data");
|
|
24
|
+
expect(result).toEqual(mockPackage);
|
|
25
|
+
});
|
|
26
|
+
it("should return undefined for non-github urls", async () => {
|
|
27
|
+
const result = await plugin.loadPackage("https://example.com/data");
|
|
28
|
+
expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
|
|
29
|
+
expect(result).toBeUndefined();
|
|
30
|
+
});
|
|
31
|
+
it("should return undefined for local paths", async () => {
|
|
32
|
+
const result = await plugin.loadPackage("./data");
|
|
33
|
+
expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
|
|
34
|
+
expect(result).toBeUndefined();
|
|
35
|
+
});
|
|
36
|
+
it("should return undefined for zenodo urls", async () => {
|
|
37
|
+
const result = await plugin.loadPackage("https://zenodo.org/record/123");
|
|
38
|
+
expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
|
|
39
|
+
expect(result).toBeUndefined();
|
|
40
|
+
});
|
|
41
|
+
it("should handle github urls with paths", async () => {
|
|
42
|
+
const mockPackage = {
|
|
43
|
+
name: "test-package",
|
|
44
|
+
resources: [{ name: "test", data: [] }],
|
|
45
|
+
};
|
|
46
|
+
mockLoadPackageFromGithub.mockResolvedValue(mockPackage);
|
|
47
|
+
const result = await plugin.loadPackage("https://github.com/owner/repo/tree/main/data");
|
|
48
|
+
expect(mockLoadPackageFromGithub).toHaveBeenCalledWith("https://github.com/owner/repo/tree/main/data");
|
|
49
|
+
expect(result).toEqual(mockPackage);
|
|
50
|
+
});
|
|
51
|
+
it("should handle github urls with query parameters", async () => {
|
|
52
|
+
const mockPackage = {
|
|
53
|
+
name: "test-package",
|
|
54
|
+
resources: [{ name: "test", data: [] }],
|
|
55
|
+
};
|
|
56
|
+
mockLoadPackageFromGithub.mockResolvedValue(mockPackage);
|
|
57
|
+
const result = await plugin.loadPackage("https://github.com/owner/repo?tab=readme");
|
|
58
|
+
expect(mockLoadPackageFromGithub).toHaveBeenCalledWith("https://github.com/owner/repo?tab=readme");
|
|
59
|
+
expect(result).toEqual(mockPackage);
|
|
60
|
+
});
|
|
61
|
+
it("should return undefined for http non-github urls", async () => {
|
|
62
|
+
const result = await plugin.loadPackage("http://example.com/data");
|
|
63
|
+
expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
|
|
64
|
+
expect(result).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
it("should return undefined for gitlab urls", async () => {
|
|
67
|
+
const result = await plugin.loadPackage("https://gitlab.com/owner/repo");
|
|
68
|
+
expect(mockLoadPackageFromGithub).not.toHaveBeenCalled();
|
|
69
|
+
expect(result).toBeUndefined();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9wbHVnaW4uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3RCxPQUFPLEtBQUssYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFMUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0IsQ0FBQyxDQUFDLENBQUE7QUFFSCxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtJQUM1QixJQUFJLE1BQW9CLENBQUE7SUFDeEIsSUFBSSx5QkFBbUQsQ0FBQTtJQUV2RCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7UUFDM0IseUJBQXlCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUMxRSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDcEIsQ0FBQyxDQUFDLENBQUE7SUFFRixRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxXQUFXLEdBQVk7Z0JBQzNCLElBQUksRUFBRSxjQUFjO2dCQUNwQixTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3hDLENBQUE7WUFDRCx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUV4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQ3JDLG9DQUFvQyxDQUNyQyxDQUFBO1lBRUQsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsb0JBQW9CLENBQ3BELG9DQUFvQyxDQUNyQyxDQUFBO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNyQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUVuRSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRWpELE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3hELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQTtZQUV4RSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDcEQsTUFBTSxXQUFXLEdBQVk7Z0JBQzNCLElBQUksRUFBRSxjQUFjO2dCQUNwQixTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3hDLENBQUE7WUFDRCx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUV4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQ3JDLDhDQUE4QyxDQUMvQyxDQUFBO1lBRUQsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsb0JBQW9CLENBQ3BELDhDQUE4QyxDQUMvQyxDQUFBO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNyQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMvRCxNQUFNLFdBQVcsR0FBWTtnQkFDM0IsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDeEMsQ0FBQTtZQUNELHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRXhELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FDckMsMENBQTBDLENBQzNDLENBQUE7WUFFRCxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxvQkFBb0IsQ0FDcEQsMENBQTBDLENBQzNDLENBQUE7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3JDLENBQUMsQ0FBQyxDQUFBO1FBRUYsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1lBRWxFLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3hELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQTtZQUV4RSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHZpIH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgKiBhcyBwYWNrYWdlTW9kdWxlIGZyb20gXCIuL3BhY2thZ2UvbG9hZC50c1wiXG5pbXBvcnQgeyBHaXRodWJQbHVnaW4gfSBmcm9tIFwiLi9wbHVnaW4udHNcIlxuXG52aS5tb2NrKFwiLi9wYWNrYWdlL2xvYWQudHNcIiwgKCkgPT4gKHtcbiAgbG9hZFBhY2thZ2VGcm9tR2l0aHViOiB2aS5mbigpLFxufSkpXG5cbmRlc2NyaWJlKFwiR2l0aHViUGx1Z2luXCIsICgpID0+IHtcbiAgbGV0IHBsdWdpbjogR2l0aHViUGx1Z2luXG4gIGxldCBtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj5cblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBwbHVnaW4gPSBuZXcgR2l0aHViUGx1Z2luKClcbiAgICBtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViID0gdmkubW9ja2VkKHBhY2thZ2VNb2R1bGUubG9hZFBhY2thZ2VGcm9tR2l0aHViKVxuICAgIHZpLmNsZWFyQWxsTW9ja3MoKVxuICB9KVxuXG4gIGRlc2NyaWJlKFwibG9hZFBhY2thZ2VcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSBmcm9tIGdpdGh1Yi5jb20gdXJsXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgICByZXNvdXJjZXM6IFt7IG5hbWU6IFwidGVzdFwiLCBkYXRhOiBbXSB9XSxcbiAgICAgIH1cbiAgICAgIG1vY2tMb2FkUGFja2FnZUZyb21HaXRodWIubW9ja1Jlc29sdmVkVmFsdWUobW9ja1BhY2thZ2UpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcbiAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwby9kYXRhXCIsXG4gICAgICApXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwby9kYXRhXCIsXG4gICAgICApXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tQYWNrYWdlKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBub24tZ2l0aHViIHVybHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9kYXRhXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgbG9jYWwgcGF0aHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFwiLi9kYXRhXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgemVub2RvIHVybHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFwiaHR0cHM6Ly96ZW5vZG8ub3JnL3JlY29yZC8xMjNcIilcblxuICAgICAgZXhwZWN0KG1vY2tMb2FkUGFja2FnZUZyb21HaXRodWIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgZ2l0aHViIHVybHMgd2l0aCBwYXRoc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgICAgcmVzb3VyY2VzOiBbeyBuYW1lOiBcInRlc3RcIiwgZGF0YTogW10gfV0sXG4gICAgICB9XG4gICAgICBtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViLm1vY2tSZXNvbHZlZFZhbHVlKG1vY2tQYWNrYWdlKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXG4gICAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tL293bmVyL3JlcG8vdHJlZS9tYWluL2RhdGFcIixcbiAgICAgIClcblxuICAgICAgZXhwZWN0KG1vY2tMb2FkUGFja2FnZUZyb21HaXRodWIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBcImh0dHBzOi8vZ2l0aHViLmNvbS9vd25lci9yZXBvL3RyZWUvbWFpbi9kYXRhXCIsXG4gICAgICApXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tQYWNrYWdlKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgZ2l0aHViIHVybHMgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgICByZXNvdXJjZXM6IFt7IG5hbWU6IFwidGVzdFwiLCBkYXRhOiBbXSB9XSxcbiAgICAgIH1cbiAgICAgIG1vY2tMb2FkUGFja2FnZUZyb21HaXRodWIubW9ja1Jlc29sdmVkVmFsdWUobW9ja1BhY2thZ2UpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcbiAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwbz90YWI9cmVhZG1lXCIsXG4gICAgICApXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwbz90YWI9cmVhZG1lXCIsXG4gICAgICApXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tQYWNrYWdlKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBodHRwIG5vbi1naXRodWIgdXJsc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXCJodHRwOi8vZXhhbXBsZS5jb20vZGF0YVwiKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRnJvbUdpdGh1Yikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGdpdGxhYiB1cmxzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcImh0dHBzOi8vZ2l0bGFiLmNvbS9vd25lci9yZXBvXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tR2l0aHViKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub repository file content
|
|
3
|
+
*/
|
|
4
|
+
export interface GithubResource {
|
|
5
|
+
/**
|
|
6
|
+
* File path within repository
|
|
7
|
+
*/
|
|
8
|
+
path: string;
|
|
9
|
+
/**
|
|
10
|
+
* File mode e.g. `100755`
|
|
11
|
+
*/
|
|
12
|
+
mode: string;
|
|
13
|
+
/**
|
|
14
|
+
* File type e.g. `blob`
|
|
15
|
+
*/
|
|
16
|
+
type: string;
|
|
17
|
+
/**
|
|
18
|
+
* File size in bytes
|
|
19
|
+
*/
|
|
20
|
+
size: number;
|
|
21
|
+
/**
|
|
22
|
+
* File SHA-1
|
|
23
|
+
*/
|
|
24
|
+
sha: string;
|
|
25
|
+
/**
|
|
26
|
+
* File url on GitHub API
|
|
27
|
+
*/
|
|
28
|
+
url: string;
|
|
29
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9yZXNvdXJjZS9SZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXRIdWIgcmVwb3NpdG9yeSBmaWxlIGNvbnRlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRodWJSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBGaWxlIHBhdGggd2l0aGluIHJlcG9zaXRvcnlcbiAgICovXG4gIHBhdGg6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBGaWxlIG1vZGUgZS5nLiBgMTAwNzU1YFxuICAgKi9cbiAgbW9kZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZpbGUgdHlwZSBlLmcuIGBibG9iYFxuICAgKi9cbiAgdHlwZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlc1xuICAgKi9cbiAgc2l6ZTogbnVtYmVyXG5cbiAgLyoqXG4gICAqIEZpbGUgU0hBLTFcbiAgICovXG4gIHNoYTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZpbGUgdXJsIG9uIEdpdEh1YiBBUElcbiAgICovXG4gIHVybDogc3RyaW5nXG59XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getFilename, getFormat, getName } from "@frictionless-ts/metadata";
|
|
2
|
+
export function convertResourceFromGithub(githubResource, options) {
|
|
3
|
+
const path = convertPath({
|
|
4
|
+
...githubResource,
|
|
5
|
+
ref: options.defaultBranch,
|
|
6
|
+
});
|
|
7
|
+
const filename = getFilename(path);
|
|
8
|
+
const resource = {
|
|
9
|
+
path,
|
|
10
|
+
name: getName(filename) ?? githubResource.sha,
|
|
11
|
+
bytes: githubResource.size,
|
|
12
|
+
hash: `sha1:${githubResource.sha}`,
|
|
13
|
+
format: getFormat(filename),
|
|
14
|
+
"github:key": githubResource.path,
|
|
15
|
+
"github:url": path,
|
|
16
|
+
};
|
|
17
|
+
return resource;
|
|
18
|
+
}
|
|
19
|
+
function convertPath(options) {
|
|
20
|
+
const url = new URL(options.url);
|
|
21
|
+
const [owner, repo] = url.pathname.split("/").slice(2);
|
|
22
|
+
return `https://raw.githubusercontent.com/${owner}/${repo}/refs/heads/${options.ref}/${options.path}`;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUdpdGh1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BsdWdpbnMvZ2l0aHViL3Jlc291cmNlL2NvbnZlcnQvZnJvbUdpdGh1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUczRSxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLGNBQThCLEVBQzlCLE9BRUM7SUFFRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUM7UUFDdkIsR0FBRyxjQUFjO1FBQ2pCLEdBQUcsRUFBRSxPQUFPLENBQUMsYUFBYTtLQUMzQixDQUFDLENBQUE7SUFFRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsTUFBTSxRQUFRLEdBQWE7UUFDekIsSUFBSTtRQUNKLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksY0FBYyxDQUFDLEdBQUc7UUFDN0MsS0FBSyxFQUFFLGNBQWMsQ0FBQyxJQUFJO1FBQzFCLElBQUksRUFBRSxRQUFRLGNBQWMsQ0FBQyxHQUFHLEVBQUU7UUFDbEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDM0IsWUFBWSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1FBQ2pDLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUE7SUFFRCxPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsT0FJcEI7SUFDQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDaEMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdEQsT0FBTyxxQ0FBcUMsS0FBSyxJQUFJLElBQUksZUFBZSxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUN2RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IGdldEZpbGVuYW1lLCBnZXRGb3JtYXQsIGdldE5hbWUgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IEdpdGh1YlJlc291cmNlIH0gZnJvbSBcIi4uL1Jlc291cmNlLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSZXNvdXJjZUZyb21HaXRodWIoXG4gIGdpdGh1YlJlc291cmNlOiBHaXRodWJSZXNvdXJjZSxcbiAgb3B0aW9uczoge1xuICAgIGRlZmF1bHRCcmFuY2g6IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IHBhdGggPSBjb252ZXJ0UGF0aCh7XG4gICAgLi4uZ2l0aHViUmVzb3VyY2UsXG4gICAgcmVmOiBvcHRpb25zLmRlZmF1bHRCcmFuY2gsXG4gIH0pXG5cbiAgY29uc3QgZmlsZW5hbWUgPSBnZXRGaWxlbmFtZShwYXRoKVxuICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7XG4gICAgcGF0aCxcbiAgICBuYW1lOiBnZXROYW1lKGZpbGVuYW1lKSA/PyBnaXRodWJSZXNvdXJjZS5zaGEsXG4gICAgYnl0ZXM6IGdpdGh1YlJlc291cmNlLnNpemUsXG4gICAgaGFzaDogYHNoYTE6JHtnaXRodWJSZXNvdXJjZS5zaGF9YCxcbiAgICBmb3JtYXQ6IGdldEZvcm1hdChmaWxlbmFtZSksXG4gICAgXCJnaXRodWI6a2V5XCI6IGdpdGh1YlJlc291cmNlLnBhdGgsXG4gICAgXCJnaXRodWI6dXJsXCI6IHBhdGgsXG4gIH1cblxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZnVuY3Rpb24gY29udmVydFBhdGgob3B0aW9uczoge1xuICB1cmw6IHN0cmluZ1xuICByZWY6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRpb25zLnVybClcbiAgY29uc3QgW293bmVyLCByZXBvXSA9IHVybC5wYXRobmFtZS5zcGxpdChcIi9cIikuc2xpY2UoMilcbiAgcmV0dXJuIGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vJHtvd25lcn0vJHtyZXBvfS9yZWZzL2hlYWRzLyR7b3B0aW9ucy5yZWZ9LyR7b3B0aW9ucy5wYXRofWBcbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function convertResourceToGithub(resource) {
|
|
2
|
+
if (!resource.path && !resource.name) {
|
|
3
|
+
return {};
|
|
4
|
+
}
|
|
5
|
+
const githubResource = {
|
|
6
|
+
path: resource.name,
|
|
7
|
+
};
|
|
8
|
+
return githubResource;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9HaXRodWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9yZXNvdXJjZS9jb252ZXJ0L3RvR2l0aHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsUUFBa0I7SUFFbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQTRCO1FBQzlDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtLQUNwQixDQUFBO0lBRUQsT0FBTyxjQUFjLENBQUE7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IEdpdGh1YlJlc291cmNlIH0gZnJvbSBcIi4uL1Jlc291cmNlLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSZXNvdXJjZVRvR2l0aHViKFxuICByZXNvdXJjZTogUmVzb3VyY2UsXG4pOiBQYXJ0aWFsPEdpdGh1YlJlc291cmNlPiB7XG4gIGlmICghcmVzb3VyY2UucGF0aCAmJiAhcmVzb3VyY2UubmFtZSkge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgY29uc3QgZ2l0aHViUmVzb3VyY2U6IFBhcnRpYWw8R2l0aHViUmVzb3VyY2U+ID0ge1xuICAgIHBhdGg6IHJlc291cmNlLm5hbWUsXG4gIH1cblxuICByZXR1cm4gZ2l0aHViUmVzb3VyY2Vcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { convertResourceFromGithub } from "./convert/fromGithub.js";
|
|
2
|
+
export { convertResourceToGithub } from "./convert/toGithub.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2dpdGh1Yi9yZXNvdXJjZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNuRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgR2l0aHViUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5leHBvcnQgeyBjb252ZXJ0UmVzb3VyY2VGcm9tR2l0aHViIH0gZnJvbSBcIi4vY29udmVydC9mcm9tR2l0aHViLnRzXCJcbmV4cG9ydCB7IGNvbnZlcnRSZXNvdXJjZVRvR2l0aHViIH0gZnJvbSBcIi4vY29udmVydC90b0dpdGh1Yi50c1wiXG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from "./package/index.js";
|
|
2
|
+
export * from "./resource/index.js";
|
|
3
|
+
export * from "./plugin.js";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL3plbm9kby9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYyxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9wYWNrYWdlL2luZGV4LnRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Jlc291cmNlL2luZGV4LnRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BsdWdpbi50c1wiXG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zenodo Creator interface
|
|
3
|
+
*/
|
|
4
|
+
export interface ZenodoCreator {
|
|
5
|
+
/**
|
|
6
|
+
* Creator name (format: Family name, Given names)
|
|
7
|
+
*/
|
|
8
|
+
name: string;
|
|
9
|
+
/**
|
|
10
|
+
* Creator affiliation
|
|
11
|
+
*/
|
|
12
|
+
affiliation?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Creator identifiers (e.g., ORCID)
|
|
15
|
+
*/
|
|
16
|
+
identifiers?: Array<{
|
|
17
|
+
identifier: string;
|
|
18
|
+
scheme: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvemVub2RvL3BhY2thZ2UvQ3JlYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBaZW5vZG8gQ3JlYXRvciBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaZW5vZG9DcmVhdG9yIHtcbiAgLyoqXG4gICAqIENyZWF0b3IgbmFtZSAoZm9ybWF0OiBGYW1pbHkgbmFtZSwgR2l2ZW4gbmFtZXMpXG4gICAqL1xuICBuYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogQ3JlYXRvciBhZmZpbGlhdGlvblxuICAgKi9cbiAgYWZmaWxpYXRpb24/OiBzdHJpbmdcblxuICAvKipcbiAgICogQ3JlYXRvciBpZGVudGlmaWVycyAoZS5nLiwgT1JDSUQpXG4gICAqL1xuICBpZGVudGlmaWVycz86IEFycmF5PHtcbiAgICBpZGVudGlmaWVyOiBzdHJpbmdcbiAgICBzY2hlbWU6IHN0cmluZ1xuICB9PlxufVxuIl19
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { ZenodoResource } from "../resource/index.ts";
|
|
2
|
+
import type { ZenodoCreator } from "./Creator.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Zenodo Deposit interface
|
|
5
|
+
*/
|
|
6
|
+
export interface ZenodoPackage {
|
|
7
|
+
/**
|
|
8
|
+
* Deposit identifier
|
|
9
|
+
*/
|
|
10
|
+
id: number;
|
|
11
|
+
/**
|
|
12
|
+
* Deposit URL
|
|
13
|
+
*/
|
|
14
|
+
links: {
|
|
15
|
+
self: string;
|
|
16
|
+
html: string;
|
|
17
|
+
files: string;
|
|
18
|
+
bucket: string;
|
|
19
|
+
publish?: string;
|
|
20
|
+
discard?: string;
|
|
21
|
+
edit?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Deposit metadata
|
|
25
|
+
*/
|
|
26
|
+
metadata: {
|
|
27
|
+
/**
|
|
28
|
+
* Title of the deposit
|
|
29
|
+
*/
|
|
30
|
+
title: string;
|
|
31
|
+
/**
|
|
32
|
+
* Description of the deposit
|
|
33
|
+
*/
|
|
34
|
+
description: string;
|
|
35
|
+
/**
|
|
36
|
+
* Upload type, e.g., "dataset"
|
|
37
|
+
*/
|
|
38
|
+
upload_type: string;
|
|
39
|
+
/**
|
|
40
|
+
* Publication date in ISO format (YYYY-MM-DD)
|
|
41
|
+
*/
|
|
42
|
+
publication_date?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Creators of the deposit
|
|
45
|
+
*/
|
|
46
|
+
creators: ZenodoCreator[];
|
|
47
|
+
/**
|
|
48
|
+
* Access right, e.g., "open", "embargoed", "restricted", "closed"
|
|
49
|
+
*/
|
|
50
|
+
access_right?: string;
|
|
51
|
+
/**
|
|
52
|
+
* License identifier
|
|
53
|
+
*/
|
|
54
|
+
license?: string;
|
|
55
|
+
/**
|
|
56
|
+
* DOI of the deposit
|
|
57
|
+
*/
|
|
58
|
+
doi?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Keywords/tags
|
|
61
|
+
*/
|
|
62
|
+
keywords?: string[];
|
|
63
|
+
/**
|
|
64
|
+
* Related identifiers (e.g., DOIs of related works)
|
|
65
|
+
*/
|
|
66
|
+
related_identifiers?: Array<{
|
|
67
|
+
identifier: string;
|
|
68
|
+
relation: string;
|
|
69
|
+
scheme: string;
|
|
70
|
+
}>;
|
|
71
|
+
/**
|
|
72
|
+
* Communities the deposit belongs to
|
|
73
|
+
*/
|
|
74
|
+
communities?: Array<{
|
|
75
|
+
identifier: string;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Version of the deposit
|
|
79
|
+
*/
|
|
80
|
+
version?: string;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Files associated with the deposit
|
|
84
|
+
*/
|
|
85
|
+
files: ZenodoResource[];
|
|
86
|
+
/**
|
|
87
|
+
* State of the deposit
|
|
88
|
+
*/
|
|
89
|
+
state: "unsubmitted" | "inprogress" | "done";
|
|
90
|
+
/**
|
|
91
|
+
* Submitted flag
|
|
92
|
+
*/
|
|
93
|
+
submitted: boolean;
|
|
94
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvemVub2RvL3BhY2thZ2UvUGFja2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBaZW5vZG9SZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFplbm9kb0NyZWF0b3IgfSBmcm9tIFwiLi9DcmVhdG9yLnRzXCJcblxuLyoqXG4gKiBaZW5vZG8gRGVwb3NpdCBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaZW5vZG9QYWNrYWdlIHtcbiAgLyoqXG4gICAqIERlcG9zaXQgaWRlbnRpZmllclxuICAgKi9cbiAgaWQ6IG51bWJlclxuXG4gIC8qKlxuICAgKiBEZXBvc2l0IFVSTFxuICAgKi9cbiAgbGlua3M6IHtcbiAgICBzZWxmOiBzdHJpbmdcbiAgICBodG1sOiBzdHJpbmdcbiAgICBmaWxlczogc3RyaW5nXG4gICAgYnVja2V0OiBzdHJpbmdcbiAgICBwdWJsaXNoPzogc3RyaW5nXG4gICAgZGlzY2FyZD86IHN0cmluZ1xuICAgIGVkaXQ/OiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBvc2l0IG1ldGFkYXRhXG4gICAqL1xuICBtZXRhZGF0YToge1xuICAgIC8qKlxuICAgICAqIFRpdGxlIG9mIHRoZSBkZXBvc2l0XG4gICAgICovXG4gICAgdGl0bGU6IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpcHRpb24gb2YgdGhlIGRlcG9zaXRcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBVcGxvYWQgdHlwZSwgZS5nLiwgXCJkYXRhc2V0XCJcbiAgICAgKi9cbiAgICB1cGxvYWRfdHlwZTogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQdWJsaWNhdGlvbiBkYXRlIGluIElTTyBmb3JtYXQgKFlZWVktTU0tREQpXG4gICAgICovXG4gICAgcHVibGljYXRpb25fZGF0ZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRvcnMgb2YgdGhlIGRlcG9zaXRcbiAgICAgKi9cbiAgICBjcmVhdG9yczogWmVub2RvQ3JlYXRvcltdXG5cbiAgICAvKipcbiAgICAgKiBBY2Nlc3MgcmlnaHQsIGUuZy4sIFwib3BlblwiLCBcImVtYmFyZ29lZFwiLCBcInJlc3RyaWN0ZWRcIiwgXCJjbG9zZWRcIlxuICAgICAqL1xuICAgIGFjY2Vzc19yaWdodD86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogTGljZW5zZSBpZGVudGlmaWVyXG4gICAgICovXG4gICAgbGljZW5zZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogRE9JIG9mIHRoZSBkZXBvc2l0XG4gICAgICovXG4gICAgZG9pPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBLZXl3b3Jkcy90YWdzXG4gICAgICovXG4gICAga2V5d29yZHM/OiBzdHJpbmdbXVxuXG4gICAgLyoqXG4gICAgICogUmVsYXRlZCBpZGVudGlmaWVycyAoZS5nLiwgRE9JcyBvZiByZWxhdGVkIHdvcmtzKVxuICAgICAqL1xuICAgIHJlbGF0ZWRfaWRlbnRpZmllcnM/OiBBcnJheTx7XG4gICAgICBpZGVudGlmaWVyOiBzdHJpbmdcbiAgICAgIHJlbGF0aW9uOiBzdHJpbmdcbiAgICAgIHNjaGVtZTogc3RyaW5nXG4gICAgfT5cblxuICAgIC8qKlxuICAgICAqIENvbW11bml0aWVzIHRoZSBkZXBvc2l0IGJlbG9uZ3MgdG9cbiAgICAgKi9cbiAgICBjb21tdW5pdGllcz86IEFycmF5PHtcbiAgICAgIGlkZW50aWZpZXI6IHN0cmluZ1xuICAgIH0+XG5cbiAgICAvKipcbiAgICAgKiBWZXJzaW9uIG9mIHRoZSBkZXBvc2l0XG4gICAgICovXG4gICAgdmVyc2lvbj86IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVwb3NpdFxuICAgKi9cbiAgZmlsZXM6IFplbm9kb1Jlc291cmNlW11cblxuICAvKipcbiAgICogU3RhdGUgb2YgdGhlIGRlcG9zaXRcbiAgICovXG4gIHN0YXRlOiBcInVuc3VibWl0dGVkXCIgfCBcImlucHJvZ3Jlc3NcIiB8IFwiZG9uZVwiXG5cbiAgLyoqXG4gICAqIFN1Ym1pdHRlZCBmbGFnXG4gICAqL1xuICBzdWJtaXR0ZWQ6IGJvb2xlYW5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { convertResourceFromZenodo } from "../../resource/index.js";
|
|
2
|
+
export function convertPackageFromZenodo(zenodoPackage) {
|
|
3
|
+
const datapackage = {
|
|
4
|
+
name: `record-${zenodoPackage.id}`,
|
|
5
|
+
resources: [],
|
|
6
|
+
};
|
|
7
|
+
const metadata = zenodoPackage.metadata;
|
|
8
|
+
datapackage.title = metadata.title;
|
|
9
|
+
datapackage.description = metadata.description;
|
|
10
|
+
if (metadata.version) {
|
|
11
|
+
datapackage.version = metadata.version;
|
|
12
|
+
}
|
|
13
|
+
if (zenodoPackage.files && zenodoPackage.files.length > 0) {
|
|
14
|
+
datapackage.resources = zenodoPackage.files.map(zenodoResource => convertResourceFromZenodo(zenodoResource));
|
|
15
|
+
}
|
|
16
|
+
if (metadata.license) {
|
|
17
|
+
const license = {
|
|
18
|
+
name: metadata.license,
|
|
19
|
+
};
|
|
20
|
+
datapackage.licenses = [license];
|
|
21
|
+
}
|
|
22
|
+
if (metadata.creators && metadata.creators.length > 0) {
|
|
23
|
+
const contributors = metadata.creators.map(creator => {
|
|
24
|
+
const contributor = {
|
|
25
|
+
title: creator.name,
|
|
26
|
+
role: "author",
|
|
27
|
+
};
|
|
28
|
+
if (creator.affiliation) {
|
|
29
|
+
contributor.path = creator.affiliation;
|
|
30
|
+
}
|
|
31
|
+
return contributor;
|
|
32
|
+
});
|
|
33
|
+
datapackage.contributors = contributors;
|
|
34
|
+
}
|
|
35
|
+
if (metadata.keywords && metadata.keywords.length > 0) {
|
|
36
|
+
datapackage.keywords = metadata.keywords;
|
|
37
|
+
}
|
|
38
|
+
if (metadata.publication_date) {
|
|
39
|
+
datapackage.created = metadata.publication_date;
|
|
40
|
+
}
|
|
41
|
+
return datapackage;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbVplbm9kby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BsdWdpbnMvemVub2RvL3BhY2thZ2UvY29udmVydC9mcm9tWmVub2RvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBR25FLE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsYUFBNEI7SUFFNUIsTUFBTSxXQUFXLEdBQVk7UUFDM0IsSUFBSSxFQUFFLFVBQVUsYUFBYSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxTQUFTLEVBQUUsRUFBRTtLQUNkLENBQUE7SUFFRCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFBO0lBRXZDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQTtJQUNsQyxXQUFXLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUE7SUFFOUMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsV0FBVyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFBO0lBQ3hDLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUQsV0FBVyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUMvRCx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsQ0FDMUMsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixNQUFNLE9BQU8sR0FBWTtZQUN2QixJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU87U0FDdkIsQ0FBQTtRQUNELFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFrQixRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsRSxNQUFNLFdBQVcsR0FBZ0I7Z0JBQy9CLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbkIsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFBO1lBRUQsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3hCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQTtZQUN4QyxDQUFDO1lBRUQsT0FBTyxXQUFXLENBQUE7UUFDcEIsQ0FBQyxDQUFDLENBQUE7UUFFRixXQUFXLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUN6QyxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RELFdBQVcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixXQUFXLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udHJpYnV0b3IsIExpY2Vuc2UsIFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgeyBjb252ZXJ0UmVzb3VyY2VGcm9tWmVub2RvIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgWmVub2RvUGFja2FnZSB9IGZyb20gXCIuLi9QYWNrYWdlLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRQYWNrYWdlRnJvbVplbm9kbyhcbiAgemVub2RvUGFja2FnZTogWmVub2RvUGFja2FnZSxcbik6IFBhY2thZ2Uge1xuICBjb25zdCBkYXRhcGFja2FnZTogUGFja2FnZSA9IHtcbiAgICBuYW1lOiBgcmVjb3JkLSR7emVub2RvUGFja2FnZS5pZH1gLFxuICAgIHJlc291cmNlczogW10sXG4gIH1cblxuICBjb25zdCBtZXRhZGF0YSA9IHplbm9kb1BhY2thZ2UubWV0YWRhdGFcblxuICBkYXRhcGFja2FnZS50aXRsZSA9IG1ldGFkYXRhLnRpdGxlXG4gIGRhdGFwYWNrYWdlLmRlc2NyaXB0aW9uID0gbWV0YWRhdGEuZGVzY3JpcHRpb25cblxuICBpZiAobWV0YWRhdGEudmVyc2lvbikge1xuICAgIGRhdGFwYWNrYWdlLnZlcnNpb24gPSBtZXRhZGF0YS52ZXJzaW9uXG4gIH1cblxuICBpZiAoemVub2RvUGFja2FnZS5maWxlcyAmJiB6ZW5vZG9QYWNrYWdlLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhcGFja2FnZS5yZXNvdXJjZXMgPSB6ZW5vZG9QYWNrYWdlLmZpbGVzLm1hcCh6ZW5vZG9SZXNvdXJjZSA9PlxuICAgICAgY29udmVydFJlc291cmNlRnJvbVplbm9kbyh6ZW5vZG9SZXNvdXJjZSksXG4gICAgKVxuICB9XG5cbiAgaWYgKG1ldGFkYXRhLmxpY2Vuc2UpIHtcbiAgICBjb25zdCBsaWNlbnNlOiBMaWNlbnNlID0ge1xuICAgICAgbmFtZTogbWV0YWRhdGEubGljZW5zZSxcbiAgICB9XG4gICAgZGF0YXBhY2thZ2UubGljZW5zZXMgPSBbbGljZW5zZV1cbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5jcmVhdG9ycyAmJiBtZXRhZGF0YS5jcmVhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY29udHJpYnV0b3JzOiBDb250cmlidXRvcltdID0gbWV0YWRhdGEuY3JlYXRvcnMubWFwKGNyZWF0b3IgPT4ge1xuICAgICAgY29uc3QgY29udHJpYnV0b3I6IENvbnRyaWJ1dG9yID0ge1xuICAgICAgICB0aXRsZTogY3JlYXRvci5uYW1lLFxuICAgICAgICByb2xlOiBcImF1dGhvclwiLFxuICAgICAgfVxuXG4gICAgICBpZiAoY3JlYXRvci5hZmZpbGlhdGlvbikge1xuICAgICAgICBjb250cmlidXRvci5wYXRoID0gY3JlYXRvci5hZmZpbGlhdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udHJpYnV0b3JcbiAgICB9KVxuXG4gICAgZGF0YXBhY2thZ2UuY29udHJpYnV0b3JzID0gY29udHJpYnV0b3JzXG4gIH1cblxuICBpZiAobWV0YWRhdGEua2V5d29yZHMgJiYgbWV0YWRhdGEua2V5d29yZHMubGVuZ3RoID4gMCkge1xuICAgIGRhdGFwYWNrYWdlLmtleXdvcmRzID0gbWV0YWRhdGEua2V5d29yZHNcbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5wdWJsaWNhdGlvbl9kYXRlKSB7XG4gICAgZGF0YXBhY2thZ2UuY3JlYXRlZCA9IG1ldGFkYXRhLnB1YmxpY2F0aW9uX2RhdGVcbiAgfVxuXG4gIHJldHVybiBkYXRhcGFja2FnZVxufVxuIl19
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export function convertPackageToZenodo(dataPackage) {
|
|
2
|
+
const metadata = {
|
|
3
|
+
upload_type: "dataset",
|
|
4
|
+
};
|
|
5
|
+
if (dataPackage.title) {
|
|
6
|
+
metadata.title = dataPackage.title;
|
|
7
|
+
}
|
|
8
|
+
if (dataPackage.description) {
|
|
9
|
+
metadata.description = dataPackage.description;
|
|
10
|
+
}
|
|
11
|
+
else if (dataPackage.title) {
|
|
12
|
+
metadata.description = dataPackage.title;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
metadata.description = "Dataset created with @frictionless-ts/zenodo";
|
|
16
|
+
}
|
|
17
|
+
if (dataPackage.version) {
|
|
18
|
+
metadata.version = dataPackage.version;
|
|
19
|
+
}
|
|
20
|
+
if (dataPackage.licenses && dataPackage.licenses.length > 0) {
|
|
21
|
+
const license = dataPackage.licenses[0];
|
|
22
|
+
if (license?.name) {
|
|
23
|
+
metadata.license = license.name;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (dataPackage.contributors && dataPackage.contributors.length > 0) {
|
|
27
|
+
const creators = [];
|
|
28
|
+
const authors = dataPackage.contributors.filter(c => c.role === "author");
|
|
29
|
+
if (authors.length > 0) {
|
|
30
|
+
authors.forEach(author => {
|
|
31
|
+
const creator = {
|
|
32
|
+
name: author.title,
|
|
33
|
+
};
|
|
34
|
+
if (author.path) {
|
|
35
|
+
creator.affiliation = author.path;
|
|
36
|
+
}
|
|
37
|
+
creators.push(creator);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const firstContributor = dataPackage.contributors[0];
|
|
42
|
+
if (firstContributor) {
|
|
43
|
+
const creator = {
|
|
44
|
+
name: firstContributor.title,
|
|
45
|
+
};
|
|
46
|
+
if (firstContributor.path) {
|
|
47
|
+
creator.affiliation = firstContributor.path;
|
|
48
|
+
}
|
|
49
|
+
creators.push(creator);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (creators.length > 0) {
|
|
53
|
+
metadata.creators = creators;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
metadata.creators = [
|
|
57
|
+
{
|
|
58
|
+
name: "Unknown Author",
|
|
59
|
+
affiliation: "Unknown Affiliation",
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
metadata.creators = [
|
|
66
|
+
{
|
|
67
|
+
name: "Unknown Author",
|
|
68
|
+
affiliation: "Unknown Affiliation",
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
if (dataPackage.keywords && dataPackage.keywords.length > 0) {
|
|
73
|
+
metadata.keywords = dataPackage.keywords;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
metadata: metadata,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9aZW5vZG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wbHVnaW5zL3plbm9kby9wYWNrYWdlL2NvbnZlcnQvdG9aZW5vZG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxXQUFvQjtJQUVwQixNQUFNLFFBQVEsR0FBdUM7UUFDbkQsV0FBVyxFQUFFLFNBQVM7S0FDdkIsQ0FBQTtJQUVELElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsUUFBUSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFBO0lBQ2hELENBQUM7U0FBTSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUE7SUFDMUMsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLENBQUMsV0FBVyxHQUFHLDhDQUE4QyxDQUFBO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUE7SUFDeEMsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFlBQVksSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxNQUFNLFFBQVEsR0FBb0IsRUFBRSxDQUFBO1FBRXBDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQTtRQUN6RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxPQUFPLEdBQWtCO29CQUM3QixJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUs7aUJBQ25CLENBQUE7Z0JBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQTtnQkFDbkMsQ0FBQztnQkFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3hCLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDcEQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQixNQUFNLE9BQU8sR0FBa0I7b0JBQzdCLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO2lCQUM3QixDQUFBO2dCQUVELElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFBO2dCQUM3QyxDQUFDO2dCQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDeEIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsUUFBUSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsUUFBUSxHQUFHO2dCQUNsQjtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixXQUFXLEVBQUUscUJBQXFCO2lCQUNuQzthQUNGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLENBQUMsUUFBUSxHQUFHO1lBQ2xCO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLFdBQVcsRUFBRSxxQkFBcUI7YUFDbkM7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxRQUFRLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUE7SUFDMUMsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLEVBQUUsUUFBcUM7S0FDaEQsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFplbm9kb0NyZWF0b3IgfSBmcm9tIFwiLi4vQ3JlYXRvci50c1wiXG5pbXBvcnQgdHlwZSB7IFplbm9kb1BhY2thZ2UgfSBmcm9tIFwiLi4vUGFja2FnZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGFja2FnZVRvWmVub2RvKFxuICBkYXRhUGFja2FnZTogUGFja2FnZSxcbik6IFBhcnRpYWw8WmVub2RvUGFja2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YTogUGFydGlhbDxaZW5vZG9QYWNrYWdlW1wibWV0YWRhdGFcIl0+ID0ge1xuICAgIHVwbG9hZF90eXBlOiBcImRhdGFzZXRcIixcbiAgfVxuXG4gIGlmIChkYXRhUGFja2FnZS50aXRsZSkge1xuICAgIG1ldGFkYXRhLnRpdGxlID0gZGF0YVBhY2thZ2UudGl0bGVcbiAgfVxuXG4gIGlmIChkYXRhUGFja2FnZS5kZXNjcmlwdGlvbikge1xuICAgIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZGF0YVBhY2thZ2UuZGVzY3JpcHRpb25cbiAgfSBlbHNlIGlmIChkYXRhUGFja2FnZS50aXRsZSkge1xuICAgIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZGF0YVBhY2thZ2UudGl0bGVcbiAgfSBlbHNlIHtcbiAgICBtZXRhZGF0YS5kZXNjcmlwdGlvbiA9IFwiRGF0YXNldCBjcmVhdGVkIHdpdGggQGZyaWN0aW9ubGVzcy10cy96ZW5vZG9cIlxuICB9XG5cbiAgaWYgKGRhdGFQYWNrYWdlLnZlcnNpb24pIHtcbiAgICBtZXRhZGF0YS52ZXJzaW9uID0gZGF0YVBhY2thZ2UudmVyc2lvblxuICB9XG5cbiAgaWYgKGRhdGFQYWNrYWdlLmxpY2Vuc2VzICYmIGRhdGFQYWNrYWdlLmxpY2Vuc2VzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsaWNlbnNlID0gZGF0YVBhY2thZ2UubGljZW5zZXNbMF1cbiAgICBpZiAobGljZW5zZT8ubmFtZSkge1xuICAgICAgbWV0YWRhdGEubGljZW5zZSA9IGxpY2Vuc2UubmFtZVxuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhUGFja2FnZS5jb250cmlidXRvcnMgJiYgZGF0YVBhY2thZ2UuY29udHJpYnV0b3JzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjcmVhdG9yczogWmVub2RvQ3JlYXRvcltdID0gW11cblxuICAgIGNvbnN0IGF1dGhvcnMgPSBkYXRhUGFja2FnZS5jb250cmlidXRvcnMuZmlsdGVyKGMgPT4gYy5yb2xlID09PSBcImF1dGhvclwiKVxuICAgIGlmIChhdXRob3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGF1dGhvcnMuZm9yRWFjaChhdXRob3IgPT4ge1xuICAgICAgICBjb25zdCBjcmVhdG9yOiBaZW5vZG9DcmVhdG9yID0ge1xuICAgICAgICAgIG5hbWU6IGF1dGhvci50aXRsZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdXRob3IucGF0aCkge1xuICAgICAgICAgIGNyZWF0b3IuYWZmaWxpYXRpb24gPSBhdXRob3IucGF0aFxuICAgICAgICB9XG5cbiAgICAgICAgY3JlYXRvcnMucHVzaChjcmVhdG9yKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RDb250cmlidXRvciA9IGRhdGFQYWNrYWdlLmNvbnRyaWJ1dG9yc1swXVxuICAgICAgaWYgKGZpcnN0Q29udHJpYnV0b3IpIHtcbiAgICAgICAgY29uc3QgY3JlYXRvcjogWmVub2RvQ3JlYXRvciA9IHtcbiAgICAgICAgICBuYW1lOiBmaXJzdENvbnRyaWJ1dG9yLnRpdGxlLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0Q29udHJpYnV0b3IucGF0aCkge1xuICAgICAgICAgIGNyZWF0b3IuYWZmaWxpYXRpb24gPSBmaXJzdENvbnRyaWJ1dG9yLnBhdGhcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWF0b3JzLnB1c2goY3JlYXRvcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3JlYXRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgbWV0YWRhdGEuY3JlYXRvcnMgPSBjcmVhdG9yc1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhZGF0YS5jcmVhdG9ycyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiVW5rbm93biBBdXRob3JcIixcbiAgICAgICAgICBhZmZpbGlhdGlvbjogXCJVbmtub3duIEFmZmlsaWF0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG1ldGFkYXRhLmNyZWF0b3JzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcIlVua25vd24gQXV0aG9yXCIsXG4gICAgICAgIGFmZmlsaWF0aW9uOiBcIlVua25vd24gQWZmaWxpYXRpb25cIixcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgaWYgKGRhdGFQYWNrYWdlLmtleXdvcmRzICYmIGRhdGFQYWNrYWdlLmtleXdvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBtZXRhZGF0YS5rZXl3b3JkcyA9IGRhdGFQYWNrYWdlLmtleXdvcmRzXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSBhcyBaZW5vZG9QYWNrYWdlW1wibWV0YWRhdGFcIl0sXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { ZenodoPackage } from "./Package.ts";
|
|
2
|
+
export type { ZenodoCreator } from "./Creator.ts";
|
|
3
|
+
export { loadPackageFromZenodo } from "./load.ts";
|
|
4
|
+
export { savePackageToZenodo } from "./save.ts";
|
|
5
|
+
export { convertPackageFromZenodo } from "./convert/fromZenodo.ts";
|
|
6
|
+
export { convertPackageToZenodo } from "./convert/toZenodo.ts";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { loadPackageFromZenodo } from "./load.js";
|
|
2
|
+
export { savePackageToZenodo } from "./save.js";
|
|
3
|
+
export { convertPackageFromZenodo } from "./convert/fromZenodo.js";
|
|
4
|
+
export { convertPackageToZenodo } from "./convert/toZenodo.js";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL3plbm9kby9wYWNrYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IFplbm9kb1BhY2thZ2UgfSBmcm9tIFwiLi9QYWNrYWdlLnRzXCJcbmV4cG9ydCB0eXBlIHsgWmVub2RvQ3JlYXRvciB9IGZyb20gXCIuL0NyZWF0b3IudHNcIlxuZXhwb3J0IHsgbG9hZFBhY2thZ2VGcm9tWmVub2RvIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5leHBvcnQgeyBzYXZlUGFja2FnZVRvWmVub2RvIH0gZnJvbSBcIi4vc2F2ZS50c1wiXG5leHBvcnQgeyBjb252ZXJ0UGFja2FnZUZyb21aZW5vZG8gfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21aZW5vZG8udHNcIlxuZXhwb3J0IHsgY29udmVydFBhY2thZ2VUb1plbm9kbyB9IGZyb20gXCIuL2NvbnZlcnQvdG9aZW5vZG8udHNcIlxuIl19
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load a package from a Zenodo deposit
|
|
3
|
+
* @param props Object containing the URL to the Zenodo deposit
|
|
4
|
+
* @returns Package object
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadPackageFromZenodo(datasetUrl: string, options?: {
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
[x: `${string}:${string}`]: any;
|
|
10
|
+
$schema?: string;
|
|
11
|
+
resources: import("@frictionless-ts/metadata").Resource[];
|
|
12
|
+
name?: string;
|
|
13
|
+
title?: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
homepage?: string;
|
|
16
|
+
version?: string;
|
|
17
|
+
licenses?: import("@frictionless-ts/metadata").License[];
|
|
18
|
+
contributors?: import("@frictionless-ts/metadata").Contributor[];
|
|
19
|
+
sources?: import("@frictionless-ts/metadata").Source[];
|
|
20
|
+
keywords?: string[];
|
|
21
|
+
created?: string;
|
|
22
|
+
image?: string;
|
|
23
|
+
}>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { mergePackages } from "../../../package/index.js";
|
|
2
|
+
import { makeZenodoApiRequest } from "../zenodo/index.js";
|
|
3
|
+
import { convertPackageFromZenodo } from "./convert/fromZenodo.js";
|
|
4
|
+
/**
|
|
5
|
+
* Load a package from a Zenodo deposit
|
|
6
|
+
* @param props Object containing the URL to the Zenodo deposit
|
|
7
|
+
* @returns Package object
|
|
8
|
+
*/
|
|
9
|
+
export async function loadPackageFromZenodo(datasetUrl, options) {
|
|
10
|
+
const { apiKey } = options ?? {};
|
|
11
|
+
const sandbox = new URL(datasetUrl).host === "sandbox.zenodo.org";
|
|
12
|
+
const recordId = extractRecordId(datasetUrl);
|
|
13
|
+
if (!recordId) {
|
|
14
|
+
throw new Error(`Failed to extract record ID from URL: ${datasetUrl}`);
|
|
15
|
+
}
|
|
16
|
+
const zenodoPackage = await makeZenodoApiRequest({
|
|
17
|
+
endpoint: `/records/${recordId}`,
|
|
18
|
+
apiKey,
|
|
19
|
+
sandbox,
|
|
20
|
+
});
|
|
21
|
+
const systemPackage = convertPackageFromZenodo(zenodoPackage);
|
|
22
|
+
const userPackagePath = systemPackage.resources
|
|
23
|
+
.filter(resource => resource["zenodo:key"] === "datapackage.json")
|
|
24
|
+
.map(resource => resource["zenodo:url"])
|
|
25
|
+
.at(0);
|
|
26
|
+
const datapackage = await mergePackages({ systemPackage, userPackagePath });
|
|
27
|
+
datapackage.resources = datapackage.resources.map(resource => {
|
|
28
|
+
// TODO: remove these keys completely
|
|
29
|
+
return { ...resource, "zenodo:key": undefined, "zenodo:url": undefined };
|
|
30
|
+
});
|
|
31
|
+
return datapackage;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Extract deposit ID from URL
|
|
35
|
+
*
|
|
36
|
+
* Examples:
|
|
37
|
+
* - https://zenodo.org/records/1234567
|
|
38
|
+
* - https://sandbox.zenodo.org/records/1234567
|
|
39
|
+
*/
|
|
40
|
+
function extractRecordId(datasetUrl) {
|
|
41
|
+
const url = new URL(datasetUrl);
|
|
42
|
+
const pathParts = url.pathname.split("/").filter(Boolean);
|
|
43
|
+
return pathParts.at(-1);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvemVub2RvL3BhY2thZ2UvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFFbEU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLFVBQWtCLEVBQ2xCLE9BRUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUE7SUFFakUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzVDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLFVBQVUsRUFBRSxDQUFDLENBQUE7SUFDeEUsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sb0JBQW9CLENBQWdCO1FBQzlELFFBQVEsRUFBRSxZQUFZLFFBQVEsRUFBRTtRQUNoQyxNQUFNO1FBQ04sT0FBTztLQUNSLENBQUMsQ0FBQTtJQUVGLE1BQU0sYUFBYSxHQUFHLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzdELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxTQUFTO1NBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxrQkFBa0IsQ0FBQztTQUNqRSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRVIsTUFBTSxXQUFXLEdBQUcsTUFBTSxhQUFhLENBQUMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQTtJQUMzRSxXQUFXLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzNELHFDQUFxQztRQUNyQyxPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUE7SUFDMUUsQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLFdBQVcsQ0FBQTtBQUNwQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxlQUFlLENBQUMsVUFBa0I7SUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDL0IsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3pELE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZVBhY2thZ2VzIH0gZnJvbSBcIi4uLy4uLy4uL3BhY2thZ2UvaW5kZXgudHNcIlxuaW1wb3J0IHsgbWFrZVplbm9kb0FwaVJlcXVlc3QgfSBmcm9tIFwiLi4vemVub2RvL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgWmVub2RvUGFja2FnZSB9IGZyb20gXCIuL1BhY2thZ2UudHNcIlxuaW1wb3J0IHsgY29udmVydFBhY2thZ2VGcm9tWmVub2RvIH0gZnJvbSBcIi4vY29udmVydC9mcm9tWmVub2RvLnRzXCJcblxuLyoqXG4gKiBMb2FkIGEgcGFja2FnZSBmcm9tIGEgWmVub2RvIGRlcG9zaXRcbiAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgVVJMIHRvIHRoZSBaZW5vZG8gZGVwb3NpdFxuICogQHJldHVybnMgUGFja2FnZSBvYmplY3RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQYWNrYWdlRnJvbVplbm9kbyhcbiAgZGF0YXNldFVybDogc3RyaW5nLFxuICBvcHRpb25zPzoge1xuICAgIGFwaUtleT86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IHsgYXBpS2V5IH0gPSBvcHRpb25zID8/IHt9XG4gIGNvbnN0IHNhbmRib3ggPSBuZXcgVVJMKGRhdGFzZXRVcmwpLmhvc3QgPT09IFwic2FuZGJveC56ZW5vZG8ub3JnXCJcblxuICBjb25zdCByZWNvcmRJZCA9IGV4dHJhY3RSZWNvcmRJZChkYXRhc2V0VXJsKVxuICBpZiAoIXJlY29yZElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZXh0cmFjdCByZWNvcmQgSUQgZnJvbSBVUkw6ICR7ZGF0YXNldFVybH1gKVxuICB9XG5cbiAgY29uc3QgemVub2RvUGFja2FnZSA9IGF3YWl0IG1ha2VaZW5vZG9BcGlSZXF1ZXN0PFplbm9kb1BhY2thZ2U+KHtcbiAgICBlbmRwb2ludDogYC9yZWNvcmRzLyR7cmVjb3JkSWR9YCxcbiAgICBhcGlLZXksXG4gICAgc2FuZGJveCxcbiAgfSlcblxuICBjb25zdCBzeXN0ZW1QYWNrYWdlID0gY29udmVydFBhY2thZ2VGcm9tWmVub2RvKHplbm9kb1BhY2thZ2UpXG4gIGNvbnN0IHVzZXJQYWNrYWdlUGF0aCA9IHN5c3RlbVBhY2thZ2UucmVzb3VyY2VzXG4gICAgLmZpbHRlcihyZXNvdXJjZSA9PiByZXNvdXJjZVtcInplbm9kbzprZXlcIl0gPT09IFwiZGF0YXBhY2thZ2UuanNvblwiKVxuICAgIC5tYXAocmVzb3VyY2UgPT4gcmVzb3VyY2VbXCJ6ZW5vZG86dXJsXCJdKVxuICAgIC5hdCgwKVxuXG4gIGNvbnN0IGRhdGFwYWNrYWdlID0gYXdhaXQgbWVyZ2VQYWNrYWdlcyh7IHN5c3RlbVBhY2thZ2UsIHVzZXJQYWNrYWdlUGF0aCB9KVxuICBkYXRhcGFja2FnZS5yZXNvdXJjZXMgPSBkYXRhcGFja2FnZS5yZXNvdXJjZXMubWFwKHJlc291cmNlID0+IHtcbiAgICAvLyBUT0RPOiByZW1vdmUgdGhlc2Uga2V5cyBjb21wbGV0ZWx5XG4gICAgcmV0dXJuIHsgLi4ucmVzb3VyY2UsIFwiemVub2RvOmtleVwiOiB1bmRlZmluZWQsIFwiemVub2RvOnVybFwiOiB1bmRlZmluZWQgfVxuICB9KVxuXG4gIHJldHVybiBkYXRhcGFja2FnZVxufVxuXG4vKipcbiAqIEV4dHJhY3QgZGVwb3NpdCBJRCBmcm9tIFVSTFxuICpcbiAqIEV4YW1wbGVzOlxuICogLSBodHRwczovL3plbm9kby5vcmcvcmVjb3Jkcy8xMjM0NTY3XG4gKiAtIGh0dHBzOi8vc2FuZGJveC56ZW5vZG8ub3JnL3JlY29yZHMvMTIzNDU2N1xuICovXG5mdW5jdGlvbiBleHRyYWN0UmVjb3JkSWQoZGF0YXNldFVybDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChkYXRhc2V0VXJsKVxuICBjb25zdCBwYXRoUGFydHMgPSB1cmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKVxuICByZXR1cm4gcGF0aFBhcnRzLmF0KC0xKVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|