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

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/changelog.json +38 -1
  3. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  4. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  5. package/dist/build.js +9 -4
  6. package/dist/build.js.map +5 -4
  7. package/dist/cli/{androidEmulatorController-nybhzc6c.js → androidEmulatorController-v6chbhem.js} +2 -2
  8. package/dist/cli/{androidNativeWatcher-2930tb8c.js → androidNativeWatcher-mgqws6ag.js} +2 -2
  9. package/dist/cli/{compile-ya4kd2sg.js → compile-5m830csy.js} +2 -2
  10. package/dist/cli/{dev-5cqmf7za.js → dev-ww30tdrv.js} +10 -7
  11. package/dist/cli/{expoProject-f5j20xms.js → expoProject-w2pzjwnx.js} +1 -1
  12. package/dist/cli/{index-28pbrd3q.js → index-18q9qc7f.js} +15 -2
  13. package/dist/cli/{index-5fmgn0nx.js → index-5268nwjx.js} +1 -1
  14. package/dist/cli/{index-5skbydh0.js → index-hneb973j.js} +1 -1
  15. package/dist/cli/{index-6mbm4n3g.js → index-k8r00xh9.js} +1 -1
  16. package/dist/cli/{index-dr21p6ae.js → index-nxcwg9ma.js} +590 -152
  17. package/dist/cli/{index-qr0pc777.js → index-wtyg9cy0.js} +1 -1
  18. package/dist/cli/index.js +5 -5
  19. package/dist/cli/{iosNativeWatcher-t6gv0p1w.js → iosNativeWatcher-8w1gawg4.js} +2 -2
  20. package/dist/cli/{iosSimulatorController-5n2a9fxv.js → iosSimulatorController-5vhqvhg6.js} +2 -2
  21. package/dist/cli/{mobile-fg2226vv.js → mobile-21vsmrjd.js} +47 -56
  22. package/dist/cli/{start-jt61f40d.js → start-3bhf56tj.js} +3 -3
  23. package/dist/index.js +12 -6
  24. package/dist/index.js.map +6 -5
  25. package/dist/mobile/index.js +692 -274
  26. package/dist/mobile/index.js.map +8 -6
  27. package/dist/mobile/remoteMacAgentEntry.js +564 -231
  28. package/dist/mobile/shellBootstrap.js +6 -1
  29. package/dist/react/hooks/index.js.map +2 -2
  30. package/dist/src/dev/serverEntryCopies.d.ts +2 -0
  31. package/dist/src/mobile/capacitorProject.d.ts +4 -0
  32. package/dist/src/mobile/expoEmbeddedAssets.d.ts +1 -0
  33. package/dist/src/mobile/nativePackages.d.ts +10 -0
  34. package/dist/src/mobile/updateRuntime.d.ts +1 -0
  35. package/package.json +6 -2
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  writeAbsoluteCapacitorConfig
4
- } from "./index-28pbrd3q.js";
4
+ } from "./index-18q9qc7f.js";
5
5
  import {
6
6
  ABSOLUTE_ANDROID_AVD_NAME,
7
7
  absoluteManagedAndroidSdkRoot,
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-5cqmf7za.js");
61
+ const { dev } = await import("./dev-ww30tdrv.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-jt61f40d.js");
74
+ const { start } = await import("./start-3bhf56tj.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-jt61f40d.js");
84
+ const { start } = await import("./start-3bhf56tj.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-ya4kd2sg.js");
200
+ const { compile } = await import("./compile-5m830csy.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-fg2226vv.js");
206
+ const { runMobile } = await import("./mobile-21vsmrjd.js");
207
207
  try {
208
208
  await runMobile(args);
209
209
  } catch (error) {
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  fingerprintAbsoluteIosDevProject
4
- } from "./index-5skbydh0.js";
4
+ } from "./index-hneb973j.js";
5
5
  import"./index-q1d4ns4n.js";
6
6
  import"./index-j66p8hn5.js";
7
- import"./index-28pbrd3q.js";
7
+ import"./index-18q9qc7f.js";
8
8
  import"./index-knt92dm8.js";
9
9
  import"./index-t84wxk1p.js";
10
10
  import"./index-wtfnv3n2.js";
@@ -10,10 +10,10 @@ import {
10
10
  redactAbsoluteIosLog,
11
11
  repairAbsoluteIosDevSession,
12
12
  startAbsoluteIosDevSession
13
- } from "./index-5skbydh0.js";
13
+ } from "./index-hneb973j.js";
14
14
  import"./index-q1d4ns4n.js";
