unix-permissions
Version:
Swiss Army knife for Unix permissions
48 lines (30 loc) • 892 B
JavaScript
import{excludeKeys}from"filter-obj";
import isPlainObj from"is-plain-obj";
import{getNodesMap,NODES_MAP}from"./nodes.js";
import{TYPES}from"./types/main.js";
export const parse=(perm)=>{
const{type,nodes}=TYPES.reduce(parseReduce.bind(undefined,perm),{});
validateNodes({nodes,perm});
const nodesMap=normalizeNodes({nodes});
return{type,nodesMap}
};
const parseReduce=(perm,memo,type)=>{
if(memo.nodes!==undefined){
return memo
}
const nodes=type.parse(perm);
return{type,nodes}
};
const validateNodes=({nodes,perm})=>{
if(nodes!==undefined){
return
}
const permA=isPlainObj(perm)?JSON.stringify(perm):perm;
throw new Error(`Permissions syntax is invalid: ${permA}`)
};
const normalizeNodes=({nodes})=>{
const nodesMap=getNodesMap(nodes);
const nodesMapA=excludeKeys(nodesMap,isInvalidNode);
return nodesMapA
};
const isInvalidNode=(nodeKey)=>NODES_MAP[nodeKey]===undefined;