appium-xcode 6.2.0 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [6.2.1](https://github.com/appium/appium-xcode/compare/v6.2.0...v6.2.1) (2026-04-29)
2
+
3
+ ### Bug Fixes
4
+
5
+ * Memoize implementation ([#174](https://github.com/appium/appium-xcode/issues/174)) ([e5e09a5](https://github.com/appium/appium-xcode/commit/e5e09a5a6570f213c47a9318446a5ff7fcea2af9))
6
+
1
7
  ## [6.2.0](https://github.com/appium/appium-xcode/compare/v6.1.10...v6.2.0) (2026-04-27)
2
8
 
3
9
  ### Features
@@ -1,12 +1,13 @@
1
1
  import type { TeenProcessExecResult } from 'teen_process';
2
2
  export declare const XCRUN_TIMEOUT = 15000;
3
+ type AnyFunction = (this: any, ...args: any[]) => any;
3
4
  /**
4
- * Memoizes function calls by caching results for serialized argument lists.
5
+ * Memoizes function calls by traversing a nested argument-keyed map.
5
6
  *
6
7
  * @param fn The function to memoize
7
8
  * @returns A memoized wrapper around the input function
8
9
  */
9
- export declare function memoize<Args extends unknown[], Result>(fn: (...args: Args) => Result): (...args: Args) => Result;
10
+ export declare function memoize<F extends AnyFunction>(fn: F): F;
10
11
  /**
11
12
  * Executes 'xcrun' command line utility
12
13
  *
@@ -30,4 +31,5 @@ export declare function findAppPaths(bundleId: string): Promise<string[]>;
30
31
  * @returns All plist entries as an object or an empty object if no plist was found
31
32
  */
32
33
  export declare function readXcodePlist(developerRoot: string): Promise<Record<string, any>>;
34
+ export {};
33
35
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../lib/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAIxD,eAAO,MAAM,aAAa,QAAQ,CAAC;AAEnC;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EACpD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,GAC5B,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAS3B;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,MAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAWxC;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwBtE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAGxF"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../lib/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAIxD,eAAO,MAAM,aAAa,QAAQ,CAAC;AAEnC,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,WAAW,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAyBvD;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,MAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAWxC;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwBtE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAGxF"}
@@ -13,20 +13,30 @@ const support_1 = require("@appium/support");
13
13
  const node_path_1 = __importDefault(require("node:path"));
14
14
  exports.XCRUN_TIMEOUT = 15000;
15
15
  /**
16
- * Memoizes function calls by caching results for serialized argument lists.
16
+ * Memoizes function calls by traversing a nested argument-keyed map.
17
17
  *
18
18
  * @param fn The function to memoize
19
19
  * @returns A memoized wrapper around the input function
20
20
  */
21
21
  function memoize(fn) {
22
- const cache = new Map();
23
- return (...args) => {
24
- const key = JSON.stringify(args);
25
- if (!cache.has(key)) {
26
- cache.set(key, fn(...args));
22
+ const rootCache = new Map();
23
+ const RESULT = Symbol('memoize.result');
24
+ function memoized(...args) {
25
+ let currentCache = rootCache;
26
+ for (const arg of args) {
27
+ if (!currentCache.has(arg)) {
28
+ currentCache.set(arg, new Map());
29
+ }
30
+ currentCache = currentCache.get(arg);
27
31
  }
28
- return cache.get(key);
29
- };
32
+ if (currentCache.has(RESULT)) {
33
+ return currentCache.get(RESULT);
34
+ }
35
+ const result = fn.apply(this, args);
36
+ currentCache.set(RESULT, result);
37
+ return result;
38
+ }
39
+ return memoized;
30
40
  }
31
41
  /**
32
42
  * Executes 'xcrun' command line utility
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../lib/helpers.ts"],"names":[],"mappings":";;;;;;AAaA,0BAWC;AAUD,0CAcC;AAQD,oCAwBC;AAQD,wCAGC;AA3FD,+CAAkC;AAElC,6CAA0C;AAC1C,0DAA6B;AAEhB,QAAA,aAAa,GAAG,KAAK,CAAC;AAEnC;;;;;GAKG;AACH,SAAgB,OAAO,CACrB,EAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,OAAO,CAAC,GAAG,IAAU,EAAU,EAAE;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAW,CAAC;IAClC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CACnC,IAAc,EACd,UAAkB,qBAAa;IAE/B,IAAI,CAAC;QACH,OAAO,MAAM,IAAA,mBAAI,EAAC,OAAO,EAAE,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iDAAiD;QACjD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAChD,CAAC;QAED,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,CAAC,EAAC,MAAM,EAAC,GAAG,MAAM,IAAA,mBAAI,EAAC,iBAAiB,EAAE,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM;SACxB,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,KAAK,IAAI,EAAE;QACV,IAAI,MAAM,YAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC,CAAC,EAAE,CACL,CAAC;IACF,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,cAAc,CAAC,aAAqB;IACxD,MAAM,SAAS,GAAG,mBAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAClE,OAAO,CAAC,MAAM,YAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,eAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnF,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../lib/helpers.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { getPath, getVersion, getMaxIOSSDK, getMaxTVOSSDK, getClangVersion } from './xcode';
2
2
  declare const xcode: {
3
- getPath: (timeout?: number | undefined) => Promise<string>;
3
+ getPath: (timeout?: number) => Promise<string>;
4
4
  getVersion: typeof getVersion;
5
- getMaxIOSSDK: (retries?: number | undefined, timeout?: number | undefined) => Promise<string | null>;
6
- getMaxTVOSSDK: (retries?: number | undefined, timeout?: number | undefined) => Promise<string>;
5
+ getMaxIOSSDK: (retries?: number, timeout?: number) => Promise<string | null>;
6
+ getMaxTVOSSDK: (retries?: number, timeout?: number) => Promise<string>;
7
7
  getClangVersion: typeof getClangVersion;
8
8
  };
9
9
  export { getPath, getVersion, getMaxIOSSDK, getMaxTVOSSDK, getClangVersion };
@@ -22,7 +22,7 @@ export declare function getPathFromDeveloperDir(): Promise<string>;
22
22
  * @returns Full path to Xcode Developer subfolder timeout
23
23
  * @throws {Error} If there was an error while retrieving the path.
24
24
  */
25
- export declare const getPath: (timeout?: number | undefined) => Promise<string>;
25
+ export declare const getPath: (timeout?: number) => Promise<string>;
26
26
  /**
27
27
  * Retrieves Xcode version
28
28
  *
@@ -59,7 +59,7 @@ export declare function getMaxIOSSDKWithoutRetry(timeout?: number): Promise<stri
59
59
  * @returns The SDK version
60
60
  * @throws {Error} If the SDK version number cannot be determined
61
61
  */
62
- export declare const getMaxIOSSDK: (retries?: number | undefined, timeout?: number | undefined) => Promise<string | null>;
62
+ export declare const getMaxIOSSDK: (retries?: number, timeout?: number) => Promise<string | null>;
63
63
  /**
64
64
  * Retrieves the maximum version of tvOS SDK supported by the installed Xcode
65
65
  *
@@ -76,5 +76,5 @@ export declare function getMaxTVOSSDKWithoutRetry(timeout?: number): Promise<str
76
76
  * @returns The SDK version
77
77
  * @throws {Error} If the SDK version number cannot be determined
78
78
  */
79
- export declare const getMaxTVOSSDK: (retries?: number | undefined, timeout?: number | undefined) => Promise<string>;
79
+ export declare const getMaxTVOSSDK: (retries?: number, timeout?: number) => Promise<string>;
80
80
  //# sourceMappingURL=xcode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"xcode.d.ts","sourceRoot":"","sources":["../../lib/xcode.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,SAAS,CAAC;AAO1C;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuC7F;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAe/D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,mDAGnB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACpG,wBAAsB,UAAU,CAC9B,KAAK,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CAAC;AA0BzB;;;;;;;GAOG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB9D;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/F;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,wFAKvB,CAAC;AAEH;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhG;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,iFAKxB,CAAC"}
1
+ {"version":3,"file":"xcode.d.ts","sourceRoot":"","sources":["../../lib/xcode.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,SAAS,CAAC;AAO1C;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuC7F;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAe/D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,aACR,MAAM,KAAmB,OAAO,CAAC,MAAM,CAElD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACpG,wBAAsB,UAAU,CAC9B,KAAK,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CAAC;AA0BzB;;;;;;;GAOG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB9D;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/F;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,aACd,MAAM,YACN,MAAM,2BAGf,CAAC;AAEH;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhG;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,aACf,MAAM,YACN,MAAM,KACd,OAAO,CAAC,MAAM,CAEf,CAAC"}
package/lib/helpers.ts CHANGED
@@ -5,23 +5,39 @@ import path from 'node:path';
5
5
 
6
6
  export const XCRUN_TIMEOUT = 15000;
7
7
 
8
+ type AnyFunction = (this: any, ...args: any[]) => any;
9
+
8
10
  /**
9
- * Memoizes function calls by caching results for serialized argument lists.
11
+ * Memoizes function calls by traversing a nested argument-keyed map.
10
12
  *
11
13
  * @param fn The function to memoize
12
14
  * @returns A memoized wrapper around the input function
13
15
  */
14
- export function memoize<Args extends unknown[], Result>(
15
- fn: (...args: Args) => Result,
16
- ): (...args: Args) => Result {
17
- const cache = new Map<string, Result>();
18
- return (...args: Args): Result => {
19
- const key = JSON.stringify(args);
20
- if (!cache.has(key)) {
21
- cache.set(key, fn(...args));
16
+ export function memoize<F extends AnyFunction>(fn: F): F {
17
+ const rootCache = new Map<any, any>();
18
+ const RESULT = Symbol('memoize.result');
19
+
20
+ function memoized(this: ThisParameterType<F>, ...args: Parameters<F>): ReturnType<F> {
21
+ let currentCache = rootCache;
22
+
23
+ for (const arg of args) {
24
+ if (!currentCache.has(arg)) {
25
+ currentCache.set(arg, new Map());
26
+ }
27
+ currentCache = currentCache.get(arg);
28
+ }
29
+
30
+ if (currentCache.has(RESULT)) {
31
+ return currentCache.get(RESULT);
22
32
  }
23
- return cache.get(key) as Result;
24
- };
33
+
34
+ const result = fn.apply(this, args);
35
+ currentCache.set(RESULT, result);
36
+
37
+ return result;
38
+ }
39
+
40
+ return memoized as F;
25
41
  }
26
42
 
27
43
  /**
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "ios",
7
7
  "xcode"
8
8
  ],
9
- "version": "6.2.0",
9
+ "version": "6.2.1",
10
10
  "author": "Appium Contributors",
11
11
  "license": "Apache-2.0",
12
12
  "repository": {