@absolutejs/absolute 0.20.0-beta.89 → 0.20.0-beta.90
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 +6 -0
- package/changelog.json +10 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/cli/{dev-6shm8qsn.js → dev-aykeaa7b.js} +1 -1
- package/dist/cli/{expoDevController-n19kb5fr.js → expoDevController-tr63cg78.js} +93 -0
- package/dist/cli/index.js +1 -1
- package/dist/mobile/index.js +94 -1
- package/dist/mobile/index.js.map +3 -3
- package/dist/src/mobile/expoDevController.d.ts +19 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,12 @@ 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.90 — 2026-09-13
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Installed Expo iOS apps now have a production Simulator conformance gate for signed OTA safety, native Auth and Sync continuity, staged rollout controls, fleet recovery, and restart-safe reporting.**
|
|
14
|
+
|
|
9
15
|
## 0.20.0-beta.89 — 2026-09-13
|
|
10
16
|
|
|
11
17
|
### Added
|
package/changelog.json
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
"contract": 1,
|
|
3
3
|
"name": "@absolutejs/absolute",
|
|
4
4
|
"releases": [
|
|
5
|
+
{
|
|
6
|
+
"changes": [
|
|
7
|
+
{
|
|
8
|
+
"kind": "added",
|
|
9
|
+
"summary": "Installed Expo iOS apps now have a production Simulator conformance gate for signed OTA safety, native Auth and Sync continuity, staged rollout controls, fleet recovery, and restart-safe reporting."
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"date": "2026-09-13",
|
|
13
|
+
"version": "0.20.0-beta.90"
|
|
14
|
+
},
|
|
5
15
|
{
|
|
6
16
|
"changes": [
|
|
7
17
|
{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
var __require = import.meta.require;
|
|
3
3
|
|
|
4
|
-
// .angular-partial-tmp-
|
|
4
|
+
// .angular-partial-tmp-qD4cCn/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-qD4cCn/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-qD4cCn/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";
|
|
@@ -1283,7 +1283,7 @@ var loadAbsoluteMobileDevModules = async () => {
|
|
|
1283
1283
|
] = await Promise.all([
|
|
1284
1284
|
import("./config-vy04mqce.js"),
|
|
1285
1285
|
import("./expoProject-dac8fqhq.js"),
|
|
1286
|
-
import("./expoDevController-
|
|
1286
|
+
import("./expoDevController-tr63cg78.js"),
|
|
1287
1287
|
import("./nativeAuth-zx4tsb1f.js"),
|
|
1288
1288
|
import("./androidEmulatorController-nybhzc6c.js"),
|
|
1289
1289
|
import("./emulatorDoctor-y2nqmaha.js"),
|
|
@@ -415,6 +415,97 @@ var installAbsoluteExpoAndroidRelease = async (options) => {
|
|
|
415
415
|
throw new Error("Expo Android release build completed but its device could not be identified.");
|
|
416
416
|
return { durationMs: performance.now() - started, serial };
|
|
417
417
|
};
|
|
418
|
+
var installAbsoluteExpoIosRelease = async (options) => {
|
|
419
|
+
if (options.config.engine !== "expo")
|
|
420
|
+
throw new TypeError("The Expo iOS release installer requires Expo.");
|
|
421
|
+
if (!options.config.platforms.includes("ios"))
|
|
422
|
+
throw new TypeError("The Expo iOS release installer requires the ios platform.");
|
|
423
|
+
const project = options.config.nativeProjectDirectory;
|
|
424
|
+
const executable = options.executable ?? await absoluteExpoExecutable(project);
|
|
425
|
+
const capture = options.capture ?? captureCommand;
|
|
426
|
+
const run = options.spawnProcess ?? spawn;
|
|
427
|
+
const log = options.log ?? (() => {
|
|
428
|
+
return;
|
|
429
|
+
});
|
|
430
|
+
const xcrun = options.xcrun ?? "xcrun";
|
|
431
|
+
const env = { ...process.env, NODE_ENV: "production" };
|
|
432
|
+
const utilityOptions = {
|
|
433
|
+
cwd: project,
|
|
434
|
+
env,
|
|
435
|
+
log,
|
|
436
|
+
signal: options.signal
|
|
437
|
+
};
|
|
438
|
+
const bootedSimulators = () => {
|
|
439
|
+
const inventory = capture([
|
|
440
|
+
xcrun,
|
|
441
|
+
"simctl",
|
|
442
|
+
"list",
|
|
443
|
+
"devices",
|
|
444
|
+
"booted",
|
|
445
|
+
"-j"
|
|
446
|
+
]);
|
|
447
|
+
if (inventory.exitCode !== 0)
|
|
448
|
+
throw new Error("Could not inspect booted iOS Simulators. Run `absolute mobile doctor ios --fix`.");
|
|
449
|
+
return parseBootedAbsoluteExpoIosSimulators(inventory.stdout);
|
|
450
|
+
};
|
|
451
|
+
const started = performance.now();
|
|
452
|
+
const prebuildExit = await runUtilityCommand(run, executable, ["prebuild", "--clean", "--no-install", "--platform", "ios"], utilityOptions);
|
|
453
|
+
if (prebuildExit !== 0)
|
|
454
|
+
throw new Error(`Expo iOS production preparation exited with status ${prebuildExit}.`);
|
|
455
|
+
const beforeBuild = bootedSimulators();
|
|
456
|
+
const selectedBeforeBuild = options.iosDevice ? beforeBuild.find((udid2) => udid2 === options.iosDevice) : beforeBuild[0];
|
|
457
|
+
if (options.iosDevice && !selectedBeforeBuild)
|
|
458
|
+
throw new Error("The selected Expo iOS Simulator is not booted.");
|
|
459
|
+
const releaseExit = await runUtilityCommand(run, executable, [
|
|
460
|
+
"run:ios",
|
|
461
|
+
"--configuration",
|
|
462
|
+
"Release",
|
|
463
|
+
"--no-bundler",
|
|
464
|
+
...selectedBeforeBuild ? ["--device", selectedBeforeBuild] : []
|
|
465
|
+
], utilityOptions);
|
|
466
|
+
if (releaseExit !== 0)
|
|
467
|
+
throw new Error(`Expo iOS release build exited with status ${releaseExit}.`);
|
|
468
|
+
const udid = selectedBeforeBuild ?? bootedSimulators()[0];
|
|
469
|
+
if (!udid)
|
|
470
|
+
throw new Error("Expo iOS release build completed but its Simulator could not be identified.");
|
|
471
|
+
const launched = capture([
|
|
472
|
+
xcrun,
|
|
473
|
+
"simctl",
|
|
474
|
+
"launch",
|
|
475
|
+
"--terminate-running-process",
|
|
476
|
+
udid,
|
|
477
|
+
options.config.appId
|
|
478
|
+
]);
|
|
479
|
+
if (launched.exitCode !== 0)
|
|
480
|
+
throw new Error("Expo iOS release app launch failed.");
|
|
481
|
+
log(`Installed and launched the Expo iOS release app on ${udid}.`);
|
|
482
|
+
return { durationMs: performance.now() - started, udid };
|
|
483
|
+
};
|
|
484
|
+
var parseBootedAbsoluteExpoIosSimulators = (source) => {
|
|
485
|
+
let parsed;
|
|
486
|
+
try {
|
|
487
|
+
parsed = JSON.parse(source);
|
|
488
|
+
} catch {
|
|
489
|
+
throw new TypeError("Invalid iOS Simulator inventory JSON.");
|
|
490
|
+
}
|
|
491
|
+
if (!parsed || typeof parsed !== "object")
|
|
492
|
+
throw new TypeError("Invalid iOS Simulator inventory JSON.");
|
|
493
|
+
const devices = Reflect.get(parsed, "devices");
|
|
494
|
+
if (!devices || typeof devices !== "object")
|
|
495
|
+
return [];
|
|
496
|
+
return Object.values(devices).flatMap((values) => {
|
|
497
|
+
if (!Array.isArray(values))
|
|
498
|
+
return [];
|
|
499
|
+
return values.flatMap((value) => {
|
|
500
|
+
if (!value || typeof value !== "object")
|
|
501
|
+
return [];
|
|
502
|
+
const udid = Reflect.get(value, "udid");
|
|
503
|
+
const state = Reflect.get(value, "state");
|
|
504
|
+
const isAvailable = Reflect.get(value, "isAvailable");
|
|
505
|
+
return typeof udid === "string" && state === "Booted" && isAvailable !== false ? [udid] : [];
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
};
|
|
418
509
|
var startAbsoluteExpoDevSession = async (options) => {
|
|
419
510
|
const plan = planAbsoluteExpoDevSession(options.config, options);
|
|
420
511
|
const executable = options.executable ?? await absoluteExpoExecutable(plan.project);
|
|
@@ -650,6 +741,8 @@ var startAbsoluteExpoDevSession = async (options) => {
|
|
|
650
741
|
export {
|
|
651
742
|
absoluteExpoExecutable,
|
|
652
743
|
installAbsoluteExpoAndroidRelease,
|
|
744
|
+
installAbsoluteExpoIosRelease,
|
|
745
|
+
parseBootedAbsoluteExpoIosSimulators,
|
|
653
746
|
planAbsoluteExpoDevSession,
|
|
654
747
|
startAbsoluteExpoDevSession
|
|
655
748
|
};
|
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-aykeaa7b.js");
|
|
62
62
|
await dev(serverEntry, configPath, {
|
|
63
63
|
androidDevice,
|
|
64
64
|
eager: args.includes("--eager"),
|
package/dist/mobile/index.js
CHANGED
|
@@ -30592,6 +30592,97 @@ var installAbsoluteExpoAndroidRelease = async (options) => {
|
|
|
30592
30592
|
throw new Error("Expo Android release build completed but its device could not be identified.");
|
|
30593
30593
|
return { durationMs: performance.now() - started, serial };
|
|
30594
30594
|
};
|
|
30595
|
+
var installAbsoluteExpoIosRelease = async (options) => {
|
|
30596
|
+
if (options.config.engine !== "expo")
|
|
30597
|
+
throw new TypeError("The Expo iOS release installer requires Expo.");
|
|
30598
|
+
if (!options.config.platforms.includes("ios"))
|
|
30599
|
+
throw new TypeError("The Expo iOS release installer requires the ios platform.");
|
|
30600
|
+
const project = options.config.nativeProjectDirectory;
|
|
30601
|
+
const executable = options.executable ?? await absoluteExpoExecutable(project);
|
|
30602
|
+
const capture = options.capture ?? captureCommand4;
|
|
30603
|
+
const run = options.spawnProcess ?? spawn;
|
|
30604
|
+
const log = options.log ?? (() => {
|
|
30605
|
+
return;
|
|
30606
|
+
});
|
|
30607
|
+
const xcrun = options.xcrun ?? "xcrun";
|
|
30608
|
+
const env = { ...process.env, NODE_ENV: "production" };
|
|
30609
|
+
const utilityOptions = {
|
|
30610
|
+
cwd: project,
|
|
30611
|
+
env,
|
|
30612
|
+
log,
|
|
30613
|
+
signal: options.signal
|
|
30614
|
+
};
|
|
30615
|
+
const bootedSimulators = () => {
|
|
30616
|
+
const inventory = capture([
|
|
30617
|
+
xcrun,
|
|
30618
|
+
"simctl",
|
|
30619
|
+
"list",
|
|
30620
|
+
"devices",
|
|
30621
|
+
"booted",
|
|
30622
|
+
"-j"
|
|
30623
|
+
]);
|
|
30624
|
+
if (inventory.exitCode !== 0)
|
|
30625
|
+
throw new Error("Could not inspect booted iOS Simulators. Run `absolute mobile doctor ios --fix`.");
|
|
30626
|
+
return parseBootedAbsoluteExpoIosSimulators(inventory.stdout);
|
|
30627
|
+
};
|
|
30628
|
+
const started = performance.now();
|
|
30629
|
+
const prebuildExit = await runUtilityCommand(run, executable, ["prebuild", "--clean", "--no-install", "--platform", "ios"], utilityOptions);
|
|
30630
|
+
if (prebuildExit !== 0)
|
|
30631
|
+
throw new Error(`Expo iOS production preparation exited with status ${prebuildExit}.`);
|
|
30632
|
+
const beforeBuild = bootedSimulators();
|
|
30633
|
+
const selectedBeforeBuild = options.iosDevice ? beforeBuild.find((udid2) => udid2 === options.iosDevice) : beforeBuild[0];
|
|
30634
|
+
if (options.iosDevice && !selectedBeforeBuild)
|
|
30635
|
+
throw new Error("The selected Expo iOS Simulator is not booted.");
|
|
30636
|
+
const releaseExit = await runUtilityCommand(run, executable, [
|
|
30637
|
+
"run:ios",
|
|
30638
|
+
"--configuration",
|
|
30639
|
+
"Release",
|
|
30640
|
+
"--no-bundler",
|
|
30641
|
+
...selectedBeforeBuild ? ["--device", selectedBeforeBuild] : []
|
|
30642
|
+
], utilityOptions);
|
|
30643
|
+
if (releaseExit !== 0)
|
|
30644
|
+
throw new Error(`Expo iOS release build exited with status ${releaseExit}.`);
|
|
30645
|
+
const udid = selectedBeforeBuild ?? bootedSimulators()[0];
|
|
30646
|
+
if (!udid)
|
|
30647
|
+
throw new Error("Expo iOS release build completed but its Simulator could not be identified.");
|
|
30648
|
+
const launched = capture([
|
|
30649
|
+
xcrun,
|
|
30650
|
+
"simctl",
|
|
30651
|
+
"launch",
|
|
30652
|
+
"--terminate-running-process",
|
|
30653
|
+
udid,
|
|
30654
|
+
options.config.appId
|
|
30655
|
+
]);
|
|
30656
|
+
if (launched.exitCode !== 0)
|
|
30657
|
+
throw new Error("Expo iOS release app launch failed.");
|
|
30658
|
+
log(`Installed and launched the Expo iOS release app on ${udid}.`);
|
|
30659
|
+
return { durationMs: performance.now() - started, udid };
|
|
30660
|
+
};
|
|
30661
|
+
var parseBootedAbsoluteExpoIosSimulators = (source) => {
|
|
30662
|
+
let parsed;
|
|
30663
|
+
try {
|
|
30664
|
+
parsed = JSON.parse(source);
|
|
30665
|
+
} catch {
|
|
30666
|
+
throw new TypeError("Invalid iOS Simulator inventory JSON.");
|
|
30667
|
+
}
|
|
30668
|
+
if (!parsed || typeof parsed !== "object")
|
|
30669
|
+
throw new TypeError("Invalid iOS Simulator inventory JSON.");
|
|
30670
|
+
const devices = Reflect.get(parsed, "devices");
|
|
30671
|
+
if (!devices || typeof devices !== "object")
|
|
30672
|
+
return [];
|
|
30673
|
+
return Object.values(devices).flatMap((values) => {
|
|
30674
|
+
if (!Array.isArray(values))
|
|
30675
|
+
return [];
|
|
30676
|
+
return values.flatMap((value) => {
|
|
30677
|
+
if (!value || typeof value !== "object")
|
|
30678
|
+
return [];
|
|
30679
|
+
const udid = Reflect.get(value, "udid");
|
|
30680
|
+
const state = Reflect.get(value, "state");
|
|
30681
|
+
const isAvailable = Reflect.get(value, "isAvailable");
|
|
30682
|
+
return typeof udid === "string" && state === "Booted" && isAvailable !== false ? [udid] : [];
|
|
30683
|
+
});
|
|
30684
|
+
});
|
|
30685
|
+
};
|
|
30595
30686
|
var startAbsoluteExpoDevSession = async (options) => {
|
|
30596
30687
|
const plan = planAbsoluteExpoDevSession(options.config, options);
|
|
30597
30688
|
const executable = options.executable ?? await absoluteExpoExecutable(plan.project);
|
|
@@ -40240,6 +40331,7 @@ export {
|
|
|
40240
40331
|
inspectAbsoluteRemoteMacLanHost,
|
|
40241
40332
|
inspectAbsoluteRemoteMacWorkspace,
|
|
40242
40333
|
installAbsoluteExpoAndroidRelease,
|
|
40334
|
+
installAbsoluteExpoIosRelease,
|
|
40243
40335
|
installAbsoluteIosRelease,
|
|
40244
40336
|
installAbsoluteMobileAdaptiveShell,
|
|
40245
40337
|
installAbsoluteMobileAuthEnvironment,
|
|
@@ -40282,6 +40374,7 @@ export {
|
|
|
40282
40374
|
parseAbsoluteMobileUnsignedUpdateManifest,
|
|
40283
40375
|
parseAbsoluteMobileUpdateManifest,
|
|
40284
40376
|
parseAbsoluteMobileUpdateRequest,
|
|
40377
|
+
parseBootedAbsoluteExpoIosSimulators,
|
|
40285
40378
|
parseIosDeviceTypes,
|
|
40286
40379
|
parseIosRuntimes,
|
|
40287
40380
|
parseIosSimulators,
|
|
@@ -40346,5 +40439,5 @@ export {
|
|
|
40346
40439
|
writeAbsoluteMobileUpdateRegistry
|
|
40347
40440
|
};
|
|
40348
40441
|
|
|
40349
|
-
//# debugId=
|
|
40442
|
+
//# debugId=2F7DAB8457CEAC9B64756E2164756E21
|
|
40350
40443
|
//# sourceMappingURL=index.js.map
|