@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.
Files changed (242) hide show
  1. package/README.md +3 -0
  2. package/build/file/copy.d.ts +4 -0
  3. package/build/file/copy.js +7 -0
  4. package/build/file/copy.spec.d.ts +1 -0
  5. package/build/file/copy.spec.js +104 -0
  6. package/build/file/describe.d.ts +7 -0
  7. package/build/file/describe.js +9 -0
  8. package/build/file/fetch.d.ts +2 -0
  9. package/build/file/fetch.js +21 -0
  10. package/build/file/index.d.ts +9 -0
  11. package/build/file/index.js +10 -0
  12. package/build/file/infer.d.ts +10 -0
  13. package/build/file/infer.js +48 -0
  14. package/build/file/infer.spec.d.ts +1 -0
  15. package/build/file/infer.spec.js +141 -0
  16. package/build/file/load.d.ts +3 -0
  17. package/build/file/load.js +7 -0
  18. package/build/file/path.d.ts +2 -0
  19. package/build/file/path.js +17 -0
  20. package/build/file/save.d.ts +3 -0
  21. package/build/file/save.js +7 -0
  22. package/build/file/temp.d.ts +11 -0
  23. package/build/file/temp.js +23 -0
  24. package/build/file/validate.d.ts +6 -0
  25. package/build/file/validate.js +47 -0
  26. package/build/file/validate.spec.d.ts +1 -0
  27. package/build/file/validate.spec.js +180 -0
  28. package/build/folder/create.d.ts +1 -0
  29. package/build/folder/create.js +5 -0
  30. package/build/folder/index.d.ts +2 -0
  31. package/build/folder/index.js +3 -0
  32. package/build/folder/temp.d.ts +3 -0
  33. package/build/folder/temp.js +16 -0
  34. package/build/index.d.ts +36 -0
  35. package/build/index.js +35 -0
  36. package/build/package/index.d.ts +2 -0
  37. package/build/package/index.js +3 -0
  38. package/build/package/merge.d.ts +23 -0
  39. package/build/package/merge.js +12 -0
  40. package/build/package/path.d.ts +3 -0
  41. package/build/package/path.js +43 -0
  42. package/build/package/path.spec.d.ts +1 -0
  43. package/build/package/path.spec.js +56 -0
  44. package/build/plugin.d.ts +11 -0
  45. package/build/plugin.js +2 -0
  46. package/build/plugins/ckan/ckan/index.d.ts +1 -0
  47. package/build/plugins/ckan/ckan/index.js +2 -0
  48. package/build/plugins/ckan/ckan/request.d.ts +11 -0
  49. package/build/plugins/ckan/ckan/request.js +35 -0
  50. package/build/plugins/ckan/index.d.ts +4 -0
  51. package/build/plugins/ckan/index.js +5 -0
  52. package/build/plugins/ckan/package/Organization.d.ts +21 -0
  53. package/build/plugins/ckan/package/Organization.js +2 -0
  54. package/build/plugins/ckan/package/Package.d.ts +76 -0
  55. package/build/plugins/ckan/package/Package.js +2 -0
  56. package/build/plugins/ckan/package/Tag.d.ts +17 -0
  57. package/build/plugins/ckan/package/Tag.js +2 -0
  58. package/build/plugins/ckan/package/convert/fromCkan.d.ts +3 -0
  59. package/build/plugins/ckan/package/convert/fromCkan.js +63 -0
  60. package/build/plugins/ckan/package/convert/fromCkan.spec.d.ts +1 -0
  61. package/build/plugins/ckan/package/convert/fromCkan.spec.js +80 -0
  62. package/build/plugins/ckan/package/convert/toCkan.d.ts +22 -0
  63. package/build/plugins/ckan/package/convert/toCkan.js +51 -0
  64. package/build/plugins/ckan/package/convert/toCkan.spec.d.ts +1 -0
  65. package/build/plugins/ckan/package/convert/toCkan.spec.js +153 -0
  66. package/build/plugins/ckan/package/fixtures/ckan-package.json +308 -0
  67. package/build/plugins/ckan/package/index.d.ts +7 -0
  68. package/build/plugins/ckan/package/index.js +5 -0
  69. package/build/plugins/ckan/package/load.d.ts +21 -0
  70. package/build/plugins/ckan/package/load.js +74 -0
  71. package/build/plugins/ckan/package/load.spec.d.ts +1 -0
  72. package/build/plugins/ckan/package/load.spec.js +11 -0
  73. package/build/plugins/ckan/package/save.d.ts +10 -0
  74. package/build/plugins/ckan/package/save.js +83 -0
  75. package/build/plugins/ckan/package/save.spec.d.ts +1 -0
  76. package/build/plugins/ckan/package/save.spec.js +319 -0
  77. package/build/plugins/ckan/plugin.d.ts +19 -0
  78. package/build/plugins/ckan/plugin.js +18 -0
  79. package/build/plugins/ckan/plugin.spec.d.ts +1 -0
  80. package/build/plugins/ckan/plugin.spec.js +83 -0
  81. package/build/plugins/ckan/resource/Resource.d.ts +56 -0
  82. package/build/plugins/ckan/resource/Resource.js +2 -0
  83. package/build/plugins/ckan/resource/convert/fromCkan.d.ts +3 -0
  84. package/build/plugins/ckan/resource/convert/fromCkan.js +39 -0
  85. package/build/plugins/ckan/resource/convert/toCkan.d.ts +3 -0
  86. package/build/plugins/ckan/resource/convert/toCkan.js +20 -0
  87. package/build/plugins/ckan/resource/index.d.ts +3 -0
  88. package/build/plugins/ckan/resource/index.js +3 -0
  89. package/build/plugins/ckan/schema/Field.d.ts +34 -0
  90. package/build/plugins/ckan/schema/Field.js +2 -0
  91. package/build/plugins/ckan/schema/Schema.d.ts +10 -0
  92. package/build/plugins/ckan/schema/Schema.js +2 -0
  93. package/build/plugins/ckan/schema/convert/fixtures/ckan-schema.json +115 -0
  94. package/build/plugins/ckan/schema/convert/fromCkan.d.ts +3 -0
  95. package/build/plugins/ckan/schema/convert/fromCkan.js +47 -0
  96. package/build/plugins/ckan/schema/convert/fromCkan.spec.d.ts +1 -0
  97. package/build/plugins/ckan/schema/convert/fromCkan.spec.js +157 -0
  98. package/build/plugins/ckan/schema/convert/toCkan.d.ts +3 -0
  99. package/build/plugins/ckan/schema/convert/toCkan.js +50 -0
  100. package/build/plugins/ckan/schema/convert/toCkan.spec.d.ts +1 -0
  101. package/build/plugins/ckan/schema/convert/toCkan.spec.js +278 -0
  102. package/build/plugins/ckan/schema/index.d.ts +4 -0
  103. package/build/plugins/ckan/schema/index.js +3 -0
  104. package/build/plugins/datahub/index.d.ts +2 -0
  105. package/build/plugins/datahub/index.js +3 -0
  106. package/build/plugins/datahub/package/index.d.ts +1 -0
  107. package/build/plugins/datahub/package/index.js +2 -0
  108. package/build/plugins/datahub/package/load.d.ts +1 -0
  109. package/build/plugins/datahub/package/load.js +9 -0
  110. package/build/plugins/datahub/package/load.spec.d.ts +1 -0
  111. package/build/plugins/datahub/package/load.spec.js +11 -0
  112. package/build/plugins/datahub/plugin.d.ts +4 -0
  113. package/build/plugins/datahub/plugin.js +18 -0
  114. package/build/plugins/datahub/plugin.spec.d.ts +1 -0
  115. package/build/plugins/datahub/plugin.spec.js +78 -0
  116. package/build/plugins/descriptor/index.d.ts +1 -0
  117. package/build/plugins/descriptor/index.js +2 -0
  118. package/build/plugins/descriptor/plugin.d.ts +11 -0
  119. package/build/plugins/descriptor/plugin.js +29 -0
  120. package/build/plugins/descriptor/plugin.spec.d.ts +1 -0
  121. package/build/plugins/descriptor/plugin.spec.js +169 -0
  122. package/build/plugins/folder/index.d.ts +2 -0
  123. package/build/plugins/folder/index.js +3 -0
  124. package/build/plugins/folder/package/index.d.ts +2 -0
  125. package/build/plugins/folder/package/index.js +3 -0
  126. package/build/plugins/folder/package/load.d.ts +1 -0
  127. package/build/plugins/folder/package/load.js +6 -0
  128. package/build/plugins/folder/package/load.spec.d.ts +1 -0
  129. package/build/plugins/folder/package/load.spec.js +175 -0
  130. package/build/plugins/folder/package/save.d.ts +7 -0
  131. package/build/plugins/folder/package/save.js +35 -0
  132. package/build/plugins/folder/package/save.spec.d.ts +1 -0
  133. package/build/plugins/folder/package/save.spec.js +328 -0
  134. package/build/plugins/folder/plugin.d.ts +4 -0
  135. package/build/plugins/folder/plugin.js +19 -0
  136. package/build/plugins/folder/plugin.spec.d.ts +1 -0
  137. package/build/plugins/folder/plugin.spec.js +53 -0
  138. package/build/plugins/github/github/index.d.ts +1 -0
  139. package/build/plugins/github/github/index.js +2 -0
  140. package/build/plugins/github/github/path.d.ts +1 -0
  141. package/build/plugins/github/github/path.js +4 -0
  142. package/build/plugins/github/github/request.d.ts +15 -0
  143. package/build/plugins/github/github/request.js +43 -0
  144. package/build/plugins/github/index.d.ts +3 -0
  145. package/build/plugins/github/index.js +4 -0
  146. package/build/plugins/github/package/License.d.ts +21 -0
  147. package/build/plugins/github/package/License.js +2 -0
  148. package/build/plugins/github/package/Owner.d.ts +25 -0
  149. package/build/plugins/github/package/Owner.js +2 -0
  150. package/build/plugins/github/package/Package.d.ts +87 -0
  151. package/build/plugins/github/package/Package.js +2 -0
  152. package/build/plugins/github/package/convert/fromGithub.d.ts +3 -0
  153. package/build/plugins/github/package/convert/fromGithub.js +50 -0
  154. package/build/plugins/github/package/index.d.ts +6 -0
  155. package/build/plugins/github/package/index.js +4 -0
  156. package/build/plugins/github/package/load.d.ts +23 -0
  157. package/build/plugins/github/package/load.js +48 -0
  158. package/build/plugins/github/package/load.spec.d.ts +1 -0
  159. package/build/plugins/github/package/load.spec.js +15 -0
  160. package/build/plugins/github/package/save.d.ts +14 -0
  161. package/build/plugins/github/package/save.js +69 -0
  162. package/build/plugins/github/package/save.spec.d.ts +1 -0
  163. package/build/plugins/github/package/save.spec.js +566 -0
  164. package/build/plugins/github/plugin.d.ts +19 -0
  165. package/build/plugins/github/plugin.js +18 -0
  166. package/build/plugins/github/plugin.spec.d.ts +1 -0
  167. package/build/plugins/github/plugin.spec.js +73 -0
  168. package/build/plugins/github/resource/Resource.d.ts +29 -0
  169. package/build/plugins/github/resource/Resource.js +2 -0
  170. package/build/plugins/github/resource/convert/fromGithub.d.ts +5 -0
  171. package/build/plugins/github/resource/convert/fromGithub.js +24 -0
  172. package/build/plugins/github/resource/convert/toGithub.d.ts +3 -0
  173. package/build/plugins/github/resource/convert/toGithub.js +10 -0
  174. package/build/plugins/github/resource/index.d.ts +3 -0
  175. package/build/plugins/github/resource/index.js +3 -0
  176. package/build/plugins/zenodo/index.d.ts +3 -0
  177. package/build/plugins/zenodo/index.js +4 -0
  178. package/build/plugins/zenodo/package/Creator.d.ts +20 -0
  179. package/build/plugins/zenodo/package/Creator.js +2 -0
  180. package/build/plugins/zenodo/package/Package.d.ts +94 -0
  181. package/build/plugins/zenodo/package/Package.js +2 -0
  182. package/build/plugins/zenodo/package/convert/fromZenodo.d.ts +3 -0
  183. package/build/plugins/zenodo/package/convert/fromZenodo.js +43 -0
  184. package/build/plugins/zenodo/package/convert/toZenodo.d.ts +3 -0
  185. package/build/plugins/zenodo/package/convert/toZenodo.js +79 -0
  186. package/build/plugins/zenodo/package/index.d.ts +6 -0
  187. package/build/plugins/zenodo/package/index.js +5 -0
  188. package/build/plugins/zenodo/package/load.d.ts +23 -0
  189. package/build/plugins/zenodo/package/load.js +45 -0
  190. package/build/plugins/zenodo/package/load.spec.d.ts +1 -0
  191. package/build/plugins/zenodo/package/load.spec.js +15 -0
  192. package/build/plugins/zenodo/package/save.d.ts +13 -0
  193. package/build/plugins/zenodo/package/save.js +74 -0
  194. package/build/plugins/zenodo/package/save.spec.d.ts +1 -0
  195. package/build/plugins/zenodo/package/save.spec.js +524 -0
  196. package/build/plugins/zenodo/plugin.d.ts +19 -0
  197. package/build/plugins/zenodo/plugin.js +18 -0
  198. package/build/plugins/zenodo/plugin.spec.d.ts +1 -0
  199. package/build/plugins/zenodo/plugin.spec.js +78 -0
  200. package/build/plugins/zenodo/resource/Resource.d.ts +27 -0
  201. package/build/plugins/zenodo/resource/Resource.js +2 -0
  202. package/build/plugins/zenodo/resource/convert/fromZenodo.d.ts +10 -0
  203. package/build/plugins/zenodo/resource/convert/fromZenodo.js +18 -0
  204. package/build/plugins/zenodo/resource/convert/toZenodo.d.ts +3 -0
  205. package/build/plugins/zenodo/resource/convert/toZenodo.js +13 -0
  206. package/build/plugins/zenodo/resource/index.d.ts +3 -0
  207. package/build/plugins/zenodo/resource/index.js +3 -0
  208. package/build/plugins/zenodo/zenodo/index.d.ts +1 -0
  209. package/build/plugins/zenodo/zenodo/index.js +2 -0
  210. package/build/plugins/zenodo/zenodo/request.d.ts +12 -0
  211. package/build/plugins/zenodo/zenodo/request.js +36 -0
  212. package/build/plugins/zip/index.d.ts +2 -0
  213. package/build/plugins/zip/index.js +3 -0
  214. package/build/plugins/zip/package/index.d.ts +2 -0
  215. package/build/plugins/zip/package/index.js +3 -0
  216. package/build/plugins/zip/package/load.d.ts +1 -0
  217. package/build/plugins/zip/package/load.js +30 -0
  218. package/build/plugins/zip/package/load.spec.d.ts +1 -0
  219. package/build/plugins/zip/package/load.spec.js +173 -0
  220. package/build/plugins/zip/package/save.d.ts +5 -0
  221. package/build/plugins/zip/package/save.js +50 -0
  222. package/build/plugins/zip/package/save.spec.d.ts +1 -0
  223. package/build/plugins/zip/package/save.spec.js +287 -0
  224. package/build/plugins/zip/plugin.d.ts +11 -0
  225. package/build/plugins/zip/plugin.js +24 -0
  226. package/build/plugins/zip/plugin.spec.d.ts +1 -0
  227. package/build/plugins/zip/plugin.spec.js +158 -0
  228. package/build/resource/index.d.ts +1 -0
  229. package/build/resource/index.js +2 -0
  230. package/build/resource/save.d.ts +13 -0
  231. package/build/resource/save.js +53 -0
  232. package/build/resource/save.spec.d.ts +1 -0
  233. package/build/resource/save.spec.js +107 -0
  234. package/build/stream/concat.d.ts +3 -0
  235. package/build/stream/concat.js +5 -0
  236. package/build/stream/index.d.ts +3 -0
  237. package/build/stream/index.js +4 -0
  238. package/build/stream/load.d.ts +5 -0
  239. package/build/stream/load.js +46 -0
  240. package/build/stream/save.d.ts +5 -0
  241. package/build/stream/save.js +13 -0
  242. 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,2 @@
