diff --git a/lib/permissions/minimally-encoded-thread-permissions.js b/lib/permissions/minimally-encoded-thread-permissions.js --- a/lib/permissions/minimally-encoded-thread-permissions.js +++ b/lib/permissions/minimally-encoded-thread-permissions.js @@ -7,7 +7,7 @@ ThreadPermission, ThreadPermissionsInfo, } from '../types/thread-permission-types.js'; -import { entries } from '../utils/objects.js'; +import { entries, invertObjectToMap } from '../utils/objects.js'; // `baseRolePermissionEncoding` maps permission names to indices. // These indices represent the 6-bit basePermission part of the 10-bit role @@ -126,21 +126,18 @@ return bitmask.toString(16).padStart(3, '0'); }; -const inverseBaseRolePermissionEncoding = new Map( - Object.entries(baseRolePermissionEncoding).map(([key, value]) => [ - value, - key, - ]), +const inverseBaseRolePermissionEncoding = invertObjectToMap( + baseRolePermissionEncoding, ); // $FlowIssue bigint-unsupported -const inversePropagationPrefixes: Map = new Map( - Object.entries(propagationPrefixes).map(([key, value]) => [value, key]), -); +const inversePropagationPrefixes: Map = + invertObjectToMap(propagationPrefixes); + // $FlowIssue bigint-unsupported -const inverseFilterPrefixes: Map = new Map( - Object.entries(filterPrefixes).map(([key, value]) => [value, key]), -); +const inverseFilterPrefixes: Map = + invertObjectToMap(filterPrefixes); + const decodeRolePermissionBitmask = (bitmask: string): string => { const bitmaskInt = BigInt(`0x${bitmask}`); const basePermission = (bitmaskInt >> BigInt(4)) & BigInt(63); diff --git a/lib/utils/objects.js b/lib/utils/objects.js --- a/lib/utils/objects.js +++ b/lib/utils/objects.js @@ -129,6 +129,14 @@ ); } +function invertObjectToMap(obj: { +[K]: V }): Map { + const invertedMap = new Map(); + for (const key of Object.keys(obj)) { + invertedMap.set(obj[key], key); + } + return invertedMap; +} + export { findMaximumDepth, values, @@ -137,4 +145,5 @@ assertObjectsAreEqual, deepDiff, entries, + invertObjectToMap, };