import { RCTDeviceEventEmitter, UnavailabilityError } from '@unimodules/core';
import { EventEmitter } from 'fbemitter';
import ExponentUpdates from './ExponentUpdates';
export async function reload() {
await ExponentUpdates.reload();
}
export async function reloadFromCache() {
await ExponentUpdates.reloadFromCache();
}
export async function checkForUpdateAsync() {
if (!ExponentUpdates.checkForUpdateAsync) {
throw new UnavailabilityError('Updates', 'checkForUpdateAsync');
}
const result = await ExponentUpdates.checkForUpdateAsync();
if (!result) {
return { isAvailable: false };
}
return {
isAvailable: true,
manifest: typeof result === 'string' ? JSON.parse(result) : result,
};
}
export async function fetchUpdateAsync({ eventListener, } = {}) {
if (!ExponentUpdates.fetchUpdateAsync) {
throw new UnavailabilityError('Updates', 'fetchUpdateAsync');
}
let subscription;
let result;
if (eventListener && typeof eventListener === 'function') {
subscription = addListener(eventListener);
}
try {
result = await ExponentUpdates.fetchUpdateAsync();
}
finally {
subscription && subscription.remove();
}
if (!result) {
return { isNew: false };
}
return {
isNew: true,
manifest: typeof result === 'string' ? JSON.parse(result) : result,
};
}
export async function clearUpdateCacheExperimentalAsync(abiVersion) {
if (!ExponentUpdates.clearUpdateCacheAsync) {
throw new UnavailabilityError('Updates', 'clearUpdateCacheAsync');
}
return ExponentUpdates.clearUpdateCacheAsync(abiVersion);
}
let _emitter;
function _getEmitter() {
if (!_emitter) {
_emitter = new EventEmitter();
RCTDeviceEventEmitter.addListener('Exponent.nativeUpdatesEvent', _emitEvent);
}
return _emitter;
}
function _emitEvent(params) {
let newParams = params;
if (typeof params === 'string') {
newParams = JSON.parse(params);
}
if (newParams.manifestString) {
newParams.manifest = JSON.parse(newParams.manifestString);
delete newParams.manifestString;
}
if (!_emitter) {
throw new Error(`EventEmitter must be initialized to use from its listener`);
}
_emitter.emit('Exponent.updatesEvent', newParams);
}
export function addListener(listener) {
let emitter = _getEmitter();
return emitter.addListener('Exponent.updatesEvent', listener);
}
export const EventType = {
DOWNLOAD_STARTED: 'downloadStart',
DOWNLOAD_PROGRESS: 'downloadProgress',
DOWNLOAD_FINISHED: 'downloadFinished',
NO_UPDATE_AVAILABLE: 'noUpdateAvailable',
ERROR: 'error',
};
//# sourceMappingURL=Updates.js.map