{"version":3,"sources":["../src/index.ts","../src/constants/android.ts","../src/constants/templates.ts","../src/hooks/useBarcodeScanner.ts","../src/module.ts","../src/utils/convert.ts","../src/utils/types.ts","../src/utils/geometry.ts","../src/utils/highlights.ts","../src/hooks/useLatestSharedValue.ts"],"sourcesContent":["export * from './constants';\nexport * from './hooks';\nexport * from './module';\nexport type * from './types';\nexport * from './utils';\n","/**\n * @see https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/Barcode.BarcodeFormat\n */\nexport const enum AndroidBarcodeFormat {\n  UNKNOWN = -1,\n  ALL_FORMATS = 0,\n  CODE_128 = 1,\n  CODE_39 = 2,\n  CODE_93 = 4,\n  CODABAR = 8,\n  DATA_MATRIX = 16,\n  EAN_13 = 32,\n  EAN_8 = 64,\n  ITF = 128,\n  QR_CODE = 256,\n  UPC_A = 512,\n  UPC_E = 1024,\n  PDF417 = 2048,\n  AZTEC = 4096,\n}\n\n/**\n * @see https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/Barcode.BarcodeValueType\n */\nexport const enum AndroidBarcodeValueType {\n  UNKNOWN = 0,\n  CONTACT_INFO = 1,\n  EMAIL = 2,\n  ISBN = 3,\n  PHONE = 4,\n  PRODUCT = 5,\n  SMS = 6,\n  TEXT = 7,\n  URL = 8,\n  WIFI = 9,\n  GEO = 10,\n  CALENDAR_EVENT = 11,\n  DRIVER_LICENSE = 12,\n}\n\n/**\n * @see https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/Barcode.Address.AddressType\n */\nexport const enum AndroidAddressType {\n  UNKNOWN = 0,\n  WORK = 1,\n  HOME = 2,\n}\n\n/**\n * @see https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/Barcode.WiFi.EncryptionType\n */\nexport const enum AndroidEncryptionType {\n  OPEN = 1,\n  WPA = 2,\n  WEP = 3,\n}\n\n/**\n * @see https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/Barcode.Email.FormatType\n */\nexport const enum AndroidEmailType {\n  UNKNOWN = 0,\n  WORK = 1,\n  HOME = 2,\n}\n\n/**\n * @see https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/Barcode.Phone.FormatType\n */\nexport const enum AndroidPhoneType {\n  UNKNOWN = 0,\n  WORK = 1,\n  HOME = 2,\n  FAX = 3,\n  MOBILE = 4,\n}\n","import { type FormatFilter } from 'react-native-vision-camera';\n\nexport const Templates = {\n  /**\n   * HD-quality for faster Frame Processing in YUV pixelFormat (e.g. 720p)\n   */\n  FrameProcessingYUV: [{ videoResolution: { width: 1080, height: 720 } }],\n  /**\n   * XGA-quality for faster Frame Processing in YUV pixelFormat\n   */\n  FrameProcessingBarcodeXGA: [\n    { videoResolution: { width: 1024, height: 768 } },\n  ],\n} as const satisfies Record<string, FormatFilter[]>;\n","import { useState } from 'react';\nimport { type ViewProps } from 'react-native';\nimport {\n  runAtTargetFps,\n  useFrameProcessor,\n  type CameraProps,\n  type Frame,\n} from 'react-native-vision-camera';\nimport { Worklets, useSharedValue } from 'react-native-worklets-core';\nimport { ScanBarcodesOptions, scanCodes } from 'src/module';\nimport type {\n  Barcode,\n  BarcodeType,\n  Highlight,\n  PointMapperFn,\n  Rect,\n  Size,\n} from 'src/types';\nimport { computeHighlights } from '..';\nimport { useLatestSharedValue } from './useLatestSharedValue';\n\ntype ResizeMode = NonNullable<CameraProps['resizeMode']>;\n\nexport type UseBarcodeScannerOptions = {\n  barcodeTypes?: BarcodeType[];\n  regionOfInterest?: Rect;\n  fps?: number;\n  onBarcodeScanned?: (barcodes: Barcode[], frame: Frame) => void;\n  pointMapper?: PointMapperFn;\n  disableHighlighting?: boolean;\n  resizeMode?: ResizeMode;\n  scanMode?: 'continuous' | 'once';\n  isMountedRef?: { value: boolean };\n};\n\nexport const useBarcodeScanner = ({\n  barcodeTypes,\n  regionOfInterest,\n  onBarcodeScanned,\n  pointMapper,\n  disableHighlighting,\n  resizeMode = 'cover',\n  scanMode = 'continuous',\n  isMountedRef,\n  fps = 30,\n}: UseBarcodeScannerOptions) => {\n  // Layout of the <Camera /> component\n  const layoutRef = useSharedValue<Size>({ width: 0, height: 0 });\n  const onLayout: ViewProps['onLayout'] = (event) => {\n    const { width, height } = event.nativeEvent.layout;\n    layoutRef.value = { width, height };\n  };\n\n  const resizeModeRef = useLatestSharedValue<ResizeMode>(resizeMode);\n\n  // Barcode highlights related state\n  const barcodesRef = useSharedValue<Barcode[]>([]);\n\n  // Barcode highlights related state\n  const [highlights, setHighlights] = useState<Highlight[]>([]);\n  const lastHighlightsCount = useSharedValue<number>(0);\n  const setHighlightsJS = Worklets.createRunOnJS(setHighlights);\n\n  const pixelFormat: CameraProps['pixelFormat'] = 'yuv';\n\n  const frameProcessor = useFrameProcessor(\n    (frame) => {\n      'worklet';\n      if (isMountedRef && isMountedRef.value === false) {\n        return;\n      }\n      runAtTargetFps(fps, () => {\n        'worklet';\n        const { value: layout } = layoutRef;\n        const { value: prevBarcodes } = barcodesRef;\n        const { value: resizeMode } = resizeModeRef;\n        const { width, height, orientation } = frame;\n\n        // Call the native barcode scanner\n        const options: ScanBarcodesOptions = {};\n        if (barcodeTypes !== undefined) {\n          options.barcodeTypes = barcodeTypes;\n        }\n        if (regionOfInterest !== undefined) {\n          const { x, y, width, height } = regionOfInterest;\n          options.regionOfInterest = [x, y, width, height];\n        }\n        const barcodes = scanCodes(frame, options);\n\n        if (barcodes.length > 0) {\n          // If the scanMode is \"continuous\", we stream all the barcodes responses\n          if (scanMode === 'continuous') {\n            onBarcodeScanned && onBarcodeScanned(barcodes, frame);\n            // If the scanMode is \"once\", we only call the callback if the barcodes have actually changed\n          } else if (scanMode === 'once') {\n            const hasChanged =\n              prevBarcodes.length !== barcodes.length ||\n              JSON.stringify(prevBarcodes.map(({ value }) => value)) !==\n                JSON.stringify(barcodes.map(({ value }) => value));\n            if (hasChanged) {\n              onBarcodeScanned && onBarcodeScanned(barcodes, frame);\n            }\n          }\n          barcodesRef.value = barcodes;\n        }\n\n        if (disableHighlighting !== true && resizeMode !== undefined) {\n          const highlights = computeHighlights(\n            barcodes,\n            { width, height, orientation }, // \"serialized\" frame\n            layout,\n            resizeMode,\n            pointMapper,\n          );\n\n          // Spare a re-render if the highlights are both empty\n          if (lastHighlightsCount.value === 0 && highlights.length === 0) {\n            return;\n          }\n          lastHighlightsCount.value = highlights.length;\n          setHighlightsJS(highlights);\n        }\n      });\n    },\n    [layoutRef, resizeModeRef, disableHighlighting],\n  );\n\n  return {\n    props: {\n      pixelFormat,\n      frameProcessor,\n      onLayout,\n    },\n    highlights,\n  };\n};\n","import { NativeEventEmitter, NativeModules, Platform } from 'react-native';\nimport { VisionCameraProxy, type Frame } from 'react-native-vision-camera';\nimport type {\n  AndroidBarcode,\n  Barcode,\n  BarcodeType,\n  FrameProcessorPlugin,\n  VisionCameraConstants,\n  iOSBarcode,\n} from './types';\nimport { normalizeNativeBarcode } from './utils';\n\nconst LINKING_ERROR =\n  `The package 'vision-camera-code-scanner' doesn't seem to be linked. Make sure: \\n\\n` +\n  Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n  '- You rebuilt the app after installing the package\\n' +\n  '- You are not using Expo Go\\n';\n\nexport const VisionCameraSimpleScanner = NativeModules.VisionCameraSimpleScanner\n  ? NativeModules.VisionCameraSimpleScanner\n  : new Proxy(\n      {},\n      {\n        get() {\n          throw new Error(LINKING_ERROR);\n        },\n      },\n    );\n\nconst { MODULE_NAME, BARCODE_TYPES, BARCODE_FORMATS } =\n  VisionCameraSimpleScanner.getConstants() as VisionCameraConstants;\n\nexport { BARCODE_FORMATS, BARCODE_TYPES };\n\nconst visionCameraEventEmitter = new NativeEventEmitter(\n  VisionCameraSimpleScanner,\n);\n\nexport const onBarcodeDetected = (\n  callback: (barcode: iOSBarcode | AndroidBarcode) => unknown,\n) => {\n  visionCameraEventEmitter.addListener('onBarcodeDetected', (nativeBarcode) => {\n    callback(nativeBarcode);\n  });\n};\n\nconst visionCameraProcessorPlugin = VisionCameraProxy.initFrameProcessorPlugin(\n  MODULE_NAME,\n) as FrameProcessorPlugin | null;\n\nexport type ScanBarcodesOptions = {\n  barcodeTypes?: BarcodeType[];\n  regionOfInterest?: [number, number, number, number];\n};\n\nexport const scanCodes = (\n  frame: Frame,\n  options?: ScanBarcodesOptions,\n): Barcode[] => {\n  'worklet';\n  if (visionCameraProcessorPlugin == null) {\n    throw new Error(`Failed to load Frame Processor Plugin \"${MODULE_NAME}\"!`);\n  }\n\n  // console.log(`frame.width=${frame.width}, frame.height=${frame.height}`);\n  // @ts-expect-error - incrementRefCount() is not exposed in the typings\n  frame.incrementRefCount && frame.incrementRefCount();\n  const nativeCodes = visionCameraProcessorPlugin.call(\n    frame,\n    options,\n  ) as unknown as (AndroidBarcode | iOSBarcode)[];\n  // @ts-expect-error - decrementRefCount() is not exposed in the typings\n  frame.decrementRefCount && frame.decrementRefCount();\n\n  if (!Array.isArray(nativeCodes)) {\n    console.log(\n      `Native frame processor ${MODULE_NAME} failed to return a proper array!`,\n      nativeCodes,\n    );\n    return [];\n  }\n  return nativeCodes\n    .slice()\n    .map((nativeBarcode) => normalizeNativeBarcode(nativeBarcode, frame));\n};\n","import { Platform } from 'react-native';\nimport type { Code, Frame } from 'react-native-vision-camera';\nimport type {\n  AndroidBarcode,\n  Barcode,\n  BoundingBox,\n  Point,\n  iOSBarcode,\n} from 'src/types';\nimport { normalizeAndroidCodeType, normalizeiOSCodeType } from './types';\n\nexport const isIOSBarcode = (\n  barcode: iOSBarcode | AndroidBarcode,\n): barcode is iOSBarcode => {\n  'worklet';\n  return Platform.OS === 'ios';\n};\n\nexport const isAndroidBarcode = (\n  barcode: iOSBarcode | AndroidBarcode,\n): barcode is AndroidBarcode => {\n  'worklet';\n  return Platform.OS === 'android';\n};\n\nexport const computeBoundingBoxFromCornerPoints = (\n  cornerPoints: Point[],\n): BoundingBox => {\n  'worklet';\n  const xArray = cornerPoints.map((corner) => corner.x);\n  const yArray = cornerPoints.map((corner) => corner.y);\n  // @NOTE we can't use destructuring here because babel would wrap it in non-worklet functions\n  const x = Math.min.apply(null, xArray);\n  const y = Math.min.apply(null, yArray);\n  const width = Math.max.apply(null, xArray) - x;\n  const height = Math.max.apply(null, yArray) - y;\n  return {\n    origin: { x, y },\n    size: {\n      width,\n      height,\n    },\n  };\n};\n\nexport const normalizePrecision = (number: number): number => {\n  'worklet';\n  return Math.round(number);\n};\n\nexport const normalizeNativeBarcode = (\n  barcode: iOSBarcode | AndroidBarcode,\n  frame: Frame,\n): Barcode => {\n  'worklet';\n  if (isIOSBarcode(barcode)) {\n    const { payload, symbology, boundingBox, corners } = barcode;\n    return {\n      value: payload,\n      type: normalizeiOSCodeType(symbology),\n      boundingBox: {\n        origin: {\n          x: normalizePrecision(boundingBox.origin.x * frame.width),\n          y: normalizePrecision(boundingBox.origin.y * frame.height),\n        },\n        size: {\n          width: normalizePrecision(boundingBox.size.width * frame.width),\n          height: normalizePrecision(boundingBox.size.height * frame.height),\n        },\n      },\n      // This explicitly defined to match android's implementation which is to start top left and go clockwise.\n      // https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode#public-point[]-getcornerpoints\n      cornerPoints: [\n        corners.topLeft,\n        corners.topRight,\n        corners.bottomRight,\n        corners.bottomLeft,\n      ].map(({ x, y }) => ({\n        x: normalizePrecision(x * frame.width),\n        y: normalizePrecision(y * frame.height),\n      })),\n      native: barcode,\n    };\n  } else if (isAndroidBarcode(barcode)) {\n    const { rawValue, format, cornerPoints } = barcode;\n    return {\n      value: rawValue,\n      type: normalizeAndroidCodeType(format),\n      boundingBox: computeBoundingBoxFromCornerPoints(cornerPoints),\n      cornerPoints,\n      native: barcode,\n    };\n  } else {\n    throw new Error(`Unsupported platform: ${Platform.OS}`);\n  }\n};\n\nexport const convertVisionCameraCodeToBarcode = (\n  code: Code,\n): Omit<Barcode, 'native'> => {\n  return {\n    value: code.value ?? null,\n    type: code.type,\n    boundingBox: {\n      origin: {\n        x: code.frame?.x ?? 0,\n        y: code.frame?.y ?? 0,\n      },\n      size: {\n        width: code.frame?.width ?? 0,\n        height: code.frame?.height ?? 0,\n      },\n    },\n    cornerPoints: code.corners ?? [],\n  };\n};\n","import type { BarcodeType, iOSSymbology } from 'src/types';\nimport { AndroidBarcodeFormat } from '..';\n\nexport const normalizeiOSCodeType = (symbology: iOSSymbology): BarcodeType => {\n  'worklet';\n  switch (symbology) {\n    case 'VNBarcodeSymbologyAztec':\n      return 'aztec';\n    case 'VNBarcodeSymbologyCode39':\n    case 'VNBarcodeSymbologyCode39Checksum':\n    case 'VNBarcodeSymbologyCode39FullASCII':\n    case 'VNBarcodeSymbologyCode39FullASCIIChecksum':\n      return 'code-39';\n    case 'VNBarcodeSymbologyCode93':\n    case 'VNBarcodeSymbologyCode93i':\n      return 'code-93';\n    case 'VNBarcodeSymbologyCode128':\n      return 'code-128';\n    case 'VNBarcodeSymbologyDataMatrix':\n      return 'data-matrix';\n    case 'VNBarcodeSymbologyEAN8':\n      return 'ean-8';\n    case 'VNBarcodeSymbologyEAN13':\n      return 'ean-13';\n    case 'VNBarcodeSymbologyGS1DataBar':\n    case 'VNBarcodeSymbologyGS1DataBarExpanded':\n    case 'VNBarcodeSymbologyGS1DataBarLimited':\n      return 'gs1-databar';\n    case 'VNBarcodeSymbologyI2of5':\n    case 'VNBarcodeSymbologyI2of5Checksum':\n    case 'VNBarcodeSymbologyITF14':\n      return 'itf';\n    case 'VNBarcodeSymbologyMicroPDF417':\n    case 'VNBarcodeSymbologyPDF417':\n      return 'pdf-417';\n    case 'VNBarcodeSymbologyMicroQR':\n    case 'VNBarcodeSymbologyQR':\n      return 'qr';\n    case 'VNBarcodeSymbologyMSIPlessey':\n      return 'msi-plessey';\n    case 'VNBarcodeSymbologyUPCE':\n      return 'upc-e';\n    default:\n      return 'unknown';\n  }\n};\n\nexport const normalizeAndroidCodeType = (\n  format: AndroidBarcodeFormat,\n): BarcodeType => {\n  'worklet';\n  switch (format) {\n    case AndroidBarcodeFormat.AZTEC:\n      return 'aztec';\n    case AndroidBarcodeFormat.CODABAR:\n      return 'codabar';\n    case AndroidBarcodeFormat.CODE_39:\n      return 'code-39';\n    case AndroidBarcodeFormat.CODE_93:\n      return 'code-93';\n    case AndroidBarcodeFormat.CODE_128:\n      return 'code-128';\n    case AndroidBarcodeFormat.DATA_MATRIX:\n      return 'data-matrix';\n    case AndroidBarcodeFormat.EAN_8:\n      return 'ean-8';\n    case AndroidBarcodeFormat.EAN_13:\n      return 'ean-13';\n    case AndroidBarcodeFormat.ITF:\n      return 'itf';\n    case AndroidBarcodeFormat.PDF417:\n      return 'pdf-417';\n    case AndroidBarcodeFormat.QR_CODE:\n      return 'qr';\n    case AndroidBarcodeFormat.UPC_A:\n      return 'upc-a';\n    case AndroidBarcodeFormat.UPC_E:\n      return 'upc-e';\n    case AndroidBarcodeFormat.UNKNOWN:\n    default:\n      return 'unknown';\n  }\n};\n","import { Platform } from 'react-native';\nimport type { CameraProps, Orientation } from 'react-native-vision-camera';\nimport type { Point, Size } from 'src/types';\nimport { normalizePrecision } from './convert';\n\nexport const applyScaleFactor = (\n  { x, y }: Point,\n  source: Size,\n  target: Size,\n  resizeMode: CameraProps['resizeMode'] = 'cover',\n): Point => {\n  'worklet';\n\n  const ratio = {\n    width: target.width / source.width,\n    height: target.height / source.height,\n  };\n\n  let scaleFactor;\n  if (resizeMode === 'contain') {\n    scaleFactor = Math.min(ratio.width, ratio.height);\n  } else if (resizeMode === 'cover') {\n    scaleFactor = Math.max(ratio.width, ratio.height);\n  } else {\n    throw new Error(`Invalid resize mode: ${resizeMode}`);\n  }\n\n  let newX = x * scaleFactor;\n  let newY = y * scaleFactor;\n\n  // Center the image if it's contain mode\n  if (\n    (ratio.width < ratio.height && resizeMode === 'contain') ||\n    (ratio.width > ratio.height && resizeMode === 'cover')\n  ) {\n    newY += (target.height - source.height * scaleFactor) / 2;\n  } else {\n    newX += (target.width - source.width * scaleFactor) / 2;\n  }\n\n  return { x: normalizePrecision(newX), y: normalizePrecision(newY) };\n};\n\nexport const applyTransformation = (\n  { x, y }: Point,\n  { width, height }: Size,\n  orientation: Orientation,\n): Point => {\n  'worklet';\n\n  if (Platform.OS === 'android') {\n    switch (orientation) {\n      case 'portrait':\n        return { x, y };\n      default:\n        console.warn(`Unsupported orientation: ${orientation}`);\n        return { x, y };\n    }\n  } else if (Platform.OS === 'ios') {\n    switch (orientation) {\n      case 'portrait':\n        return { x: height - y, y: width - x };\n      case 'landscape-left':\n        return { x: width - x, y };\n      case 'landscape-right':\n        return { x: x, y: height - y };\n      case 'portrait-upside-down':\n        return { x: y, y: x };\n      default:\n        console.warn(`Unsupported orientation: ${orientation}`);\n        return { x, y };\n    }\n  } else {\n    throw new Error(`Unsupported platform: ${Platform.OS}`);\n  }\n};\n","import { Platform } from 'react-native';\nimport type { CameraProps, Frame } from 'react-native-vision-camera';\nimport type { Barcode, Highlight, PointMapperFn, Size } from 'src/types';\nimport { computeBoundingBoxFromCornerPoints } from './convert';\nimport { applyScaleFactor, applyTransformation } from './geometry';\n\nexport const computeHighlights = (\n  barcodes: Barcode[],\n  frame: Pick<Frame, 'width' | 'height' | 'orientation'>,\n  layout: Size,\n  resizeMode: CameraProps['resizeMode'] = 'cover',\n  pointMapper?: PointMapperFn,\n): Highlight[] => {\n  'worklet';\n\n  // If the layout is not yet known, we can't compute the highlights\n  if (layout.width === 0 || layout.height === 0) {\n    return [];\n  }\n\n  let adjustedLayout = {\n    width: layout.height,\n    height: layout.width,\n  };\n  if (Platform.OS === 'ios') {\n    /* iOS:\n     * \"portrait\" -> \"landscape-right\"\n     * \"portrait-upside-down\" -> \"landscape-left\"\n     * \"landscape-left\" -> \"portrait\"\n     * \"landscape-right\" -> \"portrait-upside-down\"\n     */\n    // @NOTE destructure the object to make sure we don't hold a reference to the original layout\n    adjustedLayout = ['landscape-left'].includes(frame.orientation)\n      ? {\n          width: layout.height,\n          height: layout.width,\n        }\n      : {\n          width: layout.width,\n          height: layout.height,\n        };\n  }\n\n  const highlights = barcodes.map<Highlight>((barcode, index) => {\n    const { value, cornerPoints } = barcode;\n    let translatedCornerPoints = cornerPoints;\n\n    translatedCornerPoints = translatedCornerPoints?.map((point) =>\n      applyScaleFactor(point, frame, adjustedLayout, resizeMode),\n    );\n\n    if (pointMapper) {\n      translatedCornerPoints = translatedCornerPoints?.map((point) =>\n        pointMapper(point, layout, frame.orientation),\n      );\n    } else {\n      translatedCornerPoints = translatedCornerPoints?.map((point) =>\n        applyTransformation(point, adjustedLayout, frame.orientation),\n      );\n    }\n\n    const valueFromCornerPoints = computeBoundingBoxFromCornerPoints(\n      translatedCornerPoints!,\n    );\n\n    return {\n      ...barcode,\n      key: `${value}.${index}`,\n      cornerPoints: translatedCornerPoints,\n      boundingBox: valueFromCornerPoints,\n    };\n  });\n  // console.log(JSON.stringify(highlights, null, 2));\n\n  return highlights;\n};\n","import { useEffect } from 'react';\nimport { useSharedValue } from 'react-native-worklets-core';\n\nexport function useLatestSharedValue<T>(\n  value: T,\n  dependencies: unknown[] = [value],\n) {\n  const sharedValue = useSharedValue<T>(value);\n  useEffect(() => {\n    sharedValue.value = value;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, dependencies);\n\n  return sharedValue;\n}\n"],"mappings":"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","names":["AndroidBarcodeFormat","AndroidBarcodeValueType","AndroidAddressType","AndroidEncryptionType","AndroidEmailType","AndroidPhoneType","import_react","import_react_native_vision_camera","import_react_native_worklets_core","import_react_native","import_react_native","import_react_native","resizeMode","width","height","highlights"]}