@vxrn/utils 2.0.0-beta.137.1 → 2.0.0-beta.139.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/nativeAppManifest.cjs +30 -0
- package/dist/cjs/nativeAppManifest.native.cjs +81 -16
- package/dist/cjs/nativeAppManifest.native.js +81 -16
- package/dist/cjs/nativeAppManifest.native.js.map +1 -1
- package/dist/esm/nativeAppManifest.mjs +30 -0
- package/dist/esm/nativeAppManifest.mjs.map +1 -1
- package/dist/esm/nativeAppManifest.native.js +81 -16
- package/dist/esm/nativeAppManifest.native.js.map +1 -1
- package/package.json +3 -3
- package/src/nativeAppManifest.test.ts +39 -0
- package/src/nativeAppManifest.ts +41 -0
- package/types/nativeAppManifest.d.ts +10 -0
- package/types/nativeAppManifest.d.ts.map +1 -1
|
@@ -80,6 +80,34 @@ function validateNativeApp(manifest, platform) {
|
|
|
80
80
|
if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {
|
|
81
81
|
fail("icon requires source and a six-digit hex backgroundColor");
|
|
82
82
|
}
|
|
83
|
+
if (manifest.ios?.alternateIcons !== void 0) {
|
|
84
|
+
if (!manifest.icon) fail("ios.alternateIcons requires a primary icon");
|
|
85
|
+
const entries = Object.entries(manifest.ios.alternateIcons);
|
|
86
|
+
if (entries.length === 0) fail("ios.alternateIcons requires at least one icon");
|
|
87
|
+
for (const [name, icon] of entries) {
|
|
88
|
+
if (name === "AppIcon" || !TARGET_NAME.test(name)) {
|
|
89
|
+
fail(`ios.alternateIcons name "${name}" must be an identifier other than AppIcon`);
|
|
90
|
+
}
|
|
91
|
+
if (!icon?.source || !HEX_COLOR.test(icon.backgroundColor)) {
|
|
92
|
+
fail(`ios.alternateIcons.${name} requires source and a six-digit hex backgroundColor`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (manifest.ios?.backgroundTasks !== void 0) {
|
|
97
|
+
const tasks = manifest.ios.backgroundTasks;
|
|
98
|
+
if (!tasks || tasks.refresh !== void 0 && !Array.isArray(tasks.refresh) || tasks.processing !== void 0 && !Array.isArray(tasks.processing)) {
|
|
99
|
+
fail("ios.backgroundTasks refresh and processing must be arrays of identifiers");
|
|
100
|
+
}
|
|
101
|
+
const identifiers = [...tasks.refresh ?? [], ...tasks.processing ?? []];
|
|
102
|
+
if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {
|
|
103
|
+
fail("ios.backgroundTasks needs distinct refresh or processing identifiers");
|
|
104
|
+
}
|
|
105
|
+
for (const identifier of identifiers) {
|
|
106
|
+
if (typeof identifier !== "string" || !REVERSE_DNS.test(identifier)) {
|
|
107
|
+
fail(`ios.backgroundTasks identifier "${identifier}" must use reverse DNS notation`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
83
111
|
if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {
|
|
84
112
|
fail("splash requires source, a six-digit hex backgroundColor, and width from 1 to 288");
|
|
85
113
|
}
|
|
@@ -248,11 +276,13 @@ function expoClientFromNativeApp(app) {
|
|
|
248
276
|
icon: app.icon?.source,
|
|
249
277
|
splash: app.splash && {
|
|
250
278
|
image: app.splash.source,
|
|
279
|
+
backgroundImage: app.splash.backgroundImage,
|
|
251
280
|
backgroundColor: app.splash.backgroundColor,
|
|
252
281
|
imageWidth: app.splash.width,
|
|
253
282
|
resizeMode: app.splash.resizeMode,
|
|
254
283
|
dark: app.splash.dark && {
|
|
255
284
|
image: app.splash.dark.source,
|
|
285
|
+
backgroundImage: app.splash.dark.backgroundImage,
|
|
256
286
|
backgroundColor: app.splash.dark.backgroundColor
|
|
257
287
|
}
|
|
258
288
|
},
|
|
@@ -48,7 +48,7 @@ function fail(message) {
|
|
|
48
48
|
throw new Error(`[one] invalid native.app: ${message}`);
|
|
49
49
|
}
|
|
50
50
|
function validateNativeApp(manifest, platform) {
|
|
51
|
-
var _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location,
|
|
51
|
+
var _manifest_ios, _manifest_ios1, _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location, _manifest_ios2, _manifest_speech, _manifest_ios3;
|
|
52
52
|
if (!manifest || typeof manifest !== "object") fail("manifest must be an object");
|
|
53
53
|
if (!manifest.name || typeof manifest.name !== "string") fail("name is required");
|
|
54
54
|
if (!TARGET_NAME.test(manifest.name)) {
|
|
@@ -118,6 +118,69 @@ function validateNativeApp(manifest, platform) {
|
|
|
118
118
|
if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {
|
|
119
119
|
fail("icon requires source and a six-digit hex backgroundColor");
|
|
120
120
|
}
|
|
121
|
+
if (((_manifest_ios = manifest.ios) === null || _manifest_ios === void 0 ? void 0 : _manifest_ios.alternateIcons) !== void 0) {
|
|
122
|
+
if (!manifest.icon) fail("ios.alternateIcons requires a primary icon");
|
|
123
|
+
var entries = Object.entries(manifest.ios.alternateIcons);
|
|
124
|
+
if (entries.length === 0) fail("ios.alternateIcons requires at least one icon");
|
|
125
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
126
|
+
try {
|
|
127
|
+
for (var _iterator2 = entries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
128
|
+
var [name1, icon] = _step2.value;
|
|
129
|
+
if (name1 === "AppIcon" || !TARGET_NAME.test(name1)) {
|
|
130
|
+
fail(`ios.alternateIcons name "${name1}" must be an identifier other than AppIcon`);
|
|
131
|
+
}
|
|
132
|
+
if (!(icon === null || icon === void 0 ? void 0 : icon.source) || !HEX_COLOR.test(icon.backgroundColor)) {
|
|
133
|
+
fail(`ios.alternateIcons.${name1} requires source and a six-digit hex backgroundColor`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
} catch (err) {
|
|
137
|
+
_didIteratorError2 = true;
|
|
138
|
+
_iteratorError2 = err;
|
|
139
|
+
} finally {
|
|
140
|
+
try {
|
|
141
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
142
|
+
_iterator2.return();
|
|
143
|
+
}
|
|
144
|
+
} finally {
|
|
145
|
+
if (_didIteratorError2) {
|
|
146
|
+
throw _iteratorError2;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (((_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.backgroundTasks) !== void 0) {
|
|
152
|
+
var _tasks_refresh, _tasks_processing;
|
|
153
|
+
var tasks = manifest.ios.backgroundTasks;
|
|
154
|
+
if (!tasks || tasks.refresh !== void 0 && !Array.isArray(tasks.refresh) || tasks.processing !== void 0 && !Array.isArray(tasks.processing)) {
|
|
155
|
+
fail("ios.backgroundTasks refresh and processing must be arrays of identifiers");
|
|
156
|
+
}
|
|
157
|
+
var identifiers = [...(_tasks_refresh = tasks.refresh) !== null && _tasks_refresh !== void 0 ? _tasks_refresh : [], ...(_tasks_processing = tasks.processing) !== null && _tasks_processing !== void 0 ? _tasks_processing : []];
|
|
158
|
+
if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {
|
|
159
|
+
fail("ios.backgroundTasks needs distinct refresh or processing identifiers");
|
|
160
|
+
}
|
|
161
|
+
var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;
|
|
162
|
+
try {
|
|
163
|
+
for (var _iterator3 = identifiers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
164
|
+
var identifier = _step3.value;
|
|
165
|
+
if (typeof identifier !== "string" || !REVERSE_DNS.test(identifier)) {
|
|
166
|
+
fail(`ios.backgroundTasks identifier "${identifier}" must use reverse DNS notation`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
} catch (err) {
|
|
170
|
+
_didIteratorError3 = true;
|
|
171
|
+
_iteratorError3 = err;
|
|
172
|
+
} finally {
|
|
173
|
+
try {
|
|
174
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
175
|
+
_iterator3.return();
|
|
176
|
+
}
|
|
177
|
+
} finally {
|
|
178
|
+
if (_didIteratorError3) {
|
|
179
|
+
throw _iteratorError3;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
121
184
|
if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {
|
|
122
185
|
fail("splash requires source, a six-digit hex backgroundColor, and width from 1 to 288");
|
|
123
186
|
}
|
|
@@ -176,7 +239,7 @@ function validateNativeApp(manifest, platform) {
|
|
|
176
239
|
fail("audio must configure microphone or background playback");
|
|
177
240
|
}
|
|
178
241
|
}
|
|
179
|
-
if (((
|
|
242
|
+
if (((_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.faceIdUsageDescription) !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== "string" || manifest.ios.faceIdUsageDescription.trim() === "")) {
|
|
180
243
|
fail("ios.faceIdUsageDescription must be a non-empty string");
|
|
181
244
|
}
|
|
182
245
|
if (manifest.speech !== void 0 && (typeof ((_manifest_speech = manifest.speech) === null || _manifest_speech === void 0 ? void 0 : _manifest_speech.recognition) !== "string" || manifest.speech.recognition.trim() === "" || typeof manifest.speech.microphone !== "string" || manifest.speech.microphone.trim() === "")) {
|
|
@@ -194,7 +257,7 @@ function validateNativeApp(manifest, platform) {
|
|
|
194
257
|
fail("notifications.apsEnvironment needs notifications.push");
|
|
195
258
|
}
|
|
196
259
|
}
|
|
197
|
-
var accent = (
|
|
260
|
+
var accent = (_manifest_ios3 = manifest.ios) === null || _manifest_ios3 === void 0 ? void 0 : _manifest_ios3.accentColor;
|
|
198
261
|
if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {
|
|
199
262
|
fail("ios.accentColor light and dark must be six-digit hex colors");
|
|
200
263
|
}
|
|
@@ -210,10 +273,10 @@ function validateNativeApp(manifest, platform) {
|
|
|
210
273
|
}
|
|
211
274
|
}
|
|
212
275
|
if (!platform || platform === "ios") {
|
|
213
|
-
var
|
|
214
|
-
if (!((
|
|
215
|
-
var
|
|
216
|
-
fail(`ios.bundleId "${(
|
|
276
|
+
var _manifest_ios4;
|
|
277
|
+
if (!((_manifest_ios4 = manifest.ios) === null || _manifest_ios4 === void 0 ? void 0 : _manifest_ios4.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {
|
|
278
|
+
var _manifest_ios5;
|
|
279
|
+
fail(`ios.bundleId "${(_manifest_ios5 = manifest.ios) === null || _manifest_ios5 === void 0 ? void 0 : _manifest_ios5.bundleId}" must be reverse-dns`);
|
|
217
280
|
}
|
|
218
281
|
if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {
|
|
219
282
|
fail(`ios.deploymentTarget "${manifest.ios.deploymentTarget}" must look like "17.0"`);
|
|
@@ -264,10 +327,10 @@ function validateNativeApp(manifest, platform) {
|
|
|
264
327
|
if (manifest.android.shrinkResources && !manifest.android.minify) {
|
|
265
328
|
fail("android.shrinkResources needs android.minify");
|
|
266
329
|
}
|
|
267
|
-
var
|
|
330
|
+
var _iteratorNormalCompletion4 = true, _didIteratorError4 = false, _iteratorError4 = void 0;
|
|
268
331
|
try {
|
|
269
|
-
for (var
|
|
270
|
-
var link =
|
|
332
|
+
for (var _iterator4 = ((_manifest_android_appLinks = manifest.android.appLinks) !== null && _manifest_android_appLinks !== void 0 ? _manifest_android_appLinks : [])[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
333
|
+
var link = _step4.value;
|
|
271
334
|
if (!link.host || !REVERSE_DNS.test(link.host)) {
|
|
272
335
|
fail(`android.appLinks host "${link.host}" must be a domain`);
|
|
273
336
|
}
|
|
@@ -276,16 +339,16 @@ function validateNativeApp(manifest, platform) {
|
|
|
276
339
|
}
|
|
277
340
|
}
|
|
278
341
|
} catch (err) {
|
|
279
|
-
|
|
280
|
-
|
|
342
|
+
_didIteratorError4 = true;
|
|
343
|
+
_iteratorError4 = err;
|
|
281
344
|
} finally {
|
|
282
345
|
try {
|
|
283
|
-
if (!
|
|
284
|
-
|
|
346
|
+
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
347
|
+
_iterator4.return();
|
|
285
348
|
}
|
|
286
349
|
} finally {
|
|
287
|
-
if (
|
|
288
|
-
throw
|
|
350
|
+
if (_didIteratorError4) {
|
|
351
|
+
throw _iteratorError4;
|
|
289
352
|
}
|
|
290
353
|
}
|
|
291
354
|
}
|
|
@@ -312,11 +375,13 @@ function expoClientFromNativeApp(app) {
|
|
|
312
375
|
icon: (_app_icon = app.icon) === null || _app_icon === void 0 ? void 0 : _app_icon.source,
|
|
313
376
|
splash: app.splash && {
|
|
314
377
|
image: app.splash.source,
|
|
378
|
+
backgroundImage: app.splash.backgroundImage,
|
|
315
379
|
backgroundColor: app.splash.backgroundColor,
|
|
316
380
|
imageWidth: app.splash.width,
|
|
317
381
|
resizeMode: app.splash.resizeMode,
|
|
318
382
|
dark: app.splash.dark && {
|
|
319
383
|
image: app.splash.dark.source,
|
|
384
|
+
backgroundImage: app.splash.dark.backgroundImage,
|
|
320
385
|
backgroundColor: app.splash.dark.backgroundColor
|
|
321
386
|
}
|
|
322
387
|
},
|
|
@@ -48,7 +48,7 @@ function fail(message) {
|
|
|
48
48
|
throw new Error(`[one] invalid native.app: ${message}`);
|
|
49
49
|
}
|
|
50
50
|
function validateNativeApp(manifest, platform) {
|
|
51
|
-
var _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location,
|
|
51
|
+
var _manifest_ios, _manifest_ios1, _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location, _manifest_ios2, _manifest_speech, _manifest_ios3;
|
|
52
52
|
if (!manifest || typeof manifest !== "object") fail("manifest must be an object");
|
|
53
53
|
if (!manifest.name || typeof manifest.name !== "string") fail("name is required");
|
|
54
54
|
if (!TARGET_NAME.test(manifest.name)) {
|
|
@@ -118,6 +118,69 @@ function validateNativeApp(manifest, platform) {
|
|
|
118
118
|
if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {
|
|
119
119
|
fail("icon requires source and a six-digit hex backgroundColor");
|
|
120
120
|
}
|
|
121
|
+
if (((_manifest_ios = manifest.ios) === null || _manifest_ios === void 0 ? void 0 : _manifest_ios.alternateIcons) !== void 0) {
|
|
122
|
+
if (!manifest.icon) fail("ios.alternateIcons requires a primary icon");
|
|
123
|
+
var entries = Object.entries(manifest.ios.alternateIcons);
|
|
124
|
+
if (entries.length === 0) fail("ios.alternateIcons requires at least one icon");
|
|
125
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
126
|
+
try {
|
|
127
|
+
for (var _iterator2 = entries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
128
|
+
var [name1, icon] = _step2.value;
|
|
129
|
+
if (name1 === "AppIcon" || !TARGET_NAME.test(name1)) {
|
|
130
|
+
fail(`ios.alternateIcons name "${name1}" must be an identifier other than AppIcon`);
|
|
131
|
+
}
|
|
132
|
+
if (!(icon === null || icon === void 0 ? void 0 : icon.source) || !HEX_COLOR.test(icon.backgroundColor)) {
|
|
133
|
+
fail(`ios.alternateIcons.${name1} requires source and a six-digit hex backgroundColor`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
} catch (err) {
|
|
137
|
+
_didIteratorError2 = true;
|
|
138
|
+
_iteratorError2 = err;
|
|
139
|
+
} finally {
|
|
140
|
+
try {
|
|
141
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
142
|
+
_iterator2.return();
|
|
143
|
+
}
|
|
144
|
+
} finally {
|
|
145
|
+
if (_didIteratorError2) {
|
|
146
|
+
throw _iteratorError2;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (((_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.backgroundTasks) !== void 0) {
|
|
152
|
+
var _tasks_refresh, _tasks_processing;
|
|
153
|
+
var tasks = manifest.ios.backgroundTasks;
|
|
154
|
+
if (!tasks || tasks.refresh !== void 0 && !Array.isArray(tasks.refresh) || tasks.processing !== void 0 && !Array.isArray(tasks.processing)) {
|
|
155
|
+
fail("ios.backgroundTasks refresh and processing must be arrays of identifiers");
|
|
156
|
+
}
|
|
157
|
+
var identifiers = [...(_tasks_refresh = tasks.refresh) !== null && _tasks_refresh !== void 0 ? _tasks_refresh : [], ...(_tasks_processing = tasks.processing) !== null && _tasks_processing !== void 0 ? _tasks_processing : []];
|
|
158
|
+
if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {
|
|
159
|
+
fail("ios.backgroundTasks needs distinct refresh or processing identifiers");
|
|
160
|
+
}
|
|
161
|
+
var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;
|
|
162
|
+
try {
|
|
163
|
+
for (var _iterator3 = identifiers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
164
|
+
var identifier = _step3.value;
|
|
165
|
+
if (typeof identifier !== "string" || !REVERSE_DNS.test(identifier)) {
|
|
166
|
+
fail(`ios.backgroundTasks identifier "${identifier}" must use reverse DNS notation`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
} catch (err) {
|
|
170
|
+
_didIteratorError3 = true;
|
|
171
|
+
_iteratorError3 = err;
|
|
172
|
+
} finally {
|
|
173
|
+
try {
|
|
174
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
175
|
+
_iterator3.return();
|
|
176
|
+
}
|
|
177
|
+
} finally {
|
|
178
|
+
if (_didIteratorError3) {
|
|
179
|
+
throw _iteratorError3;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
121
184
|
if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {
|
|
122
185
|
fail("splash requires source, a six-digit hex backgroundColor, and width from 1 to 288");
|
|
123
186
|
}
|
|
@@ -176,7 +239,7 @@ function validateNativeApp(manifest, platform) {
|
|
|
176
239
|
fail("audio must configure microphone or background playback");
|
|
177
240
|
}
|
|
178
241
|
}
|
|
179
|
-
if (((
|
|
242
|
+
if (((_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.faceIdUsageDescription) !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== "string" || manifest.ios.faceIdUsageDescription.trim() === "")) {
|
|
180
243
|
fail("ios.faceIdUsageDescription must be a non-empty string");
|
|
181
244
|
}
|
|
182
245
|
if (manifest.speech !== void 0 && (typeof ((_manifest_speech = manifest.speech) === null || _manifest_speech === void 0 ? void 0 : _manifest_speech.recognition) !== "string" || manifest.speech.recognition.trim() === "" || typeof manifest.speech.microphone !== "string" || manifest.speech.microphone.trim() === "")) {
|
|
@@ -194,7 +257,7 @@ function validateNativeApp(manifest, platform) {
|
|
|
194
257
|
fail("notifications.apsEnvironment needs notifications.push");
|
|
195
258
|
}
|
|
196
259
|
}
|
|
197
|
-
var accent = (
|
|
260
|
+
var accent = (_manifest_ios3 = manifest.ios) === null || _manifest_ios3 === void 0 ? void 0 : _manifest_ios3.accentColor;
|
|
198
261
|
if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {
|
|
199
262
|
fail("ios.accentColor light and dark must be six-digit hex colors");
|
|
200
263
|
}
|
|
@@ -210,10 +273,10 @@ function validateNativeApp(manifest, platform) {
|
|
|
210
273
|
}
|
|
211
274
|
}
|
|
212
275
|
if (!platform || platform === "ios") {
|
|
213
|
-
var
|
|
214
|
-
if (!((
|
|
215
|
-
var
|
|
216
|
-
fail(`ios.bundleId "${(
|
|
276
|
+
var _manifest_ios4;
|
|
277
|
+
if (!((_manifest_ios4 = manifest.ios) === null || _manifest_ios4 === void 0 ? void 0 : _manifest_ios4.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {
|
|
278
|
+
var _manifest_ios5;
|
|
279
|
+
fail(`ios.bundleId "${(_manifest_ios5 = manifest.ios) === null || _manifest_ios5 === void 0 ? void 0 : _manifest_ios5.bundleId}" must be reverse-dns`);
|
|
217
280
|
}
|
|
218
281
|
if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {
|
|
219
282
|
fail(`ios.deploymentTarget "${manifest.ios.deploymentTarget}" must look like "17.0"`);
|
|
@@ -264,10 +327,10 @@ function validateNativeApp(manifest, platform) {
|
|
|
264
327
|
if (manifest.android.shrinkResources && !manifest.android.minify) {
|
|
265
328
|
fail("android.shrinkResources needs android.minify");
|
|
266
329
|
}
|
|
267
|
-
var
|
|
330
|
+
var _iteratorNormalCompletion4 = true, _didIteratorError4 = false, _iteratorError4 = void 0;
|
|
268
331
|
try {
|
|
269
|
-
for (var
|
|
270
|
-
var link =
|
|
332
|
+
for (var _iterator4 = ((_manifest_android_appLinks = manifest.android.appLinks) !== null && _manifest_android_appLinks !== void 0 ? _manifest_android_appLinks : [])[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
333
|
+
var link = _step4.value;
|
|
271
334
|
if (!link.host || !REVERSE_DNS.test(link.host)) {
|
|
272
335
|
fail(`android.appLinks host "${link.host}" must be a domain`);
|
|
273
336
|
}
|
|
@@ -276,16 +339,16 @@ function validateNativeApp(manifest, platform) {
|
|
|
276
339
|
}
|
|
277
340
|
}
|
|
278
341
|
} catch (err) {
|
|
279
|
-
|
|
280
|
-
|
|
342
|
+
_didIteratorError4 = true;
|
|
343
|
+
_iteratorError4 = err;
|
|
281
344
|
} finally {
|
|
282
345
|
try {
|
|
283
|
-
if (!
|
|
284
|
-
|
|
346
|
+
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
347
|
+
_iterator4.return();
|
|
285
348
|
}
|
|
286
349
|
} finally {
|
|
287
|
-
if (
|
|
288
|
-
throw
|
|
350
|
+
if (_didIteratorError4) {
|
|
351
|
+
throw _iteratorError4;
|
|
289
352
|
}
|
|
290
353
|
}
|
|
291
354
|
}
|
|
@@ -312,11 +375,13 @@ function expoClientFromNativeApp(app) {
|
|
|
312
375
|
icon: (_app_icon = app.icon) === null || _app_icon === void 0 ? void 0 : _app_icon.source,
|
|
313
376
|
splash: app.splash && {
|
|
314
377
|
image: app.splash.source,
|
|
378
|
+
backgroundImage: app.splash.backgroundImage,
|
|
315
379
|
backgroundColor: app.splash.backgroundColor,
|
|
316
380
|
imageWidth: app.splash.width,
|
|
317
381
|
resizeMode: app.splash.resizeMode,
|
|
318
382
|
dark: app.splash.dark && {
|
|
319
383
|
image: app.splash.dark.source,
|
|
384
|
+
backgroundImage: app.splash.dark.backgroundImage,
|
|
320
385
|
backgroundColor: app.splash.dark.backgroundColor
|
|
321
386
|
}
|
|
322
387
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeAppManifest.native.js","names":[],"sources":["cjs/nativeAppManifest.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar nativeAppManifest_exports = {};\n__export(nativeAppManifest_exports, {\n expoClientFromNativeApp: () => expoClientFromNativeApp,\n validateNativeApp: () => validateNativeApp\n});\nmodule.exports = __toCommonJS(nativeAppManifest_exports);\nvar TARGET_NAME = /^[A-Za-z][A-Za-z0-9_]*$/;\nvar SCHEME = /^[a-z][a-z0-9+.-]*$/i;\nvar VERSION = /^\\d+\\.\\d+\\.\\d+/;\nvar BUILD_NUMBER = /^[A-Za-z0-9.]+$/;\nvar REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/;\nvar DEPLOYMENT_TARGET = /^\\d+\\.\\d+$/;\nvar HEX_COLOR = /^#[\\da-f]{6}$/i;\nvar FONT_FILE = /\\.(ttf|otf)$/i;\nvar ORIENTATIONS = [\n \"portrait\",\n \"landscape\",\n \"default\"\n];\nvar USER_INTERFACE_STYLES = [\n \"light\",\n \"dark\",\n \"automatic\"\n];\nfunction fail(message) {\n throw new Error(`[one] invalid native.app: ${message}`);\n}\nfunction validateNativeApp(manifest, platform) {\n var _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location, _manifest_ios, _manifest_speech, _manifest_ios1;\n if (!manifest || typeof manifest !== \"object\") fail(\"manifest must be an object\");\n if (!manifest.name || typeof manifest.name !== \"string\") fail(\"name is required\");\n if (!TARGET_NAME.test(manifest.name)) {\n fail(`name \"${manifest.name}\" must start with a letter and contain only letters, digits, and underscore`);\n }\n var schemes = manifest.scheme === void 0 ? [] : Array.isArray(manifest.scheme) ? manifest.scheme : [\n manifest.scheme\n ];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = schemes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var scheme = _step.value;\n if (typeof scheme !== \"string\" || !SCHEME.test(scheme)) {\n fail(`scheme \"${scheme}\" must be a valid uri scheme`);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (manifest.orientation !== void 0 && !ORIENTATIONS.includes(manifest.orientation)) {\n fail(`orientation \"${manifest.orientation}\" must be ${ORIENTATIONS.join(\", \")}`);\n }\n if (manifest.userInterfaceStyle !== void 0 && !USER_INTERFACE_STYLES.includes(manifest.userInterfaceStyle)) {\n fail(`userInterfaceStyle \"${manifest.userInterfaceStyle}\" must be ${USER_INTERFACE_STYLES.join(\", \")}`);\n }\n if (manifest.fonts !== void 0) {\n var names = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = manifest.fonts[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var font = _step1.value;\n var _font_split_pop;\n if (typeof font !== \"string\" || !FONT_FILE.test(font)) {\n fail(`fonts entry \"${font}\" must be a .ttf or .otf file path`);\n }\n var name = (_font_split_pop = font.split(\"/\").pop()) !== null && _font_split_pop !== void 0 ? _font_split_pop : font;\n if (names.has(name)) fail(`fonts lists ${name} twice`);\n names.add(name);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n if (manifest.version !== void 0 && !VERSION.test(manifest.version)) {\n fail(`version \"${manifest.version}\" must start with major.minor.patch`);\n }\n if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {\n fail(\"icon requires source and a six-digit hex backgroundColor\");\n }\n if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {\n fail(\"splash requires source, a six-digit hex backgroundColor, and width from 1 to 288\");\n }\n if (((_manifest_splash = manifest.splash) === null || _manifest_splash === void 0 ? void 0 : _manifest_splash.dark) !== void 0 && !HEX_COLOR.test(manifest.splash.dark.backgroundColor)) {\n fail(\"splash.dark requires a six-digit hex backgroundColor\");\n }\n if (((_manifest_splash1 = manifest.splash) === null || _manifest_splash1 === void 0 ? void 0 : (_manifest_splash_dark = _manifest_splash1.dark) === null || _manifest_splash_dark === void 0 ? void 0 : _manifest_splash_dark.backgroundImage) !== void 0 && manifest.splash.backgroundImage === void 0) {\n fail(\"splash.dark.backgroundImage needs splash.backgroundImage for the light launch\");\n }\n if (((_manifest_splash2 = manifest.splash) === null || _manifest_splash2 === void 0 ? void 0 : _manifest_splash2.resizeMode) !== void 0 && manifest.splash.resizeMode !== \"contain\" && manifest.splash.resizeMode !== \"cover\") {\n fail(`splash.resizeMode \"${manifest.splash.resizeMode}\" must be contain or cover`);\n }\n if (((_manifest_imagePicker = manifest.imagePicker) === null || _manifest_imagePicker === void 0 ? void 0 : _manifest_imagePicker.camera) !== void 0 && (typeof manifest.imagePicker.camera !== \"string\" || manifest.imagePicker.camera.trim() === \"\")) {\n fail(\"imagePicker.camera must be a non-empty string\");\n }\n if (manifest.photoLibrary !== void 0 && (!manifest.photoLibrary || manifest.photoLibrary.addOnly === void 0 && manifest.photoLibrary.readWrite === void 0)) {\n fail(\"photoLibrary must configure addOnly or readWrite\");\n }\n if (((_manifest_photoLibrary = manifest.photoLibrary) === null || _manifest_photoLibrary === void 0 ? void 0 : _manifest_photoLibrary.addOnly) !== void 0 && (typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly must be a non-empty string\");\n }\n if (((_manifest_photoLibrary1 = manifest.photoLibrary) === null || _manifest_photoLibrary1 === void 0 ? void 0 : _manifest_photoLibrary1.readWrite) !== void 0 && (typeof manifest.photoLibrary.readWrite !== \"string\" || manifest.photoLibrary.readWrite.trim() === \"\")) {\n fail(\"photoLibrary.readWrite must be a non-empty string\");\n }\n if (manifest.contacts !== void 0 && (!manifest.contacts || typeof manifest.contacts.usage !== \"string\" || manifest.contacts.usage.trim() === \"\")) {\n fail(\"contacts.usage must be a non-empty string\");\n }\n if (manifest.calendar !== void 0) {\n if (!manifest.calendar || manifest.calendar.usage === void 0 && manifest.calendar.remindersUsage === void 0) {\n fail(\"calendar.usage or calendar.remindersUsage must be a non-empty string\");\n }\n if (manifest.calendar.usage !== void 0 && (typeof manifest.calendar.usage !== \"string\" || manifest.calendar.usage.trim() === \"\")) {\n fail(\"calendar.usage must be a non-empty string\");\n }\n if (manifest.calendar.remindersUsage !== void 0 && (typeof manifest.calendar.remindersUsage !== \"string\" || manifest.calendar.remindersUsage.trim() === \"\")) {\n fail(\"calendar.remindersUsage must be a non-empty string\");\n }\n }\n if (manifest.location !== void 0 && (!manifest.location || typeof manifest.location.whenInUse !== \"string\" || manifest.location.whenInUse.trim() === \"\")) {\n fail(\"location.whenInUse must be a non-empty string\");\n }\n if (((_manifest_location = manifest.location) === null || _manifest_location === void 0 ? void 0 : _manifest_location.background) !== void 0 && typeof manifest.location.background !== \"boolean\") {\n fail(\"location.background must be a boolean\");\n }\n if (manifest.audio !== void 0) {\n if (!manifest.audio || typeof manifest.audio !== \"object\") {\n fail(\"audio must configure microphone or background playback\");\n }\n if (manifest.audio.microphone !== void 0 && (typeof manifest.audio.microphone !== \"string\" || manifest.audio.microphone.trim() === \"\")) {\n fail(\"audio.microphone must be a non-empty string\");\n }\n if (manifest.audio.background !== void 0 && typeof manifest.audio.background !== \"boolean\") {\n fail(\"audio.background must be a boolean\");\n }\n if (manifest.audio.microphone === void 0 && manifest.audio.background !== true) {\n fail(\"audio must configure microphone or background playback\");\n }\n }\n if (((_manifest_ios = manifest.ios) === null || _manifest_ios === void 0 ? void 0 : _manifest_ios.faceIdUsageDescription) !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== \"string\" || manifest.ios.faceIdUsageDescription.trim() === \"\")) {\n fail(\"ios.faceIdUsageDescription must be a non-empty string\");\n }\n if (manifest.speech !== void 0 && (typeof ((_manifest_speech = manifest.speech) === null || _manifest_speech === void 0 ? void 0 : _manifest_speech.recognition) !== \"string\" || manifest.speech.recognition.trim() === \"\" || typeof manifest.speech.microphone !== \"string\" || manifest.speech.microphone.trim() === \"\")) {\n fail(\"speech.recognition and speech.microphone must be non-empty strings\");\n }\n if (manifest.notifications !== void 0) {\n if (typeof manifest.notifications !== \"object\" || manifest.notifications.push !== void 0 && typeof manifest.notifications.push !== \"boolean\") {\n fail(\"notifications.push must be a boolean\");\n }\n var aps = manifest.notifications.apsEnvironment;\n if (aps !== void 0 && aps !== \"development\" && aps !== \"production\") {\n fail(`notifications.apsEnvironment \"${aps}\" must be development or production`);\n }\n if (aps !== void 0 && !manifest.notifications.push) {\n fail(\"notifications.apsEnvironment needs notifications.push\");\n }\n }\n var accent = (_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.accentColor;\n if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {\n fail(\"ios.accentColor light and dark must be six-digit hex colors\");\n }\n if (manifest.pictureInPicture !== void 0 && typeof manifest.pictureInPicture !== \"boolean\") {\n fail(\"pictureInPicture must be a boolean\");\n }\n if (manifest.updates !== void 0) {\n if (typeof manifest.updates.runtimeVersion !== \"string\" || manifest.updates.runtimeVersion.trim() === \"\") {\n fail(\"updates.runtimeVersion must be a non-empty string\");\n }\n if (manifest.updates.url !== void 0 && (typeof manifest.updates.url !== \"string\" || manifest.updates.url.trim() === \"\")) {\n fail(\"updates.url must be a non-empty string\");\n }\n }\n if (!platform || platform === \"ios\") {\n var _manifest_ios2;\n if (!((_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {\n var _manifest_ios3;\n fail(`ios.bundleId \"${(_manifest_ios3 = manifest.ios) === null || _manifest_ios3 === void 0 ? void 0 : _manifest_ios3.bundleId}\" must be reverse-dns`);\n }\n if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {\n fail(`ios.deploymentTarget \"${manifest.ios.deploymentTarget}\" must look like \"17.0\"`);\n }\n if (manifest.ios.buildNumber !== void 0 && !BUILD_NUMBER.test(manifest.ios.buildNumber)) {\n fail(`ios.buildNumber \"${manifest.ios.buildNumber}\" must contain only letters, digits, and dots`);\n }\n var widgets = manifest.ios.widgets;\n if (widgets) {\n var _widgets_displayName, _widgets_description;\n if (!manifest.ios.deploymentTarget || Number(manifest.ios.deploymentTarget) < 17) {\n fail(\"ios.widgets requires ios.deploymentTarget of 17.0 or newer\");\n }\n if (!/^group\\.[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/.test(widgets.appGroup)) {\n fail(\"ios.widgets.appGroup must be a reverse-dns App Group beginning with group.\");\n }\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(widgets.kind)) {\n fail(\"ios.widgets.kind must be a non-empty WidgetKit kind\");\n }\n if (!((_widgets_displayName = widgets.displayName) === null || _widgets_displayName === void 0 ? void 0 : _widgets_displayName.trim()) || !((_widgets_description = widgets.description) === null || _widgets_description === void 0 ? void 0 : _widgets_description.trim())) {\n fail(\"ios.widgets.displayName and description must be non-empty strings\");\n }\n if (widgets.pushNotifications !== void 0 && typeof widgets.pushNotifications !== \"boolean\") {\n fail(\"ios.widgets.pushNotifications must be a boolean\");\n }\n }\n }\n if (!platform || platform === \"android\") {\n var _manifest_android_appLinks;\n var _manifest_android;\n if (!((_manifest_android = manifest.android) === null || _manifest_android === void 0 ? void 0 : _manifest_android.applicationId) || !REVERSE_DNS.test(manifest.android.applicationId)) {\n var _manifest_android1;\n fail(`android.applicationId \"${(_manifest_android1 = manifest.android) === null || _manifest_android1 === void 0 ? void 0 : _manifest_android1.applicationId}\" must be reverse-dns`);\n }\n if (manifest.android.minSdk !== void 0 && (!Number.isInteger(manifest.android.minSdk) || manifest.android.minSdk < 21 || manifest.android.minSdk > 36)) {\n fail(`android.minSdk \"${manifest.android.minSdk}\" must be an integer from 21 to 36`);\n }\n if (manifest.android.versionCode !== void 0 && (!Number.isInteger(manifest.android.versionCode) || manifest.android.versionCode < 1)) {\n fail(`android.versionCode \"${manifest.android.versionCode}\" must be a positive integer`);\n }\n for (var _i = 0, _iter = [\n \"targetSdk\",\n \"compileSdk\"\n ]; _i < _iter.length; _i++) {\n var key = _iter[_i];\n var value = manifest.android[key];\n if (value !== void 0 && (!Number.isInteger(value) || value < 21)) {\n fail(`android.${key} \"${value}\" must be an api level integer`);\n }\n }\n if (manifest.android.shrinkResources && !manifest.android.minify) {\n fail(\"android.shrinkResources needs android.minify\");\n }\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = ((_manifest_android_appLinks = manifest.android.appLinks) !== null && _manifest_android_appLinks !== void 0 ? _manifest_android_appLinks : [])[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var link = _step2.value;\n if (!link.host || !REVERSE_DNS.test(link.host)) {\n fail(`android.appLinks host \"${link.host}\" must be a domain`);\n }\n if (link.pathPrefix !== void 0 && !link.pathPrefix.startsWith(\"/\")) {\n fail(`android.appLinks pathPrefix \"${link.pathPrefix}\" must start with /`);\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n var adaptiveIcon = manifest.android.adaptiveIcon;\n if (adaptiveIcon !== void 0 && (!adaptiveIcon.foreground || adaptiveIcon.backgroundColor !== void 0 && !HEX_COLOR.test(adaptiveIcon.backgroundColor))) {\n fail(\"android.adaptiveIcon requires foreground, and backgroundColor must be six-digit hex\");\n }\n if (manifest.android.googleMapsApiKey !== void 0 && (typeof manifest.android.googleMapsApiKey !== \"string\" || manifest.android.googleMapsApiKey.trim() === \"\")) {\n fail(\"android.googleMapsApiKey must be a non-empty string\");\n }\n }\n return manifest;\n}\nfunction expoClientFromNativeApp(app) {\n var _app_displayName, _app_userInterfaceStyle;\n var _app_icon, _app_fonts;\n return {\n name: (_app_displayName = app.displayName) !== null && _app_displayName !== void 0 ? _app_displayName : app.name,\n slug: app.name,\n scheme: app.scheme,\n version: app.version,\n orientation: app.orientation,\n // an expo config without the key means light, while prebuild writes no\n // UIUserInterfaceStyle for an unset style and the app follows the system,\n // so the manifest states the style the built app has.\n userInterfaceStyle: (_app_userInterfaceStyle = app.userInterfaceStyle) !== null && _app_userInterfaceStyle !== void 0 ? _app_userInterfaceStyle : \"automatic\",\n icon: (_app_icon = app.icon) === null || _app_icon === void 0 ? void 0 : _app_icon.source,\n splash: app.splash && {\n image: app.splash.source,\n backgroundColor: app.splash.backgroundColor,\n imageWidth: app.splash.width,\n resizeMode: app.splash.resizeMode,\n dark: app.splash.dark && {\n image: app.splash.dark.source,\n backgroundColor: app.splash.dark.backgroundColor\n }\n },\n plugins: ((_app_fonts = app.fonts) === null || _app_fonts === void 0 ? void 0 : _app_fonts.length) ? [\n [\n \"expo-font\",\n {\n fonts: app.fonts\n }\n ]\n ] : void 0,\n ios: app.ios && {\n bundleIdentifier: app.ios.bundleId,\n buildNumber: app.ios.buildNumber,\n supportsTablet: app.ios.tablet,\n associatedDomains: app.ios.associatedDomains,\n usesAppleSignIn: app.ios.usesAppleSignIn,\n googleServicesFile: app.ios.googleServicesFile,\n infoPlist: app.ios.infoPlist,\n entitlements: app.ios.entitlements\n },\n android: app.android && {\n package: app.android.applicationId,\n versionCode: app.android.versionCode,\n permissions: app.android.permissions,\n blockedPermissions: app.android.blockedPermissions,\n googleServicesFile: app.android.googleServicesFile,\n adaptiveIcon: app.android.adaptiveIcon && {\n foregroundImage: app.android.adaptiveIcon.foreground,\n backgroundImage: app.android.adaptiveIcon.background,\n backgroundColor: app.android.adaptiveIcon.backgroundColor,\n monochromeImage: app.android.adaptiveIcon.monochrome\n }\n }\n };\n}\n//# sourceMappingURL=nativeAppManifest.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nativeAppManifest.native.js","names":[],"sources":["cjs/nativeAppManifest.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar nativeAppManifest_exports = {};\n__export(nativeAppManifest_exports, {\n expoClientFromNativeApp: () => expoClientFromNativeApp,\n validateNativeApp: () => validateNativeApp\n});\nmodule.exports = __toCommonJS(nativeAppManifest_exports);\nvar TARGET_NAME = /^[A-Za-z][A-Za-z0-9_]*$/;\nvar SCHEME = /^[a-z][a-z0-9+.-]*$/i;\nvar VERSION = /^\\d+\\.\\d+\\.\\d+/;\nvar BUILD_NUMBER = /^[A-Za-z0-9.]+$/;\nvar REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/;\nvar DEPLOYMENT_TARGET = /^\\d+\\.\\d+$/;\nvar HEX_COLOR = /^#[\\da-f]{6}$/i;\nvar FONT_FILE = /\\.(ttf|otf)$/i;\nvar ORIENTATIONS = [\n \"portrait\",\n \"landscape\",\n \"default\"\n];\nvar USER_INTERFACE_STYLES = [\n \"light\",\n \"dark\",\n \"automatic\"\n];\nfunction fail(message) {\n throw new Error(`[one] invalid native.app: ${message}`);\n}\nfunction validateNativeApp(manifest, platform) {\n var _manifest_ios, _manifest_ios1, _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location, _manifest_ios2, _manifest_speech, _manifest_ios3;\n if (!manifest || typeof manifest !== \"object\") fail(\"manifest must be an object\");\n if (!manifest.name || typeof manifest.name !== \"string\") fail(\"name is required\");\n if (!TARGET_NAME.test(manifest.name)) {\n fail(`name \"${manifest.name}\" must start with a letter and contain only letters, digits, and underscore`);\n }\n var schemes = manifest.scheme === void 0 ? [] : Array.isArray(manifest.scheme) ? manifest.scheme : [\n manifest.scheme\n ];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = schemes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var scheme = _step.value;\n if (typeof scheme !== \"string\" || !SCHEME.test(scheme)) {\n fail(`scheme \"${scheme}\" must be a valid uri scheme`);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (manifest.orientation !== void 0 && !ORIENTATIONS.includes(manifest.orientation)) {\n fail(`orientation \"${manifest.orientation}\" must be ${ORIENTATIONS.join(\", \")}`);\n }\n if (manifest.userInterfaceStyle !== void 0 && !USER_INTERFACE_STYLES.includes(manifest.userInterfaceStyle)) {\n fail(`userInterfaceStyle \"${manifest.userInterfaceStyle}\" must be ${USER_INTERFACE_STYLES.join(\", \")}`);\n }\n if (manifest.fonts !== void 0) {\n var names = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = manifest.fonts[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var font = _step1.value;\n var _font_split_pop;\n if (typeof font !== \"string\" || !FONT_FILE.test(font)) {\n fail(`fonts entry \"${font}\" must be a .ttf or .otf file path`);\n }\n var name = (_font_split_pop = font.split(\"/\").pop()) !== null && _font_split_pop !== void 0 ? _font_split_pop : font;\n if (names.has(name)) fail(`fonts lists ${name} twice`);\n names.add(name);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n if (manifest.version !== void 0 && !VERSION.test(manifest.version)) {\n fail(`version \"${manifest.version}\" must start with major.minor.patch`);\n }\n if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {\n fail(\"icon requires source and a six-digit hex backgroundColor\");\n }\n if (((_manifest_ios = manifest.ios) === null || _manifest_ios === void 0 ? void 0 : _manifest_ios.alternateIcons) !== void 0) {\n if (!manifest.icon) fail(\"ios.alternateIcons requires a primary icon\");\n var entries = Object.entries(manifest.ios.alternateIcons);\n if (entries.length === 0) fail(\"ios.alternateIcons requires at least one icon\");\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = entries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var [name1, icon] = _step2.value;\n if (name1 === \"AppIcon\" || !TARGET_NAME.test(name1)) {\n fail(`ios.alternateIcons name \"${name1}\" must be an identifier other than AppIcon`);\n }\n if (!(icon === null || icon === void 0 ? void 0 : icon.source) || !HEX_COLOR.test(icon.backgroundColor)) {\n fail(`ios.alternateIcons.${name1} requires source and a six-digit hex backgroundColor`);\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n if (((_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.backgroundTasks) !== void 0) {\n var _tasks_refresh, _tasks_processing;\n var tasks = manifest.ios.backgroundTasks;\n if (!tasks || tasks.refresh !== void 0 && !Array.isArray(tasks.refresh) || tasks.processing !== void 0 && !Array.isArray(tasks.processing)) {\n fail(\"ios.backgroundTasks refresh and processing must be arrays of identifiers\");\n }\n var identifiers = [\n ...(_tasks_refresh = tasks.refresh) !== null && _tasks_refresh !== void 0 ? _tasks_refresh : [],\n ...(_tasks_processing = tasks.processing) !== null && _tasks_processing !== void 0 ? _tasks_processing : []\n ];\n if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {\n fail(\"ios.backgroundTasks needs distinct refresh or processing identifiers\");\n }\n var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;\n try {\n for (var _iterator3 = identifiers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var identifier = _step3.value;\n if (typeof identifier !== \"string\" || !REVERSE_DNS.test(identifier)) {\n fail(`ios.backgroundTasks identifier \"${identifier}\" must use reverse DNS notation`);\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return != null) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {\n fail(\"splash requires source, a six-digit hex backgroundColor, and width from 1 to 288\");\n }\n if (((_manifest_splash = manifest.splash) === null || _manifest_splash === void 0 ? void 0 : _manifest_splash.dark) !== void 0 && !HEX_COLOR.test(manifest.splash.dark.backgroundColor)) {\n fail(\"splash.dark requires a six-digit hex backgroundColor\");\n }\n if (((_manifest_splash1 = manifest.splash) === null || _manifest_splash1 === void 0 ? void 0 : (_manifest_splash_dark = _manifest_splash1.dark) === null || _manifest_splash_dark === void 0 ? void 0 : _manifest_splash_dark.backgroundImage) !== void 0 && manifest.splash.backgroundImage === void 0) {\n fail(\"splash.dark.backgroundImage needs splash.backgroundImage for the light launch\");\n }\n if (((_manifest_splash2 = manifest.splash) === null || _manifest_splash2 === void 0 ? void 0 : _manifest_splash2.resizeMode) !== void 0 && manifest.splash.resizeMode !== \"contain\" && manifest.splash.resizeMode !== \"cover\") {\n fail(`splash.resizeMode \"${manifest.splash.resizeMode}\" must be contain or cover`);\n }\n if (((_manifest_imagePicker = manifest.imagePicker) === null || _manifest_imagePicker === void 0 ? void 0 : _manifest_imagePicker.camera) !== void 0 && (typeof manifest.imagePicker.camera !== \"string\" || manifest.imagePicker.camera.trim() === \"\")) {\n fail(\"imagePicker.camera must be a non-empty string\");\n }\n if (manifest.photoLibrary !== void 0 && (!manifest.photoLibrary || manifest.photoLibrary.addOnly === void 0 && manifest.photoLibrary.readWrite === void 0)) {\n fail(\"photoLibrary must configure addOnly or readWrite\");\n }\n if (((_manifest_photoLibrary = manifest.photoLibrary) === null || _manifest_photoLibrary === void 0 ? void 0 : _manifest_photoLibrary.addOnly) !== void 0 && (typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly must be a non-empty string\");\n }\n if (((_manifest_photoLibrary1 = manifest.photoLibrary) === null || _manifest_photoLibrary1 === void 0 ? void 0 : _manifest_photoLibrary1.readWrite) !== void 0 && (typeof manifest.photoLibrary.readWrite !== \"string\" || manifest.photoLibrary.readWrite.trim() === \"\")) {\n fail(\"photoLibrary.readWrite must be a non-empty string\");\n }\n if (manifest.contacts !== void 0 && (!manifest.contacts || typeof manifest.contacts.usage !== \"string\" || manifest.contacts.usage.trim() === \"\")) {\n fail(\"contacts.usage must be a non-empty string\");\n }\n if (manifest.calendar !== void 0) {\n if (!manifest.calendar || manifest.calendar.usage === void 0 && manifest.calendar.remindersUsage === void 0) {\n fail(\"calendar.usage or calendar.remindersUsage must be a non-empty string\");\n }\n if (manifest.calendar.usage !== void 0 && (typeof manifest.calendar.usage !== \"string\" || manifest.calendar.usage.trim() === \"\")) {\n fail(\"calendar.usage must be a non-empty string\");\n }\n if (manifest.calendar.remindersUsage !== void 0 && (typeof manifest.calendar.remindersUsage !== \"string\" || manifest.calendar.remindersUsage.trim() === \"\")) {\n fail(\"calendar.remindersUsage must be a non-empty string\");\n }\n }\n if (manifest.location !== void 0 && (!manifest.location || typeof manifest.location.whenInUse !== \"string\" || manifest.location.whenInUse.trim() === \"\")) {\n fail(\"location.whenInUse must be a non-empty string\");\n }\n if (((_manifest_location = manifest.location) === null || _manifest_location === void 0 ? void 0 : _manifest_location.background) !== void 0 && typeof manifest.location.background !== \"boolean\") {\n fail(\"location.background must be a boolean\");\n }\n if (manifest.audio !== void 0) {\n if (!manifest.audio || typeof manifest.audio !== \"object\") {\n fail(\"audio must configure microphone or background playback\");\n }\n if (manifest.audio.microphone !== void 0 && (typeof manifest.audio.microphone !== \"string\" || manifest.audio.microphone.trim() === \"\")) {\n fail(\"audio.microphone must be a non-empty string\");\n }\n if (manifest.audio.background !== void 0 && typeof manifest.audio.background !== \"boolean\") {\n fail(\"audio.background must be a boolean\");\n }\n if (manifest.audio.microphone === void 0 && manifest.audio.background !== true) {\n fail(\"audio must configure microphone or background playback\");\n }\n }\n if (((_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.faceIdUsageDescription) !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== \"string\" || manifest.ios.faceIdUsageDescription.trim() === \"\")) {\n fail(\"ios.faceIdUsageDescription must be a non-empty string\");\n }\n if (manifest.speech !== void 0 && (typeof ((_manifest_speech = manifest.speech) === null || _manifest_speech === void 0 ? void 0 : _manifest_speech.recognition) !== \"string\" || manifest.speech.recognition.trim() === \"\" || typeof manifest.speech.microphone !== \"string\" || manifest.speech.microphone.trim() === \"\")) {\n fail(\"speech.recognition and speech.microphone must be non-empty strings\");\n }\n if (manifest.notifications !== void 0) {\n if (typeof manifest.notifications !== \"object\" || manifest.notifications.push !== void 0 && typeof manifest.notifications.push !== \"boolean\") {\n fail(\"notifications.push must be a boolean\");\n }\n var aps = manifest.notifications.apsEnvironment;\n if (aps !== void 0 && aps !== \"development\" && aps !== \"production\") {\n fail(`notifications.apsEnvironment \"${aps}\" must be development or production`);\n }\n if (aps !== void 0 && !manifest.notifications.push) {\n fail(\"notifications.apsEnvironment needs notifications.push\");\n }\n }\n var accent = (_manifest_ios3 = manifest.ios) === null || _manifest_ios3 === void 0 ? void 0 : _manifest_ios3.accentColor;\n if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {\n fail(\"ios.accentColor light and dark must be six-digit hex colors\");\n }\n if (manifest.pictureInPicture !== void 0 && typeof manifest.pictureInPicture !== \"boolean\") {\n fail(\"pictureInPicture must be a boolean\");\n }\n if (manifest.updates !== void 0) {\n if (typeof manifest.updates.runtimeVersion !== \"string\" || manifest.updates.runtimeVersion.trim() === \"\") {\n fail(\"updates.runtimeVersion must be a non-empty string\");\n }\n if (manifest.updates.url !== void 0 && (typeof manifest.updates.url !== \"string\" || manifest.updates.url.trim() === \"\")) {\n fail(\"updates.url must be a non-empty string\");\n }\n }\n if (!platform || platform === \"ios\") {\n var _manifest_ios4;\n if (!((_manifest_ios4 = manifest.ios) === null || _manifest_ios4 === void 0 ? void 0 : _manifest_ios4.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {\n var _manifest_ios5;\n fail(`ios.bundleId \"${(_manifest_ios5 = manifest.ios) === null || _manifest_ios5 === void 0 ? void 0 : _manifest_ios5.bundleId}\" must be reverse-dns`);\n }\n if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {\n fail(`ios.deploymentTarget \"${manifest.ios.deploymentTarget}\" must look like \"17.0\"`);\n }\n if (manifest.ios.buildNumber !== void 0 && !BUILD_NUMBER.test(manifest.ios.buildNumber)) {\n fail(`ios.buildNumber \"${manifest.ios.buildNumber}\" must contain only letters, digits, and dots`);\n }\n var widgets = manifest.ios.widgets;\n if (widgets) {\n var _widgets_displayName, _widgets_description;\n if (!manifest.ios.deploymentTarget || Number(manifest.ios.deploymentTarget) < 17) {\n fail(\"ios.widgets requires ios.deploymentTarget of 17.0 or newer\");\n }\n if (!/^group\\.[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/.test(widgets.appGroup)) {\n fail(\"ios.widgets.appGroup must be a reverse-dns App Group beginning with group.\");\n }\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(widgets.kind)) {\n fail(\"ios.widgets.kind must be a non-empty WidgetKit kind\");\n }\n if (!((_widgets_displayName = widgets.displayName) === null || _widgets_displayName === void 0 ? void 0 : _widgets_displayName.trim()) || !((_widgets_description = widgets.description) === null || _widgets_description === void 0 ? void 0 : _widgets_description.trim())) {\n fail(\"ios.widgets.displayName and description must be non-empty strings\");\n }\n if (widgets.pushNotifications !== void 0 && typeof widgets.pushNotifications !== \"boolean\") {\n fail(\"ios.widgets.pushNotifications must be a boolean\");\n }\n }\n }\n if (!platform || platform === \"android\") {\n var _manifest_android_appLinks;\n var _manifest_android;\n if (!((_manifest_android = manifest.android) === null || _manifest_android === void 0 ? void 0 : _manifest_android.applicationId) || !REVERSE_DNS.test(manifest.android.applicationId)) {\n var _manifest_android1;\n fail(`android.applicationId \"${(_manifest_android1 = manifest.android) === null || _manifest_android1 === void 0 ? void 0 : _manifest_android1.applicationId}\" must be reverse-dns`);\n }\n if (manifest.android.minSdk !== void 0 && (!Number.isInteger(manifest.android.minSdk) || manifest.android.minSdk < 21 || manifest.android.minSdk > 36)) {\n fail(`android.minSdk \"${manifest.android.minSdk}\" must be an integer from 21 to 36`);\n }\n if (manifest.android.versionCode !== void 0 && (!Number.isInteger(manifest.android.versionCode) || manifest.android.versionCode < 1)) {\n fail(`android.versionCode \"${manifest.android.versionCode}\" must be a positive integer`);\n }\n for (var _i = 0, _iter = [\n \"targetSdk\",\n \"compileSdk\"\n ]; _i < _iter.length; _i++) {\n var key = _iter[_i];\n var value = manifest.android[key];\n if (value !== void 0 && (!Number.isInteger(value) || value < 21)) {\n fail(`android.${key} \"${value}\" must be an api level integer`);\n }\n }\n if (manifest.android.shrinkResources && !manifest.android.minify) {\n fail(\"android.shrinkResources needs android.minify\");\n }\n var _iteratorNormalCompletion4 = true, _didIteratorError4 = false, _iteratorError4 = void 0;\n try {\n for (var _iterator4 = ((_manifest_android_appLinks = manifest.android.appLinks) !== null && _manifest_android_appLinks !== void 0 ? _manifest_android_appLinks : [])[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var link = _step4.value;\n if (!link.host || !REVERSE_DNS.test(link.host)) {\n fail(`android.appLinks host \"${link.host}\" must be a domain`);\n }\n if (link.pathPrefix !== void 0 && !link.pathPrefix.startsWith(\"/\")) {\n fail(`android.appLinks pathPrefix \"${link.pathPrefix}\" must start with /`);\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return != null) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n var adaptiveIcon = manifest.android.adaptiveIcon;\n if (adaptiveIcon !== void 0 && (!adaptiveIcon.foreground || adaptiveIcon.backgroundColor !== void 0 && !HEX_COLOR.test(adaptiveIcon.backgroundColor))) {\n fail(\"android.adaptiveIcon requires foreground, and backgroundColor must be six-digit hex\");\n }\n if (manifest.android.googleMapsApiKey !== void 0 && (typeof manifest.android.googleMapsApiKey !== \"string\" || manifest.android.googleMapsApiKey.trim() === \"\")) {\n fail(\"android.googleMapsApiKey must be a non-empty string\");\n }\n }\n return manifest;\n}\nfunction expoClientFromNativeApp(app) {\n var _app_displayName, _app_userInterfaceStyle;\n var _app_icon, _app_fonts;\n return {\n name: (_app_displayName = app.displayName) !== null && _app_displayName !== void 0 ? _app_displayName : app.name,\n slug: app.name,\n scheme: app.scheme,\n version: app.version,\n orientation: app.orientation,\n // an expo config without the key means light, while prebuild writes no\n // UIUserInterfaceStyle for an unset style and the app follows the system,\n // so the manifest states the style the built app has.\n userInterfaceStyle: (_app_userInterfaceStyle = app.userInterfaceStyle) !== null && _app_userInterfaceStyle !== void 0 ? _app_userInterfaceStyle : \"automatic\",\n icon: (_app_icon = app.icon) === null || _app_icon === void 0 ? void 0 : _app_icon.source,\n splash: app.splash && {\n image: app.splash.source,\n backgroundImage: app.splash.backgroundImage,\n backgroundColor: app.splash.backgroundColor,\n imageWidth: app.splash.width,\n resizeMode: app.splash.resizeMode,\n dark: app.splash.dark && {\n image: app.splash.dark.source,\n backgroundImage: app.splash.dark.backgroundImage,\n backgroundColor: app.splash.dark.backgroundColor\n }\n },\n plugins: ((_app_fonts = app.fonts) === null || _app_fonts === void 0 ? void 0 : _app_fonts.length) ? [\n [\n \"expo-font\",\n {\n fonts: app.fonts\n }\n ]\n ] : void 0,\n ios: app.ios && {\n bundleIdentifier: app.ios.bundleId,\n buildNumber: app.ios.buildNumber,\n supportsTablet: app.ios.tablet,\n associatedDomains: app.ios.associatedDomains,\n usesAppleSignIn: app.ios.usesAppleSignIn,\n googleServicesFile: app.ios.googleServicesFile,\n infoPlist: app.ios.infoPlist,\n entitlements: app.ios.entitlements\n },\n android: app.android && {\n package: app.android.applicationId,\n versionCode: app.android.versionCode,\n permissions: app.android.permissions,\n blockedPermissions: app.android.blockedPermissions,\n googleServicesFile: app.android.googleServicesFile,\n adaptiveIcon: app.android.adaptiveIcon && {\n foregroundImage: app.android.adaptiveIcon.foreground,\n backgroundImage: app.android.adaptiveIcon.background,\n backgroundColor: app.android.adaptiveIcon.backgroundColor,\n monochromeImage: app.android.adaptiveIcon.monochrome\n }\n }\n };\n}\n//# sourceMappingURL=nativeAppManifest.js.map\n"],"mappings":"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"}
|
|
@@ -54,6 +54,34 @@ function validateNativeApp(manifest, platform) {
|
|
|
54
54
|
if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {
|
|
55
55
|
fail("icon requires source and a six-digit hex backgroundColor");
|
|
56
56
|
}
|
|
57
|
+
if (manifest.ios?.alternateIcons !== void 0) {
|
|
58
|
+
if (!manifest.icon) fail("ios.alternateIcons requires a primary icon");
|
|
59
|
+
const entries = Object.entries(manifest.ios.alternateIcons);
|
|
60
|
+
if (entries.length === 0) fail("ios.alternateIcons requires at least one icon");
|
|
61
|
+
for (const [name, icon] of entries) {
|
|
62
|
+
if (name === "AppIcon" || !TARGET_NAME.test(name)) {
|
|
63
|
+
fail(`ios.alternateIcons name "${name}" must be an identifier other than AppIcon`);
|
|
64
|
+
}
|
|
65
|
+
if (!icon?.source || !HEX_COLOR.test(icon.backgroundColor)) {
|
|
66
|
+
fail(`ios.alternateIcons.${name} requires source and a six-digit hex backgroundColor`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (manifest.ios?.backgroundTasks !== void 0) {
|
|
71
|
+
const tasks = manifest.ios.backgroundTasks;
|
|
72
|
+
if (!tasks || tasks.refresh !== void 0 && !Array.isArray(tasks.refresh) || tasks.processing !== void 0 && !Array.isArray(tasks.processing)) {
|
|
73
|
+
fail("ios.backgroundTasks refresh and processing must be arrays of identifiers");
|
|
74
|
+
}
|
|
75
|
+
const identifiers = [...tasks.refresh ?? [], ...tasks.processing ?? []];
|
|
76
|
+
if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {
|
|
77
|
+
fail("ios.backgroundTasks needs distinct refresh or processing identifiers");
|
|
78
|
+
}
|
|
79
|
+
for (const identifier of identifiers) {
|
|
80
|
+
if (typeof identifier !== "string" || !REVERSE_DNS.test(identifier)) {
|
|
81
|
+
fail(`ios.backgroundTasks identifier "${identifier}" must use reverse DNS notation`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
57
85
|
if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {
|
|
58
86
|
fail("splash requires source, a six-digit hex backgroundColor, and width from 1 to 288");
|
|
59
87
|
}
|
|
@@ -222,11 +250,13 @@ function expoClientFromNativeApp(app) {
|
|
|
222
250
|
icon: app.icon?.source,
|
|
223
251
|
splash: app.splash && {
|
|
224
252
|
image: app.splash.source,
|
|
253
|
+
backgroundImage: app.splash.backgroundImage,
|
|
225
254
|
backgroundColor: app.splash.backgroundColor,
|
|
226
255
|
imageWidth: app.splash.width,
|
|
227
256
|
resizeMode: app.splash.resizeMode,
|
|
228
257
|
dark: app.splash.dark && {
|
|
229
258
|
image: app.splash.dark.source,
|
|
259
|
+
backgroundImage: app.splash.dark.backgroundImage,
|
|
230
260
|
backgroundColor: app.splash.dark.backgroundColor
|
|
231
261
|
}
|
|
232
262
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeAppManifest.js","names":[],"sources":["esm/nativeAppManifest.js"],"sourcesContent":["const TARGET_NAME = /^[A-Za-z][A-Za-z0-9_]*$/;\nconst SCHEME = /^[a-z][a-z0-9+.-]*$/i;\nconst VERSION = /^\\d+\\.\\d+\\.\\d+/;\nconst BUILD_NUMBER = /^[A-Za-z0-9.]+$/;\nconst REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/;\nconst DEPLOYMENT_TARGET = /^\\d+\\.\\d+$/;\nconst HEX_COLOR = /^#[\\da-f]{6}$/i;\nconst FONT_FILE = /\\.(ttf|otf)$/i;\nconst ORIENTATIONS = [\"portrait\", \"landscape\", \"default\"];\nconst USER_INTERFACE_STYLES = [\"light\", \"dark\", \"automatic\"];\nfunction fail(message) {\n throw new Error(`[one] invalid native.app: ${message}`);\n}\nfunction validateNativeApp(manifest, platform) {\n if (!manifest || typeof manifest !== \"object\") fail(\"manifest must be an object\");\n if (!manifest.name || typeof manifest.name !== \"string\") fail(\"name is required\");\n if (!TARGET_NAME.test(manifest.name)) {\n fail(\n `name \"${manifest.name}\" must start with a letter and contain only letters, digits, and underscore`\n );\n }\n const schemes = manifest.scheme === void 0 ? [] : Array.isArray(manifest.scheme) ? manifest.scheme : [manifest.scheme];\n for (const scheme of schemes) {\n if (typeof scheme !== \"string\" || !SCHEME.test(scheme)) {\n fail(`scheme \"${scheme}\" must be a valid uri scheme`);\n }\n }\n if (manifest.orientation !== void 0 && !ORIENTATIONS.includes(manifest.orientation)) {\n fail(`orientation \"${manifest.orientation}\" must be ${ORIENTATIONS.join(\", \")}`);\n }\n if (manifest.userInterfaceStyle !== void 0 && !USER_INTERFACE_STYLES.includes(manifest.userInterfaceStyle)) {\n fail(\n `userInterfaceStyle \"${manifest.userInterfaceStyle}\" must be ${USER_INTERFACE_STYLES.join(\", \")}`\n );\n }\n if (manifest.fonts !== void 0) {\n const names = /* @__PURE__ */ new Set();\n for (const font of manifest.fonts) {\n if (typeof font !== \"string\" || !FONT_FILE.test(font)) {\n fail(`fonts entry \"${font}\" must be a .ttf or .otf file path`);\n }\n const name = font.split(\"/\").pop() ?? font;\n if (names.has(name)) fail(`fonts lists ${name} twice`);\n names.add(name);\n }\n }\n if (manifest.version !== void 0 && !VERSION.test(manifest.version)) {\n fail(`version \"${manifest.version}\" must start with major.minor.patch`);\n }\n if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {\n fail(\"icon requires source and a six-digit hex backgroundColor\");\n }\n if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {\n fail(\n \"splash requires source, a six-digit hex backgroundColor, and width from 1 to 288\"\n );\n }\n if (manifest.splash?.dark !== void 0 && !HEX_COLOR.test(manifest.splash.dark.backgroundColor)) {\n fail(\"splash.dark requires a six-digit hex backgroundColor\");\n }\n if (manifest.splash?.dark?.backgroundImage !== void 0 && manifest.splash.backgroundImage === void 0) {\n fail(\"splash.dark.backgroundImage needs splash.backgroundImage for the light launch\");\n }\n if (manifest.splash?.resizeMode !== void 0 && manifest.splash.resizeMode !== \"contain\" && manifest.splash.resizeMode !== \"cover\") {\n fail(`splash.resizeMode \"${manifest.splash.resizeMode}\" must be contain or cover`);\n }\n if (manifest.imagePicker?.camera !== void 0 && (typeof manifest.imagePicker.camera !== \"string\" || manifest.imagePicker.camera.trim() === \"\")) {\n fail(\"imagePicker.camera must be a non-empty string\");\n }\n if (manifest.photoLibrary !== void 0 && (!manifest.photoLibrary || manifest.photoLibrary.addOnly === void 0 && manifest.photoLibrary.readWrite === void 0)) {\n fail(\"photoLibrary must configure addOnly or readWrite\");\n }\n if (manifest.photoLibrary?.addOnly !== void 0 && (typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly must be a non-empty string\");\n }\n if (manifest.photoLibrary?.readWrite !== void 0 && (typeof manifest.photoLibrary.readWrite !== \"string\" || manifest.photoLibrary.readWrite.trim() === \"\")) {\n fail(\"photoLibrary.readWrite must be a non-empty string\");\n }\n if (manifest.contacts !== void 0 && (!manifest.contacts || typeof manifest.contacts.usage !== \"string\" || manifest.contacts.usage.trim() === \"\")) {\n fail(\"contacts.usage must be a non-empty string\");\n }\n if (manifest.calendar !== void 0) {\n if (!manifest.calendar || manifest.calendar.usage === void 0 && manifest.calendar.remindersUsage === void 0) {\n fail(\"calendar.usage or calendar.remindersUsage must be a non-empty string\");\n }\n if (manifest.calendar.usage !== void 0 && (typeof manifest.calendar.usage !== \"string\" || manifest.calendar.usage.trim() === \"\")) {\n fail(\"calendar.usage must be a non-empty string\");\n }\n if (manifest.calendar.remindersUsage !== void 0 && (typeof manifest.calendar.remindersUsage !== \"string\" || manifest.calendar.remindersUsage.trim() === \"\")) {\n fail(\"calendar.remindersUsage must be a non-empty string\");\n }\n }\n if (manifest.location !== void 0 && (!manifest.location || typeof manifest.location.whenInUse !== \"string\" || manifest.location.whenInUse.trim() === \"\")) {\n fail(\"location.whenInUse must be a non-empty string\");\n }\n if (manifest.location?.background !== void 0 && typeof manifest.location.background !== \"boolean\") {\n fail(\"location.background must be a boolean\");\n }\n if (manifest.audio !== void 0) {\n if (!manifest.audio || typeof manifest.audio !== \"object\") {\n fail(\"audio must configure microphone or background playback\");\n }\n if (manifest.audio.microphone !== void 0 && (typeof manifest.audio.microphone !== \"string\" || manifest.audio.microphone.trim() === \"\")) {\n fail(\"audio.microphone must be a non-empty string\");\n }\n if (manifest.audio.background !== void 0 && typeof manifest.audio.background !== \"boolean\") {\n fail(\"audio.background must be a boolean\");\n }\n if (manifest.audio.microphone === void 0 && manifest.audio.background !== true) {\n fail(\"audio must configure microphone or background playback\");\n }\n }\n if (manifest.ios?.faceIdUsageDescription !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== \"string\" || manifest.ios.faceIdUsageDescription.trim() === \"\")) {\n fail(\"ios.faceIdUsageDescription must be a non-empty string\");\n }\n if (manifest.speech !== void 0 && (typeof manifest.speech?.recognition !== \"string\" || manifest.speech.recognition.trim() === \"\" || typeof manifest.speech.microphone !== \"string\" || manifest.speech.microphone.trim() === \"\")) {\n fail(\"speech.recognition and speech.microphone must be non-empty strings\");\n }\n if (manifest.notifications !== void 0) {\n if (typeof manifest.notifications !== \"object\" || manifest.notifications.push !== void 0 && typeof manifest.notifications.push !== \"boolean\") {\n fail(\"notifications.push must be a boolean\");\n }\n const aps = manifest.notifications.apsEnvironment;\n if (aps !== void 0 && aps !== \"development\" && aps !== \"production\") {\n fail(`notifications.apsEnvironment \"${aps}\" must be development or production`);\n }\n if (aps !== void 0 && !manifest.notifications.push) {\n fail(\"notifications.apsEnvironment needs notifications.push\");\n }\n }\n const accent = manifest.ios?.accentColor;\n if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {\n fail(\"ios.accentColor light and dark must be six-digit hex colors\");\n }\n if (manifest.pictureInPicture !== void 0 && typeof manifest.pictureInPicture !== \"boolean\") {\n fail(\"pictureInPicture must be a boolean\");\n }\n if (manifest.updates !== void 0) {\n if (typeof manifest.updates.runtimeVersion !== \"string\" || manifest.updates.runtimeVersion.trim() === \"\") {\n fail(\"updates.runtimeVersion must be a non-empty string\");\n }\n if (manifest.updates.url !== void 0 && (typeof manifest.updates.url !== \"string\" || manifest.updates.url.trim() === \"\")) {\n fail(\"updates.url must be a non-empty string\");\n }\n }\n if (!platform || platform === \"ios\") {\n if (!manifest.ios?.bundleId || !REVERSE_DNS.test(manifest.ios.bundleId)) {\n fail(`ios.bundleId \"${manifest.ios?.bundleId}\" must be reverse-dns`);\n }\n if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {\n fail(\n `ios.deploymentTarget \"${manifest.ios.deploymentTarget}\" must look like \"17.0\"`\n );\n }\n if (manifest.ios.buildNumber !== void 0 && !BUILD_NUMBER.test(manifest.ios.buildNumber)) {\n fail(\n `ios.buildNumber \"${manifest.ios.buildNumber}\" must contain only letters, digits, and dots`\n );\n }\n const widgets = manifest.ios.widgets;\n if (widgets) {\n if (!manifest.ios.deploymentTarget || Number(manifest.ios.deploymentTarget) < 17) {\n fail(\"ios.widgets requires ios.deploymentTarget of 17.0 or newer\");\n }\n if (!/^group\\.[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/.test(widgets.appGroup)) {\n fail(\"ios.widgets.appGroup must be a reverse-dns App Group beginning with group.\");\n }\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(widgets.kind)) {\n fail(\"ios.widgets.kind must be a non-empty WidgetKit kind\");\n }\n if (!widgets.displayName?.trim() || !widgets.description?.trim()) {\n fail(\"ios.widgets.displayName and description must be non-empty strings\");\n }\n if (widgets.pushNotifications !== void 0 && typeof widgets.pushNotifications !== \"boolean\") {\n fail(\"ios.widgets.pushNotifications must be a boolean\");\n }\n }\n }\n if (!platform || platform === \"android\") {\n if (!manifest.android?.applicationId || !REVERSE_DNS.test(manifest.android.applicationId)) {\n fail(\n `android.applicationId \"${manifest.android?.applicationId}\" must be reverse-dns`\n );\n }\n if (manifest.android.minSdk !== void 0 && (!Number.isInteger(manifest.android.minSdk) || manifest.android.minSdk < 21 || manifest.android.minSdk > 36)) {\n fail(`android.minSdk \"${manifest.android.minSdk}\" must be an integer from 21 to 36`);\n }\n if (manifest.android.versionCode !== void 0 && (!Number.isInteger(manifest.android.versionCode) || manifest.android.versionCode < 1)) {\n fail(\n `android.versionCode \"${manifest.android.versionCode}\" must be a positive integer`\n );\n }\n for (const key of [\"targetSdk\", \"compileSdk\"]) {\n const value = manifest.android[key];\n if (value !== void 0 && (!Number.isInteger(value) || value < 21)) {\n fail(`android.${key} \"${value}\" must be an api level integer`);\n }\n }\n if (manifest.android.shrinkResources && !manifest.android.minify) {\n fail(\"android.shrinkResources needs android.minify\");\n }\n for (const link of manifest.android.appLinks ?? []) {\n if (!link.host || !REVERSE_DNS.test(link.host)) {\n fail(`android.appLinks host \"${link.host}\" must be a domain`);\n }\n if (link.pathPrefix !== void 0 && !link.pathPrefix.startsWith(\"/\")) {\n fail(`android.appLinks pathPrefix \"${link.pathPrefix}\" must start with /`);\n }\n }\n const adaptiveIcon = manifest.android.adaptiveIcon;\n if (adaptiveIcon !== void 0 && (!adaptiveIcon.foreground || adaptiveIcon.backgroundColor !== void 0 && !HEX_COLOR.test(adaptiveIcon.backgroundColor))) {\n fail(\n \"android.adaptiveIcon requires foreground, and backgroundColor must be six-digit hex\"\n );\n }\n if (manifest.android.googleMapsApiKey !== void 0 && (typeof manifest.android.googleMapsApiKey !== \"string\" || manifest.android.googleMapsApiKey.trim() === \"\")) {\n fail(\"android.googleMapsApiKey must be a non-empty string\");\n }\n }\n return manifest;\n}\nfunction expoClientFromNativeApp(app) {\n return {\n name: app.displayName ?? app.name,\n slug: app.name,\n scheme: app.scheme,\n version: app.version,\n orientation: app.orientation,\n // an expo config without the key means light, while prebuild writes no\n // UIUserInterfaceStyle for an unset style and the app follows the system,\n // so the manifest states the style the built app has.\n userInterfaceStyle: app.userInterfaceStyle ?? \"automatic\",\n icon: app.icon?.source,\n splash: app.splash && {\n image: app.splash.source,\n backgroundColor: app.splash.backgroundColor,\n imageWidth: app.splash.width,\n resizeMode: app.splash.resizeMode,\n dark: app.splash.dark && {\n image: app.splash.dark.source,\n backgroundColor: app.splash.dark.backgroundColor\n }\n },\n plugins: app.fonts?.length ? [[\"expo-font\", { fonts: app.fonts }]] : void 0,\n ios: app.ios && {\n bundleIdentifier: app.ios.bundleId,\n buildNumber: app.ios.buildNumber,\n supportsTablet: app.ios.tablet,\n associatedDomains: app.ios.associatedDomains,\n usesAppleSignIn: app.ios.usesAppleSignIn,\n googleServicesFile: app.ios.googleServicesFile,\n infoPlist: app.ios.infoPlist,\n entitlements: app.ios.entitlements\n },\n android: app.android && {\n package: app.android.applicationId,\n versionCode: app.android.versionCode,\n permissions: app.android.permissions,\n blockedPermissions: app.android.blockedPermissions,\n googleServicesFile: app.android.googleServicesFile,\n adaptiveIcon: app.android.adaptiveIcon && {\n foregroundImage: app.android.adaptiveIcon.foreground,\n backgroundImage: app.android.adaptiveIcon.background,\n backgroundColor: app.android.adaptiveIcon.backgroundColor,\n monochromeImage: app.android.adaptiveIcon.monochrome\n }\n }\n };\n}\nexport {\n expoClientFromNativeApp,\n validateNativeApp\n};\n//# sourceMappingURL=nativeAppManifest.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nativeAppManifest.js","names":[],"sources":["esm/nativeAppManifest.js"],"sourcesContent":["const TARGET_NAME = /^[A-Za-z][A-Za-z0-9_]*$/;\nconst SCHEME = /^[a-z][a-z0-9+.-]*$/i;\nconst VERSION = /^\\d+\\.\\d+\\.\\d+/;\nconst BUILD_NUMBER = /^[A-Za-z0-9.]+$/;\nconst REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/;\nconst DEPLOYMENT_TARGET = /^\\d+\\.\\d+$/;\nconst HEX_COLOR = /^#[\\da-f]{6}$/i;\nconst FONT_FILE = /\\.(ttf|otf)$/i;\nconst ORIENTATIONS = [\"portrait\", \"landscape\", \"default\"];\nconst USER_INTERFACE_STYLES = [\"light\", \"dark\", \"automatic\"];\nfunction fail(message) {\n throw new Error(`[one] invalid native.app: ${message}`);\n}\nfunction validateNativeApp(manifest, platform) {\n if (!manifest || typeof manifest !== \"object\") fail(\"manifest must be an object\");\n if (!manifest.name || typeof manifest.name !== \"string\") fail(\"name is required\");\n if (!TARGET_NAME.test(manifest.name)) {\n fail(\n `name \"${manifest.name}\" must start with a letter and contain only letters, digits, and underscore`\n );\n }\n const schemes = manifest.scheme === void 0 ? [] : Array.isArray(manifest.scheme) ? manifest.scheme : [manifest.scheme];\n for (const scheme of schemes) {\n if (typeof scheme !== \"string\" || !SCHEME.test(scheme)) {\n fail(`scheme \"${scheme}\" must be a valid uri scheme`);\n }\n }\n if (manifest.orientation !== void 0 && !ORIENTATIONS.includes(manifest.orientation)) {\n fail(`orientation \"${manifest.orientation}\" must be ${ORIENTATIONS.join(\", \")}`);\n }\n if (manifest.userInterfaceStyle !== void 0 && !USER_INTERFACE_STYLES.includes(manifest.userInterfaceStyle)) {\n fail(\n `userInterfaceStyle \"${manifest.userInterfaceStyle}\" must be ${USER_INTERFACE_STYLES.join(\", \")}`\n );\n }\n if (manifest.fonts !== void 0) {\n const names = /* @__PURE__ */ new Set();\n for (const font of manifest.fonts) {\n if (typeof font !== \"string\" || !FONT_FILE.test(font)) {\n fail(`fonts entry \"${font}\" must be a .ttf or .otf file path`);\n }\n const name = font.split(\"/\").pop() ?? font;\n if (names.has(name)) fail(`fonts lists ${name} twice`);\n names.add(name);\n }\n }\n if (manifest.version !== void 0 && !VERSION.test(manifest.version)) {\n fail(`version \"${manifest.version}\" must start with major.minor.patch`);\n }\n if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {\n fail(\"icon requires source and a six-digit hex backgroundColor\");\n }\n if (manifest.ios?.alternateIcons !== void 0) {\n if (!manifest.icon) fail(\"ios.alternateIcons requires a primary icon\");\n const entries = Object.entries(manifest.ios.alternateIcons);\n if (entries.length === 0) fail(\"ios.alternateIcons requires at least one icon\");\n for (const [name, icon] of entries) {\n if (name === \"AppIcon\" || !TARGET_NAME.test(name)) {\n fail(`ios.alternateIcons name \"${name}\" must be an identifier other than AppIcon`);\n }\n if (!icon?.source || !HEX_COLOR.test(icon.backgroundColor)) {\n fail(`ios.alternateIcons.${name} requires source and a six-digit hex backgroundColor`);\n }\n }\n }\n if (manifest.ios?.backgroundTasks !== void 0) {\n const tasks = manifest.ios.backgroundTasks;\n if (!tasks || tasks.refresh !== void 0 && !Array.isArray(tasks.refresh) || tasks.processing !== void 0 && !Array.isArray(tasks.processing)) {\n fail(\"ios.backgroundTasks refresh and processing must be arrays of identifiers\");\n }\n const identifiers = [...tasks.refresh ?? [], ...tasks.processing ?? []];\n if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {\n fail(\"ios.backgroundTasks needs distinct refresh or processing identifiers\");\n }\n for (const identifier of identifiers) {\n if (typeof identifier !== \"string\" || !REVERSE_DNS.test(identifier)) {\n fail(`ios.backgroundTasks identifier \"${identifier}\" must use reverse DNS notation`);\n }\n }\n }\n if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {\n fail(\n \"splash requires source, a six-digit hex backgroundColor, and width from 1 to 288\"\n );\n }\n if (manifest.splash?.dark !== void 0 && !HEX_COLOR.test(manifest.splash.dark.backgroundColor)) {\n fail(\"splash.dark requires a six-digit hex backgroundColor\");\n }\n if (manifest.splash?.dark?.backgroundImage !== void 0 && manifest.splash.backgroundImage === void 0) {\n fail(\"splash.dark.backgroundImage needs splash.backgroundImage for the light launch\");\n }\n if (manifest.splash?.resizeMode !== void 0 && manifest.splash.resizeMode !== \"contain\" && manifest.splash.resizeMode !== \"cover\") {\n fail(`splash.resizeMode \"${manifest.splash.resizeMode}\" must be contain or cover`);\n }\n if (manifest.imagePicker?.camera !== void 0 && (typeof manifest.imagePicker.camera !== \"string\" || manifest.imagePicker.camera.trim() === \"\")) {\n fail(\"imagePicker.camera must be a non-empty string\");\n }\n if (manifest.photoLibrary !== void 0 && (!manifest.photoLibrary || manifest.photoLibrary.addOnly === void 0 && manifest.photoLibrary.readWrite === void 0)) {\n fail(\"photoLibrary must configure addOnly or readWrite\");\n }\n if (manifest.photoLibrary?.addOnly !== void 0 && (typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly must be a non-empty string\");\n }\n if (manifest.photoLibrary?.readWrite !== void 0 && (typeof manifest.photoLibrary.readWrite !== \"string\" || manifest.photoLibrary.readWrite.trim() === \"\")) {\n fail(\"photoLibrary.readWrite must be a non-empty string\");\n }\n if (manifest.contacts !== void 0 && (!manifest.contacts || typeof manifest.contacts.usage !== \"string\" || manifest.contacts.usage.trim() === \"\")) {\n fail(\"contacts.usage must be a non-empty string\");\n }\n if (manifest.calendar !== void 0) {\n if (!manifest.calendar || manifest.calendar.usage === void 0 && manifest.calendar.remindersUsage === void 0) {\n fail(\"calendar.usage or calendar.remindersUsage must be a non-empty string\");\n }\n if (manifest.calendar.usage !== void 0 && (typeof manifest.calendar.usage !== \"string\" || manifest.calendar.usage.trim() === \"\")) {\n fail(\"calendar.usage must be a non-empty string\");\n }\n if (manifest.calendar.remindersUsage !== void 0 && (typeof manifest.calendar.remindersUsage !== \"string\" || manifest.calendar.remindersUsage.trim() === \"\")) {\n fail(\"calendar.remindersUsage must be a non-empty string\");\n }\n }\n if (manifest.location !== void 0 && (!manifest.location || typeof manifest.location.whenInUse !== \"string\" || manifest.location.whenInUse.trim() === \"\")) {\n fail(\"location.whenInUse must be a non-empty string\");\n }\n if (manifest.location?.background !== void 0 && typeof manifest.location.background !== \"boolean\") {\n fail(\"location.background must be a boolean\");\n }\n if (manifest.audio !== void 0) {\n if (!manifest.audio || typeof manifest.audio !== \"object\") {\n fail(\"audio must configure microphone or background playback\");\n }\n if (manifest.audio.microphone !== void 0 && (typeof manifest.audio.microphone !== \"string\" || manifest.audio.microphone.trim() === \"\")) {\n fail(\"audio.microphone must be a non-empty string\");\n }\n if (manifest.audio.background !== void 0 && typeof manifest.audio.background !== \"boolean\") {\n fail(\"audio.background must be a boolean\");\n }\n if (manifest.audio.microphone === void 0 && manifest.audio.background !== true) {\n fail(\"audio must configure microphone or background playback\");\n }\n }\n if (manifest.ios?.faceIdUsageDescription !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== \"string\" || manifest.ios.faceIdUsageDescription.trim() === \"\")) {\n fail(\"ios.faceIdUsageDescription must be a non-empty string\");\n }\n if (manifest.speech !== void 0 && (typeof manifest.speech?.recognition !== \"string\" || manifest.speech.recognition.trim() === \"\" || typeof manifest.speech.microphone !== \"string\" || manifest.speech.microphone.trim() === \"\")) {\n fail(\"speech.recognition and speech.microphone must be non-empty strings\");\n }\n if (manifest.notifications !== void 0) {\n if (typeof manifest.notifications !== \"object\" || manifest.notifications.push !== void 0 && typeof manifest.notifications.push !== \"boolean\") {\n fail(\"notifications.push must be a boolean\");\n }\n const aps = manifest.notifications.apsEnvironment;\n if (aps !== void 0 && aps !== \"development\" && aps !== \"production\") {\n fail(`notifications.apsEnvironment \"${aps}\" must be development or production`);\n }\n if (aps !== void 0 && !manifest.notifications.push) {\n fail(\"notifications.apsEnvironment needs notifications.push\");\n }\n }\n const accent = manifest.ios?.accentColor;\n if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {\n fail(\"ios.accentColor light and dark must be six-digit hex colors\");\n }\n if (manifest.pictureInPicture !== void 0 && typeof manifest.pictureInPicture !== \"boolean\") {\n fail(\"pictureInPicture must be a boolean\");\n }\n if (manifest.updates !== void 0) {\n if (typeof manifest.updates.runtimeVersion !== \"string\" || manifest.updates.runtimeVersion.trim() === \"\") {\n fail(\"updates.runtimeVersion must be a non-empty string\");\n }\n if (manifest.updates.url !== void 0 && (typeof manifest.updates.url !== \"string\" || manifest.updates.url.trim() === \"\")) {\n fail(\"updates.url must be a non-empty string\");\n }\n }\n if (!platform || platform === \"ios\") {\n if (!manifest.ios?.bundleId || !REVERSE_DNS.test(manifest.ios.bundleId)) {\n fail(`ios.bundleId \"${manifest.ios?.bundleId}\" must be reverse-dns`);\n }\n if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {\n fail(\n `ios.deploymentTarget \"${manifest.ios.deploymentTarget}\" must look like \"17.0\"`\n );\n }\n if (manifest.ios.buildNumber !== void 0 && !BUILD_NUMBER.test(manifest.ios.buildNumber)) {\n fail(\n `ios.buildNumber \"${manifest.ios.buildNumber}\" must contain only letters, digits, and dots`\n );\n }\n const widgets = manifest.ios.widgets;\n if (widgets) {\n if (!manifest.ios.deploymentTarget || Number(manifest.ios.deploymentTarget) < 17) {\n fail(\"ios.widgets requires ios.deploymentTarget of 17.0 or newer\");\n }\n if (!/^group\\.[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/.test(widgets.appGroup)) {\n fail(\"ios.widgets.appGroup must be a reverse-dns App Group beginning with group.\");\n }\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(widgets.kind)) {\n fail(\"ios.widgets.kind must be a non-empty WidgetKit kind\");\n }\n if (!widgets.displayName?.trim() || !widgets.description?.trim()) {\n fail(\"ios.widgets.displayName and description must be non-empty strings\");\n }\n if (widgets.pushNotifications !== void 0 && typeof widgets.pushNotifications !== \"boolean\") {\n fail(\"ios.widgets.pushNotifications must be a boolean\");\n }\n }\n }\n if (!platform || platform === \"android\") {\n if (!manifest.android?.applicationId || !REVERSE_DNS.test(manifest.android.applicationId)) {\n fail(\n `android.applicationId \"${manifest.android?.applicationId}\" must be reverse-dns`\n );\n }\n if (manifest.android.minSdk !== void 0 && (!Number.isInteger(manifest.android.minSdk) || manifest.android.minSdk < 21 || manifest.android.minSdk > 36)) {\n fail(`android.minSdk \"${manifest.android.minSdk}\" must be an integer from 21 to 36`);\n }\n if (manifest.android.versionCode !== void 0 && (!Number.isInteger(manifest.android.versionCode) || manifest.android.versionCode < 1)) {\n fail(\n `android.versionCode \"${manifest.android.versionCode}\" must be a positive integer`\n );\n }\n for (const key of [\"targetSdk\", \"compileSdk\"]) {\n const value = manifest.android[key];\n if (value !== void 0 && (!Number.isInteger(value) || value < 21)) {\n fail(`android.${key} \"${value}\" must be an api level integer`);\n }\n }\n if (manifest.android.shrinkResources && !manifest.android.minify) {\n fail(\"android.shrinkResources needs android.minify\");\n }\n for (const link of manifest.android.appLinks ?? []) {\n if (!link.host || !REVERSE_DNS.test(link.host)) {\n fail(`android.appLinks host \"${link.host}\" must be a domain`);\n }\n if (link.pathPrefix !== void 0 && !link.pathPrefix.startsWith(\"/\")) {\n fail(`android.appLinks pathPrefix \"${link.pathPrefix}\" must start with /`);\n }\n }\n const adaptiveIcon = manifest.android.adaptiveIcon;\n if (adaptiveIcon !== void 0 && (!adaptiveIcon.foreground || adaptiveIcon.backgroundColor !== void 0 && !HEX_COLOR.test(adaptiveIcon.backgroundColor))) {\n fail(\n \"android.adaptiveIcon requires foreground, and backgroundColor must be six-digit hex\"\n );\n }\n if (manifest.android.googleMapsApiKey !== void 0 && (typeof manifest.android.googleMapsApiKey !== \"string\" || manifest.android.googleMapsApiKey.trim() === \"\")) {\n fail(\"android.googleMapsApiKey must be a non-empty string\");\n }\n }\n return manifest;\n}\nfunction expoClientFromNativeApp(app) {\n return {\n name: app.displayName ?? app.name,\n slug: app.name,\n scheme: app.scheme,\n version: app.version,\n orientation: app.orientation,\n // an expo config without the key means light, while prebuild writes no\n // UIUserInterfaceStyle for an unset style and the app follows the system,\n // so the manifest states the style the built app has.\n userInterfaceStyle: app.userInterfaceStyle ?? \"automatic\",\n icon: app.icon?.source,\n splash: app.splash && {\n image: app.splash.source,\n backgroundImage: app.splash.backgroundImage,\n backgroundColor: app.splash.backgroundColor,\n imageWidth: app.splash.width,\n resizeMode: app.splash.resizeMode,\n dark: app.splash.dark && {\n image: app.splash.dark.source,\n backgroundImage: app.splash.dark.backgroundImage,\n backgroundColor: app.splash.dark.backgroundColor\n }\n },\n plugins: app.fonts?.length ? [[\"expo-font\", { fonts: app.fonts }]] : void 0,\n ios: app.ios && {\n bundleIdentifier: app.ios.bundleId,\n buildNumber: app.ios.buildNumber,\n supportsTablet: app.ios.tablet,\n associatedDomains: app.ios.associatedDomains,\n usesAppleSignIn: app.ios.usesAppleSignIn,\n googleServicesFile: app.ios.googleServicesFile,\n infoPlist: app.ios.infoPlist,\n entitlements: app.ios.entitlements\n },\n android: app.android && {\n package: app.android.applicationId,\n versionCode: app.android.versionCode,\n permissions: app.android.permissions,\n blockedPermissions: app.android.blockedPermissions,\n googleServicesFile: app.android.googleServicesFile,\n adaptiveIcon: app.android.adaptiveIcon && {\n foregroundImage: app.android.adaptiveIcon.foreground,\n backgroundImage: app.android.adaptiveIcon.background,\n backgroundColor: app.android.adaptiveIcon.backgroundColor,\n monochromeImage: app.android.adaptiveIcon.monochrome\n }\n }\n };\n}\nexport {\n expoClientFromNativeApp,\n validateNativeApp\n};\n//# sourceMappingURL=nativeAppManifest.js.map\n"],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ function fail(message) {
|
|
|
20
20
|
throw new Error(`[one] invalid native.app: ${message}`);
|
|
21
21
|
}
|
|
22
22
|
function validateNativeApp(manifest, platform) {
|
|
23
|
-
var _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location,
|
|
23
|
+
var _manifest_ios, _manifest_ios1, _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location, _manifest_ios2, _manifest_speech, _manifest_ios3;
|
|
24
24
|
if (!manifest || typeof manifest !== "object") fail("manifest must be an object");
|
|
25
25
|
if (!manifest.name || typeof manifest.name !== "string") fail("name is required");
|
|
26
26
|
if (!TARGET_NAME.test(manifest.name)) {
|
|
@@ -90,6 +90,69 @@ function validateNativeApp(manifest, platform) {
|
|
|
90
90
|
if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {
|
|
91
91
|
fail("icon requires source and a six-digit hex backgroundColor");
|
|
92
92
|
}
|
|
93
|
+
if (((_manifest_ios = manifest.ios) === null || _manifest_ios === void 0 ? void 0 : _manifest_ios.alternateIcons) !== void 0) {
|
|
94
|
+
if (!manifest.icon) fail("ios.alternateIcons requires a primary icon");
|
|
95
|
+
var entries = Object.entries(manifest.ios.alternateIcons);
|
|
96
|
+
if (entries.length === 0) fail("ios.alternateIcons requires at least one icon");
|
|
97
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
98
|
+
try {
|
|
99
|
+
for (var _iterator2 = entries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
100
|
+
var [name1, icon] = _step2.value;
|
|
101
|
+
if (name1 === "AppIcon" || !TARGET_NAME.test(name1)) {
|
|
102
|
+
fail(`ios.alternateIcons name "${name1}" must be an identifier other than AppIcon`);
|
|
103
|
+
}
|
|
104
|
+
if (!(icon === null || icon === void 0 ? void 0 : icon.source) || !HEX_COLOR.test(icon.backgroundColor)) {
|
|
105
|
+
fail(`ios.alternateIcons.${name1} requires source and a six-digit hex backgroundColor`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
} catch (err) {
|
|
109
|
+
_didIteratorError2 = true;
|
|
110
|
+
_iteratorError2 = err;
|
|
111
|
+
} finally {
|
|
112
|
+
try {
|
|
113
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
114
|
+
_iterator2.return();
|
|
115
|
+
}
|
|
116
|
+
} finally {
|
|
117
|
+
if (_didIteratorError2) {
|
|
118
|
+
throw _iteratorError2;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (((_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.backgroundTasks) !== void 0) {
|
|
124
|
+
var _tasks_refresh, _tasks_processing;
|
|
125
|
+
var tasks = manifest.ios.backgroundTasks;
|
|
126
|
+
if (!tasks || tasks.refresh !== void 0 && !Array.isArray(tasks.refresh) || tasks.processing !== void 0 && !Array.isArray(tasks.processing)) {
|
|
127
|
+
fail("ios.backgroundTasks refresh and processing must be arrays of identifiers");
|
|
128
|
+
}
|
|
129
|
+
var identifiers = [...(_tasks_refresh = tasks.refresh) !== null && _tasks_refresh !== void 0 ? _tasks_refresh : [], ...(_tasks_processing = tasks.processing) !== null && _tasks_processing !== void 0 ? _tasks_processing : []];
|
|
130
|
+
if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {
|
|
131
|
+
fail("ios.backgroundTasks needs distinct refresh or processing identifiers");
|
|
132
|
+
}
|
|
133
|
+
var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;
|
|
134
|
+
try {
|
|
135
|
+
for (var _iterator3 = identifiers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
136
|
+
var identifier = _step3.value;
|
|
137
|
+
if (typeof identifier !== "string" || !REVERSE_DNS.test(identifier)) {
|
|
138
|
+
fail(`ios.backgroundTasks identifier "${identifier}" must use reverse DNS notation`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
} catch (err) {
|
|
142
|
+
_didIteratorError3 = true;
|
|
143
|
+
_iteratorError3 = err;
|
|
144
|
+
} finally {
|
|
145
|
+
try {
|
|
146
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
147
|
+
_iterator3.return();
|
|
148
|
+
}
|
|
149
|
+
} finally {
|
|
150
|
+
if (_didIteratorError3) {
|
|
151
|
+
throw _iteratorError3;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
93
156
|
if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {
|
|
94
157
|
fail("splash requires source, a six-digit hex backgroundColor, and width from 1 to 288");
|
|
95
158
|
}
|
|
@@ -148,7 +211,7 @@ function validateNativeApp(manifest, platform) {
|
|
|
148
211
|
fail("audio must configure microphone or background playback");
|
|
149
212
|
}
|
|
150
213
|
}
|
|
151
|
-
if (((
|
|
214
|
+
if (((_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.faceIdUsageDescription) !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== "string" || manifest.ios.faceIdUsageDescription.trim() === "")) {
|
|
152
215
|
fail("ios.faceIdUsageDescription must be a non-empty string");
|
|
153
216
|
}
|
|
154
217
|
if (manifest.speech !== void 0 && (typeof ((_manifest_speech = manifest.speech) === null || _manifest_speech === void 0 ? void 0 : _manifest_speech.recognition) !== "string" || manifest.speech.recognition.trim() === "" || typeof manifest.speech.microphone !== "string" || manifest.speech.microphone.trim() === "")) {
|
|
@@ -166,7 +229,7 @@ function validateNativeApp(manifest, platform) {
|
|
|
166
229
|
fail("notifications.apsEnvironment needs notifications.push");
|
|
167
230
|
}
|
|
168
231
|
}
|
|
169
|
-
var accent = (
|
|
232
|
+
var accent = (_manifest_ios3 = manifest.ios) === null || _manifest_ios3 === void 0 ? void 0 : _manifest_ios3.accentColor;
|
|
170
233
|
if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {
|
|
171
234
|
fail("ios.accentColor light and dark must be six-digit hex colors");
|
|
172
235
|
}
|
|
@@ -182,10 +245,10 @@ function validateNativeApp(manifest, platform) {
|
|
|
182
245
|
}
|
|
183
246
|
}
|
|
184
247
|
if (!platform || platform === "ios") {
|
|
185
|
-
var
|
|
186
|
-
if (!((
|
|
187
|
-
var
|
|
188
|
-
fail(`ios.bundleId "${(
|
|
248
|
+
var _manifest_ios4;
|
|
249
|
+
if (!((_manifest_ios4 = manifest.ios) === null || _manifest_ios4 === void 0 ? void 0 : _manifest_ios4.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {
|
|
250
|
+
var _manifest_ios5;
|
|
251
|
+
fail(`ios.bundleId "${(_manifest_ios5 = manifest.ios) === null || _manifest_ios5 === void 0 ? void 0 : _manifest_ios5.bundleId}" must be reverse-dns`);
|
|
189
252
|
}
|
|
190
253
|
if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {
|
|
191
254
|
fail(`ios.deploymentTarget "${manifest.ios.deploymentTarget}" must look like "17.0"`);
|
|
@@ -236,10 +299,10 @@ function validateNativeApp(manifest, platform) {
|
|
|
236
299
|
if (manifest.android.shrinkResources && !manifest.android.minify) {
|
|
237
300
|
fail("android.shrinkResources needs android.minify");
|
|
238
301
|
}
|
|
239
|
-
var
|
|
302
|
+
var _iteratorNormalCompletion4 = true, _didIteratorError4 = false, _iteratorError4 = void 0;
|
|
240
303
|
try {
|
|
241
|
-
for (var
|
|
242
|
-
var link =
|
|
304
|
+
for (var _iterator4 = ((_manifest_android_appLinks = manifest.android.appLinks) !== null && _manifest_android_appLinks !== void 0 ? _manifest_android_appLinks : [])[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
305
|
+
var link = _step4.value;
|
|
243
306
|
if (!link.host || !REVERSE_DNS.test(link.host)) {
|
|
244
307
|
fail(`android.appLinks host "${link.host}" must be a domain`);
|
|
245
308
|
}
|
|
@@ -248,16 +311,16 @@ function validateNativeApp(manifest, platform) {
|
|
|
248
311
|
}
|
|
249
312
|
}
|
|
250
313
|
} catch (err) {
|
|
251
|
-
|
|
252
|
-
|
|
314
|
+
_didIteratorError4 = true;
|
|
315
|
+
_iteratorError4 = err;
|
|
253
316
|
} finally {
|
|
254
317
|
try {
|
|
255
|
-
if (!
|
|
256
|
-
|
|
318
|
+
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
319
|
+
_iterator4.return();
|
|
257
320
|
}
|
|
258
321
|
} finally {
|
|
259
|
-
if (
|
|
260
|
-
throw
|
|
322
|
+
if (_didIteratorError4) {
|
|
323
|
+
throw _iteratorError4;
|
|
261
324
|
}
|
|
262
325
|
}
|
|
263
326
|
}
|
|
@@ -284,11 +347,13 @@ function expoClientFromNativeApp(app) {
|
|
|
284
347
|
icon: (_app_icon = app.icon) === null || _app_icon === void 0 ? void 0 : _app_icon.source,
|
|
285
348
|
splash: app.splash && {
|
|
286
349
|
image: app.splash.source,
|
|
350
|
+
backgroundImage: app.splash.backgroundImage,
|
|
287
351
|
backgroundColor: app.splash.backgroundColor,
|
|
288
352
|
imageWidth: app.splash.width,
|
|
289
353
|
resizeMode: app.splash.resizeMode,
|
|
290
354
|
dark: app.splash.dark && {
|
|
291
355
|
image: app.splash.dark.source,
|
|
356
|
+
backgroundImage: app.splash.dark.backgroundImage,
|
|
292
357
|
backgroundColor: app.splash.dark.backgroundColor
|
|
293
358
|
}
|
|
294
359
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeAppManifest.native.js","names":[],"sources":["esm/nativeAppManifest.native.js"],"sourcesContent":["var TARGET_NAME = /^[A-Za-z][A-Za-z0-9_]*$/;\nvar SCHEME = /^[a-z][a-z0-9+.-]*$/i;\nvar VERSION = /^\\d+\\.\\d+\\.\\d+/;\nvar BUILD_NUMBER = /^[A-Za-z0-9.]+$/;\nvar REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/;\nvar DEPLOYMENT_TARGET = /^\\d+\\.\\d+$/;\nvar HEX_COLOR = /^#[\\da-f]{6}$/i;\nvar FONT_FILE = /\\.(ttf|otf)$/i;\nvar ORIENTATIONS = [\n \"portrait\",\n \"landscape\",\n \"default\"\n];\nvar USER_INTERFACE_STYLES = [\n \"light\",\n \"dark\",\n \"automatic\"\n];\nfunction fail(message) {\n throw new Error(`[one] invalid native.app: ${message}`);\n}\nfunction validateNativeApp(manifest, platform) {\n var _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location, _manifest_ios, _manifest_speech, _manifest_ios1;\n if (!manifest || typeof manifest !== \"object\") fail(\"manifest must be an object\");\n if (!manifest.name || typeof manifest.name !== \"string\") fail(\"name is required\");\n if (!TARGET_NAME.test(manifest.name)) {\n fail(`name \"${manifest.name}\" must start with a letter and contain only letters, digits, and underscore`);\n }\n var schemes = manifest.scheme === void 0 ? [] : Array.isArray(manifest.scheme) ? manifest.scheme : [\n manifest.scheme\n ];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = schemes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var scheme = _step.value;\n if (typeof scheme !== \"string\" || !SCHEME.test(scheme)) {\n fail(`scheme \"${scheme}\" must be a valid uri scheme`);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (manifest.orientation !== void 0 && !ORIENTATIONS.includes(manifest.orientation)) {\n fail(`orientation \"${manifest.orientation}\" must be ${ORIENTATIONS.join(\", \")}`);\n }\n if (manifest.userInterfaceStyle !== void 0 && !USER_INTERFACE_STYLES.includes(manifest.userInterfaceStyle)) {\n fail(`userInterfaceStyle \"${manifest.userInterfaceStyle}\" must be ${USER_INTERFACE_STYLES.join(\", \")}`);\n }\n if (manifest.fonts !== void 0) {\n var names = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = manifest.fonts[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var font = _step1.value;\n var _font_split_pop;\n if (typeof font !== \"string\" || !FONT_FILE.test(font)) {\n fail(`fonts entry \"${font}\" must be a .ttf or .otf file path`);\n }\n var name = (_font_split_pop = font.split(\"/\").pop()) !== null && _font_split_pop !== void 0 ? _font_split_pop : font;\n if (names.has(name)) fail(`fonts lists ${name} twice`);\n names.add(name);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n if (manifest.version !== void 0 && !VERSION.test(manifest.version)) {\n fail(`version \"${manifest.version}\" must start with major.minor.patch`);\n }\n if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {\n fail(\"icon requires source and a six-digit hex backgroundColor\");\n }\n if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {\n fail(\"splash requires source, a six-digit hex backgroundColor, and width from 1 to 288\");\n }\n if (((_manifest_splash = manifest.splash) === null || _manifest_splash === void 0 ? void 0 : _manifest_splash.dark) !== void 0 && !HEX_COLOR.test(manifest.splash.dark.backgroundColor)) {\n fail(\"splash.dark requires a six-digit hex backgroundColor\");\n }\n if (((_manifest_splash1 = manifest.splash) === null || _manifest_splash1 === void 0 ? void 0 : (_manifest_splash_dark = _manifest_splash1.dark) === null || _manifest_splash_dark === void 0 ? void 0 : _manifest_splash_dark.backgroundImage) !== void 0 && manifest.splash.backgroundImage === void 0) {\n fail(\"splash.dark.backgroundImage needs splash.backgroundImage for the light launch\");\n }\n if (((_manifest_splash2 = manifest.splash) === null || _manifest_splash2 === void 0 ? void 0 : _manifest_splash2.resizeMode) !== void 0 && manifest.splash.resizeMode !== \"contain\" && manifest.splash.resizeMode !== \"cover\") {\n fail(`splash.resizeMode \"${manifest.splash.resizeMode}\" must be contain or cover`);\n }\n if (((_manifest_imagePicker = manifest.imagePicker) === null || _manifest_imagePicker === void 0 ? void 0 : _manifest_imagePicker.camera) !== void 0 && (typeof manifest.imagePicker.camera !== \"string\" || manifest.imagePicker.camera.trim() === \"\")) {\n fail(\"imagePicker.camera must be a non-empty string\");\n }\n if (manifest.photoLibrary !== void 0 && (!manifest.photoLibrary || manifest.photoLibrary.addOnly === void 0 && manifest.photoLibrary.readWrite === void 0)) {\n fail(\"photoLibrary must configure addOnly or readWrite\");\n }\n if (((_manifest_photoLibrary = manifest.photoLibrary) === null || _manifest_photoLibrary === void 0 ? void 0 : _manifest_photoLibrary.addOnly) !== void 0 && (typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly must be a non-empty string\");\n }\n if (((_manifest_photoLibrary1 = manifest.photoLibrary) === null || _manifest_photoLibrary1 === void 0 ? void 0 : _manifest_photoLibrary1.readWrite) !== void 0 && (typeof manifest.photoLibrary.readWrite !== \"string\" || manifest.photoLibrary.readWrite.trim() === \"\")) {\n fail(\"photoLibrary.readWrite must be a non-empty string\");\n }\n if (manifest.contacts !== void 0 && (!manifest.contacts || typeof manifest.contacts.usage !== \"string\" || manifest.contacts.usage.trim() === \"\")) {\n fail(\"contacts.usage must be a non-empty string\");\n }\n if (manifest.calendar !== void 0) {\n if (!manifest.calendar || manifest.calendar.usage === void 0 && manifest.calendar.remindersUsage === void 0) {\n fail(\"calendar.usage or calendar.remindersUsage must be a non-empty string\");\n }\n if (manifest.calendar.usage !== void 0 && (typeof manifest.calendar.usage !== \"string\" || manifest.calendar.usage.trim() === \"\")) {\n fail(\"calendar.usage must be a non-empty string\");\n }\n if (manifest.calendar.remindersUsage !== void 0 && (typeof manifest.calendar.remindersUsage !== \"string\" || manifest.calendar.remindersUsage.trim() === \"\")) {\n fail(\"calendar.remindersUsage must be a non-empty string\");\n }\n }\n if (manifest.location !== void 0 && (!manifest.location || typeof manifest.location.whenInUse !== \"string\" || manifest.location.whenInUse.trim() === \"\")) {\n fail(\"location.whenInUse must be a non-empty string\");\n }\n if (((_manifest_location = manifest.location) === null || _manifest_location === void 0 ? void 0 : _manifest_location.background) !== void 0 && typeof manifest.location.background !== \"boolean\") {\n fail(\"location.background must be a boolean\");\n }\n if (manifest.audio !== void 0) {\n if (!manifest.audio || typeof manifest.audio !== \"object\") {\n fail(\"audio must configure microphone or background playback\");\n }\n if (manifest.audio.microphone !== void 0 && (typeof manifest.audio.microphone !== \"string\" || manifest.audio.microphone.trim() === \"\")) {\n fail(\"audio.microphone must be a non-empty string\");\n }\n if (manifest.audio.background !== void 0 && typeof manifest.audio.background !== \"boolean\") {\n fail(\"audio.background must be a boolean\");\n }\n if (manifest.audio.microphone === void 0 && manifest.audio.background !== true) {\n fail(\"audio must configure microphone or background playback\");\n }\n }\n if (((_manifest_ios = manifest.ios) === null || _manifest_ios === void 0 ? void 0 : _manifest_ios.faceIdUsageDescription) !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== \"string\" || manifest.ios.faceIdUsageDescription.trim() === \"\")) {\n fail(\"ios.faceIdUsageDescription must be a non-empty string\");\n }\n if (manifest.speech !== void 0 && (typeof ((_manifest_speech = manifest.speech) === null || _manifest_speech === void 0 ? void 0 : _manifest_speech.recognition) !== \"string\" || manifest.speech.recognition.trim() === \"\" || typeof manifest.speech.microphone !== \"string\" || manifest.speech.microphone.trim() === \"\")) {\n fail(\"speech.recognition and speech.microphone must be non-empty strings\");\n }\n if (manifest.notifications !== void 0) {\n if (typeof manifest.notifications !== \"object\" || manifest.notifications.push !== void 0 && typeof manifest.notifications.push !== \"boolean\") {\n fail(\"notifications.push must be a boolean\");\n }\n var aps = manifest.notifications.apsEnvironment;\n if (aps !== void 0 && aps !== \"development\" && aps !== \"production\") {\n fail(`notifications.apsEnvironment \"${aps}\" must be development or production`);\n }\n if (aps !== void 0 && !manifest.notifications.push) {\n fail(\"notifications.apsEnvironment needs notifications.push\");\n }\n }\n var accent = (_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.accentColor;\n if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {\n fail(\"ios.accentColor light and dark must be six-digit hex colors\");\n }\n if (manifest.pictureInPicture !== void 0 && typeof manifest.pictureInPicture !== \"boolean\") {\n fail(\"pictureInPicture must be a boolean\");\n }\n if (manifest.updates !== void 0) {\n if (typeof manifest.updates.runtimeVersion !== \"string\" || manifest.updates.runtimeVersion.trim() === \"\") {\n fail(\"updates.runtimeVersion must be a non-empty string\");\n }\n if (manifest.updates.url !== void 0 && (typeof manifest.updates.url !== \"string\" || manifest.updates.url.trim() === \"\")) {\n fail(\"updates.url must be a non-empty string\");\n }\n }\n if (!platform || platform === \"ios\") {\n var _manifest_ios2;\n if (!((_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {\n var _manifest_ios3;\n fail(`ios.bundleId \"${(_manifest_ios3 = manifest.ios) === null || _manifest_ios3 === void 0 ? void 0 : _manifest_ios3.bundleId}\" must be reverse-dns`);\n }\n if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {\n fail(`ios.deploymentTarget \"${manifest.ios.deploymentTarget}\" must look like \"17.0\"`);\n }\n if (manifest.ios.buildNumber !== void 0 && !BUILD_NUMBER.test(manifest.ios.buildNumber)) {\n fail(`ios.buildNumber \"${manifest.ios.buildNumber}\" must contain only letters, digits, and dots`);\n }\n var widgets = manifest.ios.widgets;\n if (widgets) {\n var _widgets_displayName, _widgets_description;\n if (!manifest.ios.deploymentTarget || Number(manifest.ios.deploymentTarget) < 17) {\n fail(\"ios.widgets requires ios.deploymentTarget of 17.0 or newer\");\n }\n if (!/^group\\.[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/.test(widgets.appGroup)) {\n fail(\"ios.widgets.appGroup must be a reverse-dns App Group beginning with group.\");\n }\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(widgets.kind)) {\n fail(\"ios.widgets.kind must be a non-empty WidgetKit kind\");\n }\n if (!((_widgets_displayName = widgets.displayName) === null || _widgets_displayName === void 0 ? void 0 : _widgets_displayName.trim()) || !((_widgets_description = widgets.description) === null || _widgets_description === void 0 ? void 0 : _widgets_description.trim())) {\n fail(\"ios.widgets.displayName and description must be non-empty strings\");\n }\n if (widgets.pushNotifications !== void 0 && typeof widgets.pushNotifications !== \"boolean\") {\n fail(\"ios.widgets.pushNotifications must be a boolean\");\n }\n }\n }\n if (!platform || platform === \"android\") {\n var _manifest_android_appLinks;\n var _manifest_android;\n if (!((_manifest_android = manifest.android) === null || _manifest_android === void 0 ? void 0 : _manifest_android.applicationId) || !REVERSE_DNS.test(manifest.android.applicationId)) {\n var _manifest_android1;\n fail(`android.applicationId \"${(_manifest_android1 = manifest.android) === null || _manifest_android1 === void 0 ? void 0 : _manifest_android1.applicationId}\" must be reverse-dns`);\n }\n if (manifest.android.minSdk !== void 0 && (!Number.isInteger(manifest.android.minSdk) || manifest.android.minSdk < 21 || manifest.android.minSdk > 36)) {\n fail(`android.minSdk \"${manifest.android.minSdk}\" must be an integer from 21 to 36`);\n }\n if (manifest.android.versionCode !== void 0 && (!Number.isInteger(manifest.android.versionCode) || manifest.android.versionCode < 1)) {\n fail(`android.versionCode \"${manifest.android.versionCode}\" must be a positive integer`);\n }\n for (var _i = 0, _iter = [\n \"targetSdk\",\n \"compileSdk\"\n ]; _i < _iter.length; _i++) {\n var key = _iter[_i];\n var value = manifest.android[key];\n if (value !== void 0 && (!Number.isInteger(value) || value < 21)) {\n fail(`android.${key} \"${value}\" must be an api level integer`);\n }\n }\n if (manifest.android.shrinkResources && !manifest.android.minify) {\n fail(\"android.shrinkResources needs android.minify\");\n }\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = ((_manifest_android_appLinks = manifest.android.appLinks) !== null && _manifest_android_appLinks !== void 0 ? _manifest_android_appLinks : [])[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var link = _step2.value;\n if (!link.host || !REVERSE_DNS.test(link.host)) {\n fail(`android.appLinks host \"${link.host}\" must be a domain`);\n }\n if (link.pathPrefix !== void 0 && !link.pathPrefix.startsWith(\"/\")) {\n fail(`android.appLinks pathPrefix \"${link.pathPrefix}\" must start with /`);\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n var adaptiveIcon = manifest.android.adaptiveIcon;\n if (adaptiveIcon !== void 0 && (!adaptiveIcon.foreground || adaptiveIcon.backgroundColor !== void 0 && !HEX_COLOR.test(adaptiveIcon.backgroundColor))) {\n fail(\"android.adaptiveIcon requires foreground, and backgroundColor must be six-digit hex\");\n }\n if (manifest.android.googleMapsApiKey !== void 0 && (typeof manifest.android.googleMapsApiKey !== \"string\" || manifest.android.googleMapsApiKey.trim() === \"\")) {\n fail(\"android.googleMapsApiKey must be a non-empty string\");\n }\n }\n return manifest;\n}\nfunction expoClientFromNativeApp(app) {\n var _app_displayName, _app_userInterfaceStyle;\n var _app_icon, _app_fonts;\n return {\n name: (_app_displayName = app.displayName) !== null && _app_displayName !== void 0 ? _app_displayName : app.name,\n slug: app.name,\n scheme: app.scheme,\n version: app.version,\n orientation: app.orientation,\n // an expo config without the key means light, while prebuild writes no\n // UIUserInterfaceStyle for an unset style and the app follows the system,\n // so the manifest states the style the built app has.\n userInterfaceStyle: (_app_userInterfaceStyle = app.userInterfaceStyle) !== null && _app_userInterfaceStyle !== void 0 ? _app_userInterfaceStyle : \"automatic\",\n icon: (_app_icon = app.icon) === null || _app_icon === void 0 ? void 0 : _app_icon.source,\n splash: app.splash && {\n image: app.splash.source,\n backgroundColor: app.splash.backgroundColor,\n imageWidth: app.splash.width,\n resizeMode: app.splash.resizeMode,\n dark: app.splash.dark && {\n image: app.splash.dark.source,\n backgroundColor: app.splash.dark.backgroundColor\n }\n },\n plugins: ((_app_fonts = app.fonts) === null || _app_fonts === void 0 ? void 0 : _app_fonts.length) ? [\n [\n \"expo-font\",\n {\n fonts: app.fonts\n }\n ]\n ] : void 0,\n ios: app.ios && {\n bundleIdentifier: app.ios.bundleId,\n buildNumber: app.ios.buildNumber,\n supportsTablet: app.ios.tablet,\n associatedDomains: app.ios.associatedDomains,\n usesAppleSignIn: app.ios.usesAppleSignIn,\n googleServicesFile: app.ios.googleServicesFile,\n infoPlist: app.ios.infoPlist,\n entitlements: app.ios.entitlements\n },\n android: app.android && {\n package: app.android.applicationId,\n versionCode: app.android.versionCode,\n permissions: app.android.permissions,\n blockedPermissions: app.android.blockedPermissions,\n googleServicesFile: app.android.googleServicesFile,\n adaptiveIcon: app.android.adaptiveIcon && {\n foregroundImage: app.android.adaptiveIcon.foreground,\n backgroundImage: app.android.adaptiveIcon.background,\n backgroundColor: app.android.adaptiveIcon.backgroundColor,\n monochromeImage: app.android.adaptiveIcon.monochrome\n }\n }\n };\n}\nexport {\n expoClientFromNativeApp,\n validateNativeApp\n};\n//# sourceMappingURL=nativeAppManifest.js.map\n"],"mappings":";AAAA,IAAI,cAAc;AAClB,IAAI,SAAS;AACb,IAAI,UAAU;AACd,IAAI,eAAe;AACnB,IAAI,cAAc;AAClB,IAAI,oBAAoB;AACxB,IAAI,YAAY;AAChB,IAAI,YAAY;AAChB,IAAI,eAAe;CACjB;CACA;CACA;AACF;AACA,IAAI,wBAAwB;CAC1B;CACA;CACA;AACF;AACA,SAAS,KAAK,SAAS;CACrB,MAAM,IAAI,MAAM,6BAA6B,SAAS;AACxD;AACA,SAAS,kBAAkB,UAAU,UAAU;CAC7C,IAAI,kBAAkB,uBAAuB,mBAAmB,mBAAmB,uBAAuB,wBAAwB,yBAAyB,oBAAoB,eAAe,kBAAkB;CAChN,IAAI,CAAC,YAAY,OAAO,aAAa,UAAU,KAAK,4BAA4B;CAChF,IAAI,CAAC,SAAS,QAAQ,OAAO,SAAS,SAAS,UAAU,KAAK,kBAAkB;CAChF,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,GAAG;EACpC,KAAK,SAAS,SAAS,KAAK,4EAA4E;CAC1G;CACA,IAAI,UAAU,SAAS,WAAW,KAAK,IAAI,CAAC,IAAI,MAAM,QAAQ,SAAS,MAAM,IAAI,SAAS,SAAS,CACjG,SAAS,MACX;CACA,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,QAAQ,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACxJ,IAAI,SAAS,MAAM;GACnB,IAAI,OAAO,WAAW,YAAY,CAAC,OAAO,KAAK,MAAM,GAAG;IACtD,KAAK,WAAW,OAAO,6BAA6B;GACtD;EACF;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,IAAI,SAAS,gBAAgB,KAAK,KAAK,CAAC,aAAa,SAAS,SAAS,WAAW,GAAG;EACnF,KAAK,gBAAgB,SAAS,YAAY,YAAY,aAAa,KAAK,IAAI,GAAG;CACjF;CACA,IAAI,SAAS,uBAAuB,KAAK,KAAK,CAAC,sBAAsB,SAAS,SAAS,kBAAkB,GAAG;EAC1G,KAAK,uBAAuB,SAAS,mBAAmB,YAAY,sBAAsB,KAAK,IAAI,GAAG;CACxG;CACA,IAAI,SAAS,UAAU,KAAK,GAAG;EAC7B,IAAI,wBAAwB,IAAI,IAAI;EACpC,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;EAC1F,IAAI;GACF,KAAK,IAAI,aAAa,SAAS,MAAM,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;IACrK,IAAI,OAAO,OAAO;IAClB,IAAI;IACJ,IAAI,OAAO,SAAS,YAAY,CAAC,UAAU,KAAK,IAAI,GAAG;KACrD,KAAK,gBAAgB,KAAK,mCAAmC;IAC/D;IACA,IAAI,QAAQ,kBAAkB,KAAK,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,QAAQ,oBAAoB,KAAK,IAAI,kBAAkB;IAChH,IAAI,MAAM,IAAI,IAAI,GAAG,KAAK,eAAe,KAAK,OAAO;IACrD,MAAM,IAAI,IAAI;GAChB;EACF,SAAS,KAAK;GACZ,qBAAqB;GACrB,kBAAkB;EACpB,UAAU;GACR,IAAI;IACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;KAC5D,WAAW,OAAO;IACpB;GACF,UAAU;IACR,IAAI,oBAAoB;KACtB,MAAM;IACR;GACF;EACF;CACF;CACA,IAAI,SAAS,YAAY,KAAK,KAAK,CAAC,QAAQ,KAAK,SAAS,OAAO,GAAG;EAClE,KAAK,YAAY,SAAS,QAAQ,oCAAoC;CACxE;CACA,IAAI,SAAS,SAAS,KAAK,MAAM,CAAC,SAAS,KAAK,UAAU,CAAC,UAAU,KAAK,SAAS,KAAK,eAAe,IAAI;EACzG,KAAK,0DAA0D;CACjE;CACA,IAAI,SAAS,WAAW,KAAK,MAAM,CAAC,SAAS,OAAO,UAAU,CAAC,UAAU,KAAK,SAAS,OAAO,eAAe,KAAK,SAAS,OAAO,UAAU,KAAK,MAAM,CAAC,OAAO,SAAS,SAAS,OAAO,KAAK,KAAK,SAAS,OAAO,QAAQ,KAAK,SAAS,OAAO,QAAQ,OAAO;EAC5P,KAAK,kFAAkF;CACzF;CACA,MAAM,mBAAmB,SAAS,YAAY,QAAQ,qBAAqB,KAAK,IAAI,KAAK,IAAI,iBAAiB,UAAU,KAAK,KAAK,CAAC,UAAU,KAAK,SAAS,OAAO,KAAK,eAAe,GAAG;EACvL,KAAK,sDAAsD;CAC7D;CACA,MAAM,oBAAoB,SAAS,YAAY,QAAQ,sBAAsB,KAAK,IAAI,KAAK,KAAK,wBAAwB,kBAAkB,UAAU,QAAQ,0BAA0B,KAAK,IAAI,KAAK,IAAI,sBAAsB,qBAAqB,KAAK,KAAK,SAAS,OAAO,oBAAoB,KAAK,GAAG;EACvS,KAAK,+EAA+E;CACtF;CACA,MAAM,oBAAoB,SAAS,YAAY,QAAQ,sBAAsB,KAAK,IAAI,KAAK,IAAI,kBAAkB,gBAAgB,KAAK,KAAK,SAAS,OAAO,eAAe,aAAa,SAAS,OAAO,eAAe,SAAS;EAC7N,KAAK,sBAAsB,SAAS,OAAO,WAAW,2BAA2B;CACnF;CACA,MAAM,wBAAwB,SAAS,iBAAiB,QAAQ,0BAA0B,KAAK,IAAI,KAAK,IAAI,sBAAsB,YAAY,KAAK,MAAM,OAAO,SAAS,YAAY,WAAW,YAAY,SAAS,YAAY,OAAO,KAAK,MAAM,KAAK;EACtP,KAAK,+CAA+C;CACtD;CACA,IAAI,SAAS,iBAAiB,KAAK,MAAM,CAAC,SAAS,gBAAgB,SAAS,aAAa,YAAY,KAAK,KAAK,SAAS,aAAa,cAAc,KAAK,IAAI;EAC1J,KAAK,kDAAkD;CACzD;CACA,MAAM,yBAAyB,SAAS,kBAAkB,QAAQ,2BAA2B,KAAK,IAAI,KAAK,IAAI,uBAAuB,aAAa,KAAK,MAAM,OAAO,SAAS,aAAa,YAAY,YAAY,SAAS,aAAa,QAAQ,KAAK,MAAM,KAAK;EAC/P,KAAK,iDAAiD;CACxD;CACA,MAAM,0BAA0B,SAAS,kBAAkB,QAAQ,4BAA4B,KAAK,IAAI,KAAK,IAAI,wBAAwB,eAAe,KAAK,MAAM,OAAO,SAAS,aAAa,cAAc,YAAY,SAAS,aAAa,UAAU,KAAK,MAAM,KAAK;EACxQ,KAAK,mDAAmD;CAC1D;CACA,IAAI,SAAS,aAAa,KAAK,MAAM,CAAC,SAAS,YAAY,OAAO,SAAS,SAAS,UAAU,YAAY,SAAS,SAAS,MAAM,KAAK,MAAM,KAAK;EAChJ,KAAK,2CAA2C;CAClD;CACA,IAAI,SAAS,aAAa,KAAK,GAAG;EAChC,IAAI,CAAC,SAAS,YAAY,SAAS,SAAS,UAAU,KAAK,KAAK,SAAS,SAAS,mBAAmB,KAAK,GAAG;GAC3G,KAAK,sEAAsE;EAC7E;EACA,IAAI,SAAS,SAAS,UAAU,KAAK,MAAM,OAAO,SAAS,SAAS,UAAU,YAAY,SAAS,SAAS,MAAM,KAAK,MAAM,KAAK;GAChI,KAAK,2CAA2C;EAClD;EACA,IAAI,SAAS,SAAS,mBAAmB,KAAK,MAAM,OAAO,SAAS,SAAS,mBAAmB,YAAY,SAAS,SAAS,eAAe,KAAK,MAAM,KAAK;GAC3J,KAAK,oDAAoD;EAC3D;CACF;CACA,IAAI,SAAS,aAAa,KAAK,MAAM,CAAC,SAAS,YAAY,OAAO,SAAS,SAAS,cAAc,YAAY,SAAS,SAAS,UAAU,KAAK,MAAM,KAAK;EACxJ,KAAK,+CAA+C;CACtD;CACA,MAAM,qBAAqB,SAAS,cAAc,QAAQ,uBAAuB,KAAK,IAAI,KAAK,IAAI,mBAAmB,gBAAgB,KAAK,KAAK,OAAO,SAAS,SAAS,eAAe,WAAW;EACjM,KAAK,uCAAuC;CAC9C;CACA,IAAI,SAAS,UAAU,KAAK,GAAG;EAC7B,IAAI,CAAC,SAAS,SAAS,OAAO,SAAS,UAAU,UAAU;GACzD,KAAK,wDAAwD;EAC/D;EACA,IAAI,SAAS,MAAM,eAAe,KAAK,MAAM,OAAO,SAAS,MAAM,eAAe,YAAY,SAAS,MAAM,WAAW,KAAK,MAAM,KAAK;GACtI,KAAK,6CAA6C;EACpD;EACA,IAAI,SAAS,MAAM,eAAe,KAAK,KAAK,OAAO,SAAS,MAAM,eAAe,WAAW;GAC1F,KAAK,oCAAoC;EAC3C;EACA,IAAI,SAAS,MAAM,eAAe,KAAK,KAAK,SAAS,MAAM,eAAe,MAAM;GAC9E,KAAK,wDAAwD;EAC/D;CACF;CACA,MAAM,gBAAgB,SAAS,SAAS,QAAQ,kBAAkB,KAAK,IAAI,KAAK,IAAI,cAAc,4BAA4B,KAAK,MAAM,OAAO,SAAS,IAAI,2BAA2B,YAAY,SAAS,IAAI,uBAAuB,KAAK,MAAM,KAAK;EACtP,KAAK,uDAAuD;CAC9D;CACA,IAAI,SAAS,WAAW,KAAK,MAAM,SAAS,mBAAmB,SAAS,YAAY,QAAQ,qBAAqB,KAAK,IAAI,KAAK,IAAI,iBAAiB,iBAAiB,YAAY,SAAS,OAAO,YAAY,KAAK,MAAM,MAAM,OAAO,SAAS,OAAO,eAAe,YAAY,SAAS,OAAO,WAAW,KAAK,MAAM,KAAK;EACzT,KAAK,oEAAoE;CAC3E;CACA,IAAI,SAAS,kBAAkB,KAAK,GAAG;EACrC,IAAI,OAAO,SAAS,kBAAkB,YAAY,SAAS,cAAc,SAAS,KAAK,KAAK,OAAO,SAAS,cAAc,SAAS,WAAW;GAC5I,KAAK,sCAAsC;EAC7C;EACA,IAAI,MAAM,SAAS,cAAc;EACjC,IAAI,QAAQ,KAAK,KAAK,QAAQ,iBAAiB,QAAQ,cAAc;GACnE,KAAK,iCAAiC,IAAI,oCAAoC;EAChF;EACA,IAAI,QAAQ,KAAK,KAAK,CAAC,SAAS,cAAc,MAAM;GAClD,KAAK,uDAAuD;EAC9D;CACF;CACA,IAAI,UAAU,iBAAiB,SAAS,SAAS,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe;CAC7G,IAAI,WAAW,KAAK,MAAM,CAAC,UAAU,KAAK,OAAO,KAAK,KAAK,OAAO,SAAS,KAAK,KAAK,CAAC,UAAU,KAAK,OAAO,IAAI,IAAI;EAClH,KAAK,6DAA6D;CACpE;CACA,IAAI,SAAS,qBAAqB,KAAK,KAAK,OAAO,SAAS,qBAAqB,WAAW;EAC1F,KAAK,oCAAoC;CAC3C;CACA,IAAI,SAAS,YAAY,KAAK,GAAG;EAC/B,IAAI,OAAO,SAAS,QAAQ,mBAAmB,YAAY,SAAS,QAAQ,eAAe,KAAK,MAAM,IAAI;GACxG,KAAK,mDAAmD;EAC1D;EACA,IAAI,SAAS,QAAQ,QAAQ,KAAK,MAAM,OAAO,SAAS,QAAQ,QAAQ,YAAY,SAAS,QAAQ,IAAI,KAAK,MAAM,KAAK;GACvH,KAAK,wCAAwC;EAC/C;CACF;CACA,IAAI,CAAC,YAAY,aAAa,OAAO;EACnC,IAAI;EACJ,IAAI,GAAG,iBAAiB,SAAS,SAAS,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe,aAAa,CAAC,YAAY,KAAK,SAAS,IAAI,QAAQ,GAAG;GAC3J,IAAI;GACJ,KAAK,kBAAkB,iBAAiB,SAAS,SAAS,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe,SAAS,sBAAsB;EACvJ;EACA,IAAI,SAAS,IAAI,qBAAqB,KAAK,KAAK,CAAC,kBAAkB,KAAK,SAAS,IAAI,gBAAgB,GAAG;GACtG,KAAK,yBAAyB,SAAS,IAAI,iBAAiB,wBAAwB;EACtF;EACA,IAAI,SAAS,IAAI,gBAAgB,KAAK,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,WAAW,GAAG;GACvF,KAAK,oBAAoB,SAAS,IAAI,YAAY,8CAA8C;EAClG;EACA,IAAI,UAAU,SAAS,IAAI;EAC3B,IAAI,SAAS;GACX,IAAI,sBAAsB;GAC1B,IAAI,CAAC,SAAS,IAAI,oBAAoB,OAAO,SAAS,IAAI,gBAAgB,IAAI,IAAI;IAChF,KAAK,4DAA4D;GACnE;GACA,IAAI,CAAC,2DAA2D,KAAK,QAAQ,QAAQ,GAAG;IACtF,KAAK,4EAA4E;GACnF;GACA,IAAI,CAAC,4BAA4B,KAAK,QAAQ,IAAI,GAAG;IACnD,KAAK,qDAAqD;GAC5D;GACA,IAAI,GAAG,uBAAuB,QAAQ,iBAAiB,QAAQ,yBAAyB,KAAK,IAAI,KAAK,IAAI,qBAAqB,KAAK,MAAM,GAAG,uBAAuB,QAAQ,iBAAiB,QAAQ,yBAAyB,KAAK,IAAI,KAAK,IAAI,qBAAqB,KAAK,IAAI;IAC5Q,KAAK,mEAAmE;GAC1E;GACA,IAAI,QAAQ,sBAAsB,KAAK,KAAK,OAAO,QAAQ,sBAAsB,WAAW;IAC1F,KAAK,iDAAiD;GACxD;EACF;CACF;CACA,IAAI,CAAC,YAAY,aAAa,WAAW;EACvC,IAAI;EACJ,IAAI;EACJ,IAAI,GAAG,oBAAoB,SAAS,aAAa,QAAQ,sBAAsB,KAAK,IAAI,KAAK,IAAI,kBAAkB,kBAAkB,CAAC,YAAY,KAAK,SAAS,QAAQ,aAAa,GAAG;GACtL,IAAI;GACJ,KAAK,2BAA2B,qBAAqB,SAAS,aAAa,QAAQ,uBAAuB,KAAK,IAAI,KAAK,IAAI,mBAAmB,cAAc,sBAAsB;EACrL;EACA,IAAI,SAAS,QAAQ,WAAW,KAAK,MAAM,CAAC,OAAO,UAAU,SAAS,QAAQ,MAAM,KAAK,SAAS,QAAQ,SAAS,MAAM,SAAS,QAAQ,SAAS,KAAK;GACtJ,KAAK,mBAAmB,SAAS,QAAQ,OAAO,mCAAmC;EACrF;EACA,IAAI,SAAS,QAAQ,gBAAgB,KAAK,MAAM,CAAC,OAAO,UAAU,SAAS,QAAQ,WAAW,KAAK,SAAS,QAAQ,cAAc,IAAI;GACpI,KAAK,wBAAwB,SAAS,QAAQ,YAAY,6BAA6B;EACzF;EACA,KAAK,IAAI,KAAK,GAAG,QAAQ,CACvB,aACA,YACF,GAAG,KAAK,MAAM,QAAQ,MAAM;GAC1B,IAAI,MAAM,MAAM;GAChB,IAAI,QAAQ,SAAS,QAAQ;GAC7B,IAAI,UAAU,KAAK,MAAM,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK;IAChE,KAAK,WAAW,IAAI,IAAI,MAAM,+BAA+B;GAC/D;EACF;EACA,IAAI,SAAS,QAAQ,mBAAmB,CAAC,SAAS,QAAQ,QAAQ;GAChE,KAAK,8CAA8C;EACrD;EACA,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;EAC1F,IAAI;GACF,KAAK,IAAI,eAAe,6BAA6B,SAAS,QAAQ,cAAc,QAAQ,+BAA+B,KAAK,IAAI,6BAA6B,CAAC,EAAC,CAAE,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;IACrS,IAAI,OAAO,OAAO;IAClB,IAAI,CAAC,KAAK,QAAQ,CAAC,YAAY,KAAK,KAAK,IAAI,GAAG;KAC9C,KAAK,0BAA0B,KAAK,KAAK,mBAAmB;IAC9D;IACA,IAAI,KAAK,eAAe,KAAK,KAAK,CAAC,KAAK,WAAW,WAAW,GAAG,GAAG;KAClE,KAAK,gCAAgC,KAAK,WAAW,oBAAoB;IAC3E;GACF;EACF,SAAS,KAAK;GACZ,qBAAqB;GACrB,kBAAkB;EACpB,UAAU;GACR,IAAI;IACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;KAC5D,WAAW,OAAO;IACpB;GACF,UAAU;IACR,IAAI,oBAAoB;KACtB,MAAM;IACR;GACF;EACF;EACA,IAAI,eAAe,SAAS,QAAQ;EACpC,IAAI,iBAAiB,KAAK,MAAM,CAAC,aAAa,cAAc,aAAa,oBAAoB,KAAK,KAAK,CAAC,UAAU,KAAK,aAAa,eAAe,IAAI;GACrJ,KAAK,qFAAqF;EAC5F;EACA,IAAI,SAAS,QAAQ,qBAAqB,KAAK,MAAM,OAAO,SAAS,QAAQ,qBAAqB,YAAY,SAAS,QAAQ,iBAAiB,KAAK,MAAM,KAAK;GAC9J,KAAK,qDAAqD;EAC5D;CACF;CACA,OAAO;AACT;AACA,SAAS,wBAAwB,KAAK;CACpC,IAAI,kBAAkB;CACtB,IAAI,WAAW;CACf,OAAO;EACL,OAAO,mBAAmB,IAAI,iBAAiB,QAAQ,qBAAqB,KAAK,IAAI,mBAAmB,IAAI;EAC5G,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS,IAAI;EACb,aAAa,IAAI;EAIjB,qBAAqB,0BAA0B,IAAI,wBAAwB,QAAQ,4BAA4B,KAAK,IAAI,0BAA0B;EAClJ,OAAO,YAAY,IAAI,UAAU,QAAQ,cAAc,KAAK,IAAI,KAAK,IAAI,UAAU;EACnF,QAAQ,IAAI,UAAU;GACpB,OAAO,IAAI,OAAO;GAClB,iBAAiB,IAAI,OAAO;GAC5B,YAAY,IAAI,OAAO;GACvB,YAAY,IAAI,OAAO;GACvB,MAAM,IAAI,OAAO,QAAQ;IACvB,OAAO,IAAI,OAAO,KAAK;IACvB,iBAAiB,IAAI,OAAO,KAAK;GACnC;EACF;EACA,WAAW,aAAa,IAAI,WAAW,QAAQ,eAAe,KAAK,IAAI,KAAK,IAAI,WAAW,UAAU,CACnG,CACE,aACA,EACE,OAAO,IAAI,MACb,CACF,CACF,IAAI,KAAK;EACT,KAAK,IAAI,OAAO;GACd,kBAAkB,IAAI,IAAI;GAC1B,aAAa,IAAI,IAAI;GACrB,gBAAgB,IAAI,IAAI;GACxB,mBAAmB,IAAI,IAAI;GAC3B,iBAAiB,IAAI,IAAI;GACzB,oBAAoB,IAAI,IAAI;GAC5B,WAAW,IAAI,IAAI;GACnB,cAAc,IAAI,IAAI;EACxB;EACA,SAAS,IAAI,WAAW;GACtB,SAAS,IAAI,QAAQ;GACrB,aAAa,IAAI,QAAQ;GACzB,aAAa,IAAI,QAAQ;GACzB,oBAAoB,IAAI,QAAQ;GAChC,oBAAoB,IAAI,QAAQ;GAChC,cAAc,IAAI,QAAQ,gBAAgB;IACxC,iBAAiB,IAAI,QAAQ,aAAa;IAC1C,iBAAiB,IAAI,QAAQ,aAAa;IAC1C,iBAAiB,IAAI,QAAQ,aAAa;IAC1C,iBAAiB,IAAI,QAAQ,aAAa;GAC5C;EACF;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"nativeAppManifest.native.js","names":[],"sources":["esm/nativeAppManifest.native.js"],"sourcesContent":["var TARGET_NAME = /^[A-Za-z][A-Za-z0-9_]*$/;\nvar SCHEME = /^[a-z][a-z0-9+.-]*$/i;\nvar VERSION = /^\\d+\\.\\d+\\.\\d+/;\nvar BUILD_NUMBER = /^[A-Za-z0-9.]+$/;\nvar REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/;\nvar DEPLOYMENT_TARGET = /^\\d+\\.\\d+$/;\nvar HEX_COLOR = /^#[\\da-f]{6}$/i;\nvar FONT_FILE = /\\.(ttf|otf)$/i;\nvar ORIENTATIONS = [\n \"portrait\",\n \"landscape\",\n \"default\"\n];\nvar USER_INTERFACE_STYLES = [\n \"light\",\n \"dark\",\n \"automatic\"\n];\nfunction fail(message) {\n throw new Error(`[one] invalid native.app: ${message}`);\n}\nfunction validateNativeApp(manifest, platform) {\n var _manifest_ios, _manifest_ios1, _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_photoLibrary, _manifest_photoLibrary1, _manifest_location, _manifest_ios2, _manifest_speech, _manifest_ios3;\n if (!manifest || typeof manifest !== \"object\") fail(\"manifest must be an object\");\n if (!manifest.name || typeof manifest.name !== \"string\") fail(\"name is required\");\n if (!TARGET_NAME.test(manifest.name)) {\n fail(`name \"${manifest.name}\" must start with a letter and contain only letters, digits, and underscore`);\n }\n var schemes = manifest.scheme === void 0 ? [] : Array.isArray(manifest.scheme) ? manifest.scheme : [\n manifest.scheme\n ];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = schemes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var scheme = _step.value;\n if (typeof scheme !== \"string\" || !SCHEME.test(scheme)) {\n fail(`scheme \"${scheme}\" must be a valid uri scheme`);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (manifest.orientation !== void 0 && !ORIENTATIONS.includes(manifest.orientation)) {\n fail(`orientation \"${manifest.orientation}\" must be ${ORIENTATIONS.join(\", \")}`);\n }\n if (manifest.userInterfaceStyle !== void 0 && !USER_INTERFACE_STYLES.includes(manifest.userInterfaceStyle)) {\n fail(`userInterfaceStyle \"${manifest.userInterfaceStyle}\" must be ${USER_INTERFACE_STYLES.join(\", \")}`);\n }\n if (manifest.fonts !== void 0) {\n var names = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = manifest.fonts[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var font = _step1.value;\n var _font_split_pop;\n if (typeof font !== \"string\" || !FONT_FILE.test(font)) {\n fail(`fonts entry \"${font}\" must be a .ttf or .otf file path`);\n }\n var name = (_font_split_pop = font.split(\"/\").pop()) !== null && _font_split_pop !== void 0 ? _font_split_pop : font;\n if (names.has(name)) fail(`fonts lists ${name} twice`);\n names.add(name);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n if (manifest.version !== void 0 && !VERSION.test(manifest.version)) {\n fail(`version \"${manifest.version}\" must start with major.minor.patch`);\n }\n if (manifest.icon !== void 0 && (!manifest.icon.source || !HEX_COLOR.test(manifest.icon.backgroundColor))) {\n fail(\"icon requires source and a six-digit hex backgroundColor\");\n }\n if (((_manifest_ios = manifest.ios) === null || _manifest_ios === void 0 ? void 0 : _manifest_ios.alternateIcons) !== void 0) {\n if (!manifest.icon) fail(\"ios.alternateIcons requires a primary icon\");\n var entries = Object.entries(manifest.ios.alternateIcons);\n if (entries.length === 0) fail(\"ios.alternateIcons requires at least one icon\");\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = entries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var [name1, icon] = _step2.value;\n if (name1 === \"AppIcon\" || !TARGET_NAME.test(name1)) {\n fail(`ios.alternateIcons name \"${name1}\" must be an identifier other than AppIcon`);\n }\n if (!(icon === null || icon === void 0 ? void 0 : icon.source) || !HEX_COLOR.test(icon.backgroundColor)) {\n fail(`ios.alternateIcons.${name1} requires source and a six-digit hex backgroundColor`);\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n if (((_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.backgroundTasks) !== void 0) {\n var _tasks_refresh, _tasks_processing;\n var tasks = manifest.ios.backgroundTasks;\n if (!tasks || tasks.refresh !== void 0 && !Array.isArray(tasks.refresh) || tasks.processing !== void 0 && !Array.isArray(tasks.processing)) {\n fail(\"ios.backgroundTasks refresh and processing must be arrays of identifiers\");\n }\n var identifiers = [\n ...(_tasks_refresh = tasks.refresh) !== null && _tasks_refresh !== void 0 ? _tasks_refresh : [],\n ...(_tasks_processing = tasks.processing) !== null && _tasks_processing !== void 0 ? _tasks_processing : []\n ];\n if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {\n fail(\"ios.backgroundTasks needs distinct refresh or processing identifiers\");\n }\n var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;\n try {\n for (var _iterator3 = identifiers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var identifier = _step3.value;\n if (typeof identifier !== \"string\" || !REVERSE_DNS.test(identifier)) {\n fail(`ios.backgroundTasks identifier \"${identifier}\" must use reverse DNS notation`);\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return != null) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n if (manifest.splash !== void 0 && (!manifest.splash.source || !HEX_COLOR.test(manifest.splash.backgroundColor) || manifest.splash.width !== void 0 && (!Number.isFinite(manifest.splash.width) || manifest.splash.width < 1 || manifest.splash.width > 288))) {\n fail(\"splash requires source, a six-digit hex backgroundColor, and width from 1 to 288\");\n }\n if (((_manifest_splash = manifest.splash) === null || _manifest_splash === void 0 ? void 0 : _manifest_splash.dark) !== void 0 && !HEX_COLOR.test(manifest.splash.dark.backgroundColor)) {\n fail(\"splash.dark requires a six-digit hex backgroundColor\");\n }\n if (((_manifest_splash1 = manifest.splash) === null || _manifest_splash1 === void 0 ? void 0 : (_manifest_splash_dark = _manifest_splash1.dark) === null || _manifest_splash_dark === void 0 ? void 0 : _manifest_splash_dark.backgroundImage) !== void 0 && manifest.splash.backgroundImage === void 0) {\n fail(\"splash.dark.backgroundImage needs splash.backgroundImage for the light launch\");\n }\n if (((_manifest_splash2 = manifest.splash) === null || _manifest_splash2 === void 0 ? void 0 : _manifest_splash2.resizeMode) !== void 0 && manifest.splash.resizeMode !== \"contain\" && manifest.splash.resizeMode !== \"cover\") {\n fail(`splash.resizeMode \"${manifest.splash.resizeMode}\" must be contain or cover`);\n }\n if (((_manifest_imagePicker = manifest.imagePicker) === null || _manifest_imagePicker === void 0 ? void 0 : _manifest_imagePicker.camera) !== void 0 && (typeof manifest.imagePicker.camera !== \"string\" || manifest.imagePicker.camera.trim() === \"\")) {\n fail(\"imagePicker.camera must be a non-empty string\");\n }\n if (manifest.photoLibrary !== void 0 && (!manifest.photoLibrary || manifest.photoLibrary.addOnly === void 0 && manifest.photoLibrary.readWrite === void 0)) {\n fail(\"photoLibrary must configure addOnly or readWrite\");\n }\n if (((_manifest_photoLibrary = manifest.photoLibrary) === null || _manifest_photoLibrary === void 0 ? void 0 : _manifest_photoLibrary.addOnly) !== void 0 && (typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly must be a non-empty string\");\n }\n if (((_manifest_photoLibrary1 = manifest.photoLibrary) === null || _manifest_photoLibrary1 === void 0 ? void 0 : _manifest_photoLibrary1.readWrite) !== void 0 && (typeof manifest.photoLibrary.readWrite !== \"string\" || manifest.photoLibrary.readWrite.trim() === \"\")) {\n fail(\"photoLibrary.readWrite must be a non-empty string\");\n }\n if (manifest.contacts !== void 0 && (!manifest.contacts || typeof manifest.contacts.usage !== \"string\" || manifest.contacts.usage.trim() === \"\")) {\n fail(\"contacts.usage must be a non-empty string\");\n }\n if (manifest.calendar !== void 0) {\n if (!manifest.calendar || manifest.calendar.usage === void 0 && manifest.calendar.remindersUsage === void 0) {\n fail(\"calendar.usage or calendar.remindersUsage must be a non-empty string\");\n }\n if (manifest.calendar.usage !== void 0 && (typeof manifest.calendar.usage !== \"string\" || manifest.calendar.usage.trim() === \"\")) {\n fail(\"calendar.usage must be a non-empty string\");\n }\n if (manifest.calendar.remindersUsage !== void 0 && (typeof manifest.calendar.remindersUsage !== \"string\" || manifest.calendar.remindersUsage.trim() === \"\")) {\n fail(\"calendar.remindersUsage must be a non-empty string\");\n }\n }\n if (manifest.location !== void 0 && (!manifest.location || typeof manifest.location.whenInUse !== \"string\" || manifest.location.whenInUse.trim() === \"\")) {\n fail(\"location.whenInUse must be a non-empty string\");\n }\n if (((_manifest_location = manifest.location) === null || _manifest_location === void 0 ? void 0 : _manifest_location.background) !== void 0 && typeof manifest.location.background !== \"boolean\") {\n fail(\"location.background must be a boolean\");\n }\n if (manifest.audio !== void 0) {\n if (!manifest.audio || typeof manifest.audio !== \"object\") {\n fail(\"audio must configure microphone or background playback\");\n }\n if (manifest.audio.microphone !== void 0 && (typeof manifest.audio.microphone !== \"string\" || manifest.audio.microphone.trim() === \"\")) {\n fail(\"audio.microphone must be a non-empty string\");\n }\n if (manifest.audio.background !== void 0 && typeof manifest.audio.background !== \"boolean\") {\n fail(\"audio.background must be a boolean\");\n }\n if (manifest.audio.microphone === void 0 && manifest.audio.background !== true) {\n fail(\"audio must configure microphone or background playback\");\n }\n }\n if (((_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.faceIdUsageDescription) !== void 0 && (typeof manifest.ios.faceIdUsageDescription !== \"string\" || manifest.ios.faceIdUsageDescription.trim() === \"\")) {\n fail(\"ios.faceIdUsageDescription must be a non-empty string\");\n }\n if (manifest.speech !== void 0 && (typeof ((_manifest_speech = manifest.speech) === null || _manifest_speech === void 0 ? void 0 : _manifest_speech.recognition) !== \"string\" || manifest.speech.recognition.trim() === \"\" || typeof manifest.speech.microphone !== \"string\" || manifest.speech.microphone.trim() === \"\")) {\n fail(\"speech.recognition and speech.microphone must be non-empty strings\");\n }\n if (manifest.notifications !== void 0) {\n if (typeof manifest.notifications !== \"object\" || manifest.notifications.push !== void 0 && typeof manifest.notifications.push !== \"boolean\") {\n fail(\"notifications.push must be a boolean\");\n }\n var aps = manifest.notifications.apsEnvironment;\n if (aps !== void 0 && aps !== \"development\" && aps !== \"production\") {\n fail(`notifications.apsEnvironment \"${aps}\" must be development or production`);\n }\n if (aps !== void 0 && !manifest.notifications.push) {\n fail(\"notifications.apsEnvironment needs notifications.push\");\n }\n }\n var accent = (_manifest_ios3 = manifest.ios) === null || _manifest_ios3 === void 0 ? void 0 : _manifest_ios3.accentColor;\n if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {\n fail(\"ios.accentColor light and dark must be six-digit hex colors\");\n }\n if (manifest.pictureInPicture !== void 0 && typeof manifest.pictureInPicture !== \"boolean\") {\n fail(\"pictureInPicture must be a boolean\");\n }\n if (manifest.updates !== void 0) {\n if (typeof manifest.updates.runtimeVersion !== \"string\" || manifest.updates.runtimeVersion.trim() === \"\") {\n fail(\"updates.runtimeVersion must be a non-empty string\");\n }\n if (manifest.updates.url !== void 0 && (typeof manifest.updates.url !== \"string\" || manifest.updates.url.trim() === \"\")) {\n fail(\"updates.url must be a non-empty string\");\n }\n }\n if (!platform || platform === \"ios\") {\n var _manifest_ios4;\n if (!((_manifest_ios4 = manifest.ios) === null || _manifest_ios4 === void 0 ? void 0 : _manifest_ios4.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {\n var _manifest_ios5;\n fail(`ios.bundleId \"${(_manifest_ios5 = manifest.ios) === null || _manifest_ios5 === void 0 ? void 0 : _manifest_ios5.bundleId}\" must be reverse-dns`);\n }\n if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {\n fail(`ios.deploymentTarget \"${manifest.ios.deploymentTarget}\" must look like \"17.0\"`);\n }\n if (manifest.ios.buildNumber !== void 0 && !BUILD_NUMBER.test(manifest.ios.buildNumber)) {\n fail(`ios.buildNumber \"${manifest.ios.buildNumber}\" must contain only letters, digits, and dots`);\n }\n var widgets = manifest.ios.widgets;\n if (widgets) {\n var _widgets_displayName, _widgets_description;\n if (!manifest.ios.deploymentTarget || Number(manifest.ios.deploymentTarget) < 17) {\n fail(\"ios.widgets requires ios.deploymentTarget of 17.0 or newer\");\n }\n if (!/^group\\.[A-Za-z][A-Za-z0-9-]*(\\.[A-Za-z][A-Za-z0-9-]*)+$/.test(widgets.appGroup)) {\n fail(\"ios.widgets.appGroup must be a reverse-dns App Group beginning with group.\");\n }\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(widgets.kind)) {\n fail(\"ios.widgets.kind must be a non-empty WidgetKit kind\");\n }\n if (!((_widgets_displayName = widgets.displayName) === null || _widgets_displayName === void 0 ? void 0 : _widgets_displayName.trim()) || !((_widgets_description = widgets.description) === null || _widgets_description === void 0 ? void 0 : _widgets_description.trim())) {\n fail(\"ios.widgets.displayName and description must be non-empty strings\");\n }\n if (widgets.pushNotifications !== void 0 && typeof widgets.pushNotifications !== \"boolean\") {\n fail(\"ios.widgets.pushNotifications must be a boolean\");\n }\n }\n }\n if (!platform || platform === \"android\") {\n var _manifest_android_appLinks;\n var _manifest_android;\n if (!((_manifest_android = manifest.android) === null || _manifest_android === void 0 ? void 0 : _manifest_android.applicationId) || !REVERSE_DNS.test(manifest.android.applicationId)) {\n var _manifest_android1;\n fail(`android.applicationId \"${(_manifest_android1 = manifest.android) === null || _manifest_android1 === void 0 ? void 0 : _manifest_android1.applicationId}\" must be reverse-dns`);\n }\n if (manifest.android.minSdk !== void 0 && (!Number.isInteger(manifest.android.minSdk) || manifest.android.minSdk < 21 || manifest.android.minSdk > 36)) {\n fail(`android.minSdk \"${manifest.android.minSdk}\" must be an integer from 21 to 36`);\n }\n if (manifest.android.versionCode !== void 0 && (!Number.isInteger(manifest.android.versionCode) || manifest.android.versionCode < 1)) {\n fail(`android.versionCode \"${manifest.android.versionCode}\" must be a positive integer`);\n }\n for (var _i = 0, _iter = [\n \"targetSdk\",\n \"compileSdk\"\n ]; _i < _iter.length; _i++) {\n var key = _iter[_i];\n var value = manifest.android[key];\n if (value !== void 0 && (!Number.isInteger(value) || value < 21)) {\n fail(`android.${key} \"${value}\" must be an api level integer`);\n }\n }\n if (manifest.android.shrinkResources && !manifest.android.minify) {\n fail(\"android.shrinkResources needs android.minify\");\n }\n var _iteratorNormalCompletion4 = true, _didIteratorError4 = false, _iteratorError4 = void 0;\n try {\n for (var _iterator4 = ((_manifest_android_appLinks = manifest.android.appLinks) !== null && _manifest_android_appLinks !== void 0 ? _manifest_android_appLinks : [])[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var link = _step4.value;\n if (!link.host || !REVERSE_DNS.test(link.host)) {\n fail(`android.appLinks host \"${link.host}\" must be a domain`);\n }\n if (link.pathPrefix !== void 0 && !link.pathPrefix.startsWith(\"/\")) {\n fail(`android.appLinks pathPrefix \"${link.pathPrefix}\" must start with /`);\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return != null) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n var adaptiveIcon = manifest.android.adaptiveIcon;\n if (adaptiveIcon !== void 0 && (!adaptiveIcon.foreground || adaptiveIcon.backgroundColor !== void 0 && !HEX_COLOR.test(adaptiveIcon.backgroundColor))) {\n fail(\"android.adaptiveIcon requires foreground, and backgroundColor must be six-digit hex\");\n }\n if (manifest.android.googleMapsApiKey !== void 0 && (typeof manifest.android.googleMapsApiKey !== \"string\" || manifest.android.googleMapsApiKey.trim() === \"\")) {\n fail(\"android.googleMapsApiKey must be a non-empty string\");\n }\n }\n return manifest;\n}\nfunction expoClientFromNativeApp(app) {\n var _app_displayName, _app_userInterfaceStyle;\n var _app_icon, _app_fonts;\n return {\n name: (_app_displayName = app.displayName) !== null && _app_displayName !== void 0 ? _app_displayName : app.name,\n slug: app.name,\n scheme: app.scheme,\n version: app.version,\n orientation: app.orientation,\n // an expo config without the key means light, while prebuild writes no\n // UIUserInterfaceStyle for an unset style and the app follows the system,\n // so the manifest states the style the built app has.\n userInterfaceStyle: (_app_userInterfaceStyle = app.userInterfaceStyle) !== null && _app_userInterfaceStyle !== void 0 ? _app_userInterfaceStyle : \"automatic\",\n icon: (_app_icon = app.icon) === null || _app_icon === void 0 ? void 0 : _app_icon.source,\n splash: app.splash && {\n image: app.splash.source,\n backgroundImage: app.splash.backgroundImage,\n backgroundColor: app.splash.backgroundColor,\n imageWidth: app.splash.width,\n resizeMode: app.splash.resizeMode,\n dark: app.splash.dark && {\n image: app.splash.dark.source,\n backgroundImage: app.splash.dark.backgroundImage,\n backgroundColor: app.splash.dark.backgroundColor\n }\n },\n plugins: ((_app_fonts = app.fonts) === null || _app_fonts === void 0 ? void 0 : _app_fonts.length) ? [\n [\n \"expo-font\",\n {\n fonts: app.fonts\n }\n ]\n ] : void 0,\n ios: app.ios && {\n bundleIdentifier: app.ios.bundleId,\n buildNumber: app.ios.buildNumber,\n supportsTablet: app.ios.tablet,\n associatedDomains: app.ios.associatedDomains,\n usesAppleSignIn: app.ios.usesAppleSignIn,\n googleServicesFile: app.ios.googleServicesFile,\n infoPlist: app.ios.infoPlist,\n entitlements: app.ios.entitlements\n },\n android: app.android && {\n package: app.android.applicationId,\n versionCode: app.android.versionCode,\n permissions: app.android.permissions,\n blockedPermissions: app.android.blockedPermissions,\n googleServicesFile: app.android.googleServicesFile,\n adaptiveIcon: app.android.adaptiveIcon && {\n foregroundImage: app.android.adaptiveIcon.foreground,\n backgroundImage: app.android.adaptiveIcon.background,\n backgroundColor: app.android.adaptiveIcon.backgroundColor,\n monochromeImage: app.android.adaptiveIcon.monochrome\n }\n }\n };\n}\nexport {\n expoClientFromNativeApp,\n validateNativeApp\n};\n//# sourceMappingURL=nativeAppManifest.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vxrn/utils",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.139.1",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./types/index.d.ts",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"typecheck": "tsc --noEmit"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@vxrn/debug": "2.0.0-beta.
|
|
45
|
-
"@vxrn/resolve": "2.0.0-beta.
|
|
44
|
+
"@vxrn/debug": "2.0.0-beta.139.1",
|
|
45
|
+
"@vxrn/resolve": "2.0.0-beta.139.1",
|
|
46
46
|
"ws": "^8.21.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
@@ -46,6 +46,17 @@ describe('native.app manifest', () => {
|
|
|
46
46
|
icon: { source: '', backgroundColor: '#000000' },
|
|
47
47
|
})
|
|
48
48
|
).toThrow(/icon/)
|
|
49
|
+
expect(() => validateNativeApp({
|
|
50
|
+
...app, ios: { ...app.ios, alternateIcons: {
|
|
51
|
+
TestAlternate: { source: 'alternate.svg', backgroundColor: '#123456' },
|
|
52
|
+
} },
|
|
53
|
+
})).toThrow(/requires a primary icon/)
|
|
54
|
+
expect(() => validateNativeApp({
|
|
55
|
+
...app, icon: { source: 'primary.svg', backgroundColor: '#123456' },
|
|
56
|
+
ios: { ...app.ios, alternateIcons: {
|
|
57
|
+
AppIcon: { source: 'alternate.svg', backgroundColor: '#123456' },
|
|
58
|
+
} },
|
|
59
|
+
})).toThrow(/other than AppIcon/)
|
|
49
60
|
expect(() =>
|
|
50
61
|
validateNativeApp({
|
|
51
62
|
...app,
|
|
@@ -294,6 +305,34 @@ describe('native.app manifest', () => {
|
|
|
294
305
|
).toBe('dark')
|
|
295
306
|
})
|
|
296
307
|
|
|
308
|
+
test('the dev manifest carries both native launch background images', () => {
|
|
309
|
+
const client = expoClientFromNativeApp({
|
|
310
|
+
...app,
|
|
311
|
+
splash: {
|
|
312
|
+
source: './assets/mark.png',
|
|
313
|
+
backgroundImage: './assets/launch-light.png',
|
|
314
|
+
backgroundColor: '#ffffff',
|
|
315
|
+
dark: {
|
|
316
|
+
source: './assets/mark-dark.png',
|
|
317
|
+
backgroundImage: './assets/launch-dark.png',
|
|
318
|
+
backgroundColor: '#000000',
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
})
|
|
322
|
+
expect(client.splash).toEqual({
|
|
323
|
+
image: './assets/mark.png',
|
|
324
|
+
backgroundImage: './assets/launch-light.png',
|
|
325
|
+
backgroundColor: '#ffffff',
|
|
326
|
+
imageWidth: undefined,
|
|
327
|
+
resizeMode: undefined,
|
|
328
|
+
dark: {
|
|
329
|
+
image: './assets/mark-dark.png',
|
|
330
|
+
backgroundImage: './assets/launch-dark.png',
|
|
331
|
+
backgroundColor: '#000000',
|
|
332
|
+
},
|
|
333
|
+
})
|
|
334
|
+
})
|
|
335
|
+
|
|
297
336
|
test('platform scope skips the other platform requirement', () => {
|
|
298
337
|
expect(() =>
|
|
299
338
|
validateNativeApp({ name: 'MyApp', android: app.android } as any, 'android')
|
package/src/nativeAppManifest.ts
CHANGED
|
@@ -122,6 +122,9 @@ export interface NativeAppManifest {
|
|
|
122
122
|
light: string
|
|
123
123
|
dark?: string
|
|
124
124
|
}
|
|
125
|
+
// extra home screen icons selectable through One.iOS.AppIcon. keys are
|
|
126
|
+
// the icon names passed to setIcon; each source is a square 1024px image.
|
|
127
|
+
alternateIcons?: Record<string, { source: string; backgroundColor: string }>
|
|
125
128
|
// system prompt text for Face ID through One.iOS.LocalAuthentication.
|
|
126
129
|
faceIdUsageDescription?: string
|
|
127
130
|
// exposes the app's Documents in the Files app and document pickers.
|
|
@@ -146,6 +149,12 @@ export interface NativeAppManifest {
|
|
|
146
149
|
description: string
|
|
147
150
|
pushNotifications?: boolean
|
|
148
151
|
}
|
|
152
|
+
// launch handlers for One.iOS.BackgroundTasks. define the matching JS
|
|
153
|
+
// handlers in the native setupFile so a background-only launch can run.
|
|
154
|
+
backgroundTasks?: {
|
|
155
|
+
refresh?: string[]
|
|
156
|
+
processing?: string[]
|
|
157
|
+
}
|
|
149
158
|
}
|
|
150
159
|
android?: {
|
|
151
160
|
applicationId: string
|
|
@@ -259,6 +268,36 @@ export function validateNativeApp(
|
|
|
259
268
|
) {
|
|
260
269
|
fail('icon requires source and a six-digit hex backgroundColor')
|
|
261
270
|
}
|
|
271
|
+
if (manifest.ios?.alternateIcons !== undefined) {
|
|
272
|
+
if (!manifest.icon) fail('ios.alternateIcons requires a primary icon')
|
|
273
|
+
const entries = Object.entries(manifest.ios.alternateIcons)
|
|
274
|
+
if (entries.length === 0) fail('ios.alternateIcons requires at least one icon')
|
|
275
|
+
for (const [name, icon] of entries) {
|
|
276
|
+
if (name === 'AppIcon' || !TARGET_NAME.test(name)) {
|
|
277
|
+
fail(`ios.alternateIcons name "${name}" must be an identifier other than AppIcon`)
|
|
278
|
+
}
|
|
279
|
+
if (!icon?.source || !HEX_COLOR.test(icon.backgroundColor)) {
|
|
280
|
+
fail(`ios.alternateIcons.${name} requires source and a six-digit hex backgroundColor`)
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
if (manifest.ios?.backgroundTasks !== undefined) {
|
|
285
|
+
const tasks = manifest.ios.backgroundTasks
|
|
286
|
+
if (!tasks ||
|
|
287
|
+
(tasks.refresh !== undefined && !Array.isArray(tasks.refresh)) ||
|
|
288
|
+
(tasks.processing !== undefined && !Array.isArray(tasks.processing))) {
|
|
289
|
+
fail('ios.backgroundTasks refresh and processing must be arrays of identifiers')
|
|
290
|
+
}
|
|
291
|
+
const identifiers = [...(tasks.refresh ?? []), ...(tasks.processing ?? [])]
|
|
292
|
+
if (!identifiers.length || new Set(identifiers).size !== identifiers.length) {
|
|
293
|
+
fail('ios.backgroundTasks needs distinct refresh or processing identifiers')
|
|
294
|
+
}
|
|
295
|
+
for (const identifier of identifiers) {
|
|
296
|
+
if (typeof identifier !== 'string' || !REVERSE_DNS.test(identifier)) {
|
|
297
|
+
fail(`ios.backgroundTasks identifier "${identifier}" must use reverse DNS notation`)
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
262
301
|
if (
|
|
263
302
|
manifest.splash !== undefined &&
|
|
264
303
|
(!manifest.splash.source ||
|
|
@@ -561,11 +600,13 @@ export function expoClientFromNativeApp(app: NativeAppManifest) {
|
|
|
561
600
|
icon: app.icon?.source,
|
|
562
601
|
splash: app.splash && {
|
|
563
602
|
image: app.splash.source,
|
|
603
|
+
backgroundImage: app.splash.backgroundImage,
|
|
564
604
|
backgroundColor: app.splash.backgroundColor,
|
|
565
605
|
imageWidth: app.splash.width,
|
|
566
606
|
resizeMode: app.splash.resizeMode,
|
|
567
607
|
dark: app.splash.dark && {
|
|
568
608
|
image: app.splash.dark.source,
|
|
609
|
+
backgroundImage: app.splash.dark.backgroundImage,
|
|
569
610
|
backgroundColor: app.splash.dark.backgroundColor,
|
|
570
611
|
},
|
|
571
612
|
},
|
|
@@ -73,6 +73,10 @@ export interface NativeAppManifest {
|
|
|
73
73
|
light: string;
|
|
74
74
|
dark?: string;
|
|
75
75
|
};
|
|
76
|
+
alternateIcons?: Record<string, {
|
|
77
|
+
source: string;
|
|
78
|
+
backgroundColor: string;
|
|
79
|
+
}>;
|
|
76
80
|
faceIdUsageDescription?: string;
|
|
77
81
|
fileSharing?: boolean;
|
|
78
82
|
associatedDomains?: string[];
|
|
@@ -87,6 +91,10 @@ export interface NativeAppManifest {
|
|
|
87
91
|
description: string;
|
|
88
92
|
pushNotifications?: boolean;
|
|
89
93
|
};
|
|
94
|
+
backgroundTasks?: {
|
|
95
|
+
refresh?: string[];
|
|
96
|
+
processing?: string[];
|
|
97
|
+
};
|
|
90
98
|
};
|
|
91
99
|
android?: {
|
|
92
100
|
applicationId: string;
|
|
@@ -124,11 +132,13 @@ export declare function expoClientFromNativeApp(app: NativeAppManifest): {
|
|
|
124
132
|
icon: string | undefined;
|
|
125
133
|
splash: {
|
|
126
134
|
image: string;
|
|
135
|
+
backgroundImage: string | undefined;
|
|
127
136
|
backgroundColor: string;
|
|
128
137
|
imageWidth: number | undefined;
|
|
129
138
|
resizeMode: "contain" | "cover" | undefined;
|
|
130
139
|
dark: {
|
|
131
140
|
image: string | undefined;
|
|
141
|
+
backgroundImage: string | undefined;
|
|
132
142
|
backgroundColor: string;
|
|
133
143
|
} | undefined;
|
|
134
144
|
} | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeAppManifest.d.ts","sourceRoot":"","sources":["../src/nativeAppManifest.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,OAAO,GACP,UAAU,EAAE,GACZ;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,CAAA;AAEjC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAIhB,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAA;IAGlD,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAA;IACnD,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,MAAM,CAAA;QACd,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAA;QACd,eAAe,EAAE,MAAM,CAAA;QACvB,KAAK,CAAC,EAAE,MAAM,CAAA;QAId,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;QAGhC,eAAe,CAAC,EAAE,MAAM,CAAA;QAGxB,IAAI,CAAC,EAAE;YACL,MAAM,CAAC,EAAE,MAAM,CAAA;YACf,eAAe,EAAE,MAAM,CAAA;YACvB,eAAe,CAAC,EAAE,MAAM,CAAA;SACzB,CAAA;KACF,CAAA;IAID,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE;QAIZ,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;IAED,YAAY,CAAC,EAAE;QACb,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IAED,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IAED,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;IAED,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;IAED,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;IAID,MAAM,CAAC,EAAE;QACP,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IAKD,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,OAAO,CAAA;QAGd,cAAc,CAAC,EAAE,aAAa,GAAG,YAAY,CAAA;KAC9C,CAAA;IAGD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAK1B,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,cAAc,EAAE,MAAM,CAAA;KACvB,CAAA;IACD,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;QACpC,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,uBAAuB,CAAC,EAAE,OAAO,CAAA;QAGjC,WAAW,CAAC,EAAE;YACZ,KAAK,EAAE,MAAM,CAAA;YACb,IAAI,CAAC,EAAE,MAAM,CAAA;SACd,CAAA;
|
|
1
|
+
{"version":3,"file":"nativeAppManifest.d.ts","sourceRoot":"","sources":["../src/nativeAppManifest.ts"],"names":[],"mappings":"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"}
|