/**
 * Internal dependencies
 */
import type { StorageInterface } from '../../../types';
import objectStorage from './object';

let storage: StorageInterface & { removeItem?: ( key: string ) => void };

try {
	// Private Browsing in Safari 10 and earlier will throw an error when
	// attempting to set into localStorage. The test here is intentional in
	// causing a thrown error as condition for using fallback object storage.
	storage = window.localStorage;
	storage.setItem( '__wpDataTestLocalStorage', '' );
	storage.removeItem!( '__wpDataTestLocalStorage' );
} catch {
	storage = objectStorage;
}

export default storage;
