@frictionless-ts/metadata 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 (312) hide show
  1. package/README.md +3 -0
  2. package/build/assets/dialect-1.0.json +58 -0
  3. package/build/assets/dialect-2.0.json +98 -0
  4. package/build/assets/package-1.0.json +1517 -0
  5. package/build/assets/package-2.0.json +2168 -0
  6. package/build/assets/resource-1.0.json +1353 -0
  7. package/build/assets/resource-2.0.json +1987 -0
  8. package/build/assets/schema-1.0.json +1126 -0
  9. package/build/assets/schema-2.0.json +1715 -0
  10. package/build/descriptor/Descriptor.d.ts +2 -0
  11. package/build/descriptor/Descriptor.js +4 -0
  12. package/build/descriptor/index.d.ts +6 -0
  13. package/build/descriptor/index.js +6 -0
  14. package/build/descriptor/load.d.ts +8 -0
  15. package/build/descriptor/load.js +36 -0
  16. package/build/descriptor/load.spec.d.ts +1 -0
  17. package/build/descriptor/load.spec.js +44 -0
  18. package/build/descriptor/process/parse.d.ts +2 -0
  19. package/build/descriptor/process/parse.js +8 -0
  20. package/build/descriptor/process/stringify.d.ts +2 -0
  21. package/build/descriptor/process/stringify.js +4 -0
  22. package/build/descriptor/save.d.ts +9 -0
  23. package/build/descriptor/save.js +19 -0
  24. package/build/descriptor/save.spec.d.ts +1 -0
  25. package/build/descriptor/save.spec.js +99 -0
  26. package/build/dialect/Dialect.d.ts +89 -0
  27. package/build/dialect/Dialect.js +2 -0
  28. package/build/dialect/assert.d.ts +6 -0
  29. package/build/dialect/assert.js +12 -0
  30. package/build/dialect/assert.spec.d.ts +1 -0
  31. package/build/dialect/assert.spec.js +22 -0
  32. package/build/dialect/convert/fromDescriptor.d.ts +2 -0
  33. package/build/dialect/convert/fromDescriptor.js +20 -0
  34. package/build/dialect/convert/toDescriptor.d.ts +3 -0
  35. package/build/dialect/convert/toDescriptor.js +5 -0
  36. package/build/dialect/index.d.ts +8 -0
  37. package/build/dialect/index.js +8 -0
  38. package/build/dialect/load.d.ts +5 -0
  39. package/build/dialect/load.js +12 -0
  40. package/build/dialect/load.spec.d.ts +1 -0
  41. package/build/dialect/load.spec.js +18 -0
  42. package/build/dialect/resolve.d.ts +2 -0
  43. package/build/dialect/resolve.js +11 -0
  44. package/build/dialect/save.d.ts +9 -0
  45. package/build/dialect/save.js +16 -0
  46. package/build/dialect/save.spec.d.ts +1 -0
  47. package/build/dialect/save.spec.js +52 -0
  48. package/build/dialect/validate.d.ts +10 -0
  49. package/build/dialect/validate.js +25 -0
  50. package/build/dialect/validate.spec.d.ts +1 -0
  51. package/build/dialect/validate.spec.js +28 -0
  52. package/build/error/Bound.d.ts +4 -0
  53. package/build/error/Bound.js +2 -0
  54. package/build/error/Error.d.ts +3 -0
  55. package/build/error/Error.js +2 -0
  56. package/build/error/Unbound.d.ts +6 -0
  57. package/build/error/Unbound.js +2 -0
  58. package/build/error/index.d.ts +16 -0
  59. package/build/error/index.js +2 -0
  60. package/build/error/types/Base.d.ts +3 -0
  61. package/build/error/types/Base.js +2 -0
  62. package/build/error/types/Bytes.d.ts +6 -0
  63. package/build/error/types/Bytes.js +2 -0
  64. package/build/error/types/Cell.d.ts +56 -0
  65. package/build/error/types/Cell.js +2 -0
  66. package/build/error/types/Data.d.ts +5 -0
  67. package/build/error/types/Data.js +2 -0
  68. package/build/error/types/Document.d.ts +7 -0
  69. package/build/error/types/Document.js +2 -0
  70. package/build/error/types/Encoding.d.ts +6 -0
  71. package/build/error/types/Encoding.js +2 -0
  72. package/build/error/types/Field.d.ts +15 -0
  73. package/build/error/types/Field.js +2 -0
  74. package/build/error/types/Fields.d.ts +11 -0
  75. package/build/error/types/Fields.js +2 -0
  76. package/build/error/types/File.d.ts +4 -0
  77. package/build/error/types/File.js +2 -0
  78. package/build/error/types/ForeignKey.d.ts +7 -0
  79. package/build/error/types/ForeignKey.js +2 -0
  80. package/build/error/types/Hash.d.ts +6 -0
  81. package/build/error/types/Hash.js +2 -0
  82. package/build/error/types/Metadata.d.ts +9 -0
  83. package/build/error/types/Metadata.js +2 -0
  84. package/build/error/types/Row.d.ts +9 -0
  85. package/build/error/types/Row.js +2 -0
  86. package/build/error/types/Table.d.ts +6 -0
  87. package/build/error/types/Table.js +2 -0
  88. package/build/field/Field.d.ts +5 -0
  89. package/build/field/Field.js +2 -0
  90. package/build/field/Type.d.ts +2 -0
  91. package/build/field/Type.js +2 -0
  92. package/build/field/convert/fromDescriptor.d.ts +2 -0
  93. package/build/field/convert/fromDescriptor.js +61 -0
  94. package/build/field/convert/fromDescriptor.spec.d.ts +1 -0
  95. package/build/field/convert/fromDescriptor.spec.js +241 -0
  96. package/build/field/convert/toDescriptor.d.ts +3 -0
  97. package/build/field/convert/toDescriptor.js +5 -0
  98. package/build/field/convert/toDescriptor.spec.d.ts +1 -0
  99. package/build/field/convert/toDescriptor.spec.js +291 -0
  100. package/build/field/index.d.ts +5 -0
  101. package/build/field/index.js +3 -0
  102. package/build/field/types/Any.d.ts +20 -0
  103. package/build/field/types/Any.js +2 -0
  104. package/build/field/types/Array.d.ts +32 -0
  105. package/build/field/types/Array.js +2 -0
  106. package/build/field/types/Base.d.ts +60 -0
  107. package/build/field/types/Base.js +2 -0
  108. package/build/field/types/Boolean.d.ts +28 -0
  109. package/build/field/types/Boolean.js +2 -0
  110. package/build/field/types/Date.d.ts +43 -0
  111. package/build/field/types/Date.js +2 -0
  112. package/build/field/types/Datetime.d.ts +43 -0
  113. package/build/field/types/Datetime.js +2 -0
  114. package/build/field/types/Duration.d.ts +28 -0
  115. package/build/field/types/Duration.js +2 -0
  116. package/build/field/types/Geojson.d.ts +30 -0
  117. package/build/field/types/Geojson.js +2 -0
  118. package/build/field/types/Geopoint.d.ts +27 -0
  119. package/build/field/types/Geopoint.js +2 -0
  120. package/build/field/types/Integer.d.ts +57 -0
  121. package/build/field/types/Integer.js +2 -0
  122. package/build/field/types/List.d.ts +36 -0
  123. package/build/field/types/List.js +2 -0
  124. package/build/field/types/Number.d.ts +48 -0
  125. package/build/field/types/Number.js +2 -0
  126. package/build/field/types/Object.d.ts +32 -0
  127. package/build/field/types/Object.js +2 -0
  128. package/build/field/types/String.d.ts +51 -0
  129. package/build/field/types/String.js +2 -0
  130. package/build/field/types/Time.d.ts +43 -0
  131. package/build/field/types/Time.js +2 -0
  132. package/build/field/types/Year.d.ts +36 -0
  133. package/build/field/types/Year.js +2 -0
  134. package/build/field/types/Yearmonth.d.ts +36 -0
  135. package/build/field/types/Yearmonth.js +2 -0
  136. package/build/field/types/index.d.ts +16 -0
  137. package/build/field/types/index.js +17 -0
  138. package/build/index.d.ts +112 -0
  139. package/build/index.js +32 -0
  140. package/build/json/Schema.d.ts +2 -0
  141. package/build/json/Schema.js +2 -0
  142. package/build/json/Value.d.ts +1 -0
  143. package/build/json/Value.js +2 -0
  144. package/build/json/ajv.d.ts +2 -0
  145. package/build/json/ajv.js +10 -0
  146. package/build/json/assert.d.ts +2 -0
  147. package/build/json/assert.js +10 -0
  148. package/build/json/cache.d.ts +2 -0
  149. package/build/json/cache.js +5 -0
  150. package/build/json/index.d.ts +5 -0
  151. package/build/json/index.js +4 -0
  152. package/build/json/inspect/schema.d.ts +4 -0
  153. package/build/json/inspect/schema.js +10 -0
  154. package/build/json/inspect/schema.spec.d.ts +1 -0
  155. package/build/json/inspect/schema.spec.js +132 -0
  156. package/build/json/inspect/value.d.ts +11 -0
  157. package/build/json/inspect/value.js +21 -0
  158. package/build/json/inspect/value.spec.d.ts +1 -0
  159. package/build/json/inspect/value.spec.js +121 -0
  160. package/build/json/load.d.ts +3 -0
  161. package/build/json/load.js +13 -0
  162. package/build/json/resolve.d.ts +2 -0
  163. package/build/json/resolve.js +11 -0
  164. package/build/metadata/Metadata.d.ts +3 -0
  165. package/build/metadata/Metadata.js +2 -0
  166. package/build/metadata/index.d.ts +1 -0
  167. package/build/metadata/index.js +2 -0
  168. package/build/package/Contributor.d.ts +21 -0
  169. package/build/package/Contributor.js +2 -0
  170. package/build/package/Package.d.ts +64 -0
  171. package/build/package/Package.js +2 -0
  172. package/build/package/assert.d.ts +8 -0
  173. package/build/package/assert.js +12 -0
  174. package/build/package/assert.spec.d.ts +1 -0
  175. package/build/package/assert.spec.js +26 -0
  176. package/build/package/convert/fromDescriptor.d.ts +4 -0
  177. package/build/package/convert/fromDescriptor.js +36 -0
  178. package/build/package/convert/toDescriptor.d.ts +5 -0
  179. package/build/package/convert/toDescriptor.js +7 -0
  180. package/build/package/index.d.ts +8 -0
  181. package/build/package/index.js +7 -0
  182. package/build/package/load.d.ts +5 -0
  183. package/build/package/load.js +14 -0
  184. package/build/package/load.spec.d.ts +1 -0
  185. package/build/package/load.spec.js +28 -0
  186. package/build/package/save.d.ts +9 -0
  187. package/build/package/save.js +18 -0
  188. package/build/package/save.spec.d.ts +1 -0
  189. package/build/package/save.spec.js +311 -0
  190. package/build/package/validate.d.ts +12 -0
  191. package/build/package/validate.js +27 -0
  192. package/build/package/validate.spec.d.ts +1 -0
  193. package/build/package/validate.spec.js +41 -0
  194. package/build/path/basepath.d.ts +2 -0
  195. package/build/path/basepath.js +25 -0
  196. package/build/path/basepath.spec.d.ts +1 -0
  197. package/build/path/basepath.spec.js +55 -0
  198. package/build/path/denormalize.d.ts +3 -0
  199. package/build/path/denormalize.js +29 -0
  200. package/build/path/denormalize.spec.d.ts +1 -0
  201. package/build/path/denormalize.spec.js +45 -0
  202. package/build/path/index.d.ts +5 -0
  203. package/build/path/index.js +6 -0
  204. package/build/path/normalize.d.ts +6 -0
  205. package/build/path/normalize.js +54 -0
  206. package/build/path/normalize.spec.d.ts +1 -0
  207. package/build/path/normalize.spec.js +71 -0
  208. package/build/path/path.d.ts +5 -0
  209. package/build/path/path.js +48 -0
  210. package/build/path/path.spec.d.ts +1 -0
  211. package/build/path/path.spec.js +111 -0
  212. package/build/platform/index.d.ts +1 -0
  213. package/build/platform/index.js +2 -0
  214. package/build/platform/node.d.ts +130 -0
  215. package/build/platform/node.js +10 -0
  216. package/build/platform/node.spec.d.ts +1 -0
  217. package/build/platform/node.spec.js +16 -0
  218. package/build/profile/@minify.d.ts +1 -0
  219. package/build/profile/@minify.js +58 -0
  220. package/build/profile/Profile.d.ts +9 -0
  221. package/build/profile/Profile.js +2 -0
  222. package/build/profile/assert.d.ts +6 -0
  223. package/build/profile/assert.js +36 -0
  224. package/build/profile/assert.spec.d.ts +1 -0
  225. package/build/profile/assert.spec.js +115 -0
  226. package/build/profile/index.d.ts +2 -0
  227. package/build/profile/index.js +2 -0
  228. package/build/profile/load.d.ts +4 -0
  229. package/build/profile/load.js +12 -0
  230. package/build/profile/registry.d.ts +2 -0
  231. package/build/profile/registry.js +83 -0
  232. package/build/profile/resolve.d.ts +2 -0
  233. package/build/profile/resolve.js +8 -0
  234. package/build/profile/validate.d.ts +9 -0
  235. package/build/profile/validate.js +12 -0
  236. package/build/report/Report.d.ts +5 -0
  237. package/build/report/Report.js +2 -0
  238. package/build/report/create.d.ts +7 -0
  239. package/build/report/create.js +6 -0
  240. package/build/report/index.d.ts +2 -0
  241. package/build/report/index.js +2 -0
  242. package/build/resource/License.d.ts +18 -0
  243. package/build/resource/License.js +2 -0
  244. package/build/resource/Resource.d.ts +93 -0
  245. package/build/resource/Resource.js +2 -0
  246. package/build/resource/Source.d.ts +17 -0
  247. package/build/resource/Source.js +2 -0
  248. package/build/resource/assert.d.ts +8 -0
  249. package/build/resource/assert.js +12 -0
  250. package/build/resource/assert.spec.d.ts +1 -0
  251. package/build/resource/assert.spec.js +23 -0
  252. package/build/resource/convert/fromDescriptor.d.ts +4 -0
  253. package/build/resource/convert/fromDescriptor.js +69 -0
  254. package/build/resource/convert/toDescriptor.d.ts +5 -0
  255. package/build/resource/convert/toDescriptor.js +36 -0
  256. package/build/resource/helpers.d.ts +2 -0
  257. package/build/resource/helpers.js +6 -0
  258. package/build/resource/index.d.ts +11 -0
  259. package/build/resource/index.js +9 -0
  260. package/build/resource/infer.d.ts +3 -0
  261. package/build/resource/infer.js +35 -0
  262. package/build/resource/infer.spec.d.ts +1 -0
  263. package/build/resource/infer.spec.js +103 -0
  264. package/build/resource/load.d.ts +5 -0
  265. package/build/resource/load.js +14 -0
  266. package/build/resource/load.spec.d.ts +1 -0
  267. package/build/resource/load.spec.js +22 -0
  268. package/build/resource/save.d.ts +9 -0
  269. package/build/resource/save.js +18 -0
  270. package/build/resource/save.spec.d.ts +1 -0
  271. package/build/resource/save.spec.js +170 -0
  272. package/build/resource/validate.d.ts +13 -0
  273. package/build/resource/validate.js +57 -0
  274. package/build/resource/validate.spec.d.ts +1 -0
  275. package/build/resource/validate.spec.js +30 -0
  276. package/build/schema/ForeignKey.d.ts +23 -0
  277. package/build/schema/ForeignKey.js +2 -0
  278. package/build/schema/Schema.d.ts +56 -0
  279. package/build/schema/Schema.js +2 -0
  280. package/build/schema/assert.d.ts +6 -0
  281. package/build/schema/assert.js +12 -0
  282. package/build/schema/assert.spec.d.ts +1 -0
  283. package/build/schema/assert.spec.js +34 -0
  284. package/build/schema/convert/fromDescriptor.d.ts +2 -0
  285. package/build/schema/convert/fromDescriptor.js +70 -0
  286. package/build/schema/convert/fromJsonSchema.d.ts +3 -0
  287. package/build/schema/convert/fromJsonSchema.js +105 -0
  288. package/build/schema/convert/fromJsonSchema.spec.d.ts +1 -0
  289. package/build/schema/convert/fromJsonSchema.spec.js +156 -0
  290. package/build/schema/convert/toDescriptor.d.ts +3 -0
  291. package/build/schema/convert/toDescriptor.js +5 -0
  292. package/build/schema/convert/toJsonSchema.d.ts +3 -0
  293. package/build/schema/convert/toJsonSchema.js +173 -0
  294. package/build/schema/convert/toJsonSchema.spec.d.ts +1 -0
  295. package/build/schema/convert/toJsonSchema.spec.js +403 -0
  296. package/build/schema/index.d.ts +11 -0
  297. package/build/schema/index.js +10 -0
  298. package/build/schema/load.d.ts +5 -0
  299. package/build/schema/load.js +12 -0
  300. package/build/schema/load.spec.d.ts +1 -0
  301. package/build/schema/load.spec.js +55 -0
  302. package/build/schema/resolve.d.ts +2 -0
  303. package/build/schema/resolve.js +11 -0
  304. package/build/schema/save.d.ts +9 -0
  305. package/build/schema/save.js +16 -0
  306. package/build/schema/save.spec.d.ts +1 -0
  307. package/build/schema/save.spec.js +58 -0
  308. package/build/schema/validate.d.ts +10 -0
  309. package/build/schema/validate.js +25 -0
  310. package/build/schema/validate.spec.d.ts +1 -0
  311. package/build/schema/validate.spec.js +41 -0
  312. package/package.json +37 -0