1
+ export * from "./package/index.ts";
2
+ export * from "./plugin.ts";
@@ -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,2 @@
1
+ export { loadPackageFromFolder } from "./load.ts";
2
+ export { savePackageToFolder } from "./save.ts";
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2lucy9mb2xkZXIvcGFja2FnZS9sb2FkLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFL0MsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxJQUFJLGNBQXNCLENBQUE7SUFFMUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGNBQWMsR0FBRyxlQUFlLEVBQUUsQ0FBQTtJQUNwQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLGVBQWUsR0FBWTtZQUMvQixJQUFJLEVBQUUsY0FBYztZQUNwQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsSUFBSSxFQUFFLEVBQUU7aUJBQ1Q7YUFDRjtTQUNGLENBQUE7UUFFRCxNQUFNLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFBO1FBQzFFLE1BQU0sYUFBYSxHQUFHLE1BQU0scUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFakUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ25DLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQy9DLE1BQU0sQ0FB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c3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IGdldFRlbXBGaWxlUGF0aCwgd3JpdGVUZW1wRmlsZSB9IGZyb20gXCIuLi8uLi8uLi9maWxlL2luZGV4LnRzXCJcbmltcG9ydCB7IGxvYWRQYWNrYWdlRnJvbUZvbGRlciB9IGZyb20gXCIuL2xvYWQudHNcIlxuaW1wb3J0IHsgc2F2ZVBhY2thZ2VUb0ZvbGRlciB9IGZyb20gXCIuL3NhdmUudHNcIlxuXG5kZXNjcmliZShcImxvYWRQYWNrYWdlRnJvbUZvbGRlclwiLCAoKSA9PiB7XG4gIGxldCB0ZW1wRm9sZGVyUGF0aDogc3RyaW5nXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVtcEZvbGRlclBhdGggPSBnZXRUZW1wRmlsZVBhdGgoKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgYSBiYXNpYyBwYWNrYWdlIGZyb20gZm9sZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbFBhY2thZ2U6IFBhY2thZ2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImVtcHR5LXJlc291cmNlXCIsXG4gICAgICAgICAgZGF0YTogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGF3YWl0IHNhdmVQYWNrYWdlVG9Gb2xkZXIob3JpZ2luYWxQYWNrYWdlLCB7IGZvbGRlclBhdGg6IHRlbXBGb2xkZXJQYXRoIH0pXG4gICAgY29uc3QgbG9hZGVkUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUZvbGRlcih0ZW1wRm9sZGVyUGF0aClcblxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UubmFtZSkudG9CZShcInRlc3QtcGFja2FnZVwiKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlcykudG9IYXZlTGVuZ3RoKDEpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbG9hZCBwYWNrYWdlIHdpdGggbWV0YWRhdGFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICB0aXRsZTogXCJUZXN0IFBhY2thZ2VcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkEgdGVzdCBkYXRhIHBhY2thZ2VcIixcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXJlc291cmNlXCIsXG4gICAgICAgICAgZGF0YTogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGF3YWl0IHNhdmVQYWNrYWdlVG9Gb2xkZXIob3JpZ2luYWxQYWNrYWdlLCB7IGZvbGRlclBhdGg6IHRlbXBGb2xkZXJQYXRoIH0pXG4gICAgY29uc3QgbG9hZGVkUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUZvbGRlcih0ZW1wRm9sZGVyUGF0aClcblxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLm5hbWUpLnRvQmUoXCJ0ZXN0LXBhY2thZ2VcIilcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS50aXRsZSkudG9CZShcIlRlc3QgUGFja2FnZVwiKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLmRlc2NyaXB0aW9uKS50b0JlKFwiQSB0ZXN0IGRhdGEgcGFja2FnZVwiKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnZlcnNpb24pLnRvQmUoXCIxLjAuMFwiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSB3aXRoIGlubGluZSBkYXRhIHJlc291cmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXJlc291cmNlXCIsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiIH0sXG4gICAgICAgICAgICB7IGlkOiAyLCBuYW1lOiBcImJvYlwiIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgYXdhaXQgc2F2ZVBhY2thZ2VUb0ZvbGRlcihvcmlnaW5hbFBhY2thZ2UsIHsgZm9sZGVyUGF0aDogdGVtcEZvbGRlclBhdGggfSlcbiAgICBjb25zdCBsb2FkZWRQYWNrYWdlID0gYXdhaXQgbG9hZFBhY2thZ2VGcm9tRm9sZGVyKHRlbXBGb2xkZXJQYXRoKVxuXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS5yZXNvdXJjZXMpLnRvSGF2ZUxlbmd0aCgxKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8ubmFtZSkudG9CZShcInRlc3QtcmVzb3VyY2VcIilcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS5yZXNvdXJjZXNbMF0/LmRhdGEpLnRvRXF1YWwoW1xuICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiIH0sXG4gICAgICB7IGlkOiAyLCBuYW1lOiBcImJvYlwiIH0sXG4gICAgXSlcbiAgfSlcblxuICBpdChcInNob3VsZCBsb2FkIHBhY2thZ2Ugd2l0aCBmaWxlIHJlc291cmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFwiaWQsbmFtZVxcbjEsYWxpY2VcXG4yLGJvYlwiXG4gICAgY29uc3QgY3N2UGF0aCA9IGF3YWl0IHdyaXRlVGVtcEZpbGUoY3N2Q29udGVudClcblxuICAgIGNvbnN0IG9yaWdpbmFsUGFja2FnZTogUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1yZXNvdXJjZVwiLFxuICAgICAgICAgIHBhdGg6IGNzdlBhdGgsXG4gICAgICAgICAgZm9ybWF0OiBcImNzdlwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlUGFja2FnZVRvRm9sZGVyKG9yaWdpbmFsUGFja2FnZSwgeyBmb2xkZXJQYXRoOiB0ZW1wRm9sZGVyUGF0aCB9KVxuICAgIGNvbnN0IGxvYWRlZFBhY2thZ2UgPSBhd2FpdCBsb2FkUGFja2FnZUZyb21Gb2xkZXIodGVtcEZvbGRlclBhdGgpXG5cbiAgICBleHBlY3QobG9hZGVkUGFja2FnZSkudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlcykudG9IYXZlTGVuZ3RoKDEpXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UucmVzb3VyY2VzWzBdPy5uYW1lKS50b0JlKFwidGVzdC1yZXNvdXJjZVwiKVxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8uZm9ybWF0KS50b0JlKFwiY3N2XCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbG9hZCBwYWNrYWdlIHdpdGggc2NoZW1hXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbFBhY2thZ2U6IFBhY2thZ2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcmVzb3VyY2VcIixcbiAgICAgICAgICBkYXRhOiBbeyBpZDogMSwgbmFtZTogXCJhbGljZVwiIH1dLFxuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogXCJpZFwiLCB0eXBlOiBcImludGVnZXJcIiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6IFwibmFtZVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGF3YWl0IHNhdmVQYWNrYWdlVG9Gb2xkZXIob3JpZ2luYWxQYWNrYWdlLCB7IGZvbGRlclBhdGg6IHRlbXBGb2xkZXJQYXRoIH0pXG4gICAgY29uc3QgbG9hZGVkUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUZvbGRlcih0ZW1wRm9sZGVyUGF0aClcblxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8uc2NoZW1hKS50b0JlRGVmaW5lZCgpXG4gICAgY29uc3Qgc2NoZW1hID0gbG9hZGVkUGFja2FnZS5yZXNvdXJjZXNbMF0/LnNjaGVtYVxuICAgIGV4cGVjdCh0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIFwiZmllbGRzXCIgaW4gc2NoZW1hKS50b0JlKHRydWUpXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiYgXCJmaWVsZHNcIiBpbiBzY2hlbWEpIHtcbiAgICAgIGV4cGVjdChzY2hlbWEuZmllbGRzKS50b0hhdmVMZW5ndGgoMilcbiAgICB9XG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbG9hZCBwYWNrYWdlIHdpdGggbXVsdGlwbGUgcmVzb3VyY2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZDb250ZW50ID0gXCJpZCxuYW1lXFxuMSxhbGljZVxcbjIsYm9iXCJcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShjc3ZDb250ZW50KVxuXG4gICAgY29uc3Qgb3JpZ2luYWxQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyZXNvdXJjZS0xXCIsXG4gICAgICAgICAgcGF0aDogY3N2UGF0aCxcbiAgICAgICAgICBmb3JtYXQ6IFwiY3N2XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJlc291cmNlLTJcIixcbiAgICAgICAgICBkYXRhOiBbeyBpZDogMSwgdmFsdWU6IDEwMCB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgYXdhaXQgc2F2ZVBhY2thZ2VUb0ZvbGRlcihvcmlnaW5hbFBhY2thZ2UsIHsgZm9sZGVyUGF0aDogdGVtcEZvbGRlclBhdGggfSlcbiAgICBjb25zdCBsb2FkZWRQYWNrYWdlID0gYXdhaXQgbG9hZFBhY2thZ2VGcm9tRm9sZGVyKHRlbXBGb2xkZXJQYXRoKVxuXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS5uYW1lKS50b0JlKFwidGVzdC1wYWNrYWdlXCIpXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UucmVzb3VyY2VzKS50b0hhdmVMZW5ndGgoMilcbiAgICBleHBlY3QobG9hZGVkUGFja2FnZS5yZXNvdXJjZXNbMF0/Lm5hbWUpLnRvQmUoXCJyZXNvdXJjZS0xXCIpXG4gICAgZXhwZWN0KGxvYWRlZFBhY2thZ2UucmVzb3VyY2VzWzFdPy5uYW1lKS50b0JlKFwicmVzb3VyY2UtMlwiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSB3aXRoIGRpYWxlY3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBcImlkO25hbWVcXG4xO2FsaWNlXFxuMjtib2JcIlxuICAgIGNvbnN0IGNzdlBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKGNzdkNvbnRlbnQpXG5cbiAgICBjb25zdCBvcmlnaW5hbFBhY2thZ2U6IFBhY2thZ2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcmVzb3VyY2VcIixcbiAgICAgICAgICBwYXRoOiBjc3ZQYXRoLFxuICAgICAgICAgIGZvcm1hdDogXCJjc3ZcIixcbiAgICAgICAgICBkaWFsZWN0OiB7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiO1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGF3YWl0IHNhdmVQYWNrYWdlVG9Gb2xkZXIob3JpZ2luYWxQYWNrYWdlLCB7IGZvbGRlclBhdGg6IHRlbXBGb2xkZXJQYXRoIH0pXG4gICAgY29uc3QgbG9hZGVkUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRnJvbUZvbGRlcih0ZW1wRm9sZGVyUGF0aClcblxuICAgIGV4cGVjdChsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8uZGlhbGVjdCkudG9CZURlZmluZWQoKVxuICAgIGNvbnN0IGRpYWxlY3QgPSBsb2FkZWRQYWNrYWdlLnJlc291cmNlc1swXT8uZGlhbGVjdFxuICAgIGV4cGVjdCh0eXBlb2YgZGlhbGVjdCA9PT0gXCJvYmplY3RcIiAmJiBcImRlbGltaXRlclwiIGluIGRpYWxlY3QpLnRvQmUodHJ1ZSlcbiAgICBpZiAodHlwZW9mIGRpYWxlY3QgPT09IFwib2JqZWN0XCIgJiYgXCJkZWxpbWl0ZXJcIiBpbiBkaWFsZWN0KSB7XG4gICAgICBleHBlY3QoZGlhbGVjdC5kZWxpbWl0ZXIpLnRvQmUoXCI7XCIpXG4gICAgfVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHRocm93IGVycm9yIGZvciBub24tZXhpc3RlbnQgZm9sZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBub25FeGlzdGVudFBhdGggPSBcIi9ub24vZXhpc3RlbnQvZm9sZGVyXCJcblxuICAgIGF3YWl0IGV4cGVjdChsb2FkUGFja2FnZUZyb21Gb2xkZXIobm9uRXhpc3RlbnRQYXRoKSkucmVqZWN0cy50b1Rocm93KClcbiAgfSlcblxuICBpdChcInNob3VsZCB0aHJvdyBlcnJvciBmb3IgZm9sZGVyIHdpdGhvdXQgZGF0YXBhY2thZ2UuanNvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW1wdHlGb2xkZXJQYXRoID0gZ2V0VGVtcEZpbGVQYXRoKClcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIilcbiAgICBhd2FpdCBmcy5ta2RpcihlbXB0eUZvbGRlclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG5cbiAgICBhd2FpdCBleHBlY3QobG9hZFBhY2thZ2VGcm9tRm9sZGVyKGVtcHR5Rm9sZGVyUGF0aCkpLnJlamVjdHMudG9UaHJvdygpXG4gIH0pXG59KVxuIl19
@@ -0,0 +1,7 @@
1
+ import type { Descriptor, Package } from "@frictionless-ts/metadata";
2
+ export declare function savePackageToFolder(dataPackage: Package, options: {
3
+ folderPath: string;
4
+ withRemote?: boolean;
5
+ }): Promise<{
6
+ resources: Descriptor[];
7
+ }>;
@@ -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 {};