{"version":3,"file":"main.cjs","sources":["../node_modules/filter-obj/index.js","../node_modules/is-plain-obj/index.js","../src/constants.js","../src/nodes.js","../src/types/number/constants.js","../src/types/number/parse.js","../src/types/number/serialize.js","../src/types/number/main.js","../src/utils.js","../src/types/object/constants.js","../src/types/object/parse.js","../src/types/object/sort.js","../src/types/object/serialize.js","../src/types/object/main.js","../src/types/octal/constants.js","../src/types/octal/tokenize.js","../src/types/octal/parse.js","../src/types/octal/serialize.js","../src/types/octal/main.js","../src/types/stat/tokenize.js","../src/types/stat/parse.js","../src/types/stat/serialize.js","../src/types/stat/main.js","../src/types/symbolic/tokenize.js","../src/types/symbolic/parse.js","../src/types/symbolic/join.js","../src/types/symbolic/serialize.js","../src/types/symbolic/main.js","../src/types/main.js","../src/parse.js","../src/serialize.js","../src/helpers.js","../src/converters.js","../src/functions/contain.js","../src/functions/equal.js","../src/functions/not.js","../src/functions/invert.js","../src/functions/min_max.js","../src/functions/normalize.js","../src/functions/positive.js","../src/functions/set.js","../src/type.js"],"sourcesContent":["export function includeKeys(object, predicate) {\n\tconst result = {};\n\n\tif (Array.isArray(predicate)) {\n\t\tfor (const key of predicate) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor?.enumerable) {\n\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// `Reflect.ownKeys()` is required to retrieve symbol properties\n\t\tfor (const key of Reflect.ownKeys(object)) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor.enumerable) {\n\t\t\t\tconst value = object[key];\n\t\t\t\tif (predicate(key, value, object)) {\n\t\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function excludeKeys(object, predicate) {\n\tif (Array.isArray(predicate)) {\n\t\tconst set = new Set(predicate);\n\t\treturn includeKeys(object, key => !set.has(key));\n\t}\n\n\treturn includeKeys(object, (key, value, object) => !predicate(key, value, object));\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","export const NODES = [\n  {\n    category: 'u',\n    permission: 'r',\n  },\n  {\n    category: 'u',\n    permission: 'w',\n  },\n  {\n    category: 'u',\n    permission: 'x',\n  },\n  {\n    category: 'u',\n    permission: 's',\n  },\n  {\n    category: 'g',\n    permission: 'r',\n  },\n  {\n    category: 'g',\n    permission: 'w',\n  },\n  {\n    category: 'g',\n    permission: 'x',\n  },\n  {\n    category: 'g',\n    permission: 's',\n  },\n  {\n    category: 'o',\n    permission: 'r',\n  },\n  {\n    category: 'o',\n    permission: 'w',\n  },\n  {\n    category: 'o',\n    permission: 'x',\n  },\n  {\n    category: 'o',\n    permission: 't',\n  },\n]\nexport const ORDER = [\n  'u r',\n  'u w',\n  'u x',\n  'u s',\n  'g r',\n  'g w',\n  'g x',\n  'g s',\n  'o r',\n  'o w',\n  'o x',\n  'o t',\n]\n\nexport const CATEGORIES = ['u', 'g', 'o']\nexport const SHORT_CATEGORIES = {\n  user: 'u',\n  group: 'g',\n  others: 'o',\n}\n/* eslint-disable id-length */\nexport const LONG_CATEGORIES = {\n  u: 'user',\n  g: 'group',\n  o: 'others',\n}\n\nexport const PERMISSIONS = ['r', 'w', 'x', 't', 's']\nexport const SPECIAL_PERMISSIONS = new Set(['t', 's'])\nexport const CATEGORY_PERMISSIONS = {\n  a: ['x', 'w', 'r', 't', 's'],\n  u: ['x', 'w', 'r', 's'],\n  g: ['x', 'w', 'r', 's'],\n  o: ['x', 'w', 'r', 't'],\n}\n/* eslint-enable id-length */\n","import { NODES } from './constants.js'\n\n// Transform an array of `nodes` to a map of `nodes`\nexport const getNodesMap = (nodes) => {\n  const pairs = nodes.map(getNodePair)\n  return Object.assign({}, ...pairs)\n}\n\nconst getNodePair = (node) => {\n  const nodeKey = getNodeKey(node)\n  return { [nodeKey]: node }\n}\n\nexport const getNodeKey = ({ category, permission }) =>\n  `${category} ${permission}`\n\n// Precalculate map for all possible nodes\nexport const NODES_MAP = getNodesMap(NODES)\n","export const VALUES = {\n  'u r': 256,\n  'u w': 128,\n  'u x': 64,\n  'u s': 2048,\n  'g r': 32,\n  'g w': 16,\n  'g x': 8,\n  'g s': 1024,\n  'o r': 4,\n  'o w': 2,\n  'o x': 1,\n  'o t': 512,\n}\n","import { NODES_MAP } from '../../nodes.js'\n\nimport { VALUES } from './constants.js'\n\n// Parse a `number` permission to `nodes`\nexport const parse = (number) => {\n  if (!isValidNumber({ number })) {\n    return\n  }\n\n  return Object.entries(NODES_MAP).map(([nodeKey, node]) =>\n    getNode({ number, nodeKey, node }),\n  )\n}\n\n// We allow `stat` bitfields as input but ignore the bits related to file\n// types. See `man inode (7)` for information on those file types.\nconst isValidNumber = ({ number }) =>\n  Number.isInteger(number) && number >= MIN_NUMBER && number <= MAX_NUMBER\n\nconst MIN_NUMBER = 0\nconst MAX_NUMBER = 65_535\n\n// Check permissions bit by bit\nconst getNode = ({ number, nodeKey, node }) => {\n  const add = getAdd({ number, nodeKey })\n  return { ...node, add }\n}\n\nconst getAdd = ({ number, nodeKey }) => {\n  const value = VALUES[nodeKey]\n  // eslint-disable-next-line no-bitwise\n  return (number & value) !== 0\n}\n","import { getNodeKey } from '../../nodes.js'\n\nimport { VALUES } from './constants.js'\n\n// Serialize from `nodes` to a `number` permission\nexport const serialize = (nodes) =>\n  nodes.filter(hasAdd).map(serializeNode).reduce(sum, 0)\n\nconst hasAdd = ({ add }) => add === true\n\nconst serializeNode = (node) => {\n  const nodeKey = getNodeKey(node)\n  return VALUES[nodeKey]\n}\n\nconst sum = (memo, number) => memo + number\n","import { parse } from './parse.js'\nimport { serialize } from './serialize.js'\n\nexport const number = { parse, serialize }\n","// Like lodash _.mapValues()\nexport const mapValues = (object, mapper) => {\n  const pairs = Object.entries(object).map(([key, value]) => ({\n    [key]: mapper(value, key, object),\n  }))\n  return Object.assign({}, ...pairs)\n}\n\n// Group array of objects together according to a specific key\nexport const groupBy = (array, key) =>\n  array.reduce(groupByReducer.bind(undefined, key), {})\n\nconst groupByReducer = (key, groups, obj) => {\n  const groupName = obj[key]\n  const { [groupName]: currentGroup = [] } = groups\n  const newGroup = [...currentGroup, obj]\n  return { ...groups, [groupName]: newGroup }\n}\n\n// Check if an array has duplicate elements\nexport const hasDuplicate = (array) => array.some(isDuplicate)\n\nconst isDuplicate = (elem, index, elems) =>\n  elems.slice(index + 1).includes(elem)\n","export const SHORT_PERMISSIONS = {\n  read: 'r',\n  write: 'w',\n  execute: 'x',\n}\n/* eslint-disable id-length */\nexport const LONG_PERMISSIONS = {\n  r: 'read',\n  w: 'write',\n  x: 'execute',\n}\n/* eslint-enable id-length */\n\nexport const SPECIAL_CATEGORY = 'special'\nexport const PARSE_SPECIAL = {\n  setuid: {\n    category: 'u',\n    permission: 's',\n  },\n  setgid: {\n    category: 'g',\n    permission: 's',\n  },\n  sticky: {\n    category: 'o',\n    permission: 't',\n  },\n}\nexport const SERIALIZE_SPECIAL = {\n  'u s': 'setuid',\n  'g s': 'setgid',\n  'o t': 'sticky',\n}\n","import isPlainObj from 'is-plain-obj'\n\nimport { SHORT_CATEGORIES } from '../../constants.js'\nimport { mapValues } from '../../utils.js'\n\nimport {\n  SHORT_PERMISSIONS,\n  SPECIAL_CATEGORY,\n  PARSE_SPECIAL,\n} from './constants.js'\n\n// Parse an `object` permission into nodes\nexport const parse = (object) => {\n  // Non-plain objects probably indicate a non-intentional error\n  if (!isPlainObj(object)) {\n    return\n  }\n\n  const objectA = parseAll(object)\n\n  const nodes = Object.entries(objectA).flatMap(parsePermissions)\n\n  return validateNodes({ nodes })\n}\n\n// `all` is a shortcut for all categories\nconst parseAll = ({ all, ...object }) => {\n  if (all === undefined) {\n    return object\n  }\n\n  // `all` has lower priority\n  const objectA = mapValues(SHORT_CATEGORIES, (value, category) => ({\n    ...all,\n    ...object[category],\n  }))\n  return { ...object, ...objectA }\n}\n\n// Parse each `object` category's object into nodes\nconst parsePermissions = ([category, permissions]) => {\n  // Non-plain objects probably indicate a non-intentional error\n  if (!isPlainObj(permissions)) {\n    return\n  }\n\n  const categoryA = getCategory({ category })\n\n  // Invalid category name\n  if (categoryA === undefined) {\n    return\n  }\n\n  const nodes = Object.entries(permissions)\n    .filter(hasDefinedValue)\n    .map(([permission, add]) =>\n      parsePermission({ category: categoryA, permission, add }),\n    )\n\n  return validateNodes({ nodes })\n}\n\nconst getCategory = ({ category }) => {\n  if (category === SPECIAL_CATEGORY) {\n    return category\n  }\n\n  return SHORT_CATEGORIES[category]\n}\n\n// `undefined` values e.g. `{ user: { read: undefined } }` result is no nodes.\nconst hasDefinedValue = ([, value]) => value !== undefined\n\nconst parsePermission = ({ category, permission, add }) => {\n  // Permission values must be `undefined`, `true` or `false`\n  if (typeof add !== 'boolean') {\n    return\n  }\n\n  if (category === SPECIAL_CATEGORY) {\n    return parseSpecialPerm({ permission, add })\n  }\n\n  return parseNormalPerm({ category, permission, add })\n}\n\nconst parseSpecialPerm = ({ permission, add }) => {\n  const specialNode = PARSE_SPECIAL[permission]\n\n  if (specialNode === undefined) {\n    return\n  }\n\n  return { ...specialNode, add }\n}\n\nconst parseNormalPerm = ({ category, permission, add }) => {\n  const permissionA = SHORT_PERMISSIONS[permission]\n\n  // Invalid permission name\n  if (permissionA === undefined) {\n    return\n  }\n\n  return { category, permission: permissionA, add }\n}\n\nconst validateNodes = ({ nodes }) => {\n  if (nodes.some(isInvalidNode)) {\n    return\n  }\n\n  return nodes\n}\n\nconst isInvalidNode = (node) => node === undefined\n","// Ensure object keys order\nexport const compareNodes = (nodeA, nodeB) => {\n  const result = sortCategory(nodeA, nodeB)\n\n  if (result !== 0) {\n    return result\n  }\n\n  return sortPerm(nodeA, nodeB)\n}\n\nconst sort = ({ attrName, order }, nodeA, nodeB) => {\n  if (nodeA[attrName] === nodeB[attrName]) {\n    return 0\n  }\n\n  return order.indexOf(nodeA[attrName]) > order.indexOf(nodeB[attrName])\n    ? 1\n    : -1\n}\n\nconst CATEGORY_ORDER = ['user', 'group', 'others', 'special']\nconst PERM_ORDER = ['read', 'write', 'execute', 'setuid', 'setgid', 'sticky']\n\nconst sortCategory = sort.bind(undefined, {\n  attrName: 'category',\n  order: CATEGORY_ORDER,\n})\nconst sortPerm = sort.bind(undefined, {\n  attrName: 'permission',\n  order: PERM_ORDER,\n})\n","import { LONG_CATEGORIES } from '../../constants.js'\nimport { getNodeKey } from '../../nodes.js'\nimport { groupBy, mapValues } from '../../utils.js'\n\nimport {\n  LONG_PERMISSIONS,\n  SPECIAL_CATEGORY,\n  SERIALIZE_SPECIAL,\n} from './constants.js'\nimport { compareNodes } from './sort.js'\n\n// Serialize from `nodes` to a `object` permission.\n// Never serialize to `all` category so make output more predictable.\nexport const serialize = (nodes) => {\n  // eslint-disable-next-line fp/no-mutating-methods\n  const nodesA = nodes.map(serializeNode).sort(compareNodes)\n  const object = groupBy(nodesA, 'category')\n  const objectA = mapValues(object, mergePerms)\n  return objectA\n}\n\n// Serialize each node\nconst serializeNode = (node) => {\n  // Handle `special` permissions\n  const specialPerm = getSpecialPerm({ node })\n\n  if (specialPerm !== undefined) {\n    return { ...node, category: SPECIAL_CATEGORY, permission: specialPerm }\n  }\n\n  // From short names to long names\n  const category = LONG_CATEGORIES[node.category]\n  const permission = LONG_PERMISSIONS[node.permission]\n  return { ...node, category, permission }\n}\n\nconst getSpecialPerm = ({ node }) => {\n  const nodeKey = getNodeKey(node)\n  return SERIALIZE_SPECIAL[nodeKey]\n}\n\n// Convert to object form\nconst mergePerms = (perms) => {\n  const permsA = perms.map(normalizePerm)\n  return Object.assign({}, ...permsA)\n}\n\nconst normalizePerm = ({ permission, add }) => ({ [permission]: add })\n","import { parse } from './parse.js'\nimport { serialize } from './serialize.js'\n\nexport const object = { parse, serialize }\n","export const PLUS = '+'\nexport const MINUS = '-'\nexport const EQUAL = '='\nexport const NONE = ''\n\nexport const OCTAL_BASE = 8\n","import { NONE } from './constants.js'\n\n// Tokenize an `octal` string using a regExp\nexport const tokenize = (octal) => {\n  if (typeof octal !== 'string') {\n    return {}\n  }\n\n  const tokens = OCTAL_REGEXP.exec(octal)\n\n  if (tokens === null) {\n    return {}\n  }\n\n  const [, operator, string] = tokens\n\n  const operatorA = addDefaultOperator({ operator })\n  return { operator: operatorA, string }\n}\n\n// Matches octal numbers with 1 to 4 digits, e.g. `544`\n// Allow trailing whitespaces\n// Can be prefixed with a backslash, a leading 0 and/or an `o`\n// Can be prefixed with an operator = - or +, e.g. `=544`\nconst OCTAL_REGEXP = /^\\s*([=+-]?)\\\\?0?[oO]?([0-7]{1,4})\\s*$/u\n\n// '022' is same as '+022' (to match chmod behavior)\nconst addDefaultOperator = ({ operator }) => {\n  if (operator === NONE) {\n    return DEFAULT_OPERATOR\n  }\n\n  return operator\n}\n\nconst DEFAULT_OPERATOR = '='\n","import { parse as parseNumber } from '../number/parse.js'\n\nimport { OCTAL_BASE, PLUS, MINUS, EQUAL } from './constants.js'\nimport { tokenize } from './tokenize.js'\n\n// Parse an `octal` permission to `nodes`\nexport const parse = (octal, category) => {\n  const { operator, string } = tokenize(octal)\n\n  if (string === undefined) {\n    return\n  }\n\n  const integer = octalToDecimal({ string })\n  // Re-use `number` parsing logic\n  const nodes = parseNumber(integer)\n  // Each operator has its own logic\n  const nodesA = parseOperator[operator]({ nodes, category })\n  return nodesA\n}\n\n// From octal string to decimal integer\nconst octalToDecimal = ({ string }) => Number.parseInt(string, OCTAL_BASE)\n\nconst parsePlus = ({ nodes }) => nodes.filter(hasAdd)\n\nconst parseMinus = ({ nodes }) => nodes.filter(hasAdd).map(invertAdd)\n\nconst invertAdd = (node) => ({ ...node, add: false })\n\nconst hasAdd = ({ add }) => add === true\n\n// =octal means that some permissions are +, others -\nconst parseEqual = ({ nodes }) => nodes\n\nconst parseOperator = {\n  [PLUS]: parsePlus,\n  [MINUS]: parseMinus,\n  [EQUAL]: parseEqual,\n}\n","import { NODES_MAP } from '../../nodes.js'\nimport { serialize as serializeNumber } from '../number/serialize.js'\n\nimport { OCTAL_BASE, PLUS, MINUS, NONE } from './constants.js'\n\n// Serialize from `nodes` to a `octal` permission\nexport const serialize = (nodes) => {\n  const operator = serializeOperator({ nodes })\n  const string = serializeInteger({ operator, nodes })\n  const octal = `${operator}${string}`\n  return octal\n}\n\n// `octal` can be prefixed with `-` or `+` if partial and only negative|positive\n// `=` is the default operator, i.e. is never serialized.\nconst serializeOperator = ({ nodes }) => {\n  if (!isPartial({ nodes })) {\n    return NONE\n  }\n\n  if (nodes.every(isAdded)) {\n    return PLUS\n  }\n\n  if (nodes.every(isRemoved)) {\n    return MINUS\n  }\n\n  return NONE\n}\n\nconst isPartial = ({ nodes }) =>\n  Object.keys(nodes).length !== Object.keys(NODES_MAP).length\n\nconst isAdded = ({ add }) => add === true\n\nconst isRemoved = ({ add }) => add === false\n\n// Re-use `number` serialization logic, then stringify to an octal number\nconst serializeInteger = ({ operator, nodes }) => {\n  const nodesA = serializeMinus({ operator, nodes })\n  const integer = serializeNumber(nodesA)\n  // Always serialize to 4 characters (with leading 0s)\n  const string = integer\n    .toString(OCTAL_BASE)\n    .padStart(SERIALIZE_LENGTH, SERIALIZE_PAD)\n  return string\n}\n\nconst SERIALIZE_LENGTH = 4\nconst SERIALIZE_PAD = '0'\n\n// When using `-octal`, we need the inverse number\nconst serializeMinus = ({ operator, nodes }) => {\n  if (operator !== MINUS) {\n    return nodes\n  }\n\n  return nodes.map((node) => ({ ...node, add: true }))\n}\n","import { parse } from './parse.js'\nimport { serialize } from './serialize.js'\n\nexport const octal = { parse, serialize }\n","// Tokenize a `stat` string using a RegExp\nexport const tokenize = (stat) => {\n  if (typeof stat !== 'string') {\n    return\n  }\n\n  const tokens = STAT_REGEXP.exec(stat)\n\n  if (tokens === null) {\n    return\n  }\n\n  // eslint-disable-next-line id-length\n  const [u, g, o] = tokens.slice(1).map(removeDashes).map(expandSpecial)\n  // eslint-disable-next-line id-length\n  return { u, g, o }\n}\n\n// Matches a `stat` permission, e.g. `---rwx-wx`\n// Allow trailing whitespaces, or whitespaces between group.\n// Each permission can either be `-` `r` `w` or `x`.\n// Special permissions are also allowed `s`, `S`, `t`, `T` but only within\n// the correct category.\n// `X` permission is allowed.\n// File type as a first character is allowed and optional.\n// Each group must have 3 characters, and not have duplicates.\nconst STAT_REGEXP =\n  /^\\s*[-dlpscbD]?\\s*([-rwxXsS]{3})\\s*([-rwxXsS]{3})\\s*([-rwxXtT]{3})\\s*$/u\n\n// We cannot know if `-` means `add: false` (must unset bits) or\n// `add: undefined` (leave bits as is), so we assume the later.\nconst removeDashes = (part) => part.replace(DASH_REGEXP, '')\n\nconst DASH_REGEXP = /-/gu\n\n// Special permissions have an uppercase and lowercase depending on whether\n// `x` exists.\n// `X` permission is a special permission according to chmod behavior.\n// It is the same as `x` except it is a noop if no categories has `x`.\n// At the moment, we do not support this, so it's just an alias for `x`.\nconst expandSpecial = (part) => EXPAND_REGEXPS.reduce(specialReduce, part)\n\n// Array order matters. E.g. if S -> s was before s -> xs, it would not work\nconst EXPAND_REGEXPS = [\n  [/X/gu, 'x'],\n  [/s/gu, 'xs'],\n  [/S/gu, 's'],\n  [/t/gu, 'xt'],\n  [/T/gu, 't'],\n]\n\n// Inverse of `expandSpecial()`\nexport const contractSpecial = (part) =>\n  CONTRACT_REGEXPS.reduce(specialReduce, part)\n\nconst CONTRACT_REGEXPS = [\n  [/-t/gu, 'T'],\n  [/xt/gu, 't'],\n  [/-s/gu, 'S'],\n  [/xs/gu, 's'],\n]\n\nconst specialReduce = (part, [regexp, chars]) => part.replace(regexp, chars)\n","import { NODES } from '../../constants.js'\nimport { hasDuplicate } from '../../utils.js'\n\nimport { tokenize } from './tokenize.js'\n\n// Parse a `stat` permission to `nodes`\nexport const parse = (stat) => {\n  const tokens = tokenize(stat)\n\n  if (tokens === undefined || hasDuplicates({ tokens })) {\n    return\n  }\n\n  return NODES.map((node) => parseNode({ node, tokens }))\n}\n\n// We do not allow duplicates within a category as it indicates typos\nconst hasDuplicates = ({ tokens }) =>\n  Object.values(tokens).some(hasDuplicateChars)\n\nconst hasDuplicateChars = (string) => hasDuplicate([...string])\n\n// Parse a `stat` character to a single `node`\nconst parseNode = ({ node, node: { category }, tokens }) => {\n  const part = tokens[category]\n  return parsePart({ node, part })\n}\n\nconst parsePart = ({ node, node: { permission }, part }) => {\n  const add = part.includes(permission)\n  return { ...node, add }\n}\n","import { SPECIAL_PERMISSIONS } from '../../constants.js'\nimport { NODES_MAP, getNodesMap } from '../../nodes.js'\n\nimport { contractSpecial } from './tokenize.js'\n\n// Serialize from `nodes` to a `stat` permission\nexport const serialize = (nodes) => {\n  const addedNodes = getAddedNodes({ nodes })\n\n  const stat = Object.entries(NODES_MAP)\n    .map(([nodeKey, node]) => serializeNode({ node, nodeKey, addedNodes }))\n    .join('')\n  // Special permissions are contracted into `x`\n  const statA = contractSpecial(stat)\n  return statA\n}\n\n// Get a `nodesMap` of the added permissions\nconst getAddedNodes = ({ nodes }) => {\n  const nodesA = nodes.filter(hasAdd)\n  return getNodesMap(nodesA)\n}\n\nconst hasAdd = ({ add }) => add === true\n\n// Returns either `-` or the permission character\nconst serializeNode = ({ node: { permission }, nodeKey, addedNodes }) => {\n  if (addedNodes[nodeKey] !== undefined) {\n    return permission\n  }\n\n  // Special permissions are contracted into `x`\n  if (SPECIAL_PERMISSIONS.has(permission)) {\n    return ''\n  }\n\n  return NO_PERMISSION\n}\n\nconst NO_PERMISSION = '-'\n","import { parse } from './parse.js'\nimport { serialize } from './serialize.js'\n\nexport const stat = { parse, serialize }\n","// Tokenize `symbolic` string using a RegExp\nexport const tokenize = (symbolic) => {\n  if (typeof symbolic !== 'string') {\n    return\n  }\n\n  const tokens = symbolic.split(COMMA_REGEXP).map(tokenizePart)\n\n  const isMatching = tokens.every((token) => token !== undefined)\n\n  if (!isMatching) {\n    return\n  }\n\n  return tokens\n}\n\n// Allow whitespaces around commas\nconst COMMA_REGEXP = /\\s*,\\s*/gu\n\n// Tokenize each `symbolic` comma-separated group\nconst tokenizePart = (part) => {\n  const parts = PART_REGEXP.exec(part)\n\n  if (parts === null) {\n    return\n  }\n\n  const [, categories, operator, permissions] = parts\n  return { categories, operator, permissions }\n}\n\n// Symbolic permission comma-separated group, e.g. `a=rw`\n// Allow trailing whitespaces.\n// The category are a string composed of `a`, `u`, `g` or `o`, and defaults\n// to `a`.\n// The operator can be `=`, `+` or `-`, and is required.\n// The permissions are a string composed of `xwrXst`, and defaults to ''.\nconst PART_REGEXP = /^\\s*([augo]*)\\s*([=+-])\\s*([xwrXst]*)\\s*$/u\n","import { CATEGORIES, PERMISSIONS } from '../../constants.js'\nimport { hasDuplicate } from '../../utils.js'\n\nimport { tokenize } from './tokenize.js'\n\n// Parse `symbolic` permissions to nodes\nexport const parse = (symbolic) => {\n  const tokens = tokenize(symbolic)\n\n  if (tokens === undefined || hasDuplicates({ tokens })) {\n    return\n  }\n\n  const nodes = tokens\n    .map(addDefaultCategories)\n    .map(normalizeX)\n    .flatMap(splitCategories)\n    .flatMap(splitAll)\n    .flatMap(normalizeOperator)\n    .flatMap(splitPermissions)\n  return nodes\n}\n\n// Duplicate permissions within the same part are not allowed as opposed to\n// chmod behavior. Otherwise `stat` permissions with duplicates would be parsed\n// as `symbolic`.\nconst hasDuplicates = ({ tokens }) => tokens.some(hasDuplicatePermissions)\n\nconst hasDuplicatePermissions = ({ permissions }) =>\n  hasDuplicate([...permissions])\n\n// `=rw` defaults to `a=rw`\nconst addDefaultCategories = (node) => {\n  if (node.categories !== '') {\n    return node\n  }\n\n  return { ...node, categories: DEFAULT_CATEGORIES }\n}\n\nconst DEFAULT_CATEGORIES = 'a'\n\n// See `stat` type for an explanation on special permission `X`.\n// It is transformed to `x`.\nconst normalizeX = ({ permissions, ...node }) => {\n  const permissionsA = permissions.replace(X_REGEXP, 'x')\n  return { ...node, permissions: permissionsA }\n}\n\nconst X_REGEXP = /X/gu\n\n// Several categories can be grouped, e.g. `gu=x`.\n// Duplicates are allowed.\nconst splitCategories = ({ categories, operator, permissions }) =>\n  [...categories].map((category) => ({\n    category,\n    operator,\n    permissions,\n  }))\n\n// `a` category is the same as `rwx`\nconst splitAll = ({ category, operator, permissions }) => {\n  if (category !== 'a') {\n    return { category, operator, permissions }\n  }\n\n  return CATEGORIES.map((categoryA) => ({\n    category: categoryA,\n    operator,\n    permissions,\n  }))\n}\n\n// Transform operator to `node.add`\nconst normalizeOperator = ({ operator, permissions, ...node }) => {\n  if (operator === '+') {\n    return [{ ...node, permissions, add: true }]\n  }\n\n  if (operator === '-') {\n    return [{ ...node, permissions, add: false }]\n  }\n\n  // `=` operator results in a mix of `+` and `-`\n  return PERMISSIONS.map((permission) => ({\n    ...node,\n    permissions: permission,\n    add: permissions.includes(permission),\n  }))\n}\n\n// Several permissions per part can be used, e.g. `a=rw`\nconst splitPermissions = ({ permissions, add, ...node }) => {\n  if (permissions === '') {\n    return []\n  }\n\n  return [...permissions].map((permission) => ({ ...node, permission, add }))\n}\n","import { CATEGORIES } from '../../constants.js'\n\n// Join categories, e.g. `u+x,g+x` -> `ug+x`\nexport const joinCategories = (node, index, nodes) => {\n  const sameNodes = nodes.filter((nodeA) => canJoinNodes(node, nodeA))\n\n  // Nothing to join\n  if (sameNodes.length === 1) {\n    return node\n  }\n\n  const categories = sameNodes.map((nodeA) => nodeA.category)\n\n  // This function iterates over all nodes. We only do the join for the first\n  // node, not the following nodes, since they would already be joined.\n  if (categories[0] !== node.category) {\n    return []\n  }\n\n  // `u+x,g+x,o+x` -> `a+x`\n  if (categories.length === CATEGORIES.length) {\n    return { ...node, category: 'a' }\n  }\n\n  return { ...node, category: categories.join('') }\n}\n\nconst canJoinNodes = (nodeA, nodeB) =>\n  nodeA.operator === nodeB.operator && nodeA.permissions === nodeB.permissions\n","import { CATEGORIES, CATEGORY_PERMISSIONS } from '../../constants.js'\n\nimport { joinCategories } from './join.js'\n\n// Serialize from `nodes` to a `symbolic` permission\nexport const serialize = (nodes) => {\n  // Noop symbolic format is `a+`\n  // `+` is possible as well on input, but `a+` is clearer in output.\n  if (nodes.length === 0) {\n    return DEFAULT_SERIALIZE\n  }\n\n  const perm = CATEGORIES.map((category) =>\n    pickCategoryNodes({ category, nodes }),\n  )\n    .flatMap(serializePart)\n    .flatMap(joinCategories)\n    .map(stringifyPart)\n    .join(',')\n  return perm\n}\n\nconst DEFAULT_SERIALIZE = 'a+'\n\n// Iterate over each group of nodes by category\nconst pickCategoryNodes = ({ category, nodes }) => {\n  const nodesA = nodes.filter((node) => node.category === category)\n  return { category, nodes: nodesA }\n}\n\nconst serializePart = ({ category, nodes }) => {\n  // No permissions for this category\n  if (nodes.length === 0) {\n    return []\n  }\n\n  if (shouldUseEqual({ category, nodes })) {\n    return serializeEqualPart({ category, nodes })\n  }\n\n  return serializeAddParts({ category, nodes })\n}\n\n// Should use `=` operator if all permissions for this category are either\n// set or unset.\nconst shouldUseEqual = ({ category, nodes }) =>\n  CATEGORY_PERMISSIONS[category].every((permission) =>\n    containsPermission({ nodes, permission }),\n  )\n\nconst containsPermission = ({ nodes, permission }) =>\n  nodes.some((node) => node.permission === permission)\n\n// Serialize permissions with `=` operator\nconst serializeEqualPart = ({ category, nodes }) => {\n  const permissions = nodes.map(serializeEqualPerm).join('')\n  return [{ category, operator: OPERATORS.EQUAL, permissions }]\n}\n\nconst serializeEqualPerm = ({ add, permission }) => {\n  if (!add) {\n    return ''\n  }\n\n  return permission\n}\n\n// Serialize permissions with `+` or `-` operator\nconst serializeAddParts = ({ category, nodes }) =>\n  Object.keys(OPERATORS)\n    .map((add) => seralizeAddPart({ category, nodes, add }))\n    .filter(Boolean)\n\nconst seralizeAddPart = ({ category, nodes, add }) => {\n  const nodesA = nodes.filter((node) => String(node.add) === add)\n\n  if (nodesA.length === 0) {\n    return ''\n  }\n\n  const permissions = nodesA.map(({ permission }) => permission).join('')\n  return { category, operator: OPERATORS[add], permissions }\n}\n\nconst stringifyPart = ({ category, operator, permissions }) =>\n  `${category}${operator}${permissions}`\n\nconst OPERATORS = {\n  true: '+',\n  false: '-',\n  EQUAL: '=',\n}\n","import { parse } from './parse.js'\nimport { serialize } from './serialize.js'\n\nexport const symbolic = { parse, serialize }\n","import { number } from './number/main.js'\nimport { object } from './object/main.js'\nimport { octal } from './octal/main.js'\nimport { stat } from './stat/main.js'\nimport { symbolic } from './symbolic/main.js'\n\n// Order is significant, because each is tried in order\nexport const TYPES = [number, octal, stat, symbolic, object]\n\n// Object keys are significant\nexport const TYPES_MAP = { number, octal, stat, symbolic, object }\n","import { excludeKeys } from 'filter-obj'\nimport isPlainObj from 'is-plain-obj'\n\nimport { getNodesMap, NODES_MAP } from './nodes.js'\nimport { TYPES } from './types/main.js'\n\n// Parse permission to a `nodesMap`\n// `nodesMap` uses an intermediary/internal format to facilitate conversions\n// between types.\n// Guesses permission type by trying each `type.parse()` in order, and using\n// the first one that does not return `undefined`\nexport const parse = (perm) => {\n  const { type, nodes } = TYPES.reduce(parseReduce.bind(undefined, perm), {})\n\n  validateNodes({ nodes, perm })\n\n  const nodesMap = normalizeNodes({ nodes })\n\n  return { type, nodesMap }\n}\n\nconst parseReduce = (perm, memo, type) => {\n  if (memo.nodes !== undefined) {\n    return memo\n  }\n\n  const nodes = type.parse(perm)\n  return { type, nodes }\n}\n\n// When we tried each type and none matched, we throw an error\nconst validateNodes = ({ nodes, perm }) => {\n  if (nodes !== undefined) {\n    return\n  }\n\n  const permA = isPlainObj(perm) ? JSON.stringify(perm) : perm\n  throw new Error(`Permissions syntax is invalid: ${permA}`)\n}\n\nconst normalizeNodes = ({ nodes }) => {\n  const nodesMap = getNodesMap(nodes)\n  const nodesMapA = excludeKeys(nodesMap, isInvalidNode)\n  return nodesMapA\n}\n\n// Exclude special flags not valid for current category\nconst isInvalidNode = (nodeKey) => NODES_MAP[nodeKey] === undefined\n","import { ORDER } from './constants.js'\n\n// Serialize from a `nodesMap` to a specific type.\n// `nodes` uses an intermediary/internal format to facilitate conversions\n// between types.\n// Whereas parsing is loose, serializing enforce normalized/strict output,\n// and has validated/normalized input (thanks to parsing).\nexport const serialize = (type, nodesMap) => {\n  const nodes = normalizeNodes({ nodesMap })\n  const perm = type.serialize(nodes)\n  return perm\n}\n\n// Ensure nodes have a stable order before serializing.\n// Many types relies on categories and permissions order.\nconst normalizeNodes = ({ nodesMap }) =>\n  ORDER.map((nodeKey) => nodesMap[nodeKey]).filter(Boolean)\n","import { parse } from './parse.js'\nimport { serialize } from './serialize.js'\nimport { TYPES_MAP } from './types/main.js'\n\n// Convert permission to another type\nexport const convert = (typeName, perm) => {\n  const { nodesMap } = parse(perm)\n  const permA = serialize(TYPES_MAP[typeName], nodesMap)\n  return permA\n}\n\n// Transform a mapping function `(nodes) -> nodes` to a mapping function\n// `(perm) -> perm`\nexport const unaryMap = (mapFunc, perm) => {\n  const { type, nodesMap } = parse(perm)\n  const nodesMapA = mapFunc(nodesMap)\n  const permA = serialize(type, nodesMapA)\n  return permA\n}\n\n// Transform a mapping function `(nodesA, nodesB) -> nodesC` to a\n// mapping function `(permA, permB[, ...perms]) -> perm`\nexport const binaryMap = (mapFunc, perm, ...perms) => {\n  const { type, nodesMap } = parse(perm)\n  const nodesMapA = perms.reduce(\n    binaryMapReduce.bind(undefined, mapFunc),\n    nodesMap,\n  )\n  const permA = serialize(type, nodesMapA)\n  return permA\n}\n\nconst binaryMapReduce = (mapFunc, nodesMap, perm) => {\n  const { nodesMap: nodesMapA } = parse(perm)\n  const nodesMapB = mapFunc(nodesMap, nodesMapA)\n  return nodesMapB\n}\n\n// Same but allows 0 or 1 arguments\nexport const variableMap = (mapFunc, perm, ...perms) => {\n  if (perm === undefined) {\n    return\n  }\n\n  return binaryMap(mapFunc, perm, ...perms)\n}\n\n// Transform a test function `(nodesA, nodesB) -> boolean` to a\n// test function `(permA, permB[, ...perms]) -> boolean`\nexport const binaryTest = (testFunc, permA, ...perms) => {\n  const { nodesMap } = parse(permA)\n  return (\n    perms.length !== 0 &&\n    perms.every((permB) => binaryTestEach(testFunc, nodesMap, permB))\n  )\n}\n\nconst binaryTestEach = (testFunc, nodesMap, perm) => {\n  const { nodesMap: nodesMapA } = parse(perm)\n  return testFunc(nodesMap, nodesMapA)\n}\n","import { convert as convertValue } from './helpers.js'\nimport { TYPES_MAP } from './types/main.js'\nimport { mapValues } from './utils.js'\n\n// Retrieve a map of all types' conversion functions\nconst getConverters = () => mapValues(TYPES_MAP, getConverter)\n\nconst getConverter = (type, name) => convertValue.bind(undefined, name)\n\nexport const convert = getConverters()\n","import { binaryTest } from '../helpers.js'\n\n// Test whether all permissions in `nodesMapB` are included in `nodesMapA`\n// Missing permissions in `nodesMapB` are not checked.\n// `+` permissions in `nodesMapB` must be `+` in `nodesMapA`\n// `-` permissions in `nodesMapB` must be `-` in `nodesMapA`\nexport const containTest = (nodesMapA, nodesMapB) =>\n  Object.entries(nodesMapB).every(([nodeKey, node]) =>\n    containNode(node, nodesMapA[nodeKey]),\n  )\n\nconst containNode = (nodeA, nodeB = {}) => nodeA.add === nodeB.add\n\nexport const contain = binaryTest.bind(undefined, containTest)\n","import { binaryTest } from '../helpers.js'\n\nimport { containTest } from './contain.js'\n\n// Test whether two permissions are exactly the same, including omitted nodes.\n// As opposed to using `===`, this works across permissions. It also works\n// with non-canonical variations, e.g. `equal('a+x,a+x', 'a+x')` is `true`\nconst equalTest = (nodesMapA, nodesMapB) =>\n  sameLength(nodesMapA, nodesMapB) && containTest(nodesMapA, nodesMapB)\n\nconst sameLength = (nodesMapA, nodesMapB) =>\n  Object.keys(nodesMapA).length === Object.keys(nodesMapB).length\n\nexport const equal = binaryTest.bind(undefined, equalTest)\n","import { unaryMap } from '../helpers.js'\nimport { mapValues } from '../utils.js'\n\n// Invert a permission's `+` and `-`.\n// Missing permissions are not inverted.\n// Special flags are inverted.\nexport const notMap = (nodesMap) => mapValues(nodesMap, notNode)\n\nconst notNode = ({ add, ...node }) => ({ ...node, add: !add })\n\nexport const not = unaryMap.bind(undefined, notMap)\n","import { excludeKeys } from 'filter-obj'\n\nimport { SPECIAL_PERMISSIONS } from '../constants.js'\nimport { unaryMap } from '../helpers.js'\n\nimport { notMap } from './not.js'\n\n// Invert a permission's `+` and `-`.\n// Missing permissions are not inverted.\n// Special flags are inverted.\nconst invertMap = (nodesMap) => {\n  const nodesMapA = notMap(nodesMap)\n  const nodesMapB = excludeKeys(nodesMapA, isSpecial)\n  return nodesMapB\n}\n\nconst isSpecial = (key, { permission }) => SPECIAL_PERMISSIONS.has(permission)\n\nexport const invert = unaryMap.bind(undefined, invertMap)\n","import { excludeKeys } from 'filter-obj'\n\nimport { variableMap } from '../helpers.js'\nimport { mapValues } from '../utils.js'\n\n// Returns the minimum|maximum permissions among two permissions.\n// This is done permission bit by permission bit.\nconst minMaxMap = (values, nodesMap, nodesMapA) => {\n  const mergedNodes = { ...nodesMap, ...nodesMapA }\n  const nodesMapB = mapValues(mergedNodes, (node, nodeKey) =>\n    findNode({ values, nodesMap, nodesMapA, nodeKey }),\n  )\n  // `undefined` nodes might be present if they got picked because of being\n  // higher|lower than `+` or `-`\n  const nodesMapC = excludeKeys(nodesMapB, isUndefined)\n  return nodesMapC\n}\n\n// Omitted permissions depend on the permission they will be applied to, i.e.\n// can be either `+` or `-`. In that case, they stand between `+` and `-`\n// in comparison order.\n// We iterate over both nodes and the possible values from highest to lowest\n// until finding the right node.\nconst findNode = ({ values, nodesMap, nodesMapA, nodeKey }) => {\n  const [nodeB] = values\n    .flatMap((value) => [\n      [nodesMap[nodeKey], value],\n      [nodesMapA[nodeKey], value],\n    ])\n    .find(hasValue)\n  return nodeB\n}\n\nconst hasValue = ([{ add } = {}, value]) => add === value\n\nconst isUndefined = (key, value) => value === undefined\n\nconst MIN_VALUES = [false, undefined, true]\nconst minMap = minMaxMap.bind(undefined, MIN_VALUES)\nexport const min = variableMap.bind(undefined, minMap)\n\nconst MAX_VALUES = [true, undefined, false]\nconst maxMap = minMaxMap.bind(undefined, MAX_VALUES)\nexport const max = variableMap.bind(undefined, maxMap)\n","import { unaryMap } from '../helpers.js'\n\n// Normalize a permission without modifying its semantics\nconst normalizeMap = (nodesMap) => nodesMap\n\nexport const normalize = unaryMap.bind(undefined, normalizeMap)\n","import { includeKeys } from 'filter-obj'\n\nimport { unaryMap } from '../helpers.js'\n\n// Omit all `-` permissions\n// E.g. `a=x` -> `a+x,a-rwst` -> `a+x`\nconst positiveMap = (nodesMap) => includeKeys(nodesMap, hasAdd)\n\nconst hasAdd = (key, { add }) => add\n\nexport const positive = unaryMap.bind(undefined, positiveMap)\n","import { binaryMap } from '../helpers.js'\n\n// Set permissions from `nodesMapA` to `nodesMap`\n// Missing permissions of `nodesMapA` are ignored\n// `+` or `-` permissions of `nodesMapA` are set as `+` or `-` to `nodesMap`\nconst setMap = (nodesMap, nodesMapA) => ({ ...nodesMap, ...nodesMapA })\n\nexport const set = binaryMap.bind(undefined, setMap)\n","import { TYPES_MAP } from './types/main.js'\n\n// Retrieve the type of a permission, or returns `invalid`\nexport const type = (perm) => {\n  const typeA = Object.entries(TYPES_MAP).find(\n    ([, { parse }]) => parse(perm) !== undefined,\n  )\n  return typeA === undefined ? INVALID_TYPE : typeA[0]\n}\n\nconst INVALID_TYPE = 'invalid'\n"],"names":["parse","serialize","hasAdd","serializeNode","isPlainObj","validateNodes","isInvalidNode","tokenize","parseNumber","serializeNumber","hasDuplicates","normalizeNodes","convert","convertValue"],"mappings":"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"}