1{"version":3,"file":"Manifest.js","names":["writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","XML","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","e","$","endsWith","getMainApplicationOrThrow","mainApplication","assert","getMainActivityOrThrow","mainActivity","getMainActivity","getRunnableActivity","enabledActivities","activity","Array","isArray","intentFilter","action","find","category","addMetaDataItemToMainApplication","itemName","itemValue","itemType","existingMetaDataItem","newItem","prefixAndroidKeys","name","length","push","removeMetaDataItemFromMainApplication","index","findMetaDataItem","splice","findApplicationSubItem","parent","findIndex","findUsesLibraryItem","getMainApplicationMetaDataValue","hasOwnProperty","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","Object","entries","reduce","prev","key","curr","ensureToolsAvailable","ensureManifestHasNamespace","namespace","url"],"sources":["../../src/android/Manifest.ts"],"sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as XML from '../utils/XML';\n\nexport type StringBoolean = 'true' | 'false';\n\ntype ManifestMetaDataAttributes = AndroidManifestAttributes & {\n  'android:value'?: string;\n  'android:resource'?: string;\n};\n\ntype AndroidManifestAttributes = {\n  'android:name': string | 'android.intent.action.VIEW';\n  'tools:node'?: string | 'remove';\n};\n\ntype ManifestAction = {\n  $: AndroidManifestAttributes;\n};\n\ntype ManifestCategory = {\n  $: AndroidManifestAttributes;\n};\n\ntype ManifestData = {\n  $: {\n    [key: string]: string | undefined;\n    'android:host'?: string;\n    'android:pathPrefix'?: string;\n    'android:scheme'?: string;\n  };\n};\n\ntype ManifestReceiver = {\n  $: AndroidManifestAttributes & {\n    'android:exported'?: StringBoolean;\n    'android:enabled'?: StringBoolean;\n  };\n  'intent-filter'?: ManifestIntentFilter[];\n};\n\nexport type ManifestIntentFilter = {\n  $?: {\n    'android:autoVerify'?: StringBoolean;\n    'data-generated'?: StringBoolean;\n  };\n  action?: ManifestAction[];\n  data?: ManifestData[];\n  category?: ManifestCategory[];\n};\n\nexport type ManifestMetaData = {\n  $: ManifestMetaDataAttributes;\n};\n\ntype ManifestServiceAttributes = AndroidManifestAttributes & {\n  'android:enabled'?: StringBoolean;\n  'android:exported'?: StringBoolean;\n  'android:permission'?: string;\n  // ...\n};\n\ntype ManifestService = {\n  $: ManifestServiceAttributes;\n  'intent-filter'?: ManifestIntentFilter[];\n};\n\ntype ManifestApplicationAttributes = {\n  'android:name': string | '.MainApplication';\n  'android:icon'?: string;\n  'android:roundIcon'?: string;\n  'android:label'?: string;\n  'android:allowBackup'?: StringBoolean;\n  'android:largeHeap'?: StringBoolean;\n  'android:requestLegacyExternalStorage'?: StringBoolean;\n  'android:usesCleartextTraffic'?: StringBoolean;\n  [key: string]: string | undefined;\n};\n\nexport type ManifestActivity = {\n  $: ManifestApplicationAttributes & {\n    'android:exported'?: StringBoolean;\n    'android:launchMode'?: string;\n    'android:theme'?: string;\n    'android:windowSoftInputMode'?:\n      | string\n      | 'stateUnspecified'\n      | 'stateUnchanged'\n      | 'stateHidden'\n      | 'stateAlwaysHidden'\n      | 'stateVisible'\n      | 'stateAlwaysVisible'\n      | 'adjustUnspecified'\n      | 'adjustResize'\n      | 'adjustPan';\n    [key: string]: string | undefined;\n  };\n  'intent-filter'?: ManifestIntentFilter[];\n  // ...\n};\n\nexport type ManifestUsesLibrary = {\n  $: AndroidManifestAttributes & {\n    'android:required'?: StringBoolean;\n  };\n};\n\nexport type ManifestApplication = {\n  $: ManifestApplicationAttributes;\n  activity?: ManifestActivity[];\n  service?: ManifestService[];\n  receiver?: ManifestReceiver[];\n  'meta-data'?: ManifestMetaData[];\n  'uses-library'?: ManifestUsesLibrary[];\n  // ...\n};\n\ntype ManifestPermission = {\n  $: AndroidManifestAttributes & {\n    'android:protectionLevel'?: string | 'signature';\n  };\n};\n\nexport type ManifestUsesPermission = {\n  $: AndroidManifestAttributes;\n};\n\ntype ManifestUsesFeature = {\n  $: AndroidManifestAttributes & {\n    'android:glEsVersion'?: string;\n    'android:required': StringBoolean;\n  };\n};\n\nexport type AndroidManifest = {\n  manifest: {\n    // Probably more, but this is currently all we'd need for most cases in Expo.\n    $: {\n      'xmlns:android': string;\n      'xmlns:tools'?: string;\n      package?: string;\n      [key: string]: string | undefined;\n    };\n    permission?: ManifestPermission[];\n    'uses-permission'?: ManifestUsesPermission[];\n    'uses-permission-sdk-23'?: ManifestUsesPermission[];\n    'uses-feature'?: ManifestUsesFeature[];\n    application?: ManifestApplication[];\n  };\n};\n\nexport async function writeAndroidManifestAsync(\n  manifestPath: string,\n  androidManifest: AndroidManifest\n): Promise<void> {\n  const manifestXml = XML.format(androidManifest);\n  await fs.promises.mkdir(path.dirname(manifestPath), { recursive: true });\n  await fs.promises.writeFile(manifestPath, manifestXml);\n}\n\nexport async function readAndroidManifestAsync(manifestPath: string): Promise<AndroidManifest> {\n  const xml = await XML.readXMLAsync({ path: manifestPath });\n  if (!isManifest(xml)) {\n    throw new Error('Invalid manifest found at: ' + manifestPath);\n  }\n  return xml;\n}\n\nfunction isManifest(xml: XML.XMLObject): xml is AndroidManifest {\n  // TODO: Maybe more validation\n  return !!xml.manifest;\n}\n\n/** Returns the `manifest.application` tag ending in `.MainApplication` */\nexport function getMainApplication(androidManifest: AndroidManifest): ManifestApplication | null {\n  return (\n    androidManifest?.manifest?.application?.filter((e) =>\n      e?.$?.['android:name'].endsWith('.MainApplication')\n    )[0] ?? null\n  );\n}\n\nexport function getMainApplicationOrThrow(androidManifest: AndroidManifest): ManifestApplication {\n  const mainApplication = getMainApplication(androidManifest);\n  assert(mainApplication, 'AndroidManifest.xml is missing the required MainApplication element');\n  return mainApplication;\n}\n\nexport function getMainActivityOrThrow(androidManifest: AndroidManifest): ManifestActivity {\n  const mainActivity = getMainActivity(androidManifest);\n  assert(mainActivity, 'AndroidManifest.xml is missing the required MainActivity element');\n  return mainActivity;\n}\n\nexport function getRunnableActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n  // Get enabled activities\n  const enabledActivities = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n    (e: any) => e.$['android:enabled'] !== 'false' && e.$['android:enabled'] !== false\n  );\n\n  if (!enabledActivities) {\n    return null;\n  }\n\n  // Get the activity that has a runnable intent-filter\n  for (const activity of enabledActivities) {\n    if (Array.isArray(activity['intent-filter'])) {\n      for (const intentFilter of activity['intent-filter']) {\n        if (\n          intentFilter.action?.find(\n            (action) => action.$['android:name'] === 'android.intent.action.MAIN'\n          ) &&\n          intentFilter.category?.find(\n            (category) => category.$['android:name'] === 'android.intent.category.LAUNCHER'\n          )\n        ) {\n          return activity;\n        }\n      }\n    }\n  }\n\n  return null;\n}\n\nexport function getMainActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n  const mainActivity = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n    (e: any) => e.$['android:name'] === '.MainActivity'\n  );\n  return mainActivity?.[0] ?? null;\n}\n\nexport function addMetaDataItemToMainApplication(\n  mainApplication: ManifestApplication,\n  itemName: string,\n  itemValue: string,\n  itemType: 'resource' | 'value' = 'value'\n): ManifestApplication {\n  let existingMetaDataItem;\n  const newItem = {\n    $: prefixAndroidKeys({ name: itemName, [itemType]: itemValue }),\n  } as ManifestMetaData;\n  if (mainApplication['meta-data']) {\n    existingMetaDataItem = mainApplication['meta-data'].filter(\n      (e: any) => e.$['android:name'] === itemName\n    );\n    if (existingMetaDataItem.length) {\n      existingMetaDataItem[0].$[`android:${itemType}` as keyof ManifestMetaDataAttributes] =\n        itemValue;\n    } else {\n      mainApplication['meta-data'].push(newItem);\n    }\n  } else {\n    mainApplication['meta-data'] = [newItem];\n  }\n  return mainApplication;\n}\n\nexport function removeMetaDataItemFromMainApplication(mainApplication: any, itemName: string) {\n  const index = findMetaDataItem(mainApplication, itemName);\n  if (mainApplication?.['meta-data'] && index > -1) {\n    mainApplication['meta-data'].splice(index, 1);\n  }\n  return mainApplication;\n}\n\nfunction findApplicationSubItem(\n  mainApplication: ManifestApplication,\n  category: keyof ManifestApplication,\n  itemName: string\n): number {\n  const parent = mainApplication[category];\n  if (Array.isArray(parent)) {\n    const index = parent.findIndex((e: any) => e.$['android:name'] === itemName);\n\n    return index;\n  }\n  return -1;\n}\n\nexport function findMetaDataItem(mainApplication: any, itemName: string): number {\n  return findApplicationSubItem(mainApplication, 'meta-data', itemName);\n}\n\nexport function findUsesLibraryItem(mainApplication: any, itemName: string): number {\n  return findApplicationSubItem(mainApplication, 'uses-library', itemName);\n}\n\nexport function getMainApplicationMetaDataValue(\n  androidManifest: AndroidManifest,\n  name: string\n): string | null {\n  const mainApplication = getMainApplication(androidManifest);\n\n  if (mainApplication?.hasOwnProperty('meta-data')) {\n    const item = mainApplication?.['meta-data']?.find((e: any) => e.$['android:name'] === name);\n    return item?.$['android:value'] ?? null;\n  }\n\n  return null;\n}\n\nexport function addUsesLibraryItemToMainApplication(\n  mainApplication: ManifestApplication,\n  item: { name: string; required?: boolean }\n): ManifestApplication {\n  let existingMetaDataItem;\n  const newItem = {\n    $: prefixAndroidKeys(item),\n  } as ManifestUsesLibrary;\n\n  if (mainApplication['uses-library']) {\n    existingMetaDataItem = mainApplication['uses-library'].filter(\n      (e) => e.$['android:name'] === item.name\n    );\n    if (existingMetaDataItem.length) {\n      existingMetaDataItem[0].$ = newItem.$;\n    } else {\n      mainApplication['uses-library'].push(newItem);\n    }\n  } else {\n    mainApplication['uses-library'] = [newItem];\n  }\n  return mainApplication;\n}\n\nexport function removeUsesLibraryItemFromMainApplication(\n  mainApplication: ManifestApplication,\n  itemName: string\n) {\n  const index = findUsesLibraryItem(mainApplication, itemName);\n  if (mainApplication?.['uses-library'] && index > -1) {\n    mainApplication['uses-library'].splice(index, 1);\n  }\n  return mainApplication;\n}\n\nexport function prefixAndroidKeys<T extends Record<string, any> = Record<string, string>>(\n  head: T\n): Record<string, any> {\n  // prefix all keys with `android:`\n  return Object.entries(head).reduce(\n    (prev, [key, curr]) => ({ ...prev, [`android:${key}`]: curr }),\n    {} as T\n  );\n}\n\n/**\n * Ensure the `tools:*` namespace is available in the manifest.\n *\n * @param manifest AndroidManifest.xml\n * @returns manifest with the `tools:*` namespace available\n */\nexport function ensureToolsAvailable(manifest: AndroidManifest) {\n  return ensureManifestHasNamespace(manifest, {\n    namespace: 'xmlns:tools',\n    url: 'http://schemas.android.com/tools',\n  });\n}\n\n/**\n * Ensure a particular namespace is available in the manifest.\n *\n * @param manifest `AndroidManifest.xml`\n * @returns manifest with the provided namespace available\n */\nfunction ensureManifestHasNamespace(\n  manifest: AndroidManifest,\n  { namespace, url }: { namespace: string; url: string }\n) {\n  if (manifest?.manifest?.$?.[namespace]) {\n    return manifest;\n  }\n  manifest.manifest.$[namespace] = url;\n  return manifest;\n}\n"],"mappings":"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"}