Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove fetch type checking #1492

Merged
merged 1 commit into from
Sep 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 1 addition & 24 deletions webapp/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ import {
FetchPlaybookRunsParams,
FetchPlaybookRunsReturn,
PlaybookRun,
isPlaybookRun,
isMetadata,
Metadata,
RunMetricData,
StatusPostComplete,
Expand Down Expand Up @@ -83,13 +81,6 @@ export async function fetchPlaybookRuns(params: FetchPlaybookRunsParams) {

export async function fetchPlaybookRun(id: string) {
const data = await doGet(`${apiUrl}/runs/${id}`);
// eslint-disable-next-line no-process-env
if (process.env.NODE_ENV !== 'production') {
if (!isPlaybookRun(data)) {
// eslint-disable-next-line no-console
console.error('expected a PlaybookRun in fetchPlaybookRun, received:', data);
}
}

return data as PlaybookRun;
}
Expand Down Expand Up @@ -149,26 +140,12 @@ export async function postStatusUpdate(

export async function fetchPlaybookRunMetadata(id: string) {
const data = await doGet<Metadata>(`${apiUrl}/runs/${id}/metadata`);
// eslint-disable-next-line no-process-env
if (process.env.NODE_ENV !== 'production') {
if (!isMetadata(data)) {
// eslint-disable-next-line no-console
console.error('expected a Metadata in fetchPlaybookRunMetadata, received:', data);
}
}

return data;
}

export async function fetchPlaybookRunByChannel(channelId: string) {
const data = await doGet(`${apiUrl}/runs/channel/${channelId}`);
// eslint-disable-next-line no-process-env
if (process.env.NODE_ENV !== 'production') {
if (!isPlaybookRun(data)) {
// eslint-disable-next-line no-console
console.error('expected a PlaybookRun in fetchPlaybookRun, received:', data);
}
}

return data as PlaybookRun;
}
Expand Down Expand Up @@ -920,4 +897,4 @@ export async function getTeamTopPlaybooks(timeRange: string, page: number, perPa
return null;
}
return data as InsightsResponse;
}
}
19 changes: 0 additions & 19 deletions webapp/src/types/playbook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,25 +233,6 @@ export const ChecklistItemsFilterDefault: ChecklistItemsFilter = {
overdueOnly: false,
};

// eslint-disable-next-line
export function isChecklist(arg: any): arg is Checklist {
return arg &&
typeof arg.title === 'string' &&
arg.items && Array.isArray(arg.items) && arg.items.every(isChecklistItem);
}

// eslint-disable-next-line
export function isChecklistItem(arg: any): arg is ChecklistItem {
return arg &&
typeof arg.title === 'string' &&
typeof arg.state_modified === 'number' &&
typeof arg.assignee_id === 'string' &&
typeof arg.assignee_modified === 'number' &&
typeof arg.state === 'string' &&
typeof arg.command === 'string' &&
typeof arg.command_last_run === 'number';
}

export const newMetric = (type: MetricType, title = '', description = '', target = null): Metric => ({
id: '',
type,
Expand Down
63 changes: 2 additions & 61 deletions webapp/src/types/playbook_run.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import {TimelineEvent, TimelineEventType} from 'src/types/rhs';
import {Checklist, isChecklist} from 'src/types/playbook';
import {TimelineEvent} from 'src/types/rhs';
import {Checklist} from 'src/types/playbook';

export interface PlaybookRun {
id: string;
Expand Down Expand Up @@ -84,65 +84,6 @@ export interface RunMetricData {
value: number | null;
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function isPlaybookRun(arg: any): arg is PlaybookRun {
return Boolean(arg &&
arg.id && typeof arg.id === 'string' &&
arg.name && typeof arg.name === 'string' &&
typeof arg.description === 'string' &&
arg.owner_user_id && typeof arg.owner_user_id === 'string' &&
arg.reporter_user_id && typeof arg.reporter_user_id === 'string' &&
arg.team_id && typeof arg.team_id === 'string' &&
arg.channel_id && typeof arg.channel_id === 'string' &&
typeof arg.create_at === 'number' &&
typeof arg.end_at === 'number' &&
typeof arg.post_id === 'string' &&
arg.playbook_id && typeof arg.playbook_id === 'string' &&
arg.checklists && Array.isArray(arg.checklists) && arg.checklists.every(isChecklist) &&
arg.status_posts && Array.isArray(arg.status_posts) && arg.status_posts.every(isStatusPost) &&
typeof arg.reminder_post_id === 'string' &&
typeof arg.reminder_message_template === 'string' &&
typeof arg.reminder_timer_default_seconds === 'number' &&
arg.broadcast_channel_ids && Array.isArray(arg.broadcast_channel_ids) && arg.broadcast_channel_ids.every(isString) &&
arg.timeline_events && Array.isArray(arg.timeline_events) && arg.timeline_events.every(isTimelineEvent) &&
arg.participant_ids && Array.isArray(arg.participant_ids) && arg.participant_ids.every(isString)) &&
typeof arg.last_status_update_at === 'number' &&
typeof arg.previous_reminder === 'number';
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function isStatusPost(arg: any): arg is StatusPost {
return Boolean(arg &&
arg.id && typeof arg.id === 'string' &&
typeof arg.create_at === 'number' &&
typeof arg.delete_at === 'number');
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function isMetadata(arg: any): arg is Metadata {
return Boolean(arg &&
arg.channel_name && typeof arg.channel_name === 'string' &&
arg.channel_display_name && typeof arg.channel_display_name === 'string' &&
arg.team_name && typeof arg.team_name === 'string' &&
typeof arg.num_participants === 'number' &&
typeof arg.total_posts === 'number' &&
arg.followers && Array.isArray(arg.followers) && arg.followers.every(isString));
}

export function isTimelineEvent(arg: any): arg is TimelineEvent {
return Boolean(arg &&
typeof arg.id === 'string' &&
typeof arg.playbook_run_id === 'string' &&
typeof arg.create_at === 'number' &&
typeof arg.delete_at === 'number' &&
typeof arg.event_at === 'number' &&
typeof arg.event_type === 'string' && Object.values(TimelineEventType).includes(arg.event_type) &&
typeof arg.summary === 'string' &&
typeof arg.details === 'string' &&
typeof arg.subject_user_id === 'string' &&
typeof arg.creator_user_id === 'string');
}

function isString(arg: any): arg is string {
return Boolean(typeof arg === 'string');
}
Expand Down
18 changes: 1 addition & 17 deletions webapp/src/websocket_events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {WebSocketMessage} from 'mattermost-redux/types/websocket';
import {getCurrentTeam, getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';
import {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';

import {PlaybookRun, isPlaybookRun, StatusPost} from 'src/types/playbook_run';
import {PlaybookRun, StatusPost} from 'src/types/playbook_run';
import {ChannelActionType, ChannelTriggerType} from 'src/types/channel_actions';

import {navigateToUrl} from 'src/browser_routing';
Expand Down Expand Up @@ -58,14 +58,6 @@ export function handleWebsocketPlaybookRunUpdated(getState: GetStateFunc, dispat
return;
}
const data = JSON.parse(msg.data.payload);

// eslint-disable-next-line no-process-env
if (process.env.NODE_ENV !== 'production') {
if (!isPlaybookRun(data)) {
// eslint-disable-next-line no-console
console.error('received a websocket data payload that was not a playbook run in handleWebsocketPlaybookRunUpdate:', data);
}
}
const playbookRun = data as PlaybookRun;

dispatch(playbookRunUpdated(playbookRun));
Expand All @@ -81,14 +73,6 @@ export function handleWebsocketPlaybookRunCreated(getState: GetStateFunc, dispat
}
const payload = JSON.parse(msg.data.payload);
const data = payload.playbook_run;

// eslint-disable-next-line no-process-env
if (process.env.NODE_ENV !== 'production') {
if (!isPlaybookRun(data)) {
// eslint-disable-next-line no-console
console.error('received a websocket data payload that was not a playbook run in handleWebsocketPlaybookRunCreate:', data);
}
}
const playbookRun = data as PlaybookRun;

dispatch(playbookRunCreated(playbookRun));
Expand Down