@expo/config-plugins 5.0.4 → 6.0.0

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 (190) hide show
  1. package/build/Plugin.types.d.ts +7 -7
  2. package/build/Plugin.types.js +0 -9
  3. package/build/Plugin.types.js.map +1 -1
  4. package/build/android/AllowBackup.js +0 -15
  5. package/build/android/AllowBackup.js.map +1 -1
  6. package/build/android/BuildProperties.js +2 -16
  7. package/build/android/BuildProperties.js.map +1 -1
  8. package/build/android/Colors.js +3 -25
  9. package/build/android/Colors.js.map +1 -1
  10. package/build/android/EasBuild.js +2 -22
  11. package/build/android/EasBuild.js.map +1 -1
  12. package/build/android/EasBuildGradleScript.js.map +1 -1
  13. package/build/android/GoogleMapsApiKey.js +0 -12
  14. package/build/android/GoogleMapsApiKey.js.map +1 -1
  15. package/build/android/GoogleServices.js +10 -48
  16. package/build/android/GoogleServices.js.map +1 -1
  17. package/build/android/IntentFilters.d.ts +1 -1
  18. package/build/android/IntentFilters.js +8 -24
  19. package/build/android/IntentFilters.js.map +1 -1
  20. package/build/android/Manifest.d.ts +19 -19
  21. package/build/android/Manifest.js +7 -66
  22. package/build/android/Manifest.js.map +1 -1
  23. package/build/android/Name.js +6 -27
  24. package/build/android/Name.js.map +1 -1
  25. package/build/android/Orientation.js +2 -12
  26. package/build/android/Orientation.js.map +1 -1
  27. package/build/android/Package.js +26 -111
  28. package/build/android/Package.js.map +1 -1
  29. package/build/android/Paths.d.ts +2 -2
  30. package/build/android/Paths.js +0 -47
  31. package/build/android/Paths.js.map +1 -1
  32. package/build/android/Permissions.js +8 -52
  33. package/build/android/Permissions.js.map +1 -1
  34. package/build/android/PrimaryColor.js +0 -18
  35. package/build/android/PrimaryColor.js.map +1 -1
  36. package/build/android/Properties.d.ts +1 -1
  37. package/build/android/Properties.js +0 -9
  38. package/build/android/Properties.js.map +1 -1
  39. package/build/android/Resources.d.ts +4 -4
  40. package/build/android/Resources.js +9 -29
  41. package/build/android/Resources.js.map +1 -1
  42. package/build/android/Scheme.d.ts +1 -1
  43. package/build/android/Scheme.js +13 -66
  44. package/build/android/Scheme.js.map +1 -1
  45. package/build/android/StatusBar.js +5 -33
  46. package/build/android/StatusBar.js.map +1 -1
  47. package/build/android/Strings.js +0 -14
  48. package/build/android/Strings.js.map +1 -1
  49. package/build/android/Styles.js +7 -34
  50. package/build/android/Styles.js.map +1 -1
  51. package/build/android/Updates.d.ts +2 -0
  52. package/build/android/Updates.js +50 -47
  53. package/build/android/Updates.js.map +1 -1
  54. package/build/android/Version.js +3 -29
  55. package/build/android/Version.js.map +1 -1
  56. package/build/android/WindowSoftInputMode.js +0 -14
  57. package/build/android/WindowSoftInputMode.js.map +1 -1
  58. package/build/android/codeMod.js +6 -22
  59. package/build/android/codeMod.js.map +1 -1
  60. package/build/android/index.js +0 -94
  61. package/build/android/index.js.map +1 -1
  62. package/build/index.js +2 -65
  63. package/build/index.js.map +1 -1
  64. package/build/ios/Bitcode.d.ts +1 -1
  65. package/build/ios/Bitcode.js +8 -28
  66. package/build/ios/Bitcode.js.map +1 -1
  67. package/build/ios/BuildProperties.js +2 -14
  68. package/build/ios/BuildProperties.js.map +1 -1
  69. package/build/ios/BuildScheme.js +2 -34
  70. package/build/ios/BuildScheme.js.map +1 -1
  71. package/build/ios/BundleIdentifier.js +13 -72
  72. package/build/ios/BundleIdentifier.js.map +1 -1
  73. package/build/ios/DeviceFamily.js +6 -24
  74. package/build/ios/DeviceFamily.js.map +1 -1
  75. package/build/ios/Entitlements.js +4 -45
  76. package/build/ios/Entitlements.js.map +1 -1
  77. package/build/ios/Google.d.ts +2 -2
  78. package/build/ios/Google.js +11 -66
  79. package/build/ios/Google.js.map +1 -1
  80. package/build/ios/IosConfig.types.d.ts +6 -11
  81. package/build/ios/IosConfig.types.js.map +1 -1
  82. package/build/ios/Locales.d.ts +3 -3
  83. package/build/ios/Locales.js +12 -43
  84. package/build/ios/Locales.js.map +1 -1
  85. package/build/ios/Maps.js +15 -53
  86. package/build/ios/Maps.js.map +1 -1
  87. package/build/ios/Name.js +7 -31
  88. package/build/ios/Name.js.map +1 -1
  89. package/build/ios/Orientation.js +2 -10
  90. package/build/ios/Orientation.js.map +1 -1
  91. package/build/ios/Paths.d.ts +2 -2
  92. package/build/ios/Paths.js +8 -73
  93. package/build/ios/Paths.js.map +1 -1
  94. package/build/ios/Permissions.js +1 -16
  95. package/build/ios/Permissions.js.map +1 -1
  96. package/build/ios/ProvisioningProfile.d.ts +1 -1
  97. package/build/ios/ProvisioningProfile.js +0 -18
  98. package/build/ios/ProvisioningProfile.js.map +1 -1
  99. package/build/ios/RequiresFullScreen.js +19 -31
  100. package/build/ios/RequiresFullScreen.js.map +1 -1
  101. package/build/ios/Scheme.js +10 -32
  102. package/build/ios/Scheme.js.map +1 -1
  103. package/build/ios/Swift.js +16 -50
  104. package/build/ios/Swift.js.map +1 -1
  105. package/build/ios/Target.js +0 -30
  106. package/build/ios/Target.js.map +1 -1
  107. package/build/ios/Updates.js +10 -49
  108. package/build/ios/Updates.js.map +1 -1
  109. package/build/ios/UsesNonExemptEncryption.js +4 -10
  110. package/build/ios/UsesNonExemptEncryption.js.map +1 -1
  111. package/build/ios/Version.js +4 -11
  112. package/build/ios/Version.js.map +1 -1
  113. package/build/ios/XcodeProjectFile.js +5 -23
  114. package/build/ios/XcodeProjectFile.js.map +1 -1
  115. package/build/ios/codeMod.js +19 -60
  116. package/build/ios/codeMod.js.map +1 -1
  117. package/build/ios/index.js +0 -97
  118. package/build/ios/index.js.map +1 -1
  119. package/build/ios/utils/Xcodeproj.d.ts +6 -6
  120. package/build/ios/utils/Xcodeproj.js +15 -101
  121. package/build/ios/utils/Xcodeproj.js.map +1 -1
  122. package/build/ios/utils/getInfoPlistPath.js +2 -15
  123. package/build/ios/utils/getInfoPlistPath.js.map +1 -1
  124. package/build/ios/utils/string.js +0 -1
  125. package/build/ios/utils/string.js.map +1 -1
  126. package/build/plugins/android-plugins.d.ts +2 -2
  127. package/build/plugins/android-plugins.js +11 -42
  128. package/build/plugins/android-plugins.js.map +1 -1
  129. package/build/plugins/createBaseMod.d.ts +3 -3
  130. package/build/plugins/createBaseMod.js +8 -25
  131. package/build/plugins/createBaseMod.js.map +1 -1
  132. package/build/plugins/ios-plugins.d.ts +2 -2
  133. package/build/plugins/ios-plugins.js +8 -48
  134. package/build/plugins/ios-plugins.js.map +1 -1
  135. package/build/plugins/mod-compiler.js +21 -72
  136. package/build/plugins/mod-compiler.js.map +1 -1
  137. package/build/plugins/withAndroidBaseMods.d.ts +1 -1
  138. package/build/plugins/withAndroidBaseMods.js +4 -89
  139. package/build/plugins/withAndroidBaseMods.js.map +1 -1
  140. package/build/plugins/withDangerousMod.js +0 -5
  141. package/build/plugins/withDangerousMod.js.map +1 -1
  142. package/build/plugins/withIosBaseMods.d.ts +1 -1
  143. package/build/plugins/withIosBaseMods.js +26 -118
  144. package/build/plugins/withIosBaseMods.js.map +1 -1
  145. package/build/plugins/withMod.d.ts +1 -1
  146. package/build/plugins/withMod.js +24 -59
  147. package/build/plugins/withMod.js.map +1 -1
  148. package/build/plugins/withPlugins.js +0 -9
  149. package/build/plugins/withPlugins.js.map +1 -1
  150. package/build/plugins/withRunOnce.js +3 -9
  151. package/build/plugins/withRunOnce.js.map +1 -1
  152. package/build/plugins/withStaticPlugin.js +21 -43
  153. package/build/plugins/withStaticPlugin.js.map +1 -1
  154. package/build/utils/BuildProperties.types.d.ts +2 -2
  155. package/build/utils/BuildProperties.types.js.map +1 -1
  156. package/build/utils/Updates.d.ts +3 -1
  157. package/build/utils/Updates.js +18 -77
  158. package/build/utils/Updates.js.map +1 -1
  159. package/build/utils/XML.d.ts +1 -1
  160. package/build/utils/XML.js +7 -44
  161. package/build/utils/XML.js.map +1 -1
  162. package/build/utils/commonCodeMod.js +2 -10
  163. package/build/utils/commonCodeMod.js.map +1 -1
  164. package/build/utils/errors.d.ts +1 -1
  165. package/build/utils/errors.js +3 -11
  166. package/build/utils/errors.js.map +1 -1
  167. package/build/utils/fs.js +1 -12
  168. package/build/utils/fs.js.map +1 -1
  169. package/build/utils/generateCode.d.ts +1 -1
  170. package/build/utils/generateCode.js +8 -25
  171. package/build/utils/generateCode.js.map +1 -1
  172. package/build/utils/history.d.ts +1 -1
  173. package/build/utils/history.js +0 -6
  174. package/build/utils/history.js.map +1 -1
  175. package/build/utils/matchBrackets.d.ts +3 -3
  176. package/build/utils/matchBrackets.js +2 -17
  177. package/build/utils/matchBrackets.js.map +1 -1
  178. package/build/utils/modules.js +0 -10
  179. package/build/utils/modules.js.map +1 -1
  180. package/build/utils/obj.js +0 -4
  181. package/build/utils/obj.js.map +1 -1
  182. package/build/utils/plugin-resolver.js +25 -69
  183. package/build/utils/plugin-resolver.js.map +1 -1
  184. package/build/utils/sortObject.js +4 -10
  185. package/build/utils/sortObject.js.map +1 -1
  186. package/build/utils/versions.js +0 -10
  187. package/build/utils/versions.js.map +1 -1
  188. package/build/utils/warnings.js +1 -9
  189. package/build/utils/warnings.js.map +1 -1
  190. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"Paths.js","names":["getProjectFilePath","projectRoot","name","filePath","globSync","path","join","assert","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","directoryExistsAsync","getAndroidManifestAsync","getResourceFolderAsync","getResourceXMLPathAsync","kind","resourcePath"],"sources":["../../src/android/Paths.ts"],"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"],"mappings":"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"}
