42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import type { WorkerLaunchOptionsResponse } from './types';
|
|
|
|
export type WorkerLaunchFormState = {
|
|
runtime_id: string;
|
|
display_name: string;
|
|
profile: string;
|
|
initial_text: string;
|
|
};
|
|
|
|
export type BrowserCreateWorkerRequest = WorkerLaunchFormState;
|
|
|
|
export function defaultWorkerLaunchForm(
|
|
options: WorkerLaunchOptionsResponse | null,
|
|
current: WorkerLaunchFormState,
|
|
): WorkerLaunchFormState {
|
|
const preferredRuntime = options?.runtimes.find((runtime) => runtime.can_spawn_worker && runtime.status === 'active')
|
|
?? options?.runtimes.find((runtime) => runtime.can_spawn_worker)
|
|
?? options?.runtimes[0];
|
|
const preferredProfile = options?.profiles.find((candidate) => candidate.id === 'builtin:coder')
|
|
?? options?.profiles[0];
|
|
|
|
return {
|
|
runtime_id: current.runtime_id || preferredRuntime?.runtime_id || '',
|
|
display_name: current.display_name || 'Coding Worker',
|
|
profile: options?.profiles.some((candidate) => candidate.id === current.profile)
|
|
? current.profile
|
|
: preferredProfile?.id || '',
|
|
initial_text: current.initial_text,
|
|
};
|
|
}
|
|
|
|
export function buildBrowserCreateWorkerRequest(
|
|
form: WorkerLaunchFormState,
|
|
): BrowserCreateWorkerRequest {
|
|
return {
|
|
runtime_id: form.runtime_id,
|
|
display_name: form.display_name,
|
|
profile: form.profile,
|
|
initial_text: form.initial_text,
|
|
};
|
|
}
|