@vxrn/utils 2.0.0-beta.131.1 → 2.0.0-beta.133.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 +40 -1
- package/dist/cjs/nativeAppManifest.native.cjs +74 -17
- package/dist/cjs/nativeAppManifest.native.js +74 -17
- package/dist/cjs/nativeAppManifest.native.js.map +1 -1
- package/dist/esm/nativeAppManifest.mjs +40 -1
- package/dist/esm/nativeAppManifest.mjs.map +1 -1
- package/dist/esm/nativeAppManifest.native.js +74 -17
- package/dist/esm/nativeAppManifest.native.js.map +1 -1
- package/package.json +3 -3
- package/src/nativeAppManifest.ts +84 -0
- package/types/nativeAppManifest.d.ts +26 -0
- package/types/nativeAppManifest.d.ts.map +1 -1
|
@@ -5,6 +5,7 @@ const BUILD_NUMBER = /^[A-Za-z0-9.]+$/;
|
|
|
5
5
|
const REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\.[A-Za-z][A-Za-z0-9-]*)+$/;
|
|
6
6
|
const DEPLOYMENT_TARGET = /^\d+\.\d+$/;
|
|
7
7
|
const HEX_COLOR = /^#[\da-f]{6}$/i;
|
|
8
|
+
const FONT_FILE = /\.(ttf|otf)$/i;
|
|
8
9
|
const ORIENTATIONS = [
|
|
9
10
|
"portrait",
|
|
10
11
|
"landscape",
|
|
@@ -36,6 +37,17 @@ function validateNativeApp(manifest, platform) {
|
|
|
36
37
|
if (manifest.userInterfaceStyle !== void 0 && !USER_INTERFACE_STYLES.includes(manifest.userInterfaceStyle)) {
|
|
37
38
|
fail(`userInterfaceStyle "${manifest.userInterfaceStyle}" must be ${USER_INTERFACE_STYLES.join(", ")}`);
|
|
38
39
|
}
|
|
40
|
+
if (manifest.fonts !== void 0) {
|
|
41
|
+
const names = /* @__PURE__ */ new Set();
|
|
42
|
+
for (const font of manifest.fonts) {
|
|
43
|
+
if (typeof font !== "string" || !FONT_FILE.test(font)) {
|
|
44
|
+
fail(`fonts entry "${font}" must be a .ttf or .otf file path`);
|
|
45
|
+
}
|
|
46
|
+
const name = font.split("/").pop() ?? font;
|
|
47
|
+
if (names.has(name)) fail(`fonts lists ${name} twice`);
|
|
48
|
+
names.add(name);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
39
51
|
if (manifest.version !== void 0 && !VERSION.test(manifest.version)) {
|
|
40
52
|
fail(`version "${manifest.version}" must start with major.minor.patch`);
|
|
41
53
|
}
|
|
@@ -45,6 +57,12 @@ function validateNativeApp(manifest, platform) {
|
|
|
45
57
|
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))) {
|
|
46
58
|
fail("splash requires source, a six-digit hex backgroundColor, and width from 1 to 288");
|
|
47
59
|
}
|
|
60
|
+
if (manifest.splash?.dark !== void 0 && !HEX_COLOR.test(manifest.splash.dark.backgroundColor)) {
|
|
61
|
+
fail("splash.dark requires a six-digit hex backgroundColor");
|
|
62
|
+
}
|
|
63
|
+
if (manifest.splash?.dark?.backgroundImage !== void 0 && manifest.splash.backgroundImage === void 0) {
|
|
64
|
+
fail("splash.dark.backgroundImage needs splash.backgroundImage for the light launch");
|
|
65
|
+
}
|
|
48
66
|
if (manifest.splash?.resizeMode !== void 0 && manifest.splash.resizeMode !== "contain" && manifest.splash.resizeMode !== "cover") {
|
|
49
67
|
fail(`splash.resizeMode "${manifest.splash.resizeMode}" must be contain or cover`);
|
|
50
68
|
}
|
|
@@ -95,6 +113,17 @@ function validateNativeApp(manifest, platform) {
|
|
|
95
113
|
if (typeof manifest.notifications !== "object" || manifest.notifications.push !== void 0 && typeof manifest.notifications.push !== "boolean") {
|
|
96
114
|
fail("notifications.push must be a boolean");
|
|
97
115
|
}
|
|
116
|
+
const aps = manifest.notifications.apsEnvironment;
|
|
117
|
+
if (aps !== void 0 && aps !== "development" && aps !== "production") {
|
|
118
|
+
fail(`notifications.apsEnvironment "${aps}" must be development or production`);
|
|
119
|
+
}
|
|
120
|
+
if (aps !== void 0 && !manifest.notifications.push) {
|
|
121
|
+
fail("notifications.apsEnvironment needs notifications.push");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const accent = manifest.ios?.accentColor;
|
|
125
|
+
if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {
|
|
126
|
+
fail("ios.accentColor light and dark must be six-digit hex colors");
|
|
98
127
|
}
|
|
99
128
|
if (manifest.pictureInPicture !== void 0 && typeof manifest.pictureInPicture !== "boolean") {
|
|
100
129
|
fail("pictureInPicture must be a boolean");
|
|
@@ -152,6 +181,9 @@ function validateNativeApp(manifest, platform) {
|
|
|
152
181
|
fail(`android.${key} "${value}" must be an api level integer`);
|
|
153
182
|
}
|
|
154
183
|
}
|
|
184
|
+
if (manifest.android.shrinkResources && !manifest.android.minify) {
|
|
185
|
+
fail("android.shrinkResources needs android.minify");
|
|
186
|
+
}
|
|
155
187
|
for (const link of manifest.android.appLinks ?? []) {
|
|
156
188
|
if (!link.host || !REVERSE_DNS.test(link.host)) {
|
|
157
189
|
fail(`android.appLinks host "${link.host}" must be a domain`);
|
|
@@ -183,14 +215,20 @@ function expoClientFromNativeApp(app) {
|
|
|
183
215
|
image: app.splash.source,
|
|
184
216
|
backgroundColor: app.splash.backgroundColor,
|
|
185
217
|
imageWidth: app.splash.width,
|
|
186
|
-
resizeMode: app.splash.resizeMode
|
|
218
|
+
resizeMode: app.splash.resizeMode,
|
|
219
|
+
dark: app.splash.dark && {
|
|
220
|
+
image: app.splash.dark.source,
|
|
221
|
+
backgroundColor: app.splash.dark.backgroundColor
|
|
222
|
+
}
|
|
187
223
|
},
|
|
224
|
+
plugins: app.fonts?.length ? [["expo-font", { fonts: app.fonts }]] : void 0,
|
|
188
225
|
ios: app.ios && {
|
|
189
226
|
bundleIdentifier: app.ios.bundleId,
|
|
190
227
|
buildNumber: app.ios.buildNumber,
|
|
191
228
|
supportsTablet: app.ios.tablet,
|
|
192
229
|
associatedDomains: app.ios.associatedDomains,
|
|
193
230
|
usesAppleSignIn: app.ios.usesAppleSignIn,
|
|
231
|
+
googleServicesFile: app.ios.googleServicesFile,
|
|
194
232
|
infoPlist: app.ios.infoPlist,
|
|
195
233
|
entitlements: app.ios.entitlements
|
|
196
234
|
},
|
|
@@ -199,6 +237,7 @@ function expoClientFromNativeApp(app) {
|
|
|
199
237
|
versionCode: app.android.versionCode,
|
|
200
238
|
permissions: app.android.permissions,
|
|
201
239
|
blockedPermissions: app.android.blockedPermissions,
|
|
240
|
+
googleServicesFile: app.android.googleServicesFile,
|
|
202
241
|
adaptiveIcon: app.android.adaptiveIcon && {
|
|
203
242
|
foregroundImage: app.android.adaptiveIcon.foreground,
|
|
204
243
|
backgroundImage: app.android.adaptiveIcon.background,
|
|
@@ -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 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.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?.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 || typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly 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.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 }\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 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 userInterfaceStyle: app.userInterfaceStyle,\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 },\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 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 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,MAAM,cAAc;AACpB,MAAM,SAAS;AACf,MAAM,UAAU;AAChB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,oBAAoB;AAC1B,MAAM,YAAY;AAClB,MAAM,eAAe;CAAC;CAAY;CAAa;AAAS;AACxD,MAAM,wBAAwB;CAAC;CAAS;CAAQ;AAAW;AAC3D,SAAS,KAAK,SAAS;CACrB,MAAM,IAAI,MAAM,6BAA6B,SAAS;AACxD;AACA,SAAS,kBAAkB,UAAU,UAAU;CAC7C,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,KACE,SAAS,SAAS,KAAK,4EACzB;CACF;CACA,MAAM,UAAU,SAAS,WAAW,KAAK,IAAI,CAAC,IAAI,MAAM,QAAQ,SAAS,MAAM,IAAI,SAAS,SAAS,CAAC,SAAS,MAAM;CACrH,KAAK,MAAM,UAAU,SAAS;EAC5B,IAAI,OAAO,WAAW,YAAY,CAAC,OAAO,KAAK,MAAM,GAAG;GACtD,KAAK,WAAW,OAAO,6BAA6B;EACtD;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,KACE,uBAAuB,SAAS,mBAAmB,YAAY,sBAAsB,KAAK,IAAI,GAChG;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,KACE,kFACF;CACF;CACA,IAAI,SAAS,QAAQ,eAAe,KAAK,KAAK,SAAS,OAAO,eAAe,aAAa,SAAS,OAAO,eAAe,SAAS;EAChI,KAAK,sBAAsB,SAAS,OAAO,WAAW,2BAA2B;CACnF;CACA,IAAI,SAAS,aAAa,WAAW,KAAK,MAAM,OAAO,SAAS,YAAY,WAAW,YAAY,SAAS,YAAY,OAAO,KAAK,MAAM,KAAK;EAC7I,KAAK,+CAA+C;CACtD;CACA,IAAI,SAAS,iBAAiB,KAAK,MAAM,CAAC,SAAS,gBAAgB,OAAO,SAAS,aAAa,YAAY,YAAY,SAAS,aAAa,QAAQ,KAAK,MAAM,KAAK;EACpK,KAAK,iDAAiD;CACxD;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,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,IAAI,SAAS,KAAK,2BAA2B,KAAK,MAAM,OAAO,SAAS,IAAI,2BAA2B,YAAY,SAAS,IAAI,uBAAuB,KAAK,MAAM,KAAK;EACrK,KAAK,uDAAuD;CAC9D;CACA,IAAI,SAAS,WAAW,KAAK,MAAM,OAAO,SAAS,QAAQ,gBAAgB,YAAY,SAAS,OAAO,YAAY,KAAK,MAAM,MAAM,OAAO,SAAS,OAAO,eAAe,YAAY,SAAS,OAAO,WAAW,KAAK,MAAM,KAAK;EAC/N,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;CACF;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,CAAC,SAAS,KAAK,YAAY,CAAC,YAAY,KAAK,SAAS,IAAI,QAAQ,GAAG;GACvE,KAAK,iBAAiB,SAAS,KAAK,SAAS,sBAAsB;EACrE;EACA,IAAI,SAAS,IAAI,qBAAqB,KAAK,KAAK,CAAC,kBAAkB,KAAK,SAAS,IAAI,gBAAgB,GAAG;GACtG,KACE,yBAAyB,SAAS,IAAI,iBAAiB,wBACzD;EACF;EACA,IAAI,SAAS,IAAI,gBAAgB,KAAK,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,WAAW,GAAG;GACvF,KACE,oBAAoB,SAAS,IAAI,YAAY,8CAC/C;EACF;EACA,MAAM,UAAU,SAAS,IAAI;EAC7B,IAAI,SAAS;GACX,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,CAAC,QAAQ,aAAa,KAAK,KAAK,CAAC,QAAQ,aAAa,KAAK,GAAG;IAChE,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,CAAC,SAAS,SAAS,iBAAiB,CAAC,YAAY,KAAK,SAAS,QAAQ,aAAa,GAAG;GACzF,KACE,0BAA0B,SAAS,SAAS,cAAc,sBAC5D;EACF;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,KACE,wBAAwB,SAAS,QAAQ,YAAY,6BACvD;EACF;EACA,KAAK,MAAM,OAAO,CAAC,aAAa,YAAY,GAAG;GAC7C,MAAM,QAAQ,SAAS,QAAQ;GAC/B,IAAI,UAAU,KAAK,MAAM,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK;IAChE,KAAK,WAAW,IAAI,IAAI,MAAM,+BAA+B;GAC/D;EACF;EACA,KAAK,MAAM,QAAQ,SAAS,QAAQ,YAAY,CAAC,GAAG;GAClD,IAAI,CAAC,KAAK,QAAQ,CAAC,YAAY,KAAK,KAAK,IAAI,GAAG;IAC9C,KAAK,0BAA0B,KAAK,KAAK,mBAAmB;GAC9D;GACA,IAAI,KAAK,eAAe,KAAK,KAAK,CAAC,KAAK,WAAW,WAAW,GAAG,GAAG;IAClE,KAAK,gCAAgC,KAAK,WAAW,oBAAoB;GAC3E;EACF;EACA,MAAM,eAAe,SAAS,QAAQ;EACtC,IAAI,iBAAiB,KAAK,MAAM,CAAC,aAAa,cAAc,aAAa,oBAAoB,KAAK,KAAK,CAAC,UAAU,KAAK,aAAa,eAAe,IAAI;GACrJ,KACE,qFACF;EACF;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,OAAO;EACL,MAAM,IAAI,eAAe,IAAI;EAC7B,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS,IAAI;EACb,aAAa,IAAI;EACjB,oBAAoB,IAAI;EACxB,MAAM,IAAI,MAAM;EAChB,QAAQ,IAAI,UAAU;GACpB,OAAO,IAAI,OAAO;GAClB,iBAAiB,IAAI,OAAO;GAC5B,YAAY,IAAI,OAAO;GACvB,YAAY,IAAI,OAAO;EACzB;EACA,KAAK,IAAI,OAAO;GACd,kBAAkB,IAAI,IAAI;GAC1B,aAAa,IAAI,IAAI;GACrB,gBAAgB,IAAI,IAAI;GACxB,mBAAmB,IAAI,IAAI;GAC3B,iBAAiB,IAAI,IAAI;GACzB,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,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.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 || typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly 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.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 userInterfaceStyle: app.userInterfaceStyle,\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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"}
|
|
@@ -5,6 +5,7 @@ var BUILD_NUMBER = /^[A-Za-z0-9.]+$/;
|
|
|
5
5
|
var REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\.[A-Za-z][A-Za-z0-9-]*)+$/;
|
|
6
6
|
var DEPLOYMENT_TARGET = /^\d+\.\d+$/;
|
|
7
7
|
var HEX_COLOR = /^#[\da-f]{6}$/i;
|
|
8
|
+
var FONT_FILE = /\.(ttf|otf)$/i;
|
|
8
9
|
var ORIENTATIONS = [
|
|
9
10
|
"portrait",
|
|
10
11
|
"landscape",
|
|
@@ -19,7 +20,7 @@ function fail(message) {
|
|
|
19
20
|
throw new Error(`[one] invalid native.app: ${message}`);
|
|
20
21
|
}
|
|
21
22
|
function validateNativeApp(manifest, platform) {
|
|
22
|
-
var _manifest_splash, _manifest_imagePicker, _manifest_ios, _manifest_speech;
|
|
23
|
+
var _manifest_splash, _manifest_splash_dark, _manifest_splash1, _manifest_splash2, _manifest_imagePicker, _manifest_ios, _manifest_speech, _manifest_ios1;
|
|
23
24
|
if (!manifest || typeof manifest !== "object") fail("manifest must be an object");
|
|
24
25
|
if (!manifest.name || typeof manifest.name !== "string") fail("name is required");
|
|
25
26
|
if (!TARGET_NAME.test(manifest.name)) {
|
|
@@ -54,6 +55,35 @@ function validateNativeApp(manifest, platform) {
|
|
|
54
55
|
if (manifest.userInterfaceStyle !== void 0 && !USER_INTERFACE_STYLES.includes(manifest.userInterfaceStyle)) {
|
|
55
56
|
fail(`userInterfaceStyle "${manifest.userInterfaceStyle}" must be ${USER_INTERFACE_STYLES.join(", ")}`);
|
|
56
57
|
}
|
|
58
|
+
if (manifest.fonts !== void 0) {
|
|
59
|
+
var names = /* @__PURE__ */ new Set();
|
|
60
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
|
|
61
|
+
try {
|
|
62
|
+
for (var _iterator1 = manifest.fonts[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
63
|
+
var font = _step1.value;
|
|
64
|
+
var _font_split_pop;
|
|
65
|
+
if (typeof font !== "string" || !FONT_FILE.test(font)) {
|
|
66
|
+
fail(`fonts entry "${font}" must be a .ttf or .otf file path`);
|
|
67
|
+
}
|
|
68
|
+
var name = (_font_split_pop = font.split("/").pop()) !== null && _font_split_pop !== void 0 ? _font_split_pop : font;
|
|
69
|
+
if (names.has(name)) fail(`fonts lists ${name} twice`);
|
|
70
|
+
names.add(name);
|
|
71
|
+
}
|
|
72
|
+
} catch (err) {
|
|
73
|
+
_didIteratorError1 = true;
|
|
74
|
+
_iteratorError1 = err;
|
|
75
|
+
} finally {
|
|
76
|
+
try {
|
|
77
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
78
|
+
_iterator1.return();
|
|
79
|
+
}
|
|
80
|
+
} finally {
|
|
81
|
+
if (_didIteratorError1) {
|
|
82
|
+
throw _iteratorError1;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
57
87
|
if (manifest.version !== void 0 && !VERSION.test(manifest.version)) {
|
|
58
88
|
fail(`version "${manifest.version}" must start with major.minor.patch`);
|
|
59
89
|
}
|
|
@@ -63,7 +93,13 @@ function validateNativeApp(manifest, platform) {
|
|
|
63
93
|
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))) {
|
|
64
94
|
fail("splash requires source, a six-digit hex backgroundColor, and width from 1 to 288");
|
|
65
95
|
}
|
|
66
|
-
if (((_manifest_splash = manifest.splash) === null || _manifest_splash === void 0 ? void 0 : _manifest_splash.
|
|
96
|
+
if (((_manifest_splash = manifest.splash) === null || _manifest_splash === void 0 ? void 0 : _manifest_splash.dark) !== void 0 && !HEX_COLOR.test(manifest.splash.dark.backgroundColor)) {
|
|
97
|
+
fail("splash.dark requires a six-digit hex backgroundColor");
|
|
98
|
+
}
|
|
99
|
+
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) {
|
|
100
|
+
fail("splash.dark.backgroundImage needs splash.backgroundImage for the light launch");
|
|
101
|
+
}
|
|
102
|
+
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") {
|
|
67
103
|
fail(`splash.resizeMode "${manifest.splash.resizeMode}" must be contain or cover`);
|
|
68
104
|
}
|
|
69
105
|
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() === "")) {
|
|
@@ -113,6 +149,17 @@ function validateNativeApp(manifest, platform) {
|
|
|
113
149
|
if (typeof manifest.notifications !== "object" || manifest.notifications.push !== void 0 && typeof manifest.notifications.push !== "boolean") {
|
|
114
150
|
fail("notifications.push must be a boolean");
|
|
115
151
|
}
|
|
152
|
+
var aps = manifest.notifications.apsEnvironment;
|
|
153
|
+
if (aps !== void 0 && aps !== "development" && aps !== "production") {
|
|
154
|
+
fail(`notifications.apsEnvironment "${aps}" must be development or production`);
|
|
155
|
+
}
|
|
156
|
+
if (aps !== void 0 && !manifest.notifications.push) {
|
|
157
|
+
fail("notifications.apsEnvironment needs notifications.push");
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
var accent = (_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.accentColor;
|
|
161
|
+
if (accent !== void 0 && (!HEX_COLOR.test(accent.light) || accent.dark !== void 0 && !HEX_COLOR.test(accent.dark))) {
|
|
162
|
+
fail("ios.accentColor light and dark must be six-digit hex colors");
|
|
116
163
|
}
|
|
117
164
|
if (manifest.pictureInPicture !== void 0 && typeof manifest.pictureInPicture !== "boolean") {
|
|
118
165
|
fail("pictureInPicture must be a boolean");
|
|
@@ -126,10 +173,10 @@ function validateNativeApp(manifest, platform) {
|
|
|
126
173
|
}
|
|
127
174
|
}
|
|
128
175
|
if (!platform || platform === "ios") {
|
|
129
|
-
var
|
|
130
|
-
if (!((
|
|
131
|
-
var
|
|
132
|
-
fail(`ios.bundleId "${(
|
|
176
|
+
var _manifest_ios2;
|
|
177
|
+
if (!((_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {
|
|
178
|
+
var _manifest_ios3;
|
|
179
|
+
fail(`ios.bundleId "${(_manifest_ios3 = manifest.ios) === null || _manifest_ios3 === void 0 ? void 0 : _manifest_ios3.bundleId}" must be reverse-dns`);
|
|
133
180
|
}
|
|
134
181
|
if (manifest.ios.deploymentTarget !== void 0 && !DEPLOYMENT_TARGET.test(manifest.ios.deploymentTarget)) {
|
|
135
182
|
fail(`ios.deploymentTarget "${manifest.ios.deploymentTarget}" must look like "17.0"`);
|
|
@@ -177,10 +224,13 @@ function validateNativeApp(manifest, platform) {
|
|
|
177
224
|
fail(`android.${key} "${value}" must be an api level integer`);
|
|
178
225
|
}
|
|
179
226
|
}
|
|
180
|
-
|
|
227
|
+
if (manifest.android.shrinkResources && !manifest.android.minify) {
|
|
228
|
+
fail("android.shrinkResources needs android.minify");
|
|
229
|
+
}
|
|
230
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
181
231
|
try {
|
|
182
|
-
for (var
|
|
183
|
-
var link =
|
|
232
|
+
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) {
|
|
233
|
+
var link = _step2.value;
|
|
184
234
|
if (!link.host || !REVERSE_DNS.test(link.host)) {
|
|
185
235
|
fail(`android.appLinks host "${link.host}" must be a domain`);
|
|
186
236
|
}
|
|
@@ -189,16 +239,16 @@ function validateNativeApp(manifest, platform) {
|
|
|
189
239
|
}
|
|
190
240
|
}
|
|
191
241
|
} catch (err) {
|
|
192
|
-
|
|
193
|
-
|
|
242
|
+
_didIteratorError2 = true;
|
|
243
|
+
_iteratorError2 = err;
|
|
194
244
|
} finally {
|
|
195
245
|
try {
|
|
196
|
-
if (!
|
|
197
|
-
|
|
246
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
247
|
+
_iterator2.return();
|
|
198
248
|
}
|
|
199
249
|
} finally {
|
|
200
|
-
if (
|
|
201
|
-
throw
|
|
250
|
+
if (_didIteratorError2) {
|
|
251
|
+
throw _iteratorError2;
|
|
202
252
|
}
|
|
203
253
|
}
|
|
204
254
|
}
|
|
@@ -214,7 +264,7 @@ function validateNativeApp(manifest, platform) {
|
|
|
214
264
|
}
|
|
215
265
|
function expoClientFromNativeApp(app) {
|
|
216
266
|
var _app_displayName;
|
|
217
|
-
var _app_icon;
|
|
267
|
+
var _app_icon, _app_fonts;
|
|
218
268
|
return {
|
|
219
269
|
name: (_app_displayName = app.displayName) !== null && _app_displayName !== void 0 ? _app_displayName : app.name,
|
|
220
270
|
slug: app.name,
|
|
@@ -227,14 +277,20 @@ function expoClientFromNativeApp(app) {
|
|
|
227
277
|
image: app.splash.source,
|
|
228
278
|
backgroundColor: app.splash.backgroundColor,
|
|
229
279
|
imageWidth: app.splash.width,
|
|
230
|
-
resizeMode: app.splash.resizeMode
|
|
280
|
+
resizeMode: app.splash.resizeMode,
|
|
281
|
+
dark: app.splash.dark && {
|
|
282
|
+
image: app.splash.dark.source,
|
|
283
|
+
backgroundColor: app.splash.dark.backgroundColor
|
|
284
|
+
}
|
|
231
285
|
},
|
|
286
|
+
plugins: ((_app_fonts = app.fonts) === null || _app_fonts === void 0 ? void 0 : _app_fonts.length) ? [["expo-font", { fonts: app.fonts }]] : void 0,
|
|
232
287
|
ios: app.ios && {
|
|
233
288
|
bundleIdentifier: app.ios.bundleId,
|
|
234
289
|
buildNumber: app.ios.buildNumber,
|
|
235
290
|
supportsTablet: app.ios.tablet,
|
|
236
291
|
associatedDomains: app.ios.associatedDomains,
|
|
237
292
|
usesAppleSignIn: app.ios.usesAppleSignIn,
|
|
293
|
+
googleServicesFile: app.ios.googleServicesFile,
|
|
238
294
|
infoPlist: app.ios.infoPlist,
|
|
239
295
|
entitlements: app.ios.entitlements
|
|
240
296
|
},
|
|
@@ -243,6 +299,7 @@ function expoClientFromNativeApp(app) {
|
|
|
243
299
|
versionCode: app.android.versionCode,
|
|
244
300
|
permissions: app.android.permissions,
|
|
245
301
|
blockedPermissions: app.android.blockedPermissions,
|
|
302
|
+
googleServicesFile: app.android.googleServicesFile,
|
|
246
303
|
adaptiveIcon: app.android.adaptiveIcon && {
|
|
247
304
|
foregroundImage: app.android.adaptiveIcon.foreground,
|
|
248
305
|
backgroundImage: app.android.adaptiveIcon.background,
|
|
@@ -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 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_imagePicker, _manifest_ios, _manifest_speech;\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.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.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 || typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly 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.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 }\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_ios1;\n if (!((_manifest_ios1 = manifest.ios) === null || _manifest_ios1 === void 0 ? void 0 : _manifest_ios1.bundleId) || !REVERSE_DNS.test(manifest.ios.bundleId)) {\n var _manifest_ios2;\n fail(`ios.bundleId \"${(_manifest_ios2 = manifest.ios) === null || _manifest_ios2 === void 0 ? void 0 : _manifest_ios2.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 var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = ((_manifest_android_appLinks = manifest.android.appLinks) !== null && _manifest_android_appLinks !== void 0 ? _manifest_android_appLinks : [])[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var link = _step1.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 _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 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;\n var _app_icon;\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 userInterfaceStyle: app.userInterfaceStyle,\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 },\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 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 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.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_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 || typeof manifest.photoLibrary.addOnly !== \"string\" || manifest.photoLibrary.addOnly.trim() === \"\")) {\n fail(\"photoLibrary.addOnly 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.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;\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 userInterfaceStyle: app.userInterfaceStyle,\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":"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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.133.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.133.1",
|
|
45
|
+
"@vxrn/resolve": "2.0.0-beta.133.1",
|
|
46
46
|
"ws": "^8.21.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|