@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.
- package/binding.gyp +13 -0
- package/dist/cjs/array.d.ts +31 -0
- package/dist/cjs/array.d.ts.map +1 -0
- package/dist/cjs/array.js +57 -0
- package/dist/cjs/array.js.map +1 -0
- package/dist/cjs/async.d.ts +43 -0
- package/dist/cjs/async.d.ts.map +1 -0
- package/dist/cjs/async.js +116 -0
- package/dist/cjs/async.js.map +1 -0
- package/dist/cjs/cache.d.ts +5 -0
- package/dist/cjs/cache.d.ts.map +1 -0
- package/dist/cjs/cache.js +28 -0
- package/dist/cjs/cache.js.map +1 -0
- package/dist/cjs/debuglog.d.ts +9 -0
- package/dist/cjs/debuglog.d.ts.map +1 -0
- package/dist/cjs/debuglog.js +35 -0
- package/dist/cjs/debuglog.js.map +1 -0
- package/dist/cjs/defer.d.ts +12 -0
- package/dist/cjs/defer.d.ts.map +1 -0
- package/dist/cjs/defer.js +26 -0
- package/dist/cjs/defer.js.map +1 -0
- package/dist/cjs/error.d.ts +18 -0
- package/dist/cjs/error.d.ts.map +1 -0
- package/dist/cjs/error.js +63 -0
- package/dist/cjs/error.js.map +1 -0
- package/dist/cjs/exports.d.ts +99 -0
- package/dist/cjs/exports.d.ts.map +1 -0
- package/dist/cjs/exports.js +14 -0
- package/dist/cjs/exports.js.map +1 -0
- package/dist/cjs/fs.d.ts +23 -0
- package/dist/cjs/fs.d.ts.map +1 -0
- package/dist/cjs/fs.js +81 -0
- package/dist/cjs/fs.js.map +1 -0
- package/dist/cjs/glob.d.ts +18 -0
- package/dist/cjs/glob.d.ts.map +1 -0
- package/dist/cjs/glob.js +117 -0
- package/dist/cjs/glob.js.map +1 -0
- package/dist/cjs/hidden.d.ts +67 -0
- package/dist/cjs/hidden.d.ts.map +1 -0
- package/dist/cjs/hidden.js +163 -0
- package/dist/cjs/hidden.js.map +1 -0
- package/dist/cjs/index.cjs +23 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts.map +1 -0
- package/dist/cjs/linux/dev_disk.d.ts +14 -0
- package/dist/cjs/linux/dev_disk.d.ts.map +1 -0
- package/dist/cjs/linux/dev_disk.js +66 -0
- package/dist/cjs/linux/dev_disk.js.map +1 -0
- package/dist/cjs/linux/mount_points.d.ts +7 -0
- package/dist/cjs/linux/mount_points.d.ts.map +1 -0
- package/dist/cjs/linux/mount_points.js +81 -0
- package/dist/cjs/linux/mount_points.js.map +1 -0
- package/dist/cjs/linux/mtab.d.ts +48 -0
- package/dist/cjs/linux/mtab.d.ts.map +1 -0
- package/dist/cjs/linux/mtab.js +88 -0
- package/dist/cjs/linux/mtab.js.map +1 -0
- package/dist/cjs/mount_point.d.ts +56 -0
- package/dist/cjs/mount_point.d.ts.map +1 -0
- package/dist/cjs/mount_point.js +67 -0
- package/dist/cjs/mount_point.js.map +1 -0
- package/dist/cjs/number.d.ts +8 -0
- package/dist/cjs/number.d.ts.map +1 -0
- package/dist/cjs/number.js +41 -0
- package/dist/cjs/number.js.map +1 -0
- package/dist/cjs/object.d.ts +18 -0
- package/dist/cjs/object.d.ts.map +1 -0
- package/dist/cjs/object.js +59 -0
- package/dist/cjs/object.js.map +1 -0
- package/dist/cjs/options.d.ts +80 -0
- package/dist/cjs/options.d.ts.map +1 -0
- package/dist/cjs/options.js +115 -0
- package/dist/cjs/options.js.map +1 -0
- package/dist/cjs/path.d.ts +18 -0
- package/dist/cjs/path.d.ts.map +1 -0
- package/dist/cjs/path.js +50 -0
- package/dist/cjs/path.js.map +1 -0
- package/dist/cjs/platform.d.ts +4 -0
- package/dist/cjs/platform.d.ts.map +1 -0
- package/dist/cjs/platform.js +10 -0
- package/dist/cjs/platform.js.map +1 -0
- package/dist/cjs/random.d.ts +13 -0
- package/dist/cjs/random.d.ts.map +1 -0
- package/dist/cjs/random.js +43 -0
- package/dist/cjs/random.js.map +1 -0
- package/dist/cjs/remote_info.d.ts +39 -0
- package/dist/cjs/remote_info.d.ts.map +1 -0
- package/dist/cjs/remote_info.js +123 -0
- package/dist/cjs/remote_info.js.map +1 -0
- package/dist/cjs/setup.d.ts +3 -0
- package/dist/cjs/setup.d.ts.map +1 -0
- package/dist/cjs/setup.js +47 -0
- package/dist/cjs/setup.js.map +1 -0
- package/dist/cjs/string.d.ts +38 -0
- package/dist/cjs/string.d.ts.map +1 -0
- package/dist/cjs/string.js +89 -0
- package/dist/cjs/string.js.map +1 -0
- package/dist/cjs/string_enum.d.ts +20 -0
- package/dist/cjs/string_enum.d.ts.map +1 -0
- package/dist/cjs/string_enum.js +27 -0
- package/dist/cjs/string_enum.js.map +1 -0
- package/dist/cjs/system_volume.d.ts +15 -0
- package/dist/cjs/system_volume.d.ts.map +1 -0
- package/dist/cjs/system_volume.js +44 -0
- package/dist/cjs/system_volume.js.map +1 -0
- package/dist/cjs/types/native_bindings.d.ts +52 -0
- package/dist/cjs/types/native_bindings.d.ts.map +1 -0
- package/dist/cjs/types/native_bindings.js +4 -0
- package/dist/cjs/types/native_bindings.js.map +1 -0
- package/dist/cjs/unc.d.ts +12 -0
- package/dist/cjs/unc.d.ts.map +1 -0
- package/dist/cjs/unc.js +52 -0
- package/dist/cjs/unc.js.map +1 -0
- package/dist/cjs/units.d.ts +17 -0
- package/dist/cjs/units.d.ts.map +1 -0
- package/dist/cjs/units.js +35 -0
- package/dist/cjs/units.js.map +1 -0
- package/dist/cjs/uuid.d.ts +17 -0
- package/dist/cjs/uuid.d.ts.map +1 -0
- package/dist/cjs/uuid.js +25 -0
- package/dist/cjs/uuid.js.map +1 -0
- package/dist/cjs/volume_health_status.d.ts +25 -0
- package/dist/cjs/volume_health_status.d.ts.map +1 -0
- package/dist/cjs/volume_health_status.js +50 -0
- package/dist/cjs/volume_health_status.js.map +1 -0
- package/dist/cjs/volume_metadata.d.ts +55 -0
- package/dist/cjs/volume_metadata.d.ts.map +1 -0
- package/dist/cjs/volume_metadata.js +169 -0
- package/dist/cjs/volume_metadata.js.map +1 -0
- package/dist/esm/array.d.ts +31 -0
- package/dist/esm/array.d.ts.map +1 -0
- package/dist/esm/array.js +50 -0
- package/dist/esm/array.js.map +1 -0
- package/dist/esm/async.d.ts +43 -0
- package/dist/esm/async.d.ts.map +1 -0
- package/dist/esm/async.js +109 -0
- package/dist/esm/async.js.map +1 -0
- package/dist/esm/cache.d.ts +5 -0
- package/dist/esm/cache.d.ts.map +1 -0
- package/dist/esm/cache.js +25 -0
- package/dist/esm/cache.js.map +1 -0
- package/dist/esm/debuglog.d.ts +9 -0
- package/dist/esm/debuglog.d.ts.map +1 -0
- package/dist/esm/debuglog.js +30 -0
- package/dist/esm/debuglog.js.map +1 -0
- package/dist/esm/defer.d.ts +12 -0
- package/dist/esm/defer.d.ts.map +1 -0
- package/dist/esm/defer.js +23 -0
- package/dist/esm/defer.js.map +1 -0
- package/dist/esm/error.d.ts +18 -0
- package/dist/esm/error.d.ts.map +1 -0
- package/dist/esm/error.js +58 -0
- package/dist/esm/error.js.map +1 -0
- package/dist/esm/exports.d.ts +99 -0
- package/dist/esm/exports.d.ts.map +1 -0
- package/dist/esm/exports.js +4 -0
- package/dist/esm/exports.js.map +1 -0
- package/dist/esm/fs.d.ts +23 -0
- package/dist/esm/fs.d.ts.map +1 -0
- package/dist/esm/fs.js +73 -0
- package/dist/esm/fs.js.map +1 -0
- package/dist/esm/glob.d.ts +18 -0
- package/dist/esm/glob.d.ts.map +1 -0
- package/dist/esm/glob.js +113 -0
- package/dist/esm/glob.js.map +1 -0
- package/dist/esm/hidden.d.ts +67 -0
- package/dist/esm/hidden.d.ts.map +1 -0
- package/dist/esm/hidden.js +155 -0
- package/dist/esm/hidden.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/linux/dev_disk.d.ts +14 -0
- package/dist/esm/linux/dev_disk.d.ts.map +1 -0
- package/dist/esm/linux/dev_disk.js +61 -0
- package/dist/esm/linux/dev_disk.js.map +1 -0
- package/dist/esm/linux/mount_points.d.ts +7 -0
- package/dist/esm/linux/mount_points.d.ts.map +1 -0
- package/dist/esm/linux/mount_points.js +77 -0
- package/dist/esm/linux/mount_points.js.map +1 -0
- package/dist/esm/linux/mtab.d.ts +48 -0
- package/dist/esm/linux/mtab.d.ts.map +1 -0
- package/dist/esm/linux/mtab.js +82 -0
- package/dist/esm/linux/mtab.js.map +1 -0
- package/dist/esm/mount_point.d.ts +56 -0
- package/dist/esm/mount_point.d.ts.map +1 -0
- package/dist/esm/mount_point.js +63 -0
- package/dist/esm/mount_point.js.map +1 -0
- package/dist/esm/number.d.ts +8 -0
- package/dist/esm/number.d.ts.map +1 -0
- package/dist/esm/number.js +32 -0
- package/dist/esm/number.js.map +1 -0
- package/dist/esm/object.d.ts +18 -0
- package/dist/esm/object.d.ts.map +1 -0
- package/dist/esm/object.js +52 -0
- package/dist/esm/object.js.map +1 -0
- package/dist/esm/options.d.ts +80 -0
- package/dist/esm/options.d.ts.map +1 -0
- package/dist/esm/options.js +111 -0
- package/dist/esm/options.js.map +1 -0
- package/dist/esm/path.d.ts +18 -0
- package/dist/esm/path.d.ts.map +1 -0
- package/dist/esm/path.js +44 -0
- package/dist/esm/path.js.map +1 -0
- package/dist/esm/platform.d.ts +4 -0
- package/dist/esm/platform.d.ts.map +1 -0
- package/dist/esm/platform.js +7 -0
- package/dist/esm/platform.js.map +1 -0
- package/dist/esm/random.d.ts +13 -0
- package/dist/esm/random.d.ts.map +1 -0
- package/dist/esm/random.js +37 -0
- package/dist/esm/random.js.map +1 -0
- package/dist/esm/remote_info.d.ts +39 -0
- package/dist/esm/remote_info.d.ts.map +1 -0
- package/dist/esm/remote_info.js +116 -0
- package/dist/esm/remote_info.js.map +1 -0
- package/dist/esm/setup.d.ts +3 -0
- package/dist/esm/setup.d.ts.map +1 -0
- package/dist/esm/setup.js +41 -0
- package/dist/esm/setup.js.map +1 -0
- package/dist/esm/string.d.ts +38 -0
- package/dist/esm/string.d.ts.map +1 -0
- package/dist/esm/string.js +78 -0
- package/dist/esm/string.js.map +1 -0
- package/dist/esm/string_enum.d.ts +20 -0
- package/dist/esm/string_enum.d.ts.map +1 -0
- package/dist/esm/string_enum.js +24 -0
- package/dist/esm/string_enum.js.map +1 -0
- package/dist/esm/system_volume.d.ts +15 -0
- package/dist/esm/system_volume.d.ts.map +1 -0
- package/dist/esm/system_volume.js +40 -0
- package/dist/esm/system_volume.js.map +1 -0
- package/dist/esm/types/native_bindings.d.ts +52 -0
- package/dist/esm/types/native_bindings.d.ts.map +1 -0
- package/dist/esm/types/native_bindings.js +3 -0
- package/dist/esm/types/native_bindings.js.map +1 -0
- package/dist/esm/unc.d.ts +12 -0
- package/dist/esm/unc.d.ts.map +1 -0
- package/dist/esm/unc.js +49 -0
- package/dist/esm/unc.js.map +1 -0
- package/dist/esm/units.d.ts +17 -0
- package/dist/esm/units.d.ts.map +1 -0
- package/dist/esm/units.js +31 -0
- package/dist/esm/units.js.map +1 -0
- package/dist/esm/uuid.d.ts +17 -0
- package/dist/esm/uuid.d.ts.map +1 -0
- package/dist/esm/uuid.js +22 -0
- package/dist/esm/uuid.js.map +1 -0
- package/dist/esm/volume_health_status.d.ts +25 -0
- package/dist/esm/volume_health_status.d.ts.map +1 -0
- package/dist/esm/volume_health_status.js +46 -0
- package/dist/esm/volume_health_status.js.map +1 -0
- package/dist/esm/volume_metadata.d.ts +55 -0
- package/dist/esm/volume_metadata.d.ts.map +1 -0
- package/dist/esm/volume_metadata.js +164 -0
- package/dist/esm/volume_metadata.js.map +1 -0
- package/package.json +7 -8
- package/prebuilds/darwin-arm64/@photostructure+fs-metadata.glibc.node +0 -0
- package/prebuilds/win32-x64/@photostructure+fs-metadata.glibc.node +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/string.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.isString = isString;
|
|
5
|
+
exports.toS = toS;
|
|
6
|
+
exports.isNotBlank = isNotBlank;
|
|
7
|
+
exports.isBlank = isBlank;
|
|
8
|
+
exports.toNotBlank = toNotBlank;
|
|
9
|
+
exports.decodeEscapeSequences = decodeEscapeSequences;
|
|
10
|
+
exports.encodeEscapeSequences = encodeEscapeSequences;
|
|
11
|
+
exports.sortByLocale = sortByLocale;
|
|
12
|
+
exports.sortObjectsByLocale = sortObjectsByLocale;
|
|
13
|
+
function isString(input) {
|
|
14
|
+
return typeof input === "string";
|
|
15
|
+
}
|
|
16
|
+
function toS(input) {
|
|
17
|
+
return isString(input) ? input : input == null ? "" : String(input);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @return true iff the input is a string and has at least one non-whitespace character
|
|
21
|
+
*/
|
|
22
|
+
function isNotBlank(input) {
|
|
23
|
+
return typeof input === "string" && input.trim().length > 0;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @return true iff the input is not a string or only has non-whitespace characters
|
|
27
|
+
*/
|
|
28
|
+
function isBlank(input) {
|
|
29
|
+
return !isNotBlank(input);
|
|
30
|
+
}
|
|
31
|
+
function toNotBlank(input) {
|
|
32
|
+
return isNotBlank(input) ? input : undefined;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Decodes a string containing octal (\000-\377) and/or hexadecimal
|
|
36
|
+
* (\x00-\xFF) escape sequences
|
|
37
|
+
* @param input The string containing escape sequences to decode
|
|
38
|
+
* @returns The decoded string with escape sequences converted to their
|
|
39
|
+
* corresponding characters
|
|
40
|
+
* @throws Error if an invalid escape sequence is encountered
|
|
41
|
+
*/
|
|
42
|
+
function decodeEscapeSequences(input) {
|
|
43
|
+
const escapeRegex = /\\(?:([0-7]{2,6})|x([0-9a-fA-F]{2,4}))/g;
|
|
44
|
+
return input.replace(escapeRegex, (match, octal, hex) => {
|
|
45
|
+
// Handle octal escape sequences
|
|
46
|
+
if (octal != null) {
|
|
47
|
+
return String.fromCharCode(parseInt(octal, 8));
|
|
48
|
+
}
|
|
49
|
+
// Handle hexadecimal escape sequences
|
|
50
|
+
if (hex != null) {
|
|
51
|
+
return String.fromCharCode(parseInt(hex, 16));
|
|
52
|
+
}
|
|
53
|
+
// This should never happen due to the regex pattern
|
|
54
|
+
throw new Error(`Invalid escape sequence: ${match}`);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const AlphaNumericRE = /[a-z0-9.-_]/i;
|
|
58
|
+
function encodeEscapeSequences(input) {
|
|
59
|
+
return input
|
|
60
|
+
.split("")
|
|
61
|
+
.map((char) => {
|
|
62
|
+
const encodedChar = AlphaNumericRE.test(char)
|
|
63
|
+
? char
|
|
64
|
+
: "\\" + char.charCodeAt(0).toString(8).padStart(2, "0");
|
|
65
|
+
return encodedChar;
|
|
66
|
+
})
|
|
67
|
+
.join("");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Sort an array of strings using the locale-aware collation algorithm.
|
|
71
|
+
*
|
|
72
|
+
* @param arr The array of strings to sort. The original array **is sorted in
|
|
73
|
+
* place**.
|
|
74
|
+
*/
|
|
75
|
+
function sortByLocale(arr, locales, options) {
|
|
76
|
+
return arr.sort((a, b) => a.localeCompare(b, locales, options));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Sort an array of objects using the locale-aware collation algorithm.
|
|
80
|
+
*
|
|
81
|
+
* @param arr The array of objects to sort.
|
|
82
|
+
* @param fn The function to extract the key to sort by from each object.
|
|
83
|
+
* @param locales The locales to use for sorting.
|
|
84
|
+
* @param options The collation options to use for sorting.
|
|
85
|
+
*/
|
|
86
|
+
function sortObjectsByLocale(arr, fn, locales, options) {
|
|
87
|
+
return arr.sort((a, b) => fn(a).localeCompare(fn(b), locales, options));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/string.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type StringEnumType<T extends string> = {
|
|
2
|
+
[K in T]: K;
|
|
3
|
+
};
|
|
4
|
+
export type StringEnum<T extends string> = StringEnumType<T> & {
|
|
5
|
+
values: T[];
|
|
6
|
+
size: number;
|
|
7
|
+
get(s: string | undefined): T | undefined;
|
|
8
|
+
};
|
|
9
|
+
export type StringEnumKeys<Type> = Type extends StringEnum<infer X> ? X : never;
|
|
10
|
+
/**
|
|
11
|
+
* Create a string enum with the given values.
|
|
12
|
+
|
|
13
|
+
Example usage:
|
|
14
|
+
|
|
15
|
+
export const Directions = stringEnum("North", "South", "East", "West")
|
|
16
|
+
export type Direction = StringEnumKeys<typeof Directions>
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
export declare function stringEnum<T extends string>(...o: T[]): StringEnum<T>;
|
|
20
|
+
//# sourceMappingURL=string_enum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string_enum.d.ts","sourceRoot":"","sources":["../../src/string_enum.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI;KAC5C,CAAC,IAAI,CAAC,GAAG,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAC7D,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,IAAI,IAAI,IAAI,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEhF;;;;;;;;EAQE;AACF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAerE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/string_enum.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.stringEnum = stringEnum;
|
|
5
|
+
/**
|
|
6
|
+
* Create a string enum with the given values.
|
|
7
|
+
|
|
8
|
+
Example usage:
|
|
9
|
+
|
|
10
|
+
export const Directions = stringEnum("North", "South", "East", "West")
|
|
11
|
+
export type Direction = StringEnumKeys<typeof Directions>
|
|
12
|
+
|
|
13
|
+
*/
|
|
14
|
+
function stringEnum(...o) {
|
|
15
|
+
const set = new Set(o);
|
|
16
|
+
const dict = {};
|
|
17
|
+
for (const key of o) {
|
|
18
|
+
dict[key] = key;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
...dict,
|
|
22
|
+
values: Object.freeze([...set]),
|
|
23
|
+
size: set.size,
|
|
24
|
+
get: (s) => s != null && set.has(s) ? s : undefined,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=string_enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string_enum.js","sourceRoot":"","sources":["../../src/string_enum.ts"],"names":[],"mappings":";AAAA,qBAAqB;;AAyBrB,gCAeC;AAxBD;;;;;;;;EAQE;AACF,SAAgB,UAAU,CAAmB,GAAG,CAAM;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvB,MAAM,IAAI,GAAsB,EAAuB,CAAC;IACxD,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAQ;QACtC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,CAAC,CAAqB,EAAE,EAAE,CAC7B,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAM,CAAC,CAAC,CAAC,CAAE,CAAO,CAAC,CAAC,CAAC,SAAS;KACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MountPoint } from "./mount_point.js";
|
|
2
|
+
import { Options } from "./options.js";
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for system volume detection
|
|
5
|
+
*
|
|
6
|
+
* @see {@link MountPoint.isSystemVolume}
|
|
7
|
+
*/
|
|
8
|
+
export type SystemVolumeConfig = Pick<Options, "systemPathPatterns" | "systemFsTypes">;
|
|
9
|
+
/**
|
|
10
|
+
* Determines if a mount point represents a system volume based on its path and
|
|
11
|
+
* filesystem type
|
|
12
|
+
*/
|
|
13
|
+
export declare function isSystemVolume(mountPoint: string, fstype: string | undefined, config?: Partial<SystemVolumeConfig>): boolean;
|
|
14
|
+
export declare function assignSystemVolume(mp: MountPoint, config: Partial<SystemVolumeConfig>): void;
|
|
15
|
+
//# sourceMappingURL=system_volume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system_volume.d.ts","sourceRoot":"","sources":["../../src/system_volume.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,OAAO,EAGR,MAAM,cAAc,CAAC;AAKtB;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,OAAO,EACP,oBAAoB,GAAG,eAAe,CACvC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACvC,OAAO,CAiBT;AACD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,QAapC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/system_volume.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.isSystemVolume = isSystemVolume;
|
|
5
|
+
exports.assignSystemVolume = assignSystemVolume;
|
|
6
|
+
const debuglog_js_1 = require("./debuglog.js");
|
|
7
|
+
const glob_js_1 = require("./glob.js");
|
|
8
|
+
const options_js_1 = require("./options.js");
|
|
9
|
+
const path_js_1 = require("./path.js");
|
|
10
|
+
const platform_js_1 = require("./platform.js");
|
|
11
|
+
const string_js_1 = require("./string.js");
|
|
12
|
+
/**
|
|
13
|
+
* Determines if a mount point represents a system volume based on its path and
|
|
14
|
+
* filesystem type
|
|
15
|
+
*/
|
|
16
|
+
function isSystemVolume(mountPoint, fstype, config = {}) {
|
|
17
|
+
(0, debuglog_js_1.debug)("[isSystemVolume] checking %s (fstype: %s)", mountPoint, fstype);
|
|
18
|
+
if (platform_js_1.isWindows) {
|
|
19
|
+
const systemDrive = (0, path_js_1.normalizePath)(process.env["SystemDrive"]);
|
|
20
|
+
if (systemDrive != null && mountPoint === systemDrive) {
|
|
21
|
+
(0, debuglog_js_1.debug)("[isSystemVolume] %s is the Windows system drive", mountPoint);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const result = ((0, string_js_1.isNotBlank)(fstype) &&
|
|
26
|
+
(config.systemFsTypes ?? options_js_1.SystemFsTypesDefault).has(fstype)) ||
|
|
27
|
+
(0, glob_js_1.compileGlob)(config.systemPathPatterns ?? options_js_1.SystemPathPatternsDefault).test(mountPoint);
|
|
28
|
+
(0, debuglog_js_1.debug)("[isSystemVolume] %s -> %s", mountPoint, result);
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
function assignSystemVolume(mp, config) {
|
|
32
|
+
const result = isSystemVolume(mp.mountPoint, mp.fstype, config);
|
|
33
|
+
if (platform_js_1.isWindows) {
|
|
34
|
+
// native code actually knows the system drive and has more in-depth
|
|
35
|
+
// metadata information that we trust more than these heuristics
|
|
36
|
+
mp.isSystemVolume ??= result;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// macOS and Linux don't have a concept of an explicit "system drive" like
|
|
40
|
+
// Windows--always trust our heuristics
|
|
41
|
+
mp.isSystemVolume = result;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=system_volume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system_volume.js","sourceRoot":"","sources":["../../src/system_volume.ts"],"names":[],"mappings":";AAAA,uBAAuB;;AA4BvB,wCAqBC;AACD,gDAeC;AA/DD,+CAAsC;AACtC,uCAAwC;AAExC,6CAIsB;AACtB,uCAA0C;AAC1C,+CAA0C;AAC1C,2CAAyC;AAYzC;;;GAGG;AACH,SAAgB,cAAc,CAC5B,UAAkB,EAClB,MAA0B,EAC1B,SAAsC,EAAE;IAExC,IAAA,mBAAK,EAAC,2CAA2C,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACvE,IAAI,uBAAS,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,IAAA,uBAAa,EAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9D,IAAI,WAAW,IAAI,IAAI,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YACtD,IAAA,mBAAK,EAAC,iDAAiD,EAAE,UAAU,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GACV,CAAC,IAAA,sBAAU,EAAC,MAAM,CAAC;QACjB,CAAC,MAAM,CAAC,aAAa,IAAI,iCAAoB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAA,qBAAW,EAAC,MAAM,CAAC,kBAAkB,IAAI,sCAAyB,CAAC,CAAC,IAAI,CACtE,UAAU,CACX,CAAC;IACJ,IAAA,mBAAK,EAAC,2BAA2B,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAgB,kBAAkB,CAChC,EAAc,EACd,MAAmC;IAEnC,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhE,IAAI,uBAAS,EAAE,CAAC;QACd,oEAAoE;QACpE,gEAAgE;QAChE,EAAE,CAAC,cAAc,KAAK,MAAM,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,0EAA0E;QAC1E,uCAAuC;QACvC,EAAE,CAAC,cAAc,GAAG,MAAM,CAAC;IAC7B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MountPoint } from "../mount_point.js";
|
|
2
|
+
import type { Options } from "../options.js";
|
|
3
|
+
import type { VolumeMetadata } from "../volume_metadata.js";
|
|
4
|
+
export interface NativeBindings {
|
|
5
|
+
/**
|
|
6
|
+
* Enable or disable debug logging. Set automatically if the `NODE_DEBUG`
|
|
7
|
+
* environment matches `fs-meta`, `fs-metadata`, or
|
|
8
|
+
* `photostructure:fs-metadata`.
|
|
9
|
+
*/
|
|
10
|
+
setDebugLogging(enabled: boolean): void;
|
|
11
|
+
/**
|
|
12
|
+
* Sets a prefix for debug log messages. Defaults to the shortest enabled
|
|
13
|
+
* debug log context, plus the process ID.
|
|
14
|
+
*/
|
|
15
|
+
setDebugPrefix(prefix: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* This is only available on macOS and Windows--Linux only hides files via
|
|
18
|
+
* filename (if basename starts with a dot).
|
|
19
|
+
*/
|
|
20
|
+
isHidden(path: string): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* This is only available on macOS and Windows--Linux only hides files via
|
|
23
|
+
* filename (if basename starts with a dot).
|
|
24
|
+
*
|
|
25
|
+
* @param path The path to the file or directory to hide or unhide
|
|
26
|
+
* @param hidden If true, the file or directory will be hidden; if false, it
|
|
27
|
+
* will be unhidden
|
|
28
|
+
* @throws {Error} If the operation fails
|
|
29
|
+
*/
|
|
30
|
+
setHidden(path: string, hidden: boolean): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* This is only available on macOS and Windows--Linux directly reads from the
|
|
33
|
+
* proc mounts table.
|
|
34
|
+
*/
|
|
35
|
+
getVolumeMountPoints(options?: Pick<Options, "timeoutMs">): Promise<MountPoint[]>;
|
|
36
|
+
/**
|
|
37
|
+
* This is only available on Linux, and only if libglib-2.0 is installed.
|
|
38
|
+
*/
|
|
39
|
+
getGioMountPoints?(): Promise<MountPoint[]>;
|
|
40
|
+
/**
|
|
41
|
+
* This is only a partial implementation for most platforms, to minimize
|
|
42
|
+
* native code when possible. The javascript side handles a bunch of
|
|
43
|
+
* subsequent parsing and extraction logic.
|
|
44
|
+
*/
|
|
45
|
+
getVolumeMetadata(options: GetVolumeMetadataOptions): Promise<VolumeMetadata>;
|
|
46
|
+
}
|
|
47
|
+
export type GetVolumeMetadataOptions = {
|
|
48
|
+
mountPoint: string;
|
|
49
|
+
device?: string;
|
|
50
|
+
} & Partial<Pick<Options, "timeoutMs">>;
|
|
51
|
+
export type NativeBindingsFn = () => NativeBindings | Promise<NativeBindings>;
|
|
52
|
+
//# sourceMappingURL=native_bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native_bindings.d.ts","sourceRoot":"","sources":["../../../src/types/native_bindings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAExC;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzC;;;;;;;;OAQG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;OAGG;IACH,oBAAoB,CAClB,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,GACnC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB;;OAEG;IACH,iBAAiB,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAE5C;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC/E;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAExC,MAAM,MAAM,gBAAgB,GAAG,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native_bindings.js","sourceRoot":"","sources":["../../../src/types/native_bindings.ts"],"names":[],"mappings":";AAAA,+BAA+B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RemoteInfo } from "./remote_info.js";
|
|
2
|
+
/**
|
|
3
|
+
* Checks if a string is formatted as a valid UNC path.
|
|
4
|
+
* A valid UNC path starts with double backslashes or slashes,
|
|
5
|
+
* followed by a server/host name, and then a share name.
|
|
6
|
+
* The path must use consistent slashes (all forward or all backward).
|
|
7
|
+
*
|
|
8
|
+
* @param path - The string to check
|
|
9
|
+
* @returns boolean - True if the string is a valid UNC path, false otherwise
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseUNCPath(path: string | null | undefined): RemoteInfo | undefined;
|
|
12
|
+
//# sourceMappingURL=unc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unc.d.ts","sourceRoot":"","sources":["../../src/unc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,UAAU,GAAG,SAAS,CA8CxB"}
|
package/dist/cjs/unc.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/unc.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.parseUNCPath = parseUNCPath;
|
|
5
|
+
const string_js_1 = require("./string.js");
|
|
6
|
+
/**
|
|
7
|
+
* Checks if a string is formatted as a valid UNC path.
|
|
8
|
+
* A valid UNC path starts with double backslashes or slashes,
|
|
9
|
+
* followed by a server/host name, and then a share name.
|
|
10
|
+
* The path must use consistent slashes (all forward or all backward).
|
|
11
|
+
*
|
|
12
|
+
* @param path - The string to check
|
|
13
|
+
* @returns boolean - True if the string is a valid UNC path, false otherwise
|
|
14
|
+
*/
|
|
15
|
+
function parseUNCPath(path) {
|
|
16
|
+
if (path == null || (0, string_js_1.isBlank)(path) || !(0, string_js_1.isString)(path)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Check for two forward slashes or two backslashes at start
|
|
20
|
+
if (!path.startsWith("\\\\") && !path.startsWith("//")) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Determine slash type from the start of the path
|
|
24
|
+
const isForwardSlash = path.startsWith("//");
|
|
25
|
+
const slashChar = isForwardSlash ? "/" : "\\";
|
|
26
|
+
// Split path using the correct slash type
|
|
27
|
+
const parts = path.slice(2).split(slashChar);
|
|
28
|
+
// Check minimum required parts (server and share)
|
|
29
|
+
if (parts.length < 2) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Validate server and share names exist and aren't empty
|
|
33
|
+
const [remoteHost, remoteShare] = parts;
|
|
34
|
+
if (remoteHost == null ||
|
|
35
|
+
(0, string_js_1.isBlank)(remoteHost) ||
|
|
36
|
+
remoteShare == null ||
|
|
37
|
+
(0, string_js_1.isBlank)(remoteShare)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// Check for invalid characters in server and share names
|
|
41
|
+
const invalidChars = /[<>:"|?*]/;
|
|
42
|
+
if (invalidChars.test(remoteHost) || invalidChars.test(remoteShare)) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// Check for mixed slash usage
|
|
46
|
+
const wrongSlash = isForwardSlash ? "\\" : "/";
|
|
47
|
+
if (path.includes(wrongSlash)) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
return { remoteHost, remoteShare, remote: true };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=unc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unc.js","sourceRoot":"","sources":["../../src/unc.ts"],"names":[],"mappings":";AAAA,aAAa;;AAcb,oCAgDC;AA3DD,2CAAgD;AAEhD;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAC1B,IAA+B;IAE/B,IAAI,IAAI,IAAI,IAAI,IAAI,IAAA,mBAAO,EAAC,IAAI,CAAC,IAAI,CAAC,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO;IACT,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO;IACT,CAAC;IAED,kDAAkD;IAClD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9C,0CAA0C;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE7C,kDAAkD;IAClD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,yDAAyD;IACzD,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;IACxC,IACE,UAAU,IAAI,IAAI;QAClB,IAAA,mBAAO,EAAC,UAAU,CAAC;QACnB,WAAW,IAAI,IAAI;QACnB,IAAA,mBAAO,EAAC,WAAW,CAAC,EACpB,CAAC;QACD,OAAO;IACT,CAAC;IAED,yDAAyD;IACzD,MAAM,YAAY,GAAG,WAAW,CAAC;IACjC,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACpE,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KiB = 1024 bytes
|
|
3
|
+
* @see https://en.wikipedia.org/wiki/Kibibyte
|
|
4
|
+
*/
|
|
5
|
+
export declare const KiB = 1024;
|
|
6
|
+
/**
|
|
7
|
+
* MiB = 1024 KiB
|
|
8
|
+
* @see https://en.wikipedia.org/wiki/Mebibyte
|
|
9
|
+
*/
|
|
10
|
+
export declare const MiB: number;
|
|
11
|
+
/**
|
|
12
|
+
* GiB = 1024 MiB
|
|
13
|
+
* @see https://en.wikipedia.org/wiki/Gibibyte
|
|
14
|
+
*/
|
|
15
|
+
export declare const GiB: number;
|
|
16
|
+
export declare function fmtBytes(bytes: number): string;
|
|
17
|
+
//# sourceMappingURL=units.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/units.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,GAAG,OAAO,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,GAAG,QAAa,CAAC;AAE9B;;;GAGG;AACH,eAAO,MAAM,GAAG,QAAa,CAAC;AAE9B,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU9C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/units.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.GiB = exports.MiB = exports.KiB = void 0;
|
|
5
|
+
exports.fmtBytes = fmtBytes;
|
|
6
|
+
/**
|
|
7
|
+
* KiB = 1024 bytes
|
|
8
|
+
* @see https://en.wikipedia.org/wiki/Kibibyte
|
|
9
|
+
*/
|
|
10
|
+
exports.KiB = 1024;
|
|
11
|
+
/**
|
|
12
|
+
* MiB = 1024 KiB
|
|
13
|
+
* @see https://en.wikipedia.org/wiki/Mebibyte
|
|
14
|
+
*/
|
|
15
|
+
exports.MiB = 1024 * exports.KiB;
|
|
16
|
+
/**
|
|
17
|
+
* GiB = 1024 MiB
|
|
18
|
+
* @see https://en.wikipedia.org/wiki/Gibibyte
|
|
19
|
+
*/
|
|
20
|
+
exports.GiB = 1024 * exports.MiB;
|
|
21
|
+
function fmtBytes(bytes) {
|
|
22
|
+
if (bytes < exports.KiB) {
|
|
23
|
+
return `${bytes} B`;
|
|
24
|
+
}
|
|
25
|
+
else if (bytes < exports.MiB) {
|
|
26
|
+
return `${(bytes / exports.KiB).toFixed(2)} KiB`;
|
|
27
|
+
}
|
|
28
|
+
else if (bytes < exports.GiB) {
|
|
29
|
+
return `${(bytes / exports.MiB).toFixed(2)} MiB`;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return `${(bytes / exports.GiB).toFixed(2)} GiB`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=units.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/units.ts"],"names":[],"mappings":";AAAA,eAAe;;;AAoBf,4BAUC;AA5BD;;;GAGG;AACU,QAAA,GAAG,GAAG,IAAI,CAAC;AAExB;;;GAGG;AACU,QAAA,GAAG,GAAG,IAAI,GAAG,WAAG,CAAC;AAE9B;;;GAGG;AACU,QAAA,GAAG,GAAG,IAAI,GAAG,WAAG,CAAC;AAE9B,SAAgB,QAAQ,CAAC,KAAa;IACpC,IAAI,KAAK,GAAG,WAAG,EAAE,CAAC;QAChB,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;SAAM,IAAI,KAAK,GAAG,WAAG,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,KAAK,GAAG,WAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;SAAM,IAAI,KAAK,GAAG,WAAG,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,KAAK,GAAG,WAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAC,KAAK,GAAG,WAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Some volume UUIDs are short, like, `ABCD1234`.
|
|
3
|
+
*
|
|
4
|
+
* Some volume UUIDs are in hexadecimal, but others and use G-Z. We will allow
|
|
5
|
+
* that.
|
|
6
|
+
*
|
|
7
|
+
* Some Windows syscalls wrap the UUID in a "\\\\?\\Volume{...}\\" prefix and
|
|
8
|
+
* suffix. This function will strip out that prefix and suffix.
|
|
9
|
+
*
|
|
10
|
+
* We will ignore any UUID-ish string that is not at least 8 characters long
|
|
11
|
+
* (and return `undefined` if no other, longer uuid-ish string is found).
|
|
12
|
+
*
|
|
13
|
+
* UUIDs cannot start with a hyphen, and can only contain a-z, 0-9, and hyphens
|
|
14
|
+
* (case-insensitive).
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractUUID(uuid: string | undefined): string | undefined;
|
|
17
|
+
//# sourceMappingURL=uuid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/uuid.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAExE"}
|
package/dist/cjs/uuid.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/uuid.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.extractUUID = extractUUID;
|
|
5
|
+
const string_js_1 = require("./string.js");
|
|
6
|
+
const uuidRegex = /[a-z0-9][a-z0-9-]{7,}/i;
|
|
7
|
+
/**
|
|
8
|
+
* Some volume UUIDs are short, like, `ABCD1234`.
|
|
9
|
+
*
|
|
10
|
+
* Some volume UUIDs are in hexadecimal, but others and use G-Z. We will allow
|
|
11
|
+
* that.
|
|
12
|
+
*
|
|
13
|
+
* Some Windows syscalls wrap the UUID in a "\\\\?\\Volume{...}\\" prefix and
|
|
14
|
+
* suffix. This function will strip out that prefix and suffix.
|
|
15
|
+
*
|
|
16
|
+
* We will ignore any UUID-ish string that is not at least 8 characters long
|
|
17
|
+
* (and return `undefined` if no other, longer uuid-ish string is found).
|
|
18
|
+
*
|
|
19
|
+
* UUIDs cannot start with a hyphen, and can only contain a-z, 0-9, and hyphens
|
|
20
|
+
* (case-insensitive).
|
|
21
|
+
*/
|
|
22
|
+
function extractUUID(uuid) {
|
|
23
|
+
return (0, string_js_1.toS)(uuid).match(uuidRegex)?.[0];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=uuid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/uuid.ts"],"names":[],"mappings":";AAAA,cAAc;;AAqBd,kCAEC;AArBD,2CAAkC;AAElC,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AACH,SAAgB,WAAW,CAAC,IAAwB;IAClD,OAAO,IAAA,eAAG,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { canReaddir } from "./fs.js";
|
|
2
|
+
import { StringEnumKeys } from "./string_enum.js";
|
|
3
|
+
/**
|
|
4
|
+
* Health statuses for volumes (mostly applicable to Windows).
|
|
5
|
+
*
|
|
6
|
+
* - `healthy`: Volume is "OK": accessible and functioning normally
|
|
7
|
+
* - `timeout`: Volume could not be accessed before the specified timeout. It
|
|
8
|
+
* may be inaccessible or disconnected.
|
|
9
|
+
* - `inaccessible`: Volume exists but can't be accessed (permissions/locks)
|
|
10
|
+
* - `disconnected`: Network volume that's offline
|
|
11
|
+
* - `unknown`: Status can't be determined
|
|
12
|
+
*/
|
|
13
|
+
export declare const VolumeHealthStatuses: import("./string_enum.js").StringEnum<"healthy" | "timeout" | "inaccessible" | "disconnected" | "unknown">;
|
|
14
|
+
export type VolumeHealthStatus = StringEnumKeys<typeof VolumeHealthStatuses>;
|
|
15
|
+
/**
|
|
16
|
+
* Attempt to read a directory to determine if it's accessible, and if an error
|
|
17
|
+
* is thrown, convert to a health status.
|
|
18
|
+
* @returns the "health status" of the directory, based on the success of `readdir(dir)`.
|
|
19
|
+
* @throws never
|
|
20
|
+
*/
|
|
21
|
+
export declare function directoryStatus(dir: string, timeoutMs: number, canReaddirImpl?: typeof canReaddir): Promise<{
|
|
22
|
+
status: VolumeHealthStatus;
|
|
23
|
+
error?: Error;
|
|
24
|
+
}>;
|
|
25
|
+
//# sourceMappingURL=volume_health_status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume_health_status.d.ts","sourceRoot":"","sources":["../../src/volume_health_status.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,4GAMhC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE7E;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,OAAO,UAAuB,GAC7C,OAAO,CAAC;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAkBxD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/volume_health_status.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.VolumeHealthStatuses = void 0;
|
|
5
|
+
exports.directoryStatus = directoryStatus;
|
|
6
|
+
const async_js_1 = require("./async.js");
|
|
7
|
+
const debuglog_js_1 = require("./debuglog.js");
|
|
8
|
+
const error_js_1 = require("./error.js");
|
|
9
|
+
const fs_js_1 = require("./fs.js");
|
|
10
|
+
const object_js_1 = require("./object.js");
|
|
11
|
+
const string_enum_js_1 = require("./string_enum.js");
|
|
12
|
+
/**
|
|
13
|
+
* Health statuses for volumes (mostly applicable to Windows).
|
|
14
|
+
*
|
|
15
|
+
* - `healthy`: Volume is "OK": accessible and functioning normally
|
|
16
|
+
* - `timeout`: Volume could not be accessed before the specified timeout. It
|
|
17
|
+
* may be inaccessible or disconnected.
|
|
18
|
+
* - `inaccessible`: Volume exists but can't be accessed (permissions/locks)
|
|
19
|
+
* - `disconnected`: Network volume that's offline
|
|
20
|
+
* - `unknown`: Status can't be determined
|
|
21
|
+
*/
|
|
22
|
+
exports.VolumeHealthStatuses = (0, string_enum_js_1.stringEnum)("healthy", "timeout", "inaccessible", "disconnected", "unknown");
|
|
23
|
+
/**
|
|
24
|
+
* Attempt to read a directory to determine if it's accessible, and if an error
|
|
25
|
+
* is thrown, convert to a health status.
|
|
26
|
+
* @returns the "health status" of the directory, based on the success of `readdir(dir)`.
|
|
27
|
+
* @throws never
|
|
28
|
+
*/
|
|
29
|
+
async function directoryStatus(dir, timeoutMs, canReaddirImpl = fs_js_1.canReaddir) {
|
|
30
|
+
try {
|
|
31
|
+
if (await canReaddirImpl(dir, timeoutMs)) {
|
|
32
|
+
return { status: exports.VolumeHealthStatuses.healthy };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
(0, debuglog_js_1.debug)("[directoryStatus] %s: %s", dir, error);
|
|
37
|
+
let status = exports.VolumeHealthStatuses.unknown;
|
|
38
|
+
if (error instanceof async_js_1.TimeoutError) {
|
|
39
|
+
status = exports.VolumeHealthStatuses.timeout;
|
|
40
|
+
}
|
|
41
|
+
else if ((0, object_js_1.isObject)(error) && error instanceof Error && "code" in error) {
|
|
42
|
+
if (error.code === "EPERM" || error.code === "EACCES") {
|
|
43
|
+
status = exports.VolumeHealthStatuses.inaccessible;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { status, error: (0, error_js_1.toError)(error) };
|
|
47
|
+
}
|
|
48
|
+
return { status: exports.VolumeHealthStatuses.unknown };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=volume_health_status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume_health_status.js","sourceRoot":"","sources":["../../src/volume_health_status.ts"],"names":[],"mappings":";AAAA,8BAA8B;;;AAmC9B,0CAsBC;AAvDD,yCAA0C;AAC1C,+CAAsC;AACtC,yCAAqC;AACrC,mCAAqC;AACrC,2CAAuC;AACvC,qDAA8D;AAE9D;;;;;;;;;GASG;AACU,QAAA,oBAAoB,GAAG,IAAA,2BAAU,EAC5C,SAAS,EACT,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,CACV,CAAC;AAIF;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,SAAiB,EACjB,iBAAoC,kBAAU;IAE9C,IAAI,CAAC;QACH,IAAI,MAAM,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,4BAAoB,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,mBAAK,EAAC,0BAA0B,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,MAAM,GAAuB,4BAAoB,CAAC,OAAO,CAAC;QAC9D,IAAI,KAAK,YAAY,uBAAY,EAAE,CAAC;YAClC,MAAM,GAAG,4BAAoB,CAAC,OAAO,CAAC;QACxC,CAAC;aAAM,IAAI,IAAA,oBAAQ,EAAC,KAAK,CAAC,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YACxE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtD,MAAM,GAAG,4BAAoB,CAAC,YAAY,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAA,kBAAO,EAAC,KAAK,CAAC,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,4BAAoB,CAAC,OAAO,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { MountPoint } from "./mount_point.js";
|
|
2
|
+
import { Options } from "./options.js";
|
|
3
|
+
import { RemoteInfo } from "./remote_info.js";
|
|
4
|
+
import type { GetVolumeMetadataOptions, NativeBindingsFn } from "./types/native_bindings.js";
|
|
5
|
+
/**
|
|
6
|
+
* Metadata associated to a volume.
|
|
7
|
+
*
|
|
8
|
+
* @see https://en.wikipedia.org/wiki/Volume_(computing)
|
|
9
|
+
*/
|
|
10
|
+
export interface VolumeMetadata extends RemoteInfo, MountPoint {
|
|
11
|
+
/**
|
|
12
|
+
* The name of the partition
|
|
13
|
+
*/
|
|
14
|
+
label?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Total size in bytes
|
|
17
|
+
*/
|
|
18
|
+
size?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Used size in bytes
|
|
21
|
+
*/
|
|
22
|
+
used?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Available size in bytes
|
|
25
|
+
*/
|
|
26
|
+
available?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Path to the device or service that the mountpoint is from.
|
|
29
|
+
*
|
|
30
|
+
* Examples include `/dev/sda1`, `nfs-server:/export`,
|
|
31
|
+
* `//username@remoteHost/remoteShare`, or `//cifs-server/share`.
|
|
32
|
+
*
|
|
33
|
+
* May be undefined for remote volumes.
|
|
34
|
+
*/
|
|
35
|
+
mountFrom?: string;
|
|
36
|
+
/**
|
|
37
|
+
* The name of the mount. This may match the resolved mountPoint.
|
|
38
|
+
*/
|
|
39
|
+
mountName?: string;
|
|
40
|
+
/**
|
|
41
|
+
* UUID for the volume, like "c9b08f6e-b392-11ef-bf19-4b13bb7db4b4".
|
|
42
|
+
*
|
|
43
|
+
* On windows, this _may_ be the 128-bit volume UUID, but if that is not
|
|
44
|
+
* available, like in the case of remote volumes, we fallback to the 32-bit
|
|
45
|
+
* volume serial number, rendered in lowercase hexadecimal.
|
|
46
|
+
*/
|
|
47
|
+
uuid?: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function getVolumeMetadata(o: GetVolumeMetadataOptions & Options, nativeFn: NativeBindingsFn): Promise<VolumeMetadata>;
|
|
50
|
+
export declare function getAllVolumeMetadata(opts: Required<Options> & {
|
|
51
|
+
includeSystemVolumes?: boolean;
|
|
52
|
+
maxConcurrency?: number;
|
|
53
|
+
}, nativeFn: NativeBindingsFn): Promise<VolumeMetadata[]>;
|
|
54
|
+
export declare const _: undefined;
|
|
55
|
+
//# sourceMappingURL=volume_metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume_metadata.d.ts","sourceRoot":"","sources":["../../src/volume_metadata.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAEL,OAAO,EAER,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,UAAU,EAGX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AAQpC;;;;GAIG;AACH,MAAM,WAAW,cAAe,SAAQ,UAAU,EAAE,UAAU;IAC5D;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,wBAAwB,GAAG,OAAO,EACrC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,CAAC,CAgBzB;AA2GD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,EACD,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,EAAE,CAAC,CAwE3B;AAED,eAAO,MAAM,CAAC,WAAY,CAAC"}
|