Files
crowd-funder-from-jason/src/interfaces/worker-messages.ts
Matthew Raymer 7b1f891c63 Fix worker-only database architecture and Vue Proxy serialization
- Implement worker-only database access to eliminate double migrations
- Add parameter serialization in usePlatformService to prevent Capacitor "object could not be cloned" errors
- Fix infinite logging loop with circuit breaker in databaseUtil
- Use dynamic imports in WebPlatformService to prevent worker thread errors
- Add higher-level database methods (getContacts, getSettings) to composable
- Eliminate Vue Proxy objects through JSON serialization and Object.freeze protection

Resolves Proxy(Array) serialization failures and worker context conflicts across Web/Capacitor/Electron platforms.
2025-07-02 07:24:51 +00:00

129 lines
2.3 KiB
TypeScript

/**
* Worker Message Interface for Database Operations
*
* Defines the communication protocol between the main thread and the
* SQL worker thread for TimeSafari web platform.
*
* @author Matthew Raymer
* @version 1.0.0
* @since 2025-07-02
*/
import type { QueryExecResult } from "./database";
/**
* Base interface for all worker messages
*/
interface BaseWorkerMessage {
id: string;
type: string;
}
/**
* Database query request message
*/
export interface QueryRequest extends BaseWorkerMessage {
type: "query";
sql: string;
params?: unknown[];
}
/**
* Database execution request message (INSERT, UPDATE, DELETE, etc.)
*/
export interface ExecRequest extends BaseWorkerMessage {
type: "exec";
sql: string;
params?: unknown[];
}
/**
* Database get one row request message
*/
export interface GetOneRowRequest extends BaseWorkerMessage {
type: "getOneRow";
sql: string;
params?: unknown[];
}
/**
* Database initialization request message
*/
export interface InitRequest extends BaseWorkerMessage {
type: "init";
}
/**
* Health check request message
*/
export interface PingRequest extends BaseWorkerMessage {
type: "ping";
}
/**
* Union type of all possible request messages
*/
export type WorkerRequest =
| QueryRequest
| ExecRequest
| GetOneRowRequest
| InitRequest
| PingRequest;
/**
* Success response from worker
*/
export interface SuccessResponse extends BaseWorkerMessage {
type: "success";
data: unknown;
}
/**
* Error response from worker
*/
export interface ErrorResponse extends BaseWorkerMessage {
type: "error";
error: {
message: string;
stack?: string;
};
}
/**
* Initialization complete response
*/
export interface InitCompleteResponse extends BaseWorkerMessage {
type: "init-complete";
}
/**
* Ping response
*/
export interface PongResponse extends BaseWorkerMessage {
type: "pong";
}
/**
* Union type of all possible response messages
*/
export type WorkerResponse =
| SuccessResponse
| ErrorResponse
| InitCompleteResponse
| PongResponse;
/**
* Query result type specifically for database queries
*/
export interface QueryResult {
result: QueryExecResult[];
}
/**
* Execution result type for database modifications
*/
export interface ExecResult {
changes: number;
lastId?: number;
}