@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,153 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import ckanPackageFixture from "../fixtures/ckan-package.json" with {
|
|
3
|
+
type: "json"
|
|
4
|
+
};
|
|
5
|
+
import { convertPackageFromCkan } from "./fromCkan.js";
|
|
6
|
+
import { convertPackageToCkan } from "./toCkan.js";
|
|
7
|
+
describe("convertPackageToCkan", () => {
|
|
8
|
+
it("converts a Frictionless Data Package to a CKAN package", () => {
|
|
9
|
+
const dataPackage = {
|
|
10
|
+
name: "test-package",
|
|
11
|
+
title: "Test Package",
|
|
12
|
+
description: "This is a test package",
|
|
13
|
+
version: "1.0.0",
|
|
14
|
+
licenses: [
|
|
15
|
+
{
|
|
16
|
+
name: "cc-by",
|
|
17
|
+
title: "Creative Commons Attribution",
|
|
18
|
+
path: "http://www.opendefinition.org/licenses/cc-by",
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
contributors: [
|
|
22
|
+
{
|
|
23
|
+
title: "Test Author",
|
|
24
|
+
email: "author@example.com",
|
|
25
|
+
role: "author",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
title: "Test Maintainer",
|
|
29
|
+
email: "maintainer@example.com",
|
|
30
|
+
role: "maintainer",
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
keywords: ["test", "sample", "data"],
|
|
34
|
+
created: "2023-01-01T00:00:00Z",
|
|
35
|
+
resources: [
|
|
36
|
+
{
|
|
37
|
+
name: "test-resource",
|
|
38
|
+
path: "https://example.com/data.csv",
|
|
39
|
+
format: "csv",
|
|
40
|
+
mediatype: "text/csv",
|
|
41
|
+
description: "Test resource",
|
|
42
|
+
bytes: 1024,
|
|
43
|
+
hash: "md5:1234567890abcdef",
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
const result = convertPackageToCkan(dataPackage);
|
|
48
|
+
expect(result.name).toEqual(dataPackage.name);
|
|
49
|
+
expect(result.title).toEqual(dataPackage.title);
|
|
50
|
+
expect(result.notes).toEqual(dataPackage.description);
|
|
51
|
+
expect(result.version).toEqual(dataPackage.version);
|
|
52
|
+
if (dataPackage.licenses &&
|
|
53
|
+
dataPackage.licenses.length > 0 &&
|
|
54
|
+
dataPackage.licenses[0]) {
|
|
55
|
+
const license = dataPackage.licenses[0];
|
|
56
|
+
if (license.name)
|
|
57
|
+
expect(result.license_id).toEqual(license.name);
|
|
58
|
+
if (license.title)
|
|
59
|
+
expect(result.license_title).toEqual(license.title);
|
|
60
|
+
if (license.path)
|
|
61
|
+
expect(result.license_url).toEqual(license.path);
|
|
62
|
+
}
|
|
63
|
+
if (dataPackage.contributors && dataPackage.contributors.length >= 2) {
|
|
64
|
+
const author = dataPackage.contributors.find(c => c.role === "author");
|
|
65
|
+
const maintainer = dataPackage.contributors.find(c => c.role === "maintainer");
|
|
66
|
+
if (author) {
|
|
67
|
+
expect(result.author).toEqual(author.title);
|
|
68
|
+
expect(result.author_email).toEqual(author.email);
|
|
69
|
+
}
|
|
70
|
+
if (maintainer) {
|
|
71
|
+
expect(result.maintainer).toEqual(maintainer.title);
|
|
72
|
+
expect(result.maintainer_email).toEqual(maintainer.email);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (dataPackage.keywords && dataPackage.keywords.length > 0) {
|
|
76
|
+
expect(result.tags).toHaveLength(dataPackage.keywords.length);
|
|
77
|
+
dataPackage.keywords.forEach((keyword, index) => {
|
|
78
|
+
const tag = result.tags?.[index];
|
|
79
|
+
if (tag && keyword) {
|
|
80
|
+
expect(tag.name).toEqual(keyword);
|
|
81
|
+
expect(tag.display_name).toEqual(keyword);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
expect(result.resources).toHaveLength(dataPackage.resources.length);
|
|
86
|
+
expect(dataPackage.resources.length).toBeGreaterThan(0);
|
|
87
|
+
expect(result.resources?.length).toBeGreaterThan(0);
|
|
88
|
+
if (dataPackage.resources.length > 0 && result.resources.length > 0) {
|
|
89
|
+
const firstResource = dataPackage.resources[0];
|
|
90
|
+
const firstCkanResource = result.resources[0];
|
|
91
|
+
expect(firstCkanResource).toBeDefined();
|
|
92
|
+
expect(firstResource).toBeDefined();
|
|
93
|
+
if (firstResource && firstCkanResource) {
|
|
94
|
+
expect(firstCkanResource.description).toEqual(firstResource.description);
|
|
95
|
+
expect(firstCkanResource.format).toEqual(firstResource.format?.toUpperCase());
|
|
96
|
+
expect(firstCkanResource.mimetype).toEqual(firstResource.mediatype);
|
|
97
|
+
expect(firstCkanResource.size).toEqual(firstResource.bytes);
|
|
98
|
+
expect(firstCkanResource.hash).toEqual(firstResource.hash);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
it("handles empty resources array", () => {
|
|
103
|
+
const dataPackage = {
|
|
104
|
+
name: "test-package",
|
|
105
|
+
resources: [],
|
|
106
|
+
};
|
|
107
|
+
const result = convertPackageToCkan(dataPackage);
|
|
108
|
+
expect(result.resources).toEqual([]);
|
|
109
|
+
});
|
|
110
|
+
it("handles undefined optional properties", () => {
|
|
111
|
+
const dataPackage = {
|
|
112
|
+
resources: [],
|
|
113
|
+
};
|
|
114
|
+
const result = convertPackageToCkan(dataPackage);
|
|
115
|
+
expect(result.name).toBeUndefined();
|
|
116
|
+
expect(result.title).toBeUndefined();
|
|
117
|
+
expect(result.notes).toBeUndefined();
|
|
118
|
+
expect(result.version).toBeUndefined();
|
|
119
|
+
expect(result.metadata_created).toBeUndefined();
|
|
120
|
+
expect(result.license_id).toBeUndefined();
|
|
121
|
+
expect(result.license_title).toBeUndefined();
|
|
122
|
+
expect(result.license_url).toBeUndefined();
|
|
123
|
+
expect(result.author).toBeUndefined();
|
|
124
|
+
expect(result.author_email).toBeUndefined();
|
|
125
|
+
expect(result.maintainer).toBeUndefined();
|
|
126
|
+
expect(result.maintainer_email).toBeUndefined();
|
|
127
|
+
expect(result.tags).toEqual([]);
|
|
128
|
+
expect(result.resources).toEqual([]);
|
|
129
|
+
});
|
|
130
|
+
it("performs a round-trip conversion (CKAN → DP → CKAN)", () => {
|
|
131
|
+
const originalCkanPackage = ckanPackageFixture;
|
|
132
|
+
const dataPackage = convertPackageFromCkan(originalCkanPackage);
|
|
133
|
+
const resultCkanPackage = convertPackageToCkan(dataPackage);
|
|
134
|
+
expect(resultCkanPackage.name).toEqual(originalCkanPackage.name);
|
|
135
|
+
expect(resultCkanPackage.title).toEqual(originalCkanPackage.title);
|
|
136
|
+
expect(resultCkanPackage.notes).toEqual(originalCkanPackage.notes);
|
|
137
|
+
expect(resultCkanPackage.version).toEqual(originalCkanPackage.version);
|
|
138
|
+
expect(resultCkanPackage.license_id).toEqual(originalCkanPackage.license_id);
|
|
139
|
+
expect(resultCkanPackage.license_title).toEqual(originalCkanPackage.license_title);
|
|
140
|
+
expect(resultCkanPackage.license_url).toEqual(originalCkanPackage.license_url);
|
|
141
|
+
expect(resultCkanPackage.author).toEqual(originalCkanPackage.author);
|
|
142
|
+
expect(resultCkanPackage.author_email).toEqual(originalCkanPackage.author_email);
|
|
143
|
+
expect(resultCkanPackage.maintainer).toEqual(originalCkanPackage.maintainer);
|
|
144
|
+
expect(resultCkanPackage.maintainer_email).toEqual(originalCkanPackage.maintainer_email);
|
|
145
|
+
expect(resultCkanPackage.resources.length).toBeGreaterThan(0);
|
|
146
|
+
expect(resultCkanPackage.tags.length).toEqual(originalCkanPackage.tags.length);
|
|
147
|
+
originalCkanPackage.tags.forEach(originalTag => {
|
|
148
|
+
const matchingTag = resultCkanPackage.tags.find(tag => tag.name === originalTag.name);
|
|
149
|
+
expect(matchingTag).toBeTruthy();
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9Da2FuLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wbHVnaW5zL2NrYW4vcGFja2FnZS9jb252ZXJ0L3RvQ2thbi5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUU3QyxPQUFPLGtCQUFrQixNQUFNLCtCQUErQixDQUFDO0lBQzdELElBQUksRUFBRSxNQUFNO0NBQ2IsQ0FBQTtBQUNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFbEQsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtJQUNwQyxFQUFFLENBQUMsd0RBQXdELEVBQUUsR0FBRyxFQUFFO1FBQ2hFLE1BQU0sV0FBVyxHQUFZO1lBQzNCLElBQUksRUFBRSxjQUFjO1lBQ3BCLEtBQUssRUFBRSxjQUFjO1lBQ3JCLFdBQVcsRUFBRSx3QkFBd0I7WUFDckMsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFO2dCQUNSO29CQUNFLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSw4QkFBOEI7b0JBQ3JDLElBQUksRUFBRSw4Q0FBOEM7aUJBQ3JEO2FBQ0Y7WUFDRCxZQUFZLEVBQUU7Z0JBQ1o7b0JBQ0UsS0FBSyxFQUFFLGFBQWE7b0JBQ3BCLEtBQUssRUFBRSxvQkFBb0I7b0JBQzNCLElBQUksRUFBRSxRQUFRO2lCQUNmO2dCQUNEO29CQUNFLEtBQUssRUFBRSxpQkFBaUI7b0JBQ3hCLEtBQUssRUFBRSx3QkFBd0I7b0JBQy9CLElBQUksRUFBRSxZQUFZO2lCQUNuQjthQUNGO1lBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDcEMsT0FBTyxFQUFFLHNCQUFzQjtZ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QUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzVFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FDaEQsbUJBQW1CLENBQUMsZ0JBQWdCLENBQ3JDLENBQUE7UUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUU3RCxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FDM0MsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDaEMsQ0FBQTtRQUNELG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDN0MsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDN0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQ3JDLENBQUE7WUFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDbEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB0eXBlIHsgQ2thblBhY2thZ2UgfSBmcm9tIFwiLi4vUGFja2FnZS50c1wiXG5pbXBvcnQgY2thblBhY2thZ2VGaXh0dXJlIGZyb20gXCIuLi9maXh0dXJlcy9ja2FuLXBhY2thZ2UuanNvblwiIHdpdGgge1xuICB0eXBlOiBcImpzb25cIixcbn1cbmltcG9ydCB7IGNvbnZlcnRQYWNrYWdlRnJvbUNrYW4gfSBmcm9tIFwiLi9mcm9tQ2thbi50c1wiXG5pbXBvcnQgeyBjb252ZXJ0UGFja2FnZVRvQ2thbiB9IGZyb20gXCIuL3RvQ2thbi50c1wiXG5cbmRlc2NyaWJlKFwiY29udmVydFBhY2thZ2VUb0NrYW5cIiwgKCkgPT4ge1xuICBpdChcImNvbnZlcnRzIGEgRnJpY3Rpb25sZXNzIERhdGEgUGFja2FnZSB0byBhIENLQU4gcGFja2FnZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZGF0YVBhY2thZ2U6IFBhY2thZ2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgdGl0bGU6IFwiVGVzdCBQYWNrYWdlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGlzIGlzIGEgdGVzdCBwYWNrYWdlXCIsXG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgICBsaWNlbnNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjYy1ieVwiLFxuICAgICAgICAgIHRpdGxlOiBcIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb25cIixcbiAgICAgICAgICBwYXRoOiBcImh0dHA6Ly93d3cub3BlbmRlZmluaXRpb24ub3JnL2xpY2Vuc2VzL2NjLWJ5XCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY29udHJpYnV0b3JzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogXCJUZXN0IEF1dGhvclwiLFxuICAgICAgICAgIGVtYWlsOiBcImF1dGhvckBleGFtcGxlLmNvbVwiLFxuICAgICAgICAgIHJvbGU6IFwiYXV0aG9yXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogXCJUZXN0IE1haW50YWluZXJcIixcbiAgICAgICAgICBlbWFpbDogXCJtYWludGFpbmVyQGV4YW1wbGUuY29tXCIsXG4gICAgICAgICAgcm9sZTogXCJtYWludGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAga2V5d29yZHM6IFtcInRlc3RcIiwgXCJzYW1wbGVcIiwgXCJkYXRhXCJdLFxuICAgICAgY3JlYXRlZDogXCIyMDIzLTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcmVzb3VyY2VcIixcbiAgICAgICAgICBwYXRoOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vZGF0YS5jc3ZcIixcbiAgICAgICAgICBmb3JtYXQ6IFwiY3N2XCIsXG4gICAgICAgICAgbWVkaWF0eXBlOiBcInRleHQvY3N2XCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVGVzdCByZXNvdXJjZVwiLFxuICAgICAgICAgIGJ5dGVzOiAxMDI0LFxuICAgICAgICAgIGhhc2g6IFwibWQ1OjEyMzQ1Njc4OTBhYmNkZWZcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydFBhY2thZ2VUb0NrYW4oZGF0YVBhY2thZ2UpXG5cbiAgICBleHBlY3QocmVzdWx0Lm5hbWUpLnRvRXF1YWwoZGF0YVBhY2thZ2UubmFtZSlcbiAgICBleHBlY3QocmVzdWx0LnRpdGxlKS50b0VxdWFsKGRhdGFQYWNrYWdlLnRpdGxlKVxuICAgIGV4cGVjdChyZXN1bHQubm90ZXMpLnRvRXF1YWwoZGF0YVBhY2thZ2UuZGVzY3JpcHRpb24pXG4gICAgZXhwZWN0KHJlc3VsdC52ZXJzaW9uKS50b0VxdWFsKGRhdGFQYWNrYWdlLnZlcnNpb24pXG5cbiAgICBpZiAoXG4gICAgICBkYXRhUGFja2FnZS5saWNlbnNlcyAmJlxuICAgICAgZGF0YVBhY2thZ2UubGljZW5zZXMubGVuZ3RoID4gMCAmJlxuICAgICAgZGF0YVBhY2thZ2UubGljZW5zZXNbMF1cbiAgICApIHtcbiAgICAgIGNvbnN0IGxpY2Vuc2UgPSBkYXRhUGFja2FnZS5saWNlbnNlc1swXVxuICAgICAgaWYgKGxpY2Vuc2UubmFtZSkgZXhwZWN0KHJlc3VsdC5saWNlbnNlX2lkKS50b0VxdWFsKGxpY2Vuc2UubmFtZSlcbiAgICAgIGlmIChsaWNlbnNlLnRpdGxlKSBleHBlY3QocmVzdWx0LmxpY2Vuc2VfdGl0bGUpLnRvRXF1YWwobGljZW5zZS50aXRsZSlcbiAgICAgIGlmIChsaWNlbnNlLnBhdGgpIGV4cGVjdChyZXN1bHQubGljZW5zZV91cmwpLnRvRXF1YWwobGljZW5zZS5wYXRoKVxuICAgIH1cblxuICAgIGlmIChkYXRhUGFja2FnZS5jb250cmlidXRvcnMgJiYgZGF0YVBhY2thZ2UuY29udHJpYnV0b3JzLmxlbmd0aCA+PSAyKSB7XG4gICAgICBjb25zdCBhdXRob3IgPSBkYXRhUGFja2FnZS5jb250cmlidXRvcnMuZmluZChjID0+IGMucm9sZSA9PT0gXCJhdXRob3JcIilcbiAgICAgIGNvbnN0IG1haW50YWluZXIgPSBkYXRhUGFja2FnZS5jb250cmlidXRvcnMuZmluZChcbiAgICAgICAgYyA9PiBjLnJvbGUgPT09IFwibWFpbnRhaW5lclwiLFxuICAgICAgKVxuXG4gICAgICBpZiAoYXV0aG9yKSB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuYXV0aG9yKS50b0VxdWFsKGF1dGhvci50aXRsZSlcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5hdXRob3JfZW1haWwpLnRvRXF1YWwoYXV0aG9yLmVtYWlsKVxuICAgICAgfVxuXG4gICAgICBpZiAobWFpbnRhaW5lcikge1xuICAgICAgICBleHBlY3QocmVzdWx0Lm1haW50YWluZXIpLnRvRXF1YWwobWFpbnRhaW5lci50aXRsZSlcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5tYWludGFpbmVyX2VtYWlsKS50b0VxdWFsKG1haW50YWluZXIuZW1haWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGFQYWNrYWdlLmtleXdvcmRzICYmIGRhdGFQYWNrYWdlLmtleXdvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGV4cGVjdChyZXN1bHQudGFncykudG9IYXZlTGVuZ3RoKGRhdGFQYWNrYWdlLmtleXdvcmRzLmxlbmd0aClcbiAgICAgIGRhdGFQYWNrYWdlLmtleXdvcmRzLmZvckVhY2goKGtleXdvcmQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHRhZyA9IHJlc3VsdC50YWdzPy5baW5kZXhdXG4gICAgICAgIGlmICh0YWcgJiYga2V5d29yZCkge1xuICAgICAgICAgIGV4cGVjdCh0YWcubmFtZSkudG9FcXVhbChrZXl3b3JkKVxuICAgICAgICAgIGV4cGVjdCh0YWcuZGlzcGxheV9uYW1lKS50b0VxdWFsKGtleXdvcmQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZXhwZWN0KHJlc3VsdC5yZXNvdXJjZXMpLnRvSGF2ZUxlbmd0aChkYXRhUGFja2FnZS5yZXNvdXJjZXMubGVuZ3RoKVxuXG4gICAgZXhwZWN0KGRhdGFQYWNrYWdlLnJlc291cmNlcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKVxuICAgIGV4cGVjdChyZXN1bHQucmVzb3VyY2VzPy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKVxuXG4gICAgaWYgKGRhdGFQYWNrYWdlLnJlc291cmNlcy5sZW5ndGggPiAwICYmIHJlc3VsdC5yZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RSZXNvdXJjZSA9IGRhdGFQYWNrYWdlLnJlc291cmNlc1swXVxuICAgICAgY29uc3QgZmlyc3RDa2FuUmVzb3VyY2UgPSByZXN1bHQucmVzb3VyY2VzWzBdXG5cbiAgICAgIGV4cGVjdChmaXJzdENrYW5SZXNvdXJjZSkudG9CZURlZmluZWQoKVxuICAgICAgZXhwZWN0KGZpcnN0UmVzb3VyY2UpLnRvQmVEZWZpbmVkKClcblxuICAgICAgaWYgKGZpcnN0UmVzb3VyY2UgJiYgZmlyc3RDa2FuUmVzb3VyY2UpIHtcbiAgICAgICAgZXhwZWN0KGZpcnN0Q2thblJlc291cmNlLmRlc2NyaXB0aW9uKS50b0VxdWFsKGZpcnN0UmVzb3VyY2UuZGVzY3JpcHRpb24pXG4gICAgICAgIGV4cGVjdChmaXJzdENrYW5SZXNvdXJjZS5mb3JtYXQpLnRvRXF1YWwoXG4gICAgICAgICAgZmlyc3RSZXNvdXJjZS5mb3JtYXQ/LnRvVXBwZXJDYXNlKCksXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KGZpcnN0Q2thblJlc291cmNlLm1pbWV0eXBlKS50b0VxdWFsKGZpcnN0UmVzb3VyY2UubWVkaWF0eXBlKVxuICAgICAgICBleHBlY3QoZmlyc3RDa2FuUmVzb3VyY2Uuc2l6ZSkudG9FcXVhbChmaXJzdFJlc291cmNlLmJ5dGVzKVxuICAgICAgICBleHBlY3QoZmlyc3RDa2FuUmVzb3VyY2UuaGFzaCkudG9FcXVhbChmaXJzdFJlc291cmNlLmhhc2gpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBlbXB0eSByZXNvdXJjZXMgYXJyYXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGRhdGFQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHJlc291cmNlczogW10sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydFBhY2thZ2VUb0NrYW4oZGF0YVBhY2thZ2UpXG5cbiAgICBleHBlY3QocmVzdWx0LnJlc291cmNlcykudG9FcXVhbChbXSlcbiAgfSlcblxuICBpdChcImhhbmRsZXMgdW5kZWZpbmVkIG9wdGlvbmFsIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGRhdGFQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgcmVzb3VyY2VzOiBbXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0UGFja2FnZVRvQ2thbihkYXRhUGFja2FnZSlcblxuICAgIGV4cGVjdChyZXN1bHQubmFtZSkudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC50aXRsZSkudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5ub3RlcykudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC52ZXJzaW9uKS50b0JlVW5kZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0Lm1ldGFkYXRhX2NyZWF0ZWQpLnRvQmVVbmRlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQubGljZW5zZV9pZCkudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5saWNlbnNlX3RpdGxlKS50b0JlVW5kZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LmxpY2Vuc2VfdXJsKS50b0JlVW5kZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LmF1dGhvcikudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5hdXRob3JfZW1haWwpLnRvQmVVbmRlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQubWFpbnRhaW5lcikudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5tYWludGFpbmVyX2VtYWlsKS50b0JlVW5kZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnRhZ3MpLnRvRXF1YWwoW10pXG4gICAgZXhwZWN0KHJlc3VsdC5yZXNvdXJjZXMpLnRvRXF1YWwoW10pXG4gIH0pXG5cbiAgaXQoXCJwZXJmb3JtcyBhIHJvdW5kLXRyaXAgY29udmVyc2lvbiAoQ0tBTiDihpIgRFAg4oaSIENLQU4pXCIsICgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbENrYW5QYWNrYWdlID0gY2thblBhY2thZ2VGaXh0dXJlIGFzIENrYW5QYWNrYWdlXG5cbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IGNvbnZlcnRQYWNrYWdlRnJvbUNrYW4ob3JpZ2luYWxDa2FuUGFja2FnZSlcblxuICAgIGNvbnN0IHJlc3VsdENrYW5QYWNrYWdlID0gY29udmVydFBhY2thZ2VUb0NrYW4oZGF0YVBhY2thZ2UpXG5cbiAgICBleHBlY3QocmVzdWx0Q2thblBhY2thZ2UubmFtZSkudG9FcXVhbChvcmlnaW5hbENrYW5QYWNrYWdlLm5hbWUpXG4gICAgZXhwZWN0KHJlc3VsdENrYW5QYWNrYWdlLnRpdGxlKS50b0VxdWFsKG9yaWdpbmFsQ2thblBhY2thZ2UudGl0bGUpXG4gICAgZXhwZWN0KHJlc3VsdENrYW5QYWNrYWdlLm5vdGVzKS50b0VxdWFsKG9yaWdpbmFsQ2thblBhY2thZ2Uubm90ZXMpXG4gICAgZXhwZWN0KHJlc3VsdENrYW5QYWNrYWdlLnZlcnNpb24pLnRvRXF1YWwob3JpZ2luYWxDa2FuUGFja2FnZS52ZXJzaW9uKVxuXG4gICAgZXhwZWN0KHJlc3VsdENrYW5QYWNrYWdlLmxpY2Vuc2VfaWQpLnRvRXF1YWwob3JpZ2luYWxDa2FuUGFja2FnZS5saWNlbnNlX2lkKVxuICAgIGV4cGVjdChyZXN1bHRDa2FuUGFja2FnZS5saWNlbnNlX3RpdGxlKS50b0VxdWFsKFxuICAgICAgb3JpZ2luYWxDa2FuUGFja2FnZS5saWNlbnNlX3RpdGxlLFxuICAgIClcbiAgICBleHBlY3QocmVzdWx0Q2thblBhY2thZ2UubGljZW5zZV91cmwpLnRvRXF1YWwoXG4gICAgICBvcmlnaW5hbENrYW5QYWNrYWdlLmxpY2Vuc2VfdXJsLFxuICAgIClcblxuICAgIGV4cGVjdChyZXN1bHRDa2FuUGFja2FnZS5hdXRob3IpLnRvRXF1YWwob3JpZ2luYWxDa2FuUGFja2FnZS5hdXRob3IpXG4gICAgZXhwZWN0KHJlc3VsdENrYW5QYWNrYWdlLmF1dGhvcl9lbWFpbCkudG9FcXVhbChcbiAgICAgIG9yaWdpbmFsQ2thblBhY2thZ2UuYXV0aG9yX2VtYWlsLFxuICAgIClcbiAgICBleHBlY3QocmVzdWx0Q2thblBhY2thZ2UubWFpbnRhaW5lcikudG9FcXVhbChvcmlnaW5hbENrYW5QYWNrYWdlLm1haW50YWluZXIpXG4gICAgZXhwZWN0KHJlc3VsdENrYW5QYWNrYWdlLm1haW50YWluZXJfZW1haWwpLnRvRXF1YWwoXG4gICAgICBvcmlnaW5hbENrYW5QYWNrYWdlLm1haW50YWluZXJfZW1haWwsXG4gICAgKVxuXG4gICAgZXhwZWN0KHJlc3VsdENrYW5QYWNrYWdlLnJlc291cmNlcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKVxuXG4gICAgZXhwZWN0KHJlc3VsdENrYW5QYWNrYWdlLnRhZ3MubGVuZ3RoKS50b0VxdWFsKFxuICAgICAgb3JpZ2luYWxDa2FuUGFja2FnZS50YWdzLmxlbmd0aCxcbiAgICApXG4gICAgb3JpZ2luYWxDa2FuUGFja2FnZS50YWdzLmZvckVhY2gob3JpZ2luYWxUYWcgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdUYWcgPSByZXN1bHRDa2FuUGFja2FnZS50YWdzLmZpbmQoXG4gICAgICAgIHRhZyA9PiB0YWcubmFtZSA9PT0gb3JpZ2luYWxUYWcubmFtZSxcbiAgICAgIClcbiAgICAgIGV4cGVjdChtYXRjaGluZ1RhZykudG9CZVRydXRoeSgpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
{
|
|
2
|
+
"author": "Test Author",
|
|
3
|
+
"author_email": "test@email.com",
|
|
4
|
+
"creator_user_id": "47c7f1b1-0ef5-4d7b-b43c-811c51c9e349",
|
|
5
|
+
"id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
6
|
+
"isopen": true,
|
|
7
|
+
"license_id": "cc-by",
|
|
8
|
+
"license_title": "Creative Commons Attribution",
|
|
9
|
+
"license_url": "http://www.opendefinition.org/licenses/cc-by",
|
|
10
|
+
"maintainer": "Test Maintainer",
|
|
11
|
+
"maintainer_email": "test@email.com",
|
|
12
|
+
"metadata_created": "2021-04-09T11:39:37.657233",
|
|
13
|
+
"metadata_modified": "2022-05-20T09:20:43.998956",
|
|
14
|
+
"name": "sample-dataset-1",
|
|
15
|
+
"notes": "A CKAN Dataset is a collection of data resources (such as files), together with a description and other information (what is known as metadata), at a fixed URL. \r\n\r\n",
|
|
16
|
+
"num_resources": 9,
|
|
17
|
+
"num_tags": 8,
|
|
18
|
+
"organization": {
|
|
19
|
+
"id": "1fa89238-ee96-4439-a885-22d15244d070",
|
|
20
|
+
"name": "sample-organization",
|
|
21
|
+
"title": "Sample Organization",
|
|
22
|
+
"type": "organization",
|
|
23
|
+
"description": "This is a sample organization.",
|
|
24
|
+
"image_url": "2022-05-20-084702.929838siurana.jpg",
|
|
25
|
+
"created": "2021-04-09T14:27:17.753798",
|
|
26
|
+
"is_organization": true,
|
|
27
|
+
"approval_status": "approved",
|
|
28
|
+
"state": "active"
|
|
29
|
+
},
|
|
30
|
+
"owner_org": "1fa89238-ee96-4439-a885-22d15244d070",
|
|
31
|
+
"private": false,
|
|
32
|
+
"state": "active",
|
|
33
|
+
"title": "Sample Dataset",
|
|
34
|
+
"type": "dataset",
|
|
35
|
+
"url": "",
|
|
36
|
+
"version": "1.0",
|
|
37
|
+
"groups": [
|
|
38
|
+
{
|
|
39
|
+
"description": "",
|
|
40
|
+
"display_name": "Test Group",
|
|
41
|
+
"id": "5d423f6b-137e-4d15-a156-868763fa7a64",
|
|
42
|
+
"image_display_url": "https://demo.ckan.org/uploads/group/2021-04-21-153504.571229064c7c.png",
|
|
43
|
+
"name": "test-group",
|
|
44
|
+
"title": "Test Group"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"resources": [
|
|
48
|
+
{
|
|
49
|
+
"cache_last_updated": null,
|
|
50
|
+
"cache_url": null,
|
|
51
|
+
"created": "2021-04-09T14:31:09.032858",
|
|
52
|
+
"datastore_active": true,
|
|
53
|
+
"description": "This is a sample resource added via url.",
|
|
54
|
+
"format": "CSV",
|
|
55
|
+
"hash": "",
|
|
56
|
+
"id": "e687245d-7835-44b0-8ed3-0827de123895",
|
|
57
|
+
"last_modified": null,
|
|
58
|
+
"metadata_modified": "2021-04-09T14:31:09.021596",
|
|
59
|
+
"mimetype": "text/csv",
|
|
60
|
+
"mimetype_inner": null,
|
|
61
|
+
"name": "sample-linked.csv",
|
|
62
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
63
|
+
"position": 0,
|
|
64
|
+
"resource_type": null,
|
|
65
|
+
"size": null,
|
|
66
|
+
"state": "active",
|
|
67
|
+
"url": "https://raw.githubusercontent.com/datopian/CKAN_Demo_Datasets/main/resources/org1_sample.csv",
|
|
68
|
+
"url_type": null
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"cache_last_updated": null,
|
|
72
|
+
"cache_url": null,
|
|
73
|
+
"created": "2021-04-09T14:31:45.092631",
|
|
74
|
+
"datastore_active": true,
|
|
75
|
+
"description": "Sample csv (uploaded).",
|
|
76
|
+
"format": "CSV",
|
|
77
|
+
"hash": "",
|
|
78
|
+
"id": "b53c9e72-6b59-4cda-8c0c-7d6a51dad12a",
|
|
79
|
+
"last_modified": "2021-04-09T16:13:57.353205",
|
|
80
|
+
"metadata_modified": "2021-04-09T16:13:57.367140",
|
|
81
|
+
"mimetype": "application/csv",
|
|
82
|
+
"mimetype_inner": null,
|
|
83
|
+
"name": "sample.csv",
|
|
84
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
85
|
+
"position": 1,
|
|
86
|
+
"resource_type": null,
|
|
87
|
+
"size": 6731,
|
|
88
|
+
"state": "active",
|
|
89
|
+
"url": "https://demo.ckan.org/dataset/c322307a-b871-44fe-a602-32ee8437ff04/resource/b53c9e72-6b59-4cda-8c0c-7d6a51dad12a/download/sample.csv",
|
|
90
|
+
"url_type": "upload"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"cache_last_updated": null,
|
|
94
|
+
"cache_url": null,
|
|
95
|
+
"created": "2021-04-09T16:21:17.140402",
|
|
96
|
+
"datastore_active": true,
|
|
97
|
+
"description": "Sample views for csv.",
|
|
98
|
+
"format": "CSV",
|
|
99
|
+
"hash": "",
|
|
100
|
+
"id": "9ce6650b-6ff0-4a52-9b10-09cfc29bbd7e",
|
|
101
|
+
"last_modified": "2021-04-09T16:21:17.106693",
|
|
102
|
+
"metadata_modified": "2021-04-13T12:41:06.751746",
|
|
103
|
+
"mimetype": null,
|
|
104
|
+
"mimetype_inner": null,
|
|
105
|
+
"name": "views.csv",
|
|
106
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
107
|
+
"position": 2,
|
|
108
|
+
"resource_type": null,
|
|
109
|
+
"size": 32773,
|
|
110
|
+
"state": "active",
|
|
111
|
+
"url": "https://demo.ckan.org/dataset/c322307a-b871-44fe-a602-32ee8437ff04/resource/9ce6650b-6ff0-4a52-9b10-09cfc29bbd7e/download/co2-mm-mlo_csv.csv",
|
|
112
|
+
"url_type": "upload"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"cache_last_updated": null,
|
|
116
|
+
"cache_url": null,
|
|
117
|
+
"created": "2021-04-09T14:49:24.711541",
|
|
118
|
+
"datastore_active": false,
|
|
119
|
+
"description": "Sample pdf file.",
|
|
120
|
+
"format": "PDF",
|
|
121
|
+
"hash": "",
|
|
122
|
+
"id": "8aa53505-3b7f-4b9c-9b54-cf674eadc3f1",
|
|
123
|
+
"last_modified": "2021-04-09T16:11:46.261373",
|
|
124
|
+
"metadata_modified": "2021-04-13T12:39:41.141419",
|
|
125
|
+
"mimetype": null,
|
|
126
|
+
"mimetype_inner": null,
|
|
127
|
+
"name": "sample.pdf",
|
|
128
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
129
|
+
"position": 3,
|
|
130
|
+
"resource_type": null,
|
|
131
|
+
"size": 712352,
|
|
132
|
+
"state": "active",
|
|
133
|
+
"url": "https://demo.ckan.org/dataset/c322307a-b871-44fe-a602-32ee8437ff04/resource/8aa53505-3b7f-4b9c-9b54-cf674eadc3f1/download/sample.pdf",
|
|
134
|
+
"url_type": "upload"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"cache_last_updated": null,
|
|
138
|
+
"cache_url": null,
|
|
139
|
+
"created": "2021-04-09T16:17:05.189302",
|
|
140
|
+
"datastore_active": false,
|
|
141
|
+
"description": "Sample txt file.",
|
|
142
|
+
"format": "TXT",
|
|
143
|
+
"hash": "",
|
|
144
|
+
"id": "0185907b-2812-437f-9c64-eae24771ef5f",
|
|
145
|
+
"last_modified": "2021-04-09T16:17:05.136426",
|
|
146
|
+
"metadata_modified": "2021-04-13T12:39:24.524530",
|
|
147
|
+
"mimetype": null,
|
|
148
|
+
"mimetype_inner": null,
|
|
149
|
+
"name": "sample.txt",
|
|
150
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
151
|
+
"position": 4,
|
|
152
|
+
"resource_type": null,
|
|
153
|
+
"size": 85,
|
|
154
|
+
"state": "active",
|
|
155
|
+
"url": "https://demo.ckan.org/dataset/c322307a-b871-44fe-a602-32ee8437ff04/resource/0185907b-2812-437f-9c64-eae24771ef5f/download/sample.txt",
|
|
156
|
+
"url_type": "upload"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"cache_last_updated": null,
|
|
160
|
+
"cache_url": null,
|
|
161
|
+
"created": "2021-04-13T12:19:02.178513",
|
|
162
|
+
"datastore_active": false,
|
|
163
|
+
"description": "Sample GeoJSON resource for the list of countries.\r\n\r\nResource taken from https://openlayers.org/ \r\nLicensed under the 2-Clause BSD (https://www.tldrlegal.com/l/freebsd)",
|
|
164
|
+
"format": "GeoJSON",
|
|
165
|
+
"hash": "",
|
|
166
|
+
"id": "ecd4a62d-998b-46e4-8a64-cadac2125c64",
|
|
167
|
+
"last_modified": "2021-04-13T12:19:01.921374",
|
|
168
|
+
"metadata_modified": "2021-04-13T12:29:29.067536",
|
|
169
|
+
"mimetype": null,
|
|
170
|
+
"mimetype_inner": null,
|
|
171
|
+
"name": "sample.geojson",
|
|
172
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
173
|
+
"position": 5,
|
|
174
|
+
"resource_type": null,
|
|
175
|
+
"size": 255943,
|
|
176
|
+
"state": "active",
|
|
177
|
+
"url": "https://demo.ckan.org/dataset/c322307a-b871-44fe-a602-32ee8437ff04/resource/ecd4a62d-998b-46e4-8a64-cadac2125c64/download/countries.geojson",
|
|
178
|
+
"url_type": "upload"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"cache_last_updated": null,
|
|
182
|
+
"cache_url": null,
|
|
183
|
+
"created": "2021-04-13T12:32:17.823512",
|
|
184
|
+
"datastore_active": false,
|
|
185
|
+
"description": "Sample kml file for Earthquakes of magnitude 5 in 2012.\r\n\r\nResource taken from https://openlayers.org/ \r\nLicensed under the 2-Clause BSD (https://www.tldrlegal.com/l/freebsd)\r\n",
|
|
186
|
+
"format": "KML",
|
|
187
|
+
"hash": "",
|
|
188
|
+
"id": "048333ab-9608-42dc-901b-a7dd9fca3dda",
|
|
189
|
+
"last_modified": "2021-04-13T12:32:17.769578",
|
|
190
|
+
"metadata_modified": "2021-04-13T12:40:09.731123",
|
|
191
|
+
"mimetype": null,
|
|
192
|
+
"mimetype_inner": null,
|
|
193
|
+
"name": "sample.kml",
|
|
194
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
195
|
+
"position": 6,
|
|
196
|
+
"resource_type": null,
|
|
197
|
+
"size": 474000,
|
|
198
|
+
"state": "active",
|
|
199
|
+
"url": "https://demo.ckan.org/dataset/c322307a-b871-44fe-a602-32ee8437ff04/resource/048333ab-9608-42dc-901b-a7dd9fca3dda/download/2012_earthquakes_mag5.kml",
|
|
200
|
+
"url_type": "upload"
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"cache_last_updated": null,
|
|
204
|
+
"cache_url": null,
|
|
205
|
+
"created": "2022-04-11T18:35:24.435997",
|
|
206
|
+
"datastore_active": false,
|
|
207
|
+
"description": "",
|
|
208
|
+
"format": "JPEG",
|
|
209
|
+
"hash": "",
|
|
210
|
+
"id": "b6c22c1d-e789-490d-b935-989093bbb173",
|
|
211
|
+
"last_modified": "2022-04-11T18:35:24.381740",
|
|
212
|
+
"metadata_modified": "2022-05-20T09:03:31.574365",
|
|
213
|
+
"mimetype": "image/png",
|
|
214
|
+
"mimetype_inner": null,
|
|
215
|
+
"name": "avoid-crowds-when-buying-materials-social-media-post.jpeg",
|
|
216
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
217
|
+
"position": 7,
|
|
218
|
+
"resource_type": null,
|
|
219
|
+
"size": 444695,
|
|
220
|
+
"state": "active",
|
|
221
|
+
"url": "https://demo.ckan.org/dataset/c322307a-b871-44fe-a602-32ee8437ff04/resource/b6c22c1d-e789-490d-b935-989093bbb173/download/avoid-crowds-when-buying-materials-social-media-post.jpeg",
|
|
222
|
+
"url_type": "upload"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"cache_last_updated": null,
|
|
226
|
+
"cache_url": null,
|
|
227
|
+
"created": "2022-05-20T09:03:31.617635",
|
|
228
|
+
"datastore_active": false,
|
|
229
|
+
"description": "",
|
|
230
|
+
"format": "WMS",
|
|
231
|
+
"hash": "",
|
|
232
|
+
"id": "664e5e2c-bd7d-4972-a245-a747f7d61cc9",
|
|
233
|
+
"last_modified": null,
|
|
234
|
+
"metadata_modified": "2022-05-20T09:03:42.450846",
|
|
235
|
+
"mimetype": null,
|
|
236
|
+
"mimetype_inner": null,
|
|
237
|
+
"name": "Sample WMS",
|
|
238
|
+
"package_id": "c322307a-b871-44fe-a602-32ee8437ff04",
|
|
239
|
+
"position": 8,
|
|
240
|
+
"resource_type": null,
|
|
241
|
+
"size": null,
|
|
242
|
+
"state": "active",
|
|
243
|
+
"url": "https://geoserveis.icgc.cat/icc_mapesbase/wms/service?",
|
|
244
|
+
"url_type": null
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
"tags": [
|
|
248
|
+
{
|
|
249
|
+
"display_name": "csv",
|
|
250
|
+
"id": "b5e651dd-8f42-445c-b9c4-2f09a3268427",
|
|
251
|
+
"name": "csv",
|
|
252
|
+
"state": "active",
|
|
253
|
+
"vocabulary_id": null
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"display_name": "economy",
|
|
257
|
+
"id": "0c4f9ad5-a372-4bda-a59b-e560cf264b0f",
|
|
258
|
+
"name": "economy",
|
|
259
|
+
"state": "active",
|
|
260
|
+
"vocabulary_id": null
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"display_name": "geojson",
|
|
264
|
+
"id": "a91d1c52-bd37-40fc-a1f2-6610ac7f39f3",
|
|
265
|
+
"name": "geojson",
|
|
266
|
+
"state": "active",
|
|
267
|
+
"vocabulary_id": null
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"display_name": "kml",
|
|
271
|
+
"id": "f29e8c38-be23-430b-bae0-7898f59d0089",
|
|
272
|
+
"name": "kml",
|
|
273
|
+
"state": "active",
|
|
274
|
+
"vocabulary_id": null
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"display_name": "pdf",
|
|
278
|
+
"id": "a4ba9601-bfa5-4322-8a62-38a83f2348c1",
|
|
279
|
+
"name": "pdf",
|
|
280
|
+
"state": "active",
|
|
281
|
+
"vocabulary_id": null
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"display_name": "sample",
|
|
285
|
+
"id": "1e6aa0c9-0dfc-448a-8c13-b5fd8ab2fefd",
|
|
286
|
+
"name": "sample",
|
|
287
|
+
"state": "active",
|
|
288
|
+
"vocabulary_id": null
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"display_name": "txt",
|
|
292
|
+
"id": "19e5f926-d769-49cf-a82c-80870baa3528",
|
|
293
|
+
"name": "txt",
|
|
294
|
+
"state": "active",
|
|
295
|
+
"vocabulary_id": null
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"display_name": "wms",
|
|
299
|
+
"id": "1279dad1-9397-48e1-94b8-0999bac75aee",
|
|
300
|
+
"name": "wms",
|
|
301
|
+
"state": "active",
|
|
302
|
+
"vocabulary_id": null
|
|
303
|
+
}
|
|
304
|
+
],
|
|
305
|
+
"extras": [],
|
|
306
|
+
"relationships_as_subject": [],
|
|
307
|
+
"relationships_as_object": []
|
|
308
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { CkanPackage } from "./Package.ts";
|
|
2
|
+
export type { CkanOrganization } from "./Organization.ts";
|
|
3
|
+
export type { CkanTag } from "./Tag.ts";
|
|
4
|
+
export { loadPackageFromCkan } from "./load.ts";
|
|
5
|
+
export { savePackageToCkan } from "./save.ts";
|
|
6
|
+
export { convertPackageFromCkan } from "./convert/fromCkan.ts";
|
|
7
|
+
export { convertPackageToCkan } from "./convert/toCkan.ts";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { loadPackageFromCkan } from "./load.js";
|
|
2
|
+
export { savePackageToCkan } from "./save.js";
|
|
3
|
+
export { convertPackageFromCkan } from "./convert/fromCkan.js";
|
|
4
|
+
export { convertPackageToCkan } from "./convert/toCkan.js";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2NrYW4vcGFja2FnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBDa2FuUGFja2FnZSB9IGZyb20gXCIuL1BhY2thZ2UudHNcIlxuZXhwb3J0IHR5cGUgeyBDa2FuT3JnYW5pemF0aW9uIH0gZnJvbSBcIi4vT3JnYW5pemF0aW9uLnRzXCJcbmV4cG9ydCB0eXBlIHsgQ2thblRhZyB9IGZyb20gXCIuL1RhZy50c1wiXG5leHBvcnQgeyBsb2FkUGFja2FnZUZyb21Da2FuIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5leHBvcnQgeyBzYXZlUGFja2FnZVRvQ2thbiB9IGZyb20gXCIuL3NhdmUudHNcIlxuZXhwb3J0IHsgY29udmVydFBhY2thZ2VGcm9tQ2thbiB9IGZyb20gXCIuL2NvbnZlcnQvZnJvbUNrYW4udHNcIlxuZXhwb3J0IHsgY29udmVydFBhY2thZ2VUb0NrYW4gfSBmcm9tIFwiLi9jb252ZXJ0L3RvQ2thbi50c1wiXG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load a package from a CKAN instance
|
|
3
|
+
* @param props Object containing the URL to the CKAN package
|
|
4
|
+
* @returns Package object and cleanup function
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadPackageFromCkan(datasetUrl: string): Promise<{
|
|
7
|
+
[x: `${string}:${string}`]: any;
|
|
8
|
+
$schema?: string;
|
|
9
|
+
resources: import("@frictionless-ts/metadata").Resource[];
|
|
10
|
+
name?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
homepage?: string;
|
|
14
|
+
version?: string;
|
|
15
|
+
licenses?: import("@frictionless-ts/metadata").License[];
|
|
16
|
+
contributors?: import("@frictionless-ts/metadata").Contributor[];
|
|
17
|
+
sources?: import("@frictionless-ts/metadata").Source[];
|
|
18
|
+
keywords?: string[];
|
|
19
|
+
created?: string;
|
|
20
|
+
image?: string;
|
|
21
|
+
}>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { mergePackages } from "../../../package/index.js";
|
|
2
|
+
import { makeCkanApiRequest } from "../ckan/index.js";
|
|
3
|
+
import { convertPackageFromCkan } from "./convert/fromCkan.js";
|
|
4
|
+
/**
|
|
5
|
+
* Load a package from a CKAN instance
|
|
6
|
+
* @param props Object containing the URL to the CKAN package
|
|
7
|
+
* @returns Package object and cleanup function
|
|
8
|
+
*/
|
|
9
|
+
export async function loadPackageFromCkan(datasetUrl) {
|
|
10
|
+
const packageId = extractPackageId(datasetUrl);
|
|
11
|
+
if (!packageId) {
|
|
12
|
+
throw new Error(`Failed to extract package ID from URL: ${datasetUrl}`);
|
|
13
|
+
}
|
|
14
|
+
const ckanPackage = await makeCkanApiRequest({
|
|
15
|
+
ckanUrl: datasetUrl,
|
|
16
|
+
action: "package_show",
|
|
17
|
+
payload: { id: packageId },
|
|
18
|
+
});
|
|
19
|
+
for (const resource of ckanPackage.resources) {
|
|
20
|
+
const resourceId = resource.id;
|
|
21
|
+
if (["CSV", "XLS", "XLSX"].includes(resource.format)) {
|
|
22
|
+
const schema = await loadCkanSchema({ datasetUrl, resourceId });
|
|
23
|
+
if (schema) {
|
|
24
|
+
resource.schema = schema;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const systemPackage = convertPackageFromCkan(ckanPackage);
|
|
29
|
+
const userPackagePath = systemPackage.resources
|
|
30
|
+
.filter(resource => resource["ckan:key"] === "datapackage.json")
|
|
31
|
+
.map(resource => resource["ckan:url"])
|
|
32
|
+
.at(0);
|
|
33
|
+
const datapackage = await mergePackages({ systemPackage, userPackagePath });
|
|
34
|
+
datapackage.resources = datapackage.resources.map(resource => {
|
|
35
|
+
// TODO: remove these keys completely
|
|
36
|
+
return { ...resource, "ckan:key": undefined, "ckan:url": undefined };
|
|
37
|
+
});
|
|
38
|
+
return datapackage;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Extract package ID from URL
|
|
42
|
+
*
|
|
43
|
+
* Examples:
|
|
44
|
+
* - https://hri.fi/data/en_GB/dataset/helsingin-kaupungin-verkkosivustojen-kavijaanalytiikka
|
|
45
|
+
* - https://www.opendata.dk/city-of-copenhagen/parkeringszoner-information
|
|
46
|
+
* - https://open.africa/dataset/pib-annual-senegal
|
|
47
|
+
* - https://data.nhm.ac.uk/dataset/join-the-dots-collection-level-descriptions
|
|
48
|
+
*/
|
|
49
|
+
function extractPackageId(datasetUrl) {
|
|
50
|
+
const url = new URL(datasetUrl);
|
|
51
|
+
const pathParts = url.pathname.split("/").filter(Boolean);
|
|
52
|
+
return pathParts.at(-1);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Fetch resource schema data from CKAN datastore
|
|
56
|
+
*/
|
|
57
|
+
async function loadCkanSchema(options) {
|
|
58
|
+
try {
|
|
59
|
+
// For some reason, datastore_info doesn't work
|
|
60
|
+
// So we use data fetching endpoint that also returns the schema
|
|
61
|
+
const result = await makeCkanApiRequest({
|
|
62
|
+
ckanUrl: options.datasetUrl,
|
|
63
|
+
action: "datastore_search",
|
|
64
|
+
payload: { resource_id: options.resourceId, limit: 0 },
|
|
65
|
+
});
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
const fields = result.fields.filter((field) => field.id !== "_id" && field.id !== "_full_text");
|
|
68
|
+
return { fields };
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvY2thbi9wYWNrYWdlL2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRXJELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRTlEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLFVBQWtCO0lBQzFELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzlDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLFVBQVUsRUFBRSxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sa0JBQWtCLENBQWM7UUFDeEQsT0FBTyxFQUFFLFVBQVU7UUFDbkIsTUFBTSxFQUFFLGNBQWM7UUFDdEIsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRTtLQUMzQixDQUFDLENBQUE7SUFFRixLQUFLLE1BQU0sUUFBUSxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1lBQy9ELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7WUFDMUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDekQsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLFNBQVM7U0FDNUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLGtCQUFrQixDQUFDO1NBQy9ELEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNyQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFUixNQUFNLFdBQVcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFBO0lBQzNFLFdBQVcsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDM0QscUNBQXFDO1FBQ3JDLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQTtJQUN0RSxDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsVUFBa0I7SUFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDL0IsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3pELE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pCLENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxjQUFjLENBQUMsT0FHN0I7SUFDQyxJQUFJLENBQUM7UUFDSCwrQ0FBK0M7UUFDL0MsZ0VBQWdFO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUM7WUFDdEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzNCLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUN2RCxDQUFDLENBQUE7UUFFRixhQUFhO1FBQ2IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ2pDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FDaEUsQ0FBQTtRQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2VQYWNrYWdlcyB9IGZyb20gXCIuLi8uLi8uLi9wYWNrYWdlL2luZGV4LnRzXCJcbmltcG9ydCB7IG1ha2VDa2FuQXBpUmVxdWVzdCB9IGZyb20gXCIuLi9ja2FuL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgQ2thblBhY2thZ2UgfSBmcm9tIFwiLi9QYWNrYWdlLnRzXCJcbmltcG9ydCB7IGNvbnZlcnRQYWNrYWdlRnJvbUNrYW4gfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21Da2FuLnRzXCJcblxuLyoqXG4gKiBMb2FkIGEgcGFja2FnZSBmcm9tIGEgQ0tBTiBpbnN0YW5jZVxuICogQHBhcmFtIHByb3BzIE9iamVjdCBjb250YWluaW5nIHRoZSBVUkwgdG8gdGhlIENLQU4gcGFja2FnZVxuICogQHJldHVybnMgUGFja2FnZSBvYmplY3QgYW5kIGNsZWFudXAgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQYWNrYWdlRnJvbUNrYW4oZGF0YXNldFVybDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhY2thZ2VJZCA9IGV4dHJhY3RQYWNrYWdlSWQoZGF0YXNldFVybClcbiAgaWYgKCFwYWNrYWdlSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBleHRyYWN0IHBhY2thZ2UgSUQgZnJvbSBVUkw6ICR7ZGF0YXNldFVybH1gKVxuICB9XG5cbiAgY29uc3QgY2thblBhY2thZ2UgPSBhd2FpdCBtYWtlQ2thbkFwaVJlcXVlc3Q8Q2thblBhY2thZ2U+KHtcbiAgICBja2FuVXJsOiBkYXRhc2V0VXJsLFxuICAgIGFjdGlvbjogXCJwYWNrYWdlX3Nob3dcIixcbiAgICBwYXlsb2FkOiB7IGlkOiBwYWNrYWdlSWQgfSxcbiAgfSlcblxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNrYW5QYWNrYWdlLnJlc291cmNlcykge1xuICAgIGNvbnN0IHJlc291cmNlSWQgPSByZXNvdXJjZS5pZFxuICAgIGlmIChbXCJDU1ZcIiwgXCJYTFNcIiwgXCJYTFNYXCJdLmluY2x1ZGVzKHJlc291cmNlLmZvcm1hdCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IGxvYWRDa2FuU2NoZW1hKHsgZGF0YXNldFVybCwgcmVzb3VyY2VJZCB9KVxuICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICByZXNvdXJjZS5zY2hlbWEgPSBzY2hlbWFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzeXN0ZW1QYWNrYWdlID0gY29udmVydFBhY2thZ2VGcm9tQ2thbihja2FuUGFja2FnZSlcbiAgY29uc3QgdXNlclBhY2thZ2VQYXRoID0gc3lzdGVtUGFja2FnZS5yZXNvdXJjZXNcbiAgICAuZmlsdGVyKHJlc291cmNlID0+IHJlc291cmNlW1wiY2thbjprZXlcIl0gPT09IFwiZGF0YXBhY2thZ2UuanNvblwiKVxuICAgIC5tYXAocmVzb3VyY2UgPT4gcmVzb3VyY2VbXCJja2FuOnVybFwiXSlcbiAgICAuYXQoMClcblxuICBjb25zdCBkYXRhcGFja2FnZSA9IGF3YWl0IG1lcmdlUGFja2FnZXMoeyBzeXN0ZW1QYWNrYWdlLCB1c2VyUGFja2FnZVBhdGggfSlcbiAgZGF0YXBhY2thZ2UucmVzb3VyY2VzID0gZGF0YXBhY2thZ2UucmVzb3VyY2VzLm1hcChyZXNvdXJjZSA9PiB7XG4gICAgLy8gVE9ETzogcmVtb3ZlIHRoZXNlIGtleXMgY29tcGxldGVseVxuICAgIHJldHVybiB7IC4uLnJlc291cmNlLCBcImNrYW46a2V5XCI6IHVuZGVmaW5lZCwgXCJja2FuOnVybFwiOiB1bmRlZmluZWQgfVxuICB9KVxuXG4gIHJldHVybiBkYXRhcGFja2FnZVxufVxuXG4vKipcbiAqIEV4dHJhY3QgcGFja2FnZSBJRCBmcm9tIFVSTFxuICpcbiAqIEV4YW1wbGVzOlxuICogLSBodHRwczovL2hyaS5maS9kYXRhL2VuX0dCL2RhdGFzZXQvaGVsc2luZ2luLWthdXB1bmdpbi12ZXJra29zaXZ1c3RvamVuLWthdmlqYWFuYWx5dGlpa2thXG4gKiAtIGh0dHBzOi8vd3d3Lm9wZW5kYXRhLmRrL2NpdHktb2YtY29wZW5oYWdlbi9wYXJrZXJpbmdzem9uZXItaW5mb3JtYXRpb25cbiAqIC0gaHR0cHM6Ly9vcGVuLmFmcmljYS9kYXRhc2V0L3BpYi1hbm51YWwtc2VuZWdhbFxuICogLSBodHRwczovL2RhdGEubmhtLmFjLnVrL2RhdGFzZXQvam9pbi10aGUtZG90cy1jb2xsZWN0aW9uLWxldmVsLWRlc2NyaXB0aW9uc1xuICovXG5mdW5jdGlvbiBleHRyYWN0UGFja2FnZUlkKGRhdGFzZXRVcmw6IHN0cmluZykge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGRhdGFzZXRVcmwpXG4gIGNvbnN0IHBhdGhQYXJ0cyA9IHVybC5wYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pXG4gIHJldHVybiBwYXRoUGFydHMuYXQoLTEpXG59XG5cbi8qKlxuICogRmV0Y2ggcmVzb3VyY2Ugc2NoZW1hIGRhdGEgZnJvbSBDS0FOIGRhdGFzdG9yZVxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkQ2thblNjaGVtYShvcHRpb25zOiB7XG4gIGRhdGFzZXRVcmw6IHN0cmluZ1xuICByZXNvdXJjZUlkOiBzdHJpbmdcbn0pIHtcbiAgdHJ5IHtcbiAgICAvLyBGb3Igc29tZSByZWFzb24sIGRhdGFzdG9yZV9pbmZvIGRvZXNuJ3Qgd29ya1xuICAgIC8vIFNvIHdlIHVzZSBkYXRhIGZldGNoaW5nIGVuZHBvaW50IHRoYXQgYWxzbyByZXR1cm5zIHRoZSBzY2hlbWFcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtYWtlQ2thbkFwaVJlcXVlc3Qoe1xuICAgICAgY2thblVybDogb3B0aW9ucy5kYXRhc2V0VXJsLFxuICAgICAgYWN0aW9uOiBcImRhdGFzdG9yZV9zZWFyY2hcIixcbiAgICAgIHBheWxvYWQ6IHsgcmVzb3VyY2VfaWQ6IG9wdGlvbnMucmVzb3VyY2VJZCwgbGltaXQ6IDAgfSxcbiAgICB9KVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGZpZWxkcyA9IHJlc3VsdC5maWVsZHMuZmlsdGVyKFxuICAgICAgKGZpZWxkOiBhbnkpID0+IGZpZWxkLmlkICE9PSBcIl9pZFwiICYmIGZpZWxkLmlkICE9PSBcIl9mdWxsX3RleHRcIixcbiAgICApXG5cbiAgICByZXR1cm4geyBmaWVsZHMgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { useRecording } from "vitest-polly";
|
|
3
|
+
import { loadPackageFromCkan } from "./load.js";
|
|
4
|
+
useRecording();
|
|
5
|
+
describe("loadPackageFromCkan", () => {
|
|
6
|
+
it("should load a package", async () => {
|
|
7
|
+
const dataPackage = await loadPackageFromCkan("https://data.nhm.ac.uk/dataset/join-the-dots-collection-level-descriptions");
|
|
8
|
+
expect(dataPackage).toMatchSnapshot();
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2lucy9ja2FuL3BhY2thZ2UvbG9hZC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUUvQyxZQUFZLEVBQUUsQ0FBQTtBQUVkLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7SUFDbkMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLE1BQU0sbUJBQW1CLENBQzNDLDRFQUE0RSxDQUM3RSxDQUFBO1FBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFBO0lBQ3ZDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgdXNlUmVjb3JkaW5nIH0gZnJvbSBcInZpdGVzdC1wb2xseVwiXG5pbXBvcnQgeyBsb2FkUGFja2FnZUZyb21Da2FuIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5cbnVzZVJlY29yZGluZygpXG5cbmRlc2NyaWJlKFwibG9hZFBhY2thZ2VGcm9tQ2thblwiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIGxvYWQgYSBwYWNrYWdlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUNrYW4oXG4gICAgICBcImh0dHBzOi8vZGF0YS5uaG0uYWMudWsvZGF0YXNldC9qb2luLXRoZS1kb3RzLWNvbGxlY3Rpb24tbGV2ZWwtZGVzY3JpcHRpb25zXCIsXG4gICAgKVxuXG4gICAgZXhwZWN0KGRhdGFQYWNrYWdlKS50b01hdGNoU25hcHNob3QoKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Package } from "@frictionless-ts/metadata";
|
|
2
|
+
export declare function savePackageToCkan(dataPackage: Package, options: {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
ckanUrl: string;
|
|
5
|
+
ownerOrg: string;
|
|
6
|
+
datasetName: string;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
path: unknown;
|
|
9
|
+
datasetUrl: string;
|
|
10
|
+
}>;
|