@expo/config-plugins 8.0.3 → 8.0.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.
@@ -116,7 +116,7 @@ export type AndroidManifest = {
116
116
  };
117
117
  type ManifestQueryIntent = Omit<ManifestIntentFilter, '$'>;
118
118
  export type ManifestQuery = {
119
- package: {
119
+ package?: {
120
120
  $: {
121
121
  'android:name': string;
122
122
  };
@@ -126,7 +126,7 @@ export type ManifestQuery = {
126
126
  $: {
127
127
  'android:authorities': string;
128
128
  };
129
- };
129
+ }[];
130
130
  };
131
131
  export declare function writeAndroidManifestAsync(manifestPath: string, androidManifest: AndroidManifest): Promise<void>;
132
132
  export declare function readAndroidManifestAsync(manifestPath: string): Promise<AndroidManifest>;
@@ -1 +1 @@
1
- {"version":3,"file":"Manifest.js","names":["_assert","data","_interopRequireDefault","require","_fs","_path","XML","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","$","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","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","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:supportsPictureInPicture'?: 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 queries: ManifestQuery[];\n application?: ManifestApplication[];\n };\n};\n\ntype ManifestQueryIntent = Omit<ManifestIntentFilter, '$'>;\n\nexport type ManifestQuery = {\n package: {\n $: {\n 'android:name': string;\n };\n }[];\n intent?: ManifestQueryIntent[];\n provider?: {\n $: {\n 'android:authorities': string;\n };\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":";;;;;;;;;;;;;;;;;;;;;AAAA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,IAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,GAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,MAAA;EAAA,MAAAJ,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAE,KAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAK,IAAA;EAAA,MAAAL,IAAA,GAAAM,uBAAA,CAAAJ,OAAA;EAAAG,GAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAoC,SAAAO,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAF,wBAAAE,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAf,uBAAA2B,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAhB,UAAA,GAAAgB,GAAA,KAAAf,OAAA,EAAAe,GAAA;AAuK7B,eAAeC,yBAAyBA,CAC7CC,YAAoB,EACpBC,eAAgC,EACjB;EACf,MAAMC,WAAW,GAAG3B,GAAG,CAAD,CAAC,CAAC4B,MAAM,CAACF,eAAe,CAAC;EAC/C,MAAMG,aAAE,CAACC,QAAQ,CAACC,KAAK,CAACC,eAAI,CAACC,OAAO,CAACR,YAAY,CAAC,EAAE;IAAES,SAAS,EAAE;EAAK,CAAC,CAAC;EACxE,MAAML,aAAE,CAACC,QAAQ,CAACK,SAAS,CAACV,YAAY,EAAEE,WAAW,CAAC;AACxD;AAEO,eAAeS,wBAAwBA,CAACX,YAAoB,EAA4B;EAC7F,MAAMY,GAAG,GAAG,MAAMrC,GAAG,CAAD,CAAC,CAACsC,YAAY,CAAC;IAAEN,IAAI,EAAEP;EAAa,CAAC,CAAC;EAC1D,IAAI,CAACc,UAAU,CAACF,GAAG,CAAC,EAAE;IACpB,MAAM,IAAIG,KAAK,CAAC,6BAA6B,GAAGf,YAAY,CAAC;EAC/D;EACA,OAAOY,GAAG;AACZ;AAEA,SAASE,UAAUA,CAACF,GAAkB,EAA0B;EAC9D;EACA,OAAO,CAAC,CAACA,GAAG,CAACI,QAAQ;AACvB;;AAEA;AACO,SAASC,kBAAkBA,CAAChB,eAAgC,EAA8B;EAC/F,OACEA,eAAe,EAAEe,QAAQ,EAAEE,WAAW,EAAEC,MAAM,CAAEzC,CAAC,IAC/CA,CAAC,EAAE0C,CAAC,GAAG,cAAc,CAAC,CAACC,QAAQ,CAAC,kBAAkB,CACpD,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AAEhB;AAEO,SAASC,yBAAyBA,CAACrB,eAAgC,EAAuB;EAC/F,MAAMsB,eAAe,GAAGN,kBAAkB,CAAChB,eAAe,CAAC;EAC3D,IAAAuB,iBAAM,EAACD,eAAe,EAAE,qEAAqE,CAAC;EAC9F,OAAOA,eAAe;AACxB;AAEO,SAASE,sBAAsBA,CAACxB,eAAgC,EAAoB;EACzF,MAAMyB,YAAY,GAAGC,eAAe,CAAC1B,eAAe,CAAC;EACrD,IAAAuB,iBAAM,EAACE,YAAY,EAAE,kEAAkE,CAAC;EACxF,OAAOA,YAAY;AACrB;AAEO,SAASE,mBAAmBA,CAAC3B,eAAgC,EAA2B;EAC7F;EACA,MAAM4B,iBAAiB,GAAG5B,eAAe,EAAEe,QAAQ,EAAEE,WAAW,GAAG,CAAC,CAAC,EAAEY,QAAQ,EAAEX,MAAM,GACpFzC,CAAM,IAAKA,CAAC,CAAC0C,CAAC,CAAC,iBAAiB,CAAC,KAAK,OAAO,IAAI1C,CAAC,CAAC0C,CAAC,CAAC,iBAAiB,CAAC,KAAK,KAC/E,CAAC;EAED,IAAI,CAACS,iBAAiB,EAAE;IACtB,OAAO,IAAI;EACb;;EAEA;EACA,KAAK,MAAMC,QAAQ,IAAID,iBAAiB,EAAE;IACxC,IAAIE,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE;MAC5C,KAAK,MAAMG,YAAY,IAAIH,QAAQ,CAAC,eAAe,CAAC,EAAE;QACpD,IACEG,YAAY,CAACC,MAAM,EAAEC,IAAI,CACtBD,MAAM,IAAKA,MAAM,CAACd,CAAC,CAAC,cAAc,CAAC,KAAK,4BAC3C,CAAC,IACDa,YAAY,CAACG,QAAQ,EAAED,IAAI,CACxBC,QAAQ,IAAKA,QAAQ,CAAChB,CAAC,CAAC,cAAc,CAAC,KAAK,kCAC/C,CAAC,EACD;UACA,OAAOU,QAAQ;QACjB;MACF;IACF;EACF;EAEA,OAAO,IAAI;AACb;AAEO,SAASH,eAAeA,CAAC1B,eAAgC,EAA2B;EACzF,MAAMyB,YAAY,GAAGzB,eAAe,EAAEe,QAAQ,EAAEE,WAAW,GAAG,CAAC,CAAC,EAAEY,QAAQ,EAAEX,MAAM,GAC/EzC,CAAM,IAAKA,CAAC,CAAC0C,CAAC,CAAC,cAAc,CAAC,KAAK,eACtC,CAAC;EACD,OAAOM,YAAY,GAAG,CAAC,CAAC,IAAI,IAAI;AAClC;AAEO,SAASW,gCAAgCA,CAC9Cd,eAAoC,EACpCe,QAAgB,EAChBC,SAAiB,EACjBC,QAA8B,GAAG,OAAO,EACnB;EACrB,IAAIC,oBAAoB;EACxB,MAAMC,OAAO,GAAG;IACdtB,CAAC,EAAEuB,iBAAiB,CAAC;MAAEC,IAAI,EAAEN,QAAQ;MAAE,CAACE,QAAQ,GAAGD;IAAU,CAAC;EAChE,CAAqB;EACrB,IAAIhB,eAAe,CAAC,WAAW,CAAC,EAAE;IAChCkB,oBAAoB,GAAGlB,eAAe,CAAC,WAAW,CAAC,CAACJ,MAAM,CACvDzC,CAAM,IAAKA,CAAC,CAAC0C,CAAC,CAAC,cAAc,CAAC,KAAKkB,QACtC,CAAC;IACD,IAAIG,oBAAoB,CAACI,MAAM,EAAE;MAC/BJ,oBAAoB,CAAC,CAAC,CAAC,CAACrB,CAAC,CAAE,WAAUoB,QAAS,EAAC,CAAqC,GAClFD,SAAS;IACb,CAAC,MAAM;MACLhB,eAAe,CAAC,WAAW,CAAC,CAACuB,IAAI,CAACJ,OAAO,CAAC;IAC5C;EACF,CAAC,MAAM;IACLnB,eAAe,CAAC,WAAW,CAAC,GAAG,CAACmB,OAAO,CAAC;EAC1C;EACA,OAAOnB,eAAe;AACxB;AAEO,SAASwB,qCAAqCA,CAACxB,eAAoB,EAAEe,QAAgB,EAAE;EAC5F,MAAMU,KAAK,GAAGC,gBAAgB,CAAC1B,eAAe,EAAEe,QAAQ,CAAC;EACzD,IAAIf,eAAe,GAAG,WAAW,CAAC,IAAIyB,KAAK,GAAG,CAAC,CAAC,EAAE;IAChDzB,eAAe,CAAC,WAAW,CAAC,CAAC2B,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;EAC/C;EACA,OAAOzB,eAAe;AACxB;AAEA,SAAS4B,sBAAsBA,CAC7B5B,eAAoC,EACpCa,QAAmC,EACnCE,QAAgB,EACR;EACR,MAAMc,MAAM,GAAG7B,eAAe,CAACa,QAAQ,CAAC;EACxC,IAAIL,KAAK,CAACC,OAAO,CAACoB,MAAM,CAAC,EAAE;IACzB,MAAMJ,KAAK,GAAGI,MAAM,CAACC,SAAS,CAAE3E,CAAM,IAAKA,CAAC,CAAC0C,CAAC,CAAC,cAAc,CAAC,KAAKkB,QAAQ,CAAC;IAE5E,OAAOU,KAAK;EACd;EACA,OAAO,CAAC,CAAC;AACX;AAEO,SAASC,gBAAgBA,CAAC1B,eAAoB,EAAEe,QAAgB,EAAU;EAC/E,OAAOa,sBAAsB,CAAC5B,eAAe,EAAE,WAAW,EAAEe,QAAQ,CAAC;AACvE;AAEO,SAASgB,mBAAmBA,CAAC/B,eAAoB,EAAEe,QAAgB,EAAU;EAClF,OAAOa,sBAAsB,CAAC5B,eAAe,EAAE,cAAc,EAAEe,QAAQ,CAAC;AAC1E;AAEO,SAASiB,+BAA+BA,CAC7CtD,eAAgC,EAChC2C,IAAY,EACG;EACf,MAAMrB,eAAe,GAAGN,kBAAkB,CAAChB,eAAe,CAAC;EAE3D,IAAIsB,eAAe,EAAE7B,cAAc,CAAC,WAAW,CAAC,EAAE;IAChD,MAAM8D,IAAI,GAAGjC,eAAe,GAAG,WAAW,CAAC,EAAEY,IAAI,CAAEzD,CAAM,IAAKA,CAAC,CAAC0C,CAAC,CAAC,cAAc,CAAC,KAAKwB,IAAI,CAAC;IAC3F,OAAOY,IAAI,EAAEpC,CAAC,CAAC,eAAe,CAAC,IAAI,IAAI;EACzC;EAEA,OAAO,IAAI;AACb;AAEO,SAASqC,mCAAmCA,CACjDlC,eAAoC,EACpCiC,IAA0C,EACrB;EACrB,IAAIf,oBAAoB;EACxB,MAAMC,OAAO,GAAG;IACdtB,CAAC,EAAEuB,iBAAiB,CAACa,IAAI;EAC3B,CAAwB;EAExB,IAAIjC,eAAe,CAAC,cAAc,CAAC,EAAE;IACnCkB,oBAAoB,GAAGlB,eAAe,CAAC,cAAc,CAAC,CAACJ,MAAM,CAC1DzC,CAAC,IAAKA,CAAC,CAAC0C,CAAC,CAAC,cAAc,CAAC,KAAKoC,IAAI,CAACZ,IACtC,CAAC;IACD,IAAIH,oBAAoB,CAACI,MAAM,EAAE;MAC/BJ,oBAAoB,CAAC,CAAC,CAAC,CAACrB,CAAC,GAAGsB,OAAO,CAACtB,CAAC;IACvC,CAAC,MAAM;MACLG,eAAe,CAAC,cAAc,CAAC,CAACuB,IAAI,CAACJ,OAAO,CAAC;IAC/C;EACF,CAAC,MAAM;IACLnB,eAAe,CAAC,cAAc,CAAC,GAAG,CAACmB,OAAO,CAAC;EAC7C;EACA,OAAOnB,eAAe;AACxB;AAEO,SAASmC,wCAAwCA,CACtDnC,eAAoC,EACpCe,QAAgB,EAChB;EACA,MAAMU,KAAK,GAAGM,mBAAmB,CAAC/B,eAAe,EAAEe,QAAQ,CAAC;EAC5D,IAAIf,eAAe,GAAG,cAAc,CAAC,IAAIyB,KAAK,GAAG,CAAC,CAAC,EAAE;IACnDzB,eAAe,CAAC,cAAc,CAAC,CAAC2B,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;EAClD;EACA,OAAOzB,eAAe;AACxB;AAEO,SAASoB,iBAAiBA,CAC/BgB,IAAO,EACc;EACrB;EACA,OAAOtE,MAAM,CAACuE,OAAO,CAACD,IAAI,CAAC,CAACE,MAAM,CAChC,CAACC,IAAI,EAAE,CAACC,GAAG,EAAEC,IAAI,CAAC,MAAM;IAAE,GAAGF,IAAI;IAAE,CAAE,WAAUC,GAAI,EAAC,GAAGC;EAAK,CAAC,CAAC,EAC9D,CAAC,CACH,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAACjD,QAAyB,EAAE;EAC9D,OAAOkD,0BAA0B,CAAClD,QAAQ,EAAE;IAC1CmD,SAAS,EAAE,aAAa;IACxBC,GAAG,EAAE;EACP,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASF,0BAA0BA,CACjClD,QAAyB,EACzB;EAAEmD,SAAS;EAAEC;AAAwC,CAAC,EACtD;EACA,IAAIpD,QAAQ,EAAEA,QAAQ,EAAEI,CAAC,GAAG+C,SAAS,CAAC,EAAE;IACtC,OAAOnD,QAAQ;EACjB;EACAA,QAAQ,CAACA,QAAQ,CAACI,CAAC,CAAC+C,SAAS,CAAC,GAAGC,GAAG;EACpC,OAAOpD,QAAQ;AACjB"}
1
+ {"version":3,"file":"Manifest.js","names":["_assert","data","_interopRequireDefault","require","_fs","_path","XML","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","$","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","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","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:supportsPictureInPicture'?: 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 queries: ManifestQuery[];\n application?: ManifestApplication[];\n };\n};\n\ntype ManifestQueryIntent = Omit<ManifestIntentFilter, '$'>;\n\nexport type ManifestQuery = {\n package?: {\n $: {\n 'android:name': string;\n };\n }[];\n intent?: ManifestQueryIntent[];\n provider?: {\n $: {\n 'android:authorities': string;\n };\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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"}
@@ -16,3 +16,8 @@ export declare function renamePackageOnDiskForType({ projectRoot, type, packageN
16
16
  }): Promise<void>;
17
17
  export declare function setPackageInBuildGradle(config: Pick<ExpoConfig, 'android'>, buildGradle: string): string;
18
18
  export declare function getApplicationIdAsync(projectRoot: string): Promise<string | null>;
19
+ /**
20
+ * Make a package name safe to use in a kotlin file,
21
+ * e.g. is.pvin.hello -> `is`.pvin.hello
22
+ */
23
+ export declare function kotlinSanitized(packageName: string): string;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getApplicationIdAsync = getApplicationIdAsync;
7
7
  exports.getPackage = getPackage;
8
+ exports.kotlinSanitized = kotlinSanitized;
8
9
  exports.renameJniOnDiskForType = renameJniOnDiskForType;
9
10
  exports.renamePackageOnDisk = renamePackageOnDisk;
10
11
  exports.renamePackageOnDiskForType = renamePackageOnDiskForType;
@@ -239,12 +240,17 @@ async function renamePackageOnDiskForType({
239
240
  // NOTE(EvanBacon): We dropped this file in SDK 48 but other templates may still use it.
240
241
  filesToUpdate.push(_path().default.join(projectRoot, 'android', 'app', 'BUCK'));
241
242
  }
243
+ const kotlinSanitizedPackageName = kotlinSanitized(packageName);
242
244
  // Replace all occurrences of the path in the project
243
245
  filesToUpdate.forEach(filepath => {
244
246
  try {
245
247
  if (_fs().default.lstatSync(filepath).isFile()) {
246
248
  let contents = _fs().default.readFileSync(filepath).toString();
247
- contents = replacePackageName(contents, currentPackageName, packageName);
249
+ if (_path().default.extname(filepath) === '.kt') {
250
+ contents = replacePackageName(contents, currentPackageName, kotlinSanitizedPackageName);
251
+ } else {
252
+ contents = replacePackageName(contents, currentPackageName, packageName);
253
+ }
248
254
  if (['.h', '.cpp'].includes(_path().default.extname(filepath))) {
249
255
  contents = contents.replace(new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\//g, '\\'), 'g'), transformJavaClassDescriptor(packageName));
250
256
  }
@@ -302,4 +308,16 @@ function replacePackageName(content, oldName, newName) {
302
308
  function transformJavaClassDescriptor(packageName) {
303
309
  return `L${packageName.replace(/\./g, '/')}`;
304
310
  }
311
+
312
+ /**
313
+ * Make a package name safe to use in a kotlin file,
314
+ * e.g. is.pvin.hello -> `is`.pvin.hello
315
+ */
316
+ function kotlinSanitized(packageName) {
317
+ const stringsToWrap = ['is', 'in', 'as', 'fun'];
318
+ const parts = packageName.split('.');
319
+ const cleanParts = parts.map(part => stringsToWrap.includes(part) ? '`' + part + '`' : part);
320
+ const cleanName = cleanParts.join('.');
321
+ return cleanName;
322
+ }
305
323
  //# sourceMappingURL=Package.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Package.js","names":["_debug","data","_interopRequireDefault","require","_fs","_glob","_path","_Paths","_androidPlugins","_withDangerousMod","_modules","_warnings","obj","__esModule","default","debug","Debug","withPackageGradle","config","withAppBuildGradle","modResults","language","contents","setPackageInBuildGradle","addWarningAndroid","exports","withPackageRefactor","withDangerousMod","renamePackageOnDisk","modRequest","projectRoot","getPackage","android","package","getPackageRoot","type","path","join","getCurrentPackageName","packageRoot","mainApplication","getProjectFilePath","packagePath","dirname","packagePathParts","relative","split","sep","filter","Boolean","getCurrentPackageForProjectFile","fileName","filePath","globSync","getCurrentPackageNameForType","newPackageName","renameJniOnDiskForType","packageName","renamePackageOnDiskForType","currentPackageName","jniRoot","filesToUpdate","cwd","absolute","forEach","filepath","fs","lstatSync","isFile","includes","extname","readFileSync","toString","replace","RegExp","transformJavaClassDescriptor","writeFileSync","directoryExistsAsync","currentPackagePath","newPackagePath","mkdirSync","recursive","relativePath","moveFileSync","oldPathParts","length","pathToCheck","files","readdirSync","rmdirSync","pop","push","replacePackageName","src","dest","renameSync","buildGradle","pattern","getApplicationIdAsync","buildGradlePath","getAppBuildGradleFilePath","existsSync","promises","readFile","matchResult","match","content","oldName","newName","oldNameEscaped"],"sources":["../../src/android/Package.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport Debug from 'debug';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport { getAppBuildGradleFilePath, getProjectFilePath } from './Paths';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAppBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { addWarningAndroid } from '../utils/warnings';\n\nconst debug = Debug('expo:config-plugins:android:package');\n\nexport const withPackageGradle: ConfigPlugin = (config) => {\n return withAppBuildGradle(config, (config) => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = setPackageInBuildGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'android.package',\n `Cannot automatically configure app build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport const withPackageRefactor: ConfigPlugin = (config) => {\n return withDangerousMod(config, [\n 'android',\n async (config) => {\n await renamePackageOnDisk(config, config.modRequest.projectRoot);\n return config;\n },\n ]);\n};\n\nexport function getPackage(config: Pick<ExpoConfig, 'android'>) {\n return config.android?.package ?? null;\n}\n\nfunction getPackageRoot(projectRoot: string, type: 'main' | 'debug') {\n return path.join(projectRoot, 'android', 'app', 'src', type, 'java');\n}\n\nfunction getCurrentPackageName(projectRoot: string, packageRoot: string) {\n const mainApplication = getProjectFilePath(projectRoot, 'MainApplication');\n const packagePath = path.dirname(mainApplication);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\nfunction getCurrentPackageForProjectFile(\n projectRoot: string,\n packageRoot: string,\n fileName: string,\n type: string\n) {\n const filePath = globSync(\n path.join(projectRoot, `android/app/src/${type}/java/**/${fileName}.@(java|kt)`)\n )[0];\n\n if (!filePath) {\n return null;\n }\n\n const packagePath = path.dirname(filePath);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\nfunction getCurrentPackageNameForType(projectRoot: string, type: string): string | null {\n const packageRoot = getPackageRoot(projectRoot, type as any);\n\n if (type === 'main') {\n return getCurrentPackageName(projectRoot, packageRoot);\n }\n // debug, etc..\n return getCurrentPackageForProjectFile(projectRoot, packageRoot, '*', type);\n}\n\n// NOTE(brentvatne): this assumes that our MainApplication.java file is in the root of the package\n// this makes sense for standard react-native projects but may not apply in customized projects, so if\n// we want this to be runnable in any app we need to handle other possibilities\nexport async function renamePackageOnDisk(\n config: Pick<ExpoConfig, 'android'>,\n projectRoot: string\n) {\n const newPackageName = getPackage(config);\n if (newPackageName === null) {\n return;\n }\n\n for (const type of ['debug', 'main', 'release']) {\n await renameJniOnDiskForType({ projectRoot, type, packageName: newPackageName });\n await renamePackageOnDiskForType({ projectRoot, type, packageName: newPackageName });\n }\n}\n\nexport async function renameJniOnDiskForType({\n projectRoot,\n type,\n packageName,\n}: {\n projectRoot: string;\n type: string;\n packageName: string;\n}) {\n if (!packageName) {\n return;\n }\n\n const currentPackageName = getCurrentPackageNameForType(projectRoot, type);\n if (!currentPackageName || !packageName || currentPackageName === packageName) {\n return;\n }\n\n const jniRoot = path.join(projectRoot, 'android', 'app', 'src', type, 'jni');\n const filesToUpdate = [...globSync('**/*', { cwd: jniRoot, absolute: true })];\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile() && ['.h', '.cpp'].includes(path.extname(filepath))) {\n let contents = fs.readFileSync(filepath).toString();\n contents = contents.replace(\n new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\\//g, '\\\\/'), 'g'),\n transformJavaClassDescriptor(packageName)\n );\n fs.writeFileSync(filepath, contents);\n }\n } catch {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\n}\n\nexport async function renamePackageOnDiskForType({\n projectRoot,\n type,\n packageName,\n}: {\n projectRoot: string;\n type: string;\n packageName: string;\n}) {\n if (!packageName) {\n return;\n }\n\n const currentPackageName = getCurrentPackageNameForType(projectRoot, type);\n debug(`Found package \"${currentPackageName}\" for type \"${type}\"`);\n if (!currentPackageName || currentPackageName === packageName) {\n return;\n }\n debug(`Refactor \"${currentPackageName}\" to \"${packageName}\" for type \"${type}\"`);\n const packageRoot = getPackageRoot(projectRoot, type as any);\n // Set up our paths\n if (!(await directoryExistsAsync(packageRoot))) {\n debug(`- skipping refactor of missing directory: ${packageRoot}`);\n return;\n }\n\n const currentPackagePath = path.join(packageRoot, ...currentPackageName.split('.'));\n const newPackagePath = path.join(packageRoot, ...packageName.split('.'));\n\n // Create the new directory\n fs.mkdirSync(newPackagePath, { recursive: true });\n\n // Move everything from the old directory over\n globSync('**/*', { cwd: currentPackagePath }).forEach((relativePath) => {\n const filepath = path.join(currentPackagePath, relativePath);\n if (fs.lstatSync(filepath).isFile()) {\n moveFileSync(filepath, path.join(newPackagePath, relativePath));\n } else {\n fs.mkdirSync(filepath, { recursive: true });\n }\n });\n\n // Remove the old directory recursively from com/old/package to com/old and com,\n // as long as the directories are empty\n const oldPathParts = currentPackageName.split('.');\n while (oldPathParts.length) {\n const pathToCheck = path.join(packageRoot, ...oldPathParts);\n try {\n const files = fs.readdirSync(pathToCheck);\n if (files.length === 0) {\n fs.rmdirSync(pathToCheck);\n }\n } finally {\n oldPathParts.pop();\n }\n }\n\n const filesToUpdate = [...globSync('**/*', { cwd: newPackagePath, absolute: true })];\n // Only update the BUCK file to match the main package name\n if (type === 'main') {\n // NOTE(EvanBacon): We dropped this file in SDK 48 but other templates may still use it.\n filesToUpdate.push(path.join(projectRoot, 'android', 'app', 'BUCK'));\n }\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile()) {\n let contents = fs.readFileSync(filepath).toString();\n contents = replacePackageName(contents, currentPackageName, packageName);\n if (['.h', '.cpp'].includes(path.extname(filepath))) {\n contents = contents.replace(\n new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\\//g, '\\\\'), 'g'),\n transformJavaClassDescriptor(packageName)\n );\n }\n fs.writeFileSync(filepath, contents);\n }\n } catch {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\n}\n\nfunction moveFileSync(src: string, dest: string) {\n fs.mkdirSync(path.dirname(dest), { recursive: true });\n fs.renameSync(src, dest);\n}\n\nexport function setPackageInBuildGradle(config: Pick<ExpoConfig, 'android'>, buildGradle: string) {\n const packageName = getPackage(config);\n if (packageName === null) {\n return buildGradle;\n }\n\n const pattern = new RegExp(`(applicationId|namespace) ['\"].*['\"]`, 'g');\n return buildGradle.replace(pattern, `$1 '${packageName}'`);\n}\n\nexport async function getApplicationIdAsync(projectRoot: string): Promise<string | null> {\n const buildGradlePath = getAppBuildGradleFilePath(projectRoot);\n if (!fs.existsSync(buildGradlePath)) {\n return null;\n }\n const buildGradle = await fs.promises.readFile(buildGradlePath, 'utf8');\n const matchResult = buildGradle.match(/applicationId ['\"](.*)['\"]/);\n // TODO add fallback for legacy cases to read from AndroidManifest.xml\n return matchResult?.[1] ?? null;\n}\n\n/**\n * Replace the package name with the new package name, in the given source.\n * This has to be limited to avoid accidentally replacing imports when the old package name overlaps.\n */\nfunction replacePackageName(content: string, oldName: string, newName: string) {\n const oldNameEscaped = oldName.replace(/\\./g, '\\\\.');\n\n return (\n content\n // Replace any quoted instances \"com.old\" -> \"com.new\"\n .replace(new RegExp(`\"${oldNameEscaped}\"`, 'g'), `\"${newName}\"`)\n // Replace special non-quoted instances, only when prefixed by package or namespace\n .replace(new RegExp(`(package|namespace)(\\\\s+)${oldNameEscaped}`, 'g'), `$1$2${newName}`)\n // Replace special import instances, without overlapping with other imports (trailing `.` to close it off)\n .replace(new RegExp(`(import\\\\s+)${oldNameEscaped}\\\\.`, 'g'), `$1${newName}.`)\n );\n}\n\n/**\n * Transform a java package name to java class descriptor,\n * e.g. `com.helloworld` -> `Lcom/helloworld`.\n */\nfunction transformJavaClassDescriptor(packageName: string) {\n return `L${packageName.replace(/\\./g, '/')}`;\n}\n"],"mappings":";;;;;;;;;;;;AACA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,IAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,GAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,MAAA;EAAA,MAAAJ,IAAA,GAAAE,OAAA;EAAAE,KAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,MAAA;EAAA,MAAAL,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAG,KAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAM,OAAA;EAAA,MAAAN,IAAA,GAAAE,OAAA;EAAAI,MAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAO,gBAAA;EAAA,MAAAP,IAAA,GAAAE,OAAA;EAAAK,eAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,kBAAA;EAAA,MAAAR,IAAA,GAAAE,OAAA;EAAAM,iBAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAS,SAAA;EAAA,MAAAT,IAAA,GAAAE,OAAA;EAAAO,QAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAU,UAAA;EAAA,MAAAV,IAAA,GAAAE,OAAA;EAAAQ,SAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAsD,SAAAC,uBAAAU,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtD,MAAMG,KAAK,GAAG,IAAAC,gBAAK,EAAC,qCAAqC,CAAC;AAEnD,MAAMC,iBAA+B,GAAIC,MAAM,IAAK;EACzD,OAAO,IAAAC,oCAAkB,EAACD,MAAM,EAAGA,MAAM,IAAK;IAC5C,IAAIA,MAAM,CAACE,UAAU,CAACC,QAAQ,KAAK,QAAQ,EAAE;MAC3CH,MAAM,CAACE,UAAU,CAACE,QAAQ,GAAGC,uBAAuB,CAACL,MAAM,EAAEA,MAAM,CAACE,UAAU,CAACE,QAAQ,CAAC;IAC1F,CAAC,MAAM;MACL,IAAAE,6BAAiB,EACf,iBAAiB,EAChB,oEACH,CAAC;IACH;IACA,OAAON,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAACO,OAAA,CAAAR,iBAAA,GAAAA,iBAAA;AAEK,MAAMS,mBAAiC,GAAIR,MAAM,IAAK;EAC3D,OAAO,IAAAS,oCAAgB,EAACT,MAAM,EAAE,CAC9B,SAAS,EACT,MAAOA,MAAM,IAAK;IAChB,MAAMU,mBAAmB,CAACV,MAAM,EAAEA,MAAM,CAACW,UAAU,CAACC,WAAW,CAAC;IAChE,OAAOZ,MAAM;EACf,CAAC,CACF,CAAC;AACJ,CAAC;AAACO,OAAA,CAAAC,mBAAA,GAAAA,mBAAA;AAEK,SAASK,UAAUA,CAACb,MAAmC,EAAE;EAC9D,OAAOA,MAAM,CAACc,OAAO,EAAEC,OAAO,IAAI,IAAI;AACxC;AAEA,SAASC,cAAcA,CAACJ,WAAmB,EAAEK,IAAsB,EAAE;EACnE,OAAOC,eAAI,CAACC,IAAI,CAACP,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAEK,IAAI,EAAE,MAAM,CAAC;AACtE;AAEA,SAASG,qBAAqBA,CAACR,WAAmB,EAAES,WAAmB,EAAE;EACvE,MAAMC,eAAe,GAAG,IAAAC,2BAAkB,EAACX,WAAW,EAAE,iBAAiB,CAAC;EAC1E,MAAMY,WAAW,GAAGN,eAAI,CAACO,OAAO,CAACH,eAAe,CAAC;EACjD,MAAMI,gBAAgB,GAAGR,eAAI,CAACS,QAAQ,CAACN,WAAW,EAAEG,WAAW,CAAC,CAACI,KAAK,CAACV,eAAI,CAACW,GAAG,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;EAEhG,OAAOL,gBAAgB,CAACP,IAAI,CAAC,GAAG,CAAC;AACnC;AAEA,SAASa,+BAA+BA,CACtCpB,WAAmB,EACnBS,WAAmB,EACnBY,QAAgB,EAChBhB,IAAY,EACZ;EACA,MAAMiB,QAAQ,GAAG,IAAAC,YAAQ,EACvBjB,eAAI,CAACC,IAAI,CAACP,WAAW,EAAG,mBAAkBK,IAAK,YAAWgB,QAAS,aAAY,CACjF,CAAC,CAAC,CAAC,CAAC;EAEJ,IAAI,CAACC,QAAQ,EAAE;IACb,OAAO,IAAI;EACb;EAEA,MAAMV,WAAW,GAAGN,eAAI,CAACO,OAAO,CAACS,QAAQ,CAAC;EAC1C,MAAMR,gBAAgB,GAAGR,eAAI,CAACS,QAAQ,CAACN,WAAW,EAAEG,WAAW,CAAC,CAACI,KAAK,CAACV,eAAI,CAACW,GAAG,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;EAEhG,OAAOL,gBAAgB,CAACP,IAAI,CAAC,GAAG,CAAC;AACnC;AAEA,SAASiB,4BAA4BA,CAACxB,WAAmB,EAAEK,IAAY,EAAiB;EACtF,MAAMI,WAAW,GAAGL,cAAc,CAACJ,WAAW,EAAEK,IAAW,CAAC;EAE5D,IAAIA,IAAI,KAAK,MAAM,EAAE;IACnB,OAAOG,qBAAqB,CAACR,WAAW,EAAES,WAAW,CAAC;EACxD;EACA;EACA,OAAOW,+BAA+B,CAACpB,WAAW,EAAES,WAAW,EAAE,GAAG,EAAEJ,IAAI,CAAC;AAC7E;;AAEA;AACA;AACA;AACO,eAAeP,mBAAmBA,CACvCV,MAAmC,EACnCY,WAAmB,EACnB;EACA,MAAMyB,cAAc,GAAGxB,UAAU,CAACb,MAAM,CAAC;EACzC,IAAIqC,cAAc,KAAK,IAAI,EAAE;IAC3B;EACF;EAEA,KAAK,MAAMpB,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;IAC/C,MAAMqB,sBAAsB,CAAC;MAAE1B,WAAW;MAAEK,IAAI;MAAEsB,WAAW,EAAEF;IAAe,CAAC,CAAC;IAChF,MAAMG,0BAA0B,CAAC;MAAE5B,WAAW;MAAEK,IAAI;MAAEsB,WAAW,EAAEF;IAAe,CAAC,CAAC;EACtF;AACF;AAEO,eAAeC,sBAAsBA,CAAC;EAC3C1B,WAAW;EACXK,IAAI;EACJsB;AAKF,CAAC,EAAE;EACD,IAAI,CAACA,WAAW,EAAE;IAChB;EACF;EAEA,MAAME,kBAAkB,GAAGL,4BAA4B,CAACxB,WAAW,EAAEK,IAAI,CAAC;EAC1E,IAAI,CAACwB,kBAAkB,IAAI,CAACF,WAAW,IAAIE,kBAAkB,KAAKF,WAAW,EAAE;IAC7E;EACF;EAEA,MAAMG,OAAO,GAAGxB,eAAI,CAACC,IAAI,CAACP,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAEK,IAAI,EAAE,KAAK,CAAC;EAC5E,MAAM0B,aAAa,GAAG,CAAC,GAAG,IAAAR,YAAQ,EAAC,MAAM,EAAE;IAAES,GAAG,EAAEF,OAAO;IAAEG,QAAQ,EAAE;EAAK,CAAC,CAAC,CAAC;EAC7E;EACAF,aAAa,CAACG,OAAO,CAAEC,QAAgB,IAAK;IAC1C,IAAI;MACF,IAAIC,aAAE,CAACC,SAAS,CAACF,QAAQ,CAAC,CAACG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAACC,QAAQ,CAACjC,eAAI,CAACkC,OAAO,CAACL,QAAQ,CAAC,CAAC,EAAE;QACtF,IAAI3C,QAAQ,GAAG4C,aAAE,CAACK,YAAY,CAACN,QAAQ,CAAC,CAACO,QAAQ,CAAC,CAAC;QACnDlD,QAAQ,GAAGA,QAAQ,CAACmD,OAAO,CACzB,IAAIC,MAAM,CAACC,4BAA4B,CAAChB,kBAAkB,CAAC,CAACc,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,EACvFE,4BAA4B,CAAClB,WAAW,CAC1C,CAAC;QACDS,aAAE,CAACU,aAAa,CAACX,QAAQ,EAAE3C,QAAQ,CAAC;MACtC;IACF,CAAC,CAAC,MAAM;MACNP,KAAK,CAAE,mBAAkBkD,QAAS,eAAc9B,IAAK,GAAE,CAAC;IAC1D;EACF,CAAC,CAAC;AACJ;AAEO,eAAeuB,0BAA0BA,CAAC;EAC/C5B,WAAW;EACXK,IAAI;EACJsB;AAKF,CAAC,EAAE;EACD,IAAI,CAACA,WAAW,EAAE;IAChB;EACF;EAEA,MAAME,kBAAkB,GAAGL,4BAA4B,CAACxB,WAAW,EAAEK,IAAI,CAAC;EAC1EpB,KAAK,CAAE,kBAAiB4C,kBAAmB,eAAcxB,IAAK,GAAE,CAAC;EACjE,IAAI,CAACwB,kBAAkB,IAAIA,kBAAkB,KAAKF,WAAW,EAAE;IAC7D;EACF;EACA1C,KAAK,CAAE,aAAY4C,kBAAmB,SAAQF,WAAY,eAActB,IAAK,GAAE,CAAC;EAChF,MAAMI,WAAW,GAAGL,cAAc,CAACJ,WAAW,EAAEK,IAAW,CAAC;EAC5D;EACA,IAAI,EAAE,MAAM,IAAA0C,+BAAoB,EAACtC,WAAW,CAAC,CAAC,EAAE;IAC9CxB,KAAK,CAAE,6CAA4CwB,WAAY,EAAC,CAAC;IACjE;EACF;EAEA,MAAMuC,kBAAkB,GAAG1C,eAAI,CAACC,IAAI,CAACE,WAAW,EAAE,GAAGoB,kBAAkB,CAACb,KAAK,CAAC,GAAG,CAAC,CAAC;EACnF,MAAMiC,cAAc,GAAG3C,eAAI,CAACC,IAAI,CAACE,WAAW,EAAE,GAAGkB,WAAW,CAACX,KAAK,CAAC,GAAG,CAAC,CAAC;;EAExE;EACAoB,aAAE,CAACc,SAAS,CAACD,cAAc,EAAE;IAAEE,SAAS,EAAE;EAAK,CAAC,CAAC;;EAEjD;EACA,IAAA5B,YAAQ,EAAC,MAAM,EAAE;IAAES,GAAG,EAAEgB;EAAmB,CAAC,CAAC,CAACd,OAAO,CAAEkB,YAAY,IAAK;IACtE,MAAMjB,QAAQ,GAAG7B,eAAI,CAACC,IAAI,CAACyC,kBAAkB,EAAEI,YAAY,CAAC;IAC5D,IAAIhB,aAAE,CAACC,SAAS,CAACF,QAAQ,CAAC,CAACG,MAAM,CAAC,CAAC,EAAE;MACnCe,YAAY,CAAClB,QAAQ,EAAE7B,eAAI,CAACC,IAAI,CAAC0C,cAAc,EAAEG,YAAY,CAAC,CAAC;IACjE,CAAC,MAAM;MACLhB,aAAE,CAACc,SAAS,CAACf,QAAQ,EAAE;QAAEgB,SAAS,EAAE;MAAK,CAAC,CAAC;IAC7C;EACF,CAAC,CAAC;;EAEF;EACA;EACA,MAAMG,YAAY,GAAGzB,kBAAkB,CAACb,KAAK,CAAC,GAAG,CAAC;EAClD,OAAOsC,YAAY,CAACC,MAAM,EAAE;IAC1B,MAAMC,WAAW,GAAGlD,eAAI,CAACC,IAAI,CAACE,WAAW,EAAE,GAAG6C,YAAY,CAAC;IAC3D,IAAI;MACF,MAAMG,KAAK,GAAGrB,aAAE,CAACsB,WAAW,CAACF,WAAW,CAAC;MACzC,IAAIC,KAAK,CAACF,MAAM,KAAK,CAAC,EAAE;QACtBnB,aAAE,CAACuB,SAAS,CAACH,WAAW,CAAC;MAC3B;IACF,CAAC,SAAS;MACRF,YAAY,CAACM,GAAG,CAAC,CAAC;IACpB;EACF;EAEA,MAAM7B,aAAa,GAAG,CAAC,GAAG,IAAAR,YAAQ,EAAC,MAAM,EAAE;IAAES,GAAG,EAAEiB,cAAc;IAAEhB,QAAQ,EAAE;EAAK,CAAC,CAAC,CAAC;EACpF;EACA,IAAI5B,IAAI,KAAK,MAAM,EAAE;IACnB;IACA0B,aAAa,CAAC8B,IAAI,CAACvD,eAAI,CAACC,IAAI,CAACP,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;EACtE;EACA;EACA+B,aAAa,CAACG,OAAO,CAAEC,QAAgB,IAAK;IAC1C,IAAI;MACF,IAAIC,aAAE,CAACC,SAAS,CAACF,QAAQ,CAAC,CAACG,MAAM,CAAC,CAAC,EAAE;QACnC,IAAI9C,QAAQ,GAAG4C,aAAE,CAACK,YAAY,CAACN,QAAQ,CAAC,CAACO,QAAQ,CAAC,CAAC;QACnDlD,QAAQ,GAAGsE,kBAAkB,CAACtE,QAAQ,EAAEqC,kBAAkB,EAAEF,WAAW,CAAC;QACxE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAACY,QAAQ,CAACjC,eAAI,CAACkC,OAAO,CAACL,QAAQ,CAAC,CAAC,EAAE;UACnD3C,QAAQ,GAAGA,QAAQ,CAACmD,OAAO,CACzB,IAAIC,MAAM,CAACC,4BAA4B,CAAChB,kBAAkB,CAAC,CAACc,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EACtFE,4BAA4B,CAAClB,WAAW,CAC1C,CAAC;QACH;QACAS,aAAE,CAACU,aAAa,CAACX,QAAQ,EAAE3C,QAAQ,CAAC;MACtC;IACF,CAAC,CAAC,MAAM;MACNP,KAAK,CAAE,mBAAkBkD,QAAS,eAAc9B,IAAK,GAAE,CAAC;IAC1D;EACF,CAAC,CAAC;AACJ;AAEA,SAASgD,YAAYA,CAACU,GAAW,EAAEC,IAAY,EAAE;EAC/C5B,aAAE,CAACc,SAAS,CAAC5C,eAAI,CAACO,OAAO,CAACmD,IAAI,CAAC,EAAE;IAAEb,SAAS,EAAE;EAAK,CAAC,CAAC;EACrDf,aAAE,CAAC6B,UAAU,CAACF,GAAG,EAAEC,IAAI,CAAC;AAC1B;AAEO,SAASvE,uBAAuBA,CAACL,MAAmC,EAAE8E,WAAmB,EAAE;EAChG,MAAMvC,WAAW,GAAG1B,UAAU,CAACb,MAAM,CAAC;EACtC,IAAIuC,WAAW,KAAK,IAAI,EAAE;IACxB,OAAOuC,WAAW;EACpB;EAEA,MAAMC,OAAO,GAAG,IAAIvB,MAAM,CAAE,sCAAqC,EAAE,GAAG,CAAC;EACvE,OAAOsB,WAAW,CAACvB,OAAO,CAACwB,OAAO,EAAG,OAAMxC,WAAY,GAAE,CAAC;AAC5D;AAEO,eAAeyC,qBAAqBA,CAACpE,WAAmB,EAA0B;EACvF,MAAMqE,eAAe,GAAG,IAAAC,kCAAyB,EAACtE,WAAW,CAAC;EAC9D,IAAI,CAACoC,aAAE,CAACmC,UAAU,CAACF,eAAe,CAAC,EAAE;IACnC,OAAO,IAAI;EACb;EACA,MAAMH,WAAW,GAAG,MAAM9B,aAAE,CAACoC,QAAQ,CAACC,QAAQ,CAACJ,eAAe,EAAE,MAAM,CAAC;EACvE,MAAMK,WAAW,GAAGR,WAAW,CAACS,KAAK,CAAC,4BAA4B,CAAC;EACnE;EACA,OAAOD,WAAW,GAAG,CAAC,CAAC,IAAI,IAAI;AACjC;;AAEA;AACA;AACA;AACA;AACA,SAASZ,kBAAkBA,CAACc,OAAe,EAAEC,OAAe,EAAEC,OAAe,EAAE;EAC7E,MAAMC,cAAc,GAAGF,OAAO,CAAClC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;EAEpD,OACEiC;EACE;EAAA,CACCjC,OAAO,CAAC,IAAIC,MAAM,CAAE,IAAGmC,cAAe,GAAE,EAAE,GAAG,CAAC,EAAG,IAAGD,OAAQ,GAAE;EAC/D;EAAA,CACCnC,OAAO,CAAC,IAAIC,MAAM,CAAE,4BAA2BmC,cAAe,EAAC,EAAE,GAAG,CAAC,EAAG,OAAMD,OAAQ,EAAC;EACxF;EAAA,CACCnC,OAAO,CAAC,IAAIC,MAAM,CAAE,eAAcmC,cAAe,KAAI,EAAE,GAAG,CAAC,EAAG,KAAID,OAAQ,GAAE,CAAC;AAEpF;;AAEA;AACA;AACA;AACA;AACA,SAASjC,4BAA4BA,CAAClB,WAAmB,EAAE;EACzD,OAAQ,IAAGA,WAAW,CAACgB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAE,EAAC;AAC9C"}
1
+ {"version":3,"file":"Package.js","names":["_debug","data","_interopRequireDefault","require","_fs","_glob","_path","_Paths","_androidPlugins","_withDangerousMod","_modules","_warnings","obj","__esModule","default","debug","Debug","withPackageGradle","config","withAppBuildGradle","modResults","language","contents","setPackageInBuildGradle","addWarningAndroid","exports","withPackageRefactor","withDangerousMod","renamePackageOnDisk","modRequest","projectRoot","getPackage","android","package","getPackageRoot","type","path","join","getCurrentPackageName","packageRoot","mainApplication","getProjectFilePath","packagePath","dirname","packagePathParts","relative","split","sep","filter","Boolean","getCurrentPackageForProjectFile","fileName","filePath","globSync","getCurrentPackageNameForType","newPackageName","renameJniOnDiskForType","packageName","renamePackageOnDiskForType","currentPackageName","jniRoot","filesToUpdate","cwd","absolute","forEach","filepath","fs","lstatSync","isFile","includes","extname","readFileSync","toString","replace","RegExp","transformJavaClassDescriptor","writeFileSync","directoryExistsAsync","currentPackagePath","newPackagePath","mkdirSync","recursive","relativePath","moveFileSync","oldPathParts","length","pathToCheck","files","readdirSync","rmdirSync","pop","push","kotlinSanitizedPackageName","kotlinSanitized","replacePackageName","src","dest","renameSync","buildGradle","pattern","getApplicationIdAsync","buildGradlePath","getAppBuildGradleFilePath","existsSync","promises","readFile","matchResult","match","content","oldName","newName","oldNameEscaped","stringsToWrap","parts","cleanParts","map","part","cleanName"],"sources":["../../src/android/Package.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport Debug from 'debug';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport { getAppBuildGradleFilePath, getProjectFilePath } from './Paths';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAppBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { addWarningAndroid } from '../utils/warnings';\n\nconst debug = Debug('expo:config-plugins:android:package');\n\nexport const withPackageGradle: ConfigPlugin = (config) => {\n return withAppBuildGradle(config, (config) => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = setPackageInBuildGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'android.package',\n `Cannot automatically configure app build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport const withPackageRefactor: ConfigPlugin = (config) => {\n return withDangerousMod(config, [\n 'android',\n async (config) => {\n await renamePackageOnDisk(config, config.modRequest.projectRoot);\n return config;\n },\n ]);\n};\n\nexport function getPackage(config: Pick<ExpoConfig, 'android'>) {\n return config.android?.package ?? null;\n}\n\nfunction getPackageRoot(projectRoot: string, type: 'main' | 'debug') {\n return path.join(projectRoot, 'android', 'app', 'src', type, 'java');\n}\n\nfunction getCurrentPackageName(projectRoot: string, packageRoot: string) {\n const mainApplication = getProjectFilePath(projectRoot, 'MainApplication');\n const packagePath = path.dirname(mainApplication);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\nfunction getCurrentPackageForProjectFile(\n projectRoot: string,\n packageRoot: string,\n fileName: string,\n type: string\n) {\n const filePath = globSync(\n path.join(projectRoot, `android/app/src/${type}/java/**/${fileName}.@(java|kt)`)\n )[0];\n\n if (!filePath) {\n return null;\n }\n\n const packagePath = path.dirname(filePath);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\nfunction getCurrentPackageNameForType(projectRoot: string, type: string): string | null {\n const packageRoot = getPackageRoot(projectRoot, type as any);\n\n if (type === 'main') {\n return getCurrentPackageName(projectRoot, packageRoot);\n }\n // debug, etc..\n return getCurrentPackageForProjectFile(projectRoot, packageRoot, '*', type);\n}\n\n// NOTE(brentvatne): this assumes that our MainApplication.java file is in the root of the package\n// this makes sense for standard react-native projects but may not apply in customized projects, so if\n// we want this to be runnable in any app we need to handle other possibilities\nexport async function renamePackageOnDisk(\n config: Pick<ExpoConfig, 'android'>,\n projectRoot: string\n) {\n const newPackageName = getPackage(config);\n if (newPackageName === null) {\n return;\n }\n\n for (const type of ['debug', 'main', 'release']) {\n await renameJniOnDiskForType({ projectRoot, type, packageName: newPackageName });\n await renamePackageOnDiskForType({ projectRoot, type, packageName: newPackageName });\n }\n}\n\nexport async function renameJniOnDiskForType({\n projectRoot,\n type,\n packageName,\n}: {\n projectRoot: string;\n type: string;\n packageName: string;\n}) {\n if (!packageName) {\n return;\n }\n\n const currentPackageName = getCurrentPackageNameForType(projectRoot, type);\n if (!currentPackageName || !packageName || currentPackageName === packageName) {\n return;\n }\n\n const jniRoot = path.join(projectRoot, 'android', 'app', 'src', type, 'jni');\n const filesToUpdate = [...globSync('**/*', { cwd: jniRoot, absolute: true })];\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile() && ['.h', '.cpp'].includes(path.extname(filepath))) {\n let contents = fs.readFileSync(filepath).toString();\n contents = contents.replace(\n new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\\//g, '\\\\/'), 'g'),\n transformJavaClassDescriptor(packageName)\n );\n fs.writeFileSync(filepath, contents);\n }\n } catch {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\n}\n\nexport async function renamePackageOnDiskForType({\n projectRoot,\n type,\n packageName,\n}: {\n projectRoot: string;\n type: string;\n packageName: string;\n}) {\n if (!packageName) {\n return;\n }\n\n const currentPackageName = getCurrentPackageNameForType(projectRoot, type);\n debug(`Found package \"${currentPackageName}\" for type \"${type}\"`);\n if (!currentPackageName || currentPackageName === packageName) {\n return;\n }\n debug(`Refactor \"${currentPackageName}\" to \"${packageName}\" for type \"${type}\"`);\n const packageRoot = getPackageRoot(projectRoot, type as any);\n // Set up our paths\n if (!(await directoryExistsAsync(packageRoot))) {\n debug(`- skipping refactor of missing directory: ${packageRoot}`);\n return;\n }\n\n const currentPackagePath = path.join(packageRoot, ...currentPackageName.split('.'));\n const newPackagePath = path.join(packageRoot, ...packageName.split('.'));\n\n // Create the new directory\n fs.mkdirSync(newPackagePath, { recursive: true });\n\n // Move everything from the old directory over\n globSync('**/*', { cwd: currentPackagePath }).forEach((relativePath) => {\n const filepath = path.join(currentPackagePath, relativePath);\n if (fs.lstatSync(filepath).isFile()) {\n moveFileSync(filepath, path.join(newPackagePath, relativePath));\n } else {\n fs.mkdirSync(filepath, { recursive: true });\n }\n });\n\n // Remove the old directory recursively from com/old/package to com/old and com,\n // as long as the directories are empty\n const oldPathParts = currentPackageName.split('.');\n while (oldPathParts.length) {\n const pathToCheck = path.join(packageRoot, ...oldPathParts);\n try {\n const files = fs.readdirSync(pathToCheck);\n if (files.length === 0) {\n fs.rmdirSync(pathToCheck);\n }\n } finally {\n oldPathParts.pop();\n }\n }\n\n const filesToUpdate = [...globSync('**/*', { cwd: newPackagePath, absolute: true })];\n // Only update the BUCK file to match the main package name\n if (type === 'main') {\n // NOTE(EvanBacon): We dropped this file in SDK 48 but other templates may still use it.\n filesToUpdate.push(path.join(projectRoot, 'android', 'app', 'BUCK'));\n }\n\n const kotlinSanitizedPackageName = kotlinSanitized(packageName);\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile()) {\n let contents = fs.readFileSync(filepath).toString();\n if (path.extname(filepath) === '.kt') {\n contents = replacePackageName(contents, currentPackageName, kotlinSanitizedPackageName);\n } else {\n contents = replacePackageName(contents, currentPackageName, packageName);\n }\n if (['.h', '.cpp'].includes(path.extname(filepath))) {\n contents = contents.replace(\n new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\\//g, '\\\\'), 'g'),\n transformJavaClassDescriptor(packageName)\n );\n }\n fs.writeFileSync(filepath, contents);\n }\n } catch {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\n}\n\nfunction moveFileSync(src: string, dest: string) {\n fs.mkdirSync(path.dirname(dest), { recursive: true });\n fs.renameSync(src, dest);\n}\n\nexport function setPackageInBuildGradle(config: Pick<ExpoConfig, 'android'>, buildGradle: string) {\n const packageName = getPackage(config);\n if (packageName === null) {\n return buildGradle;\n }\n\n const pattern = new RegExp(`(applicationId|namespace) ['\"].*['\"]`, 'g');\n return buildGradle.replace(pattern, `$1 '${packageName}'`);\n}\n\nexport async function getApplicationIdAsync(projectRoot: string): Promise<string | null> {\n const buildGradlePath = getAppBuildGradleFilePath(projectRoot);\n if (!fs.existsSync(buildGradlePath)) {\n return null;\n }\n const buildGradle = await fs.promises.readFile(buildGradlePath, 'utf8');\n const matchResult = buildGradle.match(/applicationId ['\"](.*)['\"]/);\n // TODO add fallback for legacy cases to read from AndroidManifest.xml\n return matchResult?.[1] ?? null;\n}\n\n/**\n * Replace the package name with the new package name, in the given source.\n * This has to be limited to avoid accidentally replacing imports when the old package name overlaps.\n */\nfunction replacePackageName(content: string, oldName: string, newName: string) {\n const oldNameEscaped = oldName.replace(/\\./g, '\\\\.');\n\n return (\n content\n // Replace any quoted instances \"com.old\" -> \"com.new\"\n .replace(new RegExp(`\"${oldNameEscaped}\"`, 'g'), `\"${newName}\"`)\n // Replace special non-quoted instances, only when prefixed by package or namespace\n .replace(new RegExp(`(package|namespace)(\\\\s+)${oldNameEscaped}`, 'g'), `$1$2${newName}`)\n // Replace special import instances, without overlapping with other imports (trailing `.` to close it off)\n .replace(new RegExp(`(import\\\\s+)${oldNameEscaped}\\\\.`, 'g'), `$1${newName}.`)\n );\n}\n\n/**\n * Transform a java package name to java class descriptor,\n * e.g. `com.helloworld` -> `Lcom/helloworld`.\n */\nfunction transformJavaClassDescriptor(packageName: string) {\n return `L${packageName.replace(/\\./g, '/')}`;\n}\n\n/**\n * Make a package name safe to use in a kotlin file,\n * e.g. is.pvin.hello -> `is`.pvin.hello\n */\nexport function kotlinSanitized(packageName: string) {\n const stringsToWrap = ['is', 'in', 'as', 'fun'];\n\n const parts = packageName.split('.');\n const cleanParts = parts.map((part) => (stringsToWrap.includes(part) ? '`' + part + '`' : part));\n\n const cleanName = cleanParts.join('.');\n return cleanName;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/config-plugins",
3
- "version": "8.0.3",
3
+ "version": "8.0.5",
4
4
  "description": "A library for Expo config plugins",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -58,5 +58,5 @@
58
58
  "publishConfig": {
59
59
  "access": "public"
60
60
  },
61
- "gitHead": "f47e3af17a790a34b95fe10dda8383389e7d74e2"
61
+ "gitHead": "2da3ee1a1cfc03b58ee2988529ad941641330f99"
62
62
  }