← Files Biological Sequence & Alignment ViewerARCHIVED FILE

src/msa/msa-analysis-worker.ts

1.47 KB · Sep 30, 2026 · 23:01 UTC

↓ Download file

import { computeMsaDerivedAnalysis } from "./analysis";
import { parseMsa } from "./parser";
import type { MsaWorkerRequest, MsaWorkerResponse } from "./worker-protocol";

const workerScope = self as unknown as {
  addEventListener: (
    type: "message",
    listener: (event: MessageEvent<MsaWorkerRequest>) => void,
  ) => void;
  postMessage: (response: MsaWorkerResponse) => void;
};

workerScope.addEventListener(
  "message",
  (event: MessageEvent<MsaWorkerRequest>) => {
    const request = event.data;
    try {
      if (request.type === "parse") {
        post({
          phase: "parsing",
          requestId: request.requestId,
          type: "phase",
        });
        post({
          phase: "parsed",
          requestId: request.requestId,
          result: parseMsa(request.contents, request.filePath),
          type: "parse-result",
        });
        return;
      }
      post({
        phase: "analyzing",
        requestId: request.requestId,
        type: "phase",
      });
      post({
        analysis: computeMsaDerivedAnalysis(request.payload),
        phase: "ready",
        requestId: request.requestId,
        type: "analysis-result",
      });
    } catch (error) {
      post({
        message: error instanceof Error ? error.message : String(error),
        phase: "error",
        requestId: request.requestId,
        type: "error",
      });
    }
  },
);

function post(response: MsaWorkerResponse): void {
  workerScope.postMessage(response);
}

export {};

SHA-256: b49ff95a0530554baea8c17035e18ae6303f1c0af2e03de1ee73ae7f971bc640