1
+ {"version":3,"file":"Paths.js","names":["getProjectFilePath","projectRoot","name","filePath","globSync","path","join","assert","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","directoryExistsAsync","getAndroidManifestAsync","getResourceFolderAsync","getResourceXMLPathAsync","kind","resourcePath"],"sources":["../../src/android/Paths.ts"],"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"],"mappings":"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"}
@@ -15,92 +15,72 @@ exports.isPermissionAlreadyRequested = isPermissionAlreadyRequested;
15
15
  exports.removePermissions = removePermissions;
16
16
  exports.setAndroidPermissions = setAndroidPermissions;
17
17
  exports.withPermissions = exports.withInternalBlockedPermissions = exports.withBlockedPermissions = void 0;
18
-
19
18
  function _androidPlugins() {
20
19
  const data = require("../plugins/android-plugins");
21
-
22
20
  _androidPlugins = function () {
23
21
  return data;
24
22
  };
25
-
26
23
  return data;
27
24
  }
28
-
29
25
  function _Manifest() {
30
26
  const data = require("./Manifest");
31
-
32
27
  _Manifest = function () {
33
28
  return data;
34
29
  };
35
-
36
30
  return data;
37
31
  }
38
-
39
32
  const USES_PERMISSION = 'uses-permission';
40
-
41
33
  const withPermissions = (config, permissions) => {
42
34
  if (Array.isArray(permissions)) {
43
35
  permissions = permissions.filter(Boolean);
44
36
  if (!config.android) config.android = {};
45
37
  if (!config.android.permissions) config.android.permissions = [];
46
- config.android.permissions = [// @ts-ignore
38
+ config.android.permissions = [
39
+ // @ts-ignore
47
40
  ...new Set(config.android.permissions.concat(permissions))];
48
41
  }
49
-
50
42
  return (0, _androidPlugins().withAndroidManifest)(config, async config => {
51
43
  config.modResults = await setAndroidPermissions(config, config.modResults);
52
44
  return config;
53
45
  });
54
46
  };
55
- /** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */
56
-
57
47
 
48
+ /** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */
58
49
  exports.withPermissions = withPermissions;
59
-
60
50
  const withBlockedPermissions = (config, permissions) => {
61
51
  var _config$android;
62
-
63
52
  const resolvedPermissions = prefixAndroidPermissionsIfNecessary((Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean));
64
-
65
53
  if (config !== null && config !== void 0 && (_config$android = config.android) !== null && _config$android !== void 0 && _config$android.permissions && Array.isArray(config.android.permissions)) {
66
54
  // Remove any static config permissions
67
55
  config.android.permissions = prefixAndroidPermissionsIfNecessary(config.android.permissions).filter(permission => !resolvedPermissions.includes(permission));
68
56
  }
69
-
70
57
  return (0, _androidPlugins().withAndroidManifest)(config, async config => {
71
58
  config.modResults = (0, _Manifest().ensureToolsAvailable)(config.modResults);
72
59
  config.modResults = addBlockedPermissions(config.modResults, resolvedPermissions);
73
60
  return config;
74
61
  });
75
62
  };
76
-
77
63
  exports.withBlockedPermissions = withBlockedPermissions;
78
-
79
64
  const withInternalBlockedPermissions = config => {
80
65
  var _config$android2, _config$android2$bloc;
81
-
82
66
  // Only add permissions if the user defined the property and added some values
83
67
  // this ensures we don't add the `tools:*` namespace extraneously.
84
68
  if ((_config$android2 = config.android) !== null && _config$android2 !== void 0 && (_config$android2$bloc = _config$android2.blockedPermissions) !== null && _config$android2$bloc !== void 0 && _config$android2$bloc.length) {
85
69
  return withBlockedPermissions(config, config.android.blockedPermissions);
86
70
  }
87
-
88
71
  return config;
89
72
  };
90
-
91
73
  exports.withInternalBlockedPermissions = withInternalBlockedPermissions;
92
-
93
74
  function addBlockedPermissions(androidManifest, permissions) {
94
75
  if (!Array.isArray(androidManifest.manifest['uses-permission'])) {
95
76
  androidManifest.manifest['uses-permission'] = [];
96
77
  }
97
-
98
78
  for (const permission of prefixAndroidPermissionsIfNecessary(permissions)) {
99
79
  androidManifest.manifest['uses-permission'] = ensureBlockedPermission(androidManifest.manifest['uses-permission'], permission);
100
80
  }
101
-
102
81
  return androidManifest;
103
82
  }
83
+
104
84
  /**
105
85
  * Filter any existing permissions matching the provided permission name, then add a
106
86
  * restricted permission to overwrite any extra permissions that may be added in a
@@ -110,12 +90,11 @@ function addBlockedPermissions(androidManifest, permissions) {
110
90
  * @param permission `android:name` of the permission to restrict
111
91
  * @returns
112
92
  */
113
-
114
-
115
93
  function ensureBlockedPermission(manifestPermissions, permission) {
116
94
  // Remove permission if it currently exists
117
- manifestPermissions = manifestPermissions.filter(e => e.$['android:name'] !== permission); // Add a permission with tools:node to overwrite any existing permission and ensure it's removed upon building.
95
+ manifestPermissions = manifestPermissions.filter(e => e.$['android:name'] !== permission);
118
96
 
97
+ // Add a permission with tools:node to overwrite any existing permission and ensure it's removed upon building.
119
98
  manifestPermissions.push({
120
99
  $: {
121
100
  'android:name': permission,
@@ -124,34 +103,27 @@ function ensureBlockedPermission(manifestPermissions, permission) {
124
103
  });
125
104
  return manifestPermissions;
126
105
  }
127
-
128
106
  function prefixAndroidPermissionsIfNecessary(permissions) {
129
107
  return permissions.map(permission => {
130
108
  if (!permission.includes('.')) {
131
109
  return `android.permission.${permission}`;
132
110
  }
133
-
134
111
  return permission;
135
112
  });
136
113
  }
137
-
138
114
  function getAndroidPermissions(config) {
139
115
  var _config$android$permi, _config$android3;
140
-
141
116
  return (_config$android$permi = (_config$android3 = config.android) === null || _config$android3 === void 0 ? void 0 : _config$android3.permissions) !== null && _config$android$permi !== void 0 ? _config$android$permi : [];
142
117
  }
143
-
144
118
  function setAndroidPermissions(config, androidManifest) {
145
119
  var _androidManifest$mani;
146
-
147
120
  const permissions = getAndroidPermissions(config);
148
121
  const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);
149
122
  const permissionsToAdd = [...providedPermissions];
150
-
151
123
  if (!androidManifest.manifest.hasOwnProperty('uses-permission')) {
152
124
  androidManifest.manifest['uses-permission'] = [];
153
- } // manifest.manifest['uses-permission'] = [];
154
-
125
+ }
126
+ // manifest.manifest['uses-permission'] = [];
155
127
 
156
128
  const manifestPermissions = (_androidManifest$mani = androidManifest.manifest['uses-permission']) !== null && _androidManifest$mani !== void 0 ? _androidManifest$mani : [];
157
129
  permissionsToAdd.forEach(permission => {
@@ -161,11 +133,9 @@ function setAndroidPermissions(config, androidManifest) {
161
133
  });
162
134
  return androidManifest;
163
135
  }
164
-
165
136
  function isPermissionAlreadyRequested(permission, manifestPermissions) {
166
137
  return manifestPermissions.some(e => e.$['android:name'] === permission);
167
138
  }
168
-
169
139
  function addPermissionToManifest(permission, manifestPermissions) {
170
140
  manifestPermissions.push({
171
141
  $: {
@@ -174,26 +144,21 @@ function addPermissionToManifest(permission, manifestPermissions) {
174
144
  });
175
145
  return manifestPermissions;
176
146
  }
177
-
178
147
  function removePermissions(androidManifest, permissionNames) {
179
148
  const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;
180
149
  const permissions = androidManifest.manifest[USES_PERMISSION] || [];
181
150
  const nextPermissions = [];
182
-
183
151
  for (const attribute of permissions) {
184
152
  if (targetNames) {
185
153
  // @ts-ignore: name isn't part of the type
186
154
  const value = attribute.$['android:name'] || attribute.$.name;
187
-
188
155
  if (!targetNames.includes(value)) {
189
156
  nextPermissions.push(attribute);
190
157
  }
191
158
  }
192
159
  }
193
-
194
160
  androidManifest.manifest[USES_PERMISSION] = nextPermissions;
195
161
  }
196
-
197
162
  function addPermission(androidManifest, permissionName) {
198
163
  const usesPermissions = androidManifest.manifest[USES_PERMISSION] || [];
199
164
  usesPermissions.push({
@@ -203,14 +168,11 @@ function addPermission(androidManifest, permissionName) {
203
168
  });
204
169
  androidManifest.manifest[USES_PERMISSION] = usesPermissions;
205
170
  }
206
-
207
171
  function ensurePermissions(androidManifest, permissionNames) {
208
172
  const permissions = getPermissions(androidManifest);
209
173
  const results = {};
210
-
211
174
  for (const permissionName of permissionNames) {
212
175
  const targetName = ensurePermissionNameFormat(permissionName);
213
-
214
176
  if (!permissions.includes(targetName)) {
215
177
  addPermission(androidManifest, targetName);
216
178
  results[permissionName] = true;
@@ -218,22 +180,17 @@ function ensurePermissions(androidManifest, permissionNames) {
218
180
  results[permissionName] = false;
219
181
  }
220
182
  }
221
-
222
183
  return results;
223
184
  }
224
-
225
185
  function ensurePermission(androidManifest, permissionName) {
226
186
  const permissions = getPermissions(androidManifest);
227
187
  const targetName = ensurePermissionNameFormat(permissionName);
228
-
229
188
  if (!permissions.includes(targetName)) {
230
189
  addPermission(androidManifest, targetName);
231
190
  return true;
232
191
  }
233
-
234
192
  return false;
235
193
  }
236
-
237
194
  function ensurePermissionNameFormat(permissionName) {
238
195
  if (permissionName.includes('.')) {
239
196
  const com = permissionName.split('.');
@@ -244,7 +201,6 @@ function ensurePermissionNameFormat(permissionName) {
244
201
  return ensurePermissionNameFormat(`android.permission.${permissionName}`);
245
202
  }
246
203
  }
247
-
248
204
  function getPermissions(androidManifest) {
249
205
  const usesPermissions = androidManifest.manifest[USES_PERMISSION] || [];
250
206
  const permissions = usesPermissions.map(permissionObject => {
@@ -1 +1 @@
1
- {"version":3,"file":"Permissions.js","names":["USES_PERMISSION","withPermissions","config","permissions","Array","isArray","filter","Boolean","android","Set","concat","withAndroidManifest","modResults","setAndroidPermissions","withBlockedPermissions","resolvedPermissions","prefixAndroidPermissionsIfNecessary","permission","includes","ensureToolsAvailable","addBlockedPermissions","withInternalBlockedPermissions","blockedPermissions","length","androidManifest","manifest","ensureBlockedPermission","manifestPermissions","e","$","push","map","getAndroidPermissions","providedPermissions","permissionsToAdd","hasOwnProperty","forEach","isPermissionAlreadyRequested","addPermissionToManifest","some","removePermissions","permissionNames","targetNames","ensurePermissionNameFormat","nextPermissions","attribute","value","name","addPermission","permissionName","usesPermissions","ensurePermissions","getPermissions","results","targetName","ensurePermission","com","split","pop","toUpperCase","join","permissionObject"],"sources":["../../src/android/Permissions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport { AndroidManifest, ensureToolsAvailable, ManifestUsesPermission } from './Manifest';\n\nconst USES_PERMISSION = 'uses-permission';\n\nexport const withPermissions: ConfigPlugin<string[] | void> = (config, permissions) => {\n if (Array.isArray(permissions)) {\n permissions = permissions.filter(Boolean);\n if (!config.android) config.android = {};\n if (!config.android.permissions) config.android.permissions = [];\n config.android.permissions = [\n // @ts-ignore\n ...new Set(config.android.permissions.concat(permissions)),\n ];\n }\n return withAndroidManifest(config, async (config) => {\n config.modResults = await setAndroidPermissions(config, config.modResults);\n return config;\n });\n};\n\n/** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */\nexport const withBlockedPermissions: ConfigPlugin<string[] | string> = (config, permissions) => {\n const resolvedPermissions = prefixAndroidPermissionsIfNecessary(\n (Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean)\n );\n\n if (config?.android?.permissions && Array.isArray(config.android.permissions)) {\n // Remove any static config permissions\n config.android.permissions = prefixAndroidPermissionsIfNecessary(\n config.android.permissions\n ).filter((permission) => !resolvedPermissions.includes(permission));\n }\n\n return withAndroidManifest(config, async (config) => {\n config.modResults = ensureToolsAvailable(config.modResults);\n config.modResults = addBlockedPermissions(config.modResults, resolvedPermissions);\n return config;\n });\n};\n\nexport const withInternalBlockedPermissions: ConfigPlugin = (config) => {\n // Only add permissions if the user defined the property and added some values\n // this ensures we don't add the `tools:*` namespace extraneously.\n if (config.android?.blockedPermissions?.length) {\n return withBlockedPermissions(config, config.android.blockedPermissions);\n }\n\n return config;\n};\n\nexport function addBlockedPermissions(androidManifest: AndroidManifest, permissions: string[]) {\n if (!Array.isArray(androidManifest.manifest['uses-permission'])) {\n androidManifest.manifest['uses-permission'] = [];\n }\n\n for (const permission of prefixAndroidPermissionsIfNecessary(permissions)) {\n androidManifest.manifest['uses-permission'] = ensureBlockedPermission(\n androidManifest.manifest['uses-permission'],\n permission\n );\n }\n\n return androidManifest;\n}\n\n/**\n * Filter any existing permissions matching the provided permission name, then add a\n * restricted permission to overwrite any extra permissions that may be added in a\n * third-party package's AndroidManifest.xml.\n *\n * @param manifestPermissions manifest `uses-permissions` array.\n * @param permission `android:name` of the permission to restrict\n * @returns\n */\nfunction ensureBlockedPermission(\n manifestPermissions: ManifestUsesPermission[],\n permission: string\n) {\n // Remove permission if it currently exists\n manifestPermissions = manifestPermissions.filter((e) => e.$['android:name'] !== permission);\n\n // Add a permission with tools:node to overwrite any existing permission and ensure it's removed upon building.\n manifestPermissions.push({\n $: { 'android:name': permission, 'tools:node': 'remove' },\n });\n return manifestPermissions;\n}\n\nfunction prefixAndroidPermissionsIfNecessary(permissions: string[]): string[] {\n return permissions.map((permission) => {\n if (!permission.includes('.')) {\n return `android.permission.${permission}`;\n }\n return permission;\n });\n}\n\nexport function getAndroidPermissions(config: Pick<ExpoConfig, 'android'>): string[] {\n return config.android?.permissions ?? [];\n}\n\nexport function setAndroidPermissions(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\n const permissions = getAndroidPermissions(config);\n const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);\n const permissionsToAdd = [...providedPermissions];\n\n if (!androidManifest.manifest.hasOwnProperty('uses-permission')) {\n androidManifest.manifest['uses-permission'] = [];\n }\n // manifest.manifest['uses-permission'] = [];\n\n const manifestPermissions = androidManifest.manifest['uses-permission'] ?? [];\n\n permissionsToAdd.forEach((permission) => {\n if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {\n addPermissionToManifest(permission, manifestPermissions);\n }\n });\n\n return androidManifest;\n}\n\nexport function isPermissionAlreadyRequested(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n): boolean {\n return manifestPermissions.some((e) => e.$['android:name'] === permission);\n}\n\nexport function addPermissionToManifest(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n) {\n manifestPermissions.push({ $: { 'android:name': permission } });\n return manifestPermissions;\n}\n\nexport function removePermissions(androidManifest: AndroidManifest, permissionNames?: string[]) {\n const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;\n const permissions = androidManifest.manifest[USES_PERMISSION] || [];\n const nextPermissions = [];\n for (const attribute of permissions) {\n if (targetNames) {\n // @ts-ignore: name isn't part of the type\n const value = attribute.$['android:name'] || attribute.$.name;\n if (!targetNames.includes(value)) {\n nextPermissions.push(attribute);\n }\n }\n }\n\n androidManifest.manifest[USES_PERMISSION] = nextPermissions;\n}\n\nexport function addPermission(androidManifest: AndroidManifest, permissionName: string): void {\n const usesPermissions: ManifestUsesPermission[] = androidManifest.manifest[USES_PERMISSION] || [];\n usesPermissions.push({\n $: { 'android:name': permissionName },\n });\n androidManifest.manifest[USES_PERMISSION] = usesPermissions;\n}\n\nexport function ensurePermissions(\n androidManifest: AndroidManifest,\n permissionNames: string[]\n): { [permission: string]: boolean } {\n const permissions = getPermissions(androidManifest);\n\n const results: { [permission: string]: boolean } = {};\n for (const permissionName of permissionNames) {\n const targetName = ensurePermissionNameFormat(permissionName);\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n results[permissionName] = true;\n } else {\n results[permissionName] = false;\n }\n }\n return results;\n}\n\nexport function ensurePermission(\n androidManifest: AndroidManifest,\n permissionName: string\n): boolean {\n const permissions = getPermissions(androidManifest);\n const targetName = ensurePermissionNameFormat(permissionName);\n\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n return true;\n }\n return false;\n}\n\nexport function ensurePermissionNameFormat(permissionName: string): string {\n if (permissionName.includes('.')) {\n const com = permissionName.split('.');\n const name = com.pop() as string;\n return [...com, name.toUpperCase()].join('.');\n } else {\n // If shorthand form like `WRITE_CONTACTS` is provided, expand it to `android.permission.WRITE_CONTACTS`.\n return ensurePermissionNameFormat(`android.permission.${permissionName}`);\n }\n}\n\nexport function getPermissions(androidManifest: AndroidManifest): string[] {\n const usesPermissions: { [key: string]: any }[] = androidManifest.manifest[USES_PERMISSION] || [];\n const permissions = usesPermissions.map((permissionObject) => {\n return permissionObject.$['android:name'] || permissionObject.$.name;\n });\n return permissions;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Permissions.js","names":["USES_PERMISSION","withPermissions","config","permissions","Array","isArray","filter","Boolean","android","Set","concat","withAndroidManifest","modResults","setAndroidPermissions","withBlockedPermissions","resolvedPermissions","prefixAndroidPermissionsIfNecessary","permission","includes","ensureToolsAvailable","addBlockedPermissions","withInternalBlockedPermissions","blockedPermissions","length","androidManifest","manifest","ensureBlockedPermission","manifestPermissions","e","$","push","map","getAndroidPermissions","providedPermissions","permissionsToAdd","hasOwnProperty","forEach","isPermissionAlreadyRequested","addPermissionToManifest","some","removePermissions","permissionNames","targetNames","ensurePermissionNameFormat","nextPermissions","attribute","value","name","addPermission","permissionName","usesPermissions","ensurePermissions","getPermissions","results","targetName","ensurePermission","com","split","pop","toUpperCase","join","permissionObject"],"sources":["../../src/android/Permissions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport { AndroidManifest, ensureToolsAvailable, ManifestUsesPermission } from './Manifest';\n\nconst USES_PERMISSION = 'uses-permission';\n\nexport const withPermissions: ConfigPlugin<string[] | void> = (config, permissions) => {\n if (Array.isArray(permissions)) {\n permissions = permissions.filter(Boolean);\n if (!config.android) config.android = {};\n if (!config.android.permissions) config.android.permissions = [];\n config.android.permissions = [\n // @ts-ignore\n ...new Set(config.android.permissions.concat(permissions)),\n ];\n }\n return withAndroidManifest(config, async (config) => {\n config.modResults = await setAndroidPermissions(config, config.modResults);\n return config;\n });\n};\n\n/** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */\nexport const withBlockedPermissions: ConfigPlugin<string[] | string> = (config, permissions) => {\n const resolvedPermissions = prefixAndroidPermissionsIfNecessary(\n (Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean)\n );\n\n if (config?.android?.permissions && Array.isArray(config.android.permissions)) {\n // Remove any static config permissions\n config.android.permissions = prefixAndroidPermissionsIfNecessary(\n config.android.permissions\n ).filter((permission) => !resolvedPermissions.includes(permission));\n }\n\n return withAndroidManifest(config, async (config) => {\n config.modResults = ensureToolsAvailable(config.modResults);\n config.modResults = addBlockedPermissions(config.modResults, resolvedPermissions);\n return config;\n });\n};\n\nexport const withInternalBlockedPermissions: ConfigPlugin = (config) => {\n // Only add permissions if the user defined the property and added some values\n // this ensures we don't add the `tools:*` namespace extraneously.\n if (config.android?.blockedPermissions?.length) {\n return withBlockedPermissions(config, config.android.blockedPermissions);\n }\n\n return config;\n};\n\nexport function addBlockedPermissions(androidManifest: AndroidManifest, permissions: string[]) {\n if (!Array.isArray(androidManifest.manifest['uses-permission'])) {\n androidManifest.manifest['uses-permission'] = [];\n }\n\n for (const permission of prefixAndroidPermissionsIfNecessary(permissions)) {\n androidManifest.manifest['uses-permission'] = ensureBlockedPermission(\n androidManifest.manifest['uses-permission'],\n permission\n );\n }\n\n return androidManifest;\n}\n\n/**\n * Filter any existing permissions matching the provided permission name, then add a\n * restricted permission to overwrite any extra permissions that may be added in a\n * third-party package's AndroidManifest.xml.\n *\n * @param manifestPermissions manifest `uses-permissions` array.\n * @param permission `android:name` of the permission to restrict\n * @returns\n */\nfunction ensureBlockedPermission(\n manifestPermissions: ManifestUsesPermission[],\n permission: string\n) {\n // Remove permission if it currently exists\n manifestPermissions = manifestPermissions.filter((e) => e.$['android:name'] !== permission);\n\n // Add a permission with tools:node to overwrite any existing permission and ensure it's removed upon building.\n manifestPermissions.push({\n $: { 'android:name': permission, 'tools:node': 'remove' },\n });\n return manifestPermissions;\n}\n\nfunction prefixAndroidPermissionsIfNecessary(permissions: string[]): string[] {\n return permissions.map((permission) => {\n if (!permission.includes('.')) {\n return `android.permission.${permission}`;\n }\n return permission;\n });\n}\n\nexport function getAndroidPermissions(config: Pick<ExpoConfig, 'android'>): string[] {\n return config.android?.permissions ?? [];\n}\n\nexport function setAndroidPermissions(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\n const permissions = getAndroidPermissions(config);\n const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);\n const permissionsToAdd = [...providedPermissions];\n\n if (!androidManifest.manifest.hasOwnProperty('uses-permission')) {\n androidManifest.manifest['uses-permission'] = [];\n }\n // manifest.manifest['uses-permission'] = [];\n\n const manifestPermissions = androidManifest.manifest['uses-permission'] ?? [];\n\n permissionsToAdd.forEach((permission) => {\n if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {\n addPermissionToManifest(permission, manifestPermissions);\n }\n });\n\n return androidManifest;\n}\n\nexport function isPermissionAlreadyRequested(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n): boolean {\n return manifestPermissions.some((e) => e.$['android:name'] === permission);\n}\n\nexport function addPermissionToManifest(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n) {\n manifestPermissions.push({ $: { 'android:name': permission } });\n return manifestPermissions;\n}\n\nexport function removePermissions(androidManifest: AndroidManifest, permissionNames?: string[]) {\n const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;\n const permissions = androidManifest.manifest[USES_PERMISSION] || [];\n const nextPermissions = [];\n for (const attribute of permissions) {\n if (targetNames) {\n // @ts-ignore: name isn't part of the type\n const value = attribute.$['android:name'] || attribute.$.name;\n if (!targetNames.includes(value)) {\n nextPermissions.push(attribute);\n }\n }\n }\n\n androidManifest.manifest[USES_PERMISSION] = nextPermissions;\n}\n\nexport function addPermission(androidManifest: AndroidManifest, permissionName: string): void {\n const usesPermissions: ManifestUsesPermission[] = androidManifest.manifest[USES_PERMISSION] || [];\n usesPermissions.push({\n $: { 'android:name': permissionName },\n });\n androidManifest.manifest[USES_PERMISSION] = usesPermissions;\n}\n\nexport function ensurePermissions(\n androidManifest: AndroidManifest,\n permissionNames: string[]\n): { [permission: string]: boolean } {\n const permissions = getPermissions(androidManifest);\n\n const results: { [permission: string]: boolean } = {};\n for (const permissionName of permissionNames) {\n const targetName = ensurePermissionNameFormat(permissionName);\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n results[permissionName] = true;\n } else {\n results[permissionName] = false;\n }\n }\n return results;\n}\n\nexport function ensurePermission(\n androidManifest: AndroidManifest,\n permissionName: string\n): boolean {\n const permissions = getPermissions(androidManifest);\n const targetName = ensurePermissionNameFormat(permissionName);\n\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n return true;\n }\n return false;\n}\n\nexport function ensurePermissionNameFormat(permissionName: string): string {\n if (permissionName.includes('.')) {\n const com = permissionName.split('.');\n const name = com.pop() as string;\n return [...com, name.toUpperCase()].join('.');\n } else {\n // If shorthand form like `WRITE_CONTACTS` is provided, expand it to `android.permission.WRITE_CONTACTS`.\n return ensurePermissionNameFormat(`android.permission.${permissionName}`);\n }\n}\n\nexport function getPermissions(androidManifest: AndroidManifest): string[] {\n const usesPermissions: { [key: string]: any }[] = androidManifest.manifest[USES_PERMISSION] || [];\n const permissions = usesPermissions.map((permissionObject) => {\n return permissionObject.$['android:name'] || permissionObject.$.name;\n });\n return permissions;\n}\n"],"mappings":"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"}
@@ -5,48 +5,35 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getPrimaryColor = getPrimaryColor;
7
7
  exports.withPrimaryColorStyles = exports.withPrimaryColorColors = exports.withPrimaryColor = void 0;
8
-
9
8
  function _androidPlugins() {
10
9
  const data = require("../plugins/android-plugins");
11
-
12
10
  _androidPlugins = function () {
13
11
  return data;
14
12
  };
15
-
16
13
  return data;
17
14
  }
18
-
19
15
  function _Colors() {
20
16
  const data = require("./Colors");
21
-
22
17
  _Colors = function () {
23
18
  return data;
24
19
  };
25
-
26
20
  return data;
27
21
  }
28
-
29
22
  function _Styles() {
30
23
  const data = require("./Styles");
31
-
32
24
  _Styles = function () {
33
25
  return data;
34
26
  };
35
-
36
27
  return data;
37
28
  }
38
-
39
29
  const COLOR_PRIMARY_KEY = 'colorPrimary';
40
30
  const DEFAULT_PRIMARY_COLOR = '#023c69';
41
-
42
31
  const withPrimaryColor = config => {
43
32
  config = withPrimaryColorColors(config);
44
33
  config = withPrimaryColorStyles(config);
45
34
  return config;
46
35
  };
47
-
48
36
  exports.withPrimaryColor = withPrimaryColor;
49
-
50
37
  const withPrimaryColorColors = config => {
51
38
  return (0, _androidPlugins().withAndroidColors)(config, config => {
52
39
  config.modResults = (0, _Colors().assignColorValue)(config.modResults, {
@@ -56,9 +43,7 @@ const withPrimaryColorColors = config => {
56
43
  return config;
57
44
  });
58
45
  };
59
-
60
46
  exports.withPrimaryColorColors = withPrimaryColorColors;
61
-
62
47
  const withPrimaryColorStyles = config => {
63
48
  return (0, _androidPlugins().withAndroidStyles)(config, config => {
64
49
  config.modResults = (0, _Styles().assignStylesValue)(config.modResults, {
@@ -70,12 +55,9 @@ const withPrimaryColorStyles = config => {
70
55
  return config;
71
56
  });
72
57
  };
73
-
74
58
  exports.withPrimaryColorStyles = withPrimaryColorStyles;
75
-
76
59
  function getPrimaryColor(config) {
77
60
  var _config$primaryColor;
78
-
79
61
  return (_config$primaryColor = config.primaryColor) !== null && _config$primaryColor !== void 0 ? _config$primaryColor : DEFAULT_PRIMARY_COLOR;
80
62
  }
81
63
  //# sourceMappingURL=PrimaryColor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrimaryColor.js","names":["COLOR_PRIMARY_KEY","DEFAULT_PRIMARY_COLOR","withPrimaryColor","config","withPrimaryColorColors","withPrimaryColorStyles","withAndroidColors","modResults","assignColorValue","name","value","getPrimaryColor","withAndroidStyles","assignStylesValue","add","parent","getAppThemeLightNoActionBarGroup","primaryColor"],"sources":["../../src/android/PrimaryColor.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidColors, withAndroidStyles } from '../plugins/android-plugins';\nimport { assignColorValue } from './Colors';\nimport { assignStylesValue, getAppThemeLightNoActionBarGroup } from './Styles';\n\nconst COLOR_PRIMARY_KEY = 'colorPrimary';\nconst DEFAULT_PRIMARY_COLOR = '#023c69';\n\nexport const withPrimaryColor: ConfigPlugin = (config) => {\n config = withPrimaryColorColors(config);\n config = withPrimaryColorStyles(config);\n return config;\n};\n\nexport const withPrimaryColorColors: ConfigPlugin = (config) => {\n return withAndroidColors(config, (config) => {\n config.modResults = assignColorValue(config.modResults, {\n name: COLOR_PRIMARY_KEY,\n value: getPrimaryColor(config),\n });\n return config;\n });\n};\n\nexport const withPrimaryColorStyles: ConfigPlugin = (config) => {\n return withAndroidStyles(config, (config) => {\n config.modResults = assignStylesValue(config.modResults, {\n add: !!getPrimaryColor(config),\n parent: getAppThemeLightNoActionBarGroup(),\n name: COLOR_PRIMARY_KEY,\n value: `@color/${COLOR_PRIMARY_KEY}`,\n });\n return config;\n });\n};\n\nexport function getPrimaryColor(config: Pick<ExpoConfig, 'primaryColor'>) {\n return config.primaryColor ?? DEFAULT_PRIMARY_COLOR;\n}\n"],"mappings":";;;;;;;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA,MAAMA,iBAAiB,GAAG,cAA1B;AACA,MAAMC,qBAAqB,GAAG,SAA9B;;AAEO,MAAMC,gBAA8B,GAAIC,MAAD,IAAY;EACxDA,MAAM,GAAGC,sBAAsB,CAACD,MAAD,CAA/B;EACAA,MAAM,GAAGE,sBAAsB,CAACF,MAAD,CAA/B;EACA,OAAOA,MAAP;AACD,CAJM;;;;AAMA,MAAMC,sBAAoC,GAAID,MAAD,IAAY;EAC9D,OAAO,IAAAG,mCAAA,EAAkBH,MAAlB,EAA2BA,MAAD,IAAY;IAC3CA,MAAM,CAACI,UAAP,GAAoB,IAAAC,0BAAA,EAAiBL,MAAM,CAACI,UAAxB,EAAoC;MACtDE,IAAI,EAAET,iBADgD;MAEtDU,KAAK,EAAEC,eAAe,CAACR,MAAD;IAFgC,CAApC,CAApB;IAIA,OAAOA,MAAP;EACD,CANM,CAAP;AAOD,CARM;;;;AAUA,MAAME,sBAAoC,GAAIF,MAAD,IAAY;EAC9D,OAAO,IAAAS,mCAAA,EAAkBT,MAAlB,EAA2BA,MAAD,IAAY;IAC3CA,MAAM,CAACI,UAAP,GAAoB,IAAAM,2BAAA,EAAkBV,MAAM,CAACI,UAAzB,EAAqC;MACvDO,GAAG,EAAE,CAAC,CAACH,eAAe,CAACR,MAAD,CADiC;MAEvDY,MAAM,EAAE,IAAAC,0CAAA,GAF+C;MAGvDP,IAAI,EAAET,iBAHiD;MAIvDU,KAAK,EAAG,UAASV,iBAAkB;IAJoB,CAArC,CAApB;IAMA,OAAOG,MAAP;EACD,CARM,CAAP;AASD,CAVM;;;;AAYA,SAASQ,eAAT,CAAyBR,MAAzB,EAAmE;EAAA;;EACxE,+BAAOA,MAAM,CAACc,YAAd,uEAA8BhB,qBAA9B;AACD"}
1
+ {"version":3,"file":"PrimaryColor.js","names":["COLOR_PRIMARY_KEY","DEFAULT_PRIMARY_COLOR","withPrimaryColor","config","withPrimaryColorColors","withPrimaryColorStyles","withAndroidColors","modResults","assignColorValue","name","value","getPrimaryColor","withAndroidStyles","assignStylesValue","add","parent","getAppThemeLightNoActionBarGroup","primaryColor"],"sources":["../../src/android/PrimaryColor.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidColors, withAndroidStyles } from '../plugins/android-plugins';\nimport { assignColorValue } from './Colors';\nimport { assignStylesValue, getAppThemeLightNoActionBarGroup } from './Styles';\n\nconst COLOR_PRIMARY_KEY = 'colorPrimary';\nconst DEFAULT_PRIMARY_COLOR = '#023c69';\n\nexport const withPrimaryColor: ConfigPlugin = (config) => {\n config = withPrimaryColorColors(config);\n config = withPrimaryColorStyles(config);\n return config;\n};\n\nexport const withPrimaryColorColors: ConfigPlugin = (config) => {\n return withAndroidColors(config, (config) => {\n config.modResults = assignColorValue(config.modResults, {\n name: COLOR_PRIMARY_KEY,\n value: getPrimaryColor(config),\n });\n return config;\n });\n};\n\nexport const withPrimaryColorStyles: ConfigPlugin = (config) => {\n return withAndroidStyles(config, (config) => {\n config.modResults = assignStylesValue(config.modResults, {\n add: !!getPrimaryColor(config),\n parent: getAppThemeLightNoActionBarGroup(),\n name: COLOR_PRIMARY_KEY,\n value: `@color/${COLOR_PRIMARY_KEY}`,\n });\n return config;\n });\n};\n\nexport function getPrimaryColor(config: Pick<ExpoConfig, 'primaryColor'>) {\n return config.primaryColor ?? DEFAULT_PRIMARY_COLOR;\n}\n"],"mappings":";;;;;;;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA,MAAMA,iBAAiB,GAAG,cAAc;AACxC,MAAMC,qBAAqB,GAAG,SAAS;AAEhC,MAAMC,gBAA8B,GAAIC,MAAM,IAAK;EACxDA,MAAM,GAAGC,sBAAsB,CAACD,MAAM,CAAC;EACvCA,MAAM,GAAGE,sBAAsB,CAACF,MAAM,CAAC;EACvC,OAAOA,MAAM;AACf,CAAC;AAAC;AAEK,MAAMC,sBAAoC,GAAID,MAAM,IAAK;EAC9D,OAAO,IAAAG,mCAAiB,EAACH,MAAM,EAAGA,MAAM,IAAK;IAC3CA,MAAM,CAACI,UAAU,GAAG,IAAAC,0BAAgB,EAACL,MAAM,CAACI,UAAU,EAAE;MACtDE,IAAI,EAAET,iBAAiB;MACvBU,KAAK,EAAEC,eAAe,CAACR,MAAM;IAC/B,CAAC,CAAC;IACF,OAAOA,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAAC;AAEK,MAAME,sBAAoC,GAAIF,MAAM,IAAK;EAC9D,OAAO,IAAAS,mCAAiB,EAACT,MAAM,EAAGA,MAAM,IAAK;IAC3CA,MAAM,CAACI,UAAU,GAAG,IAAAM,2BAAiB,EAACV,MAAM,CAACI,UAAU,EAAE;MACvDO,GAAG,EAAE,CAAC,CAACH,eAAe,CAACR,MAAM,CAAC;MAC9BY,MAAM,EAAE,IAAAC,0CAAgC,GAAE;MAC1CP,IAAI,EAAET,iBAAiB;MACvBU,KAAK,EAAG,UAASV,iBAAkB;IACrC,CAAC,CAAC;IACF,OAAOG,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAAC;AAEK,SAASQ,eAAe,CAACR,MAAwC,EAAE;EAAA;EACxE,+BAAOA,MAAM,CAACc,YAAY,uEAAIhB,qBAAqB;AACrD"}
@@ -1,4 +1,4 @@
1
- export declare type PropertiesItem = {
1
+ export type PropertiesItem = {
2
2
  type: 'comment';
3
3
  value: string;
4
4
  } | {
@@ -5,14 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.parsePropertiesFile = parsePropertiesFile;
7
7
  exports.propertiesListToString = propertiesListToString;
8
-
9
8
  function parsePropertiesFile(contents) {
10
9
  const propertiesList = [];
11
10
  const lines = contents.split('\n');
12
-
13
11
  for (let i = 0; i < lines.length; i++) {
14
12
  const line = lines[i].trim();
15
-
16
13
  if (!line) {
17
14
  propertiesList.push({
18
15
  type: 'empty'
@@ -33,16 +30,12 @@ function parsePropertiesFile(contents) {
33
30
  });
34
31
  }
35
32
  }
36
-
37
33
  return propertiesList;
38
34
  }
39
-
40
35
  function propertiesListToString(props) {
41
36
  let output = '';
42
-
43
37
  for (let i = 0; i < props.length; i++) {
44
38
  const prop = props[i];
45
-
46
39
  if (prop.type === 'empty') {
47
40
  output += '';
48
41
  } else if (prop.type === 'comment') {
@@ -53,12 +46,10 @@ function propertiesListToString(props) {
53
46
  // @ts-ignore: assertion
54
47
  throw new Error(`Invalid properties type "${prop.type}"`);
55
48
  }
56
-
57
49
  if (i < props.length - 1) {
58
50
  output += '\n';
59
51
  }
60
52
  }
61
-
62
53
  return output;
63
54
  }
64
55
  //# sourceMappingURL=Properties.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Properties.js","names":["parsePropertiesFile","contents","propertiesList","lines","split","i","length","line","trim","push","type","startsWith","value","substring","trimStart","eok","indexOf","key","slice","propertiesListToString","props","output","prop","Error"],"sources":["../../src/android/Properties.ts"],"sourcesContent":["export type PropertiesItem =\n | {\n type: 'comment';\n value: string;\n }\n | {\n type: 'empty';\n }\n | {\n type: 'property';\n key: string;\n value: string;\n };\n\nexport function parsePropertiesFile(contents: string): PropertiesItem[] {\n const propertiesList: PropertiesItem[] = [];\n const lines = contents.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (!line) {\n propertiesList.push({ type: 'empty' });\n } else if (line.startsWith('#')) {\n propertiesList.push({ type: 'comment', value: line.substring(1).trimStart() });\n } else {\n const eok = line.indexOf('=');\n const key = line.slice(0, eok);\n const value = line.slice(eok + 1, line.length);\n propertiesList.push({ type: 'property', key, value });\n }\n }\n\n return propertiesList;\n}\n\nexport function propertiesListToString(props: PropertiesItem[]): string {\n let output = '';\n for (let i = 0; i < props.length; i++) {\n const prop = props[i];\n if (prop.type === 'empty') {\n output += '';\n } else if (prop.type === 'comment') {\n output += '# ' + prop.value;\n } else if (prop.type === 'property') {\n output += `${prop.key}=${prop.value}`;\n } else {\n // @ts-ignore: assertion\n throw new Error(`Invalid properties type \"${prop.type}\"`);\n }\n if (i < props.length - 1) {\n output += '\\n';\n }\n }\n return output;\n}\n"],"mappings":";;;;;;;;AAcO,SAASA,mBAAT,CAA6BC,QAA7B,EAAiE;EACtE,MAAMC,cAAgC,GAAG,EAAzC;EACA,MAAMC,KAAK,GAAGF,QAAQ,CAACG,KAAT,CAAe,IAAf,CAAd;;EACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,KAAK,CAACG,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;IACrC,MAAME,IAAI,GAAGJ,KAAK,CAACE,CAAD,CAAL,CAASG,IAAT,EAAb;;IACA,IAAI,CAACD,IAAL,EAAW;MACTL,cAAc,CAACO,IAAf,CAAoB;QAAEC,IAAI,EAAE;MAAR,CAApB;IACD,CAFD,MAEO,IAAIH,IAAI,CAACI,UAAL,CAAgB,GAAhB,CAAJ,EAA0B;MAC/BT,cAAc,CAACO,IAAf,CAAoB;QAAEC,IAAI,EAAE,SAAR;QAAmBE,KAAK,EAAEL,IAAI,CAACM,SAAL,CAAe,CAAf,EAAkBC,SAAlB;MAA1B,CAApB;IACD,CAFM,MAEA;MACL,MAAMC,GAAG,GAAGR,IAAI,CAACS,OAAL,CAAa,GAAb,CAAZ;MACA,MAAMC,GAAG,GAAGV,IAAI,CAACW,KAAL,CAAW,CAAX,EAAcH,GAAd,CAAZ;MACA,MAAMH,KAAK,GAAGL,IAAI,CAACW,KAAL,CAAWH,GAAG,GAAG,CAAjB,EAAoBR,IAAI,CAACD,MAAzB,CAAd;MACAJ,cAAc,CAACO,IAAf,CAAoB;QAAEC,IAAI,EAAE,UAAR;QAAoBO,GAApB;QAAyBL;MAAzB,CAApB;IACD;EACF;;EAED,OAAOV,cAAP;AACD;;AAEM,SAASiB,sBAAT,CAAgCC,KAAhC,EAAiE;EACtE,IAAIC,MAAM,GAAG,EAAb;;EACA,KAAK,IAAIhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGe,KAAK,CAACd,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;IACrC,MAAMiB,IAAI,GAAGF,KAAK,CAACf,CAAD,CAAlB;;IACA,IAAIiB,IAAI,CAACZ,IAAL,KAAc,OAAlB,EAA2B;MACzBW,MAAM,IAAI,EAAV;IACD,CAFD,MAEO,IAAIC,IAAI,CAACZ,IAAL,KAAc,SAAlB,EAA6B;MAClCW,MAAM,IAAI,OAAOC,IAAI,CAACV,KAAtB;IACD,CAFM,MAEA,IAAIU,IAAI,CAACZ,IAAL,KAAc,UAAlB,EAA8B;MACnCW,MAAM,IAAK,GAAEC,IAAI,CAACL,GAAI,IAAGK,IAAI,CAACV,KAAM,EAApC;IACD,CAFM,MAEA;MACL;MACA,MAAM,IAAIW,KAAJ,CAAW,4BAA2BD,IAAI,CAACZ,IAAK,GAAhD,CAAN;IACD;;IACD,IAAIL,CAAC,GAAGe,KAAK,CAACd,MAAN,GAAe,CAAvB,EAA0B;MACxBe,MAAM,IAAI,IAAV;IACD;EACF;;EACD,OAAOA,MAAP;AACD"}
1
+ {"version":3,"file":"Properties.js","names":["parsePropertiesFile","contents","propertiesList","lines","split","i","length","line","trim","push","type","startsWith","value","substring","trimStart","eok","indexOf","key","slice","propertiesListToString","props","output","prop","Error"],"sources":["../../src/android/Properties.ts"],"sourcesContent":["export type PropertiesItem =\n | {\n type: 'comment';\n value: string;\n }\n | {\n type: 'empty';\n }\n | {\n type: 'property';\n key: string;\n value: string;\n };\n\nexport function parsePropertiesFile(contents: string): PropertiesItem[] {\n const propertiesList: PropertiesItem[] = [];\n const lines = contents.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (!line) {\n propertiesList.push({ type: 'empty' });\n } else if (line.startsWith('#')) {\n propertiesList.push({ type: 'comment', value: line.substring(1).trimStart() });\n } else {\n const eok = line.indexOf('=');\n const key = line.slice(0, eok);\n const value = line.slice(eok + 1, line.length);\n propertiesList.push({ type: 'property', key, value });\n }\n }\n\n return propertiesList;\n}\n\nexport function propertiesListToString(props: PropertiesItem[]): string {\n let output = '';\n for (let i = 0; i < props.length; i++) {\n const prop = props[i];\n if (prop.type === 'empty') {\n output += '';\n } else if (prop.type === 'comment') {\n output += '# ' + prop.value;\n } else if (prop.type === 'property') {\n output += `${prop.key}=${prop.value}`;\n } else {\n // @ts-ignore: assertion\n throw new Error(`Invalid properties type \"${prop.type}\"`);\n }\n if (i < props.length - 1) {\n output += '\\n';\n }\n }\n return output;\n}\n"],"mappings":";;;;;;;AAcO,SAASA,mBAAmB,CAACC,QAAgB,EAAoB;EACtE,MAAMC,cAAgC,GAAG,EAAE;EAC3C,MAAMC,KAAK,GAAGF,QAAQ,CAACG,KAAK,CAAC,IAAI,CAAC;EAClC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,CAACG,MAAM,EAAED,CAAC,EAAE,EAAE;IACrC,MAAME,IAAI,GAAGJ,KAAK,CAACE,CAAC,CAAC,CAACG,IAAI,EAAE;IAC5B,IAAI,CAACD,IAAI,EAAE;MACTL,cAAc,CAACO,IAAI,CAAC;QAAEC,IAAI,EAAE;MAAQ,CAAC,CAAC;IACxC,CAAC,MAAM,IAAIH,IAAI,CAACI,UAAU,CAAC,GAAG,CAAC,EAAE;MAC/BT,cAAc,CAACO,IAAI,CAAC;QAAEC,IAAI,EAAE,SAAS;QAAEE,KAAK,EAAEL,IAAI,CAACM,SAAS,CAAC,CAAC,CAAC,CAACC,SAAS;MAAG,CAAC,CAAC;IAChF,CAAC,MAAM;MACL,MAAMC,GAAG,GAAGR,IAAI,CAACS,OAAO,CAAC,GAAG,CAAC;MAC7B,MAAMC,GAAG,GAAGV,IAAI,CAACW,KAAK,CAAC,CAAC,EAAEH,GAAG,CAAC;MAC9B,MAAMH,KAAK,GAAGL,IAAI,CAACW,KAAK,CAACH,GAAG,GAAG,CAAC,EAAER,IAAI,CAACD,MAAM,CAAC;MAC9CJ,cAAc,CAACO,IAAI,CAAC;QAAEC,IAAI,EAAE,UAAU;QAAEO,GAAG;QAAEL;MAAM,CAAC,CAAC;IACvD;EACF;EAEA,OAAOV,cAAc;AACvB;AAEO,SAASiB,sBAAsB,CAACC,KAAuB,EAAU;EACtE,IAAIC,MAAM,GAAG,EAAE;EACf,KAAK,IAAIhB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGe,KAAK,CAACd,MAAM,EAAED,CAAC,EAAE,EAAE;IACrC,MAAMiB,IAAI,GAAGF,KAAK,CAACf,CAAC,CAAC;IACrB,IAAIiB,IAAI,CAACZ,IAAI,KAAK,OAAO,EAAE;MACzBW,MAAM,IAAI,EAAE;IACd,CAAC,MAAM,IAAIC,IAAI,CAACZ,IAAI,KAAK,SAAS,EAAE;MAClCW,MAAM,IAAI,IAAI,GAAGC,IAAI,CAACV,KAAK;IAC7B,CAAC,MAAM,IAAIU,IAAI,CAACZ,IAAI,KAAK,UAAU,EAAE;MACnCW,MAAM,IAAK,GAAEC,IAAI,CAACL,GAAI,IAAGK,IAAI,CAACV,KAAM,EAAC;IACvC,CAAC,MAAM;MACL;MACA,MAAM,IAAIW,KAAK,CAAE,4BAA2BD,IAAI,CAACZ,IAAK,GAAE,CAAC;IAC3D;IACA,IAAIL,CAAC,GAAGe,KAAK,CAACd,MAAM,GAAG,CAAC,EAAE;MACxBe,MAAM,IAAI,IAAI;IAChB;EACF;EACA,OAAOA,MAAM;AACf"}
@@ -1,12 +1,12 @@
1
1
  import { XMLObject } from '../utils/XML';
2
- export declare type ResourceGroupXML = {
2
+ export type ResourceGroupXML = {
3
3
  $: {
4
4
  name: string;
5
5
  parent: string;
6
6
  };
7
7
  item: ResourceItemXML[];
8
8
  };
9
- export declare type ResourceXML = {
9
+ export type ResourceXML = {
10
10
  resources: {
11
11
  $?: {
12
12
  'xmlns:tools'?: string;
@@ -16,7 +16,7 @@ export declare type ResourceXML = {
16
16
  style?: ResourceGroupXML[];
17
17
  };
18
18
  };
19
- export declare type ResourceItemXML = {
19
+ export type ResourceItemXML = {
20
20
  _: string;
21
21
  $: {
22
22
  name: string;
@@ -27,7 +27,7 @@ export declare type ResourceItemXML = {
27
27
  /**
28
28
  * Name of the resource folder.
29
29
  */
30
- export declare type ResourceKind = 'values' | 'values-night' | 'values-v23' | 'values-night-v23' | 'drawable';
30
+ export type ResourceKind = 'values' | 'values-night' | 'values-v23' | 'values-night-v23' | 'drawable';
31
31
  /**
32
32
  * Read an XML file while providing a default fallback for resource files.
33
33
  *