@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.
- package/build/Plugin.types.d.ts +7 -7
- package/build/Plugin.types.js +0 -9
- package/build/Plugin.types.js.map +1 -1
- package/build/android/AllowBackup.js +0 -15
- package/build/android/AllowBackup.js.map +1 -1
- package/build/android/BuildProperties.js +2 -16
- package/build/android/BuildProperties.js.map +1 -1
- package/build/android/Colors.js +3 -25
- package/build/android/Colors.js.map +1 -1
- package/build/android/EasBuild.js +2 -22
- package/build/android/EasBuild.js.map +1 -1
- package/build/android/EasBuildGradleScript.js.map +1 -1
- package/build/android/GoogleMapsApiKey.js +0 -12
- package/build/android/GoogleMapsApiKey.js.map +1 -1
- package/build/android/GoogleServices.js +10 -48
- package/build/android/GoogleServices.js.map +1 -1
- package/build/android/IntentFilters.d.ts +1 -1
- package/build/android/IntentFilters.js +8 -24
- package/build/android/IntentFilters.js.map +1 -1
- package/build/android/Manifest.d.ts +19 -19
- package/build/android/Manifest.js +7 -66
- package/build/android/Manifest.js.map +1 -1
- package/build/android/Name.js +6 -27
- package/build/android/Name.js.map +1 -1
- package/build/android/Orientation.js +2 -12
- package/build/android/Orientation.js.map +1 -1
- package/build/android/Package.js +26 -111
- package/build/android/Package.js.map +1 -1
- package/build/android/Paths.d.ts +2 -2
- package/build/android/Paths.js +0 -47
- package/build/android/Paths.js.map +1 -1
- package/build/android/Permissions.js +8 -52
- package/build/android/Permissions.js.map +1 -1
- package/build/android/PrimaryColor.js +0 -18
- package/build/android/PrimaryColor.js.map +1 -1
- package/build/android/Properties.d.ts +1 -1
- package/build/android/Properties.js +0 -9
- package/build/android/Properties.js.map +1 -1
- package/build/android/Resources.d.ts +4 -4
- package/build/android/Resources.js +9 -29
- package/build/android/Resources.js.map +1 -1
- package/build/android/Scheme.d.ts +1 -1
- package/build/android/Scheme.js +13 -66
- package/build/android/Scheme.js.map +1 -1
- package/build/android/StatusBar.js +5 -33
- package/build/android/StatusBar.js.map +1 -1
- package/build/android/Strings.js +0 -14
- package/build/android/Strings.js.map +1 -1
- package/build/android/Styles.js +7 -34
- package/build/android/Styles.js.map +1 -1
- package/build/android/Updates.d.ts +2 -0
- package/build/android/Updates.js +50 -47
- package/build/android/Updates.js.map +1 -1
- package/build/android/Version.js +3 -29
- package/build/android/Version.js.map +1 -1
- package/build/android/WindowSoftInputMode.js +0 -14
- package/build/android/WindowSoftInputMode.js.map +1 -1
- package/build/android/codeMod.js +6 -22
- package/build/android/codeMod.js.map +1 -1
- package/build/android/index.js +0 -94
- package/build/android/index.js.map +1 -1
- package/build/index.js +2 -65
- package/build/index.js.map +1 -1
- package/build/ios/Bitcode.d.ts +1 -1
- package/build/ios/Bitcode.js +8 -28
- package/build/ios/Bitcode.js.map +1 -1
- package/build/ios/BuildProperties.js +2 -14
- package/build/ios/BuildProperties.js.map +1 -1
- package/build/ios/BuildScheme.js +2 -34
- package/build/ios/BuildScheme.js.map +1 -1
- package/build/ios/BundleIdentifier.js +13 -72
- package/build/ios/BundleIdentifier.js.map +1 -1
- package/build/ios/DeviceFamily.js +6 -24
- package/build/ios/DeviceFamily.js.map +1 -1
- package/build/ios/Entitlements.js +4 -45
- package/build/ios/Entitlements.js.map +1 -1
- package/build/ios/Google.d.ts +2 -2
- package/build/ios/Google.js +11 -66
- package/build/ios/Google.js.map +1 -1
- package/build/ios/IosConfig.types.d.ts +6 -11
- package/build/ios/IosConfig.types.js.map +1 -1
- package/build/ios/Locales.d.ts +3 -3
- package/build/ios/Locales.js +12 -43
- package/build/ios/Locales.js.map +1 -1
- package/build/ios/Maps.js +15 -53
- package/build/ios/Maps.js.map +1 -1
- package/build/ios/Name.js +7 -31
- package/build/ios/Name.js.map +1 -1
- package/build/ios/Orientation.js +2 -10
- package/build/ios/Orientation.js.map +1 -1
- package/build/ios/Paths.d.ts +2 -2
- package/build/ios/Paths.js +8 -73
- package/build/ios/Paths.js.map +1 -1
- package/build/ios/Permissions.js +1 -16
- package/build/ios/Permissions.js.map +1 -1
- package/build/ios/ProvisioningProfile.d.ts +1 -1
- package/build/ios/ProvisioningProfile.js +0 -18
- package/build/ios/ProvisioningProfile.js.map +1 -1
- package/build/ios/RequiresFullScreen.js +19 -31
- package/build/ios/RequiresFullScreen.js.map +1 -1
- package/build/ios/Scheme.js +10 -32
- package/build/ios/Scheme.js.map +1 -1
- package/build/ios/Swift.js +16 -50
- package/build/ios/Swift.js.map +1 -1
- package/build/ios/Target.js +0 -30
- package/build/ios/Target.js.map +1 -1
- package/build/ios/Updates.js +10 -49
- package/build/ios/Updates.js.map +1 -1
- package/build/ios/UsesNonExemptEncryption.js +4 -10
- package/build/ios/UsesNonExemptEncryption.js.map +1 -1
- package/build/ios/Version.js +4 -11
- package/build/ios/Version.js.map +1 -1
- package/build/ios/XcodeProjectFile.js +5 -23
- package/build/ios/XcodeProjectFile.js.map +1 -1
- package/build/ios/codeMod.js +19 -60
- package/build/ios/codeMod.js.map +1 -1
- package/build/ios/index.js +0 -97
- package/build/ios/index.js.map +1 -1
- package/build/ios/utils/Xcodeproj.d.ts +6 -6
- package/build/ios/utils/Xcodeproj.js +15 -101
- package/build/ios/utils/Xcodeproj.js.map +1 -1
- package/build/ios/utils/getInfoPlistPath.js +2 -15
- package/build/ios/utils/getInfoPlistPath.js.map +1 -1
- package/build/ios/utils/string.js +0 -1
- package/build/ios/utils/string.js.map +1 -1
- package/build/plugins/android-plugins.d.ts +2 -2
- package/build/plugins/android-plugins.js +11 -42
- package/build/plugins/android-plugins.js.map +1 -1
- package/build/plugins/createBaseMod.d.ts +3 -3
- package/build/plugins/createBaseMod.js +8 -25
- package/build/plugins/createBaseMod.js.map +1 -1
- package/build/plugins/ios-plugins.d.ts +2 -2
- package/build/plugins/ios-plugins.js +8 -48
- package/build/plugins/ios-plugins.js.map +1 -1
- package/build/plugins/mod-compiler.js +21 -72
- package/build/plugins/mod-compiler.js.map +1 -1
- package/build/plugins/withAndroidBaseMods.d.ts +1 -1
- package/build/plugins/withAndroidBaseMods.js +4 -89
- package/build/plugins/withAndroidBaseMods.js.map +1 -1
- package/build/plugins/withDangerousMod.js +0 -5
- package/build/plugins/withDangerousMod.js.map +1 -1
- package/build/plugins/withIosBaseMods.d.ts +1 -1
- package/build/plugins/withIosBaseMods.js +26 -118
- package/build/plugins/withIosBaseMods.js.map +1 -1
- package/build/plugins/withMod.d.ts +1 -1
- package/build/plugins/withMod.js +24 -59
- package/build/plugins/withMod.js.map +1 -1
- package/build/plugins/withPlugins.js +0 -9
- package/build/plugins/withPlugins.js.map +1 -1
- package/build/plugins/withRunOnce.js +3 -9
- package/build/plugins/withRunOnce.js.map +1 -1
- package/build/plugins/withStaticPlugin.js +21 -43
- package/build/plugins/withStaticPlugin.js.map +1 -1
- package/build/utils/BuildProperties.types.d.ts +2 -2
- package/build/utils/BuildProperties.types.js.map +1 -1
- package/build/utils/Updates.d.ts +3 -1
- package/build/utils/Updates.js +18 -77
- package/build/utils/Updates.js.map +1 -1
- package/build/utils/XML.d.ts +1 -1
- package/build/utils/XML.js +7 -44
- package/build/utils/XML.js.map +1 -1
- package/build/utils/commonCodeMod.js +2 -10
- package/build/utils/commonCodeMod.js.map +1 -1
- package/build/utils/errors.d.ts +1 -1
- package/build/utils/errors.js +3 -11
- package/build/utils/errors.js.map +1 -1
- package/build/utils/fs.js +1 -12
- package/build/utils/fs.js.map +1 -1
- package/build/utils/generateCode.d.ts +1 -1
- package/build/utils/generateCode.js +8 -25
- package/build/utils/generateCode.js.map +1 -1
- package/build/utils/history.d.ts +1 -1
- package/build/utils/history.js +0 -6
- package/build/utils/history.js.map +1 -1
- package/build/utils/matchBrackets.d.ts +3 -3
- package/build/utils/matchBrackets.js +2 -17
- package/build/utils/matchBrackets.js.map +1 -1
- package/build/utils/modules.js +0 -10
- package/build/utils/modules.js.map +1 -1
- package/build/utils/obj.js +0 -4
- package/build/utils/obj.js.map +1 -1
- package/build/utils/plugin-resolver.js +25 -69
- package/build/utils/plugin-resolver.js.map +1 -1
- package/build/utils/sortObject.js +4 -10
- package/build/utils/sortObject.js.map +1 -1
- package/build/utils/versions.js +0 -10
- package/build/utils/versions.js.map +1 -1
- package/build/utils/warnings.js +1 -9
- package/build/utils/warnings.js.map +1 -1
- package/package.json +5 -5
|
@@ -19,53 +19,37 @@ exports.readAndroidManifestAsync = readAndroidManifestAsync;
|
|
|
19
19
|
exports.removeMetaDataItemFromMainApplication = removeMetaDataItemFromMainApplication;
|
|
20
20
|
exports.removeUsesLibraryItemFromMainApplication = removeUsesLibraryItemFromMainApplication;
|
|
21
21
|
exports.writeAndroidManifestAsync = writeAndroidManifestAsync;
|
|
22
|
-
|
|
23
22
|
function _assert() {
|
|
24
23
|
const data = _interopRequireDefault(require("assert"));
|
|
25
|
-
|
|
26
24
|
_assert = function () {
|
|
27
25
|
return data;
|
|
28
26
|
};
|
|
29
|
-
|
|
30
27
|
return data;
|
|
31
28
|
}
|
|
32
|
-
|
|
33
29
|
function _fs() {
|
|
34
30
|
const data = _interopRequireDefault(require("fs"));
|
|
35
|
-
|
|
36
31
|
_fs = function () {
|
|
37
32
|
return data;
|
|
38
33
|
};
|
|
39
|
-
|
|
40
34
|
return data;
|
|
41
35
|
}
|
|
42
|
-
|
|
43
36
|
function _path() {
|
|
44
37
|
const data = _interopRequireDefault(require("path"));
|
|
45
|
-
|
|
46
38
|
_path = function () {
|
|
47
39
|
return data;
|
|
48
40
|
};
|
|
49
|
-
|
|
50
41
|
return data;
|
|
51
42
|
}
|
|
52
|
-
|
|
53
43
|
function XML() {
|
|
54
44
|
const data = _interopRequireWildcard(require("../utils/XML"));
|
|
55
|
-
|
|
56
45
|
XML = function () {
|
|
57
46
|
return data;
|
|
58
47
|
};
|
|
59
|
-
|
|
60
48
|
return data;
|
|
61
49
|
}
|
|
62
|
-
|
|
63
50
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
64
|
-
|
|
65
51
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
66
|
-
|
|
67
52
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
68
|
-
|
|
69
53
|
async function writeAndroidManifestAsync(manifestPath, androidManifest) {
|
|
70
54
|
const manifestXml = XML().format(androidManifest);
|
|
71
55
|
await _fs().default.promises.mkdir(_path().default.dirname(manifestPath), {
|
|
@@ -73,81 +57,64 @@ async function writeAndroidManifestAsync(manifestPath, androidManifest) {
|
|
|
73
57
|
});
|
|
74
58
|
await _fs().default.promises.writeFile(manifestPath, manifestXml);
|
|
75
59
|
}
|
|
76
|
-
|
|
77
60
|
async function readAndroidManifestAsync(manifestPath) {
|
|
78
61
|
const xml = await XML().readXMLAsync({
|
|
79
62
|
path: manifestPath
|
|
80
63
|
});
|
|
81
|
-
|
|
82
64
|
if (!isManifest(xml)) {
|
|
83
65
|
throw new Error('Invalid manifest found at: ' + manifestPath);
|
|
84
66
|
}
|
|
85
|
-
|
|
86
67
|
return xml;
|
|
87
68
|
}
|
|
88
|
-
|
|
89
69
|
function isManifest(xml) {
|
|
90
70
|
// TODO: Maybe more validation
|
|
91
71
|
return !!xml.manifest;
|
|
92
72
|
}
|
|
93
|
-
/** Returns the `manifest.application` tag ending in `.MainApplication` */
|
|
94
|
-
|
|
95
73
|
|
|
74
|
+
/** Returns the `manifest.application` tag ending in `.MainApplication` */
|
|
96
75
|
function getMainApplication(androidManifest) {
|
|
97
76
|
var _androidManifest$mani, _androidManifest$mani2, _androidManifest$mani3;
|
|
98
|
-
|
|
99
77
|
return (_androidManifest$mani = androidManifest === null || androidManifest === void 0 ? void 0 : (_androidManifest$mani2 = androidManifest.manifest) === null || _androidManifest$mani2 === void 0 ? void 0 : (_androidManifest$mani3 = _androidManifest$mani2.application) === null || _androidManifest$mani3 === void 0 ? void 0 : _androidManifest$mani3.filter(e => {
|
|
100
78
|
var _e$$;
|
|
101
|
-
|
|
102
79
|
return e === null || e === void 0 ? void 0 : (_e$$ = e.$) === null || _e$$ === void 0 ? void 0 : _e$$['android:name'].endsWith('.MainApplication');
|
|
103
80
|
})[0]) !== null && _androidManifest$mani !== void 0 ? _androidManifest$mani : null;
|
|
104
81
|
}
|
|
105
|
-
|
|
106
82
|
function getMainApplicationOrThrow(androidManifest) {
|
|
107
83
|
const mainApplication = getMainApplication(androidManifest);
|
|
108
84
|
(0, _assert().default)(mainApplication, 'AndroidManifest.xml is missing the required MainApplication element');
|
|
109
85
|
return mainApplication;
|
|
110
86
|
}
|
|
111
|
-
|
|
112
87
|
function getMainActivityOrThrow(androidManifest) {
|
|
113
88
|
const mainActivity = getMainActivity(androidManifest);
|
|
114
89
|
(0, _assert().default)(mainActivity, 'AndroidManifest.xml is missing the required MainActivity element');
|
|
115
90
|
return mainActivity;
|
|
116
91
|
}
|
|
117
|
-
|
|
118
92
|
function getRunnableActivity(androidManifest) {
|
|
119
93
|
var _androidManifest$mani4, _androidManifest$mani5, _androidManifest$mani6, _androidManifest$mani7, _androidManifest$mani8;
|
|
120
|
-
|
|
121
94
|
// Get enabled activities
|
|
122
95
|
const enabledActivities = androidManifest === null || androidManifest === void 0 ? void 0 : (_androidManifest$mani4 = androidManifest.manifest) === null || _androidManifest$mani4 === void 0 ? void 0 : (_androidManifest$mani5 = _androidManifest$mani4.application) === null || _androidManifest$mani5 === void 0 ? void 0 : (_androidManifest$mani6 = _androidManifest$mani5[0]) === null || _androidManifest$mani6 === void 0 ? void 0 : (_androidManifest$mani7 = _androidManifest$mani6.activity) === null || _androidManifest$mani7 === void 0 ? void 0 : (_androidManifest$mani8 = _androidManifest$mani7.filter) === null || _androidManifest$mani8 === void 0 ? void 0 : _androidManifest$mani8.call(_androidManifest$mani7, e => e.$['android:enabled'] !== 'false' && e.$['android:enabled'] !== false);
|
|
123
|
-
|
|
124
96
|
if (!enabledActivities) {
|
|
125
97
|
return null;
|
|
126
|
-
}
|
|
127
|
-
|
|
98
|
+
}
|
|
128
99
|
|
|
100
|
+
// Get the activity that has a runnable intent-filter
|
|
129
101
|
for (const activity of enabledActivities) {
|
|
130
102
|
if (Array.isArray(activity['intent-filter'])) {
|
|
131
103
|
for (const intentFilter of activity['intent-filter']) {
|
|
132
104
|
var _intentFilter$action, _intentFilter$categor;
|
|
133
|
-
|
|
134
105
|
if ((_intentFilter$action = intentFilter.action) !== null && _intentFilter$action !== void 0 && _intentFilter$action.find(action => action.$['android:name'] === 'android.intent.action.MAIN') && (_intentFilter$categor = intentFilter.category) !== null && _intentFilter$categor !== void 0 && _intentFilter$categor.find(category => category.$['android:name'] === 'android.intent.category.LAUNCHER')) {
|
|
135
106
|
return activity;
|
|
136
107
|
}
|
|
137
108
|
}
|
|
138
109
|
}
|
|
139
110
|
}
|
|
140
|
-
|
|
141
111
|
return null;
|
|
142
112
|
}
|
|
143
|
-
|
|
144
113
|
function getMainActivity(androidManifest) {
|
|
145
114
|
var _androidManifest$mani9, _androidManifest$mani10, _androidManifest$mani11, _androidManifest$mani12, _androidManifest$mani13, _mainActivity$;
|
|
146
|
-
|
|
147
115
|
const mainActivity = androidManifest === null || androidManifest === void 0 ? void 0 : (_androidManifest$mani9 = androidManifest.manifest) === null || _androidManifest$mani9 === void 0 ? void 0 : (_androidManifest$mani10 = _androidManifest$mani9.application) === null || _androidManifest$mani10 === void 0 ? void 0 : (_androidManifest$mani11 = _androidManifest$mani10[0]) === null || _androidManifest$mani11 === void 0 ? void 0 : (_androidManifest$mani12 = _androidManifest$mani11.activity) === null || _androidManifest$mani12 === void 0 ? void 0 : (_androidManifest$mani13 = _androidManifest$mani12.filter) === null || _androidManifest$mani13 === void 0 ? void 0 : _androidManifest$mani13.call(_androidManifest$mani12, e => e.$['android:name'] === '.MainActivity');
|
|
148
116
|
return (_mainActivity$ = mainActivity === null || mainActivity === void 0 ? void 0 : mainActivity[0]) !== null && _mainActivity$ !== void 0 ? _mainActivity$ : null;
|
|
149
117
|
}
|
|
150
|
-
|
|
151
118
|
function addMetaDataItemToMainApplication(mainApplication, itemName, itemValue, itemType = 'value') {
|
|
152
119
|
let existingMetaDataItem;
|
|
153
120
|
const newItem = {
|
|
@@ -156,10 +123,8 @@ function addMetaDataItemToMainApplication(mainApplication, itemName, itemValue,
|
|
|
156
123
|
[itemType]: itemValue
|
|
157
124
|
})
|
|
158
125
|
};
|
|
159
|
-
|
|
160
126
|
if (mainApplication['meta-data']) {
|
|
161
127
|
existingMetaDataItem = mainApplication['meta-data'].filter(e => e.$['android:name'] === itemName);
|
|
162
|
-
|
|
163
128
|
if (existingMetaDataItem.length) {
|
|
164
129
|
existingMetaDataItem[0].$[`android:${itemType}`] = itemValue;
|
|
165
130
|
} else {
|
|
@@ -168,61 +133,45 @@ function addMetaDataItemToMainApplication(mainApplication, itemName, itemValue,
|
|
|
168
133
|
} else {
|
|
169
134
|
mainApplication['meta-data'] = [newItem];
|
|
170
135
|
}
|
|
171
|
-
|
|
172
136
|
return mainApplication;
|
|
173
137
|
}
|
|
174
|
-
|
|
175
138
|
function removeMetaDataItemFromMainApplication(mainApplication, itemName) {
|
|
176
139
|
const index = findMetaDataItem(mainApplication, itemName);
|
|
177
|
-
|
|
178
140
|
if (mainApplication !== null && mainApplication !== void 0 && mainApplication['meta-data'] && index > -1) {
|
|
179
141
|
mainApplication['meta-data'].splice(index, 1);
|
|
180
142
|
}
|
|
181
|
-
|
|
182
143
|
return mainApplication;
|
|
183
144
|
}
|
|
184
|
-
|
|
185
145
|
function findApplicationSubItem(mainApplication, category, itemName) {
|
|
186
146
|
const parent = mainApplication[category];
|
|
187
|
-
|
|
188
147
|
if (Array.isArray(parent)) {
|
|
189
148
|
const index = parent.findIndex(e => e.$['android:name'] === itemName);
|
|
190
149
|
return index;
|
|
191
150
|
}
|
|
192
|
-
|
|
193
151
|
return -1;
|
|
194
152
|
}
|
|
195
|
-
|
|
196
153
|
function findMetaDataItem(mainApplication, itemName) {
|
|
197
154
|
return findApplicationSubItem(mainApplication, 'meta-data', itemName);
|
|
198
155
|
}
|
|
199
|
-
|
|
200
156
|
function findUsesLibraryItem(mainApplication, itemName) {
|
|
201
157
|
return findApplicationSubItem(mainApplication, 'uses-library', itemName);
|
|
202
158
|
}
|
|
203
|
-
|
|
204
159
|
function getMainApplicationMetaDataValue(androidManifest, name) {
|
|
205
160
|
const mainApplication = getMainApplication(androidManifest);
|
|
206
|
-
|
|
207
161
|
if (mainApplication !== null && mainApplication !== void 0 && mainApplication.hasOwnProperty('meta-data')) {
|
|
208
162
|
var _mainApplication$meta, _item$$$androidValue;
|
|
209
|
-
|
|
210
163
|
const item = mainApplication === null || mainApplication === void 0 ? void 0 : (_mainApplication$meta = mainApplication['meta-data']) === null || _mainApplication$meta === void 0 ? void 0 : _mainApplication$meta.find(e => e.$['android:name'] === name);
|
|
211
164
|
return (_item$$$androidValue = item === null || item === void 0 ? void 0 : item.$['android:value']) !== null && _item$$$androidValue !== void 0 ? _item$$$androidValue : null;
|
|
212
165
|
}
|
|
213
|
-
|
|
214
166
|
return null;
|
|
215
167
|
}
|
|
216
|
-
|
|
217
168
|
function addUsesLibraryItemToMainApplication(mainApplication, item) {
|
|
218
169
|
let existingMetaDataItem;
|
|
219
170
|
const newItem = {
|
|
220
171
|
$: prefixAndroidKeys(item)
|
|
221
172
|
};
|
|
222
|
-
|
|
223
173
|
if (mainApplication['uses-library']) {
|
|
224
174
|
existingMetaDataItem = mainApplication['uses-library'].filter(e => e.$['android:name'] === item.name);
|
|
225
|
-
|
|
226
175
|
if (existingMetaDataItem.length) {
|
|
227
176
|
existingMetaDataItem[0].$ = newItem.$;
|
|
228
177
|
} else {
|
|
@@ -231,58 +180,50 @@ function addUsesLibraryItemToMainApplication(mainApplication, item) {
|
|
|
231
180
|
} else {
|
|
232
181
|
mainApplication['uses-library'] = [newItem];
|
|
233
182
|
}
|
|
234
|
-
|
|
235
183
|
return mainApplication;
|
|
236
184
|
}
|
|
237
|
-
|
|
238
185
|
function removeUsesLibraryItemFromMainApplication(mainApplication, itemName) {
|
|
239
186
|
const index = findUsesLibraryItem(mainApplication, itemName);
|
|
240
|
-
|
|
241
187
|
if (mainApplication !== null && mainApplication !== void 0 && mainApplication['uses-library'] && index > -1) {
|
|
242
188
|
mainApplication['uses-library'].splice(index, 1);
|
|
243
189
|
}
|
|
244
|
-
|
|
245
190
|
return mainApplication;
|
|
246
191
|
}
|
|
247
|
-
|
|
248
192
|
function prefixAndroidKeys(head) {
|
|
249
193
|
// prefix all keys with `android:`
|
|
250
|
-
return Object.entries(head).reduce((prev, [key, curr]) => ({
|
|
194
|
+
return Object.entries(head).reduce((prev, [key, curr]) => ({
|
|
195
|
+
...prev,
|
|
251
196
|
[`android:${key}`]: curr
|
|
252
197
|
}), {});
|
|
253
198
|
}
|
|
199
|
+
|
|
254
200
|
/**
|
|
255
201
|
* Ensure the `tools:*` namespace is available in the manifest.
|
|
256
202
|
*
|
|
257
203
|
* @param manifest AndroidManifest.xml
|
|
258
204
|
* @returns manifest with the `tools:*` namespace available
|
|
259
205
|
*/
|
|
260
|
-
|
|
261
|
-
|
|
262
206
|
function ensureToolsAvailable(manifest) {
|
|
263
207
|
return ensureManifestHasNamespace(manifest, {
|
|
264
208
|
namespace: 'xmlns:tools',
|
|
265
209
|
url: 'http://schemas.android.com/tools'
|
|
266
210
|
});
|
|
267
211
|
}
|
|
212
|
+
|
|
268
213
|
/**
|
|
269
214
|
* Ensure a particular namespace is available in the manifest.
|
|
270
215
|
*
|
|
271
216
|
* @param manifest `AndroidManifest.xml`
|
|
272
217
|
* @returns manifest with the provided namespace available
|
|
273
218
|
*/
|
|
274
|
-
|
|
275
|
-
|
|
276
219
|
function ensureManifestHasNamespace(manifest, {
|
|
277
220
|
namespace,
|
|
278
221
|
url
|
|
279
222
|
}) {
|
|
280
223
|
var _manifest$manifest, _manifest$manifest$$;
|
|
281
|
-
|
|
282
224
|
if (manifest !== null && manifest !== void 0 && (_manifest$manifest = manifest.manifest) !== null && _manifest$manifest !== void 0 && (_manifest$manifest$$ = _manifest$manifest.$) !== null && _manifest$manifest$$ !== void 0 && _manifest$manifest$$[namespace]) {
|
|
283
225
|
return manifest;
|
|
284
226
|
}
|
|
285
|
-
|
|
286
227
|
manifest.manifest.$[namespace] = url;
|
|
287
228
|
return manifest;
|
|
288
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Manifest.js","names":["writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","XML","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","e","$","endsWith","getMainApplicationOrThrow","mainApplication","assert","getMainActivityOrThrow","mainActivity","getMainActivity","getRunnableActivity","enabledActivities","activity","Array","isArray","intentFilter","action","find","category","addMetaDataItemToMainApplication","itemName","itemValue","itemType","existingMetaDataItem","newItem","prefixAndroidKeys","name","length","push","removeMetaDataItemFromMainApplication","index","findMetaDataItem","splice","findApplicationSubItem","parent","findIndex","findUsesLibraryItem","getMainApplicationMetaDataValue","hasOwnProperty","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","Object","entries","reduce","prev","key","curr","ensureToolsAvailable","ensureManifestHasNamespace","namespace","url"],"sources":["../../src/android/Manifest.ts"],"sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as XML from '../utils/XML';\n\nexport type StringBoolean = 'true' | 'false';\n\ntype ManifestMetaDataAttributes = AndroidManifestAttributes & {\n 'android:value'?: string;\n 'android:resource'?: string;\n};\n\ntype AndroidManifestAttributes = {\n 'android:name': string | 'android.intent.action.VIEW';\n 'tools:node'?: string | 'remove';\n};\n\ntype ManifestAction = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestCategory = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestData = {\n $: {\n [key: string]: string | undefined;\n 'android:host'?: string;\n 'android:pathPrefix'?: string;\n 'android:scheme'?: string;\n };\n};\n\ntype ManifestReceiver = {\n $: AndroidManifestAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:enabled'?: StringBoolean;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\nexport type ManifestIntentFilter = {\n $?: {\n 'android:autoVerify'?: StringBoolean;\n 'data-generated'?: StringBoolean;\n };\n action?: ManifestAction[];\n data?: ManifestData[];\n category?: ManifestCategory[];\n};\n\nexport type ManifestMetaData = {\n $: ManifestMetaDataAttributes;\n};\n\ntype ManifestServiceAttributes = AndroidManifestAttributes & {\n 'android:enabled'?: StringBoolean;\n 'android:exported'?: StringBoolean;\n 'android:permission'?: string;\n // ...\n};\n\ntype ManifestService = {\n $: ManifestServiceAttributes;\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\ntype ManifestApplicationAttributes = {\n 'android:name': string | '.MainApplication';\n 'android:icon'?: string;\n 'android:roundIcon'?: string;\n 'android:label'?: string;\n 'android:allowBackup'?: StringBoolean;\n 'android:largeHeap'?: StringBoolean;\n 'android:requestLegacyExternalStorage'?: StringBoolean;\n 'android:usesCleartextTraffic'?: StringBoolean;\n [key: string]: string | undefined;\n};\n\nexport type ManifestActivity = {\n $: ManifestApplicationAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:launchMode'?: string;\n 'android:theme'?: string;\n 'android:windowSoftInputMode'?:\n | string\n | 'stateUnspecified'\n | 'stateUnchanged'\n | 'stateHidden'\n | 'stateAlwaysHidden'\n | 'stateVisible'\n | 'stateAlwaysVisible'\n | 'adjustUnspecified'\n | 'adjustResize'\n | 'adjustPan';\n [key: string]: string | undefined;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n // ...\n};\n\nexport type ManifestUsesLibrary = {\n $: AndroidManifestAttributes & {\n 'android:required'?: StringBoolean;\n };\n};\n\nexport type ManifestApplication = {\n $: ManifestApplicationAttributes;\n activity?: ManifestActivity[];\n service?: ManifestService[];\n receiver?: ManifestReceiver[];\n 'meta-data'?: ManifestMetaData[];\n 'uses-library'?: ManifestUsesLibrary[];\n // ...\n};\n\ntype ManifestPermission = {\n $: AndroidManifestAttributes & {\n 'android:protectionLevel'?: string | 'signature';\n };\n};\n\nexport type ManifestUsesPermission = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestUsesFeature = {\n $: AndroidManifestAttributes & {\n 'android:glEsVersion'?: string;\n 'android:required': StringBoolean;\n };\n};\n\nexport type AndroidManifest = {\n manifest: {\n // Probably more, but this is currently all we'd need for most cases in Expo.\n $: {\n 'xmlns:android': string;\n 'xmlns:tools'?: string;\n package?: string;\n [key: string]: string | undefined;\n };\n permission?: ManifestPermission[];\n 'uses-permission'?: ManifestUsesPermission[];\n 'uses-permission-sdk-23'?: ManifestUsesPermission[];\n 'uses-feature'?: ManifestUsesFeature[];\n application?: ManifestApplication[];\n };\n};\n\nexport async function writeAndroidManifestAsync(\n manifestPath: string,\n androidManifest: AndroidManifest\n): Promise<void> {\n const manifestXml = XML.format(androidManifest);\n await fs.promises.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.promises.writeFile(manifestPath, manifestXml);\n}\n\nexport async function readAndroidManifestAsync(manifestPath: string): Promise<AndroidManifest> {\n const xml = await XML.readXMLAsync({ path: manifestPath });\n if (!isManifest(xml)) {\n throw new Error('Invalid manifest found at: ' + manifestPath);\n }\n return xml;\n}\n\nfunction isManifest(xml: XML.XMLObject): xml is AndroidManifest {\n // TODO: Maybe more validation\n return !!xml.manifest;\n}\n\n/** Returns the `manifest.application` tag ending in `.MainApplication` */\nexport function getMainApplication(androidManifest: AndroidManifest): ManifestApplication | null {\n return (\n androidManifest?.manifest?.application?.filter((e) =>\n e?.$?.['android:name'].endsWith('.MainApplication')\n )[0] ?? null\n );\n}\n\nexport function getMainApplicationOrThrow(androidManifest: AndroidManifest): ManifestApplication {\n const mainApplication = getMainApplication(androidManifest);\n assert(mainApplication, 'AndroidManifest.xml is missing the required MainApplication element');\n return mainApplication;\n}\n\nexport function getMainActivityOrThrow(androidManifest: AndroidManifest): ManifestActivity {\n const mainActivity = getMainActivity(androidManifest);\n assert(mainActivity, 'AndroidManifest.xml is missing the required MainActivity element');\n return mainActivity;\n}\n\nexport function getRunnableActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n // Get enabled activities\n const enabledActivities = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:enabled'] !== 'false' && e.$['android:enabled'] !== false\n );\n\n if (!enabledActivities) {\n return null;\n }\n\n // Get the activity that has a runnable intent-filter\n for (const activity of enabledActivities) {\n if (Array.isArray(activity['intent-filter'])) {\n for (const intentFilter of activity['intent-filter']) {\n if (\n intentFilter.action?.find(\n (action) => action.$['android:name'] === 'android.intent.action.MAIN'\n ) &&\n intentFilter.category?.find(\n (category) => category.$['android:name'] === 'android.intent.category.LAUNCHER'\n )\n ) {\n return activity;\n }\n }\n }\n }\n\n return null;\n}\n\nexport function getMainActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n const mainActivity = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:name'] === '.MainActivity'\n );\n return mainActivity?.[0] ?? null;\n}\n\nexport function addMetaDataItemToMainApplication(\n mainApplication: ManifestApplication,\n itemName: string,\n itemValue: string,\n itemType: 'resource' | 'value' = 'value'\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys({ name: itemName, [itemType]: itemValue }),\n } as ManifestMetaData;\n if (mainApplication['meta-data']) {\n existingMetaDataItem = mainApplication['meta-data'].filter(\n (e: any) => e.$['android:name'] === itemName\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$[`android:${itemType}` as keyof ManifestMetaDataAttributes] =\n itemValue;\n } else {\n mainApplication['meta-data'].push(newItem);\n }\n } else {\n mainApplication['meta-data'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeMetaDataItemFromMainApplication(mainApplication: any, itemName: string) {\n const index = findMetaDataItem(mainApplication, itemName);\n if (mainApplication?.['meta-data'] && index > -1) {\n mainApplication['meta-data'].splice(index, 1);\n }\n return mainApplication;\n}\n\nfunction findApplicationSubItem(\n mainApplication: ManifestApplication,\n category: keyof ManifestApplication,\n itemName: string\n): number {\n const parent = mainApplication[category];\n if (Array.isArray(parent)) {\n const index = parent.findIndex((e: any) => e.$['android:name'] === itemName);\n\n return index;\n }\n return -1;\n}\n\nexport function findMetaDataItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'meta-data', itemName);\n}\n\nexport function findUsesLibraryItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'uses-library', itemName);\n}\n\nexport function getMainApplicationMetaDataValue(\n androidManifest: AndroidManifest,\n name: string\n): string | null {\n const mainApplication = getMainApplication(androidManifest);\n\n if (mainApplication?.hasOwnProperty('meta-data')) {\n const item = mainApplication?.['meta-data']?.find((e: any) => e.$['android:name'] === name);\n return item?.$['android:value'] ?? null;\n }\n\n return null;\n}\n\nexport function addUsesLibraryItemToMainApplication(\n mainApplication: ManifestApplication,\n item: { name: string; required?: boolean }\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys(item),\n } as ManifestUsesLibrary;\n\n if (mainApplication['uses-library']) {\n existingMetaDataItem = mainApplication['uses-library'].filter(\n (e) => e.$['android:name'] === item.name\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$ = newItem.$;\n } else {\n mainApplication['uses-library'].push(newItem);\n }\n } else {\n mainApplication['uses-library'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeUsesLibraryItemFromMainApplication(\n mainApplication: ManifestApplication,\n itemName: string\n) {\n const index = findUsesLibraryItem(mainApplication, itemName);\n if (mainApplication?.['uses-library'] && index > -1) {\n mainApplication['uses-library'].splice(index, 1);\n }\n return mainApplication;\n}\n\nexport function prefixAndroidKeys<T extends Record<string, any> = Record<string, string>>(\n head: T\n): Record<string, any> {\n // prefix all keys with `android:`\n return Object.entries(head).reduce(\n (prev, [key, curr]) => ({ ...prev, [`android:${key}`]: curr }),\n {} as T\n );\n}\n\n/**\n * Ensure the `tools:*` namespace is available in the manifest.\n *\n * @param manifest AndroidManifest.xml\n * @returns manifest with the `tools:*` namespace available\n */\nexport function ensureToolsAvailable(manifest: AndroidManifest) {\n return ensureManifestHasNamespace(manifest, {\n namespace: 'xmlns:tools',\n url: 'http://schemas.android.com/tools',\n });\n}\n\n/**\n * Ensure a particular namespace is available in the manifest.\n *\n * @param manifest `AndroidManifest.xml`\n * @returns manifest with the provided namespace available\n */\nfunction ensureManifestHasNamespace(\n manifest: AndroidManifest,\n { namespace, url }: { namespace: string; url: string }\n) {\n if (manifest?.manifest?.$?.[namespace]) {\n return manifest;\n }\n manifest.manifest.$[namespace] = url;\n return manifest;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Manifest.js","names":["writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","XML","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","e","$","endsWith","getMainApplicationOrThrow","mainApplication","assert","getMainActivityOrThrow","mainActivity","getMainActivity","getRunnableActivity","enabledActivities","activity","Array","isArray","intentFilter","action","find","category","addMetaDataItemToMainApplication","itemName","itemValue","itemType","existingMetaDataItem","newItem","prefixAndroidKeys","name","length","push","removeMetaDataItemFromMainApplication","index","findMetaDataItem","splice","findApplicationSubItem","parent","findIndex","findUsesLibraryItem","getMainApplicationMetaDataValue","hasOwnProperty","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","Object","entries","reduce","prev","key","curr","ensureToolsAvailable","ensureManifestHasNamespace","namespace","url"],"sources":["../../src/android/Manifest.ts"],"sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as XML from '../utils/XML';\n\nexport type StringBoolean = 'true' | 'false';\n\ntype ManifestMetaDataAttributes = AndroidManifestAttributes & {\n 'android:value'?: string;\n 'android:resource'?: string;\n};\n\ntype AndroidManifestAttributes = {\n 'android:name': string | 'android.intent.action.VIEW';\n 'tools:node'?: string | 'remove';\n};\n\ntype ManifestAction = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestCategory = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestData = {\n $: {\n [key: string]: string | undefined;\n 'android:host'?: string;\n 'android:pathPrefix'?: string;\n 'android:scheme'?: string;\n };\n};\n\ntype ManifestReceiver = {\n $: AndroidManifestAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:enabled'?: StringBoolean;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\nexport type ManifestIntentFilter = {\n $?: {\n 'android:autoVerify'?: StringBoolean;\n 'data-generated'?: StringBoolean;\n };\n action?: ManifestAction[];\n data?: ManifestData[];\n category?: ManifestCategory[];\n};\n\nexport type ManifestMetaData = {\n $: ManifestMetaDataAttributes;\n};\n\ntype ManifestServiceAttributes = AndroidManifestAttributes & {\n 'android:enabled'?: StringBoolean;\n 'android:exported'?: StringBoolean;\n 'android:permission'?: string;\n // ...\n};\n\ntype ManifestService = {\n $: ManifestServiceAttributes;\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\ntype ManifestApplicationAttributes = {\n 'android:name': string | '.MainApplication';\n 'android:icon'?: string;\n 'android:roundIcon'?: string;\n 'android:label'?: string;\n 'android:allowBackup'?: StringBoolean;\n 'android:largeHeap'?: StringBoolean;\n 'android:requestLegacyExternalStorage'?: StringBoolean;\n 'android:usesCleartextTraffic'?: StringBoolean;\n [key: string]: string | undefined;\n};\n\nexport type ManifestActivity = {\n $: ManifestApplicationAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:launchMode'?: string;\n 'android:theme'?: string;\n 'android:windowSoftInputMode'?:\n | string\n | 'stateUnspecified'\n | 'stateUnchanged'\n | 'stateHidden'\n | 'stateAlwaysHidden'\n | 'stateVisible'\n | 'stateAlwaysVisible'\n | 'adjustUnspecified'\n | 'adjustResize'\n | 'adjustPan';\n [key: string]: string | undefined;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n // ...\n};\n\nexport type ManifestUsesLibrary = {\n $: AndroidManifestAttributes & {\n 'android:required'?: StringBoolean;\n };\n};\n\nexport type ManifestApplication = {\n $: ManifestApplicationAttributes;\n activity?: ManifestActivity[];\n service?: ManifestService[];\n receiver?: ManifestReceiver[];\n 'meta-data'?: ManifestMetaData[];\n 'uses-library'?: ManifestUsesLibrary[];\n // ...\n};\n\ntype ManifestPermission = {\n $: AndroidManifestAttributes & {\n 'android:protectionLevel'?: string | 'signature';\n };\n};\n\nexport type ManifestUsesPermission = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestUsesFeature = {\n $: AndroidManifestAttributes & {\n 'android:glEsVersion'?: string;\n 'android:required': StringBoolean;\n };\n};\n\nexport type AndroidManifest = {\n manifest: {\n // Probably more, but this is currently all we'd need for most cases in Expo.\n $: {\n 'xmlns:android': string;\n 'xmlns:tools'?: string;\n package?: string;\n [key: string]: string | undefined;\n };\n permission?: ManifestPermission[];\n 'uses-permission'?: ManifestUsesPermission[];\n 'uses-permission-sdk-23'?: ManifestUsesPermission[];\n 'uses-feature'?: ManifestUsesFeature[];\n application?: ManifestApplication[];\n };\n};\n\nexport async function writeAndroidManifestAsync(\n manifestPath: string,\n androidManifest: AndroidManifest\n): Promise<void> {\n const manifestXml = XML.format(androidManifest);\n await fs.promises.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.promises.writeFile(manifestPath, manifestXml);\n}\n\nexport async function readAndroidManifestAsync(manifestPath: string): Promise<AndroidManifest> {\n const xml = await XML.readXMLAsync({ path: manifestPath });\n if (!isManifest(xml)) {\n throw new Error('Invalid manifest found at: ' + manifestPath);\n }\n return xml;\n}\n\nfunction isManifest(xml: XML.XMLObject): xml is AndroidManifest {\n // TODO: Maybe more validation\n return !!xml.manifest;\n}\n\n/** Returns the `manifest.application` tag ending in `.MainApplication` */\nexport function getMainApplication(androidManifest: AndroidManifest): ManifestApplication | null {\n return (\n androidManifest?.manifest?.application?.filter((e) =>\n e?.$?.['android:name'].endsWith('.MainApplication')\n )[0] ?? null\n );\n}\n\nexport function getMainApplicationOrThrow(androidManifest: AndroidManifest): ManifestApplication {\n const mainApplication = getMainApplication(androidManifest);\n assert(mainApplication, 'AndroidManifest.xml is missing the required MainApplication element');\n return mainApplication;\n}\n\nexport function getMainActivityOrThrow(androidManifest: AndroidManifest): ManifestActivity {\n const mainActivity = getMainActivity(androidManifest);\n assert(mainActivity, 'AndroidManifest.xml is missing the required MainActivity element');\n return mainActivity;\n}\n\nexport function getRunnableActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n // Get enabled activities\n const enabledActivities = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:enabled'] !== 'false' && e.$['android:enabled'] !== false\n );\n\n if (!enabledActivities) {\n return null;\n }\n\n // Get the activity that has a runnable intent-filter\n for (const activity of enabledActivities) {\n if (Array.isArray(activity['intent-filter'])) {\n for (const intentFilter of activity['intent-filter']) {\n if (\n intentFilter.action?.find(\n (action) => action.$['android:name'] === 'android.intent.action.MAIN'\n ) &&\n intentFilter.category?.find(\n (category) => category.$['android:name'] === 'android.intent.category.LAUNCHER'\n )\n ) {\n return activity;\n }\n }\n }\n }\n\n return null;\n}\n\nexport function getMainActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n const mainActivity = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:name'] === '.MainActivity'\n );\n return mainActivity?.[0] ?? null;\n}\n\nexport function addMetaDataItemToMainApplication(\n mainApplication: ManifestApplication,\n itemName: string,\n itemValue: string,\n itemType: 'resource' | 'value' = 'value'\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys({ name: itemName, [itemType]: itemValue }),\n } as ManifestMetaData;\n if (mainApplication['meta-data']) {\n existingMetaDataItem = mainApplication['meta-data'].filter(\n (e: any) => e.$['android:name'] === itemName\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$[`android:${itemType}` as keyof ManifestMetaDataAttributes] =\n itemValue;\n } else {\n mainApplication['meta-data'].push(newItem);\n }\n } else {\n mainApplication['meta-data'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeMetaDataItemFromMainApplication(mainApplication: any, itemName: string) {\n const index = findMetaDataItem(mainApplication, itemName);\n if (mainApplication?.['meta-data'] && index > -1) {\n mainApplication['meta-data'].splice(index, 1);\n }\n return mainApplication;\n}\n\nfunction findApplicationSubItem(\n mainApplication: ManifestApplication,\n category: keyof ManifestApplication,\n itemName: string\n): number {\n const parent = mainApplication[category];\n if (Array.isArray(parent)) {\n const index = parent.findIndex((e: any) => e.$['android:name'] === itemName);\n\n return index;\n }\n return -1;\n}\n\nexport function findMetaDataItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'meta-data', itemName);\n}\n\nexport function findUsesLibraryItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'uses-library', itemName);\n}\n\nexport function getMainApplicationMetaDataValue(\n androidManifest: AndroidManifest,\n name: string\n): string | null {\n const mainApplication = getMainApplication(androidManifest);\n\n if (mainApplication?.hasOwnProperty('meta-data')) {\n const item = mainApplication?.['meta-data']?.find((e: any) => e.$['android:name'] === name);\n return item?.$['android:value'] ?? null;\n }\n\n return null;\n}\n\nexport function addUsesLibraryItemToMainApplication(\n mainApplication: ManifestApplication,\n item: { name: string; required?: boolean }\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys(item),\n } as ManifestUsesLibrary;\n\n if (mainApplication['uses-library']) {\n existingMetaDataItem = mainApplication['uses-library'].filter(\n (e) => e.$['android:name'] === item.name\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$ = newItem.$;\n } else {\n mainApplication['uses-library'].push(newItem);\n }\n } else {\n mainApplication['uses-library'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeUsesLibraryItemFromMainApplication(\n mainApplication: ManifestApplication,\n itemName: string\n) {\n const index = findUsesLibraryItem(mainApplication, itemName);\n if (mainApplication?.['uses-library'] && index > -1) {\n mainApplication['uses-library'].splice(index, 1);\n }\n return mainApplication;\n}\n\nexport function prefixAndroidKeys<T extends Record<string, any> = Record<string, string>>(\n head: T\n): Record<string, any> {\n // prefix all keys with `android:`\n return Object.entries(head).reduce(\n (prev, [key, curr]) => ({ ...prev, [`android:${key}`]: curr }),\n {} as T\n );\n}\n\n/**\n * Ensure the `tools:*` namespace is available in the manifest.\n *\n * @param manifest AndroidManifest.xml\n * @returns manifest with the `tools:*` namespace available\n */\nexport function ensureToolsAvailable(manifest: AndroidManifest) {\n return ensureManifestHasNamespace(manifest, {\n namespace: 'xmlns:tools',\n url: 'http://schemas.android.com/tools',\n });\n}\n\n/**\n * Ensure a particular namespace is available in the manifest.\n *\n * @param manifest `AndroidManifest.xml`\n * @returns manifest with the provided namespace available\n */\nfunction ensureManifestHasNamespace(\n manifest: AndroidManifest,\n { namespace, url }: { namespace: string; url: string }\n) {\n if (manifest?.manifest?.$?.[namespace]) {\n return manifest;\n }\n manifest.manifest.$[namespace] = url;\n return manifest;\n}\n"],"mappings":"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"}
|
package/build/android/Name.js
CHANGED
|
@@ -7,47 +7,34 @@ exports.applyNameSettingsGradle = applyNameSettingsGradle;
|
|
|
7
7
|
exports.getName = getName;
|
|
8
8
|
exports.sanitizeNameForGradle = sanitizeNameForGradle;
|
|
9
9
|
exports.withNameSettingsGradle = exports.withName = void 0;
|
|
10
|
-
|
|
11
10
|
function _androidPlugins() {
|
|
12
11
|
const data = require("../plugins/android-plugins");
|
|
13
|
-
|
|
14
12
|
_androidPlugins = function () {
|
|
15
13
|
return data;
|
|
16
14
|
};
|
|
17
|
-
|
|
18
15
|
return data;
|
|
19
16
|
}
|
|
20
|
-
|
|
21
17
|
function _warnings() {
|
|
22
18
|
const data = require("../utils/warnings");
|
|
23
|
-
|
|
24
19
|
_warnings = function () {
|
|
25
20
|
return data;
|
|
26
21
|
};
|
|
27
|
-
|
|
28
22
|
return data;
|
|
29
23
|
}
|
|
30
|
-
|
|
31
24
|
function _Resources() {
|
|
32
25
|
const data = require("./Resources");
|
|
33
|
-
|
|
34
26
|
_Resources = function () {
|
|
35
27
|
return data;
|
|
36
28
|
};
|
|
37
|
-
|
|
38
29
|
return data;
|
|
39
30
|
}
|
|
40
|
-
|
|
41
31
|
function _Strings() {
|
|
42
32
|
const data = require("./Strings");
|
|
43
|
-
|
|
44
33
|
_Strings = function () {
|
|
45
34
|
return data;
|
|
46
35
|
};
|
|
47
|
-
|
|
48
36
|
return data;
|
|
49
37
|
}
|
|
50
|
-
|
|
51
38
|
/**
|
|
52
39
|
* Sanitize a name, this should be used for files and gradle names.
|
|
53
40
|
* - `[/, \, :, <, >, ", ?, *, |]` are not allowed
|
|
@@ -57,15 +44,14 @@ function _Strings() {
|
|
|
57
44
|
*/
|
|
58
45
|
function sanitizeNameForGradle(name) {
|
|
59
46
|
// Remove escape characters which are valid in XML names but not in gradle.
|
|
60
|
-
name = name.replace(/[\n\r\t]/g, '');
|
|
61
|
-
// The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \, :, <, >, ", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).
|
|
47
|
+
name = name.replace(/[\n\r\t]/g, '');
|
|
62
48
|
|
|
49
|
+
// Gradle disallows these:
|
|
50
|
+
// The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \, :, <, >, ", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).
|
|
63
51
|
return name.replace(/(\/|\\|:|<|>|"|\?|\*|\|)/g, '');
|
|
64
52
|
}
|
|
65
|
-
|
|
66
53
|
const withName = (0, _androidPlugins().createStringsXmlPlugin)(applyNameFromConfig, 'withName');
|
|
67
54
|
exports.withName = withName;
|
|
68
|
-
|
|
69
55
|
const withNameSettingsGradle = config => {
|
|
70
56
|
return (0, _androidPlugins().withSettingsGradle)(config, config => {
|
|
71
57
|
if (config.modResults.language === 'groovy') {
|
|
@@ -73,42 +59,35 @@ const withNameSettingsGradle = config => {
|
|
|
73
59
|
} else {
|
|
74
60
|
(0, _warnings().addWarningAndroid)('name', `Cannot automatically configure settings.gradle if it's not groovy`);
|
|
75
61
|
}
|
|
76
|
-
|
|
77
62
|
return config;
|
|
78
63
|
});
|
|
79
64
|
};
|
|
80
|
-
|
|
81
65
|
exports.withNameSettingsGradle = withNameSettingsGradle;
|
|
82
|
-
|
|
83
66
|
function getName(config) {
|
|
84
67
|
return typeof config.name === 'string' ? config.name : null;
|
|
85
68
|
}
|
|
86
|
-
|
|
87
69
|
function applyNameFromConfig(config, stringsJSON) {
|
|
88
70
|
const name = getName(config);
|
|
89
|
-
|
|
90
71
|
if (name) {
|
|
91
72
|
return (0, _Strings().setStringItem)([(0, _Resources().buildResourceItem)({
|
|
92
73
|
name: 'app_name',
|
|
93
74
|
value: name
|
|
94
75
|
})], stringsJSON);
|
|
95
76
|
}
|
|
96
|
-
|
|
97
77
|
return (0, _Strings().removeStringItem)('app_name', stringsJSON);
|
|
98
78
|
}
|
|
79
|
+
|
|
99
80
|
/**
|
|
100
81
|
* Regex a name change -- fragile.
|
|
101
82
|
*
|
|
102
83
|
* @param config
|
|
103
84
|
* @param settingsGradle
|
|
104
85
|
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
86
|
function applyNameSettingsGradle(config, settingsGradle) {
|
|
108
87
|
var _getName;
|
|
88
|
+
const name = sanitizeNameForGradle((_getName = getName(config)) !== null && _getName !== void 0 ? _getName : '');
|
|
109
89
|
|
|
110
|
-
|
|
111
|
-
|
|
90
|
+
// Select rootProject.name = '***' and replace the contents between the quotes.
|
|
112
91
|
return settingsGradle.replace(/rootProject.name\s?=\s?(["'])(?:(?=(\\?))\2.)*?\1/g, `rootProject.name = '${name.replace(/'/g, "\\'")}'`);
|
|
113
92
|
}
|
|
114
93
|
//# sourceMappingURL=Name.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Name.js","names":["sanitizeNameForGradle","name","replace","withName","createStringsXmlPlugin","applyNameFromConfig","withNameSettingsGradle","config","withSettingsGradle","modResults","language","contents","applyNameSettingsGradle","addWarningAndroid","getName","stringsJSON","setStringItem","buildResourceItem","value","removeStringItem","settingsGradle"],"sources":["../../src/android/Name.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createStringsXmlPlugin, withSettingsGradle } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { buildResourceItem, ResourceXML } from './Resources';\nimport { removeStringItem, setStringItem } from './Strings';\n\n/**\n * Sanitize a name, this should be used for files and gradle names.\n * - `[/, \\, :, <, >, \", ?, *, |]` are not allowed\n * https://docs.gradle.org/4.2/release-notes.html#path-separator-characters-in-names-are-deprecated\n *\n * @param name\n */\nexport function sanitizeNameForGradle(name: string): string {\n // Remove escape characters which are valid in XML names but not in gradle.\n name = name.replace(/[\\n\\r\\t]/g, '');\n\n // Gradle disallows these:\n // The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \\, :, <, >, \", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).\n return name.replace(/(\\/|\\\\|:|<|>|\"|\\?|\\*|\\|)/g, '');\n}\n\nexport const withName = createStringsXmlPlugin(applyNameFromConfig, 'withName');\n\nexport const withNameSettingsGradle: ConfigPlugin = (config) => {\n return withSettingsGradle(config, (config) => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = applyNameSettingsGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'name',\n `Cannot automatically configure settings.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport function getName(config: Pick<ExpoConfig, 'name'>) {\n return typeof config.name === 'string' ? config.name : null;\n}\n\nfunction applyNameFromConfig(\n config: Pick<ExpoConfig, 'name'>,\n stringsJSON: ResourceXML\n): ResourceXML {\n const name = getName(config);\n if (name) {\n return setStringItem([buildResourceItem({ name: 'app_name', value: name })], stringsJSON);\n }\n return removeStringItem('app_name', stringsJSON);\n}\n\n/**\n * Regex a name change -- fragile.\n *\n * @param config\n * @param settingsGradle\n */\nexport function applyNameSettingsGradle(config: Pick<ExpoConfig, 'name'>, settingsGradle: string) {\n const name = sanitizeNameForGradle(getName(config) ?? '');\n\n // Select rootProject.name = '***' and replace the contents between the quotes.\n return settingsGradle.replace(\n /rootProject.name\\s?=\\s?([\"'])(?:(?=(\\\\?))\\2.)*?\\1/g,\n `rootProject.name = '${name.replace(/'/g, \"\\\\'\")}'`\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Name.js","names":["sanitizeNameForGradle","name","replace","withName","createStringsXmlPlugin","applyNameFromConfig","withNameSettingsGradle","config","withSettingsGradle","modResults","language","contents","applyNameSettingsGradle","addWarningAndroid","getName","stringsJSON","setStringItem","buildResourceItem","value","removeStringItem","settingsGradle"],"sources":["../../src/android/Name.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createStringsXmlPlugin, withSettingsGradle } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { buildResourceItem, ResourceXML } from './Resources';\nimport { removeStringItem, setStringItem } from './Strings';\n\n/**\n * Sanitize a name, this should be used for files and gradle names.\n * - `[/, \\, :, <, >, \", ?, *, |]` are not allowed\n * https://docs.gradle.org/4.2/release-notes.html#path-separator-characters-in-names-are-deprecated\n *\n * @param name\n */\nexport function sanitizeNameForGradle(name: string): string {\n // Remove escape characters which are valid in XML names but not in gradle.\n name = name.replace(/[\\n\\r\\t]/g, '');\n\n // Gradle disallows these:\n // The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \\, :, <, >, \", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).\n return name.replace(/(\\/|\\\\|:|<|>|\"|\\?|\\*|\\|)/g, '');\n}\n\nexport const withName = createStringsXmlPlugin(applyNameFromConfig, 'withName');\n\nexport const withNameSettingsGradle: ConfigPlugin = (config) => {\n return withSettingsGradle(config, (config) => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = applyNameSettingsGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'name',\n `Cannot automatically configure settings.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport function getName(config: Pick<ExpoConfig, 'name'>) {\n return typeof config.name === 'string' ? config.name : null;\n}\n\nfunction applyNameFromConfig(\n config: Pick<ExpoConfig, 'name'>,\n stringsJSON: ResourceXML\n): ResourceXML {\n const name = getName(config);\n if (name) {\n return setStringItem([buildResourceItem({ name: 'app_name', value: name })], stringsJSON);\n }\n return removeStringItem('app_name', stringsJSON);\n}\n\n/**\n * Regex a name change -- fragile.\n *\n * @param config\n * @param settingsGradle\n */\nexport function applyNameSettingsGradle(config: Pick<ExpoConfig, 'name'>, settingsGradle: string) {\n const name = sanitizeNameForGradle(getName(config) ?? '');\n\n // Select rootProject.name = '***' and replace the contents between the quotes.\n return settingsGradle.replace(\n /rootProject.name\\s?=\\s?([\"'])(?:(?=(\\\\?))\\2.)*?\\1/g,\n `rootProject.name = '${name.replace(/'/g, \"\\\\'\")}'`\n );\n}\n"],"mappings":";;;;;;;;;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,qBAAqB,CAACC,IAAY,EAAU;EAC1D;EACAA,IAAI,GAAGA,IAAI,CAACC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;;EAEpC;EACA;EACA,OAAOD,IAAI,CAACC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;AACtD;AAEO,MAAMC,QAAQ,GAAG,IAAAC,wCAAsB,EAACC,mBAAmB,EAAE,UAAU,CAAC;AAAC;AAEzE,MAAMC,sBAAoC,GAAIC,MAAM,IAAK;EAC9D,OAAO,IAAAC,oCAAkB,EAACD,MAAM,EAAGA,MAAM,IAAK;IAC5C,IAAIA,MAAM,CAACE,UAAU,CAACC,QAAQ,KAAK,QAAQ,EAAE;MAC3CH,MAAM,CAACE,UAAU,CAACE,QAAQ,GAAGC,uBAAuB,CAACL,MAAM,EAAEA,MAAM,CAACE,UAAU,CAACE,QAAQ,CAAC;IAC1F,CAAC,MAAM;MACL,IAAAE,6BAAiB,EACf,MAAM,EACL,mEAAkE,CACpE;IACH;IACA,OAAON,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAAC;AAEK,SAASO,OAAO,CAACP,MAAgC,EAAE;EACxD,OAAO,OAAOA,MAAM,CAACN,IAAI,KAAK,QAAQ,GAAGM,MAAM,CAACN,IAAI,GAAG,IAAI;AAC7D;AAEA,SAASI,mBAAmB,CAC1BE,MAAgC,EAChCQ,WAAwB,EACX;EACb,MAAMd,IAAI,GAAGa,OAAO,CAACP,MAAM,CAAC;EAC5B,IAAIN,IAAI,EAAE;IACR,OAAO,IAAAe,wBAAa,EAAC,CAAC,IAAAC,8BAAiB,EAAC;MAAEhB,IAAI,EAAE,UAAU;MAAEiB,KAAK,EAAEjB;IAAK,CAAC,CAAC,CAAC,EAAEc,WAAW,CAAC;EAC3F;EACA,OAAO,IAAAI,2BAAgB,EAAC,UAAU,EAAEJ,WAAW,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASH,uBAAuB,CAACL,MAAgC,EAAEa,cAAsB,EAAE;EAAA;EAChG,MAAMnB,IAAI,GAAGD,qBAAqB,aAACc,OAAO,CAACP,MAAM,CAAC,+CAAI,EAAE,CAAC;;EAEzD;EACA,OAAOa,cAAc,CAAClB,OAAO,CAC3B,oDAAoD,EACnD,uBAAsBD,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAE,GAAE,CACpD;AACH"}
|
|
@@ -7,43 +7,33 @@ exports.SCREEN_ORIENTATION_ATTRIBUTE = void 0;
|
|
|
7
7
|
exports.getOrientation = getOrientation;
|
|
8
8
|
exports.setAndroidOrientation = setAndroidOrientation;
|
|
9
9
|
exports.withOrientation = void 0;
|
|
10
|
-
|
|
11
10
|
function _androidPlugins() {
|
|
12
11
|
const data = require("../plugins/android-plugins");
|
|
13
|
-
|
|
14
12
|
_androidPlugins = function () {
|
|
15
13
|
return data;
|
|
16
14
|
};
|
|
17
|
-
|
|
18
15
|
return data;
|
|
19
16
|
}
|
|
20
|
-
|
|
21
17
|
function _Manifest() {
|
|
22
18
|
const data = require("./Manifest");
|
|
23
|
-
|
|
24
19
|
_Manifest = function () {
|
|
25
20
|
return data;
|
|
26
21
|
};
|
|
27
|
-
|
|
28
22
|
return data;
|
|
29
23
|
}
|
|
30
|
-
|
|
31
24
|
const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';
|
|
32
25
|
exports.SCREEN_ORIENTATION_ATTRIBUTE = SCREEN_ORIENTATION_ATTRIBUTE;
|
|
33
26
|
const withOrientation = (0, _androidPlugins().createAndroidManifestPlugin)(setAndroidOrientation, 'withOrientation');
|
|
34
27
|
exports.withOrientation = withOrientation;
|
|
35
|
-
|
|
36
28
|
function getOrientation(config) {
|
|
37
29
|
return typeof config.orientation === 'string' ? config.orientation : null;
|
|
38
30
|
}
|
|
39
|
-
|
|
40
31
|
function setAndroidOrientation(config, androidManifest) {
|
|
41
|
-
const orientation = getOrientation(config);
|
|
42
|
-
|
|
32
|
+
const orientation = getOrientation(config);
|
|
33
|
+
// TODO: Remove this if we decide to remove any orientation configuration when not specified
|
|
43
34
|
if (!orientation) {
|
|
44
35
|
return androidManifest;
|
|
45
36
|
}
|
|
46
|
-
|
|
47
37
|
const mainActivity = (0, _Manifest().getMainActivityOrThrow)(androidManifest);
|
|
48
38
|
mainActivity.$[SCREEN_ORIENTATION_ATTRIBUTE] = orientation !== 'default' ? orientation : 'unspecified';
|
|
49
39
|
return androidManifest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Orientation.js","names":["SCREEN_ORIENTATION_ATTRIBUTE","withOrientation","createAndroidManifestPlugin","setAndroidOrientation","getOrientation","config","orientation","androidManifest","mainActivity","getMainActivityOrThrow","$"],"sources":["../../src/android/Orientation.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { AndroidManifest, getMainActivityOrThrow } from './Manifest';\n\nexport const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';\n\nexport const withOrientation = createAndroidManifestPlugin(\n setAndroidOrientation,\n 'withOrientation'\n);\n\nexport function getOrientation(config: Pick<ExpoConfig, 'orientation'>) {\n return typeof config.orientation === 'string' ? config.orientation : null;\n}\n\nexport function setAndroidOrientation(\n config: Pick<ExpoConfig, 'orientation'>,\n androidManifest: AndroidManifest\n) {\n const orientation = getOrientation(config);\n // TODO: Remove this if we decide to remove any orientation configuration when not specified\n if (!orientation) {\n return androidManifest;\n }\n\n const mainActivity = getMainActivityOrThrow(androidManifest);\n\n mainActivity.$[SCREEN_ORIENTATION_ATTRIBUTE] =\n orientation !== 'default' ? orientation : 'unspecified';\n\n return androidManifest;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Orientation.js","names":["SCREEN_ORIENTATION_ATTRIBUTE","withOrientation","createAndroidManifestPlugin","setAndroidOrientation","getOrientation","config","orientation","androidManifest","mainActivity","getMainActivityOrThrow","$"],"sources":["../../src/android/Orientation.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { AndroidManifest, getMainActivityOrThrow } from './Manifest';\n\nexport const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';\n\nexport const withOrientation = createAndroidManifestPlugin(\n setAndroidOrientation,\n 'withOrientation'\n);\n\nexport function getOrientation(config: Pick<ExpoConfig, 'orientation'>) {\n return typeof config.orientation === 'string' ? config.orientation : null;\n}\n\nexport function setAndroidOrientation(\n config: Pick<ExpoConfig, 'orientation'>,\n androidManifest: AndroidManifest\n) {\n const orientation = getOrientation(config);\n // TODO: Remove this if we decide to remove any orientation configuration when not specified\n if (!orientation) {\n return androidManifest;\n }\n\n const mainActivity = getMainActivityOrThrow(androidManifest);\n\n mainActivity.$[SCREEN_ORIENTATION_ATTRIBUTE] =\n orientation !== 'default' ? orientation : 'unspecified';\n\n return androidManifest;\n}\n"],"mappings":";;;;;;;;;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEO,MAAMA,4BAA4B,GAAG,2BAA2B;AAAC;AAEjE,MAAMC,eAAe,GAAG,IAAAC,6CAA2B,EACxDC,qBAAqB,EACrB,iBAAiB,CAClB;AAAC;AAEK,SAASC,cAAc,CAACC,MAAuC,EAAE;EACtE,OAAO,OAAOA,MAAM,CAACC,WAAW,KAAK,QAAQ,GAAGD,MAAM,CAACC,WAAW,GAAG,IAAI;AAC3E;AAEO,SAASH,qBAAqB,CACnCE,MAAuC,EACvCE,eAAgC,EAChC;EACA,MAAMD,WAAW,GAAGF,cAAc,CAACC,MAAM,CAAC;EAC1C;EACA,IAAI,CAACC,WAAW,EAAE;IAChB,OAAOC,eAAe;EACxB;EAEA,MAAMC,YAAY,GAAG,IAAAC,kCAAsB,EAACF,eAAe,CAAC;EAE5DC,YAAY,CAACE,CAAC,CAACV,4BAA4B,CAAC,GAC1CM,WAAW,KAAK,SAAS,GAAGA,WAAW,GAAG,aAAa;EAEzD,OAAOC,eAAe;AACxB"}
|