@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 +12 -0
- package/changelog.json +30 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/cli/{compile-5hchbcbd.js → compile-vf61bv90.js} +2 -2
- package/dist/cli/{dev-aykeaa7b.js → dev-perzmh2w.js} +1 -1
- package/dist/cli/{expoProject-dac8fqhq.js → expoProject-djc0vk7g.js} +1 -1
- package/dist/cli/{index-jqdt7841.js → index-751czk1b.js} +1 -1
- package/dist/cli/{index-tame6e2c.js → index-8zrnvazp.js} +28 -0
- package/dist/cli/{index-39j0dhq7.js → index-gxkmg2ss.js} +1 -1
- package/dist/cli/index.js +5 -5
- package/dist/cli/{mobile-bg1jy34n.js → mobile-yk7qr9qg.js} +3 -3
- package/dist/cli/{start-7jg0csqy.js → start-ef7tgbmf.js} +3 -3
- package/dist/mobile/index.js +106 -5
- package/dist/mobile/index.js.map +6 -5
- package/dist/mobile/remoteMacAgentEntry.js +28 -0
- package/dist/src/mobile/expoNativeObservability.d.ts +1 -1
- package/dist/src/mobile/index.d.ts +1 -0
- package/dist/src/mobile/iosUpgradeConformance.d.ts +16 -0
- package/package.json +3 -1
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
1285
|
+
import("./expoProject-djc0vk7g.js"),
|
|
1286
1286
|
import("./expoDevController-tr63cg78.js"),
|
|
1287
1287
|
import("./nativeAuth-zx4tsb1f.js"),
|
|
1288
1288
|
import("./androidEmulatorController-nybhzc6c.js"),
|
|
@@ -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
|
[
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
import"./index-
|
|
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-
|
|
14
|
+
import"./index-8zrnvazp.js";
|
|
15
15
|
import"./index-ar4gz15x.js";
|
|
16
16
|
import"./index-t84wxk1p.js";
|
|
17
17
|
import"./index-wtfnv3n2.js";
|
package/dist/mobile/index.js
CHANGED
|
@@ -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
|
|
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 ??
|
|
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 ??
|
|
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 ??
|
|
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=
|
|
40543
|
+
//# debugId=8F55062CC1F78A5264756E2164756E21
|
|
40443
40544
|
//# sourceMappingURL=index.js.map
|