livemark 0.2.0 → 0.7.0

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 (346) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +5 -1
  3. package/build/actions/changelog/build.d.ts +14 -0
  4. package/build/actions/changelog/build.js +158 -0
  5. package/build/actions/changelog/build.unit.js +66 -0
  6. package/build/actions/config/define.d.ts +6 -0
  7. package/build/actions/config/define.js +8 -0
  8. package/build/actions/config/define.unit.js +29 -0
  9. package/build/actions/config/load.d.ts +5 -0
  10. package/build/actions/config/load.js +25 -0
  11. package/build/actions/config/load.unit.js +23 -0
  12. package/build/commands/build.d.ts +5 -0
  13. package/build/commands/build.js +14 -0
  14. package/build/commands/escape.d.ts +9 -0
  15. package/build/commands/escape.js +56 -0
  16. package/build/commands/preview.d.ts +5 -0
  17. package/build/commands/preview.js +18 -0
  18. package/build/commands/start.d.ts +5 -0
  19. package/build/commands/start.js +19 -0
  20. package/build/docs/markdown/includes/example.d.ts +58 -0
  21. package/build/docs/markdown/includes/example.js +5 -0
  22. package/build/entrypoints/main.d.ts +2 -0
  23. package/build/entrypoints/main.js +12 -0
  24. package/build/helpers/program.d.ts +2 -0
  25. package/build/helpers/program.js +5 -0
  26. package/build/index.d.ts +1 -4
  27. package/build/index.js +2 -5
  28. package/build/livemark.config.d.ts +58 -0
  29. package/build/livemark.config.js +25 -0
  30. package/build/models/config.d.ts +340 -0
  31. package/build/models/config.js +34 -0
  32. package/build/models/link.d.ts +13 -0
  33. package/build/models/link.js +9 -0
  34. package/build/models/patch.d.ts +21 -0
  35. package/build/models/patch.js +7 -0
  36. package/build/models/section.d.ts +75 -0
  37. package/build/models/section.js +26 -0
  38. package/build/models/theme.d.ts +72 -0
  39. package/build/models/theme.js +73 -0
  40. package/build/program.d.ts +2 -0
  41. package/build/program.js +16 -0
  42. package/build/vite.config.d.ts +2 -0
  43. package/build/vite.config.js +48 -0
  44. package/build/website/assets/logo.svg +117 -0
  45. package/build/website/client.tsx +10 -0
  46. package/build/website/components/Abbr.tsx +17 -0
  47. package/build/website/components/AnsiCode.tsx +15 -0
  48. package/build/website/components/Article.tsx +172 -0
  49. package/build/website/components/BackToTop.tsx +32 -0
  50. package/build/website/components/Banner.tsx +32 -0
  51. package/build/website/components/BlogIndex.tsx +121 -0
  52. package/build/website/components/BlogSidebar.tsx +162 -0
  53. package/build/website/components/Breadcrumbs.tsx +22 -0
  54. package/build/website/components/Callout.tsx +72 -0
  55. package/build/website/components/Card.tsx +48 -0
  56. package/build/website/components/Cards.tsx +8 -0
  57. package/build/website/components/ChangelogIndex.tsx +111 -0
  58. package/build/website/components/ChangelogSidebar.tsx +120 -0
  59. package/build/website/components/CodeBlock.tsx +135 -0
  60. package/build/website/components/CodeTabs.tsx +83 -0
  61. package/build/website/components/Column.tsx +4 -0
  62. package/build/website/components/Columns.tsx +12 -0
  63. package/build/website/components/Content.tsx +7 -0
  64. package/build/website/components/ContentTab.tsx +7 -0
  65. package/build/website/components/ContentTabs.tsx +82 -0
  66. package/build/website/components/DefaultCatchBoundary.tsx +54 -0
  67. package/build/website/components/DefinitionList.tsx +21 -0
  68. package/build/website/components/Details.tsx +30 -0
  69. package/build/website/components/FileTree.tsx +52 -0
  70. package/build/website/components/Footer.tsx +16 -0
  71. package/build/website/components/FootnoteRef.tsx +52 -0
  72. package/build/website/components/Heading.tsx +20 -0
  73. package/build/website/components/InlineBadge.tsx +9 -0
  74. package/build/website/components/InlineIcon.tsx +10 -0
  75. package/build/website/components/InlineToc.tsx +31 -0
  76. package/build/website/components/Layout.tsx +190 -0
  77. package/build/website/components/LinkButton.tsx +31 -0
  78. package/build/website/components/Mermaid.tsx +18 -0
  79. package/build/website/components/MermaidRenderer.tsx +37 -0
  80. package/build/website/components/MiniSidebar.tsx +49 -0
  81. package/build/website/components/NotFound.tsx +27 -0
  82. package/build/website/components/PackageTabs.tsx +74 -0
  83. package/build/website/components/PageToolbar.tsx +75 -0
  84. package/build/website/components/PrevNext.tsx +60 -0
  85. package/build/website/components/Search.tsx +28 -0
  86. package/build/website/components/SearchDialog.tsx +245 -0
  87. package/build/website/components/Section.tsx +24 -0
  88. package/build/website/components/SectionHeader.tsx +35 -0
  89. package/build/website/components/Sidebar.tsx +160 -0
  90. package/build/website/components/SidebarLinks.tsx +70 -0
  91. package/build/website/components/SidebarSections.tsx +71 -0
  92. package/build/website/components/SiteTitle.tsx +21 -0
  93. package/build/website/components/SortableTable.tsx +81 -0
  94. package/build/website/components/SoundCloud.tsx +16 -0
  95. package/build/website/components/TagIndex.tsx +120 -0
  96. package/build/website/components/Theme.tsx +39 -0
  97. package/build/website/components/Toc.tsx +226 -0
  98. package/build/website/components/YouTube.tsx +16 -0
  99. package/build/website/components/ZoomImage.tsx +25 -0
  100. package/build/website/content/article.ts +78 -0
  101. package/build/website/content/tag.ts +29 -0
  102. package/build/website/content-collections.ts +208 -0
  103. package/build/website/elements/accordion.tsx +78 -0
  104. package/build/website/elements/alert-dialog.tsx +185 -0
  105. package/build/website/elements/alert.tsx +74 -0
  106. package/build/website/elements/aspect-ratio.tsx +22 -0
  107. package/build/website/elements/avatar.tsx +107 -0
  108. package/build/website/elements/badge.tsx +51 -0
  109. package/build/website/elements/breadcrumb.tsx +120 -0
  110. package/build/website/elements/button-group.tsx +87 -0
  111. package/build/website/elements/button.tsx +57 -0
  112. package/build/website/elements/calendar.tsx +229 -0
  113. package/build/website/elements/card.tsx +102 -0
  114. package/build/website/elements/carousel.tsx +240 -0
  115. package/build/website/elements/chart.tsx +372 -0
  116. package/build/website/elements/checkbox.tsx +26 -0
  117. package/build/website/elements/collapsible.tsx +19 -0
  118. package/build/website/elements/command.tsx +210 -0
  119. package/build/website/elements/context-menu.tsx +270 -0
  120. package/build/website/elements/dialog.tsx +152 -0
  121. package/build/website/elements/direction.tsx +4 -0
  122. package/build/website/elements/drawer.tsx +127 -0
  123. package/build/website/elements/dropdown-menu.tsx +260 -0
  124. package/build/website/elements/empty.tsx +104 -0
  125. package/build/website/elements/field.tsx +235 -0
  126. package/build/website/elements/hover-card.tsx +49 -0
  127. package/build/website/elements/input-group.tsx +171 -0
  128. package/build/website/elements/input-otp.tsx +84 -0
  129. package/build/website/elements/input.tsx +18 -0
  130. package/build/website/elements/item.tsx +199 -0
  131. package/build/website/elements/kbd.tsx +26 -0
  132. package/build/website/elements/label.tsx +17 -0
  133. package/build/website/elements/menubar.tsx +282 -0
  134. package/build/website/elements/native-select.tsx +56 -0
  135. package/build/website/elements/navigation-menu.tsx +171 -0
  136. package/build/website/elements/pagination.tsx +133 -0
  137. package/build/website/elements/popover.tsx +88 -0
  138. package/build/website/elements/progress.tsx +81 -0
  139. package/build/website/elements/radio-group.tsx +36 -0
  140. package/build/website/elements/resizable.tsx +48 -0
  141. package/build/website/elements/scroll-area.tsx +51 -0
  142. package/build/website/elements/select.tsx +200 -0
  143. package/build/website/elements/separator.tsx +22 -0
  144. package/build/website/elements/sheet.tsx +130 -0
  145. package/build/website/elements/sidebar.tsx +717 -0
  146. package/build/website/elements/skeleton.tsx +13 -0
  147. package/build/website/elements/slider.tsx +57 -0
  148. package/build/website/elements/sonner.tsx +40 -0
  149. package/build/website/elements/spinner.tsx +16 -0
  150. package/build/website/elements/switch.tsx +30 -0
  151. package/build/website/elements/table.tsx +112 -0
  152. package/build/website/elements/tabs.tsx +79 -0
  153. package/build/website/elements/textarea.tsx +16 -0
  154. package/build/website/elements/toggle-group.tsx +87 -0
  155. package/build/website/elements/toggle.tsx +43 -0
  156. package/build/website/elements/tooltip.tsx +67 -0
  157. package/build/website/env.d.ts +14 -0
  158. package/build/website/helpers/article-icon.ts +61 -0
  159. package/build/website/helpers/article.ts +90 -0
  160. package/build/website/helpers/changelog-source.ts +16 -0
  161. package/build/website/helpers/changelog-source.unit.ts +38 -0
  162. package/build/website/helpers/dynamic-icon-resolver.tsx +19 -0
  163. package/build/website/helpers/dynamic-icon.tsx +12 -0
  164. package/build/website/helpers/favicon.ts +7 -0
  165. package/build/website/helpers/model.ts +4 -0
  166. package/build/website/helpers/resolve-asset-path.ts +9 -0
  167. package/build/website/helpers/resolve-includes.ts +131 -0
  168. package/build/website/helpers/resolve-includes.unit.ts +126 -0
  169. package/build/website/helpers/search-text.ts +15 -0
  170. package/build/website/helpers/section.ts +50 -0
  171. package/build/website/helpers/section.unit.ts +71 -0
  172. package/build/website/helpers/style.ts +6 -0
  173. package/build/website/helpers/theme.ts +27 -0
  174. package/build/website/helpers/toc-context.ts +10 -0
  175. package/build/website/helpers/toc.ts +46 -0
  176. package/build/website/helpers/toc.unit.ts +74 -0
  177. package/build/website/hooks/in-view.ts +30 -0
  178. package/build/website/hooks/media.ts +19 -0
  179. package/build/website/models/article.ts +55 -0
  180. package/build/website/models/toc.ts +5 -0
  181. package/build/website/plugins/rehype-inline-code.ts +107 -0
  182. package/build/website/plugins/rehype-task-list-a11y.ts +33 -0
  183. package/build/website/plugins/remark-abbr.ts +46 -0
  184. package/build/website/plugins/remark-abbr.unit.ts +99 -0
  185. package/build/website/plugins/remark-ansi.ts +248 -0
  186. package/build/website/plugins/remark-ansi.unit.ts +197 -0
  187. package/build/website/plugins/remark-badge.ts +50 -0
  188. package/build/website/plugins/remark-badge.unit.ts +96 -0
  189. package/build/website/plugins/remark-button.ts +60 -0
  190. package/build/website/plugins/remark-button.unit.ts +147 -0
  191. package/build/website/plugins/remark-callout.ts +57 -0
  192. package/build/website/plugins/remark-card.ts +80 -0
  193. package/build/website/plugins/remark-code-tabs.ts +87 -0
  194. package/build/website/plugins/remark-columns.ts +66 -0
  195. package/build/website/plugins/remark-custom-heading-id.ts +70 -0
  196. package/build/website/plugins/remark-custom-heading-id.unit.ts +131 -0
  197. package/build/website/plugins/remark-deflist.ts +36 -0
  198. package/build/website/plugins/remark-details.ts +49 -0
  199. package/build/website/plugins/remark-filetree.ts +89 -0
  200. package/build/website/plugins/remark-filetree.unit.ts +137 -0
  201. package/build/website/plugins/remark-github-callout.ts +71 -0
  202. package/build/website/plugins/remark-icon.ts +42 -0
  203. package/build/website/plugins/remark-image.ts +34 -0
  204. package/build/website/plugins/remark-media.ts +62 -0
  205. package/build/website/plugins/remark-media.unit.ts +74 -0
  206. package/build/website/plugins/remark-mermaid.ts +23 -0
  207. package/build/website/plugins/remark-npm.ts +52 -0
  208. package/build/website/plugins/remark-steps.ts +36 -0
  209. package/build/website/plugins/remark-steps.unit.ts +97 -0
  210. package/build/website/plugins/remark-tab.ts +100 -0
  211. package/build/website/plugins/remark-tab.unit.ts +181 -0
  212. package/build/website/plugins/remark-toc.ts +39 -0
  213. package/build/website/plugins/remark-toc.unit.ts +82 -0
  214. package/build/website/plugins/shiki-icon.ts +82 -0
  215. package/build/website/plugins/shiki-line-highlight.ts +174 -0
  216. package/build/website/plugins/vite-livemark.ts +91 -0
  217. package/build/website/routeTree.gen.ts +86 -0
  218. package/build/website/router.tsx +34 -0
  219. package/build/website/routes/$.tsx +92 -0
  220. package/build/website/routes/__root.tsx +97 -0
  221. package/build/website/server.ts +7 -0
  222. package/build/website/styles/general.css +163 -0
  223. package/build/website/styles/markdown.css +214 -0
  224. package/build/website/vite.config.ts +71 -0
  225. package/entrypoints/main.ts +12 -0
  226. package/package.json +120 -12
  227. package/build/descriptor/index.d.ts +0 -3
  228. package/build/descriptor/index.js +0 -4
  229. package/build/descriptor/load.d.ts +0 -8
  230. package/build/descriptor/load.js +0 -40
  231. package/build/descriptor/node.d.ts +0 -125
  232. package/build/descriptor/node.js +0 -9
  233. package/build/descriptor/save.d.ts +0 -8
  234. package/build/descriptor/save.js +0 -17
  235. package/build/descriptor/save.spec.js +0 -80
  236. package/build/descriptor/validate.d.ts +0 -9
  237. package/build/descriptor/validate.js +0 -14
  238. package/build/descriptor/validate.spec.js +0 -124
  239. package/build/dialect/Dialect.d.ts +0 -88
  240. package/build/dialect/Dialect.js +0 -2
  241. package/build/dialect/index.d.ts +0 -3
  242. package/build/dialect/index.js +0 -3
  243. package/build/dialect/load.d.ts +0 -4
  244. package/build/dialect/load.js +0 -7
  245. package/build/dialect/save.d.ts +0 -9
  246. package/build/dialect/save.js +0 -13
  247. package/build/dialect/validate.d.ts +0 -1
  248. package/build/dialect/validate.js +0 -4
  249. package/build/metadata/index.d.ts +0 -3
  250. package/build/metadata/index.js +0 -4
  251. package/build/metadata/load.d.ts +0 -10
  252. package/build/metadata/load.js +0 -55
  253. package/build/metadata/node.d.ts +0 -125
  254. package/build/metadata/node.js +0 -9
  255. package/build/metadata/save.d.ts +0 -8
  256. package/build/metadata/save.js +0 -17
  257. package/build/metadata/save.spec.js +0 -80
  258. package/build/metadata/validate.d.ts +0 -9
  259. package/build/metadata/validate.js +0 -14
  260. package/build/metadata/validate.spec.d.ts +0 -1
  261. package/build/metadata/validate.spec.js +0 -124
  262. package/build/package/Contributor.d.ts +0 -21
  263. package/build/package/Contributor.js +0 -2
  264. package/build/package/Package.d.ts +0 -65
  265. package/build/package/Package.js +0 -2
  266. package/build/package/index.d.ts +0 -4
  267. package/build/package/index.js +0 -3
  268. package/build/package/load.d.ts +0 -4
  269. package/build/package/load.js +0 -7
  270. package/build/package/save.d.ts +0 -9
  271. package/build/package/save.js +0 -13
  272. package/build/package/validate.d.ts +0 -1
  273. package/build/package/validate.js +0 -4
  274. package/build/resource/License.d.ts +0 -18
  275. package/build/resource/License.js +0 -2
  276. package/build/resource/Resource.d.ts +0 -67
  277. package/build/resource/Resource.js +0 -2
  278. package/build/resource/Source.d.ts +0 -17
  279. package/build/resource/Source.js +0 -2
  280. package/build/resource/index.d.ts +0 -5
  281. package/build/resource/index.js +0 -2
  282. package/build/resource/load.d.ts +0 -1
  283. package/build/resource/load.js +0 -2
  284. package/build/resource/save.d.ts +0 -9
  285. package/build/resource/save.js +0 -13
  286. package/build/resource/types/index.d.ts +0 -1
  287. package/build/resource/types/index.js +0 -2
  288. package/build/resource/types/table.d.ts +0 -29
  289. package/build/resource/types/table.js +0 -2
  290. package/build/resource/validate.d.ts +0 -1
  291. package/build/resource/validate.js +0 -4
  292. package/build/schema/Field.d.ts +0 -5
  293. package/build/schema/Field.js +0 -2
  294. package/build/schema/Schema.d.ts +0 -55
  295. package/build/schema/Schema.js +0 -2
  296. package/build/schema/fields/any.d.ts +0 -20
  297. package/build/schema/fields/any.js +0 -2
  298. package/build/schema/fields/array.d.ts +0 -32
  299. package/build/schema/fields/array.js +0 -2
  300. package/build/schema/fields/base.d.ts +0 -42
  301. package/build/schema/fields/base.js +0 -2
  302. package/build/schema/fields/boolean.d.ts +0 -28
  303. package/build/schema/fields/boolean.js +0 -2
  304. package/build/schema/fields/date.d.ts +0 -35
  305. package/build/schema/fields/date.js +0 -2
  306. package/build/schema/fields/datetime.d.ts +0 -35
  307. package/build/schema/fields/datetime.js +0 -2
  308. package/build/schema/fields/duration.d.ts +0 -28
  309. package/build/schema/fields/duration.js +0 -2
  310. package/build/schema/fields/geojson.d.ts +0 -26
  311. package/build/schema/fields/geojson.js +0 -2
  312. package/build/schema/fields/geopoint.d.ts +0 -27
  313. package/build/schema/fields/geopoint.js +0 -2
  314. package/build/schema/fields/index.d.ts +0 -16
  315. package/build/schema/fields/index.js +0 -17
  316. package/build/schema/fields/integer.d.ts +0 -37
  317. package/build/schema/fields/integer.js +0 -2
  318. package/build/schema/fields/list.d.ts +0 -36
  319. package/build/schema/fields/list.js +0 -2
  320. package/build/schema/fields/number.d.ts +0 -40
  321. package/build/schema/fields/number.js +0 -2
  322. package/build/schema/fields/object.d.ts +0 -32
  323. package/build/schema/fields/object.js +0 -2
  324. package/build/schema/fields/string.d.ts +0 -40
  325. package/build/schema/fields/string.js +0 -2
  326. package/build/schema/fields/time.d.ts +0 -35
  327. package/build/schema/fields/time.js +0 -2
  328. package/build/schema/fields/year.d.ts +0 -28
  329. package/build/schema/fields/year.js +0 -2
  330. package/build/schema/fields/yearmonth.d.ts +0 -28
  331. package/build/schema/fields/yearmonth.js +0 -2
  332. package/build/schema/index.d.ts +0 -4
  333. package/build/schema/index.js +0 -2
  334. package/build/schema/load.d.ts +0 -1
  335. package/build/schema/load.js +0 -2
  336. package/build/schema/save.d.ts +0 -9
  337. package/build/schema/save.js +0 -13
  338. package/build/schema/validate.d.ts +0 -1
  339. package/build/schema/validate.js +0 -4
  340. package/build/tsconfig.tsbuildinfo +0 -1
  341. package/index.ts +0 -0
  342. package/tsconfig.json +0 -10
  343. package/typedoc.json +0 -4
  344. /package/build/{descriptor/save.spec.d.ts → actions/changelog/build.unit.d.ts} +0 -0
  345. /package/build/{descriptor/validate.spec.d.ts → actions/config/define.unit.d.ts} +0 -0
  346. /package/build/{metadata/save.spec.d.ts → actions/config/load.unit.d.ts} +0 -0
