diff --git a/.flowconfig b/.flowconfig index a5a80524a..65df8bc75 100644 --- a/.flowconfig +++ b/.flowconfig @@ -30,13 +30,15 @@ [libs] Libraries/react-native/react-native-interface.js -Examples/UIExplorer/ImageMocks.js [options] module.system=haste munge_underscores=true +module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' +module.name_mapper='^[./a-zA-Z0-9$_-]+\.png$' -> 'RelativeImageStub' + suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FixMe diff --git a/Examples/SampleApp/_flowconfig b/Examples/SampleApp/_flowconfig index 438e495d4..9ca5deb8f 100644 --- a/Examples/SampleApp/_flowconfig +++ b/Examples/SampleApp/_flowconfig @@ -34,6 +34,9 @@ module.system=haste munge_underscores=true +module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' +module.name_mapper='^[./a-zA-Z0-9$_-]+\.png$' -> 'RelativeImageStub' + suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FixMe diff --git a/Examples/UIExplorer/ImageMocks.js b/Examples/UIExplorer/ImageMocks.js deleted file mode 100644 index 670346373..000000000 --- a/Examples/UIExplorer/ImageMocks.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * The examples provided by Facebook are for non-commercial testing and - * evaluation purposes only. - * - * Facebook reserves all rights not expressly granted. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL - * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * @flow - */ -'use strict'; - -/* $FlowIssue #7387208 - There's a flow bug preventing this type from flowing - * into a proptype shape */ -declare module 'image!story-background' { - declare var uri: string; - declare var isStatic: boolean; -} - -/* $FlowIssue #7387208 - There's a flow bug preventing this type from flowing - * into a proptype shape */ -declare module 'image!uie_comment_highlighted' { - declare var uri: string; - declare var isStatic: boolean; -} - -/* $FlowIssue #7387208 - There's a flow bug preventing this type from flowing - * into a proptype shape */ -declare module 'image!uie_comment_normal' { - declare var uri: string; - declare var isStatic: boolean; -} - -/* $FlowIssue #7387208 - There's a flow bug preventing this type from flowing - * into a proptype shape */ -declare module 'image!uie_thumb_normal' { - declare var uri: string; - declare var isStatic: boolean; -} - -/* $FlowIssue #7387208 - There's a flow bug preventing this type from flowing - * into a proptype shape */ -declare module 'image!uie_thumb_selected' { - declare var uri: string; - declare var isStatic: boolean; -} - -declare module 'image!NavBarButtonPlus' { - declare var uri: string; - declare var isStatic: boolean; -} diff --git a/Libraries/Image/AssetRegistry.js b/Libraries/Image/AssetRegistry.js index df4173e78..440f16587 100644 --- a/Libraries/Image/AssetRegistry.js +++ b/Libraries/Image/AssetRegistry.js @@ -2,18 +2,32 @@ * Copyright 2004-present Facebook. All Rights Reserved. * * @providesModule AssetRegistry + * @flow */ 'use strict'; -var assets = []; +export type PackagerAsset = { + __packager_asset: boolean, + fileSystemLocation: string, + httpServerLocation: string, + width: number, + height: number, + scales: Array, + hash: string, + name: string, + type: string, +}; -function registerAsset(asset) { + +var assets: Array = []; + +function registerAsset(asset: PackagerAsset): number { // `push` returns new array length, so the first asset will // get id 1 (not 0) to make the value truthy return assets.push(asset); } -function getAssetByID(assetId) { +function getAssetByID(assetId: number): PackagerAsset { return assets[assetId - 1]; } diff --git a/Libraries/Image/GlobalImageStub.js b/Libraries/Image/GlobalImageStub.js new file mode 100644 index 000000000..5f1eb5194 --- /dev/null +++ b/Libraries/Image/GlobalImageStub.js @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule GlobalImageStub + * @flow + */ +'use strict'; + +// This is a stub for flow to make it understand require('image!icon') +// See packager/react-packager/src/Bundler/index.js + +module.exports = { + __packager_asset: true, + isStatic: true, + path: '/full/path/to/something.png', + uri: 'icon', + width: 100, + height: 100, + deprecated: true, +}; diff --git a/Libraries/Image/RelativeImageStub.js b/Libraries/Image/RelativeImageStub.js new file mode 100644 index 000000000..40c30d3c8 --- /dev/null +++ b/Libraries/Image/RelativeImageStub.js @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule RelativeImageStub + * @flow + */ +'use strict'; + +// This is a stub for flow to make it understand require('./icon.png') +// See packager/react-packager/src/Bundler/index.js + +var AssetRegistry = require('AssetRegistry'); + +module.exports = AssetRegistry.registerAsset({ + __packager_asset: true, + fileSystemLocation: '/full/path/to/directory', + httpServerLocation: '/assets/full/path/to/directory', + width: 100, + height: 100, + scales: [1, 2, 3], + hash: 'nonsense', + name: 'icon', + type: 'png', +});