Skip to content

useKaspa

Mengontrol siklus hidup modul WebAssembly @vue-kaspa/kaspa-wasm. Modul WASM harus diinisialisasi sebelum koneksi RPC atau operasi kriptografi apa pun dapat dilakukan.

Impor

ts
import { useKaspa } from 'vue-kaspa'

Tipe kembalian

ts
interface UseKaspaReturn {
  wasmStatus: Readonly<Ref<WasmStatus>>
  wasmError: Readonly<Ref<Error | null>>
  isReady: ComputedRef<boolean>
  init(): Promise<void>
  reset(): void
}

Properti

PropertiTipeDeskripsi
wasmStatusReadonly<Ref<WasmStatus>>State siklus hidup WASM saat ini
wasmErrorReadonly<Ref<Error | null>>Objek error ketika wasmStatus adalah 'error'
isReadyComputedRef<boolean>Singkatan: wasmStatus.value === 'ready'

Metode

MetodeDeskripsi
init()Muat modul WASM. Aman dipanggil berkali-kali — idempotent.
reset()Reset ke 'idle'. Terutama untuk pengujian.

Siklus hidup status

idle ──► loading ──► ready

              └──► error (panggil init() lagi untuk mencoba ulang)
StatusArti
'idle'Belum dimulai
'loading'Modul WASM sedang diambil dan dikompilasi
'ready'WASM diinisialisasi dan siap digunakan
'error'Inisialisasi gagal — lihat wasmError.value

Singleton

State WASM bersifat module-level — dibagi ke semua instance komponen. Memanggil init() dari banyak komponen secara bersamaan aman: semua panggilan berbagi promise inisialisasi yang sama dan resolve bersama-sama.

Penggunaan dasar

vue
<script setup lang="ts">
import { useKaspa } from 'vue-kaspa'
import { onMounted } from 'vue'

const kaspa = useKaspa()

onMounted(async () => {
  await kaspa.init()
  // kaspa.wasmStatus.value === 'ready'
})
</script>

<template>
  <div>
    <span v-if="kaspa.isReady.value">WASM ready</span>
    <span v-else-if="kaspa.wasmStatus.value === 'loading'">Loading WASM...</span>
    <span v-else-if="kaspa.wasmStatus.value === 'error'" class="error">
      Error: {{ kaspa.wasmError.value?.message }}
    </span>
  </div>
</template>

Dengan autoConnect

Ketika plugin dipasang dengan autoConnect: true (default), WASM diinisialisasi secara otomatis. Anda tidak perlu memanggil init() secara manual.

ts
app.use(VueKaspa, { autoConnect: true })
// WASM dimuat saat plugin dipasang — wasmStatus menjadi 'ready' sebelum mount komponen pertama

Pemulihan dari error

ts
const kaspa = useKaspa()

try {
  await kaspa.init()
} catch {
  // wasmStatus.value sekarang 'error'
  // wasmError.value berisi alasannya

  // Coba lagi setelah memperbaiki masalah (mis. mengambil ulang binary WASM):
  await kaspa.init()
}

Panic hook

Panic hook dikonfigurasi melalui opsi plugin panicHook. Opsi ini mengontrol apa yang terjadi ketika modul WASM mengalami error yang tidak dapat dipulihkan:

NilaiPerilaku
'console'Mencatat pesan panic ke konsol browser (default)
'browser'Menampilkan dialog browser alert() dengan pesan panic
falseTidak ada handler panic yang dipasang

Released under the MIT License.