appium-ios-remotexpc 2.0.2 → 2.0.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/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [2.0.3](https://github.com/appium/appium-ios-remotexpc/compare/v2.0.2...v2.0.3) (2026-05-22)
2
+
3
+ ### Bug Fixes
4
+
5
+ * Respect local file system limitations while pulling remote files ([#220](https://github.com/appium/appium-ios-remotexpc/issues/220)) ([4aa9491](https://github.com/appium/appium-ios-remotexpc/commit/4aa949169c6763d99aee8fa6b7c6cd4b74f39a82))
6
+
1
7
  ## [2.0.2](https://github.com/appium/appium-ios-remotexpc/compare/v2.0.1...v2.0.2) (2026-05-21)
2
8
 
3
9
  ### Bug Fixes
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/afc/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/afc/index.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { buildClosePayload, buildFopenPayload, buildMkdirPayload, buildRemovePay
8
8
  import { AFC_FOPEN_TEXTUAL_MODES, AFC_LOCK_EX, AFC_LOCK_UN, AFC_WRITE_THIS_LENGTH, } from './constants.js';
9
9
  import { AfcError, AfcFileMode, AfcOpcode } from './enums.js';
10
10
  import { AfcConnectionError } from './errors.js';
11
+ import { PullLocalNameAllocator } from './pull-local-name-allocator.js';
11
12
  import { createAfcReadStream, createAfcWriteStream } from './stream-utils.js';
12
13
  const log = getLogger('AfcService');
13
14
  const NON_LISTABLE_ENTRIES = ['', '.', '..'];
@@ -244,9 +245,12 @@ export class AfcService {
244
245
  if (!(await this.exists(remoteSrc))) {
245
246
  throw new Error(`Remote path does not exist: ${remoteSrc}`);
246
247
  }
247
- const pullSingleFile = async (remoteFilePath, localFilePath) => {
248
+ const localNames = new PullLocalNameAllocator((localPath) => this._localPathExists(localPath), overwrite);
249
+ const pullSingleFile = async (remoteFilePath, localFilePath, nameAllocated = false) => {
248
250
  log.debug(`Pulling file from '${remoteFilePath}' to '${localFilePath}'`);
249
- if (!overwrite && (await this._localPathExists(localFilePath))) {
251
+ if (!nameAllocated &&
252
+ !overwrite &&
253
+ (await this._localPathExists(localFilePath))) {
250
254
  throw new Error(`Local file already exists: ${localFilePath}`);
251
255
  }
252
256
  await this._pullFile(remoteFilePath, localFilePath);
@@ -256,15 +260,15 @@ export class AfcService {
256
260
  };
257
261
  const isDir = await this.isdir(remoteSrc);
258
262
  if (!isDir) {
259
- const baseName = path.posix.basename(remoteSrc);
260
- if (match && !minimatch(baseName, match)) {
263
+ const remoteBaseName = path.posix.basename(remoteSrc);
264
+ if (match && !minimatch(remoteBaseName, match)) {
261
265
  return;
262
266
  }
263
267
  const localDstIsDirectory = await this._isLocalDirectory(localDst);
264
268
  const targetPath = localDstIsDirectory
265
- ? path.join(localDst, baseName)
269
+ ? path.join(localDst, await localNames.allocate(localDst, remoteBaseName))
266
270
  : localDst;
267
- await pullSingleFile(remoteSrc, targetPath);
271
+ await pullSingleFile(remoteSrc, targetPath, localDstIsDirectory);
268
272
  return;
269
273
  }
270
274
  // Source is a directory, recursive option required
@@ -276,6 +280,7 @@ export class AfcService {
276
280
  match,
277
281
  overwrite,
278
282
  callback: onPullProgress,
283
+ localNames,
279
284
  });
280
285
  }
281
286
  /**
@@ -436,7 +441,10 @@ export class AfcService {
436
441
  * is a directory before invoking.
437
442
  */
438
443
  async _pullRecursiveInternal(remoteSrcDir, localDstDir, options, relativePath = '') {
439
- const { match, overwrite = true, callback: onPullProgress } = options ?? {};
444
+ const { match, overwrite = true, callback: onPullProgress, localNames, } = options ?? {};
445
+ if (!localNames) {
446
+ throw new Error('PullLocalNameAllocator is required for recursive pull');
447
+ }
440
448
  let localDirPath;
441
449
  if (!relativePath) {
442
450
  const localDstIsDirectory = await this._isLocalDirectory(localDstDir);
@@ -453,9 +461,9 @@ export class AfcService {
453
461
  throw new Error(`Local destination exists and is a file, not a directory: ${localDstDir}`);
454
462
  }
455
463
  }
456
- const baseName = path.posix.basename(remoteSrcDir);
464
+ const remoteBaseName = path.posix.basename(remoteSrcDir);
457
465
  localDirPath = localDstIsDirectory
458
- ? path.join(localDstDir, baseName)
466
+ ? path.join(localDstDir, await localNames.allocate(localDstDir, remoteBaseName))
459
467
  : localDstDir;
460
468
  }
461
469
  else {
@@ -484,18 +492,16 @@ export class AfcService {
484
492
  const entryRelativePath = relativePath
485
493
  ? path.posix.join(relativePath, entry)
486
494
  : entry;
495
+ const localEntryName = await localNames.allocate(localDirPath, entry);
487
496
  if (await this.isdir(entryPath)) {
488
- await this._pullRecursiveInternal(entryPath, path.join(localDirPath, entry), options, entryRelativePath);
497
+ await this._pullRecursiveInternal(entryPath, path.join(localDirPath, localEntryName), options, entryRelativePath);
489
498
  }
490
499
  else {
491
500
  if (match && !minimatch(entryRelativePath, match)) {
492
501
  continue;
493
502
  }
494
503
  await ensureLocalDir();
495
- const targetPath = path.join(localDirPath, entry);
496
- if (!overwrite && (await this._localPathExists(targetPath))) {
497
- throw new Error(`Local file already exists: ${targetPath}`);
498
- }
504
+ const targetPath = path.join(localDirPath, localEntryName);
499
505
  await this._pullFile(entryPath, targetPath);
500
506
  if (onPullProgress) {
501
507
  await onPullProgress(entryPath, targetPath, false);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/ios/afc/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/ios/afc/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** Subset of keys returned by `diskutil info -plist`. */
2
+ export interface DiskutilInfoPlist {
3
+ FilesystemName?: string;
4
+ FilesystemUserVisibleName?: string;
5
+ VolumeName?: string;
6
+ [key: string]: unknown;
7
+ }
8
+ /**
9
+ * Whether distinct path segments that differ only by letter case collide on `dir`.
10
+ *
11
+ * On macOS, uses `diskutil info -plist` for the volume backing `dir`. Results are
12
+ * cached per device identifier.
13
+ */
14
+ export declare function isCaseSensitiveDirectory(dir: string): Promise<boolean>;
15
+ /**
16
+ * Derive case sensitivity from a parsed `diskutil info -plist` object.
17
+ *
18
+ * Case-sensitive APFS reports `FilesystemName: Case-sensitive APFS` and/or
19
+ * `FilesystemUserVisibleName: APFS (Case-sensitive)`. Default APFS/HFS+ installs are
20
+ * case-insensitive when not labeled otherwise.
21
+ */
22
+ export declare function parseDiskutilInfoPlist(info: DiskutilInfoPlist): boolean;
23
+ //# sourceMappingURL=local-filesystem-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-filesystem-case.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/afc/local-filesystem-case.ts"],"names":[],"mappings":"AAeA,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2B5E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAmCvE"}
@@ -0,0 +1,132 @@
1
+ import { plist } from '@appium/support';
2
+ import { execFile } from 'node:child_process';
3
+ import fsp from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { promisify } from 'node:util';
7
+ import { getLogger } from '../../../lib/logger.js';
8
+ const log = getLogger('LocalFilesystemCase');
9
+ const execFileAsync = promisify(execFile);
10
+ const caseSensitivityByDevice = new Map();
11
+ /**
12
+ * Whether distinct path segments that differ only by letter case collide on `dir`.
13
+ *
14
+ * On macOS, uses `diskutil info -plist` for the volume backing `dir`. Results are
15
+ * cached per device identifier.
16
+ */
17
+ export async function isCaseSensitiveDirectory(dir) {
18
+ const resolved = await fsp.realpath(dir).catch(() => path.resolve(dir));
19
+ let caseSensitive;
20
+ switch (os.platform()) {
21
+ case 'win32':
22
+ caseSensitive = false;
23
+ break;
24
+ case 'linux':
25
+ caseSensitive = true;
26
+ break;
27
+ case 'darwin':
28
+ try {
29
+ caseSensitive = await getDarwinCaseSensitivity(resolved);
30
+ }
31
+ catch (err) {
32
+ log.info(`Could not determine case sensitivity for '${resolved}'; assuming case-insensitive:`, err);
33
+ caseSensitive = false;
34
+ }
35
+ break;
36
+ default:
37
+ caseSensitive = true;
38
+ }
39
+ return caseSensitive;
40
+ }
41
+ /**
42
+ * Derive case sensitivity from a parsed `diskutil info -plist` object.
43
+ *
44
+ * Case-sensitive APFS reports `FilesystemName: Case-sensitive APFS` and/or
45
+ * `FilesystemUserVisibleName: APFS (Case-sensitive)`. Default APFS/HFS+ installs are
46
+ * case-insensitive when not labeled otherwise.
47
+ */
48
+ export function parseDiskutilInfoPlist(info) {
49
+ const explicit = getExplicitCaseSensitiveField(info);
50
+ if (explicit !== undefined) {
51
+ return explicit;
52
+ }
53
+ const filesystemName = stringField(info.FilesystemName);
54
+ const visibleName = stringField(info.FilesystemUserVisibleName);
55
+ for (const value of [filesystemName, visibleName]) {
56
+ if (!value) {
57
+ continue;
58
+ }
59
+ if (/case-insensitive/i.test(value)) {
60
+ return false;
61
+ }
62
+ if (/case-sensitive/i.test(value)) {
63
+ return true;
64
+ }
65
+ }
66
+ if (filesystemName?.includes('HFS') &&
67
+ !/case-sensitive/i.test(filesystemName)) {
68
+ return false;
69
+ }
70
+ if (filesystemName === 'APFS' || visibleName === 'APFS') {
71
+ return false;
72
+ }
73
+ throw new Error('diskutil info plist did not include recognizable case-sensitivity details');
74
+ }
75
+ /** @internal Reset cached probe results (unit tests only). */
76
+ export function clearCaseSensitivityCache() {
77
+ caseSensitivityByDevice.clear();
78
+ }
79
+ async function getDarwinCaseSensitivity(dir) {
80
+ const device = await getDeviceIdentifierForPath(dir);
81
+ const cached = caseSensitivityByDevice.get(device);
82
+ if (cached !== undefined) {
83
+ return cached;
84
+ }
85
+ const { stdout } = await execFileAsync('diskutil', ['info', '-plist', device], {
86
+ encoding: 'utf8',
87
+ maxBuffer: 4 * 1024 * 1024,
88
+ });
89
+ const diskInfo = plist.parsePlist(stdout);
90
+ const caseSensitive = parseDiskutilInfoPlist(diskInfo);
91
+ caseSensitivityByDevice.set(device, caseSensitive);
92
+ return caseSensitive;
93
+ }
94
+ async function getDeviceIdentifierForPath(dir) {
95
+ const { stdout } = await execFileAsync('df', ['-P', dir], {
96
+ encoding: 'utf8',
97
+ });
98
+ const lines = stdout.trim().split('\n');
99
+ const dataLine = lines[lines.length - 1];
100
+ if (!dataLine) {
101
+ throw new Error(`df produced no output for '${dir}'`);
102
+ }
103
+ const devicePath = dataLine.split(/\s+/)[0];
104
+ if (!devicePath?.startsWith('/dev/')) {
105
+ throw new Error(`Unexpected df device for '${dir}': ${devicePath ?? ''}`);
106
+ }
107
+ return devicePath.slice('/dev/'.length);
108
+ }
109
+ function getExplicitCaseSensitiveField(info) {
110
+ for (const [key, value] of Object.entries(info)) {
111
+ if (!/case-sensitive/i.test(key)) {
112
+ continue;
113
+ }
114
+ if (typeof value === 'boolean') {
115
+ return value;
116
+ }
117
+ if (typeof value === 'string') {
118
+ const normalized = value.toLowerCase();
119
+ if (normalized === 'yes' || normalized === 'true') {
120
+ return true;
121
+ }
122
+ if (normalized === 'no' || normalized === 'false') {
123
+ return false;
124
+ }
125
+ }
126
+ }
127
+ return undefined;
128
+ }
129
+ function stringField(value) {
130
+ return typeof value === 'string' ? value : undefined;
131
+ }
132
+ //# sourceMappingURL=local-filesystem-case.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-filesystem-case.js","sourceRoot":"","sources":["../../../../../src/services/ios/afc/local-filesystem-case.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type CaseSensitiveDirectoryCheck = (dir: string) => Promise<boolean>;
2
+ /**
3
+ * Resolves sanitized local path segment names during a single AFC pull.
4
+ * Adds a UUID-based suffix when the sanitized name is already taken in this pull, or
5
+ * when `overwrite` is false and a file already exists at that path on disk.
6
+ */
7
+ export declare class PullLocalNameAllocator {
8
+ private readonly pathExists;
9
+ private readonly overwrite;
10
+ private readonly checkCaseSensitive;
11
+ private readonly usedByDir;
12
+ private readonly caseSensitiveByDir;
13
+ constructor(pathExists: (localPath: string) => Promise<boolean>, overwrite: boolean, checkCaseSensitive?: CaseSensitiveDirectoryCheck);
14
+ allocate(parentDir: string, remoteSegment: string): Promise<string>;
15
+ private hasClash;
16
+ private isUsedInPull;
17
+ private namesCollide;
18
+ private isCaseSensitiveForDir;
19
+ private register;
20
+ }
21
+ //# sourceMappingURL=pull-local-name-allocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-local-name-allocator.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/afc/pull-local-name-allocator.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,2BAA2B,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,sBAAsB;IAK/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IANrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8B;gBAG9C,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EACnD,SAAS,EAAE,OAAO,EAClB,kBAAkB,GAAE,2BAAsD;IAGvF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAoB3D,QAAQ;YAUR,YAAY;YAgBZ,YAAY;YAWZ,qBAAqB;IASnC,OAAO,CAAC,QAAQ;CAQjB"}
@@ -0,0 +1,82 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import path from 'node:path';
3
+ import { isCaseSensitiveDirectory } from './local-filesystem-case.js';
4
+ import { appendUniqueSuffix, sanitizeLocalFilename, } from './sanitize-local-filename.js';
5
+ const MAX_ALLOCATION_ATTEMPTS = 100;
6
+ /**
7
+ * Resolves sanitized local path segment names during a single AFC pull.
8
+ * Adds a UUID-based suffix when the sanitized name is already taken in this pull, or
9
+ * when `overwrite` is false and a file already exists at that path on disk.
10
+ */
11
+ export class PullLocalNameAllocator {
12
+ pathExists;
13
+ overwrite;
14
+ checkCaseSensitive;
15
+ usedByDir = new Map();
16
+ caseSensitiveByDir = new Map();
17
+ constructor(pathExists, overwrite, checkCaseSensitive = isCaseSensitiveDirectory) {
18
+ this.pathExists = pathExists;
19
+ this.overwrite = overwrite;
20
+ this.checkCaseSensitive = checkCaseSensitive;
21
+ }
22
+ async allocate(parentDir, remoteSegment) {
23
+ const sanitized = sanitizeLocalFilename(remoteSegment);
24
+ for (let attempt = 0; attempt < MAX_ALLOCATION_ATTEMPTS; attempt += 1) {
25
+ const candidate = attempt === 0
26
+ ? sanitized
27
+ : appendUniqueSuffix(sanitized, randomSuffix());
28
+ if (!(await this.hasClash(parentDir, candidate))) {
29
+ this.register(parentDir, candidate);
30
+ return candidate;
31
+ }
32
+ }
33
+ throw new Error(`Could not allocate a unique local name for remote segment '${remoteSegment}'`);
34
+ }
35
+ async hasClash(parentDir, name) {
36
+ if (await this.isUsedInPull(parentDir, name)) {
37
+ return true;
38
+ }
39
+ if (!this.overwrite) {
40
+ return this.pathExists(path.join(parentDir, name));
41
+ }
42
+ return false;
43
+ }
44
+ async isUsedInPull(parentDir, name) {
45
+ const used = this.usedByDir.get(parentDir);
46
+ if (!used) {
47
+ return false;
48
+ }
49
+ for (const existing of used) {
50
+ if (await this.namesCollide(parentDir, existing, name)) {
51
+ return true;
52
+ }
53
+ }
54
+ return false;
55
+ }
56
+ async namesCollide(parentDir, a, b) {
57
+ if (await this.isCaseSensitiveForDir(parentDir)) {
58
+ return a === b;
59
+ }
60
+ return a.toLowerCase() === b.toLowerCase();
61
+ }
62
+ async isCaseSensitiveForDir(parentDir) {
63
+ let caseSensitive = this.caseSensitiveByDir.get(parentDir);
64
+ if (caseSensitive === undefined) {
65
+ caseSensitive = await this.checkCaseSensitive(parentDir);
66
+ this.caseSensitiveByDir.set(parentDir, caseSensitive);
67
+ }
68
+ return caseSensitive;
69
+ }
70
+ register(parentDir, name) {
71
+ let used = this.usedByDir.get(parentDir);
72
+ if (!used) {
73
+ used = new Set();
74
+ this.usedByDir.set(parentDir, used);
75
+ }
76
+ used.add(name);
77
+ }
78
+ }
79
+ function randomSuffix() {
80
+ return randomUUID().replace(/-/g, '').slice(0, 8);
81
+ }
82
+ //# sourceMappingURL=pull-local-name-allocator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-local-name-allocator.js","sourceRoot":"","sources":["../../../../../src/services/ios/afc/pull-local-name-allocator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Fallback when a remote name has no safe local characters after sanitization. */
2
+ export declare const EMPTY_SANITIZED_FILENAME = "_";
3
+ /**
4
+ * Sanitize a single path segment from the device for use on the local filesystem.
5
+ *
6
+ * Rules are chosen from {@link os.platform} at pull time (the host writing files).
7
+ */
8
+ export declare function sanitizeLocalFilename(name: string): string;
9
+ /**
10
+ * Insert a unique suffix before the file extension (or at the end when there is none).
11
+ */
12
+ export declare function withUniqueSuffix(filename: string, suffix: string): string;
13
+ /** Sanitized name with a disambiguating suffix, still within host filename byte limits. */
14
+ export declare function appendUniqueSuffix(sanitized: string, suffix: string): string;
15
+ //# sourceMappingURL=sanitize-local-filename.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-local-filename.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/afc/sanitize-local-filename.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAuB5C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsB5E"}
@@ -0,0 +1,130 @@
1
+ import os from 'node:os';
2
+ /** Fallback when a remote name has no safe local characters after sanitization. */
3
+ export const EMPTY_SANITIZED_FILENAME = '_';
4
+ const MAX_FILENAME_BYTES = 255;
5
+ /** C0 and C1 Unicode control characters. */
6
+ // eslint-disable-next-line no-control-regex -- intentional filename sanitization
7
+ const CONTROL_RE = /[\x00-\x1f\x80-\x9f]/g;
8
+ /** Characters invalid on Windows filenames. */
9
+ const WINDOWS_ILLEGAL_RE = /[/?<>\\:*|"]/g;
10
+ /** Path separator on Unix-like systems (and macOS). */
11
+ const POSIX_PATH_SEP_RE = /\//g;
12
+ /** Colon is invalid in macOS / HFS+ / APFS file names. */
13
+ const DARWIN_ILLEGAL_RE = /:/g;
14
+ /** Unix reserved single-segment names (`.` and `..`). */
15
+ const RESERVED_DOTS_RE = /^\.+$/;
16
+ /** Windows reserved device names (case-insensitive, optional extension). */
17
+ const WINDOWS_RESERVED_RE = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;
18
+ /**
19
+ * Sanitize a single path segment from the device for use on the local filesystem.
20
+ *
21
+ * Rules are chosen from {@link os.platform} at pull time (the host writing files).
22
+ */
23
+ export function sanitizeLocalFilename(name) {
24
+ switch (os.platform()) {
25
+ case 'win32':
26
+ return sanitizeForWindows(name);
27
+ case 'darwin':
28
+ return sanitizeForDarwin(name);
29
+ default:
30
+ return sanitizeForPosix(name);
31
+ }
32
+ }
33
+ /**
34
+ * Insert a unique suffix before the file extension (or at the end when there is none).
35
+ */
36
+ export function withUniqueSuffix(filename, suffix) {
37
+ const dot = filename.lastIndexOf('.');
38
+ if (dot > 0) {
39
+ return `${filename.slice(0, dot)}_${suffix}${filename.slice(dot)}`;
40
+ }
41
+ return `${filename}_${suffix}`;
42
+ }
43
+ /** Sanitized name with a disambiguating suffix, still within host filename byte limits. */
44
+ export function appendUniqueSuffix(sanitized, suffix) {
45
+ const dot = sanitized.lastIndexOf('.');
46
+ const hasExtension = dot > 0;
47
+ const base = hasExtension ? sanitized.slice(0, dot) : sanitized;
48
+ const extension = hasExtension ? sanitized.slice(dot) : '';
49
+ const suffixPart = `_${suffix}`;
50
+ const reservedBytes = Buffer.byteLength(suffixPart, 'utf8') +
51
+ Buffer.byteLength(extension, 'utf8');
52
+ const maxBaseBytes = MAX_FILENAME_BYTES - reservedBytes;
53
+ const truncatedBase = maxBaseBytes > 0
54
+ ? truncateUtf8Bytes(base, maxBaseBytes)
55
+ : EMPTY_SANITIZED_FILENAME;
56
+ const suffixed = hasExtension
57
+ ? `${truncatedBase || EMPTY_SANITIZED_FILENAME}${suffixPart}${extension}`
58
+ : `${truncatedBase || EMPTY_SANITIZED_FILENAME}${suffixPart}`;
59
+ return finalizeSegment(suffixed);
60
+ }
61
+ function isHighSurrogate(codePoint) {
62
+ return codePoint >= 0xd800 && codePoint <= 0xdbff;
63
+ }
64
+ function isLowSurrogate(codePoint) {
65
+ return codePoint >= 0xdc00 && codePoint <= 0xdfff;
66
+ }
67
+ /**
68
+ * Truncate a string to at most `byteLength` UTF-8 bytes without splitting code points.
69
+ * Ported from truncate-utf8-bytes (dependency of sanitize-filename).
70
+ */
71
+ function truncateUtf8Bytes(input, byteLength) {
72
+ let curByteLength = 0;
73
+ for (let i = 0; i < input.length; i += 1) {
74
+ const codePoint = input.charCodeAt(i);
75
+ let segment = input.charAt(i);
76
+ if (isHighSurrogate(codePoint) && isLowSurrogate(input.charCodeAt(i + 1))) {
77
+ i += 1;
78
+ segment += input.charAt(i);
79
+ }
80
+ const segmentBytes = Buffer.byteLength(segment, 'utf8');
81
+ curByteLength += segmentBytes;
82
+ if (curByteLength === byteLength) {
83
+ return input.slice(0, i + 1);
84
+ }
85
+ if (curByteLength > byteLength) {
86
+ return input.slice(0, i - segment.length + 1);
87
+ }
88
+ }
89
+ return input;
90
+ }
91
+ /**
92
+ * Strip trailing spaces and dots (invalid on Windows). Avoids regex backtracking (CWE-1333).
93
+ * Ported from sanitize-filename.
94
+ */
95
+ function replaceTrailingDotsAndSpaces(input, replacement) {
96
+ let end = input.length;
97
+ while (end > 0 && (input[end - 1] === '.' || input[end - 1] === ' ')) {
98
+ end -= 1;
99
+ }
100
+ return end < input.length ? input.slice(0, end) + replacement : input;
101
+ }
102
+ function stripWith(input, pattern, replacement = '') {
103
+ return input.replace(pattern, replacement);
104
+ }
105
+ function finalizeSegment(input) {
106
+ const truncated = truncateUtf8Bytes(input, MAX_FILENAME_BYTES);
107
+ return truncated || EMPTY_SANITIZED_FILENAME;
108
+ }
109
+ function sanitizeForWindows(name) {
110
+ let sanitized = stripWith(name, WINDOWS_ILLEGAL_RE);
111
+ sanitized = stripWith(sanitized, CONTROL_RE);
112
+ sanitized = stripWith(sanitized, RESERVED_DOTS_RE);
113
+ sanitized = stripWith(sanitized, WINDOWS_RESERVED_RE);
114
+ sanitized = replaceTrailingDotsAndSpaces(sanitized, '');
115
+ return finalizeSegment(sanitized);
116
+ }
117
+ function sanitizeForDarwin(name) {
118
+ let sanitized = stripWith(name, POSIX_PATH_SEP_RE);
119
+ sanitized = stripWith(sanitized, DARWIN_ILLEGAL_RE);
120
+ sanitized = stripWith(sanitized, CONTROL_RE);
121
+ sanitized = stripWith(sanitized, RESERVED_DOTS_RE);
122
+ return finalizeSegment(sanitized);
123
+ }
124
+ function sanitizeForPosix(name) {
125
+ let sanitized = stripWith(name, POSIX_PATH_SEP_RE);
126
+ sanitized = stripWith(sanitized, CONTROL_RE);
127
+ sanitized = stripWith(sanitized, RESERVED_DOTS_RE);
128
+ return finalizeSegment(sanitized);
129
+ }
130
+ //# sourceMappingURL=sanitize-local-filename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-local-filename.js","sourceRoot":"","sources":["../../../../../src/services/ios/afc/sanitize-local-filename.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-ios-remotexpc",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "main": "build/src/index.js",
5
5
  "types": "build/src/index.d.ts",
6
6
  "type": "module",
@@ -100,7 +100,7 @@
100
100
  },
101
101
  "dependencies": {
102
102
  "@appium/strongbox": "^1.0.0-rc.1",
103
- "@appium/support": "^7.0.0-rc.1",
103
+ "@appium/support": "^7.2.2",
104
104
  "@xmldom/xmldom": "^0.x",
105
105
  "appium-ios-tuntap": "^0.x",
106
106
  "async-lock": "^1.4.1",
@@ -32,6 +32,7 @@ import {
32
32
  } from './constants.js';
33
33
  import { AfcError, AfcFileMode, AfcOpcode } from './enums.js';
34
34
  import { AfcConnectionError } from './errors.js';
35
+ import { PullLocalNameAllocator } from './pull-local-name-allocator.js';
35
36
  import { createAfcReadStream, createAfcWriteStream } from './stream-utils.js';
36
37
 
37
38
  const log = getLogger('AfcService');
@@ -388,13 +389,23 @@ export class AfcService {
388
389
  throw new Error(`Remote path does not exist: ${remoteSrc}`);
389
390
  }
390
391
 
392
+ const localNames = new PullLocalNameAllocator(
393
+ (localPath) => this._localPathExists(localPath),
394
+ overwrite,
395
+ );
396
+
391
397
  const pullSingleFile = async (
392
398
  remoteFilePath: string,
393
399
  localFilePath: string,
400
+ nameAllocated = false,
394
401
  ): Promise<void> => {
395
402
  log.debug(`Pulling file from '${remoteFilePath}' to '${localFilePath}'`);
396
403
 
397
- if (!overwrite && (await this._localPathExists(localFilePath))) {
404
+ if (
405
+ !nameAllocated &&
406
+ !overwrite &&
407
+ (await this._localPathExists(localFilePath))
408
+ ) {
398
409
  throw new Error(`Local file already exists: ${localFilePath}`);
399
410
  }
400
411
 
@@ -408,18 +419,21 @@ export class AfcService {
408
419
  const isDir = await this.isdir(remoteSrc);
409
420
 
410
421
  if (!isDir) {
411
- const baseName = path.posix.basename(remoteSrc);
422
+ const remoteBaseName = path.posix.basename(remoteSrc);
412
423
 
413
- if (match && !minimatch(baseName, match)) {
424
+ if (match && !minimatch(remoteBaseName, match)) {
414
425
  return;
415
426
  }
416
427
 
417
428
  const localDstIsDirectory = await this._isLocalDirectory(localDst);
418
429
  const targetPath = localDstIsDirectory
419
- ? path.join(localDst, baseName)
430
+ ? path.join(
431
+ localDst,
432
+ await localNames.allocate(localDst, remoteBaseName),
433
+ )
420
434
  : localDst;
421
435
 
422
- await pullSingleFile(remoteSrc, targetPath);
436
+ await pullSingleFile(remoteSrc, targetPath, localDstIsDirectory);
423
437
  return;
424
438
  }
425
439
 
@@ -435,6 +449,7 @@ export class AfcService {
435
449
  match,
436
450
  overwrite,
437
451
  callback: onPullProgress,
452
+ localNames,
438
453
  });
439
454
  }
440
455
 
@@ -618,10 +633,21 @@ export class AfcService {
618
633
  private async _pullRecursiveInternal(
619
634
  remoteSrcDir: string,
620
635
  localDstDir: string,
621
- options?: Omit<PullOptions, 'recursive'>,
636
+ options?: Omit<PullOptions, 'recursive'> & {
637
+ localNames: PullLocalNameAllocator;
638
+ },
622
639
  relativePath = '',
623
640
  ): Promise<void> {
624
- const { match, overwrite = true, callback: onPullProgress } = options ?? {};
641
+ const {
642
+ match,
643
+ overwrite = true,
644
+ callback: onPullProgress,
645
+ localNames,
646
+ } = options ?? {};
647
+
648
+ if (!localNames) {
649
+ throw new Error('PullLocalNameAllocator is required for recursive pull');
650
+ }
625
651
 
626
652
  let localDirPath: string;
627
653
  if (!relativePath) {
@@ -643,9 +669,12 @@ export class AfcService {
643
669
  }
644
670
  }
645
671
 
646
- const baseName = path.posix.basename(remoteSrcDir);
672
+ const remoteBaseName = path.posix.basename(remoteSrcDir);
647
673
  localDirPath = localDstIsDirectory
648
- ? path.join(localDstDir, baseName)
674
+ ? path.join(
675
+ localDstDir,
676
+ await localNames.allocate(localDstDir, remoteBaseName),
677
+ )
649
678
  : localDstDir;
650
679
  } else {
651
680
  localDirPath = localDstDir;
@@ -675,11 +704,12 @@ export class AfcService {
675
704
  const entryRelativePath = relativePath
676
705
  ? path.posix.join(relativePath, entry)
677
706
  : entry;
707
+ const localEntryName = await localNames.allocate(localDirPath, entry);
678
708
 
679
709
  if (await this.isdir(entryPath)) {
680
710
  await this._pullRecursiveInternal(
681
711
  entryPath,
682
- path.join(localDirPath, entry),
712
+ path.join(localDirPath, localEntryName),
683
713
  options,
684
714
  entryRelativePath,
685
715
  );
@@ -690,11 +720,7 @@ export class AfcService {
690
720
 
691
721
  await ensureLocalDir();
692
722
 
693
- const targetPath = path.join(localDirPath, entry);
694
- if (!overwrite && (await this._localPathExists(targetPath))) {
695
- throw new Error(`Local file already exists: ${targetPath}`);
696
- }
697
-
723
+ const targetPath = path.join(localDirPath, localEntryName);
698
724
  await this._pullFile(entryPath, targetPath);
699
725
 
700
726
  if (onPullProgress) {
@@ -0,0 +1,173 @@
1
+ import { plist } from '@appium/support';
2
+ import { execFile } from 'node:child_process';
3
+ import fsp from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { promisify } from 'node:util';
7
+
8
+ import { getLogger } from '../../../lib/logger.js';
9
+
10
+ const log = getLogger('LocalFilesystemCase');
11
+
12
+ const execFileAsync = promisify(execFile);
13
+
14
+ const caseSensitivityByDevice = new Map<string, boolean>();
15
+
16
+ /** Subset of keys returned by `diskutil info -plist`. */
17
+ export interface DiskutilInfoPlist {
18
+ FilesystemName?: string;
19
+ FilesystemUserVisibleName?: string;
20
+ VolumeName?: string;
21
+ [key: string]: unknown;
22
+ }
23
+
24
+ /**
25
+ * Whether distinct path segments that differ only by letter case collide on `dir`.
26
+ *
27
+ * On macOS, uses `diskutil info -plist` for the volume backing `dir`. Results are
28
+ * cached per device identifier.
29
+ */
30
+ export async function isCaseSensitiveDirectory(dir: string): Promise<boolean> {
31
+ const resolved = await fsp.realpath(dir).catch(() => path.resolve(dir));
32
+
33
+ let caseSensitive: boolean;
34
+ switch (os.platform()) {
35
+ case 'win32':
36
+ caseSensitive = false;
37
+ break;
38
+ case 'linux':
39
+ caseSensitive = true;
40
+ break;
41
+ case 'darwin':
42
+ try {
43
+ caseSensitive = await getDarwinCaseSensitivity(resolved);
44
+ } catch (err) {
45
+ log.info(
46
+ `Could not determine case sensitivity for '${resolved}'; assuming case-insensitive:`,
47
+ err,
48
+ );
49
+ caseSensitive = false;
50
+ }
51
+ break;
52
+ default:
53
+ caseSensitive = true;
54
+ }
55
+
56
+ return caseSensitive;
57
+ }
58
+
59
+ /**
60
+ * Derive case sensitivity from a parsed `diskutil info -plist` object.
61
+ *
62
+ * Case-sensitive APFS reports `FilesystemName: Case-sensitive APFS` and/or
63
+ * `FilesystemUserVisibleName: APFS (Case-sensitive)`. Default APFS/HFS+ installs are
64
+ * case-insensitive when not labeled otherwise.
65
+ */
66
+ export function parseDiskutilInfoPlist(info: DiskutilInfoPlist): boolean {
67
+ const explicit = getExplicitCaseSensitiveField(info);
68
+ if (explicit !== undefined) {
69
+ return explicit;
70
+ }
71
+
72
+ const filesystemName = stringField(info.FilesystemName);
73
+ const visibleName = stringField(info.FilesystemUserVisibleName);
74
+
75
+ for (const value of [filesystemName, visibleName]) {
76
+ if (!value) {
77
+ continue;
78
+ }
79
+ if (/case-insensitive/i.test(value)) {
80
+ return false;
81
+ }
82
+ if (/case-sensitive/i.test(value)) {
83
+ return true;
84
+ }
85
+ }
86
+
87
+ if (
88
+ filesystemName?.includes('HFS') &&
89
+ !/case-sensitive/i.test(filesystemName)
90
+ ) {
91
+ return false;
92
+ }
93
+
94
+ if (filesystemName === 'APFS' || visibleName === 'APFS') {
95
+ return false;
96
+ }
97
+
98
+ throw new Error(
99
+ 'diskutil info plist did not include recognizable case-sensitivity details',
100
+ );
101
+ }
102
+
103
+ /** @internal Reset cached probe results (unit tests only). */
104
+ export function clearCaseSensitivityCache(): void {
105
+ caseSensitivityByDevice.clear();
106
+ }
107
+
108
+ async function getDarwinCaseSensitivity(dir: string): Promise<boolean> {
109
+ const device = await getDeviceIdentifierForPath(dir);
110
+ const cached = caseSensitivityByDevice.get(device);
111
+ if (cached !== undefined) {
112
+ return cached;
113
+ }
114
+
115
+ const { stdout } = await execFileAsync(
116
+ 'diskutil',
117
+ ['info', '-plist', device],
118
+ {
119
+ encoding: 'utf8',
120
+ maxBuffer: 4 * 1024 * 1024,
121
+ },
122
+ );
123
+
124
+ const diskInfo = plist.parsePlist(stdout) as DiskutilInfoPlist;
125
+ const caseSensitive = parseDiskutilInfoPlist(diskInfo);
126
+ caseSensitivityByDevice.set(device, caseSensitive);
127
+ return caseSensitive;
128
+ }
129
+
130
+ async function getDeviceIdentifierForPath(dir: string): Promise<string> {
131
+ const { stdout } = await execFileAsync('df', ['-P', dir], {
132
+ encoding: 'utf8',
133
+ });
134
+ const lines = stdout.trim().split('\n');
135
+ const dataLine = lines[lines.length - 1];
136
+ if (!dataLine) {
137
+ throw new Error(`df produced no output for '${dir}'`);
138
+ }
139
+
140
+ const devicePath = dataLine.split(/\s+/)[0];
141
+ if (!devicePath?.startsWith('/dev/')) {
142
+ throw new Error(`Unexpected df device for '${dir}': ${devicePath ?? ''}`);
143
+ }
144
+
145
+ return devicePath.slice('/dev/'.length);
146
+ }
147
+
148
+ function getExplicitCaseSensitiveField(
149
+ info: DiskutilInfoPlist,
150
+ ): boolean | undefined {
151
+ for (const [key, value] of Object.entries(info)) {
152
+ if (!/case-sensitive/i.test(key)) {
153
+ continue;
154
+ }
155
+ if (typeof value === 'boolean') {
156
+ return value;
157
+ }
158
+ if (typeof value === 'string') {
159
+ const normalized = value.toLowerCase();
160
+ if (normalized === 'yes' || normalized === 'true') {
161
+ return true;
162
+ }
163
+ if (normalized === 'no' || normalized === 'false') {
164
+ return false;
165
+ }
166
+ }
167
+ }
168
+ return undefined;
169
+ }
170
+
171
+ function stringField(value: unknown): string | undefined {
172
+ return typeof value === 'string' ? value : undefined;
173
+ }
@@ -0,0 +1,107 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import path from 'node:path';
3
+
4
+ import { isCaseSensitiveDirectory } from './local-filesystem-case.js';
5
+ import {
6
+ appendUniqueSuffix,
7
+ sanitizeLocalFilename,
8
+ } from './sanitize-local-filename.js';
9
+
10
+ const MAX_ALLOCATION_ATTEMPTS = 100;
11
+
12
+ export type CaseSensitiveDirectoryCheck = (dir: string) => Promise<boolean>;
13
+
14
+ /**
15
+ * Resolves sanitized local path segment names during a single AFC pull.
16
+ * Adds a UUID-based suffix when the sanitized name is already taken in this pull, or
17
+ * when `overwrite` is false and a file already exists at that path on disk.
18
+ */
19
+ export class PullLocalNameAllocator {
20
+ private readonly usedByDir = new Map<string, Set<string>>();
21
+ private readonly caseSensitiveByDir = new Map<string, boolean>();
22
+
23
+ constructor(
24
+ private readonly pathExists: (localPath: string) => Promise<boolean>,
25
+ private readonly overwrite: boolean,
26
+ private readonly checkCaseSensitive: CaseSensitiveDirectoryCheck = isCaseSensitiveDirectory,
27
+ ) {}
28
+
29
+ async allocate(parentDir: string, remoteSegment: string): Promise<string> {
30
+ const sanitized = sanitizeLocalFilename(remoteSegment);
31
+
32
+ for (let attempt = 0; attempt < MAX_ALLOCATION_ATTEMPTS; attempt += 1) {
33
+ const candidate =
34
+ attempt === 0
35
+ ? sanitized
36
+ : appendUniqueSuffix(sanitized, randomSuffix());
37
+
38
+ if (!(await this.hasClash(parentDir, candidate))) {
39
+ this.register(parentDir, candidate);
40
+ return candidate;
41
+ }
42
+ }
43
+
44
+ throw new Error(
45
+ `Could not allocate a unique local name for remote segment '${remoteSegment}'`,
46
+ );
47
+ }
48
+
49
+ private async hasClash(parentDir: string, name: string): Promise<boolean> {
50
+ if (await this.isUsedInPull(parentDir, name)) {
51
+ return true;
52
+ }
53
+ if (!this.overwrite) {
54
+ return this.pathExists(path.join(parentDir, name));
55
+ }
56
+ return false;
57
+ }
58
+
59
+ private async isUsedInPull(
60
+ parentDir: string,
61
+ name: string,
62
+ ): Promise<boolean> {
63
+ const used = this.usedByDir.get(parentDir);
64
+ if (!used) {
65
+ return false;
66
+ }
67
+ for (const existing of used) {
68
+ if (await this.namesCollide(parentDir, existing, name)) {
69
+ return true;
70
+ }
71
+ }
72
+ return false;
73
+ }
74
+
75
+ private async namesCollide(
76
+ parentDir: string,
77
+ a: string,
78
+ b: string,
79
+ ): Promise<boolean> {
80
+ if (await this.isCaseSensitiveForDir(parentDir)) {
81
+ return a === b;
82
+ }
83
+ return a.toLowerCase() === b.toLowerCase();
84
+ }
85
+
86
+ private async isCaseSensitiveForDir(parentDir: string): Promise<boolean> {
87
+ let caseSensitive = this.caseSensitiveByDir.get(parentDir);
88
+ if (caseSensitive === undefined) {
89
+ caseSensitive = await this.checkCaseSensitive(parentDir);
90
+ this.caseSensitiveByDir.set(parentDir, caseSensitive);
91
+ }
92
+ return caseSensitive;
93
+ }
94
+
95
+ private register(parentDir: string, name: string): void {
96
+ let used = this.usedByDir.get(parentDir);
97
+ if (!used) {
98
+ used = new Set();
99
+ this.usedByDir.set(parentDir, used);
100
+ }
101
+ used.add(name);
102
+ }
103
+ }
104
+
105
+ function randomSuffix(): string {
106
+ return randomUUID().replace(/-/g, '').slice(0, 8);
107
+ }
@@ -0,0 +1,163 @@
1
+ import os from 'node:os';
2
+
3
+ /** Fallback when a remote name has no safe local characters after sanitization. */
4
+ export const EMPTY_SANITIZED_FILENAME = '_';
5
+
6
+ const MAX_FILENAME_BYTES = 255;
7
+
8
+ /** C0 and C1 Unicode control characters. */
9
+ // eslint-disable-next-line no-control-regex -- intentional filename sanitization
10
+ const CONTROL_RE = /[\x00-\x1f\x80-\x9f]/g;
11
+
12
+ /** Characters invalid on Windows filenames. */
13
+ const WINDOWS_ILLEGAL_RE = /[/?<>\\:*|"]/g;
14
+
15
+ /** Path separator on Unix-like systems (and macOS). */
16
+ const POSIX_PATH_SEP_RE = /\//g;
17
+
18
+ /** Colon is invalid in macOS / HFS+ / APFS file names. */
19
+ const DARWIN_ILLEGAL_RE = /:/g;
20
+
21
+ /** Unix reserved single-segment names (`.` and `..`). */
22
+ const RESERVED_DOTS_RE = /^\.+$/;
23
+
24
+ /** Windows reserved device names (case-insensitive, optional extension). */
25
+ const WINDOWS_RESERVED_RE = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;
26
+
27
+ /**
28
+ * Sanitize a single path segment from the device for use on the local filesystem.
29
+ *
30
+ * Rules are chosen from {@link os.platform} at pull time (the host writing files).
31
+ */
32
+ export function sanitizeLocalFilename(name: string): string {
33
+ switch (os.platform()) {
34
+ case 'win32':
35
+ return sanitizeForWindows(name);
36
+ case 'darwin':
37
+ return sanitizeForDarwin(name);
38
+ default:
39
+ return sanitizeForPosix(name);
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Insert a unique suffix before the file extension (or at the end when there is none).
45
+ */
46
+ export function withUniqueSuffix(filename: string, suffix: string): string {
47
+ const dot = filename.lastIndexOf('.');
48
+ if (dot > 0) {
49
+ return `${filename.slice(0, dot)}_${suffix}${filename.slice(dot)}`;
50
+ }
51
+ return `${filename}_${suffix}`;
52
+ }
53
+
54
+ /** Sanitized name with a disambiguating suffix, still within host filename byte limits. */
55
+ export function appendUniqueSuffix(sanitized: string, suffix: string): string {
56
+ const dot = sanitized.lastIndexOf('.');
57
+ const hasExtension = dot > 0;
58
+ const base = hasExtension ? sanitized.slice(0, dot) : sanitized;
59
+ const extension = hasExtension ? sanitized.slice(dot) : '';
60
+ const suffixPart = `_${suffix}`;
61
+
62
+ const reservedBytes =
63
+ Buffer.byteLength(suffixPart, 'utf8') +
64
+ Buffer.byteLength(extension, 'utf8');
65
+ const maxBaseBytes = MAX_FILENAME_BYTES - reservedBytes;
66
+
67
+ const truncatedBase =
68
+ maxBaseBytes > 0
69
+ ? truncateUtf8Bytes(base, maxBaseBytes)
70
+ : EMPTY_SANITIZED_FILENAME;
71
+
72
+ const suffixed = hasExtension
73
+ ? `${truncatedBase || EMPTY_SANITIZED_FILENAME}${suffixPart}${extension}`
74
+ : `${truncatedBase || EMPTY_SANITIZED_FILENAME}${suffixPart}`;
75
+
76
+ return finalizeSegment(suffixed);
77
+ }
78
+
79
+ function isHighSurrogate(codePoint: number): boolean {
80
+ return codePoint >= 0xd800 && codePoint <= 0xdbff;
81
+ }
82
+
83
+ function isLowSurrogate(codePoint: number): boolean {
84
+ return codePoint >= 0xdc00 && codePoint <= 0xdfff;
85
+ }
86
+
87
+ /**
88
+ * Truncate a string to at most `byteLength` UTF-8 bytes without splitting code points.
89
+ * Ported from truncate-utf8-bytes (dependency of sanitize-filename).
90
+ */
91
+ function truncateUtf8Bytes(input: string, byteLength: number): string {
92
+ let curByteLength = 0;
93
+
94
+ for (let i = 0; i < input.length; i += 1) {
95
+ const codePoint = input.charCodeAt(i);
96
+ let segment = input.charAt(i);
97
+
98
+ if (isHighSurrogate(codePoint) && isLowSurrogate(input.charCodeAt(i + 1))) {
99
+ i += 1;
100
+ segment += input.charAt(i);
101
+ }
102
+
103
+ const segmentBytes = Buffer.byteLength(segment, 'utf8');
104
+ curByteLength += segmentBytes;
105
+
106
+ if (curByteLength === byteLength) {
107
+ return input.slice(0, i + 1);
108
+ }
109
+ if (curByteLength > byteLength) {
110
+ return input.slice(0, i - segment.length + 1);
111
+ }
112
+ }
113
+
114
+ return input;
115
+ }
116
+
117
+ /**
118
+ * Strip trailing spaces and dots (invalid on Windows). Avoids regex backtracking (CWE-1333).
119
+ * Ported from sanitize-filename.
120
+ */
121
+ function replaceTrailingDotsAndSpaces(
122
+ input: string,
123
+ replacement: string,
124
+ ): string {
125
+ let end = input.length;
126
+ while (end > 0 && (input[end - 1] === '.' || input[end - 1] === ' ')) {
127
+ end -= 1;
128
+ }
129
+ return end < input.length ? input.slice(0, end) + replacement : input;
130
+ }
131
+
132
+ function stripWith(input: string, pattern: RegExp, replacement = ''): string {
133
+ return input.replace(pattern, replacement);
134
+ }
135
+
136
+ function finalizeSegment(input: string): string {
137
+ const truncated = truncateUtf8Bytes(input, MAX_FILENAME_BYTES);
138
+ return truncated || EMPTY_SANITIZED_FILENAME;
139
+ }
140
+
141
+ function sanitizeForWindows(name: string): string {
142
+ let sanitized = stripWith(name, WINDOWS_ILLEGAL_RE);
143
+ sanitized = stripWith(sanitized, CONTROL_RE);
144
+ sanitized = stripWith(sanitized, RESERVED_DOTS_RE);
145
+ sanitized = stripWith(sanitized, WINDOWS_RESERVED_RE);
146
+ sanitized = replaceTrailingDotsAndSpaces(sanitized, '');
147
+ return finalizeSegment(sanitized);
148
+ }
149
+
150
+ function sanitizeForDarwin(name: string): string {
151
+ let sanitized = stripWith(name, POSIX_PATH_SEP_RE);
152
+ sanitized = stripWith(sanitized, DARWIN_ILLEGAL_RE);
153
+ sanitized = stripWith(sanitized, CONTROL_RE);
154
+ sanitized = stripWith(sanitized, RESERVED_DOTS_RE);
155
+ return finalizeSegment(sanitized);
156
+ }
157
+
158
+ function sanitizeForPosix(name: string): string {
159
+ let sanitized = stripWith(name, POSIX_PATH_SEP_RE);
160
+ sanitized = stripWith(sanitized, CONTROL_RE);
161
+ sanitized = stripWith(sanitized, RESERVED_DOTS_RE);
162
+ return finalizeSegment(sanitized);
163
+ }