Skip to content
Stephan Max edited this page Aug 5, 2025 · 2 revisions

Scratchpad for software architecture, ideas, and comparisons of approaches.

Mode Structure

classDiagram
	class Base {
		-Mode coreMode
		buildCoreModes()
		getDefaultModeIdentifier() String
	}
	class Mode {
		<<abstract>>
		#Base base
		#File folder
		+getTitle()* String
		+createEditor(Base base, String path, EditorState state)* Editor
		+getDefaultExtension()* String
		+getExtensions()* String[]
		+getIgnorable()* String[]
	}
	class p5Mode
	Mode <|-- p5Mode
	Base --> Mode
Loading

Electron’s Inter-Process Communication

---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TB
	subgraph main["Main (privileged)"]
		mainFile@{ shape: doc, label: "main.js" }
		preloadFile@{ shape: doc, label: "preload.js" }
		win["`**BrowserWindow**
		
		- webContents`"]
		ipcMain@{ shape: trap-t, label: "ipcMain.on('channel', message)"}
		mainFile --> ipcMain
		mainFile --> win
		preloadFile -- webPreferences.preload --- win
	end
	subgraph renderer["Renderers (sandboxed)"]
		indexFile@{ shape: docs, label: "index.html" }
		proxy(("`*Proxy*
		console`"))
		rendererFile@{ shape: doc, label: "renderer.js" }
		sketchFile@{ shape: docs, label: "sketch.js" }
		global[window.electron.sendMessage]
		indexFile -.-> rendererFile
		indexFile -.-> sketchFile
		rendererFile --> proxy
		sketchFile -.-> proxy
		proxy -.-> global
	end
	sto@{ shape: lean-r, label: "Standard Output\nPiped into PDE console"} 
	win -. loadFile() .-> indexFile
	preloadFile -- "`**contextBridge**.exposeInMainWorld()`" --- global
	global messaging@== "`ipcRenderer.send('channel', message)`" ==> ipcMain
	messaging@{animate: true}
	ipcMain -- "`console.log`" --- sto
Loading

Clone this wiki locally