From 3ade096f02191b3f978fec71c3dff3cffa676f66 Mon Sep 17 00:00:00 2001 From: Luna Wei Date: Wed, 23 Dec 2020 19:47:10 -0800 Subject: [PATCH] Add cachebreaker to remote assets Summary: Changelog: [Internal][Added] - Create a general utils for assets and add a cache breaker utility to set/get a urlparam for remote assets. Reviewed By: motiz88 Differential Revision: D25521331 fbshipit-source-id: 042e52a27e826bc9993e80bc68cc6fc68abaf224 --- Libraries/Image/AssetSourceResolver.js | 2 +- ...{AssetSourcePickScale.js => AssetUtils.js} | 25 ++++++++++++++----- Libraries/Image/resolveAssetSource.js | 4 +-- 3 files changed, 22 insertions(+), 9 deletions(-) rename Libraries/Image/{AssetSourcePickScale.js => AssetUtils.js} (55%) diff --git a/Libraries/Image/AssetSourceResolver.js b/Libraries/Image/AssetSourceResolver.js index 4ddc2bf1230..ee81537631c 100644 --- a/Libraries/Image/AssetSourceResolver.js +++ b/Libraries/Image/AssetSourceResolver.js @@ -21,7 +21,7 @@ export type ResolvedAssetSource = {| import type {PackagerAsset} from '@react-native/assets/registry'; const PixelRatio = require('../Utilities/PixelRatio'); -const pickScale = require('./AssetSourcePickScale'); +const {pickScale} = require('./AssetUtils'); const Platform = require('../Utilities/Platform'); const invariant = require('invariant'); diff --git a/Libraries/Image/AssetSourcePickScale.js b/Libraries/Image/AssetUtils.js similarity index 55% rename from Libraries/Image/AssetSourcePickScale.js rename to Libraries/Image/AssetUtils.js index 70c35f3bcf3..519a8cdb1eb 100644 --- a/Libraries/Image/AssetSourcePickScale.js +++ b/Libraries/Image/AssetUtils.js @@ -10,11 +10,12 @@ 'use strict'; -const PixelRatio = require('../Utilities/PixelRatio'); -function AssetSourcePickScale( - scales: Array, - deviceScale?: number, -): number { +import PixelRatio from '../Utilities/PixelRatio'; + +let cacheBreaker; +let warnIfCacheBreakerUnset = true; + +export function pickScale(scales: Array, deviceScale?: number): number { if (deviceScale == null) { deviceScale = PixelRatio.get(); } @@ -30,4 +31,16 @@ function AssetSourcePickScale( // in which case we default to 1 return scales[scales.length - 1] || 1; } -module.exports = AssetSourcePickScale; + +export function setUrlCacheBreaker(appendage: string) { + cacheBreaker = appendage; +} + +export function getUrlCacheBreaker(): string { + if (__DEV__ && warnIfCacheBreakerUnset && cacheBreaker == null) { + warnIfCacheBreakerUnset = false; + console.warn('AssetUtils.getUrlCacheBreaker: Cache breaker value is unset'); + return ''; + } + return cacheBreaker; +} diff --git a/Libraries/Image/resolveAssetSource.js b/Libraries/Image/resolveAssetSource.js index 19e9607ace5..fe8e543e1ff 100644 --- a/Libraries/Image/resolveAssetSource.js +++ b/Libraries/Image/resolveAssetSource.js @@ -14,7 +14,7 @@ const AssetRegistry = require('@react-native/assets/registry'); const AssetSourceResolver = require('./AssetSourceResolver'); -const AssetSourcePickScale = require('./AssetSourcePickScale'); +const {pickScale} = require('./AssetUtils'); import type {ResolvedAssetSource} from './AssetSourceResolver'; @@ -106,5 +106,5 @@ function resolveAssetSource(source: any): ?ResolvedAssetSource { } module.exports = resolveAssetSource; -module.exports.pickScale = AssetSourcePickScale; +module.exports.pickScale = pickScale; module.exports.setCustomSourceTransformer = setCustomSourceTransformer;