(event: KeyEvent)
| 185 | } |
| 186 | |
| 187 | encode(event: KeyEvent): Uint8Array { |
| 188 | const eventPtrPtr = this.exports.ghostty_wasm_alloc_opaque(); |
| 189 | const createResult = this.exports.ghostty_key_event_new(0, eventPtrPtr); |
| 190 | if (createResult !== 0) throw new Error(`Failed to create key event: ${createResult}`); |
| 191 | |
| 192 | const view = new DataView(this.exports.memory.buffer); |
| 193 | const eventPtr = view.getUint32(eventPtrPtr, true); |
| 194 | this.exports.ghostty_wasm_free_opaque(eventPtrPtr); |
| 195 | |
| 196 | this.exports.ghostty_key_event_set_action(eventPtr, event.action); |
| 197 | this.exports.ghostty_key_event_set_key(eventPtr, event.key); |
| 198 | this.exports.ghostty_key_event_set_mods(eventPtr, event.mods); |
| 199 | |
| 200 | if (event.utf8) { |
| 201 | const encoder = new TextEncoder(); |
| 202 | const utf8Bytes = encoder.encode(event.utf8); |
| 203 | const utf8Ptr = this.exports.ghostty_wasm_alloc_u8_array(utf8Bytes.length); |
| 204 | new Uint8Array(this.exports.memory.buffer).set(utf8Bytes, utf8Ptr); |
| 205 | this.exports.ghostty_key_event_set_utf8(eventPtr, utf8Ptr, utf8Bytes.length); |
| 206 | this.exports.ghostty_wasm_free_u8_array(utf8Ptr, utf8Bytes.length); |
| 207 | } |
| 208 | |
| 209 | const bufferSize = 32; |
| 210 | const bufPtr = this.exports.ghostty_wasm_alloc_u8_array(bufferSize); |
| 211 | const writtenPtr = this.exports.ghostty_wasm_alloc_usize(); |
| 212 | |
| 213 | const encodeResult = this.exports.ghostty_key_encoder_encode( |
| 214 | this.encoder, |
| 215 | eventPtr, |
| 216 | bufPtr, |
| 217 | bufferSize, |
| 218 | writtenPtr |
| 219 | ); |
| 220 | |
| 221 | if (encodeResult !== 0) { |
| 222 | this.exports.ghostty_wasm_free_u8_array(bufPtr, bufferSize); |
| 223 | this.exports.ghostty_wasm_free_usize(writtenPtr); |
| 224 | this.exports.ghostty_key_event_free(eventPtr); |
| 225 | throw new Error(`Failed to encode key: ${encodeResult}`); |
| 226 | } |
| 227 | |
| 228 | const bytesWritten = view.getUint32(writtenPtr, true); |
| 229 | const encoded = new Uint8Array(this.exports.memory.buffer, bufPtr, bytesWritten).slice(); |
| 230 | |
| 231 | this.exports.ghostty_wasm_free_u8_array(bufPtr, bufferSize); |
| 232 | this.exports.ghostty_wasm_free_usize(writtenPtr); |
| 233 | this.exports.ghostty_key_event_free(eventPtr); |
| 234 | |
| 235 | return encoded; |
| 236 | } |
| 237 | |
| 238 | dispose(): void { |
| 239 | if (this.encoder) { |
no test coverage detected