UNPKG

unix-permissions

Version:
60 lines (41 loc) 1.11 kB
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})) };