pakmanaged.js
function identifier(fnparam, prop) {
        var i = optionalidentifier(fnparam, prop, false);
        if (i) {
          return i;
        }
    
        // parameter destructuring with rest operator
        if (state.tokens.next.value === "...") {
          if (!state.option.esnext) {
            warning("W119", state.tokens.next, "spread/rest operator");
          }
          advance();
    
          if (checkPunctuators(state.tokens.next, ["..."])) {
            warning("E024", state.tokens.next, "...");
            while (checkPunctuators(state.tokens.next, ["..."])) {
              advance();
            }
          }
    
          if (!state.tokens.next.identifier) {
            warning("E024", state.tokens.curr, "...");
            return;
          }
    
          return identifier(fnparam, prop);
        } else {
          error("E030", state.tokens.next, state.tokens.next.value);
    
          // The token should be consumed after a warning is issued so the parser
          // can continue as though an identifier were found. The semicolon token
          // should not be consumed in this way so that the parser interprets it as
          // a statement delimeter;
          if (state.tokens.next.id !== ";") {
            advance();
          }
        }
      }
function identifier(fnparam, prop) {
        var i = optionalidentifier(fnparam, prop, false);
        if (i) {
          return i;
        }
    
        // parameter destructuring with rest operator
        if (state.tokens.next.value === "...") {
          if (!state.option.esnext) {
            warning("W119", state.tokens.next, "spread/rest operator");
          }
          advance();
    
          if (checkPunctuators(state.tokens.next, ["..."])) {
            warning("E024", state.tokens.next, "...");
            while (checkPunctuators(state.tokens.next, ["..."])) {
              advance();
            }
          }
    
          if (!state.tokens.next.identifier) {
            warning("E024", state.tokens.curr, "...");
            return;
          }
    
          return identifier(fnparam, prop);
        } else {
          error("E030", state.tokens.next, state.tokens.next.value);
    
          // The token should be consumed after a warning is issued so the parser
          // can continue as though an identifier were found. The semicolon token
          // should not be consumed in this way so that the parser interprets it as
          // a statement delimeter;
          if (state.tokens.next.id !== ";") {
            advance();
          }
        }
      }
fnparam means that this identifier is being defined as a function argument prop means that this identifier is that of an object property