@absolutejs/absolute 0.20.0-beta.114 → 0.20.0-beta.115

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,13 @@ 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.115 — 2026-09-17
10
+
11
+ ### Fixed
12
+
13
+ - **Stabilize the existing UserAgentProvider declaration with an explicit provider type so inferred union ordering cannot cause spurious API changes.** (`UserAgentProvider`)
14
+ - **Wait for Android network services before installed offline acceptance; add two-revision Capacitor and Expo branding conformance with packaged-pixel verification and light/dark screenshot evidence.**
15
+
9
16
  ## 0.20.0-beta.114 — 2026-09-17
10
17
 
11
18
  ### Added
package/changelog.json CHANGED
@@ -2,6 +2,21 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/absolute",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "kind": "fixed",
9
+ "summary": "Stabilize the existing UserAgentProvider declaration with an explicit provider type so inferred union ordering cannot cause spurious API changes.",
10
+ "symbols": ["UserAgentProvider"]
11
+ },
12
+ {
13
+ "kind": "fixed",
14
+ "summary": "Wait for Android network services before installed offline acceptance; add two-revision Capacitor and Expo branding conformance with packaged-pixel verification and light/dark screenshot evidence."
15
+ }
16
+ ],
17
+ "date": "2026-09-17",
18
+ "version": "0.20.0-beta.115"
19
+ },
5
20
  {
6
21
  "changes": [
7
22
  {
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  var __require = import.meta.require;
3
3
 
4
- // .angular-partial-tmp-GY0KSL/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-h18t3k/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-GY0KSL/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-h18t3k/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-GY0KSL/src/core/streamingSlotRegistry.ts
51
+ // .angular-partial-tmp-h18t3k/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";
package/dist/cli/index.js CHANGED
@@ -203,7 +203,7 @@ if (command === "dev") {
203
203
  sendTelemetryEvent("cli:command", {
204
204
  command: `mobile:${workspaceCommand ?? "unknown"}`
205
205
  });
206
- const { runMobile } = await import("./mobile-55wjg3nd.js");
206
+ const { runMobile } = await import("./mobile-fg2226vv.js");
207
207
  try {
208
208
  await runMobile(args);
209
209
  } catch (error) {
@@ -20835,6 +20835,40 @@ var buildAbsoluteAndroidRelease = async (options) => {
20835
20835
 
20836
20836
  // src/mobile/androidReleaseAcceptance.ts
20837
20837
  import { createHash as createHash3 } from "crypto";
20838
+
20839
+ // src/mobile/androidServiceReadiness.ts
20840
+ var SERVICE_TIMEOUT_MS = 180000;
20841
+ var SERVICE_POLL_MS = 500;
20842
+ var waitForAbsoluteAndroidNetworkServices = async (options) => {
20843
+ const startedAt = performance.now();
20844
+ const waitForServices = async () => {
20845
+ const states = await Promise.all(["wifi", "phone"].map(async (service) => {
20846
+ const result = await options.run([
20847
+ options.adb,
20848
+ "-s",
20849
+ options.serial,
20850
+ "shell",
20851
+ "service",
20852
+ "check",
20853
+ service
20854
+ ]);
20855
+ return {
20856
+ ready: result.exitCode === 0 && result.stdout.trim() === `Service ${service}: found`,
20857
+ service
20858
+ };
20859
+ }));
20860
+ const missing = states.filter(({ ready }) => !ready).map(({ service }) => service);
20861
+ if (missing.length === 0)
20862
+ return;
20863
+ if (performance.now() - startedAt >= (options.timeoutMs ?? SERVICE_TIMEOUT_MS))
20864
+ throw new Error(`Android network services did not become ready: ${missing.join(", ")}. Finish booting or restart the emulator before installed offline acceptance; no network settings were changed.`);
20865
+ await Bun.sleep(options.pollMs ?? SERVICE_POLL_MS);
20866
+ await waitForServices();
20867
+ };
20868
+ await waitForServices();
20869
+ };
20870
+
20871
+ // src/mobile/androidReleaseAcceptance.ts
20838
20872
  import {
20839
20873
  access as access6,
20840
20874
  mkdir as mkdir8,
@@ -21126,6 +21160,11 @@ var runAbsoluteAndroidReleaseAcceptance = async (options) => {
21126
21160
  if (options.release.metadata.versionCode !== undefined && installed.versionCode !== options.release.metadata.versionCode)
21127
21161
  throw new Error(`Installed Android versionCode ${installed.versionCode ?? "unknown"} does not match release ${options.release.metadata.versionCode}.`);
21128
21162
  await requireSuccess(run, adb(options.adb, options.serial, "logcat", "-c"), "Android release log isolation");
21163
+ await waitForAbsoluteAndroidNetworkServices({
21164
+ adb: options.adb,
21165
+ run,
21166
+ serial: options.serial
21167
+ });
21129
21168
  const [wifi, mobile] = await Promise.all([
21130
21169
  requireSuccess(run, adb(options.adb, options.serial, "shell", "settings", "get", "global", "wifi_on"), "Android Wi-Fi state inspection"),
21131
21170
  requireSuccess(run, adb(options.adb, options.serial, "shell", "settings", "get", "global", "mobile_data"), "Android mobile-data state inspection")
@@ -25468,6 +25468,40 @@ var buildAbsoluteAndroidRelease = async (options) => {
25468
25468
  };
25469
25469
  // src/mobile/androidReleaseAcceptance.ts
25470
25470
  import { createHash as createHash6 } from "crypto";
25471
+
25472
+ // src/mobile/androidServiceReadiness.ts
25473
+ var SERVICE_TIMEOUT_MS = 180000;
25474
+ var SERVICE_POLL_MS = 500;
25475
+ var waitForAbsoluteAndroidNetworkServices = async (options) => {
25476
+ const startedAt = performance.now();
25477
+ const waitForServices = async () => {
25478
+ const states = await Promise.all(["wifi", "phone"].map(async (service) => {
25479
+ const result = await options.run([
25480
+ options.adb,
25481
+ "-s",
25482
+ options.serial,
25483
+ "shell",
25484
+ "service",
25485
+ "check",
25486
+ service
25487
+ ]);
25488
+ return {
25489
+ ready: result.exitCode === 0 && result.stdout.trim() === `Service ${service}: found`,
25490
+ service
25491
+ };
25492
+ }));
25493
+ const missing = states.filter(({ ready }) => !ready).map(({ service }) => service);
25494
+ if (missing.length === 0)
25495
+ return;
25496
+ if (performance.now() - startedAt >= (options.timeoutMs ?? SERVICE_TIMEOUT_MS))
25497
+ throw new Error(`Android network services did not become ready: ${missing.join(", ")}. Finish booting or restart the emulator before installed offline acceptance; no network settings were changed.`);
25498
+ await Bun.sleep(options.pollMs ?? SERVICE_POLL_MS);
25499
+ await waitForServices();
25500
+ };
25501
+ await waitForServices();
25502
+ };
25503
+
25504
+ // src/mobile/androidReleaseAcceptance.ts
25471
25505
  import {
25472
25506
  access as access7,
25473
25507
  mkdir as mkdir5,
@@ -25809,6 +25843,11 @@ var runAbsoluteAndroidReleaseAcceptance = async (options) => {
25809
25843
  if (options.release.metadata.versionCode !== undefined && installed.versionCode !== options.release.metadata.versionCode)
25810
25844
  throw new Error(`Installed Android versionCode ${installed.versionCode ?? "unknown"} does not match release ${options.release.metadata.versionCode}.`);
25811
25845
  await requireSuccess2(run, adb(options.adb, options.serial, "logcat", "-c"), "Android release log isolation");
25846
+ await waitForAbsoluteAndroidNetworkServices({
25847
+ adb: options.adb,
25848
+ run,
25849
+ serial: options.serial
25850
+ });
25812
25851
  const [wifi, mobile] = await Promise.all([
25813
25852
  requireSuccess2(run, adb(options.adb, options.serial, "shell", "settings", "get", "global", "wifi_on"), "Android Wi-Fi state inspection"),
25814
25853
  requireSuccess2(run, adb(options.adb, options.serial, "shell", "settings", "get", "global", "mobile_data"), "Android mobile-data state inspection")
@@ -44851,5 +44890,5 @@ export {
44851
44890
  writeAbsoluteMobileUpdateRegistry
44852
44891
  };
44853
44892
 
44854
- //# debugId=A1067DC3426F4EF264756E2164756E21
44893
+ //# debugId=B5D4F1D4350A15F564756E2164756E21
44855
44894
  //# sourceMappingURL=index.js.map