execbro 2.9.0 → 2.9.2
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/build/__tests__/unit/activateLicenseMessage.test.d.ts +2 -0
- package/build/__tests__/unit/activateLicenseMessage.test.d.ts.map +1 -0
- package/build/__tests__/unit/activateLicenseMessage.test.js +62 -0
- package/build/__tests__/unit/activateLicenseMessage.test.js.map +1 -0
- package/build/__tests__/unit/androidDeviceAppLookup.test.d.ts +2 -0
- package/build/__tests__/unit/androidDeviceAppLookup.test.d.ts.map +1 -0
- package/build/__tests__/unit/androidDeviceAppLookup.test.js +49 -0
- package/build/__tests__/unit/androidDeviceAppLookup.test.js.map +1 -0
- package/build/__tests__/unit/autoReconnectOptOut.test.d.ts +2 -0
- package/build/__tests__/unit/autoReconnectOptOut.test.d.ts.map +1 -0
- package/build/__tests__/unit/autoReconnectOptOut.test.js +37 -0
- package/build/__tests__/unit/autoReconnectOptOut.test.js.map +1 -0
- package/build/__tests__/unit/connection-health.test.js +25 -0
- package/build/__tests__/unit/connection-health.test.js.map +1 -1
- package/build/__tests__/unit/deviceResolver.test.js +104 -0
- package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
- package/build/__tests__/unit/inputTarget.test.js +150 -0
- package/build/__tests__/unit/inputTarget.test.js.map +1 -1
- package/build/__tests__/unit/sdkMirrorPoller.test.js +58 -6
- package/build/__tests__/unit/sdkMirrorPoller.test.js.map +1 -1
- package/build/__tests__/unit/textEntry.test.js +57 -0
- package/build/__tests__/unit/textEntry.test.js.map +1 -1
- package/build/__tests__/unit/usageNotifications.test.js +37 -1
- package/build/__tests__/unit/usageNotifications.test.js.map +1 -1
- package/build/core/bundle.d.ts.map +1 -1
- package/build/core/bundle.js +2 -2
- package/build/core/bundle.js.map +1 -1
- package/build/core/connection.d.ts +1 -0
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +13 -13
- package/build/core/connection.js.map +1 -1
- package/build/core/deviceResolver.d.ts +4 -1
- package/build/core/deviceResolver.d.ts.map +1 -1
- package/build/core/deviceResolver.js +9 -7
- package/build/core/deviceResolver.js.map +1 -1
- package/build/core/inputTarget.d.ts.map +1 -1
- package/build/core/inputTarget.js +77 -25
- package/build/core/inputTarget.js.map +1 -1
- package/build/core/jsExecute.d.ts.map +1 -1
- package/build/core/jsExecute.js +4 -0
- package/build/core/jsExecute.js.map +1 -1
- package/build/core/license.d.ts +0 -1
- package/build/core/license.d.ts.map +1 -1
- package/build/core/license.js +0 -2
- package/build/core/license.js.map +1 -1
- package/build/core/sdkMirrorPoller.d.ts +1 -0
- package/build/core/sdkMirrorPoller.d.ts.map +1 -1
- package/build/core/sdkMirrorPoller.js +24 -5
- package/build/core/sdkMirrorPoller.js.map +1 -1
- package/build/core/textEntry.d.ts.map +1 -1
- package/build/core/textEntry.js +9 -8
- package/build/core/textEntry.js.map +1 -1
- package/build/pro/usageNotifications.d.ts.map +1 -1
- package/build/pro/usageNotifications.js +10 -3
- package/build/pro/usageNotifications.js.map +1 -1
- package/build/tools/_deviceArg.d.ts +2 -1
- package/build/tools/_deviceArg.d.ts.map +1 -1
- package/build/tools/_deviceArg.js +2 -2
- package/build/tools/_deviceArg.js.map +1 -1
- package/build/tools/accountTools.d.ts +1 -0
- package/build/tools/accountTools.d.ts.map +1 -1
- package/build/tools/accountTools.js +23 -1
- package/build/tools/accountTools.js.map +1 -1
- package/build/tools/deviceTools.d.ts.map +1 -1
- package/build/tools/deviceTools.js +1 -1
- package/build/tools/deviceTools.js.map +1 -1
- package/build/tools/screenshotTools.d.ts.map +1 -1
- package/build/tools/screenshotTools.js +4 -4
- package/build/tools/screenshotTools.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activateLicenseMessage.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/activateLicenseMessage.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jest, describe, it, expect, beforeEach } from "@jest/globals";
|
|
2
|
+
const getUsageInfo = jest.fn();
|
|
3
|
+
const getDashboardUrl = jest.fn();
|
|
4
|
+
jest.unstable_mockModule("../../core/license.js", () => ({
|
|
5
|
+
getUsageInfo,
|
|
6
|
+
getDashboardUrl,
|
|
7
|
+
GRACE_WINDOW_MS: 0,
|
|
8
|
+
computeOfflineUsage: jest.fn(),
|
|
9
|
+
ensureLicense: jest.fn(),
|
|
10
|
+
formatPlanPrice: jest.fn(),
|
|
11
|
+
getLicenseStatus: jest.fn(),
|
|
12
|
+
getPricingInfo: jest.fn(),
|
|
13
|
+
incrementLocalUsage: jest.fn(),
|
|
14
|
+
refreshLicense: jest.fn(),
|
|
15
|
+
requestLinkToken: jest.fn(),
|
|
16
|
+
resetLicense: jest.fn(),
|
|
17
|
+
}));
|
|
18
|
+
jest.unstable_mockModule("../../pro/usageGate.js", () => ({
|
|
19
|
+
freezeSessionVerdict: jest.fn(),
|
|
20
|
+
isToolBlocked: jest.fn(),
|
|
21
|
+
refreezeSessionVerdict: jest.fn(),
|
|
22
|
+
resetGateForTests: jest.fn(),
|
|
23
|
+
usageWarningLine: jest.fn(),
|
|
24
|
+
}));
|
|
25
|
+
const { describeActivation } = await import("../../tools/accountTools.js");
|
|
26
|
+
describe("describeActivation", () => {
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
getUsageInfo.mockReset();
|
|
29
|
+
getDashboardUrl.mockReset();
|
|
30
|
+
getDashboardUrl.mockReturnValue("https://stage.execbro.com");
|
|
31
|
+
});
|
|
32
|
+
it("confirms plainly on pro and says nothing about caps", () => {
|
|
33
|
+
getUsageInfo.mockReturnValue(null);
|
|
34
|
+
const text = describeActivation("pro");
|
|
35
|
+
expect(text).toBe("License activated. You're now on the Pro plan.");
|
|
36
|
+
expect(text).not.toMatch(/cap/i);
|
|
37
|
+
});
|
|
38
|
+
it("does not claim an upgrade when the linked account is free", () => {
|
|
39
|
+
getUsageInfo.mockReturnValue({ used: 2496, limit: 600, canUse: false, resetsAt: "2026-09-01T00:00:00.000Z" });
|
|
40
|
+
const text = describeActivation("free");
|
|
41
|
+
expect(text).not.toMatch(/License activated/i);
|
|
42
|
+
expect(text).toMatch(/no active Pro subscription/i);
|
|
43
|
+
expect(text).toMatch(/2496\/600/);
|
|
44
|
+
});
|
|
45
|
+
it("says calls stay blocked when the cap is already reached", () => {
|
|
46
|
+
getUsageInfo.mockReturnValue({ used: 2496, limit: 600, canUse: false, resetsAt: "2026-09-01T00:00:00.000Z" });
|
|
47
|
+
expect(describeActivation("free")).toMatch(/stay blocked/i);
|
|
48
|
+
});
|
|
49
|
+
it("omits the blocked warning while the caller still has calls left", () => {
|
|
50
|
+
getUsageInfo.mockReturnValue({ used: 12, limit: 600, canUse: true, resetsAt: "2026-09-01T00:00:00.000Z" });
|
|
51
|
+
const text = describeActivation("free");
|
|
52
|
+
expect(text).toMatch(/12\/600/);
|
|
53
|
+
expect(text).not.toMatch(/stay blocked/i);
|
|
54
|
+
});
|
|
55
|
+
it("still explains itself when no usage verdict is available", () => {
|
|
56
|
+
getUsageInfo.mockReturnValue(null);
|
|
57
|
+
const text = describeActivation("free");
|
|
58
|
+
expect(text).toMatch(/no active Pro subscription/i);
|
|
59
|
+
expect(text).toMatch(/stage\.execbro\.com\/pricing/);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=activateLicenseMessage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activateLicenseMessage.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/activateLicenseMessage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"androidDeviceAppLookup.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/androidDeviceAppLookup.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "@jest/globals";
|
|
2
|
+
import WebSocket from "ws";
|
|
3
|
+
const { connectedApps } = await import("../../core/state.js");
|
|
4
|
+
const { getConnectedAppByAndroidDeviceId } = await import("../../core/connection.js");
|
|
5
|
+
function makeAndroidApp(key, deviceName, adbSerial) {
|
|
6
|
+
return {
|
|
7
|
+
ws: { readyState: WebSocket.OPEN },
|
|
8
|
+
deviceInfo: {
|
|
9
|
+
id: key,
|
|
10
|
+
title: "Hermes React Native",
|
|
11
|
+
description: "",
|
|
12
|
+
appId: "com.test",
|
|
13
|
+
type: "node",
|
|
14
|
+
webSocketDebuggerUrl: `ws://localhost:8081/${key}`,
|
|
15
|
+
deviceName
|
|
16
|
+
},
|
|
17
|
+
port: 8081,
|
|
18
|
+
platform: "android",
|
|
19
|
+
...(adbSerial ? { adbSerial } : {})
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
describe("getConnectedAppByAndroidDeviceId", () => {
|
|
23
|
+
beforeEach(() => connectedApps.clear());
|
|
24
|
+
afterEach(() => connectedApps.clear());
|
|
25
|
+
it("returns the sole connected Android app when no deviceId is given", () => {
|
|
26
|
+
const app = makeAndroidApp("a", "sdk_gphone16k_arm64 - 17 - API 37", "emulator-5554");
|
|
27
|
+
connectedApps.set("a", app);
|
|
28
|
+
expect(getConnectedAppByAndroidDeviceId()).toBe(app);
|
|
29
|
+
});
|
|
30
|
+
it("still matches the connected emulator when its adb serial is passed", () => {
|
|
31
|
+
const app = makeAndroidApp("a", "sdk_gphone16k_arm64 - 17 - API 37", "emulator-5554");
|
|
32
|
+
connectedApps.set("a", app);
|
|
33
|
+
expect(getConnectedAppByAndroidDeviceId("emulator-5554")).toBe(app);
|
|
34
|
+
});
|
|
35
|
+
it("matches on the RN-reported device name with separator drift", () => {
|
|
36
|
+
const app = makeAndroidApp("a", "SM-A356N - 15 - API 35", "R5CT30ABCDE");
|
|
37
|
+
connectedApps.set("a", app);
|
|
38
|
+
expect(getConnectedAppByAndroidDeviceId("SM_A356N")).toBe(app);
|
|
39
|
+
});
|
|
40
|
+
it("returns null for a device that has no connected app, instead of the only Android app", () => {
|
|
41
|
+
connectedApps.set("a", makeAndroidApp("a", "sdk_gphone16k_arm64 - 17 - API 37", "emulator-5554"));
|
|
42
|
+
expect(getConnectedAppByAndroidDeviceId("RFCX20CLX3F")).toBeNull();
|
|
43
|
+
});
|
|
44
|
+
it("returns null when nothing Android is connected", () => {
|
|
45
|
+
expect(getConnectedAppByAndroidDeviceId()).toBeNull();
|
|
46
|
+
expect(getConnectedAppByAndroidDeviceId("emulator-5554")).toBeNull();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=androidDeviceAppLookup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"androidDeviceAppLookup.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/androidDeviceAppLookup.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,SAAS,MAAM,IAAI,CAAC;AAG3B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAC9D,MAAM,EAAE,gCAAgC,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEtF,SAAS,cAAc,CAAC,GAAW,EAAE,UAAkB,EAAE,SAAkB;IACvE,OAAO;QACH,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAA0B;QAC1D,UAAU,EAAE;YACR,EAAE,EAAE,GAAG;YACP,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,MAAM;YACZ,oBAAoB,EAAE,uBAAuB,GAAG,EAAE;YAClD,UAAU;SACb;QACD,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,SAAS;QACnB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtB,CAAC;AACtB,CAAC;AAED,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAC9C,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAEvC,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QACxE,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,mCAAmC,EAAE,eAAe,CAAC,CAAC;QACtF,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE5B,MAAM,CAAC,gCAAgC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAG1E,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,mCAAmC,EAAE,eAAe,CAAC,CAAC;QACtF,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE5B,MAAM,CAAC,gCAAgC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACnE,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,aAAa,CAAC,CAAC;QACzE,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE5B,MAAM,CAAC,gCAAgC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAI5F,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,mCAAmC,EAAE,eAAe,CAAC,CAAC,CAAC;QAElG,MAAM,CAAC,gCAAgC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,gCAAgC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,gCAAgC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoReconnectOptOut.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/autoReconnectOptOut.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jest } from "@jest/globals";
|
|
2
|
+
const scanMetroPorts = jest.fn(async () => [8081]);
|
|
3
|
+
const fetchDevices = jest.fn(async () => []);
|
|
4
|
+
const selectMainDevice = jest.fn(() => null);
|
|
5
|
+
const filterDebuggableDevices = jest.fn((devices) => devices);
|
|
6
|
+
jest.unstable_mockModule("../../core/metro.js", () => ({
|
|
7
|
+
scanMetroPorts,
|
|
8
|
+
fetchDevices,
|
|
9
|
+
selectMainDevice,
|
|
10
|
+
filterDebuggableDevices,
|
|
11
|
+
}));
|
|
12
|
+
const { executeInApp, markConnectionEstablished } = await import("../../core/jsExecute.js");
|
|
13
|
+
const { connectedApps } = await import("../../core/state.js");
|
|
14
|
+
describe("executeInApp and options.autoReconnect", () => {
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
scanMetroPorts.mockClear();
|
|
17
|
+
connectedApps.clear();
|
|
18
|
+
markConnectionEstablished();
|
|
19
|
+
});
|
|
20
|
+
it("does not reconnect or retry a transport failure when autoReconnect is false", async () => {
|
|
21
|
+
const result = await executeInApp("1", false, {
|
|
22
|
+
maxRetries: 0,
|
|
23
|
+
autoReconnect: false,
|
|
24
|
+
originatingToolName: "_sdk_mirror",
|
|
25
|
+
});
|
|
26
|
+
expect(scanMetroPorts).not.toHaveBeenCalled();
|
|
27
|
+
expect(result.success).toBe(false);
|
|
28
|
+
expect(result.error).toBe("No apps connected. Run 'scan_metro' first.");
|
|
29
|
+
});
|
|
30
|
+
it("still reconnects and reports the attempt when the option is absent", async () => {
|
|
31
|
+
const result = await executeInApp("1", false, { maxRetries: 0, originatingToolName: "tap" });
|
|
32
|
+
expect(scanMetroPorts).toHaveBeenCalledTimes(1);
|
|
33
|
+
expect(result.success).toBe(false);
|
|
34
|
+
expect(result.error).toMatch(/^reconnect_attempted: /);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=autoReconnectOptOut.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoReconnectOptOut.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/autoReconnectOptOut.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAgBrC,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,CAAM,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAGxD,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAM,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAClD,MAAM,uBAAuB,GAAG,IAAI,CAAC,EAAE,CAAM,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AAExE,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnD,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,uBAAuB;CAC1B,CAAC,CAAC,CAAC;AAEJ,MAAM,EAAE,YAAY,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAC5F,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE9D,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACpD,UAAU,CAAC,GAAG,EAAE;QACZ,cAAc,CAAC,SAAS,EAAE,CAAC;QAC3B,aAAa,CAAC,KAAK,EAAE,CAAC;QAItB,yBAAyB,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE;YAC1C,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,mBAAmB,EAAE,aAAa;SACrC,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAGH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;QAE7F,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from "@jest/globals";
|
|
2
2
|
import { getLastCDPMessageTime, updateLastCDPMessageTime, clearLastCDPMessageTime, clearAllCDPMessageTimes, } from "../../core/state.js";
|
|
3
|
+
import { describeConnectionFailure } from "../../core/connection.js";
|
|
3
4
|
describe("lastCDPMessageAt tracking (per-device)", () => {
|
|
4
5
|
beforeEach(() => {
|
|
5
6
|
clearAllCDPMessageTimes();
|
|
@@ -35,4 +36,28 @@ describe("lastCDPMessageAt tracking (per-device)", () => {
|
|
|
35
36
|
expect(getLastCDPMessageTime()).toBeNull();
|
|
36
37
|
});
|
|
37
38
|
});
|
|
39
|
+
describe("describeConnectionFailure (Metro inspector auth rejection)", () => {
|
|
40
|
+
it("rewrites the ws library's 401 into actionable guidance", () => {
|
|
41
|
+
const out = describeConnectionFailure("Unexpected server response: 401");
|
|
42
|
+
expect(out).toContain("HTTP 401 (authentication required)");
|
|
43
|
+
expect(out).toContain("authenticating proxy or tunnel");
|
|
44
|
+
expect(out).toContain("NO_PROXY");
|
|
45
|
+
expect(out).toContain("Original error: Unexpected server response: 401");
|
|
46
|
+
});
|
|
47
|
+
it("treats 403 as the same class", () => {
|
|
48
|
+
expect(describeConnectionFailure("Unexpected server response: 403"))
|
|
49
|
+
.toContain("HTTP 403 (authentication required)");
|
|
50
|
+
});
|
|
51
|
+
it("passes every other error through byte-for-byte", () => {
|
|
52
|
+
for (const msg of [
|
|
53
|
+
"connect ECONNREFUSED 127.0.0.1:8081",
|
|
54
|
+
"WebSocket connection timed out",
|
|
55
|
+
"Unexpected server response: 404",
|
|
56
|
+
"socket hang up",
|
|
57
|
+
"",
|
|
58
|
+
]) {
|
|
59
|
+
expect(describeConnectionFailure(msg)).toBe(msg);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
38
63
|
//# sourceMappingURL=connection-health.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-health.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/connection-health.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACH,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,GAC1B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"connection-health.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/connection-health.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -345,5 +345,109 @@ describe("resolveDeviceTarget", () => {
|
|
|
345
345
|
expect(r.target.androidSerial).toBe("emulator-5554");
|
|
346
346
|
}
|
|
347
347
|
});
|
|
348
|
+
describe("allowShutdown (ios_boot_simulator path)", () => {
|
|
349
|
+
const shutdownSim = {
|
|
350
|
+
ios: {
|
|
351
|
+
available: true,
|
|
352
|
+
simulators: [
|
|
353
|
+
{ name: "iPhone 17", udid: "ABCDEF12-3456-7890-ABCD-EF1234567890", state: "shutdown", runtime: "iOS 26.0" }
|
|
354
|
+
]
|
|
355
|
+
},
|
|
356
|
+
android: { available: true, emulators: [], physical: [] },
|
|
357
|
+
summary: { booted: 0, total: 1 }
|
|
358
|
+
};
|
|
359
|
+
it("resolves a shut-down simulator UDID when allowShutdown is set", async () => {
|
|
360
|
+
listAllDevicesMock.mockResolvedValue(shutdownSim);
|
|
361
|
+
const r = await resolveDeviceTarget("ABCDEF12-3456-7890-ABCD-EF1234567890", { allowShutdown: true });
|
|
362
|
+
expect(r.ok).toBe(true);
|
|
363
|
+
if (r.ok) {
|
|
364
|
+
expect(r.target.platform).toBe("ios");
|
|
365
|
+
expect(r.target.iosUdid).toBe("ABCDEF12-3456-7890-ABCD-EF1234567890");
|
|
366
|
+
expect(r.target.deviceName).toBe("iPhone 17");
|
|
367
|
+
expect(r.target.source).toBe("udid");
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
it("still errors SIMULATOR_NOT_BOOTED for the same simulator without the flag", async () => {
|
|
371
|
+
listAllDevicesMock.mockResolvedValue(shutdownSim);
|
|
372
|
+
const r = await resolveDeviceTarget("ABCDEF12-3456-7890-ABCD-EF1234567890");
|
|
373
|
+
expect(r.ok).toBe(false);
|
|
374
|
+
if (!r.ok)
|
|
375
|
+
expect(r.error.code).toBe("SIMULATOR_NOT_BOOTED");
|
|
376
|
+
});
|
|
377
|
+
it("still errors DEVICE_NOT_FOUND on a typo'd UDID even with allowShutdown", async () => {
|
|
378
|
+
listAllDevicesMock.mockResolvedValue(shutdownSim);
|
|
379
|
+
const r = await resolveDeviceTarget("11111111-2222-3333-4444-555555555555", { allowShutdown: true });
|
|
380
|
+
expect(r.ok).toBe(false);
|
|
381
|
+
if (!r.ok)
|
|
382
|
+
expect(r.error.code).toBe("DEVICE_NOT_FOUND");
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
describe("physical Android serials", () => {
|
|
386
|
+
it("resolves an exact physical serial to an adb-serial target", async () => {
|
|
387
|
+
listAllDevicesMock.mockResolvedValue({
|
|
388
|
+
...emptyDiscovery(),
|
|
389
|
+
android: {
|
|
390
|
+
available: true,
|
|
391
|
+
emulators: [],
|
|
392
|
+
physical: [{ serial: "P2228K000422", model: "Pixel 8", state: "device" }]
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
const r = await resolveDeviceTarget("P2228K000422");
|
|
396
|
+
expect(r.ok).toBe(true);
|
|
397
|
+
if (r.ok) {
|
|
398
|
+
expect(r.target.platform).toBe("android");
|
|
399
|
+
expect(r.target.androidSerial).toBe("P2228K000422");
|
|
400
|
+
expect(r.target.deviceName).toBe("Pixel 8");
|
|
401
|
+
expect(r.target.source).toBe("adb-serial");
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
it("prefers the RN registry deviceName for a physical serial, as it already does for emulators", async () => {
|
|
405
|
+
listAllDevicesMock.mockResolvedValue({
|
|
406
|
+
...emptyDiscovery(),
|
|
407
|
+
android: {
|
|
408
|
+
available: true,
|
|
409
|
+
emulators: [],
|
|
410
|
+
physical: [{ serial: "29091FDH30061X", model: "Pixel 6a", state: "device" }]
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
getConnectedAppsMock.mockReturnValue([
|
|
414
|
+
{
|
|
415
|
+
app: {
|
|
416
|
+
platform: "android",
|
|
417
|
+
adbSerial: "29091FDH30061X",
|
|
418
|
+
deviceInfo: { deviceName: "Pixel 6a - 14 - API 34" }
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
]);
|
|
422
|
+
const r = await resolveDeviceTarget("29091FDH30061X");
|
|
423
|
+
expect(r.ok).toBe(true);
|
|
424
|
+
if (r.ok) {
|
|
425
|
+
expect(r.target.deviceName).toBe("Pixel 6a - 14 - API 34");
|
|
426
|
+
expect(r.target.source).toBe("adb-serial");
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
it("errors DEVICE_NOT_FOUND on an unknown physical serial", async () => {
|
|
430
|
+
listAllDevicesMock.mockResolvedValue({
|
|
431
|
+
...emptyDiscovery(),
|
|
432
|
+
android: {
|
|
433
|
+
available: true,
|
|
434
|
+
emulators: [],
|
|
435
|
+
physical: [{ serial: "P2228K000422", model: "Pixel 8", state: "device" }]
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
const r = await resolveDeviceTarget("P2228K000499");
|
|
439
|
+
expect(r.ok).toBe(false);
|
|
440
|
+
if (!r.ok)
|
|
441
|
+
expect(r.error.code).toBe("DEVICE_NOT_FOUND");
|
|
442
|
+
});
|
|
443
|
+
it("keeps the precise serial error for an unknown emulator-NNNN argument", async () => {
|
|
444
|
+
const r = await resolveDeviceTarget("emulator-5559");
|
|
445
|
+
expect(r.ok).toBe(false);
|
|
446
|
+
if (!r.ok) {
|
|
447
|
+
expect(r.error.code).toBe("DEVICE_NOT_FOUND");
|
|
448
|
+
expect(r.error.message).toMatch(/No Android device with serial/);
|
|
449
|
+
}
|
|
450
|
+
});
|
|
451
|
+
});
|
|
348
452
|
});
|
|
349
453
|
//# sourceMappingURL=deviceResolver.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceResolver.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/deviceResolver.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAavE,MAAM,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAqC,CAAC;AAC1E,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAA0B,CAAC;AAC7D,MAAM,8BAA8B,GAChC,IAAI,CAAC,EAAE,CAAkE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAEzF,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,gBAAgB,EAAE,oBAAoB;IACtC,0BAA0B,EAAE,8BAA8B;IAE1D,iCAAiC,EAAE,IAAI,CAAC,EAAE,EAAE;IAC5C,uBAAuB,EAAE,IAAI,CAAC,EAAE,EAAE;IAClC,8BAA8B,EAAE,IAAI,CAAC,EAAE,EAAE;IACzC,gCAAgC,EAAE,IAAI,CAAC,EAAE,EAAE;IAC3C,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC/B,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;IAC1B,4BAA4B,EAAE,IAAI,CAAC,EAAE,EAAE;IACvC,6BAA6B,EAAE,IAAI,CAAC,EAAE,EAAE;CAC3C,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,mBAAmB,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,cAAc,EAAE,kBAAkB;IAClC,yBAAyB,EAAE,IAAI,CAAC,EAAE,EAAE;CACvC,CAAC,CAAC,CAAC;AAEJ,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACnC,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,EAAsG,CAAC;AACtI,IAAI,CAAC,mBAAmB,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,YAAY,EAAE,gBAAgB;IAC9B,WAAW,EAAE,eAAe;IAC5B,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;CACjC,CAAC,CAAC,CAAC;AAEJ,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAE7E,SAAS,cAAc;IACnB,OAAO;QACH,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QACxC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzD,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACnC,CAAC;AACN,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACZ,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACjC,kBAAkB,CAAC,SAAS,EAAE,CAAC;QAC/B,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACzC,kBAAkB,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC;QACvD,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAC7B,eAAe,CAAC,SAAS,EAAE,CAAC;QAC5B,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC5E,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;QAC5E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACjF,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE;iBAC9G;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;QAC5E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAClD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QACzD,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,OAAO,EAAE;gBACL,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAClF,QAAQ,EAAE,EAAE;aACf;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,oBAAoB,CAAC,eAAe,CAAC;YACjC;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,sCAAsC;oBACrD,UAAU,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE;iBAC9C;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACnG,oBAAoB,CAAC,eAAe,CAAC;YACjC;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,aAAa;oBACxB,UAAU,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;iBACvD;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAC9E,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,OAAO,EAAE;gBACL,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aAC1F;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACvE,oBAAoB,CAAC,eAAe,CAAC;YACjC;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,eAAe;oBAC1B,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE;iBACnD;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAC9E,oBAAoB,CAAC,eAAe,CAAC;YACjC;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,sCAAsC;oBACrD,UAAU,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE;iBAC9C;aACJ;YACD;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,eAAe;oBAC1B,UAAU,EAAE,EAAE,UAAU,EAAE,sBAAsB,EAAE;iBACrD;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACpD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACtE,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC1E,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC3E,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACtF,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;YACD,OAAO,EAAE;gBACL,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAClF,QAAQ,EAAE,EAAE;aACf;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAChE,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACzD,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;QAC5E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAClE,UAAU,EAAE,sCAAsC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY;SAC1F,CAAC,CAAC,CAAC;IACR,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC1F,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrH,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC;YAC5B,EAAE,UAAU,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7G,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;SACxF,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACtF,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrH,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC;YAC5B,EAAE,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;SAC3F,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACrG,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrH,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC;YAC5B,EAAE,UAAU,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,SAAgB,EAAE;SAC5H,CAAC,CAAC;QACH,IAAI,CAA8D,CAAC;QACnE,MAAM,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1F,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4GAA4G,EAAE,KAAK,IAAI,EAAE;QACxH,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrH,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC;YAC5B,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACpF,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;SACxF,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"deviceResolver.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/deviceResolver.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAavE,MAAM,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAqC,CAAC;AAC1E,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAA0B,CAAC;AAC7D,MAAM,8BAA8B,GAChC,IAAI,CAAC,EAAE,CAAkE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAEzF,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,gBAAgB,EAAE,oBAAoB;IACtC,0BAA0B,EAAE,8BAA8B;IAE1D,iCAAiC,EAAE,IAAI,CAAC,EAAE,EAAE;IAC5C,uBAAuB,EAAE,IAAI,CAAC,EAAE,EAAE;IAClC,8BAA8B,EAAE,IAAI,CAAC,EAAE,EAAE;IACzC,gCAAgC,EAAE,IAAI,CAAC,EAAE,EAAE;IAC3C,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC/B,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;IAC1B,4BAA4B,EAAE,IAAI,CAAC,EAAE,EAAE;IACvC,6BAA6B,EAAE,IAAI,CAAC,EAAE,EAAE;CAC3C,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,mBAAmB,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,cAAc,EAAE,kBAAkB;IAClC,yBAAyB,EAAE,IAAI,CAAC,EAAE,EAAE;CACvC,CAAC,CAAC,CAAC;AAEJ,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACnC,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,EAAsG,CAAC;AACtI,IAAI,CAAC,mBAAmB,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,YAAY,EAAE,gBAAgB;IAC9B,WAAW,EAAE,eAAe;IAC5B,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;CACjC,CAAC,CAAC,CAAC;AAEJ,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAE7E,SAAS,cAAc;IACnB,OAAO;QACH,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QACxC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzD,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACnC,CAAC;AACN,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACZ,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACjC,kBAAkB,CAAC,SAAS,EAAE,CAAC;QAC/B,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACzC,kBAAkB,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC;QACvD,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAC7B,eAAe,CAAC,SAAS,EAAE,CAAC;QAC5B,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC5E,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;QAC5E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACjF,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE;iBAC9G;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;QAC5E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAClD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QACzD,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,OAAO,EAAE;gBACL,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAClF,QAAQ,EAAE,EAAE;aACf;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,oBAAoB,CAAC,eAAe,CAAC;YACjC;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,sCAAsC;oBACrD,UAAU,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE;iBAC9C;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACnG,oBAAoB,CAAC,eAAe,CAAC;YACjC;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,aAAa;oBACxB,UAAU,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;iBACvD;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAC9E,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,OAAO,EAAE;gBACL,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aAC1F;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACvE,oBAAoB,CAAC,eAAe,CAAC;YACjC;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,eAAe;oBAC1B,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE;iBACnD;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAC9E,oBAAoB,CAAC,eAAe,CAAC;YACjC;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,sCAAsC;oBACrD,UAAU,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE;iBAC9C;aACJ;YACD;gBACI,GAAG,EAAE;oBACD,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,eAAe;oBAC1B,UAAU,EAAE,EAAE,UAAU,EAAE,sBAAsB,EAAE;iBACrD;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACpD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACtE,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC1E,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC3E,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACtF,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;YACD,OAAO,EAAE;gBACL,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAClF,QAAQ,EAAE,EAAE;aACf;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,cAAc,EAAE;YACnB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChH;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAChE,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACzD,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;QAC5E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAClE,UAAU,EAAE,sCAAsC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY;SAC1F,CAAC,CAAC,CAAC;IACR,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC1F,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrH,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC;YAC5B,EAAE,UAAU,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7G,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;SACxF,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACtF,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrH,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC;YAC5B,EAAE,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;SAC3F,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACrG,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrH,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC;YAC5B,EAAE,UAAU,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,SAAgB,EAAE;SAC5H,CAAC,CAAC;QACH,IAAI,CAA8D,CAAC;QACnE,MAAM,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1F,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4GAA4G,EAAE,KAAK,IAAI,EAAE;QACxH,kBAAkB,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7H,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrH,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC;YAC5B,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACpF,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;SACxF,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC;IACL,CAAC,CAAC,CAAC;IAOH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACrD,MAAM,WAAW,GAAG;YAChB,GAAG,EAAE;gBACD,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE;oBACR,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE;iBAC9G;aACJ;YACD,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACzD,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC;QAEF,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC3E,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAElD,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACrG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACtE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;YACvF,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAElD,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;YAC5E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACpF,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAElD,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,sCAAsC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACrG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAIH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACvE,kBAAkB,CAAC,iBAAiB,CAAC;gBACjC,GAAG,cAAc,EAAE;gBACnB,OAAO,EAAE;oBACL,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;iBAC5E;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACpD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACpD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;YACxG,kBAAkB,CAAC,iBAAiB,CAAC;gBACjC,GAAG,cAAc,EAAE;gBACnB,OAAO,EAAE;oBACL,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;iBAC/E;aACJ,CAAC,CAAC;YACH,oBAAoB,CAAC,eAAe,CAAC;gBACjC;oBACI,GAAG,EAAE;wBACD,QAAQ,EAAE,SAAS;wBACnB,SAAS,EAAE,gBAAgB;wBAC3B,UAAU,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;qBACvD;iBACJ;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YACtD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBACP,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAC3D,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACnE,kBAAkB,CAAC,iBAAiB,CAAC;gBACjC,GAAG,cAAc,EAAE;gBACnB,OAAO,EAAE;oBACL,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;iBAC5E;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACpD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC9C,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;YACrE,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -232,4 +232,154 @@ describe("resolving without a real choice", () => {
|
|
|
232
232
|
expect(r.reason).toContain("no focused TextInput");
|
|
233
233
|
});
|
|
234
234
|
});
|
|
235
|
+
describe("recovering from a target that cannot match", () => {
|
|
236
|
+
const field = (props, component = "Composer", nativeTag = 1) => {
|
|
237
|
+
const host = {
|
|
238
|
+
type: "RCTSinglelineTextInputView",
|
|
239
|
+
memoizedProps: props,
|
|
240
|
+
stateNode: { isFocused: () => false, __nativeTag: nativeTag },
|
|
241
|
+
return: null,
|
|
242
|
+
child: null,
|
|
243
|
+
sibling: null
|
|
244
|
+
};
|
|
245
|
+
const owner = {
|
|
246
|
+
type: { displayName: component },
|
|
247
|
+
memoizedProps: { ...props, onChangeText: () => { } },
|
|
248
|
+
stateNode: null,
|
|
249
|
+
return: null,
|
|
250
|
+
child: host,
|
|
251
|
+
sibling: null
|
|
252
|
+
};
|
|
253
|
+
host.return = owner;
|
|
254
|
+
return owner;
|
|
255
|
+
};
|
|
256
|
+
const run = (expr, ...fields) => {
|
|
257
|
+
const root = { type: { displayName: "Form" }, memoizedProps: {}, stateNode: null, return: null, child: null, sibling: null };
|
|
258
|
+
root.child = fields[0];
|
|
259
|
+
for (let i = 0; i < fields.length; i++) {
|
|
260
|
+
fields[i].return = root;
|
|
261
|
+
fields[i].sibling = fields[i + 1] ?? null;
|
|
262
|
+
}
|
|
263
|
+
const g = globalThis;
|
|
264
|
+
g.global = globalThis;
|
|
265
|
+
g.__REACT_DEVTOOLS_GLOBAL_HOOK__ = {
|
|
266
|
+
renderers: new Map([[1, {}]]),
|
|
267
|
+
getFiberRoots: () => new Set([{ current: root }])
|
|
268
|
+
};
|
|
269
|
+
return eval(expr);
|
|
270
|
+
};
|
|
271
|
+
it('resolves the sole mounted input when component is the RN primitive "TextInput"', () => {
|
|
272
|
+
const r = run(buildInputExpression({ kind: "find" }, { component: "TextInput" }), field({ placeholder: "Search" }, "SearchBar"));
|
|
273
|
+
expect(r.found).toBe(true);
|
|
274
|
+
});
|
|
275
|
+
it('still offers the full match list when authored wrappers do contain "TextInput"', () => {
|
|
276
|
+
const r = run(buildInputExpression({ kind: "find" }, { component: "TextInput" }), field({ placeholder: "Amount" }, "StyledTextInput"), field({ placeholder: "Cents" }, "InternalTextInput"), field({ placeholder: "Name" }, "LabeledField"));
|
|
277
|
+
expect(r.found).toBe(false);
|
|
278
|
+
expect(r.ambiguous).toBe(true);
|
|
279
|
+
});
|
|
280
|
+
it('still refuses to guess for component "TextInput" when several inputs are mounted', () => {
|
|
281
|
+
const r = run(buildInputExpression({ kind: "find" }, { component: "TextInput" }), field({ placeholder: "Email" }, "EmailField"), field({ placeholder: "Password" }, "PasswordField"));
|
|
282
|
+
expect(r.found).toBe(false);
|
|
283
|
+
expect(r.reason).toContain("no focused TextInput");
|
|
284
|
+
});
|
|
285
|
+
it("never falls through when a testID was given alongside the primitive name", () => {
|
|
286
|
+
const r = run(buildInputExpression({ kind: "find" }, { testID: "nope", component: "TextInput" }), field({ placeholder: "Search", testID: "search" }, "SearchBar"));
|
|
287
|
+
expect(r.found).toBe(false);
|
|
288
|
+
expect(r.reason).toContain("no TextInput matched that target");
|
|
289
|
+
});
|
|
290
|
+
it("still matches an authored composite name exactly", () => {
|
|
291
|
+
const r = run(buildInputExpression({ kind: "find" }, { component: "PasswordField" }), field({ placeholder: "Email" }, "EmailField", 11), field({ placeholder: "Password" }, "PasswordField", 22));
|
|
292
|
+
expect(r.found).toBe(true);
|
|
293
|
+
expect(r.nativeTag).toBe(22);
|
|
294
|
+
});
|
|
295
|
+
it("offers the closest mounted testID as a did-you-mean, before anything else", () => {
|
|
296
|
+
const r = run(buildInputExpression({ kind: "find" }, { testID: "search-input" }), field({ testID: "church-search-list-search-input", placeholder: "Search" }, "SearchBar"));
|
|
297
|
+
expect(r.found).toBe(false);
|
|
298
|
+
expect(r.reason?.startsWith('did you mean testID "church-search-list-search-input" (index 0)?')).toBe(true);
|
|
299
|
+
});
|
|
300
|
+
it("catches a testID that is one character short of a mounted one", () => {
|
|
301
|
+
const r = run(buildInputExpression({ kind: "find" }, { testID: "name-inpu" }), field({ testID: "name-input", placeholder: "Name" }, "LabeledField"));
|
|
302
|
+
expect(r.reason).toContain("did you mean");
|
|
303
|
+
expect(r.reason).toContain("name-input");
|
|
304
|
+
});
|
|
305
|
+
it("does not invent a did-you-mean for an unrelated testID", () => {
|
|
306
|
+
const r = run(buildInputExpression({ kind: "find" }, { testID: "search-input" }), field({ testID: "totally-other", placeholder: "Search" }, "SearchBar"));
|
|
307
|
+
expect(r.reason).toContain("no TextInput matched that target");
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
describe("pinning a resolved field by native tag", () => {
|
|
311
|
+
const field = (props, nativeTag, stateNode) => {
|
|
312
|
+
const host = {
|
|
313
|
+
type: "RCTSinglelineTextInputView",
|
|
314
|
+
memoizedProps: props,
|
|
315
|
+
stateNode: stateNode ?? { isFocused: () => false, __nativeTag: nativeTag },
|
|
316
|
+
return: null,
|
|
317
|
+
child: null,
|
|
318
|
+
sibling: null
|
|
319
|
+
};
|
|
320
|
+
const owner = {
|
|
321
|
+
type: { displayName: "Stepper" },
|
|
322
|
+
memoizedProps: { ...props, onChangeText: () => { } },
|
|
323
|
+
stateNode: null,
|
|
324
|
+
return: null,
|
|
325
|
+
child: host,
|
|
326
|
+
sibling: null
|
|
327
|
+
};
|
|
328
|
+
host.return = owner;
|
|
329
|
+
return owner;
|
|
330
|
+
};
|
|
331
|
+
const run = (expr, ...fields) => {
|
|
332
|
+
const root = { type: { displayName: "Form" }, memoizedProps: {}, stateNode: null, return: null, child: null, sibling: null };
|
|
333
|
+
root.child = fields[0];
|
|
334
|
+
for (let i = 0; i < fields.length; i++) {
|
|
335
|
+
fields[i].return = root;
|
|
336
|
+
fields[i].sibling = fields[i + 1] ?? null;
|
|
337
|
+
}
|
|
338
|
+
const g = globalThis;
|
|
339
|
+
g.global = globalThis;
|
|
340
|
+
g.__REACT_DEVTOOLS_GLOBAL_HOOK__ = {
|
|
341
|
+
renderers: new Map([[1, {}]]),
|
|
342
|
+
getFiberRoots: () => new Set([{ current: root }])
|
|
343
|
+
};
|
|
344
|
+
return eval(expr);
|
|
345
|
+
};
|
|
346
|
+
const cents = () => field({ value: "42.50", placeholder: "Cents" }, 22);
|
|
347
|
+
const other = () => field({ value: "0.00", placeholder: "Dollars" }, 33);
|
|
348
|
+
it("resolves the pinned field after the write killed the predicate that found it", () => {
|
|
349
|
+
const a = cents();
|
|
350
|
+
const b = other();
|
|
351
|
+
expect(run(buildInputExpression({ kind: "read" }, { textMatch: "42.50" }), a, b).found).toBe(true);
|
|
352
|
+
const writeValue = (f, v) => {
|
|
353
|
+
f.memoizedProps.value = v;
|
|
354
|
+
};
|
|
355
|
+
writeValue(a, "99.00");
|
|
356
|
+
writeValue(a.child, "99.00");
|
|
357
|
+
expect(run(buildInputExpression({ kind: "read" }, { textMatch: "42.50" }), a, b).found).toBe(false);
|
|
358
|
+
const r = run(buildInputExpression({ kind: "read" }, { textMatch: "42.50", nativeTag: 22 }), a, b);
|
|
359
|
+
expect(r.found).toBe(true);
|
|
360
|
+
expect(r.nativeTag).toBe(22);
|
|
361
|
+
expect(r.value).toBe("99.00");
|
|
362
|
+
});
|
|
363
|
+
it("falls back to the predicate when the pinned tag is gone", () => {
|
|
364
|
+
const r = run(buildInputExpression({ kind: "read" }, { textMatch: "0.00", nativeTag: 999 }), cents(), other());
|
|
365
|
+
expect(r.found).toBe(true);
|
|
366
|
+
expect(r.nativeTag).toBe(33);
|
|
367
|
+
});
|
|
368
|
+
it("ignores an index carried over from the original query once the tag pinned a field", () => {
|
|
369
|
+
const r = run(buildInputExpression({ kind: "read" }, { textMatch: "42.50", nativeTag: 22, index: 3 }), cents(), other());
|
|
370
|
+
expect(r.found).toBe(true);
|
|
371
|
+
expect(r.nativeTag).toBe(22);
|
|
372
|
+
});
|
|
373
|
+
it("still honours the index on the fall-through, where the predicate is matching again", () => {
|
|
374
|
+
const r = run(buildInputExpression({ kind: "read" }, { textMatch: "0", nativeTag: 999, index: 9 }), cents(), other());
|
|
375
|
+
expect(r.found).toBe(false);
|
|
376
|
+
expect(r.reason).toContain("is out of range");
|
|
377
|
+
});
|
|
378
|
+
it("degrades to today's behaviour on a host that exposes no native tag", () => {
|
|
379
|
+
const noTag = field({ value: "42.50", placeholder: "Cents" }, null, { isFocused: () => false });
|
|
380
|
+
const r = run(buildInputExpression({ kind: "read" }, { textMatch: "42.50", nativeTag: 22 }), noTag);
|
|
381
|
+
expect(r.found).toBe(true);
|
|
382
|
+
expect(r.nativeTag).toBe(null);
|
|
383
|
+
});
|
|
384
|
+
});
|
|
235
385
|
//# sourceMappingURL=inputTarget.test.js.map
|