@hortemo/expo-photos 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/ExpoPhotos.types.d.ts +9 -2
- package/build/ExpoPhotos.types.d.ts.map +1 -1
- package/build/ExpoPhotos.types.js.map +1 -1
- package/build/ExpoPhotosModule.d.ts +2 -2
- package/build/ExpoPhotosModule.d.ts.map +1 -1
- package/build/ExpoPhotosModule.js.map +1 -1
- package/build/PHImageSource.d.ts +3 -3
- package/build/PHImageSource.d.ts.map +1 -1
- package/build/PHImageSource.js +9 -14
- package/build/PHImageSource.js.map +1 -1
- package/ios/ExpoPhotosImageLoader.swift +11 -7
- package/ios/ExpoPhotosModule.swift +41 -18
- package/package.json +1 -1
- package/src/ExpoPhotos.types.ts +12 -2
- package/src/ExpoPhotosModule.ts +2 -1
- package/src/PHImageSource.tsx +18 -23
|
@@ -48,6 +48,8 @@ export interface CGSize {
|
|
|
48
48
|
width: number;
|
|
49
49
|
height: number;
|
|
50
50
|
}
|
|
51
|
+
export type PHImageManagerMaximumSize = "PHImageManagerMaximumSize";
|
|
52
|
+
export type RequestImageTargetSize = CGSize | PHImageManagerMaximumSize;
|
|
51
53
|
export declare enum PHImageRequestOptionsResizeMode {
|
|
52
54
|
None = 0,
|
|
53
55
|
Fast = 1,
|
|
@@ -149,11 +151,16 @@ export interface AVAssetExportSessionOptions {
|
|
|
149
151
|
}
|
|
150
152
|
export interface RequestImageOptions extends PHImageRequestOptions, SDImageCoderOptions {
|
|
151
153
|
localIdentifier: string;
|
|
152
|
-
targetSize:
|
|
154
|
+
targetSize: RequestImageTargetSize;
|
|
153
155
|
contentMode: PHImageContentMode;
|
|
154
|
-
outputURL
|
|
156
|
+
outputURL?: string;
|
|
155
157
|
timeout?: number;
|
|
156
158
|
}
|
|
159
|
+
export interface RequestImageResult {
|
|
160
|
+
size: CGSize;
|
|
161
|
+
scale: number;
|
|
162
|
+
imageOrientation: number;
|
|
163
|
+
}
|
|
157
164
|
export interface RequestVideoOptions extends PHVideoRequestOptions, AVAssetExportSessionOptions {
|
|
158
165
|
localIdentifier: string;
|
|
159
166
|
exportPreset: AVAssetExportPreset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoPhotos.types.d.ts","sourceRoot":"","sources":["../src/ExpoPhotos.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ExpoPhotos.types.d.ts","sourceRoot":"","sources":["../src/ExpoPhotos.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoPhotos.types.js","sourceRoot":"","sources":["../src/ExpoPhotos.types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAN,IAAY,qBAMX;AAND,WAAY,qBAAqB;IAC/B,mFAAiB,CAAA;IACjB,6EAAc,CAAA;IACd,qEAAU,CAAA;IACV,6EAAc,CAAA;IACd,uEAAW,CAAA;AACb,CAAC,EANW,qBAAqB,KAArB,qBAAqB,QAMhC;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,2DAAa,CAAA;AACf,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,6DAAW,CAAA;IACX,yDAAS,CAAA;IACT,yDAAS,CAAA;IACT,yDAAS,CAAA;AACX,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED,MAAM,CAAN,IAAY,mBAWX;AAXD,WAAY,mBAAmB;IAC7B,6DAAQ,CAAA;IACR,+EAAsB,CAAA;IACtB,qEAAiB,CAAA;IACjB,mFAAwB,CAAA;IACxB,uEAAkB,CAAA;IAClB,sFAAyB,CAAA;IACzB,mFAAuB,CAAA;IACvB,8FAA4B,CAAA;IAC5B,sFAAwB,CAAA;IACxB,sFAAwB,CAAA;AAC1B,CAAC,EAXW,mBAAmB,KAAnB,mBAAmB,QAW9B;
|
|
1
|
+
{"version":3,"file":"ExpoPhotos.types.js","sourceRoot":"","sources":["../src/ExpoPhotos.types.ts"],"names":[],"mappings":"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","sourcesContent":["export interface PHAsset {\n localIdentifier: string;\n creationDate: number;\n mediaType: PHAssetMediaType;\n mediaSubtypes: PHAssetMediaSubtype;\n duration: number;\n}\n\nexport enum PHAuthorizationStatus {\n notDetermined = 0,\n restricted = 1,\n denied = 2,\n authorized = 3,\n limited = 4,\n}\n\nexport enum PHAccessLevel {\n addOnly = 1,\n readWrite = 2,\n}\n\nexport enum PHAssetMediaType {\n Unknown = 0,\n Image = 1,\n Video = 2,\n Audio = 3,\n}\n\nexport enum PHAssetMediaSubtype {\n None = 0,\n PhotoPanorama = 1 << 0,\n PhotoHDR = 1 << 1,\n PhotoScreenshot = 1 << 2,\n PhotoLive = 1 << 3,\n PhotoDepthEffect = 1 << 4,\n VideoStreamed = 1 << 16,\n VideoHighFrameRate = 1 << 17,\n VideoTimelapse = 1 << 18,\n VideoCinematic = 1 << 19,\n}\n\nexport interface NSSortDescriptor {\n key: string;\n ascending: boolean;\n}\n\nexport interface PHFetchOptions {\n predicate?: string;\n fetchLimit?: number;\n sortDescriptors?: NSSortDescriptor[];\n}\n\nexport type FetchAssetsOptions = PHFetchOptions;\n\nexport interface CGSize {\n width: number;\n height: number;\n}\n\nexport type PHImageManagerMaximumSize = \"PHImageManagerMaximumSize\";\n\nexport type RequestImageTargetSize = CGSize | PHImageManagerMaximumSize;\n\nexport enum PHImageRequestOptionsResizeMode {\n None = 0,\n Fast = 1,\n Exact = 2,\n}\n\nexport enum PHImageRequestOptionsDeliveryMode {\n Opportunistic = 0,\n HighQualityFormat = 1,\n FastFormat = 2,\n}\n\nexport enum PHImageContentMode {\n aspectFit = 0,\n aspectFill = 1,\n}\n\nexport interface PHImageRequestOptions {\n isNetworkAccessAllowed?: boolean;\n resizeMode?: PHImageRequestOptionsResizeMode;\n deliveryMode?: PHImageRequestOptionsDeliveryMode;\n}\n\nexport interface SDImageCoderOptions {\n encodeCompressionQuality?: number;\n encodeMaxFileSize?: number;\n}\n\nexport enum PHVideoRequestOptionsDeliveryMode {\n Automatic = 0,\n HighQualityFormat = 1,\n MediumQualityFormat = 2,\n FastFormat = 3,\n}\n\nexport interface PHVideoRequestOptions {\n isNetworkAccessAllowed?: boolean;\n deliveryMode?: PHVideoRequestOptionsDeliveryMode;\n}\n\nexport interface CMTimeRange {\n start: number;\n duration: number;\n}\n\nexport enum AVFileType {\n ac3 = \"public.ac3-audio\",\n aifc = \"public.aifc-audio\",\n aiff = \"public.aiff-audio\",\n AHAP = \"com.apple.itt\",\n amr = \"org.3gpp.adaptive-multi-rate-audio\",\n appleiTT = \"com.apple.itt\",\n au = \"public.au-audio\",\n avci = \"public.avci\",\n caf = \"com.apple.coreaudio-format\",\n dng = \"com.adobe.raw-image\",\n eac3 = \"public.eac3-audio\",\n heic = \"public.heic\",\n heif = \"public.heif\",\n jpg = \"public.jpeg\",\n m4a = \"com.apple.m4a-audio\",\n m4v = \"com.apple.m4v-video\",\n mobile3GPP = \"public.3gpp\",\n mobile3GPP2 = \"public.3gpp2\",\n mov = \"com.apple.quicktime-movie\",\n mp3 = \"public.mp3\",\n mp4 = \"public.mpeg-4\",\n SCC = \"com.scenarist.cc\",\n tif = \"public.tiff\",\n wav = \"com.microsoft.waveform-audio\",\n}\n\nexport enum AVAssetExportPreset {\n LowQuality = \"AVAssetExportPresetLowQuality\",\n MediumQuality = \"AVAssetExportPresetMediumQuality\",\n HighestQuality = \"AVAssetExportPresetHighestQuality\",\n HEVCHighestQuality = \"AVAssetExportPresetHEVCHighestQuality\",\n HEVCHighestQualityWithAlpha = \"AVAssetExportPresetHEVCHighestQualityWithAlpha\",\n AVC640x480 = \"AVAssetExportPreset640x480\",\n AVC960x540 = \"AVAssetExportPreset960x540\",\n AVC1280x720 = \"AVAssetExportPreset1280x720\",\n AVC1920x1080 = \"AVAssetExportPreset1920x1080\",\n AVC3840x2160 = \"AVAssetExportPreset3840x2160\",\n HEVC1920x1080 = \"AVAssetExportPresetHEVC1920x1080\",\n HEVC3840x2160 = \"AVAssetExportPresetHEVC3840x2160\",\n HEVC1920x1080WithAlpha = \"AVAssetExportPresetHEVC1920x1080WithAlpha\",\n HEVC3840x2160WithAlpha = \"AVAssetExportPresetHEVC3840x2160WithAlpha\",\n HEVC7680x4320 = \"AVAssetExportPresetHEVC7680x4320\",\n MVHEVC960x960 = \"AVAssetExportPresetMVHEVC960x960\",\n MVHEVC1440x1440 = \"AVAssetExportPresetMVHEVC1440x1440\",\n AppleM4V480pSD = \"AVAssetExportPresetAppleM4V480pSD\",\n AppleM4V720pHD = \"AVAssetExportPresetAppleM4V720pHD\",\n AppleM4V1080pHD = \"AVAssetExportPresetAppleM4V1080pHD\",\n AppleM4ViPod = \"AVAssetExportPresetAppleM4ViPod\",\n AppleM4VAppleTV = \"AVAssetExportPresetAppleM4VAppleTV\",\n AppleM4VCellular = \"AVAssetExportPresetAppleM4VCellular\",\n AppleM4VWiFi = \"AVAssetExportPresetAppleM4VWiFi\",\n AppleProRes422LPCM = \"AVAssetExportPresetAppleProRes422LPCM\",\n AppleProRes4444LPCM = \"AVAssetExportPresetAppleProRes4444LPCM\",\n Passthrough = \"AVAssetExportPresetPassthrough\",\n AppleM4A = \"AVAssetExportPresetAppleM4A\",\n}\n\nexport interface AVAssetExportSessionOptions {\n outputURL: string;\n outputFileType?: AVFileType;\n fileLengthLimit?: number;\n timeRange?: CMTimeRange;\n}\n\nexport interface RequestImageOptions\n extends PHImageRequestOptions,\n SDImageCoderOptions {\n localIdentifier: string;\n targetSize: RequestImageTargetSize;\n contentMode: PHImageContentMode;\n outputURL?: string;\n timeout?: number;\n}\n\nexport interface RequestImageResult {\n size: CGSize;\n scale: number;\n imageOrientation: number;\n}\n\nexport interface RequestVideoOptions\n extends PHVideoRequestOptions,\n AVAssetExportSessionOptions {\n localIdentifier: string;\n exportPreset: AVAssetExportPreset;\n timeout?: number;\n}\n\nexport enum PHPickerFilter {\n images = \"images\",\n videos = \"videos\",\n any = \"any\",\n}\n\nexport interface PickAssetsOptions {\n filter?: PHPickerFilter;\n selectionLimit?: number;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { NativeModule } from "expo-modules-core";
|
|
2
|
-
import type { FetchAssetsOptions, PHAuthorizationStatus, PHAccessLevel, PHAsset, PickAssetsOptions, RequestImageOptions, RequestVideoOptions } from "./ExpoPhotos.types";
|
|
2
|
+
import type { FetchAssetsOptions, PHAuthorizationStatus, PHAccessLevel, PHAsset, PickAssetsOptions, RequestImageOptions, RequestVideoOptions, RequestImageResult } from "./ExpoPhotos.types";
|
|
3
3
|
export declare class ExpoPhotosModule extends NativeModule {
|
|
4
4
|
fetchAssets(options: FetchAssetsOptions): Promise<PHAsset[]>;
|
|
5
|
-
requestImage(options: RequestImageOptions): Promise<
|
|
5
|
+
requestImage(options: RequestImageOptions): Promise<RequestImageResult>;
|
|
6
6
|
requestVideo(options: RequestVideoOptions): Promise<void>;
|
|
7
7
|
pickAssets(options: PickAssetsOptions): Promise<PHAsset[]>;
|
|
8
8
|
requestAuthorization(accessLevel: PHAccessLevel): Promise<PHAuthorizationStatus>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoPhotosModule.d.ts","sourceRoot":"","sources":["../src/ExpoPhotosModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ExpoPhotosModule.d.ts","sourceRoot":"","sources":["../src/ExpoPhotosModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,YAAY;IACxD,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5D,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACvE,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IACzD,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1D,oBAAoB,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAChF,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7C;;AAED,wBAAmE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoPhotosModule.js","sourceRoot":"","sources":["../src/ExpoPhotosModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ExpoPhotosModule.js","sourceRoot":"","sources":["../src/ExpoPhotosModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAqBtE,eAAe,mBAAmB,CAAmB,YAAY,CAAC,CAAC","sourcesContent":["import { NativeModule, requireNativeModule } from \"expo-modules-core\";\nimport type {\n FetchAssetsOptions,\n PHAuthorizationStatus,\n PHAccessLevel,\n PHAsset,\n PickAssetsOptions,\n RequestImageOptions,\n RequestVideoOptions,\n RequestImageResult,\n} from \"./ExpoPhotos.types\";\n\nexport declare class ExpoPhotosModule extends NativeModule {\n fetchAssets(options: FetchAssetsOptions): Promise<PHAsset[]>;\n requestImage(options: RequestImageOptions): Promise<RequestImageResult>;\n requestVideo(options: RequestVideoOptions): Promise<void>;\n pickAssets(options: PickAssetsOptions): Promise<PHAsset[]>;\n requestAuthorization(accessLevel: PHAccessLevel): Promise<PHAuthorizationStatus>;\n presentLimitedLibraryPicker(): Promise<void>;\n}\n\nexport default requireNativeModule<ExpoPhotosModule>(\"ExpoPhotos\");\n"]}
|
package/build/PHImageSource.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ImageSourcePropType } from "react-native";
|
|
2
|
-
import {
|
|
2
|
+
import { PHImageContentMode, PHImageRequestOptionsDeliveryMode, PHImageRequestOptionsResizeMode, RequestImageTargetSize } from "./ExpoPhotos.types";
|
|
3
3
|
export interface PHImageSourceOptions {
|
|
4
4
|
localIdentifier: string;
|
|
5
|
-
targetSize?:
|
|
5
|
+
targetSize?: RequestImageTargetSize;
|
|
6
6
|
resizeMode?: PHImageRequestOptionsResizeMode;
|
|
7
7
|
deliveryMode?: PHImageRequestOptionsDeliveryMode;
|
|
8
8
|
contentMode?: PHImageContentMode;
|
|
@@ -28,5 +28,5 @@ export interface PHImageSourceOptions {
|
|
|
28
28
|
* />
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
|
-
export declare function createPHImageSource(options: PHImageSourceOptions): ImageSourcePropType
|
|
31
|
+
export declare function createPHImageSource(options: PHImageSourceOptions): ImageSourcePropType;
|
|
32
32
|
//# sourceMappingURL=PHImageSource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PHImageSource.d.ts","sourceRoot":"","sources":["../src/PHImageSource.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"PHImageSource.d.ts","sourceRoot":"","sources":["../src/PHImageSource.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EACjC,+BAA+B,EAC/B,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,UAAU,CAAC,EAAE,+BAA+B,CAAC;IAC7C,YAAY,CAAC,EAAE,iCAAiC,CAAC;IACjD,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAwBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CAwBrB"}
|
package/build/PHImageSource.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { PHImageContentMode, PHImageRequestOptionsDeliveryMode, PHImageRequestOptionsResizeMode, } from "./ExpoPhotos.types";
|
|
2
1
|
const buildQueryString = (params) => {
|
|
3
2
|
const entries = Object.entries(params).filter(([, value]) => value !== undefined);
|
|
4
3
|
if (entries.length === 0) {
|
|
@@ -30,21 +29,17 @@ const buildQueryString = (params) => {
|
|
|
30
29
|
* ```
|
|
31
30
|
*/
|
|
32
31
|
export function createPHImageSource(options) {
|
|
33
|
-
const { localIdentifier } = options;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const { targetSize, resizeMode = PHImageRequestOptionsResizeMode.Fast, deliveryMode = PHImageRequestOptionsDeliveryMode.Opportunistic, contentMode = PHImageContentMode.aspectFill, isNetworkAccessAllowed = true, } = options;
|
|
38
|
-
const targetSizeValue = targetSize
|
|
39
|
-
? `${targetSize.width}x${targetSize.height}`
|
|
40
|
-
: undefined;
|
|
32
|
+
const { localIdentifier, resizeMode, deliveryMode, contentMode, isNetworkAccessAllowed, } = options;
|
|
33
|
+
const targetSize = options.targetSize && typeof options.targetSize === "object"
|
|
34
|
+
? `${options.targetSize.width}x${options.targetSize.height}`
|
|
35
|
+
: options.targetSize;
|
|
41
36
|
const query = buildQueryString({
|
|
42
37
|
localIdentifier,
|
|
43
|
-
targetSize
|
|
44
|
-
resizeMode
|
|
45
|
-
deliveryMode
|
|
46
|
-
contentMode
|
|
47
|
-
isNetworkAccessAllowed
|
|
38
|
+
targetSize,
|
|
39
|
+
resizeMode,
|
|
40
|
+
deliveryMode,
|
|
41
|
+
contentMode,
|
|
42
|
+
isNetworkAccessAllowed,
|
|
48
43
|
});
|
|
49
44
|
return { uri: `expo-photos://${query}` };
|
|
50
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PHImageSource.js","sourceRoot":"","sources":["../src/PHImageSource.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PHImageSource.js","sourceRoot":"","sources":["../src/PHImageSource.tsx"],"names":[],"mappings":"AAiBA,MAAM,gBAAgB,GAAG,CACvB,MAA6D,EACrD,EAAE;IACV,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CACnC,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CACL,GAAG;QACH,OAAO;aACJ,GAAG,CACF,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACf,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAClE;aACA,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA6B;IAE7B,MAAM,EACJ,eAAe,EACf,UAAU,EACV,YAAY,EACZ,WAAW,EACX,sBAAsB,GACvB,GAAG,OAAO,CAAC;IAEZ,MAAM,UAAU,GACd,OAAO,CAAC,UAAU,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;QAC1D,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE;QAC5D,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAEzB,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC7B,eAAe;QACf,UAAU;QACV,UAAU;QACV,YAAY;QACZ,WAAW;QACX,sBAAsB;KACvB,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,iBAAiB,KAAK,EAAE,EAAE,CAAC;AAC3C,CAAC","sourcesContent":["import type { ImageSourcePropType } from \"react-native\";\nimport {\n PHImageContentMode,\n PHImageRequestOptionsDeliveryMode,\n PHImageRequestOptionsResizeMode,\n RequestImageTargetSize,\n} from \"./ExpoPhotos.types\";\n\nexport interface PHImageSourceOptions {\n localIdentifier: string;\n targetSize?: RequestImageTargetSize;\n resizeMode?: PHImageRequestOptionsResizeMode;\n deliveryMode?: PHImageRequestOptionsDeliveryMode;\n contentMode?: PHImageContentMode;\n isNetworkAccessAllowed?: boolean;\n}\n\nconst buildQueryString = (\n params: Record<string, string | number | boolean | undefined>\n): string => {\n const entries = Object.entries(params).filter(\n ([, value]) => value !== undefined\n );\n\n if (entries.length === 0) {\n return \"\";\n }\n\n return (\n \"?\" +\n entries\n .map(\n ([key, value]) =>\n `${encodeURIComponent(key)}=${encodeURIComponent(value ?? \"\")}`\n )\n .join(\"&\")\n );\n};\n\n/**\n * Creates a source object for React Native's Image component from a Photos library asset identifier.\n *\n * @param options - Configuration for image source, including the local identifier\n * @returns A source object that can be used with the Image component's `source` prop, or undefined if no identifier is provided\n *\n * @example\n * ```tsx\n * import { Image } from 'react-native';\n * import { createPHImageSource } from '@hortemo/expo-photos';\n *\n * <Image\n * source={createPHImageSource({\n * localIdentifier: asset.localIdentifier,\n * targetSize: { width: 200, height: 200 },\n * contentMode: PHImageContentMode.aspectFill,\n * })}\n * />\n * ```\n */\nexport function createPHImageSource(\n options: PHImageSourceOptions\n): ImageSourcePropType {\n const {\n localIdentifier,\n resizeMode,\n deliveryMode,\n contentMode,\n isNetworkAccessAllowed,\n } = options;\n\n const targetSize =\n options.targetSize && typeof options.targetSize === \"object\"\n ? `${options.targetSize.width}x${options.targetSize.height}`\n : options.targetSize;\n\n const query = buildQueryString({\n localIdentifier,\n targetSize,\n resizeMode,\n deliveryMode,\n contentMode,\n isNetworkAccessAllowed,\n });\n\n return { uri: `expo-photos://${query}` };\n}\n"]}
|
|
@@ -74,14 +74,18 @@ class ExpoPhotosImageLoader: NSObject, RCTBridgeModule, RCTImageURLLoader {
|
|
|
74
74
|
var targetSize = size.applying(CGAffineTransform(scaleX: scale, y: scale))
|
|
75
75
|
|
|
76
76
|
if let targetSizeString = queryParams["targetSize"] {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
if targetSizeString.caseInsensitiveCompare("PHImageManagerMaximumSize") == .orderedSame {
|
|
78
|
+
targetSize = PHImageManagerMaximumSize
|
|
79
|
+
} else {
|
|
80
|
+
let components = targetSizeString.lowercased().components(separatedBy: "x")
|
|
81
|
+
guard components.count == 2,
|
|
82
|
+
let width = Double(components[0]),
|
|
83
|
+
let height = Double(components[1]) else {
|
|
84
|
+
completionHandler(RCTErrorWithMessage("Invalid targetSize format. Expected WIDTHxHEIGHT or PHImageManagerMaximumSize."), nil)
|
|
85
|
+
return {}
|
|
86
|
+
}
|
|
87
|
+
targetSize = CGSize(width: width, height: height)
|
|
83
88
|
}
|
|
84
|
-
targetSize = CGSize(width: width, height: height)
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
if let deliveryModeString = queryParams["deliveryMode"] {
|
|
@@ -13,7 +13,7 @@ struct FetchAssetsOptions: Record {
|
|
|
13
13
|
|
|
14
14
|
struct RequestImageOptions: Record {
|
|
15
15
|
@Field var localIdentifier: String?
|
|
16
|
-
@Field var targetSize:
|
|
16
|
+
@Field var targetSize: TargetSize?
|
|
17
17
|
@Field var contentMode: PHImageContentMode?
|
|
18
18
|
@Field var isNetworkAccessAllowed: Bool?
|
|
19
19
|
@Field var deliveryMode: PHImageRequestOptionsDeliveryMode?
|
|
@@ -92,12 +92,11 @@ public class ExpoPhotos: Module {
|
|
|
92
92
|
return status.rawValue
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
AsyncFunction("requestImage") { (options: RequestImageOptions) async throws ->
|
|
95
|
+
AsyncFunction("requestImage") { (options: RequestImageOptions) async throws -> [String: Any] in
|
|
96
96
|
guard
|
|
97
97
|
let localIdentifier = options.localIdentifier,
|
|
98
|
-
let targetSize = options.targetSize,
|
|
99
|
-
let contentMode = options.contentMode
|
|
100
|
-
let outputURL = options.outputURL
|
|
98
|
+
let targetSize = options.targetSize?.value,
|
|
99
|
+
let contentMode = options.contentMode
|
|
101
100
|
else {
|
|
102
101
|
throw ExpoPhotosError.mandatoryFieldMissing
|
|
103
102
|
}
|
|
@@ -145,24 +144,35 @@ public class ExpoPhotos: Module {
|
|
|
145
144
|
}
|
|
146
145
|
}
|
|
147
146
|
|
|
148
|
-
|
|
147
|
+
if let outputURL = options.outputURL {
|
|
148
|
+
var imageCoderOptions: [SDImageCoderOption: Any] = [:]
|
|
149
149
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
if let encodeCompressionQuality = options.encodeCompressionQuality {
|
|
151
|
+
imageCoderOptions[.encodeCompressionQuality] = encodeCompressionQuality
|
|
152
|
+
}
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
if let encodeMaxFileSize = options.encodeMaxFileSize {
|
|
155
|
+
imageCoderOptions[.encodeMaxFileSize] = encodeMaxFileSize
|
|
156
|
+
}
|
|
157
157
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
158
|
+
guard
|
|
159
|
+
let data = SDImageWebPCoder.shared.encodedData(
|
|
160
|
+
with: image, format: .webP, options: imageCoderOptions)
|
|
161
|
+
else {
|
|
162
|
+
throw ExpoPhotosError.couldNotEncodeImage
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
try data.write(to: outputURL)
|
|
163
166
|
}
|
|
164
167
|
|
|
165
|
-
|
|
168
|
+
return [
|
|
169
|
+
"size": [
|
|
170
|
+
"width": image.size.width,
|
|
171
|
+
"height": image.size.height,
|
|
172
|
+
],
|
|
173
|
+
"scale": image.scale,
|
|
174
|
+
"imageOrientation": image.imageOrientation.rawValue,
|
|
175
|
+
]
|
|
166
176
|
}
|
|
167
177
|
|
|
168
178
|
AsyncFunction("requestVideo") { (options: RequestVideoOptions) async throws -> Void in
|
|
@@ -393,6 +403,19 @@ extension CMTimeRange: @retroactive Convertible {
|
|
|
393
403
|
}
|
|
394
404
|
}
|
|
395
405
|
|
|
406
|
+
struct TargetSize: Convertible {
|
|
407
|
+
let value: CGSize
|
|
408
|
+
|
|
409
|
+
static func convert(from value: Any?, appContext: AppContext) throws -> TargetSize {
|
|
410
|
+
if let sentinel = value as? String, sentinel == "PHImageManagerMaximumSize" {
|
|
411
|
+
return TargetSize(value: PHImageManagerMaximumSize)
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
let size = try CGSize.convert(from: value, appContext: appContext)
|
|
415
|
+
return TargetSize(value: size)
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
396
419
|
extension Convertible where Self: RawRepresentable, Self.RawValue == Int {
|
|
397
420
|
public static func convert(from value: Any?, appContext: AppContext) throws -> Self {
|
|
398
421
|
guard
|
package/package.json
CHANGED
package/src/ExpoPhotos.types.ts
CHANGED
|
@@ -57,6 +57,10 @@ export interface CGSize {
|
|
|
57
57
|
height: number;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
export type PHImageManagerMaximumSize = "PHImageManagerMaximumSize";
|
|
61
|
+
|
|
62
|
+
export type RequestImageTargetSize = CGSize | PHImageManagerMaximumSize;
|
|
63
|
+
|
|
60
64
|
export enum PHImageRequestOptionsResizeMode {
|
|
61
65
|
None = 0,
|
|
62
66
|
Fast = 1,
|
|
@@ -171,12 +175,18 @@ export interface RequestImageOptions
|
|
|
171
175
|
extends PHImageRequestOptions,
|
|
172
176
|
SDImageCoderOptions {
|
|
173
177
|
localIdentifier: string;
|
|
174
|
-
targetSize:
|
|
178
|
+
targetSize: RequestImageTargetSize;
|
|
175
179
|
contentMode: PHImageContentMode;
|
|
176
|
-
outputURL
|
|
180
|
+
outputURL?: string;
|
|
177
181
|
timeout?: number;
|
|
178
182
|
}
|
|
179
183
|
|
|
184
|
+
export interface RequestImageResult {
|
|
185
|
+
size: CGSize;
|
|
186
|
+
scale: number;
|
|
187
|
+
imageOrientation: number;
|
|
188
|
+
}
|
|
189
|
+
|
|
180
190
|
export interface RequestVideoOptions
|
|
181
191
|
extends PHVideoRequestOptions,
|
|
182
192
|
AVAssetExportSessionOptions {
|
package/src/ExpoPhotosModule.ts
CHANGED
|
@@ -7,11 +7,12 @@ import type {
|
|
|
7
7
|
PickAssetsOptions,
|
|
8
8
|
RequestImageOptions,
|
|
9
9
|
RequestVideoOptions,
|
|
10
|
+
RequestImageResult,
|
|
10
11
|
} from "./ExpoPhotos.types";
|
|
11
12
|
|
|
12
13
|
export declare class ExpoPhotosModule extends NativeModule {
|
|
13
14
|
fetchAssets(options: FetchAssetsOptions): Promise<PHAsset[]>;
|
|
14
|
-
requestImage(options: RequestImageOptions): Promise<
|
|
15
|
+
requestImage(options: RequestImageOptions): Promise<RequestImageResult>;
|
|
15
16
|
requestVideo(options: RequestVideoOptions): Promise<void>;
|
|
16
17
|
pickAssets(options: PickAssetsOptions): Promise<PHAsset[]>;
|
|
17
18
|
requestAuthorization(accessLevel: PHAccessLevel): Promise<PHAuthorizationStatus>;
|
package/src/PHImageSource.tsx
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { ImageSourcePropType } from "react-native";
|
|
2
2
|
import {
|
|
3
|
-
CGSize,
|
|
4
3
|
PHImageContentMode,
|
|
5
4
|
PHImageRequestOptionsDeliveryMode,
|
|
6
5
|
PHImageRequestOptionsResizeMode,
|
|
6
|
+
RequestImageTargetSize,
|
|
7
7
|
} from "./ExpoPhotos.types";
|
|
8
8
|
|
|
9
9
|
export interface PHImageSourceOptions {
|
|
10
10
|
localIdentifier: string;
|
|
11
|
-
targetSize?:
|
|
11
|
+
targetSize?: RequestImageTargetSize;
|
|
12
12
|
resizeMode?: PHImageRequestOptionsResizeMode;
|
|
13
13
|
deliveryMode?: PHImageRequestOptionsDeliveryMode;
|
|
14
14
|
contentMode?: PHImageContentMode;
|
|
@@ -16,7 +16,7 @@ export interface PHImageSourceOptions {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
const buildQueryString = (
|
|
19
|
-
params: Record<string, string | undefined>
|
|
19
|
+
params: Record<string, string | number | boolean | undefined>
|
|
20
20
|
): string => {
|
|
21
21
|
const entries = Object.entries(params).filter(
|
|
22
22
|
([, value]) => value !== undefined
|
|
@@ -59,32 +59,27 @@ const buildQueryString = (
|
|
|
59
59
|
*/
|
|
60
60
|
export function createPHImageSource(
|
|
61
61
|
options: PHImageSourceOptions
|
|
62
|
-
): ImageSourcePropType
|
|
63
|
-
const { localIdentifier } = options;
|
|
64
|
-
|
|
65
|
-
if (!localIdentifier) {
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
68
|
-
|
|
62
|
+
): ImageSourcePropType {
|
|
69
63
|
const {
|
|
70
|
-
|
|
71
|
-
resizeMode
|
|
72
|
-
deliveryMode
|
|
73
|
-
contentMode
|
|
74
|
-
isNetworkAccessAllowed
|
|
64
|
+
localIdentifier,
|
|
65
|
+
resizeMode,
|
|
66
|
+
deliveryMode,
|
|
67
|
+
contentMode,
|
|
68
|
+
isNetworkAccessAllowed,
|
|
75
69
|
} = options;
|
|
76
70
|
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
71
|
+
const targetSize =
|
|
72
|
+
options.targetSize && typeof options.targetSize === "object"
|
|
73
|
+
? `${options.targetSize.width}x${options.targetSize.height}`
|
|
74
|
+
: options.targetSize;
|
|
80
75
|
|
|
81
76
|
const query = buildQueryString({
|
|
82
77
|
localIdentifier,
|
|
83
|
-
targetSize
|
|
84
|
-
resizeMode
|
|
85
|
-
deliveryMode
|
|
86
|
-
contentMode
|
|
87
|
-
isNetworkAccessAllowed
|
|
78
|
+
targetSize,
|
|
79
|
+
resizeMode,
|
|
80
|
+
deliveryMode,
|
|
81
|
+
contentMode,
|
|
82
|
+
isNetworkAccessAllowed,
|
|
88
83
|
});
|
|
89
84
|
|
|
90
85
|
return { uri: `expo-photos://${query}` };
|