15
15
  import"./index-j66p8hn5.js";
16
- import"./index-28pbrd3q.js";
16
+ import"./index-18q9qc7f.js";
17
17
  import"./index-knt92dm8.js";
18
18
  import"./index-t84wxk1p.js";
19
19
  import"./index-wtfnv3n2.js";
@@ -7,12 +7,12 @@ import {
7
7
  } from "./index-zh6hhrwy.js";
8
8
  import {
9
9
  start
10
- } from "./index-5fmgn0nx.js";
10
+ } from "./index-5268nwjx.js";
11
11
  import {
12
12
  ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,
13
13
  ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,
14
14
  resolveAbsoluteMobileRoute
15
- } from "./index-6mbm4n3g.js";
15
+ } from "./index-k8r00xh9.js";
16
16
  import"./index-bzs19w3r.js";
17
17
  import"./index-s2tazax7.js";
18
18
  import {
@@ -36,7 +36,7 @@ import {
36
36
  ABSOLUTE_IOS_SIMULATOR_NAME,
37
37
  parseIosSimulators,
38
38
  repairAbsoluteIosDevSession
39
- } from "./index-5skbydh0.js";
39
+ } from "./index-hneb973j.js";
40
40
  import {
41
41
  buildAbsoluteIosRelease,
42
42
  requireAbsoluteIosReleaseMetadata,
@@ -60,13 +60,19 @@ import {
60
60
  import {
61
61
  ABSOLUTE_CAPACITOR_ASSETS_SPEC,
62
62
  ABSOLUTE_MOBILE_UPDATE_FORMAT,
63
+ ABSOLUTE_NATIVE_EXACT_PACKAGES,
64
+ CAPACITOR_PACKAGE_SPECS,
65
+ CAPACITOR_SYNC_PACKAGE_SPECS,
63
66
  absoluteDeviceNativeRequirements,
64
67
  absoluteMobileUpdateSigningPayload,
65
68
  assertAbsoluteDeviceCapabilityPackages,
69
+ assertNativePackageVersions,
66
70
  canonicalizeAbsoluteMobileUpdate,
67
71
  discoverAbsoluteSyncSchema,
68
72
  generateAbsoluteCapacitorBranding,
69
73
  inspectAbsoluteMobileBranding,
74
+ packageNameFromSpec,
75
+ packagesNeedingExactInstall,
70
76
  parseAbsoluteMobileUpdateManifest,
71
77
  renderAbsoluteMobileBrandingPreview,
72
78
  resolveAbsoluteDeviceCapabilityPlan,
@@ -74,7 +80,7 @@ import {
74
80
  syncAbsoluteExpoWebAssets,
75
81
  unsignedAbsoluteMobileUpdate,
76
82
  writeAbsoluteExpoProject
77
- } from "./index-dr21p6ae.js";
83
+ } from "./index-nxcwg9ma.js";
78
84
  import {
79
85
  buildAbsoluteExpoAndroidWslBundle
80
86
  } from "./index-28nxv57v.js";
@@ -90,10 +96,11 @@ import {
90
96
  fingerprintAbsoluteAndroidNativeProject,
91
97
  parseAdbDevices,
92
98
  repairAbsoluteAndroidDevSession
93
- } from "./index-qr0pc777.js";
99
+ } from "./index-wtyg9cy0.js";
94
100
  import {
101
+ prepareAbsoluteCapacitorInitialization,
95
102
  writeAbsoluteCapacitorConfig
96
- } from "./index-28pbrd3q.js";
103
+ } from "./index-18q9qc7f.js";
97
104
  import {
98
105
  ABSOLUTE_ANDROID_AVD_NAME,
99
106
  absoluteManagedAndroidSdkRoot,
@@ -16790,7 +16797,7 @@ import {
16790
16797
  rm as rm11,
16791
16798
  writeFile as writeFile19
16792
16799
  } from "fs/promises";
16793
- import { createHash as createHash7, createPublicKey as createPublicKey2, randomUUID as randomUUID2 } from "crypto";
16800
+ import { createHash as createHash8, createPublicKey as createPublicKey2, randomUUID as randomUUID2 } from "crypto";
16794
16801
  import { join as join19, relative as relative17, resolve as resolve18 } from "path";
16795
16802
  import { createInterface } from "readline/promises";
16796
16803
 
@@ -19325,6 +19332,7 @@ var waitForAbsoluteAndroidHmrApply = async (session, options) => {
19325
19332
 
19326
19333
  // src/mobile/releaseDoctor.ts
19327
19334
  import { access as access4, readFile as readFile9, readdir as readdir4 } from "fs/promises";
19335
+ import { createHash as createHash2 } from "crypto";
19328
19336
  import { dirname as dirname6, extname, join as join8, relative as relative3 } from "path";
19329
19337
 
19330
19338
  // src/mobile/mobileBundleInspection.ts
@@ -20087,6 +20095,7 @@ var expoEmbeddedAssetsCheck = async (config) => {
20087
20095
  const entries = sourceFiles.map((path, index) => {
20088
20096
  const entry = {
20089
20097
  length: contents[index]?.byteLength ?? 0,
20098
+ md5: createHash2("md5").update(contents[index] ?? Buffer.alloc(0)).digest("hex"),
20090
20099
  offset,
20091
20100
  path: path.replaceAll("\\", "/")
20092
20101
  };
@@ -20094,7 +20103,7 @@ var expoEmbeddedAssetsCheck = async (config) => {
20094
20103
  return entry;
20095
20104
  });
20096
20105
  const archive = await readFile9(join8(assetsRoot, embeddedFiles[0] ?? ""));
20097
- if (!archive.equals(Buffer.concat(contents)) || entries.some((entry) => !source.includes(JSON.stringify(entry))))
20106
+ if (!archive.equals(Buffer.concat(contents)) || !source.includes(`const ARCHIVE_MD5 = ${JSON.stringify(createHash2("md5").update(archive).digest("hex"))};`) || !source.includes(`const ARCHIVE_LENGTH = ${archive.byteLength};`) || entries.some((entry) => !source.includes(JSON.stringify(entry))))
20098
20107
  throw new TypeError("Generated Expo asset bytes differ from the prepared mobile bundle.");
20099
20108
  return pass("expo.bundle-projection", `Expo embeds the complete signed mobile bundle as one opaque archive containing ${sourceFiles.length} file(s).`, generated);
20100
20109
  } catch (error) {
@@ -20580,7 +20589,7 @@ var inspectAbsoluteMobileRelease = async (config, projectRoot) => {
20580
20589
  };
20581
20590
 
20582
20591
  // src/mobile/androidRelease.ts
20583
- import { createHash as createHash2 } from "crypto";
20592
+ import { createHash as createHash3 } from "crypto";
20584
20593
  import {
20585
20594
  access as access5,
20586
20595
  copyFile,
@@ -20672,7 +20681,7 @@ var windowsJarsignerPath = (path, capture) => {
20672
20681
  }
20673
20682
  return translated;
20674
20683
  };
20675
- var sha256File = async (path) => createHash2("sha256").update(await readFile10(path)).digest("hex");
20684
+ var sha256File = async (path) => createHash3("sha256").update(await readFile10(path)).digest("hex");
20676
20685
  var fingerprintExpoAndroidProject = async (nativeDirectory) => {
20677
20686
  const root = await realpath(nativeDirectory);
20678
20687
  const files = await Array.fromAsync(new Bun.Glob("**/*").scan({ cwd: root, onlyFiles: true }));
@@ -20681,9 +20690,9 @@ var fingerprintExpoAndroidProject = async (nativeDirectory) => {
20681
20690
  return !parts.includes(".gradle") && !parts.includes("build");
20682
20691
  }).sort().map(async (path) => {
20683
20692
  const contents = await readFile10(join9(root, path));
20684
- return `${path.replaceAll("\\", "/")}\x00${createHash2("sha256").update(contents).digest("hex")}\x00`;
20693
+ return `${path.replaceAll("\\", "/")}\x00${createHash3("sha256").update(contents).digest("hex")}\x00`;
20685
20694
  }));
20686
- return createHash2("sha256").update(records.join("")).digest("hex");
20695
+ return createHash3("sha256").update(records.join("")).digest("hex");
20687
20696
  };
20688
20697
  var safeOutputDirectory = (projectRoot, requested) => {
20689
20698
  const root = resolve5(projectRoot);
@@ -20757,7 +20766,7 @@ var buildAbsoluteAndroidRelease = async (options) => {
20757
20766
  const nativeFingerprint = options.config.engine === "expo" ? await fingerprintExpoAndroidProject(nativeDirectory) : await fingerprintAbsoluteAndroidNativeProject({
20758
20767
  nativeDirectory
20759
20768
  });
20760
- const buildIdentity = createHash2("sha256").update(`${manifest.appBuild}\x00${nativeFingerprint}`).digest("hex");
20769
+ const buildIdentity = createHash3("sha256").update(`${manifest.appBuild}\x00${nativeFingerprint}`).digest("hex");
20761
20770
  versionCode = await options.prepareVersionCode(buildIdentity);
20762
20771
  }
20763
20772
  if (versionCode !== undefined && (!Number.isSafeInteger(versionCode) || versionCode < 1 || versionCode > 2100000000)) {
@@ -20834,7 +20843,7 @@ var buildAbsoluteAndroidRelease = async (options) => {
20834
20843
  };
20835
20844
 
20836
20845
  // src/mobile/androidReleaseAcceptance.ts
20837
- import { createHash as createHash3 } from "crypto";
20846
+ import { createHash as createHash4 } from "crypto";
20838
20847
 
20839
20848
  // src/mobile/androidServiceReadiness.ts
20840
20849
  var SERVICE_TIMEOUT_MS = 180000;
@@ -20954,7 +20963,7 @@ var exists2 = async (path) => {
20954
20963
  return false;
20955
20964
  }
20956
20965
  };
20957
- var sha256 = async (path) => createHash3("sha256").update(await readFile11(path)).digest("hex");
20966
+ var sha256 = async (path) => createHash4("sha256").update(await readFile11(path)).digest("hex");
20958
20967
  var inside = (root, candidate) => {
20959
20968
  const path = relative5(resolve6(root), resolve6(candidate));
20960
20969
  return path === "" || !isAbsolute3(path) && path !== ".." && !path.startsWith(`..${sep3}`);
@@ -21037,7 +21046,7 @@ var ensureAbsoluteBundletool = async (options) => {
21037
21046
  if (!options.approved)
21038
21047
  throw new TypeError(`Bundletool ${ABSOLUTE_BUNDLETOOL_VERSION} is required. Rerun with --yes to download the checksum-pinned official release.`);
21039
21048
  const bytes = await (options.download ?? defaultDownload)(ABSOLUTE_BUNDLETOOL_URL);
21040
- const digest = createHash3("sha256").update(bytes).digest("hex");
21049
+ const digest = createHash4("sha256").update(bytes).digest("hex");
21041
21050
  if (digest !== ABSOLUTE_BUNDLETOOL_SHA256)
21042
21051
  throw new TypeError("Downloaded Bundletool failed checksum verification.");
21043
21052
  await mkdir8(dirname8(inspected.path), { recursive: true });
@@ -21211,7 +21220,7 @@ var runAbsoluteAndroidReleaseAcceptance = async (options) => {
21211
21220
  };
21212
21221
 
21213
21222
  // src/mobile/iosReleaseAcceptance.ts
21214
- import { createHash as createHash4 } from "crypto";
21223
+ import { createHash as createHash5 } from "crypto";
21215
21224
  import {
21216
21225
  access as access7,
21217
21226
  mkdir as mkdir9,
@@ -21314,7 +21323,7 @@ var exists3 = async (path) => {
21314
21323
  return false;
21315
21324
  }
21316
21325
  };
21317
- var sha2562 = async (path) => createHash4("sha256").update(await readFile12(path)).digest("hex");
21326
+ var sha2562 = async (path) => createHash5("sha256").update(await readFile12(path)).digest("hex");
21318
21327
  var inside2 = (root, candidate) => {
21319
21328
  const path = relative6(resolve7(root), resolve7(candidate));
21320
21329
  return path === "" || !isAbsolute4(path) && path !== ".." && !path.startsWith(`..${sep4}`);
@@ -22223,7 +22232,7 @@ var createAbsoluteAndroidTestReport = (options) => {
22223
22232
  };
22224
22233
 
22225
22234
  // src/mobile/releaseCertification.ts
22226
- import { createHash as createHash5 } from "crypto";
22235
+ import { createHash as createHash6 } from "crypto";
22227
22236
  import {
22228
22237
  access as access8,
22229
22238
  mkdir as mkdir11,
@@ -22260,7 +22269,7 @@ var exists4 = async (path) => {
22260
22269
  return false;
22261
22270
  }
22262
22271
  };
22263
- var sha2563 = (bytes) => createHash5("sha256").update(bytes).digest("hex");
22272
+ var sha2563 = (bytes) => createHash6("sha256").update(bytes).digest("hex");
22264
22273
  var requireString3 = (value, name) => {
22265
22274
  if (typeof value !== "string" || !value)
22266
22275
  throw new TypeError(`Mobile certification ${name} is invalid.`);
@@ -24551,7 +24560,7 @@ var readAbsoluteMobilePromotionOperation = async (projectRoot, requestedDispatch
24551
24560
  var relativeAbsoluteMobilePromotionOperationPath = (projectRoot, dispatchIdValue) => relative13(resolve14(projectRoot), absoluteMobilePromotionOperationPath(projectRoot, dispatchIdValue)).replaceAll("\\", "/");
24552
24561
 
24553
24562
  // src/mobile/updateSigning.ts
24554
- import { createHash as createHash6, sign, verify } from "crypto";
24563
+ import { createHash as createHash7, sign, verify } from "crypto";
24555
24564
  import {
24556
24565
  cp,
24557
24566
  mkdir as mkdir16,
@@ -24566,7 +24575,7 @@ import {
24566
24575
  import { dirname as dirname14, join as join17, relative as relative14, resolve as resolve15 } from "path";
24567
24576
  var UPDATE_MANIFEST_FILE = "update.json";
24568
24577
  var UPDATE_FILES_DIRECTORY = "files";
24569
- var sha2564 = (value) => createHash6("sha256").update(value).digest("hex");
24578
+ var sha2564 = (value) => createHash7("sha256").update(value).digest("hex");
24570
24579
  var listFiles = async (root, directory = root) => {
24571
24580
  const entries = await readdir8(directory, { withFileTypes: true });
24572
24581
  const paths = await Promise.all(entries.map(async (entry) => {
@@ -24996,23 +25005,6 @@ var CAPACITOR_PACKAGES = [
24996
25005
  "@absolutejs/devices",
24997
25006
  "@absolutejs/devices-capacitor"
24998
25007
  ];
24999
- var CAPACITOR_PACKAGE_SPECS = [
25000
- "@capacitor/core@8.5.0",
25001
- "@capacitor/app@8.1.1",
25002
- "@capacitor/browser@8.0.4",
25003
- "@capacitor/network@8.0.1",
25004
- "@capacitor/preferences@8.0.1",
25005
- "@capacitor/cli@8.5.0",
25006
- "@capacitor/android@8.5.0",
25007
- "@capacitor/ios@8.5.0",
25008
- "@absolutejs/devices@0.5.0",
25009
- "@absolutejs/devices-capacitor@0.6.1"
25010
- ];
25011
- var CAPACITOR_SYNC_PACKAGE_SPECS = [
25012
- "@absolutejs/sync-capacitor@0.9.1",
25013
- "@capacitor-community/sqlite@8.1.1"
25014
- ];
25015
- var packageNameFromSpec = (spec) => spec.slice(0, spec.lastIndexOf("@"));
25016
25008
  var directProjectPackages = async (projectRoot) => {
25017
25009
  const manifest = JSON.parse(await readFile23(join19(projectRoot, "package.json"), "utf8"));
25018
25010
  if (!isRecord11(manifest))
@@ -25026,15 +25018,6 @@ var directProjectPackages = async (projectRoot) => {
25026
25018
  }
25027
25019
  return names;
25028
25020
  };
25029
- var resolvedPackageVersion = async (projectRoot, packageName) => {
25030
- try {
25031
- const manifest = JSON.parse(await readFile23(join19(projectRoot, "node_modules", packageName, "package.json"), "utf8"));
25032
- return isRecord11(manifest) && typeof manifest.version === "string" ? manifest.version : undefined;
25033
- } catch {
25034
- return;
25035
- }
25036
- };
25037
- var exactVersionFromSpec = (spec) => spec.slice(spec.lastIndexOf("@") + 1);
25038
25021
  var installApprovedPackages = async (projectRoot, args, message, specs, dev = false) => {
25039
25022
  if (specs.length === 0)
25040
25023
  return;
@@ -25044,11 +25027,6 @@ var installApprovedPackages = async (projectRoot, args, message, specs, dev = fa
25044
25027
  if (!installPackages(projectRoot, specs, dev))
25045
25028
  throw new TypeError("Failed to install the AbsoluteJS mobile toolchain.");
25046
25029
  };
25047
- var packagesNeedingExactInstall = async (projectRoot, specs, installed, exactPackages) => (await Promise.all(specs.map(async (spec) => {
25048
- const name = packageNameFromSpec(spec);
25049
- const needsInstall = !installed.has(name) || exactPackages.has(name) && await resolvedPackageVersion(projectRoot, name) !== exactVersionFromSpec(spec);
25050
- return needsInstall ? spec : undefined;
25051
- }))).filter((spec) => spec !== undefined);
25052
25030
  var ensureCapacitorPackages = async (projectRoot, args, mobile) => {
25053
25031
  const specs = [
25054
25032
  ...CAPACITOR_PACKAGE_SPECS,
@@ -25056,12 +25034,14 @@ var ensureCapacitorPackages = async (projectRoot, args, mobile) => {
25056
25034
  ...projectUsesAbsoluteSync(projectRoot) ? CAPACITOR_SYNC_PACKAGE_SPECS : []
25057
25035
  ];
25058
25036
  const installed = await directProjectPackages(projectRoot);
25059
- const missing = await packagesNeedingExactInstall(projectRoot, specs, installed, new Set(["@absolutejs/devices", "@absolutejs/devices-capacitor"]));
25037
+ const missing = await packagesNeedingExactInstall(projectRoot, specs, installed, ABSOLUTE_NATIVE_EXACT_PACKAGES);
25060
25038
  await installApprovedPackages(projectRoot, args, "Capacitor and the AbsoluteJS native adapters are missing or outdated. Install the tested mobile toolchain now?", missing);
25039
+ await assertNativePackageVersions(projectRoot, specs, ABSOLUTE_NATIVE_EXACT_PACKAGES);
25061
25040
  const capabilityPlan = resolveAbsoluteDeviceCapabilityPlan(projectRoot);
25062
25041
  const directCapabilityPackages = await directProjectPackages(projectRoot);
25063
25042
  const capabilityPackages = await packagesNeedingExactInstall(projectRoot, capabilityPlan.requiredPackages, directCapabilityPackages, new Set(capabilityPlan.requiredPackages.map(packageNameFromSpec)));
25064
25043
  await installApprovedPackages(projectRoot, args, `AbsoluteJS detected native device capabilities (${capabilityPlan.capabilities.join(", ")}). Install only their required Capacitor plugins now?`, capabilityPackages);
25044
+ await assertNativePackageVersions(projectRoot, capabilityPlan.requiredPackages, new Set(capabilityPlan.requiredPackages.map(packageNameFromSpec)));
25065
25045
  if (mobile?.branding) {
25066
25046
  const installedBrandingPackages = await directProjectPackages(projectRoot);
25067
25047
  const brandingPackages = await packagesNeedingExactInstall(projectRoot, [ABSOLUTE_CAPACITOR_ASSETS_SPEC], installedBrandingPackages, new Set(["@capacitor/assets"]));
@@ -25290,7 +25270,8 @@ var initialize = async (args) => {
25290
25270
  console.log(`${generated.changed ? "Generated" : "Verified"} ${generated.path}`);
25291
25271
  if (args.includes("--no-native"))
25292
25272
  return;
25293
- await runCapacitorForPlatforms(projectRoot, "add", mobile.platforms);
25273
+ const platforms = await prepareAbsoluteCapacitorInitialization(mobile);
25274
+ await platforms.reduce((pending, platform2) => pending.then(() => runCapacitor(projectRoot, [platform2.command, platform2.platform])), Promise.resolve());
25294
25275
  if (mobile.branding)
25295
25276
  await generateAbsoluteCapacitorBranding(mobile, projectRoot);
25296
25277
  await applyAbsoluteNativeDeepLinks(mobile);
@@ -25685,7 +25666,7 @@ var dispatchGithubMobilePromotion = async (args) => {
25685
25666
  auditOutputDirectory,
25686
25667
  auditRequested,
25687
25668
  certificationId: certification.certificationId,
25688
- certificationSha256: createHash7("sha256").update(serializeAbsoluteMobileReleaseCertification(certification)).digest("hex"),
25669
+ certificationSha256: createHash8("sha256").update(serializeAbsoluteMobileReleaseCertification(certification)).digest("hex"),
25689
25670
  channel: channel || null,
25690
25671
  dispatchId: dispatchId3,
25691
25672
  platform: platform2,
@@ -27413,6 +27394,11 @@ var testAndroidRelease = async (args, mobile, projectRoot) => {
27413
27394
  }
27414
27395
  };
27415
27396
  var testAndroid = async (args) => {
27397
+ if (args.includes("--release")) {
27398
+ const requested = valueAfter(args, "--release");
27399
+ if (!requested || requested.startsWith("--"))
27400
+ throw new TypeError("mobile test android --release requires a release directory or release.json path.");
27401
+ }
27416
27402
  const { mobile, projectRoot } = await loadMobile(valueAfter(args, "--config"));
27417
27403
  if (args.includes("--release")) {
27418
27404
  return testAndroidRelease(args, mobile, projectRoot);
@@ -28137,6 +28123,11 @@ var testIosRelease = async (args, mobile, projectRoot) => {
28137
28123
  }
28138
28124
  };
28139
28125
  var testIos = async (args) => {
28126
+ if (args.includes("--release")) {
28127
+ const requested = valueAfter(args, "--release");
28128
+ if (!requested || requested.startsWith("--"))
28129
+ throw new TypeError("mobile test ios --release requires a release directory or release.json path.");
28130
+ }
28140
28131
  const { mobile, projectRoot } = await loadMobile(valueAfter(args, "--config"));
28141
28132
  if (args.includes("--release"))
28142
28133
  return testIosRelease(args, mobile, projectRoot);
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  start
4
- } from "./index-5fmgn0nx.js";
5
- import"./index-6mbm4n3g.js";
4
+ } from "./index-5268nwjx.js";
5
+ import"./index-k8r00xh9.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-exdd5k1g.js";
14
- import"./index-dr21p6ae.js";
14
+ import"./index-nxcwg9ma.js";
15
15
  import"./index-ar4gz15x.js";
16
16
  import"./index-t84wxk1p.js";
17
17
  import"./index-wtfnv3n2.js";
package/dist/index.js CHANGED
@@ -25877,7 +25877,7 @@ var init_compileAngular = __esm(() => {
25877
25877
 
25878
25878
  // node_modules/content-tag/pkg/node/content_tag.cjs
25879
25879
  var require_content_tag = __commonJS(function(exports, module) {
25880
- var __dirname = "/home/alexkahn/abs/absolutejs/node_modules/content-tag/pkg/node";
25880
+ var __dirname = "/tmp/absolute-mobile-release/node_modules/content-tag/pkg/node";
25881
25881
  var imports = {};
25882
25882
  imports["__wbindgen_placeholder__"] = exports;
25883
25883
  var wasm;
@@ -29843,6 +29843,10 @@ var init_devPrescan = __esm(() => {
29843
29843
  PRESCAN_DIR = join53(".absolutejs", "dev-prescan");
29844
29844
  });
29845
29845
 
29846
+ // src/dev/serverEntryCopies.ts
29847
+ var isAbsoluteServerEntryCopyPath = (path2) => /(?:^|[/\\])\.absolutejs-hmr-/.test(path2);
29848
+ var init_serverEntryCopies = () => {};
29849
+
29846
29850
  // src/dev/fileWatcher.ts
29847
29851
  import { watch } from "fs";
29848
29852
  import { existsSync as existsSync43, readdirSync as readdirSync10, statSync as statSync5 } from "fs";
@@ -29865,7 +29869,7 @@ var safeRemoveFromGraph = (graph, fullPath) => {
29865
29869
  operation: "add"
29866
29870
  });
29867
29871
  }
29868
- }, ATOMIC_WRITE_TEMP_PATTERNS, shouldSkipFilename = (filename, isStylesDir) => !isStylesDir && (filename === "compiled" || filename === "generated" || filename === "build" || filename === "indexes" || filename === "server" || filename === "client" || filename.includes("/compiled/") || filename.includes("/generated/") || filename.includes("/build/") || filename.includes("/indexes/") || filename.includes("/server/") || filename.includes("/client/") || filename.startsWith("compiled/") || filename.startsWith("generated/") || filename.startsWith("build/") || filename.startsWith("indexes/") || filename.startsWith("server/") || filename.startsWith("client/")) || filename.endsWith("/") || filename.includes(".tmp.") || filename.endsWith(".tmp") || filename.endsWith("~") || filename.startsWith(".#") || filename.startsWith(".absolutejs-hmr-") || ATOMIC_WRITE_TEMP_PATTERNS.some((pattern) => pattern.test(filename)), setupWatcher = (absolutePath, isStylesDir, state, onFileChange) => {
29872
+ }, ATOMIC_WRITE_TEMP_PATTERNS, shouldSkipFilename = (filename, isStylesDir) => !isStylesDir && (filename === "compiled" || filename === "generated" || filename === "build" || filename === "indexes" || filename === "server" || filename === "client" || filename.includes("/compiled/") || filename.includes("/generated/") || filename.includes("/build/") || filename.includes("/indexes/") || filename.includes("/server/") || filename.includes("/client/") || filename.startsWith("compiled/") || filename.startsWith("generated/") || filename.startsWith("build/") || filename.startsWith("indexes/") || filename.startsWith("server/") || filename.startsWith("client/")) || filename.endsWith("/") || filename.includes(".tmp.") || filename.endsWith(".tmp") || filename.endsWith("~") || filename.startsWith(".#") || isAbsoluteServerEntryCopyPath(filename) || ATOMIC_WRITE_TEMP_PATTERNS.some((pattern) => pattern.test(filename)), setupWatcher = (absolutePath, isStylesDir, state, onFileChange) => {
29869
29873
  const ATOMIC_RECOVERY_WINDOW_MS = 60000;
29870
29874
  const atomicRecoveryScan = (eventDir) => {
29871
29875
  let entries;
@@ -29895,7 +29899,7 @@ var safeRemoveFromGraph = (graph, fullPath) => {
29895
29899
  }
29896
29900
  };
29897
29901
  const watcher = watch(absolutePath, { recursive: true }, (event, filename) => {
29898
- if (!filename)
29902
+ if (!filename || isAbsoluteServerEntryCopyPath(filename))
29899
29903
  return;
29900
29904
  if (shouldSkipFilename(filename, isStylesDir)) {
29901
29905
  if (event === "rename") {
@@ -29946,6 +29950,7 @@ var safeRemoveFromGraph = (graph, fullPath) => {
29946
29950
  });
29947
29951
  };
29948
29952
  var init_fileWatcher = __esm(() => {
29953
+ init_serverEntryCopies();
29949
29954
  init_telemetryEvent();
29950
29955
  init_dependencyGraph();
29951
29956
  init_pathUtils();
@@ -38092,7 +38097,7 @@ import {
38092
38097
  } from "fs";
38093
38098
  import { createHash as createHash13 } from "crypto";
38094
38099
  import { dirname as dirname38, join as join67, resolve as resolve56 } from "path";
38095
- var ATOMIC_RECOVERY_WINDOW_MS = 1000, RELOAD_DEBOUNCE_MS = 80, ENTRY_IMPORT_RETRY_DELAY_MS = 250, MAX_ENTRY_IMPORT_ATTEMPTS = 3, WATCH_FALLBACK_INTERVAL_MS = 250, ATOMIC_WRITE_TEMP_PATTERNS2, isAtomicWriteTemp = (filename) => filename.endsWith(".tmp") || filename.includes(".tmp.") || filename.endsWith("~") || filename.startsWith(".#") || filename.startsWith(".absolutejs-hmr-") || ATOMIC_WRITE_TEMP_PATTERNS2.some((pattern) => pattern.test(filename)), fileHash = (path2) => {
38100
+ var ATOMIC_RECOVERY_WINDOW_MS = 1000, RELOAD_DEBOUNCE_MS = 80, ENTRY_IMPORT_RETRY_DELAY_MS = 250, MAX_ENTRY_IMPORT_ATTEMPTS = 3, WATCH_FALLBACK_INTERVAL_MS = 250, ATOMIC_WRITE_TEMP_PATTERNS2, isAtomicWriteTemp = (filename) => filename.endsWith(".tmp") || filename.includes(".tmp.") || filename.endsWith("~") || filename.startsWith(".#") || isAbsoluteServerEntryCopyPath(filename) || ATOMIC_WRITE_TEMP_PATTERNS2.some((pattern) => pattern.test(filename)), fileHash = (path2) => {
38096
38101
  try {
38097
38102
  return createHash13("sha256").update(readFileSync45(path2)).digest("hex");
38098
38103
  } catch {
@@ -38259,7 +38264,7 @@ var ATOMIC_RECOVERY_WINDOW_MS = 1000, RELOAD_DEBOUNCE_MS = 80, ENTRY_IMPORT_RETR
38259
38264
  }
38260
38265
  };
38261
38266
  const handleEvent = (dir, _event, filename) => {
38262
- if (!filename)
38267
+ if (!filename || isAbsoluteServerEntryCopyPath(filename))
38263
38268
  return;
38264
38269
  if (isAtomicWriteTemp(filename)) {
38265
38270
  recoveryScan(dir);
@@ -38300,6 +38305,7 @@ var ATOMIC_RECOVERY_WINDOW_MS = 1000, RELOAD_DEBOUNCE_MS = 80, ENTRY_IMPORT_RETR
38300
38305
  process.once("SIGTERM", closeAll);
38301
38306
  };
38302
38307
  var init_serverEntryWatcher = __esm(() => {
38308
+ init_serverEntryCopies();
38303
38309
  init_devBuild();
38304
38310
  ATOMIC_WRITE_TEMP_PATTERNS2 = [/^sed[A-Za-z0-9]{6,}$/, /^4913$/];
38305
38311
  });
@@ -45701,5 +45707,5 @@ export {
45701
45707
  wrapPageHandlerWithStreamingSlots
45702
45708
  };
45703
45709
 
45704
- //# debugId=69E962978A5CFCEE64756E2164756E21
45710
+ //# debugId=115412BE9986B30E64756E2164756E21
45705
45711
  //# sourceMappingURL=index.js.map