diff --git a/Libraries/Image/ImageStore.js b/Libraries/Image/ImageStore.js
deleted file mode 100644
index 7d6e7be5d6f..00000000000
--- a/Libraries/Image/ImageStore.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @flow
- * @format
- */
-'use strict';
-
-import NativeImageStore from './NativeImageStore';
-
-const Platform = require('../Utilities/Platform');
-
-const warnOnce = require('../Utilities/warnOnce');
-
-function warnUnimplementedMethod(methodName: string): void {
- warnOnce(
- `imagestore-${methodName}`,
- `react-native: ImageStore.${methodName}() is not implemented on ${
- Platform.OS
- }`,
- );
-}
-
-class ImageStore {
- /**
- * Check if the ImageStore contains image data for the specified URI.
- * @platform ios
- */
- static hasImageForTag(uri: string, callback: (hasImage: boolean) => void) {
- if (NativeImageStore.hasImageForTag) {
- NativeImageStore.hasImageForTag(uri, callback);
- } else {
- warnUnimplementedMethod('hasImageForTag');
- }
- }
-
- /**
- * Delete an image from the ImageStore. Images are stored in memory and
- * must be manually removed when you are finished with them, otherwise they
- * will continue to use up RAM until the app is terminated. It is safe to
- * call `removeImageForTag()` without first calling `hasImageForTag()`, it
- * will simply fail silently.
- * @platform ios
- */
- static removeImageForTag(uri: string) {
- if (NativeImageStore.removeImageForTag) {
- NativeImageStore.removeImageForTag(uri);
- } else {
- warnUnimplementedMethod('removeImageForTag');
- }
- }
-
- /**
- * Stores a base64-encoded image in the ImageStore, and returns a URI that
- * can be used to access or display the image later. Images are stored in
- * memory only, and must be manually deleted when you are finished with
- * them by calling `removeImageForTag()`.
- *
- * Note that it is very inefficient to transfer large quantities of binary
- * data between JS and native code, so you should avoid calling this more
- * than necessary.
- * @platform ios
- */
- static addImageFromBase64(
- base64ImageData: string,
- success: (uri: string) => void,
- failure: (error: any) => void,
- ) {
- if (NativeImageStore.addImageFromBase64) {
- NativeImageStore.addImageFromBase64(base64ImageData, success, failure);
- } else {
- warnUnimplementedMethod('addImageFromBase64');
- }
- }
-
- /**
- * Retrieves the base64-encoded data for an image in the ImageStore. If the
- * specified URI does not match an image in the store, the failure callback
- * will be called.
- *
- * Note that it is very inefficient to transfer large quantities of binary
- * data between JS and native code, so you should avoid calling this more
- * than necessary. To display an image in the ImageStore, you can just pass
- * the URI to an `` component; there is no need to retrieve the
- * base64 data.
- */
- static getBase64ForTag(
- uri: string,
- success: (base64ImageData: string) => void,
- failure: (error: any) => void,
- ) {
- if (NativeImageStore.getBase64ForTag) {
- NativeImageStore.getBase64ForTag(uri, success, failure);
- } else {
- warnUnimplementedMethod('getBase64ForTag');
- }
- }
-}
-
-module.exports = ImageStore;
diff --git a/Libraries/Image/NativeImageStore.js b/Libraries/Image/NativeImageStore.js
deleted file mode 100644
index 0bc4948f1fb..00000000000
--- a/Libraries/Image/NativeImageStore.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @flow
- * @format
- */
-
-'use strict';
-
-import type {TurboModule} from '../TurboModule/RCTExport';
-import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
-
-export interface Spec extends TurboModule {
- // Common
- +getBase64ForTag: (
- uri: string,
- success: (base64ImageData: string) => void,
- failure: (error: Object) => void,
- ) => void;
-
- // iOS-only
- +hasImageForTag: (uri: string, callback: (hasImage: boolean) => void) => void;
- +removeImageForTag: (uri: string) => void;
- +addImageFromBase64: (
- base64ImageData: string,
- success: (uri: string) => void,
- failure: (error: Object) => void,
- ) => void;
-}
-
-export default TurboModuleRegistry.getEnforcing('ImageStoreManager');
diff --git a/Libraries/react-native/react-native-implementation.js b/Libraries/react-native/react-native-implementation.js
index d3602050e7f..1fb35b409b6 100644
--- a/Libraries/react-native/react-native-implementation.js
+++ b/Libraries/react-native/react-native-implementation.js
@@ -61,16 +61,6 @@ module.exports = {
);
return require('../Image/ImageEditor');
},
- get ImageStore() {
- warnOnce(
- 'imagestore-deprecation',
- 'ImageStore is deprecated and will be removed in a future release. ' +
- 'To get a base64-encoded string from a local image use either of the following third-party libraries:' +
- "* expo-file-system: `readAsStringAsync(filepath, 'base64')`" +
- "* react-native-fs: `readFile(filepath, 'base64')`",
- );
- return require('../Image/ImageStore');
- },
get InputAccessoryView() {
return require('../Components/TextInput/InputAccessoryView');
},
@@ -413,4 +403,18 @@ if (__DEV__) {
);
},
});
+
+ // $FlowFixMe This is intentional: Flow will error when attempting to access ImageStore.
+ Object.defineProperty(module.exports, 'ImageStore', {
+ configurable: true,
+ get() {
+ invariant(
+ false,
+ 'ImageStore has been removed from React Native. ' +
+ 'To get a base64-encoded string from a local image use either of the following third-party libraries:' +
+ "* expo-file-system: `readAsStringAsync(filepath, 'base64')`" +
+ "* react-native-fs: `readFile(filepath, 'base64')`",
+ );
+ },
+ });
}