@absolutejs/absolute 0.20.0-beta.79 → 0.20.0-beta.80

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.
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  var __require = import.meta.require;
3
3
 
4
- // .angular-partial-tmp-Ahu2vp/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-aw6snq/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-Ahu2vp/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-aw6snq/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-Ahu2vp/src/core/streamingSlotRegistry.ts
51
+ // .angular-partial-tmp-aw6snq/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-7q7wjgkq.js";
15
+ } from "./index-w5y7wxn9.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-6fb7k6dg.js";
39
- import"./index-eyx1hnm6.js";
39
+ import"./index-p8ezgd5e.js";
40
40
  import {
41
41
  ABSOLUTE_NATIVE_AUTH_CLIENTS_ENV,
42
42
  installAbsoluteMobileAuthEnvironment
@@ -1282,8 +1282,8 @@ var loadAbsoluteMobileDevModules = async () => {
1282
1282
  iosNativeWatcher
1283
1283
  ] = await Promise.all([
1284
1284
  import("./config-z8wwxatc.js"),
1285
- import("./expoProject-c6tpj156.js"),
1286
- import("./expoDevController-bdm4cq6m.js"),
1285
+ import("./expoProject-3mmwtemn.js"),
1286
+ import("./expoDevController-n19kb5fr.js"),
1287
1287
  import("./nativeAuth-zx4tsb1f.js"),
1288
1288
  import("./androidEmulatorController-nybhzc6c.js"),
1289
1289
  import("./emulatorDoctor-y2nqmaha.js"),
@@ -50,8 +50,10 @@ var expoDevelopmentClientScheme = (appId) => `exp+${appId.toLowerCase().replaceA
50
50
  var expoDevelopmentClientUrl = (appId, host, port) => `${expoDevelopmentClientScheme(appId)}://expo-development-client/?url=${encodeURIComponent(`http://${host}:${port}`)}`;
51
51
  var captureCommand = (command) => {
52
52
  const result = Bun.spawnSync(command, {
53
+ killSignal: "SIGKILL",
53
54
  stderr: "ignore",
54
- stdout: "pipe"
55
+ stdout: "pipe",
56
+ timeout: 30000
55
57
  });
56
58
  return { exitCode: result.exitCode, stdout: result.stdout.toString() };
57
59
  };
@@ -94,7 +96,35 @@ var connectLocalExpoAndroid = (adb, appId, metroPort, capture, preferredDevice)
94
96
  openDevelopmentClient();
95
97
  return serial;
96
98
  };
97
- var encodedWindowsExpoAndroidCommand = (project, androidRoot, appId, args, capture, metroPort, preferredDevice) => {
99
+ var launchLocalExpoAndroidRelease = (adb, appId, forwardedPort, capture, preferredDevice) => {
100
+ const devices = capture([adb, "devices"]);
101
+ if (devices.exitCode !== 0)
102
+ throw new Error("Could not inspect devices after the Expo release build.");
103
+ const ready = devices.stdout.split(/\r?\n/u).flatMap((line) => {
104
+ const match = /^(\S+)\s+device$/u.exec(line.trim());
105
+ return match?.[1] ? [match[1]] : [];
106
+ });
107
+ const serial = preferredDevice ? ready.find((value) => value === preferredDevice) : ready.find((value) => value.startsWith("emulator-")) ?? ready[0];
108
+ if (!serial)
109
+ throw new Error("Expo release build completed but no ready device was found.");
110
+ const run = (args, message) => {
111
+ if (capture([adb, "-s", serial, ...args]).exitCode !== 0)
112
+ throw new Error(message);
113
+ };
114
+ run(["reverse", `tcp:${forwardedPort}`, `tcp:${forwardedPort}`], "Expo Android release forwarding failed.");
115
+ run(["shell", "am", "force-stop", appId], "Expo Android release reset failed.");
116
+ run([
117
+ "shell",
118
+ "monkey",
119
+ "-p",
120
+ appId,
121
+ "-c",
122
+ "android.intent.category.LAUNCHER",
123
+ "1"
124
+ ], "Expo Android release launch failed.");
125
+ return serial;
126
+ };
127
+ var encodedWindowsExpoAndroidCommand = (project, androidRoot, appId, args, capture, forwardedPort, preferredDevice, mode = "development") => {
98
128
  const windowsSource = windowsPathFromWsl(project, capture);
99
129
  const buildId = Bun.hash(resolvePath(project)).toString(16);
100
130
  const buildDirectory = resolvePath(androidRoot, "..", "..", "ExpoBuilds", buildId.slice(0, 10));
@@ -110,15 +140,24 @@ var encodedWindowsExpoAndroidCommand = (project, androidRoot, appId, args, captu
110
140
  `[IO.File]::WriteAllText($hook, [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${realpathHook}')))`,
111
141
  "$env:ABSOLUTE_EXPO_PHYSICAL_ROOT = $directory",
112
142
  "$env:ABSOLUTE_EXPO_MAPPED_ROOT = $mappedProject",
143
+ "$env:ABSOLUTE_EXPO_APP_ROOT = $mappedProject",
113
144
  '$env:NODE_OPTIONS = "--require=$hook"',
114
145
  "$env:GRADLE_OPTS = (($env:GRADLE_OPTS + ' -Dorg.gradle.daemon=false').Trim())",
115
146
  "$autolinkingCache = Join-Path $mappedProject 'android\\build\\generated\\autolinking'",
116
147
  "if ([IO.Directory]::Exists($autolinkingCache)) { [IO.Directory]::Delete($autolinkingCache, $true) }",
117
- "$expo = Join-Path $mappedProject 'node_modules\\.bin\\expo.exe'",
118
- "& $expo @expoArguments",
119
- "if ($LASTEXITCODE -ne 0) { throw 'Expo Android native build failed.' }",
148
+ ...mode === "development" ? [
149
+ "$expo = Join-Path $mappedProject 'node_modules\\.bin\\expo.exe'",
150
+ "& $expo @expoArguments",
151
+ "if ($LASTEXITCODE -ne 0) { throw 'Expo Android native build failed.' }"
152
+ ] : [
153
+ "$gradle = Join-Path $mappedProject 'android\\gradlew.bat'",
154
+ "$androidProject = Join-Path $mappedProject 'android'",
155
+ "& $gradle --no-daemon --console=plain -p $androidProject assembleRelease",
156
+ "if ($LASTEXITCODE -ne 0) { throw 'Expo Android release compilation failed.' }"
157
+ ],
120
158
  "$adb = Join-Path $androidHome 'platform-tools\\adb.exe'",
121
- "$readyDevices = @(& $adb devices) | Where-Object { $_ -match '\\tdevice$' } | ForEach-Object { ($_ -split '\\s+')[0] }",
159
+ "$deviceDeadline = [DateTime]::UtcNow.AddSeconds(60)",
160
+ "do { $readyDevices = @(& $adb devices) | Where-Object { $_ -match '\\tdevice$' } | ForEach-Object { ($_ -split '\\s+')[0] }; if (-not $readyDevices) { Start-Sleep -Milliseconds 500 } } while (-not $readyDevices -and [DateTime]::UtcNow -lt $deviceDeadline)",
122
161
  ...preferredDevice ? [
123
162
  `$serial = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${encode(preferredDevice)}'))`,
124
163
  "if ($readyDevices -notcontains $serial) { throw 'The selected Expo Android device is not connected after build.' }"
@@ -127,16 +166,35 @@ var encodedWindowsExpoAndroidCommand = (project, androidRoot, appId, args, captu
127
166
  "if (-not $serial) { $serial = $readyDevices | Select-Object -First 1 }"
128
167
  ],
129
168
  "if (-not $serial) { throw 'Expo Android build completed but no ready device was found.' }",
130
- `& $adb -s $serial reverse 'tcp:${metroPort}' 'tcp:${metroPort}'`,
131
- "if ($LASTEXITCODE -ne 0) { throw 'Expo Android Metro forwarding failed.' }",
169
+ ...mode === "release" ? [
170
+ "$apk = Join-Path $mappedProject 'android\\app\\build\\outputs\\apk\\release\\app-release.apk'",
171
+ "$installOutput = Join-Path $env:TEMP ('absolutejs-adb-install-' + [Guid]::NewGuid().ToString('N') + '.out')",
172
+ "$installError = $installOutput + '.err'",
173
+ "$install = Start-Process -FilePath $adb -ArgumentList @('-s', $serial, 'install', '-r', $apk) -NoNewWindow -PassThru -RedirectStandardOutput $installOutput -RedirectStandardError $installError",
174
+ "if (-not $install.WaitForExit(900000)) { $install.Kill(); throw 'Expo Android release installation timed out after 15 minutes.' }",
175
+ "$install.WaitForExit()",
176
+ "$installText = ((Get-Content $installOutput -Raw -ErrorAction SilentlyContinue) + (Get-Content $installError -Raw -ErrorAction SilentlyContinue))",
177
+ "if ($installText) { Write-Output $installText.Trim() }",
178
+ "Remove-Item $installOutput, $installError -Force -ErrorAction SilentlyContinue",
179
+ "if ($install.ExitCode -ne 0 -and $installText -notmatch '(?m)^Success\\r?$') { throw 'Expo Android release installation failed.' }",
180
+ "$installedPackage = @(& $adb -s $serial shell pm path " + `'${appId}')`,
181
+ "if ($LASTEXITCODE -ne 0 -or $installedPackage -notmatch '^package:') { throw 'Expo Android release package verification failed.' }"
182
+ ] : [],
183
+ `& $adb -s $serial reverse 'tcp:${forwardedPort}' 'tcp:${forwardedPort}'`,
184
+ "if ($LASTEXITCODE -ne 0) { throw 'Expo Android port forwarding failed.' }",
132
185
  `& $adb -s $serial shell am force-stop '${appId}'`,
133
- "if ($LASTEXITCODE -ne 0) { throw 'Expo Android development-client reset failed.' }",
134
- `$developmentUrl = '${developmentScheme}://expo-development-client/?url=' + [Uri]::EscapeDataString('http://localhost:${metroPort}')`,
135
- `& $adb -s $serial shell am start -a android.intent.action.VIEW -d $developmentUrl '${appId}'`,
136
- "if ($LASTEXITCODE -ne 0) { throw 'Expo Android development-client launch failed.' }",
137
- "Start-Sleep -Milliseconds 1000",
138
- `& $adb -s $serial shell am start -a android.intent.action.VIEW -d $developmentUrl '${appId}'`,
139
- "if ($LASTEXITCODE -ne 0) { throw 'Expo Android development-client retry failed.' }"
186
+ "if ($LASTEXITCODE -ne 0) { throw 'Expo Android application reset failed.' }",
187
+ ...mode === "development" ? [
188
+ `$developmentUrl = '${developmentScheme}://expo-development-client/?url=' + [Uri]::EscapeDataString('http://localhost:${forwardedPort}')`,
189
+ `& $adb -s $serial shell am start -a android.intent.action.VIEW -d $developmentUrl '${appId}'`,
190
+ "if ($LASTEXITCODE -ne 0) { throw 'Expo Android development-client launch failed.' }",
191
+ "Start-Sleep -Milliseconds 1000",
192
+ `& $adb -s $serial shell am start -a android.intent.action.VIEW -d $developmentUrl '${appId}'`,
193
+ "if ($LASTEXITCODE -ne 0) { throw 'Expo Android development-client retry failed.' }"
194
+ ] : [
195
+ `& $adb -s $serial shell monkey -p '${appId}' -c android.intent.category.LAUNCHER 1 | Out-Null`,
196
+ "if ($LASTEXITCODE -ne 0) { throw 'Expo Android release launch failed.' }"
197
+ ]
140
198
  ].join("; ");
141
199
  const source = [
142
200
  "$ErrorActionPreference = 'Stop'",
@@ -147,7 +205,7 @@ var encodedWindowsExpoAndroidCommand = (project, androidRoot, appId, args, captu
147
205
  `$expoArguments = @([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${encode(JSON.stringify(args))}')) | ConvertFrom-Json)`,
148
206
  "$env:ANDROID_HOME = $androidHome",
149
207
  "$env:ANDROID_SDK_ROOT = $androidHome",
150
- "$env:NODE_ENV = 'development'",
208
+ `$env:NODE_ENV = '${mode === "development" ? "development" : "production"}'`,
151
209
  ...preferredDevice ? [] : ["$env:ORG_GRADLE_PROJECT_reactNativeArchitectures = 'x86_64'"],
152
210
  "New-Item -ItemType Directory -Force -Path $directory | Out-Null",
153
211
  "& robocopy.exe $source $directory /MIR /XD node_modules .expo .git .gradle .cxx .kotlin build /XF bun.lock bun.lockb .absolutejs-preserve-subst.cjs /NFL /NDL /NJH /NJS /NP",
@@ -157,9 +215,11 @@ var encodedWindowsExpoAndroidCommand = (project, androidRoot, appId, args, captu
157
215
  "$bun = (Get-Command bun.exe -ErrorAction Stop).Source",
158
216
  "& $bun install",
159
217
  "if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }",
218
+ "$mirrorRoot = Split-Path -Parent $directory",
219
+ "$staleDrives = @(& subst.exe) | ForEach-Object { if ($_ -match '^([A-Z]:)\\\\: => (.+)$' -and [String]::Equals($Matches[2].TrimEnd('\\'), $mirrorRoot.TrimEnd('\\'), [StringComparison]::OrdinalIgnoreCase)) { $Matches[1] } }",
220
+ "foreach ($staleDrive in $staleDrives) { & subst.exe $staleDrive /D | Out-Null }",
160
221
  "$drive = @('Z:', 'Y:', 'X:', 'W:', 'V:', 'U:', 'T:') | Where-Object { -not (Test-Path ($_ + '\\')) } | Select-Object -First 1",
161
222
  "if (-not $drive) { throw 'AbsoluteJS could not reserve a temporary drive letter for the Expo Android build.' }",
162
- "$mirrorRoot = Split-Path -Parent $directory",
163
223
  "& subst.exe $drive $mirrorRoot",
164
224
  "if ($LASTEXITCODE -ne 0) { throw 'AbsoluteJS could not create the short Expo Android build path.' }",
165
225
  `try { ${mappedBuild} } finally { Set-Location ($env:SystemDrive + '\\'); & subst.exe $drive /D | Out-Null }`,
@@ -293,7 +353,7 @@ var waitForExit = (process2) => new Promise((resolve) => {
293
353
  var runUtilityCommand = async (run, command, args, options) => {
294
354
  const child = run(command, args, {
295
355
  cwd: options.cwd,
296
- env: process.env,
356
+ env: options.env ?? process.env,
297
357
  stdio: ["ignore", "pipe", "pipe"]
298
358
  });
299
359
  forwardLines(child, options.log);
@@ -305,6 +365,56 @@ var runUtilityCommand = async (run, command, args, options) => {
305
365
  throw abortError();
306
366
  return exitCode;
307
367
  };
368
+ var installAbsoluteExpoAndroidRelease = async (options) => {
369
+ if (options.config.engine !== "expo")
370
+ throw new TypeError("The Expo Android release installer requires Expo.");
371
+ if (!options.config.platforms.includes("android"))
372
+ throw new TypeError("The Expo Android release installer requires the android platform.");
373
+ const host = options.host ?? detectAbsoluteMobileHost();
374
+ const project = options.config.nativeProjectDirectory;
375
+ const executable = options.executable ?? await absoluteExpoExecutable(project);
376
+ const capture = options.capture ?? captureCommand;
377
+ const run = options.spawnProcess ?? spawn;
378
+ const log = options.log ?? (() => {
379
+ return;
380
+ });
381
+ const env = { ...process.env, NODE_ENV: "production" };
382
+ const utilityOptions = {
383
+ cwd: project,
384
+ env,
385
+ log,
386
+ signal: options.signal
387
+ };
388
+ const started = performance.now();
389
+ const prebuildExit = await runUtilityCommand(run, executable, ["prebuild", "--clean", "--no-install", "--platform", "android"], utilityOptions);
390
+ if (prebuildExit !== 0)
391
+ throw new Error(`Expo Android production preparation exited with status ${prebuildExit}.`);
392
+ const androidRoot = options.androidRoot ?? process.env.ANDROID_HOME ?? process.env.ANDROID_SDK_ROOT ?? absoluteManagedAndroidSdkRoot(host);
393
+ const args = [
394
+ "run:android",
395
+ "--variant",
396
+ "release",
397
+ "--no-bundler",
398
+ ...options.androidDevice ? ["--device", options.androidDevice] : []
399
+ ];
400
+ const invocation = host === "wsl" ? encodedWindowsExpoAndroidCommand(project, androidRoot, options.config.appId, args, capture, options.forwardedPort, options.androidDevice, "release") : [executable, ...args];
401
+ if (host === "wsl")
402
+ log("[android] Mirroring native inputs to the Windows host for an installable Expo release build.");
403
+ const [releaseExecutable, ...releaseArguments] = invocation;
404
+ if (!releaseExecutable)
405
+ throw new Error("Expo Android release build command is empty.");
406
+ const releaseExit = await runUtilityCommand(run, releaseExecutable, releaseArguments, utilityOptions);
407
+ if (releaseExit !== 0)
408
+ throw new Error(`Expo Android release build exited with status ${releaseExit}.`);
409
+ const adb = options.androidAdb ?? join(androidRoot, "platform-tools", host === "windows" || host === "wsl" ? "adb.exe" : "adb");
410
+ const serial = host === "wsl" ? options.androidDevice ?? capture([adb, "devices"]).stdout.split(/\r?\n/u).flatMap((line) => {
411
+ const match = /^(\S+)\s+device$/u.exec(line.trim());
412
+ return match?.[1] ? [match[1]] : [];
413
+ }).find((value) => value.startsWith("emulator-")) : launchLocalExpoAndroidRelease(adb, options.config.appId, options.forwardedPort, capture, options.androidDevice);
414
+ if (!serial)
415
+ throw new Error("Expo Android release build completed but its device could not be identified.");
416
+ return { durationMs: performance.now() - started, serial };
417
+ };
308
418
  var startAbsoluteExpoDevSession = async (options) => {
309
419
  const plan = planAbsoluteExpoDevSession(options.config, options);
310
420
  const executable = options.executable ?? await absoluteExpoExecutable(plan.project);
@@ -539,6 +649,7 @@ var startAbsoluteExpoDevSession = async (options) => {
539
649
  };
540
650
  export {
541
651
  absoluteExpoExecutable,
652
+ installAbsoluteExpoAndroidRelease,
542
653
  planAbsoluteExpoDevSession,
543
654
  startAbsoluteExpoDevSession
544
655
  };
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  syncAbsoluteExpoWebAssets,
4
4
  writeAbsoluteExpoProject
5
- } from "./index-eyx1hnm6.js";
5
+ } from "./index-p8ezgd5e.js";
6
6
  import"./index-ar4gz15x.js";
7
7
  import"./index-mywsk201.js";
8
8
  export {
@@ -6,7 +6,7 @@ import {
6
6
  createIslandRegistryDefinitionPlugin,
7
7
  finalizeAbsoluteMobileCompatibilityBuild,
8
8
  resolveServerBundleExternals
9
- } from "./index-7q7wjgkq.js";
9
+ } from "./index-w5y7wxn9.js";
10
10
  import {
11
11
  loadIslandRegistryBuildInfo
12
12
  } from "./index-bzs19w3r.js";
@@ -1614,7 +1614,7 @@ var expoAppConfig = (config, auth, sync, devices, runtimeFingerprint) => {
1614
1614
  slug: config.appId.toLowerCase().replaceAll(".", "-"),
1615
1615
  ...config.updates ? {
1616
1616
  updates: {
1617
- checkAutomatically: "NEVER",
1617
+ checkAutomatically: "ON_ERROR_RECOVERY",
1618
1618
  fallbackToCacheTimeout: config.updates.bootTimeoutMs,
1619
1619
  requestHeaders: {
1620
1620
  "x-absolute-mobile-app": config.appId,
@@ -1694,7 +1694,7 @@ var metroConfig = (projectRoot) => `${EXPO_GENERATED_HEADER}const { getDefaultCo
1694
1694
  const path = require('node:path');
1695
1695
 
1696
1696
  const projectRoot = __dirname;
1697
- const appRoot = ${JSON.stringify(projectRoot)};
1697
+ const appRoot = process.env.ABSOLUTE_EXPO_APP_ROOT || ${JSON.stringify(projectRoot)};
1698
1698
  const config = getDefaultConfig(projectRoot);
1699
1699
  config.resolver.assetExts.push('absasset');
1700
1700
  config.resolver.nodeModulesPaths = [
@@ -1728,15 +1728,11 @@ export default function AbsoluteLayout() {
1728
1728
  return <Stack screenOptions={{ headerShown: false }} />;
1729
1729
  }
1730
1730
  `;
1731
- var updatesRuntimeSource = (config) => `${EXPO_GENERATED_HEADER}import { randomUUID } from 'expo-crypto';
1731
+ var updatesRuntimeSource = () => `${EXPO_GENERATED_HEADER}import { randomUUID } from 'expo-crypto';
1732
1732
  import * as SecureStore from 'expo-secure-store';
1733
1733
  import * as Updates from 'expo-updates';
1734
1734
 
1735
1735
  const INSTALLATION_KEY = 'absolutejs.mobile.update.installation.v1';
1736
- const REQUEST_HEADERS = ${JSON.stringify({
1737
- "x-absolute-mobile-app": config.appId,
1738
- "x-absolute-mobile-channel": config.updates?.channel
1739
- })};
1740
1736
 
1741
1737
  let startPromise: Promise<void> | undefined;
1742
1738
  export const startAbsoluteExpoUpdates = () => {
@@ -1747,13 +1743,13 @@ export const startAbsoluteExpoUpdates = () => {
1747
1743
  installationId = randomUUID();
1748
1744
  await SecureStore.setItemAsync(INSTALLATION_KEY, installationId);
1749
1745
  }
1750
- await Updates.setUpdateRequestHeadersOverride({
1751
- ...REQUEST_HEADERS,
1752
- 'x-absolute-mobile-installation': installationId
1753
- });
1746
+ await Updates.setExtraParamAsync('absolute-installation', installationId);
1754
1747
  const result = await Updates.checkForUpdateAsync();
1755
1748
  if (result.isAvailable || result.isRollBackToEmbedded) {
1756
1749
  await Updates.fetchUpdateAsync();
1750
+ if (result.isRollBackToEmbedded) {
1751
+ await Updates.reloadAsync();
1752
+ }
1757
1753
  }
1758
1754
  })().catch(error => {
1759
1755
  console.warn('[absolute:mobile-update] Expo update check failed', error instanceof Error ? error.message : 'unknown error');
@@ -2695,7 +2691,7 @@ node_modules/
2695
2691
  files.set(path, source);
2696
2692
  }
2697
2693
  if (config.updates) {
2698
- files.set(join4(project, "src", "generated", "AbsoluteUpdates.ts"), updatesRuntimeSource(config));
2694
+ files.set(join4(project, "src", "generated", "AbsoluteUpdates.ts"), updatesRuntimeSource());
2699
2695
  }
2700
2696
  const expoCodeSigning = config.updates?.expoCodeSigning;
2701
2697
  if (expoCodeSigning)
@@ -10,7 +10,7 @@ import {
10
10
  resolveAbsoluteMobileUpdateRuntime,
11
11
  syncAbsoluteExpoWebAssets,
12
12
  writeAbsoluteExpoProject
13
- } from "./index-eyx1hnm6.js";
13
+ } from "./index-p8ezgd5e.js";
14
14
 
15
15
  // src/build/islandRegistryTransform.ts
16
16
  import { basename } from "path";
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-b1m7jp2t.js");
61
+ const { dev } = await import("./dev-8vv459ty.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-ty8jjzn8.js");
74
+ const { start } = await import("./start-dtrp1pry.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-ty8jjzn8.js");
84
+ const { start } = await import("./start-dtrp1pry.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-ee32zv39.js");
200
+ const { compile } = await import("./compile-x4hfth3p.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-hyxr0n58.js");
206
+ const { runMobile } = await import("./mobile-mfp26v2d.js");
207
207
  try {
208
208
  await runMobile(args);
209
209
  } catch (error) {
@@ -4,12 +4,12 @@ import {
4
4
  } from "./index-zh6hhrwy.js";
5
5
  import {
6
6
  start
7
- } from "./index-wt6kdy5f.js";
7
+ } from "./index-d4ar3mwd.js";
8
8
  import {
9
9
  ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,
10
10
  ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,
11
11
  resolveAbsoluteMobileRoute
12
- } from "./index-7q7wjgkq.js";
12
+ } from "./index-w5y7wxn9.js";
13
13
  import"./index-bzs19w3r.js";
14
14
  import"./index-s2tazax7.js";
15
15
  import {
@@ -63,7 +63,7 @@ import {
63
63
  syncAbsoluteExpoWebAssets,
64
64
  unsignedAbsoluteMobileUpdate,
65
65
  writeAbsoluteExpoProject
66
- } from "./index-eyx1hnm6.js";
66
+ } from "./index-p8ezgd5e.js";
67
67
  import {
68
68
  normalizeAbsoluteIosDeviceIdentifier
69
69
  } from "./index-j66p8hn5.js";
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  start
4
- } from "./index-wt6kdy5f.js";
5
- import"./index-7q7wjgkq.js";
4
+ } from "./index-d4ar3mwd.js";
5
+ import"./index-w5y7wxn9.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-6fb7k6dg.js";
14
- import"./index-eyx1hnm6.js";
14
+ import"./index-p8ezgd5e.js";
15
15
  import"./index-ar4gz15x.js";
16
16
  import"./index-t84wxk1p.js";
17
17
  import"./index-wtfnv3n2.js";