feat: metona-sqlark v0.1.12 — 前端TypeScript关系型数据库

- 4种存储引擎:Memory / IndexedDB / OPFS / Hybrid
- 完整SQL支持:SELECT/INSERT/UPDATE/DELETE/JOIN/GROUP BY/HAVING/DISTINCT
- Query Builder链式API + TypeScript泛型支持
- 聚合函数:COUNT/SUM/AVG/MIN/MAX
- 事务、插件系统(14 hooks)、发布订阅、数据迁移、导入导出
- React/Vue框架集成
- 264个测试用例,93.46%覆盖率
- 零运行时依赖
This commit is contained in:
thzxx
2026-07-26 15:00:01 +08:00
commit e2a590c5b1
60 changed files with 16359 additions and 0 deletions
+77
View File
@@ -0,0 +1,77 @@
// @ts-nocheck
/**
* metona-sqlark Vue Integration (v0.1.11)
* @module integrations/vue
*
* 轻量 Vue composables,需要 vue 作为 peer dependency。
*
* @example
* import { useSqlarkQuery, useSqlarkTable } from 'metona-sqlark/vue';
* import { db } from './db';
*
* const { data, loading, refresh } = useSqlarkQuery(db, 'SELECT * FROM users');
*/
import type { MetonaSqlark } from '../core';
import { ref, watch, onMounted, type Ref } from 'vue';
/** useSqlarkQuery: 执行 SQL 查询 */
export function useSqlarkQuery(
db: MetonaSqlark,
sql: string,
deps: Ref<unknown>[] = [],
): { data: Ref<Record<string, unknown>[]>; loading: Ref<boolean>; error: Ref<Error | null>; refresh: () => void } {
const data = ref<Record<string, unknown>[]>([]) as Ref<Record<string, unknown>[]>;
const loading = ref(true);
const error = ref<Error | null>(null) as Ref<Error | null>;
const execute = async () => {
loading.value = true;
try {
data.value = await db.query(sql) as Record<string, unknown>[];
error.value = null;
} catch (e) {
error.value = e as Error;
} finally {
loading.value = false;
}
};
onMounted(execute);
watch([() => sql, ...deps], execute);
return { data, loading, error, refresh: execute };
}
/** useSqlarkTable: 快速获取表数据 */
export function useSqlarkTable(
db: MetonaSqlark,
tableName: string,
): { data: Ref<Record<string, unknown>[]>; loading: Ref<boolean>; refresh: () => void } {
const { data, loading, refresh } = useSqlarkQuery(db, `SELECT * FROM ${tableName}`);
return { data, loading, refresh };
}
/** useSqlarkDatabase: 创建/管理数据库实例 */
export function useSqlarkDatabase(config: import('../constants').DatabaseConfig): {
db: Ref<MetonaSqlark | null>;
ready: Ref<boolean>;
error: Ref<Error | null>;
} {
const db = ref<MetonaSqlark | null>(null) as Ref<MetonaSqlark | null>;
const ready = ref(false);
const error = ref<Error | null>(null) as Ref<Error | null>;
onMounted(async () => {
try {
const instance = new MetonaSqlark(config);
await instance.init();
db.value = instance;
ready.value = true;
} catch (e) {
error.value = e as Error;
}
});
return { db, ready, error };
}