expo-updates
Version:
Fetches and manages remotely-hosted assets and updates to your app's JS bundle.
82 lines (70 loc) • 2.55 kB
text/typescript
import { NativeModule, registerWebModule } from 'expo-modules-core';
import {
UpdatesCheckAutomaticallyNativeValue,
UpdatesEvents,
UpdatesModuleInterface,
} from './ExpoUpdatesModule.types';
import {
Manifest,
UpdatesNativeStateMachineContext,
UpdateCheckResultNotAvailable,
UpdatesLogEntry,
UpdateFetchResultFailure,
UpdateCheckResultNotAvailableReason,
} from './Updates.types';
class ExpoUpdatesModule extends NativeModule<UpdatesEvents> implements UpdatesModuleInterface {
isEmergencyLaunch: boolean = false;
emergencyLaunchReason: string | null = null;
launchDuration: number | null = null;
isEmbeddedLaunch: boolean = false;
isEnabled: boolean = true;
isUsingEmbeddedAssets?: boolean | undefined = undefined;
runtimeVersion: string = '';
checkAutomatically: UpdatesCheckAutomaticallyNativeValue = 'ALWAYS';
channel: string = '';
shouldDeferToNativeForAPIMethodAvailabilityInDevelopment: boolean = false;
updateId?: string | undefined;
commitTime?: string | undefined;
manifestString?: string | undefined;
manifest?: Manifest | undefined;
localAssets?: Record<string, string> | undefined;
initialContext: UpdatesNativeStateMachineContext & {
latestManifestString?: string | undefined;
downloadedManifestString?: string | undefined;
lastCheckForUpdateTimeString?: string | undefined;
rollbackString?: string | undefined;
} = {
isStartupProcedureRunning: false,
isUpdateAvailable: false,
isUpdatePending: false,
isChecking: false,
isDownloading: false,
isRestarting: false,
restartCount: 0,
sequenceNumber: 0,
downloadProgress: 0,
};
async reload(): Promise<void> {
if (typeof window !== 'undefined') window.location.reload(true);
}
async checkForUpdateAsync(): Promise<UpdateCheckResultNotAvailable> {
return {
isAvailable: false,
manifest: undefined,
isRollBackToEmbedded: false,
reason: UpdateCheckResultNotAvailableReason.NO_UPDATE_AVAILABLE_ON_SERVER,
};
}
async getExtraParamsAsync(): Promise<Record<string, string>> {
return {};
}
async setExtraParamAsync(key: string, value: string | null): Promise<void> {}
async readLogEntriesAsync(maxAge: number): Promise<UpdatesLogEntry[]> {
return [];
}
async clearLogEntriesAsync(): Promise<void> {}
async fetchUpdateAsync(): Promise<UpdateFetchResultFailure> {
return { isNew: false, manifest: undefined, isRollBackToEmbedded: false };
}
}
export default registerWebModule(ExpoUpdatesModule, 'ExpoUpdates');