32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import type { WorkerErrorData, WorkerMessageEnvelope } from './types'
|
|
|
|
function isRecordInternal(value: unknown): value is Record<string, unknown> {
|
|
return typeof value === 'object' && value !== null
|
|
}
|
|
|
|
export function isWorkerMessageEnvelope(value: unknown): value is WorkerMessageEnvelope {
|
|
return isRecordInternal(value) && typeof value.type === 'string'
|
|
}
|
|
|
|
function readString(value: unknown): string | undefined {
|
|
return typeof value === 'string' ? value : undefined
|
|
}
|
|
|
|
export function readWorkerErrorData(value: unknown): WorkerErrorData {
|
|
if (!isRecordInternal(value)) {
|
|
return { originalType: undefined, taskId: undefined, error: undefined }
|
|
}
|
|
return { originalType: readString(value.originalType), taskId: readString(value.taskId), error: readString(value.error) }
|
|
}
|
|
|
|
export function isWorkerErrorForOperation(errorData: WorkerErrorData, operation: string): boolean {
|
|
if (errorData.originalType === operation) {
|
|
return true
|
|
}
|
|
return errorData.taskId?.startsWith(operation) === true
|
|
}
|
|
|
|
export function isRecord(value: unknown): value is Record<string, unknown> {
|
|
return isRecordInternal(value)
|
|
}
|