@absolutejs/absolute 0.20.0-beta.90 → 0.20.0-beta.92

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
@@ -6,6 +6,18 @@ This file is generated by `absolute-changelog` from the entries in
6
6
  `changelog/`. Edit an entry, not this file — and add new ones under
7
7
  `changelog/unreleased/`.
8
8
 
9
+ ## 0.20.0-beta.92 — 2026-09-13
10
+
11
+ ### Changed
12
+
13
+ - **Expo iOS now has an automated native observability gate for generated Swift compilation, trusted-relay redaction, restart-safe retry, acknowledgement, and deduplication.** (`expoNativeObservabilityRuntimeSource`)
14
+
15
+ ## 0.20.0-beta.91 — 2026-09-13
16
+
17
+ ### Added
18
+
19
+ - **Expo iOS now has an automated installed-app replacement gate for native Auth, encrypted Sync migration, and exactly-once recovery.** (`AbsoluteIosInstalledApp`, `AbsoluteIosUpgradeCommandResult`, `assertAbsoluteIosInstalledAppUpgrade`, `inspectAbsoluteIosInstalledApp`, `parseAbsoluteIosInstalledAppInfo`)
20
+
9
21
  ## 0.20.0-beta.90 — 2026-09-13
10
22
 
11
23
  ### Added
package/changelog.json CHANGED
@@ -2,6 +2,36 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/absolute",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "kind": "changed",
9
+ "summary": "Expo iOS now has an automated native observability gate for generated Swift compilation, trusted-relay redaction, restart-safe retry, acknowledgement, and deduplication.",
10
+ "symbols": [
11
+ "expoNativeObservabilityRuntimeSource"
12
+ ]
13
+ }
14
+ ],
15
+ "date": "2026-09-13",
16
+ "version": "0.20.0-beta.92"
17
+ },
18
+ {
19
+ "changes": [
20
+ {
21
+ "kind": "added",
22
+ "summary": "Expo iOS now has an automated installed-app replacement gate for native Auth, encrypted Sync migration, and exactly-once recovery.",
23
+ "symbols": [
24
+ "AbsoluteIosInstalledApp",
25
+ "AbsoluteIosUpgradeCommandResult",
26
+ "assertAbsoluteIosInstalledAppUpgrade",
27
+ "inspectAbsoluteIosInstalledApp",
28
+ "parseAbsoluteIosInstalledAppInfo"
29
+ ]
30
+ }
31
+ ],
32
+ "date": "2026-09-13",
33
+ "version": "0.20.0-beta.91"
34
+ },
5
35
  {
6
36
  "changes": [
7
37
  {
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  var __require = import.meta.require;
3
3
 
4
- // .angular-partial-tmp-qD4cCn/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-d8AfPq/src/core/streamingSlotRegistrar.ts
5
5
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
6
6
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
7
7
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  var __require = import.meta.require;
3
3
 
4
- // .angular-partial-tmp-qD4cCn/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-d8AfPq/src/core/streamingSlotRegistrar.ts
5
5
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
6
6
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
7
7
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -48,7 +48,7 @@ var warnMissingStreamingSlotCollector = (primitiveName) => {
48
48
  getWarningController()?.maybeWarn(primitiveName);
49
49
  };
50
50
 
51
- // .angular-partial-tmp-qD4cCn/src/core/streamingSlotRegistry.ts
51
+ // .angular-partial-tmp-d8AfPq/src/core/streamingSlotRegistry.ts
52
52
  var STREAMING_SLOT_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotAsyncLocalStorage");
53
53
  var isObjectRecord2 = (value) => Boolean(value) && typeof value === "object";
54
54
  var isAsyncLocalStorage = (value) => isObjectRecord2(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
@@ -12,7 +12,7 @@ import {
12
12
  createIslandRegistryDefinitionPlugin,
13
13
  finalizeAbsoluteMobileCompatibilityBuild,
14
14
  resolveServerBundleExternals
15
- } from "./index-jqdt7841.js";
15
+ } from "./index-751czk1b.js";
16
16
  import {
17
17
  loadIslandRegistryBuildInfo
18
18
  } from "./index-bzs19w3r.js";
@@ -36,7 +36,7 @@ import"./index-w5vswatm.js";
36
36
  import {
37
37
  normalizeAbsoluteMobileConfig
38
38
  } from "./index-rd2hbttb.js";
39
- import"./index-tame6e2c.js";
39
+ import"./index-8zrnvazp.js";
40
40
  import {
41
41
  ABSOLUTE_NATIVE_AUTH_CLIENTS_ENV,
42
42
  installAbsoluteMobileAuthEnvironment
@@ -1282,7 +1282,7 @@ var loadAbsoluteMobileDevModules = async () => {
1282
1282
  iosNativeWatcher
1283
1283
  ] = await Promise.all([
1284
1284
  import("./config-vy04mqce.js"),
1285
- import("./expoProject-dac8fqhq.js"),
1285
+ import("./expoProject-djc0vk7g.js"),
1286
1286
  import("./expoDevController-tr63cg78.js"),
1287
1287
  import("./nativeAuth-zx4tsb1f.js"),
1288
1288
  import("./androidEmulatorController-nybhzc6c.js"),
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  syncAbsoluteExpoWebAssets,
4
4
  writeAbsoluteExpoProject
5
- } from "./index-tame6e2c.js";
5
+ } from "./index-8zrnvazp.js";
6
6
  import"./index-ar4gz15x.js";
7
7
  import"./index-mywsk201.js";
8
8
  export {
@@ -10,7 +10,7 @@ import {
10
10
  resolveAbsoluteMobileUpdateRuntime,
11
11
  syncAbsoluteExpoWebAssets,
12
12
  writeAbsoluteExpoProject
13
- } from "./index-tame6e2c.js";
13
+ } from "./index-8zrnvazp.js";
14
14
 
15
15
  // src/build/islandRegistryTransform.ts
16
16
  import { basename } from "path";
@@ -998,6 +998,27 @@ public final class AbsoluteMobileObservabilityModule: Module, MXMetricManagerSub
998
998
  }
999
999
  }
1000
1000
  }
1001
+
1002
+ #if DEBUG
1003
+ AsyncFunction("enqueueForTesting") { (options: [String: String]) -> Bool in
1004
+ guard let testId = options["testId"],
1005
+ testId.range(of: "^[A-Za-z0-9._:-]{1,128}$", options: .regularExpression) != nil else { return false }
1006
+ let key = "absolute-native-observability-test-id"
1007
+ guard UserDefaults.standard.string(forKey: key) != testId else { return false }
1008
+ UserDefaults.standard.set(testId, forKey: key)
1009
+ Self.queue.sync {
1010
+ Self.enqueue(
1011
+ kind: "crash",
1012
+ occurredAt: Date().timeIntervalSince1970 * 1000,
1013
+ details: [
1014
+ "message": "token=mobile-observability-secret",
1015
+ "source": "absolutejs-conformance"
1016
+ ]
1017
+ )
1018
+ }
1019
+ return true
1020
+ }
1021
+ #endif
1001
1022
  }
