38 lines
1.7 KiB
TypeScript
38 lines
1.7 KiB
TypeScript
import './style.css';
|
||
|
||
import * as sqlite from 'wa-sqlite';
|
||
import SQLiteESMFactory from 'wa-sqlite/dist/wa-sqlite.mjs';
|
||
import { SyncPanel } from './sync-panel';
|
||
|
||
// Смоук-тест: запускаем SQLite (сборка wa-sqlite) в памяти.
|
||
// Запись и чтение БД идут через OPFS (src/storage.ts); подключение
|
||
// SQLite к файлу из OPFS сделаем при работе с самими карточками.
|
||
const sqliteStatus = document.querySelector<HTMLParagraphElement>('#sqlite-status');
|
||
|
||
async function initSqlite(): Promise<void> {
|
||
try {
|
||
// 1. Загрузчик сам скачивает wa-sqlite.wasm (рядом с wa-sqlite.mjs).
|
||
const module = await SQLiteESMFactory();
|
||
// 2. Оборачиваем Emscripten-модуль в JS API.
|
||
const sqlite3 = sqlite.Factory(module);
|
||
// 3. Открываем базу в памяти и выполняем запрос.
|
||
const db = await sqlite3.open_v2(':memory:');
|
||
let result = 'нет данных';
|
||
await sqlite3.exec(db, "SELECT 'Привет, мир!'", (row) => {
|
||
result = String(row[0]);
|
||
});
|
||
await sqlite3.close(db);
|
||
|
||
if (sqliteStatus) sqliteStatus.textContent = `SQLite работает: ${result}`;
|
||
} catch (error) {
|
||
if (sqliteStatus) sqliteStatus.textContent = `SQLite: ошибка инициализации — ${error}`;
|
||
console.error(error);
|
||
}
|
||
}
|
||
|
||
// Главный экран: токен сохранения + кнопки «Скачать» / «Выгрузить».
|
||
// HTTP-обвязка появится на следующем шаге.
|
||
const syncPanel = new SyncPanel(document);
|
||
syncPanel.init();
|
||
|
||
void initSqlite(); |