返回资讯中心
外部精选
软件工程
#开发者实时流

JSQLite 发布浏览器安全版 SQLite 只读 TypeScript 实现

来源标题:JSQLite: Browser-safe TypeScript version of SQLite's read-only implementation

JSQLite 发布公开测试版 0.0.0-beta.7,这是 SQLite 只读 C 实现及测试的 TypeScript 重写版本,面向浏览器和兼容 Fetch 的运行时,不依赖 C、原生 SQLite 或 WebAssembly。该项目采用 GNU GPL v3 或更高版本许可,未在 npm registry 发布,需从 GitHub release tarball 安装。目前支持连接、复合查询、聚合、子查询/视图、CTE、窗口函数及 JSON 函数等,但尚未实现完整的只读 SQLite 兼容。

Hacker News 最新thunderbong2026/11/13 · 今天16 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

JSQLite:SQLite 只读实现的浏览器安全 TypeScript 版本

公开测试版:0.0.0-beta.7。 浏览器安全的只读 SQLite,以 GNU GPL v3 或更高版本发布。 发布范围、验证情况及尚存限制。 试用在线 playground。 未发布到 npm registry;请安装 GitHub release tarball。 这是对 SQLite 只读 C 实现及其测试的全新 TypeScript 翻译,面向浏览器和兼容 Fetch 的运行时。运行时不得内嵌 C、原生 SQLite 或 WebAssembly。 完整的产品契约见 docs/SPEC.md;由所有者指定的路线图首先是一个对 JS/TS 友好的 C 等价 API,然后是上游测试 harness 和第一批测试,随后是渐进式翻译,每个切片之前先有测试。公开 API、固定版本的开发 oracle、测试 harness 和渐进式 TypeScript 引擎现已存在。所支持的 join、compound、聚合、子查询/视图、CTE、窗口、函数(包括 JSON)以及选定的索引规划,都在文档化的有界准入闸门下执行。这不是完整的只读 SQLite 兼容性,也不是整个项目的完成。原生 SQLite 仅用于开发,绝不是运行时后端。 功能优先的 beta 分类区分已承诺的功能与缺口、优化和交付证据;beta 不等于正式发布。 当前的翻译指南、公开 API、source map、oracle 设置和一致性证据均可获取。技术选型在 SPEC 之下仍可变更。原始基线和后续指南连同出处一并保存在文档历史中。 官方的 SQLite 3.53.4 完整源码/测试归档(截至 2026-09-12 检查时的最新稳定版)位于本地 reference/sqlite/ 下。其受跟踪的 manifest 记录了上游下载 URL、校验和、大小以及公有领域许可证。该归档本身被 Git 忽略,可从该 URL 重新下载,并对照 manifest 进行校验。 参考版本是固定的;后续稳定版本会在有意义的里程碑处审慎采用,同时更新源码、测试和 oracle。 本次发布打包了来自 0931c0c3824ffe7a14eff03cd7c62edc093c2b81 的、已独立验收的 local-beta 引擎。发布变更增加了版本/许可证、打包检查和文档,而非引擎变更。它不是完整的 SQLite 兼容性,也不支持任意 SQL 组合。所有数据库文本编码(UTF-8、UTF-16le、UTF-16be)都由所支持的测试覆盖。SPEC 的范围没有变化;范围内尚未翻译的构造仍是临时缺口。 早期的 alpha 制品及其披露的限制保持不可变。研究文档中历史上的 private/deferred-alpha 说明描述的是其最初的交接,而非本次所有者授权的公开测试版。 curl -fLO https://github.com/salva/jsqlite/releases/download/v0.0.0-beta.7/jsqlite2-0.0.0-beta.7.tgz curl -fLO https://github.com/salva/jsqlite/releases/download/v0.0.0-beta.7/SHA256SUMS

安装前请对照 SHA256SUMS 检查 tarball 条目。

npm install --ignore-scripts --no-audit --no-fund ./jsqlite2-0.0.0-beta.7.tgz import { open } from 'jsqlite2'; const db = await open('https://your-local-origin/database.sqlite'); try { const { statement } = db.prepare('SELECT 1'); if (!statement) throw new Error('no statement'); try { while (await statement.step() === 'row') console.log(statement.column(0)); // 1n } finally { statement.finalize(); } } finally { db.close(); } 对于未打包的浏览器,请提供完整的已安装 dist/ 目录树,并从其 index.js URL 导入,而不是在没有 bundler/import map 的情况下使用裸包名。Fetch 默认使用 credentials omit;显式的 Request/options 保留其契约。 使用 installed-demo 说明,以已安装的制品提供静态演示输入。 installed-demo.py --package-manifest <manifest> --name <new-child> 会安装实际的 tarball 并运行真实浏览器演示;这需要仅用于开发的 Playwright/Chromium。不使用查询后端或原生运行时。 在仓库根目录下,构建下面描述的同一个本地 ESM 制品,并且只提供静态文件(Python 3 是开发期服务工具): npm ci npm run build python3 -m http.server 8000 --bind 127.0.0.1 打开 http://127.0.0.1:8000/examples/browser/index.html。这个小演示从 ../../dist/index.js 导入公开的具名导出 open 和 JSQLiteError;它在本地获取打包的不可变 Chinook fixture,而非来自在线服务。选择 Album/Track join 或 INTEGER/REAL/NULL/BLOB 判别器,查看可见的 SQL 和固定原生版本的预期类型化行,然后点击 Run。一个失败打开按钮和可编辑 SQL 会展示错误和清理诊断信息。不涉及任何服务端查询后端。 演示说明/出处和真实浏览器证据涵盖复现与有界结果。这只是冒烟演示,不是兼容性百分比或发布声明。请提供仓库根目录,而不仅仅是演示文件夹;不支持 file://。 开发需要 Node.js 24 和由 lockfile 固定的 TypeScript 5.9.3: npm ci npm run build npm pack --pack-destination /your/local/output dist/index.js 是具名 ESM 入口(open、JSQLiteError);dist/index.d.ts 提供公开的 TypeScript 契约。相对 JS 导入可在浏览器中解析;请提供完整的 dist/ 目录树,而不只是其入口文件。 对于包使用者,安装本地 tarball 并从 "jsqlite2" 导入。对于没有 bundler 的浏览器,从所提供的 dist/index.js URL 导入。 需要 ES2022(包括 BigInt)、Fetch/Streams、AbortController、文本编解码器以及用于 SQL 随机性的 Web Crypto。不附带任何运行时依赖、Node API、原生 SQLite、WASM、动态代码生成或遥测。 包保留 private: true 以防止意外发布到 npm registry;beta.7 以带版本号的 GitHub tarball 分发。这不是对完整 SQLite 兼容性的声明。SQL 准入仍如上所述有界。 打包明确只包含生成的 JS/声明文件,加上 npm 强制要求的包元数据和本 README;参考源码、fixture、工具和研究仅用于开发。npm pack 会在打包前重新构建。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →