@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,169 @@
|
|
|
1
|
+
import * as metadataModule from "@frictionless-ts/metadata";
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { DescriptorPlugin } from "./plugin.js";
|
|
4
|
+
vi.mock("@frictionless-ts/metadata", async () => {
|
|
5
|
+
const actual = await vi.importActual("@frictionless-ts/metadata");
|
|
6
|
+
return {
|
|
7
|
+
...actual,
|
|
8
|
+
loadPackageDescriptor: vi.fn(),
|
|
9
|
+
savePackageDescriptor: vi.fn(),
|
|
10
|
+
};
|
|
11
|
+
});
|
|
12
|
+
describe("DescriptorPlugin", () => {
|
|
13
|
+
let plugin;
|
|
14
|
+
let mockLoadPackageDescriptor;
|
|
15
|
+
let mockSavePackageDescriptor;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
plugin = new DescriptorPlugin();
|
|
18
|
+
mockLoadPackageDescriptor = vi.mocked(metadataModule.loadPackageDescriptor);
|
|
19
|
+
mockSavePackageDescriptor = vi.mocked(metadataModule.savePackageDescriptor);
|
|
20
|
+
vi.clearAllMocks();
|
|
21
|
+
});
|
|
22
|
+
describe("loadPackage", () => {
|
|
23
|
+
it("should load package from local datapackage.json file", async () => {
|
|
24
|
+
const mockPackage = {
|
|
25
|
+
name: "test-package",
|
|
26
|
+
resources: [{ name: "test", data: [] }],
|
|
27
|
+
};
|
|
28
|
+
mockLoadPackageDescriptor.mockResolvedValue(mockPackage);
|
|
29
|
+
const result = await plugin.loadPackage("./datapackage.json");
|
|
30
|
+
expect(mockLoadPackageDescriptor).toHaveBeenCalledWith("./datapackage.json");
|
|
31
|
+
expect(result).toEqual(mockPackage);
|
|
32
|
+
});
|
|
33
|
+
it("should load package from local json file", async () => {
|
|
34
|
+
const mockPackage = {
|
|
35
|
+
name: "test-package",
|
|
36
|
+
resources: [{ name: "test", data: [] }],
|
|
37
|
+
};
|
|
38
|
+
mockLoadPackageDescriptor.mockResolvedValue(mockPackage);
|
|
39
|
+
const result = await plugin.loadPackage("./package.json");
|
|
40
|
+
expect(mockLoadPackageDescriptor).toHaveBeenCalledWith("./package.json");
|
|
41
|
+
expect(result).toEqual(mockPackage);
|
|
42
|
+
});
|
|
43
|
+
it("should return undefined for remote json urls", async () => {
|
|
44
|
+
const result = await plugin.loadPackage("https://example.com/datapackage.json");
|
|
45
|
+
expect(mockLoadPackageDescriptor).not.toHaveBeenCalled();
|
|
46
|
+
expect(result).toBeUndefined();
|
|
47
|
+
});
|
|
48
|
+
it("should return undefined for http remote json urls", async () => {
|
|
49
|
+
const result = await plugin.loadPackage("http://example.com/datapackage.json");
|
|
50
|
+
expect(mockLoadPackageDescriptor).not.toHaveBeenCalled();
|
|
51
|
+
expect(result).toBeUndefined();
|
|
52
|
+
});
|
|
53
|
+
it("should return undefined for local csv files", async () => {
|
|
54
|
+
const result = await plugin.loadPackage("./data.csv");
|
|
55
|
+
expect(mockLoadPackageDescriptor).not.toHaveBeenCalled();
|
|
56
|
+
expect(result).toBeUndefined();
|
|
57
|
+
});
|
|
58
|
+
it("should return undefined for local xlsx files", async () => {
|
|
59
|
+
const result = await plugin.loadPackage("./data.xlsx");
|
|
60
|
+
expect(mockLoadPackageDescriptor).not.toHaveBeenCalled();
|
|
61
|
+
expect(result).toBeUndefined();
|
|
62
|
+
});
|
|
63
|
+
it("should return undefined for local parquet files", async () => {
|
|
64
|
+
const result = await plugin.loadPackage("./data.parquet");
|
|
65
|
+
expect(mockLoadPackageDescriptor).not.toHaveBeenCalled();
|
|
66
|
+
expect(result).toBeUndefined();
|
|
67
|
+
});
|
|
68
|
+
it("should handle absolute paths", async () => {
|
|
69
|
+
const mockPackage = {
|
|
70
|
+
name: "test-package",
|
|
71
|
+
resources: [{ name: "test", data: [] }],
|
|
72
|
+
};
|
|
73
|
+
mockLoadPackageDescriptor.mockResolvedValue(mockPackage);
|
|
74
|
+
const result = await plugin.loadPackage("/absolute/path/datapackage.json");
|
|
75
|
+
expect(mockLoadPackageDescriptor).toHaveBeenCalledWith("/absolute/path/datapackage.json");
|
|
76
|
+
expect(result).toEqual(mockPackage);
|
|
77
|
+
});
|
|
78
|
+
it("should return undefined for github urls", async () => {
|
|
79
|
+
const result = await plugin.loadPackage("https://github.com/owner/repo/datapackage.json");
|
|
80
|
+
expect(mockLoadPackageDescriptor).not.toHaveBeenCalled();
|
|
81
|
+
expect(result).toBeUndefined();
|
|
82
|
+
});
|
|
83
|
+
it("should return undefined for zenodo urls", async () => {
|
|
84
|
+
const result = await plugin.loadPackage("https://zenodo.org/record/123");
|
|
85
|
+
expect(mockLoadPackageDescriptor).not.toHaveBeenCalled();
|
|
86
|
+
expect(result).toBeUndefined();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe("savePackage", () => {
|
|
90
|
+
const mockPackage = {
|
|
91
|
+
name: "test-package",
|
|
92
|
+
resources: [{ name: "test", data: [] }],
|
|
93
|
+
};
|
|
94
|
+
it("should save package to local datapackage.json file", async () => {
|
|
95
|
+
mockSavePackageDescriptor.mockResolvedValue(undefined);
|
|
96
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
97
|
+
target: "./datapackage.json",
|
|
98
|
+
});
|
|
99
|
+
expect(mockSavePackageDescriptor).toHaveBeenCalledWith(mockPackage, {
|
|
100
|
+
path: "./datapackage.json",
|
|
101
|
+
});
|
|
102
|
+
expect(result).toEqual({ path: "./datapackage.json" });
|
|
103
|
+
});
|
|
104
|
+
it("should save package with absolute path", async () => {
|
|
105
|
+
mockSavePackageDescriptor.mockResolvedValue(undefined);
|
|
106
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
107
|
+
target: "/absolute/path/datapackage.json",
|
|
108
|
+
});
|
|
109
|
+
expect(mockSavePackageDescriptor).toHaveBeenCalledWith(mockPackage, {
|
|
110
|
+
path: "/absolute/path/datapackage.json",
|
|
111
|
+
});
|
|
112
|
+
expect(result).toEqual({ path: "/absolute/path/datapackage.json" });
|
|
113
|
+
});
|
|
114
|
+
it("should return undefined for remote urls", async () => {
|
|
115
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
116
|
+
target: "https://example.com/datapackage.json",
|
|
117
|
+
});
|
|
118
|
+
expect(mockSavePackageDescriptor).not.toHaveBeenCalled();
|
|
119
|
+
expect(result).toBeUndefined();
|
|
120
|
+
});
|
|
121
|
+
it("should return undefined for local json files not named datapackage.json", async () => {
|
|
122
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
123
|
+
target: "./package.json",
|
|
124
|
+
});
|
|
125
|
+
expect(mockSavePackageDescriptor).not.toHaveBeenCalled();
|
|
126
|
+
expect(result).toBeUndefined();
|
|
127
|
+
});
|
|
128
|
+
it("should return undefined for local csv files", async () => {
|
|
129
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
130
|
+
target: "./data.csv",
|
|
131
|
+
});
|
|
132
|
+
expect(mockSavePackageDescriptor).not.toHaveBeenCalled();
|
|
133
|
+
expect(result).toBeUndefined();
|
|
134
|
+
});
|
|
135
|
+
it("should return undefined for local xlsx files", async () => {
|
|
136
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
137
|
+
target: "./data.xlsx",
|
|
138
|
+
});
|
|
139
|
+
expect(mockSavePackageDescriptor).not.toHaveBeenCalled();
|
|
140
|
+
expect(result).toBeUndefined();
|
|
141
|
+
});
|
|
142
|
+
it("should return undefined for http urls", async () => {
|
|
143
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
144
|
+
target: "http://example.com/datapackage.json",
|
|
145
|
+
});
|
|
146
|
+
expect(mockSavePackageDescriptor).not.toHaveBeenCalled();
|
|
147
|
+
expect(result).toBeUndefined();
|
|
148
|
+
});
|
|
149
|
+
it("should ignore withRemote option for local files", async () => {
|
|
150
|
+
mockSavePackageDescriptor.mockResolvedValue(undefined);
|
|
151
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
152
|
+
target: "./datapackage.json",
|
|
153
|
+
withRemote: true,
|
|
154
|
+
});
|
|
155
|
+
expect(mockSavePackageDescriptor).toHaveBeenCalledWith(mockPackage, {
|
|
156
|
+
path: "./datapackage.json",
|
|
157
|
+
});
|
|
158
|
+
expect(result).toEqual({ path: "./datapackage.json" });
|
|
159
|
+
});
|
|
160
|
+
it("should return undefined for local directories", async () => {
|
|
161
|
+
const result = await plugin.savePackage(mockPackage, {
|
|
162
|
+
target: "./data",
|
|
163
|
+
});
|
|
164
|
+
expect(mockSavePackageDescriptor).not.toHaveBeenCalled();
|
|
165
|
+
expect(result).toBeUndefined();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL2Rlc2NyaXB0b3IvcGx1Z2luLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLGNBQWMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFOUMsRUFBRSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtJQUNqRSxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1QscUJBQXFCLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM5QixxQkFBcUIsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0tBQy9CLENBQUE7QUFDSCxDQUFDLENBQUMsQ0FBQTtBQUVGLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsSUFBSSxNQUF3QixDQUFBO0lBQzVCLElBQUkseUJBQW1ELENBQUE7SUFDdkQsSUFBSSx5QkFBbUQsQ0FBQTtJQUV2RCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtRQUMvQix5QkFBeUIsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQzNFLHlCQUF5QixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDM0UsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3BCLENBQUMsQ0FBQyxDQUFBO0lBRUYsUUFB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QkFDbEUsSUFBSSxFQUFFLG9CQUFvQjthQUMzQixDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQTtRQUN4RCxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUNuRCxNQUFNLEVBQUUsUUFBUTthQUNqQixDQUFDLENBQUE7WUFFRixNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0ICogYXMgbWV0YWRhdGFNb2R1bGUgZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHZpIH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBEZXNjcmlwdG9yUGx1Z2luIH0gZnJvbSBcIi4vcGx1Z2luLnRzXCJcblxudmkubW9jayhcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIiwgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBhY3R1YWwgPSBhd2FpdCB2aS5pbXBvcnRBY3R1YWwoXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCIpXG4gIHJldHVybiB7XG4gICAgLi4uYWN0dWFsLFxuICAgIGxvYWRQYWNrYWdlRGVzY3JpcHRvcjogdmkuZm4oKSxcbiAgICBzYXZlUGFja2FnZURlc2NyaXB0b3I6IHZpLmZuKCksXG4gIH1cbn0pXG5cbmRlc2NyaWJlKFwiRGVzY3JpcHRvclBsdWdpblwiLCAoKSA9PiB7XG4gIGxldCBwbHVnaW46IERlc2NyaXB0b3JQbHVnaW5cbiAgbGV0IG1vY2tMb2FkUGFja2FnZURlc2NyaXB0b3I6IFJldHVyblR5cGU8dHlwZW9mIHZpLmZuPlxuICBsZXQgbW9ja1NhdmVQYWNrYWdlRGVzY3JpcHRvcjogUmV0dXJuVHlwZTx0eXBlb2YgdmkuZm4+XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgcGx1Z2luID0gbmV3IERlc2NyaXB0b3JQbHVnaW4oKVxuICAgIG1vY2tMb2FkUGFja2FnZURlc2NyaXB0b3IgPSB2aS5tb2NrZWQobWV0YWRhdGFNb2R1bGUubG9hZFBhY2thZ2VEZXNjcmlwdG9yKVxuICAgIG1vY2tTYXZlUGFja2FnZURlc2NyaXB0b3IgPSB2aS5tb2NrZWQobWV0YWRhdGFNb2R1bGUuc2F2ZVBhY2thZ2VEZXNjcmlwdG9yKVxuICAgIHZpLmNsZWFyQWxsTW9ja3MoKVxuICB9KVxuXG4gIGRlc2NyaWJlKFwibG9hZFBhY2thZ2VcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSBmcm9tIGxvY2FsIGRhdGFwYWNrYWdlLmpzb24gZmlsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgICAgcmVzb3VyY2VzOiBbeyBuYW1lOiBcInRlc3RcIiwgZGF0YTogW10gfV0sXG4gICAgICB9XG4gICAgICBtb2NrTG9hZFBhY2thZ2VEZXNjcmlwdG9yLm1vY2tSZXNvbHZlZFZhbHVlKG1vY2tQYWNrYWdlKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXCIuL2RhdGFwYWNrYWdlLmpzb25cIilcblxuICAgICAgZXhwZWN0KG1vY2tMb2FkUGFja2FnZURlc2NyaXB0b3IpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBcIi4vZGF0YXBhY2thZ2UuanNvblwiLFxuICAgICAgKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChtb2NrUGFja2FnZSlcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgbG9hZCBwYWNrYWdlIGZyb20gbG9jYWwganNvbiBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgICByZXNvdXJjZXM6IFt7IG5hbWU6IFwidGVzdFwiLCBkYXRhOiBbXSB9XSxcbiAgICAgIH1cbiAgICAgIG1vY2tMb2FkUGFja2FnZURlc2NyaXB0b3IubW9ja1Jlc29sdmVkVmFsdWUobW9ja1BhY2thZ2UpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcIi4vcGFja2FnZS5qc29uXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VEZXNjcmlwdG9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcIi4vcGFja2FnZS5qc29uXCIpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tQYWNrYWdlKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciByZW1vdGUganNvbiB1cmxzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcbiAgICAgICAgXCJodHRwczovL2V4YW1wbGUuY29tL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICAgIClcblxuICAgICAgZXhwZWN0KG1vY2tMb2FkUGFja2FnZURlc2NyaXB0b3IpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBodHRwIHJlbW90ZSBqc29uIHVybHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmxvYWRQYWNrYWdlKFxuICAgICAgICBcImh0dHA6Ly9leGFtcGxlLmNvbS9kYXRhcGFja2FnZS5qc29uXCIsXG4gICAgICApXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VEZXNjcmlwdG9yKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgbG9jYWwgY3N2IGZpbGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcIi4vZGF0YS5jc3ZcIilcblxuICAgICAgZXhwZWN0KG1vY2tMb2FkUGFja2FnZURlc2NyaXB0b3IpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBsb2NhbCB4bHN4IGZpbGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcIi4vZGF0YS54bHN4XCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VEZXNjcmlwdG9yKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgbG9jYWwgcGFycXVldCBmaWxlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXCIuL2RhdGEucGFycXVldFwiKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRGVzY3JpcHRvcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBhYnNvbHV0ZSBwYXRoc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgICAgcmVzb3VyY2VzOiBbeyBuYW1lOiBcInRlc3RcIiwgZGF0YTogW10gfV0sXG4gICAgICB9XG4gICAgICBtb2NrTG9hZFBhY2thZ2VEZXNjcmlwdG9yLm1vY2tSZXNvbHZlZFZhbHVlKG1vY2tQYWNrYWdlKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXCIvYWJzb2x1dGUvcGF0aC9kYXRhcGFja2FnZS5qc29uXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VEZXNjcmlwdG9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgXCIvYWJzb2x1dGUvcGF0aC9kYXRhcGFja2FnZS5qc29uXCIsXG4gICAgICApXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tQYWNrYWdlKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBnaXRodWIgdXJsc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFBhY2thZ2UoXG4gICAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tL293bmVyL3JlcG8vZGF0YXBhY2thZ2UuanNvblwiLFxuICAgICAgKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYWNrYWdlRGVzY3JpcHRvcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIHplbm9kbyB1cmxzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkUGFja2FnZShcImh0dHBzOi8vemVub2RvLm9yZy9yZWNvcmQvMTIzXCIpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhY2thZ2VEZXNjcmlwdG9yKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKFwic2F2ZVBhY2thZ2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG1vY2tQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHJlc291cmNlczogW3sgbmFtZTogXCJ0ZXN0XCIsIGRhdGE6IFtdIH1dLFxuICAgIH1cblxuICAgIGl0KFwic2hvdWxkIHNhdmUgcGFja2FnZSB0byBsb2NhbCBkYXRhcGFja2FnZS5qc29uIGZpbGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1NhdmVQYWNrYWdlRGVzY3JpcHRvci5tb2NrUmVzb2x2ZWRWYWx1ZSh1bmRlZmluZWQpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5zYXZlUGFja2FnZShtb2NrUGFja2FnZSwge1xuICAgICAgICB0YXJnZXQ6IFwiLi9kYXRhcGFja2FnZS5qc29uXCIsXG4gICAgICB9KVxuXG4gICAgICBleHBlY3QobW9ja1NhdmVQYWNrYWdlRGVzY3JpcHRvcikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja1BhY2thZ2UsIHtcbiAgICAgICAgcGF0aDogXCIuL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICAgIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgcGF0aDogXCIuL2RhdGFwYWNrYWdlLmpzb25cIiB9KVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCBzYXZlIHBhY2thZ2Ugd2l0aCBhYnNvbHV0ZSBwYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tTYXZlUGFja2FnZURlc2NyaXB0b3IubW9ja1Jlc29sdmVkVmFsdWUodW5kZWZpbmVkKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uc2F2ZVBhY2thZ2UobW9ja1BhY2thZ2UsIHtcbiAgICAgICAgdGFyZ2V0OiBcIi9hYnNvbHV0ZS9wYXRoL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICAgIH0pXG5cbiAgICAgIGV4cGVjdChtb2NrU2F2ZVBhY2thZ2VEZXNjcmlwdG9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrUGFja2FnZSwge1xuICAgICAgICBwYXRoOiBcIi9hYnNvbHV0ZS9wYXRoL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICAgIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgcGF0aDogXCIvYWJzb2x1dGUvcGF0aC9kYXRhcGFja2FnZS5qc29uXCIgfSlcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgcmVtb3RlIHVybHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLnNhdmVQYWNrYWdlKG1vY2tQYWNrYWdlLCB7XG4gICAgICAgIHRhcmdldDogXCJodHRwczovL2V4YW1wbGUuY29tL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICAgIH0pXG5cbiAgICAgIGV4cGVjdChtb2NrU2F2ZVBhY2thZ2VEZXNjcmlwdG9yKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgbG9jYWwganNvbiBmaWxlcyBub3QgbmFtZWQgZGF0YXBhY2thZ2UuanNvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uc2F2ZVBhY2thZ2UobW9ja1BhY2thZ2UsIHtcbiAgICAgICAgdGFyZ2V0OiBcIi4vcGFja2FnZS5qc29uXCIsXG4gICAgICB9KVxuXG4gICAgICBleHBlY3QobW9ja1NhdmVQYWNrYWdlRGVzY3JpcHRvcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGxvY2FsIGNzdiBmaWxlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uc2F2ZVBhY2thZ2UobW9ja1BhY2thZ2UsIHtcbiAgICAgICAgdGFyZ2V0OiBcIi4vZGF0YS5jc3ZcIixcbiAgICAgIH0pXG5cbiAgICAgIGV4cGVjdChtb2NrU2F2ZVBhY2thZ2VEZXNjcmlwdG9yKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKClcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgbG9jYWwgeGxzeCBmaWxlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uc2F2ZVBhY2thZ2UobW9ja1BhY2thZ2UsIHtcbiAgICAgICAgdGFyZ2V0OiBcIi4vZGF0YS54bHN4XCIsXG4gICAgICB9KVxuXG4gICAgICBleHBlY3QobW9ja1NhdmVQYWNrYWdlRGVzY3JpcHRvcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGh0dHAgdXJsc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uc2F2ZVBhY2thZ2UobW9ja1BhY2thZ2UsIHtcbiAgICAgICAgdGFyZ2V0OiBcImh0dHA6Ly9leGFtcGxlLmNvbS9kYXRhcGFja2FnZS5qc29uXCIsXG4gICAgICB9KVxuXG4gICAgICBleHBlY3QobW9ja1NhdmVQYWNrYWdlRGVzY3JpcHRvcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIGlnbm9yZSB3aXRoUmVtb3RlIG9wdGlvbiBmb3IgbG9jYWwgZmlsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1NhdmVQYWNrYWdlRGVzY3JpcHRvci5tb2NrUmVzb2x2ZWRWYWx1ZSh1bmRlZmluZWQpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5zYXZlUGFja2FnZShtb2NrUGFja2FnZSwge1xuICAgICAgICB0YXJnZXQ6IFwiLi9kYXRhcGFja2FnZS5qc29uXCIsXG4gICAgICAgIHdpdGhSZW1vdGU6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBleHBlY3QobW9ja1NhdmVQYWNrYWdlRGVzY3JpcHRvcikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja1BhY2thZ2UsIHtcbiAgICAgICAgcGF0aDogXCIuL2RhdGFwYWNrYWdlLmpzb25cIixcbiAgICAgIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgcGF0aDogXCIuL2RhdGFwYWNrYWdlLmpzb25cIiB9KVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBsb2NhbCBkaXJlY3Rvcmllc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uc2F2ZVBhY2thZ2UobW9ja1BhY2thZ2UsIHtcbiAgICAgICAgdGFyZ2V0OiBcIi4vZGF0YVwiLFxuICAgICAgfSlcblxuICAgICAgZXhwZWN0KG1vY2tTYXZlUGFja2FnZURlc2NyaXB0b3IpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./package/index.js";
|
|
2
|
+
export * from "./plugin.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL2ZvbGRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMsYUFBYSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGFja2FnZS9pbmRleC50c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9wbHVnaW4udHNcIlxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { loadPackageFromFolder } from "./load.js";
|
|
2
|
+
export { savePackageToFolder } from "./save.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL2ZvbGRlci9wYWNrYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBsb2FkUGFja2FnZUZyb21Gb2xkZXIgfSBmcm9tIFwiLi9sb2FkLnRzXCJcbmV4cG9ydCB7IHNhdmVQYWNrYWdlVG9Gb2xkZXIgfSBmcm9tIFwiLi9zYXZlLnRzXCJcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function loadPackageFromFolder(folderPath: string): Promise<import("@frictionless-ts/metadata").Package>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { loadPackageDescriptor } from "@frictionless-ts/metadata";
|
|
3
|
+
export async function loadPackageFromFolder(folderPath) {
|
|
4
|
+
return loadPackageDescriptor(join(folderPath, "datapackage.json"));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvZm9sZGVyL3BhY2thZ2UvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBRWpFLE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsVUFBa0I7SUFDNUQsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtBQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgbG9hZFBhY2thZ2VEZXNjcmlwdG9yIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBhY2thZ2VGcm9tRm9sZGVyKGZvbGRlclBhdGg6IHN0cmluZykge1xuICByZXR1cm4gbG9hZFBhY2thZ2VEZXNjcmlwdG9yKGpvaW4oZm9sZGVyUGF0aCwgXCJkYXRhcGFja2FnZS5qc29uXCIpKVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { getTempFilePath, writeTempFile } from "../../../file/index.js";
|
|
3
|
+
import { loadPackageFromFolder } from "./load.js";
|
|
4
|
+
import { savePackageToFolder } from "./save.js";
|
|
5
|
+
describe("loadPackageFromFolder", () => {
|
|
6
|
+
let tempFolderPath;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
tempFolderPath = getTempFilePath();
|
|
9
|
+
});
|
|
10
|
+
it("should load a basic package from folder", async () => {
|
|
11
|
+
const originalPackage = {
|
|
12
|
+
name: "test-package",
|
|
13
|
+
resources: [
|
|
14
|
+
{
|
|
15
|
+
name: "empty-resource",
|
|
16
|
+
data: [],
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
await savePackageToFolder(originalPackage, { folderPath: tempFolderPath });
|
|
21
|
+
const loadedPackage = await loadPackageFromFolder(tempFolderPath);
|
|
22
|
+
expect(loadedPackage).toBeDefined();
|
|
23
|
+
expect(loadedPackage.name).toBe("test-package");
|
|
24
|
+
expect(loadedPackage.resources).toHaveLength(1);
|
|
25
|
+
});
|
|
26
|
+
it("should load package with metadata", async () => {
|
|
27
|
+
const originalPackage = {
|
|
28
|
+
name: "test-package",
|
|
29
|
+
title: "Test Package",
|
|
30
|
+
description: "A test data package",
|
|
31
|
+
version: "1.0.0",
|
|
32
|
+
resources: [
|
|
33
|
+
{
|
|
34
|
+
name: "test-resource",
|
|
35
|
+
data: [],
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
await savePackageToFolder(originalPackage, { folderPath: tempFolderPath });
|
|
40
|
+
const loadedPackage = await loadPackageFromFolder(tempFolderPath);
|
|
41
|
+
expect(loadedPackage.name).toBe("test-package");
|
|
42
|
+
expect(loadedPackage.title).toBe("Test Package");
|
|
43
|
+
expect(loadedPackage.description).toBe("A test data package");
|
|
44
|
+
expect(loadedPackage.version).toBe("1.0.0");
|
|
45
|
+
});
|
|
46
|
+
it("should load package with inline data resources", async () => {
|
|
47
|
+
const originalPackage = {
|
|
48
|
+
name: "test-package",
|
|
49
|
+
resources: [
|
|
50
|
+
{
|
|
51
|
+
name: "test-resource",
|
|
52
|
+
data: [
|
|
53
|
+
{ id: 1, name: "alice" },
|
|
54
|
+
{ id: 2, name: "bob" },
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
await savePackageToFolder(originalPackage, { folderPath: tempFolderPath });
|
|
60
|
+
const loadedPackage = await loadPackageFromFolder(tempFolderPath);
|
|
61
|
+
expect(loadedPackage).toBeDefined();
|
|
62
|
+
expect(loadedPackage.resources).toHaveLength(1);
|
|
63
|
+
expect(loadedPackage.resources[0]?.name).toBe("test-resource");
|
|
64
|
+
expect(loadedPackage.resources[0]?.data).toEqual([
|
|
65
|
+
{ id: 1, name: "alice" },
|
|
66
|
+
{ id: 2, name: "bob" },
|
|
67
|
+
]);
|
|
68
|
+
});
|
|
69
|
+
it("should load package with file resources", async () => {
|
|
70
|
+
const csvContent = "id,name\n1,alice\n2,bob";
|
|
71
|
+
const csvPath = await writeTempFile(csvContent);
|
|
72
|
+
const originalPackage = {
|
|
73
|
+
name: "test-package",
|
|
74
|
+
resources: [
|
|
75
|
+
{
|
|
76
|
+
name: "test-resource",
|
|
77
|
+
path: csvPath,
|
|
78
|
+
format: "csv",
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
await savePackageToFolder(originalPackage, { folderPath: tempFolderPath });
|
|
83
|
+
const loadedPackage = await loadPackageFromFolder(tempFolderPath);
|
|
84
|
+
expect(loadedPackage).toBeDefined();
|
|
85
|
+
expect(loadedPackage.resources).toHaveLength(1);
|
|
86
|
+
expect(loadedPackage.resources[0]?.name).toBe("test-resource");
|
|
87
|
+
expect(loadedPackage.resources[0]?.format).toBe("csv");
|
|
88
|
+
});
|
|
89
|
+
it("should load package with schema", async () => {
|
|
90
|
+
const originalPackage = {
|
|
91
|
+
name: "test-package",
|
|
92
|
+
resources: [
|
|
93
|
+
{
|
|
94
|
+
name: "test-resource",
|
|
95
|
+
data: [{ id: 1, name: "alice" }],
|
|
96
|
+
schema: {
|
|
97
|
+
fields: [
|
|
98
|
+
{ name: "id", type: "integer" },
|
|
99
|
+
{ name: "name", type: "string" },
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
await savePackageToFolder(originalPackage, { folderPath: tempFolderPath });
|
|
106
|
+
const loadedPackage = await loadPackageFromFolder(tempFolderPath);
|
|
107
|
+
expect(loadedPackage.resources[0]?.schema).toBeDefined();
|
|
108
|
+
const schema = loadedPackage.resources[0]?.schema;
|
|
109
|
+
expect(typeof schema === "object" && "fields" in schema).toBe(true);
|
|
110
|
+
if (typeof schema === "object" && "fields" in schema) {
|
|
111
|
+
expect(schema.fields).toHaveLength(2);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
it("should load package with multiple resources", async () => {
|
|
115
|
+
const csvContent = "id,name\n1,alice\n2,bob";
|
|
116
|
+
const csvPath = await writeTempFile(csvContent);
|
|
117
|
+
const originalPackage = {
|
|
118
|
+
name: "test-package",
|
|
119
|
+
resources: [
|
|
120
|
+
{
|
|
121
|
+
name: "resource-1",
|
|
122
|
+
path: csvPath,
|
|
123
|
+
format: "csv",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: "resource-2",
|
|
127
|
+
data: [{ id: 1, value: 100 }],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
};
|
|
131
|
+
await savePackageToFolder(originalPackage, { folderPath: tempFolderPath });
|
|
132
|
+
const loadedPackage = await loadPackageFromFolder(tempFolderPath);
|
|
133
|
+
expect(loadedPackage).toBeDefined();
|
|
134
|
+
expect(loadedPackage.name).toBe("test-package");
|
|
135
|
+
expect(loadedPackage.resources).toHaveLength(2);
|
|
136
|
+
expect(loadedPackage.resources[0]?.name).toBe("resource-1");
|
|
137
|
+
expect(loadedPackage.resources[1]?.name).toBe("resource-2");
|
|
138
|
+
});
|
|
139
|
+
it("should load package with dialect", async () => {
|
|
140
|
+
const csvContent = "id;name\n1;alice\n2;bob";
|
|
141
|
+
const csvPath = await writeTempFile(csvContent);
|
|
142
|
+
const originalPackage = {
|
|
143
|
+
name: "test-package",
|
|
144
|
+
resources: [
|
|
145
|
+
{
|
|
146
|
+
name: "test-resource",
|
|
147
|
+
path: csvPath,
|
|
148
|
+
format: "csv",
|
|
149
|
+
dialect: {
|
|
150
|
+
delimiter: ";",
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
};
|
|
155
|
+
await savePackageToFolder(originalPackage, { folderPath: tempFolderPath });
|
|
156
|
+
const loadedPackage = await loadPackageFromFolder(tempFolderPath);
|
|
157
|
+
expect(loadedPackage.resources[0]?.dialect).toBeDefined();
|
|
158
|
+
const dialect = loadedPackage.resources[0]?.dialect;
|
|
159
|
+
expect(typeof dialect === "object" && "delimiter" in dialect).toBe(true);
|
|
160
|
+
if (typeof dialect === "object" && "delimiter" in dialect) {
|
|
161
|
+
expect(dialect.delimiter).toBe(";");
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
it("should throw error for non-existent folder", async () => {
|
|
165
|
+
const nonExistentPath = "/non/existent/folder";
|
|
166
|
+
await expect(loadPackageFromFolder(nonExistentPath)).rejects.toThrow();
|
|
167
|
+
});
|
|
168
|
+
it("should throw error for folder without datapackage.json", async () => {
|
|
169
|
+
const emptyFolderPath = getTempFilePath();
|
|
170
|
+
const fs = await import("node:fs/promises");
|
|
171
|
+
await fs.mkdir(emptyFolderPath, { recursive: true });
|
|
172
|
+
await expect(loadPackageFromFolder(emptyFolderPath)).rejects.toThrow();
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2lucy9mb2xkZXIvcGFja2FnZS9sb2FkLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFL0MsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxJQUFJLGNBQXNCLENBQUE7SUFFMUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGNBQWMsR0FBRyxlQUFlLEVBQUUsQ0FBQTtJQUNwQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLGVBQWUsR0FBWTtZQUMvQixJQUFJLEVBQUUsY0FBYztZQUNwQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsSUFBSSxFQUFFLEVBQUU7aUJBQ1Q7YUFDRjtTQUNGLENBQUE7UUFFRCxNQUFNLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFBO1FBQzFFLE1BQU0sYUFBYSxHQUFHLE1BQU0scUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFakUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ25DLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQy9DLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pELE1BQU0sZUFBZSxHQUFZO1lBQy9CLElBQUksRUFBRSxjQUFjO1lBQ3BCLEtBQUssRUFBRSxjQUFjO1lBQ3JCLFdBQVcsRUFBRSxxQkFBcUI7WUFDbEMsT0FBTyxFQUFFLE9BQU87WUFDaEIsU0FBUyxFQUFFO2dCQUNUO29CQUNFLElBQUksRUFBRSxlQUFlO29CQUNyQixJQUFJLEVBQUUsRUFBRTtpQkFDVDthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sbUJBQW1CLENBQUMsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7UUFDMUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUVqRSxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUMvQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNoRCxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQzdELE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlELE1BQU0sZUFBZSxHQUFZO1lBQy9CLElBQUksRUFBRSxjQUFjO1lBQ3BCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxJQUFJLEVBQUUsZUFBZTtvQkFDckIsSUFBSSxFQUFFO3dCQUNKLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO3dCQUN4QixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtxQkFDdkI7aUJBQ0Y7YUFDRjtTQUNGLENBQUE7UUFFRCxNQUFNLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFBO1FBQzFFLE1BQU0sYUFBYSxHQUFHLE1BQU0scUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFakUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ25DLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9DLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUM5RCxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDL0MsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDeEIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7U0FDdkIsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkQsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUE7UUFDNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFL0MsTUFBTSxlQUFlLEdBQVk7WUFDL0IsSUFBSSxFQUFFLGNBQWM7WUFDcEIsU0FBUyxFQUFFO2dCQUNUO29CQUNFLElBQUksRUFBRSxlQUFlO29CQUNyQixJQUFJLEVBQUUsT0FBTztvQkFDYixNQUFNLEVBQUUsS0FBSztpQkFDZDthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sbUJBQW1CLENBQUMsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7UUFDMUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUVqRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDbkMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDL0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQzlELE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN4RCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMvQyxNQUFNLGVBQWUsR0FBWTtZQUMvQixJQUFJLEVBQUUsY0FBYztZQUNwQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7b0JBQ2hDLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUU7NEJBQ04sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7NEJBQy9CLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO3lCQUNqQztxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sbUJBQW1CLENBQUMsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7UUFDMUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUVqRSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN4RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtRQUNqRCxNQUFNLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbkUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRCxNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQTtRQUM1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUUvQyxNQUFNLGVBQWUsR0FBWTtZQUMvQixJQUFJLEVBQUUsY0FBYztZQUNwQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLElBQUksRUFBRSxPQUFPO29CQUNiLE1BQU0sRUFBRSxLQUFLO2lCQUNkO2dCQUNEO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2lCQUM5QjthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sbUJBQW1CLENBQUMsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7UUFDMUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUVqRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDbkMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDL0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDL0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzNELE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUM3RCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRCxNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQTtRQUM1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUUvQyxNQUFNLGVBQWUsR0FBWTtZQUMvQixJQUFJLEVBQUUsY0FBYztZQUNwQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLElBQUksRUFBRSxPQUFPO29CQUNiLE1BQU0sRUFBRSxLQUFLO29CQUNiLE9BQU8sRUFBRTt3QkFDUCxTQUFTLEVBQUUsR0FBRztxQkFDZjtpQkFDRjthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sbUJBQW1CLENBQUMsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7UUFDMUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUVqRSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6RCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtRQUNuRCxNQUFNLENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLFdBQVcsSUFBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEUsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksV0FBVyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFELE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRCxNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQTtRQUU5QyxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN4RSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RSxNQUFNLGVBQWUsR0FBRyxlQUFlLEVBQUUsQ0FBQTtRQUN6QyxNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUVwRCxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN4RSxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IGdldFRlbXBGaWxlUGF0aCwgd3JpdGVUZW1wRmlsZSB9IGZyb20gXCIuLi8uLi8uLi9maWxlL2luZGV4LnRzXCJcbmltcG9ydCB7IGxvYWRQYWNrYWdlRnJvbUZvbGRlciB9IGZyb20gXCIuL2xvYWQudHNcIlxuaW1wb3J0IHsgc2F2ZVBhY2thZ2VUb0ZvbGRlciB9IGZyb20gXCIuL3NhdmUudHNcIlxuXG5kZXNjcmliZShcImxvYWRQYWNrYWdlRnJvbUZvbGRlclwiLCAoKSA9PiB7XG4gIGxldCB0ZW1wRm9sZGVyUGF0aDogc3RyaW5nXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVtcEZvbGRlclBhdGggPSBnZXRUZW1wRmlsZVBhdGgoKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgYSBiYXNpYyBwYWNrYWdlIGZyb20gZm9sZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbFBhY2thZ2U6IFBhY2thZ2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImVtcHR5LXJlc291cmNlXCIsXG4gICAgICAgICAgZGF0YTogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGF3YWl0IHNhdmVQYWNrYWdlVG9Gb2xkZXIob3JpZ2luYWxQYWNrYWdlLCB7IGZvbGRlclBhdGg6IHRlbXBGb2xkZXJQYXRoIH0pXG4gICAgY29uc3QgbG9hZGVkUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUZvbGRlcih0ZW1wRm9sZGVyUGF0aClcblxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UubmFtZSkudG9CZShcInRlc3QtcGFja2FnZVwiKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlcykudG9IYXZlTGVuZ3RoKDEpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbG9hZCBwYWNrYWdlIHdpdGggbWV0YWRhdGFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICB0aXRsZTogXCJUZXN0IFBhY2thZ2VcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkEgdGVzdCBkYXRhIHBhY2thZ2VcIixcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXJlc291cmNlXCIsXG4gICAgICAgICAgZGF0YTogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGF3YWl0IHNhdmVQYWNrYWdlVG9Gb2xkZXIob3JpZ2luYWxQYWNrYWdlLCB7IGZvbGRlclBhdGg6IHRlbXBGb2xkZXJQYXRoIH0pXG4gICAgY29uc3QgbG9hZGVkUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUZvbGRlcih0ZW1wRm9sZGVyUGF0aClcblxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLm5hbWUpLnRvQmUoXCJ0ZXN0LXBhY2thZ2VcIilcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS50aXRsZSkudG9CZShcIlRlc3QgUGFja2FnZVwiKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLmRlc2NyaXB0aW9uKS50b0JlKFwiQSB0ZXN0IGRhdGEgcGFja2FnZVwiKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnZlcnNpb24pLnRvQmUoXCIxLjAuMFwiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSB3aXRoIGlubGluZSBkYXRhIHJlc291cmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXJlc291cmNlXCIsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiIH0sXG4gICAgICAgICAgICB7IGlkOiAyLCBuYW1lOiBcImJvYlwiIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgYXdhaXQgc2F2ZVBhY2thZ2VUb0ZvbGRlcihvcmlnaW5hbFBhY2thZ2UsIHsgZm9sZGVyUGF0aDogdGVtcEZvbGRlclBhdGggfSlcbiAgICBjb25zdCBsb2FkZWRQYWNrYWdlID0gYXdhaXQgbG9hZFBhY2thZ2VGcm9tRm9sZGVyKHRlbXBGb2xkZXJQYXRoKVxuXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS5yZXNvdXJjZXMpLnRvSGF2ZUxlbmd0aCgxKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8ubmFtZSkudG9CZShcInRlc3QtcmVzb3VyY2VcIilcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS5yZXNvdXJjZXNbMF0/LmRhdGEpLnRvRXF1YWwoW1xuICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiIH0sXG4gICAgICB7IGlkOiAyLCBuYW1lOiBcImJvYlwiIH0sXG4gICAgXSlcbiAgfSlcblxuICBpdChcInNob3VsZCBsb2FkIHBhY2thZ2Ugd2l0aCBmaWxlIHJlc291cmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFwiaWQsbmFtZVxcbjEsYWxpY2VcXG4yLGJvYlwiXG4gICAgY29uc3QgY3N2UGF0aCA9IGF3YWl0IHdyaXRlVGVtcEZpbGUoY3N2Q29udGVudClcblxuICAgIGNvbnN0IG9yaWdpbmFsUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1yZXNvdXJjZVwiLFxuICAgICAgICAgIHBhdGg6IGNzdlBhdGgsXG4gICAgICAgICAgZm9ybWF0OiBcImNzdlwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlUGFja2FnZVRvRm9sZGVyKG9yaWdpbmFsUGFja2FnZSwgeyBmb2xkZXJQYXRoOiB0ZW1wRm9sZGVyUGF0aCB9KVxuICAgIGNvbnN0IGxvYWRlZFBhY2thZ2UgPSBhd2FpdCBsb2FkUGFja2FnZUZyb21Gb2xkZXIodGVtcEZvbGRlclBhdGgpXG5cbiAgICBleHBlY3QobG9hZGVkUGFja2FnZSkudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlcykudG9IYXZlTGVuZ3RoKDEpXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UucmVzb3VyY2VzWzBdPy5uYW1lKS50b0JlKFwidGVzdC1yZXNvdXJjZVwiKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8uZm9ybWF0KS50b0JlKFwiY3N2XCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbG9hZCBwYWNrYWdlIHdpdGggc2NoZW1hXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbFBhY2thZ2U6IFBhY2thZ2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcmVzb3VyY2VcIixcbiAgICAgICAgICBkYXRhOiBbeyBpZDogMSwgbmFtZTogXCJhbGljZVwiIH1dLFxuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogXCJpZFwiLCB0eXBlOiBcImludGVnZXJcIiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6IFwibmFtZVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGF3YWl0IHNhdmVQYWNrYWdlVG9Gb2xkZXIob3JpZ2luYWxQYWNrYWdlLCB7IGZvbGRlclBhdGg6IHRlbXBGb2xkZXJQYXRoIH0pXG4gICAgY29uc3QgbG9hZGVkUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUZvbGRlcih0ZW1wRm9sZGVyUGF0aClcblxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8uc2NoZW1hKS50b0JlRGVmaW5lZCgpXG4gICAgY29uc3Qgc2NoZW1hID0gbG9hZGVkUGFja2FnZS5yZXNvdXJjZXNbMF0/LnNjaGVtYVxuICAgIGV4cGVjdCh0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIFwiZmllbGRzXCIgaW4gc2NoZW1hKS50b0JlKHRydWUpXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiYgXCJmaWVsZHNcIiBpbiBzY2hlbWEpIHtcbiAgICAgIGV4cGVjdChzY2hlbWEuZmllbGRzKS50b0hhdmVMZW5ndGgoMilcbiAgICB9XG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbG9hZCBwYWNrYWdlIHdpdGggbXVsdGlwbGUgcmVzb3VyY2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZDb250ZW50ID0gXCJpZCxuYW1lXFxuMSxhbGljZVxcbjIsYm9iXCJcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShjc3ZDb250ZW50KVxuXG4gICAgY29uc3Qgb3JpZ2luYWxQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyZXNvdXJjZS0xXCIsXG4gICAgICAgICAgcGF0aDogY3N2UGF0aCxcbiAgICAgICAgICBmb3JtYXQ6IFwiY3N2XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJlc291cmNlLTJcIixcbiAgICAgICAgICBkYXRhOiBbeyBpZDogMSwgdmFsdWU6IDEwMCB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgYXdhaXQgc2F2ZVBhY2thZ2VUb0ZvbGRlcihvcmlnaW5hbFBhY2thZ2UsIHsgZm9sZGVyUGF0aDogdGVtcEZvbGRlclBhdGggfSlcbiAgICBjb25zdCBsb2FkZWRQYWNrYWdlID0gYXdhaXQgbG9hZFBhY2thZ2VGcm9tRm9sZGVyKHRlbXBGb2xkZXJQYXRoKVxuXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS5uYW1lKS50b0JlKFwidGVzdC1wYWNrYWdlXCIpXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UucmVzb3VyY2VzKS50b0hhdmVMZW5ndGgoMilcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS5yZXNvdXJjZXNbMF0/Lm5hbWUpLnRvQmUoXCJyZXNvdXJjZS0xXCIpXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UucmVzb3VyY2VzWzFdPy5uYW1lKS50b0JlKFwicmVzb3VyY2UtMlwiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSB3aXRoIGRpYWxlY3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBcImlkO25hbWVcXG4xO2FsaWNlXFxuMjtib2JcIlxuICAgIGNvbnN0IGNzdlBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKGNzdkNvbnRlbnQpXG5cbiAgICBjb25zdCBvcmlnaW5hbFBhY2thZ2U6IFBhY2thZ2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcmVzb3VyY2VcIixcbiAgICAgICAgICBwYXRoOiBjc3ZQYXRoLFxuICAgICAgICAgIGZvcm1hdDogXCJjc3ZcIixcbiAgICAgICAgICBkaWFsZWN0OiB7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiO1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGF3YWl0IHNhdmVQYWNrYWdlVG9Gb2xkZXIob3JpZ2luYWxQYWNrYWdlLCB7IGZvbGRlclBhdGg6IHRlbXBGb2xkZXJQYXRoIH0pXG4gICAgY29uc3QgbG9hZGVkUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUZvbGRlcih0ZW1wRm9sZGVyUGF0aClcblxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8uZGlhbGVjdCkudG9CZURlZmluZWQoKVxuICAgIGNvbnN0IGRpYWxlY3QgPSBsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8uZGlhbGVjdFxuICAgIGV4cGVjdCh0eXBlb2YgZGlhbGVjdCA9PT0gXCJvYmplY3RcIiAmJiBcImRlbGltaXRlclwiIGluIGRpYWxlY3QpLnRvQmUodHJ1ZSlcbiAgICBpZiAodHlwZW9mIGRpYWxlY3QgPT09IFwib2JqZWN0XCIgJiYgXCJkZWxpbWl0ZXJcIiBpbiBkaWFsZWN0KSB7XG4gICAgICBleHBlY3QoZGlhbGVjdC5kZWxpbWl0ZXIpLnRvQmUoXCI7XCIpXG4gICAgfVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHRocm93IGVycm9yIGZvciBub24tZXhpc3RlbnQgZm9sZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBub25FeGlzdGVudFBhdGggPSBcIi9ub24vZXhpc3RlbnQvZm9sZGVyXCJcblxuICAgIGF3YWl0IGV4cGVjdChsb2FkUGFja2FnZUZyb21Gb2xkZXIobm9uRXhpc3RlbnRQYXRoKSkucmVqZWN0cy50b1Rocm93KClcbiAgfSlcblxuICBpdChcInNob3VsZCB0aHJvdyBlcnJvciBmb3IgZm9sZGVyIHdpdGhvdXQgZGF0YXBhY2thZ2UuanNvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW1wdHlGb2xkZXJQYXRoID0gZ2V0VGVtcEZpbGVQYXRoKClcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIilcbiAgICBhd2FpdCBmcy5ta2RpcihlbXB0eUZvbGRlclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG5cbiAgICBhd2FpdCBleHBlY3QobG9hZFBhY2thZ2VGcm9tRm9sZGVyKGVtcHR5Rm9sZGVyUGF0aCkpLnJlamVjdHMudG9UaHJvdygpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { convertPackageToDescriptor, saveDescriptor, } from "@frictionless-ts/metadata";
|
|
3
|
+
import { assertLocalPathVacant, copyFile } from "../../../file/index.js";
|
|
4
|
+
import { createFolder } from "../../../folder/index.js";
|
|
5
|
+
import { getPackageBasepath } from "../../../package/index.js";
|
|
6
|
+
import { saveResourceFiles } from "../../../resource/index.js";
|
|
7
|
+
export async function savePackageToFolder(dataPackage, options) {
|
|
8
|
+
const basepath = getPackageBasepath(dataPackage);
|
|
9
|
+
const { folderPath, withRemote } = options;
|
|
10
|
+
await assertLocalPathVacant(folderPath);
|
|
11
|
+
await createFolder(folderPath);
|
|
12
|
+
const resourceDescriptors = [];
|
|
13
|
+
for (const resource of dataPackage.resources) {
|
|
14
|
+
resourceDescriptors.push(await saveResourceFiles(resource, {
|
|
15
|
+
basepath,
|
|
16
|
+
withRemote,
|
|
17
|
+
saveFile: async (options) => {
|
|
18
|
+
await copyFile({
|
|
19
|
+
sourcePath: options.normalizedPath,
|
|
20
|
+
targetPath: join(folderPath, options.denormalizedPath),
|
|
21
|
+
});
|
|
22
|
+
return options.denormalizedPath;
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
const descriptor = {
|
|
27
|
+
...convertPackageToDescriptor(dataPackage, { basepath }),
|
|
28
|
+
resources: resourceDescriptors,
|
|
29
|
+
};
|
|
30
|
+
await saveDescriptor(descriptor, {
|
|
31
|
+
path: join(folderPath, "datapackage.json"),
|
|
32
|
+
});
|
|
33
|
+
return descriptor;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvZm9sZGVyL3BhY2thZ2Uvc2F2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsY0FBYyxHQUNmLE1BQU0sMkJBQTJCLENBQUE7QUFFbEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUU5RCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxXQUFvQixFQUNwQixPQUdDO0lBRUQsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDaEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFFMUMsTUFBTSxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN2QyxNQUFNLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUU5QixNQUFNLG1CQUFtQixHQUFpQixFQUFFLENBQUE7SUFDNUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixNQUFNLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtZQUNoQyxRQUFRO1lBQ1IsVUFBVTtZQUNWLFFBQVEsRUFBRSxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sUUFBUSxDQUFDO29CQUNiLFVBQVUsRUFBRSxPQUFPLENBQUMsY0FBYztvQkFDbEMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2lCQUN2RCxDQUFDLENBQUE7Z0JBRUYsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLENBQUE7WUFDakMsQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLEdBQUcsMEJBQTBCLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDeEQsU0FBUyxFQUFFLG1CQUFtQjtLQUMvQixDQUFBO0lBRUQsTUFBTSxjQUFjLENBQUMsVUFBVSxFQUFFO1FBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDO0tBQzNDLENBQUMsQ0FBQTtJQUVGLE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQge1xuICBjb252ZXJ0UGFja2FnZVRvRGVzY3JpcHRvcixcbiAgc2F2ZURlc2NyaXB0b3IsXG59IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB0eXBlIHsgRGVzY3JpcHRvciwgUGFja2FnZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IGFzc2VydExvY2FsUGF0aFZhY2FudCwgY29weUZpbGUgfSBmcm9tIFwiLi4vLi4vLi4vZmlsZS9pbmRleC50c1wiXG5pbXBvcnQgeyBjcmVhdGVGb2xkZXIgfSBmcm9tIFwiLi4vLi4vLi4vZm9sZGVyL2luZGV4LnRzXCJcbmltcG9ydCB7IGdldFBhY2thZ2VCYXNlcGF0aCB9IGZyb20gXCIuLi8uLi8uLi9wYWNrYWdlL2luZGV4LnRzXCJcbmltcG9ydCB7IHNhdmVSZXNvdXJjZUZpbGVzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc291cmNlL2luZGV4LnRzXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVQYWNrYWdlVG9Gb2xkZXIoXG4gIGRhdGFQYWNrYWdlOiBQYWNrYWdlLFxuICBvcHRpb25zOiB7XG4gICAgZm9sZGVyUGF0aDogc3RyaW5nXG4gICAgd2l0aFJlbW90ZT86IGJvb2xlYW5cbiAgfSxcbikge1xuICBjb25zdCBiYXNlcGF0aCA9IGdldFBhY2thZ2VCYXNlcGF0aChkYXRhUGFja2FnZSlcbiAgY29uc3QgeyBmb2xkZXJQYXRoLCB3aXRoUmVtb3RlIH0gPSBvcHRpb25zXG5cbiAgYXdhaXQgYXNzZXJ0TG9jYWxQYXRoVmFjYW50KGZvbGRlclBhdGgpXG4gIGF3YWl0IGNyZWF0ZUZvbGRlcihmb2xkZXJQYXRoKVxuXG4gIGNvbnN0IHJlc291cmNlRGVzY3JpcHRvcnM6IERlc2NyaXB0b3JbXSA9IFtdXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZGF0YVBhY2thZ2UucmVzb3VyY2VzKSB7XG4gICAgcmVzb3VyY2VEZXNjcmlwdG9ycy5wdXNoKFxuICAgICAgYXdhaXQgc2F2ZVJlc291cmNlRmlsZXMocmVzb3VyY2UsIHtcbiAgICAgICAgYmFzZXBhdGgsXG4gICAgICAgIHdpdGhSZW1vdGUsXG4gICAgICAgIHNhdmVGaWxlOiBhc3luYyBvcHRpb25zID0+IHtcbiAgICAgICAgICBhd2FpdCBjb3B5RmlsZSh7XG4gICAgICAgICAgICBzb3VyY2VQYXRoOiBvcHRpb25zLm5vcm1hbGl6ZWRQYXRoLFxuICAgICAgICAgICAgdGFyZ2V0UGF0aDogam9pbihmb2xkZXJQYXRoLCBvcHRpb25zLmRlbm9ybWFsaXplZFBhdGgpLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW5vcm1hbGl6ZWRQYXRoXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgIC4uLmNvbnZlcnRQYWNrYWdlVG9EZXNjcmlwdG9yKGRhdGFQYWNrYWdlLCB7IGJhc2VwYXRoIH0pLFxuICAgIHJlc291cmNlczogcmVzb3VyY2VEZXNjcmlwdG9ycyxcbiAgfVxuXG4gIGF3YWl0IHNhdmVEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIHtcbiAgICBwYXRoOiBqb2luKGZvbGRlclBhdGgsIFwiZGF0YXBhY2thZ2UuanNvblwiKSxcbiAgfSlcblxuICByZXR1cm4gZGVzY3JpcHRvclxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|