1002
1023
 
1003
1024
  private static func root() -> URL? {
@@ -1281,6 +1302,7 @@ import { ABSOLUTE_MOBILE_MANIFEST } from './webAssets';
1281
1302
  type NativeObservabilityModule = {
1282
1303
  acknowledge(options: { ids: string[] }): Promise<void>;
1283
1304
  crashForTesting(options: { testId: string }): Promise<boolean>;
1305
+ enqueueForTesting(options: { testId: string }): Promise<boolean>;
1284
1306
  pending(): Promise<{ reports: unknown[] }>;
1285
1307
  };
1286
1308
  type NativeReport = { details: Record<string, unknown>; id: string; kind: string; occurredAt: number; platform: 'android' | 'ios' };
@@ -1342,6 +1364,12 @@ export const startAbsoluteExpoNativeObservability = () => {
1342
1364
  return drain();
1343
1365
  };
1344
1366
  export const crashAbsoluteExpoNativeObservabilityForTesting = (testId: string) => native.crashForTesting({ testId });
1367
+ export const enqueueAbsoluteExpoNativeObservabilityForTesting = async (testId: string) => {
1368
+ await drain();
1369
+ const enqueued = await native.enqueueForTesting({ testId });
1370
+ await drain();
1371
+ return enqueued;
1372
+ };
1345
1373
  `;
1346
1374
  var absoluteExpoNativeObservabilityFiles = (project) => new Map([
1347
1375
  [
@@ -6,7 +6,7 @@ import {
6
6
  createIslandRegistryDefinitionPlugin,
7
7
  finalizeAbsoluteMobileCompatibilityBuild,
8
8
  resolveServerBundleExternals
9
- } from "./index-jqdt7841.js";
9
+ } from "./index-751czk1b.js";
10
10
  import {
11
11
  loadIslandRegistryBuildInfo
12
12
  } from "./index-bzs19w3r.js";
package/dist/cli/index.js CHANGED
@@ -58,7 +58,7 @@ if (command === "dev") {
58
58
  }
59
59
  const positionalArgs = stripNamedArgs("--config", "--android-device", "--ios-device").filter((arg) => arg !== "--no-mobile" && arg !== "--eager");
60
60
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
61
- const { dev } = await import("./dev-aykeaa7b.js");
61
+ const { dev } = await import("./dev-perzmh2w.js");
62
62
  await dev(serverEntry, configPath, {
63
63
  androidDevice,
64
64
  eager: args.includes("--eager"),
@@ -71,7 +71,7 @@ if (command === "dev") {
71
71
  const configPath = parseNamedArg("--config");
72
72
  const positionalArgs = stripNamedArgs("--outdir", "--config").filter((arg) => arg !== "--prebuilt");
73
73
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
74
- const { start } = await import("./start-7jg0csqy.js");
74
+ const { start } = await import("./start-ef7tgbmf.js");
75
75
  await start(serverEntry, outdir, configPath, {
76
76
  prebuilt: args.includes("--prebuilt")
77
77
  });
@@ -81,7 +81,7 @@ if (command === "dev") {
81
81
  const configPath = parseNamedArg("--config");
82
82
  const positionalArgs = stripNamedArgs("--outdir", "--config");
83
83
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
84
- const { start } = await import("./start-7jg0csqy.js");
84
+ const { start } = await import("./start-ef7tgbmf.js");
85
85
  await start(serverEntry, outdir, configPath, { prepareOnly: true });
86
86
  } else if (command === "build") {
87
87
  sendTelemetryEvent("cli:command", { command });
@@ -197,13 +197,13 @@ if (command === "dev") {
197
197
  const configPath = parseNamedArg("--config");
198
198
  const positionalArgs = stripNamedArgs("--outdir", "--outfile", "--config");
199
199
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
200
- const { compile } = await import("./compile-5hchbcbd.js");
200
+ const { compile } = await import("./compile-vf61bv90.js");
201
201
  await compile(serverEntry, outdir, outfile, configPath);
202
202
  } else if (command === "mobile") {
203
203
  sendTelemetryEvent("cli:command", {
204
204
  command: `mobile:${workspaceCommand ?? "unknown"}`
205
205
  });
206
- const { runMobile } = await import("./mobile-bg1jy34n.js");
206
+ const { runMobile } = await import("./mobile-yk7qr9qg.js");
207
207
  try {
208
208
  await runMobile(args);
209
209
  } catch (error) {
@@ -7,12 +7,12 @@ import {
7
7
  } from "./index-9r7n9dqp.js";
8
8
  import {
9
9
  start
10
- } from "./index-39j0dhq7.js";
10
+ } from "./index-gxkmg2ss.js";
11
11
  import {
12
12
  ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,
13
13
  ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,
14
14
  resolveAbsoluteMobileRoute
15
- } from "./index-jqdt7841.js";
15
+ } from "./index-751czk1b.js";
16
16
  import"./index-bzs19w3r.js";
17
17
  import"./index-s2tazax7.js";
18
18
  import {
@@ -66,7 +66,7 @@ import {
66
66
  syncAbsoluteExpoWebAssets,
67
67
  unsignedAbsoluteMobileUpdate,
68
68
  writeAbsoluteExpoProject
69
- } from "./index-tame6e2c.js";
69
+ } from "./index-8zrnvazp.js";
70
70
  import {
71
71
  normalizeAbsoluteIosDeviceIdentifier
72
72
  } from "./index-j66p8hn5.js";
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  start
4
- } from "./index-39j0dhq7.js";
5
- import"./index-jqdt7841.js";
4
+ } from "./index-gxkmg2ss.js";
5
+ import"./index-751czk1b.js";
6
6
  import"./index-bzs19w3r.js";
7
7
  import"./index-s2tazax7.js";
8
8
  import"./index-fc9vxw56.js";
@@ -11,7 +11,7 @@ import"./index-06cmrcdq.js";
11
11
  import"./index-9kwmb3c0.js";
12
12
  import"./index-w5vswatm.js";
13
13
  import"./index-rd2hbttb.js";
14
- import"./index-tame6e2c.js";
14
+ import"./index-8zrnvazp.js";
15
15
  import"./index-ar4gz15x.js";
16
16
  import"./index-t84wxk1p.js";
17
17
  import"./index-wtfnv3n2.js";
@@ -24345,6 +24345,76 @@ var installAbsoluteIosRelease = async (options) => {
24345
24345
  const { artifact: _artifact, ...releaseMetadata } = metadata;
24346
24346
  return installRelease2(options.artifactPath, releaseMetadata, safeOutputDirectory2(options.projectRoot, options.outputDirectory));
24347
24347
  };
24348
+ // src/mobile/iosUpgradeConformance.ts
24349
+ var captureCommand4 = async (command) => {
24350
+ const process2 = Bun.spawn(command, { stderr: "pipe", stdout: "pipe" });
24351
+ const [exitCode, stderr, stdout] = await Promise.all([
24352
+ process2.exited,
24353
+ new Response(process2.stderr).text(),
24354
+ new Response(process2.stdout).text()
24355
+ ]);
24356
+ return { exitCode, stderr, stdout };
24357
+ };
24358
+ var requiredOutput = (result, message) => {
24359
+ const value = result.stdout.trim();
24360
+ if (result.exitCode !== 0 || !value)
24361
+ throw new Error(`${message}: ${result.stderr.trim() || value || "no output"}`);
24362
+ return value;
24363
+ };
24364
+ var inspectAbsoluteIosInstalledApp = async (xcrun, udid, appId, run = captureCommand4, plutil = "/usr/bin/plutil") => {
24365
+ const dataContainer = requiredOutput(await run([xcrun, "simctl", "get_app_container", udid, appId, "data"]), `Could not inspect the installed iOS data container for ${appId}`);
24366
+ const appContainer = requiredOutput(await run([xcrun, "simctl", "get_app_container", udid, appId, "app"]), `Could not inspect the installed iOS application container for ${appId}`);
24367
+ const info = requiredOutput(await run([
24368
+ plutil,
24369
+ "-convert",
24370
+ "json",
24371
+ "-o",
24372
+ "-",
24373
+ `${appContainer}/Info.plist`
24374
+ ]), `Could not inspect the installed iOS Info.plist for ${appId}`);
24375
+ return parseAbsoluteIosInstalledAppInfo(appId, appContainer, dataContainer, info);
24376
+ };
24377
+ var parseAbsoluteIosInstalledAppInfo = (appId, appContainer, dataContainer, output) => {
24378
+ let value;
24379
+ try {
24380
+ value = JSON.parse(output);
24381
+ } catch {
24382
+ throw new TypeError("Invalid installed iOS application Info.plist JSON.");
24383
+ }
24384
+ if (!value || typeof value !== "object")
24385
+ throw new TypeError("Invalid installed iOS application Info.plist JSON.");
24386
+ const bundleId = Reflect.get(value, "CFBundleIdentifier");
24387
+ if (bundleId !== appId)
24388
+ throw new Error(`Installed iOS application identifier mismatch (${String(bundleId)} != ${appId}).`);
24389
+ const buildNumber = Reflect.get(value, "CFBundleVersion");
24390
+ const version = Reflect.get(value, "CFBundleShortVersionString");
24391
+ return {
24392
+ appContainer,
24393
+ appId,
24394
+ ...typeof buildNumber === "string" || typeof buildNumber === "number" ? { buildNumber: String(buildNumber) } : {},
24395
+ dataContainer,
24396
+ ...typeof version === "string" ? { version } : {}
24397
+ };
24398
+ };
24399
+ var numericBuild = (value) => {
24400
+ if (!value || !/^\d+$/u.test(value))
24401
+ return;
24402
+ return BigInt(value);
24403
+ };
24404
+ var assertAbsoluteIosInstalledAppUpgrade = (before, after) => {
24405
+ if (before.appId !== after.appId)
24406
+ throw new Error(`iOS bundle identifier changed during the replacement upgrade (${before.appId} -> ${after.appId}).`);
24407
+ if (!before.dataContainer || !after.dataContainer)
24408
+ throw new Error("iOS did not report a data container for the upgrade proof.");
24409
+ if (before.dataContainer !== after.dataContainer)
24410
+ throw new Error("iOS data container changed during the replacement upgrade.");
24411
+ const beforeBuild = numericBuild(before.buildNumber);
24412
+ const afterBuild = numericBuild(after.buildNumber);
24413
+ if (beforeBuild === undefined || afterBuild === undefined)
24414
+ throw new Error("iOS did not report numeric CFBundleVersion values for the upgrade proof.");
24415
+ if (afterBuild <= beforeBuild)
24416
+ throw new Error(`iOS CFBundleVersion did not increase (${before.buildNumber} -> ${after.buildNumber}).`);
24417
+ };
24348
24418
  // src/mobile/iosConformance.ts
24349
24419
  import { readFile as readFile6, stat as stat3 } from "fs/promises";
24350
24420
  var HMR_LINE = new RegExp(String.raw`\[hmr:ios\]\s+([^\n]*?)\s+(applied in|falling back to reload after|failed after)\s+(\d+)ms(?:; server\s+(\d+)ms, client\s+(\d+)ms)?`, "u");
@@ -27773,6 +27843,27 @@ public final class AbsoluteMobileObservabilityModule: Module, MXMetricManagerSub
27773
27843
  }
27774
27844
  }
27775
27845
  }
27846
+
27847
+ #if DEBUG
27848
+ AsyncFunction("enqueueForTesting") { (options: [String: String]) -> Bool in
27849
+ guard let testId = options["testId"],
27850
+ testId.range(of: "^[A-Za-z0-9._:-]{1,128}$", options: .regularExpression) != nil else { return false }
27851
+ let key = "absolute-native-observability-test-id"
27852
+ guard UserDefaults.standard.string(forKey: key) != testId else { return false }
27853
+ UserDefaults.standard.set(testId, forKey: key)
27854
+ Self.queue.sync {
27855
+ Self.enqueue(
27856
+ kind: "crash",
27857
+ occurredAt: Date().timeIntervalSince1970 * 1000,
27858
+ details: [
27859
+ "message": "token=mobile-observability-secret",
27860
+ "source": "absolutejs-conformance"
27861
+ ]
27862
+ )
27863
+ }
27864
+ return true
27865
+ }
27866
+ #endif
27776
27867
  }
27777
27868
 
27778
27869
  private static func root() -> URL? {
@@ -28056,6 +28147,7 @@ import { ABSOLUTE_MOBILE_MANIFEST } from './webAssets';
28056
28147
  type NativeObservabilityModule = {
28057
28148
  acknowledge(options: { ids: string[] }): Promise<void>;
28058
28149
  crashForTesting(options: { testId: string }): Promise<boolean>;
28150
+ enqueueForTesting(options: { testId: string }): Promise<boolean>;
28059
28151
  pending(): Promise<{ reports: unknown[] }>;
28060
28152
  };
28061
28153
  type NativeReport = { details: Record<string, unknown>; id: string; kind: string; occurredAt: number; platform: 'android' | 'ios' };
@@ -28117,6 +28209,12 @@ export const startAbsoluteExpoNativeObservability = () => {
28117
28209
  return drain();
28118
28210
  };
28119
28211
  export const crashAbsoluteExpoNativeObservabilityForTesting = (testId: string) => native.crashForTesting({ testId });
28212
+ export const enqueueAbsoluteExpoNativeObservabilityForTesting = async (testId: string) => {
28213
+ await drain();
28214
+ const enqueued = await native.enqueueForTesting({ testId });
28215
+ await drain();
28216
+ return enqueued;
28217
+ };
28120
28218
  `;
28121
28219
  var absoluteExpoNativeObservabilityFiles = (project) => new Map([
28122
28220
  [
@@ -30225,7 +30323,7 @@ fs.promises.realpath = async (value, options) => remap(await promiseRealpath(val
30225
30323
  `;
30226
30324
  var expoDevelopmentClientScheme = (appId) => `exp+${appId.toLowerCase().replaceAll(/[^a-z0-9]+/gu, "-")}`;
30227
30325
  var expoDevelopmentClientUrl = (appId, host3, port) => `${expoDevelopmentClientScheme(appId)}://expo-development-client/?url=${encodeURIComponent(`http://${host3}:${port}`)}`;
30228
- var captureCommand4 = (command) => {
30326
+ var captureCommand5 = (command) => {
30229
30327
  const result = Bun.spawnSync(command, {
30230
30328
  killSignal: "SIGKILL",
30231
30329
  stderr: "ignore",
@@ -30550,7 +30648,7 @@ var installAbsoluteExpoAndroidRelease = async (options) => {
30550
30648
  const host3 = options.host ?? detectAbsoluteMobileHost();
30551
30649
  const project = options.config.nativeProjectDirectory;
30552
30650
  const executable = options.executable ?? await absoluteExpoExecutable(project);
30553
- const capture = options.capture ?? captureCommand4;
30651
+ const capture = options.capture ?? captureCommand5;
30554
30652
  const run = options.spawnProcess ?? spawn;
30555
30653
  const log = options.log ?? (() => {
30556
30654
  return;
@@ -30599,7 +30697,7 @@ var installAbsoluteExpoIosRelease = async (options) => {
30599
30697
  throw new TypeError("The Expo iOS release installer requires the ios platform.");
30600
30698
  const project = options.config.nativeProjectDirectory;
30601
30699
  const executable = options.executable ?? await absoluteExpoExecutable(project);
30602
- const capture = options.capture ?? captureCommand4;
30700
+ const capture = options.capture ?? captureCommand5;
30603
30701
  const run = options.spawnProcess ?? spawn;
30604
30702
  const log = options.log ?? (() => {
30605
30703
  return;
@@ -30688,7 +30786,7 @@ var startAbsoluteExpoDevSession = async (options) => {
30688
30786
  const executable = options.executable ?? await absoluteExpoExecutable(plan.project);
30689
30787
  const run = options.spawnProcess ?? spawn;
30690
30788
  const host3 = options.host ?? detectAbsoluteMobileHost();
30691
- const capture = options.capture ?? captureCommand4;
30789
+ const capture = options.capture ?? captureCommand5;
30692
30790
  const log = options.log ?? (() => {
30693
30791
  return;
30694
30792
  });
@@ -40267,6 +40365,7 @@ export {
40267
40365
  applyAbsoluteNativeUpdates,
40268
40366
  assertAbsoluteAndroidInstalledAppUpgrade,
40269
40367
  assertAbsoluteDeviceCapabilityPackages,
40368
+ assertAbsoluteIosInstalledAppUpgrade,
40270
40369
  buildAbsoluteAndroidRelease,
40271
40370
  buildAbsoluteIosRelease,
40272
40371
  buildAbsoluteMobileCompatibilityRelease,
@@ -40322,6 +40421,7 @@ export {
40322
40421
  getCurrentAbsoluteMobileProducerContext,
40323
40422
  hashAbsoluteMobilePropsSchema,
40324
40423
  inspectAbsoluteAndroidInstalledApp,
40424
+ inspectAbsoluteIosInstalledApp,
40325
40425
  inspectAbsoluteMobileRouteMetadata,
40326
40426
  inspectAbsoluteMobileUpdateHealth,
40327
40427
  inspectAbsoluteMobileUpdateRollout,
@@ -40366,6 +40466,7 @@ export {
40366
40466
  parseAbsoluteExpoBridgeMessage,
40367
40467
  parseAbsoluteExpoUpdateDescriptor,
40368
40468
  parseAbsoluteIosHmrLog,
40469
+ parseAbsoluteIosInstalledAppInfo,
40369
40470
  parseAbsoluteIosLogLine,
40370
40471
  parseAbsoluteMobileBuildPageMetadata,
40371
40472
  parseAbsoluteMobileCompatibilityArtifact,
@@ -40439,5 +40540,5 @@ export {
40439
40540
  writeAbsoluteMobileUpdateRegistry
40440
40541
  };
40441
40542
 
40442
- //# debugId=2F7DAB8457CEAC9B64756E2164756E21
40543
+ //# debugId=8F55062CC1F78A5264756E2164756E21
40443
40544
  //# sourceMappingURL=index.js.map