{{ message }}
Repository navigation
fix(repack): pass inlined asset scales to pickScale in ascending order - #1505
Open
RaphaelFakhri wants to merge 2 commits into
Open
RaphaelFakhri wants to merge 2 commits into
RaphaelFakhri wants to merge 2 commits into
Conversation
|
@RaphaelFakhri is attempting to deploy a commit to the Callstack Team on Vercel. A member of the Team first needs to authorize it. |
🦋 Changeset detectedLatest commit: 9f83101 The changes in this PR will be included in the next version bump. This PR includes changesets to release 6 packagesNot sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
When
inline: trueis set on the assets loader,inlineAssetsbuilds the list of scales passed toAssetSourceResolver.pickScalefromObject.keys(sourceSet). JavaScript lists integer-like keys first, so the scales[0.75, 1, 1.5, 2, 3]come out as[1, 2, 3, 0.75, 1.5].pickScaleassumes ascending order and returns the first scale that is greater than or equal to the device pixel ratio, or the last one if none match. With the unsorted list, an asset that has a fractional variant resolves to the wrong image:@0.75x@1x@1.5x@2x@3x@1.5x(blurry)Assets with only integer scales (
@1x,@2x,@3x) are not affected.This change builds the scales from
assets, which the loader already sorts in ascending order. The inlined source set itself is unchanged.Test plan
packages/repack/src/loaders/assetsLoader/__tests__/inlineAssets.test.tsevaluates the generated module with the same logic as React Native'spickScalefor pixel ratios 0.75, 1, 1.5, 2.625 and 3.5.pnpm --filter @callstack/repack test: 42 suites, 364 tests passed.pnpm vitest run src/loaders/assets-loader.test.tsintests/integration: 76 passed, existing snapshots unchanged.pnpm --filter @callstack/repack typecheckandbiome checkpass.@callstack/repack.Fixes #1504