@expo/config-plugins 4.0.17 → 4.1.1

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 (48) hide show
  1. package/README.md +17 -2
  2. package/build/android/EasBuild.js +8 -8
  3. package/build/android/EasBuild.js.map +1 -1
  4. package/build/android/GoogleServices.js +16 -14
  5. package/build/android/GoogleServices.js.map +1 -1
  6. package/build/android/Manifest.js +7 -5
  7. package/build/android/Manifest.js.map +1 -1
  8. package/build/android/Package.js +26 -14
  9. package/build/android/Package.js.map +1 -1
  10. package/build/android/Paths.js +6 -6
  11. package/build/android/Paths.js.map +1 -1
  12. package/build/android/Scheme.d.ts +5 -2
  13. package/build/android/Scheme.js +26 -15
  14. package/build/android/Scheme.js.map +1 -1
  15. package/build/ios/BundleIdentifier.js +6 -6
  16. package/build/ios/BundleIdentifier.js.map +1 -1
  17. package/build/ios/Entitlements.js +20 -8
  18. package/build/ios/Entitlements.js.map +1 -1
  19. package/build/ios/Google.d.ts +5 -5
  20. package/build/ios/Google.js +62 -12
  21. package/build/ios/Google.js.map +1 -1
  22. package/build/ios/Locales.js +13 -13
  23. package/build/ios/Locales.js.map +1 -1
  24. package/build/ios/Maps.js +7 -7
  25. package/build/ios/Maps.js.map +1 -1
  26. package/build/ios/Paths.d.ts +3 -2
  27. package/build/ios/Paths.js +21 -9
  28. package/build/ios/Paths.js.map +1 -1
  29. package/build/ios/ProvisioningProfile.js +4 -4
  30. package/build/ios/ProvisioningProfile.js.map +1 -1
  31. package/build/ios/Swift.js +5 -5
  32. package/build/ios/Swift.js.map +1 -1
  33. package/build/ios/XcodeProjectFile.js +5 -5
  34. package/build/ios/XcodeProjectFile.js.map +1 -1
  35. package/build/plugins/ios-plugins.d.ts +1 -1
  36. package/build/plugins/ios-plugins.js.map +1 -1
  37. package/build/plugins/withAndroidBaseMods.js +0 -3
  38. package/build/plugins/withAndroidBaseMods.js.map +1 -1
  39. package/build/utils/Updates.d.ts +1 -1
  40. package/build/utils/Updates.js +15 -7
  41. package/build/utils/Updates.js.map +1 -1
  42. package/build/utils/XML.d.ts +1 -0
  43. package/build/utils/XML.js +33 -11
  44. package/build/utils/XML.js.map +1 -1
  45. package/build/utils/fs.d.ts +4 -0
  46. package/build/utils/fs.js +56 -0
  47. package/build/utils/fs.js.map +1 -0
  48. package/package.json +4 -6
package/README.md CHANGED
@@ -1,6 +1,21 @@
1
- # Expo Config Plugins
1
+ <!-- Title -->
2
+ <h1 align="center">
3
+ 👋 Welcome to <br><code>@expo/config-plugins</code>
4
+ </h1>
2
5
 
