unix-permissions
Version:
Swiss Army knife for Unix permissions
48 lines (33 loc) • 1.04 kB
JavaScript
import{LONG_CATEGORIES}from"../../constants.js";
import{getNodeKey}from"../../nodes.js";
import{groupBy,mapValues}from"../../utils.js";
import{
LONG_PERMISSIONS,
SERIALIZE_SPECIAL,
SPECIAL_CATEGORY}from
"./constants.js";
import{compareNodes}from"./sort.js";
export const serialize=(nodes)=>{
const nodesA=nodes.map(serializeNode).sort(compareNodes);
const object=groupBy(nodesA,"category");
const objectA=mapValues(object,mergePerms);
return objectA
};
const serializeNode=(node)=>{
const specialPerm=getSpecialPerm({node});
if(specialPerm!==undefined){
return{...node,category:SPECIAL_CATEGORY,permission:specialPerm}
}
const category=LONG_CATEGORIES[node.category];
const permission=LONG_PERMISSIONS[node.permission];
return{...node,category,permission}
};
const getSpecialPerm=({node})=>{
const nodeKey=getNodeKey(node);
return SERIALIZE_SPECIAL[nodeKey]
};
const mergePerms=(perms)=>{
const permsA=perms.map(normalizePerm);
return Object.assign({},...permsA)
};
const normalizePerm=({permission,add})=>({[permission]:add});