Files
jap_web_ng/src/main.ts
T

38 lines
1.7 KiB
TypeScript
Raw Normal View History

2026-09-13 18:43:42 +03:00
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();