diff --git a/patches/expo-image-manipulator+13.0.5.patch b/patches/expo-image-manipulator+13.0.5.patch new file mode 100644 index 0000000000..4ff1cc9703 --- /dev/null +++ b/patches/expo-image-manipulator+13.0.5.patch @@ -0,0 +1,48 @@ +diff --git a/node_modules/expo-image-manipulator/src/ImageManipulator.ts b/node_modules/expo-image-manipulator/src/ImageManipulator.ts +index a80d9c8..babbb3b 100644 +--- a/node_modules/expo-image-manipulator/src/ImageManipulator.ts ++++ b/node_modules/expo-image-manipulator/src/ImageManipulator.ts +@@ -43,7 +43,7 @@ export async function manipulateAsync( + context.extent(action.extent); + } + } +- const image = await context.renderAsync(); ++ const image = await context.renderAsync(saveOptions.compress); + const result = await image.saveAsync({ format, ...rest }); + + // These shared objects will not be used anymore, so free up some memory. +diff --git a/node_modules/expo-image-manipulator/src/ImageManipulatorContext.ts b/node_modules/expo-image-manipulator/src/ImageManipulatorContext.ts +index 120d8d3..f8aa49c 100644 +--- a/node_modules/expo-image-manipulator/src/ImageManipulatorContext.ts ++++ b/node_modules/expo-image-manipulator/src/ImageManipulatorContext.ts +@@ -52,7 +52,7 @@ export declare class ImageManipulatorContext extends SharedObject { + /** + * Awaits for all manipulation tasks to finish and resolves with a reference to the resulted native image. + */ +- renderAsync(): Promise; ++ renderAsync(compress?: number): Promise; + } + + export default ExpoImageManipulator.Context as typeof ImageManipulatorContext; +diff --git a/node_modules/expo-image-manipulator/src/web/ImageManipulatorContext.web.ts b/node_modules/expo-image-manipulator/src/web/ImageManipulatorContext.web.ts +index 428848c..363a57a 100644 +--- a/node_modules/expo-image-manipulator/src/web/ImageManipulatorContext.web.ts ++++ b/node_modules/expo-image-manipulator/src/web/ImageManipulatorContext.web.ts +@@ -41,7 +41,7 @@ export default class ImageManipulatorContext extends SharedObject { + return this; + } + +- async renderAsync(): Promise { ++ async renderAsync(compress?: number): Promise { + const canvas = await this.currentTask; + + return new Promise((resolve) => { +@@ -49,7 +49,7 @@ export default class ImageManipulatorContext extends SharedObject { + const url = blob ? URL.createObjectURL(blob) : canvas.toDataURL(); + + resolve(new ImageManipulatorImageRef(url, canvas.width, canvas.height)); +- }); ++ }, typeof compress === 'number' ? 'image/jpeg' : undefined, compress); + }); + } + diff --git a/src/lib/api/upload-blob.web.ts b/src/lib/api/upload-blob.web.ts index d3c52190c1..45b72f7ee7 100644 --- a/src/lib/api/upload-blob.web.ts +++ b/src/lib/api/upload-blob.web.ts @@ -11,7 +11,10 @@ export async function uploadBlob( input: string | Blob, encoding?: string, ): Promise { - if (typeof input === 'string' && input.startsWith('data:')) { + if ( + typeof input === 'string' && + (input.startsWith('data:') || input.startsWith('blob:')) + ) { const blob = await fetch(input).then(r => r.blob()) return agent.uploadBlob(blob, {encoding}) }