31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import _ from 'lodash';
|
|
import type { GroupPermissions, Permissions } from './chmod-calculator.types';
|
|
|
|
export { computeChmodOctalRepresentation, computeChmodSymbolicRepresentation };
|
|
|
|
function computeChmodOctalRepresentation({ permissions }: { permissions: Permissions }): string {
|
|
const permissionValue = { read: 4, write: 2, execute: 1 };
|
|
|
|
const getGroupPermissionValue = (permission: GroupPermissions) =>
|
|
_.reduce(permission, (acc, isPermSet, key) => acc + (isPermSet ? _.get(permissionValue, key, 0) : 0), 0);
|
|
|
|
return [
|
|
getGroupPermissionValue(permissions.owner),
|
|
getGroupPermissionValue(permissions.group),
|
|
getGroupPermissionValue(permissions.public),
|
|
].join('');
|
|
}
|
|
|
|
function computeChmodSymbolicRepresentation({ permissions }: { permissions: Permissions }): string {
|
|
const permissionValue = { read: 'r', write: 'w', execute: 'x' };
|
|
|
|
const getGroupPermissionValue = (permission: GroupPermissions) =>
|
|
_.reduce(permission, (acc, isPermSet, key) => acc + (isPermSet ? _.get(permissionValue, key, '') : '-'), '');
|
|
|
|
return [
|
|
getGroupPermissionValue(permissions.owner),
|
|
getGroupPermissionValue(permissions.group),
|
|
getGroupPermissionValue(permissions.public),
|
|
].join('');
|
|
}
|