@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.
@@ -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":"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"}
1
+ {"version":3,"file":"nativeAppManifest.d.ts","sourceRoot":"","sources":["../src/nativeAppManifest.ts"],"names":[],"mappings":"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"}