diff --git a/&1 b/&1
deleted file mode 100644
index e69de29bb..000000000
diff --git a/.github/workflows/napi.yml b/.github/workflows/napi.yml
index 3ed3ec06e..c53237552 100644
--- a/.github/workflows/napi.yml
+++ b/.github/workflows/napi.yml
@@ -19,6 +19,10 @@ defaults:
run:
working-directory: bindings/javascript
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+ cancel-in-progress: true
+
jobs:
build:
timeout-minutes: 20
@@ -27,20 +31,18 @@ jobs:
matrix:
settings:
- host: windows-latest
- build: |
- yarn build --target x86_64-pc-windows-msvc
- yarn test
target: x86_64-pc-windows-msvc
+ build: yarn workspace @tursodatabase/database napi-build --target x86_64-pc-windows-msvc
- host: ubuntu-latest
target: x86_64-unknown-linux-gnu
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
- build: yarn build --target x86_64-unknown-linux-gnu
+ build: yarn workspace @tursodatabase/database napi-build --target x86_64-unknown-linux-gnu
- host: macos-latest
target: aarch64-apple-darwin
- build: yarn build --target aarch64-apple-darwin
+ build: yarn workspace @tursodatabase/database napi-build --target aarch64-apple-darwin
- host: blacksmith-2vcpu-ubuntu-2404-arm
target: aarch64-unknown-linux-gnu
- build: yarn build --target aarch64-unknown-linux-gnu
+ build: yarn workspace @tursodatabase/database napi-build --target aarch64-unknown-linux-gnu
- host: ubuntu-latest
target: wasm32-wasip1-threads
setup: |
@@ -52,7 +54,7 @@ jobs:
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
export TARGET_CXXFLAGS="--target=wasm32-wasi-threads --sysroot=$(pwd)/wasi-sdk-25.0-x86_64-linux/share/wasi-sysroot -pthread -mllvm -wasm-enable-sjlj -lsetjmp"
export TARGET_CFLAGS="$TARGET_CXXFLAGS"
- yarn build --target wasm32-wasip1-threads
+ yarn workspace @tursodatabase/database-browser build
name: stable - ${{ matrix.settings.target }} - node@20
runs-on: ${{ matrix.settings.host }}
steps:
@@ -88,6 +90,8 @@ jobs:
shell: bash
- name: Install dependencies
run: yarn install
+ - name: Build common
+ run: yarn workspace @tursodatabase/database-common build
- name: Setup node x86
uses: actions/setup-node@v4
if: matrix.settings.target == 'x86_64-pc-windows-msvc'
@@ -110,8 +114,8 @@ jobs:
with:
name: bindings-${{ matrix.settings.target }}
path: |
- bindings/javascript/${{ env.APP_NAME }}.*.node
- bindings/javascript/${{ env.APP_NAME }}.*.wasm
+ bindings/javascript/packages/native/${{ env.APP_NAME }}.*.node
+ bindings/javascript/packages/browser/${{ env.APP_NAME }}.*.wasm
if-no-files-found: error
test-linux-x64-gnu-binding:
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }}
@@ -131,20 +135,21 @@ jobs:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: yarn install
- - name: Download artifacts
+ - name: Build common
+ run: yarn workspace @tursodatabase/database-common build
+ - name: Download all artifacts
uses: actions/download-artifact@v4
with:
- name: bindings-x86_64-unknown-linux-gnu
- path: bindings/javascript
+ path: bindings/javascript/packages
+ merge-multiple: true
- name: List packages
run: ls -R .
shell: bash
- name: Test bindings
- run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-slim yarn test
+ run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-slim yarn workspace @tursodatabase/database test
publish:
name: Publish
runs-on: ubuntu-latest
- if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: read
id-token: write
@@ -156,35 +161,35 @@ jobs:
uses: useblacksmith/setup-node@v5
with:
node-version: 20
- - name: Install dependencies
- run: yarn install
- - name: create npm dirs
- run: yarn napi create-npm-dirs
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
- path: bindings/javascript/artifacts
- - name: Move artifacts
- run: yarn artifacts
- - name: List packages
- run: ls -R ./npm
- shell: bash
+ path: bindings/javascript/packages
+ merge-multiple: true
+ - name: Install dependencies
+ run: yarn install
+ - name: Install dependencies
+ run: yarn tsc-build
- name: Publish
+ if: "startsWith(github.ref, 'refs/tags/v')"
run: |
npm config set provenance true
if git log -1 --pretty=%B | grep "^Turso [0-9]\+\.[0-9]\+\.[0-9]\+$";
then
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
- make publish-native
- make publish-browser
+ npm publish --workspaces --access public
elif git log -1 --pretty=%B | grep "^Turso [0-9]\+\.[0-9]\+\.[0-9]\+";
then
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
- make publish-native-next
- make publish-browser-next
+ npm publish --workspaces --access public --tag next
else
- echo "Not a release, skipping publish"
+ echo "git log structure is unexpected, skip publishing"
+ npm publish --workspaces --dry-run
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+ - name: Publish (dry-run)
+ if: "!startsWith(github.ref, 'refs/tags/v')"
+ run: |
+ npm publish --workspaces --dry-run
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 294912817..b851e8025 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,3 +42,5 @@ simulator.log
**/*.txt
profile.json.gz
simulator-output/
+
+&1
diff --git a/Cargo.lock b/Cargo.lock
index 8ac5ac00f..3078152e6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -667,7 +667,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "core_tester"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"anyhow",
"assert_cmd",
@@ -2126,7 +2126,7 @@ dependencies = [
[[package]]
name = "limbo_completion"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"mimalloc",
"turso_ext",
@@ -2134,7 +2134,7 @@ dependencies = [
[[package]]
name = "limbo_crypto"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"blake3",
"data-encoding",
@@ -2147,7 +2147,7 @@ dependencies = [
[[package]]
name = "limbo_csv"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"csv",
"mimalloc",
@@ -2157,7 +2157,7 @@ dependencies = [
[[package]]
name = "limbo_ipaddr"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"ipnetwork",
"mimalloc",
@@ -2166,7 +2166,7 @@ dependencies = [
[[package]]
name = "limbo_percentile"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"mimalloc",
"turso_ext",
@@ -2174,7 +2174,7 @@ dependencies = [
[[package]]
name = "limbo_regexp"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"mimalloc",
"regex",
@@ -2183,7 +2183,7 @@ dependencies = [
[[package]]
name = "limbo_sim"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"anyhow",
"chrono",
@@ -2216,7 +2216,7 @@ dependencies = [
[[package]]
name = "limbo_sqlite_test_ext"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"cc",
]
@@ -2971,7 +2971,7 @@ dependencies = [
[[package]]
name = "py-turso"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"anyhow",
"pyo3",
@@ -3666,7 +3666,7 @@ checksum = "d372029cb5195f9ab4e4b9aef550787dce78b124fcaee8d82519925defcd6f0d"
[[package]]
name = "sql_generation"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"anarchist-readable-name-generator-lib 0.2.0",
"anyhow",
@@ -4176,7 +4176,7 @@ dependencies = [
[[package]]
name = "turso"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"rand 0.8.5",
"rand_chacha 0.3.1",
@@ -4188,7 +4188,7 @@ dependencies = [
[[package]]
name = "turso-java"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"jni",
"thiserror 2.0.12",
@@ -4197,7 +4197,7 @@ dependencies = [
[[package]]
name = "turso_cli"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"anyhow",
"cfg-if",
@@ -4230,7 +4230,7 @@ dependencies = [
[[package]]
name = "turso_core"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"aegis",
"aes",
@@ -4289,7 +4289,7 @@ dependencies = [
[[package]]
name = "turso_dart"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"flutter_rust_bridge",
"turso_core",
@@ -4297,7 +4297,7 @@ dependencies = [
[[package]]
name = "turso_ext"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"chrono",
"getrandom 0.3.2",
@@ -4306,7 +4306,7 @@ dependencies = [
[[package]]
name = "turso_ext_tests"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"env_logger 0.11.7",
"lazy_static",
@@ -4317,7 +4317,7 @@ dependencies = [
[[package]]
name = "turso_macros"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"proc-macro2",
"quote",
@@ -4326,18 +4326,19 @@ dependencies = [
[[package]]
name = "turso_node"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"napi",
"napi-build",
"napi-derive",
+ "tracing",
"tracing-subscriber",
"turso_core",
]
[[package]]
name = "turso_parser"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"bitflags 2.9.0",
"criterion",
@@ -4353,7 +4354,7 @@ dependencies = [
[[package]]
name = "turso_sqlite3"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"env_logger 0.11.7",
"libc",
@@ -4366,7 +4367,7 @@ dependencies = [
[[package]]
name = "turso_sqlite3_parser"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"bitflags 2.9.0",
"cc",
@@ -4384,7 +4385,7 @@ dependencies = [
[[package]]
name = "turso_stress"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"anarchist-readable-name-generator-lib 0.1.2",
"antithesis_sdk",
@@ -4400,7 +4401,7 @@ dependencies = [
[[package]]
name = "turso_sync_engine"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"base64",
"bytes",
@@ -4426,7 +4427,7 @@ dependencies = [
[[package]]
name = "turso_sync_js"
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
dependencies = [
"genawaiter",
"http",
diff --git a/Cargo.toml b/Cargo.toml
index 3bc527899..e393d48e3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -33,29 +33,29 @@ members = [
exclude = ["perf/latency/limbo"]
[workspace.package]
-version = "0.1.5-pre.3"
+version = "0.1.5-pre.5"
authors = ["the Limbo authors"]
edition = "2021"
license = "MIT"
repository = "https://github.com/tursodatabase/turso"
[workspace.dependencies]
-turso = { path = "bindings/rust", version = "0.1.5-pre.3" }
-turso_node = { path = "bindings/javascript", version = "0.1.5-pre.3" }
-limbo_completion = { path = "extensions/completion", version = "0.1.5-pre.3" }
-turso_core = { path = "core", version = "0.1.5-pre.3" }
-turso_sync_engine = { path = "sync/engine", version = "0.1.5-pre.3" }
-limbo_crypto = { path = "extensions/crypto", version = "0.1.5-pre.3" }
-limbo_csv = { path = "extensions/csv", version = "0.1.5-pre.3" }
-turso_ext = { path = "extensions/core", version = "0.1.5-pre.3" }
-turso_ext_tests = { path = "extensions/tests", version = "0.1.5-pre.3" }
-limbo_ipaddr = { path = "extensions/ipaddr", version = "0.1.5-pre.3" }
-turso_macros = { path = "macros", version = "0.1.5-pre.3" }
-limbo_percentile = { path = "extensions/percentile", version = "0.1.5-pre.3" }
-limbo_regexp = { path = "extensions/regexp", version = "0.1.5-pre.3" }
-turso_sqlite3_parser = { path = "vendored/sqlite3-parser", version = "0.1.5-pre.3" }
-limbo_uuid = { path = "extensions/uuid", version = "0.1.5-pre.3" }
-turso_parser = { path = "parser", version = "0.1.5-pre.3" }
+turso = { path = "bindings/rust", version = "0.1.5-pre.5" }
+turso_node = { path = "bindings/javascript", version = "0.1.5-pre.5" }
+limbo_completion = { path = "extensions/completion", version = "0.1.5-pre.5" }
+turso_core = { path = "core", version = "0.1.5-pre.5" }
+turso_sync_engine = { path = "sync/engine", version = "0.1.5-pre.5" }
+limbo_crypto = { path = "extensions/crypto", version = "0.1.5-pre.5" }
+limbo_csv = { path = "extensions/csv", version = "0.1.5-pre.5" }
+turso_ext = { path = "extensions/core", version = "0.1.5-pre.5" }
+turso_ext_tests = { path = "extensions/tests", version = "0.1.5-pre.5" }
+limbo_ipaddr = { path = "extensions/ipaddr", version = "0.1.5-pre.5" }
+turso_macros = { path = "macros", version = "0.1.5-pre.5" }
+limbo_percentile = { path = "extensions/percentile", version = "0.1.5-pre.5" }
+limbo_regexp = { path = "extensions/regexp", version = "0.1.5-pre.5" }
+turso_sqlite3_parser = { path = "vendored/sqlite3-parser", version = "0.1.5-pre.5" }
+limbo_uuid = { path = "extensions/uuid", version = "0.1.5-pre.5" }
+turso_parser = { path = "parser", version = "0.1.5-pre.5" }
sql_generation = { path = "sql_generation" }
strum = { version = "0.26", features = ["derive"] }
strum_macros = "0.26"
diff --git a/bindings/javascript/.gitignore b/bindings/javascript/.gitignore
index 02f979110..43964d947 100644
--- a/bindings/javascript/.gitignore
+++ b/bindings/javascript/.gitignore
@@ -197,4 +197,4 @@ Cargo.lock
*.node
*.wasm
-package.native.json
+npm
diff --git a/bindings/javascript/.npmignore b/bindings/javascript/.npmignore
index ec144db2a..4c24ea24a 100644
--- a/bindings/javascript/.npmignore
+++ b/bindings/javascript/.npmignore
@@ -11,3 +11,5 @@ yarn.lock
.yarn
__test__
renovate.json
+examples
+perf
diff --git a/bindings/javascript/Cargo.toml b/bindings/javascript/Cargo.toml
index 077f07fb3..a3b2384fe 100644
--- a/bindings/javascript/Cargo.toml
+++ b/bindings/javascript/Cargo.toml
@@ -15,9 +15,11 @@ turso_core = { workspace = true }
napi = { version = "3.1.3", default-features = false, features = ["napi6"] }
napi-derive = { version = "3.1.1", default-features = true }
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
+tracing.workspace = true
[features]
encryption = ["turso_core/encryption"]
+browser = []
[build-dependencies]
napi-build = "2.2.3"
diff --git a/bindings/javascript/browser.js b/bindings/javascript/browser.js
deleted file mode 100644
index 1959855f1..000000000
--- a/bindings/javascript/browser.js
+++ /dev/null
@@ -1 +0,0 @@
-export * from '@tursodatabase/database-wasm32-wasi'
diff --git a/bindings/javascript/index.js b/bindings/javascript/index.js
deleted file mode 100644
index 6bff52d98..000000000
--- a/bindings/javascript/index.js
+++ /dev/null
@@ -1,398 +0,0 @@
-// prettier-ignore
-/* eslint-disable */
-// @ts-nocheck
-/* auto-generated by NAPI-RS */
-
-import { createRequire } from 'node:module'
-const require = createRequire(import.meta.url)
-const __dirname = new URL('.', import.meta.url).pathname
-
-const { readFileSync } = require('node:fs')
-let nativeBinding = null
-const loadErrors = []
-
-const isMusl = () => {
- let musl = false
- if (process.platform === 'linux') {
- musl = isMuslFromFilesystem()
- if (musl === null) {
- musl = isMuslFromReport()
- }
- if (musl === null) {
- musl = isMuslFromChildProcess()
- }
- }
- return musl
-}
-
-const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
-
-const isMuslFromFilesystem = () => {
- try {
- return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
- } catch {
- return null
- }
-}
-
-const isMuslFromReport = () => {
- let report = null
- if (typeof process.report?.getReport === 'function') {
- process.report.excludeNetwork = true
- report = process.report.getReport()
- }
- if (!report) {
- return null
- }
- if (report.header && report.header.glibcVersionRuntime) {
- return false
- }
- if (Array.isArray(report.sharedObjects)) {
- if (report.sharedObjects.some(isFileMusl)) {
- return true
- }
- }
- return false
-}
-
-const isMuslFromChildProcess = () => {
- try {
- return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
- } catch (e) {
- // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
- return false
- }
-}
-
-function requireNative() {
- if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) {
- try {
- nativeBinding = require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
- } catch (err) {
- loadErrors.push(err)
- }
- } else if (process.platform === 'android') {
- if (process.arch === 'arm64') {
- try {
- return require('./turso.android-arm64.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-android-arm64')
- } catch (e) {
- loadErrors.push(e)
- }
- } else if (process.arch === 'arm') {
- try {
- return require('./turso.android-arm-eabi.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-android-arm-eabi')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
- }
- } else if (process.platform === 'win32') {
- if (process.arch === 'x64') {
- try {
- return require('./turso.win32-x64-msvc.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-win32-x64-msvc')
- } catch (e) {
- loadErrors.push(e)
- }
- } else if (process.arch === 'ia32') {
- try {
- return require('./turso.win32-ia32-msvc.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-win32-ia32-msvc')
- } catch (e) {
- loadErrors.push(e)
- }
- } else if (process.arch === 'arm64') {
- try {
- return require('./turso.win32-arm64-msvc.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-win32-arm64-msvc')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
- }
- } else if (process.platform === 'darwin') {
- try {
- return require('./turso.darwin-universal.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-darwin-universal')
- } catch (e) {
- loadErrors.push(e)
- }
- if (process.arch === 'x64') {
- try {
- return require('./turso.darwin-x64.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-darwin-x64')
- } catch (e) {
- loadErrors.push(e)
- }
- } else if (process.arch === 'arm64') {
- try {
- return require('./turso.darwin-arm64.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-darwin-arm64')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
- }
- } else if (process.platform === 'freebsd') {
- if (process.arch === 'x64') {
- try {
- return require('./turso.freebsd-x64.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-freebsd-x64')
- } catch (e) {
- loadErrors.push(e)
- }
- } else if (process.arch === 'arm64') {
- try {
- return require('./turso.freebsd-arm64.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-freebsd-arm64')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
- }
- } else if (process.platform === 'linux') {
- if (process.arch === 'x64') {
- if (isMusl()) {
- try {
- return require('./turso.linux-x64-musl.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-x64-musl')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- try {
- return require('./turso.linux-x64-gnu.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-x64-gnu')
- } catch (e) {
- loadErrors.push(e)
- }
- }
- } else if (process.arch === 'arm64') {
- if (isMusl()) {
- try {
- return require('./turso.linux-arm64-musl.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-arm64-musl')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- try {
- return require('./turso.linux-arm64-gnu.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-arm64-gnu')
- } catch (e) {
- loadErrors.push(e)
- }
- }
- } else if (process.arch === 'arm') {
- if (isMusl()) {
- try {
- return require('./turso.linux-arm-musleabihf.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-arm-musleabihf')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- try {
- return require('./turso.linux-arm-gnueabihf.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-arm-gnueabihf')
- } catch (e) {
- loadErrors.push(e)
- }
- }
- } else if (process.arch === 'riscv64') {
- if (isMusl()) {
- try {
- return require('./turso.linux-riscv64-musl.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-riscv64-musl')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- try {
- return require('./turso.linux-riscv64-gnu.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-riscv64-gnu')
- } catch (e) {
- loadErrors.push(e)
- }
- }
- } else if (process.arch === 'ppc64') {
- try {
- return require('./turso.linux-ppc64-gnu.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-ppc64-gnu')
- } catch (e) {
- loadErrors.push(e)
- }
- } else if (process.arch === 's390x') {
- try {
- return require('./turso.linux-s390x-gnu.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-s390x-gnu')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
- }
- } else if (process.platform === 'openharmony') {
- if (process.arch === 'arm64') {
- try {
- return require('./turso.linux-arm64-ohos.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-arm64-ohos')
- } catch (e) {
- loadErrors.push(e)
- }
- } else if (process.arch === 'x64') {
- try {
- return require('./turso.linux-x64-ohos.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-x64-ohos')
- } catch (e) {
- loadErrors.push(e)
- }
- } else if (process.arch === 'arm') {
- try {
- return require('./turso.linux-arm-ohos.node')
- } catch (e) {
- loadErrors.push(e)
- }
- try {
- return require('@tursodatabase/database-linux-arm-ohos')
- } catch (e) {
- loadErrors.push(e)
- }
- } else {
- loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
- }
- } else {
- loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
- }
-}
-
-nativeBinding = requireNative()
-
-if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
- try {
- nativeBinding = require('./turso.wasi.cjs')
- } catch (err) {
- if (process.env.NAPI_RS_FORCE_WASI) {
- loadErrors.push(err)
- }
- }
- if (!nativeBinding) {
- try {
- nativeBinding = require('@tursodatabase/database-wasm32-wasi')
- } catch (err) {
- if (process.env.NAPI_RS_FORCE_WASI) {
- loadErrors.push(err)
- }
- }
- }
-}
-
-if (!nativeBinding) {
- if (loadErrors.length > 0) {
- throw new Error(
- `Cannot find native binding. ` +
- `npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
- 'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
- { cause: loadErrors }
- )
- }
- throw new Error(`Failed to load native binding`)
-}
-
-const { Database, Statement } = nativeBinding
-export { Database }
-export { Statement }
diff --git a/bindings/javascript/package-lock.json b/bindings/javascript/package-lock.json
index e8c74d419..551080310 100644
--- a/bindings/javascript/package-lock.json
+++ b/bindings/javascript/package-lock.json
@@ -1,29 +1,63 @@
{
- "name": "@tursodatabase/database",
- "version": "0.1.5-pre.3",
+ "name": "javascript",
+ "version": "0.1.5-pre.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "@tursodatabase/database",
- "version": "0.1.5-pre.3",
+ "version": "0.1.5-pre.5",
+ "workspaces": [
+ "packages/common",
+ "packages/native",
+ "packages/browser"
+ ]
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "dev": true,
"license": "MIT",
- "devDependencies": {
- "@napi-rs/cli": "^3.0.4",
- "@napi-rs/wasm-runtime": "^1.0.1",
- "ava": "^6.0.1",
- "better-sqlite3": "^11.9.1",
- "typescript": "^5.9.2"
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
- "node": ">= 10"
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
}
},
"node_modules/@emnapi/core": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz",
"integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@emnapi/wasi-threads": "1.0.4",
@@ -34,7 +68,6 @@
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz",
"integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"tslib": "^2.4.0"
@@ -44,12 +77,28 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz",
"integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"tslib": "^2.4.0"
}
},
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz",
+ "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@inquirer/checkbox": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.0.tgz",
@@ -125,16 +174,6 @@
}
}
},
- "node_modules/@inquirer/core/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@inquirer/core/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -454,88 +493,17 @@
}
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true,
"license": "MIT"
},
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@isaacs/fs-minipass": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
- "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^7.0.4"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@mapbox/node-pre-gyp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz",
- "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "consola": "^3.2.3",
- "detect-libc": "^2.0.0",
- "https-proxy-agent": "^7.0.5",
- "node-fetch": "^2.6.7",
- "nopt": "^8.0.0",
- "semver": "^7.5.3",
- "tar": "^7.4.0"
- },
- "bin": {
- "node-pre-gyp": "bin/node-pre-gyp"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/@napi-rs/cli": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-3.0.4.tgz",
- "integrity": "sha512-ilbCI69DVDQcIUSUB504LM1+Nhvo0jKycWAzzPJ22YwUoWrru/w0+V5sfjPINgkshQ4Ykv+oZOJXk9Kg1ZBUvg==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-3.1.5.tgz",
+ "integrity": "sha512-Wn6ZPw27qJiEWglGjkaAa70AHuLtyPya6FvjINYJ5U20uvbRhoB0Ta2+bFTAFfUb9R+wvuFvog9JQdy65OmFAQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -547,9 +515,9 @@
"colorette": "^2.0.20",
"debug": "^4.4.0",
"emnapi": "^1.4.0",
+ "es-toolkit": "^1.39.8",
"find-up": "^7.0.0",
"js-yaml": "^4.1.0",
- "lodash-es": "^4.17.21",
"semver": "^7.7.1",
"typanion": "^3.14.0"
},
@@ -675,108 +643,6 @@
"@napi-rs/lzma-win32-x64-msvc": "1.4.4"
}
},
- "node_modules/@napi-rs/lzma-android-arm-eabi": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-android-arm-eabi/-/lzma-android-arm-eabi-1.4.4.tgz",
- "integrity": "sha512-smZtN41ebtYw+vxn1q3IXhns1hUzFNUcgHxknZKFQSKaybYZ4KxMiiBIw5UqJ9rw1dkaHqokcC1YeAfu8vfG2A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-android-arm64": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-android-arm64/-/lzma-android-arm64-1.4.4.tgz",
- "integrity": "sha512-s+h9bM3Z31FL0IPfWF4kBCebWxJBtpFvje6ikzmeUg1/jjWAP81IJC5j75zz5TEWt+Zf3Bip0uVlQhCZmqlpKA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-darwin-arm64": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-darwin-arm64/-/lzma-darwin-arm64-1.4.4.tgz",
- "integrity": "sha512-aF5wxA0SFlRalxeyz7TpmFuztHlG9D0qew+1gz0tiRs4gituT3CCsR0PSBZ2LbalTY/7RqmYP4ssLQus+p8tqg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-darwin-x64": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-darwin-x64/-/lzma-darwin-x64-1.4.4.tgz",
- "integrity": "sha512-80gD9kvXPPBz6V4C7SXcPo0o7ySlneDVRpebAHN1DubIEwhdrMFuqmtaATwT5MTraZSrQ4CHF275MQuwiHtlGw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-freebsd-x64": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-freebsd-x64/-/lzma-freebsd-x64-1.4.4.tgz",
- "integrity": "sha512-wd+jwYQRIzkGtUvInYLWSrqRtDatIvwNm/w9k43f+oABBsnP4veJkyKGGm4SQQa35Ki8IXVzYdGTa4eSTi+Org==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-linux-arm-gnueabihf": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-arm-gnueabihf/-/lzma-linux-arm-gnueabihf-1.4.4.tgz",
- "integrity": "sha512-KiMgBugjFQfgeZTebuBVHL8ta/nZ2cfzd0Jge0e0y/WX/p7ZkVyCox/TTu9EU2H9OeBAFKTRmIDoqhHlBbkqyA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@napi-rs/lzma-linux-arm64-gnu": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-arm64-gnu/-/lzma-linux-arm64-gnu-1.4.4.tgz",
@@ -811,91 +677,6 @@
"node": ">= 10"
}
},
- "node_modules/@napi-rs/lzma-linux-ppc64-gnu": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-ppc64-gnu/-/lzma-linux-ppc64-gnu-1.4.4.tgz",
- "integrity": "sha512-QzNVcCdq6j4LYOtLUDEyE9wg8tY8kmbQ6TZrqjYQUD2nebTW24lmzFhdeI3xzUzVN5rRt4js1UnL1cPCT5HrSw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-linux-riscv64-gnu": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-riscv64-gnu/-/lzma-linux-riscv64-gnu-1.4.4.tgz",
- "integrity": "sha512-7jpyKpBX0LpklkmGBzz1cQJ/QRN+E6h1xSZVeN6KCtLBrCd6LCX3owZMRzSYmdpI6Zr30DrWo0HOUZiKMzgzBg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-linux-s390x-gnu": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-s390x-gnu/-/lzma-linux-s390x-gnu-1.4.4.tgz",
- "integrity": "sha512-ngUxVZIytn2UHY92RnijtT11VhWO32mfa1LFX03GWMWdQl50bV/IqcZR0WYRWlBCd7DZrOf16AY2IR/lwovE7A==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-linux-x64-gnu": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.4.4.tgz",
- "integrity": "sha512-mUGH8hpWJU4FXhn61cD7sHTUEBiWU5JYOhh6ErCIZ0BOoBH/0kYPptfqvJA6G9EfVIcfbtYKxJYYtFC5sbf+eA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-linux-x64-musl": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-musl/-/lzma-linux-x64-musl-1.4.4.tgz",
- "integrity": "sha512-ysM4mYSfWGO2h8YZVn0GH7zMZX42hU0h7IomC4/oBJmAk5BIlOGnRB8XQmyz1A7neSi6aByjAlZmW4CrZlI9Uw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@napi-rs/lzma-wasm32-wasi": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/@napi-rs/lzma-wasm32-wasi/-/lzma-wasm32-wasi-1.4.4.tgz",
@@ -913,57 +694,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/@napi-rs/lzma-win32-arm64-msvc": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-win32-arm64-msvc/-/lzma-win32-arm64-msvc-1.4.4.tgz",
- "integrity": "sha512-GqoJu7iL7OTqkBQGLps7rXQHZ5sdcZF7tOY06rlYO03ZNkUCjhNpmkuUsPXVnGstqgoGwzMNW6TcSsO/YWotEw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-win32-ia32-msvc": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-win32-ia32-msvc/-/lzma-win32-ia32-msvc-1.4.4.tgz",
- "integrity": "sha512-cnExNqWKl0JkLcKlFVuqUrTuQsYP8nstWGT3fz7mPhgqHFOgGmd1l9tDFhqgul7Kt0QTddZRbKl6jlkV7DjSQw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/lzma-win32-x64-msvc": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/lzma-win32-x64-msvc/-/lzma-win32-x64-msvc-1.4.4.tgz",
- "integrity": "sha512-15SoQgMgktF73ZnLQPkzCwtxyQ+4VuD8n5Puis1H48QRjUNnXXpqTGFyWdLPdd14vcxbndgcYvJtSjOXTfNHiw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@napi-rs/tar": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@napi-rs/tar/-/tar-1.0.0.tgz",
@@ -992,108 +722,6 @@
"@napi-rs/tar-win32-x64-msvc": "1.0.0"
}
},
- "node_modules/@napi-rs/tar-android-arm-eabi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-android-arm-eabi/-/tar-android-arm-eabi-1.0.0.tgz",
- "integrity": "sha512-oEntU16IkWykPJnSwv/VIICzIt2SwEsz45z2Ab+EXOas10EB+pu0z31AiSNI5pr1CaJcadbf1JGMI9aOtbAuRQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-android-arm64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-android-arm64/-/tar-android-arm64-1.0.0.tgz",
- "integrity": "sha512-b2X7nQ/wH2VGzzl4KhVOR/gHqxIuqrUjMY8VKJYxAGdCrmUPRfc47kersiu6DG706kSv9T+BxeeUQvwqnXZRXQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-darwin-arm64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-darwin-arm64/-/tar-darwin-arm64-1.0.0.tgz",
- "integrity": "sha512-m1Ug1452/DOUbJGSuJuHRTUCBQOXY0arGqXCHuSiaQhBQQjgBhlbHWCv291gV8CytFYd5lvSyiG2gFUU26Qd7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-darwin-x64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-darwin-x64/-/tar-darwin-x64-1.0.0.tgz",
- "integrity": "sha512-1RiC53g1y4pxX7P2L9sbZcqsw6dfXvGnTNwXHDjg4ATZncZa7uoPUWa7aHAGcQm8ZBO4P0ICt2SHOepstDWWTg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-freebsd-x64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-freebsd-x64/-/tar-freebsd-x64-1.0.0.tgz",
- "integrity": "sha512-uLaYn+eO3ZY2ojbohdlRFcuqYP+j2alovtuLdFvCzzsArg4DSnmcJvEQ+I4l99lfyThYB1c8GA64oxSOfmn/UA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-linux-arm-gnueabihf": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-linux-arm-gnueabihf/-/tar-linux-arm-gnueabihf-1.0.0.tgz",
- "integrity": "sha512-PhGIaT45i1Fj5iY6NiWYTLPUOHb7rXiwnqKhco+IXOeIclaGcEVoAbhrLiLGQrfv9viLdyhzAxECoOr+zKnApw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@napi-rs/tar-linux-arm64-gnu": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@napi-rs/tar-linux-arm64-gnu/-/tar-linux-arm64-gnu-1.0.0.tgz",
@@ -1128,74 +756,6 @@
"node": ">= 10"
}
},
- "node_modules/@napi-rs/tar-linux-ppc64-gnu": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-linux-ppc64-gnu/-/tar-linux-ppc64-gnu-1.0.0.tgz",
- "integrity": "sha512-IbB4I8RFcvKI/zGsboUQPmlKoXfXgNOMiJw7Cbe7T1OBeYzDy6n/yEUEaG4zIbocxqjRVsF4ElrW1V/0Ihlqzg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-linux-s390x-gnu": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-linux-s390x-gnu/-/tar-linux-s390x-gnu-1.0.0.tgz",
- "integrity": "sha512-Tl4HSo07u3TLsNQ4KEVfYKdHVNfF/k0o5KQlyGnePiO34Kb+NfaqSKMspjSkrmXKEc0PjB+u9af3BZdTUwml4Q==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-linux-x64-gnu": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-linux-x64-gnu/-/tar-linux-x64-gnu-1.0.0.tgz",
- "integrity": "sha512-Xe57Yz4MKSeG6HGECiIHuBKFwAuqs2fzwblTdMd1CoSgaaUc/K/dKTDWZwPtjC0Hh5pM86K0WZuwggbsjmFGNg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-linux-x64-musl": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-linux-x64-musl/-/tar-linux-x64-musl-1.0.0.tgz",
- "integrity": "sha512-VA4RXspXyelNAtaFEf2ZLnTYXRILVlH20OGV0oqzuUcQzpwEwK2cJbYtYHK+yCYpxrNbEGsAwN+12LYJMW+NlA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@napi-rs/tar-wasm32-wasi": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@napi-rs/tar-wasm32-wasi/-/tar-wasm32-wasi-1.0.0.tgz",
@@ -1213,62 +773,10 @@
"node": ">=14.0.0"
}
},
- "node_modules/@napi-rs/tar-win32-arm64-msvc": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-win32-arm64-msvc/-/tar-win32-arm64-msvc-1.0.0.tgz",
- "integrity": "sha512-VdUjZK8jh6mvGRiurK3ms6Yt2hbBbtYjzKCn78Mnme2KGC585Kx1jXl7HShvreCgqh3r0162OSygoE7d/I0Jlw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-win32-ia32-msvc": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-win32-ia32-msvc/-/tar-win32-ia32-msvc-1.0.0.tgz",
- "integrity": "sha512-8d/4iRXROPXLoe+4FEqXkpgP2KD9A45VUf76WfT6nXZwzQuoh+9WCJNRPVs5vfXV1SMnG9Z32WNc2ivCq0+HZw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/tar-win32-x64-msvc": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/tar-win32-x64-msvc/-/tar-win32-x64-msvc-1.0.0.tgz",
- "integrity": "sha512-HHtL1g0niVa4xDvyfi9wQtCTDDKkhDlaOb3bmayTqWs29mk+pcVHBST3OdXaaViSaduqdG9meosU5sOj5iKQAQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@napi-rs/wasm-runtime": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.1.tgz",
- "integrity": "sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==",
- "dev": true,
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.3.tgz",
+ "integrity": "sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==",
"license": "MIT",
"dependencies": {
"@emnapi/core": "^1.4.5",
@@ -1301,91 +809,6 @@
"@napi-rs/wasm-tools-win32-x64-msvc": "1.0.0"
}
},
- "node_modules/@napi-rs/wasm-tools-android-arm-eabi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-android-arm-eabi/-/wasm-tools-android-arm-eabi-1.0.0.tgz",
- "integrity": "sha512-Ks0hplmrYatIjSi8XeTObCi0x13AOQD41IQXpBjrz+UK71gDkbxyLWO7B/ckuels3mC1DW3OCQCv+q0lPnaG/A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/wasm-tools-android-arm64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-android-arm64/-/wasm-tools-android-arm64-1.0.0.tgz",
- "integrity": "sha512-Ppu1/YGLSC/ohkOA8R5YfDh1dCuCHWJObu/BTorAY55YDXIiWy400CoungbYwoRT53K+ixNrg8/zRHnpuqwkRg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/wasm-tools-darwin-arm64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-darwin-arm64/-/wasm-tools-darwin-arm64-1.0.0.tgz",
- "integrity": "sha512-EUU7NvmmKASMLecu7hUHhv9XN2Thf8j+2/zCCMuFuAAlY+eZiOVfrajbZ/RE8CZ4oyfkb0bWFg/CQcmcXAatTw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/wasm-tools-darwin-x64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-darwin-x64/-/wasm-tools-darwin-x64-1.0.0.tgz",
- "integrity": "sha512-hlX21sqy0AEnmn2abarmCXV3fpyIQN+fKqeHNuawti9ZpaJCL6gZCtUGqpUxURjXNjXSI8rywInJE2YmeVQSJQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/wasm-tools-freebsd-x64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-freebsd-x64/-/wasm-tools-freebsd-x64-1.0.0.tgz",
- "integrity": "sha512-T9SOSfIgrdEGQzzquKMOfD3PF6TxG5hL2o5voZtLUALA0yjO+GnpFyv8tAcxKYd7ngWzzK5Uwk7e1z9PcsQZMg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@napi-rs/wasm-tools-linux-arm64-gnu": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-linux-arm64-gnu/-/wasm-tools-linux-arm64-gnu-1.0.0.tgz",
@@ -1420,40 +843,6 @@
"node": ">= 10"
}
},
- "node_modules/@napi-rs/wasm-tools-linux-x64-gnu": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-linux-x64-gnu/-/wasm-tools-linux-x64-gnu-1.0.0.tgz",
- "integrity": "sha512-wpRkiy0QBM/zpaGAn5I1HfddQul0vGrdlindT2UHtOYK1zvam524M6LJXBtmhBkXS5a4F2HZiZXns8Wuc7dq4w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/wasm-tools-linux-x64-musl": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-linux-x64-musl/-/wasm-tools-linux-x64-musl-1.0.0.tgz",
- "integrity": "sha512-Ua94ruWB18uKyIz/nj+by2ZxfBbFzbqiiD564ocBHGbrUffpR6Us74uVwxO7rImc/WvCfJqap9ezqmaTvmK7SA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@napi-rs/wasm-tools-wasm32-wasi": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-wasm32-wasi/-/wasm-tools-wasm32-wasi-1.0.0.tgz",
@@ -1471,95 +860,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/@napi-rs/wasm-tools-win32-arm64-msvc": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-win32-arm64-msvc/-/wasm-tools-win32-arm64-msvc-1.0.0.tgz",
- "integrity": "sha512-1kv+DM7z6c9OLcjMtO1/kfdxS5hwXtW1OLIHBU41dtKz5jD3quapYrCjB7AVEZh/JVM765UaLOl31huVucJjRw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/wasm-tools-win32-ia32-msvc": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-win32-ia32-msvc/-/wasm-tools-win32-ia32-msvc-1.0.0.tgz",
- "integrity": "sha512-OwcyXtU2Zi3YVHYjmomM3u7jRNPY1j+IPehqCVEqd60jOTOXRZNPGoAvOC7Lw6HX/RGzOJnIcJZbVfKrz5WN1g==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/wasm-tools-win32-x64-msvc": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-tools-win32-x64-msvc/-/wasm-tools-win32-x64-msvc-1.0.0.tgz",
- "integrity": "sha512-xat6gnp/G/WCe6U6HKzawotz9zpqsM5a+Dx+S0MPX4AKP7+oztC2/6tkp8KtOPT2bMRMekNntXadHKk0XqW61Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/@octokit/auth-token": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz",
@@ -1726,63 +1026,120 @@
"@octokit/openapi-types": "^25.1.0"
}
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "node_modules/@polka/url": {
+ "version": "1.0.0-next.29",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
+ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.50.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz",
+ "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
"optional": true,
- "engines": {
- "node": ">=14"
- }
+ "os": [
+ "linux"
+ ]
},
- "node_modules/@rollup/pluginutils": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz",
- "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==",
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.50.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz",
+ "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
+ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^4.0.2"
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "picocolors": "1.1.1",
+ "pretty-format": "^27.0.2"
},
"engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/@sindresorhus/merge-streams": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
- "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "node_modules/@testing-library/user-event": {
+ "version": "14.6.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz",
+ "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=18"
+ "node": ">=12",
+ "npm": ">=6"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "@testing-library/dom": ">=7.21.4"
}
},
+ "node_modules/@tursodatabase/database": {
+ "resolved": "packages/native",
+ "link": true
+ },
+ "node_modules/@tursodatabase/database-browser": {
+ "resolved": "packages/browser",
+ "link": true
+ },
+ "node_modules/@tursodatabase/database-common": {
+ "resolved": "packages/common",
+ "link": true
+ },
"node_modules/@tybys/wasm-util": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz",
"integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"tslib": "^2.4.0"
}
},
+ "node_modules/@types/aria-query": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/chai": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz",
+ "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/deep-eql": "*"
+ }
+ },
+ "node_modules/@types/deep-eql": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
@@ -1790,87 +1147,175 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@vercel/nft": {
- "version": "0.29.4",
- "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.4.tgz",
- "integrity": "sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==",
+ "node_modules/@types/node": {
+ "version": "24.3.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz",
+ "integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@mapbox/node-pre-gyp": "^2.0.0",
- "@rollup/pluginutils": "^5.1.3",
- "acorn": "^8.6.0",
- "acorn-import-attributes": "^1.9.5",
- "async-sema": "^3.1.1",
- "bindings": "^1.4.0",
- "estree-walker": "2.0.2",
- "glob": "^10.4.5",
- "graceful-fs": "^4.2.9",
- "node-gyp-build": "^4.2.2",
- "picomatch": "^4.0.2",
- "resolve-from": "^5.0.0"
- },
- "bin": {
- "nft": "out/cli.js"
- },
- "engines": {
- "node": ">=18"
+ "undici-types": "~7.10.0"
}
},
- "node_modules/abbrev": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz",
- "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "node_modules/@vitest/browser": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.2.4.tgz",
+ "integrity": "sha512-tJxiPrWmzH8a+w9nLKlQMzAKX/7VjFs50MWgcAj7p9XQ7AQ9/35fByFYptgPELyLw+0aixTnC4pUWV+APcZ/kw==",
"dev": true,
"license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
+ "dependencies": {
+ "@testing-library/dom": "^10.4.0",
+ "@testing-library/user-event": "^14.6.1",
+ "@vitest/mocker": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "magic-string": "^0.30.17",
+ "sirv": "^3.0.1",
+ "tinyrainbow": "^2.0.0",
+ "ws": "^8.18.2"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
},
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "dev": true,
- "license": "MIT",
"peerDependencies": {
- "acorn": "^8"
+ "playwright": "*",
+ "vitest": "3.2.4",
+ "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "playwright": {
+ "optional": true
+ },
+ "safaridriver": {
+ "optional": true
+ },
+ "webdriverio": {
+ "optional": true
+ }
}
},
- "node_modules/acorn-walk": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
- "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
+ "node_modules/@vitest/expect": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
+ "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
"dev": true,
"license": "MIT",
"dependencies": {
- "acorn": "^8.11.0"
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "chai": "^5.2.0",
+ "tinyrainbow": "^2.0.0"
},
- "engines": {
- "node": ">=0.4.0"
+ "funding": {
+ "url": "https://opencollective.com/vitest"
}
},
- "node_modules/agent-base": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
- "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "node_modules/@vitest/mocker": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
+ "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 14"
+ "dependencies": {
+ "@vitest/spy": "3.2.4",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.17"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/mocker/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
+ "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
+ "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "3.2.4",
+ "pathe": "^2.0.3",
+ "strip-literal": "^3.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
+ "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.4",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+ "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyspy": "^4.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
+ "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.4",
+ "loupe": "^3.1.4",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
}
},
"node_modules/ansi-escapes": {
@@ -1903,172 +1348,48 @@
}
},
"node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "node": ">=8"
}
},
"node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"dependencies": {
- "sprintf-js": "~1.0.2"
+ "dequal": "^2.0.3"
}
},
- "node_modules/array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arrgv": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz",
- "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/arrify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz",
- "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==",
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/async-sema": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz",
- "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/ava": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/ava/-/ava-6.4.1.tgz",
- "integrity": "sha512-vxmPbi1gZx9zhAjHBgw81w/iEDKcrokeRk/fqDTyA2DQygZ0o+dUGRHFOtX8RA5N0heGJTTsIk7+xYxitDb61Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vercel/nft": "^0.29.4",
- "acorn": "^8.15.0",
- "acorn-walk": "^8.3.4",
- "ansi-styles": "^6.2.1",
- "arrgv": "^1.0.2",
- "arrify": "^3.0.0",
- "callsites": "^4.2.0",
- "cbor": "^10.0.9",
- "chalk": "^5.4.1",
- "chunkd": "^2.0.1",
- "ci-info": "^4.3.0",
- "ci-parallel-vars": "^1.0.1",
- "cli-truncate": "^4.0.0",
- "code-excerpt": "^4.0.0",
- "common-path-prefix": "^3.0.0",
- "concordance": "^5.0.4",
- "currently-unhandled": "^0.4.1",
- "debug": "^4.4.1",
- "emittery": "^1.2.0",
- "figures": "^6.1.0",
- "globby": "^14.1.0",
- "ignore-by-default": "^2.1.0",
- "indent-string": "^5.0.0",
- "is-plain-object": "^5.0.0",
- "is-promise": "^4.0.0",
- "matcher": "^5.0.0",
- "memoize": "^10.1.0",
- "ms": "^2.1.3",
- "p-map": "^7.0.3",
- "package-config": "^5.0.0",
- "picomatch": "^4.0.2",
- "plur": "^5.1.0",
- "pretty-ms": "^9.2.0",
- "resolve-cwd": "^3.0.0",
- "stack-utils": "^2.0.6",
- "strip-ansi": "^7.1.0",
- "supertap": "^3.0.1",
- "temp-dir": "^3.0.0",
- "write-file-atomic": "^6.0.0",
- "yargs": "^17.7.2"
- },
- "bin": {
- "ava": "entrypoints/cli.mjs"
- },
- "engines": {
- "node": "^18.18 || ^20.8 || ^22 || ^23 || >=24"
- },
- "peerDependencies": {
- "@ava/typescript": "*"
- },
- "peerDependenciesMeta": {
- "@ava/typescript": {
- "optional": true
- }
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
"node_modules/before-after-hook": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz",
@@ -2076,132 +1397,31 @@
"dev": true,
"license": "Apache-2.0"
},
- "node_modules/better-sqlite3": {
- "version": "11.10.0",
- "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz",
- "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "bindings": "^1.5.0",
- "prebuild-install": "^7.1.1"
- }
- },
- "node_modules/bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "file-uri-to-path": "1.0.0"
- }
- },
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/blueimp-md5": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz",
- "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
"engines": {
"node": ">=8"
}
},
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/callsites": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.2.0.tgz",
- "integrity": "sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cbor": {
- "version": "10.0.9",
- "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.9.tgz",
- "integrity": "sha512-KEWYehb/vJkRmigctVQLsz73Us2RNnITo/wOwQV5AtZpLGH1r2PPlsNHdsX460YuHZCyhLklbYzAOuJfOeg34Q==",
+ "node_modules/chai": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
+ "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "nofilter": "^3.0.2"
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
},
"engines": {
- "node": ">=20"
- }
- },
- "node_modules/chalk": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
- "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": ">=18"
}
},
"node_modules/chardet": {
@@ -2211,61 +1431,14 @@
"dev": true,
"license": "MIT"
},
- "node_modules/chownr": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
- "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/chunkd": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz",
- "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/ci-info": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz",
- "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ci-parallel-vars": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz",
- "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cli-truncate": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
- "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
+ "node_modules/check-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
+ "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "slice-ansi": "^5.0.0",
- "string-width": "^7.0.0"
- },
"engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 16"
}
},
"node_modules/cli-width": {
@@ -2294,123 +1467,6 @@
"typanion": "*"
}
},
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/cliui/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/cliui/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cliui/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/code-excerpt": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz",
- "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "convert-to-spaces": "^2.0.1"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -2438,94 +1494,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/common-path-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
- "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/concordance": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz",
- "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "date-time": "^3.1.0",
- "esutils": "^2.0.3",
- "fast-diff": "^1.2.0",
- "js-string-escape": "^1.0.1",
- "lodash": "^4.17.15",
- "md5-hex": "^3.0.1",
- "semver": "^7.3.2",
- "well-known-symbols": "^2.0.0"
- },
- "engines": {
- "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14"
- }
- },
- "node_modules/consola": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
- "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.18.0 || >=16.10.0"
- }
- },
- "node_modules/convert-to-spaces": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz",
- "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-find-index": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/date-time": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz",
- "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "time-zone": "^1.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/debug": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
@@ -2544,62 +1512,33 @@
}
}
},
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "node_modules/deep-eql": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+ "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=4.0.0"
+ "node": ">=6"
}
},
- "node_modules/detect-libc": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
- "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "node_modules/dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
"dev": true,
"license": "MIT"
},
- "node_modules/emittery": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.2.0.tgz",
- "integrity": "sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
- }
- },
"node_modules/emnapi": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/emnapi/-/emnapi-1.4.5.tgz",
@@ -2615,85 +1554,74 @@
}
}
},
- "node_modules/emoji-regex": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
- "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
"dev": true,
"license": "MIT"
},
- "node_modules/end-of-stream": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
- "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "node_modules/es-toolkit": {
+ "version": "1.39.10",
+ "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.39.10.tgz",
+ "integrity": "sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
- }
+ "workspaces": [
+ "docs",
+ "benchmarks"
+ ]
},
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "node_modules/esbuild": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz",
+ "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "license": "BSD-2-Clause",
"bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=4"
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.9",
+ "@esbuild/android-arm": "0.25.9",
+ "@esbuild/android-arm64": "0.25.9",
+ "@esbuild/android-x64": "0.25.9",
+ "@esbuild/darwin-arm64": "0.25.9",
+ "@esbuild/darwin-x64": "0.25.9",
+ "@esbuild/freebsd-arm64": "0.25.9",
+ "@esbuild/freebsd-x64": "0.25.9",
+ "@esbuild/linux-arm": "0.25.9",
+ "@esbuild/linux-arm64": "0.25.9",
+ "@esbuild/linux-ia32": "0.25.9",
+ "@esbuild/linux-loong64": "0.25.9",
+ "@esbuild/linux-mips64el": "0.25.9",
+ "@esbuild/linux-ppc64": "0.25.9",
+ "@esbuild/linux-riscv64": "0.25.9",
+ "@esbuild/linux-s390x": "0.25.9",
+ "@esbuild/linux-x64": "0.25.9",
+ "@esbuild/netbsd-arm64": "0.25.9",
+ "@esbuild/netbsd-x64": "0.25.9",
+ "@esbuild/openbsd-arm64": "0.25.9",
+ "@esbuild/openbsd-x64": "0.25.9",
+ "@esbuild/openharmony-arm64": "0.25.9",
+ "@esbuild/sunos-x64": "0.25.9",
+ "@esbuild/win32-arm64": "0.25.9",
+ "@esbuild/win32-ia32": "0.25.9",
+ "@esbuild/win32-x64": "0.25.9"
}
},
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "node_modules/expect-type": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
+ "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==",
"dev": true,
- "license": "MIT"
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "license": "BSD-2-Clause",
+ "license": "Apache-2.0",
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-template": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
- "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
- "dev": true,
- "license": "(MIT OR WTFPL)",
- "engines": {
- "node": ">=6"
+ "node": ">=12.0.0"
}
},
"node_modules/external-editor": {
@@ -2728,74 +1656,22 @@
],
"license": "MIT"
},
- "node_modules/fast-diff": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
- "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
"engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fastq": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
- "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/figures": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
- "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-unicode-supported": "^2.0.0"
+ "node": ">=12.0.0"
},
- "engines": {
- "node": ">=18"
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
}
},
"node_modules/find-up": {
@@ -2816,19 +1692,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/find-up-simple": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
- "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/find-up/node_modules/unicorn-magic": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
@@ -2842,136 +1705,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-east-asian-width": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
- "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/github-from-package": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
- "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/globby": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
- "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sindresorhus/merge-streams": "^2.1.0",
- "fast-glob": "^3.3.3",
- "ignore": "^7.0.3",
- "path-type": "^6.0.0",
- "slash": "^5.1.0",
- "unicorn-magic": "^0.3.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/https-proxy-agent": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
- "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -2985,230 +1718,13 @@
"node": ">=0.10.0"
}
},
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/ignore-by-default": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz",
- "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10 <11 || >=12 <13 || >=14"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indent-string": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
- "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/irregular-plurals": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz",
- "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
- "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-promise": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
- "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+ "node_modules/js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
"dev": true,
"license": "MIT"
},
- "node_modules/is-unicode-supported": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
- "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/js-string-escape": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
- "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/load-json-file": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz",
- "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/locate-path": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
@@ -3225,206 +1741,42 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "node_modules/loupe": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
+ "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
"dev": true,
"license": "MIT"
},
- "node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/matcher": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz",
- "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^5.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/md5-hex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz",
- "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "blueimp-md5": "^2.10.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/memoize": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/memoize/-/memoize-10.1.0.tgz",
- "integrity": "sha512-MMbFhJzh4Jlg/poq1si90XRlTZRDHVqdlz2mPyGJ6kqMpyHUyVpDd5gpFAvVehW64+RA1eKE9Yt8aSLY7w2Kgg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-function": "^5.0.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/memoize?sponsor=1"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/mimic-function": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
- "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/minizlib": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
- "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minipass": "^7.1.2"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/mkdirp": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
- "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
"dev": true,
"license": "MIT",
"bin": {
- "mkdirp": "dist/cjs/src/bin.js"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "lz-string": "bin/bin.js"
}
},
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "node_modules/magic-string": {
+ "version": "0.30.18",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz",
+ "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/ms": {
"version": "2.1.3",
@@ -3443,93 +1795,23 @@
"node": "^18.17.0 || >=20.5.0"
}
},
- "node_modules/napi-build-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
- "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
- "license": "MIT"
- },
- "node_modules/node-abi": {
- "version": "3.75.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz",
- "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.3.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
- }
- },
- "node_modules/node-gyp-build": {
- "version": "4.8.4",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
- "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
- "dev": true,
+ ],
"license": "MIT",
"bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/nofilter": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz",
- "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.19"
- }
- },
- "node_modules/nopt": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz",
- "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "abbrev": "^3.0.0"
- },
- "bin": {
- "nopt": "bin/nopt.js"
+ "nanoid": "bin/nanoid.cjs"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/os-tmpdir": {
@@ -3574,56 +1856,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-map": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz",
- "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/package-config": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/package-config/-/package-config-5.0.0.tgz",
- "integrity": "sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up-simple": "^1.0.0",
- "load-json-file": "^7.0.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
- "dev": true,
- "license": "BlueOak-1.0.0"
- },
- "node_modules/parse-ms": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
- "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/path-exists": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
@@ -3634,45 +1866,29 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pathval": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
+ "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">= 14.16"
}
},
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-type": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
- "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "4.0.3",
@@ -3687,217 +1903,130 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/plur": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz",
- "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==",
+ "node_modules/playwright": {
+ "version": "1.55.0",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz",
+ "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"dependencies": {
- "irregular-plurals": "^3.3.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/prebuild-install": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
- "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "detect-libc": "^2.0.0",
- "expand-template": "^2.0.3",
- "github-from-package": "0.0.0",
- "minimist": "^1.2.3",
- "mkdirp-classic": "^0.5.3",
- "napi-build-utils": "^2.0.0",
- "node-abi": "^3.3.0",
- "pump": "^3.0.0",
- "rc": "^1.2.7",
- "simple-get": "^4.0.0",
- "tar-fs": "^2.0.0",
- "tunnel-agent": "^0.6.0"
+ "playwright-core": "1.55.0"
},
"bin": {
- "prebuild-install": "bin.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/pretty-ms": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz",
- "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parse-ms": "^4.0.0"
+ "playwright": "cli.js"
},
"engines": {
"node": ">=18"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
}
},
- "node_modules/pump": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
- "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "node_modules/playwright-core": {
+ "version": "1.55.0",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz",
+ "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
{
"type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
+ "url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "dev": true,
"license": "MIT"
},
- "node_modules/rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "node_modules/rollup": {
+ "version": "4.50.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz",
+ "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==",
"dev": true,
- "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "license": "MIT",
"dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
+ "@types/estree": "1.0.8"
},
"bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">= 6"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-from": "^5.0.0"
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
},
- "engines": {
- "node": ">=8"
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.50.1",
+ "@rollup/rollup-android-arm64": "4.50.1",
+ "@rollup/rollup-darwin-arm64": "4.50.1",
+ "@rollup/rollup-darwin-x64": "4.50.1",
+ "@rollup/rollup-freebsd-arm64": "4.50.1",
+ "@rollup/rollup-freebsd-x64": "4.50.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.50.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.50.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.50.1",
+ "@rollup/rollup-linux-arm64-musl": "4.50.1",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.50.1",
+ "@rollup/rollup-linux-ppc64-gnu": "4.50.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.50.1",
+ "@rollup/rollup-linux-riscv64-musl": "4.50.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.50.1",
+ "@rollup/rollup-linux-x64-gnu": "4.50.1",
+ "@rollup/rollup-linux-x64-musl": "4.50.1",
+ "@rollup/rollup-openharmony-arm64": "4.50.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.50.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.50.1",
+ "@rollup/rollup-win32-x64-msvc": "4.50.1",
+ "fsevents": "~2.3.2"
}
},
- "node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -3918,44 +2047,12 @@
"node": ">=10"
}
},
- "node_modules/serialize-error": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
- "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.13.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/shebang-command": {
+ "node_modules/siginfo": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
+ "license": "ISC"
},
"node_modules/signal-exit": {
"version": "4.1.0",
@@ -3970,336 +2067,117 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/simple-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
- "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/simple-get": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
- "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "decompress-response": "^6.0.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
- "node_modules/slash": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
- "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/slice-ansi": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
- "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+ "node_modules/sirv": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
+ "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-styles": "^6.0.0",
- "is-fullwidth-code-point": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/stack-utils": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-width": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
- "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^10.3.0",
- "get-east-asian-width": "^1.0.0",
- "strip-ansi": "^7.1.0"
+ "@polka/url": "^1.0.0-next.24",
+ "mrmime": "^2.0.0",
+ "totalist": "^3.0.0"
},
"engines": {
"node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
- "dev": true,
- "license": "MIT",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/supertap": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz",
- "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==",
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "indent-string": "^5.0.0",
- "js-yaml": "^3.14.1",
- "serialize-error": "^7.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
+ "license": "MIT"
},
- "node_modules/tar": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
- "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
+ "node_modules/std-env": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
+ "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "@isaacs/fs-minipass": "^4.0.0",
- "chownr": "^3.0.0",
- "minipass": "^7.1.2",
- "minizlib": "^3.0.1",
- "mkdirp": "^3.0.1",
- "yallist": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- }
+ "license": "MIT"
},
- "node_modules/tar-fs": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz",
- "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "node_modules/tar-fs/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/temp-dir": {
+ "node_modules/strip-literal": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
- "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
+ "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=14.16"
+ "dependencies": {
+ "js-tokens": "^9.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
}
},
- "node_modules/time-zone": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz",
- "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==",
+ "node_modules/tinybench": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyexec": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinypool": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
+ "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=4"
+ "node": "^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/tinyrainbow": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
+ "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz",
+ "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
}
},
"node_modules/tmp": {
@@ -4315,46 +2193,22 @@
"node": ">=0.6.0"
}
},
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "node_modules/totalist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
"engines": {
- "node": ">=8.0"
+ "node": ">=6"
}
},
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
"license": "0BSD"
},
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/typanion": {
"version": "3.14.0",
"resolved": "https://registry.npmjs.org/typanion/-/typanion-3.14.0.tgz",
@@ -4365,19 +2219,6 @@
"website"
]
},
- "node_modules/type-fest": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/typescript": {
"version": "5.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
@@ -4392,18 +2233,12 @@
"node": ">=14.17"
}
},
- "node_modules/unicorn-magic": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
- "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "node_modules/undici-types": {
+ "version": "7.10.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz",
+ "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "license": "MIT"
},
"node_modules/universal-user-agent": {
"version": "7.0.3",
@@ -4412,313 +2247,214 @@
"dev": true,
"license": "ISC"
},
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "dev": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/well-known-symbols": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz",
- "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "node_modules/vite": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.5.tgz",
+ "integrity": "sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
+ "esbuild": "^0.25.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
},
"bin": {
- "node-which": "bin/node-which"
+ "vite": "bin/vite.js"
},
"engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
+ "node": "^20.19.0 || >=22.12.0"
},
"funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
}
},
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "node_modules/vite-node": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
+ "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "cac": "^6.7.14",
+ "debug": "^4.4.1",
+ "es-module-lexer": "^1.7.0",
+ "pathe": "^2.0.3",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
},
"engines": {
- "node": ">=10"
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
},
"funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "url": "https://opencollective.com/vitest"
}
},
- "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/vitest": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
+ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "color-convert": "^2.0.1"
+ "@types/chai": "^5.2.2",
+ "@vitest/expect": "3.2.4",
+ "@vitest/mocker": "3.2.4",
+ "@vitest/pretty-format": "^3.2.4",
+ "@vitest/runner": "3.2.4",
+ "@vitest/snapshot": "3.2.4",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "chai": "^5.2.0",
+ "debug": "^4.4.1",
+ "expect-type": "^1.2.1",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.2",
+ "std-env": "^3.9.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.14",
+ "tinypool": "^1.1.1",
+ "tinyrainbow": "^2.0.0",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
+ "vite-node": "3.2.4",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
},
"engines": {
- "node": ">=8"
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "3.2.4",
+ "@vitest/ui": "3.2.4",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/debug": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
}
},
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "node_modules/why-is-node-running": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
+ },
+ "bin": {
+ "why-is-node-running": "cli.js"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/wrap-ansi/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/write-file-atomic": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz",
- "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
- "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "node_modules/ws": {
+ "version": "8.18.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/yargs/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
+ "node": ">=10.0.0"
},
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
},
- "engines": {
- "node": ">=8"
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
}
},
"node_modules/yocto-queue": {
@@ -4746,6 +2482,53 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "packages/browser": {
+ "name": "@tursodatabase/database-browser",
+ "version": "0.1.5-pre.5",
+ "license": "MIT",
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^1.0.3",
+ "@tursodatabase/database-common": "^0.1.5-pre.5"
+ },
+ "devDependencies": {
+ "@napi-rs/cli": "^3.1.5",
+ "@vitest/browser": "^3.2.4",
+ "playwright": "^1.55.0",
+ "typescript": "^5.9.2",
+ "vitest": "^3.2.4"
+ }
+ },
+ "packages/common": {
+ "name": "@tursodatabase/database-common",
+ "version": "0.1.5-pre.5",
+ "license": "MIT",
+ "devDependencies": {
+ "typescript": "^5.9.2"
+ }
+ },
+ "packages/core": {
+ "name": "@tursodatabase/database-core",
+ "version": "0.1.5-pre.3",
+ "extraneous": true,
+ "license": "MIT",
+ "devDependencies": {
+ "typescript": "^5.9.2"
+ }
+ },
+ "packages/native": {
+ "name": "@tursodatabase/database",
+ "version": "0.1.5-pre.5",
+ "license": "MIT",
+ "dependencies": {
+ "@tursodatabase/database-common": "^0.1.5-pre.5"
+ },
+ "devDependencies": {
+ "@napi-rs/cli": "^3.1.5",
+ "@types/node": "^24.3.1",
+ "typescript": "^5.9.2",
+ "vitest": "^3.2.4"
+ }
}
}
-}
\ No newline at end of file
+}
diff --git a/bindings/javascript/package.browser.json b/bindings/javascript/package.browser.json
deleted file mode 100644
index 0242ed5ad..000000000
--- a/bindings/javascript/package.browser.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "name": "@tursodatabase/database-browser",
- "version": "0.1.5-pre.2",
- "repository": {
- "type": "git",
- "url": "https://github.com/tursodatabase/turso"
- },
- "description": "The Turso database library specifically for browser/web environment",
- "module": "./dist/promise.js",
- "main": "./dist/promise.js",
- "type": "module",
- "exports": {
- ".": "./dist/promise.js",
- "./compat": "./dist/compat.js"
- },
- "files": [
- "browser.js",
- "index.js",
- "index.d.ts",
- "dist/**"
- ],
- "types": "index.d.ts",
- "napi": {
- "binaryName": "turso",
- "targets": [
- "wasm32-wasip1-threads"
- ]
- },
- "license": "MIT",
- "devDependencies": {
- "@napi-rs/cli": "^3.0.4",
- "@napi-rs/wasm-runtime": "^1.0.1",
- "ava": "^6.0.1",
- "better-sqlite3": "^11.9.1",
- "typescript": "^5.9.2"
- },
- "ava": {
- "timeout": "3m"
- },
- "engines": {
- "node": ">= 10"
- },
- "scripts": {
- "artifacts": "napi artifacts",
- "build": "npm exec tsc && napi build --platform --release --esm",
- "build:debug": "npm exec tsc && napi build --platform",
- "prepublishOnly": "npm exec tsc && napi prepublish -t npm --skip-optional-publish",
- "test": "true",
- "universal": "napi universalize",
- "version": "napi version"
- },
- "packageManager": "yarn@4.9.2",
- "imports": {
- "#entry-point": {
- "types": "./index.d.ts",
- "browser": "./browser.js"
- }
- }
-}
diff --git a/bindings/javascript/package.json b/bindings/javascript/package.json
index 894f7e551..70213de55 100644
--- a/bindings/javascript/package.json
+++ b/bindings/javascript/package.json
@@ -1,64 +1,13 @@
{
- "name": "@tursodatabase/database",
- "version": "0.1.5-pre.3",
- "repository": {
- "type": "git",
- "url": "https://github.com/tursodatabase/turso"
- },
- "description": "The Turso database library",
- "module": "./dist/promise.js",
- "main": "./dist/promise.js",
- "type": "module",
- "exports": {
- ".": "./dist/promise.js",
- "./compat": "./dist/compat.js"
- },
- "files": [
- "browser.js",
- "index.js",
- "index.d.ts",
- "dist/**"
- ],
- "types": "index.d.ts",
- "napi": {
- "binaryName": "turso",
- "targets": [
- "x86_64-unknown-linux-gnu",
- "x86_64-pc-windows-msvc",
- "universal-apple-darwin",
- "aarch64-unknown-linux-gnu",
- "wasm32-wasip1-threads"
- ]
- },
- "license": "MIT",
- "devDependencies": {
- "@napi-rs/cli": "^3.0.4",
- "@napi-rs/wasm-runtime": "^1.0.1",
- "ava": "^6.0.1",
- "better-sqlite3": "^11.9.1",
- "typescript": "^5.9.2"
- },
- "ava": {
- "timeout": "3m"
- },
- "engines": {
- "node": ">= 10"
- },
"scripts": {
- "artifacts": "napi artifacts",
- "build": "npm exec tsc && napi build --platform --release --esm",
- "build:debug": "npm exec tsc && napi build --platform",
- "prepublishOnly": "npm exec tsc && napi prepublish -t npm",
- "test": "true",
- "universal": "napi universalize",
- "version": "napi version"
+ "build": "npm run build --workspaces",
+ "tsc-build": "npm run tsc-build --workspaces",
+ "test": "npm run test --workspaces"
},
- "packageManager": "yarn@4.9.2",
- "imports": {
- "#entry-point": {
- "types": "./index.d.ts",
- "browser": "./browser.js",
- "node": "./index.js"
- }
- }
-}
\ No newline at end of file
+ "workspaces": [
+ "packages/common",
+ "packages/native",
+ "packages/browser"
+ ],
+ "version": "0.1.5-pre.5"
+}
diff --git a/bindings/javascript/packages/browser/README.md b/bindings/javascript/packages/browser/README.md
new file mode 100644
index 000000000..e443f495e
--- /dev/null
+++ b/bindings/javascript/packages/browser/README.md
@@ -0,0 +1,124 @@
+
+
Turso Database for JavaScript in Browser
+
+
+
+
+
+
+
+
+
+
+---
+
+## About
+
+This package is the Turso embedded database library for JavaScript in Browser.
+
+> **⚠️ Warning:** This software is ALPHA, only use for development, testing, and experimentation. We are working to make it production ready, but do not use it for critical data right now.
+
+## Features
+
+- **SQLite compatible:** SQLite query language and file format support ([status](https://github.com/tursodatabase/turso/blob/main/COMPAT.md)).
+- **In-process**: No network overhead, runs directly in your Node.js process
+- **TypeScript support**: Full TypeScript definitions included
+
+## Installation
+
+```bash
+npm install @tursodatabase/database-browser
+```
+
+## Getting Started
+
+### In-Memory Database
+
+```javascript
+import { connect } from '@tursodatabase/database-browser';
+
+// Create an in-memory database
+const db = await connect(':memory:');
+
+// Create a table
+await db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)');
+
+// Insert data
+const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
+await insert.run('Alice', 'alice@example.com');
+await insert.run('Bob', 'bob@example.com');
+
+// Query data
+const users = await db.prepare('SELECT * FROM users').all();
+console.log(users);
+// Output: [
+// { id: 1, name: 'Alice', email: 'alice@example.com' },
+// { id: 2, name: 'Bob', email: 'bob@example.com' }
+// ]
+```
+
+### File-Based Database
+
+```javascript
+import { connect } from '@tursodatabase/database-browser';
+
+// Create or open a database file
+const db = await connect('my-database.db');
+
+// Create a table
+await db.exec(`
+ CREATE TABLE IF NOT EXISTS posts (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ title TEXT NOT NULL,
+ content TEXT,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ )
+`);
+
+// Insert a post
+const insertPost = db.prepare('INSERT INTO posts (title, content) VALUES (?, ?)');
+const result = await insertPost.run('Hello World', 'This is my first blog post!');
+
+console.log(`Inserted post with ID: ${result.lastInsertRowid}`);
+```
+
+### Transactions
+
+```javascript
+import { connect } from '@tursodatabase/database-browser';
+
+const db = await connect('transactions.db');
+
+// Using transactions for atomic operations
+const transaction = db.transaction(async (users) => {
+ const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
+ for (const user of users) {
+ await insert.run(user.name, user.email);
+ }
+});
+
+// Execute transaction
+await transaction([
+ { name: 'Alice', email: 'alice@example.com' },
+ { name: 'Bob', email: 'bob@example.com' }
+]);
+```
+
+## API Reference
+
+For complete API documentation, see [JavaScript API Reference](../../../../docs/javascript-api-reference.md).
+
+## Related Packages
+
+* The [@tursodatabase/serverless](https://www.npmjs.com/package/@tursodatabase/serverless) package provides a serverless driver with the same API.
+* The [@tursodatabase/sync](https://www.npmjs.com/package/@tursodatabase/sync) package provides bidirectional sync between a local Turso database and Turso Cloud.
+
+## License
+
+This project is licensed under the [MIT license](../../LICENSE.md).
+
+## Support
+
+- [GitHub Issues](https://github.com/tursodatabase/turso/issues)
+- [Documentation](https://docs.turso.tech)
+- [Discord Community](https://tur.so/discord)
diff --git a/bindings/javascript/turso.wasi-browser.js b/bindings/javascript/packages/browser/index.js
similarity index 60%
rename from bindings/javascript/turso.wasi-browser.js
rename to bindings/javascript/packages/browser/index.js
index b17db8b4d..be8564969 100644
--- a/bindings/javascript/turso.wasi-browser.js
+++ b/bindings/javascript/packages/browser/index.js
@@ -1,7 +1,7 @@
import {
createOnMessage as __wasmCreateOnMessageForFsProxy,
getDefaultContext as __emnapiGetDefaultContext,
- instantiateNapiModuleSync as __emnapiInstantiateNapiModuleSync,
+ instantiateNapiModule as __emnapiInstantiateNapiModule,
WASI as __WASI,
} from '@napi-rs/wasm-runtime'
@@ -23,19 +23,25 @@ const __sharedMemory = new WebAssembly.Memory({
const __wasmFile = await fetch(__wasmUrl).then((res) => res.arrayBuffer())
+export let MainWorker = null;
+
+function panic(name) {
+ throw new Error(`method ${name} must be invoked only from the main thread`);
+}
+
const {
instance: __napiInstance,
module: __wasiModule,
napiModule: __napiModule,
-} = __emnapiInstantiateNapiModuleSync(__wasmFile, {
+} = await __emnapiInstantiateNapiModule(__wasmFile, {
context: __emnapiContext,
- asyncWorkPoolSize: 4,
+ asyncWorkPoolSize: 1,
wasi: __wasi,
onCreateWorker() {
- const worker = new Worker(new URL('./wasi-worker-browser.mjs', import.meta.url), {
+ const worker = new Worker(new URL('./worker.mjs', import.meta.url), {
type: 'module',
})
-
+ MainWorker = worker;
return worker
},
overwriteImports(importObject) {
@@ -44,6 +50,13 @@ const {
...importObject.napi,
...importObject.emnapi,
memory: __sharedMemory,
+ is_web_worker: () => false,
+ lookup_file: () => panic("lookup_file"),
+ read: () => panic("read"),
+ write: () => panic("write"),
+ sync: () => panic("sync"),
+ truncate: () => panic("truncate"),
+ size: () => panic("size"),
}
return importObject
},
@@ -57,4 +70,8 @@ const {
})
export default __napiModule.exports
export const Database = __napiModule.exports.Database
+export const Opfs = __napiModule.exports.Opfs
+export const OpfsFile = __napiModule.exports.OpfsFile
export const Statement = __napiModule.exports.Statement
+export const connect = __napiModule.exports.connect
+export const initThreadPool = __napiModule.exports.initThreadPool
diff --git a/bindings/javascript/packages/browser/package.json b/bindings/javascript/packages/browser/package.json
new file mode 100644
index 000000000..5475fd25b
--- /dev/null
+++ b/bindings/javascript/packages/browser/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "@tursodatabase/database-browser",
+ "version": "0.1.5-pre.5",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/tursodatabase/turso"
+ },
+ "type": "module",
+ "license": "MIT",
+ "main": "dist/promise.js",
+ "packageManager": "yarn@4.9.2",
+ "files": [
+ "index.js",
+ "worker.mjs",
+ "turso.wasm32-wasi.wasm",
+ "dist/**",
+ "README.md"
+ ],
+ "devDependencies": {
+ "@napi-rs/cli": "^3.1.5",
+ "@vitest/browser": "^3.2.4",
+ "playwright": "^1.55.0",
+ "typescript": "^5.9.2",
+ "vitest": "^3.2.4"
+ },
+ "scripts": {
+ "napi-build": "napi build --features browser --release --platform --target wasm32-wasip1-threads --no-js --manifest-path ../../Cargo.toml --output-dir . && rm index.d.ts turso.wasi* wasi* browser.js",
+ "tsc-build": "npm exec tsc",
+ "build": "npm run napi-build && npm run tsc-build",
+ "test": "CI=1 vitest --browser=chromium --run && CI=1 vitest --browser=firefox --run"
+ },
+ "napi": {
+ "binaryName": "turso",
+ "targets": [
+ "wasm32-wasip1-threads"
+ ]
+ },
+ "imports": {
+ "#index": "./index.js"
+ },
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^1.0.3",
+ "@tursodatabase/database-common": "^0.1.5-pre.5"
+ }
+}
diff --git a/bindings/javascript/packages/browser/promise.test.ts b/bindings/javascript/packages/browser/promise.test.ts
new file mode 100644
index 000000000..87bd130be
--- /dev/null
+++ b/bindings/javascript/packages/browser/promise.test.ts
@@ -0,0 +1,95 @@
+import { expect, test, afterEach } from 'vitest'
+import { connect } from './promise.js'
+
+test('in-memory db', async () => {
+ const db = await connect(":memory:");
+ await db.exec("CREATE TABLE t(x)");
+ await db.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const stmt = db.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ const rows = await stmt.all([1]);
+ expect(rows).toEqual([{ x: 1 }, { x: 3 }]);
+})
+
+test('on-disk db', async () => {
+ const path = `test-${(Math.random() * 10000) | 0}.db`;
+ const db1 = await connect(path);
+ await db1.exec("CREATE TABLE t(x)");
+ await db1.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const stmt1 = db1.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ expect(stmt1.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows1 = await stmt1.all([1]);
+ expect(rows1).toEqual([{ x: 1 }, { x: 3 }]);
+ await db1.close();
+ stmt1.close();
+
+ const db2 = await connect(path);
+ const stmt2 = db2.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ expect(stmt2.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows2 = await stmt2.all([1]);
+ expect(rows2).toEqual([{ x: 1 }, { x: 3 }]);
+ db2.close();
+})
+
+test('attach', async () => {
+ const path1 = `test-${(Math.random() * 10000) | 0}.db`;
+ const path2 = `test-${(Math.random() * 10000) | 0}.db`;
+ const db1 = await connect(path1);
+ await db1.exec("CREATE TABLE t(x)");
+ await db1.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const db2 = await connect(path2);
+ await db2.exec("CREATE TABLE q(x)");
+ await db2.exec("INSERT INTO q VALUES (4), (5), (6)");
+
+ await db1.exec(`ATTACH '${path2}' as secondary`);
+
+ const stmt = db1.prepare("SELECT * FROM t UNION ALL SELECT * FROM secondary.q");
+ expect(stmt.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows = await stmt.all([1]);
+ expect(rows).toEqual([{ x: 1 }, { x: 2 }, { x: 3 }, { x: 4 }, { x: 5 }, { x: 6 }]);
+})
+
+test('blobs', async () => {
+ const db = await connect(":memory:");
+ const rows = await db.prepare("SELECT x'1020' as x").all();
+ expect(rows).toEqual([{ x: new Uint8Array([16, 32]) }])
+})
+
+
+test('example-1', async () => {
+ const db = await connect(':memory:');
+ await db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)');
+
+ const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
+ await insert.run('Alice', 'alice@example.com');
+ await insert.run('Bob', 'bob@example.com');
+
+ const users = await db.prepare('SELECT * FROM users').all();
+ expect(users).toEqual([
+ { id: 1, name: 'Alice', email: 'alice@example.com' },
+ { id: 2, name: 'Bob', email: 'bob@example.com' }
+ ]);
+})
+
+test('example-2', async () => {
+ const db = await connect(':memory:');
+ await db.exec('CREATE TABLE users (name, email)');
+ // Using transactions for atomic operations
+ const transaction = db.transaction(async (users) => {
+ const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
+ for (const user of users) {
+ await insert.run(user.name, user.email);
+ }
+ });
+
+ // Execute transaction
+ await transaction([
+ { name: 'Alice', email: 'alice@example.com' },
+ { name: 'Bob', email: 'bob@example.com' }
+ ]);
+
+ const rows = await db.prepare('SELECT * FROM users').all();
+ expect(rows).toEqual([
+ { name: 'Alice', email: 'alice@example.com' },
+ { name: 'Bob', email: 'bob@example.com' }
+ ]);
+})
\ No newline at end of file
diff --git a/bindings/javascript/packages/browser/promise.ts b/bindings/javascript/packages/browser/promise.ts
new file mode 100644
index 000000000..8f713f958
--- /dev/null
+++ b/bindings/javascript/packages/browser/promise.ts
@@ -0,0 +1,78 @@
+import { DatabasePromise, NativeDatabase, DatabaseOpts, SqliteError } from "@tursodatabase/database-common"
+import { connect as nativeConnect, initThreadPool, MainWorker } from "#index";
+
+let workerRequestId = 0;
+class Database extends DatabasePromise {
+ files: string[];
+ constructor(db: NativeDatabase, files: string[], opts: DatabaseOpts = {}) {
+ super(db, opts)
+ this.files = files;
+ }
+ async close() {
+ let currentId = workerRequestId;
+ workerRequestId += this.files.length;
+
+ let tasks = [];
+ for (const file of this.files) {
+ (MainWorker as any).postMessage({ __turso__: "unregister", path: file, id: currentId });
+ tasks.push(waitFor(currentId));
+ currentId += 1;
+ }
+ await Promise.all(tasks);
+ this.db.close();
+ }
+}
+
+function waitFor(id: number): Promise {
+ let waitResolve, waitReject;
+ const callback = msg => {
+ if (msg.data.id == id) {
+ if (msg.data.error != null) {
+ waitReject(msg.data.error)
+ } else {
+ waitResolve()
+ }
+ cleanup();
+ }
+ };
+ const cleanup = () => (MainWorker as any).removeEventListener("message", callback);
+
+ (MainWorker as any).addEventListener("message", callback);
+ const result = new Promise((resolve, reject) => {
+ waitResolve = resolve;
+ waitReject = reject;
+ });
+ return result;
+}
+
+/**
+ * Creates a new database connection asynchronously.
+ *
+ * @param {string} path - Path to the database file.
+ * @param {Object} opts - Options for database behavior.
+ * @returns {Promise} - A promise that resolves to a Database instance.
+ */
+async function connect(path: string, opts: DatabaseOpts = {}): Promise {
+ if (path == ":memory:") {
+ const db = await nativeConnect(path, { tracing: opts.tracing });
+ return new Database(db, [], opts);
+ }
+ await initThreadPool();
+ if (MainWorker == null) {
+ throw new Error("panic: MainWorker is not set");
+ }
+
+ let currentId = workerRequestId;
+ workerRequestId += 2;
+
+ let dbHandlePromise = waitFor(currentId);
+ let walHandlePromise = waitFor(currentId + 1);
+ (MainWorker as any).postMessage({ __turso__: "register", path: `${path}`, id: currentId });
+ (MainWorker as any).postMessage({ __turso__: "register", path: `${path}-wal`, id: currentId + 1 });
+ await Promise.all([dbHandlePromise, walHandlePromise]);
+ const db = await nativeConnect(path, { tracing: opts.tracing });
+ const files = [path, `${path}-wal`];
+ return new Database(db, files, opts);
+}
+
+export { connect, Database, SqliteError }
diff --git a/bindings/javascript/packages/browser/tsconfig.json b/bindings/javascript/packages/browser/tsconfig.json
new file mode 100644
index 000000000..b46abc167
--- /dev/null
+++ b/bindings/javascript/packages/browser/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "skipLibCheck": true,
+ "declaration": true,
+ "declarationMap": true,
+ "module": "nodenext",
+ "target": "esnext",
+ "outDir": "dist/",
+ "lib": [
+ "es2020"
+ ],
+ "paths": {
+ "#index": [
+ "./index.js"
+ ]
+ }
+ },
+ "include": [
+ "*"
+ ]
+}
\ No newline at end of file
diff --git a/bindings/javascript/packages/browser/vitest.config.ts b/bindings/javascript/packages/browser/vitest.config.ts
new file mode 100644
index 000000000..deeaec485
--- /dev/null
+++ b/bindings/javascript/packages/browser/vitest.config.ts
@@ -0,0 +1,23 @@
+import { defineConfig } from 'vitest/config'
+
+export default defineConfig({
+ define: {
+ 'process.env.NODE_DEBUG_NATIVE': 'false',
+ },
+ server: {
+ headers: {
+ "Cross-Origin-Embedder-Policy": "require-corp",
+ "Cross-Origin-Opener-Policy": "same-origin"
+ },
+ },
+ test: {
+ browser: {
+ enabled: true,
+ provider: 'playwright',
+ instances: [
+ { browser: 'chromium' },
+ { browser: 'firefox' }
+ ],
+ },
+ },
+})
diff --git a/bindings/javascript/packages/browser/worker.mjs b/bindings/javascript/packages/browser/worker.mjs
new file mode 100644
index 000000000..9c29d4390
--- /dev/null
+++ b/bindings/javascript/packages/browser/worker.mjs
@@ -0,0 +1,160 @@
+import { instantiateNapiModuleSync, MessageHandler, WASI } from '@napi-rs/wasm-runtime'
+
+var fileByPath = new Map();
+var fileByHandle = new Map();
+let fileHandles = 0;
+var memory = null;
+
+function getUint8ArrayFromWasm(ptr, len) {
+ ptr = ptr >>> 0;
+ return new Uint8Array(memory.buffer).subarray(ptr, ptr + len);
+}
+
+
+async function registerFile(path) {
+ if (fileByPath.has(path)) {
+ return;
+ }
+ const opfsRoot = await navigator.storage.getDirectory();
+ const opfsHandle = await opfsRoot.getFileHandle(path, { create: true });
+ const opfsSync = await opfsHandle.createSyncAccessHandle();
+ fileHandles += 1;
+ fileByPath.set(path, { handle: fileHandles, sync: opfsSync });
+ fileByHandle.set(fileHandles, opfsSync);
+}
+
+async function unregisterFile(path) {
+ const file = fileByPath.get(path);
+ if (file == null) {
+ return;
+ }
+ fileByPath.delete(path);
+ fileByHandle.delete(file.handle);
+ file.sync.close();
+}
+
+function lookup_file(pathPtr, pathLen) {
+ try {
+ const buffer = getUint8ArrayFromWasm(pathPtr, pathLen);
+ const notShared = new Uint8Array(buffer.length);
+ notShared.set(buffer);
+ const decoder = new TextDecoder('utf-8');
+ const path = decoder.decode(notShared);
+ const file = fileByPath.get(path);
+ if (file == null) {
+ return -404;
+ }
+ return file.handle;
+ } catch (e) {
+ console.error('lookupFile', pathPtr, pathLen, e);
+ return -1;
+ }
+}
+function read(handle, bufferPtr, bufferLen, offset) {
+ try {
+ const buffer = getUint8ArrayFromWasm(bufferPtr, bufferLen);
+ const file = fileByHandle.get(Number(handle));
+ const result = file.read(buffer, { at: Number(offset) });
+ return result;
+ } catch (e) {
+ console.error('read', handle, bufferPtr, bufferLen, offset, e);
+ return -1;
+ }
+}
+function write(handle, bufferPtr, bufferLen, offset) {
+ try {
+ const buffer = getUint8ArrayFromWasm(bufferPtr, bufferLen);
+ const file = fileByHandle.get(Number(handle));
+ const result = file.write(buffer, { at: Number(offset) });
+ return result;
+ } catch (e) {
+ console.error('write', handle, bufferPtr, bufferLen, offset, e);
+ return -1;
+ }
+}
+function sync(handle) {
+ try {
+ const file = fileByHandle.get(Number(handle));
+ file.flush();
+ return 0;
+ } catch (e) {
+ console.error('sync', handle, e);
+ return -1;
+ }
+}
+function truncate(handle, size) {
+ try {
+ const file = fileByHandle.get(Number(handle));
+ const result = file.truncate(size);
+ return result;
+ } catch (e) {
+ console.error('truncate', handle, size, e);
+ return -1;
+ }
+}
+function size(handle) {
+ try {
+ const file = fileByHandle.get(Number(handle));
+ const size = file.getSize()
+ return size;
+ } catch (e) {
+ console.error('size', handle, e);
+ return -1;
+ }
+}
+
+const handler = new MessageHandler({
+ onLoad({ wasmModule, wasmMemory }) {
+ memory = wasmMemory;
+ const wasi = new WASI({
+ print: function () {
+ // eslint-disable-next-line no-console
+ console.log.apply(console, arguments)
+ },
+ printErr: function () {
+ // eslint-disable-next-line no-console
+ console.error.apply(console, arguments)
+ },
+ })
+ return instantiateNapiModuleSync(wasmModule, {
+ childThread: true,
+ wasi,
+ overwriteImports(importObject) {
+ importObject.env = {
+ ...importObject.env,
+ ...importObject.napi,
+ ...importObject.emnapi,
+ memory: wasmMemory,
+ is_web_worker: () => true,
+ lookup_file: lookup_file,
+ read: read,
+ write: write,
+ sync: sync,
+ truncate: truncate,
+ size: size,
+ }
+ },
+ })
+ },
+})
+
+globalThis.onmessage = async function (e) {
+ if (e.data.__turso__ == 'register') {
+ try {
+ await registerFile(e.data.path)
+ self.postMessage({ id: e.data.id })
+ } catch (error) {
+ self.postMessage({ id: e.data.id, error: error });
+ }
+ return;
+ } else if (e.data.__turso__ == 'unregister') {
+ try {
+ await unregisterFile(e.data.path)
+ self.postMessage({ id: e.data.id })
+ } catch (error) {
+ self.postMessage({ id: e.data.id, error: error });
+ }
+ return;
+ }
+ handler.handle(e)
+}
diff --git a/bindings/javascript/packages/common/README.md b/bindings/javascript/packages/common/README.md
new file mode 100644
index 000000000..179123f7f
--- /dev/null
+++ b/bindings/javascript/packages/common/README.md
@@ -0,0 +1,8 @@
+## About
+
+This package is the Turso embedded database common JS library which is shared between final builds for Node and Browser.
+
+Do not use this package directly - instead you must use `@tursodatabase/database` or `@tursodatabase/database-browser`.
+
+> **⚠️ Warning:** This software is ALPHA, only use for development, testing, and experimentation. We are working to make it production ready, but do not use it for critical data right now.
+
diff --git a/bindings/javascript/bind.ts b/bindings/javascript/packages/common/bind.ts
similarity index 100%
rename from bindings/javascript/bind.ts
rename to bindings/javascript/packages/common/bind.ts
diff --git a/bindings/javascript/compat.ts b/bindings/javascript/packages/common/compat.ts
similarity index 94%
rename from bindings/javascript/compat.ts
rename to bindings/javascript/packages/common/compat.ts
index 3b99f0772..d7bd493bb 100644
--- a/bindings/javascript/compat.ts
+++ b/bindings/javascript/packages/common/compat.ts
@@ -1,12 +1,6 @@
-import { Database as NativeDB, Statement as NativeStatement } from "#entry-point";
import { bindParams } from "./bind.js";
-
import { SqliteError } from "./sqlite-error.js";
-
-// Step result constants
-const STEP_ROW = 1;
-const STEP_DONE = 2;
-const STEP_IO = 3;
+import { NativeDatabase, NativeStatement, STEP_IO, STEP_ROW, STEP_DONE } from "./types.js";
const convertibleErrorTypes = { TypeError };
const CONVERTIBLE_ERROR_PREFIX = "[TURSO_CONVERT_TYPE]";
@@ -35,7 +29,7 @@ function createErrorByName(name, message) {
* Database represents a connection that can prepare and execute SQL statements.
*/
class Database {
- db: NativeDB;
+ db: NativeDatabase;
memory: boolean;
open: boolean;
private _inTransaction: boolean = false;
@@ -50,15 +44,14 @@ class Database {
* @param {boolean} [opts.fileMustExist=false] - If true, throws if database file does not exist.
* @param {number} [opts.timeout=0] - Timeout duration in milliseconds for database operations. Defaults to 0 (no timeout).
*/
- constructor(path: string, opts: any = {}) {
+ constructor(db: NativeDatabase, opts: any = {}) {
opts.readonly = opts.readonly === undefined ? false : opts.readonly;
opts.fileMustExist =
opts.fileMustExist === undefined ? false : opts.fileMustExist;
opts.timeout = opts.timeout === undefined ? 0 : opts.timeout;
- this.db = new NativeDB(path);
+ this.db = db;
this.memory = this.db.memory;
- const db = this.db;
Object.defineProperties(this, {
inTransaction: {
@@ -66,7 +59,7 @@ class Database {
},
name: {
get() {
- return path;
+ return db.path;
},
},
readonly: {
@@ -199,7 +192,7 @@ class Database {
}
try {
- this.db.batch(sql);
+ this.db.batchSync(sql);
} catch (err) {
throw convertError(err);
}
@@ -301,7 +294,7 @@ class Statement {
this.stmt.reset();
bindParams(this.stmt, bindParameters);
for (; ;) {
- const stepResult = this.stmt.step();
+ const stepResult = this.stmt.stepSync();
if (stepResult === STEP_IO) {
this.db.db.ioLoopSync();
continue;
@@ -330,7 +323,7 @@ class Statement {
this.stmt.reset();
bindParams(this.stmt, bindParameters);
for (; ;) {
- const stepResult = this.stmt.step();
+ const stepResult = this.stmt.stepSync();
if (stepResult === STEP_IO) {
this.db.db.ioLoopSync();
continue;
@@ -354,7 +347,7 @@ class Statement {
bindParams(this.stmt, bindParameters);
while (true) {
- const stepResult = this.stmt.step();
+ const stepResult = this.stmt.stepSync();
if (stepResult === STEP_IO) {
this.db.db.ioLoopSync();
continue;
@@ -378,7 +371,7 @@ class Statement {
bindParams(this.stmt, bindParameters);
const rows: any[] = [];
for (; ;) {
- const stepResult = this.stmt.step();
+ const stepResult = this.stmt.stepSync();
if (stepResult === STEP_IO) {
this.db.db.ioLoopSync();
continue;
@@ -417,4 +410,4 @@ class Statement {
}
}
-export { Database, SqliteError }
\ No newline at end of file
+export { Database, Statement }
\ No newline at end of file
diff --git a/bindings/javascript/packages/common/index.ts b/bindings/javascript/packages/common/index.ts
new file mode 100644
index 000000000..35e092d03
--- /dev/null
+++ b/bindings/javascript/packages/common/index.ts
@@ -0,0 +1,6 @@
+import { NativeDatabase, NativeStatement, DatabaseOpts } from "./types.js";
+import { Database as DatabaseCompat, Statement as StatementCompat } from "./compat.js";
+import { Database as DatabasePromise, Statement as StatementPromise } from "./promise.js";
+import { SqliteError } from "./sqlite-error.js";
+
+export { DatabaseCompat, StatementCompat, DatabasePromise, StatementPromise, NativeDatabase, NativeStatement, SqliteError, DatabaseOpts }
diff --git a/bindings/javascript/packages/common/package.json b/bindings/javascript/packages/common/package.json
new file mode 100644
index 000000000..4a4af4d3c
--- /dev/null
+++ b/bindings/javascript/packages/common/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "@tursodatabase/database-common",
+ "version": "0.1.5-pre.5",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/tursodatabase/turso"
+ },
+ "type": "module",
+ "license": "MIT",
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "packageManager": "yarn@4.9.2",
+ "files": [
+ "dist/**",
+ "README.md"
+ ],
+ "devDependencies": {
+ "typescript": "^5.9.2"
+ },
+ "scripts": {
+ "tsc-build": "npm exec tsc",
+ "build": "npm run tsc-build",
+ "test": "echo 'no tests'"
+ }
+}
diff --git a/bindings/javascript/promise.ts b/bindings/javascript/packages/common/promise.ts
similarity index 88%
rename from bindings/javascript/promise.ts
rename to bindings/javascript/packages/common/promise.ts
index 04df99d9f..e81795833 100644
--- a/bindings/javascript/promise.ts
+++ b/bindings/javascript/packages/common/promise.ts
@@ -1,12 +1,6 @@
-import { Database as NativeDB, Statement as NativeStatement } from "#entry-point";
import { bindParams } from "./bind.js";
-
import { SqliteError } from "./sqlite-error.js";
-
-// Step result constants
-const STEP_ROW = 1;
-const STEP_DONE = 2;
-const STEP_IO = 3;
+import { NativeDatabase, NativeStatement, STEP_IO, STEP_ROW, STEP_DONE, DatabaseOpts } from "./types.js";
const convertibleErrorTypes = { TypeError };
const CONVERTIBLE_ERROR_PREFIX = "[TURSO_CONVERT_TYPE]";
@@ -35,7 +29,7 @@ function createErrorByName(name, message) {
* Database represents a connection that can prepare and execute SQL statements.
*/
class Database {
- db: NativeDB;
+ db: NativeDatabase;
memory: boolean;
open: boolean;
private _inTransaction: boolean = false;
@@ -49,19 +43,18 @@ class Database {
* @param {boolean} [opts.fileMustExist=false] - If true, throws if database file does not exist.
* @param {number} [opts.timeout=0] - Timeout duration in milliseconds for database operations. Defaults to 0 (no timeout).
*/
- constructor(path: string, opts: any = {}) {
+ constructor(db: NativeDatabase, opts: DatabaseOpts = {}) {
opts.readonly = opts.readonly === undefined ? false : opts.readonly;
opts.fileMustExist =
opts.fileMustExist === undefined ? false : opts.fileMustExist;
opts.timeout = opts.timeout === undefined ? 0 : opts.timeout;
- const db = new NativeDB(path);
- this.initialize(db, opts.path, opts.readonly);
+ this.initialize(db, opts.name, opts.readonly);
}
static create() {
return Object.create(this.prototype);
}
- initialize(db: NativeDB, name, readonly) {
+ initialize(db: NativeDatabase, name, readonly) {
this.db = db;
this.memory = db.memory;
Object.defineProperties(this, {
@@ -112,22 +105,22 @@ class Database {
*
* @param {function} fn - The function to wrap in a transaction.
*/
- transaction(fn) {
+ transaction(fn: (...any) => Promise) {
if (typeof fn !== "function")
throw new TypeError("Expected first argument to be a function");
const db = this;
const wrapTxn = (mode) => {
- return (...bindParameters) => {
- db.exec("BEGIN " + mode);
+ return async (...bindParameters) => {
+ await db.exec("BEGIN " + mode);
db._inTransaction = true;
try {
- const result = fn(...bindParameters);
- db.exec("COMMIT");
+ const result = await fn(...bindParameters);
+ await db.exec("COMMIT");
db._inTransaction = false;
return result;
} catch (err) {
- db.exec("ROLLBACK");
+ await db.exec("ROLLBACK");
db._inTransaction = false;
throw err;
}
@@ -147,7 +140,7 @@ class Database {
return properties.default.value;
}
- pragma(source, options) {
+ async pragma(source, options) {
if (options == null) options = {};
if (typeof source !== "string")
@@ -158,8 +151,8 @@ class Database {
const pragma = `PRAGMA ${source}`;
- const stmt = this.prepare(pragma);
- const results = stmt.all();
+ const stmt = await this.prepare(pragma);
+ const results = await stmt.all();
return results;
}
@@ -197,13 +190,13 @@ class Database {
*
* @param {string} sql - The SQL statement string to execute.
*/
- exec(sql) {
+ async exec(sql) {
if (!this.open) {
throw new TypeError("The database connection is not open");
}
try {
- this.db.batch(sql);
+ await this.db.batchAsync(sql);
} catch (err) {
throw convertError(err);
}
@@ -228,7 +221,7 @@ class Database {
/**
* Closes the database connection.
*/
- close() {
+ async close() {
this.db.close();
}
}
@@ -305,7 +298,7 @@ class Statement {
bindParams(this.stmt, bindParameters);
while (true) {
- const stepResult = this.stmt.step();
+ const stepResult = await this.stmt.stepAsync();
if (stepResult === STEP_IO) {
await this.db.db.ioLoopAsync();
continue;
@@ -335,7 +328,7 @@ class Statement {
bindParams(this.stmt, bindParameters);
while (true) {
- const stepResult = this.stmt.step();
+ const stepResult = await this.stmt.stepAsync();
if (stepResult === STEP_IO) {
await this.db.db.ioLoopAsync();
continue;
@@ -359,7 +352,7 @@ class Statement {
bindParams(this.stmt, bindParameters);
while (true) {
- const stepResult = this.stmt.step();
+ const stepResult = await this.stmt.stepAsync();
if (stepResult === STEP_IO) {
await this.db.db.ioLoopAsync();
continue;
@@ -384,7 +377,7 @@ class Statement {
const rows: any[] = [];
while (true) {
- const stepResult = this.stmt.step();
+ const stepResult = await this.stmt.stepAsync();
if (stepResult === STEP_IO) {
await this.db.db.ioLoopAsync();
continue;
@@ -421,17 +414,9 @@ class Statement {
throw convertError(err);
}
}
-}
-/**
- * Creates a new database connection asynchronously.
- *
- * @param {string} path - Path to the database file.
- * @param {Object} opts - Options for database behavior.
- * @returns {Promise} - A promise that resolves to a Database instance.
- */
-async function connect(path: string, opts: any = {}): Promise {
- return new Database(path, opts);
+ close() {
+ this.stmt.finalize();
+ }
}
-
-export { Database, SqliteError, connect }
\ No newline at end of file
+export { Database, Statement }
\ No newline at end of file
diff --git a/bindings/javascript/sqlite-error.ts b/bindings/javascript/packages/common/sqlite-error.ts
similarity index 100%
rename from bindings/javascript/sqlite-error.ts
rename to bindings/javascript/packages/common/sqlite-error.ts
diff --git a/bindings/javascript/tsconfig.json b/bindings/javascript/packages/common/tsconfig.json
similarity index 71%
rename from bindings/javascript/tsconfig.json
rename to bindings/javascript/packages/common/tsconfig.json
index 4722ef092..bf9c13271 100644
--- a/bindings/javascript/tsconfig.json
+++ b/bindings/javascript/packages/common/tsconfig.json
@@ -1,17 +1,14 @@
{
"compilerOptions": {
"skipLibCheck": true,
+ "declaration": true,
+ "declarationMap": true,
"module": "esnext",
"target": "esnext",
"outDir": "dist/",
"lib": [
"es2020"
],
- "paths": {
- "#entry-point": [
- "./index.js"
- ]
- }
},
"include": [
"*"
diff --git a/bindings/javascript/packages/common/types.ts b/bindings/javascript/packages/common/types.ts
new file mode 100644
index 000000000..2b843bb9f
--- /dev/null
+++ b/bindings/javascript/packages/common/types.ts
@@ -0,0 +1,46 @@
+export interface DatabaseOpts {
+ readonly?: boolean,
+ fileMustExist?: boolean,
+ timeout?: number
+ name?: string
+ tracing?: 'info' | 'debug' | 'trace'
+}
+
+export interface NativeDatabase {
+ memory: boolean,
+ path: string,
+ new(path: string): NativeDatabase;
+ batchSync(sql: string);
+ batchAsync(sql: string): Promise;
+
+ ioLoopSync();
+ ioLoopAsync(): Promise;
+
+ prepare(sql: string): NativeStatement;
+
+ pluck(pluckMode: boolean);
+ defaultSafeIntegers(toggle: boolean);
+ totalChanges(): number;
+ changes(): number;
+ lastInsertRowid(): number;
+ close();
+}
+
+
+// Step result constants
+export const STEP_ROW = 1;
+export const STEP_DONE = 2;
+export const STEP_IO = 3;
+
+export interface NativeStatement {
+ stepAsync(): Promise;
+ stepSync(): number;
+
+ pluck(pluckMode: boolean);
+ safeIntegers(toggle: boolean);
+ raw(toggle: boolean);
+ columns(): string[];
+ row(): any;
+ reset();
+ finalize();
+}
\ No newline at end of file
diff --git a/bindings/javascript/packages/native/README.md b/bindings/javascript/packages/native/README.md
new file mode 100644
index 000000000..d5444435c
--- /dev/null
+++ b/bindings/javascript/packages/native/README.md
@@ -0,0 +1,125 @@
+
+
Turso Database for JavaScript in Node
+
+
+
+
+
+
+
+
+
+
+---
+
+## About
+
+This package is the Turso embedded database library for JavaScript in Node.
+
+> **⚠️ Warning:** This software is ALPHA, only use for development, testing, and experimentation. We are working to make it production ready, but do not use it for critical data right now.
+
+## Features
+
+- **SQLite compatible:** SQLite query language and file format support ([status](https://github.com/tursodatabase/turso/blob/main/COMPAT.md)).
+- **In-process**: No network overhead, runs directly in your Node.js process
+- **TypeScript support**: Full TypeScript definitions included
+- **Cross-platform**: Supports Linux (x86 and arm64), macOS, Windows (browser is supported in the separate package `@tursodatabase/database-browser` package)
+
+## Installation
+
+```bash
+npm install @tursodatabase/database
+```
+
+## Getting Started
+
+### In-Memory Database
+
+```javascript
+import { connect } from '@tursodatabase/database';
+
+// Create an in-memory database
+const db = await connect(':memory:');
+
+// Create a table
+await db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)');
+
+// Insert data
+const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
+await insert.run('Alice', 'alice@example.com');
+await insert.run('Bob', 'bob@example.com');
+
+// Query data
+const users = await db.prepare('SELECT * FROM users').all();
+console.log(users);
+// Output: [
+// { id: 1, name: 'Alice', email: 'alice@example.com' },
+// { id: 2, name: 'Bob', email: 'bob@example.com' }
+// ]
+```
+
+### File-Based Database
+
+```javascript
+import { connect } from '@tursodatabase/database';
+
+// Create or open a database file
+const db = await connect('my-database.db');
+
+// Create a table
+await db.exec(`
+ CREATE TABLE IF NOT EXISTS posts (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ title TEXT NOT NULL,
+ content TEXT,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ )
+`);
+
+// Insert a post
+const insertPost = db.prepare('INSERT INTO posts (title, content) VALUES (?, ?)');
+const result = await insertPost.run('Hello World', 'This is my first blog post!');
+
+console.log(`Inserted post with ID: ${result.lastInsertRowid}`);
+```
+
+### Transactions
+
+```javascript
+import { connect } from '@tursodatabase/database';
+
+const db = await connect('transactions.db');
+
+// Using transactions for atomic operations
+const transaction = db.transaction(async (users) => {
+ const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
+ for (const user of users) {
+ await insert.run(user.name, user.email);
+ }
+});
+
+// Execute transaction
+await transaction([
+ { name: 'Alice', email: 'alice@example.com' },
+ { name: 'Bob', email: 'bob@example.com' }
+]);
+```
+
+## API Reference
+
+For complete API documentation, see [JavaScript API Reference](../../../../docs/javascript-api-reference.md).
+
+## Related Packages
+
+* The [@tursodatabase/serverless](https://www.npmjs.com/package/@tursodatabase/serverless) package provides a serverless driver with the same API.
+* The [@tursodatabase/sync](https://www.npmjs.com/package/@tursodatabase/sync) package provides bidirectional sync between a local Turso database and Turso Cloud.
+
+## License
+
+This project is licensed under the [MIT license](../../LICENSE.md).
+
+## Support
+
+- [GitHub Issues](https://github.com/tursodatabase/turso/issues)
+- [Documentation](https://docs.turso.tech)
+- [Discord Community](https://tur.so/discord)
diff --git a/bindings/javascript/packages/native/compat.test.ts b/bindings/javascript/packages/native/compat.test.ts
new file mode 100644
index 000000000..c64d4fc79
--- /dev/null
+++ b/bindings/javascript/packages/native/compat.test.ts
@@ -0,0 +1,67 @@
+import { unlinkSync } from "node:fs";
+import { expect, test } from 'vitest'
+import { Database } from './compat.js'
+
+test('in-memory db', () => {
+ const db = new Database(":memory:");
+ db.exec("CREATE TABLE t(x)");
+ db.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const stmt = db.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ const rows = stmt.all([1]);
+ expect(rows).toEqual([{ x: 1 }, { x: 3 }]);
+})
+
+test('on-disk db', () => {
+ const path = `test-${(Math.random() * 10000) | 0}.db`;
+ try {
+ const db1 = new Database(path);
+ db1.exec("CREATE TABLE t(x)");
+ db1.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const stmt1 = db1.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ expect(stmt1.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows1 = stmt1.all([1]);
+ expect(rows1).toEqual([{ x: 1 }, { x: 3 }]);
+ db1.close();
+
+ const db2 = new Database(path);
+ const stmt2 = db2.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ expect(stmt2.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows2 = stmt2.all([1]);
+ expect(rows2).toEqual([{ x: 1 }, { x: 3 }]);
+ db2.close();
+ } finally {
+ unlinkSync(path);
+ unlinkSync(`${path}-wal`);
+ }
+})
+
+test('attach', () => {
+ const path1 = `test-${(Math.random() * 10000) | 0}.db`;
+ const path2 = `test-${(Math.random() * 10000) | 0}.db`;
+ try {
+ const db1 = new Database(path1);
+ db1.exec("CREATE TABLE t(x)");
+ db1.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const db2 = new Database(path2);
+ db2.exec("CREATE TABLE q(x)");
+ db2.exec("INSERT INTO q VALUES (4), (5), (6)");
+
+ db1.exec(`ATTACH '${path2}' as secondary`);
+
+ const stmt = db1.prepare("SELECT * FROM t UNION ALL SELECT * FROM secondary.q");
+ expect(stmt.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows = stmt.all([1]);
+ expect(rows).toEqual([{ x: 1 }, { x: 2 }, { x: 3 }, { x: 4 }, { x: 5 }, { x: 6 }]);
+ } finally {
+ unlinkSync(path1);
+ unlinkSync(`${path1}-wal`);
+ unlinkSync(path2);
+ unlinkSync(`${path2}-wal`);
+ }
+})
+
+test('blobs', () => {
+ const db = new Database(":memory:");
+ const rows = db.prepare("SELECT x'1020' as x").all();
+ expect(rows).toEqual([{ x: Buffer.from([16, 32]) }])
+})
\ No newline at end of file
diff --git a/bindings/javascript/packages/native/compat.ts b/bindings/javascript/packages/native/compat.ts
new file mode 100644
index 000000000..105d69e85
--- /dev/null
+++ b/bindings/javascript/packages/native/compat.ts
@@ -0,0 +1,10 @@
+import { DatabaseCompat, NativeDatabase, SqliteError, DatabaseOpts } from "@tursodatabase/database-common"
+import { Database as NativeDB } from "#index";
+
+class Database extends DatabaseCompat {
+ constructor(path: string, opts: DatabaseOpts = {}) {
+ super(new NativeDB(path, { tracing: opts.tracing }) as unknown as NativeDatabase, opts)
+ }
+}
+
+export { Database, SqliteError }
diff --git a/bindings/javascript/index.d.ts b/bindings/javascript/packages/native/index.d.ts
similarity index 81%
rename from bindings/javascript/index.d.ts
rename to bindings/javascript/packages/native/index.d.ts
index 14f852afa..1c510cfdc 100644
--- a/bindings/javascript/index.d.ts
+++ b/bindings/javascript/packages/native/index.d.ts
@@ -8,13 +8,13 @@ export declare class Database {
* # Arguments
* * `path` - The path to the database file.
*/
- constructor(path: string)
+ constructor(path: string, opts?: DatabaseOpts | undefined | null)
/** Returns whether the database is in memory-only mode. */
get memory(): boolean
/** Returns whether the database connection is open. */
get open(): boolean
/**
- * Executes a batch of SQL statements.
+ * Executes a batch of SQL statements on main thread
*
* # Arguments
*
@@ -22,7 +22,17 @@ export declare class Database {
*
* # Returns
*/
- batch(sql: string): void
+ batchSync(sql: string): void
+ /**
+ * Executes a batch of SQL statements outside of main thread
+ *
+ * # Arguments
+ *
+ * * `sql` - The SQL statements to execute.
+ *
+ * # Returns
+ */
+ batchAsync(sql: string): Promise
/**
* Prepares a statement for execution.
*
@@ -105,10 +115,15 @@ export declare class Statement {
*/
bindAt(index: number, value: unknown): void
/**
- * Step the statement and return result code:
+ * Step the statement and return result code (executed on the main thread):
* 1 = Row available, 2 = Done, 3 = I/O needed
*/
- step(): number
+ stepSync(): number
+ /**
+ * Step the statement and return result code (executed on the background thread):
+ * 1 = Row available, 2 = Done, 3 = I/O needed
+ */
+ stepAsync(): Promise
/** Get the current row data according to the presentation mode */
row(): unknown
/** Sets the presentation mode to raw. */
@@ -128,3 +143,7 @@ export declare class Statement {
/** Finalizes the statement. */
finalize(): void
}
+
+export interface DatabaseOpts {
+ tracing?: string
+}
diff --git a/bindings/javascript/packages/native/index.js b/bindings/javascript/packages/native/index.js
new file mode 100644
index 000000000..d69167a1a
--- /dev/null
+++ b/bindings/javascript/packages/native/index.js
@@ -0,0 +1,513 @@
+// prettier-ignore
+/* eslint-disable */
+// @ts-nocheck
+/* auto-generated by NAPI-RS */
+
+import { createRequire } from 'node:module'
+const require = createRequire(import.meta.url)
+const __dirname = new URL('.', import.meta.url).pathname
+
+const { readFileSync } = require('node:fs')
+let nativeBinding = null
+const loadErrors = []
+
+const isMusl = () => {
+ let musl = false
+ if (process.platform === 'linux') {
+ musl = isMuslFromFilesystem()
+ if (musl === null) {
+ musl = isMuslFromReport()
+ }
+ if (musl === null) {
+ musl = isMuslFromChildProcess()
+ }
+ }
+ return musl
+}
+
+const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
+
+const isMuslFromFilesystem = () => {
+ try {
+ return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
+ } catch {
+ return null
+ }
+}
+
+const isMuslFromReport = () => {
+ let report = null
+ if (typeof process.report?.getReport === 'function') {
+ process.report.excludeNetwork = true
+ report = process.report.getReport()
+ }
+ if (!report) {
+ return null
+ }
+ if (report.header && report.header.glibcVersionRuntime) {
+ return false
+ }
+ if (Array.isArray(report.sharedObjects)) {
+ if (report.sharedObjects.some(isFileMusl)) {
+ return true
+ }
+ }
+ return false
+}
+
+const isMuslFromChildProcess = () => {
+ try {
+ return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
+ } catch (e) {
+ // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
+ return false
+ }
+}
+
+function requireNative() {
+ if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) {
+ try {
+ nativeBinding = require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
+ } catch (err) {
+ loadErrors.push(err)
+ }
+ } else if (process.platform === 'android') {
+ if (process.arch === 'arm64') {
+ try {
+ return require('./turso.android-arm64.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-android-arm64')
+ const bindingPackageVersion = require('@tursodatabase/database-android-arm64/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else if (process.arch === 'arm') {
+ try {
+ return require('./turso.android-arm-eabi.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-android-arm-eabi')
+ const bindingPackageVersion = require('@tursodatabase/database-android-arm-eabi/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
+ }
+ } else if (process.platform === 'win32') {
+ if (process.arch === 'x64') {
+ try {
+ return require('./turso.win32-x64-msvc.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-win32-x64-msvc')
+ const bindingPackageVersion = require('@tursodatabase/database-win32-x64-msvc/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else if (process.arch === 'ia32') {
+ try {
+ return require('./turso.win32-ia32-msvc.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-win32-ia32-msvc')
+ const bindingPackageVersion = require('@tursodatabase/database-win32-ia32-msvc/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else if (process.arch === 'arm64') {
+ try {
+ return require('./turso.win32-arm64-msvc.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-win32-arm64-msvc')
+ const bindingPackageVersion = require('@tursodatabase/database-win32-arm64-msvc/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
+ }
+ } else if (process.platform === 'darwin') {
+ try {
+ return require('./turso.darwin-universal.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-darwin-universal')
+ const bindingPackageVersion = require('@tursodatabase/database-darwin-universal/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ if (process.arch === 'x64') {
+ try {
+ return require('./turso.darwin-x64.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-darwin-x64')
+ const bindingPackageVersion = require('@tursodatabase/database-darwin-x64/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else if (process.arch === 'arm64') {
+ try {
+ return require('./turso.darwin-arm64.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-darwin-arm64')
+ const bindingPackageVersion = require('@tursodatabase/database-darwin-arm64/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
+ }
+ } else if (process.platform === 'freebsd') {
+ if (process.arch === 'x64') {
+ try {
+ return require('./turso.freebsd-x64.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-freebsd-x64')
+ const bindingPackageVersion = require('@tursodatabase/database-freebsd-x64/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else if (process.arch === 'arm64') {
+ try {
+ return require('./turso.freebsd-arm64.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-freebsd-arm64')
+ const bindingPackageVersion = require('@tursodatabase/database-freebsd-arm64/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
+ }
+ } else if (process.platform === 'linux') {
+ if (process.arch === 'x64') {
+ if (isMusl()) {
+ try {
+ return require('./turso.linux-x64-musl.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-x64-musl')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-x64-musl/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ try {
+ return require('./turso.linux-x64-gnu.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-x64-gnu')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-x64-gnu/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ }
+ } else if (process.arch === 'arm64') {
+ if (isMusl()) {
+ try {
+ return require('./turso.linux-arm64-musl.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-arm64-musl')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-arm64-musl/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ try {
+ return require('./turso.linux-arm64-gnu.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-arm64-gnu')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-arm64-gnu/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ }
+ } else if (process.arch === 'arm') {
+ if (isMusl()) {
+ try {
+ return require('./turso.linux-arm-musleabihf.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-arm-musleabihf')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-arm-musleabihf/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ try {
+ return require('./turso.linux-arm-gnueabihf.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-arm-gnueabihf')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-arm-gnueabihf/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ }
+ } else if (process.arch === 'riscv64') {
+ if (isMusl()) {
+ try {
+ return require('./turso.linux-riscv64-musl.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-riscv64-musl')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-riscv64-musl/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ try {
+ return require('./turso.linux-riscv64-gnu.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-riscv64-gnu')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-riscv64-gnu/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ }
+ } else if (process.arch === 'ppc64') {
+ try {
+ return require('./turso.linux-ppc64-gnu.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-ppc64-gnu')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-ppc64-gnu/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else if (process.arch === 's390x') {
+ try {
+ return require('./turso.linux-s390x-gnu.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-linux-s390x-gnu')
+ const bindingPackageVersion = require('@tursodatabase/database-linux-s390x-gnu/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
+ }
+ } else if (process.platform === 'openharmony') {
+ if (process.arch === 'arm64') {
+ try {
+ return require('./turso.openharmony-arm64.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-openharmony-arm64')
+ const bindingPackageVersion = require('@tursodatabase/database-openharmony-arm64/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else if (process.arch === 'x64') {
+ try {
+ return require('./turso.openharmony-x64.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-openharmony-x64')
+ const bindingPackageVersion = require('@tursodatabase/database-openharmony-x64/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else if (process.arch === 'arm') {
+ try {
+ return require('./turso.openharmony-arm.node')
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ try {
+ const binding = require('@tursodatabase/database-openharmony-arm')
+ const bindingPackageVersion = require('@tursodatabase/database-openharmony-arm/package.json').version
+ if (bindingPackageVersion !== '0.1.5-pre.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
+ throw new Error(`Native binding package version mismatch, expected 0.1.5-pre.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
+ }
+ return binding
+ } catch (e) {
+ loadErrors.push(e)
+ }
+ } else {
+ loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
+ }
+ } else {
+ loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
+ }
+}
+
+nativeBinding = requireNative()
+
+if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
+ try {
+ nativeBinding = require('./turso.wasi.cjs')
+ } catch (err) {
+ if (process.env.NAPI_RS_FORCE_WASI) {
+ loadErrors.push(err)
+ }
+ }
+ if (!nativeBinding) {
+ try {
+ nativeBinding = require('@tursodatabase/database-wasm32-wasi')
+ } catch (err) {
+ if (process.env.NAPI_RS_FORCE_WASI) {
+ loadErrors.push(err)
+ }
+ }
+ }
+}
+
+if (!nativeBinding) {
+ if (loadErrors.length > 0) {
+ throw new Error(
+ `Cannot find native binding. ` +
+ `npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
+ 'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
+ { cause: loadErrors }
+ )
+ }
+ throw new Error(`Failed to load native binding`)
+}
+
+const { Database, Statement } = nativeBinding
+export { Database }
+export { Statement }
diff --git a/bindings/javascript/packages/native/package.json b/bindings/javascript/packages/native/package.json
new file mode 100644
index 000000000..abd6cfe97
--- /dev/null
+++ b/bindings/javascript/packages/native/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@tursodatabase/database",
+ "version": "0.1.5-pre.5",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/tursodatabase/turso"
+ },
+ "license": "MIT",
+ "module": "./dist/promise.js",
+ "main": "./dist/promise.js",
+ "type": "module",
+ "exports": {
+ ".": "./dist/promise.js",
+ "./compat": "./dist/compat.js"
+ },
+ "files": [
+ "index.js",
+ "dist/**",
+ "README.md"
+ ],
+ "packageManager": "yarn@4.9.2",
+ "devDependencies": {
+ "@napi-rs/cli": "^3.1.5",
+ "@types/node": "^24.3.1",
+ "typescript": "^5.9.2",
+ "vitest": "^3.2.4"
+ },
+ "scripts": {
+ "napi-build": "napi build --platform --release --esm --manifest-path ../../Cargo.toml --output-dir .",
+ "napi-dirs": "napi create-npm-dirs",
+ "napi-artifacts": "napi artifacts --output-dir .",
+ "tsc-build": "npm exec tsc",
+ "build": "npm run napi-build && npm run tsc-build",
+ "test": "vitest --run",
+ "prepublishOnly": "npm run napi-dirs && npm run napi-artifacts && napi prepublish -t npm"
+ },
+ "napi": {
+ "binaryName": "turso",
+ "targets": [
+ "x86_64-unknown-linux-gnu",
+ "x86_64-pc-windows-msvc",
+ "universal-apple-darwin",
+ "aarch64-unknown-linux-gnu"
+ ]
+ },
+ "dependencies": {
+ "@tursodatabase/database-common": "^0.1.5-pre.5"
+ },
+ "imports": {
+ "#index": "./index.js"
+ }
+}
diff --git a/bindings/javascript/packages/native/promise.test.ts b/bindings/javascript/packages/native/promise.test.ts
new file mode 100644
index 000000000..d75e3728e
--- /dev/null
+++ b/bindings/javascript/packages/native/promise.test.ts
@@ -0,0 +1,107 @@
+import { unlinkSync } from "node:fs";
+import { expect, test } from 'vitest'
+import { connect } from './promise.js'
+
+test('in-memory db', async () => {
+ const db = await connect(":memory:");
+ await db.exec("CREATE TABLE t(x)");
+ await db.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const stmt = db.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ const rows = await stmt.all([1]);
+ expect(rows).toEqual([{ x: 1 }, { x: 3 }]);
+})
+
+test('on-disk db', async () => {
+ const path = `test-${(Math.random() * 10000) | 0}.db`;
+ try {
+ const db1 = await connect(path);
+ await db1.exec("CREATE TABLE t(x)");
+ await db1.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const stmt1 = db1.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ expect(stmt1.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows1 = await stmt1.all([1]);
+ expect(rows1).toEqual([{ x: 1 }, { x: 3 }]);
+ db1.close();
+
+ const db2 = await connect(path);
+ const stmt2 = db2.prepare("SELECT * FROM t WHERE x % 2 = ?");
+ expect(stmt2.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows2 = await stmt2.all([1]);
+ expect(rows2).toEqual([{ x: 1 }, { x: 3 }]);
+ db2.close();
+ } finally {
+ unlinkSync(path);
+ unlinkSync(`${path}-wal`);
+ }
+})
+
+test('attach', async () => {
+ const path1 = `test-${(Math.random() * 10000) | 0}.db`;
+ const path2 = `test-${(Math.random() * 10000) | 0}.db`;
+ try {
+ const db1 = await connect(path1);
+ await db1.exec("CREATE TABLE t(x)");
+ await db1.exec("INSERT INTO t VALUES (1), (2), (3)");
+ const db2 = await connect(path2);
+ await db2.exec("CREATE TABLE q(x)");
+ await db2.exec("INSERT INTO q VALUES (4), (5), (6)");
+
+ await db1.exec(`ATTACH '${path2}' as secondary`);
+
+ const stmt = db1.prepare("SELECT * FROM t UNION ALL SELECT * FROM secondary.q");
+ expect(stmt.columns()).toEqual([{ name: "x", column: null, database: null, table: null, type: null }]);
+ const rows = await stmt.all([1]);
+ expect(rows).toEqual([{ x: 1 }, { x: 2 }, { x: 3 }, { x: 4 }, { x: 5 }, { x: 6 }]);
+ } finally {
+ unlinkSync(path1);
+ unlinkSync(`${path1}-wal`);
+ unlinkSync(path2);
+ unlinkSync(`${path2}-wal`);
+ }
+})
+
+test('blobs', async () => {
+ const db = await connect(":memory:");
+ const rows = await db.prepare("SELECT x'1020' as x").all();
+ expect(rows).toEqual([{ x: Buffer.from([16, 32]) }])
+})
+
+
+test('example-1', async () => {
+ const db = await connect(':memory:');
+ await db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)');
+
+ const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
+ await insert.run('Alice', 'alice@example.com');
+ await insert.run('Bob', 'bob@example.com');
+
+ const users = await db.prepare('SELECT * FROM users').all();
+ expect(users).toEqual([
+ { id: 1, name: 'Alice', email: 'alice@example.com' },
+ { id: 2, name: 'Bob', email: 'bob@example.com' }
+ ]);
+})
+
+test('example-2', async () => {
+ const db = await connect(':memory:');
+ await db.exec('CREATE TABLE users (name, email)');
+ // Using transactions for atomic operations
+ const transaction = db.transaction(async (users) => {
+ const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
+ for (const user of users) {
+ await insert.run(user.name, user.email);
+ }
+ });
+
+ // Execute transaction
+ await transaction([
+ { name: 'Alice', email: 'alice@example.com' },
+ { name: 'Bob', email: 'bob@example.com' }
+ ]);
+
+ const rows = await db.prepare('SELECT * FROM users').all();
+ expect(rows).toEqual([
+ { name: 'Alice', email: 'alice@example.com' },
+ { name: 'Bob', email: 'bob@example.com' }
+ ]);
+})
\ No newline at end of file
diff --git a/bindings/javascript/packages/native/promise.ts b/bindings/javascript/packages/native/promise.ts
new file mode 100644
index 000000000..0131381c0
--- /dev/null
+++ b/bindings/javascript/packages/native/promise.ts
@@ -0,0 +1,21 @@
+import { DatabasePromise, NativeDatabase, SqliteError, DatabaseOpts } from "@tursodatabase/database-common"
+import { Database as NativeDB } from "#index";
+
+class Database extends DatabasePromise {
+ constructor(path: string, opts: DatabaseOpts = {}) {
+ super(new NativeDB(path, { tracing: opts.tracing }) as unknown as NativeDatabase, opts)
+ }
+}
+
+/**
+ * Creates a new database connection asynchronously.
+ *
+ * @param {string} path - Path to the database file.
+ * @param {Object} opts - Options for database behavior.
+ * @returns {Promise} - A promise that resolves to a Database instance.
+ */
+async function connect(path: string, opts: any = {}): Promise {
+ return new Database(path, opts);
+}
+
+export { connect, Database, SqliteError }
diff --git a/bindings/javascript/packages/native/tsconfig.json b/bindings/javascript/packages/native/tsconfig.json
new file mode 100644
index 000000000..b46abc167
--- /dev/null
+++ b/bindings/javascript/packages/native/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "skipLibCheck": true,
+ "declaration": true,
+ "declarationMap": true,
+ "module": "nodenext",
+ "target": "esnext",
+ "outDir": "dist/",
+ "lib": [
+ "es2020"
+ ],
+ "paths": {
+ "#index": [
+ "./index.js"
+ ]
+ }
+ },
+ "include": [
+ "*"
+ ]
+}
\ No newline at end of file
diff --git a/bindings/javascript/perf/package-lock.json b/bindings/javascript/perf/package-lock.json
index 8d882350b..bf737b714 100644
--- a/bindings/javascript/perf/package-lock.json
+++ b/bindings/javascript/perf/package-lock.json
@@ -6,28 +6,34 @@
"": {
"name": "turso-perf",
"dependencies": {
- "@tursodatabase/database": "..",
+ "@tursodatabase/database": "../packages/native",
"better-sqlite3": "^9.5.0",
"mitata": "^0.1.11"
}
},
"..": {
+ "workspaces": [
+ "packages/core",
+ "packages/native",
+ "packages/browser"
+ ]
+ },
+ "../packages/native": {
"name": "@tursodatabase/database",
- "version": "0.1.4-pre.4",
+ "version": "0.1.5-pre.3",
"license": "MIT",
- "devDependencies": {
- "@napi-rs/cli": "^3.0.4",
- "@napi-rs/wasm-runtime": "^1.0.1",
- "ava": "^6.0.1",
- "better-sqlite3": "^11.9.1",
- "typescript": "^5.9.2"
+ "dependencies": {
+ "@tursodatabase/database-common": "^0.1.5-pre.3"
},
- "engines": {
- "node": ">= 10"
+ "devDependencies": {
+ "@napi-rs/cli": "^3.1.5",
+ "@types/node": "^24.3.1",
+ "typescript": "^5.9.2",
+ "vitest": "^3.2.4"
}
},
"node_modules/@tursodatabase/database": {
- "resolved": "..",
+ "resolved": "../packages/native",
"link": true
},
"node_modules/base64-js": {
diff --git a/bindings/javascript/perf/package.json b/bindings/javascript/perf/package.json
index 83210e7f5..93e3d789e 100644
--- a/bindings/javascript/perf/package.json
+++ b/bindings/javascript/perf/package.json
@@ -2,9 +2,10 @@
"name": "turso-perf",
"type": "module",
"private": true,
+ "type": "module",
"dependencies": {
"better-sqlite3": "^9.5.0",
- "@tursodatabase/database": "..",
+ "@tursodatabase/database": "../packages/native",
"mitata": "^0.1.11"
}
}
diff --git a/bindings/javascript/perf/perf-turso.js b/bindings/javascript/perf/perf-turso.js
index 24c2fad72..092730265 100644
--- a/bindings/javascript/perf/perf-turso.js
+++ b/bindings/javascript/perf/perf-turso.js
@@ -1,6 +1,6 @@
import { run, bench, group, baseline } from 'mitata';
-import Database from '@tursodatabase/database';
+import { Database } from '@tursodatabase/database/compat';
const db = new Database(':memory:');
diff --git a/bindings/javascript/src/browser.rs b/bindings/javascript/src/browser.rs
new file mode 100644
index 000000000..f9c6bffa9
--- /dev/null
+++ b/bindings/javascript/src/browser.rs
@@ -0,0 +1,254 @@
+use std::sync::Arc;
+
+use napi::bindgen_prelude::*;
+use napi_derive::napi;
+use turso_core::{storage::database::DatabaseFile, Clock, File, Instant, IO};
+
+use crate::{init_tracing, is_memory, Database, DatabaseOpts};
+
+pub struct NoopTask;
+
+impl Task for NoopTask {
+ type Output = ();
+ type JsValue = ();
+ fn compute(&mut self) -> Result {
+ Ok(())
+ }
+ fn resolve(&mut self, _: Env, _: Self::Output) -> Result {
+ Ok(())
+ }
+}
+
+#[napi]
+/// turso-db in the the browser requires explicit thread pool initialization
+/// so, we just put no-op task on the thread pool and force emnapi to allocate web worker
+pub fn init_thread_pool() -> napi::Result> {
+ Ok(AsyncTask::new(NoopTask))
+}
+
+pub struct ConnectTask {
+ path: String,
+ is_memory: bool,
+ io: Arc,
+}
+
+pub struct ConnectResult {
+ db: Arc,
+ conn: Arc,
+}
+
+unsafe impl Send for ConnectResult {}
+
+impl Task for ConnectTask {
+ type Output = ConnectResult;
+ type JsValue = Database;
+
+ fn compute(&mut self) -> Result {
+ let file = self
+ .io
+ .open_file(&self.path, turso_core::OpenFlags::Create, false)
+ .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to open file: {e}")))?;
+
+ let db_file = Arc::new(DatabaseFile::new(file));
+ let db = turso_core::Database::open(self.io.clone(), &self.path, db_file, false, true)
+ .map_err(|e| {
+ Error::new(
+ Status::GenericFailure,
+ format!("Failed to open database: {e}"),
+ )
+ })?;
+
+ let conn = db
+ .connect()
+ .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to connect: {e}")))?;
+
+ Ok(ConnectResult { db, conn })
+ }
+
+ fn resolve(&mut self, _: Env, result: Self::Output) -> Result {
+ Ok(Database::create(
+ Some(result.db),
+ self.io.clone(),
+ result.conn,
+ self.is_memory,
+ ))
+ }
+}
+
+#[napi]
+// we offload connect to the web-worker because:
+// 1. browser main-thread do not support Atomic.wait operations
+// 2. turso-db use blocking IO [io.wait_for_completion(c)] in few places during initialization path
+//
+// so, we offload connect to the worker thread
+pub fn connect(path: String, opts: Option) -> Result> {
+ if let Some(opts) = opts {
+ init_tracing(opts.tracing);
+ }
+ let task = if is_memory(&path) {
+ ConnectTask {
+ io: Arc::new(turso_core::MemoryIO::new()),
+ is_memory: true,
+ path,
+ }
+ } else {
+ let io = Arc::new(Opfs::new()?);
+ ConnectTask {
+ io,
+ is_memory: false,
+ path,
+ }
+ };
+ Ok(AsyncTask::new(task))
+}
+#[napi]
+#[derive(Clone)]
+pub struct Opfs;
+
+#[napi]
+#[derive(Clone)]
+struct OpfsFile {
+ handle: i32,
+}
+
+#[napi]
+impl Opfs {
+ #[napi(constructor)]
+ pub fn new() -> napi::Result {
+ Ok(Self)
+ }
+}
+
+impl Clock for Opfs {
+ fn now(&self) -> Instant {
+ Instant { secs: 0, micros: 0 } // TODO
+ }
+}
+
+#[link(wasm_import_module = "env")]
+extern "C" {
+ fn lookup_file(path: *const u8, path_len: usize) -> i32;
+ fn read(handle: i32, buffer: *mut u8, buffer_len: usize, offset: i32) -> i32;
+ fn write(handle: i32, buffer: *const u8, buffer_len: usize, offset: i32) -> i32;
+ fn sync(handle: i32) -> i32;
+ fn truncate(handle: i32, length: usize) -> i32;
+ fn size(handle: i32) -> i32;
+ fn is_web_worker() -> bool;
+}
+
+fn is_web_worker_safe() -> bool {
+ unsafe { is_web_worker() }
+}
+
+impl IO for Opfs {
+ fn open_file(
+ &self,
+ path: &str,
+ _: turso_core::OpenFlags,
+ _: bool,
+ ) -> turso_core::Result> {
+ tracing::info!("open_file: {}", path);
+ let result = unsafe { lookup_file(path.as_ptr(), path.len()) };
+ if result >= 0 {
+ Ok(Arc::new(OpfsFile { handle: result }))
+ } else if result == -404 {
+ Err(turso_core::LimboError::InternalError(
+ "files must be created in advance for OPFS IO".to_string(),
+ ))
+ } else {
+ Err(turso_core::LimboError::InternalError(format!(
+ "unexpected file lookup error: {result}"
+ )))
+ }
+ }
+
+ fn remove_file(&self, _: &str) -> turso_core::Result<()> {
+ Ok(())
+ }
+}
+
+impl File for OpfsFile {
+ fn lock_file(&self, _: bool) -> turso_core::Result<()> {
+ Ok(())
+ }
+
+ fn unlock_file(&self) -> turso_core::Result<()> {
+ Ok(())
+ }
+
+ fn pread(
+ &self,
+ pos: u64,
+ c: turso_core::Completion,
+ ) -> turso_core::Result {
+ assert!(
+ is_web_worker_safe(),
+ "opfs must be used only from web worker for now"
+ );
+ tracing::debug!("pread({}): pos={}", self.handle, pos);
+ let handle = self.handle;
+ let read_c = c.as_read();
+ let buffer = read_c.buf_arc();
+ let buffer = buffer.as_mut_slice();
+ let result = unsafe { read(handle, buffer.as_mut_ptr(), buffer.len(), pos as i32) };
+ c.complete(result as i32);
+ Ok(c)
+ }
+
+ fn pwrite(
+ &self,
+ pos: u64,
+ buffer: Arc,
+ c: turso_core::Completion,
+ ) -> turso_core::Result {
+ assert!(
+ is_web_worker_safe(),
+ "opfs must be used only from web worker for now"
+ );
+ tracing::debug!("pwrite({}): pos={}", self.handle, pos);
+ let handle = self.handle;
+ let buffer = buffer.as_slice();
+ let result = unsafe { write(handle, buffer.as_ptr(), buffer.len(), pos as i32) };
+ c.complete(result as i32);
+ Ok(c)
+ }
+
+ fn sync(&self, c: turso_core::Completion) -> turso_core::Result {
+ assert!(
+ is_web_worker_safe(),
+ "opfs must be used only from web worker for now"
+ );
+ tracing::debug!("sync({})", self.handle);
+ let handle = self.handle;
+ let result = unsafe { sync(handle) };
+ c.complete(result as i32);
+ Ok(c)
+ }
+
+ fn truncate(
+ &self,
+ len: u64,
+ c: turso_core::Completion,
+ ) -> turso_core::Result {
+ assert!(
+ is_web_worker_safe(),
+ "opfs must be used only from web worker for now"
+ );
+ tracing::debug!("truncate({}): len={}", self.handle, len);
+ let handle = self.handle;
+ let result = unsafe { truncate(handle, len as usize) };
+ c.complete(result as i32);
+ Ok(c)
+ }
+
+ fn size(&self) -> turso_core::Result {
+ assert!(
+ is_web_worker_safe(),
+ "size can be called only from web worker context"
+ );
+ tracing::debug!("size({})", self.handle);
+ let handle = self.handle;
+ let result = unsafe { size(handle) };
+ Ok(result as u64)
+ }
+}
diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs
index 3b0d8a466..928b475ef 100644
--- a/bindings/javascript/src/lib.rs
+++ b/bindings/javascript/src/lib.rs
@@ -10,14 +10,20 @@
//! - Iterating through query results
//! - Managing the I/O event loop
+#[cfg(feature = "browser")]
+pub mod browser;
+
use napi::bindgen_prelude::*;
use napi::{Env, Task};
use napi_derive::napi;
+use std::sync::OnceLock;
use std::{
cell::{Cell, RefCell},
num::NonZeroUsize,
sync::Arc,
};
+use tracing_subscriber::filter::LevelFilter;
+use tracing_subscriber::fmt::format::FmtSpan;
/// Step result constants
const STEP_ROW: u32 = 1;
@@ -38,12 +44,107 @@ enum PresentationMode {
pub struct Database {
_db: Option>,
io: Arc,
- conn: Arc,
+ conn: Option>,
is_memory: bool,
is_open: Cell,
default_safe_integers: Cell,
}
+pub(crate) fn is_memory(path: &str) -> bool {
+ path == ":memory:"
+}
+
+static TRACING_INIT: OnceLock<()> = OnceLock::new();
+pub(crate) fn init_tracing(level_filter: Option) {
+ let Some(level_filter) = level_filter else {
+ return;
+ };
+ let level_filter = match level_filter.as_ref() {
+ "info" => LevelFilter::INFO,
+ "debug" => LevelFilter::DEBUG,
+ "trace" => LevelFilter::TRACE,
+ _ => return,
+ };
+ TRACING_INIT.get_or_init(|| {
+ tracing_subscriber::fmt()
+ .with_ansi(false)
+ .with_thread_ids(true)
+ .with_span_events(FmtSpan::ACTIVE)
+ .with_max_level(level_filter)
+ .init();
+ });
+}
+
+pub enum DbTask {
+ Batch {
+ conn: Arc,
+ sql: String,
+ },
+ Step {
+ stmt: Arc>>,
+ },
+}
+
+unsafe impl Send for DbTask {}
+
+impl Task for DbTask {
+ type Output = u32;
+ type JsValue = u32;
+
+ fn compute(&mut self) -> Result {
+ match self {
+ DbTask::Batch { conn, sql } => {
+ batch_sync(conn, sql)?;
+ Ok(0)
+ }
+ DbTask::Step { stmt } => step_sync(stmt),
+ }
+ }
+
+ fn resolve(&mut self, _: Env, output: Self::Output) -> Result {
+ Ok(output)
+ }
+}
+
+#[napi(object)]
+pub struct DatabaseOpts {
+ pub tracing: Option,
+}
+
+fn batch_sync(conn: &Arc, sql: &str) -> napi::Result<()> {
+ conn.prepare_execute_batch(sql).map_err(|e| {
+ Error::new(
+ Status::GenericFailure,
+ format!("Failed to execute batch: {e}"),
+ )
+ })?;
+ Ok(())
+}
+
+fn step_sync(stmt: &Arc>>) -> napi::Result {
+ let mut stmt_ref = stmt.borrow_mut();
+ let stmt = stmt_ref
+ .as_mut()
+ .ok_or_else(|| Error::new(Status::GenericFailure, "Statement has been finalized"))?;
+
+ match stmt.step() {
+ Ok(turso_core::StepResult::Row) => Ok(STEP_ROW),
+ Ok(turso_core::StepResult::IO) => Ok(STEP_IO),
+ Ok(turso_core::StepResult::Done) => Ok(STEP_DONE),
+ Ok(turso_core::StepResult::Interrupt) => Err(Error::new(
+ Status::GenericFailure,
+ "Statement was interrupted",
+ )),
+ Ok(turso_core::StepResult::Busy) => {
+ Err(Error::new(Status::GenericFailure, "Database is busy"))
+ }
+ Err(e) => Err(Error::new(
+ Status::GenericFailure,
+ format!("Step failed: {e}"),
+ )),
+ }
+}
+
#[napi]
impl Database {
/// Creates a new database instance.
@@ -51,9 +152,11 @@ impl Database {
/// # Arguments
/// * `path` - The path to the database file.
#[napi(constructor)]
- pub fn new(path: String) -> Result {
- let is_memory = path == ":memory:";
- let io: Arc = if is_memory {
+ pub fn new(path: String, opts: Option) -> Result {
+ if let Some(opts) = opts {
+ init_tracing(opts.tracing);
+ }
+ let io: Arc = if is_memory(&path) {
Arc::new(turso_core::MemoryIO::new())
} else {
Arc::new(turso_core::PlatformIO::new().map_err(|e| {
@@ -61,6 +164,11 @@ impl Database {
})?)
};
+ #[cfg(feature = "browser")]
+ if !is_memory(&path) {
+ return Err(Error::new(Status::GenericFailure, "sync constructor is not supported for FS-backed databases in the WASM. Use async connect(...) method instead".to_string()));
+ }
+
let file = io
.open_file(&path, turso_core::OpenFlags::Create, false)
.map_err(|e| Error::new(Status::GenericFailure, format!("Failed to open file: {e}")))?;
@@ -78,7 +186,7 @@ impl Database {
.connect()
.map_err(|e| Error::new(Status::GenericFailure, format!("Failed to connect: {e}")))?;
- Ok(Self::create(Some(db), io, conn, is_memory))
+ Ok(Self::create(Some(db), io, conn, is_memory(&path)))
}
pub fn create(
@@ -90,13 +198,23 @@ impl Database {
Database {
_db: db,
io,
- conn,
+ conn: Some(conn),
is_memory,
is_open: Cell::new(true),
default_safe_integers: Cell::new(false),
}
}
+ fn conn(&self) -> Result> {
+ let Some(conn) = self.conn.as_ref() else {
+ return Err(napi::Error::new(
+ napi::Status::GenericFailure,
+ "connection is not set",
+ ));
+ };
+ Ok(conn.clone())
+ }
+
/// Returns whether the database is in memory-only mode.
#[napi(getter)]
pub fn memory(&self) -> bool {
@@ -109,7 +227,7 @@ impl Database {
self.is_open.get()
}
- /// Executes a batch of SQL statements.
+ /// Executes a batch of SQL statements on main thread
///
/// # Arguments
///
@@ -117,14 +235,23 @@ impl Database {
///
/// # Returns
#[napi]
- pub fn batch(&self, sql: String) -> Result<()> {
- self.conn.prepare_execute_batch(&sql).map_err(|e| {
- Error::new(
- Status::GenericFailure,
- format!("Failed to execute batch: {e}"),
- )
- })?;
- Ok(())
+ pub fn batch_sync(&self, sql: String) -> Result<()> {
+ batch_sync(&self.conn()?, &sql)
+ }
+
+ /// Executes a batch of SQL statements outside of main thread
+ ///
+ /// # Arguments
+ ///
+ /// * `sql` - The SQL statements to execute.
+ ///
+ /// # Returns
+ #[napi]
+ pub fn batch_async(&self, sql: String) -> Result> {
+ Ok(AsyncTask::new(DbTask::Batch {
+ conn: self.conn()?.clone(),
+ sql,
+ }))
}
/// Prepares a statement for execution.
@@ -139,14 +266,15 @@ impl Database {
#[napi]
pub fn prepare(&self, sql: String) -> Result {
let stmt = self
- .conn
+ .conn()?
.prepare(&sql)
.map_err(|e| Error::new(Status::GenericFailure, format!("{e}")))?;
let column_names: Vec = (0..stmt.num_columns())
.map(|i| std::ffi::CString::new(stmt.get_column_name(i).to_string()).unwrap())
.collect();
Ok(Statement {
- stmt: RefCell::new(Some(stmt)),
+ #[allow(clippy::arc_with_non_send_sync)]
+ stmt: Arc::new(RefCell::new(Some(stmt))),
column_names,
mode: RefCell::new(PresentationMode::Expanded),
safe_integers: Cell::new(self.default_safe_integers.get()),
@@ -160,7 +288,7 @@ impl Database {
/// The rowid of the last row inserted.
#[napi]
pub fn last_insert_rowid(&self) -> Result {
- Ok(self.conn.last_insert_rowid())
+ Ok(self.conn()?.last_insert_rowid())
}
/// Returns the number of changes made by the last statement.
@@ -170,7 +298,7 @@ impl Database {
/// The number of changes made by the last statement.
#[napi]
pub fn changes(&self) -> Result {
- Ok(self.conn.changes())
+ Ok(self.conn()?.changes())
}
/// Returns the total number of changes made by all statements.
@@ -180,7 +308,7 @@ impl Database {
/// The total number of changes made by all statements.
#[napi]
pub fn total_changes(&self) -> Result {
- Ok(self.conn.total_changes())
+ Ok(self.conn()?.total_changes())
}
/// Closes the database connection.
@@ -189,9 +317,10 @@ impl Database {
///
/// `Ok(())` if the database is closed successfully.
#[napi]
- pub fn close(&self) -> Result<()> {
+ pub fn close(&mut self) -> Result<()> {
self.is_open.set(false);
- // Database close is handled automatically when dropped
+ let _ = self._db.take().unwrap();
+ let _ = self.conn.take().unwrap();
Ok(())
}
@@ -225,7 +354,7 @@ impl Database {
/// A prepared statement.
#[napi]
pub struct Statement {
- stmt: RefCell