unix-permissions
Version:
Swiss Army knife for Unix permissions
60 lines (41 loc) • 1.11 kB
JavaScript
import{NODES_MAP}from"../../nodes.js";
import{serialize as serializeNumber}from"../number/serialize.js";
import{MINUS,NONE,OCTAL_BASE,PLUS}from"./constants.js";
export const serialize=(nodes)=>{
const operator=serializeOperator({nodes});
const string=serializeInteger({operator,nodes});
const octal=`${operator}${string}`;
return octal
};
const serializeOperator=({nodes})=>{
if(!isPartial({nodes})){
return NONE
}
if(nodes.every(isAdded)){
return PLUS
}
if(nodes.every(isRemoved)){
return MINUS
}
return NONE
};
const isPartial=({nodes})=>
Object.keys(nodes).length!==Object.keys(NODES_MAP).length;
const isAdded=({add})=>add===true;
const isRemoved=({add})=>add===false;
const serializeInteger=({operator,nodes})=>{
const nodesA=serializeMinus({operator,nodes});
const integer=serializeNumber(nodesA);
const string=integer.
toString(OCTAL_BASE).
padStart(SERIALIZE_LENGTH,SERIALIZE_PAD);
return string
};
const SERIALIZE_LENGTH=4;
const SERIALIZE_PAD="0";
const serializeMinus=({operator,nodes})=>{
if(operator!==MINUS){
return nodes
}
return nodes.map((node)=>({...node,add:true}))
};