From 41217e42c4cd88d15b7ae835ee38a565e5903bfe Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 24 Aug 2026 08:53:13 -0700 Subject: [PATCH] feat(camera)!: migrate to @nativescript-community/perms v3 perms v3 changed `check()`/`request()` to resolve to a `Status` string instead of the v2 `[Status, boolean]` tuple. Under v3 `mapStatus` matched the first *character* of the status string against the Status keys, so every permission result mapped to `Status.unknown` and `requestPermissions()` always reported failure. BREAKING CHANGE: requires @nativescript-community/perms v3. Apps pinning perms v2 must upgrade alongside this release. Co-Authored-By: Claude Opus 5 (1M context) --- packages/camera/common.ts | 14 ++++---------- packages/camera/package.json | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/packages/camera/common.ts b/packages/camera/common.ts index 6f3b51a0..3f3d72bf 100644 --- a/packages/camera/common.ts +++ b/packages/camera/common.ts @@ -10,14 +10,8 @@ export function getAspectSafeDimensions(sourceWidth, sourceHeight, reqWidth, req height: Math.floor(sourceHeight / aspectCoef), }; } -function mapStatus(result: permissions.Result): Status { - let status = Status.unknown; - if (result && result.length > 1) { - if (Object.keys(Status).findIndex((k) => k === result[0]) >= 0) { - status = Status[result[0]]; - } - } - return status; +function mapStatus(result: permissions.Status): Status { + return Status[result] ?? Status.unknown; } export function mapError(e): PermissionResult { return { @@ -26,7 +20,7 @@ export function mapError(e): PermissionResult { Error: e, }; } -export function mapCameraPermissionStatus(permission: permissions.Result): PermissionResult { +export function mapCameraPermissionStatus(permission: permissions.Status): PermissionResult { const status = mapStatus(permission); const result = { Success: status === Status.authorized, @@ -35,7 +29,7 @@ export function mapCameraPermissionStatus(permission: permissions.Result): Permi return result; } -export function mapPhotoPermissionStatus(permission: permissions.Result): PermissionResult { +export function mapPhotoPermissionStatus(permission: permissions.Status): PermissionResult { const status = mapStatus(permission); const result = { Success: status === Status.authorized || status === Status.limited, diff --git a/packages/camera/package.json b/packages/camera/package.json index 0a5671ef..ef6328e7 100644 --- a/packages/camera/package.json +++ b/packages/camera/package.json @@ -35,6 +35,6 @@ "readmeFilename": "README.md", "bootstrapper": "@nativescript/plugin-seed", "dependencies": { - "@nativescript-community/perms": "^2.3.1" + "@nativescript-community/perms": "^3.0.4" } }