unix-permissions
Version:
Swiss Army knife for Unix permissions
40 lines (24 loc) • 803 B
JavaScript
import{parse as parseNumber}from"../number/parse.js";
import{EQUAL,MINUS,OCTAL_BASE,PLUS}from"./constants.js";
import{tokenize}from"./tokenize.js";
export const parse=(octal,category)=>{
const{operator,string}=tokenize(octal);
if(string===undefined){
return
}
const integer=octalToDecimal({string});
const nodes=parseNumber(integer);
const nodesA=parseOperator[operator]({nodes,category});
return nodesA
};
const octalToDecimal=({string})=>Number.parseInt(string,OCTAL_BASE);
const parsePlus=({nodes})=>nodes.filter(hasAdd);
const parseMinus=({nodes})=>nodes.filter(hasAdd).map(invertAdd);
const invertAdd=(node)=>({...node,add:false});
const hasAdd=({add})=>add===true;
const parseEqual=({nodes})=>nodes;
const parseOperator={
[PLUS]:parsePlus,
[MINUS]:parseMinus,
[EQUAL]:parseEqual
};