@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
package/binding.gyp CHANGED
@@ -72,8 +72,21 @@
72
72
  ],
73
73
  "msvs_settings": {
74
74
  "VCCLCompilerTool": {
75
+ "AdditionalOptions": [
76
+ "/Qspectre",
77
+ "/guard:cf",
78
+ "/ZH:SHA_256",
79
+ "/sdl"
80
+ ],
75
81
  "ExceptionHandling": 1,
76
82
  "RuntimeTypeInfo": "true"
83
+ },
84
+ "VCLinkerTool": {
85
+ "AdditionalOptions": [
86
+ "/guard:cf",
87
+ "/DYNAMICBASE",
88
+ "/CETCOMPAT"
89
+ ]
77
90
  }
78
91
  }
79
92
  }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @return a new array whose elements return true based on the given `predicate`
3
+ * function.
4
+ */
5
+ export declare function asyncFilter<T>(arr: T[], predicate: (item: T) => boolean | Promise<boolean>): Promise<T[]>;
6
+ /**
7
+ * Remove duplicate elements from an array.
8
+ *
9
+ * - Primitive values are compared using strict equality.
10
+ * - Objects and arrays are compared by reference.
11
+ *
12
+ * @return A new array with duplicate elements removed
13
+ */
14
+ export declare function uniq<T>(arr: T[]): T[];
15
+ /**
16
+ * Remove duplicate elements from an array based on a key function.
17
+ * @param keyFn A function that returns a key for each element. Elements that
18
+ * the key function returns nullish will be removed from the returned array.
19
+ * @return a new array omitting duplicate elements based on a key function.
20
+ */
21
+ export declare function uniqBy<T, K>(arr: T[], keyFn: (item: T) => K | undefined): T[];
22
+ /**
23
+ * @return an array of specified length, with each element created by calling
24
+ * the provided function.
25
+ */
26
+ export declare function times<T>(length: number, fn: (index: number) => T): T[];
27
+ /**
28
+ * @return a new array with elements that are not `null` or `undefined`.
29
+ */
30
+ export declare function compact<T>(arr: (T | null | undefined)[] | undefined): T[];
31
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,GAAG,EAAE,CAAC,EAAE,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GACjD,OAAO,CAAC,CAAC,EAAE,CAAC,CAGd;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAErC;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAQ7E;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAEtE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,GAAG,CAAC,EAAE,CAEzE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ // src/array.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.asyncFilter = asyncFilter;
5
+ exports.uniq = uniq;
6
+ exports.uniqBy = uniqBy;
7
+ exports.times = times;
8
+ exports.compact = compact;
9
+ /**
10
+ * @return a new array whose elements return true based on the given `predicate`
11
+ * function.
12
+ */
13
+ async function asyncFilter(arr, predicate) {
14
+ const results = await Promise.all(arr.map(async (ea) => predicate(ea)));
15
+ return arr.filter((_item, index) => results[index]);
16
+ }
17
+ /**
18
+ * Remove duplicate elements from an array.
19
+ *
20
+ * - Primitive values are compared using strict equality.
21
+ * - Objects and arrays are compared by reference.
22
+ *
23
+ * @return A new array with duplicate elements removed
24
+ */
25
+ function uniq(arr) {
26
+ return Array.from(new Set(arr));
27
+ }
28
+ /**
29
+ * Remove duplicate elements from an array based on a key function.
30
+ * @param keyFn A function that returns a key for each element. Elements that
31
+ * the key function returns nullish will be removed from the returned array.
32
+ * @return a new array omitting duplicate elements based on a key function.
33
+ */
34
+ function uniqBy(arr, keyFn) {
35
+ const seen = new Set();
36
+ return arr.filter((item) => {
37
+ const key = keyFn(item);
38
+ if (key == null || seen.has(key))
39
+ return false;
40
+ seen.add(key);
41
+ return true;
42
+ });
43
+ }
44
+ /**
45
+ * @return an array of specified length, with each element created by calling
46
+ * the provided function.
47
+ */
48
+ function times(length, fn) {
49
+ return Array.from({ length }, (_, i) => fn(i));
50
+ }
51
+ /**
52
+ * @return a new array with elements that are not `null` or `undefined`.
53
+ */
54
+ function compact(arr) {
55
+ return arr == null ? [] : arr.filter((ea) => ea != null);
56
+ }
57
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":";AAAA,eAAe;;AAMf,kCAMC;AAUD,oBAEC;AAQD,wBAQC;AAMD,sBAEC;AAKD,0BAEC;AArDD;;;GAGG;AACI,KAAK,UAAU,WAAW,CAC/B,GAAQ,EACR,SAAkD;IAElD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,IAAI,CAAI,GAAQ;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,MAAM,CAAO,GAAQ,EAAE,KAAiC;IACtE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAK,CAAC;IAC1B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAI,MAAc,EAAE,EAAwB;IAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAgB,OAAO,CAAI,GAAyC;IAClE,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAW,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * An error that is thrown when a promise does not resolve within the specified
3
+ * time.
4
+ */
5
+ export declare class TimeoutError extends Error {
6
+ constructor(message: string, captureStackTrace?: boolean);
7
+ }
8
+ /**
9
+ * Rejects the promise with a TimeoutError if it does not resolve within the
10
+ * specified time.
11
+ *
12
+ * @param promise The promise to wrap.
13
+ * @param timeoutMs The timeout in milliseconds. Timeouts are disabled if this is 0.
14
+ * @returns A promise that resolves when the input promise resolves, or rejects
15
+ * with a TimeoutError if the input promise does not resolve within the
16
+ * specified time.
17
+ * @throws {TimeoutError} if the input promise does not resolve within the
18
+ * specified time.
19
+ * @throws {TypeError} if timeoutMs is not a number that is greater than 0.
20
+ */
21
+ export declare function withTimeout<T>(opts: {
22
+ desc?: string;
23
+ promise: Promise<T>;
24
+ timeoutMs: number;
25
+ }): Promise<T>;
26
+ /**
27
+ * Delay for the specified number of milliseconds.
28
+ *
29
+ * @param ms The number of milliseconds to delay
30
+ * @param t Optional value to resolve with after delay
31
+ * @returns Promise that resolves with the provided value (or void if none provided)
32
+ */
33
+ export declare function delay<T = void>(ms: number, t?: T): Promise<T>;
34
+ /**
35
+ * Apply `fn` to every item in `items` with a maximum concurrency of
36
+ * `maxConcurrency`.
37
+ */
38
+ export declare function mapConcurrent<I, O>({ items, fn, maxConcurrency, }: {
39
+ items: I[];
40
+ fn: (t: I) => Promise<O>;
41
+ maxConcurrency?: number;
42
+ }): Promise<(O | Error)[]>;
43
+ //# sourceMappingURL=async.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/async.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM,EAAE,iBAAiB,UAAO;CAQtD;AACD;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,CAAC,CAAC,CAyDb;AAED;;;;;;GAMG;AACH,wBAAsB,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEnE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,EACxC,KAAK,EACL,EAAE,EACF,cAAuC,GACxC,EAAE;IACD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CA0BzB"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TimeoutError = void 0;
4
+ exports.withTimeout = withTimeout;
5
+ exports.delay = delay;
6
+ exports.mapConcurrent = mapConcurrent;
7
+ const node_os_1 = require("node:os");
8
+ const node_process_1 = require("node:process");
9
+ const number_js_1 = require("./number.js");
10
+ const string_js_1 = require("./string.js");
11
+ /**
12
+ * An error that is thrown when a promise does not resolve within the specified
13
+ * time.
14
+ */
15
+ class TimeoutError extends Error {
16
+ constructor(message, captureStackTrace = true) {
17
+ super(message);
18
+ this.name = "TimeoutError";
19
+ // Capture the stack trace up to the calling site
20
+ if (captureStackTrace && Error.captureStackTrace) {
21
+ Error.captureStackTrace(this, this.constructor);
22
+ }
23
+ }
24
+ }
25
+ exports.TimeoutError = TimeoutError;
26
+ /**
27
+ * Rejects the promise with a TimeoutError if it does not resolve within the
28
+ * specified time.
29
+ *
30
+ * @param promise The promise to wrap.
31
+ * @param timeoutMs The timeout in milliseconds. Timeouts are disabled if this is 0.
32
+ * @returns A promise that resolves when the input promise resolves, or rejects
33
+ * with a TimeoutError if the input promise does not resolve within the
34
+ * specified time.
35
+ * @throws {TimeoutError} if the input promise does not resolve within the
36
+ * specified time.
37
+ * @throws {TypeError} if timeoutMs is not a number that is greater than 0.
38
+ */
39
+ async function withTimeout(opts) {
40
+ const desc = (0, string_js_1.isBlank)(opts.desc) ? "thenOrTimeout()" : opts.desc;
41
+ if (!(0, number_js_1.isNumber)(opts.timeoutMs)) {
42
+ throw new TypeError(desc +
43
+ ": Expected timeoutMs to be numeric, but got " +
44
+ JSON.stringify(opts.timeoutMs));
45
+ }
46
+ const timeoutMs = Math.floor(opts.timeoutMs);
47
+ if (timeoutMs < 0) {
48
+ throw new TypeError(desc + ": Expected timeoutMs to be > 0, but got " + timeoutMs);
49
+ }
50
+ if (timeoutMs === 0) {
51
+ return opts.promise;
52
+ }
53
+ // Create error here to captured the caller's stack trace. If we create it in
54
+ // the timeout callback, the stack trace will be truncated to this function.
55
+ const timeoutError = new TimeoutError(`${desc}: timeout after ${timeoutMs}ms`);
56
+ if (node_process_1.env["NODE_ENV"] === "test" && timeoutMs === 1) {
57
+ timeoutError.message += "(timeout test)";
58
+ opts.promise.catch(() => { }); // < avoid unhandled rejection warnings
59
+ throw timeoutError;
60
+ }
61
+ let timeoutId;
62
+ opts.promise
63
+ .catch(() => { }) // < avoid unhandled rejection warnings
64
+ .finally(() => {
65
+ if (timeoutId != null) {
66
+ clearTimeout(timeoutId);
67
+ timeoutId = undefined;
68
+ }
69
+ });
70
+ const timeoutPromise = new Promise((_, reject) => {
71
+ timeoutId = setTimeout(() => {
72
+ if (timeoutId != null) {
73
+ timeoutError.message += "(timeout callback)";
74
+ reject(timeoutError);
75
+ }
76
+ timeoutId = undefined;
77
+ }, timeoutMs);
78
+ });
79
+ return Promise.race([opts.promise, timeoutPromise]);
80
+ }
81
+ /**
82
+ * Delay for the specified number of milliseconds.
83
+ *
84
+ * @param ms The number of milliseconds to delay
85
+ * @param t Optional value to resolve with after delay
86
+ * @returns Promise that resolves with the provided value (or void if none provided)
87
+ */
88
+ async function delay(ms, t) {
89
+ return new Promise((resolve) => setTimeout(() => resolve(t), ms));
90
+ }
91
+ /**
92
+ * Apply `fn` to every item in `items` with a maximum concurrency of
93
+ * `maxConcurrency`.
94
+ */
95
+ async function mapConcurrent({ items, fn, maxConcurrency = (0, node_os_1.availableParallelism)(), }) {
96
+ // Validate maxConcurrency
97
+ if (!(0, number_js_1.gt0)(maxConcurrency)) {
98
+ throw new Error(`maxConcurrency must be a positive integer, got: ${maxConcurrency}`);
99
+ }
100
+ if (typeof fn !== "function") {
101
+ throw new TypeError(`fn must be a function, got: ${typeof fn}`);
102
+ }
103
+ const results = [];
104
+ const executing = new Set();
105
+ for (const [index, item] of items.entries()) {
106
+ // Create a wrapped promise that handles cleanup
107
+ while (executing.size >= maxConcurrency) {
108
+ await Promise.race(executing);
109
+ }
110
+ const p = (results[index] = fn(item).catch((error) => error));
111
+ executing.add(p);
112
+ p.finally(() => executing.delete(p));
113
+ }
114
+ return Promise.all(results);
115
+ }
116
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/async.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Cache the result of a function for a given time-to-live (TTL).
3
+ */
4
+ export declare function ttlCache<Args extends unknown[], R>(fn: (...args: Args) => R, ttl: number): (...args: Args) => R;
5
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EACxB,GAAG,EAAE,MAAM,GACV,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,CA0BtB"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ttlCache = ttlCache;
4
+ /**
5
+ * Cache the result of a function for a given time-to-live (TTL).
6
+ */
7
+ function ttlCache(fn, ttl) {
8
+ if (ttl <= 0)
9
+ return fn;
10
+ const cache = new Map();
11
+ return (...args) => {
12
+ const key = JSON.stringify(args);
13
+ const entry = cache.get(key);
14
+ if (entry) {
15
+ return entry.r;
16
+ }
17
+ const result = fn(...args);
18
+ const timeoutId = setTimeout(() => {
19
+ const currentEntry = cache.get(key);
20
+ if (currentEntry?.t === timeoutId) {
21
+ cache.delete(key);
22
+ }
23
+ }, ttl);
24
+ cache.set(key, { r: result, t: timeoutId });
25
+ return result;
26
+ };
27
+ }
28
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":";;AAQA,4BA6BC;AAhCD;;GAEG;AACH,SAAgB,QAAQ,CACtB,EAAwB,EACxB,GAAW;IAEX,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/C,OAAO,CAAC,GAAG,IAAU,EAAK,EAAE;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,YAAY,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBAClC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAE5C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const debugLogContext: (() => string) & {
2
+ reset: () => void;
3
+ };
4
+ export declare const isDebugEnabled: (() => boolean) & {
5
+ reset: () => void;
6
+ };
7
+ export declare function debug(msg: string, ...args: unknown[]): void;
8
+ export declare function resetDebugLog(): void;
9
+ //# sourceMappingURL=debuglog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debuglog.d.ts","sourceRoot":"","sources":["../../src/debuglog.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe;;CAU1B,CAAC;AAEH,eAAO,MAAM,cAAc;;CAEzB,CAAC;AAEH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAQpD;AAED,wBAAgB,aAAa,SAG5B"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDebugEnabled = exports.debugLogContext = void 0;
4
+ exports.debug = debug;
5
+ exports.resetDebugLog = resetDebugLog;
6
+ const node_util_1 = require("node:util");
7
+ const defer_js_1 = require("./defer.js");
8
+ // allow tests to reset the debug log context
9
+ exports.debugLogContext = (0, defer_js_1.defer)(() => {
10
+ for (const ea of ["fs-metadata", "fs-meta"]) {
11
+ if ((0, node_util_1.debuglog)(ea).enabled) {
12
+ return ea;
13
+ }
14
+ if ((0, node_util_1.debuglog)(ea.toUpperCase()).enabled) {
15
+ return ea;
16
+ }
17
+ }
18
+ return "photostructure:fs-metadata";
19
+ });
20
+ exports.isDebugEnabled = (0, defer_js_1.defer)(() => {
21
+ return (0, node_util_1.debuglog)((0, exports.debugLogContext)()).enabled ?? false;
22
+ });
23
+ function debug(msg, ...args) {
24
+ if (!(0, exports.isDebugEnabled)())
25
+ return;
26
+ const now = new Date();
27
+ // Format: [HH:MM:SS.mmm] prefix: message
28
+ const timestamp = `[${now.getHours().toString().padStart(2, "0")}:${now.getMinutes().toString().padStart(2, "0")}:${now.getSeconds().toString().padStart(2, "0")}.${now.getMilliseconds().toString().padStart(3, "0")}] ${(0, exports.debugLogContext)()} `;
29
+ process.stderr.write(timestamp + (0, node_util_1.format)(msg, ...args) + "\n");
30
+ }
31
+ function resetDebugLog() {
32
+ exports.debugLogContext.reset();
33
+ exports.isDebugEnabled.reset();
34
+ }
35
+ //# sourceMappingURL=debuglog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debuglog.js","sourceRoot":"","sources":["../../src/debuglog.ts"],"names":[],"mappings":";;;AAqBA,sBAQC;AAED,sCAGC;AAlCD,yCAA6C;AAC7C,yCAAmC;AAEnC,6CAA6C;AAEhC,QAAA,eAAe,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE;IACxC,KAAK,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC;QAC5C,IAAI,IAAA,oBAAQ,EAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,IAAA,oBAAQ,EAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,4BAA4B,CAAC;AACtC,CAAC,CAAC,CAAC;AAEU,QAAA,cAAc,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE;IACvC,OAAO,IAAA,oBAAQ,EAAC,IAAA,uBAAe,GAAE,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,SAAgB,KAAK,CAAC,GAAW,EAAE,GAAG,IAAe;IACnD,IAAI,CAAC,IAAA,sBAAc,GAAE;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAA,uBAAe,GAAE,GAAG,CAAC;IAE/O,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,IAAA,kBAAM,EAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,aAAa;IAC3B,uBAAe,CAAC,KAAK,EAAE,CAAC;IACxB,sBAAc,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,12 @@
1
+ type Defer<T> = (() => T) & {
2
+ reset: () => void;
3
+ };
4
+ /**
5
+ * Creates a deferred value that is computed once on first access and cached for
6
+ * subsequent accesses.
7
+ * @param thunk A function that takes no arguments and returns a value
8
+ * @returns A function that returns the computed value
9
+ */
10
+ export declare function defer<T>(thunk: () => T): Defer<T>;
11
+ export {};
12
+ //# sourceMappingURL=defer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defer.d.ts","sourceRoot":"","sources":["../../src/defer.ts"],"names":[],"mappings":"AAEA,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAiBjD"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ // src/defer.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.defer = defer;
5
+ /**
6
+ * Creates a deferred value that is computed once on first access and cached for
7
+ * subsequent accesses.
8
+ * @param thunk A function that takes no arguments and returns a value
9
+ * @returns A function that returns the computed value
10
+ */
11
+ function defer(thunk) {
12
+ let computed = false;
13
+ let value;
14
+ const fn = () => {
15
+ if (!computed) {
16
+ computed = true;
17
+ value = thunk();
18
+ }
19
+ return value;
20
+ };
21
+ fn.reset = () => {
22
+ computed = false;
23
+ };
24
+ return fn;
25
+ }
26
+ //# sourceMappingURL=defer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defer.js","sourceRoot":"","sources":["../../src/defer.ts"],"names":[],"mappings":";AAAA,eAAe;;AAYf,sBAiBC;AAvBD;;;;;GAKG;AACH,SAAgB,KAAK,CAAI,KAAc;IACrC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,KAAQ,CAAC;IAEb,MAAM,EAAE,GAAG,GAAG,EAAE;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,GAAG,KAAK,EAAE,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,EAAE,CAAC,KAAK,GAAG,GAAG,EAAE;QACd,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare class WrappedError extends Error {
2
+ errno?: number;
3
+ code?: string;
4
+ syscall?: string;
5
+ path?: string;
6
+ constructor(context: string, options?: {
7
+ name?: string;
8
+ cause?: unknown;
9
+ errno?: number;
10
+ code?: string;
11
+ syscall?: string;
12
+ path?: string;
13
+ });
14
+ get details(): Record<string, unknown>;
15
+ toString(): string;
16
+ }
17
+ export declare function toError(cause: unknown): Error;
18
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAkBA,qBAAa,YAAa,SAAQ,KAAK;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAgCH,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAErC;IAEQ,QAAQ,IAAI,MAAM;CAM5B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAE7C"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ // src/error.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.WrappedError = void 0;
5
+ exports.toError = toError;
6
+ const number_js_1 = require("./number.js");
7
+ const object_js_1 = require("./object.js");
8
+ const string_js_1 = require("./string.js");
9
+ function toMessage(context, cause) {
10
+ const causeStr = cause instanceof Error
11
+ ? cause.message
12
+ : typeof cause === "string"
13
+ ? cause
14
+ : cause
15
+ ? JSON.stringify(cause)
16
+ : "";
17
+ return context + ((0, string_js_1.isBlank)(causeStr) ? "" : ": " + causeStr);
18
+ }
19
+ class WrappedError extends Error {
20
+ errno;
21
+ code;
22
+ syscall;
23
+ path;
24
+ constructor(context, options) {
25
+ super(toMessage(context, options?.cause));
26
+ const cause = (0, object_js_1.map)(options?.cause, toError);
27
+ const opts = { ...(0, object_js_1.compactValues)(cause), ...(0, object_js_1.compactValues)(options) };
28
+ if ((0, string_js_1.isNotBlank)(options?.name)) {
29
+ this.name = options.name;
30
+ }
31
+ if (cause != null) {
32
+ this.cause = cause;
33
+ if (cause instanceof Error) {
34
+ this.stack = `${this.stack}\nCaused by: ${cause.stack}`;
35
+ }
36
+ }
37
+ if ((0, number_js_1.isNumber)(opts.errno)) {
38
+ this.errno = opts.errno;
39
+ }
40
+ if ((0, string_js_1.isNotBlank)(opts.code)) {
41
+ this.code = opts.code;
42
+ }
43
+ if ((0, string_js_1.isNotBlank)(opts.syscall)) {
44
+ this.syscall = opts.syscall;
45
+ }
46
+ if ((0, string_js_1.isNotBlank)(options?.path)) {
47
+ this.path = options.path;
48
+ }
49
+ }
50
+ get details() {
51
+ return (0, object_js_1.compactValues)((0, object_js_1.omit)(this, "name", "message", "cause"));
52
+ }
53
+ toString() {
54
+ const details = this.details;
55
+ const detailsStr = Object.keys(details).length === 0 ? "" : " " + JSON.stringify(details);
56
+ return `${super.toString()}${detailsStr}`;
57
+ }
58
+ }
59
+ exports.WrappedError = WrappedError;
60
+ function toError(cause) {
61
+ return cause instanceof Error ? cause : new Error(String(cause));
62
+ }
63
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import type { HiddenMetadata, HideMethod, SetHiddenResult } from "./hidden.js";
2
+ import type { GetVolumeMountPointOptions, MountPoint } from "./mount_point.js";
3
+ import type { Options } from "./options.js";
4
+ import { IncludeSystemVolumesDefault, LinuxMountTablePathsDefault, OptionsDefault, optionsWithDefaults, SystemFsTypesDefault, SystemPathPatternsDefault, TimeoutMsDefault } from "./options.js";
5
+ import type { StringEnum, StringEnumKeys, StringEnumType } from "./string_enum.js";
6
+ import type { SystemVolumeConfig } from "./system_volume.js";
7
+ import type { VolumeHealthStatus } from "./volume_health_status.js";
8
+ import { VolumeHealthStatuses } from "./volume_health_status.js";
9
+ import type { VolumeMetadata } from "./volume_metadata.js";
10
+ export type { GetVolumeMountPointOptions, HiddenMetadata, HideMethod, MountPoint, Options, SetHiddenResult, StringEnum, StringEnumKeys, StringEnumType, SystemVolumeConfig, VolumeHealthStatus, VolumeMetadata, };
11
+ /**
12
+ * List all active local and remote mount points on the system.
13
+ *
14
+ * Only readable directories are included in the results.
15
+ *
16
+ * Note that on Windows, `timeoutMs` will be used **per system call** and not
17
+ * for the entire operation.
18
+ *
19
+ * @param opts Optional filesystem operation settings to override default values
20
+ */
21
+ export declare function getVolumeMountPoints(opts?: Partial<GetVolumeMountPointOptions>): Promise<MountPoint[]>;
22
+ /**
23
+ * Get metadata for the volume at the given mount point.
24
+ *
25
+ * @param mountPoint Must be a non-blank string
26
+ * @param opts Optional filesystem operation settings
27
+ */
28
+ export declare function getVolumeMetadata(mountPoint: string, opts?: Partial<Pick<Options, "timeoutMs">>): Promise<VolumeMetadata>;
29
+ /**
30
+ * Retrieves metadata for all mounted volumes with optional filtering and
31
+ * concurrency control.
32
+ *
33
+ * @param opts - Optional configuration object
34
+ * @param opts.includeSystemVolumes - If true, includes system volumes in the
35
+ * results. Defaults to true on Windows and false elsewhere.
36
+ * @param opts.maxConcurrency - Maximum number of concurrent operations.
37
+ * Defaults to the system's available parallelism: see
38
+ * {@link https://nodejs.org/api/os.html#osavailableparallelism | os.availableParallelism()}
39
+ * @param opts.timeoutMs - Maximum time to wait for
40
+ * {@link getVolumeMountPoints}, as well as **each** {@link getVolumeMetadata}
41
+ * to complete. Defaults to {@link TimeoutMsDefault}
42
+ * @returns Promise that resolves to an array of either VolumeMetadata objects
43
+ * or error objects containing the mount point and error
44
+ * @throws Never - errors are caught and returned as part of the result array
45
+ */
46
+ export declare function getAllVolumeMetadata(opts?: Partial<Options> & {
47
+ includeSystemVolumes?: boolean;
48
+ }): Promise<VolumeMetadata[]>;
49
+ /**
50
+ * Check if a file or directory is hidden.
51
+ *
52
+ * Note that `path` may be _effectively_ hidden if any of the ancestor
53
+ * directories are hidden: use {@link isHiddenRecursive} to check for this.
54
+ *
55
+ * @param pathname Path to file or directory
56
+ * @returns Promise resolving to boolean indicating hidden state
57
+ */
58
+ export declare function isHidden(pathname: string): Promise<boolean>;
59
+ /**
60
+ * Check if a file or directory is hidden, or if any of its ancestor
61
+ * directories are hidden.
62
+ *
63
+ * @param pathname Path to file or directory
64
+ * @returns Promise resolving to boolean indicating hidden state
65
+ */
66
+ export declare function isHiddenRecursive(pathname: string): Promise<boolean>;
67
+ /**
68
+ * Get detailed metadata about the hidden state of a file or directory.
69
+ *
70
+ * @param pathname Path to file or directory
71
+ * @returns Promise resolving to metadata about the hidden state
72
+ */
73
+ export declare function getHiddenMetadata(pathname: string): Promise<HiddenMetadata>;
74
+ /**
75
+ * Set the hidden state of a file or directory
76
+ *
77
+ * @param pathname Path to file or directory
78
+ * @param hidden - Whether the item should be hidden (true) or visible (false)
79
+ * @param method Method to use for hiding the file or directory. The default
80
+ * is "auto", which is "dotPrefix" on Linux and macOS, and "systemFlag" on
81
+ * Windows. "all" will attempt to use all relevant methods for the current
82
+ * operating system.
83
+ * @returns Promise resolving the final name of the file or directory (as it
84
+ * will change on POSIX systems), and the action(s) taken.
85
+ * @throws {Error} If the file doesn't exist, permissions are insufficient, or
86
+ * the requested method is unsupported
87
+ */
88
+ export declare function setHidden(pathname: string, hidden: boolean, method?: HideMethod): Promise<SetHiddenResult>;
89
+ export type ExportedFunctions = {
90
+ getVolumeMountPoints: typeof getVolumeMountPoints;
91
+ getVolumeMetadata: typeof getVolumeMetadata;
92
+ getAllVolumeMetadata: typeof getAllVolumeMetadata;
93
+ isHidden: typeof isHidden;
94
+ isHiddenRecursive: typeof isHiddenRecursive;
95
+ getHiddenMetadata: typeof getHiddenMetadata;
96
+ setHidden: typeof setHidden;
97
+ };
98
+ export { IncludeSystemVolumesDefault, LinuxMountTablePathsDefault, OptionsDefault, optionsWithDefaults, SystemFsTypesDefault, SystemPathPatternsDefault, TimeoutMsDefault, VolumeHealthStatuses, };
99
+ //# sourceMappingURL=exports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":"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"}