MediaMetadata — @gj-kit/expo-media
@gj-kit/expo-media/core에서 공개하는 type입니다. package version 0.6.1의 release declaration을 그대로 표시합니다.
검증된 import 예제
섹션 제목: “검증된 import 예제”import { MediaMetadata } from '@gj-kit/expo-media/core';시그니처, 매개변수, 반환 타입
섹션 제목: “시그니처, 매개변수, 반환 타입”/** * EXIF에서 유도한 촬영 메타데이터. `capturedAt`은 ISO 타임스탬프이며, EXIF 벽시계는 * **기기 로컬 타임존**으로 해석한다(§7 하드닝 11 — 근거는 `metadata.ts`에 원문 그대로 있다). * * ⚠ **필드명은 전신 그대로다.** 초안의 `geoPoint → location` 리네임은 **철회**했다(G5 확정). * 이 객체는 `api.completeUpload({ photo })`로 **호스트 백엔드에 그대로 전달**된다 * (전신 uploader.ts:442). 리네임의 파손은 타입에 잡히지 않는다: * · 호스트 대입 지점 `kit.ts:40-44`가 `completeUpload({...input})`을 zod 파생 타입에 넘긴다. * · 타깃은 `packages/shared/src/index.ts:105-108` `photoMetadataSchema = { capturedAt?, geoPoint? }`. * · `{capturedAt?, location?}` → `{capturedAt?, geoPoint?}` 대입은 공통 프로퍼티 `capturedAt`이 * 있어 **weak type 검사를 통과**하고, 변수 전달이라 초과 프로퍼티 검사도 걸리지 않는다. * · 런타임에서는 서버 zod가 non-strict라 미지의 `location` 키를 **조용히 스트립**한다. * 즉 컴파일도 테스트도 통과하고 위치정보만 사라지는 §6.1의 전형적 "조용히 깨지는" 클래스이며, * 얻는 것은 명명 취향뿐이었다. * * ⚠ 초안의 `width`/`height`는 **삭제**했다. 전신 EXIF 파서는 `PixelXDimension`/`PixelYDimension`을 * 읽지 않으므로(photoMetadata.ts 전문에 `Pixel`·`width`·`height` 0건 — grep 실측) 영구 `undefined`인 * 죽은 필드였고, `MediaUploadCompletion`에 이미 최상위 `width`/`height`(피커 자산 치수, * uploader.ts:749-756)가 있어 의미도 중복이다. */type MediaMetadata = { readonly capturedAt?: string | undefined; readonly geoPoint?: GeoPoint | undefined;};이 선언은 매개변수, optionality, 제네릭, 반환값, 공개 union/type 계약의 정본입니다. 호출 전 필요한 환경·권한·오류 경계는 패키지 Golden path와 이 subpath의 import 조건을 함께 확인하세요.
Release context
섹션 제목: “Release context”- 패키지:
@gj-kit/expo-media - 버전:
0.6.1 - 공개 entry:
./core - 소스: GitHub
구현 주석
섹션 제목: “구현 주석”EXIF에서 유도한 촬영 메타데이터. capturedAt은 ISO 타임스탬프이며, EXIF 벽시계는
기기 로컬 타임존으로 해석한다(§7 하드닝 11 — 근거는 metadata.ts에 원문 그대로 있다).
⚠ 필드명은 전신 그대로다. 초안의 geoPoint → location 리네임은 철회했다(G5 확정).
이 객체는 api.completeUpload({ photo })로 호스트 백엔드에 그대로 전달된다
(전신 uploader.ts:442). 리네임의 파손은 타입에 잡히지 않는다:
· 호스트 대입 지점 kit.ts:40-44가 completeUpload({...input})을 zod 파생 타입에 넘긴다.
· 타깃은 packages/shared/src/index.ts:105-108 photoMetadataSchema = { capturedAt?, geoPoint? }.
· {capturedAt?, location?} → {capturedAt?, geoPoint?} 대입은 공통 프로퍼티 capturedAt이
있어 weak type 검사를 통과하고, 변수 전달이라 초과 프로퍼티 검사도 걸리지 않는다.
· 런타임에서는 서버 zod가 non-strict라 미지의 location 키를 조용히 스트립한다.
즉 컴파일도 테스트도 통과하고 위치정보만 사라지는 §6.1의 전형적 “조용히 깨지는” 클래스이며,
얻는 것은 명명 취향뿐이었다.
⚠ 초안의 width/height는 삭제했다. 전신 EXIF 파서는 PixelXDimension/PixelYDimension을
읽지 않으므로(photoMetadata.ts 전문에 Pixel·width·height 0건 — grep 실측) 영구 undefined인
죽은 필드였고, MediaUploadCompletion에 이미 최상위 width/height(피커 자산 치수,
uploader.ts:749-756)가 있어 의미도 중복이다.