3
- The Expo config is a powerful tool for generating native app code from a unified JavaScript interface. Most basic functionality can be controlled by using the the [static Expo config](https://docs.expo.dev/versions/latest/config/app/), but some features require manipulation of the native project files. To support complex behavior we've created config plugins, and mods (short for modifiers).
6
+ <p align="center">A powerful tool for generating native app code from a unified JavaScript interface.</p>
7
+
8
+ <p align="center">
9
+ <img src="https://flat.badgen.net/packagephobia/install/@expo/config-plugins">
10
+
11
+ <a href="https://www.npmjs.com/package/@expo/config-plugins">
12
+ <img src="https://flat.badgen.net/npm/dw/@expo/config-plugins" target="_blank" />
13
+ </a>
14
+ </p>
15
+
16
+ <!-- Body -->
17
+
18
+ Most basic functionality can be controlled by using the the [static Expo config](https://docs.expo.dev/versions/latest/config/app/), but some features require manipulation of the native project files. To support complex behavior we've created config plugins, and mods (short for modifiers).
4
19
 
5
20
  For more info, please refer to the official docs: [Config Plugins](https://docs.expo.dev/guides/config-plugins/).
6
21
 
@@ -7,10 +7,10 @@ exports.configureEasBuildAsync = configureEasBuildAsync;
7
7
  exports.getEasBuildGradlePath = getEasBuildGradlePath;
8
8
  exports.isEasBuildGradleConfiguredAsync = isEasBuildGradleConfiguredAsync;
9
9
 
10
- function _fsExtra() {
11
- const data = _interopRequireDefault(require("fs-extra"));
10
+ function _fs() {
11
+ const data = _interopRequireDefault(require("fs"));
12
12
 
13
- _fsExtra = function () {
13
+ _fs = function () {
14
14
  return data;
15
15
  };
16
16
 
@@ -67,20 +67,20 @@ function getEasBuildGradlePath(projectRoot) {
67
67
  async function configureEasBuildAsync(projectRoot) {
68
68
  const buildGradlePath = Paths().getAppBuildGradleFilePath(projectRoot);
69
69
  const easGradlePath = getEasBuildGradlePath(projectRoot);
70
- await _fsExtra().default.writeFile(easGradlePath, _EasBuildGradleScript().default);
71
- const buildGradleContent = await _fsExtra().default.readFile(_path().default.join(buildGradlePath), 'utf8');
70
+ await _fs().default.promises.writeFile(easGradlePath, _EasBuildGradleScript().default);
71
+ const buildGradleContent = await _fs().default.promises.readFile(_path().default.join(buildGradlePath), 'utf8');
72
72
  const hasEasGradleApply = hasApplyLine(buildGradleContent, APPLY_EAS_GRADLE);
73
73
 
74
74
  if (!hasEasGradleApply) {
75
- await _fsExtra().default.writeFile(buildGradlePath, `${buildGradleContent.trim()}\n${APPLY_EAS_GRADLE}\n`);
75
+ await _fs().default.promises.writeFile(buildGradlePath, `${buildGradleContent.trim()}\n${APPLY_EAS_GRADLE}\n`);
76
76
  }
77
77
  }
78
78
 
79
79
  async function isEasBuildGradleConfiguredAsync(projectRoot) {
80
80
  const buildGradlePath = Paths().getAppBuildGradleFilePath(projectRoot);
81
81
  const easGradlePath = getEasBuildGradlePath(projectRoot);
82
- const hasEasGradleFile = await _fsExtra().default.pathExists(easGradlePath);
83
- const buildGradleContent = await _fsExtra().default.readFile(_path().default.join(buildGradlePath), 'utf8');
82
+ const hasEasGradleFile = await _fs().default.existsSync(easGradlePath);
83
+ const buildGradleContent = await _fs().default.promises.readFile(_path().default.join(buildGradlePath), 'utf8');
84
84
  const hasEasGradleApply = hasApplyLine(buildGradleContent, APPLY_EAS_GRADLE);
85
85
  return hasEasGradleApply && hasEasGradleFile;
86
86
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/EasBuild.ts"],"names":["APPLY_EAS_GRADLE","hasApplyLine","content","applyLine","replace","split","some","line","getEasBuildGradlePath","projectRoot","path","join","configureEasBuildAsync","buildGradlePath","Paths","getAppBuildGradleFilePath","easGradlePath","fs","writeFile","gradleScript","buildGradleContent","readFile","hasEasGradleApply","trim","isEasBuildGradleConfiguredAsync","hasEasGradleFile","pathExists"],"mappings":";;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;AAEA,MAAMA,gBAAgB,GAAG,kCAAzB;;AAEA,SAASC,YAAT,CAAsBC,OAAtB,EAAuCC,SAAvC,EAAmE;AACjE,SACED,OAAO,CACJE,OADH,CACW,OADX,EACoB,IADpB,EAEGC,KAFH,CAES,IAFT,EAGE;AAHF,GAIGC,IAJH,CAIQC,IAAI,IAAIA,IAAI,KAAKJ,SAAT,IAAsBI,IAAI,KAAKJ,SAAS,CAACC,OAAV,CAAkB,IAAlB,EAAwB,GAAxB,CAJ/C,CADF;AAOD;;AAEM,SAASI,qBAAT,CAA+BC,WAA/B,EAA4D;AACjE,SAAOC,gBAAKC,IAAL,CAAUF,WAAV,EAAuB,SAAvB,EAAkC,KAAlC,EAAyC,kBAAzC,CAAP;AACD;;AAEM,eAAeG,sBAAf,CAAsCH,WAAtC,EAA0E;AAC/E,QAAMI,eAAe,GAAGC,KAAK,GAACC,yBAAN,CAAgCN,WAAhC,CAAxB;AACA,QAAMO,aAAa,GAAGR,qBAAqB,CAACC,WAAD,CAA3C;AAEA,QAAMQ,mBAAGC,SAAH,CAAaF,aAAb,EAA4BG,+BAA5B,CAAN;AAEA,QAAMC,kBAAkB,GAAG,MAAMH,mBAAGI,QAAH,CAAYX,gBAAKC,IAAL,CAAUE,eAAV,CAAZ,EAAwC,MAAxC,CAAjC;AAEA,QAAMS,iBAAiB,GAAGrB,YAAY,CAACmB,kBAAD,EAAqBpB,gBAArB,CAAtC;;AAEA,MAAI,CAACsB,iBAAL,EAAwB;AACtB,UAAML,mBAAGC,SAAH,CAAaL,eAAb,EAA+B,GAAEO,kBAAkB,CAACG,IAAnB,EAA0B,KAAIvB,gBAAiB,IAAhF,CAAN;AACD;AACF;;AAEM,eAAewB,+BAAf,CAA+Cf,WAA/C,EAAsF;AAC3F,QAAMI,eAAe,GAAGC,KAAK,GAACC,yBAAN,CAAgCN,WAAhC,CAAxB;AACA,QAAMO,aAAa,GAAGR,qBAAqB,CAACC,WAAD,CAA3C;AAEA,QAAMgB,gBAAgB,GAAG,MAAMR,mBAAGS,UAAH,CAAcV,aAAd,CAA/B;AAEA,QAAMI,kBAAkB,GAAG,MAAMH,mBAAGI,QAAH,CAAYX,gBAAKC,IAAL,CAAUE,eAAV,CAAZ,EAAwC,MAAxC,CAAjC;AACA,QAAMS,iBAAiB,GAAGrB,YAAY,CAACmB,kBAAD,EAAqBpB,gBAArB,CAAtC;AAEA,SAAOsB,iBAAiB,IAAIG,gBAA5B;AACD","sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\n\nimport gradleScript from './EasBuildGradleScript';\nimport * as Paths from './Paths';\n\nconst APPLY_EAS_GRADLE = 'apply from: \"./eas-build.gradle\"';\n\nfunction hasApplyLine(content: string, applyLine: string): boolean {\n return (\n content\n .replace(/\\r\\n/g, '\\n')\n .split('\\n')\n // Check for both single and double quotes\n .some(line => line === applyLine || line === applyLine.replace(/\"/g, \"'\"))\n );\n}\n\nexport function getEasBuildGradlePath(projectRoot: string): string {\n return path.join(projectRoot, 'android', 'app', 'eas-build.gradle');\n}\n\nexport async function configureEasBuildAsync(projectRoot: string): Promise<void> {\n const buildGradlePath = Paths.getAppBuildGradleFilePath(projectRoot);\n const easGradlePath = getEasBuildGradlePath(projectRoot);\n\n await fs.writeFile(easGradlePath, gradleScript);\n\n const buildGradleContent = await fs.readFile(path.join(buildGradlePath), 'utf8');\n\n const hasEasGradleApply = hasApplyLine(buildGradleContent, APPLY_EAS_GRADLE);\n\n if (!hasEasGradleApply) {\n await fs.writeFile(buildGradlePath, `${buildGradleContent.trim()}\\n${APPLY_EAS_GRADLE}\\n`);\n }\n}\n\nexport async function isEasBuildGradleConfiguredAsync(projectRoot: string): Promise<boolean> {\n const buildGradlePath = Paths.getAppBuildGradleFilePath(projectRoot);\n const easGradlePath = getEasBuildGradlePath(projectRoot);\n\n const hasEasGradleFile = await fs.pathExists(easGradlePath);\n\n const buildGradleContent = await fs.readFile(path.join(buildGradlePath), 'utf8');\n const hasEasGradleApply = hasApplyLine(buildGradleContent, APPLY_EAS_GRADLE);\n\n return hasEasGradleApply && hasEasGradleFile;\n}\n"],"file":"EasBuild.js"}
1
+ {"version":3,"sources":["../../src/android/EasBuild.ts"],"names":["APPLY_EAS_GRADLE","hasApplyLine","content","applyLine","replace","split","some","line","getEasBuildGradlePath","projectRoot","path","join","configureEasBuildAsync","buildGradlePath","Paths","getAppBuildGradleFilePath","easGradlePath","fs","promises","writeFile","gradleScript","buildGradleContent","readFile","hasEasGradleApply","trim","isEasBuildGradleConfiguredAsync","hasEasGradleFile","existsSync"],"mappings":";;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;AAEA,MAAMA,gBAAgB,GAAG,kCAAzB;;AAEA,SAASC,YAAT,CAAsBC,OAAtB,EAAuCC,SAAvC,EAAmE;AACjE,SACED,OAAO,CACJE,OADH,CACW,OADX,EACoB,IADpB,EAEGC,KAFH,CAES,IAFT,EAGE;AAHF,GAIGC,IAJH,CAIQC,IAAI,IAAIA,IAAI,KAAKJ,SAAT,IAAsBI,IAAI,KAAKJ,SAAS,CAACC,OAAV,CAAkB,IAAlB,EAAwB,GAAxB,CAJ/C,CADF;AAOD;;AAEM,SAASI,qBAAT,CAA+BC,WAA/B,EAA4D;AACjE,SAAOC,gBAAKC,IAAL,CAAUF,WAAV,EAAuB,SAAvB,EAAkC,KAAlC,EAAyC,kBAAzC,CAAP;AACD;;AAEM,eAAeG,sBAAf,CAAsCH,WAAtC,EAA0E;AAC/E,QAAMI,eAAe,GAAGC,KAAK,GAACC,yBAAN,CAAgCN,WAAhC,CAAxB;AACA,QAAMO,aAAa,GAAGR,qBAAqB,CAACC,WAAD,CAA3C;AAEA,QAAMQ,cAAGC,QAAH,CAAYC,SAAZ,CAAsBH,aAAtB,EAAqCI,+BAArC,CAAN;AAEA,QAAMC,kBAAkB,GAAG,MAAMJ,cAAGC,QAAH,CAAYI,QAAZ,CAAqBZ,gBAAKC,IAAL,CAAUE,eAAV,CAArB,EAAiD,MAAjD,CAAjC;AAEA,QAAMU,iBAAiB,GAAGtB,YAAY,CAACoB,kBAAD,EAAqBrB,gBAArB,CAAtC;;AAEA,MAAI,CAACuB,iBAAL,EAAwB;AACtB,UAAMN,cAAGC,QAAH,CAAYC,SAAZ,CACJN,eADI,EAEH,GAAEQ,kBAAkB,CAACG,IAAnB,EAA0B,KAAIxB,gBAAiB,IAF9C,CAAN;AAID;AACF;;AAEM,eAAeyB,+BAAf,CAA+ChB,WAA/C,EAAsF;AAC3F,QAAMI,eAAe,GAAGC,KAAK,GAACC,yBAAN,CAAgCN,WAAhC,CAAxB;AACA,QAAMO,aAAa,GAAGR,qBAAqB,CAACC,WAAD,CAA3C;AAEA,QAAMiB,gBAAgB,GAAG,MAAMT,cAAGU,UAAH,CAAcX,aAAd,CAA/B;AAEA,QAAMK,kBAAkB,GAAG,MAAMJ,cAAGC,QAAH,CAAYI,QAAZ,CAAqBZ,gBAAKC,IAAL,CAAUE,eAAV,CAArB,EAAiD,MAAjD,CAAjC;AACA,QAAMU,iBAAiB,GAAGtB,YAAY,CAACoB,kBAAD,EAAqBrB,gBAArB,CAAtC;AAEA,SAAOuB,iBAAiB,IAAIG,gBAA5B;AACD","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport gradleScript from './EasBuildGradleScript';\nimport * as Paths from './Paths';\n\nconst APPLY_EAS_GRADLE = 'apply from: \"./eas-build.gradle\"';\n\nfunction hasApplyLine(content: string, applyLine: string): boolean {\n return (\n content\n .replace(/\\r\\n/g, '\\n')\n .split('\\n')\n // Check for both single and double quotes\n .some(line => line === applyLine || line === applyLine.replace(/\"/g, \"'\"))\n );\n}\n\nexport function getEasBuildGradlePath(projectRoot: string): string {\n return path.join(projectRoot, 'android', 'app', 'eas-build.gradle');\n}\n\nexport async function configureEasBuildAsync(projectRoot: string): Promise<void> {\n const buildGradlePath = Paths.getAppBuildGradleFilePath(projectRoot);\n const easGradlePath = getEasBuildGradlePath(projectRoot);\n\n await fs.promises.writeFile(easGradlePath, gradleScript);\n\n const buildGradleContent = await fs.promises.readFile(path.join(buildGradlePath), 'utf8');\n\n const hasEasGradleApply = hasApplyLine(buildGradleContent, APPLY_EAS_GRADLE);\n\n if (!hasEasGradleApply) {\n await fs.promises.writeFile(\n buildGradlePath,\n `${buildGradleContent.trim()}\\n${APPLY_EAS_GRADLE}\\n`\n );\n }\n}\n\nexport async function isEasBuildGradleConfiguredAsync(projectRoot: string): Promise<boolean> {\n const buildGradlePath = Paths.getAppBuildGradleFilePath(projectRoot);\n const easGradlePath = getEasBuildGradlePath(projectRoot);\n\n const hasEasGradleFile = await fs.existsSync(easGradlePath);\n\n const buildGradleContent = await fs.promises.readFile(path.join(buildGradlePath), 'utf8');\n const hasEasGradleApply = hasApplyLine(buildGradleContent, APPLY_EAS_GRADLE);\n\n return hasEasGradleApply && hasEasGradleFile;\n}\n"],"file":"EasBuild.js"}
@@ -9,18 +9,8 @@ exports.setClassPath = setClassPath;
9
9
  exports.setGoogleServicesFile = setGoogleServicesFile;
10
10
  exports.withGoogleServicesFile = exports.withClassPath = exports.withApplyPlugin = void 0;
11
11
 
12
- function _fsExtra() {
13
- const data = _interopRequireDefault(require("fs-extra"));
14
-
15
- _fsExtra = function () {
16
- return data;
17
- };
18
-
19
- return data;
20
- }
21
-
22
12
  function _path() {
23
- const data = require("path");
13
+ const data = _interopRequireDefault(require("path"));
24
14
 
25
15
  _path = function () {
26
16
  return data;
@@ -49,6 +39,16 @@ function _withDangerousMod() {
49
39
  return data;
50
40
  }
51
41
 
42
+ function _fs() {
43
+ const data = require("../utils/fs");
44
+
45
+ _fs = function () {
46
+ return data;
47
+ };
48
+
49
+ return data;
50
+ }
51
+
52
52
  function _warnings() {
53
53
  const data = require("../utils/warnings");
54
54
 
@@ -121,12 +121,14 @@ async function setGoogleServicesFile(config, projectRoot, targetPath = DEFAULT_T
121
121
  return false;
122
122
  }
123
123
 
124
- const completeSourcePath = (0, _path().resolve)(projectRoot, partialSourcePath);
125
- const destinationPath = (0, _path().resolve)(projectRoot, targetPath);
124
+ const completeSourcePath = _path().default.resolve(projectRoot, partialSourcePath);
125
+
126
+ const destinationPath = _path().default.resolve(projectRoot, targetPath);
126
127
 
127
128
  try {
128
- await _fsExtra().default.copy(completeSourcePath, destinationPath);
129
+ await (0, _fs().copyFilePathToPathAsync)(completeSourcePath, destinationPath);
129
130
  } catch (e) {
131
+ console.log(e);
130
132
  throw new Error(`Cannot copy google-services.json from ${completeSourcePath} to ${destinationPath}. Please make sure the source and destination paths exist.`);
131
133
  }
132
134
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/GoogleServices.ts"],"names":["DEFAULT_TARGET_PATH","googleServicesClassPath","googleServicesPlugin","googleServicesVersion","withClassPath","config","modResults","language","contents","setClassPath","withApplyPlugin","applyPlugin","withGoogleServicesFile","setGoogleServicesFile","modRequest","projectRoot","getGoogleServicesFilePath","android","googleServicesFile","targetPath","partialSourcePath","completeSourcePath","destinationPath","fs","copy","e","Error","buildGradle","includes","replace","appBuildGradle","pattern","RegExp","match"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport fs from 'fs-extra';\nimport { resolve } from 'path';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAppBuildGradle, withProjectBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { addWarningAndroid } from '../utils/warnings';\n\nconst DEFAULT_TARGET_PATH = './android/app/google-services.json';\n\nconst googleServicesClassPath = 'com.google.gms:google-services';\nconst googleServicesPlugin = 'com.google.gms.google-services';\n\n// NOTE(brentvatne): This may be annoying to keep up to date...\nconst googleServicesVersion = '4.3.3';\n\nexport const withClassPath: ConfigPlugin = config => {\n return withProjectBuildGradle(config, config => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = setClassPath(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'android.googleServicesFile',\n `Cannot automatically configure project build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport const withApplyPlugin: ConfigPlugin = config => {\n return withAppBuildGradle(config, config => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = applyPlugin(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'android.googleServicesFile',\n `Cannot automatically configure app build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\n/**\n * Add `google-services.json` to project\n */\nexport const withGoogleServicesFile: ConfigPlugin = config => {\n return withDangerousMod(config, [\n 'android',\n async config => {\n await setGoogleServicesFile(config, config.modRequest.projectRoot);\n return config;\n },\n ]);\n};\n\nexport function getGoogleServicesFilePath(config: Pick<ExpoConfig, 'android'>) {\n return config.android?.googleServicesFile ?? null;\n}\n\nexport async function setGoogleServicesFile(\n config: Pick<ExpoConfig, 'android'>,\n projectRoot: string,\n targetPath: string = DEFAULT_TARGET_PATH\n) {\n const partialSourcePath = getGoogleServicesFilePath(config);\n if (!partialSourcePath) {\n return false;\n }\n\n const completeSourcePath = resolve(projectRoot, partialSourcePath);\n const destinationPath = resolve(projectRoot, targetPath);\n\n try {\n await fs.copy(completeSourcePath, destinationPath);\n } catch (e) {\n throw new Error(\n `Cannot copy google-services.json from ${completeSourcePath} to ${destinationPath}. Please make sure the source and destination paths exist.`\n );\n }\n return true;\n}\n\n/**\n * Adding the Google Services plugin\n * NOTE(brentvatne): string replacement is a fragile approach! we need a\n * better solution than this.\n */\nexport function setClassPath(config: Pick<ExpoConfig, 'android'>, buildGradle: string) {\n const googleServicesFile = getGoogleServicesFilePath(config);\n if (!googleServicesFile) {\n return buildGradle;\n }\n\n if (buildGradle.includes(googleServicesClassPath)) {\n return buildGradle;\n }\n\n //\n return buildGradle.replace(\n /dependencies\\s?{/,\n `dependencies {\n classpath '${googleServicesClassPath}:${googleServicesVersion}'`\n );\n}\n\nexport function applyPlugin(config: Pick<ExpoConfig, 'android'>, appBuildGradle: string) {\n const googleServicesFile = getGoogleServicesFilePath(config);\n if (!googleServicesFile) {\n return appBuildGradle;\n }\n\n // Make sure the project does not have the plugin already\n const pattern = new RegExp(`apply\\\\s+plugin:\\\\s+['\"]${googleServicesPlugin}['\"]`);\n if (appBuildGradle.match(pattern)) {\n return appBuildGradle;\n }\n\n // Add it to the end of the file\n return appBuildGradle + `\\napply plugin: '${googleServicesPlugin}'`;\n}\n"],"file":"GoogleServices.js"}
1
+ {"version":3,"sources":["../../src/android/GoogleServices.ts"],"names":["DEFAULT_TARGET_PATH","googleServicesClassPath","googleServicesPlugin","googleServicesVersion","withClassPath","config","modResults","language","contents","setClassPath","withApplyPlugin","applyPlugin","withGoogleServicesFile","setGoogleServicesFile","modRequest","projectRoot","getGoogleServicesFilePath","android","googleServicesFile","targetPath","partialSourcePath","completeSourcePath","path","resolve","destinationPath","e","console","log","Error","buildGradle","includes","replace","appBuildGradle","pattern","RegExp","match"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport path from 'path';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAppBuildGradle, withProjectBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { copyFilePathToPathAsync } from '../utils/fs';\nimport { addWarningAndroid } from '../utils/warnings';\n\nconst DEFAULT_TARGET_PATH = './android/app/google-services.json';\n\nconst googleServicesClassPath = 'com.google.gms:google-services';\nconst googleServicesPlugin = 'com.google.gms.google-services';\n\n// NOTE(brentvatne): This may be annoying to keep up to date...\nconst googleServicesVersion = '4.3.3';\n\nexport const withClassPath: ConfigPlugin = config => {\n return withProjectBuildGradle(config, config => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = setClassPath(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'android.googleServicesFile',\n `Cannot automatically configure project build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport const withApplyPlugin: ConfigPlugin = config => {\n return withAppBuildGradle(config, config => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = applyPlugin(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'android.googleServicesFile',\n `Cannot automatically configure app build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\n/**\n * Add `google-services.json` to project\n */\nexport const withGoogleServicesFile: ConfigPlugin = config => {\n return withDangerousMod(config, [\n 'android',\n async config => {\n await setGoogleServicesFile(config, config.modRequest.projectRoot);\n return config;\n },\n ]);\n};\n\nexport function getGoogleServicesFilePath(config: Pick<ExpoConfig, 'android'>) {\n return config.android?.googleServicesFile ?? null;\n}\n\nexport async function setGoogleServicesFile(\n config: Pick<ExpoConfig, 'android'>,\n projectRoot: string,\n targetPath: string = DEFAULT_TARGET_PATH\n) {\n const partialSourcePath = getGoogleServicesFilePath(config);\n if (!partialSourcePath) {\n return false;\n }\n\n const completeSourcePath = path.resolve(projectRoot, partialSourcePath);\n const destinationPath = path.resolve(projectRoot, targetPath);\n\n try {\n await copyFilePathToPathAsync(completeSourcePath, destinationPath);\n } catch (e) {\n console.log(e);\n throw new Error(\n `Cannot copy google-services.json from ${completeSourcePath} to ${destinationPath}. Please make sure the source and destination paths exist.`\n );\n }\n return true;\n}\n\n/**\n * Adding the Google Services plugin\n * NOTE(brentvatne): string replacement is a fragile approach! we need a\n * better solution than this.\n */\nexport function setClassPath(config: Pick<ExpoConfig, 'android'>, buildGradle: string) {\n const googleServicesFile = getGoogleServicesFilePath(config);\n if (!googleServicesFile) {\n return buildGradle;\n }\n\n if (buildGradle.includes(googleServicesClassPath)) {\n return buildGradle;\n }\n\n //\n return buildGradle.replace(\n /dependencies\\s?{/,\n `dependencies {\n classpath '${googleServicesClassPath}:${googleServicesVersion}'`\n );\n}\n\nexport function applyPlugin(config: Pick<ExpoConfig, 'android'>, appBuildGradle: string) {\n const googleServicesFile = getGoogleServicesFilePath(config);\n if (!googleServicesFile) {\n return appBuildGradle;\n }\n\n // Make sure the project does not have the plugin already\n const pattern = new RegExp(`apply\\\\s+plugin:\\\\s+['\"]${googleServicesPlugin}['\"]`);\n if (appBuildGradle.match(pattern)) {\n return appBuildGradle;\n }\n\n // Add it to the end of the file\n return appBuildGradle + `\\napply plugin: '${googleServicesPlugin}'`;\n}\n"],"file":"GoogleServices.js"}
@@ -29,10 +29,10 @@ function _assert() {
29
29
  return data;
30
30
  }
31
31
 
32
- function _fsExtra() {
33
- const data = _interopRequireDefault(require("fs-extra"));
32
+ function _fs() {
33
+ const data = _interopRequireDefault(require("fs"));
34
34
 
35
- _fsExtra = function () {
35
+ _fs = function () {
36
36
  return data;
37
37
  };
38
38
 
@@ -67,8 +67,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
67
67
 
68
68
  async function writeAndroidManifestAsync(manifestPath, androidManifest) {
69
69
  const manifestXml = XML().format(androidManifest);
70
- await _fsExtra().default.ensureDir(_path().default.dirname(manifestPath));
71
- await _fsExtra().default.writeFile(manifestPath, manifestXml);
70
+ await _fs().default.promises.mkdir(_path().default.dirname(manifestPath), {
71
+ recursive: true
72
+ });
73
+ await _fs().default.promises.writeFile(manifestPath, manifestXml);
72
74
  }
73
75
 
74
76
  async function readAndroidManifestAsync(manifestPath) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/Manifest.ts"],"names":["writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","XML","format","fs","ensureDir","path","dirname","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","e","$","endsWith","getMainApplicationOrThrow","mainApplication","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"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs-extra';\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: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.ensureDir(path.dirname(manifestPath));\n await fs.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].$[\n `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"],"file":"Manifest.js"}
1
+ {"version":3,"sources":["../../src/android/Manifest.ts"],"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","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"],"mappings":"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","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: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].$[\n `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"],"file":"Manifest.js"}
@@ -21,10 +21,10 @@ function _debug() {
21
21
  return data;
22
22
  }
23
23
 
24
- function _fsExtra() {
25
- const data = _interopRequireDefault(require("fs-extra"));
24
+ function _fs() {
25
+ const data = _interopRequireDefault(require("fs"));
26
26
 
27
- _fsExtra = function () {
27
+ _fs = function () {
28
28
  return data;
29
29
  };
30
30
 
@@ -223,7 +223,9 @@ async function renamePackageOnDiskForType({
223
223
  const newPackagePath = _path().default.join(packageRoot, ...packageName.split('.')); // Create the new directory
224
224
 
225
225
 
226
- _fsExtra().default.mkdirpSync(newPackagePath); // Move everything from the old directory over
226
+ _fs().default.mkdirSync(newPackagePath, {
227
+ recursive: true
228
+ }); // Move everything from the old directory over
227
229
 
228
230
 
229
231
  (0, _glob().sync)('**/*', {
@@ -231,10 +233,12 @@ async function renamePackageOnDiskForType({
231
233
  }).forEach(relativePath => {
232
234
  const filepath = _path().default.join(currentPackagePath, relativePath);
233
235
 
234
- if (_fsExtra().default.lstatSync(filepath).isFile()) {
235
- _fsExtra().default.moveSync(filepath, _path().default.join(newPackagePath, relativePath));
236
+ if (_fs().default.lstatSync(filepath).isFile()) {
237
+ moveFileSync(filepath, _path().default.join(newPackagePath, relativePath));
236
238
  } else {
237
- _fsExtra().default.mkdirpSync(filepath);
239
+ _fs().default.mkdirSync(filepath, {
240
+ recursive: true
241
+ });
238
242
  }
239
243
  }); // Remove the old directory recursively from com/old/package to com/old and com,
240
244
  // as long as the directories are empty
@@ -245,10 +249,10 @@ async function renamePackageOnDiskForType({
245
249
  const pathToCheck = _path().default.join(packageRoot, ...oldPathParts);
246
250
 
247
251
  try {
248
- const files = _fsExtra().default.readdirSync(pathToCheck);
252
+ const files = _fs().default.readdirSync(pathToCheck);
249
253
 
250
254
  if (files.length === 0) {
251
- _fsExtra().default.rmdirSync(pathToCheck);
255
+ _fs().default.rmdirSync(pathToCheck);
252
256
  }
253
257
  } finally {
254
258
  oldPathParts.pop();
@@ -267,12 +271,12 @@ async function renamePackageOnDiskForType({
267
271
 
268
272
  filesToUpdate.forEach(filepath => {
269
273
  try {
270
- if (_fsExtra().default.lstatSync(filepath).isFile()) {
271
- let contents = _fsExtra().default.readFileSync(filepath).toString();
274
+ if (_fs().default.lstatSync(filepath).isFile()) {
275
+ let contents = _fs().default.readFileSync(filepath).toString();
272
276
 
273
277
  contents = contents.replace(new RegExp(currentPackageName, 'g'), packageName);
274
278
 
275
- _fsExtra().default.writeFileSync(filepath, contents);
279
+ _fs().default.writeFileSync(filepath, contents);
276
280
  }
277
281
  } catch (e) {
278
282
  debug(`Error updating "${filepath}" for type "${type}"`);
@@ -280,6 +284,14 @@ async function renamePackageOnDiskForType({
280
284
  });
281
285
  }
282
286
 
287
+ function moveFileSync(src, dest) {
288
+ _fs().default.mkdirSync(_path().default.dirname(dest), {
289
+ recursive: true
290
+ });
291
+
292
+ _fs().default.renameSync(src, dest);
293
+ }
294
+
283
295
  function setPackageInBuildGradle(config, buildGradle) {
284
296
  const packageName = getPackage(config);
285
297
 
@@ -308,11 +320,11 @@ async function getApplicationIdAsync(projectRoot) {
308
320
 
309
321
  const buildGradlePath = (0, _Paths().getAppBuildGradleFilePath)(projectRoot);
310
322
 
311
- if (!(await _fsExtra().default.pathExists(buildGradlePath))) {
323
+ if (!_fs().default.existsSync(buildGradlePath)) {
312
324
  return null;
313
325
  }
314
326
 
315
- const buildGradle = await _fsExtra().default.readFile(buildGradlePath, 'utf8');
327
+ const buildGradle = await _fs().default.promises.readFile(buildGradlePath, 'utf8');
316
328
  const matchResult = buildGradle.match(/applicationId ['"](.*)['"]/); // TODO add fallback for legacy cases to read from AndroidManifest.xml
317
329
 
318
330
  return (_matchResult$ = matchResult === null || matchResult === void 0 ? void 0 : matchResult[1]) !== null && _matchResult$ !== void 0 ? _matchResult$ : null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/Package.ts"],"names":["debug","withPackageManifest","setPackageInAndroidManifest","withPackageGradle","config","modResults","language","contents","setPackageInBuildGradle","withPackageRefactor","renamePackageOnDisk","modRequest","projectRoot","getPackage","android","package","getPackageRoot","type","path","join","getCurrentPackageName","packageRoot","mainApplication","packagePath","dirname","packagePathParts","relative","split","sep","filter","Boolean","getCurrentPackageForProjectFile","fileName","filePath","getCurrentPackageNameForType","newPackageName","renamePackageOnDiskForType","packageName","currentPackageName","currentPackagePath","newPackagePath","fs","mkdirpSync","cwd","forEach","relativePath","filepath","lstatSync","isFile","moveSync","oldPathParts","length","pathToCheck","files","readdirSync","rmdirSync","pop","filesToUpdate","absolute","push","readFileSync","toString","replace","RegExp","writeFileSync","e","buildGradle","pattern","androidManifest","manifest","$","getApplicationIdAsync","buildGradlePath","pathExists","readFile","matchResult","match"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport Debug from 'debug';\nimport fs from 'fs-extra';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createAndroidManifestPlugin, withAppBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { AndroidManifest } from './Manifest';\nimport { getAppBuildGradleFilePath, getProjectFilePath } from './Paths';\n\nconst debug = Debug('expo:config-plugins:android:package');\n\nexport const withPackageManifest = createAndroidManifestPlugin(\n setPackageInAndroidManifest,\n 'withPackageManifest'\n);\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 ['main', 'debug']) {\n await renamePackageOnDiskForType({ projectRoot, type, packageName: newPackageName });\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.mkdirpSync(newPackagePath);\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 fs.moveSync(filepath, path.join(newPackagePath, relativePath));\n } else {\n fs.mkdirpSync(filepath);\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 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 = contents.replace(new RegExp(currentPackageName!, 'g'), packageName);\n fs.writeFileSync(filepath, contents);\n }\n } catch (e) {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\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 ['\"].*['\"]`);\n return buildGradle.replace(pattern, `applicationId '${packageName}'`);\n}\n\nexport function setPackageInAndroidManifest(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\n const packageName = getPackage(config);\n\n if (packageName) {\n androidManifest.manifest.$.package = packageName;\n } else {\n delete androidManifest.manifest.$.package;\n }\n\n return androidManifest;\n}\n\nexport async function getApplicationIdAsync(projectRoot: string): Promise<string | null> {\n const buildGradlePath = getAppBuildGradleFilePath(projectRoot);\n if (!(await fs.pathExists(buildGradlePath))) {\n return null;\n }\n const buildGradle = await fs.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"],"file":"Package.js"}
1
+ {"version":3,"sources":["../../src/android/Package.ts"],"names":["debug","withPackageManifest","setPackageInAndroidManifest","withPackageGradle","config","modResults","language","contents","setPackageInBuildGradle","withPackageRefactor","renamePackageOnDisk","modRequest","projectRoot","getPackage","android","package","getPackageRoot","type","path","join","getCurrentPackageName","packageRoot","mainApplication","packagePath","dirname","packagePathParts","relative","split","sep","filter","Boolean","getCurrentPackageForProjectFile","fileName","filePath","getCurrentPackageNameForType","newPackageName","renamePackageOnDiskForType","packageName","currentPackageName","currentPackagePath","newPackagePath","fs","mkdirSync","recursive","cwd","forEach","relativePath","filepath","lstatSync","isFile","moveFileSync","oldPathParts","length","pathToCheck","files","readdirSync","rmdirSync","pop","filesToUpdate","absolute","push","readFileSync","toString","replace","RegExp","writeFileSync","e","src","dest","renameSync","buildGradle","pattern","androidManifest","manifest","$","getApplicationIdAsync","buildGradlePath","existsSync","promises","readFile","matchResult","match"],"mappings":"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","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 { ConfigPlugin } from '../Plugin.types';\nimport { createAndroidManifestPlugin, withAppBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { AndroidManifest } from './Manifest';\nimport { getAppBuildGradleFilePath, getProjectFilePath } from './Paths';\n\nconst debug = Debug('expo:config-plugins:android:package');\n\nexport const withPackageManifest = createAndroidManifestPlugin(\n setPackageInAndroidManifest,\n 'withPackageManifest'\n);\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 ['main', 'debug']) {\n await renamePackageOnDiskForType({ projectRoot, type, packageName: newPackageName });\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 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 = contents.replace(new RegExp(currentPackageName!, 'g'), packageName);\n fs.writeFileSync(filepath, contents);\n }\n } catch (e) {\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 ['\"].*['\"]`);\n return buildGradle.replace(pattern, `applicationId '${packageName}'`);\n}\n\nexport function setPackageInAndroidManifest(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\n const packageName = getPackage(config);\n\n if (packageName) {\n androidManifest.manifest.$.package = packageName;\n } else {\n delete androidManifest.manifest.$.package;\n }\n\n return androidManifest;\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"],"file":"Package.js"}
@@ -29,10 +29,10 @@ function _assert() {
29
29
  return data;
30
30
  }
31
31
 
32
- function _fsExtra() {
33
- const data = _interopRequireDefault(require("fs-extra"));
32
+ function _fs() {
33
+ const data = _interopRequireDefault(require("fs"));
34
34
 
35
- _fsExtra = function () {
35
+ _fs = function () {
36
36
  return data;
37
37
  };
38
38
 
@@ -114,7 +114,7 @@ function getLanguage(filePath) {
114
114
  function getFileInfo(filePath) {
115
115
  return {
116
116
  path: path().normalize(filePath),
117
- contents: _fsExtra().default.readFileSync(filePath, 'utf8'),
117
+ contents: _fs().default.readFileSync(filePath, 'utf8'),
118
118
  language: getLanguage(filePath)
119
119
  };
120
120
  }
@@ -133,9 +133,9 @@ function getGradleFilePath(projectRoot, gradleName) {
133
133
  const groovyPath = path().resolve(projectRoot, `${gradleName}.gradle`);
134
134
  const ktPath = path().resolve(projectRoot, `${gradleName}.gradle.kts`);
135
135
 
136
- const isGroovy = _fsExtra().default.pathExistsSync(groovyPath);
136
+ const isGroovy = _fs().default.existsSync(groovyPath);
137
137
 
138
- const isKotlin = !isGroovy && _fsExtra().default.pathExistsSync(ktPath);
138
+ const isKotlin = !isGroovy && _fs().default.existsSync(ktPath);
139
139
 
140
140
  if (!isGroovy && !isKotlin) {
141
141
  throw new Error(`Failed to find '${gradleName}.gradle' file for project: ${projectRoot}.`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/Paths.ts"],"names":["getProjectFilePath","projectRoot","name","filePath","path","join","getLanguage","extension","extname","UnexpectedError","getFileInfo","normalize","contents","fs","readFileSync","language","getMainApplicationAsync","getMainActivityAsync","getGradleFilePath","gradleName","groovyPath","resolve","ktPath","isGroovy","pathExistsSync","isKotlin","Error","getProjectBuildGradleFilePath","getProjectBuildGradleAsync","getSettingsGradleFilePath","getSettingsGradleAsync","getAppBuildGradleFilePath","getAppBuildGradleAsync","getProjectPathOrThrowAsync","projectPath","getAndroidManifestAsync","getResourceFolderAsync","getResourceXMLPathAsync","kind","resourcePath"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs-extra';\nimport { sync as globSync } from 'glob';\nimport * as path from 'path';\n\nimport { UnexpectedError } from '../utils/errors';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { ResourceKind } from './Resources';\n\nexport interface ProjectFile<L extends string = string> {\n path: string;\n language: L;\n contents: string;\n}\n\nexport type ApplicationProjectFile = ProjectFile<'java' | 'kt'>;\nexport type GradleProjectFile = ProjectFile<'groovy' | 'kt'>;\n\nexport function getProjectFilePath(projectRoot: string, name: string): string {\n const filePath = globSync(\n path.join(projectRoot, `android/app/src/main/java/**/${name}.@(java|kt)`)\n )[0];\n assert(\n filePath,\n `Project file \"${name}\" does not exist in android project for root \"${projectRoot}\"`\n );\n\n return filePath;\n}\n\nfunction getLanguage(filePath: string): 'java' | 'groovy' | 'kt' {\n const extension = path.extname(filePath);\n switch (extension) {\n case '.java':\n return 'java';\n case '.kts':\n case '.kt':\n return 'kt';\n case '.groovy':\n case '.gradle':\n return 'groovy';\n default:\n throw new UnexpectedError(`Unexpected Android file extension: ${extension}`);\n }\n}\n\nexport function getFileInfo(filePath: string) {\n return {\n path: path.normalize(filePath),\n contents: fs.readFileSync(filePath, 'utf8'),\n language: getLanguage(filePath) as any,\n };\n}\n\nexport async function getMainApplicationAsync(\n projectRoot: string\n): Promise<ApplicationProjectFile> {\n const filePath = getProjectFilePath(projectRoot, 'MainApplication');\n return getFileInfo(filePath);\n}\n\nexport async function getMainActivityAsync(projectRoot: string): Promise<ApplicationProjectFile> {\n const filePath = getProjectFilePath(projectRoot, 'MainActivity');\n return getFileInfo(filePath);\n}\n\nexport function getGradleFilePath(projectRoot: string, gradleName: string): string {\n const groovyPath = path.resolve(projectRoot, `${gradleName}.gradle`);\n const ktPath = path.resolve(projectRoot, `${gradleName}.gradle.kts`);\n\n const isGroovy = fs.pathExistsSync(groovyPath);\n const isKotlin = !isGroovy && fs.pathExistsSync(ktPath);\n\n if (!isGroovy && !isKotlin) {\n throw new Error(`Failed to find '${gradleName}.gradle' file for project: ${projectRoot}.`);\n }\n const filePath = isGroovy ? groovyPath : ktPath;\n return filePath;\n}\n\nexport function getProjectBuildGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android'), 'build');\n}\n\nexport async function getProjectBuildGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getProjectBuildGradleFilePath(projectRoot));\n}\n\nexport function getSettingsGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android'), 'settings');\n}\n\nexport async function getSettingsGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getSettingsGradleFilePath(projectRoot));\n}\n\nexport function getAppBuildGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android', 'app'), 'build');\n}\n\nexport async function getAppBuildGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getAppBuildGradleFilePath(projectRoot));\n}\n\nexport async function getProjectPathOrThrowAsync(projectRoot: string): Promise<string> {\n const projectPath = path.join(projectRoot, 'android');\n if (await directoryExistsAsync(projectPath)) {\n return projectPath;\n }\n throw new Error(`Android project folder is missing in project: ${projectRoot}`);\n}\n\nexport async function getAndroidManifestAsync(projectRoot: string): Promise<string> {\n const projectPath = await getProjectPathOrThrowAsync(projectRoot);\n const filePath = path.join(projectPath, 'app/src/main/AndroidManifest.xml');\n return filePath;\n}\n\nexport async function getResourceFolderAsync(projectRoot: string): Promise<string> {\n const projectPath = await getProjectPathOrThrowAsync(projectRoot);\n return path.join(projectPath, `app/src/main/res`);\n}\n\nexport async function getResourceXMLPathAsync(\n projectRoot: string,\n { kind = 'values', name }: { kind?: ResourceKind; name: 'colors' | 'strings' | 'styles' | string }\n): Promise<string> {\n const resourcePath = await getResourceFolderAsync(projectRoot);\n\n const filePath = path.join(resourcePath, `${kind}/${name}.xml`);\n return filePath;\n}\n"],"file":"Paths.js"}
1
+ {"version":3,"sources":["../../src/android/Paths.ts"],"names":["getProjectFilePath","projectRoot","name","filePath","path","join","getLanguage","extension","extname","UnexpectedError","getFileInfo","normalize","contents","fs","readFileSync","language","getMainApplicationAsync","getMainActivityAsync","getGradleFilePath","gradleName","groovyPath","resolve","ktPath","isGroovy","existsSync","isKotlin","Error","getProjectBuildGradleFilePath","getProjectBuildGradleAsync","getSettingsGradleFilePath","getSettingsGradleAsync","getAppBuildGradleFilePath","getAppBuildGradleAsync","getProjectPathOrThrowAsync","projectPath","getAndroidManifestAsync","getResourceFolderAsync","getResourceXMLPathAsync","kind","resourcePath"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport * as path from 'path';\n\nimport { UnexpectedError } from '../utils/errors';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { ResourceKind } from './Resources';\n\nexport interface ProjectFile<L extends string = string> {\n path: string;\n language: L;\n contents: string;\n}\n\nexport type ApplicationProjectFile = ProjectFile<'java' | 'kt'>;\nexport type GradleProjectFile = ProjectFile<'groovy' | 'kt'>;\n\nexport function getProjectFilePath(projectRoot: string, name: string): string {\n const filePath = globSync(\n path.join(projectRoot, `android/app/src/main/java/**/${name}.@(java|kt)`)\n )[0];\n assert(\n filePath,\n `Project file \"${name}\" does not exist in android project for root \"${projectRoot}\"`\n );\n\n return filePath;\n}\n\nfunction getLanguage(filePath: string): 'java' | 'groovy' | 'kt' {\n const extension = path.extname(filePath);\n switch (extension) {\n case '.java':\n return 'java';\n case '.kts':\n case '.kt':\n return 'kt';\n case '.groovy':\n case '.gradle':\n return 'groovy';\n default:\n throw new UnexpectedError(`Unexpected Android file extension: ${extension}`);\n }\n}\n\nexport function getFileInfo(filePath: string) {\n return {\n path: path.normalize(filePath),\n contents: fs.readFileSync(filePath, 'utf8'),\n language: getLanguage(filePath) as any,\n };\n}\n\nexport async function getMainApplicationAsync(\n projectRoot: string\n): Promise<ApplicationProjectFile> {\n const filePath = getProjectFilePath(projectRoot, 'MainApplication');\n return getFileInfo(filePath);\n}\n\nexport async function getMainActivityAsync(projectRoot: string): Promise<ApplicationProjectFile> {\n const filePath = getProjectFilePath(projectRoot, 'MainActivity');\n return getFileInfo(filePath);\n}\n\nexport function getGradleFilePath(projectRoot: string, gradleName: string): string {\n const groovyPath = path.resolve(projectRoot, `${gradleName}.gradle`);\n const ktPath = path.resolve(projectRoot, `${gradleName}.gradle.kts`);\n\n const isGroovy = fs.existsSync(groovyPath);\n const isKotlin = !isGroovy && fs.existsSync(ktPath);\n\n if (!isGroovy && !isKotlin) {\n throw new Error(`Failed to find '${gradleName}.gradle' file for project: ${projectRoot}.`);\n }\n const filePath = isGroovy ? groovyPath : ktPath;\n return filePath;\n}\n\nexport function getProjectBuildGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android'), 'build');\n}\n\nexport async function getProjectBuildGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getProjectBuildGradleFilePath(projectRoot));\n}\n\nexport function getSettingsGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android'), 'settings');\n}\n\nexport async function getSettingsGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getSettingsGradleFilePath(projectRoot));\n}\n\nexport function getAppBuildGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android', 'app'), 'build');\n}\n\nexport async function getAppBuildGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getAppBuildGradleFilePath(projectRoot));\n}\n\nexport async function getProjectPathOrThrowAsync(projectRoot: string): Promise<string> {\n const projectPath = path.join(projectRoot, 'android');\n if (await directoryExistsAsync(projectPath)) {\n return projectPath;\n }\n throw new Error(`Android project folder is missing in project: ${projectRoot}`);\n}\n\nexport async function getAndroidManifestAsync(projectRoot: string): Promise<string> {\n const projectPath = await getProjectPathOrThrowAsync(projectRoot);\n const filePath = path.join(projectPath, 'app/src/main/AndroidManifest.xml');\n return filePath;\n}\n\nexport async function getResourceFolderAsync(projectRoot: string): Promise<string> {\n const projectPath = await getProjectPathOrThrowAsync(projectRoot);\n return path.join(projectPath, `app/src/main/res`);\n}\n\nexport async function getResourceXMLPathAsync(\n projectRoot: string,\n { kind = 'values', name }: { kind?: ResourceKind; name: 'colors' | 'strings' | 'styles' | string }\n): Promise<string> {\n const resourcePath = await getResourceFolderAsync(projectRoot);\n\n const filePath = path.join(resourcePath, `${kind}/${name}.xml`);\n return filePath;\n}\n"],"file":"Paths.js"}
@@ -3,14 +3,17 @@ import { AndroidManifest } from './Manifest';
3
3
  export declare type IntentFilterProps = {
4
4
  actions: string[];
5
5
  categories: string[];
6
- schemes: string[];
6
+ data: {
7
+ scheme: string;
8
+ host?: string;
9
+ }[];
7
10
  };
8
11
  export declare const withScheme: import("..").ConfigPlugin<void>;
9
12
  export declare function getScheme(config: {
10
13
  scheme?: string | string[];
11
14
  }): string[];
12
15
  export declare function setScheme(config: Pick<ExpoConfig, 'scheme' | 'android'>, androidManifest: AndroidManifest): AndroidManifest;
13
- export declare function getSchemesFromManifest(androidManifest: AndroidManifest): string[];
16
+ export declare function getSchemesFromManifest(androidManifest: AndroidManifest, requestedHost?: string | null): string[];
14
17
  export declare function ensureManifestHasValidIntentFilter(androidManifest: AndroidManifest): boolean;
15
18
  export declare function hasScheme(scheme: string, androidManifest: AndroidManifest): boolean;
16
19
  export declare function appendScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest;