snapshot of https://github.com/tauri-apps/plugins-workspace.git (v2, 2026-09-23; blobs > 131072B omitted)
Some checks failed
integration tests / run-integration-tests (windows-latest) (push) Has been cancelled
Test Rust / test (push) Has been cancelled
test plugins e2e (mobile) / ios (push) Has been cancelled
test plugins e2e / test (map[name:Windows os:windows-latest]) (push) Has been cancelled
test plugins e2e / test (map[name:macOS os:macos-latest]) (push) Has been cancelled
integration tests / run-integration-tests (macos-latest) (push) Has been cancelled
version or publish / version-or-publish (push) Failing after 0s
integration tests / run-integration-tests (ubuntu-22.04) (push) Failing after 0s
Lint JavaScript / eslint (push) Failing after 0s
Sync / sync-to-mirrors (push) Failing after 0s
test plugins e2e (mobile) / android (push) Failing after 0s
test plugins e2e / test (map[name:Linux os:ubuntu-latest]) (push) Failing after 0s
Test Rust / changes (push) Failing after 0s
Lint Rust / changes (push) Failing after 0s
Lint Rust / clippy (push) Has been skipped
Audit Rust / audit-rust (push) Failing after 1s
Audit JavaScript / audit-js (push) Failing after 1s
Some checks failed
integration tests / run-integration-tests (windows-latest) (push) Has been cancelled
Test Rust / test (push) Has been cancelled
test plugins e2e (mobile) / ios (push) Has been cancelled
test plugins e2e / test (map[name:Windows os:windows-latest]) (push) Has been cancelled
test plugins e2e / test (map[name:macOS os:macos-latest]) (push) Has been cancelled
integration tests / run-integration-tests (macos-latest) (push) Has been cancelled
version or publish / version-or-publish (push) Failing after 0s
integration tests / run-integration-tests (ubuntu-22.04) (push) Failing after 0s
Lint JavaScript / eslint (push) Failing after 0s
Sync / sync-to-mirrors (push) Failing after 0s
test plugins e2e (mobile) / android (push) Failing after 0s
test plugins e2e / test (map[name:Linux os:ubuntu-latest]) (push) Failing after 0s
Test Rust / changes (push) Failing after 0s
Lint Rust / changes (push) Failing after 0s
Lint Rust / clippy (push) Has been skipped
Audit Rust / audit-rust (push) Failing after 1s
Audit JavaScript / audit-js (push) Failing after 1s
This commit is contained in:
222
plugins/barcode-scanner/guest-js/index.ts
Normal file
222
plugins/barcode-scanner/guest-js/index.ts
Normal file
@@ -0,0 +1,222 @@
|
||||
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
/**
|
||||
* Scan QR codes, EAN-13 and other kinds of barcodes with the device's camera on Android and iOS.
|
||||
*
|
||||
* @module
|
||||
*/
|
||||
|
||||
import {
|
||||
invoke,
|
||||
requestPermissions as requestPermissions_,
|
||||
checkPermissions as checkPermissions_
|
||||
} from '@tauri-apps/api/core'
|
||||
|
||||
export type { PermissionState } from '@tauri-apps/api/core'
|
||||
|
||||
/**
|
||||
* The barcode symbologies that can be scanned, or used to restrict a scan via {@link ScanOptions.formats}.
|
||||
*/
|
||||
export enum Format {
|
||||
/**
|
||||
* QR code, a two-dimensional matrix barcode.
|
||||
*/
|
||||
QRCode = 'QR_CODE',
|
||||
/**
|
||||
* UPC-A, a 12-digit numeric barcode commonly used on retail products in North America.
|
||||
*
|
||||
* Not supported on iOS.
|
||||
*/
|
||||
UPC_A = 'UPC_A',
|
||||
/**
|
||||
* UPC-E, a compressed 6-digit variant of UPC-A used on small packaging.
|
||||
*/
|
||||
UPC_E = 'UPC_E',
|
||||
/**
|
||||
* EAN-8, an 8-digit numeric barcode used on small retail packaging.
|
||||
*/
|
||||
EAN8 = 'EAN_8',
|
||||
/**
|
||||
* EAN-13, a 13-digit numeric barcode used worldwide on retail products.
|
||||
*/
|
||||
EAN13 = 'EAN_13',
|
||||
/**
|
||||
* Code 39, an alphanumeric barcode used in logistics and inventory tracking.
|
||||
*/
|
||||
Code39 = 'CODE_39',
|
||||
/**
|
||||
* Code 93, a compact alphanumeric barcode similar to Code 39.
|
||||
*/
|
||||
Code93 = 'CODE_93',
|
||||
/**
|
||||
* Code 128, a high-density alphanumeric barcode used in shipping and packaging.
|
||||
*/
|
||||
Code128 = 'CODE_128',
|
||||
/**
|
||||
* Codabar, a numeric barcode commonly used by libraries and blood banks.
|
||||
*
|
||||
* Not supported on iOS.
|
||||
*/
|
||||
Codabar = 'CODABAR',
|
||||
/**
|
||||
* ITF (Interleaved 2 of 5), a numeric barcode encoding an even number of digits.
|
||||
*/
|
||||
ITF = 'ITF',
|
||||
/**
|
||||
* Aztec code, a two-dimensional matrix barcode often used on tickets and boarding passes.
|
||||
*/
|
||||
Aztec = 'AZTEC',
|
||||
/**
|
||||
* Data Matrix, a two-dimensional matrix barcode used to encode small amounts of data.
|
||||
*/
|
||||
DataMatrix = 'DATA_MATRIX',
|
||||
/**
|
||||
* PDF417, a stacked linear barcode used on IDs, boarding passes and shipping labels.
|
||||
*/
|
||||
PDF417 = 'PDF_417',
|
||||
/**
|
||||
* GS1 DataBar, a compact barcode used to mark variable-measure items such as fresh food.
|
||||
*
|
||||
* Not supported on Android. Requires iOS 15.4+
|
||||
*/
|
||||
GS1DataBar = 'GS1_DATA_BAR',
|
||||
/**
|
||||
* The limited variant of {@link Format.GS1DataBar}, encoding fewer digits in a smaller symbol.
|
||||
*
|
||||
* Not supported on Android. Requires iOS 15.4+
|
||||
*/
|
||||
GS1DataBarLimited = 'GS1_DATA_BAR_LIMITED',
|
||||
/**
|
||||
* The expanded variant of {@link Format.GS1DataBar}, capable of encoding additional data such as weight.
|
||||
*
|
||||
* Not supported on Android. Requires iOS 15.4+
|
||||
*/
|
||||
GS1DataBarExpanded = 'GS1_DATA_BAR_EXPANDED'
|
||||
}
|
||||
|
||||
/**
|
||||
* Options to configure a {@link scan} call.
|
||||
*/
|
||||
export interface ScanOptions {
|
||||
/**
|
||||
* Which camera to use for scanning. Defaults to `back`.
|
||||
*/
|
||||
cameraDirection?: 'back' | 'front'
|
||||
/**
|
||||
* The barcode formats to scan for. Defaults to all supported formats.
|
||||
*/
|
||||
formats?: Format[]
|
||||
/**
|
||||
* Whether to show the camera in a small window instead of taking over the whole screen. Defaults to `false`.
|
||||
*/
|
||||
windowed?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* The result of a successful {@link scan} call.
|
||||
*/
|
||||
export interface Scanned {
|
||||
/**
|
||||
* The decoded content of the barcode.
|
||||
*/
|
||||
content: string
|
||||
/**
|
||||
* The format of the scanned barcode.
|
||||
*/
|
||||
format: Format
|
||||
/**
|
||||
* The bounding box of the scanned barcode within the camera frame, when reported by the platform.
|
||||
*/
|
||||
bounds: unknown
|
||||
}
|
||||
|
||||
/**
|
||||
* Start scanning, opening the device's camera. The returned promise resolves once a barcode
|
||||
* matching the given options has been scanned, or rejects if the scan is cancelled.
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* import { scan, Format } from '@tauri-apps/plugin-barcode-scanner';
|
||||
*
|
||||
* const scanned = await scan({ windowed: true, formats: [Format.QRCode] });
|
||||
* ```
|
||||
*
|
||||
* @param options Configuration for the scan.
|
||||
* @returns A promise resolving to the scanned barcode.
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export async function scan(options?: ScanOptions): Promise<Scanned> {
|
||||
return await invoke('plugin:barcode-scanner|scan', { ...options })
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel the current scan process.
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* import { cancel } from '@tauri-apps/plugin-barcode-scanner';
|
||||
*
|
||||
* await cancel();
|
||||
* ```
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export async function cancel(): Promise<void> {
|
||||
await invoke('plugin:barcode-scanner|cancel')
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current state of the camera permission.
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* import { checkPermissions } from '@tauri-apps/plugin-barcode-scanner';
|
||||
*
|
||||
* const permissionState = await checkPermissions();
|
||||
* ```
|
||||
*
|
||||
* @returns A promise resolving to the current state of the camera permission.
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export async function checkPermissions(): Promise<PermissionState> {
|
||||
return await checkPermissions_<{ camera: PermissionState }>(
|
||||
'barcode-scanner'
|
||||
).then((r) => r.camera)
|
||||
}
|
||||
|
||||
/**
|
||||
* Request permissions to use the camera.
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* import { requestPermissions } from '@tauri-apps/plugin-barcode-scanner';
|
||||
*
|
||||
* const permissionState = await requestPermissions();
|
||||
* ```
|
||||
*
|
||||
* @returns A promise resolving to the new state of the camera permission.
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export async function requestPermissions(): Promise<PermissionState> {
|
||||
return await requestPermissions_<{ camera: PermissionState }>(
|
||||
'barcode-scanner'
|
||||
).then((r) => r.camera)
|
||||
}
|
||||
|
||||
/**
|
||||
* Open application settings. Useful if permission was denied and the user must manually enable it.
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* import { openAppSettings } from '@tauri-apps/plugin-barcode-scanner';
|
||||
*
|
||||
* await openAppSettings();
|
||||
* ```
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export async function openAppSettings(): Promise<void> {
|
||||
await invoke('plugin:barcode-scanner|open_app_settings')
|
||||
}
|
||||
Reference in New Issue
Block a user