@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,278 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import ckanSchemaFixture from "./fixtures/ckan-schema.json" with {
|
|
3
|
+
type: "json"
|
|
4
|
+
};
|
|
5
|
+
import { convertSchemaFromCkan } from "./fromCkan.js";
|
|
6
|
+
import { convertSchemaToCkan } from "./toCkan.js";
|
|
7
|
+
describe("convertSchemaToCkan", () => {
|
|
8
|
+
it("converts a Frictionless schema to a CKAN schema", () => {
|
|
9
|
+
const schema = {
|
|
10
|
+
fields: [
|
|
11
|
+
{
|
|
12
|
+
name: "id",
|
|
13
|
+
type: "integer",
|
|
14
|
+
title: "ID",
|
|
15
|
+
description: "Unique identifier",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: "name",
|
|
19
|
+
type: "string",
|
|
20
|
+
title: "Name",
|
|
21
|
+
description: "Person's full name",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "age",
|
|
25
|
+
type: "integer",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "score",
|
|
29
|
+
type: "number",
|
|
30
|
+
title: "Score",
|
|
31
|
+
description: "Test score",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: "is_active",
|
|
35
|
+
type: "boolean",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "birth_date",
|
|
39
|
+
type: "date",
|
|
40
|
+
title: "Birth Date",
|
|
41
|
+
description: "Date of birth",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "start_time",
|
|
45
|
+
type: "time",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "created_at",
|
|
49
|
+
type: "datetime",
|
|
50
|
+
title: "Created At",
|
|
51
|
+
description: "Timestamp when record was created",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: "metadata",
|
|
55
|
+
type: "object",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "tags",
|
|
59
|
+
type: "array",
|
|
60
|
+
title: "Tags",
|
|
61
|
+
description: "List of tags",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "location",
|
|
65
|
+
type: "geopoint",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "boundary",
|
|
69
|
+
type: "geojson",
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
const result = convertSchemaToCkan(schema);
|
|
74
|
+
expect(result.fields).toHaveLength(schema.fields.length);
|
|
75
|
+
const idField = result.fields.find(f => f.id === "id");
|
|
76
|
+
expect(idField).toBeDefined();
|
|
77
|
+
if (idField) {
|
|
78
|
+
expect(idField.type).toEqual("int");
|
|
79
|
+
expect(idField.info).toBeDefined();
|
|
80
|
+
expect(idField.info?.label).toEqual("ID");
|
|
81
|
+
expect(idField.info?.notes).toEqual("Unique identifier");
|
|
82
|
+
expect(idField.info?.type_override).toEqual("int");
|
|
83
|
+
}
|
|
84
|
+
const nameField = result.fields.find(f => f.id === "name");
|
|
85
|
+
expect(nameField).toBeDefined();
|
|
86
|
+
if (nameField) {
|
|
87
|
+
expect(nameField.type).toEqual("text");
|
|
88
|
+
expect(nameField.info).toBeDefined();
|
|
89
|
+
expect(nameField.info?.label).toEqual("Name");
|
|
90
|
+
expect(nameField.info?.notes).toEqual("Person's full name");
|
|
91
|
+
expect(nameField.info?.type_override).toEqual("text");
|
|
92
|
+
}
|
|
93
|
+
const ageField = result.fields.find(f => f.id === "age");
|
|
94
|
+
expect(ageField).toBeDefined();
|
|
95
|
+
if (ageField) {
|
|
96
|
+
expect(ageField.type).toEqual("int");
|
|
97
|
+
expect(ageField.info).toBeUndefined();
|
|
98
|
+
}
|
|
99
|
+
const scoreField = result.fields.find(f => f.id === "score");
|
|
100
|
+
expect(scoreField).toBeDefined();
|
|
101
|
+
if (scoreField) {
|
|
102
|
+
expect(scoreField.type).toEqual("numeric");
|
|
103
|
+
expect(scoreField.info).toBeDefined();
|
|
104
|
+
expect(scoreField.info?.label).toEqual("Score");
|
|
105
|
+
expect(scoreField.info?.notes).toEqual("Test score");
|
|
106
|
+
expect(scoreField.info?.type_override).toEqual("numeric");
|
|
107
|
+
}
|
|
108
|
+
const isActiveField = result.fields.find(f => f.id === "is_active");
|
|
109
|
+
expect(isActiveField).toBeDefined();
|
|
110
|
+
if (isActiveField) {
|
|
111
|
+
expect(isActiveField.type).toEqual("bool");
|
|
112
|
+
expect(isActiveField.info).toBeUndefined();
|
|
113
|
+
}
|
|
114
|
+
const birthDateField = result.fields.find(f => f.id === "birth_date");
|
|
115
|
+
expect(birthDateField).toBeDefined();
|
|
116
|
+
if (birthDateField) {
|
|
117
|
+
expect(birthDateField.type).toEqual("date");
|
|
118
|
+
expect(birthDateField.info).toBeDefined();
|
|
119
|
+
expect(birthDateField.info?.label).toEqual("Birth Date");
|
|
120
|
+
expect(birthDateField.info?.notes).toEqual("Date of birth");
|
|
121
|
+
expect(birthDateField.info?.type_override).toEqual("date");
|
|
122
|
+
}
|
|
123
|
+
const startTimeField = result.fields.find(f => f.id === "start_time");
|
|
124
|
+
expect(startTimeField).toBeDefined();
|
|
125
|
+
if (startTimeField) {
|
|
126
|
+
expect(startTimeField.type).toEqual("time");
|
|
127
|
+
expect(startTimeField.info).toBeUndefined();
|
|
128
|
+
}
|
|
129
|
+
const createdAtField = result.fields.find(f => f.id === "created_at");
|
|
130
|
+
expect(createdAtField).toBeDefined();
|
|
131
|
+
if (createdAtField) {
|
|
132
|
+
expect(createdAtField.type).toEqual("timestamp");
|
|
133
|
+
expect(createdAtField.info).toBeDefined();
|
|
134
|
+
expect(createdAtField.info?.label).toEqual("Created At");
|
|
135
|
+
expect(createdAtField.info?.notes).toEqual("Timestamp when record was created");
|
|
136
|
+
expect(createdAtField.info?.type_override).toEqual("timestamp");
|
|
137
|
+
}
|
|
138
|
+
const metadataField = result.fields.find(f => f.id === "metadata");
|
|
139
|
+
expect(metadataField).toBeDefined();
|
|
140
|
+
if (metadataField) {
|
|
141
|
+
expect(metadataField.type).toEqual("json");
|
|
142
|
+
expect(metadataField.info).toBeUndefined();
|
|
143
|
+
}
|
|
144
|
+
const tagsField = result.fields.find(f => f.id === "tags");
|
|
145
|
+
expect(tagsField).toBeDefined();
|
|
146
|
+
if (tagsField) {
|
|
147
|
+
expect(tagsField.type).toEqual("array");
|
|
148
|
+
expect(tagsField.info).toBeDefined();
|
|
149
|
+
expect(tagsField.info?.label).toEqual("Tags");
|
|
150
|
+
expect(tagsField.info?.notes).toEqual("List of tags");
|
|
151
|
+
expect(tagsField.info?.type_override).toEqual("array");
|
|
152
|
+
}
|
|
153
|
+
const locationField = result.fields.find(f => f.id === "location");
|
|
154
|
+
expect(locationField).toBeDefined();
|
|
155
|
+
if (locationField) {
|
|
156
|
+
expect(locationField.type).toEqual("geopoint");
|
|
157
|
+
}
|
|
158
|
+
const boundaryField = result.fields.find(f => f.id === "boundary");
|
|
159
|
+
expect(boundaryField).toBeDefined();
|
|
160
|
+
if (boundaryField) {
|
|
161
|
+
expect(boundaryField.type).toEqual("geojson");
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
it("handles fields with only title", () => {
|
|
165
|
+
const schema = {
|
|
166
|
+
fields: [
|
|
167
|
+
{
|
|
168
|
+
name: "field1",
|
|
169
|
+
type: "string",
|
|
170
|
+
title: "Field 1",
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
};
|
|
174
|
+
const result = convertSchemaToCkan(schema);
|
|
175
|
+
expect(result.fields).toHaveLength(1);
|
|
176
|
+
const field = result.fields[0];
|
|
177
|
+
expect(field).toBeDefined();
|
|
178
|
+
if (field) {
|
|
179
|
+
expect(field.id).toEqual("field1");
|
|
180
|
+
expect(field.type).toEqual("text");
|
|
181
|
+
expect(field.info).toBeDefined();
|
|
182
|
+
expect(field.info?.label).toEqual("Field 1");
|
|
183
|
+
expect(field.info?.notes).toBeUndefined();
|
|
184
|
+
expect(field.info?.type_override).toEqual("text");
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
it("handles fields with only description", () => {
|
|
188
|
+
const schema = {
|
|
189
|
+
fields: [
|
|
190
|
+
{
|
|
191
|
+
name: "field1",
|
|
192
|
+
type: "string",
|
|
193
|
+
description: "Field 1 description",
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
};
|
|
197
|
+
const result = convertSchemaToCkan(schema);
|
|
198
|
+
expect(result.fields).toHaveLength(1);
|
|
199
|
+
const field = result.fields[0];
|
|
200
|
+
expect(field).toBeDefined();
|
|
201
|
+
if (field) {
|
|
202
|
+
expect(field.id).toEqual("field1");
|
|
203
|
+
expect(field.type).toEqual("text");
|
|
204
|
+
expect(field.info).toBeDefined();
|
|
205
|
+
expect(field.info?.label).toBeUndefined();
|
|
206
|
+
expect(field.info?.notes).toEqual("Field 1 description");
|
|
207
|
+
expect(field.info?.type_override).toEqual("text");
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
it("handles fields without title or description", () => {
|
|
211
|
+
const schema = {
|
|
212
|
+
fields: [
|
|
213
|
+
{
|
|
214
|
+
name: "simple_field",
|
|
215
|
+
type: "string",
|
|
216
|
+
},
|
|
217
|
+
],
|
|
218
|
+
};
|
|
219
|
+
const result = convertSchemaToCkan(schema);
|
|
220
|
+
expect(result.fields).toHaveLength(1);
|
|
221
|
+
const field = result.fields[0];
|
|
222
|
+
expect(field).toBeDefined();
|
|
223
|
+
if (field) {
|
|
224
|
+
expect(field.id).toEqual("simple_field");
|
|
225
|
+
expect(field.type).toEqual("text");
|
|
226
|
+
expect(field.info).toBeUndefined();
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
it("handles empty fields array", () => {
|
|
230
|
+
const schema = {
|
|
231
|
+
fields: [],
|
|
232
|
+
};
|
|
233
|
+
const result = convertSchemaToCkan(schema);
|
|
234
|
+
expect(result.fields).toEqual([]);
|
|
235
|
+
});
|
|
236
|
+
it("converts unknown field types to 'text'", () => {
|
|
237
|
+
const schema = {
|
|
238
|
+
fields: [
|
|
239
|
+
{
|
|
240
|
+
name: "unknown_field",
|
|
241
|
+
type: "unknown",
|
|
242
|
+
},
|
|
243
|
+
],
|
|
244
|
+
};
|
|
245
|
+
const result = convertSchemaToCkan(schema);
|
|
246
|
+
expect(result.fields).toHaveLength(1);
|
|
247
|
+
const field = result.fields[0];
|
|
248
|
+
expect(field).toBeDefined();
|
|
249
|
+
if (field) {
|
|
250
|
+
expect(field.type).toEqual("text");
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
it("performs a round-trip conversion (CKAN → Frictionless → CKAN)", () => {
|
|
254
|
+
const originalCkanSchema = ckanSchemaFixture;
|
|
255
|
+
const frictionlessSchema = convertSchemaFromCkan(originalCkanSchema);
|
|
256
|
+
const resultCkanSchema = convertSchemaToCkan(frictionlessSchema);
|
|
257
|
+
expect(resultCkanSchema.fields).toHaveLength(originalCkanSchema.fields.length);
|
|
258
|
+
originalCkanSchema.fields.forEach(originalField => {
|
|
259
|
+
const resultField = resultCkanSchema.fields.find(f => f.id === originalField.id);
|
|
260
|
+
expect(resultField).toBeDefined();
|
|
261
|
+
if (resultField && originalField) {
|
|
262
|
+
expect(resultField.id).toEqual(originalField.id);
|
|
263
|
+
if (originalField.info) {
|
|
264
|
+
expect(resultField.info).toBeDefined();
|
|
265
|
+
if (resultField.info) {
|
|
266
|
+
if (originalField.info.label) {
|
|
267
|
+
expect(resultField.info.label).toEqual(originalField.info.label);
|
|
268
|
+
}
|
|
269
|
+
if (originalField.info.notes) {
|
|
270
|
+
expect(resultField.info.notes).toEqual(originalField.info.notes);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9Da2FuLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wbHVnaW5zL2NrYW4vc2NoZW1hL2NvbnZlcnQvdG9Da2FuLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdDLE9BQU8saUJBQWlCLE1BQU0sNkJBQTZCLENBQUM7SUFDMUQsSUFBSSxFQUFFLE1BQU07Q0FDYixDQUFBO0FBQ0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVqRCxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQ25DLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7UUFDekQsTUFBTSxNQUFNLEdBQVc7WUFDckIsTUFBTSxFQUFFO2dCQUNOO29CQUNFLElBQUksRUFBRSxJQUFJO29CQUNWLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxJQUFJO29CQUNYLFdBQVcsRUFBRSxtQkFBbUI7aUJBQ2pDO2dCQUNEO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxNQUFNO29CQUNiLFdBQVcsRUFBRSxvQkFBb0I7aUJBQ2xDO2dCQUNEO29CQUNFLElBQUksRUFBRSxLQUFLO29CQUNYLElBQUksRUFBRSxTQUFTO2lCQUNoQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsT0FBTztvQkFDYixJQUFJLEVBQUUsUUFBUTtvQkFDZCxLQUFLLEVBQUUsT0FBTztvQkFDZCxXQUFXLEVBQUUsWUFBWTtpQkFDMUI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLElBQUksRUFBRSxTQUFTO2lCQUNoQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUs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Q0FBQyxJQUFJLENBQzlDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsRUFBRSxDQUMvQixDQUFBO1lBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBRWpDLElBQUksV0FBVyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUE7Z0JBRWhELElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN2QixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO29CQUN0QyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDckIsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUM3QixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTt3QkFDbEUsQ0FBQzt3QkFDRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQzdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO3dCQUNsRSxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNjaGVtYSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgdHlwZSB7IENrYW5TY2hlbWEgfSBmcm9tIFwiLi4vU2NoZW1hLnRzXCJcbmltcG9ydCBja2FuU2NoZW1hRml4dHVyZSBmcm9tIFwiLi9maXh0dXJlcy9ja2FuLXNjaGVtYS5qc29uXCIgd2l0aCB7XG4gIHR5cGU6IFwianNvblwiLFxufVxuaW1wb3J0IHsgY29udmVydFNjaGVtYUZyb21Da2FuIH0gZnJvbSBcIi4vZnJvbUNrYW4udHNcIlxuaW1wb3J0IHsgY29udmVydFNjaGVtYVRvQ2thbiB9IGZyb20gXCIuL3RvQ2thbi50c1wiXG5cbmRlc2NyaWJlKFwiY29udmVydFNjaGVtYVRvQ2thblwiLCAoKSA9PiB7XG4gIGl0KFwiY29udmVydHMgYSBGcmljdGlvbmxlc3Mgc2NoZW1hIHRvIGEgQ0tBTiBzY2hlbWFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgdGl0bGU6IFwiSURcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJVbmlxdWUgaWRlbnRpZmllclwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICB0aXRsZTogXCJOYW1lXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiUGVyc29uJ3MgZnVsbCBuYW1lXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImFnZVwiLFxuICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzY29yZVwiLFxuICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2NvcmVcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUZXN0IHNjb3JlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlzX2FjdGl2ZVwiLFxuICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJiaXJ0aF9kYXRlXCIsXG4gICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgdGl0bGU6IFwiQmlydGggRGF0ZVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRhdGUgb2YgYmlydGhcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic3RhcnRfdGltZVwiLFxuICAgICAgICAgIHR5cGU6IFwidGltZVwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgdHlwZTogXCJkYXRldGltZVwiLFxuICAgICAgICAgIHRpdGxlOiBcIkNyZWF0ZWQgQXRcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaW1lc3RhbXAgd2hlbiByZWNvcmQgd2FzIGNyZWF0ZWRcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibWV0YWRhdGFcIixcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0YWdzXCIsXG4gICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIHRpdGxlOiBcIlRhZ3NcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJMaXN0IG9mIHRhZ3NcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibG9jYXRpb25cIixcbiAgICAgICAgICB0eXBlOiBcImdlb3BvaW50XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImJvdW5kYXJ5XCIsXG4gICAgICAgICAgdHlwZTogXCJnZW9qc29uXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRTY2hlbWFUb0NrYW4oc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5maWVsZHMpLnRvSGF2ZUxlbmd0aChzY2hlbWEuZmllbGRzLmxlbmd0aClcblxuICAgIGNvbnN0IGlkRmllbGQgPSByZXN1bHQuZmllbGRzLmZpbmQoZiA9PiBmLmlkID09PSBcImlkXCIpXG4gICAgZXhwZWN0KGlkRmllbGQpLnRvQmVEZWZpbmVkKClcbiAgICBpZiAoaWRGaWVsZCkge1xuICAgICAgZXhwZWN0KGlkRmllbGQudHlwZSkudG9FcXVhbChcImludFwiKVxuICAgICAgZXhwZWN0KGlkRmllbGQuaW5mbykudG9CZURlZmluZWQoKVxuICAgICAgZXhwZWN0KGlkRmllbGQuaW5mbz8ubGFiZWwpLnRvRXF1YWwoXCJJRFwiKVxuICAgICAgZXhwZWN0KGlkRmllbGQuaW5mbz8ubm90ZXMpLnRvRXF1YWwoXCJVbmlxdWUgaWRlbnRpZmllclwiKVxuICAgICAgZXhwZWN0KGlkRmllbGQuaW5mbz8udHlwZV9vdmVycmlkZSkudG9FcXVhbChcImludFwiKVxuICAgIH1cblxuICAgIGNvbnN0IG5hbWVGaWVsZCA9IHJlc3VsdC5maWVsZHMuZmluZChmID0+IGYuaWQgPT09IFwibmFtZVwiKVxuICAgIGV4cGVjdChuYW1lRmllbGQpLnRvQmVEZWZpbmVkKClcbiAgICBpZiAobmFtZUZpZWxkKSB7XG4gICAgICBleHBlY3QobmFtZUZpZWxkLnR5cGUpLnRvRXF1YWwoXCJ0ZXh0XCIpXG4gICAgICBleHBlY3QobmFtZUZpZWxkLmluZm8pLnRvQmVEZWZpbmVkKClcbiAgICAgIGV4cGVjdChuYW1lRmllbGQuaW5mbz8ubGFiZWwpLnRvRXF1YWwoXCJOYW1lXCIpXG4gICAgICBleHBlY3QobmFtZUZpZWxkLmluZm8/Lm5vdGVzKS50b0VxdWFsKFwiUGVyc29uJ3MgZnVsbCBuYW1lXCIpXG4gICAgICBleHBlY3QobmFtZUZpZWxkLmluZm8/LnR5cGVfb3ZlcnJpZGUpLnRvRXF1YWwoXCJ0ZXh0XCIpXG4gICAgfVxuXG4gICAgY29uc3QgYWdlRmllbGQgPSByZXN1bHQuZmllbGRzLmZpbmQoZiA9PiBmLmlkID09PSBcImFnZVwiKVxuICAgIGV4cGVjdChhZ2VGaWVsZCkudG9CZURlZmluZWQoKVxuICAgIGlmIChhZ2VGaWVsZCkge1xuICAgICAgZXhwZWN0KGFnZUZpZWxkLnR5cGUpLnRvRXF1YWwoXCJpbnRcIilcbiAgICAgIGV4cGVjdChhZ2VGaWVsZC5pbmZvKS50b0JlVW5kZWZpbmVkKClcbiAgICB9XG5cbiAgICBjb25zdCBzY29yZUZpZWxkID0gcmVzdWx0LmZpZWxkcy5maW5kKGYgPT4gZi5pZCA9PT0gXCJzY29yZVwiKVxuICAgIGV4cGVjdChzY29yZUZpZWxkKS50b0JlRGVmaW5lZCgpXG4gICAgaWYgKHNjb3JlRmllbGQpIHtcbiAgICAgIGV4cGVjdChzY29yZUZpZWxkLnR5cGUpLnRvRXF1YWwoXCJudW1lcmljXCIpXG4gICAgICBleHBlY3Qoc2NvcmVGaWVsZC5pbmZvKS50b0JlRGVmaW5lZCgpXG4gICAgICBleHBlY3Qoc2NvcmVGaWVsZC5pbmZvPy5sYWJlbCkudG9FcXVhbChcIlNjb3JlXCIpXG4gICAgICBleHBlY3Qoc2NvcmVGaWVsZC5pbmZvPy5ub3RlcykudG9FcXVhbChcIlRlc3Qgc2NvcmVcIilcbiAgICAgIGV4cGVjdChzY29yZUZpZWxkLmluZm8/LnR5cGVfb3ZlcnJpZGUpLnRvRXF1YWwoXCJudW1lcmljXCIpXG4gICAgfVxuXG4gICAgY29uc3QgaXNBY3RpdmVGaWVsZCA9IHJlc3VsdC5maWVsZHMuZmluZChmID0+IGYuaWQgPT09IFwiaXNfYWN0aXZlXCIpXG4gICAgZXhwZWN0KGlzQWN0aXZlRmllbGQpLnRvQmVEZWZpbmVkKClcbiAgICBpZiAoaXNBY3RpdmVGaWVsZCkge1xuICAgICAgZXhwZWN0KGlzQWN0aXZlRmllbGQudHlwZSkudG9FcXVhbChcImJvb2xcIilcbiAgICAgIGV4cGVjdChpc0FjdGl2ZUZpZWxkLmluZm8pLnRvQmVVbmRlZmluZWQoKVxuICAgIH1cblxuICAgIGNvbnN0IGJpcnRoRGF0ZUZpZWxkID0gcmVzdWx0LmZpZWxkcy5maW5kKGYgPT4gZi5pZCA9PT0gXCJiaXJ0aF9kYXRlXCIpXG4gICAgZXhwZWN0KGJpcnRoRGF0ZUZpZWxkKS50b0JlRGVmaW5lZCgpXG4gICAgaWYgKGJpcnRoRGF0ZUZpZWxkKSB7XG4gICAgICBleHBlY3QoYmlydGhEYXRlRmllbGQudHlwZSkudG9FcXVhbChcImRhdGVcIilcbiAgICAgIGV4cGVjdChiaXJ0aERhdGVGaWVsZC5pbmZvKS50b0JlRGVmaW5lZCgpXG4gICAgICBleHBlY3QoYmlydGhEYXRlRmllbGQuaW5mbz8ubGFiZWwpLnRvRXF1YWwoXCJCaXJ0aCBEYXRlXCIpXG4gICAgICBleHBlY3QoYmlydGhEYXRlRmllbGQuaW5mbz8ubm90ZXMpLnRvRXF1YWwoXCJEYXRlIG9mIGJpcnRoXCIpXG4gICAgICBleHBlY3QoYmlydGhEYXRlRmllbGQuaW5mbz8udHlwZV9vdmVycmlkZSkudG9FcXVhbChcImRhdGVcIilcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFRpbWVGaWVsZCA9IHJlc3VsdC5maWVsZHMuZmluZChmID0+IGYuaWQgPT09IFwic3RhcnRfdGltZVwiKVxuICAgIGV4cGVjdChzdGFydFRpbWVGaWVsZCkudG9CZURlZmluZWQoKVxuICAgIGlmIChzdGFydFRpbWVGaWVsZCkge1xuICAgICAgZXhwZWN0KHN0YXJ0VGltZUZpZWxkLnR5cGUpLnRvRXF1YWwoXCJ0aW1lXCIpXG4gICAgICBleHBlY3Qoc3RhcnRUaW1lRmllbGQuaW5mbykudG9CZVVuZGVmaW5lZCgpXG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlZEF0RmllbGQgPSByZXN1bHQuZmllbGRzLmZpbmQoZiA9PiBmLmlkID09PSBcImNyZWF0ZWRfYXRcIilcbiAgICBleHBlY3QoY3JlYXRlZEF0RmllbGQpLnRvQmVEZWZpbmVkKClcbiAgICBpZiAoY3JlYXRlZEF0RmllbGQpIHtcbiAgICAgIGV4cGVjdChjcmVhdGVkQXRGaWVsZC50eXBlKS50b0VxdWFsKFwidGltZXN0YW1wXCIpXG4gICAgICBleHBlY3QoY3JlYXRlZEF0RmllbGQuaW5mbykudG9CZURlZmluZWQoKVxuICAgICAgZXhwZWN0KGNyZWF0ZWRBdEZpZWxkLmluZm8/LmxhYmVsKS50b0VxdWFsKFwiQ3JlYXRlZCBBdFwiKVxuICAgICAgZXhwZWN0KGNyZWF0ZWRBdEZpZWxkLmluZm8/Lm5vdGVzKS50b0VxdWFsKFxuICAgICAgICBcIlRpbWVzdGFtcCB3aGVuIHJlY29yZCB3YXMgY3JlYXRlZFwiLFxuICAgICAgKVxuICAgICAgZXhwZWN0KGNyZWF0ZWRBdEZpZWxkLmluZm8/LnR5cGVfb3ZlcnJpZGUpLnRvRXF1YWwoXCJ0aW1lc3RhbXBcIilcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhZGF0YUZpZWxkID0gcmVzdWx0LmZpZWxkcy5maW5kKGYgPT4gZi5pZCA9PT0gXCJtZXRhZGF0YVwiKVxuICAgIGV4cGVjdChtZXRhZGF0YUZpZWxkKS50b0JlRGVmaW5lZCgpXG4gICAgaWYgKG1ldGFkYXRhRmllbGQpIHtcbiAgICAgIGV4cGVjdChtZXRhZGF0YUZpZWxkLnR5cGUpLnRvRXF1YWwoXCJqc29uXCIpXG4gICAgICBleHBlY3QobWV0YWRhdGFGaWVsZC5pbmZvKS50b0JlVW5kZWZpbmVkKClcbiAgICB9XG5cbiAgICBjb25zdCB0YWdzRmllbGQgPSByZXN1bHQuZmllbGRzLmZpbmQoZiA9PiBmLmlkID09PSBcInRhZ3NcIilcbiAgICBleHBlY3QodGFnc0ZpZWxkKS50b0JlRGVmaW5lZCgpXG4gICAgaWYgKHRhZ3NGaWVsZCkge1xuICAgICAgZXhwZWN0KHRhZ3NGaWVsZC50eXBlKS50b0VxdWFsKFwiYXJyYXlcIilcbiAgICAgIGV4cGVjdCh0YWdzRmllbGQuaW5mbykudG9CZURlZmluZWQoKVxuICAgICAgZXhwZWN0KHRhZ3NGaWVsZC5pbmZvPy5sYWJlbCkudG9FcXVhbChcIlRhZ3NcIilcbiAgICAgIGV4cGVjdCh0YWdzRmllbGQuaW5mbz8ubm90ZXMpLnRvRXF1YWwoXCJMaXN0IG9mIHRhZ3NcIilcbiAgICAgIGV4cGVjdCh0YWdzRmllbGQuaW5mbz8udHlwZV9vdmVycmlkZSkudG9FcXVhbChcImFycmF5XCIpXG4gICAgfVxuXG4gICAgY29uc3QgbG9jYXRpb25GaWVsZCA9IHJlc3VsdC5maWVsZHMuZmluZChmID0+IGYuaWQgPT09IFwibG9jYXRpb25cIilcbiAgICBleHBlY3QobG9jYXRpb25GaWVsZCkudG9CZURlZmluZWQoKVxuICAgIGlmIChsb2NhdGlvbkZpZWxkKSB7XG4gICAgICBleHBlY3QobG9jYXRpb25GaWVsZC50eXBlKS50b0VxdWFsKFwiZ2VvcG9pbnRcIilcbiAgICB9XG5cbiAgICBjb25zdCBib3VuZGFyeUZpZWxkID0gcmVzdWx0LmZpZWxkcy5maW5kKGYgPT4gZi5pZCA9PT0gXCJib3VuZGFyeVwiKVxuICAgIGV4cGVjdChib3VuZGFyeUZpZWxkKS50b0JlRGVmaW5lZCgpXG4gICAgaWYgKGJvdW5kYXJ5RmllbGQpIHtcbiAgICAgIGV4cGVjdChib3VuZGFyeUZpZWxkLnR5cGUpLnRvRXF1YWwoXCJnZW9qc29uXCIpXG4gICAgfVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBmaWVsZHMgd2l0aCBvbmx5IHRpdGxlXCIsICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJmaWVsZDFcIixcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIHRpdGxlOiBcIkZpZWxkIDFcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydFNjaGVtYVRvQ2thbihzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0LmZpZWxkcykudG9IYXZlTGVuZ3RoKDEpXG4gICAgY29uc3QgZmllbGQgPSByZXN1bHQuZmllbGRzWzBdXG4gICAgZXhwZWN0KGZpZWxkKS50b0JlRGVmaW5lZCgpXG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICBleHBlY3QoZmllbGQuaWQpLnRvRXF1YWwoXCJmaWVsZDFcIilcbiAgICAgIGV4cGVjdChmaWVsZC50eXBlKS50b0VxdWFsKFwidGV4dFwiKVxuICAgICAgZXhwZWN0KGZpZWxkLmluZm8pLnRvQmVEZWZpbmVkKClcbiAgICAgIGV4cGVjdChmaWVsZC5pbmZvPy5sYWJlbCkudG9FcXVhbChcIkZpZWxkIDFcIilcbiAgICAgIGV4cGVjdChmaWVsZC5pbmZvPy5ub3RlcykudG9CZVVuZGVmaW5lZCgpXG4gICAgICBleHBlY3QoZmllbGQuaW5mbz8udHlwZV9vdmVycmlkZSkudG9FcXVhbChcInRleHRcIilcbiAgICB9XG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGZpZWxkcyB3aXRoIG9ubHkgZGVzY3JpcHRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImZpZWxkMVwiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiRmllbGQgMSBkZXNjcmlwdGlvblwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0U2NoZW1hVG9Da2FuKHNjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHQuZmllbGRzKS50b0hhdmVMZW5ndGgoMSlcbiAgICBjb25zdCBmaWVsZCA9IHJlc3VsdC5maWVsZHNbMF1cbiAgICBleHBlY3QoZmllbGQpLnRvQmVEZWZpbmVkKClcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIGV4cGVjdChmaWVsZC5pZCkudG9FcXVhbChcImZpZWxkMVwiKVxuICAgICAgZXhwZWN0KGZpZWxkLnR5cGUpLnRvRXF1YWwoXCJ0ZXh0XCIpXG4gICAgICBleHBlY3QoZmllbGQuaW5mbykudG9CZURlZmluZWQoKVxuICAgICAgZXhwZWN0KGZpZWxkLmluZm8/LmxhYmVsKS50b0JlVW5kZWZpbmVkKClcbiAgICAgIGV4cGVjdChmaWVsZC5pbmZvPy5ub3RlcykudG9FcXVhbChcIkZpZWxkIDEgZGVzY3JpcHRpb25cIilcbiAgICAgIGV4cGVjdChmaWVsZC5pbmZvPy50eXBlX292ZXJyaWRlKS50b0VxdWFsKFwidGV4dFwiKVxuICAgIH1cbiAgfSlcblxuICBpdChcImhhbmRsZXMgZmllbGRzIHdpdGhvdXQgdGl0bGUgb3IgZGVzY3JpcHRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNpbXBsZV9maWVsZFwiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRTY2hlbWFUb0NrYW4oc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5maWVsZHMpLnRvSGF2ZUxlbmd0aCgxKVxuICAgIGNvbnN0IGZpZWxkID0gcmVzdWx0LmZpZWxkc1swXVxuICAgIGV4cGVjdChmaWVsZCkudG9CZURlZmluZWQoKVxuICAgIGlmIChmaWVsZCkge1xuICAgICAgZXhwZWN0KGZpZWxkLmlkKS50b0VxdWFsKFwic2ltcGxlX2ZpZWxkXCIpXG4gICAgICBleHBlY3QoZmllbGQudHlwZSkudG9FcXVhbChcInRleHRcIilcbiAgICAgIGV4cGVjdChmaWVsZC5pbmZvKS50b0JlVW5kZWZpbmVkKClcbiAgICB9XG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGVtcHR5IGZpZWxkcyBhcnJheVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRTY2hlbWFUb0NrYW4oc2NoZW1hKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5maWVsZHMpLnRvRXF1YWwoW10pXG4gIH0pXG5cbiAgaXQoXCJjb252ZXJ0cyB1bmtub3duIGZpZWxkIHR5cGVzIHRvICd0ZXh0J1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidW5rbm93bl9maWVsZFwiLFxuICAgICAgICAgIHR5cGU6IFwidW5rbm93blwiIGFzIGFueSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydFNjaGVtYVRvQ2thbihzY2hlbWEpXG5cbiAgICBleHBlY3QocmVzdWx0LmZpZWxkcykudG9IYXZlTGVuZ3RoKDEpXG4gICAgY29uc3QgZmllbGQgPSByZXN1bHQuZmllbGRzWzBdXG4gICAgZXhwZWN0KGZpZWxkKS50b0JlRGVmaW5lZCgpXG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICBleHBlY3QoZmllbGQudHlwZSkudG9FcXVhbChcInRleHRcIilcbiAgICB9XG4gIH0pXG5cbiAgaXQoXCJwZXJmb3JtcyBhIHJvdW5kLXRyaXAgY29udmVyc2lvbiAoQ0tBTiDihpIgRnJpY3Rpb25sZXNzIOKGkiBDS0FOKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxDa2FuU2NoZW1hID0gY2thblNjaGVtYUZpeHR1cmUgYXMgQ2thblNjaGVtYVxuXG4gICAgY29uc3QgZnJpY3Rpb25sZXNzU2NoZW1hID0gY29udmVydFNjaGVtYUZyb21Da2FuKG9yaWdpbmFsQ2thblNjaGVtYSlcblxuICAgIGNvbnN0IHJlc3VsdENrYW5TY2hlbWEgPSBjb252ZXJ0U2NoZW1hVG9Da2FuKGZyaWN0aW9ubGVzc1NjaGVtYSlcblxuICAgIGV4cGVjdChyZXN1bHRDa2FuU2NoZW1hLmZpZWxkcykudG9IYXZlTGVuZ3RoKFxuICAgICAgb3JpZ2luYWxDa2FuU2NoZW1hLmZpZWxkcy5sZW5ndGgsXG4gICAgKVxuXG4gICAgb3JpZ2luYWxDa2FuU2NoZW1hLmZpZWxkcy5mb3JFYWNoKG9yaWdpbmFsRmllbGQgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0RmllbGQgPSByZXN1bHRDa2FuU2NoZW1hLmZpZWxkcy5maW5kKFxuICAgICAgICBmID0+IGYuaWQgPT09IG9yaWdpbmFsRmllbGQuaWQsXG4gICAgICApXG4gICAgICBleHBlY3QocmVzdWx0RmllbGQpLnRvQmVEZWZpbmVkKClcblxuICAgICAgaWYgKHJlc3VsdEZpZWxkICYmIG9yaWdpbmFsRmllbGQpIHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdEZpZWxkLmlkKS50b0VxdWFsKG9yaWdpbmFsRmllbGQuaWQpXG5cbiAgICAgICAgaWYgKG9yaWdpbmFsRmllbGQuaW5mbykge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHRGaWVsZC5pbmZvKS50b0JlRGVmaW5lZCgpXG4gICAgICAgICAgaWYgKHJlc3VsdEZpZWxkLmluZm8pIHtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbEZpZWxkLmluZm8ubGFiZWwpIHtcbiAgICAgICAgICAgICAgZXhwZWN0KHJlc3VsdEZpZWxkLmluZm8ubGFiZWwpLnRvRXF1YWwob3JpZ2luYWxGaWVsZC5pbmZvLmxhYmVsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRmllbGQuaW5mby5ub3Rlcykge1xuICAgICAgICAgICAgICBleHBlY3QocmVzdWx0RmllbGQuaW5mby5ub3RlcykudG9FcXVhbChvcmlnaW5hbEZpZWxkLmluZm8ubm90ZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { convertSchemaFromCkan } from "./convert/fromCkan.js";
|
|
2
|
+
export { convertSchemaToCkan } from "./convert/toCkan.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2NrYW4vc2NoZW1hL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBDa2FuU2NoZW1hIH0gZnJvbSBcIi4vU2NoZW1hLnRzXCJcbmV4cG9ydCB0eXBlIHsgQ2thbkZpZWxkIH0gZnJvbSBcIi4vRmllbGQudHNcIlxuZXhwb3J0IHsgY29udmVydFNjaGVtYUZyb21Da2FuIH0gZnJvbSBcIi4vY29udmVydC9mcm9tQ2thbi50c1wiXG5leHBvcnQgeyBjb252ZXJ0U2NoZW1hVG9Da2FuIH0gZnJvbSBcIi4vY29udmVydC90b0NrYW4udHNcIlxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./package/index.js";
|
|
2
|
+
export * from "./plugin.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL2RhdGFodWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQTtBQUNsQyxjQUFjLGFBQWEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3BhY2thZ2UvaW5kZXgudHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGx1Z2luLnRzXCJcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { loadPackageFromDatahub } from "./load.ts";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { loadPackageFromDatahub } from "./load.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2RhdGFodWIvcGFja2FnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBsb2FkUGFja2FnZUZyb21EYXRhaHViIH0gZnJvbSBcIi4vbG9hZC50c1wiXG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function loadPackageFromDatahub(datasetUrl: string): Promise<import("@frictionless-ts/metadata").Package>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { loadPackageDescriptor } from "@frictionless-ts/metadata";
|
|
2
|
+
export async function loadPackageFromDatahub(datasetUrl) {
|
|
3
|
+
const url = new URL(datasetUrl);
|
|
4
|
+
url.pathname = `${url.pathname}/datapackage.json`;
|
|
5
|
+
url.search = "";
|
|
6
|
+
url.hash = "";
|
|
7
|
+
return loadPackageDescriptor(url.toString());
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvZGF0YWh1Yi9wYWNrYWdlL2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFakUsTUFBTSxDQUFDLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxVQUFrQjtJQUM3RCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUUvQixHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsbUJBQW1CLENBQUE7SUFDakQsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7SUFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUViLE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvYWRQYWNrYWdlRGVzY3JpcHRvciB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQYWNrYWdlRnJvbURhdGFodWIoZGF0YXNldFVybDogc3RyaW5nKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoZGF0YXNldFVybClcblxuICB1cmwucGF0aG5hbWUgPSBgJHt1cmwucGF0aG5hbWV9L2RhdGFwYWNrYWdlLmpzb25gXG4gIHVybC5zZWFyY2ggPSBcIlwiXG4gIHVybC5oYXNoID0gXCJcIlxuXG4gIHJldHVybiBsb2FkUGFja2FnZURlc2NyaXB0b3IodXJsLnRvU3RyaW5nKCkpXG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { useRecording } from "vitest-polly";
|
|
3
|
+
import { loadPackageFromDatahub } from "./load.js";
|
|
4
|
+
useRecording();
|
|
5
|
+
describe.skip("loadPackageFromDatahub", () => {
|
|
6
|
+
it("should load a package", async () => {
|
|
7
|
+
const dataPackage = await loadPackageFromDatahub("https://datahub.io/core/eu-emissions-trading-system#readme");
|
|
8
|
+
expect(dataPackage).toMatchSnapshot();
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2lucy9kYXRhaHViL3BhY2thZ2UvbG9hZC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVsRCxZQUFZLEVBQUUsQ0FBQTtBQUVkLFFBQVEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQzNDLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyQyxNQUFNLFdBQVcsR0FBRyxNQUFNLHNCQUFzQixDQUM5Qyw0REFBNEQsQ0FDN0QsQ0FBQTtRQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtJQUN2QyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IHVzZVJlY29yZGluZyB9IGZyb20gXCJ2aXRlc3QtcG9sbHlcIlxuaW1wb3J0IHsgbG9hZFBhY2thZ2VGcm9tRGF0YWh1YiB9IGZyb20gXCIuL2xvYWQudHNcIlxuXG51c2VSZWNvcmRpbmcoKVxuXG5kZXNjcmliZS5za2lwKFwibG9hZFBhY2thZ2VGcm9tRGF0YWh1YlwiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIGxvYWQgYSBwYWNrYWdlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbURhdGFodWIoXG4gICAgICBcImh0dHBzOi8vZGF0YWh1Yi5pby9jb3JlL2V1LWVtaXNzaW9ucy10cmFkaW5nLXN5c3RlbSNyZWFkbWVcIixcbiAgICApXG5cbiAgICBleHBlY3QoZGF0YVBhY2thZ2UpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isRemotePath } from "@frictionless-ts/metadata";
|
|
2
|
+
import { loadPackageFromDatahub } from "./package/index.js";
|
|
3
|
+
export class DatahubPlugin {
|
|
4
|
+
async loadPackage(source) {
|
|
5
|
+
const isDatahub = getIsDatahub(source);
|
|
6
|
+
if (!isDatahub)
|
|
7
|
+
return undefined;
|
|
8
|
+
const dataPackage = await loadPackageFromDatahub(source);
|
|
9
|
+
return dataPackage;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function getIsDatahub(path) {
|
|
13
|
+
const isRemote = isRemotePath(path);
|
|
14
|
+
if (!isRemote)
|
|
15
|
+
return false;
|
|
16
|
+
return new URL(path).hostname === "datahub.io";
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2lucy9kYXRhaHViL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFM0QsTUFBTSxPQUFPLGFBQWE7SUFDeEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQzlCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN0QyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBRWhDLE1BQU0sV0FBVyxHQUFHLE1BQU0sc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEQsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztDQUNGO0FBRUQsU0FBUyxZQUFZLENBQUMsSUFBWTtJQUNoQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbkMsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUUzQixPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUE7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUmVtb3RlUGF0aCB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB0eXBlIHsgRGF0YXNldFBsdWdpbiB9IGZyb20gXCIuLi8uLi9wbHVnaW4udHNcIlxuaW1wb3J0IHsgbG9hZFBhY2thZ2VGcm9tRGF0YWh1YiB9IGZyb20gXCIuL3BhY2thZ2UvaW5kZXgudHNcIlxuXG5leHBvcnQgY2xhc3MgRGF0YWh1YlBsdWdpbiBpbXBsZW1lbnRzIERhdGFzZXRQbHVnaW4ge1xuICBhc3luYyBsb2FkUGFja2FnZShzb3VyY2U6IHN0cmluZykge1xuICAgIGNvbnN0IGlzRGF0YWh1YiA9IGdldElzRGF0YWh1Yihzb3VyY2UpXG4gICAgaWYgKCFpc0RhdGFodWIpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGRhdGFQYWNrYWdlID0gYXdhaXQgbG9hZFBhY2thZ2VGcm9tRGF0YWh1Yihzb3VyY2UpXG4gICAgcmV0dXJuIGRhdGFQYWNrYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SXNEYXRhaHViKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBpc1JlbW90ZSA9IGlzUmVtb3RlUGF0aChwYXRoKVxuICBpZiAoIWlzUmVtb3RlKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gbmV3IFVSTChwYXRoKS5ob3N0bmFtZSA9PT0gXCJkYXRhaHViLmlvXCJcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import * as packageModule from "./package/index.js";
|
|
3
|
+
import { DatahubPlugin } from "./plugin.js";
|
|
4
|
+
vi.mock("./package/index.ts", () => ({
|
|
5
|
+
loadPackageFromDatahub: vi.fn(),
|
|
6
|
+
}));
|
|
7
|
+
describe("DatahubPlugin", () => {
|
|
8
|
+
let plugin;
|
|
9
|
+
let mockLoadPackageFromDatahub;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
plugin = new DatahubPlugin();
|
|
12
|
+
mockLoadPackageFromDatahub = vi.mocked(packageModule.loadPackageFromDatahub);
|
|
13
|
+
vi.clearAllMocks();
|
|
14
|
+
});
|
|
15
|
+
describe("loadPackage", () => {
|
|
16
|
+
it("should load package from datahub.io url", async () => {
|
|
17
|
+
const mockPackage = {
|
|
18
|
+
name: "test-package",
|
|
19
|
+
resources: [{ name: "test", data: [] }],
|
|
20
|
+
};
|
|
21
|
+
mockLoadPackageFromDatahub.mockResolvedValue(mockPackage);
|
|
22
|
+
const result = await plugin.loadPackage("https://datahub.io/core/country-codes");
|
|
23
|
+
expect(mockLoadPackageFromDatahub).toHaveBeenCalledWith("https://datahub.io/core/country-codes");
|
|
24
|
+
expect(result).toEqual(mockPackage);
|
|
25
|
+
});
|
|
26
|
+
it("should return undefined for non-datahub urls", async () => {
|
|
27
|
+
const result = await plugin.loadPackage("https://example.com/data");
|
|
28
|
+
expect(mockLoadPackageFromDatahub).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(mockLoadPackageFromDatahub).not.toHaveBeenCalled();
|
|
34
|
+
expect(result).toBeUndefined();
|
|
35
|
+
});
|
|
36
|
+
it("should return undefined for github urls", async () => {
|
|
37
|
+
const result = await plugin.loadPackage("https://github.com/owner/repo");
|
|
38
|
+
expect(mockLoadPackageFromDatahub).not.toHaveBeenCalled();
|
|
39
|
+
expect(result).toBeUndefined();
|
|
40
|
+
});
|
|
41
|
+
it("should handle datahub urls with multiple path segments", async () => {
|
|
42
|
+
const mockPackage = {
|
|
43
|
+
name: "test-package",
|
|
44
|
+
resources: [{ name: "test", data: [] }],
|
|
45
|
+
};
|
|
46
|
+
mockLoadPackageFromDatahub.mockResolvedValue(mockPackage);
|
|
47
|
+
const result = await plugin.loadPackage("https://datahub.io/core/gdp/datapackage.json");
|
|
48
|
+
expect(mockLoadPackageFromDatahub).toHaveBeenCalledWith("https://datahub.io/core/gdp/datapackage.json");
|
|
49
|
+
expect(result).toEqual(mockPackage);
|
|
50
|
+
});
|
|
51
|
+
it("should handle datahub urls with query parameters", async () => {
|
|
52
|
+
const mockPackage = {
|
|
53
|
+
name: "test-package",
|
|
54
|
+
resources: [{ name: "test", data: [] }],
|
|
55
|
+
};
|
|
56
|
+
mockLoadPackageFromDatahub.mockResolvedValue(mockPackage);
|
|
57
|
+
const result = await plugin.loadPackage("https://datahub.io/core/country-codes?format=json");
|
|
58
|
+
expect(mockLoadPackageFromDatahub).toHaveBeenCalledWith("https://datahub.io/core/country-codes?format=json");
|
|
59
|
+
expect(result).toEqual(mockPackage);
|
|
60
|
+
});
|
|
61
|
+
it("should return undefined for http non-datahub urls", async () => {
|
|
62
|
+
const result = await plugin.loadPackage("http://example.com/data");
|
|
63
|
+
expect(mockLoadPackageFromDatahub).not.toHaveBeenCalled();
|
|
64
|
+
expect(result).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
it("should return undefined for zenodo urls", async () => {
|
|
67
|
+
const result = await plugin.loadPackage("https://zenodo.org/record/123");
|
|
68
|
+
expect(mockLoadPackageFromDatahub).not.toHaveBeenCalled();
|
|
69
|
+
expect(result).toBeUndefined();
|
|
70
|
+
});
|
|
71
|
+
it("should return undefined for subdomain datahub urls", async () => {
|
|
72
|
+
const result = await plugin.loadPackage("https://test.datahub.io/data");
|
|
73
|
+
expect(mockLoadPackageFromDatahub).not.toHaveBeenCalled();
|
|
74
|
+
expect(result).toBeUndefined();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL2RhdGFodWIvcGx1Z2luLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0QsT0FBTyxLQUFLLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTNDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuQyxzQkFBc0IsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ2hDLENBQUMsQ0FBQyxDQUFBO0FBRUgsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFDN0IsSUFBSSxNQUFxQixDQUFBO0lBQ3pCLElBQUksMEJBQW9ELENBQUE7SUFFeEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFBO1FBQzVCLDBCQUEwQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUE7UUFDNUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3BCLENBQUMsQ0FBQyxDQUFBO0lBRUYsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZELE1BQU0sV0FBVyxHQUFZO2dCQUMzQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUN4QyxDQUFBO1lBQ0QsMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFekQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUNyQyx1Q0FBdUMsQ0FDeEMsQ0FBQTtZQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLG9CQUFvQixDQUNyRCx1Q0FBdUMsQ0FDeEMsQ0FBQTtZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDckMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLENBQUE7WUFFbkUsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUE7WUFDekQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO1FBRUYsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUVqRCxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN6RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLCtCQUErQixDQUFDLENBQUE7WUFFeEUsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUE7WUFDekQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO1FBRUYsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RFLE1BQU0sV0FBVyxHQUFZO2dCQUMzQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUN4QyxDQUFBO1lBQ0QsMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFekQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUNyQyw4Q0FBOEMsQ0FDL0MsQ0FBQTtZQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLG9CQUFvQixDQUNyRCw4Q0FBOEMsQ0FDL0MsQ0FBQTtZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDckMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsa0RBQWtELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEUsTUFBTSxXQUFXLEdBQVk7Z0JBQzNCLElBQUksRUFBRSxjQUFjO2dCQUNwQixTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3hDLENBQUE7WUFDRCwwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUV6RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQ3JDLG1EQUFtRCxDQUNwRCxDQUFBO1lBRUQsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUMsb0JBQW9CLENBQ3JELG1EQUFtRCxDQUNwRCxDQUFBO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNyQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsQ0FBQTtZQUVsRSxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN6RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLCtCQUErQixDQUFDLENBQUE7WUFFeEUsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUE7WUFDekQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO1FBRUYsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xFLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1lBRXZFLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgeyBiZWZvcmVFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCwgdmkgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCAqIGFzIHBhY2thZ2VNb2R1bGUgZnJvbSBcIi4vcGFja2FnZS9pbmRleC50c1wiXG5pbXBvcnQgeyBEYXRhaHViUGx1Z2luIH0gZnJvbSBcIi4vcGx1Z2luLnRzXCJcblxudmkubW9jayhcIi4vcGFja2FnZS9pbmRleC50c1wiLCAoKSA9PiAoe1xuICBsb2FkUGFja2FnZUZyb21EYXRhaHViOiB2aS5mbigpLFxufSkpXG5cbmRlc2NyaWJlKFwiRGF0YWh1YlBsdWdpblwiLCAoKSA9PiB7XG4gIGxldCBwbHVnaW46IERhdGFodWJQbHVnaW5cbiAgbGV0IG1vY2tMb2FkUGFja2FnZUZyb21EYXRhaHViOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj5cblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBwbHVnaW4gPSBuZXcgRGF0YWh1YlBsdWdpbigpXG4gICAgbW9ja0xvYWRQYWNrYWdlRnJvbURhdGFodWIgPSB2aS5tb2NrZWQocGFja2FnZU1vZHVsZS5sb2FkUGFja2FnZUZyb21EYXRhaHViKVxuICAgIHZpLmNsZWFyQWxsTW9ja3MoKVxuICB9KVxuXG4gIGRlc2NyaWJlKFwibG9hZFBhY2thZ2VcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSBmcm9tIGRhdGFodWIuaW8gdXJsXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgICByZXNvdXJjZXM6IFt7IG5hbWU6IFwidGVzdFwiLCBkYXRhOiBbXSB9XSxcbiAgICAgIH1cbiAgICAgIG1vY2tMb2FkUGFja2FnZUZyb21EYXRhaHViLm1vY2tSZXNvbHZlZFZhbHVlKG1vY2tQYWNrYWdlKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXG4gICAgICAgIFwiaHR0cHM6Ly9kYXRhaHViLmlvL2NvcmUvY291bnRyeS1jb2Rlc1wiLFxuICAgICAgKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRnJvbURhdGFodWIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBcImh0dHBzOi8vZGF0YWh1Yi5pby9jb3JlL2NvdW50cnktY29kZXNcIixcbiAgICAgIClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwobW9ja1BhY2thZ2UpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIG5vbi1kYXRhaHViIHVybHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9kYXRhXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tRGF0YWh1Yikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGxvY2FsIHBhdGhzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcIi4vZGF0YVwiKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRnJvbURhdGFodWIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBnaXRodWIgdXJsc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXCJodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwb1wiKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRnJvbURhdGFodWIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgZGF0YWh1YiB1cmxzIHdpdGggbXVsdGlwbGUgcGF0aCBzZWdtZW50c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgICAgcmVzb3VyY2VzOiBbeyBuYW1lOiBcInRlc3RcIiwgZGF0YTogW10gfV0sXG4gICAgICB9XG4gICAgICBtb2NrTG9hZFBhY2thZ2VGcm9tRGF0YWh1Yi5tb2NrUmVzb2x2ZWRWYWx1ZShtb2NrUGFja2FnZSlcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFxuICAgICAgICBcImh0dHBzOi8vZGF0YWh1Yi5pby9jb3JlL2dkcC9kYXRhcGFja2FnZS5qc29uXCIsXG4gICAgICApXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VGcm9tRGF0YWh1YikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIFwiaHR0cHM6Ly9kYXRhaHViLmlvL2NvcmUvZ2RwL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICAgIClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwobW9ja1BhY2thZ2UpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBkYXRhaHViIHVybHMgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgICByZXNvdXJjZXM6IFt7IG5hbWU6IFwidGVzdFwiLCBkYXRhOiBbXSB9XSxcbiAgICAgIH1cbiAgICAgIG1vY2tMb2FkUGFja2FnZUZyb21EYXRhaHViLm1vY2tSZXNvbHZlZFZhbHVlKG1vY2tQYWNrYWdlKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXG4gICAgICAgIFwiaHR0cHM6Ly9kYXRhaHViLmlvL2NvcmUvY291bnRyeS1jb2Rlcz9mb3JtYXQ9anNvblwiLFxuICAgICAgKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRnJvbURhdGFodWIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBcImh0dHBzOi8vZGF0YWh1Yi5pby9jb3JlL2NvdW50cnktY29kZXM/Zm9ybWF0PWpzb25cIixcbiAgICAgIClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwobW9ja1BhY2thZ2UpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGh0dHAgbm9uLWRhdGFodWIgdXJsc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXCJodHRwOi8vZXhhbXBsZS5jb20vZGF0YVwiKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRnJvbURhdGFodWIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciB6ZW5vZG8gdXJsc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXCJodHRwczovL3plbm9kby5vcmcvcmVjb3JkLzEyM1wiKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRnJvbURhdGFodWIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBzdWJkb21haW4gZGF0YWh1YiB1cmxzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcImh0dHBzOi8vdGVzdC5kYXRhaHViLmlvL2RhdGFcIilcblxuICAgICAgZXhwZWN0KG1vY2tMb2FkUGFja2FnZUZyb21EYXRhaHViKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./plugin.ts";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./plugin.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL2Rlc2NyaXB0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9wbHVnaW4udHNcIlxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Package } from "@frictionless-ts/metadata";
|
|
2
|
+
import type { DatasetPlugin } from "../../plugin.ts";
|
|
3
|
+
export declare class DescriptorPlugin implements DatasetPlugin {
|
|
4
|
+
loadPackage(source: string): Promise<Package | undefined>;
|
|
5
|
+
savePackage(dataPackage: Package, options: {
|
|
6
|
+
target: string;
|
|
7
|
+
withRemote?: boolean;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
path: string;
|
|
10
|
+
} | undefined>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { inferFormat } from "@frictionless-ts/metadata";
|
|
2
|
+
import { isRemotePath } from "@frictionless-ts/metadata";
|
|
3
|
+
import { loadPackageDescriptor } from "@frictionless-ts/metadata";
|
|
4
|
+
import { savePackageDescriptor } from "@frictionless-ts/metadata";
|
|
5
|
+
export class DescriptorPlugin {
|
|
6
|
+
async loadPackage(source) {
|
|
7
|
+
const isLocalJson = await getIsLocalJson(source);
|
|
8
|
+
if (!isLocalJson)
|
|
9
|
+
return undefined;
|
|
10
|
+
const dataPackage = await loadPackageDescriptor(source);
|
|
11
|
+
return dataPackage;
|
|
12
|
+
}
|
|
13
|
+
async savePackage(dataPackage, options) {
|
|
14
|
+
const isLocalJson = await getIsLocalJson(options.target);
|
|
15
|
+
if (!isLocalJson)
|
|
16
|
+
return undefined;
|
|
17
|
+
if (!options.target.endsWith("datapackage.json")) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
await savePackageDescriptor(dataPackage, { path: options.target });
|
|
21
|
+
return { path: options.target };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function getIsLocalJson(path) {
|
|
25
|
+
const isRemote = isRemotePath(path);
|
|
26
|
+
const format = inferFormat({ path });
|
|
27
|
+
return !isRemote && format === "json";
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2lucy9kZXNjcmlwdG9yL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBR2pFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQzlCLE1BQU0sV0FBVyxHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2hELElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFbEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2RCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FDZixXQUFvQixFQUNwQixPQUFpRDtRQUVqRCxNQUFNLFdBQVcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUVsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7UUFFRCxNQUFNLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUVsRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0NBQ0Y7QUFFRCxLQUFLLFVBQVUsY0FBYyxDQUFDLElBQVk7SUFDeEMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDcEMsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFBO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmZlckZvcm1hdCB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2FnZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IGlzUmVtb3RlUGF0aCB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IGxvYWRQYWNrYWdlRGVzY3JpcHRvciB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IHNhdmVQYWNrYWdlRGVzY3JpcHRvciB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB0eXBlIHsgRGF0YXNldFBsdWdpbiB9IGZyb20gXCIuLi8uLi9wbHVnaW4udHNcIlxuXG5leHBvcnQgY2xhc3MgRGVzY3JpcHRvclBsdWdpbiBpbXBsZW1lbnRzIERhdGFzZXRQbHVnaW4ge1xuICBhc3luYyBsb2FkUGFja2FnZShzb3VyY2U6IHN0cmluZykge1xuICAgIGNvbnN0IGlzTG9jYWxKc29uID0gYXdhaXQgZ2V0SXNMb2NhbEpzb24oc291cmNlKVxuICAgIGlmICghaXNMb2NhbEpzb24pIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGRhdGFQYWNrYWdlID0gYXdhaXQgbG9hZFBhY2thZ2VEZXNjcmlwdG9yKHNvdXJjZSlcbiAgICByZXR1cm4gZGF0YVBhY2thZ2VcbiAgfVxuXG4gIGFzeW5jIHNhdmVQYWNrYWdlKFxuICAgIGRhdGFQYWNrYWdlOiBQYWNrYWdlLFxuICAgIG9wdGlvbnM6IHsgdGFyZ2V0OiBzdHJpbmc7IHdpdGhSZW1vdGU/OiBib29sZWFuIH0sXG4gICkge1xuICAgIGNvbnN0IGlzTG9jYWxKc29uID0gYXdhaXQgZ2V0SXNMb2NhbEpzb24ob3B0aW9ucy50YXJnZXQpXG4gICAgaWYgKCFpc0xvY2FsSnNvbikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgaWYgKCFvcHRpb25zLnRhcmdldC5lbmRzV2l0aChcImRhdGFwYWNrYWdlLmpzb25cIikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlUGFja2FnZURlc2NyaXB0b3IoZGF0YVBhY2thZ2UsIHsgcGF0aDogb3B0aW9ucy50YXJnZXQgfSlcblxuICAgIHJldHVybiB7IHBhdGg6IG9wdGlvbnMudGFyZ2V0IH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJc0xvY2FsSnNvbihwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgaXNSZW1vdGUgPSBpc1JlbW90ZVBhdGgocGF0aClcbiAgY29uc3QgZm9ybWF0ID0gaW5mZXJGb3JtYXQoeyBwYXRoIH0pXG4gIHJldHVybiAhaXNSZW1vdGUgJiYgZm9ybWF0ID09PSBcImpzb25cIlxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|