@@ -0,0 +1,45 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { denormalizePath } from "./denormalize.js";
3
+ describe("denormalizePath", () => {
4
+ it.each([
5
+ {
6
+ description: "remote URL without basepath",
7
+ path: "http://example.com/path/to/file.txt",
8
+ basepath: undefined,
9
+ denormalizedPath: "http://example.com/path/to/file.txt",
10
+ },
11
+ {
12
+ description: "remote URL with basepath",
13
+ path: "http://example.com/path/to/file.txt",
14
+ basepath: "data",
15
+ denormalizedPath: "http://example.com/path/to/file.txt",
16
+ },
17
+ {
18
+ description: "local file in subfolder",
19
+ path: "/tmp/data/file.csv",
20
+ basepath: "/tmp",
21
+ denormalizedPath: "data/file.csv",
22
+ },
23
+ {
24
+ description: "local file in direct child folder",
25
+ path: "/tmp/file.csv",
26
+ basepath: "/tmp",
27
+ denormalizedPath: "file.csv",
28
+ },
29
+ {
30
+ description: "local file with deeply nested basepath",
31
+ path: "/tmp/data/nested/deep/file.csv",
32
+ basepath: "/tmp/data/nested",
33
+ denormalizedPath: "deep/file.csv",
34
+ },
35
+ {
36
+ description: "local file with multi-level basepath",
37
+ path: "/home/user/projects/data/file.csv",
38
+ basepath: "/home/user/projects",
39
+ denormalizedPath: "data/file.csv",
40
+ },
41
+ ])("$description", ({ path, basepath, denormalizedPath }) => {
42
+ expect(denormalizePath(path, { basepath })).toEqual(denormalizedPath);
43
+ });
44
+ });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVub3JtYWxpemUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhdGgvZGVub3JtYWxpemUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRWxELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOO1lBQ0UsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxJQUFJLEVBQUUscUNBQXFDO1lBQzNDLFFBQVEsRUFBRSxTQUFTO1lBQ25CLGdCQUFnQixFQUFFLHFDQUFxQztTQUN4RDtRQUNEO1lBQ0UsV0FBVyxFQUFFLDBCQUEwQjtZQUN2QyxJQUFJLEVBQUUscUNBQXFDO1lBQzNDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLGdCQUFnQixFQUFFLHFDQUFxQztTQUN4RDtRQUNEO1lBQ0UsV0FBVyxFQUFFLHlCQUF5QjtZQUN0QyxJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLGdCQUFnQixFQUFFLGVBQWU7U0FDbEM7UUFDRDtZQUNFLFdBQVcsRUFBRSxtQ0FBbUM7WUFDaEQsSUFBSSxFQUFFLGVBQWU7WUFDckIsUUFBUSxFQUFFLE1BQU07WUFDaEIsZ0JBQWdCLEVBQUUsVUFBVTtTQUM3QjtRQUNEO1lBQ0UsV0FBVyxFQUFFLHdDQUF3QztZQUNyRCxJQUFJLEVBQUUsZ0NBQWdDO1lBQ3RDLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsZ0JBQWdCLEVBQUUsZUFBZTtTQUNsQztRQUNEO1lBQ0UsV0FBVyxFQUFFLHNDQUFzQztZQUNuRCxJQUFJLEVBQUUsbUNBQW1DO1lBQ3pDLFFBQVEsRUFBRSxxQkFBcUI7WUFDL0IsZ0JBQWdCLEVBQUUsZUFBZTtTQUNsQztLQUNGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFO1FBQzFELE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3ZFLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgZGVub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4vZGVub3JtYWxpemUudHNcIlxuXG5kZXNjcmliZShcImRlbm9ybWFsaXplUGF0aFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBVUkwgd2l0aG91dCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IHVuZGVmaW5lZCxcbiAgICAgIGRlbm9ybWFsaXplZFBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBVUkwgd2l0aCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwiZGF0YVwiLFxuICAgICAgZGVub3JtYWxpemVkUGF0aDogXCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwibG9jYWwgZmlsZSBpbiBzdWJmb2xkZXJcIixcbiAgICAgIHBhdGg6IFwiL3RtcC9kYXRhL2ZpbGUuY3N2XCIsXG4gICAgICBiYXNlcGF0aDogXCIvdG1wXCIsXG4gICAgICBkZW5vcm1hbGl6ZWRQYXRoOiBcImRhdGEvZmlsZS5jc3ZcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIGZpbGUgaW4gZGlyZWN0IGNoaWxkIGZvbGRlclwiLFxuICAgICAgcGF0aDogXCIvdG1wL2ZpbGUuY3N2XCIsXG4gICAgICBiYXNlcGF0aDogXCIvdG1wXCIsXG4gICAgICBkZW5vcm1hbGl6ZWRQYXRoOiBcImZpbGUuY3N2XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJsb2NhbCBmaWxlIHdpdGggZGVlcGx5IG5lc3RlZCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCIvdG1wL2RhdGEvbmVzdGVkL2RlZXAvZmlsZS5jc3ZcIixcbiAgICAgIGJhc2VwYXRoOiBcIi90bXAvZGF0YS9uZXN0ZWRcIixcbiAgICAgIGRlbm9ybWFsaXplZFBhdGg6IFwiZGVlcC9maWxlLmNzdlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwibG9jYWwgZmlsZSB3aXRoIG11bHRpLWxldmVsIGJhc2VwYXRoXCIsXG4gICAgICBwYXRoOiBcIi9ob21lL3VzZXIvcHJvamVjdHMvZGF0YS9maWxlLmNzdlwiLFxuICAgICAgYmFzZXBhdGg6IFwiL2hvbWUvdXNlci9wcm9qZWN0c1wiLFxuICAgICAgZGVub3JtYWxpemVkUGF0aDogXCJkYXRhL2ZpbGUuY3N2XCIsXG4gICAgfSxcbiAgXSkoXCIkZGVzY3JpcHRpb25cIiwgKHsgcGF0aCwgYmFzZXBhdGgsIGRlbm9ybWFsaXplZFBhdGggfSkgPT4ge1xuICAgIGV4cGVjdChkZW5vcm1hbGl6ZVBhdGgocGF0aCwgeyBiYXNlcGF0aCB9KSkudG9FcXVhbChkZW5vcm1hbGl6ZWRQYXRoKVxuICB9KVxufSlcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export { getName, getFormat, getFilename, getProtocol } from "./path.ts";
2
+ export { getBasepath, resolveBasepath } from "./basepath.ts";
3
+ export { denormalizePath } from "./denormalize.ts";
4
+ export { normalizePath } from "./normalize.ts";
5
+ export { isRemotePath } from "./path.ts";
@@ -0,0 +1,6 @@
1
+ export { getName, getFormat, getFilename, getProtocol } from "./path.js";
2
+ export { getBasepath, resolveBasepath } from "./basepath.js";
3
+ export { denormalizePath } from "./denormalize.js";
4
+ export { normalizePath } from "./normalize.js";
5
+ export { isRemotePath } from "./path.js";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYXRoL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZ2V0TmFtZSwgZ2V0Rm9ybWF0LCBnZXRGaWxlbmFtZSwgZ2V0UHJvdG9jb2wgfSBmcm9tIFwiLi9wYXRoLnRzXCJcbmV4cG9ydCB7IGdldEJhc2VwYXRoLCByZXNvbHZlQmFzZXBhdGggfSBmcm9tIFwiLi9iYXNlcGF0aC50c1wiXG5leHBvcnQgeyBkZW5vcm1hbGl6ZVBhdGggfSBmcm9tIFwiLi9kZW5vcm1hbGl6ZS50c1wiXG5leHBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4vbm9ybWFsaXplLnRzXCJcbmV4cG9ydCB7IGlzUmVtb3RlUGF0aCB9IGZyb20gXCIuL3BhdGgudHNcIlxuIl19
@@ -0,0 +1,6 @@
1
+ export declare function normalizePath(path: string, options: {
2
+ basepath?: string;
3
+ }): string;
4
+ export declare function denormalizePath(path: string, options: {
5
+ basepath?: string;
6
+ }): string;
@@ -0,0 +1,54 @@
1
+ import { node } from "../platform/index.js";
2
+ import { isRemotePath } from "./path.js";
3
+ export function normalizePath(path, options) {
4
+ const isPathRemote = isRemotePath(path);
5
+ const isBasepathRemote = isRemotePath(options.basepath ?? "");
6
+ if (isPathRemote) {
7
+ return new URL(path).toString();
8
+ }
9
+ if (isBasepathRemote) {
10
+ const normalizedPath = new URL([options.basepath, path].join("/")).toString();
11
+ if (!normalizedPath.startsWith(options.basepath ?? "")) {
12
+ throw new Error(`Path ${path} is not a subpath of ${options.basepath}`);
13
+ }
14
+ return normalizedPath;
15
+ }
16
+ if (!node) {
17
+ throw new Error("File system is not supported in this environment");
18
+ }
19
+ const normalizedPath = options.basepath
20
+ ? node.path.join(options.basepath, path)
21
+ : path;
22
+ const relativePath = node.path.relative(options.basepath ?? "", normalizedPath);
23
+ if (relativePath.startsWith("..")) {
24
+ throw new Error(`Path ${path} is not a subpath of ${options.basepath}`);
25
+ }
26
+ return node.path.relative(process.cwd(), node.path.resolve(normalizedPath));
27
+ }
28
+ export function denormalizePath(path, options) {
29
+ const isPathRemote = isRemotePath(path);
30
+ const isBasepathRemote = isRemotePath(options.basepath ?? "");
31
+ if (isPathRemote) {
32
+ return new URL(path).toString();
33
+ }
34
+ if (isBasepathRemote) {
35
+ const basepath = new URL(options.basepath ?? "").toString();
36
+ if (!path.startsWith(basepath)) {
37
+ throw new Error(`Path ${path} is not a subpath of ${options.basepath}`);
38
+ }
39
+ const relative = path.replace(`${basepath}/`, "");
40
+ return relative;
41
+ }
42
+ if (!node) {
43
+ throw new Error("File system is not supported in this environment");
44
+ }
45
+ const normalizedPath = node.path.resolve(path);
46
+ const normalizedBasepath = node.path.resolve(options.basepath ?? "");
47
+ if (!normalizedPath.startsWith(normalizedBasepath)) {
48
+ throw new Error(`Path ${path} is not a subpath of ${options.basepath}`);
49
+ }
50
+ // The Data Package standard requires "/" as the path separator
51
+ const relative = node.path.relative(normalizedBasepath, normalizedPath);
52
+ return relative.split(node.path.sep).join("/");
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGF0aC9ub3JtYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFeEMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFZLEVBQUUsT0FBOEI7SUFDeEUsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUE7SUFFN0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQzVCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQ25DLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFWixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksd0JBQXdCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ3pFLENBQUM7UUFFRCxPQUFPLGNBQWMsQ0FBQTtJQUN2QixDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUTtRQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUVSLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUNyQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFDdEIsY0FBYyxDQUNmLENBQUE7SUFFRCxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSx3QkFBd0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWSxFQUFFLE9BQThCO0lBQzFFLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2QyxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRTdELElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSx3QkFBd0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDekUsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNqRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM5QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUE7SUFFcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLHdCQUF3QixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQ3ZFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9kZSB9IGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC50c1wiXG5pbXBvcnQgeyBpc1JlbW90ZVBhdGggfSBmcm9tIFwiLi9wYXRoLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nLCBvcHRpb25zOiB7IGJhc2VwYXRoPzogc3RyaW5nIH0pIHtcbiAgY29uc3QgaXNQYXRoUmVtb3RlID0gaXNSZW1vdGVQYXRoKHBhdGgpXG4gIGNvbnN0IGlzQmFzZXBhdGhSZW1vdGUgPSBpc1JlbW90ZVBhdGgob3B0aW9ucy5iYXNlcGF0aCA/PyBcIlwiKVxuXG4gIGlmIChpc1BhdGhSZW1vdGUpIHtcbiAgICByZXR1cm4gbmV3IFVSTChwYXRoKS50b1N0cmluZygpXG4gIH1cblxuICBpZiAoaXNCYXNlcGF0aFJlbW90ZSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbmV3IFVSTChcbiAgICAgIFtvcHRpb25zLmJhc2VwYXRoLCBwYXRoXS5qb2luKFwiL1wiKSxcbiAgICApLnRvU3RyaW5nKClcblxuICAgIGlmICghbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChvcHRpb25zLmJhc2VwYXRoID8/IFwiXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggJHtwYXRofSBpcyBub3QgYSBzdWJwYXRoIG9mICR7b3B0aW9ucy5iYXNlcGF0aH1gKVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkUGF0aFxuICB9XG5cbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmlsZSBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50XCIpXG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IG9wdGlvbnMuYmFzZXBhdGhcbiAgICA/IG5vZGUucGF0aC5qb2luKG9wdGlvbnMuYmFzZXBhdGgsIHBhdGgpXG4gICAgOiBwYXRoXG5cbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gbm9kZS5wYXRoLnJlbGF0aXZlKFxuICAgIG9wdGlvbnMuYmFzZXBhdGggPz8gXCJcIixcbiAgICBub3JtYWxpemVkUGF0aCxcbiAgKVxuXG4gIGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4uXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoICR7cGF0aH0gaXMgbm90IGEgc3VicGF0aCBvZiAke29wdGlvbnMuYmFzZXBhdGh9YClcbiAgfVxuXG4gIHJldHVybiBub2RlLnBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgbm9kZS5wYXRoLnJlc29sdmUobm9ybWFsaXplZFBhdGgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZywgb3B0aW9uczogeyBiYXNlcGF0aD86IHN0cmluZyB9KSB7XG4gIGNvbnN0IGlzUGF0aFJlbW90ZSA9IGlzUmVtb3RlUGF0aChwYXRoKVxuICBjb25zdCBpc0Jhc2VwYXRoUmVtb3RlID0gaXNSZW1vdGVQYXRoKG9wdGlvbnMuYmFzZXBhdGggPz8gXCJcIilcblxuICBpZiAoaXNQYXRoUmVtb3RlKSB7XG4gICAgcmV0dXJuIG5ldyBVUkwocGF0aCkudG9TdHJpbmcoKVxuICB9XG5cbiAgaWYgKGlzQmFzZXBhdGhSZW1vdGUpIHtcbiAgICBjb25zdCBiYXNlcGF0aCA9IG5ldyBVUkwob3B0aW9ucy5iYXNlcGF0aCA/PyBcIlwiKS50b1N0cmluZygpXG5cbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChiYXNlcGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAke3BhdGh9IGlzIG5vdCBhIHN1YnBhdGggb2YgJHtvcHRpb25zLmJhc2VwYXRofWApXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlcGxhY2UoYCR7YmFzZXBhdGh9L2AsIFwiXCIpXG4gICAgcmV0dXJuIHJlbGF0aXZlXG4gIH1cblxuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIHN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIilcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9kZS5wYXRoLnJlc29sdmUocGF0aClcbiAgY29uc3Qgbm9ybWFsaXplZEJhc2VwYXRoID0gbm9kZS5wYXRoLnJlc29sdmUob3B0aW9ucy5iYXNlcGF0aCA/PyBcIlwiKVxuXG4gIGlmICghbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZXBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoICR7cGF0aH0gaXMgbm90IGEgc3VicGF0aCBvZiAke29wdGlvbnMuYmFzZXBhdGh9YClcbiAgfVxuXG4gIC8vIFRoZSBEYXRhIFBhY2thZ2Ugc3RhbmRhcmQgcmVxdWlyZXMgXCIvXCIgYXMgdGhlIHBhdGggc2VwYXJhdG9yXG4gIGNvbnN0IHJlbGF0aXZlID0gbm9kZS5wYXRoLnJlbGF0aXZlKG5vcm1hbGl6ZWRCYXNlcGF0aCwgbm9ybWFsaXplZFBhdGgpXG4gIHJldHVybiByZWxhdGl2ZS5zcGxpdChub2RlLnBhdGguc2VwKS5qb2luKFwiL1wiKVxufVxuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,71 @@
1
+ import { join, relative } from "node:path";
2
+ import { describe, expect, it } from "vitest";
3
+ import { normalizePath } from "./normalize.js";
4
+ describe("normalizePath", () => {
5
+ it.each([
6
+ {
7
+ description: "local path without basepath",
8
+ path: "path/to/file.txt",
9
+ basepath: undefined,
10
+ normalizedPath: join("path", "to", "file.txt"),
11
+ },
12
+ {
13
+ description: "local path with local basepath",
14
+ path: "file.txt",
15
+ basepath: "path/to",
16
+ normalizedPath: join("path", "to", "file.txt"),
17
+ },
18
+ {
19
+ description: "remote path",
20
+ path: "http://example.com/path/to/file.txt",
21
+ basepath: undefined,
22
+ normalizedPath: "http://example.com/path/to/file.txt",
23
+ },
24
+ {
25
+ description: "remote path with query string",
26
+ path: "http://example.com/path/to/file.txt?query=param",
27
+ basepath: undefined,
28
+ normalizedPath: "http://example.com/path/to/file.txt?query=param",
29
+ },
30
+ {
31
+ description: "local path with remote basepath",
32
+ path: "path/to/file.txt",
33
+ basepath: "http://example.com",
34
+ normalizedPath: "http://example.com/path/to/file.txt",
35
+ },
36
+ {
37
+ description: "local path with absolute basepath",
38
+ path: "file.txt",
39
+ basepath: "/absolute/path",
40
+ normalizedPath: relative(process.cwd(), "/absolute/path/file.txt"),
41
+ },
42
+ {
43
+ description: "path with empty basepath",
44
+ path: "path/to/file.txt",
45
+ basepath: "",
46
+ normalizedPath: join("path", "to", "file.txt"),
47
+ },
48
+ ])("$description", ({ path, basepath, normalizedPath }) => {
49
+ expect(normalizePath(path, { basepath })).toEqual(normalizedPath);
50
+ });
51
+ it.each([
52
+ {
53
+ description: "absolute path",
54
+ path: "/absolute/path/to/file.txt",
55
+ basepath: undefined,
56
+ },
57
+ {
58
+ description: "local traversed path",
59
+ path: "../file.txt",
60
+ basepath: "/folder",
61
+ },
62
+ {
63
+ description: "remote traversed path",
64
+ path: "../file.txt",
65
+ basepath: "http://example.com/data",
66
+ },
67
+ ])("$description -- throw", ({ path, basepath }) => {
68
+ expect(() => normalizePath(path, { basepath })).toThrow();
69
+ });
70
+ });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYXRoL25vcm1hbGl6ZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFOUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFDN0IsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOO1lBQ0UsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLFFBQVEsRUFBRSxTQUFTO1lBQ25CLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7U0FDL0M7UUFDRDtZQUNFLFdBQVcsRUFBRSxnQ0FBZ0M7WUFDN0MsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztTQUMvQztRQUNEO1lBQ0UsV0FBVyxFQUFFLGFBQWE7WUFDMUIsSUFBSSxFQUFFLHFDQUFxQztZQUMzQyxRQUFRLEVBQUUsU0FBUztZQUNuQixjQUFjLEVBQUUscUNBQXFDO1NBQ3REO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsK0JBQStCO1lBQzVDLElBQUksRUFBRSxpREFBaUQ7WUFDdkQsUUFBUSxFQUFFLFNBQVM7WUFDbkIsY0FBYyxFQUFFLGlEQUFpRDtTQUNsRTtRQUNEO1lBQ0UsV0FBVyxFQUFFLGlDQUFpQztZQUM5QyxJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsY0FBYyxFQUFFLHFDQUFxQztTQUN0RDtRQUNEO1lBQ0UsV0FBVyxFQUFFLG1DQUFtQztZQUNoRCxJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLGNBQWMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLHlCQUF5QixDQUFDO1NBQ25FO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFLEVBQUU7WUFDWixjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO1NBQy9DO0tBQ0YsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFO1FBQ3hELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUNuRSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTjtZQUNFLFdBQVcsRUFBRSxlQUFlO1lBQzVCLElBQUksRUFBRSw0QkFBNEI7WUFDbEMsUUFBUSxFQUFFLFNBQVM7U0FDcEI7UUFDRDtZQUNFLFdBQVcsRUFBRSxzQkFBc0I7WUFDbkMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLFNBQVM7U0FDcEI7UUFDRDtZQUNFLFdBQVcsRUFBRSx1QkFBdUI7WUFDcEMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLHlCQUF5QjtTQUNwQztLQUNGLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7UUFDakQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDM0QsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4sIHJlbGF0aXZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gXCIuL25vcm1hbGl6ZS50c1wiXG5cbmRlc2NyaWJlKFwibm9ybWFsaXplUGF0aFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIHBhdGggd2l0aG91dCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCJwYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBiYXNlcGF0aDogdW5kZWZpbmVkLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IGpvaW4oXCJwYXRoXCIsIFwidG9cIiwgXCJmaWxlLnR4dFwiKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIHBhdGggd2l0aCBsb2NhbCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCJmaWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwicGF0aC90b1wiLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IGpvaW4oXCJwYXRoXCIsIFwidG9cIiwgXCJmaWxlLnR4dFwiKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBwYXRoXCIsXG4gICAgICBwYXRoOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBiYXNlcGF0aDogdW5kZWZpbmVkLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBwYXRoIHdpdGggcXVlcnkgc3RyaW5nXCIsXG4gICAgICBwYXRoOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0P3F1ZXJ5PXBhcmFtXCIsXG4gICAgICBiYXNlcGF0aDogdW5kZWZpbmVkLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHQ/cXVlcnk9cGFyYW1cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIHBhdGggd2l0aCByZW1vdGUgYmFzZXBhdGhcIixcbiAgICAgIHBhdGg6IFwicGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tXCIsXG4gICAgICBub3JtYWxpemVkUGF0aDogXCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwibG9jYWwgcGF0aCB3aXRoIGFic29sdXRlIGJhc2VwYXRoXCIsXG4gICAgICBwYXRoOiBcImZpbGUudHh0XCIsXG4gICAgICBiYXNlcGF0aDogXCIvYWJzb2x1dGUvcGF0aFwiLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IHJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIFwiL2Fic29sdXRlL3BhdGgvZmlsZS50eHRcIiksXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJwYXRoIHdpdGggZW1wdHkgYmFzZXBhdGhcIixcbiAgICAgIHBhdGg6IFwicGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwiXCIsXG4gICAgICBub3JtYWxpemVkUGF0aDogam9pbihcInBhdGhcIiwgXCJ0b1wiLCBcImZpbGUudHh0XCIpLFxuICAgIH0sXG4gIF0pKFwiJGRlc2NyaXB0aW9uXCIsICh7IHBhdGgsIGJhc2VwYXRoLCBub3JtYWxpemVkUGF0aCB9KSA9PiB7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZVBhdGgocGF0aCwgeyBiYXNlcGF0aCB9KSkudG9FcXVhbChub3JtYWxpemVkUGF0aClcbiAgfSlcblxuICBpdC5lYWNoKFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJhYnNvbHV0ZSBwYXRoXCIsXG4gICAgICBwYXRoOiBcIi9hYnNvbHV0ZS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBiYXNlcGF0aDogdW5kZWZpbmVkLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwibG9jYWwgdHJhdmVyc2VkIHBhdGhcIixcbiAgICAgIHBhdGg6IFwiLi4vZmlsZS50eHRcIixcbiAgICAgIGJhc2VwYXRoOiBcIi9mb2xkZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSB0cmF2ZXJzZWQgcGF0aFwiLFxuICAgICAgcGF0aDogXCIuLi9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tL2RhdGFcIixcbiAgICB9LFxuICBdKShcIiRkZXNjcmlwdGlvbiAtLSB0aHJvd1wiLCAoeyBwYXRoLCBiYXNlcGF0aCB9KSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5vcm1hbGl6ZVBhdGgocGF0aCwgeyBiYXNlcGF0aCB9KSkudG9UaHJvdygpXG4gIH0pXG59KVxuIl19
@@ -0,0 +1,5 @@
1
+ export declare function isRemotePath(path: string): boolean;
2
+ export declare function getName(filename?: string): string | undefined;
3
+ export declare function getProtocol(path: string): string;
4
+ export declare function getFormat(filename?: string): string | undefined;
5
+ export declare function getFilename(path: string): string | undefined;
@@ -0,0 +1,48 @@
1
+ import slugify from "@sindresorhus/slugify";
2
+ import { node } from "../platform/index.js";
3
+ export function isRemotePath(path) {
4
+ const protocol = getProtocol(path);
5
+ return protocol !== "file";
6
+ }
7
+ export function getName(filename) {
8
+ if (!filename) {
9
+ return undefined;
10
+ }
11
+ const name = filename.split(".")[0];
12
+ if (!name) {
13
+ return undefined;
14
+ }
15
+ return slugify(name);
16
+ }
17
+ export function getProtocol(path) {
18
+ try {
19
+ const url = new URL(path);
20
+ const protocol = url.protocol.replace(":", "");
21
+ // Handle Windows drive letters
22
+ if (protocol.length < 2) {
23
+ return "file";
24
+ }
25
+ return protocol;
26
+ }
27
+ catch {
28
+ return "file";
29
+ }
30
+ }
31
+ export function getFormat(filename) {
32
+ return filename?.split(".").slice(-1)[0]?.toLowerCase();
33
+ }
34
+ export function getFilename(path) {
35
+ const isRemote = isRemotePath(path);
36
+ if (isRemote) {
37
+ const pathname = new URL(path).pathname;
38
+ const filename = pathname.split("/").slice(-1)[0];
39
+ return filename?.includes(".") ? filename : undefined;
40
+ }
41
+ if (!node) {
42
+ throw new Error("File system is not supported in this environment");
43
+ }
44
+ const resolvedPath = node.path.resolve(path);
45
+ const filename = node.path.parse(resolvedPath).base;
46
+ return filename?.includes(".") ? filename : undefined;
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhdGgvcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFM0MsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNsQyxPQUFPLFFBQVEsS0FBSyxNQUFNLENBQUE7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsUUFBaUI7SUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3RCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVk7SUFDdEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDekIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRTlDLCtCQUErQjtRQUMvQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWlCO0lBQ3pDLE9BQU8sUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQTtBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVuQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakQsT0FBTyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDbkQsT0FBTyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNsdWdpZnkgZnJvbSBcIkBzaW5kcmVzb3JodXMvc2x1Z2lmeVwiXG5pbXBvcnQgeyBub2RlIH0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgcHJvdG9jb2wgPSBnZXRQcm90b2NvbChwYXRoKVxuICByZXR1cm4gcHJvdG9jb2wgIT09IFwiZmlsZVwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gIGlmICghZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBuYW1lID0gZmlsZW5hbWUuc3BsaXQoXCIuXCIpWzBdXG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIHJldHVybiBzbHVnaWZ5KG5hbWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm90b2NvbChwYXRoOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHBhdGgpXG4gICAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wucmVwbGFjZShcIjpcIiwgXCJcIilcblxuICAgIC8vIEhhbmRsZSBXaW5kb3dzIGRyaXZlIGxldHRlcnNcbiAgICBpZiAocHJvdG9jb2wubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIFwiZmlsZVwiXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3RvY29sXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcImZpbGVcIlxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXQoZmlsZW5hbWU/OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZpbGVuYW1lPy5zcGxpdChcIi5cIikuc2xpY2UoLTEpWzBdPy50b0xvd2VyQ2FzZSgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlbmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgaXNSZW1vdGUgPSBpc1JlbW90ZVBhdGgocGF0aClcblxuICBpZiAoaXNSZW1vdGUpIHtcbiAgICBjb25zdCBwYXRobmFtZSA9IG5ldyBVUkwocGF0aCkucGF0aG5hbWVcbiAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhuYW1lLnNwbGl0KFwiL1wiKS5zbGljZSgtMSlbMF1cbiAgICByZXR1cm4gZmlsZW5hbWU/LmluY2x1ZGVzKFwiLlwiKSA/IGZpbGVuYW1lIDogdW5kZWZpbmVkXG4gIH1cblxuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIHN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIilcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IG5vZGUucGF0aC5yZXNvbHZlKHBhdGgpXG4gIGNvbnN0IGZpbGVuYW1lID0gbm9kZS5wYXRoLnBhcnNlKHJlc29sdmVkUGF0aCkuYmFzZVxuICByZXR1cm4gZmlsZW5hbWU/LmluY2x1ZGVzKFwiLlwiKSA/IGZpbGVuYW1lIDogdW5kZWZpbmVkXG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,111 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { getFilename, isRemotePath } from "./path.js";
3
+ describe("isRemotePath", () => {
4
+ it.each([
5
+ {
6
+ description: "http URL",
7
+ path: "http://example.com/path/to/file.txt",
8
+ isRemote: true,
9
+ },
10
+ {
11
+ description: "https URL",
12
+ path: "https://example.com/path/to/file.txt",
13
+ isRemote: true,
14
+ },
15
+ {
16
+ description: "ftp URL",
17
+ path: "ftp://example.com/path/to/file.txt",
18
+ isRemote: true,
19
+ },
20
+ {
21
+ description: "file URL",
22
+ path: "file:///path/to/file.txt",
23
+ isRemote: false,
24
+ },
25
+ {
26
+ description: "absolute path",
27
+ path: "/path/to/file.txt",
28
+ isRemote: false,
29
+ },
30
+ {
31
+ description: "relative path",
32
+ path: "path/to/file.txt",
33
+ isRemote: false,
34
+ },
35
+ {
36
+ description: "current directory path",
37
+ path: "./file.txt",
38
+ isRemote: false,
39
+ },
40
+ {
41
+ description: "parent directory path",
42
+ path: "../file.txt",
43
+ isRemote: false,
44
+ },
45
+ {
46
+ description: "empty string",
47
+ path: "",
48
+ isRemote: false,
49
+ },
50
+ {
51
+ // new URL considers this to be a valid URL
52
+ description: "protocol without slashes",
53
+ path: "http:example.com",
54
+ isRemote: true,
55
+ },
56
+ ])("$description", ({ path, isRemote }) => {
57
+ expect(isRemotePath(path)).toBe(isRemote);
58
+ });
59
+ });
60
+ describe("getFilename", () => {
61
+ it.each([
62
+ {
63
+ description: "simple filename",
64
+ path: "file.txt",
65
+ filename: "file.txt",
66
+ },
67
+ {
68
+ description: "directory path with filename",
69
+ path: "some/path/to/file.txt",
70
+ filename: "file.txt",
71
+ },
72
+ {
73
+ description: "remote HTTP URL",
74
+ path: "http://example.com/path/to/file.txt",
75
+ filename: "file.txt",
76
+ },
77
+ {
78
+ description: "remote HTTPS URL",
79
+ path: "https://example.com/path/to/file.txt",
80
+ filename: "file.txt",
81
+ },
82
+ {
83
+ description: "URL with query parameters",
84
+ path: "https://example.com/path/to/file.txt?query=param",
85
+ filename: "file.txt",
86
+ },
87
+ {
88
+ description: "URL with hash",
89
+ path: "https://example.com/path/to/file.txt#section",
90
+ filename: "file.txt",
91
+ },
92
+ {
93
+ description: "URL with query and hash",
94
+ path: "https://example.com/path/to/file.txt?query=param#section",
95
+ filename: "file.txt",
96
+ },
97
+ {
98
+ description: "URL with no filename",
99
+ path: "https://example.com/path/",
100
+ filename: undefined,
101
+ },
102
+ {
103
+ description: "local path with no filename",
104
+ path: "some/path/",
105
+ filename: undefined,
106
+ },
107
+ ])("$description", ({ path, filename }) => {
108
+ expect(getFilename(path)).toEqual(filename);
109
+ });
110
+ });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGF0aC9wYXRoLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXJELFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTjtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLElBQUksRUFBRSxxQ0FBcUM7WUFDM0MsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUNEO1lBQ0UsV0FBVyxFQUFFLFdBQVc7WUFDeEIsSUFBSSxFQUFFLHNDQUFzQztZQUM1QyxRQUFRLEVBQUUsSUFBSTtTQUNmO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsU0FBUztZQUN0QixJQUFJLEVBQUUsb0NBQW9DO1lBQzFDLFFBQVEsRUFBRSxJQUFJO1NBQ2Y7UUFDRDtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLElBQUksRUFBRSwwQkFBMEI7WUFDaEMsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSxlQUFlO1lBQzVCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSxlQUFlO1lBQzVCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSx3QkFBd0I7WUFDckMsSUFBSSxFQUFFLFlBQVk7WUFDbEIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSx1QkFBdUI7WUFDcEMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSxjQUFjO1lBQzNCLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLDJDQUEyQztZQUMzQyxXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFLElBQUk7U0FDZjtLQUNGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDM0MsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQTtBQUVGLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTjtZQUNFLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLFVBQVU7U0FDckI7UUFDRDtZQUNFLFdBQVcsRUFBRSw4QkFBOEI7WUFDM0MsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixRQUFRLEVBQUUsVUFBVTtTQUNyQjtRQUNEO1lBQ0UsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixJQUFJLEVBQUUscUNBQXFDO1lBQzNDLFFBQVEsRUFBRSxVQUFVO1NBQ3JCO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsa0JBQWtCO1lBQy9CLElBQUksRUFBRSxzQ0FBc0M7WUFDNUMsUUFBUSxFQUFFLFVBQVU7U0FDckI7UUFDRDtZQUNFLFdBQVcsRUFBRSwyQkFBMkI7WUFDeEMsSUFBSSxFQUFFLGtEQUFrRDtZQUN4RCxRQUFRLEVBQUUsVUFBVTtTQUNyQjtRQUNEO1lBQ0UsV0FBVyxFQUFFLGVBQWU7WUFDNUIsSUFBSSxFQUFFLDhDQUE4QztZQUNwRCxRQUFRLEVBQUUsVUFBVTtTQUNyQjtRQUNEO1lBQ0UsV0FBVyxFQUFFLHlCQUF5QjtZQUN0QyxJQUFJLEVBQUUsMERBQTBEO1lBQ2hFLFFBQVEsRUFBRSxVQUFVO1NBQ3JCO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLElBQUksRUFBRSwyQkFBMkI7WUFDakMsUUFBUSxFQUFFLFNBQVM7U0FDcEI7UUFDRDtZQUNFLFdBQVcsRUFBRSw2QkFBNkI7WUFDMUMsSUFBSSxFQUFFLFlBQVk7WUFDbEIsUUFBUSxFQUFFLFNBQVM7U0FDcEI7S0FDRixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUN4QyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzdDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgZ2V0RmlsZW5hbWUsIGlzUmVtb3RlUGF0aCB9IGZyb20gXCIuL3BhdGgudHNcIlxuXG5kZXNjcmliZShcImlzUmVtb3RlUGF0aFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImh0dHAgVVJMXCIsXG4gICAgICBwYXRoOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBpc1JlbW90ZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImh0dHBzIFVSTFwiLFxuICAgICAgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHRcIixcbiAgICAgIGlzUmVtb3RlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiZnRwIFVSTFwiLFxuICAgICAgcGF0aDogXCJmdHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBpc1JlbW90ZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImZpbGUgVVJMXCIsXG4gICAgICBwYXRoOiBcImZpbGU6Ly8vcGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgaXNSZW1vdGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiYWJzb2x1dGUgcGF0aFwiLFxuICAgICAgcGF0aDogXCIvcGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgaXNSZW1vdGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicmVsYXRpdmUgcGF0aFwiLFxuICAgICAgcGF0aDogXCJwYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBpc1JlbW90ZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJjdXJyZW50IGRpcmVjdG9yeSBwYXRoXCIsXG4gICAgICBwYXRoOiBcIi4vZmlsZS50eHRcIixcbiAgICAgIGlzUmVtb3RlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhcmVudCBkaXJlY3RvcnkgcGF0aFwiLFxuICAgICAgcGF0aDogXCIuLi9maWxlLnR4dFwiLFxuICAgICAgaXNSZW1vdGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiZW1wdHkgc3RyaW5nXCIsXG4gICAgICBwYXRoOiBcIlwiLFxuICAgICAgaXNSZW1vdGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gbmV3IFVSTCBjb25zaWRlcnMgdGhpcyB0byBiZSBhIHZhbGlkIFVSTFxuICAgICAgZGVzY3JpcHRpb246IFwicHJvdG9jb2wgd2l0aG91dCBzbGFzaGVzXCIsXG4gICAgICBwYXRoOiBcImh0dHA6ZXhhbXBsZS5jb21cIixcbiAgICAgIGlzUmVtb3RlOiB0cnVlLFxuICAgIH0sXG4gIF0pKFwiJGRlc2NyaXB0aW9uXCIsICh7IHBhdGgsIGlzUmVtb3RlIH0pID0+IHtcbiAgICBleHBlY3QoaXNSZW1vdGVQYXRoKHBhdGgpKS50b0JlKGlzUmVtb3RlKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJnZXRGaWxlbmFtZVwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInNpbXBsZSBmaWxlbmFtZVwiLFxuICAgICAgcGF0aDogXCJmaWxlLnR4dFwiLFxuICAgICAgZmlsZW5hbWU6IFwiZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImRpcmVjdG9yeSBwYXRoIHdpdGggZmlsZW5hbWVcIixcbiAgICAgIHBhdGg6IFwic29tZS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBmaWxlbmFtZTogXCJmaWxlLnR4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicmVtb3RlIEhUVFAgVVJMXCIsXG4gICAgICBwYXRoOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBmaWxlbmFtZTogXCJmaWxlLnR4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicmVtb3RlIEhUVFBTIFVSTFwiLFxuICAgICAgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHRcIixcbiAgICAgIGZpbGVuYW1lOiBcImZpbGUudHh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVUkwgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzXCIsXG4gICAgICBwYXRoOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dD9xdWVyeT1wYXJhbVwiLFxuICAgICAgZmlsZW5hbWU6IFwiZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlVSTCB3aXRoIGhhc2hcIixcbiAgICAgIHBhdGg6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0I3NlY3Rpb25cIixcbiAgICAgIGZpbGVuYW1lOiBcImZpbGUudHh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVUkwgd2l0aCBxdWVyeSBhbmQgaGFzaFwiLFxuICAgICAgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHQ/cXVlcnk9cGFyYW0jc2VjdGlvblwiLFxuICAgICAgZmlsZW5hbWU6IFwiZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlVSTCB3aXRoIG5vIGZpbGVuYW1lXCIsXG4gICAgICBwYXRoOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC9cIixcbiAgICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJsb2NhbCBwYXRoIHdpdGggbm8gZmlsZW5hbWVcIixcbiAgICAgIHBhdGg6IFwic29tZS9wYXRoL1wiLFxuICAgICAgZmlsZW5hbWU6IHVuZGVmaW5lZCxcbiAgICB9LFxuICBdKShcIiRkZXNjcmlwdGlvblwiLCAoeyBwYXRoLCBmaWxlbmFtZSB9KSA9PiB7XG4gICAgZXhwZWN0KGdldEZpbGVuYW1lKHBhdGgpKS50b0VxdWFsKGZpbGVuYW1lKVxuICB9KVxufSlcbiJdfQ==
@@ -0,0 +1 @@
1
+ export { node } from "./node.ts";
@@ -0,0 +1,2 @@
1
+ export { node } from "./node.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wbGF0Zm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgbm9kZSB9IGZyb20gXCIuL25vZGUudHNcIlxuIl19
@@ -0,0 +1,130 @@
1
+ export declare const node: {
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
+ readdir(path: import("fs").PathLike, options: {
36
+ encoding: "buffer";
37
+ withFileTypes: true;
38
+ recursive?: boolean | undefined;
39
+ }): Promise<import("fs").Dirent<Buffer>[]>;
40
+ readlink(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
41
+ readlink(path: import("fs").PathLike, options: import("fs").BufferEncodingOption): Promise<Buffer>;
42
+ readlink(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | string | null): Promise<string | Buffer>;
43
+ symlink(target: import("fs").PathLike, path: import("fs").PathLike, type?: string | null): Promise<void>;
44
+ lstat(path: import("fs").PathLike, opts?: import("fs").StatOptions & {
45
+ bigint?: false | undefined;
46
+ }): Promise<import("fs").Stats>;
47
+ lstat(path: import("fs").PathLike, opts: import("fs").StatOptions & {
48
+ bigint: true;
49
+ }): Promise<import("fs").BigIntStats>;
50
+ lstat(path: import("fs").PathLike, opts?: import("fs").StatOptions): Promise<import("fs").Stats | import("fs").BigIntStats>;
51
+ stat(path: import("fs").PathLike, opts?: import("fs").StatOptions & {
52
+ bigint?: false | undefined;
53
+ }): Promise<import("fs").Stats>;
54
+ stat(path: import("fs").PathLike, opts: import("fs").StatOptions & {
55
+ bigint: true;
56
+ }): Promise<import("fs").BigIntStats>;
57
+ stat(path: import("fs").PathLike, opts?: import("fs").StatOptions): Promise<import("fs").Stats | import("fs").BigIntStats>;
58
+ statfs(path: import("fs").PathLike, opts?: import("fs").StatFsOptions & {
59
+ bigint?: false | undefined;
60
+ }): Promise<import("fs").StatsFs>;
61
+ statfs(path: import("fs").PathLike, opts: import("fs").StatFsOptions & {
62
+ bigint: true;
63
+ }): Promise<import("fs").BigIntStatsFs>;
64
+ statfs(path: import("fs").PathLike, opts?: import("fs").StatFsOptions): Promise<import("fs").StatsFs | import("fs").BigIntStatsFs>;
65
+ link(existingPath: import("fs").PathLike, newPath: import("fs").PathLike): Promise<void>;
66
+ unlink(path: import("fs").PathLike): Promise<void>;
67
+ chmod(path: import("fs").PathLike, mode: import("fs").Mode): Promise<void>;
68
+ lchmod(path: import("fs").PathLike, mode: import("fs").Mode): Promise<void>;
69
+ lchown(path: import("fs").PathLike, uid: number, gid: number): Promise<void>;
70
+ lutimes(path: import("fs").PathLike, atime: import("fs").TimeLike, mtime: import("fs").TimeLike): Promise<void>;
71
+ chown(path: import("fs").PathLike, uid: number, gid: number): Promise<void>;
72
+ utimes(path: import("fs").PathLike, atime: import("fs").TimeLike, mtime: import("fs").TimeLike): Promise<void>;
73
+ realpath(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
74
+ realpath(path: import("fs").PathLike, options: import("fs").BufferEncodingOption): Promise<Buffer>;
75
+ realpath(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
76
+ mkdtemp(prefix: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
77
+ mkdtemp(prefix: string, options: import("fs").BufferEncodingOption): Promise<Buffer>;
78
+ mkdtemp(prefix: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
79
+ 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 & {
80
+ mode?: import("fs").Mode | undefined;
81
+ flag?: import("fs").OpenMode | undefined;
82
+ flush?: boolean | undefined;
83
+ } & import("events").Abortable) | BufferEncoding | null): Promise<void>;
84
+ appendFile(path: import("fs").PathLike | import("fs/promises").FileHandle, data: string | Uint8Array, options?: (import("fs").ObjectEncodingOptions & import("fs/promises").FlagAndOpenMode & {
85
+ flush?: boolean | undefined;
86
+ }) | BufferEncoding | null): Promise<void>;
87
+ readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options?: ({
88
+ encoding?: null | undefined;
89
+ flag?: import("fs").OpenMode | undefined;
90
+ } & import("events").Abortable) | null): Promise<Buffer>;
91
+ readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options: ({
92
+ encoding: BufferEncoding;
93
+ flag?: import("fs").OpenMode | undefined;
94
+ } & import("events").Abortable) | BufferEncoding): Promise<string>;
95
+ readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options?: (import("fs").ObjectEncodingOptions & import("events").Abortable & {
96
+ flag?: import("fs").OpenMode | undefined;
97
+ }) | BufferEncoding | null): Promise<string | Buffer>;
98
+ opendir(path: import("fs").PathLike, options?: import("fs").OpenDirOptions): Promise<import("fs").Dir>;
99
+ watch(filename: import("fs").PathLike, options: (import("fs").WatchOptions & {
100
+ encoding: "buffer";
101
+ }) | "buffer"): AsyncIterable<import("fs/promises").FileChangeInfo<Buffer>>;
102
+ watch(filename: import("fs").PathLike, options?: import("fs").WatchOptions | BufferEncoding): AsyncIterable<import("fs/promises").FileChangeInfo<string>>;
103
+ watch(filename: import("fs").PathLike, options: import("fs").WatchOptions | string): AsyncIterable<import("fs/promises").FileChangeInfo<string>> | AsyncIterable<import("fs/promises").FileChangeInfo<Buffer>>;
104
+ cp(source: string | URL, destination: string | URL, opts?: import("fs").CopyOptions): Promise<void>;
105
+ glob(pattern: string | readonly string[]): NodeJS.AsyncIterator<string>;
106
+ glob(pattern: string | readonly string[], options: import("fs").GlobOptionsWithFileTypes): NodeJS.AsyncIterator<import("fs").Dirent>;
107
+ glob(pattern: string | readonly string[], options: import("fs").GlobOptionsWithoutFileTypes): NodeJS.AsyncIterator<string>;
108
+ glob(pattern: string | readonly string[], options: import("fs").GlobOptions): NodeJS.AsyncIterator<import("fs").Dirent | string>;
109
+ constants: typeof import("fs").constants;
110
+ };
111
+ path: {
112
+ default: import("path").PlatformPath;
113
+ normalize(path: string): string;
114
+ join(...paths: string[]): string;
115
+ resolve(...paths: string[]): string;
116
+ matchesGlob(path: string, pattern: string): boolean;
117
+ isAbsolute(path: string): boolean;
118
+ relative(from: string, to: string): string;
119
+ dirname(path: string): string;
120
+ basename(path: string, suffix?: string): string;
121
+ extname(path: string): string;
122
+ sep: "\\" | "/";
123
+ delimiter: ";" | ":";
124
+ parse(path: string): import("path").ParsedPath;
125
+ format(pathObject: import("path").FormatInputPathObject): string;
126
+ toNamespacedPath(path: string): string;
127
+ posix: import("path").PlatformPath;
128
+ win32: import("path").PlatformPath;
129
+ };
130
+ } | undefined;
@@ -0,0 +1,10 @@
1
+ export const node = await loadNodeApis();
2
+ async function loadNodeApis() {
3
+ if (globalThis.process) {
4
+ const fs = await import("node:fs/promises");
5
+ const path = await import("node:path");
6
+ return { fs, path };
7
+ }
8
+ return undefined;
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BsYXRmb3JtL25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUE7QUFFeEMsS0FBSyxVQUFVLFlBQVk7SUFDekIsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN0QyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IG5vZGUgPSBhd2FpdCBsb2FkTm9kZUFwaXMoKVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkTm9kZUFwaXMoKSB7XG4gIGlmIChnbG9iYWxUaGlzLnByb2Nlc3MpIHtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIilcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpXG4gICAgcmV0dXJuIHsgZnMsIHBhdGggfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { node } from "./node.js";
3
+ describe("loadNodeApis", () => {
4
+ it("should return node APIs when running in Node.js environment", async () => {
5
+ expect(node).toBeDefined();
6
+ expect(node?.fs).toBeDefined();
7
+ expect(node?.path).toBeDefined();
8
+ });
9
+ it("should have fs.readFile function", async () => {
10
+ expect(typeof node?.fs.readFile).toBe("function");
11
+ });
12
+ it("should have path.join function", async () => {
13
+ expect(typeof node?.path.join).toBe("function");
14
+ });
15
+ });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGxhdGZvcm0vbm9kZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWhDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDMUIsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUM5QixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hELE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ25ELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2pELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgbm9kZSB9IGZyb20gXCIuL25vZGUudHNcIlxuXG5kZXNjcmliZShcImxvYWROb2RlQXBpc1wiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIHJldHVybiBub2RlIEFQSXMgd2hlbiBydW5uaW5nIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChub2RlKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KG5vZGU/LmZzKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KG5vZGU/LnBhdGgpLnRvQmVEZWZpbmVkKClcbiAgfSlcblxuICBpdChcInNob3VsZCBoYXZlIGZzLnJlYWRGaWxlIGZ1bmN0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBleHBlY3QodHlwZW9mIG5vZGU/LmZzLnJlYWRGaWxlKS50b0JlKFwiZnVuY3Rpb25cIilcbiAgfSlcblxuICBpdChcInNob3VsZCBoYXZlIHBhdGguam9pbiBmdW5jdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KHR5cGVvZiBub2RlPy5wYXRoLmpvaW4pLnRvQmUoXCJmdW5jdGlvblwiKVxuICB9KVxufSlcbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};