mirror of
https://github.com/morluto/rea.git
synced 2026-10-30 19:35:56 +00:00
180 lines
5.8 KiB
TypeScript
180 lines
5.8 KiB
TypeScript
import type {
|
|
JavaScriptSourceRange,
|
|
JavaScriptStaticPathContext,
|
|
} from "./javascriptStaticAnalysisTypes.js";
|
|
|
|
/** One inert literal or unresolved expression observed in Electron syntax. */
|
|
export type ElectronStaticValue =
|
|
| {
|
|
readonly status: "literal";
|
|
readonly value: string | number | boolean | null;
|
|
readonly expression: null;
|
|
}
|
|
| {
|
|
readonly status: "dynamic";
|
|
readonly value: null;
|
|
readonly expression: string;
|
|
};
|
|
|
|
/** One explicitly present BrowserWindow webPreference. */
|
|
export interface ElectronWebPreference {
|
|
readonly name: string;
|
|
readonly value: ElectronStaticValue;
|
|
}
|
|
|
|
/** A statically resolved BrowserWindow preload declaration, or its absence. */
|
|
export type ElectronBrowserWindowPreload =
|
|
| {
|
|
readonly preload_path: string;
|
|
readonly preload_resolution_context: JavaScriptStaticPathContext;
|
|
}
|
|
| {
|
|
readonly preload_path: null;
|
|
readonly preload_resolution_context: null;
|
|
};
|
|
|
|
/** Statically visible BrowserWindow construction and preference surface. */
|
|
export type ElectronBrowserWindowFinding = ElectronBrowserWindowPreload & {
|
|
readonly options_status: "object-literal" | "dynamic" | "missing";
|
|
readonly web_preferences_status: "object-literal" | "dynamic" | "missing";
|
|
readonly web_preferences: readonly ElectronWebPreference[];
|
|
readonly module_key: string | null;
|
|
readonly location: JavaScriptSourceRange;
|
|
};
|
|
|
|
/** Literal, dynamic, or unsupported contextBridge API key syntax. */
|
|
export type ElectronContextBridgeApiKey =
|
|
| { readonly api_key: string; readonly api_key_expression: null }
|
|
| { readonly api_key: null; readonly api_key_expression: string }
|
|
| { readonly api_key: null; readonly api_key_expression: null };
|
|
|
|
/** One contextBridge API declaration without executing its API object. */
|
|
export type ElectronContextBridgeFinding = ElectronContextBridgeApiKey & {
|
|
readonly world: "main" | "isolated";
|
|
readonly world_id: ElectronStaticValue | null;
|
|
readonly api_status: "object-literal" | "dynamic" | "missing";
|
|
readonly members: readonly string[];
|
|
readonly unknown_members: number;
|
|
readonly module_key: string | null;
|
|
readonly location: JavaScriptSourceRange;
|
|
};
|
|
|
|
/** Electron IPC operation identity and its semantic communication mode. */
|
|
export type ElectronIpcDescriptor =
|
|
| {
|
|
readonly side: "renderer";
|
|
readonly operation:
|
|
| "send"
|
|
| "send-sync"
|
|
| "post-message"
|
|
| "send-to-host";
|
|
readonly mode: "send";
|
|
}
|
|
| {
|
|
readonly side: "renderer";
|
|
readonly operation: "invoke";
|
|
readonly mode: "invoke";
|
|
}
|
|
| {
|
|
readonly side: "renderer" | "main";
|
|
readonly operation: "on" | "once";
|
|
readonly mode: "listen";
|
|
}
|
|
| {
|
|
readonly side: "main";
|
|
readonly operation: "handle" | "handle-once";
|
|
readonly mode: "handle";
|
|
};
|
|
|
|
type ElectronIpcHandler =
|
|
| {
|
|
readonly mode: "send" | "invoke";
|
|
readonly handler_kind: null;
|
|
readonly handler_location: null;
|
|
}
|
|
| {
|
|
readonly mode: "listen" | "handle";
|
|
readonly handler_kind: "missing";
|
|
readonly handler_location: null;
|
|
}
|
|
| {
|
|
readonly mode: "listen" | "handle";
|
|
readonly handler_kind:
|
|
| "inline-function"
|
|
| "identifier"
|
|
| "member-expression"
|
|
| "dynamic-expression";
|
|
readonly handler_location: JavaScriptSourceRange;
|
|
};
|
|
|
|
interface ElectronIpcFindingContext {
|
|
readonly module_key: string | null;
|
|
readonly location: JavaScriptSourceRange;
|
|
}
|
|
|
|
/** One statically visible Electron IPC send, invocation, listener, or handler. */
|
|
export type ElectronIpcFinding = ElectronIpcDescriptor &
|
|
ElectronIpcHandler &
|
|
ElectronIpcFindingContext &
|
|
(
|
|
| { readonly channel: string; readonly channel_expression: null }
|
|
| { readonly channel: null; readonly channel_expression: string }
|
|
);
|
|
|
|
/** Static check involving an IPC sender, frame, process, URL, or origin. */
|
|
export interface ElectronSenderValidationFinding {
|
|
readonly subject:
|
|
| "sender-url"
|
|
| "sender-origin"
|
|
| "sender-frame"
|
|
| "sender-id"
|
|
| "frame-id"
|
|
| "process-id";
|
|
readonly mechanism: string;
|
|
readonly expected: ElectronStaticValue;
|
|
readonly enforcement: "unknown";
|
|
readonly module_key: string | null;
|
|
readonly location: JavaScriptSourceRange;
|
|
}
|
|
|
|
interface ElectronUtilityProcessFindingState {
|
|
readonly service_name: string | null;
|
|
readonly module_key: string | null;
|
|
readonly location: JavaScriptSourceRange;
|
|
}
|
|
|
|
/** One utilityProcess.fork declaration and its statically visible entrypoint. */
|
|
export type ElectronUtilityProcessFinding = ElectronUtilityProcessFindingState &
|
|
(
|
|
| {
|
|
readonly module_path: string;
|
|
readonly module_resolution_context: JavaScriptStaticPathContext;
|
|
readonly module_expression: null;
|
|
}
|
|
| {
|
|
readonly module_path: null;
|
|
readonly module_resolution_context: null;
|
|
readonly module_expression: string;
|
|
}
|
|
);
|
|
|
|
/** JavaScript-side binding or re-export requested from one native .node addon. */
|
|
export interface ElectronNativeAddonBindingFinding {
|
|
readonly specifier: string;
|
|
readonly binding_kind: "import" | "require" | "re-export";
|
|
readonly module_kind: "import" | "require";
|
|
readonly members: readonly string[];
|
|
readonly module_key: string | null;
|
|
readonly location: JavaScriptSourceRange;
|
|
}
|
|
|
|
/** All Electron-specific facts collected during one shared AST traversal. */
|
|
export interface ElectronStaticFindings {
|
|
readonly browser_windows: readonly ElectronBrowserWindowFinding[];
|
|
readonly context_bridge_apis: readonly ElectronContextBridgeFinding[];
|
|
readonly ipc: readonly ElectronIpcFinding[];
|
|
readonly sender_validations: readonly ElectronSenderValidationFinding[];
|
|
readonly utility_processes: readonly ElectronUtilityProcessFinding[];
|
|
readonly native_addon_bindings: readonly ElectronNativeAddonBindingFinding[];
|
|
}
|