// SPDX-License-Identifier: MPL-2.0 // Example: Using SafeDOM for formally verified DOM mounting open SafeDOM // Example 1: Basic mounting with error handling let mountApp = () => { mountSafe( "#app", "

Hello, World!

Mounted safely with proofs.

", ~onSuccess=el => { Console.log("✓ App mounted successfully!") Console.log("Element:", el) }, ~onError=err => { Console.error("✗ Mount failed:", err) } ) } // Example 2: Wait for DOM ready before mounting let mountWhenDOMReady = () => { mountWhenReady( "#app", "

App Title

", ~onSuccess=_ => Console.log("✓ Mounted after DOM ready"), ~onError=err => Console.error("✗ Failed:", err) ) } // Example 3: Batch mounting (atomic - all or nothing) let mountMultiple = () => { let specs = [ {selector: "#header", html: "

Site Title

"}, {selector: "#nav", html: ""}, {selector: "#main", html: "

Content here

"}, {selector: "#footer", html: ""} ] switch mountBatch(specs) { | Ok(elements) => { Console.log(`✓ Successfully mounted ${Array.length(elements)} elements`) elements->Array.forEach(el => Console.log(" -", el)) } | Error(err) => { Console.error("✗ Batch mount failed:", err) Console.error(" (None were mounted - atomic operation)") } } } // Example 4: Explicit validation before mounting let mountWithValidation = () => { // Validate selector first switch ProvenSelector.validate("#my-app") { | Error(e) => Console.error(`Invalid selector: ${e}`) | Ok(validSelector) => { // Validate HTML switch ProvenHTML.validate("
Content
") { | Error(e) => Console.error(`Invalid HTML: ${e}`) | Ok(validHtml) => { // Now mount with proven safety switch mount(validSelector, validHtml) { | Mounted(el) => Console.log("✓ Mounted with validated inputs:", el) | MountPointNotFound(s) => Console.error(`✗ Element not found: ${s}`) | InvalidSelector(_) => Console.error("Impossible - already validated") | InvalidHTML(_) => Console.error("Impossible - already validated") } } } } } // Example 5: Integration with TEA module MyApp = { type model = {message: string} type msg = NoOp let init = () => {message: "Hello from TEA"} let update = (model, _msg) => model let view = model => `

${model.message}

` } let mountTEAApp = () => { let model = MyApp.init() let html = MyApp.view(model) mountWhenReady( "#tea-app", html, ~onSuccess=el => { Console.log("✓ TEA app mounted") // Set up event handlers, subscriptions here }, ~onError=err => Console.error(`✗ TEA mount failed: ${err}`) ) } // Entry point let main = () => { Console.log("SafeDOM Examples") Console.log("================\n") // Choose which example to run mountWhenDOMReady() // Run on DOM ready } // Auto-execute when module loads main()