@adcore/数据库
从桌面应用程序浏览,查询和编辑 SQLite 和 MySQL 或 MariaDB 数据库. 反应视图绘制连接,一个表格树,一个表格的行,它的结构,一个创建和修改表格的设计者,一个查询控制台和一个将它们组合在一起的工作台. 在应用程序后端的宿主和一个与服务器交谈的本地助手做他们背后的工作.
安装
bun add @adecore/database
@adecore/ui,反应19, react-dom, (中文(简体) ), i18next 财务报告和审定财务报表 react-i18next 是页面的相对关系。 东道主( E)@adecore/database/host和协议@adecore/database/protocol) 进口其中任何一种.
层
page views, createDatabaseClient(transport)
|
app channel ipcMain.handle, a utility process, a WebSocket (the app's own, with its own sender check)
|
backend createDatabaseHost, spawnHelper (Bun or Node)
|
helper adecore-database (native binary, one JSON message per line)
|
server SQLite file, MySQL or MariaDB
软件包不会在页面和后端之间携带信件. 应用确实如此,通过它已经和已经守护的频道.
把它接起来
在后端,每个应用程序创建一个主机,并将每个从频道到它的请求都交给它. 先检查发送者, 并指定请求的主人: 窗口, 套接字 。 当主人去后,释放出.
import { createDatabaseHost, spawnHelper } from '@adecore/database/host';
const host = createDatabaseHost({
start: () => spawnHelper(helperPath),
// Optional: turn down connections the page may not open.
authorize: (connection) => connection.engine !== 'sqlite' || connection.path.startsWith(dataFolder),
// Optional: the files the page may export to and import from. Every file is refused without it.
authorizeFile: (path, access, owner) => isChosenInDialog(owner, access, path),
// Optional: whether the page may list Docker containers. Refused without it.
authorizeDiscovery: (kind, owner) => isTrusted(owner)
});
ipcMain.handle('database:request', (event, request) => {
if (!isTrustedSender(event)) {
throw new Error('Untrusted sender.');
}
return host.handle(request, String(event.sender.id));
});
app.on('web-contents-created', (_event, contents) => {
const owner = String(contents.id);
contents.once('destroyed', () => void host.release(owner));
});
在页面上,让一个客户端通过发送请求的传输返回回复,然后挂载 DatabaseProvider 内部 UIProvider数字 :
import { createDatabaseClient, DatabaseProvider, TableView } from '@adecore/database';
const client = createDatabaseClient((request) => window.database.request(request));
createRoot(root).render(
<UIProvider i18n={i18next} formatSource={formatSource}>
<DatabaseProvider client={client}>
<TableView connection={connection} schema="main" table="customers" className="h-full" />
</DatabaseProvider>
</UIProvider>
);
A 类 Connection 实值 { id, name, config }。应用程序保存列表,密码在自己的安全存储中;软件包没有存储任何信息.
DatabaseProvider 亦取三可选钩入应用. 没有他们,观点就忽略了他们无法做的事情.
<DatabaseProvider
client={client}
onAction={(action) => openInTab(action)}
storage={{ get: (key) => localStorage.getItem(key), set: (key, value) => (value === null ? localStorage.removeItem(key) : localStorage.setItem(key, value)) }}
files={{ save: (options) => window.app.saveFile(options), open: (options) => window.app.openFile(options) }}
>
onAction 收到一个 DatabaseAction 当一个视图想要一个桌子,一个控制台或设计师打开,而应用程序决定它去向. storage 保留布局、控制台历史并打开重载标签. files 持有应用程序保存并打开导出和导入对话框 。 巢养的供养者从上面拿走它留下的东西 所以 <DatabaseProvider onAction={...}> 在一个标签上显示一个动作来自哪个标签.
告诉Tailwind扫描其课程的软件包,旁边是 @source 线条 @adecore/ui。路径相对 CSS 文件 :
@import 'tailwindcss';
@import '@adecore/ui/theme.css';
@source "../node_modules/@adecore/ui/dist";
@source "../node_modules/@adecore/database/dist";
这些话都生活在 database 命名空间,英语和荷兰语. DatabaseProvider 把它们添加到 i18 次例 UIProvider。 。 。 .
帮助二进制
助推器是握有数据库驱动器的Rust程序,因此崩溃驱动器无法将后端取下. 安装带来一个预建的: @adecore/database 将每个平台的软件包列出为可选依赖( )@adecore/database-darwin-arm64 对于苹果硅, -linux-x64, (中文(简体) ), -linux-arm64 财务报告和审定财务报表 -win32-x64),包管理器安装了适合机器的. helperPath() 返回路径,或 null 当平台没有软件包或可选的依赖关系时被忽略. ADECORE_DATABASE_HELPER 用另一座建筑的路径覆盖它.
import { createDatabaseHost, helperPath, spawnHelper } from '@adecore/database/host';
const path = helperPath();
if (path === null) {
throw new Error('No prebuilt helper for this platform.');
}
const host = createDatabaseHost({ start: () => spawnHelper(path) });
Linux 二进制链接针对glibc 2.35 或更新. 一个需要自己建造的应用程序,为另一个平台或补丁帮助者,用这个文件夹中的货物来建造它,并将路径传递到 spawnHelper 相反:
cargo build --release --locked --manifest-path helper/Cargo.toml
二进制是 helper/target/release/adecore-database当软件包从 src ,例如通过 bun link,没有平台软件包有二进制, helperPath() 返回该构建.
在电子软件中
二进制不能从内部运行 app.asar 存档 . helperPath() 地图 app.asar 改为 app.asar.unpacked,所以应用程序解开平台软件包。 与电子建设器:
{
"asarUnpack": ["node_modules/@adecore/database-*/**"]
}
或者复制二进制 extraResources 穿过这条路 spawnHelper,没有 helperPath()。无论哪一种方式,应用程序自己的代码签名和公证覆盖了二进制,所以与应用程序的其余部分一起签署已解开的文件. 一个从另一个机器为一个平台包装的应用程序需要安装在那里的目标平台的软件包.
视图和测试
观点是: ConnectionManager, (中文(简体) ), ConnectionForm, (中文(简体) ), DatabaseExplorer, (中文(简体) ), TableView, (中文(简体) ), StructureView, (中文(简体) ), TableDesigner, (中文(简体) ), QueryConsole 财务报告和审定财务报表 DatabaseWorkbench将探险家放在其他标签旁边 一个连接通过TCP,Unix socket,SSH主机或多克容器到达了MySQL或MariaDB. 文件 每个视图都有页面和连接、文件、安全和协议指南.
@adecore/database/testing 已经 fakeDatabaseTransport同一运输机后面的内存服务器,用于演示和应用程序的测试.
许可证
FSL-1.1-MIT,见 自由主义。 。 。 .