| /** |
| * @license |
| * Copyright 2017 Google LLC |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| import {GitRef, LabelName} from '../types/common'; |
| |
| export enum AccessPermissionId { |
| ABANDON = 'abandon', |
| ADD_PATCH_SET = 'addPatchSet', |
| CREATE = 'create', |
| CREATE_TAG = 'createTag', |
| CREATE_SIGNED_TAG = 'createSignedTag', |
| DELETE = 'delete', |
| DELETE_CHANGES = 'deleteChanges', |
| DELETE_OWN_CHANGES = 'deleteOwnChanges', |
| EDIT_HASHTAGS = 'editHashtags', |
| EDIT_TOPIC_NAME = 'editTopicName', |
| FORGE_AUTHOR = 'forgeAuthor', |
| FORGE_COMMITTER = 'forgeCommitter', |
| FORGE_SERVER_AS_COMMITTER = 'forgeServerAsCommitter', |
| OWNER = 'owner', |
| PUSH = 'push', |
| PUSH_MERGE = 'pushMerge', |
| READ = 'read', |
| REBASE = 'rebase', |
| REVERT = 'revert', |
| REMOVE_REVIEWER = 'removeReviewer', |
| SUBMIT = 'submit', |
| SUBMIT_AS = 'submitAs', |
| TOGGLE_WIP_STATE = 'toggleWipState', |
| VIEW_PRIVATE_CHANGES = 'viewPrivateChanges', |
| |
| PRIORITY = 'priority', |
| } |
| |
| export const AccessPermissions: {[id: string]: AccessPermission} = { |
| [AccessPermissionId.ABANDON]: { |
| id: AccessPermissionId.ABANDON, |
| name: 'Abandon', |
| }, |
| [AccessPermissionId.ADD_PATCH_SET]: { |
| id: AccessPermissionId.ADD_PATCH_SET, |
| name: 'Add Patch Set', |
| }, |
| [AccessPermissionId.CREATE]: { |
| id: AccessPermissionId.CREATE, |
| name: 'Create Reference', |
| }, |
| [AccessPermissionId.CREATE_TAG]: { |
| id: AccessPermissionId.CREATE_TAG, |
| name: 'Create Annotated Tag', |
| }, |
| [AccessPermissionId.CREATE_SIGNED_TAG]: { |
| id: AccessPermissionId.CREATE_SIGNED_TAG, |
| name: 'Create Signed Tag', |
| }, |
| [AccessPermissionId.DELETE]: { |
| id: AccessPermissionId.DELETE, |
| name: 'Delete Reference', |
| }, |
| [AccessPermissionId.DELETE_CHANGES]: { |
| id: AccessPermissionId.DELETE_CHANGES, |
| name: 'Delete Changes', |
| }, |
| [AccessPermissionId.DELETE_OWN_CHANGES]: { |
| id: AccessPermissionId.DELETE_OWN_CHANGES, |
| name: 'Delete Own Changes', |
| }, |
| [AccessPermissionId.EDIT_HASHTAGS]: { |
| id: AccessPermissionId.EDIT_HASHTAGS, |
| name: 'Edit Hashtags', |
| }, |
| [AccessPermissionId.EDIT_TOPIC_NAME]: { |
| id: AccessPermissionId.EDIT_TOPIC_NAME, |
| name: 'Edit Topic Name', |
| }, |
| [AccessPermissionId.FORGE_AUTHOR]: { |
| id: AccessPermissionId.FORGE_AUTHOR, |
| name: 'Forge Author Identity', |
| }, |
| [AccessPermissionId.FORGE_COMMITTER]: { |
| id: AccessPermissionId.FORGE_COMMITTER, |
| name: 'Forge Committer Identity', |
| }, |
| [AccessPermissionId.FORGE_SERVER_AS_COMMITTER]: { |
| id: AccessPermissionId.FORGE_SERVER_AS_COMMITTER, |
| name: 'Forge Server Identity', |
| }, |
| [AccessPermissionId.OWNER]: { |
| id: AccessPermissionId.OWNER, |
| name: 'Owner', |
| }, |
| [AccessPermissionId.PUSH]: { |
| id: AccessPermissionId.PUSH, |
| name: 'Push', |
| }, |
| [AccessPermissionId.PUSH_MERGE]: { |
| id: AccessPermissionId.PUSH_MERGE, |
| name: 'Push Merge Commit', |
| }, |
| [AccessPermissionId.READ]: { |
| id: AccessPermissionId.READ, |
| name: 'Read', |
| }, |
| [AccessPermissionId.REBASE]: { |
| id: AccessPermissionId.REBASE, |
| name: 'Rebase', |
| }, |
| [AccessPermissionId.REVERT]: { |
| id: AccessPermissionId.REVERT, |
| name: 'Revert', |
| }, |
| [AccessPermissionId.REMOVE_REVIEWER]: { |
| id: AccessPermissionId.REMOVE_REVIEWER, |
| name: 'Remove Reviewer', |
| }, |
| [AccessPermissionId.SUBMIT]: { |
| id: AccessPermissionId.SUBMIT, |
| name: 'Submit', |
| }, |
| [AccessPermissionId.SUBMIT_AS]: { |
| id: AccessPermissionId.SUBMIT_AS, |
| name: 'Submit (On Behalf Of)', |
| }, |
| [AccessPermissionId.TOGGLE_WIP_STATE]: { |
| id: AccessPermissionId.TOGGLE_WIP_STATE, |
| name: 'Toggle Work In Progress State', |
| }, |
| [AccessPermissionId.VIEW_PRIVATE_CHANGES]: { |
| id: AccessPermissionId.VIEW_PRIVATE_CHANGES, |
| name: 'View Private Changes', |
| }, |
| }; |
| |
| export interface AccessPermission { |
| id: AccessPermissionId; |
| name: string; |
| label?: LabelName; |
| } |
| |
| export interface PermissionArrayItem<T> { |
| id: GitRef; |
| value: T; |
| } |
| |
| export type PermissionArray<T> = Array<PermissionArrayItem<T>>; |
| |
| /** |
| * @return a sorted array sorted by the id of the original |
| * object. |
| */ |
| export function toSortedPermissionsArray<T>(obj?: { |
| [permissionId: string]: T; |
| }): PermissionArray<T> { |
| if (!obj) { |
| return []; |
| } |
| return Object.keys(obj) |
| .map(key => { |
| return { |
| id: key as GitRef, |
| value: obj[key], |
| }; |
| }) |
| .sort((a, b) => |
| // Since IDs are strings, use localeCompare. |
| a.id.localeCompare(b.id) |
| ); |
| } |