Clarify props and API contracts

This commit is contained in:
Eric Bailey
2026-06-04 10:34:27 -05:00
parent 2c3cba67c2
commit 6b439bf7f4
9 changed files with 33 additions and 38 deletions
+4 -4
View File
@@ -91,7 +91,7 @@ describe('downloadAndResize', () => {
}
const resizedDimensionsOne = getResizedDimensions(
initialDimensionsOne,
IMAGE_SIZE_CONFIG_2K_1MB,
IMAGE_SIZE_CONFIG_2K_1MB.maxDimension,
)
const initialDimensionsTwo = {
@@ -100,7 +100,7 @@ describe('downloadAndResize', () => {
}
const resizedDimensionsTwo = getResizedDimensions(
initialDimensionsTwo,
IMAGE_SIZE_CONFIG_2K_1MB,
IMAGE_SIZE_CONFIG_2K_1MB.maxDimension,
)
expect(resizedDimensionsOne).toEqual(initialDimensionsOne)
@@ -114,7 +114,7 @@ describe('downloadAndResize', () => {
}
const resizedDimensionsOne = getResizedDimensions(
initialDimensionsOne,
IMAGE_SIZE_CONFIG_2K_1MB,
IMAGE_SIZE_CONFIG_2K_1MB.maxDimension,
)
const initialDimensionsTwo = {
@@ -123,7 +123,7 @@ describe('downloadAndResize', () => {
}
const resizedDimensionsTwo = getResizedDimensions(
initialDimensionsTwo,
IMAGE_SIZE_CONFIG_2K_1MB,
IMAGE_SIZE_CONFIG_2K_1MB.maxDimension,
)
expect(resizedDimensionsOne).toEqual({
+1 -2
View File
@@ -257,8 +257,7 @@ export async function imageToThumb(
try {
const img = await downloadAndResize({
uri: imageUri,
maxDimension: IMAGE_SIZE_CONFIG_2K_1MB.width,
maxSize: IMAGE_SIZE_CONFIG_2K_1MB.size,
...IMAGE_SIZE_CONFIG_2K_1MB,
timeout: 15e3,
})
if (img) {
+4 -6
View File
@@ -97,15 +97,13 @@ export const STAGING_FEEDS = [
]
export const IMAGE_SIZE_CONFIG_POSTS = {
width: 4000,
height: 4000,
size: 2000000,
maxDimension: 4000,
maxSize: 2000000,
}
export const IMAGE_SIZE_CONFIG_2K_1MB = {
width: 2000,
height: 2000,
size: 1000000,
maxDimension: 2000,
maxSize: 1000000,
}
export const STAGING_LINK_META_PROXY =
+5 -5
View File
@@ -24,14 +24,14 @@ import {convertCdnPreset, getResizedDimensions} from './util'
export async function compressIfNeeded(
img: PickerImage,
max: {width: number; size: number},
{maxDimension, maxSize}: {maxDimension: number; maxSize: number},
): Promise<PickerImage> {
if (img.size < max.size) {
if (img.size < maxSize) {
return img
}
const resizedImage = await doResize(normalizePath(img.path), {
maxDimension: max.width,
maxSize: max.size,
maxDimension,
maxSize,
})
const finalImageMovedPath = await moveToPermanentPath(
resizedImage.path,
@@ -205,7 +205,7 @@ async function doResize(
width: imageRes.width,
height: imageRes.height,
},
{width: opts.maxDimension, height: opts.maxDimension},
opts.maxDimension,
)
let minQualityPercentage = 0
+5 -8
View File
@@ -9,14 +9,14 @@ import {
export async function compressIfNeeded(
img: PickerImage,
max: {width: number; size: number},
{maxDimension, maxSize}: {maxDimension: number; maxSize: number},
): Promise<PickerImage> {
if (img.size < max.size) {
if (img.size < maxSize) {
return img
}
return await doResize(img.path, {
maxDimension: max.width,
maxSize: max.size,
maxDimension,
maxSize,
})
}
@@ -83,10 +83,7 @@ async function doResize(
opts: DoResizeOpts,
): Promise<PickerImage> {
const sourceDims = await getImageDim(dataUri)
const newDimensions = getResizedDimensions(sourceDims, {
width: opts.maxDimension,
height: opts.maxDimension,
})
const newDimensions = getResizedDimensions(sourceDims, opts.maxDimension)
let newDataUri
+7 -4
View File
@@ -7,15 +7,18 @@ export function getResizedDimensions(
width: number
height: number
},
max: {width: number; height: number},
maxDimension: number,
) {
if (originalDims.width <= max.width && originalDims.height <= max.height) {
if (
originalDims.width <= maxDimension &&
originalDims.height <= maxDimension
) {
return originalDims
}
const ratio = Math.min(
max.width / originalDims.width,
max.height / originalDims.height,
maxDimension / originalDims.width,
maxDimension / originalDims.height,
)
return {
+5 -5
View File
@@ -203,15 +203,15 @@ export function resetImageManipulation(
export async function compressImage(
img: ComposerImage,
max: {width: number; size: number},
{maxDimension, maxSize}: {maxDimension: number; maxSize: number},
): Promise<PickerImage> {
const source = img.transformed || img.source
let attempts = 0
// Seeded from `max.width` but shrunk per attempt below, so keep the passed-in
// value pristine.
let currentDimension = max.width
const maxBytes = max.size
// Seeded from `maxDimension` but shrunk per attempt below, so keep the
// passed-in value pristine.
let currentDimension = maxDimension
const maxBytes = maxSize
let minQualityPercentage = 0
let maxQualityPercentage = 101 // exclusive
@@ -3,7 +3,6 @@ import * as MediaLibrary from 'expo-media-library'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
import {IMAGE_SIZE_CONFIG_POSTS} from '#/lib/constants'
import {useCameraPermission} from '#/lib/hooks/usePermissions'
import {openCamera} from '#/lib/media/picker'
import {logger} from '#/logger'
@@ -35,7 +34,7 @@ export function OpenCameraBtn({disabled, onAdd}: Props) {
}
const img = await openCamera({
aspect: [IMAGE_SIZE_CONFIG_POSTS.width, IMAGE_SIZE_CONFIG_POSTS.height],
aspect: [1, 1],
})
// If we don't have permissions it's fine, we just wont save it. The post itself will still have access to
@@ -93,8 +93,7 @@ export function TextInput({
if (isUriImage(feature.uri)) {
const res = await downloadAndResize({
uri: feature.uri,
maxDimension: IMAGE_SIZE_CONFIG_POSTS.width,
maxSize: IMAGE_SIZE_CONFIG_POSTS.size,
...IMAGE_SIZE_CONFIG_POSTS,
timeout: 15e3,
})