@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
package/src/nativeAppManifest.ts
CHANGED
|
@@ -34,7 +34,21 @@ export interface NativeAppManifest {
|
|
|
34
34
|
// launch screen with it, as expo's resizeMode does. android's system
|
|
35
35
|
// splash shows the centered artwork either way.
|
|
36
36
|
resizeMode?: 'contain' | 'cover'
|
|
37
|
+
// a full-bleed image (a gradient, a texture) under the artwork on the ios
|
|
38
|
+
// launch screen. android's system splash has only a color.
|
|
39
|
+
backgroundImage?: string
|
|
40
|
+
// what a dark-appearance launch shows, as expo's splash.dark: its own
|
|
41
|
+
// background, and optionally its own artwork and background image.
|
|
42
|
+
dark?: {
|
|
43
|
+
source?: string
|
|
44
|
+
backgroundColor: string
|
|
45
|
+
backgroundImage?: string
|
|
46
|
+
}
|
|
37
47
|
}
|
|
48
|
+
// project-relative .ttf or .otf files bundled into the binary, as the
|
|
49
|
+
// expo-font plugin's `fonts`: ios lists them in UIAppFonts, android loads
|
|
50
|
+
// them from assets/fonts. the family name is the file's own.
|
|
51
|
+
fonts?: string[]
|
|
38
52
|
imagePicker?: {
|
|
39
53
|
// ios camera usage description shown at the system prompt. setting it
|
|
40
54
|
// also declares the android camera permission; both are required for
|
|
@@ -76,6 +90,9 @@ export interface NativeAppManifest {
|
|
|
76
90
|
// entitlement. without it firebase stays out of the app entirely.
|
|
77
91
|
notifications?: {
|
|
78
92
|
push?: boolean
|
|
93
|
+
// the push entitlement's apns environment, development by default. a
|
|
94
|
+
// build signed for testflight or the app store sends through production.
|
|
95
|
+
apsEnvironment?: 'development' | 'production'
|
|
79
96
|
}
|
|
80
97
|
// One.UI.PictureInPicture: stamps the ios audio background mode (pip opens
|
|
81
98
|
// only for a playback session) and android's supportsPictureInPicture.
|
|
@@ -97,6 +114,12 @@ export interface NativeAppManifest {
|
|
|
97
114
|
useFrameworks?: 'static' | 'dynamic'
|
|
98
115
|
ccache?: boolean
|
|
99
116
|
usesNonExemptEncryption?: boolean
|
|
117
|
+
// the tint the system gives the app's controls, tab selection and text
|
|
118
|
+
// cursor, as xcode's AccentColor asset; js reads PlatformColor('AccentColor').
|
|
119
|
+
accentColor?: {
|
|
120
|
+
light: string
|
|
121
|
+
dark?: string
|
|
122
|
+
}
|
|
100
123
|
// system prompt text for Face ID through One.iOS.LocalAuthentication.
|
|
101
124
|
faceIdUsageDescription?: string
|
|
102
125
|
// exposes the app's Documents in the Files app and document pickers.
|
|
@@ -106,6 +129,9 @@ export interface NativeAppManifest {
|
|
|
106
129
|
associatedDomains?: string[]
|
|
107
130
|
// the sign in with apple entitlement, for One.iOS.AppleAuthentication.
|
|
108
131
|
usesAppleSignIn?: boolean
|
|
132
|
+
// a firebase GoogleService-Info.plist, bundled into the app as expo's
|
|
133
|
+
// ios.googleServicesFile does.
|
|
134
|
+
googleServicesFile?: string
|
|
109
135
|
// Info.plist and entitlement keys native.app does not model (a tracking
|
|
110
136
|
// prompt, an sdk's key). a key native.app or the template already writes
|
|
111
137
|
// is rejected: set it through its field instead.
|
|
@@ -135,10 +161,19 @@ export interface NativeAppManifest {
|
|
|
135
161
|
}
|
|
136
162
|
targetSdk?: number
|
|
137
163
|
compileSdk?: number
|
|
164
|
+
// release builds run R8, as expo-build-properties' minify; shrinkResources
|
|
165
|
+
// also drops unused resources and needs minify. proguardRules are appended
|
|
166
|
+
// to the app's proguard-rules.pro.
|
|
167
|
+
minify?: boolean
|
|
168
|
+
shrinkResources?: boolean
|
|
169
|
+
proguardRules?: string
|
|
138
170
|
// extra manifest permissions: a bare name means android.permission.<name>.
|
|
139
171
|
// blocked ones are removed even when a library's manifest merges them in.
|
|
140
172
|
permissions?: string[]
|
|
141
173
|
blockedPermissions?: string[]
|
|
174
|
+
// a firebase google-services.json; prebuild applies the google-services
|
|
175
|
+
// gradle plugin, as expo's android.googleServicesFile does.
|
|
176
|
+
googleServicesFile?: string
|
|
142
177
|
// verified https app links routed to the app (android:autoVerify).
|
|
143
178
|
appLinks?: Array<{ host: string; pathPrefix?: string }>
|
|
144
179
|
// google maps api key for One.UI.Map. setting it compiles the maps sdk
|
|
@@ -155,6 +190,7 @@ const BUILD_NUMBER = /^[A-Za-z0-9.]+$/
|
|
|
155
190
|
const REVERSE_DNS = /^[A-Za-z][A-Za-z0-9-]*(\.[A-Za-z][A-Za-z0-9-]*)+$/
|
|
156
191
|
const DEPLOYMENT_TARGET = /^\d+\.\d+$/
|
|
157
192
|
const HEX_COLOR = /^#[\da-f]{6}$/i
|
|
193
|
+
const FONT_FILE = /\.(ttf|otf)$/i
|
|
158
194
|
const ORIENTATIONS = ['portrait', 'landscape', 'default'] as const
|
|
159
195
|
const USER_INTERFACE_STYLES = ['light', 'dark', 'automatic'] as const
|
|
160
196
|
|
|
@@ -201,6 +237,17 @@ export function validateNativeApp(
|
|
|
201
237
|
`userInterfaceStyle "${manifest.userInterfaceStyle}" must be ${USER_INTERFACE_STYLES.join(', ')}`
|
|
202
238
|
)
|
|
203
239
|
}
|
|
240
|
+
if (manifest.fonts !== undefined) {
|
|
241
|
+
const names = new Set<string>()
|
|
242
|
+
for (const font of manifest.fonts) {
|
|
243
|
+
if (typeof font !== 'string' || !FONT_FILE.test(font)) {
|
|
244
|
+
fail(`fonts entry "${font}" must be a .ttf or .otf file path`)
|
|
245
|
+
}
|
|
246
|
+
const name = font.split('/').pop() ?? font
|
|
247
|
+
if (names.has(name)) fail(`fonts lists ${name} twice`)
|
|
248
|
+
names.add(name)
|
|
249
|
+
}
|
|
250
|
+
}
|
|
204
251
|
if (manifest.version !== undefined && !VERSION.test(manifest.version)) {
|
|
205
252
|
fail(`version "${manifest.version}" must start with major.minor.patch`)
|
|
206
253
|
}
|
|
@@ -223,6 +270,18 @@ export function validateNativeApp(
|
|
|
223
270
|
'splash requires source, a six-digit hex backgroundColor, and width from 1 to 288'
|
|
224
271
|
)
|
|
225
272
|
}
|
|
273
|
+
if (
|
|
274
|
+
manifest.splash?.dark !== undefined &&
|
|
275
|
+
!HEX_COLOR.test(manifest.splash.dark.backgroundColor)
|
|
276
|
+
) {
|
|
277
|
+
fail('splash.dark requires a six-digit hex backgroundColor')
|
|
278
|
+
}
|
|
279
|
+
if (
|
|
280
|
+
manifest.splash?.dark?.backgroundImage !== undefined &&
|
|
281
|
+
manifest.splash.backgroundImage === undefined
|
|
282
|
+
) {
|
|
283
|
+
fail('splash.dark.backgroundImage needs splash.backgroundImage for the light launch')
|
|
284
|
+
}
|
|
226
285
|
if (
|
|
227
286
|
manifest.splash?.resizeMode !== undefined &&
|
|
228
287
|
manifest.splash.resizeMode !== 'contain' &&
|
|
@@ -320,6 +379,21 @@ export function validateNativeApp(
|
|
|
320
379
|
) {
|
|
321
380
|
fail('notifications.push must be a boolean')
|
|
322
381
|
}
|
|
382
|
+
const aps = manifest.notifications.apsEnvironment
|
|
383
|
+
if (aps !== undefined && aps !== 'development' && aps !== 'production') {
|
|
384
|
+
fail(`notifications.apsEnvironment "${aps}" must be development or production`)
|
|
385
|
+
}
|
|
386
|
+
if (aps !== undefined && !manifest.notifications.push) {
|
|
387
|
+
fail('notifications.apsEnvironment needs notifications.push')
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
const accent = manifest.ios?.accentColor
|
|
391
|
+
if (
|
|
392
|
+
accent !== undefined &&
|
|
393
|
+
(!HEX_COLOR.test(accent.light) ||
|
|
394
|
+
(accent.dark !== undefined && !HEX_COLOR.test(accent.dark)))
|
|
395
|
+
) {
|
|
396
|
+
fail('ios.accentColor light and dark must be six-digit hex colors')
|
|
323
397
|
}
|
|
324
398
|
if (
|
|
325
399
|
manifest.pictureInPicture !== undefined &&
|
|
@@ -417,6 +491,9 @@ export function validateNativeApp(
|
|
|
417
491
|
fail(`android.${key} "${value}" must be an api level integer`)
|
|
418
492
|
}
|
|
419
493
|
}
|
|
494
|
+
if (manifest.android.shrinkResources && !manifest.android.minify) {
|
|
495
|
+
fail('android.shrinkResources needs android.minify')
|
|
496
|
+
}
|
|
420
497
|
for (const link of manifest.android.appLinks ?? []) {
|
|
421
498
|
if (!link.host || !REVERSE_DNS.test(link.host)) {
|
|
422
499
|
fail(`android.appLinks host "${link.host}" must be a domain`)
|
|
@@ -464,13 +541,19 @@ export function expoClientFromNativeApp(app: NativeAppManifest) {
|
|
|
464
541
|
backgroundColor: app.splash.backgroundColor,
|
|
465
542
|
imageWidth: app.splash.width,
|
|
466
543
|
resizeMode: app.splash.resizeMode,
|
|
544
|
+
dark: app.splash.dark && {
|
|
545
|
+
image: app.splash.dark.source,
|
|
546
|
+
backgroundColor: app.splash.dark.backgroundColor,
|
|
547
|
+
},
|
|
467
548
|
},
|
|
549
|
+
plugins: app.fonts?.length ? [['expo-font', { fonts: app.fonts }]] : undefined,
|
|
468
550
|
ios: app.ios && {
|
|
469
551
|
bundleIdentifier: app.ios.bundleId,
|
|
470
552
|
buildNumber: app.ios.buildNumber,
|
|
471
553
|
supportsTablet: app.ios.tablet,
|
|
472
554
|
associatedDomains: app.ios.associatedDomains,
|
|
473
555
|
usesAppleSignIn: app.ios.usesAppleSignIn,
|
|
556
|
+
googleServicesFile: app.ios.googleServicesFile,
|
|
474
557
|
infoPlist: app.ios.infoPlist,
|
|
475
558
|
entitlements: app.ios.entitlements,
|
|
476
559
|
},
|
|
@@ -479,6 +562,7 @@ export function expoClientFromNativeApp(app: NativeAppManifest) {
|
|
|
479
562
|
versionCode: app.android.versionCode,
|
|
480
563
|
permissions: app.android.permissions,
|
|
481
564
|
blockedPermissions: app.android.blockedPermissions,
|
|
565
|
+
googleServicesFile: app.android.googleServicesFile,
|
|
482
566
|
adaptiveIcon: app.android.adaptiveIcon && {
|
|
483
567
|
foregroundImage: app.android.adaptiveIcon.foreground,
|
|
484
568
|
backgroundImage: app.android.adaptiveIcon.background,
|
|
@@ -17,7 +17,14 @@ export interface NativeAppManifest {
|
|
|
17
17
|
backgroundColor: string;
|
|
18
18
|
width?: number;
|
|
19
19
|
resizeMode?: 'contain' | 'cover';
|
|
20
|
+
backgroundImage?: string;
|
|
21
|
+
dark?: {
|
|
22
|
+
source?: string;
|
|
23
|
+
backgroundColor: string;
|
|
24
|
+
backgroundImage?: string;
|
|
25
|
+
};
|
|
20
26
|
};
|
|
27
|
+
fonts?: string[];
|
|
21
28
|
imagePicker?: {
|
|
22
29
|
camera?: string;
|
|
23
30
|
};
|
|
@@ -44,6 +51,7 @@ export interface NativeAppManifest {
|
|
|
44
51
|
};
|
|
45
52
|
notifications?: {
|
|
46
53
|
push?: boolean;
|
|
54
|
+
apsEnvironment?: 'development' | 'production';
|
|
47
55
|
};
|
|
48
56
|
pictureInPicture?: boolean;
|
|
49
57
|
updates?: {
|
|
@@ -59,10 +67,15 @@ export interface NativeAppManifest {
|
|
|
59
67
|
useFrameworks?: 'static' | 'dynamic';
|
|
60
68
|
ccache?: boolean;
|
|
61
69
|
usesNonExemptEncryption?: boolean;
|
|
70
|
+
accentColor?: {
|
|
71
|
+
light: string;
|
|
72
|
+
dark?: string;
|
|
73
|
+
};
|
|
62
74
|
faceIdUsageDescription?: string;
|
|
63
75
|
fileSharing?: boolean;
|
|
64
76
|
associatedDomains?: string[];
|
|
65
77
|
usesAppleSignIn?: boolean;
|
|
78
|
+
googleServicesFile?: string;
|
|
66
79
|
infoPlist?: Record<string, PlistValue>;
|
|
67
80
|
entitlements?: Record<string, PlistValue>;
|
|
68
81
|
widgets?: {
|
|
@@ -85,8 +98,12 @@ export interface NativeAppManifest {
|
|
|
85
98
|
};
|
|
86
99
|
targetSdk?: number;
|
|
87
100
|
compileSdk?: number;
|
|
101
|
+
minify?: boolean;
|
|
102
|
+
shrinkResources?: boolean;
|
|
103
|
+
proguardRules?: string;
|
|
88
104
|
permissions?: string[];
|
|
89
105
|
blockedPermissions?: string[];
|
|
106
|
+
googleServicesFile?: string;
|
|
90
107
|
appLinks?: Array<{
|
|
91
108
|
host: string;
|
|
92
109
|
pathPrefix?: string;
|
|
@@ -108,13 +125,21 @@ export declare function expoClientFromNativeApp(app: NativeAppManifest): {
|
|
|
108
125
|
backgroundColor: string;
|
|
109
126
|
imageWidth: number | undefined;
|
|
110
127
|
resizeMode: "contain" | "cover" | undefined;
|
|
128
|
+
dark: {
|
|
129
|
+
image: string | undefined;
|
|
130
|
+
backgroundColor: string;
|
|
131
|
+
} | undefined;
|
|
111
132
|
} | undefined;
|
|
133
|
+
plugins: (string | {
|
|
134
|
+
fonts: string[];
|
|
135
|
+
})[][] | undefined;
|
|
112
136
|
ios: {
|
|
113
137
|
bundleIdentifier: string;
|
|
114
138
|
buildNumber: string | undefined;
|
|
115
139
|
supportsTablet: boolean | undefined;
|
|
116
140
|
associatedDomains: string[] | undefined;
|
|
117
141
|
usesAppleSignIn: boolean | undefined;
|
|
142
|
+
googleServicesFile: string | undefined;
|
|
118
143
|
infoPlist: Record<string, PlistValue> | undefined;
|
|
119
144
|
entitlements: Record<string, PlistValue> | undefined;
|
|
120
145
|
} | undefined;
|
|
@@ -123,6 +148,7 @@ export declare function expoClientFromNativeApp(app: NativeAppManifest): {
|
|
|
123
148
|
versionCode: number | undefined;
|
|
124
149
|
permissions: string[] | undefined;
|
|
125
150
|
blockedPermissions: string[] | undefined;
|
|
151
|
+
googleServicesFile: string | undefined;
|
|
126
152
|
adaptiveIcon: {
|
|
127
153
|
foregroundImage: string;
|
|
128
154
|
backgroundImage: string | 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;
|
|
1
|
+
{"version":3,"file":"nativeAppManifest.d.ts","sourceRoot":"","sources":["../src/nativeAppManifest.ts"],"names":[],"mappings":"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"}
|