message: refactor: Simplify MethodPermissionsExtractor
diff: @@ -3,30 +3,24 @@ import { Operation } from '../operations/Operation';
  import { PermissionSet } from './PermissionSet';
  import { PermissionsExtractor } from './PermissionsExtractor';
  +const READ_METHODS = new Set([ 'GET', 'HEAD' ]);
  +const WRITE_METHODS = new Set([ 'POST', 'PUT', 'DELETE' ]);
  +const SUPPORTED_METHODS = new Set([ ...READ_METHODS, ...WRITE_METHODS ]);
  +
  /**
  * Generates permissions for the base set of methods that always require the same permissions.
  * Specifically: GET, HEAD, POST, PUT and DELETE.
  */
  export class MethodPermissionsExtractor extends PermissionsExtractor {
  - public async canHandle(input: Operation): Promise<void> {
  - if (!/^(?:HEAD|GET|POST|PUT|DELETE)$/u.test(input.method)) {
  - throw new UnsupportedHttpError(`Unsupported method: ${input.method}`);
  + public async canHandle({ method }: Operation): Promise<void> {
  + if (!SUPPORTED_METHODS.has(method)) {
  + throw new UnsupportedHttpError(`Cannot determine permissions of ${method}`);
  }
  }
  - public async handle(input: Operation): Promise<PermissionSet> {
  - const requiredPermissions = {
  - read: /^(?:HEAD|GET)$/u.test(input.method),
  - append: false,
  - write: /^(?:POST|PUT|DELETE)$/u.test(input.method),
  - };
  -
  - const read = /^(?:HEAD|GET)$/u.test(input.method);
  - const write = /^(?:POST|PUT|DELETE)$/u.test(input.method);
  -
  - // Since `append` is a specific type of write, it is true if `write` is true.
  - const append = requiredPermissions.write;
  -
  - return { read, append, write };
  + public async handle({ method }: Operation): Promise<PermissionSet> {
  + const read = READ_METHODS.has(method);
  + const write = WRITE_METHODS.has(method);
  + return { read, write, append: write };
  }
  }
  