Add Prettier and ESLint tooling (Refs #77)

This commit is contained in:
2026-10-09 15:56:13 -04:00
parent 8ed059b8d3
commit 16469e2d43
711 changed files with 99737 additions and 28286 deletions
+82 -20
View File
@@ -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;