@absolutejs/absolute 0.20.0-beta.3 → 0.20.0-beta.5

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 (50) hide show
  1. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  2. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  3. package/dist/angular/index.js +341 -22
  4. package/dist/angular/index.js.map +8 -5
  5. package/dist/angular/server.js +341 -22
  6. package/dist/angular/server.js.map +8 -5
  7. package/dist/build.js +94 -22
  8. package/dist/build.js.map +10 -10
  9. package/dist/cli/index.js +1750 -655
  10. package/dist/dev/client/cssUtils.ts +16 -2
  11. package/dist/dev/client/handlers/rebuild.ts +11 -1
  12. package/dist/dev/client/hmrTiming.ts +14 -7
  13. package/dist/index.js +364 -191
  14. package/dist/index.js.map +18 -18
  15. package/dist/mobile/browser.js +14 -1
  16. package/dist/mobile/browser.js.map +3 -3
  17. package/dist/mobile/index.js +1233 -160
  18. package/dist/mobile/index.js.map +17 -13
  19. package/dist/mobile/remoteMacAgentEntry.js +29 -0
  20. package/dist/src/angular/pageHandler.d.ts +3 -0
  21. package/dist/src/cli/config/server.d.ts +1 -1
  22. package/dist/src/core/pageHandlers.d.ts +11 -2
  23. package/dist/src/mobile/androidEmulatorController.d.ts +6 -1
  24. package/dist/src/mobile/buildPipeline.d.ts +1 -0
  25. package/dist/src/mobile/capacitorBundle.d.ts +11 -1
  26. package/dist/src/mobile/client.d.ts +4 -0
  27. package/dist/src/mobile/index.d.ts +2 -0
  28. package/dist/src/mobile/nativeAuth.d.ts +17 -0
  29. package/dist/src/mobile/releaseArtifact.d.ts +2 -0
  30. package/dist/src/mobile/remoteMacAgent.d.ts +2 -0
  31. package/dist/src/mobile/remoteMacAgentEntry.d.ts +1 -0
  32. package/dist/src/mobile/remoteMacProtocol.d.ts +114 -0
  33. package/dist/src/mobile/remoteMacWire.d.ts +2 -0
  34. package/dist/src/mobile/shellAuth.d.ts +8 -0
  35. package/dist/src/mobile/shellBootstrap.d.ts +11 -1
  36. package/dist/src/mobile/shellSync.d.ts +2 -0
  37. package/dist/src/mobile/staticDocument.d.ts +5 -0
  38. package/dist/src/mobile/transport.d.ts +9 -1
  39. package/dist/src/plugins/imageOptimizer.d.ts +1 -1
  40. package/dist/src/svelte/pageHandler.d.ts +3 -0
  41. package/dist/src/vue/pageHandler.d.ts +3 -0
  42. package/dist/svelte/index.js +312 -23
  43. package/dist/svelte/index.js.map +7 -4
  44. package/dist/svelte/server.js +307 -18
  45. package/dist/svelte/server.js.map +7 -4
  46. package/dist/vue/index.js +312 -23
  47. package/dist/vue/index.js.map +7 -4
  48. package/dist/vue/server.js +307 -18
  49. package/dist/vue/server.js.map +7 -4
  50. package/package.json +20 -8
@@ -1,40 +1,44 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/constants.ts", "../src/utils/getDurationString.ts", "../src/utils/startupBanner.ts", "../src/mobile/artifactStore.ts", "../src/mobile/releaseArtifact.ts", "../src/mobile/androidRelease.ts", "../src/mobile/emulatorDoctor.ts", "../src/cli/utils.ts", "../src/mobile/androidEmulatorController.ts", "../src/mobile/capacitorProject.ts", "../src/mobile/iosRelease.ts", "../src/mobile/iosConformance.ts", "../src/mobile/iosSimulatorController.ts", "../src/mobile/iosNativeWatcher.ts", "../src/mobile/associationFiles.ts", "../src/mobile/config.ts", "../src/mobile/buildMetadata.ts", "../src/mobile/buildPipeline.ts", "../src/mobile/buildRelease.ts", "../src/mobile/capacitorBundle.ts", "../src/mobile/routeMatcher.ts", "../src/mobile/producerContextState.ts", "../src/mobile/pageProtocol.ts", "../src/mobile/client.ts", "../src/mobile/transport.ts", "../src/mobile/materializedBundle.ts", "../src/mobile/compatibilityDispatcher.ts", "../src/mobile/producerContext.ts", "../src/mobile/nativeDeepLinks.ts", "../src/mobile/releasePublisher.ts", "../src/mobile/routeMetadataTransform.ts"],
3
+ "sources": ["../src/constants.ts", "../src/utils/getDurationString.ts", "../src/utils/startupBanner.ts", "../src/utils/stringModifiers.ts", "../src/mobile/artifactStore.ts", "../src/mobile/releaseArtifact.ts", "../src/mobile/androidRelease.ts", "../src/mobile/emulatorDoctor.ts", "../src/cli/utils.ts", "../src/mobile/androidEmulatorController.ts", "../src/mobile/capacitorProject.ts", "../src/mobile/iosRelease.ts", "../src/mobile/iosConformance.ts", "../src/mobile/iosSimulatorController.ts", "../src/mobile/iosNativeWatcher.ts", "../src/mobile/remoteMacProtocol.ts", "../src/mobile/remoteMacWire.ts", "../src/mobile/associationFiles.ts", "../src/mobile/config.ts", "../src/mobile/buildMetadata.ts", "../src/mobile/buildPipeline.ts", "../src/mobile/buildRelease.ts", "../src/mobile/capacitorBundle.ts", "../src/mobile/routeMatcher.ts", "../src/mobile/producerContextState.ts", "../src/mobile/pageProtocol.ts", "../src/mobile/client.ts", "../src/mobile/transport.ts", "../src/mobile/materializedBundle.ts", "../src/mobile/nativeAuth.ts", "../src/mobile/compatibilityDispatcher.ts", "../src/mobile/producerContext.ts", "../src/mobile/nativeDeepLinks.ts", "../src/mobile/releasePublisher.ts", "../src/mobile/routeMetadataTransform.ts"],
4
4
  "sourcesContent": [
5
5
  "export const ANGULAR_INIT_TIMEOUT_MS = 500;\nexport const ANSI_ESCAPE_CODE = 27;\nexport const ANSI_ESCAPE_LENGTH = 3;\nexport const ASCII_SPACE = 32;\nexport const BASE_36_RADIX = 36;\nexport const BUN_BUILD_WARNING_SUPPRESSION =\n\t'wildcard sideEffects are not supported yet';\n/* Tailwind v4 at-rules that Bun's native CSS parser doesn't recognize.\n When a user imports their Tailwind entry CSS from a TS/TSX file, Bun's\n bundler walks it and warns about each unknown at-rule even though the\n actual Tailwind output is produced via the separate tailwindcss compile()\n pipeline (see compileTailwind.ts). The warnings are noise — suppress them. */\nexport const TAILWIND_BUN_CSS_WARNING_PATTERN =\n\t/invalid @ rule encountered: '@(theme|tailwind|source|utility|variant|custom-variant|apply|reference|plugin|config)'/;\nexport const BODY_SLICE_LENGTH = 2000;\nexport const BYTES_PER_KILOBYTE = 1024;\nexport const CLI_ARGS_OFFSET = 3;\nexport const CSS_ERROR_RESOLVE_DELAY_MS = 50;\nexport const CSS_MAX_CHECK_ATTEMPTS = 10;\nexport const CSS_MAX_PARSE_TIMEOUT_MS = 500;\nexport const CSS_SHEET_READY_TIMEOUT_MS = 100;\nexport const DEFAULT_CHUNK_SIZE = 16_384;\nexport const DEFAULT_DEBOUNCE_MS = 15;\nexport const DEFAULT_PORT = 3000;\nexport const DEV_SERVER_RESTART_DEBOUNCE_MS = 100;\nexport const DOM_UPDATE_DELAY_MS = 50;\nexport const FILE_PROTOCOL_PREFIX_LENGTH = 7;\nexport const FOCUS_ID_PREFIX_LENGTH = 3;\nexport const FOCUS_IDX_PREFIX_LENGTH = 4;\nexport const FOCUS_NAME_PREFIX_LENGTH = 5;\nexport const ESLINT_STUDIO_DEFAULT_HOST = 'eslint.absolute.localhost';\nexport const ESLINT_STUDIO_DEFAULT_PORT = 4099;\nexport const CONFIG_DEFAULT_HOST = 'config.absolute.localhost';\nexport const CONFIG_DEFAULT_PORT = 4099;\nexport const HMR_UPDATE_TIMEOUT_MS = 2000;\nexport const HOOK_SIGNATURE_LENGTH = 12;\nexport const EXCLUDE_LAST_OFFSET = -1;\nexport const HTTP_STATUS_OK = 200;\nexport const HTTP_STATUS_BAD_REQUEST = 400;\nexport const HTTP_STATUS_NOT_FOUND = 404;\nexport const HOURS_IN_DAY = 24;\nexport const HOURS_IN_HALF_DAY = 12;\nexport const IMAGE_DEFAULT_DEVICE_SIZES = [\n\t640, 750, 828, 1080, 1200, 1920, 2048, 3840\n];\nexport const IMAGE_DEFAULT_IMAGE_SIZES = [16, 32, 48, 64, 96, 128, 256, 384];\nexport const IMAGE_DEFAULT_QUALITY = 75;\nexport const IMAGE_GLOB_SUFFIX_LENGTH = 2;\nexport const INSTANCE_PROBE_TIMEOUT_MS = 250;\nexport const MAX_ERROR_LENGTH = 200;\nexport const MAX_RECONNECT_ATTEMPTS = 60;\nexport const MILLISECONDS_IN_A_SECOND = 1000;\nexport const MINUTES_IN_AN_HOUR = 60;\nexport const SECONDS_IN_A_MINUTE = 60;\nexport const MILLISECONDS_IN_A_MINUTE =\n\tMILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;\nexport const MILLISECONDS_IN_A_DAY =\n\tMILLISECONDS_IN_A_SECOND *\n\tSECONDS_IN_A_MINUTE *\n\tMINUTES_IN_AN_HOUR *\n\tHOURS_IN_DAY;\nexport const OVERLAY_FADE_DURATION_MS = 150;\nexport const PING_INTERVAL_MS = 30_000;\nexport const LIST_LOG_TAIL_MAX_BYTES = 65_536;\nexport const LIST_TUI_COLUMN_GAP = 2;\nexport const LIST_TUI_DEFAULT_HEIGHT = 28;\nexport const LIST_TUI_DEFAULT_WIDTH = 100;\nexport const LIST_TUI_ESCAPE_SEQUENCE_TIMEOUT_MS = 30;\nexport const LIST_TUI_FOOTER_LINE_COUNT = 2;\nexport const LIST_TUI_MARKER_WIDTH = 2;\nexport const LIST_TUI_MIN_LOG_HEIGHT = 3;\nexport const LIST_TUI_MIN_URL_WIDTH = 16;\nexport const LIST_TUI_RENDER_DEBOUNCE_MS = 16;\nexport const LIST_TUI_STATUS_MESSAGE_TIMEOUT_MS = 4000;\nexport const LIST_WATCH_REFRESH_MS = 1000;\nexport const RAF_BATCH_COUNT = 3;\nexport const RANDOM_ID_END_INDEX = 11;\nexport const REBUILD_BATCH_DELAY_MS = 10;\nexport const REBUILD_RELOAD_DELAY_MS = 200;\nexport const RECONNECT_INITIAL_DELAY_MS = 500;\nexport const RECONNECT_POLL_INTERVAL_MS = 300;\nexport const REACT_STREAM_SLOT_FAST_DELAY_MS = 5;\nexport const REACT_STREAM_SLOT_SLOW_DELAY_MS = 20;\nexport const SIGINT_EXIT_CODE = 130;\nexport const SIGTERM_EXIT_CODE = 143;\nexport const SVELTE_CSS_LOAD_TIMEOUT_MS = 500;\nexport const TIME_PRECISION = 2;\nexport const TWO_THIRDS = 2 / 3;\nexport const UNFOUND_INDEX = -1;\nexport const WEBSOCKET_NORMAL_CLOSURE = 1000;\n// Default Bun WebSocket idleTimeout (seconds) applied to every absolute server.\n// Long-lived sockets (voice intake, referee, realtime sync) sit idle during\n// greeting playback or while a user listens silently — no client→server frames.\n// Without an explicit value the WS idleTimeout falls back to Elysia's small\n// top-level serve default (~30s, closing at ~60s), which kills these sessions\n// mid-call with INACTIVE_CLIENT. 240s outlasts any greeting or think-pause and\n// gives a briefly-suspended tab time to wake and reconnect. Paired with Bun's\n// `sendPings` (protocol-level keepalive the browser answers without JS, so a\n// throttled background tab still responds). Bun's hard ceiling is 960s.\nexport const DEFAULT_WEBSOCKET_IDLE_TIMEOUT_SECONDS = 240;\n// HTTP idleTimeout for Bun.serve. Bun's DEFAULT is a hostile 10s for a\n// framework meant to host streaming/AI workloads: a long-lived SSE response\n// (or any long poll) that stays silent past 10s — e.g. an agentic AI turn\n// waiting on the model's first token after a large tool result inflates the\n// prompt — gets its socket reaped with no error, and the client hangs. 240s\n// mirrors the WS default and outlasts realistic model think-pauses; Bun's\n// hard ceiling for HTTP idleTimeout is 255s. Override per-app with the\n// ABSOLUTE_IDLE_TIMEOUT env var (seconds; 0 disables the timeout entirely).\nexport const DEFAULT_HTTP_IDLE_TIMEOUT_SECONDS = 240;\nexport const MAX_HTTP_IDLE_TIMEOUT_SECONDS = 255;\nexport const WORKSPACE_COMMAND_ARGS_OFFSET = 3;\nexport const WORKSPACE_FAILURE_LOG_PRINT_LIMIT = 30;\nexport const WORKSPACE_FAILURE_RECENT_LOG_LIMIT = 60;\nexport const WORKSPACE_READY_ATTEMPT_TIMEOUT_MS = 5_000;\nexport const WORKSPACE_READY_PROBE_INTERVAL_MS = 250;\nexport const WORKSPACE_READY_TIMEOUT_MS = 30_000;\nexport const WORKSPACE_SHUTDOWN_TIMEOUT_MS = 10_000;\nexport const WORKSPACE_TUI_DEFAULT_HEIGHT = 28;\nexport const WORKSPACE_TUI_DEFAULT_WIDTH = 100;\nexport const WORKSPACE_TUI_ESCAPE_SEQUENCE_TIMEOUT_MS = 30;\nexport const WORKSPACE_TUI_FOOTER_LINE_COUNT = 3;\nexport const WORKSPACE_TUI_MIN_LOG_HEIGHT = 3;\nexport const WORKSPACE_TUI_MIN_SERVICE_NAME_WIDTH = 7;\nexport const WORKSPACE_TUI_MIN_TARGET_WIDTH = 8;\nexport const WORKSPACE_TUI_MIN_WRAP_WIDTH = 12;\nexport const WORKSPACE_TUI_PROMPT_CURSOR_OFFSET = 3;\nexport const WORKSPACE_TUI_RECENT_LOG_LIMIT = 40;\nexport const WORKSPACE_TUI_RENDER_DEBOUNCE_MS = 16;\nexport const WORKSPACE_TUI_STATUS_WIDTH = 10;\nexport const WORKSPACE_TUI_TARGET_PADDING_WIDTH = 6;\nexport const WORKSPACE_TUI_VISIBILITY_WIDTH = 8;\n",
6
6
  "import {\n\tMILLISECONDS_IN_A_SECOND,\n\tTIME_PRECISION,\n\tMILLISECONDS_IN_A_MINUTE\n} from '../constants';\n\nexport const getDurationString = (duration: number) => {\n\tlet durationString;\n\n\tif (duration < MILLISECONDS_IN_A_SECOND) {\n\t\tdurationString = `${duration.toFixed(TIME_PRECISION)}ms`;\n\t} else if (duration < MILLISECONDS_IN_A_MINUTE) {\n\t\tdurationString = `${(duration / MILLISECONDS_IN_A_SECOND).toFixed(TIME_PRECISION)}s`;\n\t} else {\n\t\tconst totalSeconds = Math.round(duration / MILLISECONDS_IN_A_SECOND);\n\t\tconst minutes = Math.floor(totalSeconds / 60);\n\t\tconst seconds = totalSeconds % 60;\n\t\tdurationString =\n\t\t\tseconds === 0 ? `${minutes}m` : `${minutes}m ${seconds}s`;\n\t}\n\n\treturn durationString;\n};\n",
7
7
  "import { HOURS_IN_HALF_DAY } from '../constants';\nimport { getDurationString } from './getDurationString';\n\nconst colors = {\n\tbold: '\\x1b[1m',\n\tcyan: '\\x1b[36m',\n\tdim: '\\x1b[2m',\n\tgreen: '\\x1b[32m',\n\treset: '\\x1b[0m'\n} as const;\n\nconst MONTHS = [\n\t'Jan',\n\t'Feb',\n\t'Mar',\n\t'Apr',\n\t'May',\n\t'Jun',\n\t'Jul',\n\t'Aug',\n\t'Sep',\n\t'Oct',\n\t'Nov',\n\t'Dec'\n] as const;\n\nexport const formatTimestamp = () => {\n\tconst now = new Date();\n\tconst month = MONTHS[now.getMonth()];\n\tconst day = now.getDate().toString().padStart(2, '0');\n\tlet hours = now.getHours();\n\tconst minutes = now.getMinutes().toString().padStart(2, '0');\n\tconst seconds = now.getSeconds().toString().padStart(2, '0');\n\tconst ampm = hours >= HOURS_IN_HALF_DAY ? 'PM' : 'AM';\n\thours = hours % HOURS_IN_HALF_DAY || HOURS_IN_HALF_DAY;\n\n\treturn `${month} ${day} ${hours}:${minutes}:${seconds} ${ampm}`;\n};\n\nexport const startupBanner = (options: {\n\tversion: string;\n\treadyDuration: number;\n\tbuildDuration?: number;\n\tport: string | number;\n\thost: string;\n\tnetworkUrl?: string;\n\tprotocol?: string;\n}) => {\n\tconst {\n\t\tversion,\n\t\treadyDuration,\n\t\tbuildDuration,\n\t\tport,\n\t\thost,\n\t\tnetworkUrl,\n\t\tprotocol = 'http'\n\t} = options;\n\tconst name = `${colors.cyan}${colors.bold}ABSOLUTEJS${colors.reset}`;\n\tconst ver = `${colors.dim}v${version}${colors.reset}`;\n\tconst time = `${colors.dim}ready in${colors.reset} ${colors.bold}${getDurationString(readyDuration)}${colors.reset}`;\n\tconst build =\n\t\ttypeof buildDuration === 'number' && Number.isFinite(buildDuration)\n\t\t\t? ` ${colors.dim}(build ${getDurationString(buildDuration)})${colors.reset}`\n\t\t\t: '';\n\tconsole.log('');\n\tconsole.log(` ${name} ${ver} ${time}${build}`);\n\tconsole.log('');\n\tconsole.log(\n\t\t` ${colors.green}➜${colors.reset} ${colors.bold}Local:${colors.reset} ${protocol}://${host === '0.0.0.0' ? 'localhost' : host}:${port}/`\n\t);\n\tif (networkUrl) {\n\t\tconsole.log(\n\t\t\t` ${colors.green}➜${colors.reset} ${colors.bold}Network:${colors.reset} ${networkUrl}`\n\t\t);\n\t}\n\tconsole.log('');\n};\n",
8
+ "const normalizeSlug = (str: string) =>\n\tstr\n\t\t.trim()\n\t\t.replace(/\\s+/g, '-')\n\t\t.replace(/[^A-Za-z0-9\\-_]+/g, '')\n\t\t.replace(/[-_]{2,}/g, '-');\n\nexport const toKebab = (str: string) =>\n\tnormalizeSlug(str)\n\t\t.replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n\t\t.toLowerCase();\nexport const toPascal = (str: string) => {\n\tif (!str.includes('-') && !str.includes('_')) {\n\t\treturn str.charAt(0).toUpperCase() + str.slice(1);\n\t}\n\n\treturn normalizeSlug(str)\n\t\t.split(/[-_]/)\n\t\t.filter(Boolean)\n\t\t.map(\n\t\t\t(segment) =>\n\t\t\t\tsegment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()\n\t\t)\n\t\t.join('');\n};\nexport const toScreamingSnake = (str: string) =>\n\tstr.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n",
8
9
  "import { createHash } from 'node:crypto';\nimport {\n\tmkdir,\n\tmkdtemp,\n\treadFile,\n\treaddir,\n\trename,\n\trm,\n\twriteFile\n} from 'node:fs/promises';\nimport { join, resolve as resolvePath } from 'node:path';\nimport {\n\tparseAbsoluteMobileCompatibilityArtifact,\n\tretainAbsoluteMobileCompatibilityArtifacts,\n\ttype AbsoluteMobileCompatibilityArtifact\n} from './releaseArtifact';\n\nexport type AbsoluteMobileStoredCompatibilityRelease = {\n\tartifact: AbsoluteMobileCompatibilityArtifact;\n\tproducer: Blob;\n};\n\nexport type AbsoluteMobileCompatibilityArtifactStore = {\n\tdelete: (appId: string, releaseId: string) => Promise<void>;\n\tlist: (appId: string) => Promise<AbsoluteMobileCompatibilityArtifact[]>;\n\tread: (\n\t\tappId: string,\n\t\treleaseId: string\n\t) => Promise<AbsoluteMobileStoredCompatibilityRelease | null>;\n\twrite: (release: AbsoluteMobileStoredCompatibilityRelease) => Promise<void>;\n};\n\nexport type AbsoluteMobileFileArtifactStoreOptions = {\n\tmaxProducerBytes?: number;\n\troot: string;\n};\n\nexport type AbsoluteMobileBlobStore = {\n\tdelete: (key: string) => Promise<void>;\n\tget: (key: string) => Promise<Uint8Array | null>;\n\tlist: (options: { cursor?: string; prefix: string }) => Promise<{\n\t\tcursor?: string;\n\t\tobjects: Array<{ key: string }>;\n\t\ttruncated: boolean;\n\t}>;\n\tput: (\n\t\tkey: string,\n\t\tbody: ReadableStream<Uint8Array> | Uint8Array | string,\n\t\toptions?: {\n\t\t\tcontentType?: string;\n\t\t\tmaxBytes?: number;\n\t\t\tmetadata?: Record<string, string>;\n\t\t}\n\t) => Promise<unknown>;\n};\n\nexport type AbsoluteMobileBlobArtifactStoreOptions = {\n\tmaxProducerBytes?: number;\n\tprefix?: string;\n\tstore: AbsoluteMobileBlobStore;\n};\n\nexport type AbsoluteMobileCarryForwardInput = {\n\tcurrent: AbsoluteMobileStoredCompatibilityRelease;\n\tstore: AbsoluteMobileCompatibilityArtifactStore;\n};\n\nconst DEFAULT_MAX_PRODUCER_BYTES = 134_217_728;\nconst SHA_256 = 'sha256';\nconst ARTIFACT_FILE = 'artifact.json';\nconst RELEASE_ID_PATTERN = /^amc_[a-f0-9]{64}$/;\nconst DEFAULT_BLOB_PREFIX = 'absolutejs/mobile-compatibility';\n\nconst hashBlob = async (blob: Blob) => {\n\tconst bytes = new Uint8Array(await blob.arrayBuffer());\n\n\treturn createHash(SHA_256).update(bytes).digest('hex');\n};\n\nconst blobFromBytes = (bytes: Uint8Array) => {\n\tconst buffer = new ArrayBuffer(bytes.byteLength);\n\tnew Uint8Array(buffer).set(bytes);\n\n\treturn new Blob([buffer]);\n};\n\nconst errorHasCode = (error: unknown, code: string) =>\n\ttypeof error === 'object' &&\n\terror !== null &&\n\tReflect.get(error, 'code') === code;\n\nconst appDirectoryName = (appId: string) =>\n\tcreateHash(SHA_256).update(appId).digest('hex');\n\nconst requireReleaseId = (releaseId: string) => {\n\tif (!RELEASE_ID_PATTERN.test(releaseId)) {\n\t\tthrow new TypeError('Invalid mobile compatibility release id.');\n\t}\n\n\treturn releaseId;\n};\n\nconst readStoredArtifact = async (releaseDirectory: string) => {\n\tconst serialized = await readFile(\n\t\tjoin(releaseDirectory, ARTIFACT_FILE),\n\t\t'utf8'\n\t);\n\tconst parsed: unknown = JSON.parse(serialized);\n\n\treturn parseAbsoluteMobileCompatibilityArtifact(parsed);\n};\n\nconst validateStoredIdentity = (\n\tartifact: AbsoluteMobileCompatibilityArtifact,\n\tappId: string,\n\treleaseId: string\n) => {\n\tif (artifact.appId !== appId || artifact.releaseId !== releaseId) {\n\t\tthrow new TypeError(\n\t\t\t'Stored mobile compatibility identity does not match.'\n\t\t);\n\t}\n\n\treturn artifact;\n};\n\ntype BlobKeyLister = (\n\tstore: AbsoluteMobileBlobStore,\n\tprefix: string,\n\tcursor?: string,\n\tkeys?: string[]\n) => Promise<string[]>;\n\nconst listBlobKeys: BlobKeyLister = async (\n\tstore,\n\tprefix,\n\tcursor,\n\tkeys = []\n) => {\n\tconst result = await store.list({ cursor, prefix });\n\tconst collected = [...keys, ...result.objects.map(({ key }) => key)];\n\tif (!result.truncated) return collected;\n\tif (!result.cursor) {\n\t\tthrow new TypeError('Truncated blob listing did not provide a cursor.');\n\t}\n\n\treturn listBlobKeys(store, prefix, result.cursor, collected);\n};\n\nconst normalizeBlobPrefix = (prefix: string) => {\n\tconst normalized = prefix.replace(/^\\/+|\\/+$/g, '');\n\tif (!normalized || normalized.split('/').includes('..')) {\n\t\tthrow new TypeError('Mobile compatibility blob prefix is invalid.');\n\t}\n\n\treturn normalized;\n};\nexport const carryForwardAbsoluteMobileCompatibilityReleases = async (\n\tinput: AbsoluteMobileCarryForwardInput\n) => {\n\tawait verifyAbsoluteMobileCompatibilityProducer(input.current);\n\tawait input.store.write(input.current);\n\tconst available = await input.store.list(input.current.artifact.appId);\n\tconst retained = retainAbsoluteMobileCompatibilityArtifacts(available);\n\tif (retained[0]?.releaseId !== input.current.artifact.releaseId) {\n\t\tthrow new TypeError(\n\t\t\t'Current mobile release generation must be newer than stored history.'\n\t\t);\n\t}\n\tconst releases = await Promise.all(\n\t\tretained.map(({ releaseId }) =>\n\t\t\tinput.store.read(input.current.artifact.appId, releaseId)\n\t\t)\n\t);\n\n\treturn Promise.all(\n\t\treleases.map((release) => {\n\t\t\tif (!release) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t'Compatibility store listed a release it could not read.'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn verifyAbsoluteMobileCompatibilityProducer(release);\n\t\t})\n\t);\n};\n\nexport const createAbsoluteMobileBlobArtifactStore = (\n\toptions: AbsoluteMobileBlobArtifactStoreOptions\n): AbsoluteMobileCompatibilityArtifactStore => {\n\tconst prefix = normalizeBlobPrefix(options.prefix ?? DEFAULT_BLOB_PREFIX);\n\tconst maxProducerBytes =\n\t\toptions.maxProducerBytes ?? DEFAULT_MAX_PRODUCER_BYTES;\n\tconst appPrefix = (appId: string) =>\n\t\t`${prefix}/${appDirectoryName(appId)}/releases`;\n\tconst releasePrefix = (appId: string, releaseId: string) =>\n\t\t`${appPrefix(appId)}/${requireReleaseId(releaseId)}`;\n\tconst artifactKey = (appId: string, releaseId: string) =>\n\t\t`${releasePrefix(appId, releaseId)}/${ARTIFACT_FILE}`;\n\tconst producerKey = (artifact: AbsoluteMobileCompatibilityArtifact) =>\n\t\t`${releasePrefix(artifact.appId, artifact.releaseId)}/${artifact.producer.module}`;\n\tconst readArtifact = async (appId: string, releaseId: string) => {\n\t\tconst bytes = await options.store.get(artifactKey(appId, releaseId));\n\t\tif (!bytes) return null;\n\t\tconst parsed: unknown = JSON.parse(new TextDecoder().decode(bytes));\n\n\t\treturn validateStoredIdentity(\n\t\t\tparseAbsoluteMobileCompatibilityArtifact(parsed),\n\t\t\tappId,\n\t\t\treleaseId\n\t\t);\n\t};\n\n\treturn {\n\t\tdelete: async (appId, releaseId) => {\n\t\t\tconst artifact = await readArtifact(appId, releaseId);\n\t\t\tif (artifact) await options.store.delete(producerKey(artifact));\n\t\t\tawait options.store.delete(artifactKey(appId, releaseId));\n\t\t},\n\t\tlist: async (appId) => {\n\t\t\tconst releaseRoot = `${appPrefix(appId)}/`;\n\t\t\tconst keys = await listBlobKeys(options.store, releaseRoot);\n\t\t\tconst releaseIds = keys\n\t\t\t\t.filter((key) => key.endsWith(`/${ARTIFACT_FILE}`))\n\t\t\t\t.map((key) => key.slice(releaseRoot.length).split('/')[0])\n\t\t\t\t.filter(\n\t\t\t\t\t(releaseId): releaseId is string =>\n\t\t\t\t\t\ttypeof releaseId === 'string' &&\n\t\t\t\t\t\tRELEASE_ID_PATTERN.test(releaseId)\n\t\t\t\t);\n\t\t\tconst artifacts = await Promise.all(\n\t\t\t\t[...new Set(releaseIds)].map((releaseId) =>\n\t\t\t\t\treadArtifact(appId, releaseId)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn artifacts\n\t\t\t\t.filter(\n\t\t\t\t\t(\n\t\t\t\t\t\tartifact\n\t\t\t\t\t): artifact is AbsoluteMobileCompatibilityArtifact =>\n\t\t\t\t\t\tartifact !== null\n\t\t\t\t)\n\t\t\t\t.sort((left, right) => right.generation - left.generation);\n\t\t},\n\t\tread: async (appId, releaseId) => {\n\t\t\tconst artifact = await readArtifact(appId, releaseId);\n\t\t\tif (!artifact) return null;\n\t\t\tconst bytes = await options.store.get(producerKey(artifact));\n\t\t\tif (!bytes) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t'Mobile compatibility artifact is missing its producer.'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn { artifact, producer: blobFromBytes(bytes) };\n\t\t},\n\t\twrite: async (release) => {\n\t\t\tconst artifact = parseAbsoluteMobileCompatibilityArtifact(\n\t\t\t\trelease.artifact\n\t\t\t);\n\t\t\tconst validated = await verifyAbsoluteMobileCompatibilityProducer(\n\t\t\t\t{ artifact, producer: release.producer },\n\t\t\t\tmaxProducerBytes\n\t\t\t);\n\t\t\tawait options.store.put(\n\t\t\t\tproducerKey(validated.artifact),\n\t\t\t\tvalidated.producer.stream(),\n\t\t\t\t{\n\t\t\t\t\tcontentType: 'text/javascript; charset=utf-8',\n\t\t\t\t\tmaxBytes: maxProducerBytes,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tappId: validated.artifact.appId,\n\t\t\t\t\t\treleaseId: validated.artifact.releaseId,\n\t\t\t\t\t\tsha256: validated.artifact.producer.bundleHash\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\tawait options.store.put(\n\t\t\t\tartifactKey(\n\t\t\t\t\tvalidated.artifact.appId,\n\t\t\t\t\tvalidated.artifact.releaseId\n\t\t\t\t),\n\t\t\t\t`${JSON.stringify(validated.artifact, null, '\\t')}\\n`,\n\t\t\t\t{ contentType: 'application/json' }\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createAbsoluteMobileFileArtifactStore = (\n\toptions: AbsoluteMobileFileArtifactStoreOptions\n): AbsoluteMobileCompatibilityArtifactStore => {\n\tconst root = resolvePath(options.root);\n\tconst maxProducerBytes =\n\t\toptions.maxProducerBytes ?? DEFAULT_MAX_PRODUCER_BYTES;\n\tconst appDirectory = (appId: string) => join(root, appDirectoryName(appId));\n\tconst releaseDirectory = (appId: string, releaseId: string) =>\n\t\tjoin(appDirectory(appId), requireReleaseId(releaseId));\n\tconst acceptExistingRelease = async (\n\t\terror: unknown,\n\t\tartifact: AbsoluteMobileCompatibilityArtifact\n\t) => {\n\t\tif (\n\t\t\t!errorHasCode(error, 'EEXIST') &&\n\t\t\t!errorHasCode(error, 'ENOTEMPTY')\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tconst existing = await readStoredArtifact(\n\t\t\treleaseDirectory(artifact.appId, artifact.releaseId)\n\t\t);\n\n\t\treturn existing.releaseId === artifact.releaseId;\n\t};\n\n\treturn {\n\t\tdelete: async (appId, releaseId) => {\n\t\t\tawait rm(releaseDirectory(appId, releaseId), {\n\t\t\t\tforce: true,\n\t\t\t\trecursive: true\n\t\t\t});\n\t\t},\n\t\tlist: async (appId) => {\n\t\t\tlet entries;\n\t\t\ttry {\n\t\t\t\tentries = await readdir(appDirectory(appId), {\n\t\t\t\t\twithFileTypes: true\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (errorHasCode(error, 'ENOENT')) return [];\n\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst artifacts = await Promise.all(\n\t\t\t\tentries\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t\tentry.isDirectory() &&\n\t\t\t\t\t\t\tRELEASE_ID_PATTERN.test(entry.name)\n\t\t\t\t\t)\n\t\t\t\t\t.map(async ({ name }) =>\n\t\t\t\t\t\tvalidateStoredIdentity(\n\t\t\t\t\t\t\tawait readStoredArtifact(\n\t\t\t\t\t\t\t\treleaseDirectory(appId, name)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tappId,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn artifacts.sort(\n\t\t\t\t(left, right) => right.generation - left.generation\n\t\t\t);\n\t\t},\n\t\tread: async (appId, releaseId) => {\n\t\t\tconst directory = releaseDirectory(appId, releaseId);\n\t\t\tlet artifact;\n\t\t\ttry {\n\t\t\t\tartifact = validateStoredIdentity(\n\t\t\t\t\tawait readStoredArtifact(directory),\n\t\t\t\t\tappId,\n\t\t\t\t\treleaseId\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (errorHasCode(error, 'ENOENT')) return null;\n\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tartifact,\n\t\t\t\tproducer: Bun.file(join(directory, artifact.producer.module))\n\t\t\t};\n\t\t},\n\t\twrite: async (release) => {\n\t\t\tconst validatedArtifact = parseAbsoluteMobileCompatibilityArtifact(\n\t\t\t\trelease.artifact\n\t\t\t);\n\t\t\tconst validated = await verifyAbsoluteMobileCompatibilityProducer(\n\t\t\t\t{ artifact: validatedArtifact, producer: release.producer },\n\t\t\t\tmaxProducerBytes\n\t\t\t);\n\t\t\tconst parent = appDirectory(validated.artifact.appId);\n\t\t\tawait mkdir(parent, { recursive: true });\n\t\t\tconst staging = await mkdtemp(join(parent, '.stage-'));\n\t\t\tconst producerPath = join(\n\t\t\t\tstaging,\n\t\t\t\tvalidated.artifact.producer.module\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tawait mkdir(resolvePath(producerPath, '..'), {\n\t\t\t\t\trecursive: true\n\t\t\t\t});\n\t\t\t\tawait Promise.all([\n\t\t\t\t\twriteFile(\n\t\t\t\t\t\tjoin(staging, ARTIFACT_FILE),\n\t\t\t\t\t\t`${JSON.stringify(validated.artifact, null, '\\t')}\\n`\n\t\t\t\t\t),\n\t\t\t\t\twriteFile(\n\t\t\t\t\t\tproducerPath,\n\t\t\t\t\t\tnew Uint8Array(await validated.producer.arrayBuffer())\n\t\t\t\t\t)\n\t\t\t\t]);\n\t\t\t\tawait rename(\n\t\t\t\t\tstaging,\n\t\t\t\t\treleaseDirectory(\n\t\t\t\t\t\tvalidated.artifact.appId,\n\t\t\t\t\t\tvalidated.artifact.releaseId\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tawait rm(staging, { force: true, recursive: true });\n\t\t\t\tif (await acceptExistingRelease(error, validated.artifact))\n\t\t\t\t\treturn;\n\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t};\n};\n\nexport const verifyAbsoluteMobileCompatibilityProducer = async (\n\trelease: AbsoluteMobileStoredCompatibilityRelease,\n\tmaxProducerBytes = DEFAULT_MAX_PRODUCER_BYTES\n) => {\n\tconst { artifact, producer } = release;\n\tif (\n\t\tproducer.size !== artifact.producer.bytes ||\n\t\tproducer.size > maxProducerBytes\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Mobile compatibility producer size does not match its artifact.'\n\t\t);\n\t}\n\tif ((await hashBlob(producer)) !== artifact.producer.bundleHash) {\n\t\tthrow new TypeError(\n\t\t\t'Mobile compatibility producer hash does not match its artifact.'\n\t\t);\n\t}\n\n\treturn release;\n};\n",
9
- "import { createHash } from 'node:crypto';\nimport type {\n\tAbsoluteMobilePageClient,\n\tAbsoluteMobilePageFramework,\n\tAbsoluteMobileUpgradeRequiredResult\n} from './pageProtocol';\n\nexport const ABSOLUTE_MOBILE_COMPATIBILITY_FORMAT = 1 as const;\nexport const ABSOLUTE_MOBILE_RETAINED_GENERATIONS = 3;\n\nexport type AbsoluteMobileCompatibilityPage = {\n\tbundleHash: string;\n\tbundlePath: string;\n\tcontract: string;\n\tframework: AbsoluteMobilePageFramework;\n\tpageId: string;\n\tpropsSchemaHash: string;\n};\n\nexport type AbsoluteMobileCompatibilityRoute = {\n\tmethod: 'GET' | 'HEAD';\n\tpageId: string;\n\tpattern: string;\n};\n\nexport type AbsoluteMobileCompatibilityProducer = {\n\tbundleHash: string;\n\tbytes: number;\n\texportName: string;\n\tmodule: string;\n};\n\nexport type AbsoluteMobileCompatibilityArtifactInput = {\n\tappBuild: string;\n\tappId: string;\n\tgeneration: number;\n\tpages: readonly AbsoluteMobileCompatibilityPage[];\n\tproducer: AbsoluteMobileCompatibilityProducer;\n\troutes: readonly AbsoluteMobileCompatibilityRoute[];\n\truntime: string;\n};\n\nexport type AbsoluteMobileCompatibilityArtifact = {\n\tappBuild: string;\n\tappId: string;\n\tformat: typeof ABSOLUTE_MOBILE_COMPATIBILITY_FORMAT;\n\tgeneration: number;\n\tpages: AbsoluteMobileCompatibilityPage[];\n\tproducer: AbsoluteMobileCompatibilityProducer;\n\treleaseId: string;\n\troutes: AbsoluteMobileCompatibilityRoute[];\n\truntime: string;\n};\n\nexport type AbsoluteMobileResolvedRelease =\n\t| {\n\t\t\tartifact: AbsoluteMobileCompatibilityArtifact;\n\t\t\tkind: 'retained';\n\t\t\tpage: AbsoluteMobileCompatibilityPage;\n\t }\n\t| {\n\t\t\tkind: 'upgrade-required';\n\t\t\tresult: AbsoluteMobileUpgradeRequiredResult;\n\t };\n\ntype CanonicalRecord = Record<string, unknown>;\ntype CanonicalValueNormalizer = (\n\tvalue: unknown,\n\tancestors: Set<object>\n) => unknown;\ntype CompatibilityArtifactContent = Omit<\n\tAbsoluteMobileCompatibilityArtifact,\n\t'releaseId'\n>;\n\nconst SHA_256 = 'sha256';\nconst RELEASE_ID_PREFIX = 'amc_';\nconst MODULE_SEGMENT_PARENT = '..';\nconst EXPORT_NAME_PATTERN = /^[A-Z_a-z]\\w*$/;\nconst frameworks = new Set<string>([\n\t'angular',\n\t'ember',\n\t'html',\n\t'htmx',\n\t'react',\n\t'svelte',\n\t'vue'\n]);\n\nconst isCanonicalRecord = (value: unknown): value is CanonicalRecord => {\n\tif (typeof value !== 'object' || value === null || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\n\tconst prototype: unknown = Object.getPrototypeOf(value);\n\n\treturn prototype === Object.prototype || prototype === null;\n};\n\nconst enterCanonicalValue = (value: object, ancestors: Set<object>) => {\n\tif (ancestors.has(value)) {\n\t\tthrow new TypeError('Compatibility metadata cannot contain cycles.');\n\t}\n\tancestors.add(value);\n};\n\nconst normalizeCanonicalArray = (value: unknown[], ancestors: Set<object>) => {\n\tenterCanonicalValue(value, ancestors);\n\tconst normalized = value.map((item) =>\n\t\tnormalizeCanonicalValue(item, ancestors)\n\t);\n\tancestors.delete(value);\n\n\treturn normalized;\n};\n\nconst normalizeCanonicalRecord = (\n\tvalue: CanonicalRecord,\n\tancestors: Set<object>\n) => {\n\tenterCanonicalValue(value, ancestors);\n\tconst normalized = Object.fromEntries(\n\t\tObject.entries(value)\n\t\t\t.sort(([left], [right]) => left.localeCompare(right))\n\t\t\t.map(([key, item]) => [\n\t\t\t\tkey,\n\t\t\t\tnormalizeCanonicalValue(item, ancestors)\n\t\t\t])\n\t);\n\tancestors.delete(value);\n\n\treturn normalized;\n};\n\nconst normalizeCanonicalValue: CanonicalValueNormalizer = (\n\tvalue,\n\tancestors\n) => {\n\tif (\n\t\tvalue === null ||\n\t\ttypeof value === 'string' ||\n\t\ttypeof value === 'boolean'\n\t) {\n\t\treturn value;\n\t}\n\tif (typeof value === 'number' && Number.isFinite(value)) return value;\n\tif (Array.isArray(value)) return normalizeCanonicalArray(value, ancestors);\n\tif (isCanonicalRecord(value)) {\n\t\treturn normalizeCanonicalRecord(value, ancestors);\n\t}\n\n\tthrow new TypeError(\n\t\t'Compatibility metadata must contain only finite JSON values.'\n\t);\n};\n\nconst canonicalJson = (value: unknown) =>\n\tJSON.stringify(normalizeCanonicalValue(value, new Set<object>()));\n\nconst hashCanonicalValue = (value: unknown) =>\n\tcreateHash(SHA_256).update(canonicalJson(value)).digest('hex');\n\nconst requireNonEmpty = (value: string, field: string) => {\n\tif (!value.trim()) {\n\t\tthrow new TypeError(`${field} must not be empty.`);\n\t}\n\n\treturn value;\n};\n\nconst isPageFramework = (\n\tvalue: unknown\n): value is AbsoluteMobilePageFramework =>\n\ttypeof value === 'string' && frameworks.has(value);\n\nconst readString = (value: unknown, field: string) => {\n\tif (typeof value !== 'string') {\n\t\tthrow new TypeError(`${field} must be a string.`);\n\t}\n\n\treturn value;\n};\n\nconst parseCompatibilityPage = (value: unknown) => {\n\tif (!isCanonicalRecord(value) || !isPageFramework(value.framework)) {\n\t\tthrow new TypeError('Compatibility artifact contains an invalid page.');\n\t}\n\n\treturn {\n\t\tbundleHash: readString(value.bundleHash, 'page.bundleHash'),\n\t\tbundlePath: readString(value.bundlePath, 'page.bundlePath'),\n\t\tcontract: readString(value.contract, 'page.contract'),\n\t\tframework: value.framework,\n\t\tpageId: readString(value.pageId, 'page.pageId'),\n\t\tpropsSchemaHash: readString(\n\t\t\tvalue.propsSchemaHash,\n\t\t\t'page.propsSchemaHash'\n\t\t)\n\t} satisfies AbsoluteMobileCompatibilityPage;\n};\n\nconst parseCompatibilityRoute = (value: unknown) => {\n\tif (\n\t\t!isCanonicalRecord(value) ||\n\t\t(value.method !== 'GET' && value.method !== 'HEAD')\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Compatibility artifact contains an invalid route.'\n\t\t);\n\t}\n\n\treturn {\n\t\tmethod: value.method,\n\t\tpageId: readString(value.pageId, 'route.pageId'),\n\t\tpattern: readString(value.pattern, 'route.pattern')\n\t} satisfies AbsoluteMobileCompatibilityRoute;\n};\n\nconst parseCompatibilityProducer = (value: unknown) => {\n\tif (!isCanonicalRecord(value) || typeof value.bytes !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t'Compatibility artifact contains an invalid producer.'\n\t\t);\n\t}\n\n\treturn {\n\t\tbundleHash: readString(value.bundleHash, 'producer.bundleHash'),\n\t\tbytes: value.bytes,\n\t\texportName: readString(value.exportName, 'producer.exportName'),\n\t\tmodule: readString(value.module, 'producer.module')\n\t} satisfies AbsoluteMobileCompatibilityProducer;\n};\n\nconst validateProducerModule = (module: string) => {\n\trequireNonEmpty(module, 'producer.module');\n\tconst segments = module.split('/');\n\tif (\n\t\tmodule.startsWith('/') ||\n\t\tmodule.includes('\\\\') ||\n\t\tsegments.includes(MODULE_SEGMENT_PARENT)\n\t) {\n\t\tthrow new TypeError('producer.module must be a safe relative path.');\n\t}\n\n\treturn module;\n};\n\nconst normalizePage = (\n\tpage: AbsoluteMobileCompatibilityPage\n): AbsoluteMobileCompatibilityPage => ({\n\tbundleHash: requireNonEmpty(page.bundleHash, 'page.bundleHash'),\n\tbundlePath: requireNonEmpty(page.bundlePath, 'page.bundlePath'),\n\tcontract: requireNonEmpty(page.contract, 'page.contract'),\n\tframework: page.framework,\n\tpageId: requireNonEmpty(page.pageId, 'page.pageId'),\n\tpropsSchemaHash: requireNonEmpty(\n\t\tpage.propsSchemaHash,\n\t\t'page.propsSchemaHash'\n\t)\n});\n\nconst normalizeRoute = (\n\troute: AbsoluteMobileCompatibilityRoute\n): AbsoluteMobileCompatibilityRoute => {\n\tif (!route.pattern.startsWith('/')) {\n\t\tthrow new TypeError('route.pattern must start with /.');\n\t}\n\n\treturn {\n\t\tmethod: route.method,\n\t\tpageId: requireNonEmpty(route.pageId, 'route.pageId'),\n\t\tpattern: route.pattern\n\t};\n};\n\nconst assertUnique = (values: string[], field: string) => {\n\tif (new Set(values).size !== values.length) {\n\t\tthrow new TypeError(`${field} values must be unique.`);\n\t}\n};\n\nconst normalizeArtifactContent = (\n\tinput: AbsoluteMobileCompatibilityArtifactInput\n): CompatibilityArtifactContent => {\n\tif (!Number.isSafeInteger(input.generation) || input.generation < 1) {\n\t\tthrow new TypeError('generation must be a positive safe integer.');\n\t}\n\tif (\n\t\t!Number.isSafeInteger(input.producer.bytes) ||\n\t\tinput.producer.bytes < 1\n\t) {\n\t\tthrow new TypeError('producer.bytes must be a positive safe integer.');\n\t}\n\n\tconst pages = input.pages\n\t\t.map(normalizePage)\n\t\t.sort((left, right) => left.pageId.localeCompare(right.pageId));\n\tconst routes = input.routes\n\t\t.map(normalizeRoute)\n\t\t.sort((left, right) =>\n\t\t\t`${left.pattern}:${left.method}`.localeCompare(\n\t\t\t\t`${right.pattern}:${right.method}`\n\t\t\t)\n\t\t);\n\tassertUnique(\n\t\tpages.map(({ pageId }) => pageId),\n\t\t'page.pageId'\n\t);\n\tassertUnique(\n\t\troutes.map(({ method, pattern }) => `${method}:${pattern}`),\n\t\t'route method and pattern'\n\t);\n\tconst pageIds = new Set(pages.map(({ pageId }) => pageId));\n\tconst missingPage = routes.find(({ pageId }) => !pageIds.has(pageId));\n\tif (missingPage) {\n\t\tthrow new TypeError(\n\t\t\t`Route ${missingPage.pattern} references unknown page ${missingPage.pageId}.`\n\t\t);\n\t}\n\tif (!EXPORT_NAME_PATTERN.test(input.producer.exportName)) {\n\t\tthrow new TypeError(\n\t\t\t'producer.exportName must be a JavaScript identifier.'\n\t\t);\n\t}\n\n\treturn {\n\t\tappBuild: requireNonEmpty(input.appBuild, 'appBuild'),\n\t\tappId: requireNonEmpty(input.appId, 'appId'),\n\t\tformat: ABSOLUTE_MOBILE_COMPATIBILITY_FORMAT,\n\t\tgeneration: input.generation,\n\t\tpages,\n\t\tproducer: {\n\t\t\tbundleHash: requireNonEmpty(\n\t\t\t\tinput.producer.bundleHash,\n\t\t\t\t'producer.bundleHash'\n\t\t\t),\n\t\t\tbytes: input.producer.bytes,\n\t\t\texportName: input.producer.exportName,\n\t\t\tmodule: validateProducerModule(input.producer.module)\n\t\t},\n\t\troutes,\n\t\truntime: requireNonEmpty(input.runtime, 'runtime')\n\t};\n};\n\nexport const createAbsoluteMobileCompatibilityArtifact = (\n\tinput: AbsoluteMobileCompatibilityArtifactInput\n) => {\n\tconst content = normalizeArtifactContent(input);\n\n\treturn {\n\t\t...content,\n\t\treleaseId: `${RELEASE_ID_PREFIX}${hashCanonicalValue(content)}`\n\t} satisfies AbsoluteMobileCompatibilityArtifact;\n};\n\nexport const hashAbsoluteMobilePropsSchema = (schema: unknown) =>\n\thashCanonicalValue(schema);\n\nexport const parseAbsoluteMobileCompatibilityArtifact = (value: unknown) => {\n\tif (\n\t\t!isCanonicalRecord(value) ||\n\t\tvalue.format !== ABSOLUTE_MOBILE_COMPATIBILITY_FORMAT ||\n\t\ttypeof value.generation !== 'number' ||\n\t\t!Array.isArray(value.pages) ||\n\t\t!Array.isArray(value.routes)\n\t) {\n\t\tthrow new TypeError('Invalid mobile compatibility artifact.');\n\t}\n\n\tconst releaseId = readString(value.releaseId, 'releaseId');\n\tconst artifact = createAbsoluteMobileCompatibilityArtifact({\n\t\tappBuild: readString(value.appBuild, 'appBuild'),\n\t\tappId: readString(value.appId, 'appId'),\n\t\tgeneration: value.generation,\n\t\tpages: value.pages.map(parseCompatibilityPage),\n\t\tproducer: parseCompatibilityProducer(value.producer),\n\t\troutes: value.routes.map(parseCompatibilityRoute),\n\t\truntime: readString(value.runtime, 'runtime')\n\t});\n\tif (artifact.releaseId !== releaseId) {\n\t\tthrow new TypeError('Mobile compatibility artifact integrity failed.');\n\t}\n\n\treturn artifact;\n};\n\nexport const resolveAbsoluteMobileCompatibilityRelease = (\n\tclient: AbsoluteMobilePageClient,\n\tartifacts: readonly AbsoluteMobileCompatibilityArtifact[]\n): AbsoluteMobileResolvedRelease => {\n\tconst artifact = artifacts.find(\n\t\t(candidate) =>\n\t\t\tcandidate.appBuild === client.appBuild &&\n\t\t\tcandidate.runtime === client.runtime\n\t);\n\tif (!artifact) {\n\t\treturn {\n\t\t\tkind: 'upgrade-required',\n\t\t\tresult: {\n\t\t\t\tkind: 'upgrade-required',\n\t\t\t\tpageId: client.pageId,\n\t\t\t\treason: 'app-release'\n\t\t\t}\n\t\t};\n\t}\n\n\tconst page = artifact.pages.find(\n\t\t(candidate) =>\n\t\t\tcandidate.pageId === client.pageId &&\n\t\t\tcandidate.bundleHash === client.pageBundle &&\n\t\t\tclient.pageContracts.includes(candidate.contract)\n\t);\n\tif (!page) {\n\t\treturn {\n\t\t\tkind: 'upgrade-required',\n\t\t\tresult: {\n\t\t\t\tkind: 'upgrade-required',\n\t\t\t\tpageId: client.pageId,\n\t\t\t\treason: 'page-contract',\n\t\t\t\tsupportedContracts: artifact.pages\n\t\t\t\t\t.filter(({ pageId }) => pageId === client.pageId)\n\t\t\t\t\t.map(({ contract }) => contract)\n\t\t\t}\n\t\t};\n\t}\n\n\treturn { artifact, kind: 'retained', page };\n};\n\nexport const retainAbsoluteMobileCompatibilityArtifacts = (\n\tartifacts: readonly AbsoluteMobileCompatibilityArtifact[]\n) => {\n\tconst appIds = new Set(artifacts.map(({ appId }) => appId));\n\tif (appIds.size > 1) {\n\t\tthrow new TypeError(\n\t\t\t'Cannot retain compatibility artifacts for multiple apps.'\n\t\t);\n\t}\n\tassertUnique(\n\t\tartifacts.map(({ appBuild }) => appBuild),\n\t\t'appBuild'\n\t);\n\tassertUnique(\n\t\tartifacts.map(({ generation }) => String(generation)),\n\t\t'generation'\n\t);\n\n\treturn [...artifacts]\n\t\t.sort((left, right) => right.generation - left.generation)\n\t\t.slice(0, ABSOLUTE_MOBILE_RETAINED_GENERATIONS);\n};\n",
10
+ "import { createHash } from 'node:crypto';\nimport type {\n\tAbsoluteMobilePageClient,\n\tAbsoluteMobilePageFramework,\n\tAbsoluteMobileUpgradeRequiredResult\n} from './pageProtocol';\n\nexport const ABSOLUTE_MOBILE_COMPATIBILITY_FORMAT = 1 as const;\nexport const ABSOLUTE_MOBILE_RETAINED_GENERATIONS = 3;\n\nexport type AbsoluteMobileCompatibilityPage = {\n\tbundleHash: string;\n\tbundlePath: string;\n\tcontract: string;\n\tframework: AbsoluteMobilePageFramework;\n\tpageId: string;\n\tpropsSchemaHash: string;\n\tstyleBundleHash?: string;\n\tstyleBundlePath?: string;\n};\n\nexport type AbsoluteMobileCompatibilityRoute = {\n\tmethod: 'GET' | 'HEAD';\n\tpageId: string;\n\tpattern: string;\n};\n\nexport type AbsoluteMobileCompatibilityProducer = {\n\tbundleHash: string;\n\tbytes: number;\n\texportName: string;\n\tmodule: string;\n};\n\nexport type AbsoluteMobileCompatibilityArtifactInput = {\n\tappBuild: string;\n\tappId: string;\n\tgeneration: number;\n\tpages: readonly AbsoluteMobileCompatibilityPage[];\n\tproducer: AbsoluteMobileCompatibilityProducer;\n\troutes: readonly AbsoluteMobileCompatibilityRoute[];\n\truntime: string;\n};\n\nexport type AbsoluteMobileCompatibilityArtifact = {\n\tappBuild: string;\n\tappId: string;\n\tformat: typeof ABSOLUTE_MOBILE_COMPATIBILITY_FORMAT;\n\tgeneration: number;\n\tpages: AbsoluteMobileCompatibilityPage[];\n\tproducer: AbsoluteMobileCompatibilityProducer;\n\treleaseId: string;\n\troutes: AbsoluteMobileCompatibilityRoute[];\n\truntime: string;\n};\n\nexport type AbsoluteMobileResolvedRelease =\n\t| {\n\t\t\tartifact: AbsoluteMobileCompatibilityArtifact;\n\t\t\tkind: 'retained';\n\t\t\tpage: AbsoluteMobileCompatibilityPage;\n\t }\n\t| {\n\t\t\tkind: 'upgrade-required';\n\t\t\tresult: AbsoluteMobileUpgradeRequiredResult;\n\t };\n\ntype CanonicalRecord = Record<string, unknown>;\ntype CanonicalValueNormalizer = (\n\tvalue: unknown,\n\tancestors: Set<object>\n) => unknown;\ntype CompatibilityArtifactContent = Omit<\n\tAbsoluteMobileCompatibilityArtifact,\n\t'releaseId'\n>;\n\nconst SHA_256 = 'sha256';\nconst RELEASE_ID_PREFIX = 'amc_';\nconst MODULE_SEGMENT_PARENT = '..';\nconst EXPORT_NAME_PATTERN = /^[A-Z_a-z]\\w*$/;\nconst frameworks = new Set<string>([\n\t'angular',\n\t'ember',\n\t'html',\n\t'htmx',\n\t'react',\n\t'svelte',\n\t'vue'\n]);\n\nconst isCanonicalRecord = (value: unknown): value is CanonicalRecord => {\n\tif (typeof value !== 'object' || value === null || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\n\tconst prototype: unknown = Object.getPrototypeOf(value);\n\n\treturn prototype === Object.prototype || prototype === null;\n};\n\nconst enterCanonicalValue = (value: object, ancestors: Set<object>) => {\n\tif (ancestors.has(value)) {\n\t\tthrow new TypeError('Compatibility metadata cannot contain cycles.');\n\t}\n\tancestors.add(value);\n};\n\nconst normalizeCanonicalArray = (value: unknown[], ancestors: Set<object>) => {\n\tenterCanonicalValue(value, ancestors);\n\tconst normalized = value.map((item) =>\n\t\tnormalizeCanonicalValue(item, ancestors)\n\t);\n\tancestors.delete(value);\n\n\treturn normalized;\n};\n\nconst normalizeCanonicalRecord = (\n\tvalue: CanonicalRecord,\n\tancestors: Set<object>\n) => {\n\tenterCanonicalValue(value, ancestors);\n\tconst normalized = Object.fromEntries(\n\t\tObject.entries(value)\n\t\t\t.sort(([left], [right]) => left.localeCompare(right))\n\t\t\t.map(([key, item]) => [\n\t\t\t\tkey,\n\t\t\t\tnormalizeCanonicalValue(item, ancestors)\n\t\t\t])\n\t);\n\tancestors.delete(value);\n\n\treturn normalized;\n};\n\nconst normalizeCanonicalValue: CanonicalValueNormalizer = (\n\tvalue,\n\tancestors\n) => {\n\tif (\n\t\tvalue === null ||\n\t\ttypeof value === 'string' ||\n\t\ttypeof value === 'boolean'\n\t) {\n\t\treturn value;\n\t}\n\tif (typeof value === 'number' && Number.isFinite(value)) return value;\n\tif (Array.isArray(value)) return normalizeCanonicalArray(value, ancestors);\n\tif (isCanonicalRecord(value)) {\n\t\treturn normalizeCanonicalRecord(value, ancestors);\n\t}\n\n\tthrow new TypeError(\n\t\t'Compatibility metadata must contain only finite JSON values.'\n\t);\n};\n\nconst canonicalJson = (value: unknown) =>\n\tJSON.stringify(normalizeCanonicalValue(value, new Set<object>()));\n\nconst hashCanonicalValue = (value: unknown) =>\n\tcreateHash(SHA_256).update(canonicalJson(value)).digest('hex');\n\nconst requireNonEmpty = (value: string, field: string) => {\n\tif (!value.trim()) {\n\t\tthrow new TypeError(`${field} must not be empty.`);\n\t}\n\n\treturn value;\n};\n\nconst isPageFramework = (\n\tvalue: unknown\n): value is AbsoluteMobilePageFramework =>\n\ttypeof value === 'string' && frameworks.has(value);\n\nconst readString = (value: unknown, field: string) => {\n\tif (typeof value !== 'string') {\n\t\tthrow new TypeError(`${field} must be a string.`);\n\t}\n\n\treturn value;\n};\n\nconst parseCompatibilityPage = (value: unknown) => {\n\tif (!isCanonicalRecord(value) || !isPageFramework(value.framework)) {\n\t\tthrow new TypeError('Compatibility artifact contains an invalid page.');\n\t}\n\n\tconst styleBundleHash =\n\t\ttypeof value.styleBundleHash === 'string'\n\t\t\t? value.styleBundleHash\n\t\t\t: undefined;\n\tconst styleBundlePath =\n\t\ttypeof value.styleBundlePath === 'string'\n\t\t\t? value.styleBundlePath\n\t\t\t: undefined;\n\tif (Boolean(styleBundleHash) !== Boolean(styleBundlePath)) {\n\t\tthrow new TypeError(\n\t\t\t'Compatibility page style hash and path must be provided together.'\n\t\t);\n\t}\n\n\treturn {\n\t\tbundleHash: readString(value.bundleHash, 'page.bundleHash'),\n\t\tbundlePath: readString(value.bundlePath, 'page.bundlePath'),\n\t\tcontract: readString(value.contract, 'page.contract'),\n\t\tframework: value.framework,\n\t\tpageId: readString(value.pageId, 'page.pageId'),\n\t\tpropsSchemaHash: readString(\n\t\t\tvalue.propsSchemaHash,\n\t\t\t'page.propsSchemaHash'\n\t\t),\n\t\t...(styleBundleHash && styleBundlePath\n\t\t\t? { styleBundleHash, styleBundlePath }\n\t\t\t: {})\n\t} satisfies AbsoluteMobileCompatibilityPage;\n};\n\nconst parseCompatibilityRoute = (value: unknown) => {\n\tif (\n\t\t!isCanonicalRecord(value) ||\n\t\t(value.method !== 'GET' && value.method !== 'HEAD')\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Compatibility artifact contains an invalid route.'\n\t\t);\n\t}\n\n\treturn {\n\t\tmethod: value.method,\n\t\tpageId: readString(value.pageId, 'route.pageId'),\n\t\tpattern: readString(value.pattern, 'route.pattern')\n\t} satisfies AbsoluteMobileCompatibilityRoute;\n};\n\nconst parseCompatibilityProducer = (value: unknown) => {\n\tif (!isCanonicalRecord(value) || typeof value.bytes !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t'Compatibility artifact contains an invalid producer.'\n\t\t);\n\t}\n\n\treturn {\n\t\tbundleHash: readString(value.bundleHash, 'producer.bundleHash'),\n\t\tbytes: value.bytes,\n\t\texportName: readString(value.exportName, 'producer.exportName'),\n\t\tmodule: readString(value.module, 'producer.module')\n\t} satisfies AbsoluteMobileCompatibilityProducer;\n};\n\nconst validateProducerModule = (module: string) => {\n\trequireNonEmpty(module, 'producer.module');\n\tconst segments = module.split('/');\n\tif (\n\t\tmodule.startsWith('/') ||\n\t\tmodule.includes('\\\\') ||\n\t\tsegments.includes(MODULE_SEGMENT_PARENT)\n\t) {\n\t\tthrow new TypeError('producer.module must be a safe relative path.');\n\t}\n\n\treturn module;\n};\n\nconst normalizePage = (\n\tpage: AbsoluteMobileCompatibilityPage\n): AbsoluteMobileCompatibilityPage => {\n\tif (Boolean(page.styleBundleHash) !== Boolean(page.styleBundlePath)) {\n\t\tthrow new TypeError(\n\t\t\t'Compatibility page style hash and path must be provided together.'\n\t\t);\n\t}\n\n\treturn {\n\t\tbundleHash: requireNonEmpty(page.bundleHash, 'page.bundleHash'),\n\t\tbundlePath: requireNonEmpty(page.bundlePath, 'page.bundlePath'),\n\t\tcontract: requireNonEmpty(page.contract, 'page.contract'),\n\t\tframework: page.framework,\n\t\tpageId: requireNonEmpty(page.pageId, 'page.pageId'),\n\t\tpropsSchemaHash: requireNonEmpty(\n\t\t\tpage.propsSchemaHash,\n\t\t\t'page.propsSchemaHash'\n\t\t),\n\t\t...(page.styleBundleHash && page.styleBundlePath\n\t\t\t? {\n\t\t\t\t\tstyleBundleHash: requireNonEmpty(\n\t\t\t\t\t\tpage.styleBundleHash,\n\t\t\t\t\t\t'page.styleBundleHash'\n\t\t\t\t\t),\n\t\t\t\t\tstyleBundlePath: requireNonEmpty(\n\t\t\t\t\t\tpage.styleBundlePath,\n\t\t\t\t\t\t'page.styleBundlePath'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {})\n\t};\n};\n\nconst normalizeRoute = (\n\troute: AbsoluteMobileCompatibilityRoute\n): AbsoluteMobileCompatibilityRoute => {\n\tif (!route.pattern.startsWith('/')) {\n\t\tthrow new TypeError('route.pattern must start with /.');\n\t}\n\n\treturn {\n\t\tmethod: route.method,\n\t\tpageId: requireNonEmpty(route.pageId, 'route.pageId'),\n\t\tpattern: route.pattern\n\t};\n};\n\nconst assertUnique = (values: string[], field: string) => {\n\tif (new Set(values).size !== values.length) {\n\t\tthrow new TypeError(`${field} values must be unique.`);\n\t}\n};\n\nconst normalizeArtifactContent = (\n\tinput: AbsoluteMobileCompatibilityArtifactInput\n): CompatibilityArtifactContent => {\n\tif (!Number.isSafeInteger(input.generation) || input.generation < 1) {\n\t\tthrow new TypeError('generation must be a positive safe integer.');\n\t}\n\tif (\n\t\t!Number.isSafeInteger(input.producer.bytes) ||\n\t\tinput.producer.bytes < 1\n\t) {\n\t\tthrow new TypeError('producer.bytes must be a positive safe integer.');\n\t}\n\n\tconst pages = input.pages\n\t\t.map(normalizePage)\n\t\t.sort((left, right) => left.pageId.localeCompare(right.pageId));\n\tconst routes = input.routes\n\t\t.map(normalizeRoute)\n\t\t.sort((left, right) =>\n\t\t\t`${left.pattern}:${left.method}`.localeCompare(\n\t\t\t\t`${right.pattern}:${right.method}`\n\t\t\t)\n\t\t);\n\tassertUnique(\n\t\tpages.map(({ pageId }) => pageId),\n\t\t'page.pageId'\n\t);\n\tassertUnique(\n\t\troutes.map(({ method, pattern }) => `${method}:${pattern}`),\n\t\t'route method and pattern'\n\t);\n\tconst pageIds = new Set(pages.map(({ pageId }) => pageId));\n\tconst missingPage = routes.find(({ pageId }) => !pageIds.has(pageId));\n\tif (missingPage) {\n\t\tthrow new TypeError(\n\t\t\t`Route ${missingPage.pattern} references unknown page ${missingPage.pageId}.`\n\t\t);\n\t}\n\tif (!EXPORT_NAME_PATTERN.test(input.producer.exportName)) {\n\t\tthrow new TypeError(\n\t\t\t'producer.exportName must be a JavaScript identifier.'\n\t\t);\n\t}\n\n\treturn {\n\t\tappBuild: requireNonEmpty(input.appBuild, 'appBuild'),\n\t\tappId: requireNonEmpty(input.appId, 'appId'),\n\t\tformat: ABSOLUTE_MOBILE_COMPATIBILITY_FORMAT,\n\t\tgeneration: input.generation,\n\t\tpages,\n\t\tproducer: {\n\t\t\tbundleHash: requireNonEmpty(\n\t\t\t\tinput.producer.bundleHash,\n\t\t\t\t'producer.bundleHash'\n\t\t\t),\n\t\t\tbytes: input.producer.bytes,\n\t\t\texportName: input.producer.exportName,\n\t\t\tmodule: validateProducerModule(input.producer.module)\n\t\t},\n\t\troutes,\n\t\truntime: requireNonEmpty(input.runtime, 'runtime')\n\t};\n};\n\nexport const createAbsoluteMobileCompatibilityArtifact = (\n\tinput: AbsoluteMobileCompatibilityArtifactInput\n) => {\n\tconst content = normalizeArtifactContent(input);\n\n\treturn {\n\t\t...content,\n\t\treleaseId: `${RELEASE_ID_PREFIX}${hashCanonicalValue(content)}`\n\t} satisfies AbsoluteMobileCompatibilityArtifact;\n};\n\nexport const hashAbsoluteMobilePropsSchema = (schema: unknown) =>\n\thashCanonicalValue(schema);\n\nexport const parseAbsoluteMobileCompatibilityArtifact = (value: unknown) => {\n\tif (\n\t\t!isCanonicalRecord(value) ||\n\t\tvalue.format !== ABSOLUTE_MOBILE_COMPATIBILITY_FORMAT ||\n\t\ttypeof value.generation !== 'number' ||\n\t\t!Array.isArray(value.pages) ||\n\t\t!Array.isArray(value.routes)\n\t) {\n\t\tthrow new TypeError('Invalid mobile compatibility artifact.');\n\t}\n\n\tconst releaseId = readString(value.releaseId, 'releaseId');\n\tconst artifact = createAbsoluteMobileCompatibilityArtifact({\n\t\tappBuild: readString(value.appBuild, 'appBuild'),\n\t\tappId: readString(value.appId, 'appId'),\n\t\tgeneration: value.generation,\n\t\tpages: value.pages.map(parseCompatibilityPage),\n\t\tproducer: parseCompatibilityProducer(value.producer),\n\t\troutes: value.routes.map(parseCompatibilityRoute),\n\t\truntime: readString(value.runtime, 'runtime')\n\t});\n\tif (artifact.releaseId !== releaseId) {\n\t\tthrow new TypeError('Mobile compatibility artifact integrity failed.');\n\t}\n\n\treturn artifact;\n};\n\nexport const resolveAbsoluteMobileCompatibilityRelease = (\n\tclient: AbsoluteMobilePageClient,\n\tartifacts: readonly AbsoluteMobileCompatibilityArtifact[]\n): AbsoluteMobileResolvedRelease => {\n\tconst artifact = artifacts.find(\n\t\t(candidate) =>\n\t\t\tcandidate.appBuild === client.appBuild &&\n\t\t\tcandidate.runtime === client.runtime\n\t);\n\tif (!artifact) {\n\t\treturn {\n\t\t\tkind: 'upgrade-required',\n\t\t\tresult: {\n\t\t\t\tkind: 'upgrade-required',\n\t\t\t\tpageId: client.pageId,\n\t\t\t\treason: 'app-release'\n\t\t\t}\n\t\t};\n\t}\n\n\tconst page = artifact.pages.find(\n\t\t(candidate) =>\n\t\t\tcandidate.pageId === client.pageId &&\n\t\t\tcandidate.bundleHash === client.pageBundle &&\n\t\t\tclient.pageContracts.includes(candidate.contract)\n\t);\n\tif (!page) {\n\t\treturn {\n\t\t\tkind: 'upgrade-required',\n\t\t\tresult: {\n\t\t\t\tkind: 'upgrade-required',\n\t\t\t\tpageId: client.pageId,\n\t\t\t\treason: 'page-contract',\n\t\t\t\tsupportedContracts: artifact.pages\n\t\t\t\t\t.filter(({ pageId }) => pageId === client.pageId)\n\t\t\t\t\t.map(({ contract }) => contract)\n\t\t\t}\n\t\t};\n\t}\n\n\treturn { artifact, kind: 'retained', page };\n};\n\nexport const retainAbsoluteMobileCompatibilityArtifacts = (\n\tartifacts: readonly AbsoluteMobileCompatibilityArtifact[]\n) => {\n\tconst appIds = new Set(artifacts.map(({ appId }) => appId));\n\tif (appIds.size > 1) {\n\t\tthrow new TypeError(\n\t\t\t'Cannot retain compatibility artifacts for multiple apps.'\n\t\t);\n\t}\n\tassertUnique(\n\t\tartifacts.map(({ appBuild }) => appBuild),\n\t\t'appBuild'\n\t);\n\tassertUnique(\n\t\tartifacts.map(({ generation }) => String(generation)),\n\t\t'generation'\n\t);\n\n\treturn [...artifacts]\n\t\t.sort((left, right) => right.generation - left.generation)\n\t\t.slice(0, ABSOLUTE_MOBILE_RETAINED_GENERATIONS);\n};\n",
10
11
  "import { createHash } from 'node:crypto';\nimport {\n\taccess,\n\tcopyFile,\n\tmkdir,\n\tmkdtemp,\n\treadFile,\n\trename,\n\trm,\n\tstat,\n\twriteFile\n} from 'node:fs/promises';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport {\n\tabsoluteManagedAndroidSdkRoot,\n\tdetectAbsoluteMobileHost,\n\ttype AbsoluteMobileHost\n} from './emulatorDoctor';\nimport {\n\tbuildAbsoluteAndroidGradleArtifact,\n\tfingerprintAbsoluteAndroidNativeProject,\n\ttype AbsoluteAndroidCommandOptions,\n\ttype AbsoluteAndroidCommandResult\n} from './androidEmulatorController';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\n\nexport const ABSOLUTE_ANDROID_RELEASE_FORMAT = 1 as const;\n\nexport type AbsoluteAndroidReleaseMetadata = {\n\tappBuild: string;\n\tappId: string;\n\tartifact: string;\n\tbytes: number;\n\tengine: 'capacitor';\n\tformat: typeof ABSOLUTE_ANDROID_RELEASE_FORMAT;\n\tplatform: 'android';\n\treleaseId: string;\n\truntime: string;\n\tsha256: string;\n\tsigned: boolean;\n\ttype: 'aab';\n\tversionCode?: number;\n};\n\ntype MobileClientManifest = {\n\tappBuild: string;\n\tappId: string;\n\truntime: string;\n};\n\nexport type BuildAbsoluteAndroidReleaseOptions = {\n\tallowUnsigned?: boolean;\n\tandroidRoot?: string;\n\tcapture?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => AbsoluteAndroidCommandResult;\n\tconfig: NormalizedAbsoluteMobileConfig;\n\thost?: AbsoluteMobileHost;\n\tjarsigner?: string | null;\n\toutputDirectory?: string;\n\tprojectRoot: string;\n\trun?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => Promise<number>;\n\tprepareVersionCode?: (buildIdentity: string) => Promise<number>;\n\tversionCode?: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst requireManifest = (value: unknown): MobileClientManifest => {\n\tif (\n\t\t!isRecord(value) ||\n\t\ttypeof value.appBuild !== 'string' ||\n\t\ttypeof value.appId !== 'string' ||\n\t\ttypeof value.runtime !== 'string'\n\t) {\n\t\tthrow new TypeError('Invalid embedded AbsoluteJS mobile manifest.');\n\t}\n\n\treturn {\n\t\tappBuild: value.appBuild,\n\t\tappId: value.appId,\n\t\truntime: value.runtime\n\t};\n};\n\nconst pathExists = async (path: string) => {\n\ttry {\n\t\tawait access(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst defaultCapture = (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions = {}\n) => {\n\ttry {\n\t\tconst result = Bun.spawnSync(command, {\n\t\t\tcwd: options.cwd,\n\t\t\tenv: options.env,\n\t\t\tstderr: 'pipe',\n\t\t\tstdin: 'ignore',\n\t\t\tstdout: 'pipe'\n\t\t});\n\n\t\treturn {\n\t\t\texitCode: result.exitCode,\n\t\t\tstderr: result.stderr.toString(),\n\t\t\tstdout: result.stdout.toString()\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\texitCode: 1,\n\t\t\tstderr: error instanceof Error ? error.message : String(error),\n\t\t\tstdout: ''\n\t\t};\n\t}\n};\n\nconst verifyAabSignature = (\n\tartifactPath: string,\n\tcapture: NonNullable<BuildAbsoluteAndroidReleaseOptions['capture']>,\n\tjarsigner: string | null | undefined\n) => {\n\tconst executable =\n\t\tjarsigner === undefined ? Bun.which('jarsigner') : jarsigner;\n\tif (!executable) return null;\n\tconst result = capture([\n\t\texecutable,\n\t\t'-J-Duser.language=en',\n\t\t'-J-Duser.country=US',\n\t\t'-verify',\n\t\tartifactPath\n\t]);\n\n\treturn result.exitCode === 0 && /jar verified/iu.test(result.stdout);\n};\n\nconst sha256File = async (path: string) =>\n\tcreateHash('sha256')\n\t\t.update(await readFile(path))\n\t\t.digest('hex');\n\nconst safeOutputDirectory = (projectRoot: string, requested?: string) => {\n\tconst root = resolve(projectRoot);\n\tconst output = resolve(\n\t\troot,\n\t\trequested ?? '.absolutejs/mobile/releases/android'\n\t);\n\tconst projectRelative = relative(root, output);\n\tif (\n\t\tprojectRelative === '..' ||\n\t\tprojectRelative.startsWith(`..${sep}`) ||\n\t\tisAbsolute(projectRelative)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'mobile build --outdir must remain inside the project.'\n\t\t);\n\t}\n\n\treturn output;\n};\n\nconst installRelease = async (\n\tartifactPath: string,\n\tmetadata: Omit<AbsoluteAndroidReleaseMetadata, 'artifact'>,\n\toutputRoot: string\n) => {\n\tconst releaseRoot = join(outputRoot, metadata.releaseId);\n\tconst artifactName = 'app-release.aab';\n\tconst destination = join(releaseRoot, artifactName);\n\tif (await pathExists(releaseRoot)) {\n\t\tconst existing = requireManifestIdentity(\n\t\t\tJSON.parse(\n\t\t\t\tawait readFile(join(releaseRoot, 'release.json'), 'utf8')\n\t\t\t),\n\t\t\tmetadata\n\t\t);\n\t\tconst [installedBytes, installedSha256] = await Promise.all([\n\t\t\tstat(destination).then(({ size }) => size),\n\t\t\tsha256File(destination)\n\t\t]);\n\t\tif (\n\t\t\tinstalledBytes !== metadata.bytes ||\n\t\t\tinstalledSha256 !== metadata.sha256\n\t\t) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Immutable Android release ${metadata.releaseId} artifact is missing or modified.`\n\t\t\t);\n\t\t}\n\n\t\treturn { artifactPath: destination, metadata: existing, releaseRoot };\n\t}\n\tawait mkdir(dirname(releaseRoot), { recursive: true });\n\tconst staging = await mkdtemp(\n\t\tjoin(dirname(releaseRoot), '.android-stage-')\n\t);\n\ttry {\n\t\tawait copyFile(artifactPath, join(staging, artifactName));\n\t\tconst complete = {\n\t\t\t...metadata,\n\t\t\tartifact: artifactName\n\t\t} satisfies AbsoluteAndroidReleaseMetadata;\n\t\tawait writeFile(\n\t\t\tjoin(staging, 'release.json'),\n\t\t\t`${JSON.stringify(complete, null, '\\t')}\\n`,\n\t\t\t{ flag: 'wx' }\n\t\t);\n\t\tawait rename(staging, releaseRoot);\n\n\t\treturn { artifactPath: destination, metadata: complete, releaseRoot };\n\t} finally {\n\t\tawait rm(staging, { force: true, recursive: true }).catch(\n\t\t\t() => undefined\n\t\t);\n\t}\n};\n\nconst requireManifestIdentity = (\n\tvalue: unknown,\n\texpected: Omit<AbsoluteAndroidReleaseMetadata, 'artifact'>\n) => {\n\tif (!isRecord(value)) {\n\t\tthrow new TypeError('Existing Android release metadata is invalid.');\n\t}\n\tconst { artifact } = value;\n\tif (\n\t\tartifact !== 'app-release.aab' ||\n\t\tObject.entries(expected).some(\n\t\t\t([key, expectedValue]) => Reflect.get(value, key) !== expectedValue\n\t\t)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`Immutable Android release ${expected.releaseId} does not match its content.`\n\t\t);\n\t}\n\n\treturn { ...expected, artifact } satisfies AbsoluteAndroidReleaseMetadata;\n};\n\nexport const buildAbsoluteAndroidRelease = async (\n\toptions: BuildAbsoluteAndroidReleaseOptions\n) => {\n\tif (options.versionCode !== undefined && options.prepareVersionCode) {\n\t\tthrow new TypeError(\n\t\t\t'Android release versionCode and prepareVersionCode cannot be combined.'\n\t\t);\n\t}\n\tif (\n\t\toptions.versionCode !== undefined &&\n\t\t(!Number.isSafeInteger(options.versionCode) ||\n\t\t\toptions.versionCode < 1 ||\n\t\t\toptions.versionCode > 2_100_000_000)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Android versionCode must be an integer from 1 through 2100000000.'\n\t\t);\n\t}\n\tconst projectRoot = resolve(options.projectRoot);\n\tconst host = options.host ?? detectAbsoluteMobileHost();\n\tconst androidRoot =\n\t\toptions.androidRoot ??\n\t\tprocess.env.ANDROID_HOME ??\n\t\tprocess.env.ANDROID_SDK_ROOT ??\n\t\tabsoluteManagedAndroidSdkRoot(host);\n\tconst nativeDirectory = join(\n\t\toptions.config.nativeProjectDirectory,\n\t\t'android'\n\t);\n\tconst manifest = requireManifest(\n\t\tJSON.parse(\n\t\t\tawait readFile(\n\t\t\t\tjoin(\n\t\t\t\t\toptions.config.bundleDirectory,\n\t\t\t\t\t'absolute-mobile-manifest.json'\n\t\t\t\t),\n\t\t\t\t'utf8'\n\t\t\t)\n\t\t)\n\t);\n\tif (manifest.appId !== options.config.appId) {\n\t\tthrow new TypeError(\n\t\t\t'Embedded mobile manifest appId does not match mobile.appId.'\n\t\t);\n\t}\n\tlet { versionCode } = options;\n\tif (options.prepareVersionCode) {\n\t\tconst nativeFingerprint = await fingerprintAbsoluteAndroidNativeProject(\n\t\t\t{ nativeDirectory }\n\t\t);\n\t\tconst buildIdentity = createHash('sha256')\n\t\t\t.update(`${manifest.appBuild}\\0${nativeFingerprint}`)\n\t\t\t.digest('hex');\n\t\tversionCode = await options.prepareVersionCode(buildIdentity);\n\t}\n\tif (\n\t\tversionCode !== undefined &&\n\t\t(!Number.isSafeInteger(versionCode) ||\n\t\t\tversionCode < 1 ||\n\t\t\tversionCode > 2_100_000_000)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Android versionCode must be an integer from 1 through 2100000000.'\n\t\t);\n\t}\n\tconst { artifactPath } = await buildAbsoluteAndroidGradleArtifact({\n\t\tcapture: options.capture,\n\t\tgradleArguments:\n\t\t\tversionCode === undefined\n\t\t\t\t? []\n\t\t\t\t: [`-Pandroid.injected.version.code=${versionCode}`],\n\t\tproject: {\n\t\t\tandroidRoot,\n\t\t\tconfig: options.config,\n\t\t\thost,\n\t\t\tnativeDirectory,\n\t\t\tprojectRoot\n\t\t},\n\t\trun: options.run,\n\t\ttask: 'bundleRelease'\n\t});\n\tif (!(await pathExists(artifactPath))) {\n\t\tthrow new TypeError(\n\t\t\t`Android Gradle did not produce the expected App Bundle: ${artifactPath}`\n\t\t);\n\t}\n\tconst capture = options.capture ?? defaultCapture;\n\tconst signed = verifyAabSignature(artifactPath, capture, options.jarsigner);\n\tif (signed === null && !options.allowUnsigned) {\n\t\tthrow new TypeError(\n\t\t\t'Could not verify the Android App Bundle signature because jarsigner is unavailable. Install a JDK, or use --unsigned only for a non-publishable build.'\n\t\t);\n\t}\n\tif (!signed && !options.allowUnsigned) {\n\t\tthrow new TypeError(\n\t\t\t'Android Gradle produced an unsigned App Bundle. Configure the release signingConfig in the source-owned Android project (prefer external Gradle properties), or pass --unsigned only for a non-publishable build.'\n\t\t);\n\t}\n\tconst [bytes, sha256] = await Promise.all([\n\t\tstat(artifactPath).then(({ size }) => size),\n\t\tsha256File(artifactPath)\n\t]);\n\tconst releaseId = `amobile_android_${sha256}`;\n\tconst metadata = {\n\t\tappBuild: manifest.appBuild,\n\t\tappId: manifest.appId,\n\t\tbytes,\n\t\tengine: 'capacitor',\n\t\tformat: ABSOLUTE_ANDROID_RELEASE_FORMAT,\n\t\tplatform: 'android',\n\t\treleaseId,\n\t\truntime: manifest.runtime,\n\t\tsha256,\n\t\tsigned: signed === true,\n\t\ttype: 'aab',\n\t\t...(versionCode === undefined ? {} : { versionCode })\n\t} satisfies Omit<AbsoluteAndroidReleaseMetadata, 'artifact'>;\n\n\treturn installRelease(\n\t\tartifactPath,\n\t\tmetadata,\n\t\tsafeOutputDirectory(projectRoot, options.outputDirectory)\n\t);\n};\n",
11
12
  "import { access } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { isWSLEnvironment } from '../cli/utils';\n\nexport type AbsoluteMobileHost = 'macos' | 'windows' | 'linux' | 'wsl';\nexport type AbsoluteMobileDoctorStatus = 'pass' | 'warn' | 'fail' | 'skip';\nexport const ABSOLUTE_ANDROID_AVD_NAME = 'AbsoluteJS_API_36';\n\nexport type AbsoluteMobileDoctorCheck = {\n\tid: string;\n\tlabel: string;\n\tpath?: string;\n\tplatform: 'host' | 'android' | 'ios';\n\tremediation?: string;\n\tstatus: AbsoluteMobileDoctorStatus;\n};\n\nexport type InspectAbsoluteMobileToolchainOptions = {\n\tandroidRoot?: string | null;\n\tcapture?: (command: string[]) => { exitCode: number; stdout: string };\n\tenv?: Record<string, string | undefined>;\n\texists?: (path: string) => Promise<boolean>;\n\thost?: AbsoluteMobileHost;\n\twhich?: (command: string) => string | null;\n};\n\nconst captureCommand = (command: string[]) => {\n\ttry {\n\t\tconst result = Bun.spawnSync(command, {\n\t\t\tstderr: 'ignore',\n\t\t\tstdout: 'pipe'\n\t\t});\n\n\t\treturn {\n\t\t\texitCode: result.exitCode,\n\t\t\tstdout: result.stdout.toString()\n\t\t};\n\t} catch {\n\t\treturn { exitCode: 1, stdout: '' };\n\t}\n};\n\nconst hasAvailableIosRuntime = (output: string) => {\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(output);\n\t\tif (typeof parsed !== 'object' || parsed === null) return false;\n\t\tconst runtimes = Reflect.get(parsed, 'runtimes');\n\t\tif (!Array.isArray(runtimes)) return false;\n\n\t\treturn runtimes.some(\n\t\t\t(runtime) =>\n\t\t\t\ttypeof runtime === 'object' &&\n\t\t\t\truntime !== null &&\n\t\t\t\tReflect.get(runtime, 'isAvailable') === true &&\n\t\t\t\ttypeof Reflect.get(runtime, 'identifier') === 'string' &&\n\t\t\t\tString(Reflect.get(runtime, 'identifier')).includes('iOS')\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst windowsPathToWsl = (path: string) => {\n\tconst match = /^([a-z]):[\\\\/](.*)$/i.exec(path.trim());\n\tif (!match) return path.trim().replaceAll('\\\\', '/');\n\n\treturn `/mnt/${match[1]?.toLowerCase()}/${match[2]?.replaceAll('\\\\', '/')}`;\n};\n\nconst windowsLocalAppDataFromWsl = () => {\n\ttry {\n\t\tconst result = Bun.spawnSync(\n\t\t\t['cmd.exe', '/d', '/c', 'echo', '%LOCALAPPDATA%'],\n\t\t\t{ stderr: 'ignore', stdout: 'pipe' }\n\t\t);\n\t\tif (result.exitCode !== 0) return undefined;\n\t\tconst output = result.stdout.toString().trim();\n\t\tif (!output || output === '%LOCALAPPDATA%') return undefined;\n\n\t\treturn windowsPathToWsl(output);\n\t} catch {\n\t\treturn undefined;\n\t}\n};\n\nexport const absoluteManagedAndroidSdkRoot = (\n\thost: AbsoluteMobileHost,\n\tenv: Record<string, string | undefined> = process.env\n) => {\n\tif (host === 'windows') {\n\t\treturn join(\n\t\t\tenv.LOCALAPPDATA ?? join(homedir(), 'AppData', 'Local'),\n\t\t\t'AbsoluteJS',\n\t\t\t'Android',\n\t\t\t'Sdk'\n\t\t);\n\t}\n\tif (host === 'wsl') {\n\t\tconst localAppData = windowsLocalAppDataFromWsl();\n\t\tif (localAppData) {\n\t\t\treturn join(localAppData, 'AbsoluteJS', 'Android', 'Sdk');\n\t\t}\n\t}\n\n\treturn join(homedir(), '.absolutejs', 'android-sdk');\n};\n\nconst pathExists = async (path: string) => {\n\ttry {\n\t\tawait access(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport const detectAbsoluteMobileHost = (\n\tplatform = process.platform,\n\twsl = isWSLEnvironment()\n) => {\n\tif (platform === 'darwin') return 'macos';\n\tif (platform === 'win32') return 'windows';\n\tif (platform === 'linux' && wsl) return 'wsl';\n\n\treturn 'linux';\n};\n\nconst executableNames = (host: AbsoluteMobileHost, name: string) => {\n\tif (host === 'wsl') return [`${name}.exe`, `${name}.bat`, name];\n\tif (host === 'windows') return [name, `${name}.exe`, `${name}.bat`];\n\n\treturn [name];\n};\n\nconst findExecutable = async (\n\tname: string,\n\tpaths: string[],\n\toptions: Required<\n\t\tPick<InspectAbsoluteMobileToolchainOptions, 'exists' | 'which'>\n\t>,\n\thost: AbsoluteMobileHost\n) => {\n\tconst existing = await Promise.all(\n\t\tpaths.map(async (path) =>\n\t\t\t(await options.exists(path)) ? path : undefined\n\t\t)\n\t);\n\tconst configured = existing.find((path) => path !== undefined);\n\tif (configured) return configured;\n\tfor (const candidate of executableNames(host, name)) {\n\t\tconst path = options.which(candidate);\n\t\tif (path) return path;\n\t}\n\n\treturn undefined;\n};\n\nconst toolCheck = (\n\tid: string,\n\tlabel: string,\n\tplatform: 'android' | 'ios',\n\tpath: string | undefined,\n\tremediation: string\n) =>\n\tpath\n\t\t? ({\n\t\t\t\tid,\n\t\t\t\tlabel,\n\t\t\t\tpath,\n\t\t\t\tplatform,\n\t\t\t\tstatus: 'pass'\n\t\t\t} satisfies AbsoluteMobileDoctorCheck)\n\t\t: ({\n\t\t\t\tid,\n\t\t\t\tlabel,\n\t\t\t\tplatform,\n\t\t\t\tremediation,\n\t\t\t\tstatus: 'fail'\n\t\t\t} satisfies AbsoluteMobileDoctorCheck);\n\nexport const inspectAbsoluteMobileToolchain = async (\n\tinput: InspectAbsoluteMobileToolchainOptions = {}\n) => {\n\tconst env = input.env ?? process.env;\n\tconst host = input.host ?? detectAbsoluteMobileHost();\n\tconst exists = input.exists ?? pathExists;\n\tconst which = input.which ?? ((command: string) => Bun.which(command));\n\tconst capture = input.capture ?? captureCommand;\n\tconst androidRoot =\n\t\tinput.androidRoot === null\n\t\t\t? undefined\n\t\t\t: (input.androidRoot ??\n\t\t\t\tenv.ANDROID_HOME ??\n\t\t\t\tenv.ANDROID_SDK_ROOT ??\n\t\t\t\tabsoluteManagedAndroidSdkRoot(host, env));\n\tconst windowsAndroidTools = host === 'windows' || host === 'wsl';\n\tconst android = (segments: string[]) =>\n\t\tandroidRoot ? join(androidRoot, ...segments) : undefined;\n\tconst paths = (values: Array<string | undefined>) =>\n\t\tvalues.filter((value): value is string => Boolean(value));\n\tconst adb = await findExecutable(\n\t\t'adb',\n\t\tpaths([\n\t\t\tandroid(['platform-tools', windowsAndroidTools ? 'adb.exe' : 'adb'])\n\t\t]),\n\t\t{ exists, which },\n\t\thost\n\t);\n\tconst emulator = await findExecutable(\n\t\t'emulator',\n\t\tpaths([\n\t\t\tandroid([\n\t\t\t\t'emulator',\n\t\t\t\twindowsAndroidTools ? 'emulator.exe' : 'emulator'\n\t\t\t])\n\t\t]),\n\t\t{ exists, which },\n\t\thost\n\t);\n\tconst sdkmanager = await findExecutable(\n\t\t'sdkmanager',\n\t\tpaths([\n\t\t\tandroid([\n\t\t\t\t'cmdline-tools',\n\t\t\t\t'latest',\n\t\t\t\t'bin',\n\t\t\t\twindowsAndroidTools ? 'sdkmanager.bat' : 'sdkmanager'\n\t\t\t])\n\t\t]),\n\t\t{ exists, which },\n\t\thost\n\t);\n\tconst avdmanager = await findExecutable(\n\t\t'avdmanager',\n\t\tpaths([\n\t\t\tandroid([\n\t\t\t\t'cmdline-tools',\n\t\t\t\t'latest',\n\t\t\t\t'bin',\n\t\t\t\twindowsAndroidTools ? 'avdmanager.bat' : 'avdmanager'\n\t\t\t])\n\t\t]),\n\t\t{ exists, which },\n\t\thost\n\t);\n\tconst java = await findExecutable('java', [], { exists, which }, host);\n\tconst checks: AbsoluteMobileDoctorCheck[] = [\n\t\t{\n\t\t\tid: 'host',\n\t\t\tlabel: `Development host: ${host}`,\n\t\t\tplatform: 'host',\n\t\t\tstatus: 'pass'\n\t\t},\n\t\ttoolCheck(\n\t\t\t'android.adb',\n\t\t\t'Android Debug Bridge',\n\t\t\t'android',\n\t\t\tadb,\n\t\t\t'Install Android SDK Platform Tools or expose adb on PATH.'\n\t\t),\n\t\ttoolCheck(\n\t\t\t'android.emulator',\n\t\t\t'Android Emulator',\n\t\t\t'android',\n\t\t\temulator,\n\t\t\t'Install the Android Emulator from Android Studio SDK Manager.'\n\t\t),\n\t\ttoolCheck(\n\t\t\t'android.sdkmanager',\n\t\t\t'Android SDK Manager',\n\t\t\t'android',\n\t\t\tsdkmanager,\n\t\t\t'Install Android SDK Command-line Tools (latest).'\n\t\t),\n\t\ttoolCheck(\n\t\t\t'android.avdmanager',\n\t\t\t'Android Virtual Device Manager',\n\t\t\t'android',\n\t\t\tavdmanager,\n\t\t\t'Install Android SDK Command-line Tools (latest).'\n\t\t),\n\t\ttoolCheck(\n\t\t\t'android.java',\n\t\t\t'Java runtime',\n\t\t\t'android',\n\t\t\tjava,\n\t\t\t'Install the JDK required by the configured Android Gradle plugin.'\n\t\t)\n\t];\n\tif (emulator) {\n\t\tconst avds = capture([emulator, '-list-avds']);\n\t\tconst hasManagedAvd =\n\t\t\tavds.exitCode === 0 &&\n\t\t\tavds.stdout.split(/\\r?\\n/).includes(ABSOLUTE_ANDROID_AVD_NAME);\n\t\tchecks.push({\n\t\t\tid: 'android.avd',\n\t\t\tlabel: `AbsoluteJS Android emulator (${ABSOLUTE_ANDROID_AVD_NAME})`,\n\t\t\tplatform: 'android',\n\t\t\tremediation: hasManagedAvd\n\t\t\t\t? undefined\n\t\t\t\t: 'Run absolute mobile doctor android --fix to provision the managed emulator.',\n\t\t\tstatus: hasManagedAvd ? 'pass' : 'fail'\n\t\t});\n\t}\n\n\tif (host === 'wsl') {\n\t\tchecks.push({\n\t\t\tid: 'android.virtualization',\n\t\t\tlabel: adb?.endsWith('.exe')\n\t\t\t\t? 'Windows-host Android bridge available to WSL'\n\t\t\t\t: 'WSL requires a Windows-host emulator bridge or Linux KVM',\n\t\t\tplatform: 'android',\n\t\t\tremediation: adb?.endsWith('.exe')\n\t\t\t\t? undefined\n\t\t\t\t: 'Expose the Windows Android SDK adb.exe to WSL, or enable /dev/kvm for a Linux SDK.',\n\t\t\tstatus: adb?.endsWith('.exe') ? 'pass' : 'warn'\n\t\t});\n\t} else if (host === 'linux') {\n\t\tconst hasKvm = await exists('/dev/kvm');\n\t\tchecks.push({\n\t\t\tid: 'android.virtualization',\n\t\t\tlabel: 'Linux KVM acceleration',\n\t\t\tplatform: 'android',\n\t\t\tremediation: hasKvm\n\t\t\t\t? undefined\n\t\t\t\t: 'Enable KVM and grant the current user access to /dev/kvm.',\n\t\t\tstatus: hasKvm ? 'pass' : 'warn'\n\t\t});\n\t}\n\n\tif (host !== 'macos') {\n\t\tchecks.push({\n\t\t\tid: 'ios.simulator',\n\t\t\tlabel: 'iOS Simulator requires macOS and Xcode',\n\t\t\tplatform: 'ios',\n\t\t\tstatus: 'skip'\n\t\t});\n\n\t\treturn checks;\n\t}\n\n\tconst xcrun = await findExecutable('xcrun', [], { exists, which }, host);\n\tconst xcodebuild = await findExecutable(\n\t\t'xcodebuild',\n\t\t[],\n\t\t{ exists, which },\n\t\thost\n\t);\n\tchecks.push(\n\t\ttoolCheck(\n\t\t\t'ios.xcrun',\n\t\t\t'Xcode command runner',\n\t\t\t'ios',\n\t\t\txcrun,\n\t\t\t'Install Xcode and select it with xcode-select.'\n\t\t),\n\t\ttoolCheck(\n\t\t\t'ios.xcodebuild',\n\t\t\t'Xcode build system',\n\t\t\t'ios',\n\t\t\txcodebuild,\n\t\t\t'Install Xcode and select it with xcode-select.'\n\t\t)\n\t);\n\tif (xcrun) {\n\t\tconst runtimes = capture([\n\t\t\txcrun,\n\t\t\t'simctl',\n\t\t\t'list',\n\t\t\t'runtimes',\n\t\t\t'--json'\n\t\t]);\n\t\tconst hasRuntime =\n\t\t\truntimes.exitCode === 0 && hasAvailableIosRuntime(runtimes.stdout);\n\t\tchecks.push({\n\t\t\tid: 'ios.runtime',\n\t\t\tlabel: 'iOS Simulator runtime',\n\t\t\tplatform: 'ios',\n\t\t\tremediation: hasRuntime\n\t\t\t\t? undefined\n\t\t\t\t: 'Run absolute mobile doctor ios --fix to download an iOS Simulator runtime.',\n\t\t\tstatus: hasRuntime ? 'pass' : 'fail'\n\t\t});\n\t}\n\n\treturn checks;\n};\n",
12
13
  "import { $ } from 'bun';\nimport { execSync } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { createServer } from 'node:net';\nimport { resolve } from 'node:path';\nimport type { DbScripts } from '../../types/cli';\nimport { MILLISECONDS_IN_A_SECOND } from '../constants';\nimport { formatTimestamp } from '../utils/startupBanner';\n\nexport const COMPOSE_PATH = 'db/docker-compose.db.yml';\nexport const DEFAULT_SERVER_ENTRY = 'src/backend/server.ts';\nexport const isWSLEnvironment = () => {\n\ttry {\n\t\tconst release = readFileSync('/proc/version', 'utf-8');\n\n\t\treturn /microsoft|wsl/i.test(release);\n\t} catch {\n\t\treturn false;\n\t}\n};\nconst safeKill = (pid: number) => {\n\ttry {\n\t\tprocess.kill(pid, 'SIGTERM');\n\t} catch {\n\t\t/* already exited */\n\t}\n};\n\n// Ask the OS for an unused TCP port (bind :0, read the assigned port, release it).\n// Used to pick a collision-proof port for the compile pre-render server: the old\n// `DEFAULT_PORT + 1` is frequently occupied on CI runners, and the `lsof`-based\n// stale-process cleanup is a no-op on minimal images where `lsof` isn't installed —\n// together those produced an EADDRINUSE that failed every runner compile.\nexport const findFreePort = () =>\n\tnew Promise<number>((_resolve, reject) => {\n\t\tconst server = createServer();\n\t\tserver.unref();\n\t\tserver.once('error', reject);\n\t\tserver.listen(0, '127.0.0.1', () => {\n\t\t\tconst address = server.address();\n\t\t\tif (!address || typeof address === 'string') {\n\t\t\t\tserver.close();\n\t\t\t\treject(new Error('Failed to allocate a free port'));\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tserver.close((error) => {\n\t\t\t\tif (error) {\n\t\t\t\t\treject(error);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t_resolve(address.port);\n\t\t\t});\n\t\t});\n\t});\n\nexport const killStaleProcesses = (\n\tport: number,\n\tlogMessage?: (message: string) => void\n) => {\n\tlet output: string;\n\ttry {\n\t\toutput = execSync(`lsof -ti tcp:${port} -sTCP:LISTEN 2>/dev/null`, {\n\t\t\tencoding: 'utf-8'\n\t\t}).trim();\n\t} catch {\n\t\treturn;\n\t}\n\tif (!output) {\n\t\treturn;\n\t}\n\n\tconst pids = output\n\t\t.split('\\n')\n\t\t.map(Number)\n\t\t.filter((pid) => pid !== process.pid && pid > 0);\n\tif (pids.length === 0) {\n\t\treturn;\n\t}\n\n\tpids.forEach(safeKill);\n\tconst message = `Killed ${pids.length} stale ${pids.length === 1 ? 'process' : 'processes'} on port ${port}.`;\n\tif (logMessage) {\n\t\tlogMessage(message);\n\n\t\treturn;\n\t}\n\tconsole.log(\n\t\t`\\x1b[2m${formatTimestamp()}\\x1b[0m \\x1b[33m[cli]\\x1b[0m \\x1b[33m${message}\\x1b[0m`\n\t);\n};\nexport const openUrlInBrowser = (\n\turl: string,\n\tonError?: (message: string) => void\n) => {\n\tif (process.env.ABSOLUTE_NO_OPEN) return false;\n\n\tconst { platform } = process;\n\tconst isWSL = platform === 'linux' && isWSLEnvironment();\n\tlet command: string;\n\tif (isWSL) {\n\t\tcommand = 'cmd.exe';\n\t} else if (platform === 'darwin') {\n\t\tcommand = 'open';\n\t} else if (platform === 'win32') {\n\t\tcommand = 'start';\n\t} else {\n\t\tcommand = 'xdg-open';\n\t}\n\tconst commandArgs = isWSL ? ['/c', 'start', url] : [url];\n\ttry {\n\t\tBun.spawn([command, ...commandArgs], {\n\t\t\tstderr: 'ignore',\n\t\t\tstdout: 'ignore'\n\t\t});\n\n\t\treturn true;\n\t} catch {\n\t\tonError?.(`Could not open browser automatically. Visit ${url}`);\n\n\t\treturn false;\n\t}\n};\n\nexport const printHelp = (subject = 'server', mobile = false) => {\n\tconst title = subject === 'workspace' ? 'workspace' : subject;\n\tconsole.log('');\n\tconsole.log('\\x1b[1mShortcuts:\\x1b[0m');\n\tconsole.log(` \\x1b[36mr\\x1b[0m / restart — Restart ${title}`);\n\tconsole.log(` \\x1b[36mp\\x1b[0m / pause — Pause/resume ${title}`);\n\tconsole.log(' \\x1b[36mo\\x1b[0m / open — Open in browser');\n\tconsole.log(' \\x1b[36mc\\x1b[0m / clear — Clear terminal');\n\tconsole.log(' \\x1b[36mm\\x1b[0m / heap — Write a heap snapshot');\n\tif (mobile) {\n\t\tconsole.log(\n\t\t\t' \\x1b[36md\\x1b[0m / device — Show mobile target status'\n\t\t);\n\t\tconsole.log(' relaunch — Relaunch the mobile app');\n\t}\n\tconsole.log(' \\x1b[36mq\\x1b[0m / quit — Graceful shutdown');\n\tconsole.log(' \\x1b[36mh\\x1b[0m / help — Show this help');\n\tconsole.log(' \\x1b[36m$\\x1b[0m — Run a shell command');\n\tconsole.log(\n\t\t' \\x1b[36m↑\\x1b[0m / \\x1b[36m↓\\x1b[0m — Command history'\n\t);\n\tconsole.log('');\n};\nexport const printHint = () => {\n\tconsole.log('\\x1b[90mpress h + enter to show shortcuts\\x1b[0m');\n};\nexport const readDbScripts = async () => {\n\tconst pkgPath = resolve('package.json');\n\tif (!existsSync(pkgPath)) return null;\n\n\tconst pkg = await Bun.file(pkgPath).json();\n\tconst upCommand: string | undefined = pkg.scripts?.['db:up'];\n\tconst downCommand: string | undefined = pkg.scripts?.['db:down'];\n\n\tif (!upCommand || !downCommand) return null;\n\n\treturn { downCommand, upCommand };\n};\nexport const startDatabase = async (scripts: DbScripts) => {\n\tawait timed('Starting database container...', async () => {\n\t\tconst { exitCode } = await $`${{ raw: scripts.upCommand }}`\n\t\t\t.quiet()\n\t\t\t.nothrow();\n\t\tif (exitCode !== 0) process.exit(exitCode);\n\t});\n};\nexport const stopDatabase = async (scripts: DbScripts) => {\n\tconsole.log('\\nStopping database container...');\n\tawait $`${{ raw: scripts.downCommand }}`.quiet().nothrow();\n};\nexport const timed = async (label: string, task: () => Promise<void>) => {\n\tprocess.stdout.write(label);\n\tconst start = performance.now();\n\tawait task();\n\tconst duration = (\n\t\t(performance.now() - start) /\n\t\tMILLISECONDS_IN_A_SECOND\n\t).toFixed(2);\n\tprocess.stdout.write(` \\x1b[90m${duration}s\\x1b[0m\\n`);\n};\n",
13
- "import {\n\taccess,\n\tcopyFile,\n\tlstat,\n\tmkdir,\n\treadFile,\n\treaddir,\n\treadlink,\n\trealpath,\n\trename,\n\trm,\n\twriteFile\n} from 'node:fs/promises';\nimport { createHash, randomUUID } from 'node:crypto';\nimport {\n\tdirname,\n\tisAbsolute,\n\tjoin,\n\trelative,\n\tresolve,\n\tsep,\n\twin32\n} from 'node:path';\nimport {\n\tABSOLUTE_ANDROID_AVD_NAME,\n\tabsoluteManagedAndroidSdkRoot,\n\tdetectAbsoluteMobileHost,\n\tinspectAbsoluteMobileToolchain,\n\ttype AbsoluteMobileHost\n} from './emulatorDoctor';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\nimport { writeAbsoluteCapacitorConfig } from './capacitorProject';\nimport { getDurationString } from '../utils/getDurationString';\n\nconst ANDROID_BOOT_TIMEOUT_MS = 180_000;\nconst ANDROID_BOOT_POLL_MS = 1_000;\nconst DEV_JOURNAL_FORMAT = 1;\nconst NATIVE_CACHE_FORMAT = 1;\nconst HASH_RADIX = 16;\nconst EXECUTABLE_MODE_MASK = 0o111;\nconst NATIVE_PUBLIC_PATH_SEGMENTS = 5;\nconst CAPACITOR_PROJECT_DIRECTORY_PATTERN =\n\t/project\\(['\"](:[^'\"]+)['\"]\\)\\.projectDir\\s*=\\s*new File\\(['\"]([^'\"]+)['\"]\\)/gu;\n\nexport type AbsoluteAndroidCommandOptions = {\n\tcwd?: string;\n\tenv?: Record<string, string | undefined>;\n\tsignal?: AbortSignal;\n};\n\nexport type AbsoluteAndroidCommandResult = {\n\texitCode: number;\n\tstderr: string;\n\tstdout: string;\n};\n\nexport type AbsoluteAndroidDevState =\n\t| 'booting'\n\t| 'building'\n\t| 'closed'\n\t| 'closing'\n\t| 'configuring'\n\t| 'connecting'\n\t| 'failed'\n\t| 'forwarding'\n\t| 'installing'\n\t| 'checking-native'\n\t| 'launching'\n\t| 'ready'\n\t| 'streaming-logs'\n\t| 'syncing';\n\nexport type AbsoluteAndroidNativeLogEntry = {\n\tlevel: 'debug' | 'error' | 'fatal' | 'info' | 'verbose' | 'warn';\n\tmessage: string;\n\ttag: string;\n};\n\ntype AbsoluteAndroidLogStream = {\n\tclose: () => Promise<void>;\n};\n\ntype AndroidDevJournal = {\n\tbackupPath: string;\n\tformat: number;\n\tmanifestBackupPath?: string;\n\tnativeConfigPath: string;\n\tnativeManifestPath?: string;\n};\n\ntype AndroidNativeCache = {\n\tappId: string;\n\tfingerprint: string;\n\tformat: number;\n\tinstallations: Record<string, string>;\n};\n\ntype AndroidInstalledPackage = {\n\tidentity: string;\n\tuid?: string;\n};\n\nexport type AbsoluteAndroidDevProject = {\n\tadb: string;\n\tandroidRoot: string;\n\tcap: string;\n\tconfig: NormalizedAbsoluteMobileConfig;\n\temulator: string;\n\thost: AbsoluteMobileHost;\n\tnativeDirectory: string;\n\tprojectRoot: string;\n};\n\nexport type AbsoluteAndroidDevSession = {\n\tclose: () => Promise<void>;\n\tnativeCacheHit: boolean;\n\trebuild: () => Promise<AbsoluteAndroidDevSession>;\n\trelaunch: () => Promise<void>;\n\tserial: string;\n\tstate: AbsoluteAndroidDevState;\n\tstartedEmulator: boolean;\n\ttimings: Record<string, number>;\n};\n\nexport type AbsoluteAndroidDevPhaseTiming = {\n\tdurationMs: number;\n\tphase: AbsoluteAndroidDevState;\n\ttotalMs: number;\n};\n\nconst ANDROID_TIMING_PHASES: Array<[string, string]> = [\n\t['syncing', 'Capacitor sync'],\n\t['configuring', 'dev config'],\n\t['fingerprinting', 'fingerprint'],\n\t['booting', 'emulator'],\n\t['connecting', 'device ready'],\n\t['forwarding', 'ADB reverse'],\n\t['checking-native', 'package check'],\n\t['building', 'Gradle'],\n\t['installing', 'install'],\n\t['launching', 'launch'],\n\t['streaming-logs', 'logs']\n];\n\nconst androidTimingSummary = (timings: Record<string, number>) =>\n\tANDROID_TIMING_PHASES.map(([phase, label]) => {\n\t\tconst duration = timings[phase];\n\t\tif (duration === undefined || label === undefined) return null;\n\n\t\treturn `${label} ${getDurationString(duration)}`;\n\t})\n\t\t.filter((value): value is string => value !== null)\n\t\t.join(', ');\n\nexport type PrepareAbsoluteAndroidDevOptions = {\n\tcreateNativeProject: boolean;\n\tprojectRoot: string;\n\trun?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => Promise<number>;\n};\n\nexport type StartAbsoluteAndroidDevOptions = {\n\tcapture?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => AbsoluteAndroidCommandResult;\n\tlog?: (message: string) => void;\n\tnativeLog?: (entry: AbsoluteAndroidNativeLogEntry) => void;\n\tonPhaseTiming?: (timing: AbsoluteAndroidDevPhaseTiming) => void;\n\tonStateChange?: (state: AbsoluteAndroidDevState) => void;\n\thttps?: boolean;\n\tport: number;\n\tproject: AbsoluteAndroidDevProject;\n\trun?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => Promise<number>;\n\tsignal?: AbortSignal;\n\tsleep?: (milliseconds: number) => Promise<void>;\n\tspawn?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => void;\n\tstartNativeLogs?: (\n\t\tcommand: string[],\n\t\toptions: AbsoluteAndroidCommandOptions,\n\t\tonLine: (line: string) => void\n\t) => AbsoluteAndroidLogStream;\n};\n\nconst pathExists = async (path: string) => {\n\ttry {\n\t\tawait access(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst forwardCommandOutput = (\n\tstream: ReadableStream<Uint8Array>,\n\tdestination: NodeJS.WriteStream\n) =>\n\tstream.pipeTo(\n\t\tnew WritableStream({\n\t\t\twrite: (chunk) => {\n\t\t\t\tdestination.write(chunk);\n\t\t\t}\n\t\t})\n\t);\n\nconst runCommand = async (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions = {}\n) => {\n\tconst subprocess = Bun.spawn(command, {\n\t\tcwd: options.cwd,\n\t\tenv: options.env,\n\t\tsignal: options.signal,\n\t\tstderr: 'pipe',\n\t\tstdin: 'ignore',\n\t\tstdout: 'pipe'\n\t});\n\tconst [exitCode] = await Promise.all([\n\t\tsubprocess.exited,\n\t\tforwardCommandOutput(subprocess.stdout, process.stdout),\n\t\tforwardCommandOutput(subprocess.stderr, process.stderr)\n\t]);\n\n\treturn exitCode;\n};\n\nconst captureCommand = (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions = {}\n) => {\n\ttry {\n\t\tconst result = Bun.spawnSync(command, {\n\t\t\tcwd: options.cwd,\n\t\t\tenv: options.env,\n\t\t\tstderr: 'pipe',\n\t\t\tstdout: 'pipe'\n\t\t});\n\n\t\treturn {\n\t\t\texitCode: result.exitCode,\n\t\t\tstderr: result.stderr.toString(),\n\t\t\tstdout: result.stdout.toString()\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\texitCode: 1,\n\t\t\tstderr: error instanceof Error ? error.message : String(error),\n\t\t\tstdout: ''\n\t\t};\n\t}\n};\n\nconst spawnCommand = (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions = {}\n) => {\n\tBun.spawn(command, {\n\t\tcwd: options.cwd,\n\t\tenv: options.env,\n\t\tstderr: 'ignore',\n\t\tstdin: 'ignore',\n\t\tstdout: 'ignore'\n\t});\n};\n\nconst LOGCAT_LINE_PATTERN =\n\t/^\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}\\.\\d+\\s+\\d+\\s+\\d+\\s+([VDIWEF])\\s+([^:]+):\\s?(.*)$/u;\nconst ASCII_CONTROL_END = 31;\nconst ASCII_DELETE = 127;\nconst ASCII_ESCAPE = 27;\nconst ASCII_HORIZONTAL_TAB = 9;\nconst LOGCAT_MESSAGE_CAPTURE = 3;\nconst UNFOUND_INDEX = -1;\nconst ANSI_SEQUENCE_PATTERN = new RegExp(\n\t`${String.fromCharCode(ASCII_ESCAPE)}(?:\\\\[[0-?]*[ -/]*[@-~]|[@-_])`,\n\t'gu'\n);\nconst AUTHORIZATION_SECRET_PATTERN =\n\t/([\"']?(?:authorization|proxy-authorization)[\"']?\\s*[:=]\\s*)(?:Bearer|Basic)\\s+[^\\s,;]+/giu;\nconst BEARER_SECRET_PATTERN = /\\b(Bearer)\\s+[^\\s,;]+/giu;\nconst COOKIE_SECRET_PATTERN =\n\t/([\"']?(?:cookie|set-cookie)[\"']?\\s*[:=]\\s*).*/giu;\nconst NAMED_SECRET_PATTERN =\n\t/([\"']?(?:access_token|refresh_token|id_token|client_secret|password|code|token)[\"']?\\s*[:=]\\s*)(\"[^\"]*\"|'[^']*'|[^\\s&,;]+)/giu;\nconst QUERY_SECRET_PATTERN = /([?&](?:code|token)=)[^&\\s]+/giu;\n\nexport const redactAbsoluteAndroidLog = (value: string) =>\n\tvalue\n\t\t.replace(ANSI_SEQUENCE_PATTERN, '')\n\t\t.split('')\n\t\t.filter((character) => {\n\t\t\tconst code = character.charCodeAt(0);\n\n\t\t\treturn (\n\t\t\t\tcode === ASCII_HORIZONTAL_TAB ||\n\t\t\t\t(code > ASCII_CONTROL_END && code !== ASCII_DELETE)\n\t\t\t);\n\t\t})\n\t\t.join('')\n\t\t.replace(AUTHORIZATION_SECRET_PATTERN, '$1[REDACTED]')\n\t\t.replace(BEARER_SECRET_PATTERN, '$1 [REDACTED]')\n\t\t.replace(COOKIE_SECRET_PATTERN, '$1[REDACTED]')\n\t\t.replace(NAMED_SECRET_PATTERN, '$1[REDACTED]')\n\t\t.replace(QUERY_SECRET_PATTERN, '$1[REDACTED]');\n\nconst androidLogLevel = (level: string) => {\n\tif (level === 'V') return 'verbose';\n\tif (level === 'D') return 'debug';\n\tif (level === 'W') return 'warn';\n\tif (level === 'E') return 'error';\n\tif (level === 'F') return 'fatal';\n\n\treturn 'info';\n};\n\nconst emitCompleteLogLines = (\n\tvalue: string,\n\tonLine: (line: string) => void\n) => {\n\tlet buffered = value;\n\tlet newlineIndex = buffered.indexOf('\\n');\n\twhile (newlineIndex !== UNFOUND_INDEX) {\n\t\tonLine(buffered.slice(0, newlineIndex).replace(/\\r$/u, ''));\n\t\tbuffered = buffered.slice(newlineIndex + 1);\n\t\tnewlineIndex = buffered.indexOf('\\n');\n\t}\n\n\treturn buffered;\n};\n\nconst decodeLogStream = () => {\n\tconst decoder = new TextDecoder();\n\n\treturn new TransformStream<Uint8Array, string>({\n\t\tflush: (controller) => {\n\t\t\tconst remaining = decoder.decode();\n\t\t\tif (remaining) controller.enqueue(remaining);\n\t\t},\n\t\ttransform: (chunk, controller) => {\n\t\t\tconst decoded = decoder.decode(chunk, { stream: true });\n\t\t\tif (decoded) controller.enqueue(decoded);\n\t\t}\n\t});\n};\n\nexport const isIgnorableAbsoluteAndroidLog = (\n\tentry: AbsoluteAndroidNativeLogEntry\n) =>\n\tentry.tag === 'Capacitor/Console' &&\n\tentry.message.includes('Error injecting safe area CSS:') &&\n\tentry.message.includes(\"Cannot read properties of null (reading 'style')\");\nexport const parseAbsoluteAndroidLogLine = (\n\tline: string\n): AbsoluteAndroidNativeLogEntry | null => {\n\tconst sanitized = redactAbsoluteAndroidLog(line).trim();\n\tif (!sanitized) return null;\n\tconst match = LOGCAT_LINE_PATTERN.exec(sanitized);\n\tif (!match) {\n\t\treturn { level: 'info', message: sanitized, tag: 'logcat' };\n\t}\n\n\treturn {\n\t\tlevel: androidLogLevel(match[1] ?? 'I'),\n\t\tmessage: match[LOGCAT_MESSAGE_CAPTURE] ?? '',\n\t\ttag: match[2]?.trim() || 'android'\n\t};\n};\n\nconst consumeLogLines = async (\n\tstream: ReadableStream<Uint8Array>,\n\tonLine: (line: string) => void\n) => {\n\tlet buffered = '';\n\tawait stream.pipeThrough(decodeLogStream()).pipeTo(\n\t\tnew WritableStream({\n\t\t\twrite: (chunk) => {\n\t\t\t\tbuffered = emitCompleteLogLines(buffered + chunk, onLine);\n\t\t\t}\n\t\t})\n\t);\n\tif (buffered) {\n\t\tonLine(buffered.replace(/\\r$/u, ''));\n\t}\n};\n\nconst startNativeLogStream = (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions,\n\tonLine: (line: string) => void\n): AbsoluteAndroidLogStream => {\n\tconst subprocess = Bun.spawn(command, {\n\t\tenv: options.env,\n\t\tstderr: 'pipe',\n\t\tstdin: 'ignore',\n\t\tstdout: 'pipe'\n\t});\n\tconst output = Promise.all([\n\t\tconsumeLogLines(subprocess.stdout, onLine),\n\t\tconsumeLogLines(subprocess.stderr, onLine)\n\t]);\n\tvoid output.catch(() => undefined);\n\n\treturn {\n\t\tclose: async () => {\n\t\t\ttry {\n\t\t\t\tsubprocess.kill();\n\t\t\t} catch {\n\t\t\t\t/* logcat already exited */\n\t\t\t}\n\t\t\tawait Promise.all([\n\t\t\t\tsubprocess.exited.catch(() => undefined),\n\t\t\t\toutput.catch(() => undefined)\n\t\t\t]);\n\t\t}\n\t};\n};\n\nconst requireSuccess = async (\n\tcommand: string[],\n\tlabel: string,\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>,\n\toptions?: AbsoluteAndroidCommandOptions\n) => {\n\tconst exitCode = await run(command, options);\n\tthrowIfAborted(options?.signal);\n\tif (exitCode !== 0) throw new Error(`${label} failed (exit ${exitCode}).`);\n};\n\nconst throwIfAborted = (signal?: AbortSignal) => {\n\tif (!signal?.aborted) return;\n\tthrow new DOMException(\n\t\t'Android development startup was cancelled.',\n\t\t'AbortError'\n\t);\n};\n\nconst journalPaths = (projectRoot: string) => {\n\tconst root = join(projectRoot, '.absolutejs', 'mobile', 'dev-session');\n\n\treturn {\n\t\tbackup: join(root, 'capacitor.config.backup.json'),\n\t\tjournal: join(root, 'journal.json'),\n\t\tmanifestBackup: join(root, 'AndroidManifest.backup.xml'),\n\t\troot\n\t};\n};\n\nconst isInside = (root: string, path: string) => {\n\tconst resolvedRoot = resolve(root);\n\tconst resolvedPath = resolve(path);\n\tconst relativePath = relative(resolvedRoot, resolvedPath);\n\n\treturn (\n\t\trelativePath === '' ||\n\t\t(relativePath !== '..' &&\n\t\t\t!relativePath.startsWith(`..${sep}`) &&\n\t\t\t!isAbsolute(relativePath))\n\t);\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst nativeCachePath = (projectRoot: string) =>\n\tjoin(projectRoot, '.absolutejs', 'mobile', 'cache', 'android-debug.json');\n\nconst parseNativeCache = (value: unknown): AndroidNativeCache | null => {\n\tif (!isRecord(value)) return null;\n\tconst { appId, fingerprint, format, installations } = value;\n\tif (\n\t\tformat !== NATIVE_CACHE_FORMAT ||\n\t\ttypeof appId !== 'string' ||\n\t\ttypeof fingerprint !== 'string' ||\n\t\t!isRecord(installations) ||\n\t\t!Object.values(installations).every(\n\t\t\t(identity) => typeof identity === 'string'\n\t\t)\n\t) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tappId,\n\t\tfingerprint,\n\t\tformat,\n\t\tinstallations: Object.fromEntries(\n\t\t\tObject.entries(installations).map(([serial, identity]) => [\n\t\t\t\tserial,\n\t\t\t\tString(identity)\n\t\t\t])\n\t\t)\n\t};\n};\n\nconst readNativeCache = async (projectRoot: string) =>\n\treadFile(nativeCachePath(projectRoot), 'utf8')\n\t\t.then((source) => parseNativeCache(JSON.parse(source)))\n\t\t.catch(() => null);\n\nconst writeNativeCache = async (\n\tprojectRoot: string,\n\tcache: AndroidNativeCache\n) => {\n\tconst destination = nativeCachePath(projectRoot);\n\tconst temporary = `${destination}.${process.pid}.${randomUUID()}.tmp`;\n\tawait mkdir(dirname(destination), { recursive: true });\n\ttry {\n\t\tawait writeFile(temporary, `${JSON.stringify(cache, null, '\\t')}\\n`, {\n\t\t\tflag: 'wx'\n\t\t});\n\t\tawait rename(temporary, destination);\n\t} finally {\n\t\tawait rm(temporary, { force: true }).catch(() => undefined);\n\t}\n};\n\nconst nativeDependencySources = async (nativeDirectory: string) => {\n\tconst settings = await readFile(\n\t\tjoin(nativeDirectory, 'capacitor.settings.gradle'),\n\t\t'utf8'\n\t);\n\tconst pattern = new RegExp(\n\t\tCAPACITOR_PROJECT_DIRECTORY_PATTERN.source,\n\t\tCAPACITOR_PROJECT_DIRECTORY_PATTERN.flags\n\t);\n\tconst dependencies = [...settings.matchAll(pattern)].map((match) => ({\n\t\tname: (match[1] ?? '').slice(1).replaceAll(/[^a-zA-Z0-9_.-]/gu, '_'),\n\t\tsource: resolve(nativeDirectory, match[2] ?? '')\n\t}));\n\tif (dependencies.length === 0) {\n\t\tthrow new Error(\n\t\t\t'Capacitor Android settings did not declare any native dependencies.'\n\t\t);\n\t}\n\n\treturn { dependencies, settings };\n};\n\nconst shouldIgnoreNativePath = (\n\trelativePath: string,\n\tignorePublicBundle: boolean\n) => {\n\tconst parts = relativePath.split(sep);\n\tif (\n\t\tparts.includes('.gradle') ||\n\t\tparts.includes('build') ||\n\t\tparts.includes('.absolutejs-dependencies')\n\t) {\n\t\treturn true;\n\t}\n\n\treturn (\n\t\tignorePublicBundle &&\n\t\tparts.slice(0, NATIVE_PUBLIC_PATH_SEGMENTS).join('/') ===\n\t\t\t'app/src/main/assets/public'\n\t);\n};\n\ntype NativeDirectoryCollector = (\n\troot: string,\n\tlabel: string,\n\tdirectory: string,\n\tignorePublicBundle: boolean\n) => Promise<string[]>;\n\nconst collectNativePath = async (\n\troot: string,\n\tlabel: string,\n\tpath: string,\n\tisDirectory: boolean,\n\tisFile: boolean,\n\tisSymbolicLink: boolean,\n\tignorePublicBundle: boolean\n) => {\n\tconst relativePath = relative(root, path);\n\tif (shouldIgnoreNativePath(relativePath, ignorePublicBundle)) return [];\n\tconst identity = `${label}:${relativePath.split(sep).join('/')}\\0`;\n\tif (isDirectory) {\n\t\treturn collectNativeDirectory(root, label, path, ignorePublicBundle);\n\t}\n\tif (isSymbolicLink) {\n\t\treturn [`link\\0${identity}${await readlink(path)}\\0`];\n\t}\n\tif (!isFile) return [];\n\tconst [metadata, contents] = await Promise.all([\n\t\tlstat(path),\n\t\treadFile(path)\n\t]);\n\tconst contentDigest = createHash('sha256').update(contents).digest('hex');\n\n\treturn [\n\t\t`file\\0${identity}${metadata.mode & EXECUTABLE_MODE_MASK}\\0${contentDigest}\\0`\n\t];\n};\n\nconst collectNativeDirectory: NativeDirectoryCollector = async (\n\troot,\n\tlabel,\n\tdirectory,\n\tignorePublicBundle\n) => {\n\tconst entries = await readdir(directory, { withFileTypes: true });\n\tentries.sort((left, right) => left.name.localeCompare(right.name));\n\tconst records = await Promise.all(\n\t\tentries.map((entry) =>\n\t\t\tcollectNativePath(\n\t\t\t\troot,\n\t\t\t\tlabel,\n\t\t\t\tjoin(directory, entry.name),\n\t\t\t\tentry.isDirectory(),\n\t\t\t\tentry.isFile(),\n\t\t\t\tentry.isSymbolicLink(),\n\t\t\t\tignorePublicBundle\n\t\t\t)\n\t\t)\n\t);\n\n\treturn records.flat();\n};\n\nconst hashNativeTree = async (\n\troot: string,\n\tlabel: string,\n\tignorePublicBundle: boolean\n) => {\n\tconst resolvedRoot = await realpath(root);\n\tconst records = await collectNativeDirectory(\n\t\tresolvedRoot,\n\t\tlabel,\n\t\tresolvedRoot,\n\t\tignorePublicBundle\n\t);\n\n\treturn createHash('sha256').update(records.join('')).digest('hex');\n};\n\ntype NativeFingerprintRoot = {\n\tignorePublicBundle: boolean;\n\tlabel: string;\n\tsource: string;\n};\n\nexport const fingerprintAbsoluteAndroidNativeProject = async (\n\tproject: Pick<AbsoluteAndroidDevProject, 'nativeDirectory'>\n) => {\n\tconst { dependencies } = await nativeDependencySources(\n\t\tproject.nativeDirectory\n\t);\n\tconst roots: NativeFingerprintRoot[] = [\n\t\t{\n\t\t\tignorePublicBundle: true,\n\t\t\tlabel: 'android',\n\t\t\tsource: project.nativeDirectory\n\t\t},\n\t\t...dependencies\n\t\t\t.sort((left, right) => left.name.localeCompare(right.name))\n\t\t\t.map((dependency) => ({\n\t\t\t\tignorePublicBundle: false,\n\t\t\t\tlabel: `dependency:${dependency.name}`,\n\t\t\t\tsource: dependency.source\n\t\t\t}))\n\t];\n\tconst treeDigests = await Promise.all(\n\t\troots.map((root) =>\n\t\t\thashNativeTree(root.source, root.label, root.ignorePublicBundle)\n\t\t)\n\t);\n\n\treturn createHash('sha256').update(treeDigests.join('\\0')).digest('hex');\n};\n\nconst parseJournal = (value: unknown): AndroidDevJournal | null => {\n\tif (typeof value !== 'object' || value === null) return null;\n\tconst backupPath = Reflect.get(value, 'backupPath');\n\tconst format = Reflect.get(value, 'format');\n\tconst manifestBackupPath = Reflect.get(value, 'manifestBackupPath');\n\tconst nativeConfigPath = Reflect.get(value, 'nativeConfigPath');\n\tconst nativeManifestPath = Reflect.get(value, 'nativeManifestPath');\n\tif (\n\t\ttypeof backupPath !== 'string' ||\n\t\tformat !== DEV_JOURNAL_FORMAT ||\n\t\ttypeof nativeConfigPath !== 'string'\n\t) {\n\t\treturn null;\n\t}\n\tif (\n\t\t(manifestBackupPath !== undefined ||\n\t\t\tnativeManifestPath !== undefined) &&\n\t\t(typeof manifestBackupPath !== 'string' ||\n\t\t\ttypeof nativeManifestPath !== 'string')\n\t) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tbackupPath,\n\t\tformat,\n\t\tmanifestBackupPath,\n\t\tnativeConfigPath,\n\t\tnativeManifestPath\n\t};\n};\n\nexport const repairAbsoluteAndroidDevSession = async (projectRoot: string) => {\n\tconst paths = journalPaths(projectRoot);\n\tif (!(await pathExists(paths.journal))) {\n\t\tawait rm(paths.root, { force: true, recursive: true });\n\n\t\treturn false;\n\t}\n\tconst journal = await readFile(paths.journal, 'utf8')\n\t\t.then((source) => parseJournal(JSON.parse(source)))\n\t\t.catch(() => null);\n\tif (\n\t\t!journal ||\n\t\t!isInside(projectRoot, journal.nativeConfigPath) ||\n\t\t!isInside(paths.root, journal.backupPath) ||\n\t\t(journal.nativeManifestPath !== undefined &&\n\t\t\t!isInside(projectRoot, journal.nativeManifestPath)) ||\n\t\t(journal.manifestBackupPath !== undefined &&\n\t\t\t!isInside(paths.root, journal.manifestBackupPath))\n\t) {\n\t\tthrow new Error(\n\t\t\t`Refusing unsafe or invalid mobile dev journal at ${paths.journal}.`\n\t\t);\n\t}\n\tif (await pathExists(journal.backupPath)) {\n\t\tawait mkdir(dirname(journal.nativeConfigPath), { recursive: true });\n\t\tawait copyFile(journal.backupPath, journal.nativeConfigPath);\n\t}\n\tif (\n\t\tjournal.manifestBackupPath &&\n\t\tjournal.nativeManifestPath &&\n\t\t(await pathExists(journal.manifestBackupPath))\n\t) {\n\t\tawait mkdir(dirname(journal.nativeManifestPath), { recursive: true });\n\t\tawait copyFile(journal.manifestBackupPath, journal.nativeManifestPath);\n\t}\n\tawait rm(paths.root, { force: true, recursive: true });\n\n\treturn true;\n};\n\nconst androidDevelopmentManifest = (source: string, cleartext: boolean) => {\n\tif (!cleartext) return source;\n\tif (/android:usesCleartextTraffic=[\"'][^\"']*[\"']/u.test(source)) {\n\t\treturn source.replace(\n\t\t\t/android:usesCleartextTraffic=[\"'][^\"']*[\"']/u,\n\t\t\t'android:usesCleartextTraffic=\"true\"'\n\t\t);\n\t}\n\n\treturn source.replace(\n\t\t'<application',\n\t\t'<application\\n android:usesCleartextTraffic=\"true\"'\n\t);\n};\n\nconst writeDevConfig = async (\n\tprojectRoot: string,\n\tnativeConfigPath: string,\n\tnativeManifestPath: string,\n\tport: number,\n\thttps: boolean,\n\tentry: string\n) => {\n\tconst paths = journalPaths(projectRoot);\n\tawait repairAbsoluteAndroidDevSession(projectRoot);\n\tconst source = await readFile(nativeConfigPath, 'utf8');\n\tconst manifestSource = await readFile(nativeManifestPath, 'utf8');\n\tconst parsed: unknown = JSON.parse(source);\n\tif (!isRecord(parsed)) {\n\t\tthrow new Error(\n\t\t\t`Invalid Capacitor native config at ${nativeConfigPath}.`\n\t\t);\n\t}\n\tawait mkdir(paths.root, { recursive: true });\n\tawait writeFile(paths.backup, source, { flag: 'wx' });\n\tawait writeFile(paths.manifestBackup, manifestSource, { flag: 'wx' });\n\tconst journal: AndroidDevJournal = {\n\t\tbackupPath: paths.backup,\n\t\tformat: DEV_JOURNAL_FORMAT,\n\t\tmanifestBackupPath: paths.manifestBackup,\n\t\tnativeConfigPath,\n\t\tnativeManifestPath\n\t};\n\tawait writeFile(paths.journal, `${JSON.stringify(journal, null, '\\t')}\\n`, {\n\t\tflag: 'wx'\n\t});\n\tconst currentServer = parsed.server;\n\tconst developmentUrl = new URL(\n\t\t`${https ? 'https' : 'http'}://localhost:${port}${entry}`\n\t);\n\tdevelopmentUrl.searchParams.set('__absolute_target', 'capacitor-android');\n\tparsed.server = {\n\t\t...(typeof currentServer === 'object' && currentServer !== null\n\t\t\t? currentServer\n\t\t\t: {}),\n\t\tcleartext: !https,\n\t\turl: developmentUrl.href\n\t};\n\tawait writeFile(\n\t\tnativeConfigPath,\n\t\t`${JSON.stringify(parsed, null, '\\t')}\\n`\n\t);\n\tawait writeFile(\n\t\tnativeManifestPath,\n\t\tandroidDevelopmentManifest(manifestSource, !https)\n\t);\n};\n\nexport const parseAdbDevices = (output: string) =>\n\toutput\n\t\t.split(/\\r?\\n/)\n\t\t.slice(1)\n\t\t.map((line) => line.trim().split(/\\s+/, 2))\n\t\t.filter(\n\t\t\t(parts): parts is [string, string] =>\n\t\t\t\tparts.length === 2 && parts[1] === 'device'\n\t\t)\n\t\t.map(([serial]) => serial);\n\nconst isManagedEmulatorSerial = (\n\tserial: string,\n\tadb: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tif (!serial.startsWith('emulator-')) return false;\n\tconst avd = capture([adb, '-s', serial, 'emu', 'avd', 'name'], { env });\n\n\treturn (\n\t\tavd.exitCode === 0 &&\n\t\tavd.stdout\n\t\t\t.split(/\\r?\\n/)\n\t\t\t.map((value) => value.trim())\n\t\t\t.includes(ABSOLUTE_ANDROID_AVD_NAME)\n\t);\n};\n\nconst managedEmulatorSerial = (\n\tadb: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst devices = capture([adb, 'devices'], { env });\n\tif (devices.exitCode !== 0) return undefined;\n\n\treturn parseAdbDevices(devices.stdout).find((serial) =>\n\t\tisManagedEmulatorSerial(serial, adb, capture, env)\n\t);\n};\n\nconst completedBootSerial = (\n\tproject: AbsoluteAndroidDevProject,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst serial = managedEmulatorSerial(project.adb, capture, env);\n\tif (!serial) return undefined;\n\tconst booted = capture(\n\t\t[project.adb, '-s', serial, 'shell', 'getprop', 'sys.boot_completed'],\n\t\t{ env }\n\t);\n\n\treturn booted.exitCode === 0 && booted.stdout.trim() === '1'\n\t\t? serial\n\t\t: undefined;\n};\n\nconst preferredCompletedBootSerial = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst booted = capture(\n\t\t[project.adb, '-s', serial, 'shell', 'getprop', 'sys.boot_completed'],\n\t\t{ env }\n\t);\n\n\treturn booted.exitCode === 0 && booted.stdout.trim() === '1'\n\t\t? serial\n\t\t: undefined;\n};\n\nconst waitForManagedEmulator = async (\n\tproject: AbsoluteAndroidDevProject,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tsleep: NonNullable<StartAbsoluteAndroidDevOptions['sleep']>,\n\tenv: Record<string, string | undefined>,\n\tsignal?: AbortSignal,\n\tpreferredSerial?: string\n) => {\n\tconst deadline = Date.now() + ANDROID_BOOT_TIMEOUT_MS;\n\tlet firstSerial = preferredSerial;\n\tconst poll = async () => {\n\t\tthrowIfAborted(signal);\n\t\tconst serial = firstSerial\n\t\t\t? preferredCompletedBootSerial(project, firstSerial, capture, env)\n\t\t\t: completedBootSerial(project, capture, env);\n\t\tfirstSerial = undefined;\n\t\tif (serial) return serial;\n\t\tif (Date.now() >= deadline) {\n\t\t\tthrow new Error(\n\t\t\t\t`Android emulator ${ABSOLUTE_ANDROID_AVD_NAME} did not finish booting within ${ANDROID_BOOT_TIMEOUT_MS / ANDROID_BOOT_POLL_MS}s.`\n\t\t\t);\n\t\t}\n\t\tawait sleep(ANDROID_BOOT_POLL_MS);\n\n\t\treturn poll();\n\t};\n\n\treturn poll();\n};\n\nconst windowsPathFromWsl = (\n\tpath: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>\n) => {\n\tconst result = capture(['wslpath', '-w', path]);\n\tif (result.exitCode !== 0 || !result.stdout.trim()) {\n\t\tthrow new Error(`Could not translate WSL path for Windows: ${path}`);\n\t}\n\n\treturn result.stdout.trim();\n};\n\ntype WindowsGradleDependency = {\n\tname: string;\n\twindowsSource: string;\n};\n\nconst mirroredCapacitorDependencies = async (\n\tproject: Pick<AbsoluteAndroidDevProject, 'nativeDirectory'>,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>\n) => {\n\tconst settingsPath = join(\n\t\tproject.nativeDirectory,\n\t\t'capacitor.settings.gradle'\n\t);\n\tconst settings = await readFile(settingsPath, 'utf8');\n\tconst dependencies: WindowsGradleDependency[] = [];\n\tconst rewrittenSettings = settings.replace(\n\t\tCAPACITOR_PROJECT_DIRECTORY_PATTERN,\n\t\t(_statement, projectName: string, sourcePath: string) => {\n\t\t\tconst name = projectName\n\t\t\t\t.slice(1)\n\t\t\t\t.replaceAll(/[^a-zA-Z0-9_.-]/gu, '_');\n\t\t\tconst source = resolve(project.nativeDirectory, sourcePath);\n\t\t\tdependencies.push({\n\t\t\t\tname,\n\t\t\t\twindowsSource: windowsPathFromWsl(source, capture)\n\t\t\t});\n\n\t\t\treturn `project('${projectName}').projectDir = new File('./.absolutejs-dependencies/${name}')`;\n\t\t}\n\t);\n\tif (dependencies.length === 0) {\n\t\tthrow new Error(\n\t\t\t'Capacitor Android settings did not declare any native dependencies.'\n\t\t);\n\t}\n\n\treturn { dependencies, rewrittenSettings };\n};\n\nconst encodedWindowsGradleCommand = (\n\twindowsSource: string,\n\twindowsDirectory: string,\n\twindowsAndroidRoot: string,\n\tdependencies: WindowsGradleDependency[],\n\trewrittenSettings: string,\n\ttask: AbsoluteAndroidGradleTask,\n\tgradleArguments: readonly string[]\n) => {\n\tconst sourceDirectory = Buffer.from(windowsSource, 'utf8').toString(\n\t\t'base64'\n\t);\n\tconst buildDirectory = Buffer.from(windowsDirectory, 'utf8').toString(\n\t\t'base64'\n\t);\n\tconst androidRoot = Buffer.from(windowsAndroidRoot, 'utf8').toString(\n\t\t'base64'\n\t);\n\tconst dependencyData = Buffer.from(\n\t\tJSON.stringify(dependencies),\n\t\t'utf8'\n\t).toString('base64');\n\tconst settingsData = Buffer.from(rewrittenSettings, 'utf8').toString(\n\t\t'base64'\n\t);\n\tconst argumentsData = Buffer.from(\n\t\tJSON.stringify(gradleArguments),\n\t\t'utf8'\n\t).toString('base64');\n\tconst source = [\n\t\t\"$ErrorActionPreference = 'Stop'\",\n\t\t`$source = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${sourceDirectory}'))`,\n\t\t`$directory = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${buildDirectory}'))`,\n\t\t`$androidHome = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${androidRoot}'))`,\n\t\t`$dependencies = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${dependencyData}')) | ConvertFrom-Json`,\n\t\t`$settings = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${settingsData}'))`,\n\t\t`$gradleArguments = @([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${argumentsData}')) | ConvertFrom-Json)`,\n\t\t'$env:ANDROID_HOME = $androidHome',\n\t\t'$env:ANDROID_SDK_ROOT = $androidHome',\n\t\t'New-Item -ItemType Directory -Force -Path $directory | Out-Null',\n\t\t'& robocopy.exe $source $directory /MIR /XD .gradle build .absolutejs-dependencies /NFL /NDL /NJH /NJS /NP',\n\t\t'$copyExit = $LASTEXITCODE',\n\t\t'if ($copyExit -ge 8) { exit $copyExit }',\n\t\t\"foreach ($dependency in @($dependencies)) { $target = Join-Path $directory ('.absolutejs-dependencies\\\\' + $dependency.name); New-Item -ItemType Directory -Force -Path $target | Out-Null; & robocopy.exe $dependency.windowsSource $target /MIR /XD .gradle build /NFL /NDL /NJH /NJS /NP; if ($LASTEXITCODE -ge 8) { exit $LASTEXITCODE } }\",\n\t\t\"[IO.File]::WriteAllText((Join-Path $directory 'capacitor.settings.gradle'), $settings)\",\n\t\t\"$wrapper = Join-Path $directory 'gradlew.bat'\",\n\t\t`& $wrapper --no-daemon --console=plain -p $directory @gradleArguments ${task}`,\n\t\t'if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }',\n\t\t'exit 0'\n\t].join('; ');\n\n\treturn Buffer.from(source, 'utf16le').toString('base64');\n};\n\nexport type AbsoluteAndroidGradleTask =\n\t| 'assembleDebug'\n\t| 'assembleRelease'\n\t| 'bundleRelease';\n\nexport type BuildAbsoluteAndroidGradleOptions = {\n\tcapture?: NonNullable<StartAbsoluteAndroidDevOptions['capture']>;\n\tenv?: Record<string, string | undefined>;\n\tgradleArguments?: readonly string[];\n\tproject: Pick<\n\t\tAbsoluteAndroidDevProject,\n\t\t'androidRoot' | 'config' | 'host' | 'nativeDirectory' | 'projectRoot'\n\t>;\n\trun?: NonNullable<StartAbsoluteAndroidDevOptions['run']>;\n\tsignal?: AbortSignal;\n\ttask: AbsoluteAndroidGradleTask;\n};\n\nconst gradleArtifactPath = (\n\tnativeDirectory: string,\n\ttask: AbsoluteAndroidGradleTask,\n\twindows = false\n) => {\n\tconst pathJoin = windows ? win32.join : join;\n\tif (task === 'assembleDebug') {\n\t\treturn pathJoin(\n\t\t\tnativeDirectory,\n\t\t\t'app',\n\t\t\t'build',\n\t\t\t'outputs',\n\t\t\t'apk',\n\t\t\t'debug',\n\t\t\t'app-debug.apk'\n\t\t);\n\t}\n\tif (task === 'assembleRelease') {\n\t\treturn pathJoin(\n\t\t\tnativeDirectory,\n\t\t\t'app',\n\t\t\t'build',\n\t\t\t'outputs',\n\t\t\t'apk',\n\t\t\t'release',\n\t\t\t'app-release.apk'\n\t\t);\n\t}\n\n\treturn pathJoin(\n\t\tnativeDirectory,\n\t\t'app',\n\t\t'build',\n\t\t'outputs',\n\t\t'bundle',\n\t\t'release',\n\t\t'app-release.aab'\n\t);\n};\n\nconst resolveGradleArtifactPath = async (\n\tnativeDirectory: string,\n\ttask: AbsoluteAndroidGradleTask\n) => {\n\tconst primary = gradleArtifactPath(nativeDirectory, task);\n\tif (task !== 'assembleRelease' || (await pathExists(primary))) {\n\t\treturn primary;\n\t}\n\n\treturn join(\n\t\tnativeDirectory,\n\t\t'app',\n\t\t'build',\n\t\t'outputs',\n\t\t'apk',\n\t\t'release',\n\t\t'app-release-unsigned.apk'\n\t);\n};\n\nexport const buildAbsoluteAndroidGradleArtifact = async (\n\toptions: BuildAbsoluteAndroidGradleOptions\n) => {\n\tconst { project, task } = options;\n\tconst capture = options.capture ?? captureCommand;\n\tconst run = options.run ?? runCommand;\n\tconst env = options.env ?? process.env;\n\tconst gradleArguments = options.gradleArguments ?? [];\n\tif (project.host === 'wsl') {\n\t\tconst windowsSource = windowsPathFromWsl(\n\t\t\tproject.nativeDirectory,\n\t\t\tcapture\n\t\t);\n\t\tconst buildId = Bun.hash(project.projectRoot).toString(HASH_RADIX);\n\t\tconst managedBuildDirectory = resolve(\n\t\t\tproject.androidRoot,\n\t\t\t'..',\n\t\t\t'..',\n\t\t\t'Builds',\n\t\t\t`${project.config.appId}-${buildId}`\n\t\t);\n\t\tconst windowsDirectory = windowsPathFromWsl(\n\t\t\tmanagedBuildDirectory,\n\t\t\tcapture\n\t\t);\n\t\tconst windowsAndroidRoot = windowsPathFromWsl(\n\t\t\tproject.androidRoot,\n\t\t\tcapture\n\t\t);\n\t\tconst { dependencies, rewrittenSettings } =\n\t\t\tawait mirroredCapacitorDependencies(project, capture);\n\t\tawait requireSuccess(\n\t\t\t[\n\t\t\t\t'powershell.exe',\n\t\t\t\t'-NoProfile',\n\t\t\t\t'-EncodedCommand',\n\t\t\t\tencodedWindowsGradleCommand(\n\t\t\t\t\twindowsSource,\n\t\t\t\t\twindowsDirectory,\n\t\t\t\t\twindowsAndroidRoot,\n\t\t\t\t\tdependencies,\n\t\t\t\t\trewrittenSettings,\n\t\t\t\t\ttask,\n\t\t\t\t\tgradleArguments\n\t\t\t\t)\n\t\t\t],\n\t\t\t'Android Gradle build',\n\t\t\trun,\n\t\t\t{ env, signal: options.signal }\n\t\t);\n\n\t\tconst artifactPath = await resolveGradleArtifactPath(\n\t\t\tmanagedBuildDirectory,\n\t\t\ttask\n\t\t);\n\t\tconst unsigned = artifactPath.endsWith('-unsigned.apk');\n\n\t\treturn {\n\t\t\tartifactPath,\n\t\t\tinstallPath: unsigned\n\t\t\t\t? win32.join(\n\t\t\t\t\t\twindowsDirectory,\n\t\t\t\t\t\t'app',\n\t\t\t\t\t\t'build',\n\t\t\t\t\t\t'outputs',\n\t\t\t\t\t\t'apk',\n\t\t\t\t\t\t'release',\n\t\t\t\t\t\t'app-release-unsigned.apk'\n\t\t\t\t\t)\n\t\t\t\t: gradleArtifactPath(windowsDirectory, task, true)\n\t\t};\n\t}\n\tconst wrapper = project.host === 'windows' ? 'gradlew.bat' : './gradlew';\n\tawait requireSuccess(\n\t\t[wrapper, '--no-daemon', '--console=plain', ...gradleArguments, task],\n\t\t'Android Gradle build',\n\t\trun,\n\t\t{ cwd: project.nativeDirectory, env, signal: options.signal }\n\t);\n\n\tconst artifactPath = await resolveGradleArtifactPath(\n\t\tproject.nativeDirectory,\n\t\ttask\n\t);\n\n\treturn { artifactPath, installPath: artifactPath };\n};\n\nconst buildAndroidDebugApp = async (\n\tproject: AbsoluteAndroidDevProject,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>,\n\tenv: Record<string, string | undefined>,\n\tsignal?: AbortSignal\n) =>\n\t(\n\t\tawait buildAbsoluteAndroidGradleArtifact({\n\t\t\tcapture,\n\t\t\tenv,\n\t\t\tproject,\n\t\t\trun,\n\t\t\tsignal,\n\t\t\ttask: 'assembleDebug'\n\t\t})\n\t).installPath;\n\ntype EnsureAndroidDebugAppOptions = {\n\tcache: AndroidNativeCache | null;\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>;\n\tenv: Record<string, string | undefined>;\n\tfingerprint: string;\n\tlog: NonNullable<StartAbsoluteAndroidDevOptions['log']>;\n\tproject: AbsoluteAndroidDevProject;\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>;\n\tserial: string;\n\tsignal?: AbortSignal;\n\ttransition: (state: AbsoluteAndroidDevState) => void;\n};\n\nconst persistInstalledAndroidNativeCache = async (\n\toptions: EnsureAndroidDebugAppOptions,\n\tinstalled: AndroidInstalledPackage | undefined\n) => {\n\tif (!installed) {\n\t\toptions.log(\n\t\t\t'Android package identity was unavailable; the next session will rebuild safely.'\n\t\t);\n\n\t\treturn;\n\t}\n\tconst installations =\n\t\toptions.cache?.appId === options.project.config.appId &&\n\t\toptions.cache.fingerprint === options.fingerprint\n\t\t\t? { ...options.cache.installations }\n\t\t\t: {};\n\tinstallations[options.serial] = installed.identity;\n\tawait writeNativeCache(options.project.projectRoot, {\n\t\tappId: options.project.config.appId,\n\t\tfingerprint: options.fingerprint,\n\t\tformat: NATIVE_CACHE_FORMAT,\n\t\tinstallations\n\t}).catch((error) => {\n\t\toptions.log(\n\t\t\t`Android native cache could not be saved: ${error instanceof Error ? error.message : String(error)}`\n\t\t);\n\t});\n};\n\nconst ensureAndroidDebugApp = async (options: EnsureAndroidDebugAppOptions) => {\n\tconst installed = androidInstalledPackageIdentity(\n\t\toptions.project,\n\t\toptions.serial,\n\t\toptions.capture,\n\t\toptions.env\n\t);\n\tconst cacheHit =\n\t\toptions.cache?.appId === options.project.config.appId &&\n\t\toptions.cache.fingerprint === options.fingerprint &&\n\t\tinstalled !== undefined &&\n\t\toptions.cache.installations[options.serial] === installed.identity;\n\tif (cacheHit) {\n\t\toptions.log(\n\t\t\t`Android native app is unchanged on ${options.serial}; skipped Gradle build and APK install.`\n\t\t);\n\n\t\treturn { nativeCacheHit: true, uid: installed.uid };\n\t}\n\toptions.log(\n\t\t'Android native inputs changed or the installed app is stale; rebuilding.'\n\t);\n\toptions.transition('building');\n\tconst installPath = await buildAndroidDebugApp(\n\t\toptions.project,\n\t\toptions.capture,\n\t\toptions.run,\n\t\toptions.env,\n\t\toptions.signal\n\t);\n\tthrowIfAborted(options.signal);\n\toptions.transition('installing');\n\tawait requireSuccess(\n\t\t[\n\t\t\toptions.project.adb,\n\t\t\t'-s',\n\t\t\toptions.serial,\n\t\t\t'install',\n\t\t\t'-r',\n\t\t\tinstallPath\n\t\t],\n\t\t'Android app installation',\n\t\toptions.run,\n\t\t{ env: options.env, signal: options.signal }\n\t);\n\tconst updated = androidInstalledPackageIdentity(\n\t\toptions.project,\n\t\toptions.serial,\n\t\toptions.capture,\n\t\toptions.env\n\t);\n\tawait persistInstalledAndroidNativeCache(options, updated);\n\n\treturn { nativeCacheHit: false, uid: updated?.uid };\n};\n\nconst startManagedEmulatorIfNeeded = (\n\tproject: AbsoluteAndroidDevProject,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tspawn: NonNullable<StartAbsoluteAndroidDevOptions['spawn']>,\n\tlog: NonNullable<StartAbsoluteAndroidDevOptions['log']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst serial = managedEmulatorSerial(project.adb, capture, env);\n\tif (serial) return { serial, started: false };\n\tlog(`Starting Android emulator ${ABSOLUTE_ANDROID_AVD_NAME}...`);\n\tspawn(\n\t\t[\n\t\t\tproject.emulator,\n\t\t\t'-avd',\n\t\t\tABSOLUTE_ANDROID_AVD_NAME,\n\t\t\t'-netdelay',\n\t\t\t'none',\n\t\t\t'-netspeed',\n\t\t\t'full'\n\t\t],\n\t\t{ env }\n\t);\n\n\treturn { serial: undefined, started: true };\n};\n\nconst logHttpsCertificateRequirement = (\n\thttps: boolean | undefined,\n\tlog: NonNullable<StartAbsoluteAndroidDevOptions['log']>\n) => {\n\tif (https !== true) return;\n\tlog(\n\t\t'Android HMR is using HTTPS; the emulator must trust the local development certificate authority.'\n\t);\n};\n\nconst removeAdbReverse = async (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string | undefined,\n\tport: number,\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tif (!serial) return;\n\tawait run(\n\t\t[project.adb, '-s', serial, 'reverse', '--remove', `tcp:${port}`],\n\t\t{ env }\n\t).catch(() => undefined);\n};\n\nconst androidLaunchCommand = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string\n) => [\n\tproject.adb,\n\t'-s',\n\tserial,\n\t'shell',\n\t'monkey',\n\t'-p',\n\tproject.config.appId,\n\t'-c',\n\t'android.intent.category.LAUNCHER',\n\t'1'\n];\n\nconst androidPackageUid = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst result = capture(\n\t\t[\n\t\t\tproject.adb,\n\t\t\t'-s',\n\t\t\tserial,\n\t\t\t'shell',\n\t\t\t'cmd',\n\t\t\t'package',\n\t\t\t'list',\n\t\t\t'packages',\n\t\t\t'-U',\n\t\t\tproject.config.appId\n\t\t],\n\t\t{ env }\n\t);\n\tif (result.exitCode !== 0) return undefined;\n\tconst escapedAppId = project.config.appId.replace(\n\t\t/[.*+?^${}()|[\\]\\\\]/gu,\n\t\t'\\\\$&'\n\t);\n\tconst match = new RegExp(`package:${escapedAppId}\\\\s+uid:(\\\\d+)`, 'u').exec(\n\t\tresult.stdout\n\t);\n\n\treturn match?.[1];\n};\n\nconst androidInstalledPackageIdentity = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst result = capture(\n\t\t[\n\t\t\tproject.adb,\n\t\t\t'-s',\n\t\t\tserial,\n\t\t\t'shell',\n\t\t\t'dumpsys',\n\t\t\t'package',\n\t\t\tproject.config.appId\n\t\t],\n\t\t{ env }\n\t);\n\tif (result.exitCode !== 0) return undefined;\n\tconst codePath = /^\\s*codePath=(.+)$/mu.exec(result.stdout)?.[1]?.trim();\n\tconst lastUpdateTime = /^\\s*lastUpdateTime=(.+)$/mu\n\t\t.exec(result.stdout)?.[1]\n\t\t?.trim();\n\tif (!codePath || !lastUpdateTime) return undefined;\n\tconst uid = /^\\s*appId=(\\d+)$/mu.exec(result.stdout)?.[1];\n\n\treturn { identity: `${codePath}\\0${lastUpdateTime}`, uid };\n};\n\nconst attachAndroidNativeLogs = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>,\n\toptions: StartAbsoluteAndroidDevOptions,\n\tknownUid?: string\n) => {\n\tif (!options.nativeLog) return null;\n\tconst uid = knownUid ?? androidPackageUid(project, serial, capture, env);\n\tif (!uid) {\n\t\toptions.log?.(\n\t\t\t`Android app logs unavailable: could not resolve the package UID for ${project.config.appId}.`\n\t\t);\n\n\t\treturn null;\n\t}\n\tconst onLine = (line: string) => {\n\t\tconst entry = parseAbsoluteAndroidLogLine(line);\n\t\t// Capacitor 8 SystemBars can run before documentElement exists. A later\n\t\t// inset pass applies the values; keep the plugin enabled because disabling\n\t\t// it breaks edge-to-edge layout on Android 16. Remove this narrow filter\n\t\t// when https://github.com/ionic-team/capacitor/issues/8530 is fixed.\n\t\tif (entry && !isIgnorableAbsoluteAndroidLog(entry)) {\n\t\t\toptions.nativeLog?.(entry);\n\t\t}\n\t};\n\n\treturn (options.startNativeLogs ?? startNativeLogStream)(\n\t\t[\n\t\t\tproject.adb,\n\t\t\t'-s',\n\t\t\tserial,\n\t\t\t'logcat',\n\t\t\t`--uid=${uid}`,\n\t\t\t'-v',\n\t\t\t'threadtime',\n\t\t\t'-T',\n\t\t\t'1',\n\t\t\t'*:W',\n\t\t\t'Capacitor:V',\n\t\t\t'Capacitor/Console:V',\n\t\t\t'chromium:I'\n\t\t],\n\t\t{ env },\n\t\tonLine\n\t);\n};\n\nexport const prepareAbsoluteAndroidDevProject = async (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\toptions: PrepareAbsoluteAndroidDevOptions\n): Promise<AbsoluteAndroidDevProject> => {\n\tconst projectRoot = resolve(options.projectRoot);\n\tconst host = detectAbsoluteMobileHost();\n\tconst androidRoot =\n\t\tprocess.env.ANDROID_HOME ??\n\t\tprocess.env.ANDROID_SDK_ROOT ??\n\t\tabsoluteManagedAndroidSdkRoot(host);\n\tconst checks = await inspectAbsoluteMobileToolchain({ androidRoot, host });\n\tconst failed = checks.filter(\n\t\t(check) =>\n\t\t\tcheck.platform === 'android' &&\n\t\t\t(check.status === 'fail' || check.status === 'warn')\n\t);\n\tif (failed.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Android emulation is not ready: ${failed.map(({ label }) => label).join(', ')}.`\n\t\t);\n\t}\n\tconst adb = checks.find((check) => check.id === 'android.adb')?.path;\n\tconst emulator = checks.find(\n\t\t(check) => check.id === 'android.emulator'\n\t)?.path;\n\tif (!adb || !emulator) {\n\t\tthrow new Error(\n\t\t\t'Android SDK tools disappeared after readiness checks.'\n\t\t);\n\t}\n\tconst cap = join(\n\t\tprojectRoot,\n\t\t'node_modules',\n\t\t'.bin',\n\t\thost === 'windows' ? 'cap.cmd' : 'cap'\n\t);\n\tif (!(await pathExists(cap))) {\n\t\tthrow new Error(\n\t\t\t'Capacitor CLI is not installed. Run absolute mobile init first.'\n\t\t);\n\t}\n\tawait writeAbsoluteCapacitorConfig(config, { projectRoot });\n\tawait mkdir(config.bundleDirectory, { recursive: true });\n\tconst placeholder = join(config.bundleDirectory, 'index.html');\n\tif (!(await pathExists(placeholder))) {\n\t\tawait writeFile(\n\t\t\tplaceholder,\n\t\t\t'<!doctype html><title>AbsoluteJS mobile development</title>\\n'\n\t\t);\n\t}\n\tconst nativeDirectory = join(config.nativeProjectDirectory, 'android');\n\tif (!(await pathExists(nativeDirectory))) {\n\t\tif (!options.createNativeProject) {\n\t\t\tthrow new Error('Android native project has not been created.');\n\t\t}\n\t\tconst run = options.run ?? runCommand;\n\t\tif (\n\t\t\t(await run([cap, 'add', 'android'], {\n\t\t\t\tcwd: projectRoot\n\t\t\t})) !== 0\n\t\t) {\n\t\t\tthrow new Error('Capacitor Android project creation failed.');\n\t\t}\n\t}\n\n\treturn {\n\t\tadb,\n\t\tandroidRoot,\n\t\tcap,\n\t\tconfig,\n\t\temulator,\n\t\thost,\n\t\tnativeDirectory,\n\t\tprojectRoot\n\t};\n};\n\nexport const startAbsoluteAndroidDevSession = async (\n\toptions: StartAbsoluteAndroidDevOptions\n) => {\n\tconst { project } = options;\n\tconst startupStartedAt = performance.now();\n\tlet phaseStartedAt = performance.now();\n\tconst phaseDurations: Record<string, number> = {};\n\tlet state: AbsoluteAndroidDevState = 'syncing';\n\tconst transition = (next: AbsoluteAndroidDevState) => {\n\t\tif (next === state) {\n\t\t\toptions.onStateChange?.(next);\n\n\t\t\treturn;\n\t\t}\n\t\tconst now = performance.now();\n\t\tconst durationMs = now - phaseStartedAt;\n\t\tphaseDurations[state] = (phaseDurations[state] ?? 0) + durationMs;\n\t\toptions.onPhaseTiming?.({\n\t\t\tdurationMs,\n\t\t\tphase: state,\n\t\t\ttotalMs: now - startupStartedAt\n\t\t});\n\t\tstate = next;\n\t\tphaseStartedAt = now;\n\t\toptions.onStateChange?.(next);\n\t};\n\tconst capture = options.capture ?? captureCommand;\n\tconst run = options.run ?? runCommand;\n\tconst sleep = options.sleep ?? Bun.sleep;\n\tconst spawn = options.spawn ?? spawnCommand;\n\tconst log = options.log ?? console.log;\n\tconst androidHome =\n\t\tproject.host === 'wsl'\n\t\t\t? windowsPathFromWsl(project.androidRoot, capture)\n\t\t\t: project.androidRoot;\n\tconst env: Record<string, string | undefined> = {\n\t\t...process.env,\n\t\tANDROID_HOME: androidHome\n\t};\n\ttransition('syncing');\n\tawait repairAbsoluteAndroidDevSession(project.projectRoot);\n\tthrowIfAborted(options.signal);\n\tawait requireSuccess(\n\t\t[project.cap, 'sync', 'android'],\n\t\t'Capacitor Android synchronization',\n\t\trun,\n\t\t{ cwd: project.projectRoot, env, signal: options.signal }\n\t);\n\tthrowIfAborted(options.signal);\n\ttransition('configuring');\n\tconst nativeConfigPath = join(\n\t\tproject.nativeDirectory,\n\t\t'app',\n\t\t'src',\n\t\t'main',\n\t\t'assets',\n\t\t'capacitor.config.json'\n\t);\n\tconst nativeManifestPath = join(\n\t\tproject.nativeDirectory,\n\t\t'app',\n\t\t'src',\n\t\t'main',\n\t\t'AndroidManifest.xml'\n\t);\n\tlet connectedSerial: string | undefined;\n\tlet nativeLogs: AbsoluteAndroidLogStream | null = null;\n\tconst closeNativeLogs = async () => {\n\t\tconst stream = nativeLogs;\n\t\tnativeLogs = null;\n\t\tawait stream?.close().catch(() => undefined);\n\t};\n\ttry {\n\t\tawait writeDevConfig(\n\t\t\tproject.projectRoot,\n\t\t\tnativeConfigPath,\n\t\t\tnativeManifestPath,\n\t\t\toptions.port,\n\t\t\toptions.https === true,\n\t\t\tproject.config.entry\n\t\t);\n\t\tthrowIfAborted(options.signal);\n\t\tlogHttpsCertificateRequirement(options.https, log);\n\t\tconst fingerprintStartedAt = performance.now();\n\t\tconst nativeFingerprintPromise =\n\t\t\tfingerprintAbsoluteAndroidNativeProject(project).then(\n\t\t\t\t(fingerprint) => {\n\t\t\t\t\tphaseDurations.fingerprinting =\n\t\t\t\t\t\tperformance.now() - fingerprintStartedAt;\n\n\t\t\t\t\treturn fingerprint;\n\t\t\t\t}\n\t\t\t);\n\t\ttransition('booting');\n\t\tconst emulator = startManagedEmulatorIfNeeded(\n\t\t\tproject,\n\t\t\tcapture,\n\t\t\tspawn,\n\t\t\tlog,\n\t\t\tenv\n\t\t);\n\t\tconst { started: startedEmulator } = emulator;\n\t\ttransition('connecting');\n\t\tconst serial = await waitForManagedEmulator(\n\t\t\tproject,\n\t\t\tcapture,\n\t\t\tsleep,\n\t\t\tenv,\n\t\t\toptions.signal,\n\t\t\temulator.serial\n\t\t);\n\t\tconnectedSerial = serial;\n\t\ttransition('forwarding');\n\t\tawait requireSuccess(\n\t\t\t[\n\t\t\t\tproject.adb,\n\t\t\t\t'-s',\n\t\t\t\tserial,\n\t\t\t\t'reverse',\n\t\t\t\t`tcp:${options.port}`,\n\t\t\t\t`tcp:${options.port}`\n\t\t\t],\n\t\t\t'ADB reverse port forwarding',\n\t\t\trun,\n\t\t\t{ env, signal: options.signal }\n\t\t);\n\t\tthrowIfAborted(options.signal);\n\t\tconst nativeFingerprint = await nativeFingerprintPromise;\n\t\tthrowIfAborted(options.signal);\n\t\ttransition('checking-native');\n\t\tconst cache = await readNativeCache(project.projectRoot);\n\t\tconst installedApp = await ensureAndroidDebugApp({\n\t\t\tcache,\n\t\t\tcapture,\n\t\t\tenv,\n\t\t\tfingerprint: nativeFingerprint,\n\t\t\tlog,\n\t\t\tproject,\n\t\t\trun,\n\t\t\tserial,\n\t\t\tsignal: options.signal,\n\t\t\ttransition\n\t\t});\n\t\tconst { nativeCacheHit, uid } = installedApp;\n\t\tthrowIfAborted(options.signal);\n\t\ttransition('launching');\n\t\tawait requireSuccess(\n\t\t\tandroidLaunchCommand(project, serial),\n\t\t\t'Android app launch',\n\t\t\trun,\n\t\t\t{ env, signal: options.signal }\n\t\t);\n\t\tthrowIfAborted(options.signal);\n\t\tif (options.nativeLog) transition('streaming-logs');\n\t\tnativeLogs = attachAndroidNativeLogs(\n\t\t\tproject,\n\t\t\tserial,\n\t\t\tcapture,\n\t\t\tenv,\n\t\t\toptions,\n\t\t\tuid\n\t\t);\n\t\ttransition('ready');\n\t\tphaseDurations.total = performance.now() - startupStartedAt;\n\t\tlog(\n\t\t\t`Android emulator connected (${serial}) with HMR on port ${options.port} in ${getDurationString(phaseDurations.total)} (${nativeCacheHit ? 'native cache hit' : 'native build installed'}).`\n\t\t);\n\t\tlog(`Android startup: ${androidTimingSummary(phaseDurations)}.`);\n\t\tlet closed = false;\n\t\tconst close = async () => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\ttransition('closing');\n\t\t\tawait closeNativeLogs();\n\t\t\tawait removeAdbReverse(project, serial, options.port, run, env);\n\t\t\tawait repairAbsoluteAndroidDevSession(project.projectRoot);\n\t\t\ttransition('closed');\n\t\t};\n\n\t\treturn {\n\t\t\tclose,\n\t\t\tnativeCacheHit,\n\t\t\tserial,\n\t\t\tstartedEmulator,\n\t\t\ttimings: { ...phaseDurations },\n\t\t\trebuild: async () => {\n\t\t\t\tif (closed) {\n\t\t\t\t\tthrow new Error('Android development session is closed.');\n\t\t\t\t}\n\t\t\t\tlog(\n\t\t\t\t\t'Android native inputs changed; rebuilding without restarting the dev server.'\n\t\t\t\t);\n\t\t\t\tawait close();\n\n\t\t\t\treturn startAbsoluteAndroidDevSession(options);\n\t\t\t},\n\t\t\trelaunch: async () => {\n\t\t\t\tif (closed) {\n\t\t\t\t\tthrow new Error('Android development session is closed.');\n\t\t\t\t}\n\t\t\t\ttransition('launching');\n\t\t\t\ttry {\n\t\t\t\t\tawait requireSuccess(\n\t\t\t\t\t\tandroidLaunchCommand(project, serial),\n\t\t\t\t\t\t'Android app relaunch',\n\t\t\t\t\t\trun,\n\t\t\t\t\t\t{ env, signal: options.signal }\n\t\t\t\t\t);\n\t\t\t\t\ttransition('ready');\n\t\t\t\t\tlog(`Android app relaunched on ${serial}.`);\n\t\t\t\t} catch (error) {\n\t\t\t\t\ttransition('failed');\n\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t\tget state() {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t};\n\t} catch (error) {\n\t\ttransition('failed');\n\t\tawait closeNativeLogs();\n\t\tawait removeAdbReverse(\n\t\t\tproject,\n\t\t\tconnectedSerial,\n\t\t\toptions.port,\n\t\t\trun,\n\t\t\tenv\n\t\t);\n\t\tawait repairAbsoluteAndroidDevSession(project.projectRoot);\n\n\t\tthrow error;\n\t}\n};\n",
14
+ "import {\n\taccess,\n\tcopyFile,\n\tlstat,\n\tmkdir,\n\treadFile,\n\treaddir,\n\treadlink,\n\trealpath,\n\trename,\n\trm,\n\twriteFile\n} from 'node:fs/promises';\nimport { createHash, randomUUID } from 'node:crypto';\nimport {\n\tdirname,\n\tisAbsolute,\n\tjoin,\n\trelative,\n\tresolve,\n\tsep,\n\twin32\n} from 'node:path';\nimport {\n\tABSOLUTE_ANDROID_AVD_NAME,\n\tabsoluteManagedAndroidSdkRoot,\n\tdetectAbsoluteMobileHost,\n\tinspectAbsoluteMobileToolchain,\n\ttype AbsoluteMobileHost\n} from './emulatorDoctor';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\nimport { writeAbsoluteCapacitorConfig } from './capacitorProject';\nimport { getDurationString } from '../utils/getDurationString';\n\nconst ANDROID_BOOT_TIMEOUT_MS = 180_000;\nconst ANDROID_BOOT_POLL_MS = 1_000;\nconst DEV_JOURNAL_FORMAT = 1;\nconst NATIVE_CACHE_FORMAT = 1;\nconst HASH_RADIX = 16;\nconst EXECUTABLE_MODE_MASK = 0o111;\nconst NATIVE_PUBLIC_PATH_SEGMENTS = 5;\nconst CAPACITOR_PROJECT_DIRECTORY_PATTERN =\n\t/project\\(['\"](:[^'\"]+)['\"]\\)\\.projectDir\\s*=\\s*new File\\(['\"]([^'\"]+)['\"]\\)/gu;\n\nexport type AbsoluteAndroidCommandOptions = {\n\tcwd?: string;\n\tenv?: Record<string, string | undefined>;\n\tsignal?: AbortSignal;\n};\n\nexport type AbsoluteAndroidCommandResult = {\n\texitCode: number;\n\tstderr: string;\n\tstdout: string;\n};\n\nexport type AbsoluteAndroidDevState =\n\t| 'booting'\n\t| 'building'\n\t| 'closed'\n\t| 'closing'\n\t| 'configuring'\n\t| 'connecting'\n\t| 'failed'\n\t| 'forwarding'\n\t| 'installing'\n\t| 'checking-native'\n\t| 'launching'\n\t| 'ready'\n\t| 'streaming-logs'\n\t| 'syncing';\n\nexport type AbsoluteAndroidNativeLogEntry = {\n\tlevel: 'debug' | 'error' | 'fatal' | 'info' | 'verbose' | 'warn';\n\tmessage: string;\n\ttag: string;\n};\n\ntype AbsoluteAndroidLogStream = {\n\tclose: () => Promise<void>;\n};\n\ntype AndroidDevJournal = {\n\tbackupPath: string;\n\tformat: number;\n\tmanifestBackupPath?: string;\n\tnativeConfigPath: string;\n\tnativeManifestPath?: string;\n};\n\ntype AndroidNativeCache = {\n\tappId: string;\n\tfingerprint: string;\n\tformat: number;\n\tinstallations: Record<string, string>;\n};\n\ntype AndroidInstalledPackage = {\n\tidentity: string;\n\tuid?: string;\n};\n\nexport type AbsoluteAndroidDevProject = {\n\tadb: string;\n\tandroidRoot: string;\n\tcap: string;\n\tconfig: NormalizedAbsoluteMobileConfig;\n\temulator: string;\n\thost: AbsoluteMobileHost;\n\tnativeDirectory: string;\n\tprojectRoot: string;\n};\n\nexport type AbsoluteAndroidDevSession = {\n\tclose: () => Promise<void>;\n\tnativeCacheHit: boolean;\n\trebuild: () => Promise<AbsoluteAndroidDevSession>;\n\trelaunch: () => Promise<void>;\n\tserial: string;\n\tstate: AbsoluteAndroidDevState;\n\tstartedEmulator: boolean;\n\ttimings: Record<string, number>;\n};\n\nexport type AbsoluteAndroidDevPhaseTiming = {\n\tdurationMs: number;\n\tphase: AbsoluteAndroidDevState;\n\ttotalMs: number;\n};\n\nconst ANDROID_TIMING_PHASES: Array<[string, string]> = [\n\t['syncing', 'Capacitor sync'],\n\t['configuring', 'dev config'],\n\t['fingerprinting', 'fingerprint'],\n\t['booting', 'emulator'],\n\t['connecting', 'device ready'],\n\t['forwarding', 'ADB reverse'],\n\t['checking-native', 'package check'],\n\t['building', 'Gradle'],\n\t['installing', 'install'],\n\t['launching', 'launch'],\n\t['streaming-logs', 'logs']\n];\n\nconst androidTimingSummary = (timings: Record<string, number>) =>\n\tANDROID_TIMING_PHASES.map(([phase, label]) => {\n\t\tconst duration = timings[phase];\n\t\tif (duration === undefined || label === undefined) return null;\n\n\t\treturn `${label} ${getDurationString(duration)}`;\n\t})\n\t\t.filter((value): value is string => value !== null)\n\t\t.join(', ');\n\nexport type PrepareAbsoluteAndroidDevOptions = {\n\tcreateNativeProject: boolean;\n\tprojectRoot: string;\n\trun?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => Promise<number>;\n};\n\nexport type StartAbsoluteAndroidDevOptions = {\n\tcapture?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => AbsoluteAndroidCommandResult;\n\tlog?: (message: string) => void;\n\tnativeLog?: (entry: AbsoluteAndroidNativeLogEntry) => void;\n\tonPhaseTiming?: (timing: AbsoluteAndroidDevPhaseTiming) => void;\n\tonStateChange?: (state: AbsoluteAndroidDevState) => void;\n\thttps?: boolean;\n\t/** Launch the locally embedded production web bundle while forwarding\n\t * `port` only for its configured backend. No dev-server URL is written. */\n\tembeddedBundle?: boolean;\n\tport: number;\n\tproject: AbsoluteAndroidDevProject;\n\trun?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => Promise<number>;\n\tsignal?: AbortSignal;\n\tsleep?: (milliseconds: number) => Promise<void>;\n\tspawn?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteAndroidCommandOptions\n\t) => void;\n\tstartNativeLogs?: (\n\t\tcommand: string[],\n\t\toptions: AbsoluteAndroidCommandOptions,\n\t\tonLine: (line: string) => void\n\t) => AbsoluteAndroidLogStream;\n};\n\nconst pathExists = async (path: string) => {\n\ttry {\n\t\tawait access(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst forwardCommandOutput = (\n\tstream: ReadableStream<Uint8Array>,\n\tdestination: NodeJS.WriteStream\n) =>\n\tstream.pipeTo(\n\t\tnew WritableStream({\n\t\t\twrite: (chunk) => {\n\t\t\t\tdestination.write(chunk);\n\t\t\t}\n\t\t})\n\t);\n\nconst runCommand = async (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions = {}\n) => {\n\tconst subprocess = Bun.spawn(command, {\n\t\tcwd: options.cwd,\n\t\tenv: options.env,\n\t\tsignal: options.signal,\n\t\tstderr: 'pipe',\n\t\tstdin: 'ignore',\n\t\tstdout: 'pipe'\n\t});\n\tconst [exitCode] = await Promise.all([\n\t\tsubprocess.exited,\n\t\tforwardCommandOutput(subprocess.stdout, process.stdout),\n\t\tforwardCommandOutput(subprocess.stderr, process.stderr)\n\t]);\n\n\treturn exitCode;\n};\n\nconst captureCommand = (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions = {}\n) => {\n\ttry {\n\t\tconst result = Bun.spawnSync(command, {\n\t\t\tcwd: options.cwd,\n\t\t\tenv: options.env,\n\t\t\tstderr: 'pipe',\n\t\t\tstdout: 'pipe'\n\t\t});\n\n\t\treturn {\n\t\t\texitCode: result.exitCode,\n\t\t\tstderr: result.stderr.toString(),\n\t\t\tstdout: result.stdout.toString()\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\texitCode: 1,\n\t\t\tstderr: error instanceof Error ? error.message : String(error),\n\t\t\tstdout: ''\n\t\t};\n\t}\n};\n\nconst spawnCommand = (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions = {}\n) => {\n\tBun.spawn(command, {\n\t\tcwd: options.cwd,\n\t\tenv: options.env,\n\t\tstderr: 'ignore',\n\t\tstdin: 'ignore',\n\t\tstdout: 'ignore'\n\t});\n};\n\nconst LOGCAT_LINE_PATTERN =\n\t/^\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}\\.\\d+\\s+\\d+\\s+\\d+\\s+([VDIWEF])\\s+([^:]+):\\s?(.*)$/u;\nconst ASCII_CONTROL_END = 31;\nconst ASCII_DELETE = 127;\nconst ASCII_ESCAPE = 27;\nconst ASCII_HORIZONTAL_TAB = 9;\nconst LOGCAT_MESSAGE_CAPTURE = 3;\nconst UNFOUND_INDEX = -1;\nconst ANSI_SEQUENCE_PATTERN = new RegExp(\n\t`${String.fromCharCode(ASCII_ESCAPE)}(?:\\\\[[0-?]*[ -/]*[@-~]|[@-_])`,\n\t'gu'\n);\nconst AUTHORIZATION_SECRET_PATTERN =\n\t/([\"']?(?:authorization|proxy-authorization)[\"']?\\s*[:=]\\s*)(?:Bearer|Basic)\\s+[^\\s,;]+/giu;\nconst BEARER_SECRET_PATTERN = /\\b(Bearer)\\s+[^\\s,;]+/giu;\nconst COOKIE_SECRET_PATTERN =\n\t/([\"']?(?:cookie|set-cookie)[\"']?\\s*[:=]\\s*).*/giu;\nconst NAMED_SECRET_PATTERN =\n\t/([\"']?(?:access_token|refresh_token|id_token|client_secret|password|code|token)[\"']?\\s*[:=]\\s*)(\"[^\"]*\"|'[^']*'|[^\\s&,;]+)/giu;\nconst QUERY_SECRET_PATTERN = /([?&](?:code|token)=)[^&\\s]+/giu;\n\nexport const redactAbsoluteAndroidLog = (value: string) =>\n\tvalue\n\t\t.replace(ANSI_SEQUENCE_PATTERN, '')\n\t\t.split('')\n\t\t.filter((character) => {\n\t\t\tconst code = character.charCodeAt(0);\n\n\t\t\treturn (\n\t\t\t\tcode === ASCII_HORIZONTAL_TAB ||\n\t\t\t\t(code > ASCII_CONTROL_END && code !== ASCII_DELETE)\n\t\t\t);\n\t\t})\n\t\t.join('')\n\t\t.replace(AUTHORIZATION_SECRET_PATTERN, '$1[REDACTED]')\n\t\t.replace(BEARER_SECRET_PATTERN, '$1 [REDACTED]')\n\t\t.replace(COOKIE_SECRET_PATTERN, '$1[REDACTED]')\n\t\t.replace(NAMED_SECRET_PATTERN, '$1[REDACTED]')\n\t\t.replace(QUERY_SECRET_PATTERN, '$1[REDACTED]');\n\nconst androidLogLevel = (level: string) => {\n\tif (level === 'V') return 'verbose';\n\tif (level === 'D') return 'debug';\n\tif (level === 'W') return 'warn';\n\tif (level === 'E') return 'error';\n\tif (level === 'F') return 'fatal';\n\n\treturn 'info';\n};\n\nconst emitCompleteLogLines = (\n\tvalue: string,\n\tonLine: (line: string) => void\n) => {\n\tlet buffered = value;\n\tlet newlineIndex = buffered.indexOf('\\n');\n\twhile (newlineIndex !== UNFOUND_INDEX) {\n\t\tonLine(buffered.slice(0, newlineIndex).replace(/\\r$/u, ''));\n\t\tbuffered = buffered.slice(newlineIndex + 1);\n\t\tnewlineIndex = buffered.indexOf('\\n');\n\t}\n\n\treturn buffered;\n};\n\nconst decodeLogStream = () => {\n\tconst decoder = new TextDecoder();\n\n\treturn new TransformStream<Uint8Array, string>({\n\t\tflush: (controller) => {\n\t\t\tconst remaining = decoder.decode();\n\t\t\tif (remaining) controller.enqueue(remaining);\n\t\t},\n\t\ttransform: (chunk, controller) => {\n\t\t\tconst decoded = decoder.decode(chunk, { stream: true });\n\t\t\tif (decoded) controller.enqueue(decoded);\n\t\t}\n\t});\n};\n\nexport const isIgnorableAbsoluteAndroidLog = (\n\tentry: AbsoluteAndroidNativeLogEntry\n) =>\n\tentry.tag === 'Capacitor/Console' &&\n\tentry.message.includes('Error injecting safe area CSS:') &&\n\tentry.message.includes(\"Cannot read properties of null (reading 'style')\");\nexport const parseAbsoluteAndroidLogLine = (\n\tline: string\n): AbsoluteAndroidNativeLogEntry | null => {\n\tconst sanitized = redactAbsoluteAndroidLog(line).trim();\n\tif (!sanitized) return null;\n\tconst match = LOGCAT_LINE_PATTERN.exec(sanitized);\n\tif (!match) {\n\t\treturn { level: 'info', message: sanitized, tag: 'logcat' };\n\t}\n\n\treturn {\n\t\tlevel: androidLogLevel(match[1] ?? 'I'),\n\t\tmessage: match[LOGCAT_MESSAGE_CAPTURE] ?? '',\n\t\ttag: match[2]?.trim() || 'android'\n\t};\n};\n\nconst consumeLogLines = async (\n\tstream: ReadableStream<Uint8Array>,\n\tonLine: (line: string) => void\n) => {\n\tlet buffered = '';\n\tawait stream.pipeThrough(decodeLogStream()).pipeTo(\n\t\tnew WritableStream({\n\t\t\twrite: (chunk) => {\n\t\t\t\tbuffered = emitCompleteLogLines(buffered + chunk, onLine);\n\t\t\t}\n\t\t})\n\t);\n\tif (buffered) {\n\t\tonLine(buffered.replace(/\\r$/u, ''));\n\t}\n};\n\nconst startNativeLogStream = (\n\tcommand: string[],\n\toptions: AbsoluteAndroidCommandOptions,\n\tonLine: (line: string) => void\n): AbsoluteAndroidLogStream => {\n\tconst subprocess = Bun.spawn(command, {\n\t\tenv: options.env,\n\t\tstderr: 'pipe',\n\t\tstdin: 'ignore',\n\t\tstdout: 'pipe'\n\t});\n\tconst output = Promise.all([\n\t\tconsumeLogLines(subprocess.stdout, onLine),\n\t\tconsumeLogLines(subprocess.stderr, onLine)\n\t]);\n\tvoid output.catch(() => undefined);\n\n\treturn {\n\t\tclose: async () => {\n\t\t\ttry {\n\t\t\t\tsubprocess.kill();\n\t\t\t} catch {\n\t\t\t\t/* logcat already exited */\n\t\t\t}\n\t\t\tawait Promise.all([\n\t\t\t\tsubprocess.exited.catch(() => undefined),\n\t\t\t\toutput.catch(() => undefined)\n\t\t\t]);\n\t\t}\n\t};\n};\n\nconst requireSuccess = async (\n\tcommand: string[],\n\tlabel: string,\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>,\n\toptions?: AbsoluteAndroidCommandOptions\n) => {\n\tconst exitCode = await run(command, options);\n\tthrowIfAborted(options?.signal);\n\tif (exitCode !== 0) throw new Error(`${label} failed (exit ${exitCode}).`);\n};\n\nconst throwIfAborted = (signal?: AbortSignal) => {\n\tif (!signal?.aborted) return;\n\tthrow new DOMException(\n\t\t'Android development startup was cancelled.',\n\t\t'AbortError'\n\t);\n};\n\nconst journalPaths = (projectRoot: string) => {\n\tconst root = join(projectRoot, '.absolutejs', 'mobile', 'dev-session');\n\n\treturn {\n\t\tbackup: join(root, 'capacitor.config.backup.json'),\n\t\tjournal: join(root, 'journal.json'),\n\t\tmanifestBackup: join(root, 'AndroidManifest.backup.xml'),\n\t\troot\n\t};\n};\n\nconst isInside = (root: string, path: string) => {\n\tconst resolvedRoot = resolve(root);\n\tconst resolvedPath = resolve(path);\n\tconst relativePath = relative(resolvedRoot, resolvedPath);\n\n\treturn (\n\t\trelativePath === '' ||\n\t\t(relativePath !== '..' &&\n\t\t\t!relativePath.startsWith(`..${sep}`) &&\n\t\t\t!isAbsolute(relativePath))\n\t);\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst nativeCachePath = (projectRoot: string) =>\n\tjoin(projectRoot, '.absolutejs', 'mobile', 'cache', 'android-debug.json');\n\nconst parseNativeCache = (value: unknown): AndroidNativeCache | null => {\n\tif (!isRecord(value)) return null;\n\tconst { appId, fingerprint, format, installations } = value;\n\tif (\n\t\tformat !== NATIVE_CACHE_FORMAT ||\n\t\ttypeof appId !== 'string' ||\n\t\ttypeof fingerprint !== 'string' ||\n\t\t!isRecord(installations) ||\n\t\t!Object.values(installations).every(\n\t\t\t(identity) => typeof identity === 'string'\n\t\t)\n\t) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tappId,\n\t\tfingerprint,\n\t\tformat,\n\t\tinstallations: Object.fromEntries(\n\t\t\tObject.entries(installations).map(([serial, identity]) => [\n\t\t\t\tserial,\n\t\t\t\tString(identity)\n\t\t\t])\n\t\t)\n\t};\n};\n\nconst readNativeCache = async (projectRoot: string) =>\n\treadFile(nativeCachePath(projectRoot), 'utf8')\n\t\t.then((source) => parseNativeCache(JSON.parse(source)))\n\t\t.catch(() => null);\n\nconst writeNativeCache = async (\n\tprojectRoot: string,\n\tcache: AndroidNativeCache\n) => {\n\tconst destination = nativeCachePath(projectRoot);\n\tconst temporary = `${destination}.${process.pid}.${randomUUID()}.tmp`;\n\tawait mkdir(dirname(destination), { recursive: true });\n\ttry {\n\t\tawait writeFile(temporary, `${JSON.stringify(cache, null, '\\t')}\\n`, {\n\t\t\tflag: 'wx'\n\t\t});\n\t\tawait rename(temporary, destination);\n\t} finally {\n\t\tawait rm(temporary, { force: true }).catch(() => undefined);\n\t}\n};\n\nconst nativeDependencySources = async (nativeDirectory: string) => {\n\tconst settings = await readFile(\n\t\tjoin(nativeDirectory, 'capacitor.settings.gradle'),\n\t\t'utf8'\n\t);\n\tconst pattern = new RegExp(\n\t\tCAPACITOR_PROJECT_DIRECTORY_PATTERN.source,\n\t\tCAPACITOR_PROJECT_DIRECTORY_PATTERN.flags\n\t);\n\tconst dependencies = [...settings.matchAll(pattern)].map((match) => ({\n\t\tname: (match[1] ?? '').slice(1).replaceAll(/[^a-zA-Z0-9_.-]/gu, '_'),\n\t\tsource: resolve(nativeDirectory, match[2] ?? '')\n\t}));\n\tif (dependencies.length === 0) {\n\t\tthrow new Error(\n\t\t\t'Capacitor Android settings did not declare any native dependencies.'\n\t\t);\n\t}\n\n\treturn { dependencies, settings };\n};\n\nconst shouldIgnoreNativePath = (\n\trelativePath: string,\n\tignorePublicBundle: boolean\n) => {\n\tconst parts = relativePath.split(sep);\n\tif (\n\t\tparts.includes('.gradle') ||\n\t\tparts.includes('build') ||\n\t\tparts.includes('.absolutejs-dependencies')\n\t) {\n\t\treturn true;\n\t}\n\n\treturn (\n\t\tignorePublicBundle &&\n\t\tparts.slice(0, NATIVE_PUBLIC_PATH_SEGMENTS).join('/') ===\n\t\t\t'app/src/main/assets/public'\n\t);\n};\n\ntype NativeDirectoryCollector = (\n\troot: string,\n\tlabel: string,\n\tdirectory: string,\n\tignorePublicBundle: boolean\n) => Promise<string[]>;\n\nconst collectNativePath = async (\n\troot: string,\n\tlabel: string,\n\tpath: string,\n\tisDirectory: boolean,\n\tisFile: boolean,\n\tisSymbolicLink: boolean,\n\tignorePublicBundle: boolean\n) => {\n\tconst relativePath = relative(root, path);\n\tif (shouldIgnoreNativePath(relativePath, ignorePublicBundle)) return [];\n\tconst identity = `${label}:${relativePath.split(sep).join('/')}\\0`;\n\tif (isDirectory) {\n\t\treturn collectNativeDirectory(root, label, path, ignorePublicBundle);\n\t}\n\tif (isSymbolicLink) {\n\t\treturn [`link\\0${identity}${await readlink(path)}\\0`];\n\t}\n\tif (!isFile) return [];\n\tconst [metadata, contents] = await Promise.all([\n\t\tlstat(path),\n\t\treadFile(path)\n\t]);\n\tconst contentDigest = createHash('sha256').update(contents).digest('hex');\n\n\treturn [\n\t\t`file\\0${identity}${metadata.mode & EXECUTABLE_MODE_MASK}\\0${contentDigest}\\0`\n\t];\n};\n\nconst collectNativeDirectory: NativeDirectoryCollector = async (\n\troot,\n\tlabel,\n\tdirectory,\n\tignorePublicBundle\n) => {\n\tconst entries = await readdir(directory, { withFileTypes: true });\n\tentries.sort((left, right) => left.name.localeCompare(right.name));\n\tconst records = await Promise.all(\n\t\tentries.map((entry) =>\n\t\t\tcollectNativePath(\n\t\t\t\troot,\n\t\t\t\tlabel,\n\t\t\t\tjoin(directory, entry.name),\n\t\t\t\tentry.isDirectory(),\n\t\t\t\tentry.isFile(),\n\t\t\t\tentry.isSymbolicLink(),\n\t\t\t\tignorePublicBundle\n\t\t\t)\n\t\t)\n\t);\n\n\treturn records.flat();\n};\n\nconst hashNativeTree = async (\n\troot: string,\n\tlabel: string,\n\tignorePublicBundle: boolean\n) => {\n\tconst resolvedRoot = await realpath(root);\n\tconst records = await collectNativeDirectory(\n\t\tresolvedRoot,\n\t\tlabel,\n\t\tresolvedRoot,\n\t\tignorePublicBundle\n\t);\n\n\treturn createHash('sha256').update(records.join('')).digest('hex');\n};\n\ntype NativeFingerprintRoot = {\n\tignorePublicBundle: boolean;\n\tlabel: string;\n\tsource: string;\n};\n\nexport const fingerprintAbsoluteAndroidNativeProject = async (\n\tproject: Pick<AbsoluteAndroidDevProject, 'nativeDirectory'>,\n\toptions: { includePublicBundle?: boolean } = {}\n) => {\n\tconst { dependencies } = await nativeDependencySources(\n\t\tproject.nativeDirectory\n\t);\n\tconst roots: NativeFingerprintRoot[] = [\n\t\t{\n\t\t\tignorePublicBundle: options.includePublicBundle !== true,\n\t\t\tlabel: 'android',\n\t\t\tsource: project.nativeDirectory\n\t\t},\n\t\t...dependencies\n\t\t\t.sort((left, right) => left.name.localeCompare(right.name))\n\t\t\t.map((dependency) => ({\n\t\t\t\tignorePublicBundle: false,\n\t\t\t\tlabel: `dependency:${dependency.name}`,\n\t\t\t\tsource: dependency.source\n\t\t\t}))\n\t];\n\tconst treeDigests = await Promise.all(\n\t\troots.map((root) =>\n\t\t\thashNativeTree(root.source, root.label, root.ignorePublicBundle)\n\t\t)\n\t);\n\n\treturn createHash('sha256').update(treeDigests.join('\\0')).digest('hex');\n};\n\nconst parseJournal = (value: unknown): AndroidDevJournal | null => {\n\tif (typeof value !== 'object' || value === null) return null;\n\tconst backupPath = Reflect.get(value, 'backupPath');\n\tconst format = Reflect.get(value, 'format');\n\tconst manifestBackupPath = Reflect.get(value, 'manifestBackupPath');\n\tconst nativeConfigPath = Reflect.get(value, 'nativeConfigPath');\n\tconst nativeManifestPath = Reflect.get(value, 'nativeManifestPath');\n\tif (\n\t\ttypeof backupPath !== 'string' ||\n\t\tformat !== DEV_JOURNAL_FORMAT ||\n\t\ttypeof nativeConfigPath !== 'string'\n\t) {\n\t\treturn null;\n\t}\n\tif (\n\t\t(manifestBackupPath !== undefined ||\n\t\t\tnativeManifestPath !== undefined) &&\n\t\t(typeof manifestBackupPath !== 'string' ||\n\t\t\ttypeof nativeManifestPath !== 'string')\n\t) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tbackupPath,\n\t\tformat,\n\t\tmanifestBackupPath,\n\t\tnativeConfigPath,\n\t\tnativeManifestPath\n\t};\n};\n\nexport const repairAbsoluteAndroidDevSession = async (projectRoot: string) => {\n\tconst paths = journalPaths(projectRoot);\n\tif (!(await pathExists(paths.journal))) {\n\t\tawait rm(paths.root, { force: true, recursive: true });\n\n\t\treturn false;\n\t}\n\tconst journal = await readFile(paths.journal, 'utf8')\n\t\t.then((source) => parseJournal(JSON.parse(source)))\n\t\t.catch(() => null);\n\tif (\n\t\t!journal ||\n\t\t!isInside(projectRoot, journal.nativeConfigPath) ||\n\t\t!isInside(paths.root, journal.backupPath) ||\n\t\t(journal.nativeManifestPath !== undefined &&\n\t\t\t!isInside(projectRoot, journal.nativeManifestPath)) ||\n\t\t(journal.manifestBackupPath !== undefined &&\n\t\t\t!isInside(paths.root, journal.manifestBackupPath))\n\t) {\n\t\tthrow new Error(\n\t\t\t`Refusing unsafe or invalid mobile dev journal at ${paths.journal}.`\n\t\t);\n\t}\n\tif (await pathExists(journal.backupPath)) {\n\t\tawait mkdir(dirname(journal.nativeConfigPath), { recursive: true });\n\t\tawait copyFile(journal.backupPath, journal.nativeConfigPath);\n\t}\n\tif (\n\t\tjournal.manifestBackupPath &&\n\t\tjournal.nativeManifestPath &&\n\t\t(await pathExists(journal.manifestBackupPath))\n\t) {\n\t\tawait mkdir(dirname(journal.nativeManifestPath), { recursive: true });\n\t\tawait copyFile(journal.manifestBackupPath, journal.nativeManifestPath);\n\t}\n\tawait rm(paths.root, { force: true, recursive: true });\n\n\treturn true;\n};\n\nconst androidDevelopmentManifest = (source: string, cleartext: boolean) => {\n\tif (!cleartext) return source;\n\tif (/android:usesCleartextTraffic=[\"'][^\"']*[\"']/u.test(source)) {\n\t\treturn source.replace(\n\t\t\t/android:usesCleartextTraffic=[\"'][^\"']*[\"']/u,\n\t\t\t'android:usesCleartextTraffic=\"true\"'\n\t\t);\n\t}\n\n\treturn source.replace(\n\t\t'<application',\n\t\t'<application\\n android:usesCleartextTraffic=\"true\"'\n\t);\n};\n\nconst writeDevConfig = async (\n\tprojectRoot: string,\n\tnativeConfigPath: string,\n\tnativeManifestPath: string,\n\tport: number,\n\thttps: boolean,\n\tentry: string,\n\tembeddedBundle: boolean\n) => {\n\tconst paths = journalPaths(projectRoot);\n\tawait repairAbsoluteAndroidDevSession(projectRoot);\n\tconst source = await readFile(nativeConfigPath, 'utf8');\n\tconst manifestSource = await readFile(nativeManifestPath, 'utf8');\n\tconst parsed: unknown = JSON.parse(source);\n\tif (!isRecord(parsed)) {\n\t\tthrow new Error(\n\t\t\t`Invalid Capacitor native config at ${nativeConfigPath}.`\n\t\t);\n\t}\n\tawait mkdir(paths.root, { recursive: true });\n\tawait writeFile(paths.backup, source, { flag: 'wx' });\n\tawait writeFile(paths.manifestBackup, manifestSource, { flag: 'wx' });\n\tconst journal: AndroidDevJournal = {\n\t\tbackupPath: paths.backup,\n\t\tformat: DEV_JOURNAL_FORMAT,\n\t\tmanifestBackupPath: paths.manifestBackup,\n\t\tnativeConfigPath,\n\t\tnativeManifestPath\n\t};\n\tawait writeFile(paths.journal, `${JSON.stringify(journal, null, '\\t')}\\n`, {\n\t\tflag: 'wx'\n\t});\n\tif (!embeddedBundle) {\n\t\tconst currentServer = parsed.server;\n\t\tconst developmentUrl = new URL(\n\t\t\t`${https ? 'https' : 'http'}://localhost:${port}${entry}`\n\t\t);\n\t\tdevelopmentUrl.searchParams.set(\n\t\t\t'__absolute_target',\n\t\t\t'capacitor-android'\n\t\t);\n\t\tparsed.server = {\n\t\t\t...(typeof currentServer === 'object' && currentServer !== null\n\t\t\t\t? currentServer\n\t\t\t\t: {}),\n\t\t\tcleartext: !https,\n\t\t\turl: developmentUrl.href\n\t\t};\n\t}\n\tawait writeFile(\n\t\tnativeConfigPath,\n\t\t`${JSON.stringify(parsed, null, '\\t')}\\n`\n\t);\n\tawait writeFile(\n\t\tnativeManifestPath,\n\t\tandroidDevelopmentManifest(manifestSource, !https)\n\t);\n};\n\nexport const parseAdbDevices = (output: string) =>\n\toutput\n\t\t.split(/\\r?\\n/)\n\t\t.slice(1)\n\t\t.map((line) => line.trim().split(/\\s+/, 2))\n\t\t.filter(\n\t\t\t(parts): parts is [string, string] =>\n\t\t\t\tparts.length === 2 && parts[1] === 'device'\n\t\t)\n\t\t.map(([serial]) => serial);\n\nconst isManagedEmulatorSerial = (\n\tserial: string,\n\tadb: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tif (!serial.startsWith('emulator-')) return false;\n\tconst avd = capture([adb, '-s', serial, 'emu', 'avd', 'name'], { env });\n\n\treturn (\n\t\tavd.exitCode === 0 &&\n\t\tavd.stdout\n\t\t\t.split(/\\r?\\n/)\n\t\t\t.map((value) => value.trim())\n\t\t\t.includes(ABSOLUTE_ANDROID_AVD_NAME)\n\t);\n};\n\nconst managedEmulatorSerial = (\n\tadb: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst devices = capture([adb, 'devices'], { env });\n\tif (devices.exitCode !== 0) return undefined;\n\n\treturn parseAdbDevices(devices.stdout).find((serial) =>\n\t\tisManagedEmulatorSerial(serial, adb, capture, env)\n\t);\n};\n\nconst completedBootSerial = (\n\tproject: AbsoluteAndroidDevProject,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst serial = managedEmulatorSerial(project.adb, capture, env);\n\tif (!serial) return undefined;\n\tconst booted = capture(\n\t\t[project.adb, '-s', serial, 'shell', 'getprop', 'sys.boot_completed'],\n\t\t{ env }\n\t);\n\n\treturn booted.exitCode === 0 && booted.stdout.trim() === '1'\n\t\t? serial\n\t\t: undefined;\n};\n\nconst preferredCompletedBootSerial = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst booted = capture(\n\t\t[project.adb, '-s', serial, 'shell', 'getprop', 'sys.boot_completed'],\n\t\t{ env }\n\t);\n\n\treturn booted.exitCode === 0 && booted.stdout.trim() === '1'\n\t\t? serial\n\t\t: undefined;\n};\n\nconst waitForManagedEmulator = async (\n\tproject: AbsoluteAndroidDevProject,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tsleep: NonNullable<StartAbsoluteAndroidDevOptions['sleep']>,\n\tenv: Record<string, string | undefined>,\n\tsignal?: AbortSignal,\n\tpreferredSerial?: string\n) => {\n\tconst deadline = Date.now() + ANDROID_BOOT_TIMEOUT_MS;\n\tlet firstSerial = preferredSerial;\n\tconst poll = async () => {\n\t\tthrowIfAborted(signal);\n\t\tconst serial = firstSerial\n\t\t\t? preferredCompletedBootSerial(project, firstSerial, capture, env)\n\t\t\t: completedBootSerial(project, capture, env);\n\t\tfirstSerial = undefined;\n\t\tif (serial) return serial;\n\t\tif (Date.now() >= deadline) {\n\t\t\tthrow new Error(\n\t\t\t\t`Android emulator ${ABSOLUTE_ANDROID_AVD_NAME} did not finish booting within ${ANDROID_BOOT_TIMEOUT_MS / ANDROID_BOOT_POLL_MS}s.`\n\t\t\t);\n\t\t}\n\t\tawait sleep(ANDROID_BOOT_POLL_MS);\n\n\t\treturn poll();\n\t};\n\n\treturn poll();\n};\n\nconst windowsPathFromWsl = (\n\tpath: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>\n) => {\n\tconst result = capture(['wslpath', '-w', path]);\n\tif (result.exitCode !== 0 || !result.stdout.trim()) {\n\t\tthrow new Error(`Could not translate WSL path for Windows: ${path}`);\n\t}\n\n\treturn result.stdout.trim();\n};\n\ntype WindowsGradleDependency = {\n\tname: string;\n\twindowsSource: string;\n};\n\nconst mirroredCapacitorDependencies = async (\n\tproject: Pick<AbsoluteAndroidDevProject, 'nativeDirectory'>,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>\n) => {\n\tconst settingsPath = join(\n\t\tproject.nativeDirectory,\n\t\t'capacitor.settings.gradle'\n\t);\n\tconst settings = await readFile(settingsPath, 'utf8');\n\tconst dependencies: WindowsGradleDependency[] = [];\n\tconst rewrittenSettings = settings.replace(\n\t\tCAPACITOR_PROJECT_DIRECTORY_PATTERN,\n\t\t(_statement, projectName: string, sourcePath: string) => {\n\t\t\tconst name = projectName\n\t\t\t\t.slice(1)\n\t\t\t\t.replaceAll(/[^a-zA-Z0-9_.-]/gu, '_');\n\t\t\tconst source = resolve(project.nativeDirectory, sourcePath);\n\t\t\tdependencies.push({\n\t\t\t\tname,\n\t\t\t\twindowsSource: windowsPathFromWsl(source, capture)\n\t\t\t});\n\n\t\t\treturn `project('${projectName}').projectDir = new File('./.absolutejs-dependencies/${name}')`;\n\t\t}\n\t);\n\tif (dependencies.length === 0) {\n\t\tthrow new Error(\n\t\t\t'Capacitor Android settings did not declare any native dependencies.'\n\t\t);\n\t}\n\n\treturn { dependencies, rewrittenSettings };\n};\n\nconst encodedWindowsGradleCommand = (\n\twindowsSource: string,\n\twindowsDirectory: string,\n\twindowsAndroidRoot: string,\n\tdependencies: WindowsGradleDependency[],\n\trewrittenSettings: string,\n\ttask: AbsoluteAndroidGradleTask,\n\tgradleArguments: readonly string[]\n) => {\n\tconst sourceDirectory = Buffer.from(windowsSource, 'utf8').toString(\n\t\t'base64'\n\t);\n\tconst buildDirectory = Buffer.from(windowsDirectory, 'utf8').toString(\n\t\t'base64'\n\t);\n\tconst androidRoot = Buffer.from(windowsAndroidRoot, 'utf8').toString(\n\t\t'base64'\n\t);\n\tconst dependencyData = Buffer.from(\n\t\tJSON.stringify(dependencies),\n\t\t'utf8'\n\t).toString('base64');\n\tconst settingsData = Buffer.from(rewrittenSettings, 'utf8').toString(\n\t\t'base64'\n\t);\n\tconst argumentsData = Buffer.from(\n\t\tJSON.stringify(gradleArguments),\n\t\t'utf8'\n\t).toString('base64');\n\tconst source = [\n\t\t\"$ErrorActionPreference = 'Stop'\",\n\t\t`$source = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${sourceDirectory}'))`,\n\t\t`$directory = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${buildDirectory}'))`,\n\t\t`$androidHome = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${androidRoot}'))`,\n\t\t`$dependencies = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${dependencyData}')) | ConvertFrom-Json`,\n\t\t`$settings = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${settingsData}'))`,\n\t\t`$gradleArguments = @([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${argumentsData}')) | ConvertFrom-Json)`,\n\t\t'$env:ANDROID_HOME = $androidHome',\n\t\t'$env:ANDROID_SDK_ROOT = $androidHome',\n\t\t'New-Item -ItemType Directory -Force -Path $directory | Out-Null',\n\t\t'& robocopy.exe $source $directory /MIR /XD .gradle build .absolutejs-dependencies /NFL /NDL /NJH /NJS /NP',\n\t\t'$copyExit = $LASTEXITCODE',\n\t\t'if ($copyExit -ge 8) { exit $copyExit }',\n\t\t\"foreach ($dependency in @($dependencies)) { $target = Join-Path $directory ('.absolutejs-dependencies\\\\' + $dependency.name); New-Item -ItemType Directory -Force -Path $target | Out-Null; & robocopy.exe $dependency.windowsSource $target /MIR /XD .gradle build /NFL /NDL /NJH /NJS /NP; if ($LASTEXITCODE -ge 8) { exit $LASTEXITCODE } }\",\n\t\t\"[IO.File]::WriteAllText((Join-Path $directory 'capacitor.settings.gradle'), $settings)\",\n\t\t\"$wrapper = Join-Path $directory 'gradlew.bat'\",\n\t\t`& $wrapper --no-daemon --console=plain -p $directory @gradleArguments ${task}`,\n\t\t'if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }',\n\t\t'exit 0'\n\t].join('; ');\n\n\treturn Buffer.from(source, 'utf16le').toString('base64');\n};\n\nexport type AbsoluteAndroidGradleTask =\n\t| 'assembleDebug'\n\t| 'assembleRelease'\n\t| 'bundleRelease';\n\nexport type BuildAbsoluteAndroidGradleOptions = {\n\tcapture?: NonNullable<StartAbsoluteAndroidDevOptions['capture']>;\n\tenv?: Record<string, string | undefined>;\n\tgradleArguments?: readonly string[];\n\tproject: Pick<\n\t\tAbsoluteAndroidDevProject,\n\t\t'androidRoot' | 'config' | 'host' | 'nativeDirectory' | 'projectRoot'\n\t>;\n\trun?: NonNullable<StartAbsoluteAndroidDevOptions['run']>;\n\tsignal?: AbortSignal;\n\ttask: AbsoluteAndroidGradleTask;\n};\n\nconst gradleArtifactPath = (\n\tnativeDirectory: string,\n\ttask: AbsoluteAndroidGradleTask,\n\twindows = false\n) => {\n\tconst pathJoin = windows ? win32.join : join;\n\tif (task === 'assembleDebug') {\n\t\treturn pathJoin(\n\t\t\tnativeDirectory,\n\t\t\t'app',\n\t\t\t'build',\n\t\t\t'outputs',\n\t\t\t'apk',\n\t\t\t'debug',\n\t\t\t'app-debug.apk'\n\t\t);\n\t}\n\tif (task === 'assembleRelease') {\n\t\treturn pathJoin(\n\t\t\tnativeDirectory,\n\t\t\t'app',\n\t\t\t'build',\n\t\t\t'outputs',\n\t\t\t'apk',\n\t\t\t'release',\n\t\t\t'app-release.apk'\n\t\t);\n\t}\n\n\treturn pathJoin(\n\t\tnativeDirectory,\n\t\t'app',\n\t\t'build',\n\t\t'outputs',\n\t\t'bundle',\n\t\t'release',\n\t\t'app-release.aab'\n\t);\n};\n\nconst resolveGradleArtifactPath = async (\n\tnativeDirectory: string,\n\ttask: AbsoluteAndroidGradleTask\n) => {\n\tconst primary = gradleArtifactPath(nativeDirectory, task);\n\tif (task !== 'assembleRelease' || (await pathExists(primary))) {\n\t\treturn primary;\n\t}\n\n\treturn join(\n\t\tnativeDirectory,\n\t\t'app',\n\t\t'build',\n\t\t'outputs',\n\t\t'apk',\n\t\t'release',\n\t\t'app-release-unsigned.apk'\n\t);\n};\n\nexport const buildAbsoluteAndroidGradleArtifact = async (\n\toptions: BuildAbsoluteAndroidGradleOptions\n) => {\n\tconst { project, task } = options;\n\tconst capture = options.capture ?? captureCommand;\n\tconst run = options.run ?? runCommand;\n\tconst env = options.env ?? process.env;\n\tconst gradleArguments = options.gradleArguments ?? [];\n\tif (project.host === 'wsl') {\n\t\tconst windowsSource = windowsPathFromWsl(\n\t\t\tproject.nativeDirectory,\n\t\t\tcapture\n\t\t);\n\t\tconst buildId = Bun.hash(project.projectRoot).toString(HASH_RADIX);\n\t\tconst managedBuildDirectory = resolve(\n\t\t\tproject.androidRoot,\n\t\t\t'..',\n\t\t\t'..',\n\t\t\t'Builds',\n\t\t\t`${project.config.appId}-${buildId}`\n\t\t);\n\t\tconst windowsDirectory = windowsPathFromWsl(\n\t\t\tmanagedBuildDirectory,\n\t\t\tcapture\n\t\t);\n\t\tconst windowsAndroidRoot = windowsPathFromWsl(\n\t\t\tproject.androidRoot,\n\t\t\tcapture\n\t\t);\n\t\tconst { dependencies, rewrittenSettings } =\n\t\t\tawait mirroredCapacitorDependencies(project, capture);\n\t\tawait requireSuccess(\n\t\t\t[\n\t\t\t\t'powershell.exe',\n\t\t\t\t'-NoProfile',\n\t\t\t\t'-EncodedCommand',\n\t\t\t\tencodedWindowsGradleCommand(\n\t\t\t\t\twindowsSource,\n\t\t\t\t\twindowsDirectory,\n\t\t\t\t\twindowsAndroidRoot,\n\t\t\t\t\tdependencies,\n\t\t\t\t\trewrittenSettings,\n\t\t\t\t\ttask,\n\t\t\t\t\tgradleArguments\n\t\t\t\t)\n\t\t\t],\n\t\t\t'Android Gradle build',\n\t\t\trun,\n\t\t\t{ env, signal: options.signal }\n\t\t);\n\n\t\tconst artifactPath = await resolveGradleArtifactPath(\n\t\t\tmanagedBuildDirectory,\n\t\t\ttask\n\t\t);\n\t\tconst unsigned = artifactPath.endsWith('-unsigned.apk');\n\n\t\treturn {\n\t\t\tartifactPath,\n\t\t\tinstallPath: unsigned\n\t\t\t\t? win32.join(\n\t\t\t\t\t\twindowsDirectory,\n\t\t\t\t\t\t'app',\n\t\t\t\t\t\t'build',\n\t\t\t\t\t\t'outputs',\n\t\t\t\t\t\t'apk',\n\t\t\t\t\t\t'release',\n\t\t\t\t\t\t'app-release-unsigned.apk'\n\t\t\t\t\t)\n\t\t\t\t: gradleArtifactPath(windowsDirectory, task, true)\n\t\t};\n\t}\n\tconst wrapper = project.host === 'windows' ? 'gradlew.bat' : './gradlew';\n\tawait requireSuccess(\n\t\t[wrapper, '--no-daemon', '--console=plain', ...gradleArguments, task],\n\t\t'Android Gradle build',\n\t\trun,\n\t\t{ cwd: project.nativeDirectory, env, signal: options.signal }\n\t);\n\n\tconst artifactPath = await resolveGradleArtifactPath(\n\t\tproject.nativeDirectory,\n\t\ttask\n\t);\n\n\treturn { artifactPath, installPath: artifactPath };\n};\n\nconst buildAndroidDebugApp = async (\n\tproject: AbsoluteAndroidDevProject,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>,\n\tenv: Record<string, string | undefined>,\n\tsignal?: AbortSignal\n) =>\n\t(\n\t\tawait buildAbsoluteAndroidGradleArtifact({\n\t\t\tcapture,\n\t\t\tenv,\n\t\t\tproject,\n\t\t\trun,\n\t\t\tsignal,\n\t\t\ttask: 'assembleDebug'\n\t\t})\n\t).installPath;\n\ntype EnsureAndroidDebugAppOptions = {\n\tcache: AndroidNativeCache | null;\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>;\n\tenv: Record<string, string | undefined>;\n\tfingerprint: string;\n\tlog: NonNullable<StartAbsoluteAndroidDevOptions['log']>;\n\tproject: AbsoluteAndroidDevProject;\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>;\n\tserial: string;\n\tsignal?: AbortSignal;\n\ttransition: (state: AbsoluteAndroidDevState) => void;\n};\n\nconst persistInstalledAndroidNativeCache = async (\n\toptions: EnsureAndroidDebugAppOptions,\n\tinstalled: AndroidInstalledPackage | undefined\n) => {\n\tif (!installed) {\n\t\toptions.log(\n\t\t\t'Android package identity was unavailable; the next session will rebuild safely.'\n\t\t);\n\n\t\treturn;\n\t}\n\tconst installations =\n\t\toptions.cache?.appId === options.project.config.appId &&\n\t\toptions.cache.fingerprint === options.fingerprint\n\t\t\t? { ...options.cache.installations }\n\t\t\t: {};\n\tinstallations[options.serial] = installed.identity;\n\tawait writeNativeCache(options.project.projectRoot, {\n\t\tappId: options.project.config.appId,\n\t\tfingerprint: options.fingerprint,\n\t\tformat: NATIVE_CACHE_FORMAT,\n\t\tinstallations\n\t}).catch((error) => {\n\t\toptions.log(\n\t\t\t`Android native cache could not be saved: ${error instanceof Error ? error.message : String(error)}`\n\t\t);\n\t});\n};\n\nconst ensureAndroidDebugApp = async (options: EnsureAndroidDebugAppOptions) => {\n\tconst installed = androidInstalledPackageIdentity(\n\t\toptions.project,\n\t\toptions.serial,\n\t\toptions.capture,\n\t\toptions.env\n\t);\n\tconst cacheHit =\n\t\toptions.cache?.appId === options.project.config.appId &&\n\t\toptions.cache.fingerprint === options.fingerprint &&\n\t\tinstalled !== undefined &&\n\t\toptions.cache.installations[options.serial] === installed.identity;\n\tif (cacheHit) {\n\t\toptions.log(\n\t\t\t`Android native app is unchanged on ${options.serial}; skipped Gradle build and APK install.`\n\t\t);\n\n\t\treturn { nativeCacheHit: true, uid: installed.uid };\n\t}\n\toptions.log(\n\t\t'Android native inputs changed or the installed app is stale; rebuilding.'\n\t);\n\toptions.transition('building');\n\tconst installPath = await buildAndroidDebugApp(\n\t\toptions.project,\n\t\toptions.capture,\n\t\toptions.run,\n\t\toptions.env,\n\t\toptions.signal\n\t);\n\tthrowIfAborted(options.signal);\n\toptions.transition('installing');\n\tawait requireSuccess(\n\t\t[\n\t\t\toptions.project.adb,\n\t\t\t'-s',\n\t\t\toptions.serial,\n\t\t\t'install',\n\t\t\t'-r',\n\t\t\tinstallPath\n\t\t],\n\t\t'Android app installation',\n\t\toptions.run,\n\t\t{ env: options.env, signal: options.signal }\n\t);\n\tconst updated = androidInstalledPackageIdentity(\n\t\toptions.project,\n\t\toptions.serial,\n\t\toptions.capture,\n\t\toptions.env\n\t);\n\tawait persistInstalledAndroidNativeCache(options, updated);\n\n\treturn { nativeCacheHit: false, uid: updated?.uid };\n};\n\nconst startManagedEmulatorIfNeeded = (\n\tproject: AbsoluteAndroidDevProject,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tspawn: NonNullable<StartAbsoluteAndroidDevOptions['spawn']>,\n\tlog: NonNullable<StartAbsoluteAndroidDevOptions['log']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst serial = managedEmulatorSerial(project.adb, capture, env);\n\tif (serial) return { serial, started: false };\n\tlog(`Starting Android emulator ${ABSOLUTE_ANDROID_AVD_NAME}...`);\n\tspawn(\n\t\t[\n\t\t\tproject.emulator,\n\t\t\t'-avd',\n\t\t\tABSOLUTE_ANDROID_AVD_NAME,\n\t\t\t'-netdelay',\n\t\t\t'none',\n\t\t\t'-netspeed',\n\t\t\t'full'\n\t\t],\n\t\t{ env }\n\t);\n\n\treturn { serial: undefined, started: true };\n};\n\nconst logHttpsCertificateRequirement = (\n\thttps: boolean | undefined,\n\tlog: NonNullable<StartAbsoluteAndroidDevOptions['log']>\n) => {\n\tif (https !== true) return;\n\tlog(\n\t\t'Android HMR is using HTTPS; the emulator must trust the local development certificate authority.'\n\t);\n};\n\nconst removeAdbReverse = async (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string | undefined,\n\tport: number,\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tif (!serial) return;\n\tawait run(\n\t\t[project.adb, '-s', serial, 'reverse', '--remove', `tcp:${port}`],\n\t\t{ env }\n\t).catch(() => undefined);\n};\n\nconst androidLaunchCommand = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string\n) => [\n\tproject.adb,\n\t'-s',\n\tserial,\n\t'shell',\n\t'monkey',\n\t'-p',\n\tproject.config.appId,\n\t'-c',\n\t'android.intent.category.LAUNCHER',\n\t'1'\n];\n\nconst stopAndroidAppCommand = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string\n) => [\n\tproject.adb,\n\t'-s',\n\tserial,\n\t'shell',\n\t'am',\n\t'force-stop',\n\tproject.config.appId\n];\n\nconst launchAndroidApp = async (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tdescription: string,\n\trun: NonNullable<StartAbsoluteAndroidDevOptions['run']>,\n\toptions: {\n\t\tenv: Record<string, string | undefined>;\n\t\tsignal?: AbortSignal;\n\t}\n) => {\n\tawait requireSuccess(\n\t\tstopAndroidAppCommand(project, serial),\n\t\t`${description} reset`,\n\t\trun,\n\t\toptions\n\t);\n\tawait requireSuccess(\n\t\tandroidLaunchCommand(project, serial),\n\t\tdescription,\n\t\trun,\n\t\toptions\n\t);\n};\n\nconst androidPackageUid = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst result = capture(\n\t\t[\n\t\t\tproject.adb,\n\t\t\t'-s',\n\t\t\tserial,\n\t\t\t'shell',\n\t\t\t'cmd',\n\t\t\t'package',\n\t\t\t'list',\n\t\t\t'packages',\n\t\t\t'-U',\n\t\t\tproject.config.appId\n\t\t],\n\t\t{ env }\n\t);\n\tif (result.exitCode !== 0) return undefined;\n\tconst escapedAppId = project.config.appId.replace(\n\t\t/[.*+?^${}()|[\\]\\\\]/gu,\n\t\t'\\\\$&'\n\t);\n\tconst match = new RegExp(`package:${escapedAppId}\\\\s+uid:(\\\\d+)`, 'u').exec(\n\t\tresult.stdout\n\t);\n\n\treturn match?.[1];\n};\n\nconst androidInstalledPackageIdentity = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>\n) => {\n\tconst result = capture(\n\t\t[\n\t\t\tproject.adb,\n\t\t\t'-s',\n\t\t\tserial,\n\t\t\t'shell',\n\t\t\t'dumpsys',\n\t\t\t'package',\n\t\t\tproject.config.appId\n\t\t],\n\t\t{ env }\n\t);\n\tif (result.exitCode !== 0) return undefined;\n\tconst codePath = /^\\s*codePath=(.+)$/mu.exec(result.stdout)?.[1]?.trim();\n\tconst lastUpdateTime = /^\\s*lastUpdateTime=(.+)$/mu\n\t\t.exec(result.stdout)?.[1]\n\t\t?.trim();\n\tif (!codePath || !lastUpdateTime) return undefined;\n\tconst uid = /^\\s*appId=(\\d+)$/mu.exec(result.stdout)?.[1];\n\n\treturn { identity: `${codePath}\\0${lastUpdateTime}`, uid };\n};\n\nconst attachAndroidNativeLogs = (\n\tproject: AbsoluteAndroidDevProject,\n\tserial: string,\n\tcapture: NonNullable<StartAbsoluteAndroidDevOptions['capture']>,\n\tenv: Record<string, string | undefined>,\n\toptions: StartAbsoluteAndroidDevOptions,\n\tknownUid?: string\n) => {\n\tif (!options.nativeLog) return null;\n\tconst uid = knownUid ?? androidPackageUid(project, serial, capture, env);\n\tif (!uid) {\n\t\toptions.log?.(\n\t\t\t`Android app logs unavailable: could not resolve the package UID for ${project.config.appId}.`\n\t\t);\n\n\t\treturn null;\n\t}\n\tconst onLine = (line: string) => {\n\t\tconst entry = parseAbsoluteAndroidLogLine(line);\n\t\t// Capacitor 8 SystemBars can run before documentElement exists. A later\n\t\t// inset pass applies the values; keep the plugin enabled because disabling\n\t\t// it breaks edge-to-edge layout on Android 16. Remove this narrow filter\n\t\t// when https://github.com/ionic-team/capacitor/issues/8530 is fixed.\n\t\tif (entry && !isIgnorableAbsoluteAndroidLog(entry)) {\n\t\t\toptions.nativeLog?.(entry);\n\t\t}\n\t};\n\n\treturn (options.startNativeLogs ?? startNativeLogStream)(\n\t\t[\n\t\t\tproject.adb,\n\t\t\t'-s',\n\t\t\tserial,\n\t\t\t'logcat',\n\t\t\t`--uid=${uid}`,\n\t\t\t'-v',\n\t\t\t'threadtime',\n\t\t\t'-T',\n\t\t\t'1',\n\t\t\t'*:W',\n\t\t\t'Capacitor:V',\n\t\t\t'Capacitor/Console:V',\n\t\t\t'chromium:I'\n\t\t],\n\t\t{ env },\n\t\tonLine\n\t);\n};\n\nexport const prepareAbsoluteAndroidDevProject = async (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\toptions: PrepareAbsoluteAndroidDevOptions\n): Promise<AbsoluteAndroidDevProject> => {\n\tconst projectRoot = resolve(options.projectRoot);\n\tconst host = detectAbsoluteMobileHost();\n\tconst androidRoot =\n\t\tprocess.env.ANDROID_HOME ??\n\t\tprocess.env.ANDROID_SDK_ROOT ??\n\t\tabsoluteManagedAndroidSdkRoot(host);\n\tconst checks = await inspectAbsoluteMobileToolchain({ androidRoot, host });\n\tconst failed = checks.filter(\n\t\t(check) =>\n\t\t\tcheck.platform === 'android' &&\n\t\t\t(check.status === 'fail' || check.status === 'warn')\n\t);\n\tif (failed.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Android emulation is not ready: ${failed.map(({ label }) => label).join(', ')}.`\n\t\t);\n\t}\n\tconst adb = checks.find((check) => check.id === 'android.adb')?.path;\n\tconst emulator = checks.find(\n\t\t(check) => check.id === 'android.emulator'\n\t)?.path;\n\tif (!adb || !emulator) {\n\t\tthrow new Error(\n\t\t\t'Android SDK tools disappeared after readiness checks.'\n\t\t);\n\t}\n\tconst cap = join(\n\t\tprojectRoot,\n\t\t'node_modules',\n\t\t'.bin',\n\t\thost === 'windows' ? 'cap.cmd' : 'cap'\n\t);\n\tif (!(await pathExists(cap))) {\n\t\tthrow new Error(\n\t\t\t'Capacitor CLI is not installed. Run absolute mobile init first.'\n\t\t);\n\t}\n\tawait writeAbsoluteCapacitorConfig(config, { projectRoot });\n\tawait mkdir(config.bundleDirectory, { recursive: true });\n\tconst placeholder = join(config.bundleDirectory, 'index.html');\n\tif (!(await pathExists(placeholder))) {\n\t\tawait writeFile(\n\t\t\tplaceholder,\n\t\t\t'<!doctype html><title>AbsoluteJS mobile development</title>\\n'\n\t\t);\n\t}\n\tconst nativeDirectory = join(config.nativeProjectDirectory, 'android');\n\tif (!(await pathExists(nativeDirectory))) {\n\t\tif (!options.createNativeProject) {\n\t\t\tthrow new Error('Android native project has not been created.');\n\t\t}\n\t\tconst run = options.run ?? runCommand;\n\t\tif (\n\t\t\t(await run([cap, 'add', 'android'], {\n\t\t\t\tcwd: projectRoot\n\t\t\t})) !== 0\n\t\t) {\n\t\t\tthrow new Error('Capacitor Android project creation failed.');\n\t\t}\n\t}\n\n\treturn {\n\t\tadb,\n\t\tandroidRoot,\n\t\tcap,\n\t\tconfig,\n\t\temulator,\n\t\thost,\n\t\tnativeDirectory,\n\t\tprojectRoot\n\t};\n};\n\nexport const startAbsoluteAndroidDevSession = async (\n\toptions: StartAbsoluteAndroidDevOptions\n) => {\n\tconst { project } = options;\n\tconst startupStartedAt = performance.now();\n\tlet phaseStartedAt = performance.now();\n\tconst phaseDurations: Record<string, number> = {};\n\tlet state: AbsoluteAndroidDevState = 'syncing';\n\tconst transition = (next: AbsoluteAndroidDevState) => {\n\t\tif (next === state) {\n\t\t\toptions.onStateChange?.(next);\n\n\t\t\treturn;\n\t\t}\n\t\tconst now = performance.now();\n\t\tconst durationMs = now - phaseStartedAt;\n\t\tphaseDurations[state] = (phaseDurations[state] ?? 0) + durationMs;\n\t\toptions.onPhaseTiming?.({\n\t\t\tdurationMs,\n\t\t\tphase: state,\n\t\t\ttotalMs: now - startupStartedAt\n\t\t});\n\t\tstate = next;\n\t\tphaseStartedAt = now;\n\t\toptions.onStateChange?.(next);\n\t};\n\tconst capture = options.capture ?? captureCommand;\n\tconst run = options.run ?? runCommand;\n\tconst sleep = options.sleep ?? Bun.sleep;\n\tconst spawn = options.spawn ?? spawnCommand;\n\tconst log = options.log ?? console.log;\n\tconst androidHome =\n\t\tproject.host === 'wsl'\n\t\t\t? windowsPathFromWsl(project.androidRoot, capture)\n\t\t\t: project.androidRoot;\n\tconst env: Record<string, string | undefined> = {\n\t\t...process.env,\n\t\tANDROID_HOME: androidHome\n\t};\n\ttransition('syncing');\n\tawait repairAbsoluteAndroidDevSession(project.projectRoot);\n\tthrowIfAborted(options.signal);\n\tawait requireSuccess(\n\t\t[project.cap, 'sync', 'android'],\n\t\t'Capacitor Android synchronization',\n\t\trun,\n\t\t{ cwd: project.projectRoot, env, signal: options.signal }\n\t);\n\tthrowIfAborted(options.signal);\n\ttransition('configuring');\n\tconst nativeConfigPath = join(\n\t\tproject.nativeDirectory,\n\t\t'app',\n\t\t'src',\n\t\t'main',\n\t\t'assets',\n\t\t'capacitor.config.json'\n\t);\n\tconst nativeManifestPath = join(\n\t\tproject.nativeDirectory,\n\t\t'app',\n\t\t'src',\n\t\t'main',\n\t\t'AndroidManifest.xml'\n\t);\n\tlet connectedSerial: string | undefined;\n\tlet nativeLogs: AbsoluteAndroidLogStream | null = null;\n\tconst closeNativeLogs = async () => {\n\t\tconst stream = nativeLogs;\n\t\tnativeLogs = null;\n\t\tawait stream?.close().catch(() => undefined);\n\t};\n\ttry {\n\t\tawait writeDevConfig(\n\t\t\tproject.projectRoot,\n\t\t\tnativeConfigPath,\n\t\t\tnativeManifestPath,\n\t\t\toptions.port,\n\t\t\toptions.https === true,\n\t\t\tproject.config.entry,\n\t\t\toptions.embeddedBundle === true\n\t\t);\n\t\tthrowIfAborted(options.signal);\n\t\tlogHttpsCertificateRequirement(options.https, log);\n\t\tconst fingerprintStartedAt = performance.now();\n\t\tconst nativeFingerprintPromise =\n\t\t\tfingerprintAbsoluteAndroidNativeProject(project, {\n\t\t\t\tincludePublicBundle: options.embeddedBundle === true\n\t\t\t}).then((fingerprint) => {\n\t\t\t\tphaseDurations.fingerprinting =\n\t\t\t\t\tperformance.now() - fingerprintStartedAt;\n\n\t\t\t\treturn fingerprint;\n\t\t\t});\n\t\ttransition('booting');\n\t\tconst emulator = startManagedEmulatorIfNeeded(\n\t\t\tproject,\n\t\t\tcapture,\n\t\t\tspawn,\n\t\t\tlog,\n\t\t\tenv\n\t\t);\n\t\tconst { started: startedEmulator } = emulator;\n\t\ttransition('connecting');\n\t\tconst serial = await waitForManagedEmulator(\n\t\t\tproject,\n\t\t\tcapture,\n\t\t\tsleep,\n\t\t\tenv,\n\t\t\toptions.signal,\n\t\t\temulator.serial\n\t\t);\n\t\tconnectedSerial = serial;\n\t\ttransition('forwarding');\n\t\tawait requireSuccess(\n\t\t\t[\n\t\t\t\tproject.adb,\n\t\t\t\t'-s',\n\t\t\t\tserial,\n\t\t\t\t'reverse',\n\t\t\t\t`tcp:${options.port}`,\n\t\t\t\t`tcp:${options.port}`\n\t\t\t],\n\t\t\t'ADB reverse port forwarding',\n\t\t\trun,\n\t\t\t{ env, signal: options.signal }\n\t\t);\n\t\tthrowIfAborted(options.signal);\n\t\tconst nativeFingerprint = await nativeFingerprintPromise;\n\t\tthrowIfAborted(options.signal);\n\t\ttransition('checking-native');\n\t\tconst cache = await readNativeCache(project.projectRoot);\n\t\tconst installedApp = await ensureAndroidDebugApp({\n\t\t\tcache,\n\t\t\tcapture,\n\t\t\tenv,\n\t\t\tfingerprint: nativeFingerprint,\n\t\t\tlog,\n\t\t\tproject,\n\t\t\trun,\n\t\t\tserial,\n\t\t\tsignal: options.signal,\n\t\t\ttransition\n\t\t});\n\t\tconst { nativeCacheHit, uid } = installedApp;\n\t\tthrowIfAborted(options.signal);\n\t\ttransition('launching');\n\t\tawait launchAndroidApp(project, serial, 'Android app launch', run, {\n\t\t\tenv,\n\t\t\tsignal: options.signal\n\t\t});\n\t\tthrowIfAborted(options.signal);\n\t\tif (options.nativeLog) transition('streaming-logs');\n\t\tnativeLogs = attachAndroidNativeLogs(\n\t\t\tproject,\n\t\t\tserial,\n\t\t\tcapture,\n\t\t\tenv,\n\t\t\toptions,\n\t\t\tuid\n\t\t);\n\t\ttransition('ready');\n\t\tphaseDurations.total = performance.now() - startupStartedAt;\n\t\tlog(\n\t\t\toptions.embeddedBundle === true\n\t\t\t\t? `Android emulator connected (${serial}) with the embedded bundle and backend on port ${options.port} in ${getDurationString(phaseDurations.total)} (${nativeCacheHit ? 'native cache hit' : 'native build installed'}).`\n\t\t\t\t: `Android emulator connected (${serial}) with HMR on port ${options.port} in ${getDurationString(phaseDurations.total)} (${nativeCacheHit ? 'native cache hit' : 'native build installed'}).`\n\t\t);\n\t\tlog(`Android startup: ${androidTimingSummary(phaseDurations)}.`);\n\t\tlet closed = false;\n\t\tconst close = async () => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\ttransition('closing');\n\t\t\tawait closeNativeLogs();\n\t\t\tawait removeAdbReverse(project, serial, options.port, run, env);\n\t\t\tawait repairAbsoluteAndroidDevSession(project.projectRoot);\n\t\t\ttransition('closed');\n\t\t};\n\n\t\treturn {\n\t\t\tclose,\n\t\t\tnativeCacheHit,\n\t\t\tserial,\n\t\t\tstartedEmulator,\n\t\t\ttimings: { ...phaseDurations },\n\t\t\trebuild: async () => {\n\t\t\t\tif (closed) {\n\t\t\t\t\tthrow new Error('Android development session is closed.');\n\t\t\t\t}\n\t\t\t\tlog(\n\t\t\t\t\t'Android native inputs changed; rebuilding without restarting the dev server.'\n\t\t\t\t);\n\t\t\t\tawait close();\n\n\t\t\t\treturn startAbsoluteAndroidDevSession(options);\n\t\t\t},\n\t\t\trelaunch: async () => {\n\t\t\t\tif (closed) {\n\t\t\t\t\tthrow new Error('Android development session is closed.');\n\t\t\t\t}\n\t\t\t\ttransition('launching');\n\t\t\t\ttry {\n\t\t\t\t\tawait launchAndroidApp(\n\t\t\t\t\t\tproject,\n\t\t\t\t\t\tserial,\n\t\t\t\t\t\t'Android app relaunch',\n\t\t\t\t\t\trun,\n\t\t\t\t\t\t{ env, signal: options.signal }\n\t\t\t\t\t);\n\t\t\t\t\ttransition('ready');\n\t\t\t\t\tlog(`Android app relaunched on ${serial}.`);\n\t\t\t\t} catch (error) {\n\t\t\t\t\ttransition('failed');\n\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t\tget state() {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t};\n\t} catch (error) {\n\t\ttransition('failed');\n\t\tawait closeNativeLogs();\n\t\tawait removeAdbReverse(\n\t\t\tproject,\n\t\t\tconnectedSerial,\n\t\t\toptions.port,\n\t\t\trun,\n\t\t\tenv\n\t\t);\n\t\tawait repairAbsoluteAndroidDevSession(project.projectRoot);\n\n\t\tthrow error;\n\t}\n};\n",
14
15
  "import { access, readFile, rename, writeFile } from 'node:fs/promises';\nimport { relative, resolve } from 'node:path';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\n\nexport type WriteAbsoluteCapacitorConfigOptions = {\n\tforce?: boolean;\n\tprojectRoot: string;\n};\n\nconst CONFIG_FILE = 'capacitor.config.ts';\n\nconst portableRelative = (root: string, path: string) =>\n\trelative(root, path).replaceAll('\\\\', '/');\n\nconst capacitorConfigSource = (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\tprojectRoot: string\n) => `import type { CapacitorConfig } from '@capacitor/cli';\n\nconst config: CapacitorConfig = {\n\tappId: ${JSON.stringify(config.appId)},\n\tappName: ${JSON.stringify(config.appName)},\n\twebDir: ${JSON.stringify(portableRelative(projectRoot, config.bundleDirectory))},\n\tandroid: {\n\t\tpath: ${JSON.stringify(portableRelative(projectRoot, `${config.nativeProjectDirectory}/android`))}\n\t},\n\tios: {\n\t\tpath: ${JSON.stringify(portableRelative(projectRoot, `${config.nativeProjectDirectory}/ios`))}\n\t}\n};\n\nexport default config;\n`;\n\nconst exists = async (path: string) => {\n\ttry {\n\t\tawait access(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport const writeAbsoluteCapacitorConfig = async (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\toptions: WriteAbsoluteCapacitorConfigOptions\n) => {\n\tconst projectRoot = resolve(options.projectRoot);\n\tconst destination = resolve(projectRoot, CONFIG_FILE);\n\tconst source = capacitorConfigSource(config, projectRoot);\n\tif (await exists(destination)) {\n\t\tconst current = await readFile(destination, 'utf8');\n\t\tif (current === source) return { changed: false, path: destination };\n\t\tif (!options.force) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`${CONFIG_FILE} already exists and differs; rerun with --force only after reviewing it.`\n\t\t\t);\n\t\t}\n\t}\n\tconst temporary = `${destination}.${crypto.randomUUID()}.tmp`;\n\tawait writeFile(temporary, source, { flag: 'wx' });\n\tawait rename(temporary, destination);\n\n\treturn { changed: true, path: destination };\n};\n",
15
16
  "import { createHash } from 'node:crypto';\nimport {\n\taccess,\n\tcopyFile,\n\tmkdir,\n\tmkdtemp,\n\treaddir,\n\treadFile,\n\trename,\n\trm,\n\tstat,\n\twriteFile\n} from 'node:fs/promises';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\nimport {\n\tdetectAbsoluteMobileHost,\n\ttype AbsoluteMobileHost\n} from './emulatorDoctor';\n\nexport const ABSOLUTE_IOS_RELEASE_FORMAT = 1 as const;\n\nexport type AbsoluteIosReleaseMetadata = {\n\tappBuild: string;\n\tappId: string;\n\tartifact: 'App.ipa';\n\tbuildNumber?: number;\n\tbytes: number;\n\tengine: 'capacitor';\n\tformat: typeof ABSOLUTE_IOS_RELEASE_FORMAT;\n\tmarketingVersion: string;\n\tplatform: 'ios';\n\treleaseId: string;\n\truntime: string;\n\tsha256: string;\n\tsigned: boolean;\n\ttype: 'ipa';\n};\n\ntype MobileClientManifest = {\n\tappBuild: string;\n\tappId: string;\n\truntime: string;\n};\ntype CommandOptions = {\n\tcwd?: string;\n\tenv?: Record<string, string | undefined>;\n};\ntype CommandResult = { exitCode: number; stderr: string; stdout: string };\n\nexport type BuildAbsoluteIosReleaseOptions = {\n\tallowUnsigned?: boolean;\n\tcapture?: (command: string[], options?: CommandOptions) => CommandResult;\n\tconfig: NormalizedAbsoluteMobileConfig;\n\thost?: AbsoluteMobileHost;\n\toutputDirectory?: string;\n\tprepareBuildNumber?: (buildIdentity: string) => Promise<number>;\n\tprojectRoot: string;\n\trun?: (command: string[], options?: CommandOptions) => Promise<number>;\n\tbuildNumber?: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst requireManifest = (value: unknown): MobileClientManifest => {\n\tif (\n\t\t!isRecord(value) ||\n\t\ttypeof value.appBuild !== 'string' ||\n\t\ttypeof value.appId !== 'string' ||\n\t\ttypeof value.runtime !== 'string'\n\t) {\n\t\tthrow new TypeError('Invalid embedded AbsoluteJS mobile manifest.');\n\t}\n\n\treturn {\n\t\tappBuild: value.appBuild,\n\t\tappId: value.appId,\n\t\truntime: value.runtime\n\t};\n};\n\nconst pathExists = async (path: string) => {\n\ttry {\n\t\tawait access(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst defaultRun = async (command: string[], options: CommandOptions = {}) => {\n\tconst process = Bun.spawn(command, {\n\t\tcwd: options.cwd,\n\t\tenv: options.env,\n\t\tstderr: 'inherit',\n\t\tstdin: 'inherit',\n\t\tstdout: 'inherit'\n\t});\n\n\treturn process.exited;\n};\n\nconst defaultCapture = (command: string[], options: CommandOptions = {}) => {\n\ttry {\n\t\tconst result = Bun.spawnSync(command, {\n\t\t\tcwd: options.cwd,\n\t\t\tenv: options.env,\n\t\t\tstderr: 'pipe',\n\t\t\tstdin: 'ignore',\n\t\t\tstdout: 'pipe'\n\t\t});\n\n\t\treturn {\n\t\t\texitCode: result.exitCode,\n\t\t\tstderr: result.stderr.toString(),\n\t\t\tstdout: result.stdout.toString()\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\texitCode: 1,\n\t\t\tstderr: error instanceof Error ? error.message : String(error),\n\t\t\tstdout: ''\n\t\t};\n\t}\n};\n\nconst ignoredFingerprintDirectories = new Set([\n\t'Pods',\n\t'DerivedData',\n\t'build',\n\t'xcuserdata'\n]);\n\nconst fingerprintFiles = async (\n\troot: string,\n\tcurrent = root\n): Promise<string[]> => {\n\tconst entries = await readdir(current, { withFileTypes: true });\n\tconst nested = await Promise.all(\n\t\tentries\n\t\t\t.sort((left, right) => left.name.localeCompare(right.name))\n\t\t\t.map(async (entry) => {\n\t\t\t\tconst path = join(current, entry.name);\n\t\t\t\tconst projectRelative = relative(root, path).replaceAll(\n\t\t\t\t\t'\\\\',\n\t\t\t\t\t'/'\n\t\t\t\t);\n\t\t\t\tconst ignored =\n\t\t\t\t\tentry.isDirectory() &&\n\t\t\t\t\t(ignoredFingerprintDirectories.has(entry.name) ||\n\t\t\t\t\t\tprojectRelative === 'App/App/public');\n\t\t\t\tif (ignored) return [];\n\t\t\t\tif (entry.isDirectory()) return fingerprintFiles(root, path);\n\n\t\t\t\treturn entry.isFile() ? [path] : [];\n\t\t\t})\n\t);\n\n\treturn nested.flat();\n};\n\nexport const fingerprintAbsoluteIosNativeProject = async (\n\tnativeDirectory: string\n) => {\n\tconst hasher = createHash('sha256');\n\tconst files = await fingerprintFiles(nativeDirectory);\n\tconst contents = await Promise.all(files.map((file) => readFile(file)));\n\tfiles.forEach((file, index) => {\n\t\thasher.update(relative(nativeDirectory, file).replaceAll('\\\\', '/'));\n\t\thasher.update('\\0');\n\t\thasher.update(contents[index] ?? new Uint8Array());\n\t\thasher.update('\\0');\n\t});\n\n\treturn hasher.digest('hex');\n};\n\nconst safeOutputDirectory = (projectRoot: string, requested?: string) => {\n\tconst root = resolve(projectRoot);\n\tconst output = resolve(\n\t\troot,\n\t\trequested ?? '.absolutejs/mobile/releases/ios'\n\t);\n\tconst projectRelative = relative(root, output);\n\tif (\n\t\tprojectRelative === '..' ||\n\t\tprojectRelative.startsWith(`..${sep}`) ||\n\t\tisAbsolute(projectRelative)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'mobile build --outdir must remain inside the project.'\n\t\t);\n\t}\n\n\treturn output;\n};\n\nconst sha256File = async (path: string) =>\n\tcreateHash('sha256')\n\t\t.update(await readFile(path))\n\t\t.digest('hex');\n\nconst findByExtension = async (\n\troot: string,\n\textension: string\n): Promise<string | undefined> => {\n\tif (!(await pathExists(root))) return undefined;\n\tconst entries = await readdir(root, { withFileTypes: true });\n\tconst matches = await Promise.all(\n\t\tentries.map(async (entry) => {\n\t\t\tconst path = join(root, entry.name);\n\t\t\tif (entry.isDirectory() && entry.name.endsWith(extension))\n\t\t\t\treturn path;\n\t\t\tif (entry.isFile() && entry.name.endsWith(extension)) return path;\n\n\t\t\treturn entry.isDirectory()\n\t\t\t\t? findByExtension(path, extension)\n\t\t\t\t: undefined;\n\t\t})\n\t);\n\n\treturn matches.find((match) => match !== undefined);\n};\n\nconst exportOptions = () => `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\"><dict>\n\t<key>destination</key><string>export</string>\n\t<key>manageAppVersionAndBuildNumber</key><false/>\n\t<key>method</key><string>app-store-connect</string>\n\t<key>signingStyle</key><string>automatic</string>\n\t<key>stripSwiftSymbols</key><true/>\n\t<key>uploadSymbols</key><true/>\n</dict></plist>\n`;\n\nconst requireBuildNumber = (value: number | undefined) => {\n\tif (value !== undefined && (!Number.isSafeInteger(value) || value < 1))\n\t\tthrow new TypeError('iOS build number must be a positive integer.');\n\n\treturn value;\n};\n\nconst installRelease = async (\n\tartifactPath: string,\n\tmetadata: Omit<AbsoluteIosReleaseMetadata, 'artifact'>,\n\toutputRoot: string\n) => {\n\tconst releaseRoot = join(outputRoot, metadata.releaseId);\n\tconst destination = join(releaseRoot, 'App.ipa');\n\tif (await pathExists(releaseRoot)) {\n\t\tconst value: unknown = JSON.parse(\n\t\t\tawait readFile(join(releaseRoot, 'release.json'), 'utf8')\n\t\t);\n\t\tif (\n\t\t\t!isRecord(value) ||\n\t\t\tvalue.artifact !== 'App.ipa' ||\n\t\t\tObject.entries(metadata).some(\n\t\t\t\t([key, expected]) => Reflect.get(value, key) !== expected\n\t\t\t)\n\t\t) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Immutable iOS release ${metadata.releaseId} does not match its content.`\n\t\t\t);\n\t\t}\n\t\tconst [bytes, sha256] = await Promise.all([\n\t\t\tstat(destination).then(({ size }) => size),\n\t\t\tsha256File(destination)\n\t\t]);\n\t\tif (bytes !== metadata.bytes || sha256 !== metadata.sha256)\n\t\t\tthrow new TypeError(\n\t\t\t\t`Immutable iOS release ${metadata.releaseId} artifact is missing or modified.`\n\t\t\t);\n\n\t\treturn {\n\t\t\tartifactPath: destination,\n\t\t\tmetadata: {\n\t\t\t\t...metadata,\n\t\t\t\tartifact: 'App.ipa'\n\t\t\t} satisfies AbsoluteIosReleaseMetadata,\n\t\t\treleaseRoot\n\t\t};\n\t}\n\tawait mkdir(dirname(releaseRoot), { recursive: true });\n\tconst staging = await mkdtemp(join(dirname(releaseRoot), '.ios-stage-'));\n\ttry {\n\t\tawait copyFile(artifactPath, join(staging, 'App.ipa'));\n\t\tconst complete = {\n\t\t\t...metadata,\n\t\t\tartifact: 'App.ipa'\n\t\t} satisfies AbsoluteIosReleaseMetadata;\n\t\tawait writeFile(\n\t\t\tjoin(staging, 'release.json'),\n\t\t\t`${JSON.stringify(complete, null, '\\t')}\\n`,\n\t\t\t{ flag: 'wx' }\n\t\t);\n\t\tawait rename(staging, releaseRoot);\n\n\t\treturn { artifactPath: destination, metadata: complete, releaseRoot };\n\t} finally {\n\t\tawait rm(staging, { force: true, recursive: true }).catch(\n\t\t\t() => undefined\n\t\t);\n\t}\n};\n\nexport const buildAbsoluteIosRelease = async (\n\toptions: BuildAbsoluteIosReleaseOptions\n) => {\n\tif (options.buildNumber !== undefined && options.prepareBuildNumber)\n\t\tthrow new TypeError(\n\t\t\t'iOS release buildNumber and prepareBuildNumber cannot be combined.'\n\t\t);\n\tif ((options.host ?? detectAbsoluteMobileHost()) !== 'macos')\n\t\tthrow new TypeError('iOS release builds require macOS and Xcode.');\n\tconst marketingVersion = options.config.iosVersion;\n\tif (!marketingVersion)\n\t\tthrow new TypeError(\n\t\t\t'iOS release builds require mobile.ios.version in absolutejs.config.ts.'\n\t\t);\n\tconst manifest = requireManifest(\n\t\tJSON.parse(\n\t\t\tawait readFile(\n\t\t\t\tjoin(\n\t\t\t\t\toptions.config.bundleDirectory,\n\t\t\t\t\t'absolute-mobile-manifest.json'\n\t\t\t\t),\n\t\t\t\t'utf8'\n\t\t\t)\n\t\t)\n\t);\n\tif (manifest.appId !== options.config.appId)\n\t\tthrow new TypeError(\n\t\t\t'Embedded mobile manifest appId does not match mobile.appId.'\n\t\t);\n\tconst nativeDirectory = join(options.config.nativeProjectDirectory, 'ios');\n\tlet buildNumber = requireBuildNumber(options.buildNumber);\n\tif (options.prepareBuildNumber) {\n\t\tconst nativeFingerprint =\n\t\t\tawait fingerprintAbsoluteIosNativeProject(nativeDirectory);\n\t\tconst buildIdentity = createHash('sha256')\n\t\t\t.update(\n\t\t\t\t`${manifest.appBuild}\\0${nativeFingerprint}\\0${marketingVersion}`\n\t\t\t)\n\t\t\t.digest('hex');\n\t\tbuildNumber = requireBuildNumber(\n\t\t\tawait options.prepareBuildNumber(buildIdentity)\n\t\t);\n\t}\n\tconst stagingParent = resolve(options.projectRoot, '.absolutejs/mobile');\n\tawait mkdir(stagingParent, { recursive: true });\n\tconst staging = await mkdtemp(join(stagingParent, '.ios-build-'));\n\tconst archivePath = join(staging, 'App.xcarchive');\n\tconst exportPath = join(staging, 'export');\n\tconst exportPlist = join(staging, 'ExportOptions.plist');\n\tawait mkdir(exportPath, { recursive: true });\n\tawait writeFile(exportPlist, exportOptions());\n\tconst run = options.run ?? defaultRun;\n\ttry {\n\t\tconst versionArguments = [\n\t\t\t`MARKETING_VERSION=${marketingVersion}`,\n\t\t\t...(buildNumber === undefined\n\t\t\t\t? []\n\t\t\t\t: [`CURRENT_PROJECT_VERSION=${buildNumber}`])\n\t\t];\n\t\tconst archiveExit = await run(\n\t\t\t[\n\t\t\t\t'xcodebuild',\n\t\t\t\t'-workspace',\n\t\t\t\tjoin(nativeDirectory, 'App', 'App.xcworkspace'),\n\t\t\t\t'-scheme',\n\t\t\t\t'App',\n\t\t\t\t'-configuration',\n\t\t\t\t'Release',\n\t\t\t\t'-destination',\n\t\t\t\t'generic/platform=iOS',\n\t\t\t\t'-archivePath',\n\t\t\t\tarchivePath,\n\t\t\t\t...versionArguments,\n\t\t\t\t'archive'\n\t\t\t],\n\t\t\t{ cwd: nativeDirectory }\n\t\t);\n\t\tif (archiveExit !== 0)\n\t\t\tthrow new TypeError('Xcode failed to archive the iOS app.');\n\t\tconst archivedApp = await findByExtension(\n\t\t\tjoin(archivePath, 'Products', 'Applications'),\n\t\t\t'.app'\n\t\t);\n\t\tconst capture = options.capture ?? defaultCapture;\n\t\tconst signed = archivedApp\n\t\t\t? capture([\n\t\t\t\t\t'codesign',\n\t\t\t\t\t'--verify',\n\t\t\t\t\t'--deep',\n\t\t\t\t\t'--strict',\n\t\t\t\t\tarchivedApp\n\t\t\t\t]).exitCode === 0\n\t\t\t: false;\n\t\tif (!signed && !options.allowUnsigned)\n\t\t\tthrow new TypeError(\n\t\t\t\t'Xcode produced an unsigned iOS archive. Configure signing in the source-owned Xcode project, or pass --unsigned only for a non-publishable build.'\n\t\t\t);\n\t\tconst exportExit = await run(\n\t\t\t[\n\t\t\t\t'xcodebuild',\n\t\t\t\t'-exportArchive',\n\t\t\t\t'-archivePath',\n\t\t\t\tarchivePath,\n\t\t\t\t'-exportPath',\n\t\t\t\texportPath,\n\t\t\t\t'-exportOptionsPlist',\n\t\t\t\texportPlist\n\t\t\t],\n\t\t\t{ cwd: nativeDirectory }\n\t\t);\n\t\tif (exportExit !== 0)\n\t\t\tthrow new TypeError('Xcode failed to export the App Store IPA.');\n\t\tconst artifactPath = await findByExtension(exportPath, '.ipa');\n\t\tif (!artifactPath)\n\t\t\tthrow new TypeError('Xcode did not produce an exported IPA.');\n\t\tconst [bytes, sha256] = await Promise.all([\n\t\t\tstat(artifactPath).then(({ size }) => size),\n\t\t\tsha256File(artifactPath)\n\t\t]);\n\t\tconst releaseId = `amobile_ios_${sha256}`;\n\n\t\treturn await installRelease(\n\t\t\tartifactPath,\n\t\t\t{\n\t\t\t\tappBuild: manifest.appBuild,\n\t\t\t\tappId: manifest.appId,\n\t\t\t\t...(buildNumber === undefined ? {} : { buildNumber }),\n\t\t\t\tbytes,\n\t\t\t\tengine: 'capacitor',\n\t\t\t\tformat: 1,\n\t\t\t\tmarketingVersion,\n\t\t\t\tplatform: 'ios',\n\t\t\t\treleaseId,\n\t\t\t\truntime: manifest.runtime,\n\t\t\t\tsha256,\n\t\t\t\tsigned,\n\t\t\t\ttype: 'ipa'\n\t\t\t},\n\t\t\tsafeOutputDirectory(options.projectRoot, options.outputDirectory)\n\t\t);\n\t} finally {\n\t\tawait rm(staging, { force: true, recursive: true }).catch(\n\t\t\t() => undefined\n\t\t);\n\t}\n};\n",
16
17
  "import { readFile, stat } from 'node:fs/promises';\n\nconst HMR_LINE = new RegExp(\n\tString.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)?`,\n\t'u'\n);\n\nexport type AbsoluteIosHmrApply = {\n\tclientMs?: number;\n\tduration: number;\n\tline: string;\n\toutcome: 'applied' | 'failed' | 'reloaded';\n\tserverMs?: number;\n};\n\nexport const parseAbsoluteIosHmrLog = (\n\tline: string\n): AbsoluteIosHmrApply | null => {\n\tconst match = HMR_LINE.exec(line);\n\tif (!match) return null;\n\tconst [, , action, durationValue, serverValue, clientValue] = match;\n\tlet outcome: AbsoluteIosHmrApply['outcome'] = 'reloaded';\n\tif (action === 'applied in') outcome = 'applied';\n\tif (action === 'failed after') outcome = 'failed';\n\tconst serverMs =\n\t\tserverValue === undefined ? undefined : Number(serverValue);\n\tconst clientMs =\n\t\tclientValue === undefined ? undefined : Number(clientValue);\n\n\treturn {\n\t\t...(clientMs === undefined ? {} : { clientMs }),\n\t\tduration: Number(durationValue),\n\t\tline: match[0],\n\t\toutcome,\n\t\t...(serverMs === undefined ? {} : { serverMs })\n\t};\n};\n\nconst findHmrApply = (lines: string[]) => {\n\tconst apply = lines\n\t\t.map((line) => parseAbsoluteIosHmrLog(line))\n\t\t.find((candidate) => candidate !== null);\n\tif (apply?.outcome === 'failed')\n\t\tthrow new Error(\n\t\t\t`iOS HMR client reported a failed apply: ${apply.line}`\n\t\t);\n\n\treturn apply;\n};\n\nexport const waitForAbsoluteIosHmrLog = async (options: {\n\tlogPath: string;\n\tsignal?: AbortSignal;\n\tsleep?: (milliseconds: number) => Promise<void>;\n\tstartOffset?: number;\n\ttimeoutMs?: number;\n}) => {\n\tconst sleep = options.sleep ?? Bun.sleep;\n\tconst timeoutMs = options.timeoutMs ?? 30_000;\n\tconst deadline = Date.now() + timeoutMs;\n\tlet offset =\n\t\toptions.startOffset ??\n\t\t(await stat(options.logPath)\n\t\t\t.then(({ size }) => size)\n\t\t\t.catch(() => 0));\n\tlet buffered = '';\n\tconst poll = async (): Promise<AbsoluteIosHmrApply> => {\n\t\tif (Date.now() > deadline)\n\t\t\tthrow new Error(\n\t\t\t\t`No iOS native HMR acknowledgement was observed within ${timeoutMs}ms.`\n\t\t\t);\n\t\toptions.signal?.throwIfAborted();\n\t\tconst contents = await readFile(options.logPath).catch(() =>\n\t\t\tBuffer.alloc(0)\n\t\t);\n\t\tif (contents.byteLength < offset) {\n\t\t\toffset = 0;\n\t\t\tbuffered = '';\n\t\t}\n\t\tif (contents.byteLength > offset) {\n\t\t\tbuffered += contents.subarray(offset).toString('utf8');\n\t\t\toffset = contents.byteLength;\n\t\t\tconst lines = buffered.split(/\\r?\\n/u);\n\t\t\tbuffered = lines.pop() ?? '';\n\t\t\tconst apply = findHmrApply(lines);\n\t\t\tif (apply) return apply;\n\t\t}\n\t\tawait sleep(100);\n\n\t\treturn poll();\n\t};\n\n\treturn poll();\n};\n",
17
18
  "import { createHash, randomUUID } from 'node:crypto';\nimport {\n\taccess,\n\tcopyFile,\n\tmkdir,\n\treadFile,\n\trename,\n\trm,\n\twriteFile\n} from 'node:fs/promises';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\nimport {\n\tdetectAbsoluteMobileHost,\n\tinspectAbsoluteMobileToolchain\n} from './emulatorDoctor';\nimport { writeAbsoluteCapacitorConfig } from './capacitorProject';\nimport { fingerprintAbsoluteIosNativeProject } from './iosRelease';\nimport { getDurationString } from '../utils/getDurationString';\n\nexport const ABSOLUTE_IOS_SIMULATOR_NAME = 'AbsoluteJS iPhone';\n\nconst BOOT_TIMEOUT_MS = 180_000;\nconst BOOT_POLL_MS = 1_000;\nconst DEV_JOURNAL_FORMAT = 1;\nconst NATIVE_CACHE_FORMAT = 1;\n\nexport type AbsoluteIosCommandOptions = {\n\tcwd?: string;\n\tenv?: Record<string, string | undefined>;\n\tsignal?: AbortSignal;\n};\n\nexport type AbsoluteIosCommandResult = {\n\texitCode: number;\n\tstderr: string;\n\tstdout: string;\n};\n\nexport type AbsoluteIosDevState =\n\t| 'booting'\n\t| 'building'\n\t| 'checking-native'\n\t| 'closed'\n\t| 'closing'\n\t| 'configuring'\n\t| 'connecting'\n\t| 'failed'\n\t| 'installing'\n\t| 'launching'\n\t| 'ready'\n\t| 'streaming-logs'\n\t| 'syncing';\n\nexport type AbsoluteIosNativeLogEntry = {\n\tlevel: 'debug' | 'error' | 'fault' | 'info' | 'notice';\n\tmessage: string;\n\ttag: string;\n};\n\ntype AbsoluteIosLogStream = { close: () => Promise<void> };\n\nexport type AbsoluteIosDevProject = {\n\tcap: string;\n\tconfig: NormalizedAbsoluteMobileConfig;\n\tnativeDirectory: string;\n\tprojectRoot: string;\n\txcodebuild: string;\n\txcrun: string;\n};\n\nexport type AbsoluteIosDevSession = {\n\tclose: () => Promise<void>;\n\tnativeCacheHit: boolean;\n\trebuild: () => Promise<AbsoluteIosDevSession>;\n\trelaunch: () => Promise<void>;\n\tscreenshot: (destination: string) => Promise<string>;\n\tstartedSimulator: boolean;\n\tstate: AbsoluteIosDevState;\n\ttimings: Record<string, number>;\n\tudid: string;\n};\n\nexport type AbsoluteIosDevPhaseTiming = {\n\tdurationMs: number;\n\tphase: AbsoluteIosDevState;\n\ttotalMs: number;\n};\n\nexport type PrepareAbsoluteIosDevOptions = {\n\tcreateNativeProject: boolean;\n\tprojectRoot: string;\n\trun?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteIosCommandOptions\n\t) => Promise<number>;\n};\n\nexport type StartAbsoluteIosDevOptions = {\n\tcapture?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteIosCommandOptions\n\t) => AbsoluteIosCommandResult;\n\thttps?: boolean;\n\tlog?: (message: string) => void;\n\tnativeLog?: (entry: AbsoluteIosNativeLogEntry) => void;\n\tonPhaseTiming?: (timing: AbsoluteIosDevPhaseTiming) => void;\n\tonStateChange?: (state: AbsoluteIosDevState) => void;\n\tport: number;\n\tproject: AbsoluteIosDevProject;\n\trun?: (\n\t\tcommand: string[],\n\t\toptions?: AbsoluteIosCommandOptions\n\t) => Promise<number>;\n\tsignal?: AbortSignal;\n\tsleep?: (milliseconds: number) => Promise<void>;\n\tspawn?: (command: string[], options?: AbsoluteIosCommandOptions) => void;\n\tstartNativeLogs?: (\n\t\tcommand: string[],\n\t\toptions: AbsoluteIosCommandOptions,\n\t\tonLine: (line: string) => void\n\t) => AbsoluteIosLogStream;\n};\n\ntype IosRuntime = {\n\tidentifier: string;\n\tisAvailable: boolean;\n\tname: string;\n\tversion: string;\n};\n\ntype IosDeviceType = { identifier: string; name: string };\n\ntype IosDevJournal = {\n\tconfigBackupPath: string;\n\tformat: number;\n\tinfoBackupPath: string;\n\tinfoPath: string;\n\tnativeConfigPath: string;\n};\n\ntype IosNativeCache = {\n\tappId: string;\n\tfingerprint: string;\n\tformat: number;\n\tinstallations: Record<string, string>;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst pathExists = async (path: string) => {\n\ttry {\n\t\tawait access(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst throwIfAborted = (signal?: AbortSignal) => signal?.throwIfAborted();\n\nconst defaultCapture = (\n\tcommand: string[],\n\toptions: AbsoluteIosCommandOptions = {}\n) => {\n\ttry {\n\t\tconst result = Bun.spawnSync(command, {\n\t\t\tcwd: options.cwd,\n\t\t\tenv: options.env,\n\t\t\tstderr: 'pipe',\n\t\t\tstdin: 'ignore',\n\t\t\tstdout: 'pipe'\n\t\t});\n\n\t\treturn {\n\t\t\texitCode: result.exitCode,\n\t\t\tstderr: result.stderr.toString(),\n\t\t\tstdout: result.stdout.toString()\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\texitCode: 1,\n\t\t\tstderr: error instanceof Error ? error.message : String(error),\n\t\t\tstdout: ''\n\t\t};\n\t}\n};\n\nconst defaultRun = async (\n\tcommand: string[],\n\toptions: AbsoluteIosCommandOptions = {}\n) => {\n\tconst process = Bun.spawn(command, {\n\t\tcwd: options.cwd,\n\t\tenv: options.env,\n\t\tsignal: options.signal,\n\t\tstderr: 'inherit',\n\t\tstdin: 'inherit',\n\t\tstdout: 'inherit'\n\t});\n\n\treturn process.exited;\n};\n\nconst defaultSpawn = (\n\tcommand: string[],\n\toptions: AbsoluteIosCommandOptions = {}\n) => {\n\tBun.spawn(command, {\n\t\tcwd: options.cwd,\n\t\tenv: options.env,\n\t\tsignal: options.signal,\n\t\tstderr: 'ignore',\n\t\tstdin: 'ignore',\n\t\tstdout: 'ignore'\n\t});\n};\n\nconst consumeLines = async (\n\tstream: ReadableStream<Uint8Array>,\n\tonLine: (line: string) => void\n) => {\n\tconst reader = stream.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffered = '';\n\tconst pump = async (): Promise<void> => {\n\t\tconst { done, value } = await reader.read();\n\t\tif (done) return;\n\t\tbuffered += decoder.decode(value, { stream: true });\n\t\tconst lines = buffered.split(/\\r?\\n/u);\n\t\tbuffered = lines.pop() ?? '';\n\t\tlines.forEach(onLine);\n\n\t\tawait pump();\n\t};\n\ttry {\n\t\tawait pump();\n\t\tbuffered += decoder.decode();\n\t\tif (buffered) onLine(buffered);\n\t} finally {\n\t\treader.releaseLock();\n\t}\n};\n\nconst defaultStartNativeLogs = (\n\tcommand: string[],\n\toptions: AbsoluteIosCommandOptions,\n\tonLine: (line: string) => void\n): AbsoluteIosLogStream => {\n\tconst process = Bun.spawn(command, {\n\t\tcwd: options.cwd,\n\t\tenv: options.env,\n\t\tsignal: options.signal,\n\t\tstderr: 'pipe',\n\t\tstdin: 'ignore',\n\t\tstdout: 'pipe'\n\t});\n\tvoid consumeLines(process.stdout, onLine);\n\tvoid consumeLines(process.stderr, onLine);\n\n\treturn {\n\t\tclose: async () => {\n\t\t\ttry {\n\t\t\t\tprocess.kill();\n\t\t\t} catch {\n\t\t\t\t/* already closed */\n\t\t\t}\n\t\t\tawait process.exited.catch(() => undefined);\n\t\t}\n\t};\n};\n\nconst requireSuccess = async (\n\tcommand: string[],\n\tlabel: string,\n\trun: NonNullable<StartAbsoluteIosDevOptions['run']>,\n\toptions?: AbsoluteIosCommandOptions\n) => {\n\tconst exitCode = await run(command, options);\n\tif (exitCode !== 0)\n\t\tthrow new Error(`${label} failed with status ${exitCode}.`);\n};\n\nconst requireCapturedSuccess = (\n\tresult: AbsoluteIosCommandResult,\n\tlabel: string\n) => {\n\tif (result.exitCode !== 0) {\n\t\tthrow new Error(\n\t\t\t`${label} failed: ${result.stderr.trim() || result.stdout.trim() || `status ${result.exitCode}`}`\n\t\t);\n\t}\n\n\treturn result.stdout.trim();\n};\n\nconst parseJson = (source: string, label: string) => {\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(source);\n\t\tif (isRecord(parsed)) return parsed;\n\t} catch {\n\t\t/* normalized below */\n\t}\n\tthrow new Error(`Invalid ${label} JSON from simctl.`);\n};\n\nexport const parseIosDeviceTypes = (source: string) => {\n\tconst parsed = parseJson(source, 'device type');\n\tconst types = parsed.devicetypes;\n\tif (!Array.isArray(types)) return [];\n\n\treturn types.flatMap((type) => {\n\t\tif (!isRecord(type)) return [];\n\t\tconst { identifier } = type;\n\t\tconst { name } = type;\n\n\t\treturn typeof identifier === 'string' && typeof name === 'string'\n\t\t\t? [{ identifier, name }]\n\t\t\t: [];\n\t});\n};\nexport const parseIosRuntimes = (source: string) => {\n\tconst parsed = parseJson(source, 'runtime');\n\tconst { runtimes } = parsed;\n\tif (!Array.isArray(runtimes)) return [];\n\n\treturn runtimes.flatMap((runtime) => {\n\t\tif (!isRecord(runtime)) return [];\n\t\tconst { identifier } = runtime;\n\t\tconst { name } = runtime;\n\t\tconst { version } = runtime;\n\t\tif (\n\t\t\ttypeof identifier !== 'string' ||\n\t\t\ttypeof name !== 'string' ||\n\t\t\ttypeof version !== 'string'\n\t\t)\n\t\t\treturn [];\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tidentifier,\n\t\t\t\tisAvailable: runtime.isAvailable !== false,\n\t\t\t\tname,\n\t\t\t\tversion\n\t\t\t}\n\t\t];\n\t});\n};\nexport const parseIosSimulators = (source: string) => {\n\tconst parsed = parseJson(source, 'device');\n\tconst { devices } = parsed;\n\tif (!isRecord(devices)) return [];\n\n\treturn Object.entries(devices).flatMap(([runtime, values]) => {\n\t\tif (!Array.isArray(values)) return [];\n\n\t\treturn values.flatMap((device) => {\n\t\t\tif (!isRecord(device)) return [];\n\t\t\tconst { name } = device;\n\t\t\tconst { state } = device;\n\t\t\tconst { udid } = device;\n\t\t\tif (\n\t\t\t\ttypeof name !== 'string' ||\n\t\t\t\ttypeof state !== 'string' ||\n\t\t\t\ttypeof udid !== 'string'\n\t\t\t)\n\t\t\t\treturn [];\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tisAvailable: device.isAvailable !== false,\n\t\t\t\t\tname,\n\t\t\t\t\truntime,\n\t\t\t\t\tstate,\n\t\t\t\t\tudid\n\t\t\t\t}\n\t\t\t];\n\t\t});\n\t});\n};\n\nconst versionParts = (version: string) =>\n\tversion.split('.').map((part) => Number(part));\n\nconst compareVersions = (left: string, right: string) => {\n\tconst leftParts = versionParts(left);\n\tconst rightParts = versionParts(right);\n\tconst length = Math.max(leftParts.length, rightParts.length);\n\tfor (let index = 0; index < length; index++) {\n\t\tconst difference = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);\n\t\tif (difference !== 0) return difference;\n\t}\n\n\treturn 0;\n};\n\nconst latestIosRuntime = (runtimes: IosRuntime[]) =>\n\truntimes\n\t\t.filter(\n\t\t\t(runtime) =>\n\t\t\t\truntime.isAvailable &&\n\t\t\t\truntime.identifier.includes('SimRuntime.iOS-')\n\t\t)\n\t\t.sort((left, right) => compareVersions(right.version, left.version))[0];\n\nconst iphoneGeneration = (name: string) =>\n\tNumber(/iPhone\\s+(\\d+)/u.exec(name)?.[1] ?? 0);\n\nconst preferredIphoneType = (types: IosDeviceType[]) =>\n\ttypes\n\t\t.filter((type) => type.name.startsWith('iPhone'))\n\t\t.sort((left, right) => {\n\t\t\tconst generation =\n\t\t\t\tiphoneGeneration(right.name) - iphoneGeneration(left.name);\n\t\t\tif (generation !== 0) return generation;\n\t\t\tconst rightPro = right.name.includes('Pro') ? 1 : 0;\n\t\t\tconst leftPro = left.name.includes('Pro') ? 1 : 0;\n\n\t\t\treturn rightPro - leftPro;\n\t\t})[0];\n\nconst journalPaths = (projectRoot: string) => {\n\tconst root = join(projectRoot, '.absolutejs', 'mobile', 'ios-dev-session');\n\n\treturn {\n\t\tconfigBackup: join(root, 'capacitor-config.backup'),\n\t\tinfoBackup: join(root, 'Info.plist.backup'),\n\t\tjournal: join(root, 'journal.json'),\n\t\troot\n\t};\n};\n\nconst nativeCachePath = (projectRoot: string) =>\n\tjoin(projectRoot, '.absolutejs', 'mobile', 'ios-native-cache.json');\n\nconst isInside = (root: string, path: string) => {\n\tconst value = relative(resolve(root), resolve(path));\n\n\treturn (\n\t\tvalue === '' ||\n\t\t(!value.startsWith(`..${sep}`) && value !== '..' && !isAbsolute(value))\n\t);\n};\n\nconst parseJournal = (value: unknown): IosDevJournal | null => {\n\tif (!isRecord(value) || value.format !== DEV_JOURNAL_FORMAT) return null;\n\tconst { configBackupPath } = value;\n\tconst { infoBackupPath } = value;\n\tconst { infoPath } = value;\n\tconst { nativeConfigPath } = value;\n\tif (\n\t\ttypeof configBackupPath !== 'string' ||\n\t\ttypeof infoBackupPath !== 'string' ||\n\t\ttypeof infoPath !== 'string' ||\n\t\ttypeof nativeConfigPath !== 'string'\n\t)\n\t\treturn null;\n\n\treturn {\n\t\tconfigBackupPath,\n\t\tformat: DEV_JOURNAL_FORMAT,\n\t\tinfoBackupPath,\n\t\tinfoPath,\n\t\tnativeConfigPath\n\t};\n};\n\nexport const repairAbsoluteIosDevSession = async (projectRoot: string) => {\n\tconst paths = journalPaths(projectRoot);\n\tif (!(await pathExists(paths.journal))) {\n\t\tawait rm(paths.root, { force: true, recursive: true });\n\n\t\treturn false;\n\t}\n\tconst journal = await readFile(paths.journal, 'utf8')\n\t\t.then((source) => parseJournal(JSON.parse(source)))\n\t\t.catch(() => null);\n\tif (\n\t\t!journal ||\n\t\t!isInside(projectRoot, journal.nativeConfigPath) ||\n\t\t!isInside(projectRoot, journal.infoPath) ||\n\t\t!isInside(paths.root, journal.configBackupPath) ||\n\t\t!isInside(paths.root, journal.infoBackupPath)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Refusing unsafe or invalid iOS dev journal at ${paths.journal}.`\n\t\t);\n\t}\n\tif (await pathExists(journal.configBackupPath))\n\t\tawait copyFile(journal.configBackupPath, journal.nativeConfigPath);\n\tif (await pathExists(journal.infoBackupPath))\n\t\tawait copyFile(journal.infoBackupPath, journal.infoPath);\n\tawait rm(paths.root, { force: true, recursive: true });\n\n\treturn true;\n};\n\nconst iosDevelopmentInfoPlist = (source: string, cleartext: boolean) => {\n\tif (!cleartext) return source;\n\tconst arbitraryLoads =\n\t\t/(<key>NSAllowsArbitraryLoads<\\/key>\\s*)<false\\s*\\/>/u;\n\tif (arbitraryLoads.test(source))\n\t\treturn source.replace(arbitraryLoads, '$1<true/>');\n\tif (/<key>NSAllowsArbitraryLoads<\\/key>\\s*<true\\s*\\/>/u.test(source))\n\t\treturn source;\n\tconst transport = /(<key>NSAppTransportSecurity<\\/key>\\s*<dict>)/u;\n\tif (transport.test(source))\n\t\treturn source.replace(\n\t\t\ttransport,\n\t\t\t'$1\\n\\t\\t<key>NSAllowsArbitraryLoads</key>\\n\\t\\t<true/>'\n\t\t);\n\n\treturn source.replace(\n\t\t/<dict>/u,\n\t\t'<dict>\\n\\t<key>NSAppTransportSecurity</key>\\n\\t<dict>\\n\\t\\t<key>NSAllowsArbitraryLoads</key>\\n\\t\\t<true/>\\n\\t</dict>'\n\t);\n};\n\nconst writeDevProjection = async (\n\tproject: AbsoluteIosDevProject,\n\tport: number,\n\thttps: boolean\n) => {\n\tconst paths = journalPaths(project.projectRoot);\n\tawait repairAbsoluteIosDevSession(project.projectRoot);\n\tconst nativeConfigPath = join(\n\t\tproject.nativeDirectory,\n\t\t'App',\n\t\t'App',\n\t\t'capacitor.config.json'\n\t);\n\tconst infoPath = join(project.nativeDirectory, 'App', 'App', 'Info.plist');\n\tconst [configSource, infoSource] = await Promise.all([\n\t\treadFile(nativeConfigPath, 'utf8'),\n\t\treadFile(infoPath, 'utf8')\n\t]);\n\tconst parsed: unknown = JSON.parse(configSource);\n\tif (!isRecord(parsed))\n\t\tthrow new Error(\n\t\t\t`Invalid Capacitor native config at ${nativeConfigPath}.`\n\t\t);\n\tawait mkdir(paths.root, { recursive: true });\n\tawait Promise.all([\n\t\twriteFile(paths.configBackup, configSource, { flag: 'wx' }),\n\t\twriteFile(paths.infoBackup, infoSource, { flag: 'wx' })\n\t]);\n\tconst journal: IosDevJournal = {\n\t\tconfigBackupPath: paths.configBackup,\n\t\tformat: DEV_JOURNAL_FORMAT,\n\t\tinfoBackupPath: paths.infoBackup,\n\t\tinfoPath,\n\t\tnativeConfigPath\n\t};\n\tawait writeFile(paths.journal, `${JSON.stringify(journal, null, '\\t')}\\n`, {\n\t\tflag: 'wx'\n\t});\n\tconst developmentUrl = new URL(\n\t\t`${https ? 'https' : 'http'}://localhost:${port}${project.config.entry}`\n\t);\n\tdevelopmentUrl.searchParams.set('__absolute_target', 'capacitor-ios');\n\tconst existingServer = parsed.server;\n\tparsed.server = {\n\t\t...(isRecord(existingServer) ? existingServer : {}),\n\t\tcleartext: !https,\n\t\turl: developmentUrl.href\n\t};\n\tawait Promise.all([\n\t\twriteFile(nativeConfigPath, `${JSON.stringify(parsed, null, '\\t')}\\n`),\n\t\twriteFile(infoPath, iosDevelopmentInfoPlist(infoSource, !https))\n\t]);\n};\n\nconst parseNativeCache = (value: unknown): IosNativeCache | null => {\n\tif (!isRecord(value)) return null;\n\tconst { appId, fingerprint, format, installations } = value;\n\tif (\n\t\tformat !== NATIVE_CACHE_FORMAT ||\n\t\ttypeof appId !== 'string' ||\n\t\ttypeof fingerprint !== 'string' ||\n\t\t!isRecord(installations) ||\n\t\t!Object.values(installations).every(\n\t\t\t(identity) => typeof identity === 'string'\n\t\t)\n\t)\n\t\treturn null;\n\n\treturn {\n\t\tappId,\n\t\tfingerprint,\n\t\tformat,\n\t\tinstallations: Object.fromEntries(\n\t\t\tObject.entries(installations).map(([udid, identity]) => [\n\t\t\t\tudid,\n\t\t\t\tString(identity)\n\t\t\t])\n\t\t)\n\t};\n};\n\nconst readNativeCache = (projectRoot: string) =>\n\treadFile(nativeCachePath(projectRoot), 'utf8')\n\t\t.then((source) => parseNativeCache(JSON.parse(source)))\n\t\t.catch(() => null);\n\nconst writeNativeCache = async (projectRoot: string, cache: IosNativeCache) => {\n\tconst destination = nativeCachePath(projectRoot);\n\tconst temporary = `${destination}.${process.pid}.${randomUUID()}.tmp`;\n\tawait mkdir(dirname(destination), { recursive: true });\n\ttry {\n\t\tawait writeFile(temporary, `${JSON.stringify(cache, null, '\\t')}\\n`, {\n\t\t\tflag: 'wx'\n\t\t});\n\t\tawait rename(temporary, destination);\n\t} finally {\n\t\tawait rm(temporary, { force: true }).catch(() => undefined);\n\t}\n};\n\nexport const fingerprintAbsoluteIosDevProject = async (\n\tproject: Pick<AbsoluteIosDevProject, 'nativeDirectory'>\n) => fingerprintAbsoluteIosNativeProject(project.nativeDirectory);\n\nconst simulatorInventory = (\n\txcrun: string,\n\tcapture: NonNullable<StartAbsoluteIosDevOptions['capture']>\n) => {\n\tconst result = capture([\n\t\txcrun,\n\t\t'simctl',\n\t\t'list',\n\t\t'devices',\n\t\t'available',\n\t\t'-j'\n\t]);\n\n\treturn parseIosSimulators(\n\t\trequireCapturedSuccess(result, 'iOS simulator discovery')\n\t);\n};\n\nconst ensureManagedSimulator = async (\n\tproject: AbsoluteIosDevProject,\n\tcapture: NonNullable<StartAbsoluteIosDevOptions['capture']>\n) => {\n\tconst runtimes = parseIosRuntimes(\n\t\trequireCapturedSuccess(\n\t\t\tcapture([project.xcrun, 'simctl', 'list', 'runtimes', '-j']),\n\t\t\t'iOS runtime discovery'\n\t\t)\n\t);\n\tconst runtime = latestIosRuntime(runtimes);\n\tif (!runtime)\n\t\tthrow new Error(\n\t\t\t'No available iOS Simulator runtime. Run absolute mobile doctor ios --fix.'\n\t\t);\n\tconst [existing] = simulatorInventory(project.xcrun, capture)\n\t\t.filter(\n\t\t\t(device) =>\n\t\t\t\tdevice.isAvailable &&\n\t\t\t\tdevice.name === ABSOLUTE_IOS_SIMULATOR_NAME &&\n\t\t\t\tdevice.runtime === runtime.identifier\n\t\t)\n\t\t.sort(\n\t\t\t(left, right) =>\n\t\t\t\tNumber(right.state === 'Booted') -\n\t\t\t\tNumber(left.state === 'Booted')\n\t\t);\n\tif (existing) return { created: false, device: existing };\n\tconst types = parseIosDeviceTypes(\n\t\trequireCapturedSuccess(\n\t\t\tcapture([project.xcrun, 'simctl', 'list', 'devicetypes', '-j']),\n\t\t\t'iOS device-type discovery'\n\t\t)\n\t);\n\tconst type = preferredIphoneType(types);\n\tif (!type)\n\t\tthrow new Error('Xcode did not report an iPhone simulator type.');\n\tconst [udid] = requireCapturedSuccess(\n\t\tcapture([\n\t\t\tproject.xcrun,\n\t\t\t'simctl',\n\t\t\t'create',\n\t\t\tABSOLUTE_IOS_SIMULATOR_NAME,\n\t\t\ttype.identifier,\n\t\t\truntime.identifier\n\t\t]),\n\t\t'iOS simulator creation'\n\t).split(/\\s/u);\n\tif (!udid)\n\t\tthrow new Error('simctl did not return the created simulator UDID.');\n\n\treturn {\n\t\tcreated: true,\n\t\tdevice: {\n\t\t\tisAvailable: true,\n\t\t\tname: ABSOLUTE_IOS_SIMULATOR_NAME,\n\t\t\truntime: runtime.identifier,\n\t\t\tstate: 'Shutdown',\n\t\t\tudid\n\t\t}\n\t};\n};\n\nconst waitForBootedSimulator = async (\n\tproject: AbsoluteIosDevProject,\n\tudid: string,\n\tcapture: NonNullable<StartAbsoluteIosDevOptions['capture']>,\n\tsleep: NonNullable<StartAbsoluteIosDevOptions['sleep']>,\n\tsignal?: AbortSignal\n) => {\n\tconst deadline = Date.now() + BOOT_TIMEOUT_MS;\n\tconst poll = async (): Promise<void> => {\n\t\tthrowIfAborted(signal);\n\t\tconst device = simulatorInventory(project.xcrun, capture).find(\n\t\t\t(candidate) => candidate.udid === udid\n\t\t);\n\t\tif (device?.state === 'Booted') return;\n\t\tif (Date.now() > deadline)\n\t\t\tthrow new Error(\n\t\t\t\t`iOS simulator ${udid} did not finish booting within ${BOOT_TIMEOUT_MS / 1_000}s.`\n\t\t\t);\n\t\tawait sleep(BOOT_POLL_MS);\n\n\t\tawait poll();\n\t};\n\n\treturn poll();\n};\n\nconst bootSimulator = (\n\tproject: AbsoluteIosDevProject,\n\tdevice: ReturnType<typeof parseIosSimulators>[number],\n\tcapture: NonNullable<StartAbsoluteIosDevOptions['capture']>\n) => {\n\tif (device.state === 'Booted') return;\n\trequireCapturedSuccess(\n\t\tcapture([project.xcrun, 'simctl', 'boot', device.udid]),\n\t\t'iOS simulator boot'\n\t);\n};\n\nconst installedAppIdentity = (\n\tproject: AbsoluteIosDevProject,\n\tudid: string,\n\tcapture: NonNullable<StartAbsoluteIosDevOptions['capture']>\n) => {\n\tconst result = capture([\n\t\tproject.xcrun,\n\t\t'simctl',\n\t\t'get_app_container',\n\t\tudid,\n\t\tproject.config.appId,\n\t\t'app'\n\t]);\n\n\treturn result.exitCode === 0 && result.stdout.trim()\n\t\t? result.stdout.trim()\n\t\t: undefined;\n};\n\nconst buildIosDebugApp = async (\n\tproject: AbsoluteIosDevProject,\n\tudid: string,\n\tfingerprint: string,\n\trun: NonNullable<StartAbsoluteIosDevOptions['run']>,\n\tsignal?: AbortSignal\n) => {\n\tconst derivedDataPath = join(\n\t\tproject.projectRoot,\n\t\t'.absolutejs',\n\t\t'mobile',\n\t\t'ios-derived-data',\n\t\tcreateHash('sha256')\n\t\t\t.update(project.config.appId)\n\t\t\t.digest('hex')\n\t\t\t.slice(0, 16)\n\t);\n\tawait mkdir(derivedDataPath, { recursive: true });\n\tawait requireSuccess(\n\t\t[\n\t\t\tproject.xcodebuild,\n\t\t\t'-workspace',\n\t\t\tjoin(project.nativeDirectory, 'App', 'App.xcworkspace'),\n\t\t\t'-scheme',\n\t\t\t'App',\n\t\t\t'-configuration',\n\t\t\t'Debug',\n\t\t\t'-destination',\n\t\t\t`platform=iOS Simulator,id=${udid}`,\n\t\t\t'-derivedDataPath',\n\t\t\tderivedDataPath,\n\t\t\t'build'\n\t\t],\n\t\t'iOS simulator build',\n\t\trun,\n\t\t{ cwd: project.nativeDirectory, signal }\n\t);\n\tconst appPath = join(\n\t\tderivedDataPath,\n\t\t'Build',\n\t\t'Products',\n\t\t'Debug-iphonesimulator',\n\t\t'App.app'\n\t);\n\tif (!(await pathExists(appPath)))\n\t\tthrow new Error(\n\t\t\t`Xcode did not produce the simulator app at ${appPath}.`\n\t\t);\n\n\treturn appPath;\n};\n\nconst ensureIosDebugApp = async (options: {\n\tcache: IosNativeCache | null;\n\tcapture: NonNullable<StartAbsoluteIosDevOptions['capture']>;\n\tfingerprint: string;\n\tlog: NonNullable<StartAbsoluteIosDevOptions['log']>;\n\tproject: AbsoluteIosDevProject;\n\trun: NonNullable<StartAbsoluteIosDevOptions['run']>;\n\tsignal?: AbortSignal;\n\ttransition: (state: AbsoluteIosDevState) => void;\n\tudid: string;\n}) => {\n\tconst installed = installedAppIdentity(\n\t\toptions.project,\n\t\toptions.udid,\n\t\toptions.capture\n\t);\n\tconst cacheHit =\n\t\toptions.cache?.appId === options.project.config.appId &&\n\t\toptions.cache.fingerprint === options.fingerprint &&\n\t\tinstalled !== undefined &&\n\t\toptions.cache.installations[options.udid] === installed;\n\tif (cacheHit) {\n\t\toptions.log(\n\t\t\t`iOS native app is unchanged on ${options.udid}; skipped Xcode build and install.`\n\t\t);\n\n\t\treturn true;\n\t}\n\toptions.log(\n\t\t'iOS native inputs changed or the installed app is stale; rebuilding.'\n\t);\n\toptions.transition('building');\n\tconst appPath = await buildIosDebugApp(\n\t\toptions.project,\n\t\toptions.udid,\n\t\toptions.fingerprint,\n\t\toptions.run,\n\t\toptions.signal\n\t);\n\tthrowIfAborted(options.signal);\n\toptions.transition('installing');\n\tawait requireSuccess(\n\t\t[options.project.xcrun, 'simctl', 'install', options.udid, appPath],\n\t\t'iOS simulator app installation',\n\t\toptions.run,\n\t\t{ signal: options.signal }\n\t);\n\tconst updated = installedAppIdentity(\n\t\toptions.project,\n\t\toptions.udid,\n\t\toptions.capture\n\t);\n\tif (updated) {\n\t\tawait writeNativeCache(options.project.projectRoot, {\n\t\t\tappId: options.project.config.appId,\n\t\t\tfingerprint: options.fingerprint,\n\t\t\tformat: NATIVE_CACHE_FORMAT,\n\t\t\tinstallations: { [options.udid]: updated }\n\t\t}).catch((error) =>\n\t\t\toptions.log(\n\t\t\t\t`iOS native cache could not be saved: ${error instanceof Error ? error.message : String(error)}`\n\t\t\t)\n\t\t);\n\t}\n\n\treturn false;\n};\n\nconst SECRET_VALUE =\n\t/((?:authorization|cookie|password|secret|token|oauth[_-]?code)\\s*[:=]\\s*)([^\\s,;]+)/giu;\nconst BEARER_VALUE = new RegExp(\n\tString.raw`\\bBearer\\s+[A-Za-z0-9._~+/-]+=*`,\n\t'giu'\n);\nconst JWT_VALUE = /\\beyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\b/gu;\nconst IOS_LOG_PATTERN = new RegExp(\n\tString.raw`\\s(Debug|Info|Notice|Error|Fault)\\s+.*?\\[[^\\]]+\\]\\s+\\[([^\\]]+)\\]\\s*(.*)$`,\n\t'iu'\n);\n\nexport const parseAbsoluteIosLogLine = (\n\tline: string\n): AbsoluteIosNativeLogEntry | null => {\n\tconst sanitized = redactAbsoluteIosLog(line).trim();\n\tif (!sanitized) return null;\n\tconst match = IOS_LOG_PATTERN.exec(sanitized);\n\tconst candidate = match?.[1]?.toLowerCase();\n\tconst level =\n\t\tcandidate === 'debug' ||\n\t\tcandidate === 'error' ||\n\t\tcandidate === 'fault' ||\n\t\tcandidate === 'notice'\n\t\t\t? candidate\n\t\t\t: 'info';\n\n\treturn {\n\t\tlevel,\n\t\tmessage: match?.[3]?.trim() || sanitized,\n\t\ttag: match?.[2]?.trim() || 'App'\n\t};\n};\nexport const redactAbsoluteIosLog = (value: string) =>\n\tvalue\n\t\t.replaceAll(BEARER_VALUE, 'Bearer [REDACTED]')\n\t\t.replaceAll(JWT_VALUE, '[REDACTED_JWT]')\n\t\t.replaceAll(SECRET_VALUE, '$1[REDACTED]')\n\t\t.replaceAll(/\\p{C}/gu, '');\n\nconst attachNativeLogs = (\n\tproject: AbsoluteIosDevProject,\n\tudid: string,\n\toptions: StartAbsoluteIosDevOptions\n) => {\n\tif (!options.nativeLog) return null;\n\tconst start = options.startNativeLogs ?? defaultStartNativeLogs;\n\n\treturn start(\n\t\t[\n\t\t\tproject.xcrun,\n\t\t\t'simctl',\n\t\t\t'spawn',\n\t\t\tudid,\n\t\t\t'log',\n\t\t\t'stream',\n\t\t\t'--style',\n\t\t\t'compact',\n\t\t\t'--level',\n\t\t\t'debug',\n\t\t\t'--predicate',\n\t\t\t'process == \"App\"'\n\t\t],\n\t\t{ signal: options.signal },\n\t\t(line) => {\n\t\t\tconst entry = parseAbsoluteIosLogLine(line);\n\t\t\tif (entry) options.nativeLog?.(entry);\n\t\t}\n\t);\n};\n\nconst IOS_TIMING_PHASES: Array<[string, string]> = [\n\t['syncing', 'Capacitor sync'],\n\t['configuring', 'dev config'],\n\t['fingerprinting', 'fingerprint'],\n\t['booting', 'simulator'],\n\t['connecting', 'device ready'],\n\t['checking-native', 'app check'],\n\t['building', 'Xcode'],\n\t['installing', 'install'],\n\t['launching', 'launch'],\n\t['streaming-logs', 'logs']\n];\n\nconst timingSummary = (timings: Record<string, number>) =>\n\tIOS_TIMING_PHASES.map(([phase, label]) => {\n\t\tconst duration = timings[phase];\n\n\t\treturn duration === undefined\n\t\t\t? null\n\t\t\t: `${label} ${getDurationString(duration)}`;\n\t})\n\t\t.filter((value): value is string => value !== null)\n\t\t.join(', ');\n\nexport const prepareAbsoluteIosDevProject = async (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\toptions: PrepareAbsoluteIosDevOptions\n): Promise<AbsoluteIosDevProject> => {\n\tif (detectAbsoluteMobileHost() !== 'macos')\n\t\tthrow new Error('iOS simulation requires macOS and Xcode.');\n\tconst projectRoot = resolve(options.projectRoot);\n\tconst checks = await inspectAbsoluteMobileToolchain({ host: 'macos' });\n\tconst failed = checks.filter(\n\t\t(check) =>\n\t\t\tcheck.platform === 'ios' &&\n\t\t\t(check.status === 'fail' || check.status === 'warn')\n\t);\n\tif (failed.length > 0)\n\t\tthrow new Error(\n\t\t\t`iOS simulation is not ready: ${failed.map(({ label }) => label).join(', ')}.`\n\t\t);\n\tconst xcrun = checks.find((check) => check.id === 'ios.xcrun')?.path;\n\tconst xcodebuild = checks.find(\n\t\t(check) => check.id === 'ios.xcodebuild'\n\t)?.path;\n\tif (!xcrun || !xcodebuild)\n\t\tthrow new Error('Xcode tools disappeared after readiness checks.');\n\tconst cap = join(projectRoot, 'node_modules', '.bin', 'cap');\n\tif (!(await pathExists(cap)))\n\t\tthrow new Error(\n\t\t\t'Capacitor CLI is not installed. Run absolute mobile init first.'\n\t\t);\n\tawait writeAbsoluteCapacitorConfig(config, { projectRoot });\n\tawait mkdir(config.bundleDirectory, { recursive: true });\n\tconst placeholder = join(config.bundleDirectory, 'index.html');\n\tif (!(await pathExists(placeholder)))\n\t\tawait writeFile(\n\t\t\tplaceholder,\n\t\t\t'<!doctype html><title>AbsoluteJS mobile development</title>\\n'\n\t\t);\n\tconst nativeDirectory = join(config.nativeProjectDirectory, 'ios');\n\tif (!(await pathExists(nativeDirectory))) {\n\t\tif (!options.createNativeProject)\n\t\t\tthrow new Error('iOS native project has not been created.');\n\t\tconst run = options.run ?? defaultRun;\n\t\tif ((await run([cap, 'add', 'ios'], { cwd: projectRoot })) !== 0)\n\t\t\tthrow new Error('Capacitor iOS project creation failed.');\n\t}\n\n\treturn {\n\t\tcap,\n\t\tconfig,\n\t\tnativeDirectory,\n\t\tprojectRoot,\n\t\txcodebuild,\n\t\txcrun\n\t};\n};\n\nexport const startAbsoluteIosDevSession = async (\n\toptions: StartAbsoluteIosDevOptions\n): Promise<AbsoluteIosDevSession> => {\n\tconst { project } = options;\n\tconst capture = options.capture ?? defaultCapture;\n\tconst run = options.run ?? defaultRun;\n\tconst sleep = options.sleep ?? Bun.sleep;\n\tconst spawn = options.spawn ?? defaultSpawn;\n\tconst log = options.log ?? console.log;\n\tconst startedAt = performance.now();\n\tlet phaseStartedAt = performance.now();\n\tconst timings: Record<string, number> = {};\n\tlet state: AbsoluteIosDevState = 'syncing';\n\tconst transition = (next: AbsoluteIosDevState) => {\n\t\tif (next === state) {\n\t\t\toptions.onStateChange?.(next);\n\n\t\t\treturn;\n\t\t}\n\t\tconst now = performance.now();\n\t\tconst durationMs = now - phaseStartedAt;\n\t\ttimings[state] = (timings[state] ?? 0) + durationMs;\n\t\toptions.onPhaseTiming?.({\n\t\t\tdurationMs,\n\t\t\tphase: state,\n\t\t\ttotalMs: now - startedAt\n\t\t});\n\t\tstate = next;\n\t\tphaseStartedAt = now;\n\t\toptions.onStateChange?.(next);\n\t};\n\tlet nativeLogs: AbsoluteIosLogStream | null = null;\n\tconst closeLogs = async () => {\n\t\tconst stream = nativeLogs;\n\t\tnativeLogs = null;\n\t\tawait stream?.close().catch(() => undefined);\n\t};\n\ttry {\n\t\tawait repairAbsoluteIosDevSession(project.projectRoot);\n\t\tthrowIfAborted(options.signal);\n\t\ttransition('syncing');\n\t\tawait requireSuccess(\n\t\t\t[project.cap, 'sync', 'ios'],\n\t\t\t'Capacitor iOS synchronization',\n\t\t\trun,\n\t\t\t{ cwd: project.projectRoot, signal: options.signal }\n\t\t);\n\t\ttransition('configuring');\n\t\tawait writeDevProjection(project, options.port, options.https === true);\n\t\tthrowIfAborted(options.signal);\n\t\tconst fingerprintStartedAt = performance.now();\n\t\tconst fingerprintPromise = fingerprintAbsoluteIosDevProject(\n\t\t\tproject\n\t\t).then((fingerprint) => {\n\t\t\ttimings.fingerprinting = performance.now() - fingerprintStartedAt;\n\n\t\t\treturn fingerprint;\n\t\t});\n\t\ttransition('booting');\n\t\tconst { created, device } = await ensureManagedSimulator(\n\t\t\tproject,\n\t\t\tcapture\n\t\t);\n\t\tconst startedSimulator = created || device.state !== 'Booted';\n\t\tbootSimulator(project, device, capture);\n\t\tspawn([\n\t\t\t'open',\n\t\t\t'-a',\n\t\t\t'Simulator',\n\t\t\t'--args',\n\t\t\t'-CurrentDeviceUDID',\n\t\t\tdevice.udid\n\t\t]);\n\t\ttransition('connecting');\n\t\tawait waitForBootedSimulator(\n\t\t\tproject,\n\t\t\tdevice.udid,\n\t\t\tcapture,\n\t\t\tsleep,\n\t\t\toptions.signal\n\t\t);\n\t\tawait requireSuccess(\n\t\t\t[project.xcrun, 'simctl', 'bootstatus', device.udid, '-b'],\n\t\t\t'iOS simulator boot readiness',\n\t\t\trun,\n\t\t\t{ signal: options.signal }\n\t\t);\n\t\tconst fingerprint = await fingerprintPromise;\n\t\ttransition('checking-native');\n\t\tconst nativeCacheHit = await ensureIosDebugApp({\n\t\t\tcache: await readNativeCache(project.projectRoot),\n\t\t\tcapture,\n\t\t\tfingerprint,\n\t\t\tlog,\n\t\t\tproject,\n\t\t\trun,\n\t\t\tsignal: options.signal,\n\t\t\ttransition,\n\t\t\tudid: device.udid\n\t\t});\n\t\tthrowIfAborted(options.signal);\n\t\tif (options.nativeLog) transition('streaming-logs');\n\t\tnativeLogs = attachNativeLogs(project, device.udid, options);\n\t\ttransition('launching');\n\t\tawait requireSuccess(\n\t\t\t[\n\t\t\t\tproject.xcrun,\n\t\t\t\t'simctl',\n\t\t\t\t'launch',\n\t\t\t\t'--terminate-running-process',\n\t\t\t\tdevice.udid,\n\t\t\t\tproject.config.appId\n\t\t\t],\n\t\t\t'iOS app launch',\n\t\t\trun,\n\t\t\t{ signal: options.signal }\n\t\t);\n\t\ttransition('ready');\n\t\ttimings.total = performance.now() - startedAt;\n\t\tlog(\n\t\t\t`iOS simulator connected (${device.udid}) with HMR on port ${options.port} in ${getDurationString(timings.total)} (${nativeCacheHit ? 'native cache hit' : 'native build installed'}).`\n\t\t);\n\t\tlog(`iOS startup: ${timingSummary(timings)}.`);\n\t\tlet closed = false;\n\t\tconst close = async () => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\ttransition('closing');\n\t\t\tawait closeLogs();\n\t\t\tawait repairAbsoluteIosDevSession(project.projectRoot);\n\t\t\ttransition('closed');\n\t\t};\n\n\t\treturn {\n\t\t\tclose,\n\t\t\tnativeCacheHit,\n\t\t\tstartedSimulator,\n\t\t\ttimings: { ...timings },\n\t\t\tudid: device.udid,\n\t\t\trebuild: async () => {\n\t\t\t\tif (closed)\n\t\t\t\t\tthrow new Error('iOS development session is closed.');\n\t\t\t\tlog(\n\t\t\t\t\t'iOS native inputs changed; rebuilding without restarting the dev server.'\n\t\t\t\t);\n\t\t\t\tawait close();\n\n\t\t\t\treturn startAbsoluteIosDevSession(options);\n\t\t\t},\n\t\t\trelaunch: async () => {\n\t\t\t\tif (closed)\n\t\t\t\t\tthrow new Error('iOS development session is closed.');\n\t\t\t\ttransition('launching');\n\t\t\t\ttry {\n\t\t\t\t\tawait requireSuccess(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tproject.xcrun,\n\t\t\t\t\t\t\t'simctl',\n\t\t\t\t\t\t\t'launch',\n\t\t\t\t\t\t\t'--terminate-running-process',\n\t\t\t\t\t\t\tdevice.udid,\n\t\t\t\t\t\t\tproject.config.appId\n\t\t\t\t\t\t],\n\t\t\t\t\t\t'iOS app relaunch',\n\t\t\t\t\t\trun,\n\t\t\t\t\t\t{ signal: options.signal }\n\t\t\t\t\t);\n\t\t\t\t\ttransition('ready');\n\t\t\t\t\tlog(`iOS app relaunched on ${device.udid}.`);\n\t\t\t\t} catch (error) {\n\t\t\t\t\ttransition('failed');\n\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t\tscreenshot: async (destination) => {\n\t\t\t\tconst resolved = resolve(project.projectRoot, destination);\n\t\t\t\tif (!isInside(project.projectRoot, resolved))\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'iOS screenshot destination must remain inside the project.'\n\t\t\t\t\t);\n\t\t\t\tawait mkdir(dirname(resolved), { recursive: true });\n\t\t\t\tawait requireSuccess(\n\t\t\t\t\t[\n\t\t\t\t\t\tproject.xcrun,\n\t\t\t\t\t\t'simctl',\n\t\t\t\t\t\t'io',\n\t\t\t\t\t\tdevice.udid,\n\t\t\t\t\t\t'screenshot',\n\t\t\t\t\t\tresolved\n\t\t\t\t\t],\n\t\t\t\t\t'iOS simulator screenshot',\n\t\t\t\t\trun,\n\t\t\t\t\t{ signal: options.signal }\n\t\t\t\t);\n\n\t\t\t\treturn resolved;\n\t\t\t},\n\t\t\tget state() {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t};\n\t} catch (error) {\n\t\ttransition('failed');\n\t\tawait closeLogs();\n\t\tawait repairAbsoluteIosDevSession(project.projectRoot);\n\n\t\tthrow error;\n\t}\n};\n",
18
19
  "import { watch, type FSWatcher } from 'node:fs';\nimport { basename } from 'node:path';\nimport {\n\tfingerprintAbsoluteIosDevProject,\n\ttype AbsoluteIosDevProject\n} from './iosSimulatorController';\n\nconst NATIVE_CHANGE_DEBOUNCE_MS = 500;\nconst ROOT_NATIVE_INPUTS = new Set([\n\t'absolute.config.js',\n\t'absolute.config.mjs',\n\t'absolute.config.ts',\n\t'absolutejs.config.js',\n\t'absolutejs.config.mjs',\n\t'absolutejs.config.ts',\n\t'bun.lock',\n\t'bun.lockb',\n\t'capacitor.config.js',\n\t'capacitor.config.ts',\n\t'package.json'\n]);\n\nexport type AbsoluteIosNativeChange = {\n\tafterFingerprint: string;\n\tbeforeFingerprint: string;\n\tpaths: string[];\n\trootInputChanged: boolean;\n};\n\nexport type AbsoluteIosNativeWatcher = { close: () => void };\n\nexport type AbsoluteIosNativeWatcherOptions = {\n\tdebounceMs?: number;\n\tonChange: (change: AbsoluteIosNativeChange) => Promise<void>;\n\tonError?: (error: unknown) => void;\n\tproject: AbsoluteIosDevProject;\n\tsignal?: AbortSignal;\n};\n\nexport const createAbsoluteIosNativeWatcher = async (\n\toptions: AbsoluteIosNativeWatcherOptions\n): Promise<AbsoluteIosNativeWatcher> => {\n\tlet fingerprint = await fingerprintAbsoluteIosDevProject(options.project);\n\tlet closed = false;\n\tlet running = false;\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet rootInputChanged = false;\n\tconst changedPaths = new Set<string>();\n\tconst watchers: FSWatcher[] = [];\n\tconst debounceMs = options.debounceMs ?? NATIVE_CHANGE_DEBOUNCE_MS;\n\n\tconst close = () => {\n\t\tif (closed) return;\n\t\tclosed = true;\n\t\tif (timer) clearTimeout(timer);\n\t\twatchers.forEach((watcher) => watcher.close());\n\t\toptions.signal?.removeEventListener('abort', close);\n\t};\n\tconst schedule = () => {\n\t\tif (closed || running) return;\n\t\tif (timer) clearTimeout(timer);\n\t\ttimer = setTimeout(() => void flush(), debounceMs);\n\t};\n\tconst flush = async () => {\n\t\ttimer = undefined;\n\t\tif (closed || running || changedPaths.size === 0) return;\n\t\trunning = true;\n\t\tconst paths = [...changedPaths].sort();\n\t\tconst forced = rootInputChanged;\n\t\tchangedPaths.clear();\n\t\trootInputChanged = false;\n\t\ttry {\n\t\t\tconst next = await fingerprintAbsoluteIosDevProject(\n\t\t\t\toptions.project\n\t\t\t);\n\t\t\tif (!forced && next === fingerprint) return;\n\t\t\tawait options.onChange({\n\t\t\t\tafterFingerprint: next,\n\t\t\t\tbeforeFingerprint: fingerprint,\n\t\t\t\tpaths,\n\t\t\t\trootInputChanged: forced\n\t\t\t});\n\t\t\tfingerprint = await fingerprintAbsoluteIosDevProject(\n\t\t\t\toptions.project\n\t\t\t);\n\t\t} catch (error) {\n\t\t\toptions.onError?.(error);\n\t\t} finally {\n\t\t\trunning = false;\n\t\t\tif (changedPaths.size > 0) schedule();\n\t\t}\n\t};\n\tconst record = (path: string, force: boolean) => {\n\t\tif (closed) return;\n\t\tchangedPaths.add(path);\n\t\trootInputChanged ||= force;\n\t\tschedule();\n\t};\n\n\twatchers.push(\n\t\twatch(\n\t\t\toptions.project.nativeDirectory,\n\t\t\t{ recursive: true },\n\t\t\t(_event, filename) => {\n\t\t\t\tif (filename) record(String(filename), false);\n\t\t\t}\n\t\t)\n\t);\n\twatchers.push(\n\t\twatch(options.project.projectRoot, (_event, filename) => {\n\t\t\tif (!filename) return;\n\t\t\tconst path = String(filename);\n\t\t\tif (isAbsoluteIosNativeRootInput(path)) record(path, true);\n\t\t})\n\t);\n\twatchers.forEach((watcher) =>\n\t\twatcher.on('error', (error) => options.onError?.(error))\n\t);\n\toptions.signal?.addEventListener('abort', close, { once: true });\n\n\treturn { close };\n};\nexport const isAbsoluteIosNativeRootInput = (path: string) =>\n\tROOT_NATIVE_INPUTS.has(basename(path));\n",
20
+ "/* eslint-disable @typescript-eslint/consistent-type-assertions, absolute/max-depth-extended, no-await-in-loop -- This module validates persisted/remote input and consumes protocol streams sequentially. */\nimport { createHash, randomUUID } from 'node:crypto';\nimport { chmod, mkdir, readFile, rename, writeFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport {\n\tdirname,\n\tisAbsolute,\n\tjoin,\n\tposix,\n\trelative,\n\tresolve as resolvePath,\n\tsep\n} from 'node:path';\nimport type { MobileConfig } from '../../types/build';\nimport type { FileSink } from 'bun';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\nimport type {\n\tAbsoluteIosDevPhaseTiming,\n\tAbsoluteIosDevSession,\n\tAbsoluteIosDevState,\n\tAbsoluteIosNativeLogEntry\n} from './iosSimulatorController';\nimport {\n\tABSOLUTE_REMOTE_MAC_EVENT_PREFIX,\n\tABSOLUTE_REMOTE_MAC_PROTOCOL_VERSION\n} from './remoteMacWire';\nexport {\n\tABSOLUTE_REMOTE_MAC_EVENT_PREFIX,\n\tABSOLUTE_REMOTE_MAC_PROTOCOL_VERSION\n} from './remoteMacWire';\n\nconst PROFILE_FORMAT = 1;\nconst PROFILE_NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/u;\nconst SSH_DESTINATION = /^(?:[A-Za-z0-9._-]+@)?[A-Za-z0-9._:-]+$/u;\n\nexport type AbsoluteRemoteMacProfile = {\n\tbunPath: string;\n\tcreatedAt: string;\n\tdestination: string;\n\tname: string;\n\tport?: number;\n\tworkspaceRoot: string;\n\txcodeVersion: string;\n};\n\ntype ProfileStore = {\n\tdefaultProfile?: string;\n\tformat: number;\n\tprofiles: Record<string, AbsoluteRemoteMacProfile>;\n};\n\nexport type AbsoluteRemoteMacInspection = {\n\tbunPath: string;\n\thome: string;\n\tos: string;\n\txcodeVersion: string;\n};\n\nexport type AbsoluteRemoteIosDevProject = {\n\tcap: string;\n\tconfig: NormalizedAbsoluteMobileConfig;\n\tnativeDirectory: string;\n\tprojectRoot: string;\n\tprofile: AbsoluteRemoteMacProfile;\n\tremoteProjectRoot: string;\n\tremote: true;\n\txcodebuild: string;\n\txcrun: string;\n};\n\nexport type AbsoluteIosDevelopmentProject =\n\t| AbsoluteRemoteIosDevProject\n\t| (import('./iosSimulatorController').AbsoluteIosDevProject & {\n\t\t\tremote?: false;\n\t });\n\nexport type AbsoluteRemoteMacCommandResult = {\n\texitCode: number;\n\tstderr: string;\n\tstdout: string;\n};\n\nexport type AbsoluteRemoteMacTransport = {\n\tcapture: (command: string[]) => Promise<AbsoluteRemoteMacCommandResult>;\n\tspawn: (\n\t\tcommand: string[],\n\t\toptions: { signal?: AbortSignal }\n\t) => {\n\t\texited: Promise<number>;\n\t\tkill: () => void;\n\t\tstderr: ReadableStream<Uint8Array>;\n\t\tstdin: FileSink;\n\t\tstdout: ReadableStream<Uint8Array>;\n\t};\n};\n\nexport type AbsoluteRemoteIosOptions = {\n\thttps?: boolean;\n\tlog?: (message: string) => void;\n\tnativeLog?: (entry: AbsoluteIosNativeLogEntry) => void;\n\tonPhaseTiming?: (timing: AbsoluteIosDevPhaseTiming) => void;\n\tonStateChange?: (state: AbsoluteIosDevState) => void;\n\tport: number;\n\tproject: AbsoluteRemoteIosDevProject;\n\tsignal?: AbortSignal;\n\tinstallAgent?: (\n\t\tproject: AbsoluteRemoteIosDevProject\n\t) => Promise<{ remotePath: string; uploaded?: boolean }>;\n\tsyncProject?: (project: AbsoluteRemoteIosDevProject) => Promise<void>;\n\ttransport?: AbsoluteRemoteMacTransport;\n};\n\ntype RemoteEvent =\n\t| { entry: AbsoluteIosNativeLogEntry; type: 'native-log'; v: 1 }\n\t| { error: string; type: 'fatal'; v: 1 }\n\t| { message: string; type: 'log'; v: 1 }\n\t| { state: AbsoluteIosDevState; type: 'state'; v: 1 }\n\t| ({ type: 'timing'; v: 1 } & AbsoluteIosDevPhaseTiming)\n\t| {\n\t\t\tid: string;\n\t\t\tok: boolean;\n\t\t\tresult?: unknown;\n\t\t\terror?: string;\n\t\t\ttype: 'response';\n\t\t\tv: 1;\n\t }\n\t| {\n\t\t\tnativeCacheHit: boolean;\n\t\t\tstartedSimulator: boolean;\n\t\t\ttimings: Record<string, number>;\n\t\t\ttype: 'ready';\n\t\t\tudid: string;\n\t\t\tv: 1;\n\t };\n\nconst defaultProfilePath = () =>\n\tjoin(homedir(), '.absolutejs', 'mobile', 'remote-macs.json');\n\nconst emptyStore = (): ProfileStore => ({\n\tformat: PROFILE_FORMAT,\n\tprofiles: {}\n});\n\nconst loadStore = async (path = defaultProfilePath()) => {\n\ttry {\n\t\tconst parsed = JSON.parse(await readFile(path, 'utf8')) as ProfileStore;\n\t\tif (\n\t\t\tparsed.format !== PROFILE_FORMAT ||\n\t\t\ttypeof parsed.profiles !== 'object' ||\n\t\t\tparsed.profiles === null ||\n\t\t\tArray.isArray(parsed.profiles)\n\t\t)\n\t\t\tthrow new Error('Unsupported remote Mac profile format.');\n\t\tfor (const [key, profile] of Object.entries(parsed.profiles)) {\n\t\t\tif (\n\t\t\t\ttypeof profile !== 'object' ||\n\t\t\t\tprofile === null ||\n\t\t\t\tvalidateAbsoluteRemoteMacProfileName(key) !== key ||\n\t\t\t\tprofile.name !== key ||\n\t\t\t\tvalidateAbsoluteSshDestination(profile.destination) !==\n\t\t\t\t\tprofile.destination ||\n\t\t\t\tvalidatePort(profile.port) !== profile.port ||\n\t\t\t\ttypeof profile.createdAt !== 'string' ||\n\t\t\t\t!profile.createdAt ||\n\t\t\t\ttypeof profile.bunPath !== 'string' ||\n\t\t\t\t!profile.bunPath.startsWith('/') ||\n\t\t\t\t/[\\r\\n\\0]/u.test(profile.bunPath) ||\n\t\t\t\ttypeof profile.workspaceRoot !== 'string' ||\n\t\t\t\t!profile.workspaceRoot.startsWith('/') ||\n\t\t\t\tprofile.workspaceRoot === '/' ||\n\t\t\t\t/[\\r\\n\\0]/u.test(profile.workspaceRoot) ||\n\t\t\t\ttypeof profile.xcodeVersion !== 'string' ||\n\t\t\t\t!profile.xcodeVersion.startsWith('Xcode ')\n\t\t\t)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Remote Mac profile ${JSON.stringify(key)} is invalid.`\n\t\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tparsed.defaultProfile !== undefined &&\n\t\t\t!parsed.profiles[parsed.defaultProfile]\n\t\t)\n\t\t\tthrow new Error('The default remote Mac profile does not exist.');\n\n\t\treturn parsed;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === 'ENOENT')\n\t\t\treturn emptyStore();\n\t\tthrow error;\n\t}\n};\n\nconst saveStore = async (store: ProfileStore, path = defaultProfilePath()) => {\n\tawait mkdir(dirname(path), { recursive: true });\n\tconst temporary = `${path}.${randomUUID()}.tmp`;\n\tawait writeFile(temporary, `${JSON.stringify(store, null, 2)}\\n`, {\n\t\tmode: 0o600\n\t});\n\tawait rename(temporary, path);\n\tawait chmod(path, 0o600);\n};\n\nexport const validateAbsoluteRemoteMacProfileName = (name: string) => {\n\tconst normalized = name.trim().toLowerCase();\n\tif (!PROFILE_NAME.test(normalized))\n\t\tthrow new TypeError(\n\t\t\t'Remote Mac profile names must use 1-64 lowercase letters, digits, dots, dashes, or underscores.'\n\t\t);\n\n\treturn normalized;\n};\n\nexport const validateAbsoluteSshDestination = (destination: string) => {\n\tconst normalized = destination.trim();\n\tif (!SSH_DESTINATION.test(normalized) || normalized.startsWith('-'))\n\t\tthrow new TypeError(\n\t\t\t'Remote Mac SSH destination must be a host, SSH alias, or user@host without command-line options.'\n\t\t);\n\n\treturn normalized;\n};\n\nconst validatePort = (port: number | undefined) => {\n\tif (\n\t\tport !== undefined &&\n\t\t(!Number.isInteger(port) || port < 1 || port > 65_535)\n\t)\n\t\tthrow new TypeError('Remote Mac SSH port must be between 1 and 65535.');\n\n\treturn port;\n};\n\nconst shellQuote = (value: string) => `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n\nexport const absoluteRemoteMacSshBase = (\n\tprofile: Pick<AbsoluteRemoteMacProfile, 'destination' | 'port'>,\n\toptions: { acceptNew?: boolean } = {}\n) => [\n\t'ssh',\n\t'-o',\n\t'BatchMode=yes',\n\t'-o',\n\t'ConnectTimeout=10',\n\t'-o',\n\t'ServerAliveInterval=15',\n\t'-o',\n\t'ServerAliveCountMax=3',\n\t'-o',\n\t`StrictHostKeyChecking=${options.acceptNew ? 'accept-new' : 'yes'}`,\n\t...(profile.port ? ['-p', String(profile.port)] : []),\n\tprofile.destination\n];\n\nconst localCapture = async (command: string[]) => {\n\tconst process = Bun.spawn(command, {\n\t\tstderr: 'pipe',\n\t\tstdin: 'ignore',\n\t\tstdout: 'pipe'\n\t});\n\tconst [exitCode, stdout, stderr] = await Promise.all([\n\t\tprocess.exited,\n\t\tnew Response(process.stdout).text(),\n\t\tnew Response(process.stderr).text()\n\t]);\n\n\treturn { exitCode, stderr, stdout };\n};\n\nconst defaultTransport: AbsoluteRemoteMacTransport = {\n\tcapture: localCapture,\n\tspawn: (command, options) =>\n\t\tBun.spawn(command, {\n\t\t\tsignal: options.signal,\n\t\t\tstderr: 'pipe',\n\t\t\tstdin: 'pipe',\n\t\t\tstdout: 'pipe'\n\t\t}) as ReturnType<AbsoluteRemoteMacTransport['spawn']>\n};\n\nconst requireRemoteSuccess = (\n\tresult: AbsoluteRemoteMacCommandResult,\n\tlabel: string\n) => {\n\tif (result.exitCode !== 0)\n\t\tthrow new Error(\n\t\t\t`${label} failed: ${(result.stderr || result.stdout).trim() || `status ${result.exitCode}`}`\n\t\t);\n\n\treturn result.stdout.trim();\n};\n\nexport const getAbsoluteRemoteMacProfile = async (\n\tname?: string,\n\tprofilePath?: string\n) => {\n\tconst store = await loadStore(profilePath);\n\tconst selected =\n\t\tname ?? process.env.ABSOLUTE_IOS_REMOTE ?? store.defaultProfile;\n\tif (!selected) return undefined;\n\tconst profile = store.profiles[selected];\n\tif (!profile)\n\t\tthrow new Error(\n\t\t\t`Remote Mac profile ${JSON.stringify(selected)} was not found.`\n\t\t);\n\n\treturn profile;\n};\nexport const inspectAbsoluteRemoteMac = async (\n\tdestination: string,\n\toptions: {\n\t\tacceptNew?: boolean;\n\t\tport?: number;\n\t\ttransport?: Pick<AbsoluteRemoteMacTransport, 'capture'>;\n\t} = {}\n) => {\n\tconst profile: Pick<AbsoluteRemoteMacProfile, 'destination' | 'port'> = {\n\t\tdestination: validateAbsoluteSshDestination(destination),\n\t\tport: validatePort(options.port)\n\t};\n\tconst capture = options.transport?.capture ?? defaultTransport.capture;\n\tconst command = [\n\t\t...absoluteRemoteMacSshBase(profile, {\n\t\t\tacceptNew: options.acceptNew === true\n\t\t}),\n\t\t'/bin/sh -lc',\n\t\tshellQuote(\n\t\t\t`bun_path=\"$(command -v bun || true)\"; if [ -z \"$bun_path\" ] && [ -x \"$HOME/.bun/bin/bun\" ]; then bun_path=\"$HOME/.bun/bin/bun\"; fi; printf '%s\\\\n' \"$(uname -s)\" \"$HOME\" \"$bun_path\" \"$(/usr/bin/xcodebuild -version 2>/dev/null | tr '\\\\n' ' ' || true)\"`\n\t\t)\n\t];\n\tconst lines = requireRemoteSuccess(\n\t\tawait capture(command),\n\t\t'Remote Mac handshake'\n\t).split(/\\r?\\n/u);\n\tconst [operatingSystem, home, bunPath, xcodeVersion] = lines;\n\tif (operatingSystem !== 'Darwin')\n\t\tthrow new Error('The SSH target is not a Mac.');\n\tif (!home?.startsWith('/') || !bunPath?.startsWith('/'))\n\t\tthrow new Error(\n\t\t\t'The remote Mac must have Bun installed and available to SSH.'\n\t\t);\n\tif (!xcodeVersion?.startsWith('Xcode '))\n\t\tthrow new Error(\n\t\t\t'The remote Mac must have full Xcode installed and selected.'\n\t\t);\n\n\treturn { bunPath, home, os: operatingSystem, xcodeVersion };\n};\nexport const listAbsoluteRemoteMacProfiles = async (profilePath?: string) => {\n\tconst store = await loadStore(profilePath);\n\n\treturn {\n\t\tdefaultProfile: store.defaultProfile,\n\t\tprofiles: Object.values(store.profiles).sort((left, right) =>\n\t\t\tleft.name.localeCompare(right.name)\n\t\t)\n\t};\n};\nexport const pairAbsoluteRemoteMac = async (options: {\n\tdestination: string;\n\tname: string;\n\tport?: number;\n\tprofilePath?: string;\n\ttransport?: Pick<AbsoluteRemoteMacTransport, 'capture'>;\n\tworkspaceRoot?: string;\n}) => {\n\tconst name = validateAbsoluteRemoteMacProfileName(options.name);\n\tconst destination = validateAbsoluteSshDestination(options.destination);\n\tconst port = validatePort(options.port);\n\tconst inspection = await inspectAbsoluteRemoteMac(destination, {\n\t\tacceptNew: true,\n\t\tport,\n\t\ttransport: options.transport\n\t});\n\tconst workspaceRoot = options.workspaceRoot\n\t\t? options.workspaceRoot.trim()\n\t\t: posix.join(inspection.home, '.absolutejs', 'remote-ios');\n\tif (\n\t\t!workspaceRoot.startsWith('/') ||\n\t\tworkspaceRoot === '/' ||\n\t\t/[\\r\\n\\0]/u.test(workspaceRoot)\n\t)\n\t\tthrow new TypeError(\n\t\t\t'Remote Mac workspace must be an absolute macOS path.'\n\t\t);\n\tconst profile: AbsoluteRemoteMacProfile = {\n\t\tbunPath: inspection.bunPath,\n\t\tcreatedAt: new Date().toISOString(),\n\t\tdestination,\n\t\tname,\n\t\t...(port ? { port } : {}),\n\t\tworkspaceRoot,\n\t\txcodeVersion: inspection.xcodeVersion\n\t};\n\tconst store = await loadStore(options.profilePath);\n\tstore.profiles[name] = profile;\n\tstore.defaultProfile = name;\n\tawait saveStore(store, options.profilePath);\n\n\treturn profile;\n};\nexport const removeAbsoluteRemoteMacProfile = async (\n\tname: string,\n\tprofilePath?: string\n) => {\n\tconst normalized = validateAbsoluteRemoteMacProfileName(name);\n\tconst store = await loadStore(profilePath);\n\tif (!store.profiles[normalized]) return false;\n\tdelete store.profiles[normalized];\n\tif (store.defaultProfile === normalized) {\n\t\tconst [nextDefault] = Object.keys(store.profiles).sort();\n\t\tstore.defaultProfile = nextDefault;\n\t}\n\tawait saveStore(store, profilePath);\n\n\treturn true;\n};\n\nconst projectIdentity = (projectRoot: string, appId: string) =>\n\tcreateHash('sha256')\n\t\t.update(`${resolvePath(projectRoot)}\\0${appId}`)\n\t\t.digest('hex')\n\t\t.slice(0, 20);\n\nexport const createAbsoluteRemoteIosDevProject = (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\tprojectRoot: string,\n\tprofile: AbsoluteRemoteMacProfile\n): AbsoluteRemoteIosDevProject => ({\n\tcap: join(resolvePath(projectRoot), 'node_modules', '.bin', 'cap'),\n\tconfig,\n\tnativeDirectory: join(config.nativeProjectDirectory, 'ios'),\n\tprofile,\n\tprojectRoot: resolvePath(projectRoot),\n\tremote: true,\n\tremoteProjectRoot: posix.join(\n\t\tprofile.workspaceRoot,\n\t\t'projects',\n\t\tprojectIdentity(projectRoot, config.appId),\n\t\t'current'\n\t),\n\txcodebuild: 'remote:xcodebuild',\n\txcrun: 'remote:xcrun'\n});\nexport const installAbsoluteRemoteMacAgent = async (\n\tproject: AbsoluteRemoteIosDevProject\n) => {\n\tconst artifact = await materializeAbsoluteRemoteMacAgent(\n\t\tproject.projectRoot\n\t);\n\tconst directory = posix.join(\n\t\tproject.profile.workspaceRoot,\n\t\t'agents',\n\t\t`protocol-${ABSOLUTE_REMOTE_MAC_PROTOCOL_VERSION}`,\n\t\tartifact.sha256\n\t);\n\tconst remotePath = posix.join(directory, 'agent.js');\n\tconst verifyScript =\n\t\t`test -f ${shellQuote(remotePath)} && ` +\n\t\t`test \"$(shasum -a 256 ${shellQuote(remotePath)} | awk '{print $1}')\" = ${shellQuote(artifact.sha256)}`;\n\tconst verified = await defaultTransport.capture([\n\t\t...absoluteRemoteMacSshBase(project.profile),\n\t\t'/bin/sh -lc',\n\t\tshellQuote(verifyScript)\n\t]);\n\tif (verified.exitCode === 0)\n\t\treturn { ...artifact, remotePath, uploaded: false };\n\tconst temporary = posix.join(directory, `.agent-${randomUUID()}.tmp`);\n\tconst installScript = [\n\t\t'set -eu',\n\t\t'umask 077',\n\t\t`mkdir -p ${shellQuote(directory)}`,\n\t\t`cat > ${shellQuote(temporary)}`,\n\t\t`test \"$(shasum -a 256 ${shellQuote(temporary)} | awk '{print $1}')\" = ${shellQuote(artifact.sha256)}`,\n\t\t`chmod 600 ${shellQuote(temporary)}`,\n\t\t`mv ${shellQuote(temporary)} ${shellQuote(remotePath)}`\n\t].join('; ');\n\tconst upload = Bun.spawn(\n\t\t[\n\t\t\t...absoluteRemoteMacSshBase(project.profile),\n\t\t\t'/bin/sh -lc',\n\t\t\tshellQuote(installScript)\n\t\t],\n\t\t{\n\t\t\tstderr: 'pipe',\n\t\t\tstdin: Bun.file(artifact.path),\n\t\t\tstdout: 'pipe'\n\t\t}\n\t);\n\tconst [exitCode, stderr] = await Promise.all([\n\t\tupload.exited,\n\t\tnew Response(upload.stderr).text()\n\t]);\n\tif (exitCode !== 0)\n\t\tthrow new Error(\n\t\t\t`Remote Mac agent installation failed: ${stderr.trim() || `status ${exitCode}`}`\n\t\t);\n\n\treturn { ...artifact, remotePath, uploaded: true };\n};\nexport const materializeAbsoluteRemoteMacAgent = async (\n\tprojectRoot: string\n) => {\n\tconst shippedCandidates = [\n\t\tjoin(import.meta.dir, 'remoteMacAgentEntry.js'),\n\t\tjoin(import.meta.dir, '..', 'mobile', 'remoteMacAgentEntry.js')\n\t];\n\tlet path: string | undefined;\n\tfor (const candidate of shippedCandidates) {\n\t\tif (await Bun.file(candidate).exists()) {\n\t\t\tpath = candidate;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!path) {\n\t\tconst sourceCandidates = [\n\t\t\tjoin(import.meta.dir, 'remoteMacAgentEntry.ts'),\n\t\t\tjoin(\n\t\t\t\timport.meta.dir,\n\t\t\t\t'..',\n\t\t\t\t'..',\n\t\t\t\t'src',\n\t\t\t\t'mobile',\n\t\t\t\t'remoteMacAgentEntry.ts'\n\t\t\t)\n\t\t];\n\t\tconst source = await sourceCandidates.reduce<\n\t\t\tPromise<string | undefined>\n\t\t>(\n\t\t\tasync (found, candidate) =>\n\t\t\t\t(await found) ??\n\t\t\t\t((await Bun.file(candidate).exists()) ? candidate : undefined),\n\t\t\tPromise.resolve(undefined)\n\t\t);\n\t\tif (!source)\n\t\t\tthrow new Error(\n\t\t\t\t'The AbsoluteJS installation does not contain its remote Mac agent artifact.'\n\t\t\t);\n\t\tconst outdir = join(\n\t\t\tresolvePath(projectRoot),\n\t\t\t'.absolutejs',\n\t\t\t'mobile',\n\t\t\t'remote-agent'\n\t\t);\n\t\tawait mkdir(outdir, { recursive: true });\n\t\tconst result = await Bun.build({\n\t\t\tentrypoints: [source],\n\t\t\tminify: true,\n\t\t\toutdir,\n\t\t\ttarget: 'bun'\n\t\t});\n\t\tif (!result.success)\n\t\t\tthrow new AggregateError(\n\t\t\t\tresult.logs,\n\t\t\t\t'Failed to build the AbsoluteJS remote Mac agent.'\n\t\t\t);\n\t\tpath = join(outdir, 'remoteMacAgentEntry.js');\n\t}\n\tconst bytes = await Bun.file(path).arrayBuffer();\n\tconst sha256 = createHash('sha256')\n\t\t.update(new Uint8Array(bytes))\n\t\t.digest('hex');\n\n\treturn { bytes: bytes.byteLength, path, sha256 };\n};\n\nconst portableRelativePath = (root: string, path: string) =>\n\trelative(root, path).split(sep).join(posix.sep);\n\nconst portableMobileConfig = (\n\tproject: AbsoluteRemoteIosDevProject\n): MobileConfig => ({\n\tappId: project.config.appId,\n\tappName: project.config.appName,\n\tbundleDirectory: portableRelativePath(\n\t\tproject.projectRoot,\n\t\tproject.config.bundleDirectory\n\t),\n\t...(project.config.deepLinkScheme ||\n\tproject.config.deepLinkHosts.length > 1 ||\n\tproject.config.appleAppIdPrefix\n\t\t? {\n\t\t\t\tdeepLinks: {\n\t\t\t\t\t...(project.config.deepLinkScheme\n\t\t\t\t\t\t? { scheme: project.config.deepLinkScheme }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\thosts: project.config.deepLinkHosts,\n\t\t\t\t\t...(project.config.appleAppIdPrefix\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tapple: {\n\t\t\t\t\t\t\t\t\tappIdPrefix: project.config.appleAppIdPrefix\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {})\n\t\t\t\t}\n\t\t\t}\n\t\t: {}),\n\tentry: project.config.entry,\n\t...(project.config.iosVersion\n\t\t? { ios: { version: project.config.iosVersion } }\n\t\t: {}),\n\tnativeProject: {\n\t\tdirectory: portableRelativePath(\n\t\t\tproject.projectRoot,\n\t\t\tproject.config.nativeProjectDirectory\n\t\t),\n\t\tmode: 'source'\n\t},\n\tplatforms: ['ios'],\n\tserver: { productionOrigin: project.config.productionOrigin }\n});\n\nexport const absoluteRemoteProjectSyncCommands = (\n\tproject: AbsoluteRemoteIosDevProject\n) => {\n\tconst current = project.remoteProjectRoot;\n\tconst parent = posix.dirname(current);\n\tconst staging = posix.join(parent, `.incoming-${randomUUID()}`);\n\tconst previous = posix.join(parent, '.previous');\n\tconst script = [\n\t\t'set -eu',\n\t\t`mkdir -p ${shellQuote(staging)}`,\n\t\t`tar -xf - -C ${shellQuote(staging)}`,\n\t\t`if [ -d ${shellQuote(posix.join(current, 'node_modules'))} ]; then mv ${shellQuote(posix.join(current, 'node_modules'))} ${shellQuote(posix.join(staging, 'node_modules'))}; fi`,\n\t\t`if [ -d ${shellQuote(posix.join(current, '.absolutejs'))} ]; then mv ${shellQuote(posix.join(current, '.absolutejs'))} ${shellQuote(posix.join(staging, '.absolutejs'))}; fi`,\n\t\t`rm -rf ${shellQuote(previous)}`,\n\t\t`if [ -d ${shellQuote(current)} ]; then mv ${shellQuote(current)} ${shellQuote(previous)}; fi`,\n\t\t`mv ${shellQuote(staging)} ${shellQuote(current)}`,\n\t\t`rm -rf ${shellQuote(previous)}`\n\t].join('; ');\n\n\treturn {\n\t\tremote: [\n\t\t\t...absoluteRemoteMacSshBase(project.profile),\n\t\t\t'/bin/sh -lc',\n\t\t\tshellQuote(script)\n\t\t],\n\t\ttar: [\n\t\t\t'tar',\n\t\t\t'--exclude=.git',\n\t\t\t'--exclude=node_modules',\n\t\t\t'--exclude=build',\n\t\t\t'--exclude=.absolutejs',\n\t\t\t'-cf',\n\t\t\t'-',\n\t\t\t'-C',\n\t\t\tproject.projectRoot,\n\t\t\t'.'\n\t\t]\n\t};\n};\n\nexport const syncAbsoluteRemoteMacProject = async (\n\tproject: AbsoluteRemoteIosDevProject\n) => {\n\tconst commands = absoluteRemoteProjectSyncCommands(project);\n\tconst archive = Bun.spawn(commands.tar, {\n\t\tstderr: 'pipe',\n\t\tstdout: 'pipe'\n\t});\n\tconst upload = Bun.spawn(commands.remote, {\n\t\tstderr: 'pipe',\n\t\tstdin: archive.stdout,\n\t\tstdout: 'pipe'\n\t});\n\tconst [archiveExit, uploadExit, archiveError, uploadError] =\n\t\tawait Promise.all([\n\t\t\tarchive.exited,\n\t\t\tupload.exited,\n\t\t\tnew Response(archive.stderr).text(),\n\t\t\tnew Response(upload.stderr).text()\n\t\t]);\n\tif (archiveExit !== 0 || uploadExit !== 0)\n\t\tthrow new Error(\n\t\t\t`Remote Mac project synchronization failed: ${(archiveError || uploadError).trim()}`\n\t\t);\n\tconst install = await defaultTransport.capture([\n\t\t...absoluteRemoteMacSshBase(project.profile),\n\t\t'/bin/sh -lc',\n\t\tshellQuote(\n\t\t\t`cd ${shellQuote(project.remoteProjectRoot)} && ${shellQuote(project.profile.bunPath)} install --frozen-lockfile`\n\t\t)\n\t]);\n\trequireRemoteSuccess(install, 'Remote Mac dependency installation');\n};\n\nconst consumeLines = async (\n\tstream: ReadableStream<Uint8Array>,\n\tonLine: (line: string) => void\n) => {\n\tconst reader = stream.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffered = '';\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffered += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffered.split(/\\r?\\n/u);\n\t\t\tbuffered = lines.pop() ?? '';\n\t\t\tlines.forEach(onLine);\n\t\t}\n\t\tbuffered += decoder.decode();\n\t\tif (buffered) onLine(buffered);\n\t} finally {\n\t\treader.releaseLock();\n\t}\n};\n\nexport const startAbsoluteRemoteIosDevSession = async (\n\toptions: AbsoluteRemoteIosOptions\n) => {\n\tconst startedAt = performance.now();\n\tconst transport = options.transport ?? defaultTransport;\n\tconst installAgent = options.installAgent ?? installAbsoluteRemoteMacAgent;\n\tconst syncProject = options.syncProject ?? syncAbsoluteRemoteMacProject;\n\tconst agentStartedAt = performance.now();\n\tconst agent = await installAgent(options.project);\n\tconst agentDuration = performance.now() - agentStartedAt;\n\tconst syncStartedAt = performance.now();\n\tawait syncProject(options.project);\n\tconst syncDuration = performance.now() - syncStartedAt;\n\tconst encodedConfig = Buffer.from(\n\t\tJSON.stringify(portableMobileConfig(options.project))\n\t).toString('base64url');\n\tconst remoteCommand = [\n\t\t`cd ${shellQuote(options.project.remoteProjectRoot)}`,\n\t\t'&&',\n\t\t'exec',\n\t\tshellQuote(options.project.profile.bunPath),\n\t\tshellQuote(agent.remotePath),\n\t\t'--port',\n\t\tString(options.port),\n\t\t'--mobile-config',\n\t\tshellQuote(encodedConfig),\n\t\t...(options.https ? ['--https'] : [])\n\t].join(' ');\n\tconst command = [\n\t\t...absoluteRemoteMacSshBase(options.project.profile),\n\t\t'-o',\n\t\t'ExitOnForwardFailure=yes',\n\t\t'-R',\n\t\t`${options.port}:127.0.0.1:${options.port}`,\n\t\t'/bin/sh -lc',\n\t\tshellQuote(remoteCommand)\n\t];\n\tconst connectStartedAt = performance.now();\n\tconst process = transport.spawn(command, { signal: options.signal });\n\tlet state: AbsoluteIosDevState = 'syncing';\n\tlet ready: Extract<RemoteEvent, { type: 'ready' }> | undefined;\n\tlet fatal: Error | undefined;\n\tconst pending = new Map<\n\t\tstring,\n\t\t{ reject: (error: Error) => void; resolve: (value: unknown) => void }\n\t>();\n\tlet resolveReady!: () => void;\n\tlet rejectReady!: (error: Error) => void;\n\tconst readyPromise = new Promise<void>((resolve, reject) => {\n\t\tresolveReady = resolve;\n\t\trejectReady = reject;\n\t});\n\tconst handleEvent = (event: RemoteEvent) => {\n\t\tif (event.v !== ABSOLUTE_REMOTE_MAC_PROTOCOL_VERSION) {\n\t\t\trejectReady(new Error('Remote Mac protocol version mismatch.'));\n\n\t\t\treturn;\n\t\t}\n\t\tif (event.type === 'log') options.log?.(event.message);\n\t\tif (event.type === 'native-log') options.nativeLog?.(event.entry);\n\t\tif (event.type === 'state') {\n\t\t\t({ state } = event);\n\t\t\toptions.onStateChange?.(state);\n\t\t}\n\t\tif (event.type === 'timing') options.onPhaseTiming?.(event);\n\t\tif (event.type === 'ready') {\n\t\t\tready = event;\n\t\t\tresolveReady();\n\t\t}\n\t\tif (event.type === 'fatal') {\n\t\t\tfatal = new Error(event.error);\n\t\t\trejectReady(fatal);\n\t\t}\n\t\tif (event.type === 'response') {\n\t\t\tconst request = pending.get(event.id);\n\t\t\tif (!request) return;\n\t\t\tpending.delete(event.id);\n\t\t\tif (event.ok) request.resolve(event.result);\n\t\t\telse\n\t\t\t\trequest.reject(\n\t\t\t\t\tnew Error(event.error ?? 'Remote command failed.')\n\t\t\t\t);\n\t\t}\n\t};\n\tconst stdoutDone = consumeLines(process.stdout, (line) => {\n\t\tif (!line.startsWith(ABSOLUTE_REMOTE_MAC_EVENT_PREFIX)) return;\n\t\ttry {\n\t\t\thandleEvent(\n\t\t\t\tJSON.parse(\n\t\t\t\t\tline.slice(ABSOLUTE_REMOTE_MAC_EVENT_PREFIX.length)\n\t\t\t\t) as RemoteEvent\n\t\t\t);\n\t\t} catch {\n\t\t\toptions.log?.(`Remote Mac emitted an invalid protocol event.`);\n\t\t}\n\t}).catch((error: unknown) => {\n\t\tfatal =\n\t\t\terror instanceof Error\n\t\t\t\t? error\n\t\t\t\t: new Error('Failed to read the remote Mac protocol stream.');\n\t\trejectReady(fatal);\n\t});\n\tconst stderrDone = consumeLines(process.stderr, (line) =>\n\t\toptions.log?.(`[remote] ${line}`)\n\t).catch((error: unknown) =>\n\t\toptions.log?.(\n\t\t\t`[remote] ${error instanceof Error ? error.message : 'Failed to read SSH stderr.'}`\n\t\t)\n\t);\n\tvoid process.exited.then(async (exitCode) => {\n\t\tawait Promise.all([stdoutDone, stderrDone]);\n\t\tconst error =\n\t\t\tfatal ??\n\t\t\tnew Error(`Remote Mac connection closed with status ${exitCode}.`);\n\t\tif (!ready) rejectReady(error);\n\t\tpending.forEach(({ reject }) => reject(error));\n\t\tpending.clear();\n\n\t\treturn undefined;\n\t});\n\tawait readyPromise;\n\tif (!ready) throw fatal ?? new Error('Remote Mac did not become ready.');\n\tconst totalDuration = performance.now() - startedAt;\n\tlet currentReady: Extract<RemoteEvent, { type: 'ready' }> = {\n\t\t...ready,\n\t\ttimings: {\n\t\t\t...ready.timings,\n\t\t\t'remote-agent': agentDuration,\n\t\t\t'remote-connect': performance.now() - connectStartedAt,\n\t\t\t'remote-sync': syncDuration,\n\t\t\ttotal: totalDuration\n\t\t}\n\t};\n\toptions.log?.(\n\t\t`Remote Mac connected (${options.project.profile.name}); agent ${agent.uploaded ? 'uploaded' : 'cache hit'}, project synced, and iOS ready in ${totalDuration.toFixed(2)}ms.`\n\t);\n\n\tconst request = (\n\t\tcommandName: 'close' | 'rebuild' | 'relaunch' | 'screenshot'\n\t) => {\n\t\tconst id = randomUUID();\n\t\tconst response = new Promise<unknown>((resolve, reject) =>\n\t\t\tpending.set(id, { reject, resolve })\n\t\t);\n\t\tprocess.stdin.write(\n\t\t\t`${JSON.stringify({ command: commandName, id, v: 1 })}\\n`\n\t\t);\n\t\tprocess.stdin.flush();\n\n\t\treturn response;\n\t};\n\tlet closed = false;\n\tconst close = async () => {\n\t\tif (closed) return;\n\t\tclosed = true;\n\t\tawait request('close').catch(() => undefined);\n\t\tprocess.stdin.end();\n\t\tawait process.exited.catch(() => undefined);\n\t};\n\tconst makeSession = (): AbsoluteIosDevSession => ({\n\t\tclose,\n\t\tnativeCacheHit: currentReady.nativeCacheHit,\n\t\tstartedSimulator: currentReady.startedSimulator,\n\t\ttimings: currentReady.timings,\n\t\tudid: currentReady.udid,\n\t\trebuild: async () => {\n\t\t\tconst rebuildStartedAt = performance.now();\n\t\t\tconst rebuildSyncStartedAt = performance.now();\n\t\t\tawait syncProject(options.project);\n\t\t\tconst rebuildSyncDuration =\n\t\t\t\tperformance.now() - rebuildSyncStartedAt;\n\t\t\tconst result = (await request('rebuild')) as Extract<\n\t\t\t\tRemoteEvent,\n\t\t\t\t{ type: 'ready' }\n\t\t\t>;\n\t\t\tcurrentReady = {\n\t\t\t\t...result,\n\t\t\t\ttimings: {\n\t\t\t\t\t...result.timings,\n\t\t\t\t\t'remote-sync': rebuildSyncDuration,\n\t\t\t\t\ttotal: performance.now() - rebuildStartedAt\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn makeSession();\n\t\t},\n\t\trelaunch: async () => {\n\t\t\tawait request('relaunch');\n\t\t},\n\t\tscreenshot: async (destination) => {\n\t\t\tconst result = (await request('screenshot')) as { data: string };\n\t\t\tconst target = resolvePath(\n\t\t\t\toptions.project.projectRoot,\n\t\t\t\tdestination\n\t\t\t);\n\t\t\tconst targetRelative = relative(\n\t\t\t\toptions.project.projectRoot,\n\t\t\t\ttarget\n\t\t\t);\n\t\t\tif (targetRelative.startsWith('..') || isAbsolute(targetRelative))\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'iOS screenshot must remain inside the project.'\n\t\t\t\t);\n\t\t\tawait mkdir(dirname(target), { recursive: true });\n\t\t\tawait writeFile(target, Buffer.from(result.data, 'base64'));\n\n\t\t\treturn target;\n\t\t},\n\t\tget state() {\n\t\t\treturn state;\n\t\t}\n\t});\n\n\treturn makeSession();\n};\n",
21
+ "export const ABSOLUTE_REMOTE_MAC_EVENT_PREFIX = 'ABSOLUTE_REMOTE_MAC\\t';\nexport const ABSOLUTE_REMOTE_MAC_PROTOCOL_VERSION = 1;\n",
19
22
  "import {\n\taccess,\n\tmkdir,\n\treadFile,\n\trename,\n\trm,\n\twriteFile\n} from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { Elysia } from 'elysia';\nimport type { MobileConfig } from '../../types/build';\nimport {\n\tnormalizeAbsoluteMobileConfig,\n\ttype NormalizedAbsoluteMobileConfig\n} from './config';\n\nconst JSON_HEADERS: Record<string, string> = {\n\t'cache-control': 'public, max-age=300, must-revalidate',\n\t'content-type': 'application/json; charset=utf-8'\n};\nconst OWNERSHIP_FILE = '.absolutejs-mobile-associations.json';\nconst HTTP_OK = 200;\nconst VERIFY_TIMEOUT_MS = 10_000;\n\ntype AssociationEndpoint = {\n\tdocument: unknown;\n\thost: string;\n\tpath: string;\n\tplatform: string;\n};\n\nexport type AbsoluteAssociationRequest = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit\n) => Promise<Response>;\n\nexport const ANDROID_ASSOCIATION_PATH = '/.well-known/assetlinks.json';\nexport const APPLE_ASSOCIATION_PATH = '/.well-known/apple-app-site-association';\n\nexport type AbsoluteMobileAssociationDocuments = {\n\tandroid?: readonly [\n\t\t{\n\t\t\trelation: readonly ['delegate_permission/common.handle_all_urls'];\n\t\t\ttarget: {\n\t\t\t\tnamespace: 'android_app';\n\t\t\t\tpackage_name: string;\n\t\t\t\tsha256_cert_fingerprints: string[];\n\t\t\t};\n\t\t}\n\t];\n\tapple?: {\n\t\tapplinks: {\n\t\t\tdetails: readonly [\n\t\t\t\t{\n\t\t\t\t\tappIDs: readonly [string];\n\t\t\t\t\tcomponents: readonly [{ '/': '/*' }];\n\t\t\t\t}\n\t\t\t];\n\t\t};\n\t};\n};\n\nconst missingIdentity = (field: string, platform: string) =>\n\tnew TypeError(\n\t\t`${field} is required to publish ${platform} deep-link association files.`\n\t);\n\nconst createAppleDocument = (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\trequireAll: boolean\n) => {\n\tif (!config.platforms.includes('ios')) return undefined;\n\tif (!config.appleAppIdPrefix && requireAll) {\n\t\tthrow missingIdentity('mobile.deepLinks.apple.appIdPrefix', 'iOS');\n\t}\n\tif (!config.appleAppIdPrefix) return undefined;\n\n\treturn {\n\t\tapplinks: {\n\t\t\tdetails: [\n\t\t\t\t{\n\t\t\t\t\tappIDs: [\n\t\t\t\t\t\t`${config.appleAppIdPrefix}.${config.appId}`\n\t\t\t\t\t] as const,\n\t\t\t\t\tcomponents: [{ '/': '/*' as const }]\n\t\t\t\t}\n\t\t\t] as const\n\t\t}\n\t};\n};\n\nconst createAndroidDocument = (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\trequireAll: boolean\n) => {\n\tif (!config.platforms.includes('android')) return undefined;\n\tif (config.androidCertificateFingerprints.length === 0 && requireAll) {\n\t\tthrow missingIdentity(\n\t\t\t'mobile.deepLinks.android.sha256CertificateFingerprints',\n\t\t\t'Android'\n\t\t);\n\t}\n\tif (config.androidCertificateFingerprints.length === 0) return undefined;\n\n\treturn [\n\t\t{\n\t\t\trelation: ['delegate_permission/common.handle_all_urls'] as const,\n\t\t\ttarget: {\n\t\t\t\tnamespace: 'android_app' as const,\n\t\t\t\tpackage_name: config.appId,\n\t\t\t\tsha256_cert_fingerprints: config.androidCertificateFingerprints\n\t\t\t}\n\t\t}\n\t] as const;\n};\n\nexport const createAbsoluteMobileAssociationDocuments = (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\toptions: { requireAll?: boolean } = {}\n) => {\n\tconst documents: AbsoluteMobileAssociationDocuments = {};\n\tconst requireAll = options.requireAll === true;\n\tconst android = createAndroidDocument(config, requireAll);\n\tconst apple = createAppleDocument(config, requireAll);\n\tif (android) documents.android = android;\n\tif (apple) documents.apple = apple;\n\n\treturn documents;\n};\n\nconst jsonResponse = (value: unknown) =>\n\tnew Response(`${JSON.stringify(value)}\\n`, { headers: JSON_HEADERS });\n\nexport const createAbsoluteMobileAssociationPlugin = (\n\tmobile: MobileConfig | undefined,\n\tprojectRoot: string,\n\toptions: { requireAll?: boolean } = {}\n) => {\n\tconst plugin = new Elysia({ name: 'absolutejs-mobile-associations' });\n\tif (!mobile) return plugin;\n\tconst config = normalizeAbsoluteMobileConfig(mobile, projectRoot);\n\tconst documents = createAbsoluteMobileAssociationDocuments(config, options);\n\tif (documents.apple) {\n\t\tplugin.get(APPLE_ASSOCIATION_PATH, () => jsonResponse(documents.apple));\n\t}\n\tif (documents.android) {\n\t\tplugin.get(ANDROID_ASSOCIATION_PATH, () =>\n\t\t\tjsonResponse(documents.android)\n\t\t);\n\t}\n\n\treturn plugin;\n};\n\nconst writeAtomic = async (path: string, source: string) => {\n\tlet current: string | undefined;\n\ttry {\n\t\tcurrent = await readFile(path, 'utf8');\n\t} catch (error) {\n\t\tif (\n\t\t\t!(error instanceof Error) ||\n\t\t\t!('code' in error) ||\n\t\t\terror.code !== 'ENOENT'\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\tif (current === source) return false;\n\tconst temporary = `${path}.${crypto.randomUUID()}.tmp`;\n\tawait writeFile(temporary, source, { flag: 'wx' });\n\tawait rename(temporary, path);\n\n\treturn true;\n};\n\nconst exists = async (path: string) => {\n\ttry {\n\t\tawait access(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst assertOwnedOutput = async (root: string) => {\n\tconst path = resolve(root, OWNERSHIP_FILE);\n\tlet ownership: unknown;\n\ttry {\n\t\townership = JSON.parse(await readFile(path, 'utf8'));\n\t} catch {\n\t\tthrow new TypeError(\n\t\t\t`Association output ${root} already exists and is not owned by AbsoluteJS.`\n\t\t);\n\t}\n\tif (\n\t\ttypeof ownership !== 'object' ||\n\t\townership === null ||\n\t\tReflect.get(ownership, 'format') !== 1\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`Association output ${root} has an unsupported ownership manifest.`\n\t\t);\n\t}\n};\n\nconst publishGeneratedDirectory = async (temporary: string, root: string) => {\n\tconst hasCurrent = await exists(root);\n\tif (hasCurrent) await assertOwnedOutput(root);\n\tconst backup = `${root}.${crypto.randomUUID()}.previous`;\n\tif (hasCurrent) await rename(root, backup);\n\ttry {\n\t\tawait rename(temporary, root);\n\t} catch (error) {\n\t\tif (hasCurrent) await rename(backup, root);\n\t\tthrow error;\n\t}\n\tif (hasCurrent) await rm(backup, { force: true, recursive: true });\n};\n\nconst materializeHost = async (\n\troot: string,\n\thost: string,\n\tfiles: Array<[string, unknown]>\n) => {\n\tconst directory = resolve(root, host, '.well-known');\n\tawait mkdir(directory, { recursive: true });\n\n\treturn Promise.all(\n\t\tfiles.map(async ([name, document]) => {\n\t\t\tconst path = resolve(directory, name);\n\t\t\tawait writeAtomic(path, `${JSON.stringify(document, null, 2)}\\n`);\n\n\t\t\treturn path;\n\t\t})\n\t);\n};\n\nconst associationEndpoints = (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\tdocuments: AbsoluteMobileAssociationDocuments\n) =>\n\tconfig.deepLinkHosts.flatMap((host) => {\n\t\tconst endpoints: AssociationEndpoint[] = [];\n\t\tif (documents.android)\n\t\t\tendpoints.push({\n\t\t\t\tdocument: documents.android,\n\t\t\t\thost,\n\t\t\t\tpath: ANDROID_ASSOCIATION_PATH,\n\t\t\t\tplatform: 'Android'\n\t\t\t});\n\t\tif (documents.apple)\n\t\t\tendpoints.push({\n\t\t\t\tdocument: documents.apple,\n\t\t\t\thost,\n\t\t\t\tpath: APPLE_ASSOCIATION_PATH,\n\t\t\t\tplatform: 'Apple'\n\t\t\t});\n\n\t\treturn endpoints;\n\t});\n\nexport const materializeAbsoluteMobileAssociationFiles = async (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\toutputDirectory: string\n) => {\n\tconst root = resolve(outputDirectory);\n\tconst temporary = `${root}.${crypto.randomUUID()}.tmp`;\n\tconst documents = createAbsoluteMobileAssociationDocuments(config, {\n\t\trequireAll: true\n\t});\n\tconst files: Array<[string, unknown]> = [];\n\tif (documents.android) files.push(['assetlinks.json', documents.android]);\n\tif (documents.apple) {\n\t\tfiles.push(['apple-app-site-association', documents.apple]);\n\t}\n\tawait mkdir(temporary, { recursive: true });\n\ttry {\n\t\tconst temporaryPaths = (\n\t\t\tawait Promise.all(\n\t\t\t\tconfig.deepLinkHosts.map((host) =>\n\t\t\t\t\tmaterializeHost(temporary, host, files)\n\t\t\t\t)\n\t\t\t)\n\t\t).flat();\n\t\tawait writeAtomic(\n\t\t\tresolve(temporary, OWNERSHIP_FILE),\n\t\t\t`${JSON.stringify({ format: 1, hosts: config.deepLinkHosts }, null, 2)}\\n`\n\t\t);\n\t\tawait publishGeneratedDirectory(temporary, root);\n\t\tconst written = temporaryPaths.map((path) =>\n\t\t\tresolve(root, path.slice(temporary.length + 1))\n\t\t);\n\n\t\treturn { root, written };\n\t} catch (error) {\n\t\tawait rm(temporary, { force: true, recursive: true });\n\t\tthrow error;\n\t}\n};\n\nexport const verifyAbsoluteMobileAssociationFiles = async (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\trequest: AbsoluteAssociationRequest = globalThis.fetch\n) => {\n\tconst documents = createAbsoluteMobileAssociationDocuments(config, {\n\t\trequireAll: true\n\t});\n\tconst results = await Promise.all(\n\t\tassociationEndpoints(config, documents).map(async (endpoint) => {\n\t\t\tconst url = `https://${endpoint.host}${endpoint.path}`;\n\t\t\tconst response = await request(url, {\n\t\t\t\tredirect: 'manual',\n\t\t\t\tsignal: AbortSignal.timeout(VERIFY_TIMEOUT_MS)\n\t\t\t});\n\t\t\tif (response.status !== HTTP_OK) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`${endpoint.platform} association verification failed for ${url}: HTTP ${response.status}; redirects are not allowed.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst contentType = response.headers.get('content-type') ?? '';\n\t\t\tif (!contentType.toLowerCase().startsWith('application/json')) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`${endpoint.platform} association verification failed for ${url}: expected application/json.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tlet document: unknown;\n\t\t\ttry {\n\t\t\t\tdocument = await response.json();\n\t\t\t} catch {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`${endpoint.platform} association verification failed for ${url}: invalid JSON.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tJSON.stringify(document) !== JSON.stringify(endpoint.document)\n\t\t\t) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`${endpoint.platform} association verification failed for ${url}: the hosted identity does not match mobile config.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn { platform: endpoint.platform, url };\n\t\t})\n\t);\n\n\treturn { results };\n};\n",
20
- "import { resolve } from 'node:path';\nimport type { MobileConfig, MobilePlatform } from '../../types/build';\n\nexport type NormalizedAbsoluteMobileConfig = {\n\tappId: string;\n\tappName: string;\n\tandroidCertificateFingerprints: string[];\n\tappleAppIdPrefix?: string;\n\tbundleDirectory: string;\n\tdeepLinkHosts: string[];\n\tdeepLinkScheme?: string;\n\tengine: 'capacitor';\n\tentry: string;\n\tiosVersion?: string;\n\tnativeProjectDirectory: string;\n\tplatforms: MobilePlatform[];\n\tproductionOrigin: string;\n};\n\nconst APP_ID_PATTERN = /^[A-Za-z][\\w]*(?:\\.[A-Za-z][\\w]*)+$/;\nconst SCHEME_PATTERN = /^[a-z][a-z0-9+.-]*$/;\nconst APPLE_APP_ID_PREFIX_PATTERN = /^[A-Z0-9]{10}$/;\nconst CERTIFICATE_FINGERPRINT_PATTERN = /^[0-9A-F]{64}$/;\nconst HOSTNAME_PATTERN =\n\t/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(?:\\.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?))*$/;\n\nconst resolveProjectPath = (\n\tprojectRoot: string,\n\tvalue: string,\n\tfield: string\n) => {\n\tconst root = resolve(projectRoot);\n\tconst path = resolve(root, value);\n\tif (path !== root && !path.startsWith(`${root}/`)) {\n\t\tthrow new TypeError(`${field} must remain inside the project root.`);\n\t}\n\n\treturn path;\n};\n\nconst requireText = (value: string, field: string) => {\n\tconst normalized = value.trim();\n\tif (!normalized) throw new TypeError(`${field} must not be empty.`);\n\n\treturn normalized;\n};\n\nconst normalizeEntry = (entry: string | undefined) => {\n\tconst normalized = requireText(entry ?? '/', 'mobile.entry');\n\tif (!normalized.startsWith('/') || normalized.startsWith('//')) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.entry must be an absolute application path.'\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst normalizeProductionOrigin = (value: string) => {\n\tconst parsed = new URL(\n\t\trequireText(value, 'mobile.server.productionOrigin')\n\t);\n\tif (parsed.protocol !== 'https:') {\n\t\tthrow new TypeError(\n\t\t\t'mobile.server.productionOrigin must use HTTPS in production.'\n\t\t);\n\t}\n\tif (\n\t\tparsed.username ||\n\t\tparsed.password ||\n\t\tparsed.pathname !== '/' ||\n\t\tparsed.search ||\n\t\tparsed.hash\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.server.productionOrigin must be an origin without credentials, path, query, or hash.'\n\t\t);\n\t}\n\n\treturn parsed.origin;\n};\n\nconst normalizePlatforms = (\n\tplatforms: readonly MobilePlatform[] | undefined\n) => {\n\tconst normalized: MobilePlatform[] = [\n\t\t...new Set<MobilePlatform>(platforms ?? ['ios', 'android'])\n\t];\n\tif (normalized.length === 0) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.platforms must contain at least one platform.'\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst normalizeHosts = (\n\thosts: readonly string[] | undefined,\n\tproductionOrigin: string\n) => {\n\tconst normalizeHostname = (host: string) => {\n\t\tconst value = requireText(host, 'mobile.deepLinks.hosts').toLowerCase();\n\t\tif (!HOSTNAME_PATTERN.test(value)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'mobile.deepLinks.hosts entries must be valid hostnames without ports, wildcards, or paths.'\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t};\n\tconst normalized = new Set<string>([\n\t\tnormalizeHostname(new URL(productionOrigin).hostname)\n\t]);\n\tfor (const host of hosts ?? []) {\n\t\tnormalized.add(normalizeHostname(host));\n\t}\n\n\treturn [...normalized].sort();\n};\n\nconst normalizeAppleAppIdPrefix = (value: string | undefined) => {\n\tif (value === undefined) return undefined;\n\tconst normalized = requireText(\n\t\tvalue,\n\t\t'mobile.deepLinks.apple.appIdPrefix'\n\t).toUpperCase();\n\tif (!APPLE_APP_ID_PREFIX_PATTERN.test(normalized)) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.deepLinks.apple.appIdPrefix must contain ten letters or digits.'\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst normalizeIosVersion = (value: string | undefined) => {\n\tif (value === undefined) return undefined;\n\tconst normalized = requireText(value, 'mobile.ios.version');\n\tif (!/^\\d+(?:\\.\\d+){0,2}$/u.test(normalized)) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.ios.version must contain one to three dot-separated integer components, for example 1.4.0.'\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst normalizeCertificateFingerprints = (\n\tvalues: readonly string[] | undefined\n) =>\n\t[\n\t\t...new Set(\n\t\t\t(values ?? [])\n\t\t\t\t.map((value) =>\n\t\t\t\t\trequireText(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t'mobile.deepLinks.android.sha256CertificateFingerprints'\n\t\t\t\t\t)\n\t\t\t\t\t\t.replaceAll(':', '')\n\t\t\t\t\t\t.toUpperCase()\n\t\t\t\t)\n\t\t\t\t.map((value) => {\n\t\t\t\t\tif (!CERTIFICATE_FINGERPRINT_PATTERN.test(value)) {\n\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t'mobile.deepLinks.android.sha256CertificateFingerprints entries must be SHA-256 certificate fingerprints.'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value.match(/.{2}/g)?.join(':') ?? value;\n\t\t\t\t})\n\t\t)\n\t].sort();\n\nexport const normalizeAbsoluteMobileConfig = (\n\tconfig: MobileConfig,\n\tprojectRoot: string\n): NormalizedAbsoluteMobileConfig => {\n\tconst appId = requireText(config.appId, 'mobile.appId');\n\tif (!APP_ID_PATTERN.test(appId)) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.appId must use reverse-domain notation, for example com.example.app.'\n\t\t);\n\t}\n\tconst productionOrigin = normalizeProductionOrigin(\n\t\tconfig.server.productionOrigin\n\t);\n\tconst deepLinkScheme = config.deepLinks?.scheme?.trim().toLowerCase();\n\tif (deepLinkScheme && !SCHEME_PATTERN.test(deepLinkScheme)) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.deepLinks.scheme is not a valid URL scheme.'\n\t\t);\n\t}\n\n\treturn {\n\t\tandroidCertificateFingerprints: normalizeCertificateFingerprints(\n\t\t\tconfig.deepLinks?.android?.sha256CertificateFingerprints\n\t\t),\n\t\tappId,\n\t\tappleAppIdPrefix: normalizeAppleAppIdPrefix(\n\t\t\tconfig.deepLinks?.apple?.appIdPrefix\n\t\t),\n\t\tappName: requireText(config.appName, 'mobile.appName'),\n\t\tbundleDirectory: resolveProjectPath(\n\t\t\tprojectRoot,\n\t\t\tconfig.bundleDirectory ?? '.absolutejs/mobile/web',\n\t\t\t'mobile.bundleDirectory'\n\t\t),\n\t\tdeepLinkHosts: normalizeHosts(\n\t\t\tconfig.deepLinks?.hosts,\n\t\t\tproductionOrigin\n\t\t),\n\t\tdeepLinkScheme,\n\t\tengine: 'capacitor',\n\t\tentry: normalizeEntry(config.entry),\n\t\tiosVersion: normalizeIosVersion(config.ios?.version),\n\t\tnativeProjectDirectory: resolveProjectPath(\n\t\t\tprojectRoot,\n\t\t\tconfig.nativeProject?.directory ?? 'mobile',\n\t\t\t'mobile.nativeProject.directory'\n\t\t),\n\t\tplatforms: normalizePlatforms(config.platforms),\n\t\tproductionOrigin\n\t};\n};\n",
23
+ "import { resolve } from 'node:path';\nimport type { MobileConfig, MobilePlatform } from '../../types/build';\n\nexport type NormalizedAbsoluteMobileConfig = {\n\tappId: string;\n\tappName: string;\n\tandroidCertificateFingerprints: string[];\n\tappleAppIdPrefix?: string;\n\tbundleDirectory: string;\n\tdeepLinkHosts: string[];\n\tdeepLinkScheme?: string;\n\tengine: 'capacitor';\n\tentry: string;\n\tiosVersion?: string;\n\tnativeProjectDirectory: string;\n\tplatforms: MobilePlatform[];\n\tproductionOrigin: string;\n};\n\nconst APP_ID_PATTERN = /^[A-Za-z][\\w]*(?:\\.[A-Za-z][\\w]*)+$/;\nconst SCHEME_PATTERN = /^[a-z][a-z0-9+.-]*$/;\nconst APPLE_APP_ID_PREFIX_PATTERN = /^[A-Z0-9]{10}$/;\nconst CERTIFICATE_FINGERPRINT_PATTERN = /^[0-9A-F]{64}$/;\nconst HOSTNAME_PATTERN =\n\t/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(?:\\.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?))*$/;\n\nconst resolveProjectPath = (\n\tprojectRoot: string,\n\tvalue: string,\n\tfield: string\n) => {\n\tconst root = resolve(projectRoot);\n\tconst path = resolve(root, value);\n\tif (path !== root && !path.startsWith(`${root}/`)) {\n\t\tthrow new TypeError(`${field} must remain inside the project root.`);\n\t}\n\n\treturn path;\n};\n\nconst requireText = (value: string, field: string) => {\n\tconst normalized = value.trim();\n\tif (!normalized) throw new TypeError(`${field} must not be empty.`);\n\n\treturn normalized;\n};\n\nconst normalizeEntry = (entry: string | undefined) => {\n\tconst normalized = requireText(entry ?? '/', 'mobile.entry');\n\tif (!normalized.startsWith('/') || normalized.startsWith('//')) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.entry must be an absolute application path.'\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst normalizeProductionOrigin = (value: string) => {\n\tconst parsed = new URL(\n\t\trequireText(value, 'mobile.server.productionOrigin')\n\t);\n\tconst isLoopbackHttp =\n\t\tparsed.protocol === 'http:' &&\n\t\t(parsed.hostname === 'localhost' ||\n\t\t\tparsed.hostname === '127.0.0.1' ||\n\t\t\tparsed.hostname === '[::1]');\n\tif (parsed.protocol !== 'https:' && !isLoopbackHttp) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.server.productionOrigin must use HTTPS, except for a loopback development origin.'\n\t\t);\n\t}\n\tif (\n\t\tparsed.username ||\n\t\tparsed.password ||\n\t\tparsed.pathname !== '/' ||\n\t\tparsed.search ||\n\t\tparsed.hash\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.server.productionOrigin must be an origin without credentials, path, query, or hash.'\n\t\t);\n\t}\n\n\treturn parsed.origin;\n};\n\nconst normalizePlatforms = (\n\tplatforms: readonly MobilePlatform[] | undefined\n) => {\n\tconst normalized: MobilePlatform[] = [\n\t\t...new Set<MobilePlatform>(platforms ?? ['ios', 'android'])\n\t];\n\tif (normalized.length === 0) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.platforms must contain at least one platform.'\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst normalizeHosts = (\n\thosts: readonly string[] | undefined,\n\tproductionOrigin: string\n) => {\n\tconst normalizeHostname = (host: string) => {\n\t\tconst value = requireText(host, 'mobile.deepLinks.hosts').toLowerCase();\n\t\tif (!HOSTNAME_PATTERN.test(value)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'mobile.deepLinks.hosts entries must be valid hostnames without ports, wildcards, or paths.'\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t};\n\tconst productionHostname = new URL(productionOrigin).hostname;\n\t// IPv6 loopback is valid for a local backend preview but cannot be an\n\t// Android App Link or Apple Universal Link hostname.\n\tconst normalized = new Set<string>(\n\t\tproductionHostname === '[::1]'\n\t\t\t? []\n\t\t\t: [normalizeHostname(productionHostname)]\n\t);\n\tfor (const host of hosts ?? []) {\n\t\tnormalized.add(normalizeHostname(host));\n\t}\n\n\treturn [...normalized].sort();\n};\n\nconst normalizeAppleAppIdPrefix = (value: string | undefined) => {\n\tif (value === undefined) return undefined;\n\tconst normalized = requireText(\n\t\tvalue,\n\t\t'mobile.deepLinks.apple.appIdPrefix'\n\t).toUpperCase();\n\tif (!APPLE_APP_ID_PREFIX_PATTERN.test(normalized)) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.deepLinks.apple.appIdPrefix must contain ten letters or digits.'\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst normalizeIosVersion = (value: string | undefined) => {\n\tif (value === undefined) return undefined;\n\tconst normalized = requireText(value, 'mobile.ios.version');\n\tif (!/^\\d+(?:\\.\\d+){0,2}$/u.test(normalized)) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.ios.version must contain one to three dot-separated integer components, for example 1.4.0.'\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst normalizeCertificateFingerprints = (\n\tvalues: readonly string[] | undefined\n) =>\n\t[\n\t\t...new Set(\n\t\t\t(values ?? [])\n\t\t\t\t.map((value) =>\n\t\t\t\t\trequireText(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t'mobile.deepLinks.android.sha256CertificateFingerprints'\n\t\t\t\t\t)\n\t\t\t\t\t\t.replaceAll(':', '')\n\t\t\t\t\t\t.toUpperCase()\n\t\t\t\t)\n\t\t\t\t.map((value) => {\n\t\t\t\t\tif (!CERTIFICATE_FINGERPRINT_PATTERN.test(value)) {\n\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t'mobile.deepLinks.android.sha256CertificateFingerprints entries must be SHA-256 certificate fingerprints.'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value.match(/.{2}/g)?.join(':') ?? value;\n\t\t\t\t})\n\t\t)\n\t].sort();\n\nexport const normalizeAbsoluteMobileConfig = (\n\tconfig: MobileConfig,\n\tprojectRoot: string\n): NormalizedAbsoluteMobileConfig => {\n\tconst appId = requireText(config.appId, 'mobile.appId');\n\tif (!APP_ID_PATTERN.test(appId)) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.appId must use reverse-domain notation, for example com.example.app.'\n\t\t);\n\t}\n\tconst productionOrigin = normalizeProductionOrigin(\n\t\tconfig.server.productionOrigin\n\t);\n\tconst deepLinkScheme = (config.deepLinks?.scheme ?? appId)\n\t\t.trim()\n\t\t.toLowerCase();\n\tif (deepLinkScheme && !SCHEME_PATTERN.test(deepLinkScheme)) {\n\t\tthrow new TypeError(\n\t\t\t'mobile.deepLinks.scheme is not a valid URL scheme.'\n\t\t);\n\t}\n\n\treturn {\n\t\tandroidCertificateFingerprints: normalizeCertificateFingerprints(\n\t\t\tconfig.deepLinks?.android?.sha256CertificateFingerprints\n\t\t),\n\t\tappId,\n\t\tappleAppIdPrefix: normalizeAppleAppIdPrefix(\n\t\t\tconfig.deepLinks?.apple?.appIdPrefix\n\t\t),\n\t\tappName: requireText(config.appName, 'mobile.appName'),\n\t\tbundleDirectory: resolveProjectPath(\n\t\t\tprojectRoot,\n\t\t\tconfig.bundleDirectory ?? '.absolutejs/mobile/web',\n\t\t\t'mobile.bundleDirectory'\n\t\t),\n\t\tdeepLinkHosts: normalizeHosts(\n\t\t\tconfig.deepLinks?.hosts,\n\t\t\tproductionOrigin\n\t\t),\n\t\tdeepLinkScheme,\n\t\tengine: 'capacitor',\n\t\tentry: normalizeEntry(config.entry),\n\t\tiosVersion: normalizeIosVersion(config.ios?.version),\n\t\tnativeProjectDirectory: resolveProjectPath(\n\t\t\tprojectRoot,\n\t\t\tconfig.nativeProject?.directory ?? 'mobile',\n\t\t\t'mobile.nativeProject.directory'\n\t\t),\n\t\tplatforms: normalizePlatforms(config.platforms),\n\t\tproductionOrigin\n\t};\n};\n",
21
24
  "import type { AbsoluteMobilePageFramework } from './pageProtocol';\n\nexport const ABSOLUTE_MOBILE_ROUTE_DETAIL = 'x-absolute-mobile' as const;\n\nexport type AbsoluteMobileBuildPageMetadata = {\n\tbundleKey: string;\n\tcontract: string;\n\tframework: AbsoluteMobilePageFramework;\n\tpageId: string;\n\tpropsSchemaHash: string;\n};\n\nconst frameworks = new Set<string>([\n\t'angular',\n\t'ember',\n\t'html',\n\t'htmx',\n\t'react',\n\t'svelte',\n\t'vue'\n]);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst isPageFramework = (\n\tvalue: unknown\n): value is AbsoluteMobilePageFramework =>\n\ttypeof value === 'string' && frameworks.has(value);\n\nexport const parseAbsoluteMobileBuildPageMetadata = (\n\tvalue: unknown\n): AbsoluteMobileBuildPageMetadata | undefined => {\n\tif (!isRecord(value)) return undefined;\n\tif (\n\t\ttypeof value.bundleKey !== 'string' ||\n\t\ttypeof value.contract !== 'string' ||\n\t\t!isPageFramework(value.framework) ||\n\t\ttypeof value.pageId !== 'string' ||\n\t\ttypeof value.propsSchemaHash !== 'string'\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tbundleKey: value.bundleKey,\n\t\tcontract: value.contract,\n\t\tframework: value.framework,\n\t\tpageId: value.pageId,\n\t\tpropsSchemaHash: value.propsSchemaHash\n\t};\n};\n",
22
- "import { readFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { Elysia } from 'elysia';\nimport type { MobileConfig } from '../../types/build';\nimport { buildAbsoluteMobileCompatibilityRelease } from './buildRelease';\nimport { materializeAbsoluteCapacitorWebBundle } from './capacitorBundle';\nimport { normalizeAbsoluteMobileConfig } from './config';\nimport {\n\tmaterializeAbsoluteMobileCompatibilityBundle,\n\treadAbsoluteMobileMaterializedReleases\n} from './materializedBundle';\nimport { ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION } from './pageProtocol';\nimport { retainAbsoluteMobileCompatibilityArtifacts } from './releaseArtifact';\n\nexport type FinalizeAbsoluteMobileBuildOptions = {\n\tbuildDirectory: string;\n\tmobile: MobileConfig;\n\tproducerPath: string;\n\tprojectRoot: string;\n};\n\ntype ServerModule = {\n\tapp?: unknown;\n\tdefault?: unknown;\n\tserver?: unknown;\n};\n\ntype StringRecord = Record<string, string>;\n\nconst isElysiaApp = (\n\tvalue: unknown\n): value is Pick<Elysia, 'compile' | 'modules' | 'routes'> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\ttypeof Reflect.get(value, 'compile') === 'function' &&\n\tArray.isArray(Reflect.get(value, 'routes'));\n\nconst isStringRecord = (value: unknown): value is StringRecord =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t!Array.isArray(value) &&\n\tObject.values(value).every((entry) => typeof entry === 'string');\n\nconst serverExportName = (loaded: ServerModule, app: unknown) => {\n\tif (loaded.server === app) return 'server';\n\tif (loaded.app === app) return 'app';\n\n\treturn 'default';\n};\n\nconst restoreBuildDirectory = (previous: string | undefined) => {\n\tif (previous !== undefined) {\n\t\tprocess.env.ABSOLUTE_BUILD_DIR = previous;\n\n\t\treturn;\n\t}\n\tdelete process.env.ABSOLUTE_BUILD_DIR;\n};\n\nconst requireRelease = <T>(releases: Map<string, T>, releaseId: string) => {\n\tconst release = releases.get(releaseId);\n\tif (!release) {\n\t\tthrow new TypeError(`Missing retained mobile release ${releaseId}.`);\n\t}\n\n\treturn release;\n};\n\nconst loadServerApp = async (producerPath: string) => {\n\tconst loaded: ServerModule = await import(\n\t\t`${pathToFileURL(producerPath).href}?absolute-mobile-capture=${crypto.randomUUID()}`\n\t);\n\tconst candidates = [loaded.server, loaded.app, loaded.default];\n\tconst app = candidates.find(isElysiaApp);\n\tif (!app) {\n\t\tthrow new TypeError(\n\t\t\t'Mobile builds require the server entry to export its Elysia app as server, app, or default.'\n\t\t);\n\t}\n\tconst exportName = serverExportName(loaded, app);\n\n\treturn { app, exportName };\n};\n\nexport const finalizeAbsoluteMobileCompatibilityBuild = async (\n\toptions: FinalizeAbsoluteMobileBuildOptions\n) => {\n\tconst buildDirectory = resolve(options.buildDirectory);\n\tconst mobile = normalizeAbsoluteMobileConfig(\n\t\toptions.mobile,\n\t\toptions.projectRoot\n\t);\n\tconst root = join(buildDirectory, '.absolutejs', 'mobile-compatibility');\n\tconst [manifestSource, previous] = await Promise.all([\n\t\treadFile(join(buildDirectory, 'manifest.json'), 'utf8'),\n\t\treadAbsoluteMobileMaterializedReleases(root)\n\t]);\n\tconst manifest: unknown = JSON.parse(manifestSource);\n\tif (!isStringRecord(manifest)) {\n\t\tthrow new TypeError(\n\t\t\t'Invalid AbsoluteJS build manifest for mobile capture.'\n\t\t);\n\t}\n\tconst previousBuildDirectory = process.env.ABSOLUTE_BUILD_DIR;\n\tprocess.env.ABSOLUTE_BUILD_DIR = buildDirectory;\n\tlet loaded: Awaited<ReturnType<typeof loadServerApp>>;\n\ttry {\n\t\tloaded = await loadServerApp(resolve(options.producerPath));\n\t} finally {\n\t\trestoreBuildDirectory(previousBuildDirectory);\n\t}\n\tconst current = await buildAbsoluteMobileCompatibilityRelease({\n\t\tapp: loaded.app,\n\t\tappId: mobile.appId,\n\t\tbuildDirectory,\n\t\tmanifest,\n\t\tpreviousArtifacts: previous.map(({ artifact }) => artifact),\n\t\tproducerExport: loaded.exportName,\n\t\tproducerPath: resolve(options.producerPath),\n\t\truntime: String(ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION)\n\t});\n\tconst releasesById = new Map(\n\t\t[current, ...previous].map((release) => [\n\t\t\trelease.artifact.releaseId,\n\t\t\trelease\n\t\t])\n\t);\n\tconst retained = retainAbsoluteMobileCompatibilityArtifacts(\n\t\t[...releasesById.values()].map(({ artifact }) => artifact)\n\t);\n\tawait materializeAbsoluteMobileCompatibilityBundle({\n\t\tcurrentReleaseId: current.artifact.releaseId,\n\t\treleases: retained.map((artifact) =>\n\t\t\trequireRelease(releasesById, artifact.releaseId)\n\t\t),\n\t\troot\n\t});\n\tawait materializeAbsoluteCapacitorWebBundle({\n\t\tartifact: current.artifact,\n\t\tbuildDirectory,\n\t\tconfig: mobile\n\t});\n\n\treturn current.artifact;\n};\n",
23
- "import { createHash } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { join, relative, resolve } from 'node:path';\nimport type { Elysia } from 'elysia';\nimport {\n\tABSOLUTE_MOBILE_ROUTE_DETAIL,\n\tparseAbsoluteMobileBuildPageMetadata,\n\ttype AbsoluteMobileBuildPageMetadata\n} from './buildMetadata';\nimport {\n\tcreateAbsoluteMobileCompatibilityArtifact,\n\ttype AbsoluteMobileCompatibilityArtifact,\n\ttype AbsoluteMobileCompatibilityPage,\n\ttype AbsoluteMobileCompatibilityRoute\n} from './releaseArtifact';\nimport type { AbsoluteMobileStoredCompatibilityRelease } from './artifactStore';\n\nexport type AbsoluteMobileBuildReleaseOptions = {\n\tapp: Pick<Elysia, 'compile' | 'modules' | 'routes'>;\n\tappId: string;\n\tbuildDirectory: string;\n\tmanifest: Record<string, string>;\n\tpreviousArtifacts?: readonly AbsoluteMobileCompatibilityArtifact[];\n\tproducerExport?: string;\n\tproducerModule?: string;\n\tproducerPath: string;\n\truntime: string;\n};\n\nconst sha256 = (bytes: Uint8Array) =>\n\tcreateHash('sha256').update(bytes).digest('hex');\n\nconst readPageMetadata = (route: {\n\thooks?: { detail?: Record<string, unknown> };\n}) =>\n\tparseAbsoluteMobileBuildPageMetadata(\n\t\troute.hooks?.detail?.[ABSOLUTE_MOBILE_ROUTE_DETAIL]\n\t);\n\nconst resolveAssetPath = (buildDirectory: string, assetPath: string) => {\n\tconst resolvedBuildDirectory = resolve(buildDirectory);\n\tconst resolvedAsset = resolve(assetPath);\n\tif (resolvedAsset.startsWith(`${resolvedBuildDirectory}/`)) {\n\t\treturn resolvedAsset;\n\t}\n\n\treturn join(buildDirectory, assetPath.replace(/^\\/+/, ''));\n};\n\nconst pageFor = async (\n\tmetadata: AbsoluteMobileBuildPageMetadata,\n\tmanifest: Record<string, string>,\n\tbuildDirectory: string\n) => {\n\tconst assetPath = manifest[metadata.bundleKey];\n\tif (!assetPath) {\n\t\tthrow new TypeError(\n\t\t\t`Mobile page ${metadata.pageId} references missing manifest asset ${metadata.bundleKey}.`\n\t\t);\n\t}\n\tconst resolvedAssetPath = resolveAssetPath(buildDirectory, assetPath);\n\tconst bytes = await readFile(resolvedAssetPath);\n\tconst bundlePath = `/${relative(resolve(buildDirectory), resolvedAssetPath).replaceAll('\\\\', '/')}`;\n\n\treturn {\n\t\tbundleHash: sha256(bytes),\n\t\tbundlePath,\n\t\tcontract: metadata.contract,\n\t\tframework: metadata.framework,\n\t\tpageId: metadata.pageId,\n\t\tpropsSchemaHash: metadata.propsSchemaHash\n\t} satisfies AbsoluteMobileCompatibilityPage;\n};\n\nexport const buildAbsoluteMobileCompatibilityRelease = async (\n\toptions: AbsoluteMobileBuildReleaseOptions\n): Promise<AbsoluteMobileStoredCompatibilityRelease> => {\n\tconst [captured, producerBytes] = await Promise.all([\n\t\tcaptureAbsoluteMobileRouteGraph(options.app),\n\t\treadFile(options.producerPath)\n\t]);\n\tif (captured.length === 0) {\n\t\tthrow new TypeError(\n\t\t\t'No instrumented AbsoluteJS mobile page routes were found in the finalized Elysia route graph.'\n\t\t);\n\t}\n\tconst metadataByPage = new Map<string, AbsoluteMobileBuildPageMetadata>();\n\tfor (const { metadata } of captured) {\n\t\tconst prior = metadataByPage.get(metadata.pageId);\n\t\tif (prior && JSON.stringify(prior) !== JSON.stringify(metadata)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Mobile page ${metadata.pageId} has inconsistent generated contracts.`\n\t\t\t);\n\t\t}\n\t\tmetadataByPage.set(metadata.pageId, metadata);\n\t}\n\tconst pages = await Promise.all(\n\t\t[...metadataByPage.values()].map((metadata) =>\n\t\t\tpageFor(metadata, options.manifest, options.buildDirectory)\n\t\t)\n\t);\n\tconst producerHash = sha256(producerBytes);\n\tconst appBuild = `ambuild_${sha256(\n\t\tnew TextEncoder().encode(\n\t\t\tJSON.stringify({\n\t\t\t\tpages: pages.map(\n\t\t\t\t\t({ bundleHash, bundlePath, contract, pageId }) => ({\n\t\t\t\t\t\tbundleHash,\n\t\t\t\t\t\tbundlePath,\n\t\t\t\t\t\tcontract,\n\t\t\t\t\t\tpageId\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t\tproducerHash,\n\t\t\t\truntime: options.runtime\n\t\t\t})\n\t\t)\n\t)}`;\n\tconst priorAppIds = new Set(\n\t\t(options.previousArtifacts ?? []).map(({ appId }) => appId)\n\t);\n\tif (\n\t\tpriorAppIds.size > 1 ||\n\t\t(priorAppIds.size === 1 && !priorAppIds.has(options.appId))\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Previous mobile compatibility artifacts belong to another app.'\n\t\t);\n\t}\n\tconst unchanged = options.previousArtifacts?.find(\n\t\t(artifact) =>\n\t\t\tartifact.appBuild === appBuild &&\n\t\t\tartifact.runtime === options.runtime\n\t);\n\tconst generation =\n\t\tunchanged?.generation ??\n\t\tMath.max(\n\t\t\t0,\n\t\t\t...(options.previousArtifacts ?? []).map(\n\t\t\t\t(artifact) => artifact.generation\n\t\t\t)\n\t\t) + 1;\n\tconst artifact = createAbsoluteMobileCompatibilityArtifact({\n\t\tappBuild,\n\t\tappId: options.appId,\n\t\tgeneration,\n\t\tpages,\n\t\tproducer: {\n\t\t\tbundleHash: producerHash,\n\t\t\tbytes: producerBytes.byteLength,\n\t\t\texportName: options.producerExport ?? 'server',\n\t\t\tmodule: options.producerModule ?? 'producer.js'\n\t\t},\n\t\troutes: captured.map(({ route }) => route),\n\t\truntime: options.runtime\n\t});\n\n\treturn { artifact, producer: new Blob([producerBytes]) };\n};\nexport const captureAbsoluteMobileRouteGraph = async (\n\tapp: Pick<Elysia, 'compile' | 'modules' | 'routes'>\n) => {\n\tif (app.modules) await app.modules;\n\tapp.compile();\n\tconst captured = app.routes.flatMap((route) => {\n\t\tconst metadata = readPageMetadata(route);\n\t\tif (!metadata || (route.method !== 'GET' && route.method !== 'HEAD')) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tmetadata,\n\t\t\t\troute: {\n\t\t\t\t\tmethod: route.method === 'GET' ? 'GET' : 'HEAD',\n\t\t\t\t\tpageId: metadata.pageId,\n\t\t\t\t\tpattern: route.path\n\t\t\t\t} satisfies AbsoluteMobileCompatibilityRoute\n\t\t\t}\n\t\t];\n\t});\n\tconst identities = new Map<string, string>();\n\tfor (const { metadata, route } of captured) {\n\t\tconst prior = identities.get(`${route.method}:${route.pattern}`);\n\t\tif (prior && prior !== metadata.pageId) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Mobile route ${route.method} ${route.pattern} resolves to multiple pages.`\n\t\t\t);\n\t\t}\n\t\tidentities.set(`${route.method}:${route.pattern}`, metadata.pageId);\n\t}\n\n\treturn captured;\n};\n",
24
- "import {\n\tcopyFile,\n\tmkdir,\n\tmkdtemp,\n\treadFile,\n\trename,\n\trm,\n\twriteFile\n} from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { basename, dirname, extname, join, resolve } from 'node:path';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\nimport type {\n\tAbsoluteMobileCompatibilityArtifact,\n\tAbsoluteMobileCompatibilityPage\n} from './releaseArtifact';\nimport { resolveAbsoluteMobileRoute } from './routeMatcher';\nimport {\n\tABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,\n\ttype AbsoluteMobileClientManifest\n} from './transport';\n\nexport type AbsoluteCapacitorBundleOptions = {\n\tartifact: AbsoluteMobileCompatibilityArtifact;\n\tbuildDirectory: string;\n\tconfig: NormalizedAbsoluteMobileConfig;\n};\n\nconst MANIFEST_FILE = 'absolute-mobile-manifest.json';\nconst BOOTSTRAP_FILE = 'absolute-mobile-bootstrap.js';\nconst INDEX_FILE = 'index.html';\nconst CLIENT_IMPORT_PATTERN =\n\t/(?:\\bfrom\\s*|\\bimport\\s*\\(\\s*|\\bimport\\s*)[\"'](\\/[^\"']+)[\"']/gu;\n\nconst errorHasCode = (error: unknown, code: string) =>\n\ttypeof error === 'object' &&\n\terror !== null &&\n\tReflect.get(error, 'code') === code;\n\nconst shellBootstrapModule = () => {\n\tconst candidate = ['js', 'ts']\n\t\t.map((extension) =>\n\t\t\tjoin(import.meta.dir, `shellBootstrap.${extension}`)\n\t\t)\n\t\t.find(existsSync);\n\tif (candidate) return candidate;\n\n\tthrow new TypeError('AbsoluteJS mobile shell bootstrap module is missing.');\n};\n\nconst escapeHtml = (value: string) =>\n\tvalue\n\t\t.replaceAll('&', '&amp;')\n\t\t.replaceAll('<', '&lt;')\n\t\t.replaceAll('>', '&gt;')\n\t\t.replaceAll('\"', '&quot;');\n\nconst indexHtml = (appName: string) => `<!doctype html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,viewport-fit=cover\">\n\t\t<meta name=\"color-scheme\" content=\"light dark\">\n\t\t<title>${escapeHtml(appName)}</title>\n\t</head>\n\t<body>\n\t\t<main id=\"absolute-mobile-status\" role=\"status\">Starting…</main>\n\t\t<script type=\"module\" src=\"./${BOOTSTRAP_FILE}\"></script>\n\t</body>\n</html>\n`;\n\nconst sourceAssetPath = (buildDirectory: string, bundlePath: string) => {\n\tconst root = resolve(buildDirectory);\n\tconst asset = resolve(root, bundlePath.replace(/^\\/+/, ''));\n\tif (!asset.startsWith(`${root}/`)) {\n\t\tthrow new TypeError('Mobile page bundle escaped the build directory.');\n\t}\n\n\treturn asset;\n};\n\nconst buildShellBootstrap = async (staging: string) => {\n\tconst modulePath = shellBootstrapModule();\n\tconst entryPath = join(staging, '.absolute-mobile-entry.ts');\n\tawait writeFile(\n\t\tentryPath,\n\t\t`import { startAbsoluteMobileShell } from ${JSON.stringify(modulePath)};\\nvoid startAbsoluteMobileShell();\\n`\n\t);\n\tconst build = await Bun.build({\n\t\tentrypoints: [entryPath],\n\t\tminify: true,\n\t\toutdir: staging,\n\t\ttarget: 'browser'\n\t});\n\tif (!build.success || build.outputs.length !== 1) {\n\t\tthrow new AggregateError(\n\t\t\tbuild.logs,\n\t\t\t'Failed to build the AbsoluteJS Capacitor shell.'\n\t\t);\n\t}\n\tawait rename(build.outputs[0]?.path ?? '', join(staging, BOOTSTRAP_FILE));\n\tawait rm(entryPath, { force: true });\n};\n\nconst removePreviousBundle = async (backup: string, moved: boolean) => {\n\tif (!moved) return;\n\tawait rm(backup, { force: true, recursive: true });\n};\n\nconst restorePreviousBundle = async (\n\tbackup: string,\n\tdestination: string,\n\tmoved: boolean\n) => {\n\tif (!moved) return;\n\tawait rename(backup, destination);\n};\n\nconst installBundle = async (staging: string, destination: string) => {\n\tconst backup = `${destination}.previous-${crypto.randomUUID()}`;\n\tlet movedPrevious = false;\n\ttry {\n\t\tawait rename(destination, backup);\n\t\tmovedPrevious = true;\n\t} catch (error) {\n\t\tif (!errorHasCode(error, 'ENOENT')) throw error;\n\t}\n\ttry {\n\t\tawait rename(staging, destination);\n\t\tawait removePreviousBundle(backup, movedPrevious);\n\t} catch (error) {\n\t\tawait restorePreviousBundle(backup, destination, movedPrevious);\n\n\t\tthrow error;\n\t}\n};\n\nconst copyClientPage = async (\n\tpage: AbsoluteMobileCompatibilityPage,\n\tbuildDirectory: string,\n\tstaging: string,\n\tcopiedDependencies: Set<string>\n) => {\n\tif (page.framework !== 'react') {\n\t\tthrow new TypeError(\n\t\t\t`Capacitor spike currently supports React pages; ${page.pageId} is ${page.framework}.`\n\t\t);\n\t}\n\tconst extension = extname(page.bundlePath) || '.js';\n\tconst localBundlePath = `./pages/${page.bundleHash}${extension}`;\n\tconst source = sourceAssetPath(buildDirectory, page.bundlePath);\n\tawait copyFile(source, join(staging, localBundlePath));\n\tawait copyAbsoluteClientDependencies(\n\t\tsource,\n\t\tbuildDirectory,\n\t\tstaging,\n\t\tcopiedDependencies\n\t);\n\n\treturn { ...page, localBundlePath };\n};\n\nconst absoluteClientImports = async (sourcePath: string) => {\n\tconst source = await readFile(sourcePath, 'utf8');\n\n\treturn [...source.matchAll(CLIENT_IMPORT_PATTERN)].flatMap((match) => {\n\t\tconst [specifier] = match.slice(1);\n\n\t\treturn specifier ? [specifier.split(/[?#]/u, 1)[0] ?? specifier] : [];\n\t});\n};\n\nconst copyAbsoluteClientDependency = async (\n\tspecifier: string,\n\tbuildDirectory: string,\n\tstaging: string,\n\tcopied: Set<string>\n) => {\n\tif (copied.has(specifier)) return;\n\tcopied.add(specifier);\n\tconst source = sourceAssetPath(buildDirectory, specifier);\n\tconst destination = join(staging, specifier.replace(/^\\/+/, ''));\n\tawait mkdir(dirname(destination), { recursive: true });\n\tawait copyFile(source, destination);\n\tawait copyAbsoluteClientDependencies(\n\t\tsource,\n\t\tbuildDirectory,\n\t\tstaging,\n\t\tcopied\n\t);\n};\n\nconst copyAbsoluteClientDependencies = async (\n\tsourcePath: string,\n\tbuildDirectory: string,\n\tstaging: string,\n\tcopied: Set<string>\n) => {\n\tconst dependencies = await absoluteClientImports(sourcePath);\n\tawait Promise.all(\n\t\tdependencies.map((specifier) =>\n\t\t\tcopyAbsoluteClientDependency(\n\t\t\t\tspecifier,\n\t\t\t\tbuildDirectory,\n\t\t\t\tstaging,\n\t\t\t\tcopied\n\t\t\t)\n\t\t)\n\t);\n};\n\nexport const materializeAbsoluteCapacitorWebBundle = async (\n\toptions: AbsoluteCapacitorBundleOptions\n) => {\n\tif (\n\t\t!resolveAbsoluteMobileRoute(\n\t\t\toptions.artifact.routes,\n\t\t\tnew URL(options.config.entry, 'https://absolute.invalid').pathname\n\t\t)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`mobile.entry ${options.config.entry} is not a captured mobile page route.`\n\t\t);\n\t}\n\tconst destination = options.config.bundleDirectory;\n\tawait mkdir(dirname(destination), { recursive: true });\n\tconst staging = await mkdtemp(\n\t\tjoin(dirname(destination), `.${basename(destination)}.stage-`)\n\t);\n\ttry {\n\t\tconst pageDirectory = join(staging, 'pages');\n\t\tawait mkdir(pageDirectory, { recursive: true });\n\t\tconst copiedDependencies = new Set<string>();\n\t\tconst pages = await Promise.all(\n\t\t\toptions.artifact.pages.map((page) =>\n\t\t\t\tcopyClientPage(\n\t\t\t\t\tpage,\n\t\t\t\t\toptions.buildDirectory,\n\t\t\t\t\tstaging,\n\t\t\t\t\tcopiedDependencies\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t\tconst manifest = {\n\t\t\tappBuild: options.artifact.appBuild,\n\t\t\tappId: options.config.appId,\n\t\t\tappName: options.config.appName,\n\t\t\tdeepLinkHosts: options.config.deepLinkHosts,\n\t\t\tdeepLinkScheme: options.config.deepLinkScheme,\n\t\t\tentry: options.config.entry,\n\t\t\tformat: ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,\n\t\t\tpages,\n\t\t\tproductionOrigin: options.config.productionOrigin,\n\t\t\troutes: options.artifact.routes,\n\t\t\truntime: options.artifact.runtime\n\t\t} satisfies AbsoluteMobileClientManifest;\n\t\tawait Promise.all([\n\t\t\twriteFile(\n\t\t\t\tjoin(staging, MANIFEST_FILE),\n\t\t\t\t`${JSON.stringify(manifest, null, '\\t')}\\n`\n\t\t\t),\n\t\t\twriteFile(\n\t\t\t\tjoin(staging, INDEX_FILE),\n\t\t\t\tindexHtml(options.config.appName)\n\t\t\t),\n\t\t\tbuildShellBootstrap(staging)\n\t\t]);\n\t\tawait installBundle(staging, destination);\n\n\t\treturn manifest;\n\t} catch (error) {\n\t\tawait rm(staging, { force: true, recursive: true });\n\n\t\tthrow error;\n\t}\n};\n",
25
+ "import { readFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { Elysia } from 'elysia';\nimport type { MobileConfig } from '../../types/build';\nimport { buildAbsoluteMobileCompatibilityRelease } from './buildRelease';\nimport { materializeAbsoluteCapacitorWebBundle } from './capacitorBundle';\nimport { normalizeAbsoluteMobileConfig } from './config';\nimport {\n\tmaterializeAbsoluteMobileCompatibilityBundle,\n\treadAbsoluteMobileMaterializedReleases\n} from './materializedBundle';\nimport { ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION } from './pageProtocol';\nimport { retainAbsoluteMobileCompatibilityArtifacts } from './releaseArtifact';\nimport {\n\tprojectUsesAbsoluteSync,\n\tresolveAbsoluteMobileAuthManifest\n} from './nativeAuth';\n\nexport type FinalizeAbsoluteMobileBuildOptions = {\n\tbuildDirectory: string;\n\tconfigPath?: string;\n\tmobile: MobileConfig;\n\tproducerPath: string;\n\tprojectRoot: string;\n};\n\ntype ServerModule = {\n\tapp?: unknown;\n\tdefault?: unknown;\n\tserver?: unknown;\n};\n\ntype StringRecord = Record<string, string>;\n\nconst isElysiaApp = (\n\tvalue: unknown\n): value is Pick<Elysia, 'compile' | 'modules' | 'routes'> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\ttypeof Reflect.get(value, 'compile') === 'function' &&\n\tArray.isArray(Reflect.get(value, 'routes'));\n\nconst isStringRecord = (value: unknown): value is StringRecord =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t!Array.isArray(value) &&\n\tObject.values(value).every((entry) => typeof entry === 'string');\n\nconst serverExportName = (loaded: ServerModule, app: unknown) => {\n\tif (loaded.server === app) return 'server';\n\tif (loaded.app === app) return 'app';\n\n\treturn 'default';\n};\n\nconst restoreEnvironmentVariable = (\n\tname:\n\t\t| 'ABSOLUTE_BUILD_DIR'\n\t\t| 'ABSOLUTE_COMPILED_RUNTIME'\n\t\t| 'ABSOLUTE_CONFIG',\n\tprevious: string | undefined\n) => {\n\tif (previous !== undefined) process.env[name] = previous;\n\telse delete process.env[name];\n};\n\nconst requireRelease = <T>(releases: Map<string, T>, releaseId: string) => {\n\tconst release = releases.get(releaseId);\n\tif (!release) {\n\t\tthrow new TypeError(`Missing retained mobile release ${releaseId}.`);\n\t}\n\n\treturn release;\n};\n\nconst loadServerApp = async (producerPath: string) => {\n\tconst loaded: ServerModule = await import(\n\t\t`${pathToFileURL(producerPath).href}?absolute-mobile-capture=${crypto.randomUUID()}`\n\t);\n\tconst candidates = [loaded.server, loaded.app, loaded.default];\n\tconst app = candidates.find(isElysiaApp);\n\tif (!app) {\n\t\tthrow new TypeError(\n\t\t\t'Mobile builds require the server entry to export its Elysia app as server, app, or default.'\n\t\t);\n\t}\n\tconst exportName = serverExportName(loaded, app);\n\n\treturn { app, exportName };\n};\n\nexport const finalizeAbsoluteMobileCompatibilityBuild = async (\n\toptions: FinalizeAbsoluteMobileBuildOptions\n) => {\n\tconst buildDirectory = resolve(options.buildDirectory);\n\tconst mobile = normalizeAbsoluteMobileConfig(\n\t\toptions.mobile,\n\t\toptions.projectRoot\n\t);\n\tconst root = join(buildDirectory, '.absolutejs', 'mobile-compatibility');\n\tconst [manifestSource, previous] = await Promise.all([\n\t\treadFile(join(buildDirectory, 'manifest.json'), 'utf8'),\n\t\treadAbsoluteMobileMaterializedReleases(root)\n\t]);\n\tconst manifest: unknown = JSON.parse(manifestSource);\n\tif (!isStringRecord(manifest)) {\n\t\tthrow new TypeError(\n\t\t\t'Invalid AbsoluteJS build manifest for mobile capture.'\n\t\t);\n\t}\n\tconst previousBuildDirectory = process.env.ABSOLUTE_BUILD_DIR;\n\tconst previousCompiledRuntime = process.env.ABSOLUTE_COMPILED_RUNTIME;\n\tconst previousConfigPath = process.env.ABSOLUTE_CONFIG;\n\tprocess.env.ABSOLUTE_BUILD_DIR = buildDirectory;\n\tprocess.env.ABSOLUTE_COMPILED_RUNTIME = '1';\n\tif (options.configPath) {\n\t\tprocess.env.ABSOLUTE_CONFIG = resolve(\n\t\t\toptions.projectRoot,\n\t\t\toptions.configPath\n\t\t);\n\t}\n\tlet loaded: Awaited<ReturnType<typeof loadServerApp>>;\n\ttry {\n\t\tloaded = await loadServerApp(resolve(options.producerPath));\n\t} finally {\n\t\trestoreEnvironmentVariable(\n\t\t\t'ABSOLUTE_BUILD_DIR',\n\t\t\tpreviousBuildDirectory\n\t\t);\n\t\trestoreEnvironmentVariable(\n\t\t\t'ABSOLUTE_COMPILED_RUNTIME',\n\t\t\tpreviousCompiledRuntime\n\t\t);\n\t\trestoreEnvironmentVariable('ABSOLUTE_CONFIG', previousConfigPath);\n\t}\n\tconst current = await buildAbsoluteMobileCompatibilityRelease({\n\t\tapp: loaded.app,\n\t\tappId: mobile.appId,\n\t\tbuildDirectory,\n\t\tmanifest,\n\t\tpreviousArtifacts: previous.map(({ artifact }) => artifact),\n\t\tproducerExport: loaded.exportName,\n\t\tproducerPath: resolve(options.producerPath),\n\t\truntime: String(ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION)\n\t});\n\tconst auth = resolveAbsoluteMobileAuthManifest(options.projectRoot, mobile);\n\tconst sync =\n\t\tauth !== undefined && projectUsesAbsoluteSync(options.projectRoot);\n\tif (\n\t\tauth &&\n\t\t!loaded.app.routes.some(\n\t\t\t(route) => route.path === '/.well-known/openid-configuration'\n\t\t)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'@absolutejs/auth is installed, but its OIDC provider is not mounted. Native authentication requires the auth oidc configuration so AbsoluteJS can provision a public PKCE client.'\n\t\t);\n\t}\n\tconst releasesById = new Map(\n\t\t[current, ...previous].map((release) => [\n\t\t\trelease.artifact.releaseId,\n\t\t\trelease\n\t\t])\n\t);\n\tconst retained = retainAbsoluteMobileCompatibilityArtifacts(\n\t\t[...releasesById.values()].map(({ artifact }) => artifact)\n\t);\n\tawait materializeAbsoluteMobileCompatibilityBundle({\n\t\tcurrentReleaseId: current.artifact.releaseId,\n\t\treleases: retained.map((artifact) =>\n\t\t\trequireRelease(releasesById, artifact.releaseId)\n\t\t),\n\t\troot\n\t});\n\tawait materializeAbsoluteCapacitorWebBundle({\n\t\tartifact: current.artifact,\n\t\t...(auth ? { auth } : {}),\n\t\tbuildDirectory,\n\t\tconfig: mobile,\n\t\t...(sync ? { sync: true } : {})\n\t});\n\n\treturn current.artifact;\n};\n",
26
+ "import { createHash } from 'node:crypto';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { basename, dirname, extname, join, relative, resolve } from 'node:path';\nimport type { Elysia } from 'elysia';\nimport {\n\tABSOLUTE_MOBILE_ROUTE_DETAIL,\n\tparseAbsoluteMobileBuildPageMetadata,\n\ttype AbsoluteMobileBuildPageMetadata\n} from './buildMetadata';\nimport {\n\tcreateAbsoluteMobileCompatibilityArtifact,\n\ttype AbsoluteMobileCompatibilityArtifact,\n\ttype AbsoluteMobileCompatibilityPage,\n\ttype AbsoluteMobileCompatibilityRoute\n} from './releaseArtifact';\nimport type { AbsoluteMobileStoredCompatibilityRelease } from './artifactStore';\nimport { toPascal } from '../utils/stringModifiers';\n\nexport type AbsoluteMobileBuildReleaseOptions = {\n\tapp: Pick<Elysia, 'compile' | 'modules' | 'routes'>;\n\tappId: string;\n\tbuildDirectory: string;\n\tmanifest: Record<string, string>;\n\tpreviousArtifacts?: readonly AbsoluteMobileCompatibilityArtifact[];\n\tproducerExport?: string;\n\tproducerModule?: string;\n\tproducerPath: string;\n\truntime: string;\n};\n\nconst sha256 = (bytes: Uint8Array) =>\n\tcreateHash('sha256').update(bytes).digest('hex');\n\nconst STATIC_SCRIPT_PATTERN =\n\t/(<script\\b[^>]*?\\bsrc\\s*=\\s*[\"'])(\\/[^\"']+\\.(?:js|ts))([\"'][^>]*>)/giu;\n\nconst rewriteStaticScriptPaths = (\n\tsource: string,\n\tmanifest: Record<string, string>\n) =>\n\tsource.replace(\n\t\tSTATIC_SCRIPT_PATTERN,\n\t\t(match, prefix: string, path: string, suffix: string) => {\n\t\t\tif (path.endsWith('/htmx.min.js')) return match;\n\t\t\tconst key = toPascal(basename(path, extname(path)));\n\t\t\tconst builtPath = manifest[key];\n\n\t\t\treturn builtPath ? `${prefix}${builtPath}${suffix}` : match;\n\t\t}\n\t);\n\nconst readPageMetadata = (route: {\n\thooks?: { detail?: Record<string, unknown> };\n}) =>\n\tparseAbsoluteMobileBuildPageMetadata(\n\t\troute.hooks?.detail?.[ABSOLUTE_MOBILE_ROUTE_DETAIL]\n\t);\n\nconst resolveAssetPath = (buildDirectory: string, assetPath: string) => {\n\tconst resolvedBuildDirectory = resolve(buildDirectory);\n\tconst resolvedAsset = resolve(assetPath);\n\tif (resolvedAsset.startsWith(`${resolvedBuildDirectory}/`)) {\n\t\treturn resolvedAsset;\n\t}\n\n\treturn join(buildDirectory, assetPath.replace(/^\\/+/, ''));\n};\n\nconst pageFor = async (\n\tmetadata: AbsoluteMobileBuildPageMetadata,\n\tmanifest: Record<string, string>,\n\tbuildDirectory: string\n) => {\n\tconst assetPath = manifest[metadata.bundleKey];\n\tif (!assetPath) {\n\t\tthrow new TypeError(\n\t\t\t`Mobile page ${metadata.pageId} references missing manifest asset ${metadata.bundleKey}.`\n\t\t);\n\t}\n\tlet resolvedAssetPath = resolveAssetPath(buildDirectory, assetPath);\n\tif (metadata.framework === 'html' || metadata.framework === 'htmx') {\n\t\tconst source = await readFile(resolvedAssetPath, 'utf8');\n\t\tconst rewritten = rewriteStaticScriptPaths(source, manifest);\n\t\tconst documentHash = sha256(new TextEncoder().encode(rewritten));\n\t\tresolvedAssetPath = join(\n\t\t\tbuildDirectory,\n\t\t\t'.absolutejs',\n\t\t\t'mobile-pages',\n\t\t\t`${documentHash}.html`\n\t\t);\n\t\tawait mkdir(dirname(resolvedAssetPath), { recursive: true });\n\t\tawait writeFile(resolvedAssetPath, rewritten);\n\t}\n\tconst pageAssetKey = metadata.bundleKey.replace(/Index$/u, '');\n\tconst styleAssetPath = [\n\t\t`${pageAssetKey}BundledCSS`,\n\t\t`${pageAssetKey}CompiledCSS`\n\t]\n\t\t.map((key) => manifest[key])\n\t\t.find((path): path is string => typeof path === 'string');\n\tconst resolvedStylePath = styleAssetPath\n\t\t? resolveAssetPath(buildDirectory, styleAssetPath)\n\t\t: undefined;\n\tconst [bytes, styleBytes] = await Promise.all([\n\t\treadFile(resolvedAssetPath),\n\t\tresolvedStylePath ? readFile(resolvedStylePath) : undefined\n\t]);\n\tconst bundlePath = `/${relative(resolve(buildDirectory), resolvedAssetPath).replaceAll('\\\\', '/')}`;\n\tconst styleBundlePath = resolvedStylePath\n\t\t? `/${relative(resolve(buildDirectory), resolvedStylePath).replaceAll('\\\\', '/')}`\n\t\t: undefined;\n\n\treturn {\n\t\tbundleHash: sha256(bytes),\n\t\tbundlePath,\n\t\tcontract: metadata.contract,\n\t\tframework: metadata.framework,\n\t\tpageId: metadata.pageId,\n\t\tpropsSchemaHash: metadata.propsSchemaHash,\n\t\t...(styleBytes && styleBundlePath\n\t\t\t? {\n\t\t\t\t\tstyleBundleHash: sha256(styleBytes),\n\t\t\t\t\tstyleBundlePath\n\t\t\t\t}\n\t\t\t: {})\n\t} satisfies AbsoluteMobileCompatibilityPage;\n};\n\nexport const buildAbsoluteMobileCompatibilityRelease = async (\n\toptions: AbsoluteMobileBuildReleaseOptions\n): Promise<AbsoluteMobileStoredCompatibilityRelease> => {\n\tconst [captured, producerBytes] = await Promise.all([\n\t\tcaptureAbsoluteMobileRouteGraph(options.app),\n\t\treadFile(options.producerPath)\n\t]);\n\tif (captured.length === 0) {\n\t\tthrow new TypeError(\n\t\t\t'No instrumented AbsoluteJS mobile page routes were found in the finalized Elysia route graph.'\n\t\t);\n\t}\n\tconst metadataByPage = new Map<string, AbsoluteMobileBuildPageMetadata>();\n\tfor (const { metadata } of captured) {\n\t\tconst prior = metadataByPage.get(metadata.pageId);\n\t\tif (prior && JSON.stringify(prior) !== JSON.stringify(metadata)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Mobile page ${metadata.pageId} has inconsistent generated contracts.`\n\t\t\t);\n\t\t}\n\t\tmetadataByPage.set(metadata.pageId, metadata);\n\t}\n\tconst pages = await Promise.all(\n\t\t[...metadataByPage.values()].map((metadata) =>\n\t\t\tpageFor(metadata, options.manifest, options.buildDirectory)\n\t\t)\n\t);\n\tconst producerHash = sha256(producerBytes);\n\tconst appBuild = `ambuild_${sha256(\n\t\tnew TextEncoder().encode(\n\t\t\tJSON.stringify({\n\t\t\t\tpages: pages.map(\n\t\t\t\t\t({\n\t\t\t\t\t\tbundleHash,\n\t\t\t\t\t\tbundlePath,\n\t\t\t\t\t\tcontract,\n\t\t\t\t\t\tpageId,\n\t\t\t\t\t\tstyleBundleHash,\n\t\t\t\t\t\tstyleBundlePath\n\t\t\t\t\t}) => ({\n\t\t\t\t\t\tbundleHash,\n\t\t\t\t\t\tbundlePath,\n\t\t\t\t\t\tcontract,\n\t\t\t\t\t\tpageId,\n\t\t\t\t\t\t...(styleBundleHash && styleBundlePath\n\t\t\t\t\t\t\t? { styleBundleHash, styleBundlePath }\n\t\t\t\t\t\t\t: {})\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t\tproducerHash,\n\t\t\t\truntime: options.runtime\n\t\t\t})\n\t\t)\n\t)}`;\n\tconst priorAppIds = new Set(\n\t\t(options.previousArtifacts ?? []).map(({ appId }) => appId)\n\t);\n\tif (\n\t\tpriorAppIds.size > 1 ||\n\t\t(priorAppIds.size === 1 && !priorAppIds.has(options.appId))\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Previous mobile compatibility artifacts belong to another app.'\n\t\t);\n\t}\n\tconst unchanged = options.previousArtifacts?.find(\n\t\t(artifact) =>\n\t\t\tartifact.appBuild === appBuild &&\n\t\t\tartifact.runtime === options.runtime\n\t);\n\tconst generation =\n\t\tunchanged?.generation ??\n\t\tMath.max(\n\t\t\t0,\n\t\t\t...(options.previousArtifacts ?? []).map(\n\t\t\t\t(artifact) => artifact.generation\n\t\t\t)\n\t\t) + 1;\n\tconst artifact = createAbsoluteMobileCompatibilityArtifact({\n\t\tappBuild,\n\t\tappId: options.appId,\n\t\tgeneration,\n\t\tpages,\n\t\tproducer: {\n\t\t\tbundleHash: producerHash,\n\t\t\tbytes: producerBytes.byteLength,\n\t\t\texportName: options.producerExport ?? 'server',\n\t\t\tmodule: options.producerModule ?? 'producer.js'\n\t\t},\n\t\troutes: captured.map(({ route }) => route),\n\t\truntime: options.runtime\n\t});\n\n\treturn { artifact, producer: new Blob([producerBytes]) };\n};\nexport const captureAbsoluteMobileRouteGraph = async (\n\tapp: Pick<Elysia, 'compile' | 'modules' | 'routes'>\n) => {\n\tif (app.modules) await app.modules;\n\tapp.compile();\n\tconst captured = app.routes.flatMap((route) => {\n\t\tconst metadata = readPageMetadata(route);\n\t\tif (!metadata || (route.method !== 'GET' && route.method !== 'HEAD')) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tmetadata,\n\t\t\t\troute: {\n\t\t\t\t\tmethod: route.method === 'GET' ? 'GET' : 'HEAD',\n\t\t\t\t\tpageId: metadata.pageId,\n\t\t\t\t\tpattern: route.path\n\t\t\t\t} satisfies AbsoluteMobileCompatibilityRoute\n\t\t\t}\n\t\t];\n\t});\n\tconst identities = new Map<string, string>();\n\tfor (const { metadata, route } of captured) {\n\t\tconst prior = identities.get(`${route.method}:${route.pattern}`);\n\t\tif (prior && prior !== metadata.pageId) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Mobile route ${route.method} ${route.pattern} resolves to multiple pages.`\n\t\t\t);\n\t\t}\n\t\tidentities.set(`${route.method}:${route.pattern}`, metadata.pageId);\n\t}\n\n\treturn captured;\n};\n",
27
+ "import {\n\tcp,\n\tcopyFile,\n\tmkdir,\n\tmkdtemp,\n\treadFile,\n\trename,\n\trm,\n\twriteFile\n} from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { basename, dirname, extname, join, relative, resolve } from 'node:path';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\nimport type {\n\tAbsoluteMobileCompatibilityArtifact,\n\tAbsoluteMobileCompatibilityPage\n} from './releaseArtifact';\nimport { resolveAbsoluteMobileRoute } from './routeMatcher';\nimport {\n\tABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,\n\ttype AbsoluteMobileClientManifest\n} from './transport';\nimport type { AbsoluteMobileAuthManifest } from './nativeAuth';\n\nexport type AbsoluteCapacitorBundleOptions = {\n\tartifact: AbsoluteMobileCompatibilityArtifact;\n\tauth?: AbsoluteMobileAuthManifest;\n\tbuildDirectory: string;\n\tconfig: NormalizedAbsoluteMobileConfig;\n\tsync?: boolean;\n};\n\nconst MANIFEST_FILE = 'absolute-mobile-manifest.json';\nconst BOOTSTRAP_FILE = 'absolute-mobile-bootstrap.js';\nconst INDEX_FILE = 'index.html';\nconst CLIENT_CSS_DEPENDENCY_PATTERN =\n\t/(?:@import\\s+(?:url\\(\\s*)?|url\\(\\s*)[\"']?((?:\\/|\\.\\.\\/|\\.\\/)[^\"')\\s]+)[\"']?\\s*\\)?/gu;\nconst CLIENT_MARKUP_DEPENDENCY_PATTERN =\n\t/<(?:script\\b[^>]*\\bsrc|link\\b[^>]*\\bhref|img\\b[^>]*\\bsrc|source\\b[^>]*\\bsrcset)\\s*=\\s*[\"']((?:\\/|\\.\\.\\/|\\.\\/)[^\"',\\s]+)/giu;\nconst CAPACITOR_CLIENT_FRAMEWORKS = new Set([\n\t'angular',\n\t'html',\n\t'htmx',\n\t'react',\n\t'svelte',\n\t'vue'\n]);\nconst CLIENT_ASSET_DIRECTORIES = ['assets', 'html', 'htmx', 'indexes'] as const;\n\nconst errorHasCode = (error: unknown, code: string) =>\n\ttypeof error === 'object' &&\n\terror !== null &&\n\tReflect.get(error, 'code') === code;\n\nconst shellBootstrapModule = () => {\n\tconst candidate = ['js', 'ts']\n\t\t.map((extension) =>\n\t\t\tjoin(import.meta.dir, `shellBootstrap.${extension}`)\n\t\t)\n\t\t.find(existsSync);\n\tif (candidate) return candidate;\n\n\tthrow new TypeError('AbsoluteJS mobile shell bootstrap module is missing.');\n};\n\nconst shellAuthModule = () => {\n\tconst candidate = ['js', 'ts']\n\t\t.map((extension) => join(import.meta.dir, `shellAuth.${extension}`))\n\t\t.find(existsSync);\n\tif (candidate) return candidate;\n\n\tthrow new TypeError('AbsoluteJS mobile auth shell module is missing.');\n};\n\nconst shellSyncModule = () => {\n\tconst candidate = ['js', 'ts']\n\t\t.map((extension) => join(import.meta.dir, `shellSync.${extension}`))\n\t\t.find(existsSync);\n\tif (candidate) return candidate;\n\n\tthrow new TypeError('AbsoluteJS mobile Sync shell module is missing.');\n};\n\nconst escapeHtml = (value: string) =>\n\tvalue\n\t\t.replaceAll('&', '&amp;')\n\t\t.replaceAll('<', '&lt;')\n\t\t.replaceAll('>', '&gt;')\n\t\t.replaceAll('\"', '&quot;');\n\nconst indexHtml = (appName: string) => `<!doctype html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,viewport-fit=cover\">\n\t\t<meta name=\"color-scheme\" content=\"light dark\">\n\t\t<title>${escapeHtml(appName)}</title>\n\t</head>\n\t<body>\n\t\t<main id=\"absolute-mobile-status\" role=\"status\">Starting…</main>\n\t\t<script type=\"module\" src=\"./${BOOTSTRAP_FILE}\"></script>\n\t</body>\n</html>\n`;\n\nconst sourceAssetPath = (buildDirectory: string, bundlePath: string) => {\n\tconst root = resolve(buildDirectory);\n\tconst asset = resolve(root, bundlePath.replace(/^\\/+/, ''));\n\tif (!asset.startsWith(`${root}/`)) {\n\t\tthrow new TypeError('Mobile page bundle escaped the build directory.');\n\t}\n\n\treturn asset;\n};\n\nconst buildShellBootstrap = async (\n\tstaging: string,\n\tauth: boolean,\n\tsync: boolean\n) => {\n\tconst modulePath = shellBootstrapModule();\n\tconst authImport = auth\n\t\t? `import { createAbsoluteMobileShellAuth } from ${JSON.stringify(shellAuthModule())};\\n`\n\t\t: '';\n\tconst options = auth\n\t\t? `{ createAuth: createAbsoluteMobileShellAuth${sync ? ', installSync: installAbsoluteMobileShellSync' : ''} }`\n\t\t: '';\n\tconst syncImport = sync\n\t\t? `import { installAbsoluteMobileShellSync } from ${JSON.stringify(shellSyncModule())};\\n`\n\t\t: '';\n\tconst entryPath = join(staging, '.absolute-mobile-entry.ts');\n\tawait writeFile(\n\t\tentryPath,\n\t\t`import { startAbsoluteMobileShell } from ${JSON.stringify(modulePath)};\\n${authImport}${syncImport}void startAbsoluteMobileShell(${options});\\n`\n\t);\n\tconst build = await Bun.build({\n\t\tentrypoints: [entryPath],\n\t\tminify: true,\n\t\toutdir: staging,\n\t\ttarget: 'browser'\n\t});\n\tif (!build.success || build.outputs.length !== 1) {\n\t\tthrow new AggregateError(\n\t\t\tbuild.logs,\n\t\t\t'Failed to build the AbsoluteJS Capacitor shell.'\n\t\t);\n\t}\n\tawait rename(build.outputs[0]?.path ?? '', join(staging, BOOTSTRAP_FILE));\n\tawait rm(entryPath, { force: true });\n};\n\nconst removePreviousBundle = async (backup: string, moved: boolean) => {\n\tif (!moved) return;\n\tawait rm(backup, { force: true, recursive: true });\n};\n\nconst restorePreviousBundle = async (\n\tbackup: string,\n\tdestination: string,\n\tmoved: boolean\n) => {\n\tif (!moved) return;\n\tawait rename(backup, destination);\n};\n\nconst installBundle = async (staging: string, destination: string) => {\n\tconst backup = `${destination}.previous-${crypto.randomUUID()}`;\n\tlet movedPrevious = false;\n\ttry {\n\t\tawait rename(destination, backup);\n\t\tmovedPrevious = true;\n\t} catch (error) {\n\t\tif (!errorHasCode(error, 'ENOENT')) throw error;\n\t}\n\ttry {\n\t\tawait rename(staging, destination);\n\t\tawait removePreviousBundle(backup, movedPrevious);\n\t} catch (error) {\n\t\tawait restorePreviousBundle(backup, destination, movedPrevious);\n\n\t\tthrow error;\n\t}\n};\n\nconst copyClientPage = async (\n\tpage: AbsoluteMobileCompatibilityPage,\n\tbuildDirectory: string,\n\tstaging: string,\n\tcopiedDependencies: Set<string>\n) => {\n\tif (!CAPACITOR_CLIENT_FRAMEWORKS.has(page.framework)) {\n\t\tthrow new TypeError(\n\t\t\t`Capacitor client rendering does not yet support ${page.framework} page ${page.pageId}.`\n\t\t);\n\t}\n\tconst extension = extname(page.bundlePath) || '.js';\n\tconst localBundlePath = `./pages/${page.bundleHash}${extension}`;\n\tconst source = sourceAssetPath(buildDirectory, page.bundlePath);\n\tawait copyFile(source, join(staging, localBundlePath));\n\tawait copyAbsoluteClientDependencies(\n\t\tsource,\n\t\tbuildDirectory,\n\t\tstaging,\n\t\tcopiedDependencies\n\t);\n\n\tlet localStylePath: string | undefined;\n\tif (page.styleBundlePath && page.styleBundleHash) {\n\t\tconst styleExtension = extname(page.styleBundlePath) || '.css';\n\t\tlocalStylePath = `./styles/${page.styleBundleHash}${styleExtension}`;\n\t\tconst styleSource = sourceAssetPath(\n\t\t\tbuildDirectory,\n\t\t\tpage.styleBundlePath\n\t\t);\n\t\tawait mkdir(dirname(join(staging, localStylePath)), {\n\t\t\trecursive: true\n\t\t});\n\t\tawait copyFile(styleSource, join(staging, localStylePath));\n\t\tawait copyAbsoluteClientDependencies(\n\t\t\tstyleSource,\n\t\t\tbuildDirectory,\n\t\t\tstaging,\n\t\t\tcopiedDependencies\n\t\t);\n\t}\n\n\treturn {\n\t\t...page,\n\t\tlocalBundlePath,\n\t\t...(localStylePath ? { localStylePath } : {})\n\t};\n};\n\nconst absoluteClientImports = async (\n\tsourcePath: string,\n\tbuildDirectory: string\n) => {\n\tconst source = await readFile(sourcePath, 'utf8');\n\tconst extension = extname(sourcePath).toLowerCase();\n\tlet scriptLoader: 'js' | 'jsx' | 'ts' | 'tsx' | undefined;\n\tif (extension === '.tsx') scriptLoader = 'tsx';\n\telse if (extension === '.ts') scriptLoader = 'ts';\n\telse if (extension === '.jsx') scriptLoader = 'jsx';\n\telse if (['.js', '.mjs', '.cjs'].includes(extension)) scriptLoader = 'js';\n\tconst scriptImports = scriptLoader\n\t\t? new Bun.Transpiler({ loader: scriptLoader })\n\t\t\t\t.scanImports(source)\n\t\t\t\t.map(({ path }) => path)\n\t\t: [];\n\tconst cssImports =\n\t\textension === '.css'\n\t\t\t? [...source.matchAll(CLIENT_CSS_DEPENDENCY_PATTERN)].flatMap(\n\t\t\t\t\t(match) => match[1] ?? []\n\t\t\t\t)\n\t\t\t: [];\n\tconst markupImports =\n\t\textension === '.html'\n\t\t\t? [...source.matchAll(CLIENT_MARKUP_DEPENDENCY_PATTERN)].flatMap(\n\t\t\t\t\t(match) => match[1] ?? []\n\t\t\t\t)\n\t\t\t: [];\n\n\treturn [...scriptImports, ...cssImports, ...markupImports].flatMap(\n\t\t(specifier) => {\n\t\t\tif (!specifier) return [];\n\t\t\tif (\n\t\t\t\t!specifier.startsWith('/') &&\n\t\t\t\t!specifier.startsWith('./') &&\n\t\t\t\t!specifier.startsWith('../')\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst clean = specifier.split(/[?#]/u, 1)[0] ?? specifier;\n\t\t\tif (clean.startsWith('/')) return [clean];\n\t\t\tconst resolved = resolve(dirname(sourcePath), clean);\n\t\t\tconst root = resolve(buildDirectory);\n\t\t\tconst relativePath = relative(root, resolved).replaceAll('\\\\', '/');\n\t\t\tif (relativePath === '..' || relativePath.startsWith('../')) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Mobile client dependency escaped the build directory: ${specifier}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [`/${relativePath}`];\n\t\t}\n\t);\n};\n\nconst copyAbsoluteClientDependency = async (\n\tspecifier: string,\n\tbuildDirectory: string,\n\tstaging: string,\n\tcopied: Set<string>\n) => {\n\tif (copied.has(specifier)) return;\n\tcopied.add(specifier);\n\tconst source = sourceAssetPath(buildDirectory, specifier);\n\tconst destination = join(staging, specifier.replace(/^\\/+/, ''));\n\tawait mkdir(dirname(destination), { recursive: true });\n\tawait copyFile(source, destination);\n\tawait copyAbsoluteClientDependencies(\n\t\tsource,\n\t\tbuildDirectory,\n\t\tstaging,\n\t\tcopied\n\t);\n};\n\nconst copyAbsoluteClientDependencies = async (\n\tsourcePath: string,\n\tbuildDirectory: string,\n\tstaging: string,\n\tcopied: Set<string>\n) => {\n\tconst dependencies = await absoluteClientImports(\n\t\tsourcePath,\n\t\tbuildDirectory\n\t);\n\tawait Promise.all(\n\t\tdependencies.map((specifier) =>\n\t\t\tcopyAbsoluteClientDependency(\n\t\t\t\tspecifier,\n\t\t\t\tbuildDirectory,\n\t\t\t\tstaging,\n\t\t\t\tcopied\n\t\t\t)\n\t\t)\n\t);\n};\n\nexport const materializeAbsoluteCapacitorWebBundle = async (\n\toptions: AbsoluteCapacitorBundleOptions\n) => {\n\tif (\n\t\t!resolveAbsoluteMobileRoute(\n\t\t\toptions.artifact.routes,\n\t\t\tnew URL(options.config.entry, 'https://absolute.invalid').pathname\n\t\t)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`mobile.entry ${options.config.entry} is not a captured mobile page route.`\n\t\t);\n\t}\n\tconst destination = options.config.bundleDirectory;\n\tawait mkdir(dirname(destination), { recursive: true });\n\tconst staging = await mkdtemp(\n\t\tjoin(dirname(destination), `.${basename(destination)}.stage-`)\n\t);\n\ttry {\n\t\tconst pageDirectory = join(staging, 'pages');\n\t\tawait mkdir(pageDirectory, { recursive: true });\n\t\tawait Promise.all(\n\t\t\tCLIENT_ASSET_DIRECTORIES.map((directory) => ({\n\t\t\t\tdestination: join(staging, directory),\n\t\t\t\tsource: join(options.buildDirectory, directory)\n\t\t\t}))\n\t\t\t\t.filter(({ source }) => existsSync(source))\n\t\t\t\t.map(({ destination: assetDestination, source }) =>\n\t\t\t\t\tcp(source, assetDestination, { recursive: true })\n\t\t\t\t)\n\t\t);\n\t\tconst copiedDependencies = new Set<string>();\n\t\tconst pages = await Promise.all(\n\t\t\toptions.artifact.pages.map((page) =>\n\t\t\t\tcopyClientPage(\n\t\t\t\t\tpage,\n\t\t\t\t\toptions.buildDirectory,\n\t\t\t\t\tstaging,\n\t\t\t\t\tcopiedDependencies\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t\tconst manifest = {\n\t\t\tappBuild: options.artifact.appBuild,\n\t\t\t...(options.auth ? { auth: options.auth } : {}),\n\t\t\tappId: options.config.appId,\n\t\t\tappName: options.config.appName,\n\t\t\tdeepLinkHosts: options.config.deepLinkHosts,\n\t\t\tdeepLinkScheme: options.config.deepLinkScheme,\n\t\t\tentry: options.config.entry,\n\t\t\tformat: ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,\n\t\t\tpages,\n\t\t\tproductionOrigin: options.config.productionOrigin,\n\t\t\troutes: options.artifact.routes,\n\t\t\truntime: options.artifact.runtime,\n\t\t\t...(options.sync ? { sync: { socketTickets: true as const } } : {})\n\t\t} satisfies AbsoluteMobileClientManifest;\n\t\tawait Promise.all([\n\t\t\twriteFile(\n\t\t\t\tjoin(staging, MANIFEST_FILE),\n\t\t\t\t`${JSON.stringify(manifest, null, '\\t')}\\n`\n\t\t\t),\n\t\t\twriteFile(\n\t\t\t\tjoin(staging, INDEX_FILE),\n\t\t\t\tindexHtml(options.config.appName)\n\t\t\t),\n\t\t\tbuildShellBootstrap(\n\t\t\t\tstaging,\n\t\t\t\toptions.auth !== undefined,\n\t\t\t\toptions.auth !== undefined && options.sync === true\n\t\t\t)\n\t\t]);\n\t\tawait installBundle(staging, destination);\n\n\t\treturn manifest;\n\t} catch (error) {\n\t\tawait rm(staging, { force: true, recursive: true });\n\n\t\tthrow error;\n\t}\n};\n",
25
28
  "import type { AbsoluteMobileCompatibilityRoute } from './releaseArtifact';\n\nconst REGEXP_SPECIAL_CHARACTERS = /[.*+?^${}()|[\\]\\\\]/g;\n\nconst routeSegmentPattern = (segment: string) => {\n\tif (segment === '*') return '.*';\n\tif (segment.startsWith(':') && segment.endsWith('?')) return '[^/]*';\n\tif (segment.startsWith(':')) return '[^/]+';\n\n\treturn segment.replace(REGEXP_SPECIAL_CHARACTERS, '\\\\$&');\n};\n\nexport const matchesAbsoluteMobileRoutePattern = (\n\tpattern: string,\n\tpathname: string\n) => {\n\tconst expression = pattern.split('/').map(routeSegmentPattern).join('/');\n\n\treturn new RegExp(`^${expression}/?$`).test(pathname);\n};\n\nexport const resolveAbsoluteMobileRoute = (\n\troutes: readonly AbsoluteMobileCompatibilityRoute[],\n\tpathname: string,\n\tmethod: 'GET' | 'HEAD' = 'GET'\n) =>\n\troutes.find(\n\t\t(route) =>\n\t\t\troute.method === method &&\n\t\t\tmatchesAbsoluteMobileRoutePattern(route.pattern, pathname)\n\t);\n",
26
29
  "import type { AbsoluteMobileCompatibilityPage } from './releaseArtifact';\n\nexport type AbsoluteMobileProducerContext = {\n\tpage: AbsoluteMobileCompatibilityPage;\n\treleaseId: string;\n};\n\nexport const ABSOLUTE_MOBILE_PRODUCER_STORAGE_KEY = Symbol.for(\n\t'absolutejs.mobileProducerAsyncLocalStorage'\n);\n\nconst frameworks = new Set<string>([\n\t'angular',\n\t'ember',\n\t'html',\n\t'htmx',\n\t'react',\n\t'svelte',\n\t'vue'\n]);\n\nconst isCompatibilityPage = (\n\tvalue: unknown\n): value is AbsoluteMobileCompatibilityPage =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t'bundleHash' in value &&\n\ttypeof value.bundleHash === 'string' &&\n\t'contract' in value &&\n\ttypeof value.contract === 'string' &&\n\t'framework' in value &&\n\ttypeof value.framework === 'string' &&\n\tframeworks.has(value.framework) &&\n\t'pageId' in value &&\n\ttypeof value.pageId === 'string' &&\n\t'propsSchemaHash' in value &&\n\ttypeof value.propsSchemaHash === 'string';\n\nexport const getCurrentAbsoluteMobileProducerContext = () => {\n\tconst value: unknown = Reflect.get(\n\t\tglobalThis,\n\t\tABSOLUTE_MOBILE_PRODUCER_STORAGE_KEY\n\t);\n\tif (\n\t\ttypeof value !== 'object' ||\n\t\tvalue === null ||\n\t\t!('getStore' in value) ||\n\t\ttypeof value.getStore !== 'function'\n\t) {\n\t\treturn undefined;\n\t}\n\tconst context: unknown = value.getStore();\n\tif (\n\t\ttypeof context !== 'object' ||\n\t\tcontext === null ||\n\t\t!('page' in context) ||\n\t\t!isCompatibilityPage(context.page) ||\n\t\t!('releaseId' in context) ||\n\t\ttypeof context.releaseId !== 'string'\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn { page: context.page, releaseId: context.releaseId };\n};\n",
27
30
  "import {\n\tgetCurrentAbsoluteMobileProducerContext,\n\ttype AbsoluteMobileProducerContext\n} from './producerContextState';\n\nexport const ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE =\n\t'application/vnd.absolute.page+json';\nexport const ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION = 1 as const;\nconst BAD_REQUEST_STATUS = 400;\nconst OK_STATUS = 200;\nconst SERVER_ERROR_STATUS = 500;\nconst UPGRADE_REQUIRED_STATUS = 426;\n\nexport const MOBILE_PAGE_REQUEST_HEADERS = {\n\tappBuild: 'x-absolute-mobile-app-build',\n\tpageBundle: 'x-absolute-mobile-page-bundle',\n\tpageContracts: 'x-absolute-mobile-page-contracts',\n\tpageId: 'x-absolute-mobile-page-id',\n\tprotocol: 'x-absolute-mobile-protocol',\n\truntime: 'x-absolute-mobile-runtime'\n} as const;\n\nexport type AbsoluteMobilePageFramework =\n\t| 'angular'\n\t| 'ember'\n\t| 'html'\n\t| 'htmx'\n\t| 'react'\n\t| 'svelte'\n\t| 'vue';\n\nexport type AbsoluteMobilePageClient = {\n\tappBuild: string;\n\tpageBundle: string;\n\tpageContracts: string[];\n\tpageId: string;\n\tprotocol: number;\n\truntime: string;\n};\n\nexport type AbsoluteMobilePageRepresentation<Props> = {\n\t/** Stable data contract understood by an embedded page bundle. */\n\tcontract: string;\n\t/**\n\t * Adapts the current route props to an older compatible contract. The\n\t * current representation normally uses the identity function.\n\t */\n\tmapProps: (props: Props) => Record<string, unknown>;\n};\n\nexport type AbsoluteMobilePageCompatibility<Props> = {\n\tframework: AbsoluteMobilePageFramework;\n\tpageId: string;\n\t/** Newest representation first, followed by retained compatibility forms. */\n\trepresentations: readonly AbsoluteMobilePageRepresentation<Props>[];\n\t/** Current runtime plus every retained compatible runtime generation. */\n\truntimes: readonly string[];\n};\n\nexport type AbsoluteMobilePageResult = {\n\tkind: 'page';\n\tcontract: string;\n\tframework: AbsoluteMobilePageFramework;\n\tpageId: string;\n\tprops: Record<string, unknown>;\n\tstatus: number;\n};\n\nexport type AbsoluteMobileUpgradeReason =\n\t| 'app-release'\n\t| 'page-contract'\n\t| 'protocol'\n\t| 'runtime';\n\nexport type AbsoluteMobileUpgradeRequiredResult = {\n\tkind: 'upgrade-required';\n\treason: AbsoluteMobileUpgradeReason;\n\tpageId: string;\n\tsupportedContracts?: string[];\n\tsupportedRuntimes?: string[];\n};\n\nexport type AbsoluteMobileInvalidRequestResult = {\n\tkind: 'invalid-request';\n\tmessage: string;\n};\n\nexport type AbsoluteMobilePageErrorResult = {\n\tcode: 'representation-failed';\n\tkind: 'error';\n\tpageId: string;\n\tstatus: typeof SERVER_ERROR_STATUS;\n};\n\nexport type AbsoluteMobilePageEnvelope = {\n\tprotocol: typeof ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION;\n\tresponse:\n\t\t| AbsoluteMobilePageErrorResult\n\t\t| AbsoluteMobileInvalidRequestResult\n\t\t| AbsoluteMobilePageResult\n\t\t| AbsoluteMobileUpgradeRequiredResult;\n};\n\ntype ParsedMobilePageRequest =\n\t| { kind: 'not-mobile' }\n\t| { kind: 'invalid'; message: string }\n\t| { kind: 'mobile'; client: AbsoluteMobilePageClient };\n\ntype FinalizeAbsoluteMobilePageInput<Props> = {\n\tcompatibility: AbsoluteMobilePageCompatibility<Props>;\n\tprops: Props;\n\trequest: Request | undefined;\n\tstatus?: number;\n};\n\nconst parseMediaType = (value: string) =>\n\tvalue.split(';', 1)[0]?.trim().toLowerCase();\n\nexport const acceptsAbsoluteMobilePage = (request: Request | undefined) => {\n\tif (!request) return false;\n\n\treturn (request.headers.get('accept') ?? '')\n\t\t.split(',')\n\t\t.some(\n\t\t\t(value) => parseMediaType(value) === ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE\n\t\t);\n};\n\nconst readRequiredHeader = (request: Request, name: string) => {\n\tconst value = request.headers.get(name)?.trim();\n\n\treturn value ? value : undefined;\n};\n\nexport const parseAbsoluteMobilePageRequest = (\n\trequest: Request | undefined\n): ParsedMobilePageRequest => {\n\tif (!request || !acceptsAbsoluteMobilePage(request)) {\n\t\treturn { kind: 'not-mobile' };\n\t}\n\n\tconst protocolValue = readRequiredHeader(\n\t\trequest,\n\t\tMOBILE_PAGE_REQUEST_HEADERS.protocol\n\t);\n\tconst runtime = readRequiredHeader(\n\t\trequest,\n\t\tMOBILE_PAGE_REQUEST_HEADERS.runtime\n\t);\n\tconst appBuild = readRequiredHeader(\n\t\trequest,\n\t\tMOBILE_PAGE_REQUEST_HEADERS.appBuild\n\t);\n\tconst pageBundle = readRequiredHeader(\n\t\trequest,\n\t\tMOBILE_PAGE_REQUEST_HEADERS.pageBundle\n\t);\n\tconst pageContractsValue = readRequiredHeader(\n\t\trequest,\n\t\tMOBILE_PAGE_REQUEST_HEADERS.pageContracts\n\t);\n\tconst pageId = readRequiredHeader(\n\t\trequest,\n\t\tMOBILE_PAGE_REQUEST_HEADERS.pageId\n\t);\n\n\tif (!protocolValue || !/^\\d+$/.test(protocolValue)) {\n\t\treturn {\n\t\t\tkind: 'invalid',\n\t\t\tmessage: `Missing or invalid ${MOBILE_PAGE_REQUEST_HEADERS.protocol} header.`\n\t\t};\n\t}\n\tif (!runtime) {\n\t\treturn {\n\t\t\tkind: 'invalid',\n\t\t\tmessage: `Missing ${MOBILE_PAGE_REQUEST_HEADERS.runtime} header.`\n\t\t};\n\t}\n\tif (!appBuild) {\n\t\treturn {\n\t\t\tkind: 'invalid',\n\t\t\tmessage: `Missing ${MOBILE_PAGE_REQUEST_HEADERS.appBuild} header.`\n\t\t};\n\t}\n\tif (!pageBundle) {\n\t\treturn {\n\t\t\tkind: 'invalid',\n\t\t\tmessage: `Missing ${MOBILE_PAGE_REQUEST_HEADERS.pageBundle} header.`\n\t\t};\n\t}\n\tif (!pageContractsValue) {\n\t\treturn {\n\t\t\tkind: 'invalid',\n\t\t\tmessage: `Missing ${MOBILE_PAGE_REQUEST_HEADERS.pageContracts} header.`\n\t\t};\n\t}\n\tif (!pageId) {\n\t\treturn {\n\t\t\tkind: 'invalid',\n\t\t\tmessage: `Missing ${MOBILE_PAGE_REQUEST_HEADERS.pageId} header.`\n\t\t};\n\t}\n\n\tconst pageContracts = [\n\t\t...new Set(\n\t\t\tpageContractsValue\n\t\t\t\t.split(',')\n\t\t\t\t.map((value) => value.trim())\n\t\t\t\t.filter(Boolean)\n\t\t)\n\t];\n\tif (pageContracts.length === 0) {\n\t\treturn {\n\t\t\tkind: 'invalid',\n\t\t\tmessage: `${MOBILE_PAGE_REQUEST_HEADERS.pageContracts} must contain at least one contract.`\n\t\t};\n\t}\n\n\treturn {\n\t\tclient: {\n\t\t\tappBuild,\n\t\t\tpageBundle,\n\t\t\tpageContracts,\n\t\t\tpageId,\n\t\t\tprotocol: Number(protocolValue),\n\t\t\truntime\n\t\t},\n\t\tkind: 'mobile'\n\t};\n};\n\nconst responseHeaders = () => {\n\tconst headers = new Headers({\n\t\t'cache-control': 'no-store',\n\t\t'content-type': `${ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE}; version=${ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION}`\n\t});\n\theaderVaryValues.forEach((value) => headers.append('vary', value));\n\n\treturn headers;\n};\n\nconst headerVaryValues = [\n\t'Accept',\n\tMOBILE_PAGE_REQUEST_HEADERS.protocol,\n\tMOBILE_PAGE_REQUEST_HEADERS.runtime,\n\tMOBILE_PAGE_REQUEST_HEADERS.appBuild,\n\tMOBILE_PAGE_REQUEST_HEADERS.pageBundle,\n\tMOBILE_PAGE_REQUEST_HEADERS.pageContracts,\n\tMOBILE_PAGE_REQUEST_HEADERS.pageId\n];\n\nconst envelopeResponse = (\n\tresponse: AbsoluteMobilePageEnvelope['response'],\n\tstatus: number\n) =>\n\tnew Response(\n\t\tJSON.stringify({\n\t\t\tprotocol: ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\t\t\tresponse\n\t\t} satisfies AbsoluteMobilePageEnvelope),\n\t\t{ headers: responseHeaders(), status }\n\t);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst normalizeJsonValue = (value: Record<string, unknown>) => {\n\tconst serialized = JSON.stringify(value);\n\tif (serialized === undefined) {\n\t\tthrow new TypeError('Mobile page props must be JSON-serializable.');\n\t}\n\n\tconst parsed: unknown = JSON.parse(serialized);\n\tif (!isRecord(parsed)) {\n\t\tthrow new TypeError('Mobile page props must serialize to an object.');\n\t}\n\n\treturn parsed;\n};\n\nconst finalizeArchivedMobilePage = <Props>(\n\tcontext: AbsoluteMobileProducerContext,\n\tinput: FinalizeAbsoluteMobilePageInput<Props>\n) => {\n\tconst { page } = context;\n\tif (\n\t\tpage.pageId !== input.compatibility.pageId ||\n\t\tpage.framework !== input.compatibility.framework\n\t) {\n\t\treturn envelopeResponse(\n\t\t\t{\n\t\t\t\tkind: 'invalid-request',\n\t\t\t\tmessage:\n\t\t\t\t\t'Archived producer page identity does not match its release artifact.'\n\t\t\t},\n\t\t\tBAD_REQUEST_STATUS\n\t\t);\n\t}\n\n\ttry {\n\t\tconst [currentRepresentation] = input.compatibility.representations;\n\t\tif (!currentRepresentation) {\n\t\t\tthrow new TypeError('Mobile page has no current representation.');\n\t\t}\n\n\t\treturn envelopeResponse(\n\t\t\t{\n\t\t\t\tcontract: page.contract,\n\t\t\t\tframework: page.framework,\n\t\t\t\tkind: 'page',\n\t\t\t\tpageId: page.pageId,\n\t\t\t\tprops: normalizeJsonValue(\n\t\t\t\t\tcurrentRepresentation.mapProps(input.props)\n\t\t\t\t),\n\t\t\t\tstatus: input.status ?? OK_STATUS\n\t\t\t},\n\t\t\tinput.status ?? OK_STATUS\n\t\t);\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[Mobile] Archived producer ${context.releaseId} failed for ${page.pageId}:`,\n\t\t\terror\n\t\t);\n\n\t\treturn createAbsoluteMobilePageErrorResponse(page.pageId);\n\t}\n};\n\nexport const createAbsoluteMobileInvalidRequestResponse = (message: string) =>\n\tenvelopeResponse({ kind: 'invalid-request', message }, BAD_REQUEST_STATUS);\n\nexport const createAbsoluteMobilePageErrorResponse = (pageId: string) =>\n\tenvelopeResponse(\n\t\t{\n\t\t\tcode: 'representation-failed',\n\t\t\tkind: 'error',\n\t\t\tpageId,\n\t\t\tstatus: SERVER_ERROR_STATUS\n\t\t},\n\t\tSERVER_ERROR_STATUS\n\t);\n\nexport const createAbsoluteMobileUpgradeResponse = (\n\tresult: AbsoluteMobileUpgradeRequiredResult\n) => envelopeResponse(result, UPGRADE_REQUIRED_STATUS);\n\nexport const finalizeAbsoluteMobilePage = <Props>(\n\tinput: FinalizeAbsoluteMobilePageInput<Props>\n) => {\n\tconst parsed = parseAbsoluteMobilePageRequest(input.request);\n\tif (parsed.kind === 'not-mobile') return undefined;\n\tif (parsed.kind === 'invalid') {\n\t\treturn envelopeResponse(\n\t\t\t{ kind: 'invalid-request', message: parsed.message },\n\t\t\tBAD_REQUEST_STATUS\n\t\t);\n\t}\n\n\tconst { client } = parsed;\n\tif (client.pageId !== input.compatibility.pageId) {\n\t\treturn envelopeResponse(\n\t\t\t{\n\t\t\t\tkind: 'invalid-request',\n\t\t\t\tmessage: `Requested mobile page ${client.pageId} does not match ${input.compatibility.pageId}.`\n\t\t\t},\n\t\t\tBAD_REQUEST_STATUS\n\t\t);\n\t}\n\tconst producerContext = getCurrentAbsoluteMobileProducerContext();\n\tif (producerContext)\n\t\treturn finalizeArchivedMobilePage(producerContext, input);\n\tif (client.protocol !== ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION) {\n\t\treturn envelopeResponse(\n\t\t\t{\n\t\t\t\tkind: 'upgrade-required',\n\t\t\t\tpageId: input.compatibility.pageId,\n\t\t\t\treason: 'protocol'\n\t\t\t},\n\t\t\tUPGRADE_REQUIRED_STATUS\n\t\t);\n\t}\n\tif (!input.compatibility.runtimes.includes(client.runtime)) {\n\t\treturn envelopeResponse(\n\t\t\t{\n\t\t\t\tkind: 'upgrade-required',\n\t\t\t\tpageId: input.compatibility.pageId,\n\t\t\t\treason: 'runtime',\n\t\t\t\tsupportedRuntimes: [...input.compatibility.runtimes]\n\t\t\t},\n\t\t\tUPGRADE_REQUIRED_STATUS\n\t\t);\n\t}\n\n\tconst clientContracts = new Set(client.pageContracts);\n\tconst representation = input.compatibility.representations.find(\n\t\t({ contract }) => clientContracts.has(contract)\n\t);\n\tif (!representation) {\n\t\treturn envelopeResponse(\n\t\t\t{\n\t\t\t\tkind: 'upgrade-required',\n\t\t\t\tpageId: input.compatibility.pageId,\n\t\t\t\treason: 'page-contract',\n\t\t\t\tsupportedContracts: input.compatibility.representations.map(\n\t\t\t\t\t({ contract }) => contract\n\t\t\t\t)\n\t\t\t},\n\t\t\tUPGRADE_REQUIRED_STATUS\n\t\t);\n\t}\n\n\ttry {\n\t\treturn envelopeResponse(\n\t\t\t{\n\t\t\t\tcontract: representation.contract,\n\t\t\t\tframework: input.compatibility.framework,\n\t\t\t\tkind: 'page',\n\t\t\t\tpageId: input.compatibility.pageId,\n\t\t\t\tprops: normalizeJsonValue(representation.mapProps(input.props)),\n\t\t\t\tstatus: input.status ?? OK_STATUS\n\t\t\t},\n\t\t\tinput.status ?? OK_STATUS\n\t\t);\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[Mobile] Failed to produce ${input.compatibility.pageId} representation ${representation.contract}:`,\n\t\t\terror\n\t\t);\n\n\t\treturn envelopeResponse(\n\t\t\t{\n\t\t\t\tcode: 'representation-failed',\n\t\t\t\tkind: 'error',\n\t\t\t\tpageId: input.compatibility.pageId,\n\t\t\t\tstatus: SERVER_ERROR_STATUS\n\t\t\t},\n\t\t\tSERVER_ERROR_STATUS\n\t\t);\n\t}\n};\n",
28
- "import {\n\tABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\ttype AbsoluteMobilePageEnvelope,\n\ttype AbsoluteMobilePageFramework,\n\ttype AbsoluteMobilePageResult,\n\ttype AbsoluteMobileUpgradeReason,\n\ttype AbsoluteMobileUpgradeRequiredResult\n} from './pageProtocol';\n\ntype AbsoluteMobileClientTarget = {\n\t__ABSOLUTE_PAGE_RENDER_MODE__?: 'client' | 'hydrate';\n\t__INITIAL_PROPS__?: Record<string, unknown>;\n};\n\nexport type AbsoluteMobilePageLoader = (input: {\n\tcontract: string;\n\tpageId: string;\n}) => Promise<unknown>;\n\nexport type AbsoluteMobilePageActivation =\n\t| {\n\t\t\tkind: 'rendered';\n\t\t\tcontract: string;\n\t\t\tpageId: string;\n\t }\n\t| AbsoluteMobileUpgradeRequiredResult;\n\nexport type AbsoluteMobilePageActivationOptions = {\n\tloadPage: AbsoluteMobilePageLoader;\n\ttarget?: AbsoluteMobileClientTarget;\n};\n\nexport class AbsoluteMobilePageProtocolError extends Error {\n\treadonly code:\n\t\t| 'invalid-envelope'\n\t\t| 'invalid-props'\n\t\t| 'server-error'\n\t\t| 'server-rejected-request';\n\n\tconstructor(\n\t\tcode: AbsoluteMobilePageProtocolError['code'],\n\t\tmessage: string\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'AbsoluteMobilePageProtocolError';\n\t\tthis.code = code;\n\t}\n}\n\nconst frameworks = new Set<string>([\n\t'angular',\n\t'ember',\n\t'html',\n\t'htmx',\n\t'react',\n\t'svelte',\n\t'vue'\n]);\nconst upgradeReasons = new Set<string>([\n\t'app-release',\n\t'page-contract',\n\t'protocol',\n\t'runtime'\n]);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst isFramework = (value: unknown): value is AbsoluteMobilePageFramework =>\n\ttypeof value === 'string' && frameworks.has(value);\n\nconst isUpgradeReason = (\n\tvalue: unknown\n): value is AbsoluteMobileUpgradeReason =>\n\ttypeof value === 'string' && upgradeReasons.has(value);\n\nconst parsePageResult = (\n\tvalue: Record<string, unknown>\n): AbsoluteMobilePageResult => {\n\tif (\n\t\ttypeof value.contract !== 'string' ||\n\t\t!isFramework(value.framework) ||\n\t\ttypeof value.pageId !== 'string' ||\n\t\ttypeof value.status !== 'number'\n\t) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t'The mobile page response is missing required page metadata.'\n\t\t);\n\t}\n\tif (!isRecord(value.props)) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-props',\n\t\t\t'The mobile page response must contain an object props value.'\n\t\t);\n\t}\n\n\treturn {\n\t\tcontract: value.contract,\n\t\tframework: value.framework,\n\t\tkind: 'page',\n\t\tpageId: value.pageId,\n\t\tprops: value.props,\n\t\tstatus: value.status\n\t};\n};\n\nconst parseUpgradeResult = (\n\tvalue: Record<string, unknown>\n): AbsoluteMobileUpgradeRequiredResult => {\n\tif (typeof value.pageId !== 'string' || !isUpgradeReason(value.reason)) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t'The update response is missing its page or reason.'\n\t\t);\n\t}\n\n\treturn {\n\t\tkind: 'upgrade-required',\n\t\tpageId: value.pageId,\n\t\treason: value.reason,\n\t\tsupportedContracts: Array.isArray(value.supportedContracts)\n\t\t\t? value.supportedContracts.filter(\n\t\t\t\t\t(contract): contract is string =>\n\t\t\t\t\t\ttypeof contract === 'string'\n\t\t\t\t)\n\t\t\t: undefined,\n\t\tsupportedRuntimes: Array.isArray(value.supportedRuntimes)\n\t\t\t? value.supportedRuntimes.filter(\n\t\t\t\t\t(runtime): runtime is string => typeof runtime === 'string'\n\t\t\t\t)\n\t\t\t: undefined\n\t};\n};\n\nexport const activateAbsoluteMobilePage = async (\n\tvalue: unknown,\n\toptions: AbsoluteMobilePageActivationOptions\n) => {\n\tconst envelope = parseAbsoluteMobilePageEnvelope(value);\n\tif (envelope.response.kind === 'upgrade-required') {\n\t\treturn envelope.response;\n\t}\n\tif (envelope.response.kind !== 'page') {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t'Expected a renderable mobile page response.'\n\t\t);\n\t}\n\n\tconst target = options.target ?? window;\n\ttarget.__INITIAL_PROPS__ = envelope.response.props;\n\ttarget.__ABSOLUTE_PAGE_RENDER_MODE__ = 'client';\n\tawait options.loadPage({\n\t\tcontract: envelope.response.contract,\n\t\tpageId: envelope.response.pageId\n\t});\n\n\treturn {\n\t\tcontract: envelope.response.contract,\n\t\tkind: 'rendered',\n\t\tpageId: envelope.response.pageId\n\t} satisfies AbsoluteMobilePageActivation;\n};\n\nexport const parseAbsoluteMobilePageEnvelope = (value: unknown) => {\n\tif (!isRecord(value) || !isRecord(value.response)) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t'The server did not return an AbsoluteJS mobile page envelope.'\n\t\t);\n\t}\n\tif (value.protocol !== ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t`Unsupported mobile page protocol ${String(value.protocol)}.`\n\t\t);\n\t}\n\n\tconst { kind } = value.response;\n\tif (kind === 'page') {\n\t\treturn {\n\t\t\tprotocol: ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\t\t\tresponse: parsePageResult(value.response)\n\t\t} satisfies AbsoluteMobilePageEnvelope;\n\t}\n\tif (kind === 'upgrade-required') {\n\t\treturn {\n\t\t\tprotocol: ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\t\t\tresponse: parseUpgradeResult(value.response)\n\t\t} satisfies AbsoluteMobilePageEnvelope;\n\t}\n\tif (kind === 'invalid-request') {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'server-rejected-request',\n\t\t\ttypeof value.response.message === 'string'\n\t\t\t\t? value.response.message\n\t\t\t\t: 'The server rejected the mobile page request.'\n\t\t);\n\t}\n\tif (kind === 'error') {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'server-error',\n\t\t\t'The server could not create a compatible mobile page representation.'\n\t\t);\n\t}\n\n\tthrow new AbsoluteMobilePageProtocolError(\n\t\t'invalid-envelope',\n\t\t`Unknown mobile page response kind ${String(kind)}.`\n\t);\n};\n",
29
- "import {\n\tactivateAbsoluteMobilePage,\n\ttype AbsoluteMobilePageActivationOptions\n} from './client';\nimport {\n\tABSOLUTE_MOBILE_PAGE_MEDIA_TYPE,\n\tABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\tMOBILE_PAGE_REQUEST_HEADERS\n} from './pageProtocol';\nimport type {\n\tAbsoluteMobileCompatibilityPage,\n\tAbsoluteMobileCompatibilityRoute\n} from './releaseArtifact';\nimport { resolveAbsoluteMobileRoute } from './routeMatcher';\n\nexport const ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT = 1 as const;\n\nexport type AbsoluteMobileClientPage = AbsoluteMobileCompatibilityPage & {\n\tlocalBundlePath: string;\n};\n\nexport type AbsoluteMobileClientManifest = {\n\tappBuild: string;\n\tappId: string;\n\tappName: string;\n\tdeepLinkHosts: string[];\n\tdeepLinkScheme?: string;\n\tentry: string;\n\tformat: typeof ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT;\n\tpages: AbsoluteMobileClientPage[];\n\tproductionOrigin: string;\n\troutes: AbsoluteMobileCompatibilityRoute[];\n\truntime: string;\n};\n\nexport type AbsoluteMobileTransportOptions = {\n\tfetch?: typeof globalThis.fetch;\n\theaders?: HeadersInit;\n};\n\nconst pageForPathname = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpathname: string\n) => {\n\tconst route = resolveAbsoluteMobileRoute(manifest.routes, pathname);\n\tif (!route) {\n\t\tthrow new TypeError(`No embedded mobile page owns ${pathname}.`);\n\t}\n\tconst page = manifest.pages.find(\n\t\t(candidate) => candidate.pageId === route.pageId\n\t);\n\tif (!page) {\n\t\tthrow new TypeError(\n\t\t\t`Mobile route ${route.pattern} references missing page ${route.pageId}.`\n\t\t);\n\t}\n\n\treturn page;\n};\n\nconst canonicalBackendUrl = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpath: string\n) => {\n\tconst origin = new URL(manifest.productionOrigin);\n\tconst url = new URL(path, `${origin.origin}/`);\n\tif (url.origin !== origin.origin) {\n\t\tthrow new TypeError('Mobile transport cannot leave productionOrigin.');\n\t}\n\turl.hash = '';\n\n\treturn url;\n};\n\nexport const createAbsoluteMobilePageRequest = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpath: string,\n\toptions: AbsoluteMobileTransportOptions = {}\n) => {\n\tconst url = canonicalBackendUrl(manifest, path);\n\tconst page = pageForPathname(manifest, url.pathname);\n\tconst headers = new Headers(options.headers);\n\theaders.set('accept', ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.appBuild, manifest.appBuild);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.pageBundle, page.bundleHash);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.pageContracts, page.contract);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.pageId, page.pageId);\n\theaders.set(\n\t\tMOBILE_PAGE_REQUEST_HEADERS.protocol,\n\t\tString(ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION)\n\t);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.runtime, manifest.runtime);\n\n\treturn new Request(url, { headers, method: 'GET' });\n};\n\nexport const fetchAbsoluteMobilePage = async (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpath: string,\n\toptions: AbsoluteMobileTransportOptions = {}\n) => {\n\tconst request = createAbsoluteMobilePageRequest(manifest, path, options);\n\tconst response = await (options.fetch ?? globalThis.fetch)(request);\n\tconst value: unknown = await response.json();\n\n\treturn value;\n};\n\nexport const navigateAbsoluteMobilePage = async (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpath: string,\n\toptions: AbsoluteMobileTransportOptions &\n\t\tAbsoluteMobilePageActivationOptions\n) => {\n\tconst envelope = await fetchAbsoluteMobilePage(manifest, path, options);\n\n\treturn activateAbsoluteMobilePage(envelope, options);\n};\n\nexport const resolveAbsoluteMobileDeepLink = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tvalue: string\n) => {\n\tconst url = new URL(value);\n\tif (url.username || url.password) {\n\t\tthrow new TypeError('Mobile deep links cannot contain credentials.');\n\t}\n\tconst isHttpsHost =\n\t\turl.protocol === 'https:' &&\n\t\tmanifest.deepLinkHosts.includes(url.hostname.toLowerCase());\n\tconst isCustomScheme =\n\t\tmanifest.deepLinkScheme !== undefined &&\n\t\turl.protocol === `${manifest.deepLinkScheme}:`;\n\tif (!isHttpsHost && !isCustomScheme) {\n\t\tthrow new TypeError(\n\t\t\t'Mobile deep link is outside the configured app URLs.'\n\t\t);\n\t}\n\n\treturn `${url.pathname || '/'}${url.search}${url.hash}`;\n};\n",
31
+ "import {\n\tABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\ttype AbsoluteMobilePageEnvelope,\n\ttype AbsoluteMobilePageFramework,\n\ttype AbsoluteMobilePageResult,\n\ttype AbsoluteMobileUpgradeReason,\n\ttype AbsoluteMobileUpgradeRequiredResult\n} from './pageProtocol';\n\ntype AbsoluteMobileClientTarget = {\n\t__ABSOLUTE_PAGE_DISPOSE__?: () => Promise<void> | void;\n\t__ABSOLUTE_PAGE_READY__?: Promise<unknown>;\n\t__ABSOLUTE_PAGE_RENDER_MODE__?: 'client' | 'hydrate';\n\t__ABS_ANGULAR_REQUEST_CONTEXT__?: Record<string, unknown>;\n\t__INITIAL_PROPS__?: Record<string, unknown>;\n};\n\nexport type AbsoluteMobilePageLoader = (input: {\n\tcontract: string;\n\tpageId: string;\n}) => Promise<unknown>;\n\nexport type AbsoluteMobilePageActivation =\n\t| {\n\t\t\tkind: 'rendered';\n\t\t\tcontract: string;\n\t\t\tpageId: string;\n\t }\n\t| AbsoluteMobileUpgradeRequiredResult;\n\nexport type AbsoluteMobilePageActivationOptions = {\n\tloadPage: AbsoluteMobilePageLoader;\n\ttarget?: AbsoluteMobileClientTarget;\n};\n\nexport class AbsoluteMobilePageProtocolError extends Error {\n\treadonly code:\n\t\t| 'invalid-envelope'\n\t\t| 'invalid-props'\n\t\t| 'server-error'\n\t\t| 'server-rejected-request';\n\n\tconstructor(\n\t\tcode: AbsoluteMobilePageProtocolError['code'],\n\t\tmessage: string\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'AbsoluteMobilePageProtocolError';\n\t\tthis.code = code;\n\t}\n}\n\nexport const disposeAbsoluteMobilePage = async (\n\ttarget: AbsoluteMobileClientTarget = window\n) => {\n\tconst dispose = target.__ABSOLUTE_PAGE_DISPOSE__;\n\ttarget.__ABSOLUTE_PAGE_DISPOSE__ = undefined;\n\ttarget.__ABSOLUTE_PAGE_READY__ = undefined;\n\tif (dispose) await dispose();\n};\n\nconst frameworks = new Set<string>([\n\t'angular',\n\t'ember',\n\t'html',\n\t'htmx',\n\t'react',\n\t'svelte',\n\t'vue'\n]);\nconst upgradeReasons = new Set<string>([\n\t'app-release',\n\t'page-contract',\n\t'protocol',\n\t'runtime'\n]);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst isFramework = (value: unknown): value is AbsoluteMobilePageFramework =>\n\ttypeof value === 'string' && frameworks.has(value);\n\nconst isUpgradeReason = (\n\tvalue: unknown\n): value is AbsoluteMobileUpgradeReason =>\n\ttypeof value === 'string' && upgradeReasons.has(value);\n\nconst parsePageResult = (\n\tvalue: Record<string, unknown>\n): AbsoluteMobilePageResult => {\n\tif (\n\t\ttypeof value.contract !== 'string' ||\n\t\t!isFramework(value.framework) ||\n\t\ttypeof value.pageId !== 'string' ||\n\t\ttypeof value.status !== 'number'\n\t) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t'The mobile page response is missing required page metadata.'\n\t\t);\n\t}\n\tif (!isRecord(value.props)) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-props',\n\t\t\t'The mobile page response must contain an object props value.'\n\t\t);\n\t}\n\n\treturn {\n\t\tcontract: value.contract,\n\t\tframework: value.framework,\n\t\tkind: 'page',\n\t\tpageId: value.pageId,\n\t\tprops: value.props,\n\t\tstatus: value.status\n\t};\n};\n\nconst parseUpgradeResult = (\n\tvalue: Record<string, unknown>\n): AbsoluteMobileUpgradeRequiredResult => {\n\tif (typeof value.pageId !== 'string' || !isUpgradeReason(value.reason)) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t'The update response is missing its page or reason.'\n\t\t);\n\t}\n\n\treturn {\n\t\tkind: 'upgrade-required',\n\t\tpageId: value.pageId,\n\t\treason: value.reason,\n\t\tsupportedContracts: Array.isArray(value.supportedContracts)\n\t\t\t? value.supportedContracts.filter(\n\t\t\t\t\t(contract): contract is string =>\n\t\t\t\t\t\ttypeof contract === 'string'\n\t\t\t\t)\n\t\t\t: undefined,\n\t\tsupportedRuntimes: Array.isArray(value.supportedRuntimes)\n\t\t\t? value.supportedRuntimes.filter(\n\t\t\t\t\t(runtime): runtime is string => typeof runtime === 'string'\n\t\t\t\t)\n\t\t\t: undefined\n\t};\n};\n\nexport const activateAbsoluteMobilePage = async (\n\tvalue: unknown,\n\toptions: AbsoluteMobilePageActivationOptions\n) => {\n\tconst envelope = parseAbsoluteMobilePageEnvelope(value);\n\tif (envelope.response.kind === 'upgrade-required') {\n\t\treturn envelope.response;\n\t}\n\tif (envelope.response.kind !== 'page') {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t'Expected a renderable mobile page response.'\n\t\t);\n\t}\n\n\tconst target: AbsoluteMobileClientTarget = options.target ?? window;\n\tawait disposeAbsoluteMobilePage(target);\n\ttarget.__INITIAL_PROPS__ = envelope.response.props;\n\ttarget.__ABS_ANGULAR_REQUEST_CONTEXT__ = envelope.response.props;\n\ttarget.__ABSOLUTE_PAGE_RENDER_MODE__ = 'client';\n\tawait options.loadPage({\n\t\tcontract: envelope.response.contract,\n\t\tpageId: envelope.response.pageId\n\t});\n\tif (target.__ABSOLUTE_PAGE_READY__) {\n\t\tawait target.__ABSOLUTE_PAGE_READY__;\n\t}\n\n\treturn {\n\t\tcontract: envelope.response.contract,\n\t\tkind: 'rendered',\n\t\tpageId: envelope.response.pageId\n\t} satisfies AbsoluteMobilePageActivation;\n};\n\nexport const parseAbsoluteMobilePageEnvelope = (value: unknown) => {\n\tif (!isRecord(value) || !isRecord(value.response)) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t'The server did not return an AbsoluteJS mobile page envelope.'\n\t\t);\n\t}\n\tif (value.protocol !== ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION) {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'invalid-envelope',\n\t\t\t`Unsupported mobile page protocol ${String(value.protocol)}.`\n\t\t);\n\t}\n\n\tconst { kind } = value.response;\n\tif (kind === 'page') {\n\t\treturn {\n\t\t\tprotocol: ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\t\t\tresponse: parsePageResult(value.response)\n\t\t} satisfies AbsoluteMobilePageEnvelope;\n\t}\n\tif (kind === 'upgrade-required') {\n\t\treturn {\n\t\t\tprotocol: ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\t\t\tresponse: parseUpgradeResult(value.response)\n\t\t} satisfies AbsoluteMobilePageEnvelope;\n\t}\n\tif (kind === 'invalid-request') {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'server-rejected-request',\n\t\t\ttypeof value.response.message === 'string'\n\t\t\t\t? value.response.message\n\t\t\t\t: 'The server rejected the mobile page request.'\n\t\t);\n\t}\n\tif (kind === 'error') {\n\t\tthrow new AbsoluteMobilePageProtocolError(\n\t\t\t'server-error',\n\t\t\t'The server could not create a compatible mobile page representation.'\n\t\t);\n\t}\n\n\tthrow new AbsoluteMobilePageProtocolError(\n\t\t'invalid-envelope',\n\t\t`Unknown mobile page response kind ${String(kind)}.`\n\t);\n};\n",
32
+ "import {\n\tactivateAbsoluteMobilePage,\n\ttype AbsoluteMobilePageActivationOptions\n} from './client';\nimport {\n\tABSOLUTE_MOBILE_PAGE_MEDIA_TYPE,\n\tABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,\n\tMOBILE_PAGE_REQUEST_HEADERS\n} from './pageProtocol';\nimport type {\n\tAbsoluteMobileCompatibilityPage,\n\tAbsoluteMobileCompatibilityRoute\n} from './releaseArtifact';\nimport { resolveAbsoluteMobileRoute } from './routeMatcher';\nimport type { AbsoluteMobileAuthManifest } from './nativeAuth';\n\nexport const ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT = 1 as const;\n\nexport type AbsoluteMobileFetch = (\n\tinput: RequestInfo | URL,\n\tinit?: RequestInit\n) => Promise<Response>;\n\nexport type AbsoluteMobileClientPage = AbsoluteMobileCompatibilityPage & {\n\tlocalBundlePath: string;\n\tlocalStylePath?: string;\n};\n\nexport type AbsoluteMobileClientManifest = {\n\tauth?: AbsoluteMobileAuthManifest;\n\tappBuild: string;\n\tappId: string;\n\tappName: string;\n\tdeepLinkHosts: string[];\n\tdeepLinkScheme?: string;\n\tentry: string;\n\tformat: typeof ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT;\n\tpages: AbsoluteMobileClientPage[];\n\tproductionOrigin: string;\n\troutes: AbsoluteMobileCompatibilityRoute[];\n\truntime: string;\n\tsync?: { socketTickets: true };\n};\n\nexport type AbsoluteMobileTransportOptions = {\n\tfetch?: AbsoluteMobileFetch;\n\theaders?: HeadersInit;\n};\n\nconst pageForPathname = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpathname: string\n) => {\n\tconst route = resolveAbsoluteMobileRoute(manifest.routes, pathname);\n\tif (!route) {\n\t\tthrow new TypeError(`No embedded mobile page owns ${pathname}.`);\n\t}\n\tconst page = manifest.pages.find(\n\t\t(candidate) => candidate.pageId === route.pageId\n\t);\n\tif (!page) {\n\t\tthrow new TypeError(\n\t\t\t`Mobile route ${route.pattern} references missing page ${route.pageId}.`\n\t\t);\n\t}\n\n\treturn page;\n};\n\nconst canonicalBackendUrl = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpath: string\n) => {\n\tconst origin = new URL(manifest.productionOrigin);\n\tconst url = new URL(path, `${origin.origin}/`);\n\tif (url.origin !== origin.origin) {\n\t\tthrow new TypeError('Mobile transport cannot leave productionOrigin.');\n\t}\n\turl.hash = '';\n\n\treturn url;\n};\n\nexport const createAbsoluteMobilePageRequest = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpath: string,\n\toptions: AbsoluteMobileTransportOptions = {}\n) => {\n\tconst url = canonicalBackendUrl(manifest, path);\n\tconst page = pageForPathname(manifest, url.pathname);\n\tconst headers = new Headers(options.headers);\n\theaders.set('accept', ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.appBuild, manifest.appBuild);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.pageBundle, page.bundleHash);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.pageContracts, page.contract);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.pageId, page.pageId);\n\theaders.set(\n\t\tMOBILE_PAGE_REQUEST_HEADERS.protocol,\n\t\tString(ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION)\n\t);\n\theaders.set(MOBILE_PAGE_REQUEST_HEADERS.runtime, manifest.runtime);\n\n\treturn new Request(url, { headers, method: 'GET' });\n};\n\nexport const fetchAbsoluteMobilePage = async (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpath: string,\n\toptions: AbsoluteMobileTransportOptions = {}\n) => {\n\tconst request = createAbsoluteMobilePageRequest(manifest, path, options);\n\tconst response = await (options.fetch ?? globalThis.fetch)(request);\n\tconst value: unknown = await response.json();\n\n\treturn value;\n};\n\nexport const navigateAbsoluteMobilePage = async (\n\tmanifest: AbsoluteMobileClientManifest,\n\tpath: string,\n\toptions: AbsoluteMobileTransportOptions &\n\t\tAbsoluteMobilePageActivationOptions\n) => {\n\tconst envelope = await fetchAbsoluteMobilePage(manifest, path, options);\n\n\treturn activateAbsoluteMobilePage(envelope, options);\n};\n\nexport const resolveAbsoluteMobileDeepLink = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tvalue: string\n) => {\n\tconst url = new URL(value);\n\tif (url.username || url.password) {\n\t\tthrow new TypeError('Mobile deep links cannot contain credentials.');\n\t}\n\tconst isHttpsHost =\n\t\turl.protocol === 'https:' &&\n\t\tmanifest.deepLinkHosts.includes(url.hostname.toLowerCase());\n\tconst isCustomScheme =\n\t\tmanifest.deepLinkScheme !== undefined &&\n\t\turl.protocol === `${manifest.deepLinkScheme}:`;\n\tif (!isHttpsHost && !isCustomScheme) {\n\t\tthrow new TypeError(\n\t\t\t'Mobile deep link is outside the configured app URLs.'\n\t\t);\n\t}\n\n\treturn `${url.pathname || '/'}${url.search}${url.hash}`;\n};\n\nexport const resolveAbsoluteMobileNavigation = (\n\tmanifest: AbsoluteMobileClientManifest,\n\tvalue: string,\n\tlocalOrigin: string\n) => {\n\tconst url = new URL(value, `${localOrigin}/`);\n\tconst local = new URL(localOrigin);\n\tconst production = new URL(manifest.productionOrigin);\n\tconst matches = (candidate: URL, allowed: URL) =>\n\t\tcandidate.protocol === allowed.protocol &&\n\t\tcandidate.host === allowed.host;\n\tif (!matches(url, local) && !matches(url, production)) {\n\t\treturn undefined;\n\t}\n\n\treturn `${url.pathname}${url.search}${url.hash}`;\n};\n",
30
33
  "import { createHash } from 'node:crypto';\nimport {\n\taccess,\n\tmkdir,\n\tmkdtemp,\n\treadFile,\n\trename,\n\trm,\n\twriteFile\n} from 'node:fs/promises';\nimport { dirname, join, resolve as resolvePath } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport {\n\tverifyAbsoluteMobileCompatibilityProducer,\n\ttype AbsoluteMobileStoredCompatibilityRelease\n} from './artifactStore';\nimport type {\n\tAbsoluteMobileCompatibilityDispatcherOptions,\n\tAbsoluteMobileCompatibilityProducerHandler\n} from './compatibilityDispatcher';\nimport {\n\tparseAbsoluteMobileCompatibilityArtifact,\n\tretainAbsoluteMobileCompatibilityArtifacts,\n\ttype AbsoluteMobileCompatibilityArtifact\n} from './releaseArtifact';\n\nexport const ABSOLUTE_MOBILE_MATERIALIZED_BUNDLE_FORMAT = 1 as const;\n\nexport type AbsoluteMobileMaterializedBundleInput = {\n\tcurrentReleaseId: string;\n\treleases: readonly AbsoluteMobileStoredCompatibilityRelease[];\n\troot: string;\n};\n\nexport type AbsoluteMobileMaterializedBundleIndex = {\n\tbundleId: string;\n\tcurrentReleaseId: string;\n\tformat: typeof ABSOLUTE_MOBILE_MATERIALIZED_BUNDLE_FORMAT;\n\treleases: AbsoluteMobileCompatibilityArtifact[];\n};\n\ntype CompatibilityModule = Record<string, unknown>;\ntype CompatibilityModuleLoader = (\n\tmodulePath: string\n) => Promise<CompatibilityModule>;\n\nconst CURRENT_BUNDLE_FILE = 'current.json';\nconst BUNDLES_DIRECTORY = 'bundles';\nconst ARTIFACT_FILE = 'artifact.json';\nconst BUNDLE_ID_PATTERN = /^amb_[a-f0-9]{64}$/;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst errorHasCode = (error: unknown, code: string) =>\n\ttypeof error === 'object' &&\n\terror !== null &&\n\tReflect.get(error, 'code') === code;\n\nconst bundleIdFor = (\n\tcurrentReleaseId: string,\n\treleases: readonly AbsoluteMobileCompatibilityArtifact[]\n) => {\n\tconst identity = JSON.stringify({\n\t\tcurrentReleaseId,\n\t\treleases: releases.map(({ releaseId }) => releaseId)\n\t});\n\n\treturn `amb_${createHash('sha256').update(identity).digest('hex')}`;\n};\n\nconst parseBundleIndex = (value: unknown) => {\n\tif (\n\t\t!isRecord(value) ||\n\t\tvalue.format !== ABSOLUTE_MOBILE_MATERIALIZED_BUNDLE_FORMAT ||\n\t\ttypeof value.bundleId !== 'string' ||\n\t\t!BUNDLE_ID_PATTERN.test(value.bundleId) ||\n\t\ttypeof value.currentReleaseId !== 'string' ||\n\t\t!Array.isArray(value.releases)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Invalid materialized mobile compatibility bundle.'\n\t\t);\n\t}\n\tconst releases = value.releases.map(\n\t\tparseAbsoluteMobileCompatibilityArtifact\n\t);\n\tconst retained = retainAbsoluteMobileCompatibilityArtifacts(releases);\n\tif (\n\t\tretained.length !== releases.length ||\n\t\tretained.some(\n\t\t\t({ releaseId }, index) => releaseId !== releases[index]?.releaseId\n\t\t)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Materialized mobile bundle releases are not a retained generation window.'\n\t\t);\n\t}\n\tconst expectedBundleId = bundleIdFor(value.currentReleaseId, releases);\n\tif (value.bundleId !== expectedBundleId) {\n\t\tthrow new TypeError('Materialized mobile bundle integrity failed.');\n\t}\n\tif (releases[0]?.releaseId !== value.currentReleaseId) {\n\t\tthrow new TypeError(\n\t\t\t'Materialized mobile bundle current release is not its newest generation.'\n\t\t);\n\t}\n\n\treturn {\n\t\tbundleId: value.bundleId,\n\t\tcurrentReleaseId: value.currentReleaseId,\n\t\tformat: ABSOLUTE_MOBILE_MATERIALIZED_BUNDLE_FORMAT,\n\t\treleases\n\t} satisfies AbsoluteMobileMaterializedBundleIndex;\n};\n\nconst writeRelease = async (\n\troot: string,\n\trelease: AbsoluteMobileStoredCompatibilityRelease\n) => {\n\tconst directory = join(root, release.artifact.releaseId);\n\tconst producerPath = join(directory, release.artifact.producer.module);\n\tawait mkdir(dirname(producerPath), { recursive: true });\n\tawait Promise.all([\n\t\twriteFile(\n\t\t\tjoin(directory, ARTIFACT_FILE),\n\t\t\t`${JSON.stringify(release.artifact, null, '\\t')}\\n`\n\t\t),\n\t\twriteFile(\n\t\t\tproducerPath,\n\t\t\tnew Uint8Array(await release.producer.arrayBuffer())\n\t\t)\n\t]);\n};\n\nconst installImmutableBundle = async (\n\tbundlesRoot: string,\n\tbundleId: string,\n\treleases: readonly AbsoluteMobileStoredCompatibilityRelease[]\n) => {\n\tconst destination = join(bundlesRoot, bundleId);\n\ttry {\n\t\tawait access(destination);\n\n\t\treturn destination;\n\t} catch (error) {\n\t\tif (!errorHasCode(error, 'ENOENT')) throw error;\n\t}\n\n\tconst staging = await mkdtemp(join(bundlesRoot, '.stage-'));\n\ttry {\n\t\tawait Promise.all(\n\t\t\treleases.map((release) => writeRelease(staging, release))\n\t\t);\n\t\tawait rename(staging, destination);\n\t} catch (error) {\n\t\tawait rm(staging, { force: true, recursive: true });\n\t\tif (errorHasCode(error, 'EEXIST') || errorHasCode(error, 'ENOTEMPTY')) {\n\t\t\treturn destination;\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\treturn destination;\n};\n\nconst readCompatibilityModule: CompatibilityModuleLoader = (modulePath) =>\n\timport(pathToFileURL(modulePath).href);\n\nconst resolveProducerHandler = (\n\tloaded: CompatibilityModule,\n\texportName: string\n) => {\n\tconst value = loaded[exportName];\n\tif (!isRecord(value) || typeof value.handle !== 'function') {\n\t\tthrow new TypeError(\n\t\t\t`Compatibility producer export ${exportName} must expose handle(request).`\n\t\t);\n\t}\n\n\tconst { handle } = value;\n\n\treturn {\n\t\thandle: async (request) => {\n\t\t\tconst response: unknown = await Reflect.apply(handle, value, [\n\t\t\t\trequest\n\t\t\t]);\n\t\t\tif (!(response instanceof Response)) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Compatibility producer ${exportName} returned a non-Response value.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn response;\n\t\t}\n\t} satisfies AbsoluteMobileCompatibilityProducerHandler;\n};\n\nexport const loadAbsoluteMobileMaterializedBundle = async (\n\troot: string\n): Promise<AbsoluteMobileCompatibilityDispatcherOptions> => {\n\tconst resolvedRoot = resolvePath(root);\n\tconst serialized = await readFile(\n\t\tjoin(resolvedRoot, CURRENT_BUNDLE_FILE),\n\t\t'utf8'\n\t);\n\tconst parsed: unknown = JSON.parse(serialized);\n\tconst index = parseBundleIndex(parsed);\n\tconst bundleRoot = join(resolvedRoot, BUNDLES_DIRECTORY, index.bundleId);\n\n\treturn {\n\t\tartifacts: index.releases,\n\t\tcurrentReleaseId: index.currentReleaseId,\n\t\tloadProducer: async (artifact) => {\n\t\t\tconst modulePath = join(\n\t\t\t\tbundleRoot,\n\t\t\t\tartifact.releaseId,\n\t\t\t\tartifact.producer.module\n\t\t\t);\n\t\t\tawait verifyAbsoluteMobileCompatibilityProducer({\n\t\t\t\tartifact,\n\t\t\t\tproducer: Bun.file(modulePath)\n\t\t\t});\n\t\t\tconst loaded = await readCompatibilityModule(modulePath);\n\n\t\t\treturn resolveProducerHandler(loaded, artifact.producer.exportName);\n\t\t}\n\t};\n};\n\nexport const materializeAbsoluteMobileCompatibilityBundle = async (\n\tinput: AbsoluteMobileMaterializedBundleInput\n) => {\n\tconst releases = await Promise.all(\n\t\tinput.releases.map((release) =>\n\t\t\tverifyAbsoluteMobileCompatibilityProducer(release)\n\t\t)\n\t);\n\tconst artifacts = retainAbsoluteMobileCompatibilityArtifacts(\n\t\treleases.map(({ artifact }) => artifact)\n\t);\n\tif (artifacts.length !== releases.length) {\n\t\tthrow new TypeError(\n\t\t\t'Materialization input must already contain only retained releases.'\n\t\t);\n\t}\n\tif (artifacts[0]?.releaseId !== input.currentReleaseId) {\n\t\tthrow new TypeError(\n\t\t\t'Materialization current release must be the newest generation.'\n\t\t);\n\t}\n\tconst orderedReleases = artifacts.map((artifact) => {\n\t\tconst release = releases.find(\n\t\t\t(candidate) => candidate.artifact.releaseId === artifact.releaseId\n\t\t);\n\t\tif (!release) {\n\t\t\tthrow new TypeError('Materialization input is missing a producer.');\n\t\t}\n\n\t\treturn release;\n\t});\n\tconst root = resolvePath(input.root);\n\tconst bundlesRoot = join(root, BUNDLES_DIRECTORY);\n\tawait mkdir(bundlesRoot, { recursive: true });\n\tconst bundleId = bundleIdFor(input.currentReleaseId, artifacts);\n\tawait installImmutableBundle(bundlesRoot, bundleId, orderedReleases);\n\tconst index = {\n\t\tbundleId,\n\t\tcurrentReleaseId: input.currentReleaseId,\n\t\tformat: ABSOLUTE_MOBILE_MATERIALIZED_BUNDLE_FORMAT,\n\t\treleases: artifacts\n\t} satisfies AbsoluteMobileMaterializedBundleIndex;\n\tconst pointerPath = join(root, CURRENT_BUNDLE_FILE);\n\tconst temporaryPointerPath = join(\n\t\troot,\n\t\t`.current-${crypto.randomUUID()}.json`\n\t);\n\tawait writeFile(\n\t\ttemporaryPointerPath,\n\t\t`${JSON.stringify(index, null, '\\t')}\\n`,\n\t\t{ flag: 'wx' }\n\t);\n\tawait rename(temporaryPointerPath, pointerPath);\n\n\treturn index;\n};\n\nexport const readAbsoluteMobileMaterializedReleases = async (root: string) => {\n\tconst resolvedRoot = resolvePath(root);\n\ttry {\n\t\tconst serialized = await readFile(\n\t\t\tjoin(resolvedRoot, CURRENT_BUNDLE_FILE),\n\t\t\t'utf8'\n\t\t);\n\t\tconst parsed: unknown = JSON.parse(serialized);\n\t\tconst index = parseBundleIndex(parsed);\n\t\tconst bundleRoot = join(\n\t\t\tresolvedRoot,\n\t\t\tBUNDLES_DIRECTORY,\n\t\t\tindex.bundleId\n\t\t);\n\n\t\treturn Promise.all(\n\t\t\tindex.releases.map(async (artifact) => {\n\t\t\t\tconst producer = Bun.file(\n\t\t\t\t\tjoin(\n\t\t\t\t\t\tbundleRoot,\n\t\t\t\t\t\tartifact.releaseId,\n\t\t\t\t\t\tartifact.producer.module\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tawait verifyAbsoluteMobileCompatibilityProducer({\n\t\t\t\t\tartifact,\n\t\t\t\t\tproducer\n\t\t\t\t});\n\n\t\t\t\treturn { artifact, producer };\n\t\t\t})\n\t\t);\n\t} catch (error) {\n\t\tif (errorHasCode(error, 'ENOENT')) return [];\n\n\t\tthrow error;\n\t}\n};\n",
31
- "import { Elysia } from 'elysia';\nimport {\n\tcreateAbsoluteMobileInvalidRequestResponse,\n\tcreateAbsoluteMobilePageErrorResponse,\n\tcreateAbsoluteMobileUpgradeResponse,\n\tparseAbsoluteMobilePageRequest\n} from './pageProtocol';\nimport {\n\tresolveAbsoluteMobileCompatibilityRelease,\n\tretainAbsoluteMobileCompatibilityArtifacts,\n\ttype AbsoluteMobileCompatibilityArtifact\n} from './releaseArtifact';\nimport {\n\tgetCurrentAbsoluteMobileProducerContext,\n\trunWithAbsoluteMobileProducer\n} from './producerContext';\nimport { matchesAbsoluteMobileRoutePattern } from './routeMatcher';\n\nexport type AbsoluteMobileCompatibilityProducerHandler = {\n\thandle: (request: Request) => Promise<Response> | Response;\n};\n\nexport type AbsoluteMobileCompatibilityProducerLoader = (\n\tartifact: AbsoluteMobileCompatibilityArtifact\n) => Promise<AbsoluteMobileCompatibilityProducerHandler>;\n\nexport type AbsoluteMobileCompatibilityDispatcherOptions = {\n\tartifacts: readonly AbsoluteMobileCompatibilityArtifact[];\n\tcurrentReleaseId: string;\n\tloadProducer: AbsoluteMobileCompatibilityProducerLoader;\n};\n\nconst artifactOwnsRequest = (\n\tartifact: AbsoluteMobileCompatibilityArtifact,\n\tpageId: string,\n\trequest: Request\n) => {\n\tconst { pathname } = new URL(request.url);\n\n\treturn artifact.routes.some(\n\t\t(route) =>\n\t\t\troute.pageId === pageId &&\n\t\t\troute.method === request.method &&\n\t\t\tmatchesAbsoluteMobileRoutePattern(route.pattern, pathname)\n\t);\n};\n\nconst createProducerResolver = (\n\tloadProducer: AbsoluteMobileCompatibilityProducerLoader\n) => {\n\tconst producers = new Map<\n\t\tstring,\n\t\tPromise<AbsoluteMobileCompatibilityProducerHandler>\n\t>();\n\n\treturn (artifact: AbsoluteMobileCompatibilityArtifact) => {\n\t\tconst cached = producers.get(artifact.releaseId);\n\t\tif (cached) return cached;\n\n\t\tconst loading = loadProducer(artifact).catch((error: unknown) => {\n\t\t\tproducers.delete(artifact.releaseId);\n\n\t\t\tthrow error;\n\t\t});\n\t\tproducers.set(artifact.releaseId, loading);\n\n\t\treturn loading;\n\t};\n};\n\nexport const createAbsoluteMobileCompatibilityDispatcher = (\n\toptions: AbsoluteMobileCompatibilityDispatcherOptions\n) => {\n\tconst artifacts = retainAbsoluteMobileCompatibilityArtifacts(\n\t\toptions.artifacts\n\t);\n\tif (\n\t\t!artifacts.some(\n\t\t\t({ releaseId }) => releaseId === options.currentReleaseId\n\t\t)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'currentReleaseId must identify a retained compatibility artifact.'\n\t\t);\n\t}\n\tconst resolveProducer = createProducerResolver(options.loadProducer);\n\n\treturn new Elysia({ name: 'absolutejs-mobile-compatibility-dispatcher' })\n\t\t.request(async ({ request }) => {\n\t\t\tif (getCurrentAbsoluteMobileProducerContext()) return undefined;\n\t\t\tconst parsed = parseAbsoluteMobilePageRequest(request);\n\t\t\tif (parsed.kind !== 'mobile') return undefined;\n\n\t\t\tconst resolved = resolveAbsoluteMobileCompatibilityRelease(\n\t\t\t\tparsed.client,\n\t\t\t\tartifacts\n\t\t\t);\n\t\t\tif (resolved.kind === 'upgrade-required') {\n\t\t\t\treturn createAbsoluteMobileUpgradeResponse(resolved.result);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!artifactOwnsRequest(\n\t\t\t\t\tresolved.artifact,\n\t\t\t\t\tparsed.client.pageId,\n\t\t\t\t\trequest\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn createAbsoluteMobileInvalidRequestResponse(\n\t\t\t\t\t'The requested URL is not assigned to this mobile page.'\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (resolved.artifact.releaseId === options.currentReleaseId) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst producer = await resolveProducer(resolved.artifact);\n\n\t\t\t\treturn runWithAbsoluteMobileProducer(\n\t\t\t\t\t{\n\t\t\t\t\t\tpage: resolved.page,\n\t\t\t\t\t\treleaseId: resolved.artifact.releaseId\n\t\t\t\t\t},\n\t\t\t\t\t() => producer.handle(request)\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`[Mobile] Failed to load retained producer ${resolved.artifact.releaseId}:`,\n\t\t\t\t\terror\n\t\t\t\t);\n\n\t\t\t\treturn createAbsoluteMobilePageErrorResponse(\n\t\t\t\t\tparsed.client.pageId\n\t\t\t\t);\n\t\t\t}\n\t\t})\n\t\t.as('global');\n};\n",
34
+ "import { readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\n\nexport const ABSOLUTE_AUTH_PACKAGE = '@absolutejs/auth' as const;\nexport const ABSOLUTE_NATIVE_AUTH_CLIENTS_ENV =\n\t'ABSOLUTE_AUTH_NATIVE_CLIENTS' as const;\nexport const ABSOLUTE_NATIVE_AUTH_SCOPES = ['openid', 'profile'] as const;\nexport const ABSOLUTE_SYNC_PACKAGE = '@absolutejs/sync' as const;\n\nexport type AbsoluteMobileAuthManifest = {\n\tclientId: string;\n\tissuer: string;\n\tredirectUri: string;\n\tscopes: string[];\n};\n\nconst readPackageManifest = (projectRoot: string) => {\n\ttry {\n\t\treturn JSON.parse(\n\t\t\treadFileSync(join(projectRoot, 'package.json'), 'utf8')\n\t\t);\n\t} catch {\n\t\treturn undefined;\n\t}\n};\n\nconst packageManifestHas = (manifest: unknown, packageName: string) => {\n\tif (typeof manifest !== 'object' || manifest === null) return false;\n\n\treturn [\n\t\tReflect.get(manifest, 'dependencies'),\n\t\tReflect.get(manifest, 'devDependencies'),\n\t\tReflect.get(manifest, 'optionalDependencies'),\n\t\tReflect.get(manifest, 'peerDependencies')\n\t].some(\n\t\t(dependencies) =>\n\t\t\ttypeof dependencies === 'object' &&\n\t\t\tdependencies !== null &&\n\t\t\tObject.hasOwn(dependencies, packageName)\n\t);\n};\n\nexport const createAbsoluteMobileAuthManifest = (\n\tconfig: NormalizedAbsoluteMobileConfig\n): AbsoluteMobileAuthManifest => {\n\tconst scheme = config.deepLinkScheme ?? config.appId.toLowerCase();\n\n\treturn {\n\t\tclientId: `absolutejs-native:${config.appId}`,\n\t\tissuer: config.productionOrigin,\n\t\tredirectUri: `${scheme}://auth/callback`,\n\t\tscopes: [...ABSOLUTE_NATIVE_AUTH_SCOPES]\n\t};\n};\n\nexport const installAbsoluteMobileAuthEnvironment = (\n\tprojectRoot: string,\n\tconfig: NormalizedAbsoluteMobileConfig\n) => {\n\tconst auth = resolveAbsoluteMobileAuthManifest(projectRoot, config);\n\tconst serialized = serializeAbsoluteMobileAuthEnvironment(config, auth);\n\tif (serialized === undefined)\n\t\tdelete process.env[ABSOLUTE_NATIVE_AUTH_CLIENTS_ENV];\n\telse process.env[ABSOLUTE_NATIVE_AUTH_CLIENTS_ENV] = serialized;\n\n\treturn auth;\n};\n\nexport const projectUsesAbsoluteAuth = (projectRoot: string) =>\n\tpackageManifestHas(readPackageManifest(projectRoot), ABSOLUTE_AUTH_PACKAGE);\n\nexport const projectUsesAbsoluteSync = (projectRoot: string) =>\n\tpackageManifestHas(readPackageManifest(projectRoot), ABSOLUTE_SYNC_PACKAGE);\n\nexport const resolveAbsoluteMobileAuthManifest = (\n\tprojectRoot: string,\n\tconfig: NormalizedAbsoluteMobileConfig\n) =>\n\tprojectUsesAbsoluteAuth(projectRoot)\n\t\t? createAbsoluteMobileAuthManifest(config)\n\t\t: undefined;\n\nexport const serializeAbsoluteMobileAuthEnvironment = (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\tauth: AbsoluteMobileAuthManifest | undefined\n) =>\n\tauth === undefined\n\t\t? undefined\n\t\t: JSON.stringify([\n\t\t\t\t{\n\t\t\t\t\t...auth,\n\t\t\t\t\tname: `${config.appName} native app`\n\t\t\t\t}\n\t\t\t]);\n",
35
+ "import { Elysia } from 'elysia';\nimport {\n\tcreateAbsoluteMobileInvalidRequestResponse,\n\tcreateAbsoluteMobilePageErrorResponse,\n\tcreateAbsoluteMobileUpgradeResponse,\n\tMOBILE_PAGE_REQUEST_HEADERS,\n\tparseAbsoluteMobilePageRequest\n} from './pageProtocol';\nimport {\n\tresolveAbsoluteMobileCompatibilityRelease,\n\tretainAbsoluteMobileCompatibilityArtifacts,\n\ttype AbsoluteMobileCompatibilityArtifact\n} from './releaseArtifact';\nimport {\n\tgetCurrentAbsoluteMobileProducerContext,\n\trunWithAbsoluteMobileProducer\n} from './producerContext';\nimport { matchesAbsoluteMobileRoutePattern } from './routeMatcher';\n\nexport type AbsoluteMobileCompatibilityProducerHandler = {\n\thandle: (request: Request) => Promise<Response> | Response;\n};\n\nexport type AbsoluteMobileCompatibilityProducerLoader = (\n\tartifact: AbsoluteMobileCompatibilityArtifact\n) => Promise<AbsoluteMobileCompatibilityProducerHandler>;\n\nexport type AbsoluteMobileCompatibilityDispatcherOptions = {\n\tartifacts: readonly AbsoluteMobileCompatibilityArtifact[];\n\tcurrentReleaseId: string;\n\tloadProducer: AbsoluteMobileCompatibilityProducerLoader;\n};\n\nconst MOBILE_WEBVIEW_ORIGINS = new Set([\n\t'capacitor://localhost',\n\t'http://localhost',\n\t'https://localhost'\n]);\nconst MOBILE_REQUEST_HEADER_NAMES = Object.values(MOBILE_PAGE_REQUEST_HEADERS);\nconst MOBILE_CORS_ALLOW_HEADERS = [\n\t'accept',\n\t'content-type',\n\t'authorization',\n\t'hx-current-url',\n\t'hx-request',\n\t'hx-target',\n\t'hx-trigger',\n\t'hx-trigger-name',\n\t...MOBILE_REQUEST_HEADER_NAMES\n].join(', ');\nconst MOBILE_CORS_METHODS = new Set([\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PUT'\n]);\n\nconst mobileWebViewOrigin = (request: Request) => {\n\tconst origin = request.headers.get('origin');\n\n\treturn origin && MOBILE_WEBVIEW_ORIGINS.has(origin) ? origin : undefined;\n};\n\nconst applyMobileCorsHeaders = (response: Response, origin: string) => {\n\tresponse.headers.set('access-control-allow-credentials', 'true');\n\tresponse.headers.set('access-control-allow-origin', origin);\n\tresponse.headers.append('vary', 'Origin');\n\n\treturn response;\n};\n\nconst mobilePreflightResponse = (request: Request) => {\n\tif (request.method !== 'OPTIONS') return undefined;\n\tconst origin = mobileWebViewOrigin(request);\n\tif (!origin) return undefined;\n\tconst requestedHeaders = request.headers.get(\n\t\t'access-control-request-headers'\n\t);\n\tconst requestedMethod =\n\t\trequest.headers.get('access-control-request-method')?.toUpperCase() ??\n\t\t'';\n\tif (!MOBILE_CORS_METHODS.has(requestedMethod)) return undefined;\n\n\treturn new Response(null, {\n\t\theaders: {\n\t\t\t'access-control-allow-credentials': 'true',\n\t\t\t'access-control-allow-headers':\n\t\t\t\trequestedHeaders || MOBILE_CORS_ALLOW_HEADERS,\n\t\t\t'access-control-allow-methods': [...MOBILE_CORS_METHODS].join(', '),\n\t\t\t'access-control-allow-origin': origin,\n\t\t\t'access-control-max-age': '600',\n\t\t\tvary: 'Origin, Access-Control-Request-Headers'\n\t\t},\n\t\tstatus: 204\n\t});\n};\n\nconst artifactOwnsRequest = (\n\tartifact: AbsoluteMobileCompatibilityArtifact,\n\tpageId: string,\n\trequest: Request\n) => {\n\tconst { pathname } = new URL(request.url);\n\n\treturn artifact.routes.some(\n\t\t(route) =>\n\t\t\troute.pageId === pageId &&\n\t\t\troute.method === request.method &&\n\t\t\tmatchesAbsoluteMobileRoutePattern(route.pattern, pathname)\n\t);\n};\n\nconst createProducerResolver = (\n\tloadProducer: AbsoluteMobileCompatibilityProducerLoader\n) => {\n\tconst producers = new Map<\n\t\tstring,\n\t\tPromise<AbsoluteMobileCompatibilityProducerHandler>\n\t>();\n\n\treturn (artifact: AbsoluteMobileCompatibilityArtifact) => {\n\t\tconst cached = producers.get(artifact.releaseId);\n\t\tif (cached) return cached;\n\n\t\tconst loading = loadProducer(artifact).catch((error: unknown) => {\n\t\t\tproducers.delete(artifact.releaseId);\n\n\t\t\tthrow error;\n\t\t});\n\t\tproducers.set(artifact.releaseId, loading);\n\n\t\treturn loading;\n\t};\n};\n\nexport const createAbsoluteMobileCompatibilityDispatcher = (\n\toptions: AbsoluteMobileCompatibilityDispatcherOptions\n) => {\n\tconst artifacts = retainAbsoluteMobileCompatibilityArtifacts(\n\t\toptions.artifacts\n\t);\n\tif (\n\t\t!artifacts.some(\n\t\t\t({ releaseId }) => releaseId === options.currentReleaseId\n\t\t)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'currentReleaseId must identify a retained compatibility artifact.'\n\t\t);\n\t}\n\tconst resolveProducer = createProducerResolver(options.loadProducer);\n\n\treturn new Elysia({ name: 'absolutejs-mobile-compatibility-dispatcher' })\n\t\t.request(async ({ request }) => {\n\t\t\tif (getCurrentAbsoluteMobileProducerContext()) return undefined;\n\t\t\tconst preflight = mobilePreflightResponse(request);\n\t\t\tif (preflight) return preflight;\n\t\t\tconst parsed = parseAbsoluteMobilePageRequest(request);\n\t\t\tif (parsed.kind !== 'mobile') return undefined;\n\n\t\t\tconst resolved = resolveAbsoluteMobileCompatibilityRelease(\n\t\t\t\tparsed.client,\n\t\t\t\tartifacts\n\t\t\t);\n\t\t\tif (resolved.kind === 'upgrade-required') {\n\t\t\t\treturn createAbsoluteMobileUpgradeResponse(resolved.result);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!artifactOwnsRequest(\n\t\t\t\t\tresolved.artifact,\n\t\t\t\t\tparsed.client.pageId,\n\t\t\t\t\trequest\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn createAbsoluteMobileInvalidRequestResponse(\n\t\t\t\t\t'The requested URL is not assigned to this mobile page.'\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (resolved.artifact.releaseId === options.currentReleaseId) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst producer = await resolveProducer(resolved.artifact);\n\n\t\t\t\treturn runWithAbsoluteMobileProducer(\n\t\t\t\t\t{\n\t\t\t\t\t\tpage: resolved.page,\n\t\t\t\t\t\treleaseId: resolved.artifact.releaseId\n\t\t\t\t\t},\n\t\t\t\t\t() => producer.handle(request)\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`[Mobile] Failed to load retained producer ${resolved.artifact.releaseId}:`,\n\t\t\t\t\terror\n\t\t\t\t);\n\n\t\t\t\treturn createAbsoluteMobilePageErrorResponse(\n\t\t\t\t\tparsed.client.pageId\n\t\t\t\t);\n\t\t\t}\n\t\t})\n\t\t.afterHandle('global', ({ request, responseValue }) => {\n\t\t\tconst origin = mobileWebViewOrigin(request);\n\t\t\tif (!origin || !(responseValue instanceof Response)) return;\n\n\t\t\tapplyMobileCorsHeaders(responseValue, origin);\n\t\t})\n\t\t.as('global');\n};\n",
32
36
  "import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n\tABSOLUTE_MOBILE_PRODUCER_STORAGE_KEY,\n\ttype AbsoluteMobileProducerContext\n} from './producerContextState';\n\nexport type { AbsoluteMobileProducerContext } from './producerContextState';\nexport { getCurrentAbsoluteMobileProducerContext } from './producerContextState';\n\ntype AbsoluteMobileProducerStorage =\n\tAsyncLocalStorage<AbsoluteMobileProducerContext>;\n\nconst isProducerStorage = (\n\tvalue: unknown\n): value is AbsoluteMobileProducerStorage =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t'getStore' in value &&\n\ttypeof value.getStore === 'function' &&\n\t'run' in value &&\n\ttypeof value.run === 'function';\n\nconst getProducerStorage = () => {\n\tconst value = Reflect.get(globalThis, ABSOLUTE_MOBILE_PRODUCER_STORAGE_KEY);\n\n\treturn isProducerStorage(value) ? value : undefined;\n};\n\nconst ensureProducerStorage = () => {\n\tconst existing = getProducerStorage();\n\tif (existing) return existing;\n\n\tconst storage = new AsyncLocalStorage<AbsoluteMobileProducerContext>();\n\tReflect.set(globalThis, ABSOLUTE_MOBILE_PRODUCER_STORAGE_KEY, storage);\n\n\treturn storage;\n};\n\nexport const runWithAbsoluteMobileProducer = <Result>(\n\tcontext: AbsoluteMobileProducerContext,\n\tcallback: () => Result\n) => ensureProducerStorage().run(context, callback);\n",
33
37
  "import { readFile, rename, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { MobilePlatform } from '../../types/build';\nimport type { NormalizedAbsoluteMobileConfig } from './config';\n\nconst START_MARKER = '<!-- absolutejs:deep-links:start -->';\nconst END_MARKER = '<!-- absolutejs:deep-links:end -->';\nconst IOS_ENTITLEMENTS = 'App/AbsoluteJS.entitlements';\nconst NOT_FOUND = -1;\n\nconst escapeXml = (value: string) =>\n\tvalue\n\t\t.replaceAll('&', '&amp;')\n\t\t.replaceAll('\"', '&quot;')\n\t\t.replaceAll(\"'\", '&apos;')\n\t\t.replaceAll('<', '&lt;')\n\t\t.replaceAll('>', '&gt;');\n\nconst writeChangedFile = async (path: string, source: string) => {\n\tconst current = await readFile(path, 'utf8');\n\tif (current === source) return false;\n\tconst temporary = `${path}.${crypto.randomUUID()}.tmp`;\n\tawait writeFile(temporary, source, { flag: 'wx' });\n\tawait rename(temporary, path);\n\n\treturn true;\n};\n\nconst replaceManagedRegion = (\n\tsource: string,\n\tregion: string,\n\tinsertAt: () => number\n) => {\n\tconst start = source.indexOf(START_MARKER);\n\tconst end = source.indexOf(END_MARKER);\n\tif (\n\t\t(start === NOT_FOUND) !== (end === NOT_FOUND) ||\n\t\t(start !== NOT_FOUND && end < start)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'AbsoluteJS deep-link ownership markers are malformed.'\n\t\t);\n\t}\n\tif (start !== NOT_FOUND) {\n\t\tconst lineStart = source.lastIndexOf('\\n', start) + 1;\n\t\tconst nextLine = source.indexOf('\\n', end + END_MARKER.length);\n\t\tconst lineEnd = nextLine === NOT_FOUND ? source.length : nextLine + 1;\n\n\t\treturn `${source.slice(0, lineStart)}${region}${source.slice(lineEnd)}`;\n\t}\n\tconst index = insertAt();\n\tif (index === NOT_FOUND) {\n\t\tthrow new TypeError(\n\t\t\t'Could not find a safe native project location for deep-link configuration.'\n\t\t);\n\t}\n\n\treturn `${source.slice(0, index)}${region}${source.slice(index)}`;\n};\n\nconst androidRegion = (config: NormalizedAbsoluteMobileConfig) => {\n\tconst hosts = config.deepLinkHosts\n\t\t.map(\n\t\t\t(host) =>\n\t\t\t\t` <data android:scheme=\"https\" android:host=\"${escapeXml(host)}\" />`\n\t\t)\n\t\t.join('\\n');\n\tconst customScheme = config.deepLinkScheme\n\t\t? `\\n\\n <intent-filter>\\n <action android:name=\"android.intent.action.VIEW\" />\\n <category android:name=\"android.intent.category.DEFAULT\" />\\n <category android:name=\"android.intent.category.BROWSABLE\" />\\n <data android:scheme=\"${escapeXml(config.deepLinkScheme)}\" />\\n </intent-filter>`\n\t\t: '';\n\n\treturn ` ${START_MARKER}\\n <intent-filter android:autoVerify=\"true\">\\n <action android:name=\"android.intent.action.VIEW\" />\\n <category android:name=\"android.intent.category.DEFAULT\" />\\n <category android:name=\"android.intent.category.BROWSABLE\" />\\n${hosts}\\n </intent-filter>${customScheme}\\n ${END_MARKER}\\n`;\n};\n\nconst configureAndroid = async (config: NormalizedAbsoluteMobileConfig) => {\n\tconst path = join(\n\t\tconfig.nativeProjectDirectory,\n\t\t'android/app/src/main/AndroidManifest.xml'\n\t);\n\tconst source = await readFile(path, 'utf8');\n\tconst mainActivity = source.indexOf('android:name=\".MainActivity\"');\n\tif (mainActivity === NOT_FOUND) {\n\t\tthrow new TypeError('Android MainActivity was not found.');\n\t}\n\tconst activityEnd = source.indexOf('</activity>', mainActivity);\n\tconst updated = replaceManagedRegion(source, androidRegion(config), () =>\n\t\tactivityEnd === NOT_FOUND\n\t\t\t? NOT_FOUND\n\t\t\t: source.lastIndexOf('\\n', activityEnd) + 1\n\t);\n\n\treturn writeChangedFile(path, updated);\n};\n\nconst iosSchemeRegion = (scheme: string) =>\n\t`\\t${START_MARKER}\\n\\t<key>CFBundleURLTypes</key>\\n\\t<array>\\n\\t\\t<dict>\\n\\t\\t\\t<key>CFBundleURLName</key>\\n\\t\\t\\t<string>absolutejs</string>\\n\\t\\t\\t<key>CFBundleURLSchemes</key>\\n\\t\\t\\t<array>\\n\\t\\t\\t\\t<string>${escapeXml(scheme)}</string>\\n\\t\\t\\t</array>\\n\\t\\t</dict>\\n\\t</array>\\n\\t${END_MARKER}\\n`;\n\nconst configureIosInfo = async (config: NormalizedAbsoluteMobileConfig) => {\n\tconst path = join(config.nativeProjectDirectory, 'ios/App/App/Info.plist');\n\tconst source = await readFile(path, 'utf8');\n\tconst region = config.deepLinkScheme\n\t\t? iosSchemeRegion(config.deepLinkScheme)\n\t\t: `\\t${START_MARKER}\\n\\t${END_MARKER}\\n`;\n\tconst updated = replaceManagedRegion(source, region, () =>\n\t\tsource.lastIndexOf('</dict>')\n\t);\n\n\treturn writeChangedFile(path, updated);\n};\n\nconst iosEntitlementsSource = (config: NormalizedAbsoluteMobileConfig) => {\n\tconst domains = config.deepLinkHosts\n\t\t.map((host) => `\\t\\t<string>applinks:${escapeXml(host)}</string>`)\n\t\t.join('\\n');\n\n\treturn `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\\t<key>com.apple.developer.associated-domains</key>\n\\t<array>\n${domains}\n\\t</array>\n</dict>\n</plist>\n`;\n};\n\nconst configureIosEntitlements = async (\n\tconfig: NormalizedAbsoluteMobileConfig\n) => {\n\tconst path = join(\n\t\tconfig.nativeProjectDirectory,\n\t\t'ios/App/AbsoluteJS.entitlements'\n\t);\n\tlet current = '';\n\ttry {\n\t\tcurrent = await readFile(path, 'utf8');\n\t} catch (error) {\n\t\tif (\n\t\t\t!(error instanceof Error) ||\n\t\t\t!('code' in error) ||\n\t\t\terror.code !== 'ENOENT'\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\tconst source = iosEntitlementsSource(config);\n\tif (current === source) return false;\n\tconst temporary = `${path}.${crypto.randomUUID()}.tmp`;\n\tawait writeFile(temporary, source, { flag: 'wx' });\n\tawait rename(temporary, path);\n\n\treturn true;\n};\n\nconst configureIosProject = async (config: NormalizedAbsoluteMobileConfig) => {\n\tconst path = join(\n\t\tconfig.nativeProjectDirectory,\n\t\t'ios/App/App.xcodeproj/project.pbxproj'\n\t);\n\tconst source = await readFile(path, 'utf8');\n\tconst declarations = [\n\t\t...source.matchAll(/CODE_SIGN_ENTITLEMENTS = ([^;]+);/g)\n\t].map((match) => match[1]);\n\tif (declarations.some((value) => value !== IOS_ENTITLEMENTS)) {\n\t\tthrow new TypeError(\n\t\t\t'The iOS target already uses a different entitlements file; merge associated domains there before continuing.'\n\t\t);\n\t}\n\tif (declarations.length > 0) return false;\n\tlet count = 0;\n\tconst updated = source.replaceAll(\n\t\t'INFOPLIST_FILE = App/Info.plist;',\n\t\t() => {\n\t\t\tcount += 1;\n\n\t\t\treturn `CODE_SIGN_ENTITLEMENTS = ${IOS_ENTITLEMENTS};\\n\\t\\t\\t\\tINFOPLIST_FILE = App/Info.plist;`;\n\t\t}\n\t);\n\tif (count === 0) {\n\t\tthrow new TypeError(\n\t\t\t'The iOS application target build settings were not found.'\n\t\t);\n\t}\n\n\treturn writeChangedFile(path, updated);\n};\n\nconst configureIos = async (config: NormalizedAbsoluteMobileConfig) => {\n\tconst changed = await Promise.all([\n\t\tconfigureIosInfo(config),\n\t\tconfigureIosEntitlements(config),\n\t\tconfigureIosProject(config)\n\t]);\n\n\treturn changed.some(Boolean);\n};\n\nexport const applyAbsoluteNativeDeepLinks = async (\n\tconfig: NormalizedAbsoluteMobileConfig,\n\tplatforms: readonly MobilePlatform[] = config.platforms\n) => {\n\tconst results = await Promise.all(\n\t\tplatforms.map(async (platform) => {\n\t\t\tconst didChange =\n\t\t\t\tplatform === 'android'\n\t\t\t\t\t? await configureAndroid(config)\n\t\t\t\t\t: await configureIos(config);\n\n\t\t\treturn { didChange, platform };\n\t\t})\n\t);\n\n\treturn {\n\t\tchanged: results\n\t\t\t.filter(({ didChange }) => didChange)\n\t\t\t.map(({ platform }) => platform)\n\t};\n};\n",
34
38
  "import { access } from 'node:fs/promises';\nimport { isAbsolute, relative, resolve, sep } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { AbsoluteAndroidReleaseMetadata } from './androidRelease';\nimport type { AbsoluteIosReleaseMetadata } from './iosRelease';\n\nexport type AbsoluteGooglePlayReleaseTarget = {\n\tchangesNotSentForReview?: boolean;\n\tinAppUpdatePriority?: number;\n\tname?: string;\n\treleaseNotes?: readonly { language: string; text: string }[];\n\treviewBehavior?: 'CANCEL_IN_REVIEW_AND_SUBMIT' | 'ERROR_IF_IN_REVIEW';\n\tstatus?: 'completed' | 'draft' | 'halted' | 'inProgress';\n\ttrack: string;\n\tuserFraction?: number;\n};\n\nexport type AbsoluteAppStoreConnectReleaseTarget = {\n\tgroups?: readonly string[];\n\tsubmitForReview?: boolean;\n\twhatsNew?: readonly { locale: string; text: string }[];\n};\n\nexport type AbsoluteNativeReleasePublication = {\n\tchannel?: {\n\t\tchannel: string;\n\t\treleaseId: string;\n\t};\n\trecord: {\n\t\tmetadata: AbsoluteAndroidReleaseMetadata | AbsoluteIosReleaseMetadata;\n\t};\n\treused: boolean;\n\tgooglePlay?: {\n\t\treceipt: {\n\t\t\tintent: { track: string };\n\t\t\tpackageName: string;\n\t\t\tprovider: 'google-play';\n\t\t\treleaseId: string;\n\t\t\tsha256: string;\n\t\t\tstage: string;\n\t\t\tversionCode?: string;\n\t\t};\n\t\treused: boolean;\n\t};\n\tappStoreConnect?: {\n\t\treceipt: {\n\t\t\tappleAppId: string;\n\t\t\tbuildId?: string;\n\t\t\tbuildNumber: number;\n\t\t\tintent: { groups: string[]; submitForReview: boolean };\n\t\t\tmarketingVersion: string;\n\t\t\tprovider: 'app-store-connect';\n\t\t\treleaseId: string;\n\t\t\tsha256: string;\n\t\t\tstage: string;\n\t\t};\n\t\treused: boolean;\n\t};\n};\n\nexport type AbsoluteNativeReleasePublisher = {\n\tprepareAndroidRelease?: (options: {\n\t\tbuildIdentity: string;\n\t\tgooglePlay?: AbsoluteGooglePlayReleaseTarget;\n\t\tpackageName: string;\n\t\tsignal?: AbortSignal;\n\t}) => Promise<{ versionCode?: number }>;\n\tprepareIosRelease?: (options: {\n\t\tbuildIdentity: string;\n\t\tbundleId: string;\n\t\tmarketingVersion: string;\n\t\tsignal?: AbortSignal;\n\t}) => Promise<{ buildNumber: number }>;\n\tpublish: (options: {\n\t\tallowUnsigned?: boolean;\n\t\tappStoreConnect?: AbsoluteAppStoreConnectReleaseTarget;\n\t\tchannel?: string;\n\t\tgooglePlay?: AbsoluteGooglePlayReleaseTarget;\n\t\treleaseRoot: string;\n\t\tsignal?: AbortSignal;\n\t}) => Promise<AbsoluteNativeReleasePublication>;\n};\n\nexport const prepareAbsoluteIosRelease = async (\n\tpublisher: AbsoluteNativeReleasePublisher,\n\toptions: {\n\t\tbuildIdentity: string;\n\t\tbundleId: string;\n\t\tmarketingVersion: string;\n\t\tsignal?: AbortSignal;\n\t}\n) => {\n\tif (typeof publisher.prepareIosRelease !== 'function') {\n\t\tthrow new TypeError(\n\t\t\t'App Store Connect publishing requires a registry module created with @absolutejs/deploy/app-store-connect.'\n\t\t);\n\t}\n\tconst { buildNumber } = await publisher.prepareIosRelease(options);\n\tif (!Number.isSafeInteger(buildNumber) || buildNumber < 1) {\n\t\tthrow new TypeError(\n\t\t\t'App Store Connect publisher returned an invalid iOS build number.'\n\t\t);\n\t}\n\n\treturn buildNumber;\n};\n\ntype PrepareAbsoluteAndroidReleaseOptions = {\n\tbuildIdentity: string;\n\tgooglePlay: AbsoluteGooglePlayReleaseTarget;\n\tpackageName: string;\n\tsignal?: AbortSignal;\n};\n\nexport const prepareAbsoluteAndroidRelease = async (\n\tpublisher: AbsoluteNativeReleasePublisher,\n\toptions: PrepareAbsoluteAndroidReleaseOptions\n) => {\n\tif (typeof publisher.prepareAndroidRelease !== 'function') {\n\t\tthrow new TypeError(\n\t\t\t'Google Play publishing requires a registry module created with @absolutejs/deploy/google-play.'\n\t\t);\n\t}\n\tconst prepared = await publisher.prepareAndroidRelease(options);\n\tconst { versionCode } = prepared;\n\tif (\n\t\ttypeof versionCode !== 'number' ||\n\t\t!Number.isSafeInteger(versionCode) ||\n\t\tversionCode < 1 ||\n\t\tversionCode > 2_100_000_000\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Google Play publisher returned an invalid Android versionCode.'\n\t\t);\n\t}\n\n\treturn versionCode;\n};\n\nexport type PublishAbsoluteAndroidReleaseOptions = {\n\tallowUnsigned?: boolean;\n\tchannel?: string;\n\tgooglePlay?: AbsoluteGooglePlayReleaseTarget;\n\tmodulePath: string;\n\tprojectRoot: string;\n\trelease: {\n\t\tmetadata: AbsoluteAndroidReleaseMetadata;\n\t\treleaseRoot: string;\n\t};\n\tsignal?: AbortSignal;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst isPublisher = (value: unknown): value is AbsoluteNativeReleasePublisher =>\n\tisRecord(value) && typeof value.publish === 'function';\n\nconst publisherModulePath = (projectRoot: string, requested: string) => {\n\tconst root = resolve(projectRoot);\n\tconst path = resolve(root, requested);\n\tconst projectRelative = relative(root, path);\n\tif (\n\t\tprojectRelative === '..' ||\n\t\tprojectRelative.startsWith(`..${sep}`) ||\n\t\tisAbsolute(projectRelative)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'mobile publish --registry must remain inside the project.'\n\t\t);\n\t}\n\n\treturn path;\n};\n\nexport const loadAbsoluteNativeReleasePublisher = async (\n\tprojectRoot: string,\n\trequestedModulePath: string\n) => {\n\tconst modulePath = publisherModulePath(projectRoot, requestedModulePath);\n\tawait access(modulePath).catch(() => {\n\t\tthrow new TypeError(\n\t\t\t`Native release registry module does not exist: ${modulePath}`\n\t\t);\n\t});\n\tconst loaded: unknown = await import(pathToFileURL(modulePath).href);\n\tconst publisher = isRecord(loaded)\n\t\t? (loaded.default ?? loaded.registry)\n\t\t: undefined;\n\tif (!isPublisher(publisher)) {\n\t\tthrow new TypeError(\n\t\t\t'Native release registry module must default-export a registry with publish(options).'\n\t\t);\n\t}\n\n\treturn publisher;\n};\n\nexport const publishAbsoluteAndroidRelease = async (\n\toptions: PublishAbsoluteAndroidReleaseOptions\n) => {\n\tconst publisher = await loadAbsoluteNativeReleasePublisher(\n\t\toptions.projectRoot,\n\t\toptions.modulePath\n\t);\n\tconst publication = await publisher.publish({\n\t\tallowUnsigned: options.allowUnsigned,\n\t\tchannel: options.channel,\n\t\tgooglePlay: options.googlePlay,\n\t\treleaseRoot: options.release.releaseRoot,\n\t\tsignal: options.signal\n\t});\n\tconst expected = options.release.metadata;\n\tconst actual = publication.record?.metadata;\n\tif (\n\t\t!actual ||\n\t\tactual.appId !== expected.appId ||\n\t\tactual.platform !== 'android' ||\n\t\tactual.releaseId !== expected.releaseId ||\n\t\tactual.sha256 !== expected.sha256 ||\n\t\tactual.signed !== expected.signed ||\n\t\tactual.versionCode !== expected.versionCode ||\n\t\ttypeof publication.reused !== 'boolean'\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Native release registry returned a different Android release identity.'\n\t\t);\n\t}\n\tif (\n\t\toptions.channel !== undefined &&\n\t\t(publication.channel?.channel !== options.channel ||\n\t\t\tpublication.channel.releaseId !== expected.releaseId)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Native release registry did not promote the requested channel.'\n\t\t);\n\t}\n\tconst { googlePlay } = publication;\n\tif (options.googlePlay) {\n\t\tif (\n\t\t\t!expected.versionCode ||\n\t\t\t!googlePlay ||\n\t\t\tgooglePlay.receipt.provider !== 'google-play' ||\n\t\t\tgooglePlay.receipt.packageName !== expected.appId ||\n\t\t\tgooglePlay.receipt.releaseId !== expected.releaseId ||\n\t\t\tgooglePlay.receipt.sha256 !== expected.sha256 ||\n\t\t\tgooglePlay.receipt.stage !== 'committed' ||\n\t\t\tgooglePlay.receipt.intent.track !== options.googlePlay.track ||\n\t\t\ttypeof googlePlay.receipt.versionCode !== 'string' ||\n\t\t\t!/^\\d+$/.test(googlePlay.receipt.versionCode) ||\n\t\t\tNumber(googlePlay.receipt.versionCode) !== expected.versionCode ||\n\t\t\ttypeof googlePlay.reused !== 'boolean'\n\t\t) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'Native release publisher did not commit the requested Google Play release.'\n\t\t\t);\n\t\t}\n\t}\n\n\treturn publication;\n};\n\nexport const publishAbsoluteIosRelease = async (options: {\n\tallowUnsigned?: boolean;\n\tappStoreConnect?: AbsoluteAppStoreConnectReleaseTarget;\n\tchannel?: string;\n\tmodulePath: string;\n\tprojectRoot: string;\n\trelease: {\n\t\tmetadata: AbsoluteIosReleaseMetadata;\n\t\treleaseRoot: string;\n\t};\n\tsignal?: AbortSignal;\n}) => {\n\tconst publisher = await loadAbsoluteNativeReleasePublisher(\n\t\toptions.projectRoot,\n\t\toptions.modulePath\n\t);\n\tconst publication = await publisher.publish({\n\t\tallowUnsigned: options.allowUnsigned,\n\t\tappStoreConnect: options.appStoreConnect,\n\t\tchannel: options.channel,\n\t\treleaseRoot: options.release.releaseRoot,\n\t\tsignal: options.signal\n\t});\n\tconst expected = options.release.metadata;\n\tconst actual = publication.record?.metadata;\n\tif (\n\t\t!actual ||\n\t\tactual.appId !== expected.appId ||\n\t\tactual.platform !== 'ios' ||\n\t\tactual.releaseId !== expected.releaseId ||\n\t\tactual.sha256 !== expected.sha256 ||\n\t\tactual.signed !== expected.signed ||\n\t\tactual.buildNumber !== expected.buildNumber ||\n\t\tactual.marketingVersion !== expected.marketingVersion ||\n\t\ttypeof publication.reused !== 'boolean'\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Native release registry returned a different iOS release identity.'\n\t\t);\n\t}\n\tif (\n\t\toptions.channel !== undefined &&\n\t\t(publication.channel?.channel !== options.channel ||\n\t\t\tpublication.channel.releaseId !== expected.releaseId)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t'Native release registry did not promote the requested channel.'\n\t\t);\n\t}\n\tif (options.appStoreConnect) {\n\t\tconst distributed = publication.appStoreConnect;\n\t\tif (\n\t\t\t!expected.buildNumber ||\n\t\t\t!distributed ||\n\t\t\tdistributed.receipt.provider !== 'app-store-connect' ||\n\t\t\tdistributed.receipt.releaseId !== expected.releaseId ||\n\t\t\tdistributed.receipt.sha256 !== expected.sha256 ||\n\t\t\tdistributed.receipt.buildNumber !== expected.buildNumber ||\n\t\t\tdistributed.receipt.marketingVersion !==\n\t\t\t\texpected.marketingVersion ||\n\t\t\t!['distributed', 'review-submitted'].includes(\n\t\t\t\tdistributed.receipt.stage\n\t\t\t) ||\n\t\t\tJSON.stringify([...distributed.receipt.intent.groups].sort()) !==\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t[...(options.appStoreConnect.groups ?? [])].sort()\n\t\t\t\t) ||\n\t\t\tdistributed.receipt.intent.submitForReview !==\n\t\t\t\t(options.appStoreConnect.submitForReview ?? false) ||\n\t\t\ttypeof distributed.reused !== 'boolean'\n\t\t) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'Native release publisher did not complete the requested App Store Connect release.'\n\t\t\t);\n\t\t}\n\t}\n\n\treturn publication;\n};\n",
35
- "import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, extname, relative, resolve } from 'node:path';\nimport type { BunPlugin } from 'bun';\nimport ts from 'typescript';\nimport { ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION } from './pageProtocol';\nimport { hashAbsoluteMobilePropsSchema } from './releaseArtifact';\nimport {\n\tABSOLUTE_MOBILE_ROUTE_DETAIL,\n\ttype AbsoluteMobileBuildPageMetadata\n} from './buildMetadata';\n\ntype MobileRouteTransformOptions = {\n\tentry: string;\n\tprojectRoot?: string;\n};\n\ntype AnalyzedPageCall = {\n\tmetadata: AbsoluteMobileBuildPageMetadata;\n\tpageCallStart: number;\n\trouteCallSpan: string;\n};\n\ntype AnalyzedFile = {\n\tbyPageCall: Map<number, AnalyzedPageCall>;\n\tbyRouteCall: Map<string, AnalyzedPageCall>;\n};\n\ntype AssetKeyResolver = (\n\texpression: ts.Expression | undefined,\n\tchecker: ts.TypeChecker,\n\tseen?: Set<ts.Symbol>\n) => string | undefined;\n\nconst ROUTE_METHODS = new Set(['get', 'head']);\nconst SOURCE_FILTER = /\\.[cm]?[jt]sx?$/;\nconst PAGE_HANDLER = 'handleReactPageRequest';\n\nconst posixPath = (value: string) => value.replace(/\\\\/g, '/');\n\nconst findTsconfig = (entry: string, projectRoot: string) =>\n\tts.findConfigFile(dirname(entry), existsSync, 'tsconfig.json') ??\n\tts.findConfigFile(projectRoot, existsSync, 'tsconfig.json');\n\nconst createProgram = (entry: string, projectRoot: string) => {\n\tconst configPath = findTsconfig(entry, projectRoot);\n\tif (!configPath) {\n\t\treturn ts.createProgram([entry], {\n\t\t\tallowJs: true,\n\t\t\tjsx: ts.JsxEmit.ReactJSX,\n\t\t\tmodule: ts.ModuleKind.ESNext,\n\t\t\tmoduleResolution: ts.ModuleResolutionKind.Bundler,\n\t\t\ttarget: ts.ScriptTarget.ESNext\n\t\t});\n\t}\n\n\tconst parsed = ts.parseJsonConfigFileContent(\n\t\tts.readConfigFile(configPath, (path) => readFileSync(path, 'utf8'))\n\t\t\t.config,\n\t\tts.sys,\n\t\tdirname(configPath)\n\t);\n\tif (!parsed.fileNames.includes(entry)) parsed.fileNames.push(entry);\n\n\treturn ts.createProgram(parsed.fileNames, parsed.options);\n};\n\nconst propertyName = (property: ts.ObjectLiteralElementLike) => {\n\tif (!('name' in property) || !property.name) return undefined;\n\tif (ts.isIdentifier(property.name)) return property.name.text;\n\tif (ts.isStringLiteralLike(property.name)) return property.name.text;\n\n\treturn undefined;\n};\n\nconst objectPropertyExpression = (\n\tobject: ts.ObjectLiteralExpression,\n\tname: string\n) => {\n\tconst property = object.properties.find(\n\t\t(candidate) => propertyName(candidate) === name\n\t);\n\tif (property && ts.isPropertyAssignment(property)) {\n\t\treturn property.initializer;\n\t}\n\tif (property && ts.isShorthandPropertyAssignment(property)) {\n\t\treturn property.name;\n\t}\n\n\treturn undefined;\n};\n\nconst serializeType = (\n\ttype: ts.Type,\n\tchecker: ts.TypeChecker,\n\tancestors = new Set<ts.Type>()\n): unknown => {\n\tif (type.flags & ts.TypeFlags.Any) return { type: 'any' };\n\tif (type.flags & ts.TypeFlags.Unknown) return { type: 'unknown' };\n\tif (type.flags & ts.TypeFlags.Never) return { type: 'never' };\n\tif (type.flags & ts.TypeFlags.StringLike) return { type: 'string' };\n\tif (type.flags & ts.TypeFlags.NumberLike) return { type: 'number' };\n\tif (type.flags & ts.TypeFlags.BooleanLike) return { type: 'boolean' };\n\tif (type.flags & ts.TypeFlags.BigIntLike) return { type: 'bigint' };\n\tif (type.flags & ts.TypeFlags.Null) return { type: 'null' };\n\tif (type.flags & ts.TypeFlags.Undefined) return { type: 'undefined' };\n\tif (type.isUnion()) {\n\t\treturn {\n\t\t\tanyOf: type.types\n\t\t\t\t.map((member) => serializeType(member, checker, ancestors))\n\t\t\t\t.sort((left, right) =>\n\t\t\t\t\tJSON.stringify(left).localeCompare(JSON.stringify(right))\n\t\t\t\t)\n\t\t};\n\t}\n\tif (type.isIntersection()) {\n\t\treturn {\n\t\t\tallOf: type.types\n\t\t\t\t.map((member) => serializeType(member, checker, ancestors))\n\t\t\t\t.sort((left, right) =>\n\t\t\t\t\tJSON.stringify(left).localeCompare(JSON.stringify(right))\n\t\t\t\t)\n\t\t};\n\t}\n\tif (ancestors.has(type)) {\n\t\treturn {\n\t\t\tref: checker.typeToString(\n\t\t\t\ttype,\n\t\t\t\tundefined,\n\t\t\t\tts.TypeFormatFlags.NoTruncation\n\t\t\t)\n\t\t};\n\t}\n\n\tancestors.add(type);\n\tconst arrayElement = checker.getIndexTypeOfType(type, ts.IndexKind.Number);\n\tconst properties = checker.getPropertiesOfType(type);\n\tlet schema: unknown;\n\tif (arrayElement && properties.some(({ name }) => name === 'length')) {\n\t\tschema = {\n\t\t\titems: serializeType(arrayElement, checker, ancestors),\n\t\t\ttype: 'array'\n\t\t};\n\t} else if (properties.length > 0) {\n\t\tconst entries = properties\n\t\t\t.filter(({ name }) => !name.startsWith('__'))\n\t\t\t.map((property) => {\n\t\t\t\tconst declaration =\n\t\t\t\t\tproperty.valueDeclaration ?? property.declarations?.[0];\n\t\t\t\tconst propertyType = declaration\n\t\t\t\t\t? checker.getTypeOfSymbolAtLocation(property, declaration)\n\t\t\t\t\t: checker.getDeclaredTypeOfSymbol(property);\n\n\t\t\t\treturn [\n\t\t\t\t\tproperty.name,\n\t\t\t\t\t{\n\t\t\t\t\t\toptional: Boolean(\n\t\t\t\t\t\t\tproperty.flags & ts.SymbolFlags.Optional\n\t\t\t\t\t\t),\n\t\t\t\t\t\tschema: serializeType(propertyType, checker, ancestors)\n\t\t\t\t\t}\n\t\t\t\t] as const;\n\t\t\t})\n\t\t\t.sort(([left], [right]) => left.localeCompare(right));\n\t\tschema = { properties: Object.fromEntries(entries), type: 'object' };\n\t} else {\n\t\tschema = {\n\t\t\ttype: checker.typeToString(\n\t\t\t\ttype,\n\t\t\t\tundefined,\n\t\t\t\tts.TypeFormatFlags.NoTruncation\n\t\t\t)\n\t\t};\n\t}\n\tancestors.delete(type);\n\n\treturn schema;\n};\n\nconst pagePropsType = (\n\tpageExpression: ts.Expression,\n\tpropsExpression: ts.Expression | undefined,\n\tchecker: ts.TypeChecker\n) => {\n\tconst pageType = checker.getTypeAtLocation(pageExpression);\n\tconst [signature] = pageType.getCallSignatures();\n\tconst [parameter] = signature?.parameters ?? [];\n\tconst declaration =\n\t\tparameter?.valueDeclaration ?? parameter?.declarations?.[0];\n\tif (parameter && declaration) {\n\t\treturn checker.getTypeOfSymbolAtLocation(parameter, declaration);\n\t}\n\n\treturn propsExpression\n\t\t? checker.getTypeAtLocation(propsExpression)\n\t\t: checker.getTypeAtLocation(pageExpression);\n};\n\nconst resolvePageIdentity = (\n\texpression: ts.Expression,\n\tsourceFile: ts.SourceFile,\n\tchecker: ts.TypeChecker,\n\tprojectRoot: string\n) => {\n\tlet symbol = checker.getSymbolAtLocation(expression);\n\tif (symbol?.flags && symbol.flags & ts.SymbolFlags.Alias) {\n\t\tsymbol = checker.getAliasedSymbol(symbol);\n\t}\n\tconst declaration = symbol?.declarations?.[0];\n\tconst file = declaration?.getSourceFile().fileName ?? sourceFile.fileName;\n\tconst exportedName = symbol?.name ?? expression.getText(sourceFile);\n\tconst source = posixPath(relative(projectRoot, file));\n\n\treturn `${source}#${exportedName}`;\n};\n\nconst resolveAlias = (symbol: ts.Symbol, checker: ts.TypeChecker) => {\n\tif (!(symbol.flags & ts.SymbolFlags.Alias)) return symbol;\n\n\treturn checker.getAliasedSymbol(symbol);\n};\n\nconst assetKey: AssetKeyResolver = (\n\texpression,\n\tchecker,\n\tseen = new Set<ts.Symbol>()\n) => {\n\tif (!expression) return undefined;\n\n\tif (ts.isIdentifier(expression)) {\n\t\tconst unresolved = ts.isShorthandPropertyAssignment(expression.parent)\n\t\t\t? checker.getShorthandAssignmentValueSymbol(expression.parent)\n\t\t\t: checker.getSymbolAtLocation(expression);\n\t\tif (!unresolved) return undefined;\n\t\tconst symbol = resolveAlias(unresolved, checker);\n\t\tif (seen.has(symbol)) return undefined;\n\t\tseen.add(symbol);\n\t\tconst declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n\t\tif (!declaration || !ts.isVariableDeclaration(declaration))\n\t\t\treturn undefined;\n\n\t\treturn assetKey(declaration.initializer, checker, seen);\n\t}\n\n\tif (!ts.isCallExpression(expression)) return undefined;\n\tif (\n\t\t!ts.isIdentifier(expression.expression) ||\n\t\texpression.expression.text !== 'asset'\n\t) {\n\t\treturn undefined;\n\t}\n\tconst [, key] = expression.arguments;\n\n\treturn key && ts.isStringLiteralLike(key) ? key.text : undefined;\n};\n\nconst findPageCall = (nodes: readonly ts.Node[]) => {\n\tlet found: ts.CallExpression | undefined;\n\tconst visit = (candidate: ts.Node) => {\n\t\tif (found) return;\n\t\tif (\n\t\t\tts.isCallExpression(candidate) &&\n\t\t\tts.isIdentifier(candidate.expression) &&\n\t\t\tcandidate.expression.text === PAGE_HANDLER\n\t\t) {\n\t\t\tfound = candidate;\n\n\t\t\treturn;\n\t\t}\n\t\tts.forEachChild(candidate, visit);\n\t};\n\tfor (const node of nodes) visit(node);\n\n\treturn found;\n};\n\nconst isProjectSource = (\n\tsourceFile: ts.SourceFile,\n\tresolvedFile: string,\n\tprojectRoot: string\n) =>\n\t!sourceFile.isDeclarationFile &&\n\t!resolvedFile.includes('/node_modules/') &&\n\tresolvedFile.startsWith(`${projectRoot}/`);\n\nconst analyzeRouteCall = (\n\tnode: ts.CallExpression,\n\tsourceFile: ts.SourceFile,\n\tchecker: ts.TypeChecker,\n\tprojectRoot: string\n) => {\n\tconst callee = node.expression;\n\tif (!ts.isPropertyAccessExpression(callee)) return undefined;\n\tif (!ROUTE_METHODS.has(callee.name.text)) return undefined;\n\tconst [routePath] = node.arguments;\n\tif (!routePath || !ts.isStringLiteralLike(routePath)) return undefined;\n\tconst pageCall = findPageCall(node.arguments.slice(1));\n\tconst [input] = pageCall?.arguments ?? [];\n\tif (!pageCall || !input || !ts.isObjectLiteralExpression(input)) {\n\t\treturn undefined;\n\t}\n\tconst page = objectPropertyExpression(input, 'Page');\n\tif (!page) return undefined;\n\tconst props = objectPropertyExpression(input, 'props');\n\tconst index = objectPropertyExpression(input, 'index');\n\tconst bundleKey = assetKey(index, checker);\n\tif (!bundleKey) return undefined;\n\tconst pageId = resolvePageIdentity(page, sourceFile, checker, projectRoot);\n\tconst schema = serializeType(pagePropsType(page, props, checker), checker);\n\tconst propsSchemaHash = hashAbsoluteMobilePropsSchema(schema);\n\tconst metadata: AbsoluteMobileBuildPageMetadata = {\n\t\tbundleKey,\n\t\tcontract: `react:${pageId}:${propsSchemaHash}`,\n\t\tframework: 'react',\n\t\tpageId,\n\t\tpropsSchemaHash\n\t};\n\tconst result: AnalyzedPageCall = {\n\t\tmetadata,\n\t\tpageCallStart: pageCall.getStart(sourceFile),\n\t\trouteCallSpan: `${node.getStart(sourceFile)}:${node.end}`\n\t};\n\n\treturn result;\n};\n\nconst analyzeSourceFile = (\n\tsourceFile: ts.SourceFile,\n\tchecker: ts.TypeChecker,\n\tprojectRoot: string\n) => {\n\tconst analysis: AnalyzedFile = {\n\t\tbyPageCall: new Map(),\n\t\tbyRouteCall: new Map()\n\t};\n\tconst visit = (node: ts.Node) => {\n\t\tconst result = ts.isCallExpression(node)\n\t\t\t? analyzeRouteCall(node, sourceFile, checker, projectRoot)\n\t\t\t: undefined;\n\t\tif (result) {\n\t\t\tanalysis.byPageCall.set(result.pageCallStart, result);\n\t\t\tanalysis.byRouteCall.set(result.routeCallSpan, result);\n\t\t}\n\t\tts.forEachChild(node, visit);\n\t};\n\tts.forEachChild(sourceFile, visit);\n\n\treturn analysis;\n};\n\nconst analyzeProgram = (program: ts.Program, projectRoot: string) => {\n\tconst checker = program.getTypeChecker();\n\tconst analyzed = new Map<string, AnalyzedFile>();\n\tfor (const sourceFile of program.getSourceFiles()) {\n\t\tconst resolvedFile = resolve(sourceFile.fileName);\n\t\tif (!isProjectSource(sourceFile, resolvedFile, projectRoot)) continue;\n\t\tconst analysis = analyzeSourceFile(sourceFile, checker, projectRoot);\n\t\tif (analysis.byPageCall.size > 0) analyzed.set(resolvedFile, analysis);\n\t}\n\n\treturn analyzed;\n};\n\nconst metadataExpression = (metadata: AbsoluteMobileBuildPageMetadata) =>\n\tts.factory.createObjectLiteralExpression(\n\t\tObject.entries(metadata).map(([key, item]) =>\n\t\t\tts.factory.createPropertyAssignment(\n\t\t\t\tts.factory.createStringLiteral(key),\n\t\t\t\tts.factory.createStringLiteral(item)\n\t\t\t)\n\t\t),\n\t\tfalse\n\t);\n\nconst routeOptions = (\n\texisting: ts.Expression | undefined,\n\tmetadata: AbsoluteMobileBuildPageMetadata\n) => {\n\tconst detail = ts.factory.createObjectLiteralExpression([\n\t\tts.factory.createPropertyAssignment(\n\t\t\tts.factory.createStringLiteral(ABSOLUTE_MOBILE_ROUTE_DETAIL),\n\t\t\tmetadataExpression(metadata)\n\t\t)\n\t]);\n\tif (!existing) {\n\t\treturn ts.factory.createObjectLiteralExpression([\n\t\t\tts.factory.createPropertyAssignment('detail', detail)\n\t\t]);\n\t}\n\n\treturn ts.factory.createObjectLiteralExpression([\n\t\tts.factory.createSpreadAssignment(existing),\n\t\tts.factory.createPropertyAssignment(\n\t\t\t'detail',\n\t\t\tts.factory.createObjectLiteralExpression([\n\t\t\t\tts.factory.createSpreadAssignment(\n\t\t\t\t\tts.factory.createPropertyAccessExpression(\n\t\t\t\t\t\texisting,\n\t\t\t\t\t\t'detail'\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tts.factory.createPropertyAssignment(\n\t\t\t\t\tts.factory.createStringLiteral(\n\t\t\t\t\t\tABSOLUTE_MOBILE_ROUTE_DETAIL\n\t\t\t\t\t),\n\t\t\t\t\tmetadataExpression(metadata)\n\t\t\t\t)\n\t\t\t])\n\t\t)\n\t]);\n};\n\nconst transformPageCall = (\n\tnode: ts.CallExpression,\n\tpage: AnalyzedPageCall | undefined\n) => {\n\tif (!page) return undefined;\n\tconst [input] = node.arguments;\n\tif (!input || !ts.isObjectLiteralExpression(input)) return undefined;\n\n\treturn ts.factory.updateCallExpression(\n\t\tnode,\n\t\tnode.expression,\n\t\tnode.typeArguments,\n\t\t[\n\t\t\tts.factory.updateObjectLiteralExpression(input, [\n\t\t\t\t...input.properties,\n\t\t\t\tts.factory.createPropertyAssignment(\n\t\t\t\t\t'__absoluteMobile',\n\t\t\t\t\tmetadataExpression(page.metadata)\n\t\t\t\t)\n\t\t\t]),\n\t\t\t...node.arguments.slice(1)\n\t\t]\n\t);\n};\n\nconst transformRouteCall = (\n\tnode: ts.CallExpression,\n\troute: AnalyzedPageCall | undefined\n) => {\n\tif (!route) return undefined;\n\tconst [path, maybeOptions, maybeHandler, ...rest] = node.arguments;\n\tif (!path || !maybeOptions) return undefined;\n\tconst options = maybeHandler ? maybeOptions : undefined;\n\tconst handler = maybeHandler ?? maybeOptions;\n\n\treturn ts.factory.updateCallExpression(\n\t\tnode,\n\t\tnode.expression,\n\t\tnode.typeArguments,\n\t\t[path, routeOptions(options, route.metadata), handler, ...rest]\n\t);\n};\n\nconst transformFile = (\n\tsource: string,\n\tfileName: string,\n\tanalysis: AnalyzedFile\n) => {\n\tconst sourceFile = ts.createSourceFile(\n\t\tfileName,\n\t\tsource,\n\t\tts.ScriptTarget.Latest,\n\t\ttrue,\n\t\tfileName.endsWith('x') ? ts.ScriptKind.TSX : ts.ScriptKind.TS\n\t);\n\tconst transformer: ts.TransformerFactory<ts.SourceFile> = (context) => {\n\t\tconst visit: ts.Visitor = (node) => {\n\t\t\tif (!ts.isCallExpression(node)) {\n\t\t\t\treturn ts.visitEachChild(node, visit, context);\n\t\t\t}\n\t\t\tconst transformedChildren = ts.visitEachChild(node, visit, context);\n\t\t\tconst page = analysis.byPageCall.get(node.getStart(sourceFile));\n\t\t\tconst transformedPage = transformPageCall(\n\t\t\t\ttransformedChildren,\n\t\t\t\tpage\n\t\t\t);\n\t\t\tif (transformedPage) return transformedPage;\n\t\t\tconst route = analysis.byRouteCall.get(\n\t\t\t\t`${node.getStart(sourceFile)}:${node.end}`\n\t\t\t);\n\t\t\tconst transformedRoute = transformRouteCall(\n\t\t\t\ttransformedChildren,\n\t\t\t\troute\n\t\t\t);\n\t\t\tif (transformedRoute) return transformedRoute;\n\n\t\t\treturn transformedChildren;\n\t\t};\n\n\t\treturn (node) => ts.visitNode(node, visit, ts.isSourceFile) ?? node;\n\t};\n\tconst result = ts.transform(sourceFile, [transformer]);\n\ttry {\n\t\tconst [transformed] = result.transformed;\n\t\tif (!transformed) throw new TypeError('Mobile route transform failed.');\n\n\t\treturn ts.createPrinter().printFile(transformed);\n\t} finally {\n\t\tresult.dispose();\n\t}\n};\n\nexport const ABSOLUTE_MOBILE_TRANSFORM_PROTOCOL =\n\tABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION;\nexport const createAbsoluteMobileRouteMetadataPlugin = (\n\toptions: MobileRouteTransformOptions\n): BunPlugin => {\n\tconst projectRoot = resolve(options.projectRoot ?? process.cwd());\n\tconst entry = resolve(options.entry);\n\tconst analyzed = analyzeProgram(\n\t\tcreateProgram(entry, projectRoot),\n\t\tprojectRoot\n\t);\n\n\treturn {\n\t\tname: 'absolute-mobile-route-metadata',\n\t\tsetup(build) {\n\t\t\tbuild.onLoad({ filter: SOURCE_FILTER }, async ({ path }) => {\n\t\t\t\tconst analysis = analyzed.get(resolve(path));\n\t\t\t\tif (!analysis) return undefined;\n\t\t\t\tconst source = await Bun.file(path).text();\n\n\t\t\t\treturn {\n\t\t\t\t\tcontents: transformFile(source, path, analysis),\n\t\t\t\t\tloader: extname(path).endsWith('x') ? 'tsx' : 'ts'\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t};\n};\nexport const inspectAbsoluteMobileRouteMetadata = (\n\toptions: MobileRouteTransformOptions\n) => {\n\tconst projectRoot = resolve(options.projectRoot ?? process.cwd());\n\tconst entry = resolve(options.entry);\n\tconst analyzed = analyzeProgram(\n\t\tcreateProgram(entry, projectRoot),\n\t\tprojectRoot\n\t);\n\n\treturn [...analyzed.entries()].flatMap(([file, analysis]) =>\n\t\t[...analysis.byRouteCall.values()].map(({ metadata }) => ({\n\t\t\tfile: posixPath(relative(projectRoot, file)),\n\t\t\tmetadata\n\t\t}))\n\t);\n};\n"
39
+ "import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, extname, relative, resolve } from 'node:path';\nimport type { BunPlugin } from 'bun';\nimport ts from 'typescript';\nimport { ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION } from './pageProtocol';\nimport { hashAbsoluteMobilePropsSchema } from './releaseArtifact';\nimport {\n\tABSOLUTE_MOBILE_ROUTE_DETAIL,\n\ttype AbsoluteMobileBuildPageMetadata\n} from './buildMetadata';\n\ntype MobileRouteTransformOptions = {\n\tentry: string;\n\tprojectRoot?: string;\n};\n\ntype AnalyzedPageCall = {\n\tinputKind: 'object' | 'static';\n\tmetadata: AbsoluteMobileBuildPageMetadata;\n\tpageCallStart: number;\n\trouteCallSpan: string;\n};\n\ntype AnalyzedFile = {\n\tbyPageCall: Map<number, AnalyzedPageCall>;\n\tbyRouteCall: Map<string, AnalyzedPageCall>;\n};\n\ntype PageHandlerDefinition = {\n\tbundleProperty?: 'index' | 'indexPath';\n\tframework: AbsoluteMobileBuildPageMetadata['framework'];\n\tinputKind?: 'static';\n\tpageProperty?: 'Page';\n\tpropsProperty: 'props' | 'requestContext';\n\tsourceProperty?: 'pagePath';\n};\n\ntype AssetKeyResolver = (\n\texpression: ts.Expression | undefined,\n\tchecker: ts.TypeChecker,\n\tseen?: Set<ts.Symbol>\n) => string | undefined;\n\nconst ROUTE_METHODS = new Set(['get', 'head']);\nconst SOURCE_FILTER = /\\.[cm]?[jt]sx?$/;\nconst PAGE_HANDLERS = new Map<string, PageHandlerDefinition>([\n\t[\n\t\t'handleHTMLPageRequest',\n\t\t{ framework: 'html', inputKind: 'static', propsProperty: 'props' }\n\t],\n\t[\n\t\t'handleHTMXPageRequest',\n\t\t{ framework: 'htmx', inputKind: 'static', propsProperty: 'props' }\n\t],\n\t[\n\t\t'handleAngularPageRequest',\n\t\t{\n\t\t\tbundleProperty: 'indexPath',\n\t\t\tframework: 'angular',\n\t\t\tpropsProperty: 'requestContext',\n\t\t\tsourceProperty: 'pagePath'\n\t\t}\n\t],\n\t[\n\t\t'handleReactPageRequest',\n\t\t{\n\t\t\tbundleProperty: 'index',\n\t\t\tframework: 'react',\n\t\t\tpageProperty: 'Page',\n\t\t\tpropsProperty: 'props'\n\t\t}\n\t],\n\t[\n\t\t'handleSveltePageRequest',\n\t\t{\n\t\t\tbundleProperty: 'indexPath',\n\t\t\tframework: 'svelte',\n\t\t\tpropsProperty: 'props',\n\t\t\tsourceProperty: 'pagePath'\n\t\t}\n\t],\n\t[\n\t\t'handleVuePageRequest',\n\t\t{\n\t\t\tbundleProperty: 'indexPath',\n\t\t\tframework: 'vue',\n\t\t\tpropsProperty: 'props',\n\t\t\tsourceProperty: 'pagePath'\n\t\t}\n\t]\n]);\n\nconst posixPath = (value: string) => value.replace(/\\\\/g, '/');\n\nconst findTsconfig = (entry: string, projectRoot: string) =>\n\tts.findConfigFile(dirname(entry), existsSync, 'tsconfig.json') ??\n\tts.findConfigFile(projectRoot, existsSync, 'tsconfig.json');\n\nconst createProgram = (entry: string, projectRoot: string) => {\n\tconst configPath = findTsconfig(entry, projectRoot);\n\tif (!configPath) {\n\t\treturn ts.createProgram([entry], {\n\t\t\tallowJs: true,\n\t\t\tjsx: ts.JsxEmit.ReactJSX,\n\t\t\tmodule: ts.ModuleKind.ESNext,\n\t\t\tmoduleResolution: ts.ModuleResolutionKind.Bundler,\n\t\t\ttarget: ts.ScriptTarget.ESNext\n\t\t});\n\t}\n\n\tconst parsed = ts.parseJsonConfigFileContent(\n\t\tts.readConfigFile(configPath, (path) => readFileSync(path, 'utf8'))\n\t\t\t.config,\n\t\tts.sys,\n\t\tdirname(configPath)\n\t);\n\tif (!parsed.fileNames.includes(entry)) parsed.fileNames.push(entry);\n\n\treturn ts.createProgram(parsed.fileNames, parsed.options);\n};\n\nconst propertyName = (property: ts.ObjectLiteralElementLike) => {\n\tif (!('name' in property) || !property.name) return undefined;\n\tif (ts.isIdentifier(property.name)) return property.name.text;\n\tif (ts.isStringLiteralLike(property.name)) return property.name.text;\n\n\treturn undefined;\n};\n\nconst objectPropertyExpression = (\n\tobject: ts.ObjectLiteralExpression,\n\tname: string\n) => {\n\tconst property = object.properties.find(\n\t\t(candidate) => propertyName(candidate) === name\n\t);\n\tif (property && ts.isPropertyAssignment(property)) {\n\t\treturn property.initializer;\n\t}\n\tif (property && ts.isShorthandPropertyAssignment(property)) {\n\t\treturn property.name;\n\t}\n\n\treturn undefined;\n};\n\nconst serializeType = (\n\ttype: ts.Type,\n\tchecker: ts.TypeChecker,\n\tancestors = new Set<ts.Type>()\n): unknown => {\n\tif (type.flags & ts.TypeFlags.Any) return { type: 'any' };\n\tif (type.flags & ts.TypeFlags.Unknown) return { type: 'unknown' };\n\tif (type.flags & ts.TypeFlags.Never) return { type: 'never' };\n\tif (type.flags & ts.TypeFlags.StringLike) return { type: 'string' };\n\tif (type.flags & ts.TypeFlags.NumberLike) return { type: 'number' };\n\tif (type.flags & ts.TypeFlags.BooleanLike) return { type: 'boolean' };\n\tif (type.flags & ts.TypeFlags.BigIntLike) return { type: 'bigint' };\n\tif (type.flags & ts.TypeFlags.Null) return { type: 'null' };\n\tif (type.flags & ts.TypeFlags.Undefined) return { type: 'undefined' };\n\tif (type.isUnion()) {\n\t\treturn {\n\t\t\tanyOf: type.types\n\t\t\t\t.map((member) => serializeType(member, checker, ancestors))\n\t\t\t\t.sort((left, right) =>\n\t\t\t\t\tJSON.stringify(left).localeCompare(JSON.stringify(right))\n\t\t\t\t)\n\t\t};\n\t}\n\tif (type.isIntersection()) {\n\t\treturn {\n\t\t\tallOf: type.types\n\t\t\t\t.map((member) => serializeType(member, checker, ancestors))\n\t\t\t\t.sort((left, right) =>\n\t\t\t\t\tJSON.stringify(left).localeCompare(JSON.stringify(right))\n\t\t\t\t)\n\t\t};\n\t}\n\tif (ancestors.has(type)) {\n\t\treturn {\n\t\t\tref: checker.typeToString(\n\t\t\t\ttype,\n\t\t\t\tundefined,\n\t\t\t\tts.TypeFormatFlags.NoTruncation\n\t\t\t)\n\t\t};\n\t}\n\n\tancestors.add(type);\n\tconst arrayElement = checker.getIndexTypeOfType(type, ts.IndexKind.Number);\n\tconst properties = checker.getPropertiesOfType(type);\n\tlet schema: unknown;\n\tif (arrayElement && properties.some(({ name }) => name === 'length')) {\n\t\tschema = {\n\t\t\titems: serializeType(arrayElement, checker, ancestors),\n\t\t\ttype: 'array'\n\t\t};\n\t} else if (properties.length > 0) {\n\t\tconst entries = properties\n\t\t\t.filter(({ name }) => !name.startsWith('__'))\n\t\t\t.map((property) => {\n\t\t\t\tconst declaration =\n\t\t\t\t\tproperty.valueDeclaration ?? property.declarations?.[0];\n\t\t\t\tconst propertyType = declaration\n\t\t\t\t\t? checker.getTypeOfSymbolAtLocation(property, declaration)\n\t\t\t\t\t: checker.getDeclaredTypeOfSymbol(property);\n\n\t\t\t\treturn [\n\t\t\t\t\tproperty.name,\n\t\t\t\t\t{\n\t\t\t\t\t\toptional: Boolean(\n\t\t\t\t\t\t\tproperty.flags & ts.SymbolFlags.Optional\n\t\t\t\t\t\t),\n\t\t\t\t\t\tschema: serializeType(propertyType, checker, ancestors)\n\t\t\t\t\t}\n\t\t\t\t] as const;\n\t\t\t})\n\t\t\t.sort(([left], [right]) => left.localeCompare(right));\n\t\tschema = { properties: Object.fromEntries(entries), type: 'object' };\n\t} else {\n\t\tschema = {\n\t\t\ttype: checker.typeToString(\n\t\t\t\ttype,\n\t\t\t\tundefined,\n\t\t\t\tts.TypeFormatFlags.NoTruncation\n\t\t\t)\n\t\t};\n\t}\n\tancestors.delete(type);\n\n\treturn schema;\n};\n\nconst pagePropsType = (\n\tpageExpression: ts.Expression,\n\tpropsExpression: ts.Expression | undefined,\n\tchecker: ts.TypeChecker\n) => {\n\tconst pageType = checker.getTypeAtLocation(pageExpression);\n\tconst [signature] = pageType.getCallSignatures();\n\tconst [parameter] = signature?.parameters ?? [];\n\tconst declaration =\n\t\tparameter?.valueDeclaration ?? parameter?.declarations?.[0];\n\tif (parameter && declaration) {\n\t\treturn checker.getTypeOfSymbolAtLocation(parameter, declaration);\n\t}\n\n\treturn propsExpression\n\t\t? checker.getTypeAtLocation(propsExpression)\n\t\t: checker.getTypeAtLocation(pageExpression);\n};\n\nconst resolvePageIdentity = (\n\texpression: ts.Expression,\n\tsourceFile: ts.SourceFile,\n\tchecker: ts.TypeChecker,\n\tprojectRoot: string\n) => {\n\tlet symbol = checker.getSymbolAtLocation(expression);\n\tif (symbol?.flags && symbol.flags & ts.SymbolFlags.Alias) {\n\t\tsymbol = checker.getAliasedSymbol(symbol);\n\t}\n\tconst declaration = symbol?.declarations?.[0];\n\tconst file = declaration?.getSourceFile().fileName ?? sourceFile.fileName;\n\tconst exportedName = symbol?.name ?? expression.getText(sourceFile);\n\tconst source = posixPath(relative(projectRoot, file));\n\n\treturn `${source}#${exportedName}`;\n};\n\nconst resolveAlias = (symbol: ts.Symbol, checker: ts.TypeChecker) => {\n\tif (!(symbol.flags & ts.SymbolFlags.Alias)) return symbol;\n\n\treturn checker.getAliasedSymbol(symbol);\n};\n\nconst assetKey: AssetKeyResolver = (\n\texpression,\n\tchecker,\n\tseen = new Set<ts.Symbol>()\n) => {\n\tif (!expression) return undefined;\n\n\tif (ts.isIdentifier(expression)) {\n\t\tconst unresolved = ts.isShorthandPropertyAssignment(expression.parent)\n\t\t\t? checker.getShorthandAssignmentValueSymbol(expression.parent)\n\t\t\t: checker.getSymbolAtLocation(expression);\n\t\tif (!unresolved) return undefined;\n\t\tconst symbol = resolveAlias(unresolved, checker);\n\t\tif (seen.has(symbol)) return undefined;\n\t\tseen.add(symbol);\n\t\tconst declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n\t\tif (!declaration || !ts.isVariableDeclaration(declaration))\n\t\t\treturn undefined;\n\n\t\treturn assetKey(declaration.initializer, checker, seen);\n\t}\n\n\tif (!ts.isCallExpression(expression)) return undefined;\n\tif (\n\t\t!ts.isIdentifier(expression.expression) ||\n\t\texpression.expression.text !== 'asset'\n\t) {\n\t\treturn undefined;\n\t}\n\tconst [, key] = expression.arguments;\n\n\treturn key && ts.isStringLiteralLike(key) ? key.text : undefined;\n};\n\nconst staticString = (\n\texpression: ts.Expression,\n\tbindings: ReadonlyMap<string, string>\n): string | undefined => {\n\tif (ts.isStringLiteralLike(expression)) return expression.text;\n\tif (ts.isIdentifier(expression)) return bindings.get(expression.text);\n\tif (ts.isNoSubstitutionTemplateLiteral(expression)) return expression.text;\n\tif (!ts.isTemplateExpression(expression)) return undefined;\n\tlet value = expression.head.text;\n\tfor (const span of expression.templateSpans) {\n\t\tconst substitution = staticString(span.expression, bindings);\n\t\tif (substitution === undefined) return undefined;\n\t\tvalue += substitution + span.literal.text;\n\t}\n\n\treturn value;\n};\n\nconst assetKeyWithBindings = (\n\texpression: ts.Expression | undefined,\n\tchecker: ts.TypeChecker,\n\tbindings: ReadonlyMap<string, string> = new Map()\n) => {\n\tif (!expression) return undefined;\n\tif (\n\t\tts.isCallExpression(expression) &&\n\t\tts.isIdentifier(expression.expression) &&\n\t\texpression.expression.text === 'asset'\n\t) {\n\t\tconst [, key] = expression.arguments;\n\n\t\treturn key ? staticString(key, bindings) : undefined;\n\t}\n\n\treturn assetKey(expression, checker);\n};\n\nconst callableObject = (call: ts.CallExpression, checker: ts.TypeChecker) => {\n\tconst symbol = checker.getSymbolAtLocation(call.expression);\n\tconst resolved = symbol ? resolveAlias(symbol, checker) : undefined;\n\tconst declaration =\n\t\tresolved?.valueDeclaration ?? resolved?.declarations?.[0];\n\tlet callable:\n\t\t| ts.ArrowFunction\n\t\t| ts.FunctionDeclaration\n\t\t| ts.FunctionExpression\n\t\t| undefined;\n\tif (declaration && ts.isFunctionDeclaration(declaration)) {\n\t\tcallable = declaration;\n\t} else if (\n\t\tdeclaration &&\n\t\tts.isVariableDeclaration(declaration) &&\n\t\tdeclaration.initializer &&\n\t\t(ts.isArrowFunction(declaration.initializer) ||\n\t\t\tts.isFunctionExpression(declaration.initializer))\n\t) {\n\t\tcallable = declaration.initializer;\n\t}\n\tif (!callable) return undefined;\n\tconst bindings = new Map<string, string>();\n\tcallable.parameters.forEach((parameter, index) => {\n\t\tif (!ts.isIdentifier(parameter.name)) return;\n\t\tconst argument = call.arguments[index];\n\t\tif (!argument) return;\n\t\tconst value = staticString(argument, new Map());\n\t\tif (value !== undefined) bindings.set(parameter.name.text, value);\n\t});\n\tconst { body } = callable;\n\tif (!body) return undefined;\n\tconst expressionBody = ts.isParenthesizedExpression(body)\n\t\t? body.expression\n\t\t: body;\n\tif (ts.isObjectLiteralExpression(expressionBody)) {\n\t\treturn { bindings, object: expressionBody };\n\t}\n\tif (ts.isBlock(body)) {\n\t\tconst returned = body.statements.find(ts.isReturnStatement)?.expression;\n\t\tif (returned && ts.isObjectLiteralExpression(returned)) {\n\t\t\treturn { bindings, object: returned };\n\t\t}\n\t}\n\n\treturn undefined;\n};\n\nconst spreadObject = (\n\texpression: ts.Expression,\n\tchecker: ts.TypeChecker,\n\tbindings: ReadonlyMap<string, string>\n) => {\n\tif (ts.isObjectLiteralExpression(expression)) {\n\t\treturn { bindings, object: expression };\n\t}\n\tif (!ts.isCallExpression(expression)) return undefined;\n\n\treturn callableObject(expression, checker);\n};\n\nconst objectAssetKey = (\n\tobject: ts.ObjectLiteralExpression,\n\tname: string,\n\tchecker: ts.TypeChecker,\n\tbindings: ReadonlyMap<string, string> = new Map()\n): string | undefined => {\n\tfor (const property of [...object.properties].reverse()) {\n\t\tif (\n\t\t\tpropertyName(property) === name &&\n\t\t\tts.isShorthandPropertyAssignment(property)\n\t\t) {\n\t\t\treturn assetKeyWithBindings(property.name, checker, bindings);\n\t\t}\n\t\tif (\n\t\t\tpropertyName(property) === name &&\n\t\t\tts.isPropertyAssignment(property)\n\t\t) {\n\t\t\treturn assetKeyWithBindings(\n\t\t\t\tproperty.initializer,\n\t\t\t\tchecker,\n\t\t\t\tbindings\n\t\t\t);\n\t\t}\n\t\tif (!ts.isSpreadAssignment(property)) continue;\n\t\tconst nestedObject = spreadObject(\n\t\t\tproperty.expression,\n\t\t\tchecker,\n\t\t\tbindings\n\t\t);\n\t\tif (!nestedObject) continue;\n\t\tconst nested = objectAssetKey(\n\t\t\tnestedObject.object,\n\t\t\tname,\n\t\t\tchecker,\n\t\t\tnestedObject.bindings\n\t\t);\n\t\tif (nested) return nested;\n\t}\n\n\treturn undefined;\n};\n\nconst findPageCall = (nodes: readonly ts.Node[]) => {\n\tlet found:\n\t\t| { definition: PageHandlerDefinition; node: ts.CallExpression }\n\t\t| undefined;\n\tconst visit = (candidate: ts.Node) => {\n\t\tif (found) return;\n\t\tif (\n\t\t\tts.isCallExpression(candidate) &&\n\t\t\tts.isIdentifier(candidate.expression) &&\n\t\t\tPAGE_HANDLERS.has(candidate.expression.text)\n\t\t) {\n\t\t\tconst definition = PAGE_HANDLERS.get(candidate.expression.text);\n\t\t\tif (!definition) return;\n\t\t\tfound = { definition, node: candidate };\n\n\t\t\treturn;\n\t\t}\n\t\tts.forEachChild(candidate, visit);\n\t};\n\tfor (const node of nodes) visit(node);\n\n\treturn found;\n};\n\nconst isProjectSource = (\n\tsourceFile: ts.SourceFile,\n\tresolvedFile: string,\n\tprojectRoot: string\n) =>\n\t!sourceFile.isDeclarationFile &&\n\t!resolvedFile.includes('/node_modules/') &&\n\tresolvedFile.startsWith(`${projectRoot}/`);\n\nconst analyzeRouteCall = (\n\tnode: ts.CallExpression,\n\tsourceFile: ts.SourceFile,\n\tchecker: ts.TypeChecker,\n\tprojectRoot: string\n) => {\n\tconst callee = node.expression;\n\tif (!ts.isPropertyAccessExpression(callee)) return undefined;\n\tif (!ROUTE_METHODS.has(callee.name.text)) return undefined;\n\tconst [routePath] = node.arguments;\n\tif (!routePath || !ts.isStringLiteralLike(routePath)) return undefined;\n\tconst foundPageCall = findPageCall(node.arguments.slice(1));\n\tconst pageCall = foundPageCall?.node;\n\tconst definition = foundPageCall?.definition;\n\tconst [input] = pageCall?.arguments ?? [];\n\tif (!pageCall || !input) {\n\t\treturn undefined;\n\t}\n\tif (!definition) return undefined;\n\tif (definition.inputKind === 'static') {\n\t\tconst bundleKey = assetKey(input, checker);\n\t\tif (!bundleKey) return undefined;\n\t\tconst pageId = `${definition.framework}:${bundleKey}`;\n\t\tconst propsSchemaHash = hashAbsoluteMobilePropsSchema({\n\t\t\tproperties: {},\n\t\t\ttype: 'object'\n\t\t});\n\n\t\treturn {\n\t\t\tinputKind: 'static',\n\t\t\tmetadata: {\n\t\t\t\tbundleKey,\n\t\t\t\tcontract: `${definition.framework}:${pageId}:${propsSchemaHash}`,\n\t\t\t\tframework: definition.framework,\n\t\t\t\tpageId,\n\t\t\t\tpropsSchemaHash\n\t\t\t},\n\t\t\tpageCallStart: pageCall.getStart(sourceFile),\n\t\t\trouteCallSpan: `${node.getStart(sourceFile)}:${node.end}`\n\t\t} satisfies AnalyzedPageCall;\n\t}\n\tif (!ts.isObjectLiteralExpression(input) || !definition.bundleProperty) {\n\t\treturn undefined;\n\t}\n\tconst page = definition.pageProperty\n\t\t? objectPropertyExpression(input, definition.pageProperty)\n\t\t: undefined;\n\tconst source = definition.sourceProperty\n\t\t? objectAssetKey(input, definition.sourceProperty, checker)\n\t\t: undefined;\n\tif (definition.pageProperty && !page) return undefined;\n\tif (definition.sourceProperty && !source) return undefined;\n\tconst props = objectPropertyExpression(input, definition.propsProperty);\n\tconst bundleKey = objectAssetKey(input, definition.bundleProperty, checker);\n\tif (!bundleKey) return undefined;\n\tconst pageId = page\n\t\t? resolvePageIdentity(page, sourceFile, checker, projectRoot)\n\t\t: `${definition.framework}:${source}`;\n\tlet propsType: ts.Type | undefined;\n\tif (page) propsType = pagePropsType(page, props, checker);\n\telse if (props) propsType = checker.getTypeAtLocation(props);\n\tconst schema = propsType\n\t\t? serializeType(propsType, checker)\n\t\t: { properties: {}, type: 'object' };\n\tconst propsSchemaHash = hashAbsoluteMobilePropsSchema(schema);\n\tconst metadata: AbsoluteMobileBuildPageMetadata = {\n\t\tbundleKey,\n\t\tcontract: `${definition.framework}:${pageId}:${propsSchemaHash}`,\n\t\tframework: definition.framework,\n\t\tpageId,\n\t\tpropsSchemaHash\n\t};\n\tconst result: AnalyzedPageCall = {\n\t\tinputKind: 'object',\n\t\tmetadata,\n\t\tpageCallStart: pageCall.getStart(sourceFile),\n\t\trouteCallSpan: `${node.getStart(sourceFile)}:${node.end}`\n\t};\n\n\treturn result;\n};\n\nconst analyzeSourceFile = (\n\tsourceFile: ts.SourceFile,\n\tchecker: ts.TypeChecker,\n\tprojectRoot: string\n) => {\n\tconst analysis: AnalyzedFile = {\n\t\tbyPageCall: new Map(),\n\t\tbyRouteCall: new Map()\n\t};\n\tconst visit = (node: ts.Node) => {\n\t\tconst result = ts.isCallExpression(node)\n\t\t\t? analyzeRouteCall(node, sourceFile, checker, projectRoot)\n\t\t\t: undefined;\n\t\tif (result) {\n\t\t\tanalysis.byPageCall.set(result.pageCallStart, result);\n\t\t\tanalysis.byRouteCall.set(result.routeCallSpan, result);\n\t\t}\n\t\tts.forEachChild(node, visit);\n\t};\n\tts.forEachChild(sourceFile, visit);\n\n\treturn analysis;\n};\n\nconst analyzeProgram = (program: ts.Program, projectRoot: string) => {\n\tconst checker = program.getTypeChecker();\n\tconst analyzed = new Map<string, AnalyzedFile>();\n\tfor (const sourceFile of program.getSourceFiles()) {\n\t\tconst resolvedFile = resolve(sourceFile.fileName);\n\t\tif (!isProjectSource(sourceFile, resolvedFile, projectRoot)) continue;\n\t\tconst analysis = analyzeSourceFile(sourceFile, checker, projectRoot);\n\t\tif (analysis.byPageCall.size > 0) analyzed.set(resolvedFile, analysis);\n\t}\n\n\treturn analyzed;\n};\n\nconst metadataExpression = (metadata: AbsoluteMobileBuildPageMetadata) =>\n\tts.factory.createObjectLiteralExpression(\n\t\tObject.entries(metadata).map(([key, item]) =>\n\t\t\tts.factory.createPropertyAssignment(\n\t\t\t\tts.factory.createStringLiteral(key),\n\t\t\t\tts.factory.createStringLiteral(item)\n\t\t\t)\n\t\t),\n\t\tfalse\n\t);\n\nconst routeOptions = (\n\texisting: ts.Expression | undefined,\n\tmetadata: AbsoluteMobileBuildPageMetadata\n) => {\n\tconst detail = ts.factory.createObjectLiteralExpression([\n\t\tts.factory.createPropertyAssignment(\n\t\t\tts.factory.createStringLiteral(ABSOLUTE_MOBILE_ROUTE_DETAIL),\n\t\t\tmetadataExpression(metadata)\n\t\t)\n\t]);\n\tif (!existing) {\n\t\treturn ts.factory.createObjectLiteralExpression([\n\t\t\tts.factory.createPropertyAssignment('detail', detail)\n\t\t]);\n\t}\n\n\treturn ts.factory.createObjectLiteralExpression([\n\t\tts.factory.createSpreadAssignment(existing),\n\t\tts.factory.createPropertyAssignment(\n\t\t\t'detail',\n\t\t\tts.factory.createObjectLiteralExpression([\n\t\t\t\tts.factory.createSpreadAssignment(\n\t\t\t\t\tts.factory.createPropertyAccessExpression(\n\t\t\t\t\t\texisting,\n\t\t\t\t\t\t'detail'\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tts.factory.createPropertyAssignment(\n\t\t\t\t\tts.factory.createStringLiteral(\n\t\t\t\t\t\tABSOLUTE_MOBILE_ROUTE_DETAIL\n\t\t\t\t\t),\n\t\t\t\t\tmetadataExpression(metadata)\n\t\t\t\t)\n\t\t\t])\n\t\t)\n\t]);\n};\n\nconst transformPageCall = (\n\tnode: ts.CallExpression,\n\tpage: AnalyzedPageCall | undefined\n) => {\n\tif (!page) return undefined;\n\tif (page.inputKind === 'static') {\n\t\tconst [pagePath, existingOptions, ...rest] = node.arguments;\n\t\tif (!pagePath) return undefined;\n\t\tconst options = ts.factory.createObjectLiteralExpression([\n\t\t\t...(existingOptions\n\t\t\t\t? [ts.factory.createSpreadAssignment(existingOptions)]\n\t\t\t\t: []),\n\t\t\tts.factory.createPropertyAssignment(\n\t\t\t\t'__absoluteMobile',\n\t\t\t\tmetadataExpression(page.metadata)\n\t\t\t)\n\t\t]);\n\n\t\treturn ts.factory.updateCallExpression(\n\t\t\tnode,\n\t\t\tnode.expression,\n\t\t\tnode.typeArguments,\n\t\t\t[pagePath, options, ...rest]\n\t\t);\n\t}\n\tconst [input] = node.arguments;\n\tif (!input || !ts.isObjectLiteralExpression(input)) return undefined;\n\n\treturn ts.factory.updateCallExpression(\n\t\tnode,\n\t\tnode.expression,\n\t\tnode.typeArguments,\n\t\t[\n\t\t\tts.factory.updateObjectLiteralExpression(input, [\n\t\t\t\t...input.properties,\n\t\t\t\tts.factory.createPropertyAssignment(\n\t\t\t\t\t'__absoluteMobile',\n\t\t\t\t\tmetadataExpression(page.metadata)\n\t\t\t\t)\n\t\t\t]),\n\t\t\t...node.arguments.slice(1)\n\t\t]\n\t);\n};\n\nconst transformRouteCall = (\n\tnode: ts.CallExpression,\n\troute: AnalyzedPageCall | undefined\n) => {\n\tif (!route) return undefined;\n\tconst [path, maybeOptions, maybeHandler, ...rest] = node.arguments;\n\tif (!path || !maybeOptions) return undefined;\n\tconst options = maybeHandler ? maybeOptions : undefined;\n\tconst handler = maybeHandler ?? maybeOptions;\n\n\treturn ts.factory.updateCallExpression(\n\t\tnode,\n\t\tnode.expression,\n\t\tnode.typeArguments,\n\t\t[path, routeOptions(options, route.metadata), handler, ...rest]\n\t);\n};\n\nconst transformFile = (\n\tsource: string,\n\tfileName: string,\n\tanalysis: AnalyzedFile\n) => {\n\tconst sourceFile = ts.createSourceFile(\n\t\tfileName,\n\t\tsource,\n\t\tts.ScriptTarget.Latest,\n\t\ttrue,\n\t\tfileName.endsWith('x') ? ts.ScriptKind.TSX : ts.ScriptKind.TS\n\t);\n\tconst transformer: ts.TransformerFactory<ts.SourceFile> = (context) => {\n\t\tconst visit: ts.Visitor = (node) => {\n\t\t\tif (!ts.isCallExpression(node)) {\n\t\t\t\treturn ts.visitEachChild(node, visit, context);\n\t\t\t}\n\t\t\tconst transformedChildren = ts.visitEachChild(node, visit, context);\n\t\t\tconst page = analysis.byPageCall.get(node.getStart(sourceFile));\n\t\t\tconst transformedPage = transformPageCall(\n\t\t\t\ttransformedChildren,\n\t\t\t\tpage\n\t\t\t);\n\t\t\tif (transformedPage) return transformedPage;\n\t\t\tconst route = analysis.byRouteCall.get(\n\t\t\t\t`${node.getStart(sourceFile)}:${node.end}`\n\t\t\t);\n\t\t\tconst transformedRoute = transformRouteCall(\n\t\t\t\ttransformedChildren,\n\t\t\t\troute\n\t\t\t);\n\t\t\tif (transformedRoute) return transformedRoute;\n\n\t\t\treturn transformedChildren;\n\t\t};\n\n\t\treturn (node) => ts.visitNode(node, visit, ts.isSourceFile) ?? node;\n\t};\n\tconst result = ts.transform(sourceFile, [transformer]);\n\ttry {\n\t\tconst [transformed] = result.transformed;\n\t\tif (!transformed) throw new TypeError('Mobile route transform failed.');\n\n\t\treturn ts.createPrinter().printFile(transformed);\n\t} finally {\n\t\tresult.dispose();\n\t}\n};\n\nexport const ABSOLUTE_MOBILE_TRANSFORM_PROTOCOL =\n\tABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION;\nexport const createAbsoluteMobileRouteMetadataPlugin = (\n\toptions: MobileRouteTransformOptions\n): BunPlugin => {\n\tconst projectRoot = resolve(options.projectRoot ?? process.cwd());\n\tconst entry = resolve(options.entry);\n\tconst analyzed = analyzeProgram(\n\t\tcreateProgram(entry, projectRoot),\n\t\tprojectRoot\n\t);\n\n\treturn {\n\t\tname: 'absolute-mobile-route-metadata',\n\t\tsetup(build) {\n\t\t\tbuild.onLoad({ filter: SOURCE_FILTER }, async ({ path }) => {\n\t\t\t\tconst analysis = analyzed.get(resolve(path));\n\t\t\t\tif (!analysis) return undefined;\n\t\t\t\tconst source = await Bun.file(path).text();\n\n\t\t\t\treturn {\n\t\t\t\t\tcontents: transformFile(source, path, analysis),\n\t\t\t\t\tloader: extname(path).endsWith('x') ? 'tsx' : 'ts'\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t};\n};\nexport const inspectAbsoluteMobileRouteMetadata = (\n\toptions: MobileRouteTransformOptions\n) => {\n\tconst projectRoot = resolve(options.projectRoot ?? process.cwd());\n\tconst entry = resolve(options.entry);\n\tconst analyzed = analyzeProgram(\n\t\tcreateProgram(entry, projectRoot),\n\t\tprojectRoot\n\t);\n\n\treturn [...analyzed.entries()].flatMap(([file, analysis]) =>\n\t\t[...analysis.byRouteCall.values()].map(({ metadata }) => ({\n\t\t\tfile: posixPath(relative(projectRoot, file)),\n\t\t\tmetadata\n\t\t}))\n\t);\n};\n"
36
40
  ],
37
- "mappings": "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",
38
- "debugId": "048422942BB9C32864756E2164756E21",
41
+ "mappings": "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",
42
+ "debugId": "7AFC88B0A927AFE564756E2164756E21",
39
43
  "names": []
40
44
  }