unix-permissions
Version:
Swiss Army knife for Unix permissions
61 lines (44 loc) • 1.23 kB
JavaScript
import{parse}from"./parse.js";
import{serialize}from"./serialize.js";
import{TYPES_MAP}from"./types/main.js";
export const convert=(typeName,perm)=>{
const{nodesMap}=parse(perm);
const permA=serialize(TYPES_MAP[typeName],nodesMap);
return permA
};
export const unaryMap=(mapFunc,perm)=>{
const{type,nodesMap}=parse(perm);
const nodesMapA=mapFunc(nodesMap);
const permA=serialize(type,nodesMapA);
return permA
};
export const binaryMap=(mapFunc,perm,...perms)=>{
const{type,nodesMap}=parse(perm);
const nodesMapA=perms.reduce(
binaryMapReduce.bind(undefined,mapFunc),
nodesMap
);
const permA=serialize(type,nodesMapA);
return permA
};
const binaryMapReduce=(mapFunc,nodesMap,perm)=>{
const{nodesMap:nodesMapA}=parse(perm);
const nodesMapB=mapFunc(nodesMap,nodesMapA);
return nodesMapB
};
export const variableMap=(mapFunc,perm,...perms)=>{
if(perm===undefined){
return
}
return binaryMap(mapFunc,perm,...perms)
};
export const binaryTest=(testFunc,permA,...perms)=>{
const{nodesMap}=parse(permA);
return(
perms.length!==0&&
perms.every((permB)=>binaryTestEach(testFunc,nodesMap,permB)))
};
const binaryTestEach=(testFunc,nodesMap,perm)=>{
const{nodesMap:nodesMapA}=parse(perm);
return testFunc(nodesMap,nodesMapA)
};