forked from jsnbuchanan/crowd-funder-for-time-pwa
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.
This commit is contained in:
128
src/interfaces/worker-messages.ts
Normal file
128
src/interfaces/worker-messages.ts
Normal file
@@ -0,0 +1,128 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user