"use strict"; (function registerStoragePlugin() { const storageKey = "tdkpin.save.v1"; const encoder = new TextEncoder(); const decoder = new TextDecoder(); let lastRevision = 0; function browserStorage() { try { return window.localStorage; } catch (_error) { return null; } } function sendSavedDataToRust() { wasm_exports.tdkpin_browser_storage_clear(); const storage = browserStorage(); let saved = null; try { saved = storage?.getItem(storageKey); } catch (_error) { saved = null; } if (saved !== null && saved !== undefined) { for (const byte of encoder.encode(saved)) { wasm_exports.tdkpin_browser_storage_push(byte); } } wasm_exports.tdkpin_browser_storage_finish(); } function flushRustSave() { const revision = wasm_exports.tdkpin_browser_storage_save_revision(); if (revision === lastRevision) { return; } const bytes = new Uint8Array( wasm_exports.tdkpin_browser_storage_save_length(), ); for (let index = 0; index < bytes.length; index += 1) { bytes[index] = wasm_exports.tdkpin_browser_storage_save_byte(index); } const storage = browserStorage(); try { storage?.setItem(storageKey, decoder.decode(bytes)); } catch (_error) { // Private browsing or a full quota should not stop the game loop. } wasm_exports.tdkpin_browser_storage_save_ack(); lastRevision = revision; } function onInit() { sendSavedDataToRust(); lastRevision = wasm_exports.tdkpin_browser_storage_save_revision(); window.setInterval(flushRustSave, 50); window.addEventListener("beforeunload", flushRustSave); } miniquad_add_plugin({ name: "tdkpin_storage", on_init: onInit, version: 1, }); })();