Add Prettier and ESLint tooling (Refs #77)
This commit is contained in:
@@ -2,42 +2,104 @@ import type { ProvisioningAction } from './provisioning.js';
|
||||
import type { ProvisioningDeployment } from './provisioning-detail.js';
|
||||
import type { ProvisioningSource } from './provisioning-detail.js';
|
||||
|
||||
export const provisioningListStatuses = ['pending', 'running', 'awaiting-health', 'done', 'attention', 'failed', 'interrupted', 'warning', 'cancelled'] as const;
|
||||
export const provisioningListSources = ['manual', 'campaign', 'beta', 'maintenance', 'recovery', 'autoscaling', 'rebalance', 'system'] as const;
|
||||
export type ProvisioningListSource = typeof provisioningListSources[number];
|
||||
export const provisioningListStatuses = [
|
||||
'pending',
|
||||
'running',
|
||||
'awaiting-health',
|
||||
'done',
|
||||
'attention',
|
||||
'failed',
|
||||
'interrupted',
|
||||
'warning',
|
||||
'cancelled'
|
||||
] as const;
|
||||
export const provisioningListSources = [
|
||||
'manual',
|
||||
'campaign',
|
||||
'beta',
|
||||
'maintenance',
|
||||
'recovery',
|
||||
'autoscaling',
|
||||
'rebalance',
|
||||
'system'
|
||||
] as const;
|
||||
export type ProvisioningListSource = (typeof provisioningListSources)[number];
|
||||
export const provisioningSourceLabels: Record<ProvisioningListSource, string> = {
|
||||
manual: 'Manual', campaign: 'Campaign', beta: 'Beta', maintenance: 'Maintenance',
|
||||
recovery: 'Recovery', autoscaling: 'Autoscaling', rebalance: 'Rebalance', system: 'System'
|
||||
manual: 'Manual',
|
||||
campaign: 'Campaign',
|
||||
beta: 'Beta',
|
||||
maintenance: 'Maintenance',
|
||||
recovery: 'Recovery',
|
||||
autoscaling: 'Autoscaling',
|
||||
rebalance: 'Rebalance',
|
||||
system: 'System'
|
||||
};
|
||||
export const provisioningSourceKinds = {
|
||||
campaign: ['campaign'], beta: ['beta'], maintenance: ['maintenance'],
|
||||
recovery: ['watchdog'], autoscaling: ['autoscaling'], rebalance: ['rebalance']
|
||||
} as const satisfies Record<Exclude<ProvisioningListSource, 'manual' | 'system'>, readonly ProvisioningSource['kind'][]>;
|
||||
campaign: ['campaign'],
|
||||
beta: ['beta'],
|
||||
maintenance: ['maintenance'],
|
||||
recovery: ['watchdog'],
|
||||
autoscaling: ['autoscaling'],
|
||||
rebalance: ['rebalance']
|
||||
} as const satisfies Record<
|
||||
Exclude<ProvisioningListSource, 'manual' | 'system'>,
|
||||
readonly ProvisioningSource['kind'][]
|
||||
>;
|
||||
|
||||
/** Record titles and incident summaries belong in expanded details, not the source column. */
|
||||
export function provisioningSourceLabel(row: Pick<ProvisioningListRow, 'sources' | 'triggered_by'>): string {
|
||||
export function provisioningSourceLabel(
|
||||
row: Pick<ProvisioningListRow, 'sources' | 'triggered_by'>
|
||||
): string {
|
||||
const kind = row.sources?.[0]?.kind;
|
||||
return provisioningSourceLabels[kind === 'watchdog' ? 'recovery' : kind ?? (row.triggered_by === 'ui' ? 'manual' : 'system')];
|
||||
return provisioningSourceLabels[
|
||||
kind === 'watchdog'
|
||||
? 'recovery'
|
||||
: (kind ?? (row.triggered_by === 'ui' ? 'manual' : 'system'))
|
||||
];
|
||||
}
|
||||
|
||||
export function provisioningMatchesSource(row: Pick<ProvisioningListRow, 'sources' | 'triggered_by'>, source: ProvisioningListSource): boolean {
|
||||
export function provisioningMatchesSource(
|
||||
row: Pick<ProvisioningListRow, 'sources' | 'triggered_by'>,
|
||||
source: ProvisioningListSource
|
||||
): boolean {
|
||||
const sources = row.sources ?? [];
|
||||
if (source === 'manual' || source === 'system') return !sources.length && (source === 'manual' ? row.triggered_by === 'ui' : row.triggered_by !== 'ui');
|
||||
if (source === 'manual' || source === 'system')
|
||||
return (
|
||||
!sources.length &&
|
||||
(source === 'manual' ? row.triggered_by === 'ui' : row.triggered_by !== 'ui')
|
||||
);
|
||||
const kinds: readonly ProvisioningSource['kind'][] = provisioningSourceKinds[source];
|
||||
return sources.some(item => kinds.includes(item.kind));
|
||||
return sources.some((item) => kinds.includes(item.kind));
|
||||
}
|
||||
|
||||
export type ProvisioningListRow = Pick<ProvisioningDeployment,
|
||||
'id' | 'server' | 'server_deleted_at' | 'action' | 'state' | 'stage' | 'started_at' |
|
||||
'finished_at' | 'triggered_by' | 'requested_by' | 'error' | 'warnings' | 'server_exists'> & {
|
||||
canCancelRemoval: number; canCancel?: number; sources?: ProvisioningSource[];
|
||||
phase?: string | null; phaseStartedAt?: string | null; waitCode?: string | null;
|
||||
};
|
||||
export type ProvisioningListRow = Pick<
|
||||
ProvisioningDeployment,
|
||||
| 'id'
|
||||
| 'server'
|
||||
| 'server_deleted_at'
|
||||
| 'action'
|
||||
| 'state'
|
||||
| 'stage'
|
||||
| 'started_at'
|
||||
| 'finished_at'
|
||||
| 'triggered_by'
|
||||
| 'requested_by'
|
||||
| 'error'
|
||||
| 'warnings'
|
||||
| 'server_exists'
|
||||
> & {
|
||||
canCancelRemoval: number;
|
||||
canCancel?: number;
|
||||
sources?: ProvisioningSource[];
|
||||
phase?: string | null;
|
||||
phaseStartedAt?: string | null;
|
||||
waitCode?: string | null;
|
||||
};
|
||||
|
||||
export interface ProvisioningListOptions {
|
||||
view?: 'active' | 'history' | 'all';
|
||||
action?: ProvisioningAction;
|
||||
status?: typeof provisioningListStatuses[number];
|
||||
status?: (typeof provisioningListStatuses)[number];
|
||||
source?: ProvisioningListSource;
|
||||
server?: string;
|
||||
limit?: number;
|
||||
|
||||
Reference in New Issue
Block a user