@photostructure/fs-metadata 0.1.2 → 0.1.3

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 (259) hide show
  1. package/binding.gyp +13 -0
  2. package/dist/cjs/array.d.ts +31 -0
  3. package/dist/cjs/array.d.ts.map +1 -0
  4. package/dist/cjs/array.js +57 -0
  5. package/dist/cjs/array.js.map +1 -0
  6. package/dist/cjs/async.d.ts +43 -0
  7. package/dist/cjs/async.d.ts.map +1 -0
  8. package/dist/cjs/async.js +116 -0
  9. package/dist/cjs/async.js.map +1 -0
  10. package/dist/cjs/cache.d.ts +5 -0
  11. package/dist/cjs/cache.d.ts.map +1 -0
  12. package/dist/cjs/cache.js +28 -0
  13. package/dist/cjs/cache.js.map +1 -0
  14. package/dist/cjs/debuglog.d.ts +9 -0
  15. package/dist/cjs/debuglog.d.ts.map +1 -0
  16. package/dist/cjs/debuglog.js +35 -0
  17. package/dist/cjs/debuglog.js.map +1 -0
  18. package/dist/cjs/defer.d.ts +12 -0
  19. package/dist/cjs/defer.d.ts.map +1 -0
  20. package/dist/cjs/defer.js +26 -0
  21. package/dist/cjs/defer.js.map +1 -0
  22. package/dist/cjs/error.d.ts +18 -0
  23. package/dist/cjs/error.d.ts.map +1 -0
  24. package/dist/cjs/error.js +63 -0
  25. package/dist/cjs/error.js.map +1 -0
  26. package/dist/cjs/exports.d.ts +99 -0
  27. package/dist/cjs/exports.d.ts.map +1 -0
  28. package/dist/cjs/exports.js +14 -0
  29. package/dist/cjs/exports.js.map +1 -0
  30. package/dist/cjs/fs.d.ts +23 -0
  31. package/dist/cjs/fs.d.ts.map +1 -0
  32. package/dist/cjs/fs.js +81 -0
  33. package/dist/cjs/fs.js.map +1 -0
  34. package/dist/cjs/glob.d.ts +18 -0
  35. package/dist/cjs/glob.d.ts.map +1 -0
  36. package/dist/cjs/glob.js +117 -0
  37. package/dist/cjs/glob.js.map +1 -0
  38. package/dist/cjs/hidden.d.ts +67 -0
  39. package/dist/cjs/hidden.d.ts.map +1 -0
  40. package/dist/cjs/hidden.js +163 -0
  41. package/dist/cjs/hidden.js.map +1 -0
  42. package/dist/cjs/index.cjs +23 -0
  43. package/dist/cjs/index.cjs.map +1 -0
  44. package/dist/cjs/index.d.cts.map +1 -0
  45. package/dist/cjs/linux/dev_disk.d.ts +14 -0
  46. package/dist/cjs/linux/dev_disk.d.ts.map +1 -0
  47. package/dist/cjs/linux/dev_disk.js +66 -0
  48. package/dist/cjs/linux/dev_disk.js.map +1 -0
  49. package/dist/cjs/linux/mount_points.d.ts +7 -0
  50. package/dist/cjs/linux/mount_points.d.ts.map +1 -0
  51. package/dist/cjs/linux/mount_points.js +81 -0
  52. package/dist/cjs/linux/mount_points.js.map +1 -0
  53. package/dist/cjs/linux/mtab.d.ts +48 -0
  54. package/dist/cjs/linux/mtab.d.ts.map +1 -0
  55. package/dist/cjs/linux/mtab.js +88 -0
  56. package/dist/cjs/linux/mtab.js.map +1 -0
  57. package/dist/cjs/mount_point.d.ts +56 -0
  58. package/dist/cjs/mount_point.d.ts.map +1 -0
  59. package/dist/cjs/mount_point.js +67 -0
  60. package/dist/cjs/mount_point.js.map +1 -0
  61. package/dist/cjs/number.d.ts +8 -0
  62. package/dist/cjs/number.d.ts.map +1 -0
  63. package/dist/cjs/number.js +41 -0
  64. package/dist/cjs/number.js.map +1 -0
  65. package/dist/cjs/object.d.ts +18 -0
  66. package/dist/cjs/object.d.ts.map +1 -0
  67. package/dist/cjs/object.js +59 -0
  68. package/dist/cjs/object.js.map +1 -0
  69. package/dist/cjs/options.d.ts +80 -0
  70. package/dist/cjs/options.d.ts.map +1 -0
  71. package/dist/cjs/options.js +115 -0
  72. package/dist/cjs/options.js.map +1 -0
  73. package/dist/cjs/path.d.ts +18 -0
  74. package/dist/cjs/path.d.ts.map +1 -0
  75. package/dist/cjs/path.js +50 -0
  76. package/dist/cjs/path.js.map +1 -0
  77. package/dist/cjs/platform.d.ts +4 -0
  78. package/dist/cjs/platform.d.ts.map +1 -0
  79. package/dist/cjs/platform.js +10 -0
  80. package/dist/cjs/platform.js.map +1 -0
  81. package/dist/cjs/random.d.ts +13 -0
  82. package/dist/cjs/random.d.ts.map +1 -0
  83. package/dist/cjs/random.js +43 -0
  84. package/dist/cjs/random.js.map +1 -0
  85. package/dist/cjs/remote_info.d.ts +39 -0
  86. package/dist/cjs/remote_info.d.ts.map +1 -0
  87. package/dist/cjs/remote_info.js +123 -0
  88. package/dist/cjs/remote_info.js.map +1 -0
  89. package/dist/cjs/setup.d.ts +3 -0
  90. package/dist/cjs/setup.d.ts.map +1 -0
  91. package/dist/cjs/setup.js +47 -0
  92. package/dist/cjs/setup.js.map +1 -0
  93. package/dist/cjs/string.d.ts +38 -0
  94. package/dist/cjs/string.d.ts.map +1 -0
  95. package/dist/cjs/string.js +89 -0
  96. package/dist/cjs/string.js.map +1 -0
  97. package/dist/cjs/string_enum.d.ts +20 -0
  98. package/dist/cjs/string_enum.d.ts.map +1 -0
  99. package/dist/cjs/string_enum.js +27 -0
  100. package/dist/cjs/string_enum.js.map +1 -0
  101. package/dist/cjs/system_volume.d.ts +15 -0
  102. package/dist/cjs/system_volume.d.ts.map +1 -0
  103. package/dist/cjs/system_volume.js +44 -0
  104. package/dist/cjs/system_volume.js.map +1 -0
  105. package/dist/cjs/types/native_bindings.d.ts +52 -0
  106. package/dist/cjs/types/native_bindings.d.ts.map +1 -0
  107. package/dist/cjs/types/native_bindings.js +4 -0
  108. package/dist/cjs/types/native_bindings.js.map +1 -0
  109. package/dist/cjs/unc.d.ts +12 -0
  110. package/dist/cjs/unc.d.ts.map +1 -0
  111. package/dist/cjs/unc.js +52 -0
  112. package/dist/cjs/unc.js.map +1 -0
  113. package/dist/cjs/units.d.ts +17 -0
  114. package/dist/cjs/units.d.ts.map +1 -0
  115. package/dist/cjs/units.js +35 -0
  116. package/dist/cjs/units.js.map +1 -0
  117. package/dist/cjs/uuid.d.ts +17 -0
  118. package/dist/cjs/uuid.d.ts.map +1 -0
  119. package/dist/cjs/uuid.js +25 -0
  120. package/dist/cjs/uuid.js.map +1 -0
  121. package/dist/cjs/volume_health_status.d.ts +25 -0
  122. package/dist/cjs/volume_health_status.d.ts.map +1 -0
  123. package/dist/cjs/volume_health_status.js +50 -0
  124. package/dist/cjs/volume_health_status.js.map +1 -0
  125. package/dist/cjs/volume_metadata.d.ts +55 -0
  126. package/dist/cjs/volume_metadata.d.ts.map +1 -0
  127. package/dist/cjs/volume_metadata.js +169 -0
  128. package/dist/cjs/volume_metadata.js.map +1 -0
  129. package/dist/esm/array.d.ts +31 -0
  130. package/dist/esm/array.d.ts.map +1 -0
  131. package/dist/esm/array.js +50 -0
  132. package/dist/esm/array.js.map +1 -0
  133. package/dist/esm/async.d.ts +43 -0
  134. package/dist/esm/async.d.ts.map +1 -0
  135. package/dist/esm/async.js +109 -0
  136. package/dist/esm/async.js.map +1 -0
  137. package/dist/esm/cache.d.ts +5 -0
  138. package/dist/esm/cache.d.ts.map +1 -0
  139. package/dist/esm/cache.js +25 -0
  140. package/dist/esm/cache.js.map +1 -0
  141. package/dist/esm/debuglog.d.ts +9 -0
  142. package/dist/esm/debuglog.d.ts.map +1 -0
  143. package/dist/esm/debuglog.js +30 -0
  144. package/dist/esm/debuglog.js.map +1 -0
  145. package/dist/esm/defer.d.ts +12 -0
  146. package/dist/esm/defer.d.ts.map +1 -0
  147. package/dist/esm/defer.js +23 -0
  148. package/dist/esm/defer.js.map +1 -0
  149. package/dist/esm/error.d.ts +18 -0
  150. package/dist/esm/error.d.ts.map +1 -0
  151. package/dist/esm/error.js +58 -0
  152. package/dist/esm/error.js.map +1 -0
  153. package/dist/esm/exports.d.ts +99 -0
  154. package/dist/esm/exports.d.ts.map +1 -0
  155. package/dist/esm/exports.js +4 -0
  156. package/dist/esm/exports.js.map +1 -0
  157. package/dist/esm/fs.d.ts +23 -0
  158. package/dist/esm/fs.d.ts.map +1 -0
  159. package/dist/esm/fs.js +73 -0
  160. package/dist/esm/fs.js.map +1 -0
  161. package/dist/esm/glob.d.ts +18 -0
  162. package/dist/esm/glob.d.ts.map +1 -0
  163. package/dist/esm/glob.js +113 -0
  164. package/dist/esm/glob.js.map +1 -0
  165. package/dist/esm/hidden.d.ts +67 -0
  166. package/dist/esm/hidden.d.ts.map +1 -0
  167. package/dist/esm/hidden.js +155 -0
  168. package/dist/esm/hidden.js.map +1 -0
  169. package/dist/esm/index.d.ts +3 -0
  170. package/dist/esm/index.d.ts.map +1 -0
  171. package/dist/esm/index.js +7 -0
  172. package/dist/esm/index.js.map +1 -0
  173. package/dist/esm/linux/dev_disk.d.ts +14 -0
  174. package/dist/esm/linux/dev_disk.d.ts.map +1 -0
  175. package/dist/esm/linux/dev_disk.js +61 -0
  176. package/dist/esm/linux/dev_disk.js.map +1 -0
  177. package/dist/esm/linux/mount_points.d.ts +7 -0
  178. package/dist/esm/linux/mount_points.d.ts.map +1 -0
  179. package/dist/esm/linux/mount_points.js +77 -0
  180. package/dist/esm/linux/mount_points.js.map +1 -0
  181. package/dist/esm/linux/mtab.d.ts +48 -0
  182. package/dist/esm/linux/mtab.d.ts.map +1 -0
  183. package/dist/esm/linux/mtab.js +82 -0
  184. package/dist/esm/linux/mtab.js.map +1 -0
  185. package/dist/esm/mount_point.d.ts +56 -0
  186. package/dist/esm/mount_point.d.ts.map +1 -0
  187. package/dist/esm/mount_point.js +63 -0
  188. package/dist/esm/mount_point.js.map +1 -0
  189. package/dist/esm/number.d.ts +8 -0
  190. package/dist/esm/number.d.ts.map +1 -0
  191. package/dist/esm/number.js +32 -0
  192. package/dist/esm/number.js.map +1 -0
  193. package/dist/esm/object.d.ts +18 -0
  194. package/dist/esm/object.d.ts.map +1 -0
  195. package/dist/esm/object.js +52 -0
  196. package/dist/esm/object.js.map +1 -0
  197. package/dist/esm/options.d.ts +80 -0
  198. package/dist/esm/options.d.ts.map +1 -0
  199. package/dist/esm/options.js +111 -0
  200. package/dist/esm/options.js.map +1 -0
  201. package/dist/esm/path.d.ts +18 -0
  202. package/dist/esm/path.d.ts.map +1 -0
  203. package/dist/esm/path.js +44 -0
  204. package/dist/esm/path.js.map +1 -0
  205. package/dist/esm/platform.d.ts +4 -0
  206. package/dist/esm/platform.d.ts.map +1 -0
  207. package/dist/esm/platform.js +7 -0
  208. package/dist/esm/platform.js.map +1 -0
  209. package/dist/esm/random.d.ts +13 -0
  210. package/dist/esm/random.d.ts.map +1 -0
  211. package/dist/esm/random.js +37 -0
  212. package/dist/esm/random.js.map +1 -0
  213. package/dist/esm/remote_info.d.ts +39 -0
  214. package/dist/esm/remote_info.d.ts.map +1 -0
  215. package/dist/esm/remote_info.js +116 -0
  216. package/dist/esm/remote_info.js.map +1 -0
  217. package/dist/esm/setup.d.ts +3 -0
  218. package/dist/esm/setup.d.ts.map +1 -0
  219. package/dist/esm/setup.js +41 -0
  220. package/dist/esm/setup.js.map +1 -0
  221. package/dist/esm/string.d.ts +38 -0
  222. package/dist/esm/string.d.ts.map +1 -0
  223. package/dist/esm/string.js +78 -0
  224. package/dist/esm/string.js.map +1 -0
  225. package/dist/esm/string_enum.d.ts +20 -0
  226. package/dist/esm/string_enum.d.ts.map +1 -0
  227. package/dist/esm/string_enum.js +24 -0
  228. package/dist/esm/string_enum.js.map +1 -0
  229. package/dist/esm/system_volume.d.ts +15 -0
  230. package/dist/esm/system_volume.d.ts.map +1 -0
  231. package/dist/esm/system_volume.js +40 -0
  232. package/dist/esm/system_volume.js.map +1 -0
  233. package/dist/esm/types/native_bindings.d.ts +52 -0
  234. package/dist/esm/types/native_bindings.d.ts.map +1 -0
  235. package/dist/esm/types/native_bindings.js +3 -0
  236. package/dist/esm/types/native_bindings.js.map +1 -0
  237. package/dist/esm/unc.d.ts +12 -0
  238. package/dist/esm/unc.d.ts.map +1 -0
  239. package/dist/esm/unc.js +49 -0
  240. package/dist/esm/unc.js.map +1 -0
  241. package/dist/esm/units.d.ts +17 -0
  242. package/dist/esm/units.d.ts.map +1 -0
  243. package/dist/esm/units.js +31 -0
  244. package/dist/esm/units.js.map +1 -0
  245. package/dist/esm/uuid.d.ts +17 -0
  246. package/dist/esm/uuid.d.ts.map +1 -0
  247. package/dist/esm/uuid.js +22 -0
  248. package/dist/esm/uuid.js.map +1 -0
  249. package/dist/esm/volume_health_status.d.ts +25 -0
  250. package/dist/esm/volume_health_status.d.ts.map +1 -0
  251. package/dist/esm/volume_health_status.js +46 -0
  252. package/dist/esm/volume_health_status.js.map +1 -0
  253. package/dist/esm/volume_metadata.d.ts +55 -0
  254. package/dist/esm/volume_metadata.d.ts.map +1 -0
  255. package/dist/esm/volume_metadata.js +164 -0
  256. package/dist/esm/volume_metadata.js.map +1 -0
  257. package/package.json +7 -8
  258. package/prebuilds/darwin-arm64/@photostructure+fs-metadata.glibc.node +0 -0
  259. package/prebuilds/win32-x64/@photostructure+fs-metadata.glibc.node +0 -0
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VolumeHealthStatuses = exports.TimeoutMsDefault = exports.SystemPathPatternsDefault = exports.SystemFsTypesDefault = exports.optionsWithDefaults = exports.OptionsDefault = exports.LinuxMountTablePathsDefault = exports.IncludeSystemVolumesDefault = void 0;
4
+ const options_js_1 = require("./options.js");
5
+ Object.defineProperty(exports, "IncludeSystemVolumesDefault", { enumerable: true, get: function () { return options_js_1.IncludeSystemVolumesDefault; } });
6
+ Object.defineProperty(exports, "LinuxMountTablePathsDefault", { enumerable: true, get: function () { return options_js_1.LinuxMountTablePathsDefault; } });
7
+ Object.defineProperty(exports, "OptionsDefault", { enumerable: true, get: function () { return options_js_1.OptionsDefault; } });
8
+ Object.defineProperty(exports, "optionsWithDefaults", { enumerable: true, get: function () { return options_js_1.optionsWithDefaults; } });
9
+ Object.defineProperty(exports, "SystemFsTypesDefault", { enumerable: true, get: function () { return options_js_1.SystemFsTypesDefault; } });
10
+ Object.defineProperty(exports, "SystemPathPatternsDefault", { enumerable: true, get: function () { return options_js_1.SystemPathPatternsDefault; } });
11
+ Object.defineProperty(exports, "TimeoutMsDefault", { enumerable: true, get: function () { return options_js_1.TimeoutMsDefault; } });
12
+ const volume_health_status_js_1 = require("./volume_health_status.js");
13
+ Object.defineProperty(exports, "VolumeHealthStatuses", { enumerable: true, get: function () { return volume_health_status_js_1.VolumeHealthStatuses; } });
14
+ //# sourceMappingURL=exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":";;;AAGA,6CAQsB;AAqIpB,4GA5IA,wCAA2B,OA4IA;AAC3B,4GA5IA,wCAA2B,OA4IA;AAC3B,+FA5IA,2BAAc,OA4IA;AACd,oGA5IA,gCAAmB,OA4IA;AACnB,qGA5IA,iCAAoB,OA4IA;AACpB,0GA5IA,sCAAyB,OA4IA;AACzB,iGA5IA,6BAAgB,OA4IA;AAnIlB,uEAAiE;AAoI/D,qGApIO,8CAAoB,OAoIP"}
@@ -0,0 +1,23 @@
1
+ import { type PathLike, type StatOptions, Stats } from "node:fs";
2
+ /**
3
+ * Wrapping node:fs/promises.stat() so we can mock it in tests.
4
+ */
5
+ export declare function statAsync(path: PathLike, options?: StatOptions & {
6
+ bigint?: false;
7
+ }): Promise<Stats>;
8
+ export declare function canStatAsync(path: string): Promise<boolean>;
9
+ /**
10
+ * @return true if `path` exists and is a directory
11
+ */
12
+ export declare function isDirectory(path: string): Promise<boolean>;
13
+ /**
14
+ * @return the first directory containing `file` or an empty string
15
+ */
16
+ export declare function findAncestorDir(dir: string, file: string): Promise<string | undefined>;
17
+ export declare function existsSync(path: string): boolean;
18
+ /**
19
+ * @return `true` if `dir` exists and is a directory and at least one entry can be read.
20
+ * @throws {Error} if `dir` does not exist or is not a directory or cannot be read.
21
+ */
22
+ export declare function canReaddir(dir: string, timeoutMs: number): Promise<true>;
23
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/fs.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,EAEN,MAAM,SAAS,CAAC;AAKjB;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GACzC,OAAO,CAAC,KAAK,CAAC,CAEhB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMjE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMhE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAMf"}
package/dist/cjs/fs.js ADDED
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ // src/fs.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.statAsync = statAsync;
5
+ exports.canStatAsync = canStatAsync;
6
+ exports.isDirectory = isDirectory;
7
+ exports.findAncestorDir = findAncestorDir;
8
+ exports.existsSync = existsSync;
9
+ exports.canReaddir = canReaddir;
10
+ const node_fs_1 = require("node:fs");
11
+ const promises_1 = require("node:fs/promises");
12
+ const node_path_1 = require("node:path");
13
+ const async_js_1 = require("./async.js");
14
+ /**
15
+ * Wrapping node:fs/promises.stat() so we can mock it in tests.
16
+ */
17
+ async function statAsync(path, options) {
18
+ return (0, promises_1.stat)(path, options);
19
+ }
20
+ async function canStatAsync(path) {
21
+ try {
22
+ return null != (await statAsync(path));
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ /**
29
+ * @return true if `path` exists and is a directory
30
+ */
31
+ async function isDirectory(path) {
32
+ try {
33
+ return (await statAsync(path))?.isDirectory() === true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ /**
40
+ * @return the first directory containing `file` or an empty string
41
+ */
42
+ async function findAncestorDir(dir, file) {
43
+ dir = (0, node_path_1.resolve)(dir);
44
+ try {
45
+ const s = await statAsync((0, node_path_1.join)(dir, file));
46
+ if (s.isFile())
47
+ return dir;
48
+ }
49
+ catch {
50
+ // fall through
51
+ }
52
+ const parent = (0, node_path_1.resolve)(dir, "..");
53
+ return parent === dir ? undefined : findAncestorDir(parent, file);
54
+ }
55
+ function existsSync(path) {
56
+ return (0, node_fs_1.statSync)(path, { throwIfNoEntry: false }) != null;
57
+ }
58
+ /**
59
+ * @return `true` if `dir` exists and is a directory and at least one entry can be read.
60
+ * @throws {Error} if `dir` does not exist or is not a directory or cannot be read.
61
+ */
62
+ async function canReaddir(dir, timeoutMs) {
63
+ return (0, async_js_1.withTimeout)({
64
+ desc: "canReaddir()",
65
+ promise: _canReaddir(dir),
66
+ timeoutMs,
67
+ });
68
+ }
69
+ async function _canReaddir(dir) {
70
+ let d = undefined;
71
+ try {
72
+ d = await (0, promises_1.opendir)(dir);
73
+ await d.read();
74
+ return true;
75
+ }
76
+ finally {
77
+ if (d != null)
78
+ void d.close();
79
+ }
80
+ }
81
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/fs.ts"],"names":[],"mappings":";AAAA,YAAY;;AAgBZ,8BAKC;AAED,oCAMC;AAKD,kCAMC;AAKD,0CAaC;AAED,gCAEC;AAMD,gCASC;AA3ED,qCAMiB;AACjB,+CAAiD;AACjD,yCAA0C;AAC1C,yCAAyC;AAEzC;;GAEG;AACI,KAAK,UAAU,SAAS,CAC7B,IAAc,EACd,OAA0C;IAE1C,OAAO,IAAA,eAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,IAAY;IAEZ,GAAG,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,MAAM,EAAE;YAAE,OAAO,GAAG,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAClC,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,IAAA,kBAAQ,EAAC,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,SAAiB;IAEjB,OAAO,IAAA,sBAAW,EAAC;QACjB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC;QACzB,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,IAAI,CAAC,GAAoB,SAAS,CAAC;IACnC,IAAI,CAAC;QACH,CAAC,GAAG,MAAM,IAAA,kBAAO,EAAC,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,IAAI,IAAI;YAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Compiles an array of glob patterns into a single regular expression.
3
+ *
4
+ * The function supports the following patterns:
5
+ * - `**` matches any number of directories.
6
+ * - `*` matches any number of characters except for `/`.
7
+ * - `?` matches exactly one character except for `/`.
8
+ * - `.` is escaped to match a literal period.
9
+ * - `/` at the end of the pattern matches either a slash or the end of the string.
10
+ * - Other regex special characters are escaped.
11
+ *
12
+ * @param patterns - An array of glob patterns to compile.
13
+ * @returns A `RegExp` object that matches any of the provided patterns.
14
+ */
15
+ export declare function compileGlob(patterns: string[] | readonly string[] | undefined): RegExp;
16
+ export declare const AlwaysMatchRE: RegExp;
17
+ export declare const NeverMatchRE: RegExp;
18
+ //# sourceMappingURL=glob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,GACjD,MAAM,CA+BR;AAuED,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,eAAO,MAAM,YAAY,QAAS,CAAC"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ // src/glob.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NeverMatchRE = exports.AlwaysMatchRE = void 0;
5
+ exports.compileGlob = compileGlob;
6
+ const platform_js_1 = require("./platform.js");
7
+ const string_js_1 = require("./string.js");
8
+ const cache = new Map();
9
+ /**
10
+ * Compiles an array of glob patterns into a single regular expression.
11
+ *
12
+ * The function supports the following patterns:
13
+ * - `**` matches any number of directories.
14
+ * - `*` matches any number of characters except for `/`.
15
+ * - `?` matches exactly one character except for `/`.
16
+ * - `.` is escaped to match a literal period.
17
+ * - `/` at the end of the pattern matches either a slash or the end of the string.
18
+ * - Other regex special characters are escaped.
19
+ *
20
+ * @param patterns - An array of glob patterns to compile.
21
+ * @returns A `RegExp` object that matches any of the provided patterns.
22
+ */
23
+ function compileGlob(patterns) {
24
+ if (patterns == null || patterns.length === 0) {
25
+ return exports.NeverMatchRE;
26
+ }
27
+ const patternsKey = JSON.stringify(patterns);
28
+ {
29
+ const prior = cache.get(patternsKey);
30
+ if (prior != null) {
31
+ return prior;
32
+ }
33
+ }
34
+ const sorted = patterns.slice().filter(string_js_1.isNotBlank).sort();
35
+ const sortedKey = JSON.stringify(sorted);
36
+ {
37
+ const prior = cache.get(sortedKey);
38
+ if (prior != null) {
39
+ cache.set(patternsKey, prior);
40
+ return prior;
41
+ }
42
+ }
43
+ const result = _compileGlob(sorted);
44
+ if (cache.size > 256) {
45
+ // avoid unbounded memory usage
46
+ cache.clear();
47
+ }
48
+ cache.set(patternsKey, result);
49
+ cache.set(sortedKey, result);
50
+ return result;
51
+ }
52
+ function _compileGlob(patterns) {
53
+ const regexPatterns = patterns.map((pattern) => {
54
+ let regex = "";
55
+ let i = 0;
56
+ while (i < pattern.length) {
57
+ // Handle '**' pattern
58
+ if (pattern[i] === "*" && pattern[i + 1] === "*") {
59
+ regex += ".*";
60
+ i += 2;
61
+ if (pattern[i] === "/") {
62
+ i++; // Skip the slash after **
63
+ }
64
+ continue;
65
+ }
66
+ // Handle single '*' pattern
67
+ if (pattern[i] === "*") {
68
+ regex += "[^/]*";
69
+ i++;
70
+ continue;
71
+ }
72
+ // Handle '?' pattern
73
+ if (pattern[i] === "?") {
74
+ regex += "[^/]";
75
+ i++;
76
+ continue;
77
+ }
78
+ // Handle period
79
+ if (pattern[i] === ".") {
80
+ regex += "\\.";
81
+ i++;
82
+ continue;
83
+ }
84
+ // Handle end of directory pattern
85
+ if (pattern[i] === "/") {
86
+ if (i === pattern.length - 1) {
87
+ regex += "(?:/|$)";
88
+ i++;
89
+ continue;
90
+ }
91
+ else if (platform_js_1.isWindows) {
92
+ regex += "[\\/\\\\]";
93
+ i++;
94
+ continue;
95
+ }
96
+ }
97
+ // Escape other regex special characters
98
+ if (/[+^${}()|[\]\\]/.test(pattern[i])) {
99
+ regex += "\\" + pattern[i];
100
+ i++;
101
+ continue;
102
+ }
103
+ // Add other characters as-is
104
+ regex += pattern[i];
105
+ i++;
106
+ }
107
+ return regex;
108
+ });
109
+ const final = regexPatterns.filter((ea) => ea.length > 0);
110
+ return final.length === 0
111
+ ? // Empty pattern matches nothing
112
+ exports.NeverMatchRE // Case insensitive for Windows paths
113
+ : new RegExp(`^(?:${final.join("|")})$`, "i");
114
+ }
115
+ exports.AlwaysMatchRE = /(?:)/;
116
+ exports.NeverMatchRE = /(?!)/;
117
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { NativeBindingsFn } from "./types/native_bindings.js";
2
+ /**
3
+ * Represents the detailed state of a file or directory's hidden attribute
4
+ */
5
+ export interface HiddenMetadata {
6
+ /**
7
+ * Whether the item is considered hidden by any method
8
+ */
9
+ hidden: boolean;
10
+ /**
11
+ * Whether the item has a dot prefix (POSIX-style hidden). Windows doesn't
12
+ * care about dot prefixes.
13
+ */
14
+ dotPrefix: boolean;
15
+ /**
16
+ * Whether the item has system hidden flags set, like via `chflags` on macOS
17
+ * or on Windows via `GetFileAttributesW`
18
+ */
19
+ systemFlag: boolean;
20
+ /**
21
+ * Indicates which hiding methods are supported on the current platform
22
+ */
23
+ supported: {
24
+ /**
25
+ * Whether dot prefix hiding is supported on the current operating system
26
+ */
27
+ dotPrefix: boolean;
28
+ /**
29
+ * Whether system flag hiding is supported
30
+ */
31
+ systemFlag: boolean;
32
+ };
33
+ }
34
+ export declare const LocalSupport: {
35
+ /**
36
+ * Whether dot prefix hiding is supported on the current operating system
37
+ */
38
+ dotPrefix: boolean;
39
+ /**
40
+ * Whether system flag hiding is supported
41
+ */
42
+ systemFlag: boolean;
43
+ };
44
+ /**
45
+ * Checks if the file or directory is hidden through any available method
46
+ * @returns A boolean indicating if the item is hidden
47
+ * @throws {Error} If the file doesn't exist or permissions are insufficient
48
+ */
49
+ export declare function isHidden(pathname: string, nativeFn: NativeBindingsFn): Promise<boolean>;
50
+ export declare function isHiddenRecursive(path: string, nativeFn: NativeBindingsFn): Promise<boolean>;
51
+ export declare function createHiddenPosixPath(pathname: string, hidden: boolean): string;
52
+ /**
53
+ * Gets detailed information about the hidden state of the file or directory
54
+ * @returns An object containing detailed hidden state information
55
+ * @throws {Error} If the file doesn't exist or permissions are insufficient
56
+ */
57
+ export declare function getHiddenMetadata(pathname: string, nativeFn: NativeBindingsFn): Promise<HiddenMetadata>;
58
+ export type HideMethod = "dotPrefix" | "systemFlag" | "all" | "auto";
59
+ export type SetHiddenResult = {
60
+ pathname: string;
61
+ actions: {
62
+ dotPrefix: boolean;
63
+ systemFlag: boolean;
64
+ };
65
+ };
66
+ export declare function setHidden(pathname: string, hide: boolean, method: HideMethod, nativeFn: NativeBindingsFn): Promise<SetHiddenResult>;
67
+ //# sourceMappingURL=hidden.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hidden.d.ts","sourceRoot":"","sources":["../../src/hidden.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE;QACT;;WAEG;QACH,SAAS,EAAE,OAAO,CAAC;QAEnB;;WAEG;QACH,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAyBD,eAAO,MAAM,YAAY;IAnCrB;;OAEG;eACQ,OAAO;IAElB;;OAEG;gBACS,OAAO;CA+BtB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,UAStE;AAyCD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,CAAC,CAazB;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACP,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAgD1B"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ // src/hidden.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.LocalSupport = void 0;
5
+ exports.isHidden = isHidden;
6
+ exports.isHiddenRecursive = isHiddenRecursive;
7
+ exports.createHiddenPosixPath = createHiddenPosixPath;
8
+ exports.getHiddenMetadata = getHiddenMetadata;
9
+ exports.setHidden = setHidden;
10
+ const promises_1 = require("node:fs/promises");
11
+ const node_path_1 = require("node:path");
12
+ const error_js_1 = require("./error.js");
13
+ const fs_js_1 = require("./fs.js");
14
+ const path_js_1 = require("./path.js");
15
+ const platform_js_1 = require("./platform.js");
16
+ const HiddenSupportByPlatform = {
17
+ win32: {
18
+ supported: {
19
+ dotPrefix: false,
20
+ systemFlag: true,
21
+ },
22
+ },
23
+ darwin: {
24
+ supported: {
25
+ dotPrefix: true,
26
+ systemFlag: true,
27
+ },
28
+ },
29
+ linux: {
30
+ supported: {
31
+ dotPrefix: true,
32
+ systemFlag: false,
33
+ },
34
+ },
35
+ };
36
+ exports.LocalSupport = HiddenSupportByPlatform[process.platform]
37
+ ?.supported ?? {
38
+ dotPrefix: false,
39
+ systemFlag: false,
40
+ };
41
+ /**
42
+ * Checks if the file or directory is hidden through any available method
43
+ * @returns A boolean indicating if the item is hidden
44
+ * @throws {Error} If the file doesn't exist or permissions are insufficient
45
+ */
46
+ async function isHidden(pathname, nativeFn) {
47
+ const norm = (0, path_js_1.normalizePath)(pathname);
48
+ if (norm == null) {
49
+ throw new Error("Invalid pathname: " + JSON.stringify(pathname));
50
+ }
51
+ return ((exports.LocalSupport.dotPrefix && isPosixHidden(norm)) ||
52
+ (exports.LocalSupport.systemFlag && isSystemHidden(norm, nativeFn)));
53
+ }
54
+ async function isHiddenRecursive(path, nativeFn) {
55
+ let norm = (0, path_js_1.normalizePath)(path);
56
+ if (norm == null) {
57
+ throw new Error("Invalid path: " + JSON.stringify(path));
58
+ }
59
+ while (!(0, path_js_1.isRootDirectory)(norm)) {
60
+ if (await isHidden(norm, nativeFn)) {
61
+ return true;
62
+ }
63
+ norm = (0, node_path_1.dirname)(norm);
64
+ }
65
+ return false;
66
+ }
67
+ function createHiddenPosixPath(pathname, hidden) {
68
+ const norm = (0, path_js_1.normalizePath)(pathname);
69
+ if (norm == null) {
70
+ throw new Error("Invalid pathname: " + JSON.stringify(pathname));
71
+ }
72
+ const dir = (0, node_path_1.dirname)(norm);
73
+ const srcBase = (0, node_path_1.basename)(norm).replace(/^\./, "");
74
+ const dest = (0, node_path_1.join)(dir, (hidden ? "." : "") + srcBase);
75
+ return dest;
76
+ }
77
+ async function setHiddenPosix(pathname, hidden) {
78
+ if (exports.LocalSupport.dotPrefix) {
79
+ const dest = createHiddenPosixPath(pathname, hidden);
80
+ if (pathname !== dest)
81
+ await (0, promises_1.rename)(pathname, dest);
82
+ return dest;
83
+ }
84
+ throw new Error("Unsupported platform");
85
+ }
86
+ function isPosixHidden(pathname) {
87
+ if (!exports.LocalSupport.dotPrefix)
88
+ return false;
89
+ const b = (0, node_path_1.basename)(pathname);
90
+ return b.startsWith(".") && b !== "." && b !== "..";
91
+ }
92
+ async function isSystemHidden(pathname, nativeFn) {
93
+ if (!exports.LocalSupport.systemFlag) {
94
+ // not supported on this platform
95
+ return false;
96
+ }
97
+ if (platform_js_1.isWindows && (0, path_js_1.isRootDirectory)(pathname)) {
98
+ // windows `attr` thinks all drive letters don't exist.
99
+ return false;
100
+ }
101
+ // don't bother the native bindings if the file doesn't exist:
102
+ return ((await (0, fs_js_1.canStatAsync)(pathname)) &&
103
+ (await (await nativeFn()).isHidden(pathname)));
104
+ }
105
+ /**
106
+ * Gets detailed information about the hidden state of the file or directory
107
+ * @returns An object containing detailed hidden state information
108
+ * @throws {Error} If the file doesn't exist or permissions are insufficient
109
+ */
110
+ async function getHiddenMetadata(pathname, nativeFn) {
111
+ const norm = (0, path_js_1.normalizePath)(pathname);
112
+ if (norm == null) {
113
+ throw new Error("Invalid pathname: " + JSON.stringify(pathname));
114
+ }
115
+ const dotPrefix = isPosixHidden(norm);
116
+ const systemFlag = await isSystemHidden(norm, nativeFn);
117
+ return {
118
+ hidden: dotPrefix || systemFlag,
119
+ dotPrefix,
120
+ systemFlag,
121
+ supported: exports.LocalSupport,
122
+ };
123
+ }
124
+ async function setHidden(pathname, hide, method, nativeFn) {
125
+ let norm = (0, path_js_1.normalizePath)(pathname);
126
+ if (norm == null) {
127
+ throw new Error("Invalid pathname: " + JSON.stringify(pathname));
128
+ }
129
+ if (method === "dotPrefix" && !exports.LocalSupport.dotPrefix) {
130
+ throw new Error("Dot prefix hiding is not supported on this platform");
131
+ }
132
+ if (method === "systemFlag" && !exports.LocalSupport.systemFlag) {
133
+ throw new Error("System flag hiding is not supported on this platform");
134
+ }
135
+ try {
136
+ await (0, fs_js_1.statAsync)(norm);
137
+ }
138
+ catch (cause) {
139
+ throw new error_js_1.WrappedError("setHidden()", { cause });
140
+ }
141
+ if (platform_js_1.isWindows && (0, path_js_1.isRootDirectory)(norm)) {
142
+ throw new Error("Cannot hide root directory on Windows");
143
+ }
144
+ const actions = {
145
+ dotPrefix: false,
146
+ systemFlag: false,
147
+ };
148
+ let acted = false;
149
+ if (exports.LocalSupport.dotPrefix && ["auto", "all", "dotPrefix"].includes(method)) {
150
+ if (isPosixHidden(norm) !== hide) {
151
+ norm = await setHiddenPosix(norm, hide);
152
+ actions.dotPrefix = true;
153
+ }
154
+ acted = true;
155
+ }
156
+ if (exports.LocalSupport.systemFlag &&
157
+ (["all", "systemFlag"].includes(method) || (!acted && method === "auto"))) {
158
+ await (await nativeFn()).setHidden(norm, hide);
159
+ actions.systemFlag = true;
160
+ }
161
+ return { pathname: norm, actions };
162
+ }
163
+ //# sourceMappingURL=hidden.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hidden.js","sourceRoot":"","sources":["../../src/hidden.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ // src/index.cts
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
+ };
17
+ var _a;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.setHidden = exports.getHiddenMetadata = exports.isHiddenRecursive = exports.isHidden = exports.getAllVolumeMetadata = exports.getVolumeMetadata = exports.getVolumeMountPoints = void 0;
20
+ const setup_js_1 = require("./setup.js");
21
+ __exportStar(require("./exports.js"), exports);
22
+ _a = (0, setup_js_1.setup)(__dirname), exports.getVolumeMountPoints = _a.getVolumeMountPoints, exports.getVolumeMetadata = _a.getVolumeMetadata, exports.getAllVolumeMetadata = _a.getAllVolumeMetadata, exports.isHidden = _a.isHidden, exports.isHiddenRecursive = _a.isHiddenRecursive, exports.getHiddenMetadata = _a.getHiddenMetadata, exports.setHidden = _a.setHidden;
23
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/index.cts"],"names":[],"mappings":";AAAA,gBAAgB;;;;;;;;;;;;;;;;;;AAEhB,yCAAmC;AAEnC,+CAA6B;AAEhB,KAQT,IAAA,gBAAK,EAAC,SAAS,CAAC,EAPlB,4BAAoB,4BACpB,yBAAiB,yBACjB,4BAAoB,4BACpB,gBAAQ,gBACR,yBAAiB,yBACjB,yBAAiB,yBACjB,iBAAS,gBACU"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/index.cts"],"names":[],"mappings":"AAIA,cAAc,cAAc,CAAC;AAE7B,eAAO,MACL,oBAAoB,sDACpB,iBAAiB,mDACjB,oBAAoB,sDACpB,QAAQ,0CACR,iBAAiB,mDACjB,iBAAiB,mDACjB,SAAS,yCACS,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Gets the UUID from symlinks for a given device path asynchronously
3
+ * @param devicePath The device path to look up
4
+ * @returns Promise that resolves to the UUID if found, empty string otherwise
5
+ */
6
+ export declare function getUuidFromDevDisk(devicePath: string): Promise<string | undefined>;
7
+ /**
8
+ * Gets the label from symlinks for a given device path asynchronously
9
+ * @param devicePath The device path to look up
10
+ * @returns Promise that resolves to the label if found, empty string otherwise
11
+ */
12
+ export declare function getLabelFromDevDisk(devicePath: string): Promise<string | undefined>;
13
+ export declare function getBasenameLinkedTo(linkDir: string, linkPath: string): Promise<string | undefined>;
14
+ //# sourceMappingURL=dev_disk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev_disk.d.ts","sourceRoot":"","sources":["../../../src/linux/dev_disk.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,+BAY1D;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,+BAY3D;AAGD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ // src/linux/dev_disk.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getUuidFromDevDisk = getUuidFromDevDisk;
5
+ exports.getLabelFromDevDisk = getLabelFromDevDisk;
6
+ exports.getBasenameLinkedTo = getBasenameLinkedTo;
7
+ const promises_1 = require("node:fs/promises");
8
+ const node_path_1 = require("node:path");
9
+ const debuglog_js_1 = require("../debuglog.js");
10
+ const string_js_1 = require("../string.js");
11
+ /**
12
+ * Gets the UUID from symlinks for a given device path asynchronously
13
+ * @param devicePath The device path to look up
14
+ * @returns Promise that resolves to the UUID if found, empty string otherwise
15
+ */
16
+ async function getUuidFromDevDisk(devicePath) {
17
+ try {
18
+ const result = await getBasenameLinkedTo("/dev/disk/by-uuid", (0, node_path_1.resolve)(devicePath));
19
+ (0, debuglog_js_1.debug)("[getUuidFromDevDisk] result: %o", result);
20
+ return result;
21
+ }
22
+ catch (error) {
23
+ (0, debuglog_js_1.debug)("[getUuidFromDevDisk] failed: " + error);
24
+ return;
25
+ }
26
+ }
27
+ /**
28
+ * Gets the label from symlinks for a given device path asynchronously
29
+ * @param devicePath The device path to look up
30
+ * @returns Promise that resolves to the label if found, empty string otherwise
31
+ */
32
+ async function getLabelFromDevDisk(devicePath) {
33
+ try {
34
+ const result = await getBasenameLinkedTo("/dev/disk/by-label", (0, node_path_1.resolve)(devicePath));
35
+ (0, debuglog_js_1.debug)("[getLabelFromDevDisk] result: %o", result);
36
+ return result;
37
+ }
38
+ catch (error) {
39
+ (0, debuglog_js_1.debug)("[getLabelFromDevDisk] failed: " + error);
40
+ return;
41
+ }
42
+ }
43
+ // only exposed for tests
44
+ async function getBasenameLinkedTo(linkDir, linkPath) {
45
+ for await (const ea of readLinks(linkDir)) {
46
+ if (ea.linkTarget === linkPath) {
47
+ // Expect the symlink to be named like '1tb\x20\x28test\x29'
48
+ return (0, string_js_1.decodeEscapeSequences)(ea.dirent.name);
49
+ }
50
+ }
51
+ return;
52
+ }
53
+ async function* readLinks(directory) {
54
+ for (const dirent of await (0, promises_1.readdir)(directory, { withFileTypes: true })) {
55
+ if (dirent.isSymbolicLink()) {
56
+ try {
57
+ const linkTarget = (0, node_path_1.resolve)(directory, await (0, promises_1.readlink)((0, node_path_1.join)(directory, dirent.name)));
58
+ yield { dirent, linkTarget };
59
+ }
60
+ catch {
61
+ // Ignore errors
62
+ }
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=dev_disk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev_disk.js","sourceRoot":"","sources":["../../../src/linux/dev_disk.ts"],"names":[],"mappings":";AAAA,wBAAwB;;AAaxB,gDAYC;AAOD,kDAYC;AAGD,kDAWC;AAvDD,+CAAqD;AACrD,yCAA0C;AAC1C,gDAAuC;AACvC,4CAAqD;AAErD;;;;GAIG;AACI,KAAK,UAAU,kBAAkB,CAAC,UAAkB;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,mBAAmB,EACnB,IAAA,mBAAO,EAAC,UAAU,CAAC,CACpB,CAAC;QACF,IAAA,mBAAK,EAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,mBAAK,EAAC,+BAA+B,GAAG,KAAK,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,oBAAoB,EACpB,IAAA,mBAAO,EAAC,UAAU,CAAC,CACpB,CAAC;QACF,IAAA,mBAAK,EAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,mBAAK,EAAC,gCAAgC,GAAG,KAAK,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;AACH,CAAC;AAED,yBAAyB;AAClB,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,QAAgB;IAEhB,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,IAAI,EAAE,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC/B,4DAA4D;YAC5D,OAAO,IAAA,iCAAqB,EAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO;AACT,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,SAAS,CACvB,SAAiB;IAEjB,KAAK,MAAM,MAAM,IAAI,MAAM,IAAA,kBAAO,EAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACvE,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,IAAA,mBAAO,EACxB,SAAS,EACT,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAC7C,CAAC;gBACF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}