@@ -1,55 +0,0 @@
1
- /**
2
- * Load a metadata (JSON Object) from a file or URL
3
- * Uses dynamic imports to work in both Node.js and browser environments
4
- * Supports HTTP, HTTPS, FTP, and FTPS protocols
5
- *
6
- * @param props Object containing the path to the metadata
7
- */
8
- export async function loadMetadata(props) {
9
- const { path } = props;
10
- let isUrl = false;
11
- try {
12
- new URL(path);
13
- isUrl = true;
14
- }
15
- catch {
16
- isUrl = false;
17
- }
18
- return isUrl
19
- ? await loadRemoteMetadata(props)
20
- : await loadLocalMetadata(props);
21
- }
22
- /**
23
- * Load a metadata (JSON Object) from a remote URL
24
- * Supports HTTP, HTTPS, FTP, and FTPS protocols
25
- *
26
- * @param props Object containing the remote URL path
27
- */
28
- async function loadRemoteMetadata(props) {
29
- const { path } = props;
30
- const url = new URL(path);
31
- const protocol = url.protocol.toLowerCase();
32
- if (!["http:", "https:", "ftp:", "ftps:"].includes(protocol)) {
33
- throw new Error(`Unsupported URL protocol: ${protocol}`);
34
- }
35
- const response = await fetch(path);
36
- if (!response.ok) {
37
- throw new Error(`Failed to load metadata from URL: ${path}, status: ${response.status}`);
38
- }
39
- const data = (await response.json());
40
- return data;
41
- }
42
- /**
43
- * Load a metadata (JSON Object) from a local file
44
- * Works in Node.js environments only
45
- *
46
- * @param props Object containing the file path
47
- */
48
- async function loadLocalMetadata(props) {
49
- const { path } = props;
50
- const fs = await import("node:fs/promises");
51
- await fs.access(path, fs.constants.R_OK);
52
- const content = await fs.readFile(path, "utf-8");
53
- return JSON.parse(content);
54
- }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL21ldGFkYXRhL2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsS0FBdUI7SUFDeEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV0QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDakIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDYixLQUFLLEdBQUcsSUFBSSxDQUFBO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDZixDQUFDO0lBRUQsT0FBTyxLQUFLO1FBQ1YsQ0FBQyxDQUFDLE1BQU0sa0JBQWtCLENBQUMsS0FBSyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxNQUFNLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxLQUF1QjtJQUN2RCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRXRCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3pCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUE7SUFFM0MsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUNiLHFDQUFxQyxJQUFJLGFBQWEsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUN4RSxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQXdCLENBQUE7SUFDM0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxLQUFLLFVBQVUsaUJBQWlCLENBQUMsS0FBdUI7SUFDdEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV0QixNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQzNDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUV4QyxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXdCLENBQUE7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTG9hZCBhIG1ldGFkYXRhIChKU09OIE9iamVjdCkgZnJvbSBhIGZpbGUgb3IgVVJMXG4gKiBVc2VzIGR5bmFtaWMgaW1wb3J0cyB0byB3b3JrIGluIGJvdGggTm9kZS5qcyBhbmQgYnJvd3NlciBlbnZpcm9ubWVudHNcbiAqIFN1cHBvcnRzIEhUVFAsIEhUVFBTLCBGVFAsIGFuZCBGVFBTIHByb3RvY29sc1xuICpcbiAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXRhZGF0YShwcm9wczogeyBwYXRoOiBzdHJpbmcgfSkge1xuICBjb25zdCB7IHBhdGggfSA9IHByb3BzXG5cbiAgbGV0IGlzVXJsID0gZmFsc2VcbiAgdHJ5IHtcbiAgICBuZXcgVVJMKHBhdGgpXG4gICAgaXNVcmwgPSB0cnVlXG4gIH0gY2F0Y2gge1xuICAgIGlzVXJsID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBpc1VybFxuICAgID8gYXdhaXQgbG9hZFJlbW90ZU1ldGFkYXRhKHByb3BzKVxuICAgIDogYXdhaXQgbG9hZExvY2FsTWV0YWRhdGEocHJvcHMpXG59XG5cbi8qKlxuICogTG9hZCBhIG1ldGFkYXRhIChKU09OIE9iamVjdCkgZnJvbSBhIHJlbW90ZSBVUkxcbiAqIFN1cHBvcnRzIEhUVFAsIEhUVFBTLCBGVFAsIGFuZCBGVFBTIHByb3RvY29sc1xuICpcbiAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgcmVtb3RlIFVSTCBwYXRoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRSZW1vdGVNZXRhZGF0YShwcm9wczogeyBwYXRoOiBzdHJpbmcgfSkge1xuICBjb25zdCB7IHBhdGggfSA9IHByb3BzXG5cbiAgY29uc3QgdXJsID0gbmV3IFVSTChwYXRoKVxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC50b0xvd2VyQ2FzZSgpXG5cbiAgaWYgKCFbXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImZ0cDpcIiwgXCJmdHBzOlwiXS5pbmNsdWRlcyhwcm90b2NvbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIFVSTCBwcm90b2NvbDogJHtwcm90b2NvbH1gKVxuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChwYXRoKVxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBsb2FkIG1ldGFkYXRhIGZyb20gVVJMOiAke3BhdGh9LCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWAsXG4gICAgKVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyoqXG4gKiBMb2FkIGEgbWV0YWRhdGEgKEpTT04gT2JqZWN0KSBmcm9tIGEgbG9jYWwgZmlsZVxuICogV29ya3MgaW4gTm9kZS5qcyBlbnZpcm9ubWVudHMgb25seVxuICpcbiAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgZmlsZSBwYXRoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRMb2NhbE1ldGFkYXRhKHByb3BzOiB7IHBhdGg6IHN0cmluZyB9KSB7XG4gIGNvbnN0IHsgcGF0aCB9ID0gcHJvcHNcblxuICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIilcbiAgYXdhaXQgZnMuYWNjZXNzKHBhdGgsIGZzLmNvbnN0YW50cy5SX09LKVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCBcInV0Zi04XCIpXG4gIHJldHVybiBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbn1cbiJdfQ==
@@ -1,125 +0,0 @@
1
- export declare function loadNodeApis(): Promise<{
2
- fs: {
3
- default: typeof import("node:fs/promises");
4
- access(path: import("fs").PathLike, mode?: number): Promise<void>;
5
- copyFile(src: import("fs").PathLike, dest: import("fs").PathLike, mode?: number): Promise<void>;
6
- open(path: import("fs").PathLike, flags?: string | number, mode?: import("fs").Mode): Promise<import("fs/promises").FileHandle>;
7
- rename(oldPath: import("fs").PathLike, newPath: import("fs").PathLike): Promise<void>;
8
- truncate(path: import("fs").PathLike, len?: number): Promise<void>;
9
- rmdir(path: import("fs").PathLike, options?: import("fs").RmDirOptions): Promise<void>;
10
- rm(path: import("fs").PathLike, options?: import("fs").RmOptions): Promise<void>;
11
- mkdir(path: import("fs").PathLike, options: import("fs").MakeDirectoryOptions & {
12
- recursive: true;
13
- }): Promise<string | undefined>;
14
- mkdir(path: import("fs").PathLike, options?: import("fs").Mode | (import("fs").MakeDirectoryOptions & {
15
- recursive?: false | undefined;
16
- }) | null): Promise<void>;
17
- mkdir(path: import("fs").PathLike, options?: import("fs").Mode | import("fs").MakeDirectoryOptions | null): Promise<string | undefined>;
18
- readdir(path: import("fs").PathLike, options?: (import("fs").ObjectEncodingOptions & {
19
- withFileTypes?: false | undefined;
20
- recursive?: boolean | undefined;
21
- }) | BufferEncoding | null): Promise<string[]>;
22
- readdir(path: import("fs").PathLike, options: {
23
- encoding: "buffer";
24
- withFileTypes?: false | undefined;
25
- recursive?: boolean | undefined;
26
- } | "buffer"): Promise<Buffer[]>;
27
- readdir(path: import("fs").PathLike, options?: (import("fs").ObjectEncodingOptions & {
28
- withFileTypes?: false | undefined;
29
- recursive?: boolean | undefined;
30
- }) | BufferEncoding | null): Promise<string[] | Buffer[]>;
31
- readdir(path: import("fs").PathLike, options: import("fs").ObjectEncodingOptions & {
32
- withFileTypes: true;
33
- recursive?: boolean | undefined;
34
- }): Promise<import("fs").Dirent[]>;
35
- readlink(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
36
- readlink(path: import("fs").PathLike, options: import("fs").BufferEncodingOption): Promise<Buffer>;
37
- readlink(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | string | null): Promise<string | Buffer>;
38
- symlink(target: import("fs").PathLike, path: import("fs").PathLike, type?: string | null): Promise<void>;
39
- lstat(path: import("fs").PathLike, opts?: import("fs").StatOptions & {
40
- bigint?: false | undefined;
41
- }): Promise<import("fs").Stats>;
42
- lstat(path: import("fs").PathLike, opts: import("fs").StatOptions & {
43
- bigint: true;
44
- }): Promise<import("fs").BigIntStats>;
45
- lstat(path: import("fs").PathLike, opts?: import("fs").StatOptions): Promise<import("fs").Stats | import("fs").BigIntStats>;
46
- stat(path: import("fs").PathLike, opts?: import("fs").StatOptions & {
47
- bigint?: false | undefined;
48
- }): Promise<import("fs").Stats>;
49
- stat(path: import("fs").PathLike, opts: import("fs").StatOptions & {
50
- bigint: true;
51
- }): Promise<import("fs").BigIntStats>;
52
- stat(path: import("fs").PathLike, opts?: import("fs").StatOptions): Promise<import("fs").Stats | import("fs").BigIntStats>;
53
- statfs(path: import("fs").PathLike, opts?: import("fs").StatFsOptions & {
54
- bigint?: false | undefined;
55
- }): Promise<import("fs").StatsFs>;
56
- statfs(path: import("fs").PathLike, opts: import("fs").StatFsOptions & {
57
- bigint: true;
58
- }): Promise<import("fs").BigIntStatsFs>;
59
- statfs(path: import("fs").PathLike, opts?: import("fs").StatFsOptions): Promise<import("fs").StatsFs | import("fs").BigIntStatsFs>;
60
- link(existingPath: import("fs").PathLike, newPath: import("fs").PathLike): Promise<void>;
61
- unlink(path: import("fs").PathLike): Promise<void>;
62
- chmod(path: import("fs").PathLike, mode: import("fs").Mode): Promise<void>;
63
- lchmod(path: import("fs").PathLike, mode: import("fs").Mode): Promise<void>;
64
- lchown(path: import("fs").PathLike, uid: number, gid: number): Promise<void>;
65
- lutimes(path: import("fs").PathLike, atime: import("fs").TimeLike, mtime: import("fs").TimeLike): Promise<void>;
66
- chown(path: import("fs").PathLike, uid: number, gid: number): Promise<void>;
67
- utimes(path: import("fs").PathLike, atime: import("fs").TimeLike, mtime: import("fs").TimeLike): Promise<void>;
68
- realpath(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
69
- realpath(path: import("fs").PathLike, options: import("fs").BufferEncodingOption): Promise<Buffer>;
70
- realpath(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
71
- mkdtemp(prefix: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
72
- mkdtemp(prefix: string, options: import("fs").BufferEncodingOption): Promise<Buffer>;
73
- mkdtemp(prefix: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
74
- writeFile(file: import("fs").PathLike | import("fs/promises").FileHandle, data: string | NodeJS.ArrayBufferView | Iterable<string | NodeJS.ArrayBufferView> | AsyncIterable<string | NodeJS.ArrayBufferView> | import("stream"), options?: (import("fs").ObjectEncodingOptions & {
75
- mode?: import("fs").Mode | undefined;
76
- flag?: import("fs").OpenMode | undefined;
77
- flush?: boolean | undefined;
78
- } & import("events").Abortable) | BufferEncoding | null): Promise<void>;
79
- appendFile(path: import("fs").PathLike | import("fs/promises").FileHandle, data: string | Uint8Array, options?: (import("fs").ObjectEncodingOptions & import("fs/promises").FlagAndOpenMode & {
80
- flush?: boolean | undefined;
81
- }) | BufferEncoding | null): Promise<void>;
82
- readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options?: ({
83
- encoding?: null | undefined;
84
- flag?: import("fs").OpenMode | undefined;
85
- } & import("events").Abortable) | null): Promise<Buffer>;
86
- readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options: ({
87
- encoding: BufferEncoding;
88
- flag?: import("fs").OpenMode | undefined;
89
- } & import("events").Abortable) | BufferEncoding): Promise<string>;
90
- readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options?: (import("fs").ObjectEncodingOptions & import("events").Abortable & {
91
- flag?: import("fs").OpenMode | undefined;
92
- }) | BufferEncoding | null): Promise<string | Buffer>;
93
- opendir(path: import("fs").PathLike, options?: import("fs").OpenDirOptions): Promise<import("fs").Dir>;
94
- watch(filename: import("fs").PathLike, options: (import("fs").WatchOptions & {
95
- encoding: "buffer";
96
- }) | "buffer"): AsyncIterable<import("fs/promises").FileChangeInfo<Buffer>>;
97
- watch(filename: import("fs").PathLike, options?: import("fs").WatchOptions | BufferEncoding): AsyncIterable<import("fs/promises").FileChangeInfo<string>>;
98
- watch(filename: import("fs").PathLike, options: import("fs").WatchOptions | string): AsyncIterable<import("fs/promises").FileChangeInfo<string>> | AsyncIterable<import("fs/promises").FileChangeInfo<Buffer>>;
99
- cp(source: string | URL, destination: string | URL, opts?: import("fs").CopyOptions): Promise<void>;
100
- glob(pattern: string | string[]): NodeJS.AsyncIterator<string>;
101
- glob(pattern: string | string[], opt: import("fs").GlobOptionsWithFileTypes): NodeJS.AsyncIterator<import("fs").Dirent>;
102
- glob(pattern: string | string[], opt: import("fs").GlobOptionsWithoutFileTypes): NodeJS.AsyncIterator<string>;
103
- glob(pattern: string | string[], opt: import("fs").GlobOptions): NodeJS.AsyncIterator<import("fs").Dirent | string>;
104
- constants: typeof import("fs").constants;
105
- };
106
- path: {
107
- default: import("path").PlatformPath;
108
- normalize(path: string): string;
109
- join(...paths: string[]): string;
110
- resolve(...paths: string[]): string;
111
- matchesGlob(path: string, pattern: string): boolean;
112
- isAbsolute(path: string): boolean;
113
- relative(from: string, to: string): string;
114
- dirname(path: string): string;
115
- basename(path: string, suffix?: string): string;
116
- extname(path: string): string;
117
- sep: "\\" | "/";
118
- delimiter: ";" | ":";
119
- parse(path: string): import("path").ParsedPath;
120
- format(pathObject: import("path").FormatInputPathObject): string;
121
- toNamespacedPath(path: string): string;
122
- posix: import("path").PlatformPath;
123
- win32: import("path").PlatformPath;
124
- };
125
- } | undefined>;
@@ -1,9 +0,0 @@
1
- export async function loadNodeApis() {
2
- if (globalThis.process) {
3
- const fs = await import("node:fs/promises");
4
- const path = await import("node:path");
5
- return { fs, path };
6
- }
7
- return undefined;
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL21ldGFkYXRhL25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZO0lBQ2hDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDdEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTm9kZUFwaXMoKSB7XG4gIGlmIChnbG9iYWxUaGlzLnByb2Nlc3MpIHtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIilcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpXG4gICAgcmV0dXJuIHsgZnMsIHBhdGggfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuIl19
@@ -1,8 +0,0 @@
1
- /**
2
- * Save a metadata (JSON Object) to a file path
3
- * Works in Node.js environments
4
- */
5
- export declare function saveMetadata(props: {
6
- metadata: Record<string, any>;
7
- path: string;
8
- }): Promise<boolean>;
@@ -1,17 +0,0 @@
1
- import { loadNodeApis } from "./node.js";
2
- /**
3
- * Save a metadata (JSON Object) to a file path
4
- * Works in Node.js environments
5
- */
6
- export async function saveMetadata(props) {
7
- const { metadata, path } = props;
8
- const node = await loadNodeApis();
9
- if (!node) {
10
- throw new Error("File system operations are not supported in this environment");
11
- }
12
- const content = JSON.stringify(metadata, null, 2);
13
- await node.fs.mkdir(node.path.dirname(path), { recursive: true });
14
- await node.fs.writeFile(path, content, "utf-8");
15
- return true;
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL21ldGFkYXRhL3NhdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV4Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUdsQztJQUNDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRWhDLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUE7SUFDakMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FDYiw4REFBOEQsQ0FDL0QsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFakQsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUUvQyxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkTm9kZUFwaXMgfSBmcm9tIFwiLi9ub2RlLmpzXCJcblxuLyoqXG4gKiBTYXZlIGEgbWV0YWRhdGEgKEpTT04gT2JqZWN0KSB0byBhIGZpbGUgcGF0aFxuICogV29ya3MgaW4gTm9kZS5qcyBlbnZpcm9ubWVudHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVNZXRhZGF0YShwcm9wczoge1xuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PlxuICBwYXRoOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgeyBtZXRhZGF0YSwgcGF0aCB9ID0gcHJvcHNcblxuICBjb25zdCBub2RlID0gYXdhaXQgbG9hZE5vZGVBcGlzKClcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJGaWxlIHN5c3RlbSBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIixcbiAgICApXG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEsIG51bGwsIDIpXG5cbiAgYXdhaXQgbm9kZS5mcy5ta2Rpcihub2RlLnBhdGguZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgYXdhaXQgbm9kZS5mcy53cml0ZUZpbGUocGF0aCwgY29udGVudCwgXCJ1dGYtOFwiKVxuXG4gIHJldHVybiB0cnVlXG59XG4iXX0=
@@ -1,80 +0,0 @@
1
- import * as fs from "node:fs/promises";
2
- import * as path from "node:path";
3
- import { temporaryDirectory } from "tempy";
4
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
- import { saveMetadata } from "./save.js";
6
- describe("saveMetadata", () => {
7
- const testMetadata = {
8
- name: "test-metadata",
9
- version: "1.0.0",
10
- description: "Test metadata for save function",
11
- resources: [
12
- {
13
- name: "resource1",
14
- path: "data/resource1.csv",
15
- },
16
- ],
17
- };
18
- let testDir;
19
- let testPath;
20
- beforeEach(() => {
21
- testDir = temporaryDirectory();
22
- testPath = path.join(testDir, "metadata.json");
23
- });
24
- afterEach(async () => {
25
- try {
26
- await fs.rm(testDir, { recursive: true, force: true });
27
- }
28
- catch (error) {
29
- if (error instanceof Error && !error.message.includes("ENOENT")) {
30
- console.error(`Failed to clean up test directory: ${testDir}`, error);
31
- }
32
- }
33
- });
34
- it("should save a metadata to the specified path", async () => {
35
- const result = await saveMetadata({
36
- metadata: testMetadata,
37
- path: testPath,
38
- });
39
- expect(result).toBe(true);
40
- const fileExists = await fs
41
- .stat(testPath)
42
- .then(() => true)
43
- .catch(() => false);
44
- expect(fileExists).toBe(true);
45
- const content = await fs.readFile(testPath, "utf-8");
46
- const parsedContent = JSON.parse(content);
47
- expect(parsedContent).toEqual(testMetadata);
48
- });
49
- it("should save a metadata to a nested directory path", async () => {
50
- const nestedPath = path.join(testDir, "nested", "dir", "metadata.json");
51
- const result = await saveMetadata({
52
- metadata: testMetadata,
53
- path: nestedPath,
54
- });
55
- expect(result).toBe(true);
56
- const fileExists = await fs
57
- .stat(nestedPath)
58
- .then(() => true)
59
- .catch(() => false);
60
- expect(fileExists).toBe(true);
61
- const content = await fs.readFile(nestedPath, "utf-8");
62
- const parsedContent = JSON.parse(content);
63
- expect(parsedContent).toEqual(testMetadata);
64
- });
65
- it("should use pretty formatting with 2-space indentation", async () => {
66
- await saveMetadata({
67
- metadata: testMetadata,
68
- path: testPath,
69
- });
70
- const content = await fs.readFile(testPath, "utf-8");
71
- const expectedFormat = JSON.stringify(testMetadata, null, 2);
72
- expect(content).toEqual(expectedFormat);
73
- const lines = content.split("\n");
74
- expect(lines.length).toBeGreaterThan(1);
75
- if (lines.length > 1 && lines[1]) {
76
- expect(lines[1].startsWith(" ")).toBe(true);
77
- }
78
- });
79
- });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbWV0YWRhdGEvc2F2ZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFeEMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsTUFBTSxZQUFZLEdBQUc7UUFDbkIsSUFBSSxFQUFFLGVBQWU7UUFDckIsT0FBTyxFQUFFLE9BQU87UUFDaEIsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxTQUFTLEVBQUU7WUFDVDtnQkFDRSxJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLG9CQUFvQjthQUMzQjtTQUNGO0tBQ0YsQ0FBQTtJQUVELElBQUksT0FBZSxDQUFBO0lBQ25CLElBQUksUUFBZ0IsQ0FBQTtJQUVwQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsT0FBTyxHQUFHLGtCQUFrQixFQUFFLENBQUE7UUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBQ2hELENBQUMsQ0FBQyxDQUFBO0lBRUYsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ25CLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFB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QUMsQ0FBQTtRQUV2QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXZDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgdGVtcG9yYXJ5RGlyZWN0b3J5IH0gZnJvbSBcInRlbXB5XCJcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IHNhdmVNZXRhZGF0YSB9IGZyb20gXCIuL3NhdmUuanNcIlxuXG5kZXNjcmliZShcInNhdmVNZXRhZGF0YVwiLCAoKSA9PiB7XG4gIGNvbnN0IHRlc3RNZXRhZGF0YSA9IHtcbiAgICBuYW1lOiBcInRlc3QtbWV0YWRhdGFcIixcbiAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgZGVzY3JpcHRpb246IFwiVGVzdCBtZXRhZGF0YSBmb3Igc2F2ZSBmdW5jdGlvblwiLFxuICAgIHJlc291cmNlczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcInJlc291cmNlMVwiLFxuICAgICAgICBwYXRoOiBcImRhdGEvcmVzb3VyY2UxLmNzdlwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9XG5cbiAgbGV0IHRlc3REaXI6IHN0cmluZ1xuICBsZXQgdGVzdFBhdGg6IHN0cmluZ1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRlc3REaXIgPSB0ZW1wb3JhcnlEaXJlY3RvcnkoKVxuICAgIHRlc3RQYXRoID0gcGF0aC5qb2luKHRlc3REaXIsIFwibWV0YWRhdGEuanNvblwiKVxuICB9KVxuXG4gIGFmdGVyRWFjaChhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLnJtKHRlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcIkVOT0VOVFwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY2xlYW4gdXAgdGVzdCBkaXJlY3Rvcnk6ICR7dGVzdERpcn1gLCBlcnJvcilcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgc2F2ZSBhIG1ldGFkYXRhIHRvIHRoZSBzcGVjaWZpZWQgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2F2ZU1ldGFkYXRhKHtcbiAgICAgIG1ldGFkYXRhOiB0ZXN0TWV0YWRhdGEsXG4gICAgICBwYXRoOiB0ZXN0UGF0aCxcbiAgICB9KVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuXG4gICAgY29uc3QgZmlsZUV4aXN0cyA9IGF3YWl0IGZzXG4gICAgICAuc3RhdCh0ZXN0UGF0aClcbiAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAuY2F0Y2goKCkgPT4gZmFsc2UpXG4gICAgZXhwZWN0KGZpbGVFeGlzdHMpLnRvQmUodHJ1ZSlcblxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZSh0ZXN0UGF0aCwgXCJ1dGYtOFwiKVxuICAgIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gICAgZXhwZWN0KHBhcnNlZENvbnRlbnQpLnRvRXF1YWwodGVzdE1ldGFkYXRhKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUgYSBtZXRhZGF0YSB0byBhIG5lc3RlZCBkaXJlY3RvcnkgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbmVzdGVkUGF0aCA9IHBhdGguam9pbih0ZXN0RGlyLCBcIm5lc3RlZFwiLCBcImRpclwiLCBcIm1ldGFkYXRhLmpzb25cIilcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhdmVNZXRhZGF0YSh7XG4gICAgICBtZXRhZGF0YTogdGVzdE1ldGFkYXRhLFxuICAgICAgcGF0aDogbmVzdGVkUGF0aCxcbiAgICB9KVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuXG4gICAgY29uc3QgZmlsZUV4aXN0cyA9IGF3YWl0IGZzXG4gICAgICAuc3RhdChuZXN0ZWRQYXRoKVxuICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgIC5jYXRjaCgoKSA9PiBmYWxzZSlcbiAgICBleHBlY3QoZmlsZUV4aXN0cykudG9CZSh0cnVlKVxuXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKG5lc3RlZFBhdGgsIFwidXRmLThcIilcbiAgICBjb25zdCBwYXJzZWRDb250ZW50ID0gSlNPTi5wYXJzZShjb250ZW50KVxuICAgIGV4cGVjdChwYXJzZWRDb250ZW50KS50b0VxdWFsKHRlc3RNZXRhZGF0YSlcbiAgfSlcblxuICBpdChcInNob3VsZCB1c2UgcHJldHR5IGZvcm1hdHRpbmcgd2l0aCAyLXNwYWNlIGluZGVudGF0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBzYXZlTWV0YWRhdGEoe1xuICAgICAgbWV0YWRhdGE6IHRlc3RNZXRhZGF0YSxcbiAgICAgIHBhdGg6IHRlc3RQYXRoLFxuICAgIH0pXG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUodGVzdFBhdGgsIFwidXRmLThcIilcbiAgICBjb25zdCBleHBlY3RlZEZvcm1hdCA9IEpTT04uc3RyaW5naWZ5KHRlc3RNZXRhZGF0YSwgbnVsbCwgMilcbiAgICBleHBlY3QoY29udGVudCkudG9FcXVhbChleHBlY3RlZEZvcm1hdClcblxuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKVxuICAgIGV4cGVjdChsaW5lcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigxKVxuXG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEgJiYgbGluZXNbMV0pIHtcbiAgICAgIGV4cGVjdChsaW5lc1sxXS5zdGFydHNXaXRoKFwiICBcIikpLnRvQmUodHJ1ZSlcbiAgICB9XG4gIH0pXG59KVxuIl19
@@ -1,9 +0,0 @@
1
- /**
2
- * Validate a metadata (JSON Object) against a JSON Schema
3
- * It uses Ajv for JSON Schema validation under the hood
4
- * It returns a list of errors (empty if valid)
5
- */
6
- export declare function validateMetadata(props: {
7
- metadata: Record<string, any>;
8
- profile: Record<string, any>;
9
- }): Promise<import("ajv").ErrorObject<string, Record<string, any>, unknown>[]>;
@@ -1,14 +0,0 @@
1
- import { Ajv } from "ajv";
2
- /**
3
- * Validate a metadata (JSON Object) against a JSON Schema
4
- * It uses Ajv for JSON Schema validation under the hood
5
- * It returns a list of errors (empty if valid)
6
- */
7
- export async function validateMetadata(props) {
8
- const { metadata, profile } = props;
9
- const ajv = new Ajv();
10
- const validate = ajv.compile(profile);
11
- validate(metadata);
12
- return validate.errors ?? [];
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9tZXRhZGF0YS92YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBRXpCOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUFDLEtBR3RDO0lBQ0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNyQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNsQixPQUFPLFFBQVEsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFBO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBanYgfSBmcm9tIFwiYWp2XCJcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIG1ldGFkYXRhIChKU09OIE9iamVjdCkgYWdhaW5zdCBhIEpTT04gU2NoZW1hXG4gKiBJdCB1c2VzIEFqdiBmb3IgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbiB1bmRlciB0aGUgaG9vZFxuICogSXQgcmV0dXJucyBhIGxpc3Qgb2YgZXJyb3JzIChlbXB0eSBpZiB2YWxpZClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlTWV0YWRhdGEocHJvcHM6IHtcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgcHJvZmlsZTogUmVjb3JkPHN0cmluZywgYW55PlxufSkge1xuICBjb25zdCB7IG1ldGFkYXRhLCBwcm9maWxlIH0gPSBwcm9wc1xuXG4gIGNvbnN0IGFqdiA9IG5ldyBBanYoKVxuICBjb25zdCB2YWxpZGF0ZSA9IGFqdi5jb21waWxlKHByb2ZpbGUpXG4gIHZhbGlkYXRlKG1ldGFkYXRhKVxuICByZXR1cm4gdmFsaWRhdGUuZXJyb3JzID8/IFtdXG59XG4iXX0=
@@ -1 +0,0 @@
1
- export {};
@@ -1,124 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { validateMetadata } from "./validate.js";
3
- describe("validateMetadata", () => {
4
- it("returns empty array for valid metadata", async () => {
5
- const profile = {
6
- type: "object",
7
- required: ["name", "version"],
8
- properties: {
9
- name: { type: "string" },
10
- version: { type: "string" },
11
- description: { type: "string" },
12
- },
13
- };
14
- const metadata = {
15
- name: "test-package",
16
- version: "1.0.0",
17
- description: "A test package",
18
- };
19
- const result = await validateMetadata({
20
- metadata,
21
- profile,
22
- });
23
- expect(result).toEqual([]);
24
- });
25
- it("returns validation errors for invalid metadata", async () => {
26
- const profile = {
27
- type: "object",
28
- required: ["name", "version"],
29
- properties: {
30
- name: { type: "string" },
31
- version: { type: "string" },
32
- description: { type: "string" },
33
- },
34
- };
35
- const metadata = {
36
- name: "test-package",
37
- version: 123,
38
- description: "A test package with wrong version type",
39
- };
40
- const result = await validateMetadata({
41
- metadata,
42
- profile,
43
- });
44
- expect(result).not.toBeNull();
45
- expect(Array.isArray(result)).toBe(true);
46
- expect(result.length).toBeGreaterThan(0);
47
- const error = result[0];
48
- expect(error).toBeDefined();
49
- if (error) {
50
- expect(error.keyword).toBe("type");
51
- expect(error.instancePath).toBe("/version");
52
- }
53
- });
54
- it("returns errors when required fields are missing", async () => {
55
- const profile = {
56
- type: "object",
57
- required: ["name", "version", "required_field"],
58
- properties: {
59
- name: { type: "string" },
60
- version: { type: "string" },
61
- required_field: { type: "string" },
62
- },
63
- };
64
- const metadata = {
65
- name: "test-package",
66
- version: "1.0.0",
67
- };
68
- const result = await validateMetadata({
69
- metadata,
70
- profile,
71
- });
72
- expect(Array.isArray(result)).toBe(true);
73
- expect(result.length).toBeGreaterThan(0);
74
- const error = result[0];
75
- expect(error).toBeDefined();
76
- if (error) {
77
- expect(error.keyword).toBe("required");
78
- expect(error.params).toBeDefined();
79
- if (error.params) {
80
- expect(error.params.missingProperty).toBe("required_field");
81
- }
82
- }
83
- });
84
- it("validates nested objects in the metadata", async () => {
85
- const profile = {
86
- type: "object",
87
- required: ["name", "version", "author"],
88
- properties: {
89
- name: { type: "string" },
90
- version: { type: "string" },
91
- author: {
92
- type: "object",
93
- required: ["name", "email"],
94
- properties: {
95
- name: { type: "string" },
96
- email: {
97
- type: "string",
98
- pattern: "^[^@]+@[^@]+\\.[^@]+$",
99
- },
100
- },
101
- },
102
- },
103
- };
104
- const metadata = {
105
- name: "test-package",
106
- version: "1.0.0",
107
- author: {
108
- name: "Test Author",
109
- email: "invalid-email",
110
- },
111
- };
112
- const result = await validateMetadata({
113
- metadata,
114
- profile,
115
- });
116
- expect(Array.isArray(result)).toBe(true);
117
- expect(result.length).toBeGreaterThan(0);
118
- const hasEmailPatternError = result.some(error => error &&
119
- error.instancePath === "/author/email" &&
120
- error.keyword === "pattern");
121
- expect(hasEmailPatternError).toBe(true);
122
- });
123
- });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL21ldGFkYXRhL3ZhbGlkYXRlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVoRCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RCxNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUM3QixVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDM0IsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTthQUNoQztTQUNGLENBQUE7UUFFRCxNQUFNLFFBQVEsR0FBRztZQUNmLElBQUksRUFBRSxjQUFjO1lBQ3BCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFdBQVcsRUFBRSxnQkFBZ0I7U0FDOUIsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7WUFDcEMsUUFBUTtZQUNSLE9BQU87U0FDUixDQUFDLENBQUE7UUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzVCLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlELE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVB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WUFBWSxLQUFLLGVBQWU7WUFDdEMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQzlCLENBQUE7UUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyB2YWxpZGF0ZU1ldGFkYXRhIH0gZnJvbSBcIi4vdmFsaWRhdGUuanNcIlxuXG5kZXNjcmliZShcInZhbGlkYXRlTWV0YWRhdGFcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgZW1wdHkgYXJyYXkgZm9yIHZhbGlkIG1ldGFkYXRhXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlID0ge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwidmVyc2lvblwiXSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHZlcnNpb246IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBkZXNjcmlwdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkEgdGVzdCBwYWNrYWdlXCIsXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVNZXRhZGF0YSh7XG4gICAgICBtZXRhZGF0YSxcbiAgICAgIHByb2ZpbGUsXG4gICAgfSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pXG4gIH0pXG5cbiAgaXQoXCJyZXR1cm5zIHZhbGlkYXRpb24gZXJyb3JzIGZvciBpbnZhbGlkIG1ldGFkYXRhXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlID0ge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwidmVyc2lvblwiXSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHZlcnNpb246IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBkZXNjcmlwdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHZlcnNpb246IDEyMyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkEgdGVzdCBwYWNrYWdlIHdpdGggd3JvbmcgdmVyc2lvbiB0eXBlXCIsXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVNZXRhZGF0YSh7XG4gICAgICBtZXRhZGF0YSxcbiAgICAgIHByb2ZpbGUsXG4gICAgfSlcblxuICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlTnVsbCgpXG4gICAgZXhwZWN0KEFycmF5LmlzQXJyYXkocmVzdWx0KSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChyZXN1bHQubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMClcblxuICAgIGNvbnN0IGVycm9yID0gcmVzdWx0WzBdXG4gICAgZXhwZWN0KGVycm9yKS50b0JlRGVmaW5lZCgpXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBleHBlY3QoZXJyb3Iua2V5d29yZCkudG9CZShcInR5cGVcIilcbiAgICAgIGV4cGVjdChlcnJvci5pbnN0YW5jZVBhdGgpLnRvQmUoXCIvdmVyc2lvblwiKVxuICAgIH1cbiAgfSlcblxuICBpdChcInJldHVybnMgZXJyb3JzIHdoZW4gcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlID0ge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwidmVyc2lvblwiLCBcInJlcXVpcmVkX2ZpZWxkXCJdLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgdmVyc2lvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHJlcXVpcmVkX2ZpZWxkOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZhbGlkYXRlTWV0YWRhdGEoe1xuICAgICAgbWV0YWRhdGEsXG4gICAgICBwcm9maWxlLFxuICAgIH0pXG5cbiAgICBleHBlY3QoQXJyYXkuaXNBcnJheShyZXN1bHQpKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KHJlc3VsdC5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKVxuXG4gICAgY29uc3QgZXJyb3IgPSByZXN1bHRbMF1cbiAgICBleHBlY3QoZXJyb3IpLnRvQmVEZWZpbmVkKClcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGV4cGVjdChlcnJvci5rZXl3b3JkKS50b0JlKFwicmVxdWlyZWRcIilcbiAgICAgIGV4cGVjdChlcnJvci5wYXJhbXMpLnRvQmVEZWZpbmVkKClcbiAgICAgIGlmIChlcnJvci5wYXJhbXMpIHtcbiAgICAgICAgZXhwZWN0KGVycm9yLnBhcmFtcy5taXNzaW5nUHJvcGVydHkpLnRvQmUoXCJyZXF1aXJlZF9maWVsZFwiKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBpdChcInZhbGlkYXRlcyBuZXN0ZWQgb2JqZWN0cyBpbiB0aGUgbWV0YWRhdGFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHByb2ZpbGUgPSB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJ2ZXJzaW9uXCIsIFwiYXV0aG9yXCJdLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgdmVyc2lvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIGF1dGhvcjoge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJlbWFpbFwiXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIGVtYWlsOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIHBhdHRlcm46IFwiXlteQF0rQFteQF0rXFxcXC5bXkBdKyRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgYXV0aG9yOiB7XG4gICAgICAgIG5hbWU6IFwiVGVzdCBBdXRob3JcIixcbiAgICAgICAgZW1haWw6IFwiaW52YWxpZC1lbWFpbFwiLFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZU1ldGFkYXRhKHtcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgcHJvZmlsZSxcbiAgICB9KVxuXG4gICAgZXhwZWN0KEFycmF5LmlzQXJyYXkocmVzdWx0KSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChyZXN1bHQubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMClcblxuICAgIGNvbnN0IGhhc0VtYWlsUGF0dGVybkVycm9yID0gcmVzdWx0LnNvbWUoXG4gICAgICBlcnJvciA9PlxuICAgICAgICBlcnJvciAmJlxuICAgICAgICBlcnJvci5pbnN0YW5jZVBhdGggPT09IFwiL2F1dGhvci9lbWFpbFwiICYmXG4gICAgICAgIGVycm9yLmtleXdvcmQgPT09IFwicGF0dGVyblwiLFxuICAgIClcblxuICAgIGV4cGVjdChoYXNFbWFpbFBhdHRlcm5FcnJvcikudG9CZSh0cnVlKVxuICB9KVxufSlcbiJdfQ==
@@ -1,21 +0,0 @@
1
- /**
2
- * Contributor information
3
- */
4
- export interface Contributor {
5
- /**
6
- * Full name of the contributor
7
- */
8
- title: string;
9
- /**
10
- * Email address of the contributor
11
- */
12
- email?: string;
13
- /**
14
- * Path to relevant contributor information
15
- */
16
- path?: string;
17
- /**
18
- * Role of the contributor
19
- */
20
- role?: string;
21
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJpYnV0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYWNrYWdlL0NvbnRyaWJ1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRyaWJ1dG9yIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJpYnV0b3Ige1xuICAvKipcbiAgICogRnVsbCBuYW1lIG9mIHRoZSBjb250cmlidXRvclxuICAgKi9cbiAgdGl0bGU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBFbWFpbCBhZGRyZXNzIG9mIHRoZSBjb250cmlidXRvclxuICAgKi9cbiAgZW1haWw/OiBzdHJpbmdcblxuICAvKipcbiAgICogUGF0aCB0byByZWxldmFudCBjb250cmlidXRvciBpbmZvcm1hdGlvblxuICAgKi9cbiAgcGF0aD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBSb2xlIG9mIHRoZSBjb250cmlidXRvclxuICAgKi9cbiAgcm9sZT86IHN0cmluZ1xufVxuIl19
@@ -1,65 +0,0 @@
1
- import type { License } from "../resource/License.js";
2
- import type { Resource } from "../resource/Resource.js";
3
- import type { Source } from "../resource/Source.js";
4
- import type { Contributor } from "./Contributor.js";
5
- /**
6
- * Data Package interface based on the Frictionless Data specification
7
- * @see https://datapackage.org/standard/data-package/
8
- */
9
- export interface Package {
10
- /**
11
- * Unique package identifier
12
- * Should use lowercase alphanumeric characters, periods, hyphens, and underscores
13
- */
14
- name: string;
15
- /**
16
- * Package schema URL for validation
17
- */
18
- $schema?: string;
19
- /**
20
- * Human-readable title
21
- */
22
- title?: string;
23
- /**
24
- * A description of the package
25
- */
26
- description?: string;
27
- /**
28
- * A URL for the home page of the package
29
- */
30
- homepage?: string;
31
- /**
32
- * Version of the package using SemVer
33
- * @example "1.0.0"
34
- */
35
- version?: string;
36
- /**
37
- * License information
38
- */
39
- licenses?: License[];
40
- /**
41
- * List of contributors
42
- */
43
- contributors?: Contributor[];
44
- /**
45
- * Data sources for this package
46
- */
47
- sources?: Source[];
48
- /**
49
- * Keywords for the package
50
- */
51
- keywords?: string[];
52
- /**
53
- * Create time of the package
54
- * @format ISO 8601 format
55
- */
56
- created?: string;
57
- /**
58
- * Data resources in this package (required)
59
- */
60
- resources: Resource[];
61
- /**
62
- * Package image
63
- */
64
- image?: string;
65
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2UvUGFja2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaWNlbnNlIH0gZnJvbSBcIi4uL3Jlc291cmNlL0xpY2Vuc2UuanNcIlxuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS9SZXNvdXJjZS5qc1wiXG5pbXBvcnQgdHlwZSB7IFNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS9Tb3VyY2UuanNcIlxuaW1wb3J0IHR5cGUgeyBDb250cmlidXRvciB9IGZyb20gXCIuL0NvbnRyaWJ1dG9yLmpzXCJcblxuLyoqXG4gKiBEYXRhIFBhY2thZ2UgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSBGcmljdGlvbmxlc3MgRGF0YSBzcGVjaWZpY2F0aW9uXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3N0YW5kYXJkL2RhdGEtcGFja2FnZS9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBwYWNrYWdlIGlkZW50aWZpZXJcbiAgICogU2hvdWxkIHVzZSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIHBlcmlvZHMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlc1xuICAgKi9cbiAgbmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFBhY2thZ2Ugc2NoZW1hIFVSTCBmb3IgdmFsaWRhdGlvblxuICAgKi9cbiAgJHNjaGVtYT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSB0aXRsZVxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmdcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFja2FnZVxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcblxuICAvKipcbiAgICogQSBVUkwgZm9yIHRoZSBob21lIHBhZ2Ugb2YgdGhlIHBhY2thZ2VcbiAgICovXG4gIGhvbWVwYWdlPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIHBhY2thZ2UgdXNpbmcgU2VtVmVyXG4gICAqIEBleGFtcGxlIFwiMS4wLjBcIlxuICAgKi9cbiAgdmVyc2lvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBMaWNlbnNlIGluZm9ybWF0aW9uXG4gICAqL1xuICBsaWNlbnNlcz86IExpY2Vuc2VbXVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGNvbnRyaWJ1dG9yc1xuICAgKi9cbiAgY29udHJpYnV0b3JzPzogQ29udHJpYnV0b3JbXVxuXG4gIC8qKlxuICAgKiBEYXRhIHNvdXJjZXMgZm9yIHRoaXMgcGFja2FnZVxuICAgKi9cbiAgc291cmNlcz86IFNvdXJjZVtdXG5cbiAgLyoqXG4gICAqIEtleXdvcmRzIGZvciB0aGUgcGFja2FnZVxuICAgKi9cbiAga2V5d29yZHM/OiBzdHJpbmdbXVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGltZSBvZiB0aGUgcGFja2FnZVxuICAgKiBAZm9ybWF0IElTTyA4NjAxIGZvcm1hdFxuICAgKi9cbiAgY3JlYXRlZD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBEYXRhIHJlc291cmNlcyBpbiB0aGlzIHBhY2thZ2UgKHJlcXVpcmVkKVxuICAgKi9cbiAgcmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cbiAgLyoqXG4gICAqIFBhY2thZ2UgaW1hZ2VcbiAgICovXG4gIGltYWdlPzogc3RyaW5nXG59XG4iXX0=
@@ -1,4 +0,0 @@
1
- export { validatePackage } from "./validate.js";
2
- export type { Package } from "./Package.js";
3
- export type { Contributor } from "./Contributor.js";
4
- export { loadPackage } from "./load.js";
@@ -1,3 +0,0 @@
1
- export { validatePackage } from "./validate.js";
2
- export { loadPackage } from "./load.js";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYWNrYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHZhbGlkYXRlUGFja2FnZSB9IGZyb20gXCIuL3ZhbGlkYXRlLmpzXCJcbmV4cG9ydCB0eXBlIHsgUGFja2FnZSB9IGZyb20gXCIuL1BhY2thZ2UuanNcIlxuZXhwb3J0IHR5cGUgeyBDb250cmlidXRvciB9IGZyb20gXCIuL0NvbnRyaWJ1dG9yLmpzXCJcbmV4cG9ydCB7IGxvYWRQYWNrYWdlIH0gZnJvbSBcIi4vbG9hZC5qc1wiXG4iXX0=
@@ -1,4 +0,0 @@
1
- import type { Package } from "./Package.js";
2
- export declare function loadPackage(props: {
3
- path: string;
4
- }): Promise<Package>;
@@ -1,7 +0,0 @@
1
- import { loadDescriptor } from "../descriptor/load.js";
2
- export async function loadPackage(props) {
3
- const descriptor = await loadDescriptor(props);
4
- // TODO: validate descriptor against schema
5
- return descriptor;
6
- }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2UvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFHdEQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsS0FBdUI7SUFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUMsMkNBQTJDO0lBQzNDLE9BQU8sVUFBcUIsQ0FBQTtBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZERlc2NyaXB0b3IgfSBmcm9tIFwiLi4vZGVzY3JpcHRvci9sb2FkLmpzXCJcbmltcG9ydCB0eXBlIHsgUGFja2FnZSB9IGZyb20gXCIuL1BhY2thZ2UuanNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBhY2thZ2UocHJvcHM6IHsgcGF0aDogc3RyaW5nIH0pIHtcbiAgY29uc3QgZGVzY3JpcHRvciA9IGF3YWl0IGxvYWREZXNjcmlwdG9yKHByb3BzKVxuICAvLyBUT0RPOiB2YWxpZGF0ZSBkZXNjcmlwdG9yIGFnYWluc3Qgc2NoZW1hXG4gIHJldHVybiBkZXNjcmlwdG9yIGFzIFBhY2thZ2Vcbn1cbiJdfQ==
@@ -1,9 +0,0 @@
1
- import type { Package } from "./Package.js";
2
- /**
3
- * Save a Package to a file path
4
- * Works in Node.js environments
5
- */
6
- export declare function savePackage(props: {
7
- package: Package;
8
- path: string;
9
- }): Promise<boolean>;